commit 7748fbae7bd695bc2316f48f08a3e2b848842850 Author: teamarchive2.fnf.archive.org root Date: Tue Apr 6 21:43:14 2021 +0000 first commit diff --git a/BACKUP/ART100/ABALL.IMG b/BACKUP/ART100/ABALL.IMG new file mode 100644 index 0000000..ce92589 Binary files /dev/null and b/BACKUP/ART100/ABALL.IMG differ diff --git a/BACKUP/ART100/ANEWP.IMG b/BACKUP/ART100/ANEWP.IMG new file mode 100644 index 0000000..e18fbc6 Binary files /dev/null and b/BACKUP/ART100/ANEWP.IMG differ diff --git a/BACKUP/ART100/ARROWS.IMG b/BACKUP/ART100/ARROWS.IMG new file mode 100644 index 0000000..c8e515c Binary files /dev/null and b/BACKUP/ART100/ARROWS.IMG differ diff --git a/BACKUP/ART100/ARROWSN.IMG b/BACKUP/ART100/ARROWSN.IMG new file mode 100644 index 0000000..0814cba Binary files /dev/null and b/BACKUP/ART100/ARROWSN.IMG differ diff --git a/BACKUP/ART100/ATTBAR2.IMG b/BACKUP/ART100/ATTBAR2.IMG new file mode 100644 index 0000000..0308972 Binary files /dev/null and b/BACKUP/ART100/ATTBAR2.IMG differ diff --git a/BACKUP/ART100/ATTRACT.BDB b/BACKUP/ART100/ATTRACT.BDB new file mode 100644 index 0000000..3657a80 --- /dev/null +++ b/BACKUP/ART100/ATTRACT.BDB @@ -0,0 +1,6 @@ +ATTRACT 2000 1000 255 1 1 4 +ATTRACT 229 699 195 511 +4000 272 229 0 0 +4000 272 354 3 0 +4000 472 229 6 0 +4000 472 354 9 0 diff --git a/BACKUP/ART100/ATTRACT.BDD b/BACKUP/ART100/ATTRACT.BDD new file mode 100644 index 0000000..0ceb4e3 --- /dev/null +++ b/BACKUP/ART100/ATTRACT.BDD @@ -0,0 +1,127 @@ +4 +0 200 125 1 + #%('('('('(''$" !$'''''((''''&'%"  + + + + + +  +!#$&''('''('(&#  !#&'''('(''&'&'$!  +  !"#&'('('''('%"  "%''('(''&'&'&#! +   + !!#%('(''''''$  !$'(('''''&''%#!   !#$''('''('&# "$'''''&&''&'$#  !"$&''''(''$" + !$&'''&''&'''$"!"$%''''''&$! "#%''''&''''&#! !"#%''''''&#   !"$&''&'''''%#  !"#%&(''''%#   !#%''''&'''$! !"$&'''''%"!"%''&''''&"  !#$&'''&&$" "$&''''''%"!!##%&'''&#  "$%'''''&#!  !"##%'''$"  "#%''''&%#!  ! !#%'&&#" !"#%''''&%#! !#%'&%"!!  !#%&''&'$#! !#$%&$"!!!!"$&''&&$#! !"#%&$##" !"#%&'&&#"!  !"$%%$$!  !!"$&''%$"!  "%%%$#! !"$%''%$""!!#%%%#!!  !#%'&%$#"!"%&%%#"! !#%'&$##!!#%&%$#"!  "#%'&%#"  #$%$#$#!! !!"#%&%%$! "#$$###"!  !##%%&$" "####""""!  !##$%%#!!"""!"!!""!  !"#%$$" !"!!!!!!!!!!!!  !!#$$#"! "!! !!!!!!!!! !!"####! !!  !!!!"!!!""###!    !!""  !"""##"!   !   !!"!!!"""""#!   !!!!!!  !!""""!!!  !!!"!!  !!!!!!!  !!""!  !!!!!  ! !"!!  !!!  ! !"!! !  !!  !!"!!!    !!!      !!  !    !!!    !!!    !   !!!     !!!! !!    ! !!  !!!  !    !   !      ! !!      !    !    !  !!     !!      ! !"!   ! !!"!      !! !!  !      ! !!  !      !!   !!       ! !  !       !   !    !   !   !! !  !  !!   !  !  ! !   ! !!!!!    !  !  ! !!  !   !!!       !   !!  !   !""      !   ! !"!    !  !!   "#"!!     !! !  !!!!    !  !!  !""!    !  !!!! !!! !!! !   """      ! !! !!! !!!! !!  !!!!"##!           "!!   !"! !!! !#$#! !!!   !      !! !!! !"! !!   !#$#"  !!!!   !!      !  !!!  !!!  !!   "###"! !!!!  !        !!  !!!  !!!   "#$$! ! !!!      !  !  !   !"!!!!   !###!  !!  !        !   !  ""!  !!!  !"##!  !  ! !           ! !!!!! !"!  !!"! "###! !!!   ! !!     !     !! !!!!!!"! !"! !"! !!   !###!!!!!"!  !! !!!! !        ! !!!!!! !"#!  !!! !!!  !###"! !!!!!  !   !! !!!! !!     !    !!    ""!"!! "#"!  ! !!!! !!  "###"!!!!! !   !!!!""!!!     !    !!  !  """"!  ""!  !!!"!  !  !"#" !!"!!   !""!       !!!   !  !!    """! !""!  !!   !""! !"""!   !""!     !!   !!  !!  !!  !!    "!!!"#!  !   !""! !!"!!   !!!""!   !! !! !!!  !!! !!!! !! !!"    "!  ""!  !!  !##! ! !!""!   !  ! !!!!   !!!!   !"! !!! !!"!! !!   !!!   ! !""! !!!!  #$# !!! !!!!!  !!  !!! !!! ! !!!!   !"! !!! !!""!!!!!  !!!     !##"!  !!  !"##! !!! !!!! !! !!    !!!  ! !!!!!  !  !!!  !! !!""!!!!   !! !!   !##"!  !!!   !##"!!  !!  !!!!  !!!!!! !  !!   !!!!!  !!!  !!  !!! !!!!"!!  ! !!!    !"#"! !!!"!  !  !#$$! !!  !!  !!!!  !!  !!!  !!   !!!! !!!  !! "!  !!!""!   !!! !!   ! !###! !!"!!   ! !! !###!! !""  ! !!!!! !!!  !!!   !  !!!!! !!!  !! !!"! !!!!!!!  !!  !! !!  ! !###"!! !!"!"!!  !! ! "##"  !!!""! !!  !!! !!!!! !!!!    !  ! !!!!!!  !"!! !!!! !""!! !!"!"!!  !  !!  !!  !##""!!! !!!""!!     !##" !! !"#"!!!  !!!!!!!!!!!"!! !!  !!!!!!!  !"!  """!!!""!!!!!!!!!!    !!!!!  "##"!!!!!!!!!"!!  !!  !##"! !""!"##"!   !!!!!!!!!! !"!!  !!! ! !!!  !""! !"""! !"""!!!!!!!!   !  !! !! !!##$$"!!!!!""""!!    !!! !### !  !!"!"###"   ! !!! ""#!! !!!  !!!!  !""! !!""!!!!"""!!!!!!!   !  !! !!! !"###""""""""""!!   !!!!#$#!  !! !"""!"##!    ! !!!!!!"##!   !!!  !"!!  !""!! !!"!!!!##"!!!!!!!   !!  !!  !! ###"!!"""""""""!! !!!! "#%$#!!!!!!!! !!"!!"#"!   !!! !!!!!"##!  !!   !!!  !""!! !!"!!!""#"!! !!!   !! !!  !!  !!!  $##!!!"!"!!""!! ! !!!""! "#$$#!!!"!!!!!!!!!"!!!!""!   !!! !!!"!!###!   !!   !"!!   !""!!!!!!!!!"##"!!!!!!  !! !!  !!!!!! $#"!!"""""""!! !!!!!!""! "#$#"!!!!!!!!!!!!! !!!!!!##!   !!!! !!!"!!###!   !!   !!!! !! !""!!!!"!!!!"#""! !!!  !!!!   "!!!!!!! ! ##"""""!!""!! !!!""!""!  "$$##!!"! !!!!!""!!!!!"! !#"!   !"!!! !!""""#$#!   !"!  !""!!!!!!!! !"""!!!"""!!!#"!!!!! ! ! !!!!   !!!!!!!! "###""!!"""!!!"""""""" !"#$$#""""!! !!!"!!!!!!!""!! !""!    !""!!!!!!"!!###! !!! !!"!!!!!""" !""!"""""""!""""! ! !  !!!!  "!!!!!! ####""""""! !!"""""""! "#""!!"""""!!!!!""!!!"!!!!"! !""!   !""! !!""!!!###! !!! !"""!!!""#"!! """"""""""!!!""!!   !!! !  !! !!!!!! ####""#""!!!!"!""""!!!!##!!!""""!!!!!!!"!!!!!!!!!! !""!    !"!!!!"""!!!###"  !!! !"""!!!""#"! !""##""""""!!!""!! !   !!!!!  !  !!! """""###"!!"""""""! !"##! !"""!!!!!!!!!""!!!!""!!! !""! !!"! !"""""!!"$#!  !!!  !"""!!!""#"" !"###"""""!! !!"!!  !!!    !!!"!   !" """"###!!!"""!"""!!"#"! !"""! !!!! !!""!!""""!!! "!!  !"""!""###!!!###!   !!  !""!!!!"""!! !###"##""!! !!!! !!!  !  !!!!!!  !!!#$####"!!"""!"""! !"##" !"#"!!!!! !!"#""""""!!!!  ""!    !""""####""!!###!  !"!  !""!!!!!""!! !"##"##""!!! !!"! !!!!  !  !!!!!  !!!  ###$#"!!"""""""!  "#$#!  "#"""!!!!!!"##"""""!!!!!  ""!  !  !""""####""!!###!  !"!  !""!"!!!!"!! !"###"##""!! !!"! !"!!   !!  !!!! !!!!""!##$#"""""""""""!  "##"!!!!!  !##""""""!""###!!"!!!!!  "!!   ""#""""###"""###!  !!"#"  """"""!"!"!! !"##""""""!! !!"! !"!!!  ! !  ! !!! !""! ###"!!""""""""!  !"#"!!"#"!!  "###"#"""""###"!!!!!!!"! !"!!  !  !#""""#####""#$#"  !!!"#"  !""""""!""!!!!"#""""""!! !"! !!""! !! !!  !!  !!! !""! $#"!!!""""#""!  !"##! !#""!  "######""""###"! ! !!""! !""!  !  "##"""####"""###" !!!!"##  "##""""""!!! !"#"!!"""!!! !!"! !!""!! !!!! !!  !!!!!  !"! !  "$#""""""###"! !"#$#!  !"""!! !"######"""###""! !!!!"! !"!!  "###"""###"!"#$#"  !!!""##!  !"#""""""!!!!!""!!!!!!"!  !"!! !!!"""! !!"!! !!!  !!!!  !!!  ###""""#####"!  !!"#$#!!!"!  """!!! !"#######"""###!! !!!! !"!! !! !"###"""#"""!"###"  !!!"##"!  !""""""""""!"!!!"!! !!!!! !!"!! !!"""! !!"!! !!!  !!!  !! !##!"!"""####""  ""$$#!!!""""! !#"!!! !!!"########"#"#""!!  !!!!! !""!!! ! !####"##"""!!!###" !!""#$#!  "###"""""""!!!!"! !!!! !""! ! !"""!! !!"! !!!!!!!! ! "##! """"""##"! !!#$$$#!!""""""! !"""!!  !!!"#$#$###"""###"!  !!!! !""!!!! !!! !#######""!!!!###" !!!"""###!  "###"#""#""! !!"!  !!! !""! !!""""!!!""!!! ! !!!!!!"$#!"######""   !#$#$"!"#"""""#"! """!!  !##$$####"#"##"!  !!! !"""!!! !!! !#####""!!!! !###"!!!!!!"####!  !###"#""""! !"!  !!!  """!!!!""#"!!!!"!! !!! !!!! !$$"  ##"####"! !!####! !""""!"""""! "#""!  !##$####"""""#"!  !"!!!##!!!!!!!!!!!"####""!!!! !"##"!!!!!""""#"!!!!! !"#"##""""!  !"!  !!! """!!!"""#""!!!""!!!"! !!!!!##"! ######!  "#$$#!!!""""!!!!!!!!! "#""!    "#$$$#""""""##"!  ""!""""!!!!!!!!!!#####""!! !!"##"!!!!!"!!!"""!! !!! !"###"#"!!!! !!"!  !!!! !!"!!!!"""#""!!!""!!!!!!!!!"$#!!""! $####!  "#$$#"!""#"""""!!!!!"! "##!! !"#$$$##"!!""##"!  !""!!"#"!!!!!"! !"####""!!!!!""##""!!!!"!!!"""!! !"###"""!!!! !!"!  !"!! !"""!""""###"!!!""!!!""! "$$" !""!###"!  "#$$#"!!####"""""!!!!!"" "#"!!! ! !!"#$$##""!!!""##!  "#!!!##"!!!!!"! !"$####"""""""###""!!!"""!""""!! ! !!#####""""!! !""!! !""!! !""""""""###""!!!!!!!!!!$$"!! !""##"! !"#$%$"!!"""##""""""! !!!""! "#"!! !!!!!!"#$$##""!!!""##!  !"""!!"#"!!!!"!! !"#$####""""""###""!!""#"!"##"! !!"####""!!!!! !!"!! !"""!!!"#"""#######"!!!!!! "$#"!!! !"""! !"#$%%$#"""""""#""""""!! !!""! "##!!!!!!! !##$##""!!!""#""! !"!!"###"""""!!!"#$##"##"###"###"!!""#######"! !!! !"####""!!!!!! !!"!! !!!"!!!!!#""""######""""!!#$#! !""! !"!  !!#$$#""#$#"!!!"""""""#"! !"" !"##"!!!!!! !"####""!!!!"#""!! !!""!!"##""!!"!!! "#####"#####"###""""########"!!! !!"####"!!!!!!! !!"! !"""!! !"#""""######"""!"$$"  !!""! "! !!!!!"#$##" !#$##""!"""#""""#"! !!"  "##"!!!!!! !"$##"""!!!!""""!!! !!""""###""!"""! "#####""####"###""""####"###"! !! !"$##""! !!  !"!!!""""!!!!"####"#"####"!"$#"!!  !"#"! !!!!!!!!"#$$#!!!""#$##""""""##"###"!  !!  "##"!! !!! !"###""""!!!!""!!! !"#""#$##""!"""!  "####"""###""#####""#####"##!!!!!! !"###"!!!  !"!!!""!"!!!!"##""##"###!"$#!!""!! !"#"!!!!!!!!"#$%#! !"#""#$$##""""####"##"! !! "###"!!!! !"###""#""!!!""!! !!"#####$""!""""! !####"#""##"!#####""####"##"!!!!!! !!"###"!  !!"!!"""""!!"######"#"!"$#"!!!"""! !!##"!!!!!!"#$$#"!!!"##""#$$##""""########!  !  "###""!!!  !"###"###"!!!"!! !!"######$#"!"###! "####"#"""""!"###"#"####""##!!!!!!! !"###"!!  !""!""""""!!"######"! #$#! !!!!"""! !##!"""""#%%#!!!!"""""""#$$###"#""###$###!  ! "###"! !! !###"""###! !""!! !!!"###""$$#!!"###"  "#####"###""!"###""###$#####!!!"""!!!"###"! !!!  !""""""""""!"#$##"! #$$! !!!"""!! "#""""#$%%%#""""""!"""!!"$$#####""#######" !  "###"!! !! !"##"""""" !!"""!!!!"###"#$$"!!""##"  "######"""""!"#####"##$#####!!!"""!  "##""!!!!!!! !"""""""""!!"###! #$$"!  ! !"""!!!"""##$$%$$####""""!!""!!##$####"######$##"!! !!!  "###!! !!"!!!"#""!!!!! !"##""""!"###"#$#"!!""""" !"#########"!!"########$####"!!"##"!  !"##"!!!!!!  !"#"""!""#"!"#" #%$"!"! ! !!"""!!!###$$%$###$##""""!!!""!!#$$####"######$$#"!!!!!!  "##""! !!!! "#""! ! "##"""""""#####$#"!!!!"""! "##$#####""!!"####"###$###$#"""##"!  !"#""!!!!!! !"###"""#"""! #%$"!!"""!!!! !!!!""! $$$%%$"""#$$$##""!!!"""!!"$$####$$$#####$$""!!!!!  "##"!! !!! "##!! ! !""#"""""!"####$$$"!!!!"""! "#########"!!"####""##$#####"""#""!  !"#""!!!!  !####"####! #%%#""!""""!!!!!!!!!""!$$&%$"!"##$$###""!"!!"#" !"$$###$$$#####$$##"! !! !"##"!! !! !"##"! ! !!"""""""!"#$$#$$$#!!!!"""! !"#########""!"##############""""""! !!""!!!! !!  !####"#"!!#%%####"""""""!!!!!! !""$%%%"!!"####$###""!!!!"""!!"$$$#####$#####$#""!!!"!! "##"!! !""! !"##"! ! "##""##""##$$#$$$#!!"!"""! "#$$######""""#$############""""""!  """!!!!!!!! !###"" !$%$####""""""""!!!!!!! !"3 200 130 1 +$$%$""!""###$$$##"!! !!""" !"$$##########$$$##""!!"!! !"#""!!!!"" !"###! !! "##""#####$$###$$#"!"!"""!"#$########!!"#$##########$#"!""#"! !!"""!!!!!!!  ""#" !$&%#"##"##"#""""""!!!!!!!!###$##""""####$$##""! !!""" !"$$##"###$####$$##""!!!"! ""#""!!!!! !#$##!!!!!!!"##""#$####$###$$#"!!""""  !#$$#$####"!!"###$#$$#######!"""#"! !!"""""!!!!! !"" !$%%$###########"""""!!!"!!!$###%%$#"#"###$$$$#""! !!""" "#$###########$$#""!!!!!! "#""!!! !!!!!"###""""!!!"##"##$####$####$#"!!""""  "##$#####""!!"#$####$$######""#""!! !""#""!!!!!!!! !$%$###############"#""!!!"!!#$###$$$#"#"####$$$##"!!!"##" !$$$#"###$####$$$"!! !!! "#"""!!! ! !!##$#"""""!"###"##$########$$#!"!!"#"  "#$#######"""##$#$#$$$#$$####""""!!  !###"!!!!"!! !#%%#!"#$$##########""#"!!!!!!$#$##$%%$###""##$$$###"!!!###" !$%$######$#$$$##"!!! !!  !##""! ! !!"#$##""""!"#$#"##$###$$###$$#"""""#"  !#$$########"##$$#$##$$$#$##"""!!!  "###""!""" !#%%##"""#$############"#"" !"$$$$###%$$####""##$$$##!!!"###!"$%$$########$$$#"!! !!"  "#"""!! !!#$$#"""""""#$####$####$#"#$$#"""""#"  "#$$#####$##"#$$###$$$$$####""""!!!  !"##"""! !$%$##$##""#$$#####"#####"""!! !$$$$$##$$%$$#"####$$$$##"!!####!!$$$$$#######$$$#""!!!"!! !##"!! !!##$$#"#"""############$###$$#"""""#"  "#$$##$#######$$$$##$$#$####""""!!  "###"" !$&%#!"#$##"##$############"#""! $$$#####$$%$###"###$$$$#""!""##! !$$$#####$##$$$$##!!!!""!!"""! !!!!"#$$####""##$#####$$$#$###$$#""""##" !"#$$$#####$####$#$$##$$##"##""""!!! !"#" !$&%$#""##$$####$##############""!%%$#####"$$%$######$$$$###!!!"""! "$$$$#######$$$$#"!!""#"!!#"!!  !!!!"#$$###""###$#"#$$$#$#$###$$#"""""#" !##$######$##"##$$####$$#####"#"""!! !"" !$$##$$$#"##$$####$####"#######"#""%%$$#$##""#$%$######$$$$$##!!!!""! "$$$###$$###$$$$#"!!""##!!""!! !!!!!#$$$$##"""##$####$$$#$$###$$##"""##" !"#$$$#$####""##$$$####$########"""!  !$%#!!#$$$#"#$$$#"##$#########$#####$%%$$#######$%$#####$$$$#$#"""!"##"!"$$$$#$%$$##$$$$#"!"""##! !"#!! !! !"#$$###""##$$###$$$$$$$###$$#""""##"  "#$$$##$###!!##$$$####$###$###"""""!! !$$#!!!!#$$$#"##$$#""#$$##"###########$$$$$##""###$%$#####$$$$$###"#"###"! "$%$#$$%%$$#$$$$""!!""##! !#""!  ! !###########$$#"##$##$$$###$$#"""###" !"#$#$######"!#$$$#$$#$#$###""""##""! !$%#"!!!!"#$$#""####"""##$$############$$$%$$#####"#$$$#####$$###$#$######"! "$%$$$$$$$$#$$$$"!!!"###! !##"!  ! !!##$$#####$#$$#######$$$###$%#""""##"!!#$$$#######""##$$#####$##""""!"""" !$%#"!!!"""##$$#"""###""##$$######$#$##$#$$$%$$#"""#"#%%$$###$$$$#$$###""###"! #$%$##$$$$$$$$$#"!!"####! "###!  !!!"#$$$##$$$$#$$#""##$$$$$$#$$$#""""##" !"$$$$$$##$####$$########"""""""" !$&$""!!""""""#$$#"!"#$##"##$$$#######$#$$##$$$$$##""###%$$$####$$$$$#####"###"! "$%$##$$%$$$$$$#"!!#####! "###! !!!!"#$$$$#$$$$##$##"###$$$$$#$$$#""""##" !"$$$$$#$$$####$$########!""""!!$%%###""!"""""#####"""#$$#""#$$#$#####$$$$$###$$$###""""#%$$$####$#$##########""! !#$%$$#$$$$$$$$%#"!!"###"! "##""! !!!!"#$$$#$$$#$##$##"####$$$###$$$""""##"!!#$$$$$$##$##"##$########""#"!$%###$##"""!""""##$##""###$#"##$$####$##$$$$$$##$####"#"#"#%%$####$$#$$$####"#####! !"$%$$$$$$$$#$$$#"!!"""!! "#$#"!!!!!!!"#$$###$$$##$$########$$$##$$#""""##"! !#$$%$$$$#$##"##$###"#####"!"$%#!!"#$###!!""""##$$$#""##$$#""#$$#######$#$#$$##$$###"""""#$$$$###$##$$#$#####$$$#"!!#$%%$$$$$$###$$#!! !!!!! !###"! !!!!!#$$##$$$$##$$###"####$$###$$##""###"! !#$$$$$$$#$#""#$###""####!!$%#!!!!##$$##"""#""###$$##""#$$#""#$$######$#$###$##$$###""!!"#%$$$$$$$$#$$$$#####$$$#"!!#$%%$$$$###"#$$"! !!!! !##""! !!!!!!#$$$#$$$$##$$####""###$###$$##""####! !#$$%$$$$$$##"##$#"""#"!!$$#"!!!!!##$$$##"""""###$$#"!"####""#$$###$#$$##$#$$######""!"!"#$%$#$$$$$$$$#$#####$$##!! #%%$$$$##""##$#"! !!!!! !#$"!!!!""! !#$%$#$###$$$$$###"""##$###$$##""###"! !#$$$$$$$#$#####$###" "$%#!!"""!!!"$$$$##""""""#$$##"!"###"""#$$$###$$$$#$$$$######"!!!""#$%$##$###$#$##$###$$$#"! "$%$$$$##"""##$"! ! "###"!!!""!!"#$%$$###########""""####$#$%##""####! !#$%$%$$$####"##$#"  #%%# !"""!!!##$$##"""#"""##$##!!"####"##$$##$$$$$$$$$%$#####""!!!""#%$$###$#$#$$###########" #$%$$$##""!!"$##! !!"$##"!""""!!"$$%$#$##########""""##$###$%##""####! !#$$$%$$$####"#$#! #%&$"! !!!!"""!!#$$###"""""""##$$#"!"#$####$$$##$$$$$$$$$$$###"#""!!""##%%$###$$#$$$$$#########! #$%$$$##""!!"$$#!! ! ! "#$##"""##"!"#$%$####"##$$#####"######$$%$#####$#"!!#$$%$$$$######! #%%$##"! !!!!"""!!#$$$##"""""""#$$$#""#$$##"#$$$$$$$$#$$$$$$$###"#""!!""#$%%$#$$$#$#$$$#$#$#####"! !#$%$$$##""""#$$#"! !!! !"#$##"""##"!"#$%$$#"###$$$$##""""##$##$$%$#####$#"!!#$%$$$#$##$#! "%%$"####! !!"""!!!"#$$##""!"""""##$$#""#####""$$$%$$$$#$$$#$$$#"###"""""#"$%%%$$#$#$$$#$#$########"!!#$%$$$######$$$#"!!!!!!!  "$##"!""#"!!"$$%$$####$$$%$########$##$$%######$#"!!#$%$$$$$##! "$%#"""####"!!!!""!!!"#$$###"""""""#$$$#"##$##""##%%%$$$$$$$$#$%$#"####"""####%%$$$$###$$$$###$#$####"!!#$%$$$$#####$$$#"!!!!"""  "#$#""""""!!"$%%$$####$$$%$######$$$##$$%$#$###$#"!"#$$%$$$#! #%%#!""""###"""!!!"""!!"#$$$##"#"#""##$$$####$##"""#%&%$$$#$$$$#$%$#######""###$%%$$$$#$#$#$$$#$$###$##" !"$%$$$$$###$$%$$#""""#""! "$$#"!"""""!#$%%$$####$$%%$######$$$##$%%$#####$#"""#$$$$#! #%&#!!!"""""##"""""""""!!"#$$$$$##"##"##$$####$###""#$%&%%$$$$%$##$%%$#####"""####%%$$$$#$#$$$$$$#$$$$$##" !#$%$$$####$$$$$$#""""###! "$$$""""#""""$%%$$###$$%%$$$######$$$##$%$#####$$#""#$$#! #%&%#! ! !!"!"###!""""##"!!"#$%$$$#"#"##"#$$####$####"$%%%%$$$$$%$$#$$$$###""##""##$%%$$$$#$#$$$$$$$$$#$$#"! !#$%$$#$####$$$$##""#####! !"$$##"""#"""#$%$$$##$$$%$$#$######$$##$$%$#####$##"###!!#%&$$##! !!!!"###"#####"""""#$%$$#"""#""##$$$########%$%%%%$$$$%%$##$$$$###"""""###$%%%$$$$$#$$$$#$$$$#$$#"! "$%$$#####$###$$##"#####! !#$%$#"""#"""#$%%$$###$$$#$#$#$#$#$$$$#$%%$#####$##""!!#&%#"#$$#! !!!""##########""""#$%$#""!"#"""#$$$#$#####%$$$%&&$$$$%%%##$$$$####"#""###$%%$$$#$$$$$$$$$$#$#$$#"! !"$%$$######$###$##"##"##! #$$$#"""#"""#$%%$$#######$$$##$$$$$$$$$$%$####$$$#!!#&%$"!!#%$#"!!!!"""##$#########"""#$$##"!!"###"#$$$##$###%%$$%%&%%$$%%$$##$$$$####"###"##$%%$$$$$#$#$$##$$$$$$##"! "$$$$############"""####" !#%$$#"""##"""$$%%$$#####$$$$#$$$$$$$$$$%%$####$$"!#%%$"""""#%$$#"""""#"##$###$#####"!"#$$##"""""##"##$$$####$%%%%%%%%%$$%%$$###$$$$######""#"$%%$$#$$$$$####$$###$##! !$$$$#######$###"""""##"" !#%$##"""###"#$%%%$$#$$$#$$#$#$$$$$%$$$$%%$$$$#!!#&&%#"""""##%%$#""###"########$####"!"$$%$#""""##"##$$$$$##%$%%$$$$%%%$$%%$$#"#$$$#$$$###"""#$%%%$$$$#$##$#$$$###$$#" !$$$$$##########""""!"""!!!#$%##"""##""#$%%%$$###$$$$$###$$$$$$$#$%%%$#"!#&&%$######"##%%##""####"############!!"$$%$#"""####"##%%%$#%%%%%$##$$%%$%%$$$###$%$$$####""""#$&%%$$$$$$$###$####$$##! !$%$$$$##########"!!""##! "#%%##""###"!"$%%%$$####$$$$###$$$$$$$$$%%$"!#%%%$$$$#####"#$$%##""###"""#$######$#"!!"$%%%#"""#######$$$$%&%%$$$###%%$%%%$$###$%$$##$###""###$&%%$$#$$$$$###$$##$$##" !$%$$######"####""!!""""!!"$%%$######!!##%%%$$#$##$$$$##$$$$$$$$#$$" !$%%##$$$$$##""###$%%$"###$##""######$$#$"!!"$%%$#"""#$#####$%$%%%%%$$#"#$%&$$%%%$$##$$$######""""##%%%%$#$$$%$#$#$####$$$#" "$%$$$########$##!!"""#"!!"$%%$##"#""!!#$%%%$###$$#$$$$#$$$$$$$$#" "$%&"!!#$$$$$#######$%$###$$$#"""$#$###$$##"!!"$%%$#""""######$$%%%$$$$####%%%$%%%%$$##$%$$#####""""##%%%%$$$$%%$$$#$$###$$$#"!"$%$$$#$######$##"!"###"!!"$%%$##""##"!"$%%%$$$#$$$%$$$$#$$$$$#! "$%%$"! !#$$$$$$$#####$%%$###$$##""#$$#######"!!"#%%$#"""#######$$$$$$##$$$$$%%%$%%%%$$$#$$$#$#####"""##$%%%$$$$%%%$$#$####$##"! "$%%$$#$#$#######!""###""!"$%%$#""###""##%%%%%$$$$$%%$$#$$$$#" "$%&$###!!!#$$%%$$#$#####%$####$$##"#$$$###$###"!!"#%%$##""#$####$%$$$#$$$%%$$$%%%%%&%%$$$##%$#####$#####$%%&$$#$%%%%$$##$######"!!$$%#$#$##$###$##""#####"!"$%%##"###""!"$%%%%%%%$$$%$$$$$$#! "$%&#"####! !"$$$$$#$##$###$%$#####$####$$$###$$#"!!"$$%$$#"""###"#$$###$$%%%%$$%%%%%%&%%%$##$$$$##$$$##"###$%%$$$$$%$$$$###$####!! !#%$$$###############$##"!"$%$$#####"""##%&%&%$$$$$$%$$$#" !#%&&$#"####"!!"##$$$$##$####$$$$###$$$####$$$$#$$$##"!"#$%$$#""#####$$##$$%%%%%&%%%%%%%%%%%$$$#$%$$$#$#$####$#$&%$$#$$$$$$#######"""" !$%%$#####"###$######$##"!"$%%$##"###""#$%%%%%$$$$%%%$#! !"$&&&%########"!"#$$$$#$#$#####%$####$$$####$$$###$$$#"!"#$%$###"###"$#$#$$%%%%&%%%$$$$%%%%%$$$$#$%%$$####$###$#$&%$$##$$$$$$$##$####""!!#%$$$$$####$$$$##$##$$#"!"$%%$##"###"!"#%&%%%$$$$$%$! !"%&&%$%%$#"#####"!"##$$$########$%%$###$$$####$$$####$##"""$$%$#########$$$%%$$%%%%%$$$%%%%%%%%%$$$%%$$$##$######$$&%%$#$#$$$$$##$#$$$##"! !#%%$$##$###$$$$####$$$#"!"$%%$##"##""""#%%%%%$$$%$" !#$&&%$#$%%$#######"""#$$$$##$#$$##$%%$###$%%$###$$$####$$#""##$%$$#######$$%%%%%%%%%$$$$$&%%$%%%%%$$%%%%$####$$###$$%%%%$$#$$$$$#$#$$$$##"""! !$%%$$$$$$$$$$$$#$#$$$##"!!#%%%$####"!!"#%%%%$$$$" !"$&&$$$###$%$#######"""#$$$###$$$###$%%$###$$%$##$$$##"##$%$#"#$$%$#####$#$%%%%%%%%$$$$$%%$%%%$%&%%%$%$%%$$$####$####$%%&%$##$$#$$$####$##""""!!$%%$$$#$$#$$%$$###$$$#""!!#%%$####$""!"$$%%%$#! !#%&&%##$$$#$%%$#######"!"#$$$###$$$$##$%%$##$$%%$##$$$$###$%$$#"#$$$$$#$#$%%%$%%%%%%$$$%%%%$##$%%%&%&%$%$%%%$$$###$$####%%%%$$#$#$$$#####$$"!!!!!"$%%$$$#$$$$$%$$##$#$$##"""#%%$$#####"""$%%$$! !#$&&%$$$$$$$#$%%$$######"""#$$$$$$$$$$$#$%%$$#$%%%$#$$%$$##$$%$$###$$$$$$$%%%%%%%%%%$%$%%%%$$#"$%%%%&%%%$$$%%%$#$##$####$$$&%%$$##$$#$#######"!!!!! !$%%$$$###$$$$$#$#$$#$$$#""#%%$$###$####$$$! !#%'&%$$$#$#$$$#$%%$####"##"""#$$$$$$$$$$$$$%%$#$$$%%$$$%%%$####$$####$%$$$$%&%%&&%%%%%$%%%&%$$###$%%%&%%%$$$%$%%$$####$#####$&%%$#$$#$$########!!!!""! "$%%$$$$$$$$$$$$$$$$$$$%#""#%%$#$#$$$#$$#" !#%&&&%$$$$$$$$$$##%%$$######"""#$$$##$#$$$$$$%%$$$$%%%$$$%%$$$#$$$$$###$$%$$%%%&%%%%%$$%%%%%$$$$###$%%%%&%%$$$%%%%$$######"#$$%%%%$#$##$$$####$##!!!"#! !"$%%$$#$####$#$$$%$$$$%$$""#$%$####$$$#! !#%&'%$%%$$$$$$#$$###$%$$######"""#$$$##$$$$$$$$%%$$$$%$%$$$%%$$###$$$$###$$%$&%&%%%%%$%%%%%%$$$$$$###$%%%%&%$$$%%%%%%#$####""##$$&%%$$$#$$$$####$$""!""#"! "$%%$$$$$$###$$%$$%$$$$%#""#%$$####$#" !#%&&%$$%%%%$$$$$$$$####%$$######"!"#$$$####$$$$$$%%%$%$$%$$$$%%$$$#$#$$$###$$%%%&%&%%%%%%%%%$#$$$$$$$$$%%%$%%%%$%%%%%%$###$###"##$$&%%$#$$$$$$###$$##"!""#"!!"$%%$$$#$#$$$$$$%$$$$$$$$""#%$#####" !"%&&%$$$$%&%$$$$$###$###$%$$#######""#$%%$$$$$%$$$$%%%$$$$$$%$$%$$$#$#$$$$$##$$&&%%%&%%$%%%%$#$$#$#$$%%%$$$%$%&%%%%%%&%%$$#########$$%%%$$$#$$$####$$$#"!""#"!!"$%%%$$$$$$$$$$$%$$$$$$$#""$%%$$#" !#$&'%%$$$%%%&%$$$##$#$###$$%$$######"""#$%$%$#$$$%$$$%%%$$$#$$%%$%%$$$$$$$$$$$$#&%%%%%%%%%%$#$###$$$$%&%%$$$%%%%&&%%%%%&%%$$$#$###"##$$&%%$#$$#$$####$$##"""###!!#$%%%$$$$$$$$$%$%$$$$$$$#""$%%$" !"%&'&%%%%%$%%%%%$$####$#$$##$%$$#######""#%%$%$$$$%%$$$$%%$$#$$%%%%%%$$#$$$%%$$##%&&%&%%%%%$$$$$###$$%&%%%$##$%&%&&%%$%%%&%%$$$#$$##"###$%%$$##$#$$####$$##""####!!"$%%%%$%$$$$$$$$%%$$$$$$$##$%" !#%&&%%%%%%$%$%%&%%$$#####$$%$$$%$$$$$$###""#$%%%$$$$%%$$$%%%$$$$$%%%%%%$$$$$$$%$# &&&%%%%&%$$$$$##$$$%%%%%%$$##%%&%%%&%$%%%%&%$$$#####"###$%%$$$##$$$####$$$##"####"!"$&%%%%$%$$$$$$$$%$$$$$$$$#" !!#%&&$$%%&%%%$%$%%%&%%$####$$$%$$$%%######$#""#$%%$$$$%%%%$$%&%$$$$$%%%%%%$$$$$$$# &&%%%%%%$$$$$##$$$%%&%%$$$#$$$%%%%&%%%%%$%%%&%$###$##""##$%%%$##$$$$##"#$$$##"####!!"$%&%%%$%%$$#$$%$$$$$$$%#! !#%&&$$#$%%&%%%%%%%%%&%$$#$$##$%$$#$$$####$$##""#$%%$$$%%%%%%$%%%%$#$$%%&%%%%$$$$#&%&%%%$$##$####$$%&%%%%$$$$$%$$$%%%&%%%%%&%&%&%$$#####"###$&%%$##$$$$##"#$$$#""##$#"!"%%%%%%$%$$$$$$%$$$$$$$!!!#%&%$#$$$#%%&%%%%$$%$%%%%$######$$##$%$#$#$$$##""#$%%%$%%&%%%$$%%%$$$$%%%&&%%$$$"&%%%&%$#$$####$$%%%%%%$$##$%%%###%%%%%%%%&%&&%%%$###$#""###$&%%$##$$%$$#"#$$$#####$#!!"%&%%%%%%%$$$$$%$$$$#" !!#%&%#"##$$$$%%&&%%$$$$$%%%$$$###"#$$##$%$##$$$#$#""#$%%%%%%&&%%$$%%%%$%$%%%%%%%$" %%%%%$$$$$#$#$%%&%&%%$$$$%%%%$$#$$%%%%%%%%%&%%&%%$$#$$#"""##$&%%$#$$%%$####$$$#"###$#!!"$%&%%%%$%$$$%%$%$#" !#%'&$##"##$##$%&%&%%%$$$$%%%$$##""##$$##$%$##$##$$#"##$$%%%%%%%%%$$%%%%%%$%%%&%$#  %%%$$$$%$###$%%%%%%$$$%$%%%%$$$$$$%%%%%%%%%%&%%%%$#$$$##"!""#$%&%$#$$$%%$#"#$$#####$$#!!#%&%%%%%%$$$%$%%$" !"#%&&%$#####$$$#$$&&%&%%$$$$%%%$###""##$$##$%$##$$$$$#"#$$%%$%$$$%%%$$%%%%%%$%%%$# !&%$$#$%$$#$$%%&%&%$$$%$%&%%%$$$$$$$%&%%%&%%%%%%%&%%##$###"""##$%%$$##$%$$$###$$$#####$#"!"%%&%%%%$$$%%%$" !#%&%#$%%$####$$#$$$%&%%%%%$$$%%%$###"##$$$##$%$#####$$##"#$%%%$%$%%%%$$%%%%%%%%$# !#%$$$$%%$$#$%%%&%%%$$$%&%%%$$$%$$$#$%%%&%%%%%&&%%%&%%##$$$$#""##$%%%###$%%$$$##$$$####$##! #%&&%%%%%%$$$" "#%&&$""$%%$$#$#$$#$$%%%&&%%%$$$%%%%######$%$#$$%$####$$$$###$$%%%%$%%%$#$%%%$%$$# !#&$##$%%$$#$%%%&%%$$$$%%%%%$$$%$$##$$$$$%&%&%&%%&%&%%%$$#$$$$#####$&%$$##$$%$$$##$$$$#####"!!#%%&&%%%%%$! !"#%'&%$$##$%$$$#$$$$$##$%%%%%%$%$$%%%$$####$$$$##$%$$###$$$###$$%%%%%%$%%%$#%%%%$# !$&&##$%%%$$$%%%&%%%$$%$%&%%$$$$$$$$$%%$$$%%&%%%%%&&%%&%%$$$$%$$###$$$%&$$#$$$%$$#$#$$$$#####"!"#%&%&%%%$" !!#%&%%$%%$#"$%%$#$$$$$###$%&%%%%$$$%%%%%$####$$%$##$%$$###$$%$##$$%%%%$%$%%%$$%%$# !"$%&%##$%%$#$%%&%%%%$%$%%%%%$$$$$$$$$%%%$$$$%%&%%%%%&%%%%&%$$$$$$######$%&%###$%%$$###$$$$######!"#%&&%%%"  !!#%&&$$$%%%$##$$%$#$$$$$###$%%%%%%%$$%%&%$$###$$$$$##%%%$###$$$$##$$%%%%$%$%%$$$$#  !!#%&$#$$$$$#$%%%%&%%%$%%%&%%$$$$$$$$$%&%%$%%%%%&%&%%%&&%%%%%%$#$$$$$#####$%%%$$$$$%%$$##$$%$$$#$##""#%&%%"  !!$%'&$##$$$%%$##$%$$#$$$$$##"$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$$#$%%%%%%%%%%%## !$&%$"#$$$##$%%&&&%%%%%%%&%%$$$$%$$$%%%%%%%%%&%&%&%%&%%&%%$$$%%$$$$$$##"###$%%%$#$$$$%$$##$$%%$$$$$#""$%%# !"#%&&%$$###$$%%$##$%%$$$$$$$###$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$#$$%%%%$%$%%$#  "$%%$""#%$$$$%%&%%%&%%$%%&%%$$$$%$$$%%%%%$%%&%%&%%&&&%&%%&%%$$$$%$$$$$###"###$%%%$$$$%%$$$$$$$%$$#$$$##"#" !"#%&&%$%$$##$$$$%$##$$%$$$$$#$#"##%&%%$$$%%%%%%$$$#$$$$$##$$%%$####$$$$#$%%&%%%$$#  "$%&#""#$%%%%%%&%%%&%%%%%%%%$$$$$$$%%%&%%%%&%%&%%&%%%&&%%&%&%%$$$$$$$$$$$##""##$%%%$$$$$%%$$#$$$%$$$$%%%#!!!"#&'&$#$%%%$##$#$#$###$$$$#$#####"#$%%%%%$$$%%%&%$$##$#$$$###%%%$$###$$$$$$%%%%$$" !"$%%#"###$%%%%%&%%%%%%%%&%&%$##$$%%$%%%%%%%&%%&%%&%%%%%%&%%&%%%%$#$$$$#$$$$$#"""#$%%%$$$%$%%$$##$%$$$%%%$" !"$%'%%$$#$%%%$#$####$#"#$%$$$$$######%%%%%%$$%%%%%%$$##$#$$$$##$%%$$###$$$$$$%%%$#  !"#%%#"####$%%%%&&%&&%%%%&%%%$#$$$%$$%%%%%$%%%%%%&%&%&%%$%%&&%%&%%$$##$$$#$$$$##""##$&&%$%$$%%%$$$$$%%$%%%"  !!"$%'&%$$$$$%%&%%######$$###%%#$#$####$#$%%&%%$%%&%&%%$#$$$$#$$$##%%%$$$$#$%$$$$%$#  !"#%%#""###$$%%&%%%%%%%%%%%&%$$$$%$%%%%%%$$%%%%%%%%%%%%%%$$%%&%&%%%%$$#$$%$$#$$$#"!"#$$%&%%$%$%$%%$$$$%%%$"  !!"#%'&%%%$$$$$%%&%$$##$$$$##"$$%$$$###$##$$%%%&%%%%%%%%%$$$$$$$$$$##%%%%$#$$$$$$$$#  !"$%%#""###$$%%%&&%%%&%%%%&%%%%$%%%%$%&%%%%$%%%%%%&%&%%%%%$#$%%%%&%%%%%$#$$$$$#$$##"""##%%&%$$$%%%%%$$$%%$"  !!"#%&'&&%%%%$%$$%%&%%$$$$$$$###$%%$$$###$###$%%%%$$%%&%%%%$$$$$$$$$$##%%%%$$#$$%%$#  !"$%%#!""##$$$$%&%%&%&%%%%&%%%%%%%%%%%%%%$$$%%%%%%&%&%&%%%$$$$$%&%%&&%%%%$$$%%$$#####"""##%%&%$%$$$%%%%$$$" !!"#%&%%%&&&%%$$$$%%%&%%%%$$$$$$##$%%$$$#"#####$%%%%$$%%&%%%%$$$$$#$$%$#$%%%%$$$$$$# !!"$%%#""###$$%%%%&%&%&&&%&&%&%%$$%%%$%%%%%$%%%%$%%%%&%%%%%%%$%%%%$$%%%&&%%$$#$%%$###$$##""##%%&&%$%$%$%$$#! !!"$%&%#"#%&&%%%%%%%%%&&%%%%$$$$$###$$%$$##"######$%%%$$%%%%%%$$#$###$$%$$$%&%$$$$$#  !!"$&%#""##$$%%%%$&%&%&&%%&%%&%%%$%$$$$%%%$$%%%%%%%%&%%&%%%$$$%%%%###$%%%%%%%%$$$%%$##$$###""#$%%&%%$$$$%$#  !!##&&&$"""#%&%&%&%%%$%%%&%%%$$$$$$$##$%$$##"#$$#! !$%%$$$%%%%%%%$#$$$$#$$%$%%%%$$$# !"$&%#""###$$%%%$$&%%&%&%&&%%%%$%$$$$$%%$$%%%%%%%%%&%&%&%%%$%%%&%$##"#$$%%&%%%%$$%%%$#######""#$%%&%$%%$$#! !"#$%&&$$$#""#%&&%&%%%%%%%%&%%%$%$$$$$""#%$$#####!!$%%%$$%$$%$%%$#$$$$$$%%%%%&%$"  !!"$&%#!"###$$%%%$$#%%&%%&%%&%%$%$$$$$$%%%$$$%&%%%%%&%%&%%%%%%%&%%$####"#$%%%&&%&%%$%&%$#######""##$%&%%%%#! !!"$&&&$%$$$#""#%&&%&%%%%%%%%&%%%$$$$$$##"#$%$$$#"#$%%%$$%$$$%%%$$$$$$$$%%%%%%#! !!"$%%#""###$%%%$$###%&%%%&%&%%%$%$%$$%%%$$$%%&%%%%%&%%&%%$$%%%&%%$##$$####$%%%%&&%%%%%&%$#######""##%%&%%$" !!!$%&&$$$%%$$$""#%&%%&%%%%%%%%&%%%$$$$$%##"#%%$$# #$%%%%%$$$%%%%$$$$$$#$$%$$# !!!"$&%$"####$%%%%$##$$&%&%&%&%%%%%$%$%%%%%$$$%%%%%%&%&%&%%$$%%&%%%###$$#$###%%&%&%%&&%%%%%%$######"""##$&%$" !!"$%&&%$%$%%%%$$#"#%&&%&%%%%%$%%%&%$$$%$%$$""#%%%#! #$%%%%%$$$%%%%$$$$$#$$%$" !!!"$&%$"##$$$%%%%$###$$%&%&&&%%%%$$%$%%%%%$$$%%%%%%%%&%%%%%$%%%%%$###$$$$#$$$$%%&%%%%%%%%%%&&%$#####"""#$$$! !!"$%'%$$%%%%$%%%$##!#%&&%&%%%%%$%%%%%%$%%%$$#""#$%%$#"! "$%%%%%$%%%%%%$$$%$$$#" !!#$&%$"##$#$%%%$$$$$#$%&%&&&%%%%$%$$%%&%%$$$%%%$$%%&%%&&%%%%%%&%%###$$$#$$$%&%%%%%%%%%&%&%%%%%%$$######### !!#$%'&%$$%%%%%%$%%%#"!#%&&%%%%%%%%%&&%%$$$$$$$#""#$&&&$"! "$%&%%%$$%%%%%$$$$$#"!!!#$&&$###$$$%%%%$#$#$$$%%&&&%&%%$$$$%&&%%$$$%%%$$$%&%%&%%%%%%%&%%$##$$$$#$$%%&&%$%%%%%%%&%&%%%&&%$$$$$#$$# !!#$&'&%%%$$%%%%%%$$%$$""#%&&%%%%%%%%%%&%%%$$$$#$#""#%%&%$"! "$%%&%%$%%%%%%$$%$" !!#%&&$"##$$$%%%%$$$$$$%%&&&%%%%%%$$%%%%%%$$$%%%$%%%&%%&%&%%$%%&%%#$$%%$$$$$%%&&%%%$$%&%%$%%%%%&&%%%$$#$$%#  !!#$&&&%%&%%%$$%%%%$%$%$$#"#%&&%%%%&&%%&%%&%%$$#$$$#""#%&&%$"! "$%%%%%%%%&%%%$$" !"#%&&%##$$$$%%%%$$#$$$%%&&&&%&%%$$$$%%&%%$$$%%%%%%%&%&%%&%%%%%&%%##$%%%%$%%%&&&%%%%$#$%%%%$%%%%%&&&%%$$$%#! !"$&'&%%%%%%%$%$%%%%$%%%$$#"#%&&%%&&%&%%&%&%%%$$%$%$##"#$&&&$"! #$%%%%%%%%&%%$" !!#%&&%$$$$%%%%%%$####$$&&&&&&%%%$$%$%%%%%$#$$%%%%%%%&%%&&%&%%%&&%$#$%%%%%%%%&&&%%%%$$##%%&%%%%%%%%%%&%%$%#! !!"$%'&%%%%%&%%%%%$%%$%$$%%$$##$%&&&%%&%%%%%%&&%%$%$%$%#""#$%&&$!! #%%%%%%%%%%%"  !"#%&&%$$$$%%%$%$$$$###$%&&&&%%%%$%%%%%%%%$##$%%%%%%%&%%&&&%%%&&&%$#$%%%%%$%%%&&&&%%$$$$$%&%&&%%%%%%%%%&%%#! !"$%'&&&%%%%%%%%%%%%%%%%$%$%%$##$%&&%%%%%&%&%%%&%%$$$$$$#""#$%&%$"! "$%%&%%%%$" !"#%'&%$$$$%$$$%%$$###$$%%&&%%&%%%%%%%%%%%$$$%%$%%&&&%&%&&%%%%&%%$##$%%%%%$$%%&&%%%%$$$$$%%%%&&%%%%%%%%%%%$! !!"$%&%%%&&&%%&&%&%%&%%%$%%%%%%%$##$%&&%%%%%%%&%&%&%%#$$$$%##"#$&&%$"! #$%%%%$$! !!#%&&&%$$$$$$%%%$$$$#$$%&&&&%$%%%%%%%%%%%$$$%%%%%%%&%&%%%%&%%&&&%##$$%%&%$$%&&&%%%%%$$$%%&%$%%%&%&%%%%%%%$  !"$&&%$$$%&&&%%%&%%%%%%%%%%%%&%&%$""$%&&%%%%%%&%%&%%&$##$$$%$###$&&&$"! "$%%%$! !!$%'&&%$%$$$%%$%$%$$##$%&&&%%$$%%%%&%%%%%%%$%&%&%%%&%%%&%&%%%&%&%$#$%%&%%$%%%&&&&%%$%%%%&%%$$$$$%%%&%%%%%#  !!#$&&&$##$$%&'&&&%&%%%&&%%%%%%%&%%$$#"$%&&&%%%%%%&%%&%%$##$$%%$###$&&&$#!!"$%$" !"#%&&%%%$$$$$$%%%%%$$$$%%&&%%$$$%%%%%%%%%%$$%%%%%&%&%&%&%&%%%%%%%$#$%%&%%%$%%&&&%%%%%%%%%%%%%$$##$%&%%%%%#  !!#$&&%$$$$$$$%&&&%%%%%%%%%%%%%%$%%%%$##"#%&&&&&%%&%&%&%&%$$$$%%%$###$&&&$#! !#" !!#%&&%%%$$##$%%%%%%%$$$%&&'&%$$$$%%%&&%%%%%%%%%%%%%&%&%%&%%%%&&&%$#$%%&%%$$%%&&&%%%%%%%%&&&%%%%$#$$$%&%%%#  !#$&&%$$#$##$$$&&'&%&%%%%%&&%%%%%$%%%$$$""$%&&&%&%%&%%%%%&%%$$$$$%$##$%&&&$#!  !!#%&&%$$$###$%%%%%%%$$%%&&&&%$$$$$%%&%%&%%%$%%%%%%%&%&%&%%%&%&%&%$$$%%%%%%$%%&&&%%%%%%%&&%%%%%%$$$%$$%%&%#  !!#$&'%%$$$$$$##$$%&'&%%%%%%%%&%%%%%$%%%%$$#"$%&&&&%%%&%&%%&%%%$$$$%%$###%%&&$"!! !!$%&%$$$$##$$%&%%&%%%%%%&&&&%$$$$$$&%%&%%%$%%%%%%%%%%&%%%&&%&%&&%$$%%%%%%%%%%&&&%&%%$%%&%&&%%%$$$$$$$%%%%#  !!#$&'&%$$$$%%$$##$%%&&&&%%%%%%&%&%%%%$%$%%$$#"$%&&&&%%%&%%&%&%%%$$$$$$$###%%&%$#!!  !"#%&&$#####$$%%%%%%%%%%%&&&&%$$$$$$$%%&%%%$$%%%%%%%%&&%%&&%%%%&&%$$$%&%&%%$%%&&%&%%%%%%%&&%%%%%$$$$$$%%%$"  !!#$&'&%%&%$$$$%$$##$$%&&&%&%%%%%&%%%%%%$%%%%$$#"#%&&&%%&%&&%%%&%%%$$$$$$$##$%&'&%#!! !#%&%######$$%%%%%%%%%%%%'&&%$$$%%%$%&%%%%%%%%%%%%&&%%%&&%%&%&&&%$$$%&%%%%$&&&%%&%%&%%%&&&%%%%%%$%%%%%&&%# !!#%&'%%%%%&%%$%$$$##$$$$&&&%%&%%%%%&%%%%%$%$%%$$""#%&&&&%&&%&%&%%%%%$$$$$%$$#$%&&%#!!!!!"#%&%####$#$%%%%%$%%%%%%%&&%%$%$%%%%%%&%%%%$%%%&%&%%&%&%%&%&%&&%%%$$%&%%%%%%&&&&%%&%%%&%&%%%%%%%$%%%%%&&%#  !"#%&'&%$%%&%%%$$%$$%$#$$$%&&&%%&%%%&%%&%%%%%$%$%$##"$%&&&%%&&%&%%%%&%%$$$$$%%$$$%%#!!!!!!#%&$#"###$$$%%&%%%%%%$%%&&&$$$$%%%%%%%%%%%%%%&%%&%&&&&%%&%%%&%&%%$$%&%%%%%%&%&%%%&%&%%&&%&%%$%$$%%%$%%&%#  !"#%&'&%%%%%%%&&%$$$$%$$$$$$&&'&&%&%&%%&%%%%%%%%%%$$$###&&&&%&&%%%&&%%%%%$%$$%%%$$#!  !!"#%&%#"##$$$%%%%%%%%%%%%&&&&%%$$%%$$%%%%%%%%%%&%%&%&%&%&%&%&&&&%%$$$%&%%%$%%%%&%%&&%&%%&&&&%$%%%%%%%%%%&$#  !"#%&'&&%&&%%%%%%%%$$%$%%$$$$%%&&&&%%&%&%&%&%%%%%%$$%%$##$%&%&%%%%%%%%%%%%%$%$%%%%#! !!#%&%##$$$%$$%%%%%%%%$$%%&'&&%%%%%$$%%%%$%%%%%%%&%%&%&%%%&%%&&&%%$$$%%%&%%%%&&&%&%%%&%&&&&%%$%%%%%%%%%%&$" !"#%&'&%%%&%%%%%%%&&%%$%%%%%$%%%%&&&%&%&%%%&%&%%%%%$%%%&%$#$&&&%&%%%%%%%%$%%%$%%%%$! !"#%&%###$$%%%%%%%&&%%%$%%&&&%%%%%$$%%%%%$$%%%%%%%%&%&%%&&%%&&&%&%$$$%%%%%%%%&&%&%&&&%%&%&&%%$%%%$%%%%&&%$#  !"#%&'&%&%&%&&&&%%%%%%%$$%%%%%$$$%%&&&%&%%&%%&%%&%%%%$%%&%&$#$&&&%&%%%%%%%%%%%%%$%$! !!#%&%###$%$$%%%%%%%%%%$%%&&&%%%%%%$%$%%%$$$%&%%%%%%%&%%&%%%&%&&&$$$$%%&%%%%%%&%&%%&%%&%&&&%%%%%%%%%%$%%%%#  !!#%&'&%%%&&%&&&%&%%$%%&%%%%%%%%$$%%%&&&%%%%%&%&%%&%%%$$%%&&&$$$%&&%%%%%%%%%%%%%%%#! !"#%&%$##$%$$%%$%%%&%%%$%&&''%%%%%$%%%%&%$#$$&%%%%%&%&&%&&&%&&&&%%$$$%&%%%%%%%&%&%%&%%&%&&&%%%%%&%%%%%%&%%# !!"#%&'&%%%%%%&&&&&&%%%%%%%%%%%%%$$$$$%%&&&&%&%&%%&&%%%%%$%%&%%&$$$&&&&%%%$%%%%%%%%$! !"#%&&##$$%$%%%%%%%%%%%$%%&'&%%%%$$%%%%%%$$$$$%%%%%%%&&%&%%%&%&&&%$$$%%%%%%%%%&&%&%&&%&%&&&%%%%%&%&%%%%%%%#!!!"#%&'&%&%%%%%&&&&&&&%%%$%&&%%%%$$$$%%$%%&&&%&%&%&&%&&%&%%$$$%%%%%$$%&%&%%%%%%%%%%$! !"$%&&##$%%%%%%$%%%%%%%%%%&'&%%$%$$%$%%&%%%$##$%%%&&&&%&&%&%&%&&%%$$%%%%%%%%%&&%&%%&&%%%&&&%&%%%&%&%%%%%&%#!!!"#%&'&%%$$%%%&%&&&&&&%&%%%%&%&%%%$$$$$$%$%&&&%&%%%&&%%&%%%$$#$$%%%$$$&&%&%%%%%&%%#!!!"$%'%$#$%%$%$%$$$%%%%%%%&''&%%$%%%%$%%&%$$$$#$#%%%%&%&&&%&%%&&&&$##$%%%%$%%&&%&%%&&&%&&&&&&%%&%&&&%&%%%%$#  !"#%&&%%%$%$%&%%%%&&%%%&%&%%%%&&%%%%$$$$$$%%%&&&&&%&%%&&&&%&%$$$$$%%%$#$%&&%%%%%%%$! !!"$%&%$#$%$%%$%$$$$%%%%%%&&&&%%%%%$%%%&%%%#$#####%%%&%&&&%&%%&&&&%$$$%%%%%%%&&%&&%&&&&&&%&&%%%&%&&&%&%%&%%# !!"#%&'%%$$%%%%%%&%%%&&&%&&%&&%%%%&%%%%$$$$$$$$%&&&%&%%&%&&%&&&%%$$$$$%%%$$%&&&%%%%$" !!"$%&%$#$%%%%$%$%$%%%%%%%%&&&%$$%$$%%%%&%$$#$##$##%&&%&%%%&%%&&&&%$$$%%%%%$%%&&&%%&%&&&%&&&&%%&%&&%%%%%&%%# !!"#%&&%%$%%%%%&&%%%%%%&%%&&&&%%%%%%&%%%$%%$$$#$%%&&&%&%%&%&&&%&&%%$$$$%%%$$%&&%%%%#! !"#%&%$#$$%$$%$%%$%%%%%%%&''&%%$%%%$%%%&%$$#$$$##$%&%%&%&%&%&&&&%%$#$%%%%%%%%&%&%&%&&&%&&&%&%&&&&&%%$%%%%%# !!"#%&'&$$%%%%&&%%%&%&%%%&&&&&&&&%%$$&&%%%$$%$$#$$$%&&&%&%&%&&&&&&%&%%$$$%%&%$%&&&%$! !!"$&&&$#$$%$$%%%$%%%%%%%&&&'&%%%%%%%%%%%%$$$$$$#$$%&%&%%&%%%&&&&&%$$$%%%%%%%&&&&%&%%&%%&%%&%%&%&&&%%%%$%%$#  !""$%&'%$%$%%&%&%&%%%&%%%%&&&&&&&&%%%$$%&%%%%%$$###$$%&&&%&%&%&&&&&&%%%%$$$%%%%$%&%$! ""$%'%##$$%%$%$%%%%&%%%%&%'&&%%%$%%%%%%%%%$$%$$$#$%&&&%%&%%&&&&&&%%$$%%%%%%%%&&&%%%&&&%&%&&%&%&&&&%%%%%&%$#! !"##%&'%%$$$%%%&%&%%%&%%%%%&&'&&&&&&&%%$%%&%%%$%$$$#$$$%%&&&%%%&%&&&&&&%%%$$$%%%%%%$" !!"$&&%##$$%$$$%%%%%%%&%%%&'&&&%%%%%%%&%&%%%%%%$$$$%&&&&%&%&&&%&&&%%%$%%%%%%%%&&&%%&&%%&&%&&&&%&&%%&%%%%%%%#! !""#%''%%$$%%%%&%&%%&%&%%%&&&&%&&&&&&%&%%%%%&%%%$$%$$$$$$%&&&&%%%%&%&&&&%&%%$%$$%%%$! !!"$%&%##$$$$$%%%%%%%%%%&%&&'&%%%$%$%%%%%%$%%%%$$$$&&&&%%&%&&%&&&&%%$$%%%%%%%&&&&%&%%%&&%&&&&%&&&&%%%%%%%%$#! !""$%&'%%$$$%%%&%&%%%&%%%%&&&&%$%%&&&&&&&%%%%&&%%$%%%$$$%%%%&&&&%%%%%%&&&&&%%%%%$%%$" !!"$%&%###$$$$$%%&%&%%%%&%&&'&%%%%$%%%%&&%%$%%%$###%&&&%%%&&&&&&'&%%$%%%%%%%%%&&&%&%&%&%%&&&&%&%&%&%%%&%%%$$! !""#%''&%$$$%%%&&%%&%&%&%&%&&&%%$#$%%%%&&&&&%%%&&%%$$%%%%%$%%%&'&%&%%%%%&&&&&%%%%%%$" !!#$&&%####$$$$%%&%%%%%%%%&&&&%%%$$%$%%&&%%$%%%$###%%&%$$%&&&%&&&&%%$%%%%%%%%%&&&&&%&%%&&&&&&%&%&%%%%%&%%%$$! !"#$%'&&$$$$%%&&&%%&%&%%%%%&&&%%$$##$%&%&&&&&&%%%&&%%%%%%%%%%%%%&&&&&%%%%%&&&&&%&%&$" !"#$&&&###$$$$$%%&&&&%%%%&&&'&%%$$$$%%%&&%%%%%$$##$%&&%$$$%&&&&&&&%%$%%%&%%%%&&&&&%%&%%&&&&&&&%%&%%%%%%%&%$#! !!"#$%&'&$$$$%%&&&&%&%&%&%%&&&&&%$$$$$$%&&&&&&&&&%%%&&%%%%%%%$%$%$%&&&&%%%&%%&&&&%%%$"  !"#$%'%$##$$%$%%%&&%%%%%%&&&'&%%%$%$%%%&&%$$$%%$##$%&&%%$$%%&&&&&&%%$%&%&%%%%&&&&%%&%%&%&&&&&&&&%%%%%%%&%%%#! !!"#$%''%%%$%%%&&&&%%%&%&%&%&&&&%$$$$%%%%&&'&&%&&&&&%%%&%%%%%%%%%$%%%&&&&&%%&%&&&&&%$" !!""$&'%$##$$$%%%%&&%&%%$%%%&&&&%%%$$%%%&&%%$$%%$#$$%%&%%$$%%%&&&&&%%%%%%%%%%%&&&&&%&%%&%&&&&&&&&%%%%$%%&%&&%"!!!"#$%''%%$$$%&&&&%%%&&%%%%%&&&%$$$$$%%%%%&&&&&&%&&&&&%%&&%%%%%%%%%%%%%&'&&&%%&%%%&&$" !!"#$&&&$$$$$$$%%%&%&%%%%%%&&&%%$%$$$%%%&&&%%%%%$$#$%&&&$$$$%&%&&&&%$%%&%&%%%%%&&&&%&%&%&&&&&&%&&%%%%%$%%%&%%# !""#$%''&%%$$%%&&&&%&&%%&%%%&&%%%$$$$%%%&&&&%&&&&%&%&&%&%%&&&%&&&%%%%%%%%&'&&%&%&%&%$" !!"#$%'&$$$$$%$%%%&%%&%%%%%&''&%%$$$$%%%&&%%%%%%$##%%&&%%%$%%%%&&&&%%$%%%%%&%&&&&&%%&%%%&&&&&&&&&%&%%%$%%%&%&# !""#$%'&&%$$$%%&&&&&%%&&%%%&&&&%%$$$$$%%&&&&&%%%&&&%&%&&&%&&&&%&%&%&%%%%%%%&&'&%&%%&$" !!"#$%'&$##$$$$%%%%%&%%%%%%&&&&%$$$$%%%%&&%%%$%$$$#$%&'&%%$%%%&%%'&%$$%%%&%&%&&&&&%&%%&&%&&&&&%&&&%%%&%&&&&%%# "##$%&'&$$$$%%&&&&&%&&%&&%&&&&%%$$$$$%&&&&&&%%%$%%&&%%%%&&%&&&&%&%&&&%%%%%%&&&&%%&%$" !""#$%'&$$#$#$$%%&%&%%%$%%%&'&&$$$$$%$%&&&&%%%%%$#$$&&&%%$%%%%%&%&&%%$$%%&%&%%&&&&&%%%&%%&&&&&%%%%%&%&%&&&&&%# !"#$%''%$$$$%&&&&&%&&&&&%%&&&&&&%%$$$%%%&&&&%&%%$$%%&&&%&%%&&%&%&%&%&&&&%%%&%%&'&%%%" !!"#$&'&$$$$##$$%%%&%%%%$%%&'&%%$$$$%%%%&&%%%%%%$$$$%&&&$$$$%%%&%&%%%$$%%&%&%%&&&%%%&%&%&&&&&&%%&&%&%&%&&%&%%# !##$%''&%$$%%%&&'&%&&&&%%%%&&&%%%$$$%%%%&&&&%&%&%%%%%&'&&%&%&%&%%&%%&%&&&&&&%&%&&&%%" !""#$&'%$$$$#$$%%&%&%%%$$%%&&'&%$$$$%%%%&&%%$%%%$$$$%&&%%%$%%%%%%%%&%$%%&%%&%&&&&%%%&%%&%&&&&&&&%%%&%%%&&%&&%# "##$%''%%$%$%%&'&&&&&&&%&%&&&%%%%$$$%%%&&&&%%%%%%%&%%%&'&&%&%%&&%%%&&%&%&&&%%&%&%%&%"!!!""#$&'%$$#$$$$%%&&&%&%%%%%&&&%%$$$$%%%&&&%%$%%$%$$$%&&&%$$%%%%%%&&%%%%%&%&%%&&&&%&%&%&%%&&&&&&%&&%&%%&%%&&%%# !""#$%''&%$%$%&&'&&%&&&&&%&&&&%%$$$$%%%%%&&&&%%%%%%%%&&%%&&'&&%&%%&&%%&%%&&&'&&&&&&%$"! !"##%&'%$$$$$$$%%&&&&%%%%%%&&'&%$$$$$%%&&&%%%%%%$$$$%&&%$$$$%%%&&%%&%%%&%%&%&%&&%&%%%&&%&%&&&&&%&&&%%%%%&%%&&" "##$%''&%$%$%&&&&&%&&&'&&%%&&&$$$#$$%%%&&%&%%%%%%%%%&%&&&%&'&&&%%&%%%%%&&%%&&&&&&&%%" !""##$&'%$#$$%$$%%&%&%%&&%&&&''&%%%%$$%%%%&%$$%%%$$$$&&&%%$$$%%%&%%&&&&&&%%&%&%&&%%%%%&&&&%&&&&&&&%&%&%%%%%%%&"!"##$%''&%$%$%%&&&&%&&&&&&&&&&%$$###$%%&%&&&%%%%%%%%%%&&&&&&&&'&&%&%%&%&%&&&%&&'&&&&$" !""##%&'%$#$$%%%%%&&%&%&%%%%&&'&%%%%$$%%&&&%$$%%%$$#$%&&%%$$$%%%&%%&&&&%&%&%%&%&&&%%&&&&&%&&&&&%%&%&&%%&%%%%%%# !""#$&''%%%%$%%&&&&%&&&&%%&&&&%%$#$$$$%%&&&&%%%%%%$%%%&&&&&&&%&&''&%&&%&%&%&%&%&&'&&%"!!""##$&'%$#$%%%$%%&&%%%&&%&%&&'&%$$%$%%%%&&&%%%%%%$#$$%&%%$%%%%&%%&&&&&%&&&%&%%&&&&&%&&&&%%&&&&%&%&&&%&%&&%%%%$! ""##%&'&%%%%%%&&&%%%&&&&%%&&'&%%$$$$%%%%&&&&%%%%%%%$%&%&&&&&&&%&&'&&%&%%&%%&%&%%&&'%$!!""""$%'&%$$%%$$%%%%%&&%&&%&%&'&%$$%%%$%%&&&%%&%%%$$$$%&%%%%%%%%%&%%&&&%&&&6 200 125 1 + + + + "$''(((''''''$"  !$&&&&&'('''('('(''$"  + +  + + +  +  + +   !#&'''''''''&#! "%&&''''''''''(''&#  + +  + + +     #&'('''''''%#! !$&''((''''''(''(%! + +  +    "%(''''''''$"   !$''('''''''('(''$!  + +    #$&'''''''%$"!  + +#%''''''''''(''(&"   + +   "#%'''''''%$#"   +!#%'''''''''''(''%! +  !!$'&'''&'%$#!  +"$%&'''''''''(''&#! + +  !$&''''&&%$!   +!"##%''''''''('''&#!  +  !#%'''''&%#   + + +  + !!"#$&''''''''''&%"  + + + + !#%'''''&$"  + +  !!!"#%&''&''('''''$! +   +  + "$&''''%#!  + + +   "#$%'&'''''''&&#! + + +  "#%'''&$"!   + +  "#$%&''''''&&'%#  + + !#&'''&$#!   + + + !""$%&''''''&'&$!   +   #%'''%$"! +  + +!!!"#%&'''''&''&#!  + +!#$&'&%#"!  + + !"#%&'''&'''&%"!  + +  "#$%&&%#! +  + + !"#$%&'&''&&&$""!   + !"#%'&$#!  !!"#$%&&''&'&&$##!   +  !"$&%$"! !  +  !"##$%'''&&&%%##!  + "#%%#!! !  + !!"#$&&'&&&&%%$"   + "#$$""!!  +  !!#$%&&&&&'&%#!   + !##$#""!  +   !#$%&&&&''%$#!  + !""####!!  + + !"##$%&&&''%$"! + !"#$#"!  +!!##$$&'''&%$"!  + + + !##$#"!!   !"""#%&''(&$#"!  + + + + !#####"!!   !! !#%''('%%#"!  + + + + ""#"##"!   ! !!"$%''''%$#"!   + + !"!!""""!  ! !"#%&&''&&$$!!  + +  !!!!!"#"  !!#$%%&'(&%$#"!!  + +  !!!!!!!"!  "#$%&&''&%$#"!! +  ! !!!! "#$$%&''%%##"! +    !!  #$$%%&&%$##"     !  !#$$%&&%$##!  +  !!  !$$%&%%%#"!  +  !   #%%%&%$#"!  +  !!#%&%%##!!   !!!$%%%$"!  +   !!"! !#$$#"!    !! !""  !##"!     ! !"!  !#"!   !   !""! "!!!   !  !##! !"" !    !"###" !!!!     "#"###"      !   !""""#$$#! !  !    """!!!"#$#"    !!  !"""!!!""#"##"  !     !""! !!""""$#" !! !   !!! !!"""####" ! !!    !!!  !!""##!!"#"! !"     !"!!  !!!!"""! ""! "" !!  !  !!  !!!!###!!   ""   !!! !  !!  !!""##"    ""!   !   !!!  !!!"##"  #"!  !!  !!!! !!""#! "#! !!!   ! !!!! !!! !"#"!  !  #"!! ! !!!!!  !!  !! !!!! !""! !$# !  ""! !!!  !  ! !"!! !!!  !! !!!#%%"!  #" !! ! !"!!!!  !!! !! !"" !!  ##"#$"!  "!  !!!! !"! !!! !!! !!!  "" !! !""!!"#$" !  "! !!!!!! !   !! !!! !!!! !! !!!#" !!##"  "! !!!! !!  !  !!!! !!! !! !!!#" !!##"  "! !!!!  !"! !!!  !!!! !!!!!!! !! ###! ! "#$"  "! !"!  !"! !  !!!!  !!! !!!!  !! !!!#"!""" ! !"#"    ""!!! !  !" !!  ! !!!  !!"!!!!!!  !! !"#! ""!!!  !#$"  !#"   !! !""! !!! !  !"!  !!! !!"  !  !! ""!  !""!!  !#$#   !#"   ! !"""!!!!!!!! !"!!   !!! !!!! !!  !!""! !!  !""!  !##"  !#! !  ""! !!!!!!!"! !!!  !!!! !!!  ! !!"#! !!  ""!  !##"  !#  !""! !!"!!!!!!!   !!   !! ! "#" !!!! !!!  !"#$# !"#!!##" !!"!!!!!      !! ! "$$"! !!""!!"! !"##" !  "#!  """!!!"!"!!!"! !!! !! "$$#""!!!!""#"!!"!! !!"##"   !   ##!  !"#! !"""!!!!"!  !!   !  !$$"!"#"!!!!"##"! "! !!!"$#      #$!   "##"!!"#"!!!!!! !!   !!!!   #$#!!!"#""!!""#""  "!! !!""##  !    #$"  !##"!!###!!!!!!!#! !!  !!"!  "$#!!!!!"""!!!"##"!  "! !!!"#"   !   !  ##!   "#!!!""#"!!!""!!##!!!  !! !!  !"##! !!!!!""""!!"##"" !"!! !!!"#"   !!  !  ##" !"#!! !""!! !!"! !""#$" !!  ! ! "##!! !!! !""""!!"#"""!!!! ! "##   !!! !!!  #$"  !###!"""""!!!!  !""!""$$"  !"! !!  !!$%#! !! !!! !"#""!!""""!  !! !!!!"##   !!  !"!   ##!  """!!#"""!!""! !! """!!!!#$"  !! !! !!!$%$#"!!! ! ! !""""!!""""!  "! !!!!!"##   !!! !"""  ##! !    ""! !!"""""!"!!  !  """!!! !#$" !   !#%%#"""!!! !!! "##"!"!!"""  !! !!!!!!"$#! !"! !!!!"  ##! !  !##! !!"""""""!   !"""!!!!! !!#$#!"!  !!!%%#"""#""!! !!! !!##"!!!""""!!"! !!!! !"$#  !! !"!  !!!"    #$! !!!!   "#! !"#"##"""!  !"#"!!!!!!!!!"$$" !  "" #$#""!!"""!! ! !"!!!"#""""!"""!!!!! ! ! !"#"    ! !!"!  !!!! ! ##! !!!!  !"! !"""#""""!   """!!!!!!!!!!!!"#! !!##""##!!!!!!!""!! !!!"!!!""""!!!!!"!! !!! ! "##!  ! !"! !! !! ##! !  "! !!!""""""!  !"!! !!!!!!!!! !#$" !"#$$" #$#! !!!! !""!! !!""" !"#"!"!!!""!! !! !! !!"$#!   !"!! !!!  ##!  !!!! !"#! !!"""""""!  !"#"! ! !! !!!! !#$# #"##""""! #%#"!!!!!! !""!! !!""" !"""!"!""""!!  !!!!!! !"##    ! !""! !!!! ##! !!"!! !!! !!""""""""! !"##"!"!!!!!!"! !!"#$"####"!!"#$#"#%%#!!! !  !""!!!!!""!! """"!"!!""!! !!!!! !"##!   !!"!! !! !  ##  !!!!!!!!  !""!!!!""! !"#"!""""!!!!""!! !!!"!"#$""$##"! !!"$%%%%$""!!  !"""!!!!"#! !!#""!!!!!"!! !!!!! !"$$!  !!!!"""!!!!  ##  !!!!  !"" !"#"!!!!!! !  !##"!!"#"!! !!! !!!"""""##$" "$##""! !!!"#$$$###"!  !"""!!!!""!! !"""!!!!!!"!!"!!!! !!"$#!  !!! !!!!"""!!!  ## !!!!!!!  !"!! "#""!!!!! !##""!"""!!!""! !!!!!"""! "#!!$%#" !!!!!"!!"####$#"!  """!!""""!!!!""!!!!!!!"!!!!!!! !"##!  !"!! ! !""""!  ## !!!!!!!  !!! !"!!!!!!!  !"#""!!!!!!!"""! !!!!!!!!!!! #%$#!! """!"!!!"#######"  ""!!"!"""" !"""!!!!!""!!!!! ! !"$#!  !!"!! !!""""  #$"  ! !  !"! !!!!!! !! !###"!""""!!"""!!!!!!!"!!!! !$$#"""!!""""""""#""####"! """!"""""! !!"""!!!!!"!!"!!! !!!"$#! !!!!! "## !$$"!!! ! !   !""" !!!!!!!!  ""!  "#$##""""""!"""!! !""!!"""!  #$#"!"##""""""#""!"#"""##"! "#"!""!""" !"""!!!!!"! !"!!!!!!!"##! !""!  !"#!#$" !!!!!!!  !!!!  !!!!!! !  !""! "#$###""""""###! !!"!!!!!"! #%#"!!"###"!"""##"""""!!""#"! "#""""!""! !!!"""! !!!! !!!!!!! !"##! !"!!!  !"!$#!!! !!!!!  !!!!!!!"! !! !""! !"###"""""""""##"!!!!!!"!!"! !$$#!!"""##"!""#""##"""""!"##"!!  "#""""!""" !"""!!!!!!! !"!!!!!!!"##"  !"!! !" #$!!!!!!!!  !!!""##"  !  !!! !"#$#""""""!!"""! !!!"""""" ! #$#""!""""###"""#"###"""""!"##"!   "##""!!""! !""""! !!!  !"!!!! ! "##!  !!!!! !!"" ##!! !!!!!"!  !!!!""! !!!!!  !! !"#$##"""##""""#!! !!"!!!"""  ! !$#""""""!""###"!"#""##""""!!"##"   "#"""!!!"! !!"""!! !!!  !"!! !!!!"##! !!"!!!!!"# #$" ! !"!"!!!! !!!!""! !!!!!  !! "####"""##""###"!!!!""""""!  #$""!""#"""""###"!###""#"""!!!"##"   "#"!""!!"! !"""! !!!  !"!! !!!!"#$! !""""""""!##! !! !"""!"""!"""#"" !!!  !"##$###$##"""###"!!!!"""#"!  #%$""""""#"""#"###""###"###""!!!"#""! !!  "##"""!!!!! !"#"!!! !  !"!!!!!"!"$#! ! !"##""!"!$#  ! !!"!""""""##"! !!!!  !"#$$$#####"""##"!!!!!"""#""  ! !$%$"""""""###""""#$$#####"##"""!!!"##"!  !  "##""!"!!!! !"#""!!!  !"!!!!""""##! ! !"##""!!$#! !! !! !!!!!""""""!!!"!!!!!  !!####$$$###""##"!!!!!!!!"""  ! !$%$"!""#""""####""##$######"##""""!!"###!   "##""!!!!!!!!"#""!!!  ""!!!"#""#$$" !  !"#"""!$#!  !! ! !!!!!""""  !"""!!  ! !!""#"##$$$#""###"!!!!""!"""!  !$&%#"!""""""!"########$$#$###"###""!!!"###!   "##""!!!!! !!"#""!!!!  !" !!!"""#$$"!"! !"#""!$$" !!!  !!!"""! !!!!"!!  !!!!"###"######""##"!!!""""""#" ! $&$#""""""###"""########$$####"""""#""!!"###"   "##""""!!!!!!""""!!!!  !"! !!!!""$$"!!! !"#"$$#!! !!! !!!   !!"!"""!"""!"!!  !!!!!"#""""####"###"!!!"""""##"  !  #%#""##""""####"""#######$$$#"##"!!""""""!"###"! !!! "##""!!!!! !!""""!!!  !!! !!!!"##!!"! ""##""""!! !! !!! !#"""""""!!!!!  !""""""""#######"!!""""""!!  ! !#$#! !"##""""####""##$####$$$##"##!!!!""#""!"###"! !!!  !#"""!!!!!!!!"#""!!!  !"!!!!!!""$#"!"! "#  """!! !!! !!! !!!!""""""!!  !!!!!"""!!"""##"####"""""##"""! !!$%"  !"###"""#####""#$$#$$$%$##""#"!!!""#""""###"!!!!!  !##"""!!!! !"""""!  !!!!!!!""#$$!!""!!! !#""!!!"!!!!"! !!!!!""!"!!!!  !!!!!""""!"""###"####""""""""""!  !$%#  !"###""######"####$$%$$$##"##"!!!!"""""#####!!!!! !##"!!!!!!  "#""!!  """!!"!""#$$" !"! !"""""!!"!!!!"!!!! !"!!!!!!!  !!!""""!!"!""####$###"""""""""! !!!%%$!!! !"###""###$##"##$$#$$#$###"##"!!!!!"""""####!! "#""""!!!  !"#""!  !"""!"!"!"#$%# !""!  "#"""!"""!!!"!! !!!!!!"!  !!!""!"!!!!!"""""######"#"#""! ! "%&$"!!"!! !!""###"###$##"##$$####$###"##"! ! !"""##$#"!!! !#""!"!!!!!"##"!   """!"!"""#$$# !""  """""!"""!!!""! ! !!!!!"" !!"""!!!!!"!!!!!###$########""! ! "%&%##""""!! !!"###""###$$#"##$$#####$##""#"!! !!"""##$$#"!  !"#"!!!!"!  !"##!  ! """"!""""#$$"!#  """""!"""!!!"!! !"!!!!!! !!""!!!!"""""!!"######"#####"!!!"!"$&%$####""!!!!!!!"#########$$$##$$$##"#####"##"!!! !"###$#$#!  "##!"!!""!  !"##"!! !! !"""""!""""#$" !   """""!"""!!!"" !"!!!""!!!!!"!!!!!!"""""#######"##"##"!!!"!!$%%#$$$$##""!!!!!!!"########$$%$##$$$##"#####"##"!! !!!"###$$##!   """!!!"""!  !###"!!!!! !!""#"""""""#$$#!   """!"!"""!!"""! !!"! !""!""""!!!!"!!!!"##############"!!"!"%%$"#$$$$$##"""!!!!!""########$$$$##$$$###"####"###!!!!!!####$$##!  "##"!""""! !"###!!!!!!!!""#""""#"##$$" !  !""!"!!"""!!"#"!! !!"! !"""#"!!!""""!!""#""""#"####$#"!!!!!%&%"""##$$$$##"""! !!"!""$######$%$$##$$$###"###"###""!!!!"####$$##! ! "##!!"###"! !"##"!"!!"!"!""##"""#"##$$#!"!  ! !"""!""###"!"##! !!!""! !!"""!!!""#"""##"""""""#"###"!"!!"$&$#######$$#$##"!!!!!!!!""#$$##$%%%$$###$$###""##""###"!"!!"#####$$#"  """!!""##"! !"#""!"!!!"!""###"""##"#$%$!"""  !  !""""####""""#"!! !!""! !!!"""!!"!""""""###"#"##""!!!!"$&$""###""###$$$##""!! !!! !"##$#$$$$$%##"####"#"##"""###""""!"####$$$#"!  ""!!!!""""! !!"##"!!!"!""""##"##""###$%#!!"""!  !! ""#"######"""""! !!""! !!!"!!!!!"""!""""######"!!"!"%%#"!"####""#####$$#""!!! !!"#$$$$$$$$$#""#$#"#"####""###""""!"###$$$%$"!  """!!!!"""!!!!"""""!!!""""###"#"""###$$#! !""! !!! !##"""""##"!"#"! !"!!! !!"""!!!"""!!!""""####""""!"$&#"!"""####""######$##"!! ! !!""#$$####$$$#""###""#####""###""""!"####$$$#"  "#!!!!!!""!!!!###""!!!"#""####"""####$$#! !""!! !!!!  !##"!""###"!"""! !!!!! !""""""""""#""""###""""!"$&#"""""""#"##""##$##$$#""!!!!!!!"##$####$$$$#""#######$$#""###"""!"##$$$#$$#"! "#"!!!!!""!!!!###"""!!""######""#####%$#"! !""!!!! ! !#""""""##""""!! !!!! !"""#""""###"#####"""! #%&#""#""""""##"#""!!"###$##!!!!!!!"!##$#####$#$#""#$###$$$###"##""""""##$##$$$#"!!!!!!##"!!""""!!!!####"!""##""#####"##$##%%$"! !##"!!  "#""""""##"!!""! !!!!! !!""!""####"####"##! "&%#"!"##"""""""#""!!!#$##"!!!!!""""#$#####$$$#!"###############"""#"##$###$$#"! !""""!!!"""!!!!####"""""#######"###$##$$#"!!!"##"!!! !#####"###"!!"!! !""!!! !"""#"#""""###"##! "%&$#"""""###"""""#"!#$##""!!!!!!""#$$######$#!!"###"###$##########""#$####$#"! !!!#""!"!!""! !"###"#""####$$$#"##$$#$$##"""!!"""!!!!!  !####""###"!!""!"""!!"! !!"###""""#""""#! "%%####""""#""""""#"""$$$#"""!!!"!""#$#######$#!!"##""###$$###$###$#########$#"! !!! !##""!""""! !#$#####"#$$$#$######$$$""#"""!""""!!!! ! "#$##""###"!"""!!"!!!"! !!###"""##"""#" "%%#!"###"""""###"#"#"!###$$##"""!"!"""#$#""###$##!!"#######$#$########"#####$$$#"!! !!!"##""!!"""!! !"#########$##$######$# !"#""!!!"#""!!!!!  !#$#"""###"!""" !!!!!"! !""#"""#""##" "%%$"!!"###"""!"""""""!"$$###$$##""!""""""#$#""###$##""############$###$##""#####$$#"!!!!"" !##"""""#"" !!#########$###$$####$$ !!"##""!"""""!!!!!  !###"""###"!""!! !!!!!!!!"#"""!!!"" "%%$"""""###"""!!""""""  #%%#"#$$$###""!"""""##$""""#$##!!"#######$##########""#$$$$$$#"!!!"#"!##"""""##!! !##$$##########$#####!!!!""##"!""#""!!!!! !###""##$#"!""! !!!!"""""#"""!"!!#&&#""""#""####"""!""##" #%$$#""#$$###""""""""#$##""##$##!!"#$##$####"######$#"##$$##$%#! !!##"!###""""##!! !#############$#$###""!!!"##""!""#"!! !! !#######$##!"""!!!"!!""""##"""!!#%&$"!!"###"""###""!!""#"!$$$###""#$$###""""#"#####""""###"! "###$$####"######$$####$##$$#" !""!!##"##"#""!!!!#############$$#$$9 200 130 1 +""!!!"####""""#"! !!! !##########!"#""!""!!"##"##"!!#&&$$#!!""###"""###!"!!"#" #$$####"!"$$$###"""#"##"######"#$#"!!"##$####"#""###"#$$#######$$#" !""!!###"""#"""!!!###########$$$$$$"""!!!"####"""##"!! !!"! !######"##""""""!""!!""""" !#%&$###$"!""""#""###""!!!"!!#$#$###"""#$%$###"""###""#$$##"##$#"!!"##$$#"###""##"##$########$$$! !!""!!"###""##""!!!########$$#$%$$#!"""!!!"####"""##"!!!!!"! !##""""!"##!""""!""!!"#"  #%&%###$$#"""""##""###"!"""!$$########""$$$####"""##"""#$####$$#"!!"#######"#""#"###$$##$####$$$" !!"! !###"""###!!!"#$$#####$$$$$$$!!""""!!"####""###"!!!!""!!!""""""""##"!""""!""!!"  #%&%$$$#$$%$#"""###""##$##"!!$####$$$$##"#$%$###""""#""!##$####$$$#!!"#$$$########""##$########$%#" !!!! !###""""##!!!!##$####$$$$$$$!!!"#"!!!"#$####"##""!"""""!!"##"#""""""!!"""!""!  #%&&%%%$$$$$$$##""###"!"#$##! !###$$#$$$$##"#$%$###""""##"!"#$##"#$$$#!!##$$$$#$$$$###"######$####$$$"! !"! !"##""###""!!!#$##$$###$$$$"""""#""!""##$######"""""""#!!"##"#""""#"!"""""" #&&%%$%%%%$$$$%$##""###"!"$##  !#"##$$$$$$$####$%$###""####"!"#$#####$$#!!##$$$$#$$$$$#"""#$##$$####$$$"! !""" !###"""###"!!"#$#######$#$!""""""#""""##########""!""""!!"##"""""##"!"#"!!#%&%%%%%%$%%$$$$$$######""!###!#"!!##$$$#$$$####%%%####""#"""""#$#####$$#!!#$$$$$$$$%$$#"#"###$######$$$#!!!!"!  "###"""###"!!"#$$$$$###$$ !!""""#"""! "########"""!""#"!""#"""""##"""" #%&%$$%%$$%%%$$$#$$$###""##""#! !#"! !"#$$$$$$$####%%%###"""""""""#$#####$$#"""$$$$$#$$%%$$####$$$##$$##$$$#!!!!""! !#####"###"!!"#$$$$#$$#$! !"!!!"#" "#$######""!!"##"!""#""#"###"! $&&%$#$$$$$$$$%$$##$$$########"  #$"! !"#$$$$$$#$##$$%$####"!""#"!##$####$$$$""#$$$$$##$%$$#####$$$$#$###$%$#"!"!!!! "###"#"###""!"#$$$$$##$" !!!!"!"#$######""!!"##"""##"""""#" #%&%#$##$$$$$$$$$$$###$$######$# !##!!! !"#$$$$%$$$#$$$%$####"!""""""#$#$###$$$#"#$$$$$#$#%$$###"#$$#$#$###$$$#"!!!!!! "#####"###""""#$$$$####"  !"!"  ##$######""!!"##""###""""!  #&&$####"#$$$$$$$$$$$##$$$$##$### !#"! ! !"#$$$%%%%$$$#$%%$###"!!""""##$#####$%$#"#$$$#$##$$#####"#$###$$$##$%$#!! !!! "####"####""!"#$$$$$###!! !"""! "#$##"###""!!####"####"! #&%$#$#####$$$$$$$$$%$$$###$#####" "#"! !!!!!!##$$$%%%%$###$%$$##""!!!"""#######$$%$#"#$$$$#$#######"""###$$$$##$$$#" !!!! !"#######$##""!#$$$$$###"!!""""!  "$###"###"!"""#######! #&&$$######$$$$$$$##$$%$$##$$##"##!!#$"!!!!""!!!##$$%%%%$$####$$##""!!!"""""$$####$$%$""#$$$$$$$#$###"""####$$$$##$$$#!!!!!"! !"##########"""#$$$$###$#"!""###! "$###"###"!""######! #&%$######$#####$$$$###$$%$$##$###"!$%#"!!!!"!!!!##$$%%%$$##""#$$##"!!!!""#""$$####$%%$""#$$$$$$#$#####"######$$$##$%$$"!!!!"! !"#$#########""#$%$###$$#"!"#$%#! #####"###"""""$##! #&%$###$####$##"###$$$###$$$$###$$#" !%%$#"!!""""!!"#$$$%%%$$##""#$$##""!!!"#""#$$####$%%$###$$$$$$#$$############$$$##%%##!!!!"! !"#$#####$$##""#%%$$###$#"!!#$%$! ####""#####"""#! #%&#######$$$##"#"##$$$$####$$$###$$" "$$%$#""!!""!!!"#$$%%%$$$#"""#%$#""!!!!"#"!"#$###$$$%%###$$$$$$$#####"########$$##$$%##!"!""!! "##$###$#$#####%#####$##"!!"#$#! ####""######"! #&%#########$##""##"#$%&%##""##$###$#" !#$$$%$$"""!"""!!""#$%$$$$$$#"#$%$##"!!!!!"""##$#"##%%%%###$$$$$$$$####"####""###$##$%%$#"!"##"!!!#$#$#$#$$##"##$$$####$"!!!"#$#!!####""####"" #&%#""##"##$###"######%&%&%##""######$! !$$##$%$$""!""""!""##$$$$$$$##""$%$$#"!! !"!"#$$#"#$$%%%$###$$$$#$$$###"####"""##$##$%%##!""##!! "##$#$##$$######$$######!!!"$$#!!####""###! #%%""###"######"###$$$%%%&%%%$#"##$####!!$$###$%%$""!"""""""#$$%%$$$$$#""#%$$#""!!!""""#$$###$%%%%$"##$$$$$#$$###""###""""#$##$%%#"""###"! "##$#####$$#$##$$$######!!!"$%$" "####""" $%%""####"#####"##$$$$%%%$#%&%%$#####$$#   !$#####$%%##"!!""""""##$%$$$$$##""$$%$##"!!!"##"#$$###$$%%%#"##$$$$$$#$##"""###"""###$#$$%#"""#$#"! "#$#$##$#$$$##$$$$$#$###"!!#%%#" "###"!!$%$"!"##""#####"##$$$$%%%$##$$&%%%$$$$##" "##"####$%%##""""""#""#$%%%$$$$##""$%%$##"!!!""#"#$$$#$$$%%$#""$$$$##$###"""###""""##$##$%$#"""#$$#! !#$#$###$#$$##$$%$$#$###"""#%%$" "##!!#%$!!"##""#####"###$$$%&%$##$#$%%%%%$$$$#" "$#"#####$%%$#"!""""""""#$%%$$$$##""#$%$###"!!"##"#%$$##$#$%$#"##$$$$#######"####"""##$##$%%#"""#$##!!"#$$#$##$#####$$%$$$#$$##""#%%$" ""!#&$! !##"""####"###$#$%%%%$$$$$#$%%%%$$$$$! !#$####$###$%$$#"""""""!""#$$%$$$$#"""#$$$$#""!!""#""$$$##$$$%%###$$$$$$#######$###"""#$$$$$%%#"!"#$$#"!"#$$##$#$$####$$%%$$$$$##!"#%%$! $%$!!!##""#####"#####$%&%%##$%%%$##$%%%$$$$! !#%$#####$$$$%$$#""!!!!!!!"#$$$$%$$$"""#$$$##""!!"#"!"$$$###$$%$$###$$$$$$$##########"##$$#$$%$#"!"#$%$""##$$$##$$$#$#$$$%$%$#$##"!"#$$#" !$%$! !"#"""#########$$%%%$$#$$%%$$$###$%%$$$   !#%$#$##$#$##$$%$#"""""""!!"#$%$$%$$#"""#$$$##"!!""#""#$$$#$#$$%$$##$$$#$#$#$####$$##"##$$$$#$%%#"""$%%$""#$$$$$#%%$####$$$%$$$$##"!!#$%$" !#%%" !!"!!"####"""##$$%&%%$$$%$$%$$$##"#$%%$#  "$$$$###$##$##$$$$#""!!!"""""$$$#$$$##"""#$%$##""""##""#$$$###$$%$####$$$$$###$#$##$#####$$$$$$%%#"!"#$$#""#$$$$##$$$$####$$$$$$$##"!"#%%$" !$&%"!!"""""####"#####$%%%%$$$$$%$$$###"!"#$$$#  #$$$$$$##$###$#$%$$##""!""""!"#$#$$%$$#"!!#$%$###"####""#$$$#$#$$$$####$$$$#########$$###$$$$$$%%%$"""#$$#"##$$$$#$%$$$#####$%$$$$$#"""#%%# !$%%" !!!"""##""""##"##%%%$$$$$%$$$$##$###""#$$$!!!!""#%$#$$$$$$###$$#$%%$##""""#""!"#$#$$%%$#"!!"$%$#######$#"#$$$$$#$$$$#"##$$$$##########$###$$%%#$%%%$"!"#$$##"#$$$""$%$$######$%$$$$$#""##$!"$&%"!!!!"""##""""##"#$%%%$$$$$$$$$$#$####$###$%%$$$$$$%%$$#$%$$$$##$$$#$$%$#""!"#"#"""#$$$$%$$##!!#%%$$#####$$#"#$%$$$#$$$$###$$$$$######"##$$$##$%$$$#%%%$"""#$$####$$#"#$$%$##$###$%%$$$$###""$&$"! !!!""##""""#####%%&%$$$$%%%$$$####$$$$$$$%&&&&&&&%$%$$##$$$$$##$$$$$%%$##""""#"""##$$$$%%$##!"#%%$$#######"!"$%$$#$$%$$#"##$$$$######"##$$$#$$%$$$$%%%$""##$$#""#$#""#$$$$$##$#$$%$%$%$$""$&$" !!"####"""#####$%%$$$$%%%%$$$$####$$$%$$%$%&&&&%%$$$$$##$$$$######$$$%%$#"""""###"##$$$$%%$$"""#%%$$##""###"""$%$$##$$$$###$$$$$#########$$$#$$$$$$$%%%$#"##$$##"###""#$$%$$#####$%$%$$# !$&$"! !!!"####"""####$%%%$$#$$$%$$$$$###$#$$$$%%$$#$%%%%$$##$$$###$$$#$###$$$%%%$#""""""##"##$$#$$$##"!"#%%$$###"###""#$%$####$$$###$$$$$##########$$#$$$$$#$%%%$#""#$$#"####""#$$%$$$$$#$$%$$# "$&$"!!!!!!"###""""##$$%%%%$$$$$%%$$$##"####$$$%%%%##"#$%%%$$$$$$$$#$$$#$####$$$%%%$#"""""###""#$$$$$##""!"#$%%$##"####"##$%$####$$$###$$%$$###$$#####$$$$$%$$$$%%%$#"###$##$###""#$%%$$#$$#$$$# "$&$"!!!!!"####""""###$%%%%$$%%%%%%$$$##"####$$%%%$$##""#$%%%%$$$$%%$#$$$$#$###$$$%%%$###""""#"""#$$$#$##""!!#$%%$$######""#$$$#$#$$$$####$$$$$##$######$#$%%$$$$$%%%$####$#####$##"#$%%$$##$$$"  "$%$" !!"""#$$#""""##$$%%%$$$%%%$%$%%$#####$$$$%%%$$###"""$$%&%%$$$$%%$$$$$$#$$##$$$$%%$###""""""!!"$$$$$$#""!!#%%%$$###"###"#$%$#$#$$$$###$$$$$$##$######$$%%%%$%$$%&%$####$$#########$$%$$###" "$&$! !!"#####""""##$%%%%$#$%%%$%$$$$#####$$$$%%%$$########$%&%%%$$$$%%$$$$$$#$#"#$$$$$%$###"""""!!!#$%$%$$##"!"#%%%%$##"####"#$%$$$$#$$$###$$$$$#$##$####$$%$%$$$$$$%&%%$#$$#$####$####$%$$##" #%&$! !!""#####""!""##$%%%$#$$%%$$%$$$#""##$$$$%%%$$######$$%%%&%%$$$$$%%%$$$$$$#######$$$%$##""""#""!!#$%%%$$####"#%%%%$##"####"#%%$$#$$$%$$##$$$$#$####$#$#$$$$$$$$%$%%&%$##$$%$###$$$###$$$$#  #%%$! !""#####""!!""##$%%%$##$%%$$$$%$#####$$$$$%%$#######$%%%%%%%%%$$$$$%%%$$%%$$#$###$$#$$$$$#"""###"!"#$%$%$$#$##"#%%%$##""######$%$$#$$$%$$##$$$$$$#$#$####$$$$$$$$%$%%&%$$##$%$###$%$###$$#  #$&#"!!""#####"!!""###$%%%$##$$$$#$$$$#""#$$$$$$%%$###"###$%%&%%$#%%%%$$$$$%%%%$%%$$#$$#$$##$%%$$#"######""#$%$$$####"##%&%%##""####"#$$$$#$$$$$$$$#$$$$$$$$$#####$$$$$$%%%%%&%%$$$$%$###$$$####  #%%$"!""######""!!""#$%%%%$###$$$$#$$##"##$$$$$$%%$$######$%%%%%%$#$%&%%$$$$%$%%%$%%$$$$%$##$#$$%$##"###$###"#$%$$#######$%%%$$##"####!"$%$$$$$$%%$###$$$$%$$##$##$$$$%%$$%%%%%&%%$##%%$$###$$#"!#%&$""""######"""""##$$%%%$###$$$$$$$##"##$$$$$$%%%$######$$%%&%%$$$$%%&%&%$%$$$$%$$%%%$%%$######$$$$####$#$#""#$%$####$$##$%&%%$######""#$%$$#$$$%%$###$%%%%$$#$####$%%%%$$$%%%%%%%###$%$###$$#!#$&$#"##"######""####$$%%%##$$$$%$$$$$#"#$$%%$$$%%%$#####$$%%%%%%#$$%%$$%&%%%$$$#$$%$$%%%$%$%######$$$$########""#$%$$###$$$#$%&%%#######""#$%$$$$$$%%$###$%%$$$$$$$$##$%%%%%$$%%%%%&""#$$%$$##"!#%&$#"####"#########$$%&%%$####$$$$$$$""#$%%%$$$%%%$$$#$$$$%%%&%%$$$%%%$$%&&%%$$#$##$%$$%%$$$$$####"#$$$#########""#%%$###$$$$$$%%%%$###"##""#$%%$#$$$$%%$##$%%$$$$##$###$%%%%$#$%%%%%##"##$$$$"!#%&$#"######$$########$%%%$##$$$$$$#$#"""$$%$$#$%%%$$$#$#$$%%%%%%$$$%%%$%%$$&%&%$$$##$$%$$$$%$%$$##"""#$$$$####$###!"#%%$$###$$$$$%%&%$#""###""#$$$$#$$$%%$$#$$%%%$#$$$#$#$$%$%$$$$%%%%#####$$$#  !"%&$#"###$#$$$########$%%%####$$$$$$$##""#$%$###%%%$#$##$$%%%%%%%$$%%%%$%%%%$$%&&%%$#$#$$$$$$%%$$$###"""#$%$$######$#"!#%%$$##$$$$$%%%%$$######"""$$$##$$$%%$$#$$%$%$$#$$$###$$%$%$$$&%%#$$###$#!"%%$"##$#############$%%&%####$#$$$$$###"#######%%%$#####$%%%%&%%$$$%%%$%%%%%$$%%&&%%$$##$$$$$$%%$$$###""#$%%$$###$####"!#%%$$##$$$$$$%&%$########"#$$$#$$$%%&%$#$$%%$$$#$$$$#$$$$%%$$%%&#$$$$$" !#%%$"##$$###$####"###$$&%%$###$$$$$$#$#"####"""#%%%$######$%&%&%%$$%%%$%%%%%%%%$$%%&&%%$$$$%%$$#$$%$$$$####$$%$$#$####$$#""#%%$$$$$$%$$$$&%%$$#####""#$$$$$$$%%%%$#$$%%$$$#$$#$##$%%%%%$%%$#$$$# !#%%$"##$$##$#####"#"#$%%%%$$$$%$$$$$$$#"####"!!#$%%%#######$%%%&%$%%%%%%%%%%%%$$%%%%%&%%$$$%%%%$$#$%$$$$$$#$#$$$$$$######$#""$%%%$$$$%$$$$%&%%$$#"###"""$$$$$%$%&%%$#$$%$$$$$$$$##$$%$%%%$%$$$$#!#%%#"##$#$#$####"####$%%%%##$$%$$$$$%##"####"!"#$%%%#######$$%%%%$$%%%%%$%%%%$$%%&%%$$%%&%%%%%%%$$#$$%%$$$$###$$$%$$#$####$$#""#%%%$$$$$%$#$%%&%$$###$##""$$$$$$$%%%$##$$%%$$$####$#$%%%%%%$$##" !#%%$""#$#$######"####$%%&%$##$%$$$#$###""###"""#%&%%$$$$##$$$%%%%$$%%%%%$%%%%%$%%%%%%$$$$%&%%%%%%%$$##$%%$%$$#####$$%$$######$#""$%%%%$$%$%$$$%%%%$$#####"""$$$$$$$%%%%##$$%%%$$$$##$$$%%%%%$$$# !#%%$""##$$#$###""""##$$%%%$##$%%$#$$$#"""####""$%&%%%$$$$$#$%%%&%%%%%%%%%%%%%%%$%%%&%$%$##$%%&%%%%%%%$###%%$$$##"###$$$$$$$$$####""$%%%$$$$%%$#$%%%%$$#####"""#$$$$$$%%%$$#$%%%%$$$$#$#$$$%%$%$#  !#%&#""##$$$$$#######$$$%%%$##$%$$##$$##""###"""#%%%%$$$#$#$$%%%&%$%%%%%%$%%%%%$%%%%%%$$$$###$%&%&%%%%%$$##$$%$$$##"###$$$$$$###$$$###$%&%$$$$%%$#$$%%%$$######"#$$$##$%%&&$$$$%%%%$$#$#$$$$%%$$#  !#%%#""##$#$#########$$%%&%$#$$$$$##$$$#"#$##"""$%%%$$$$$$$$$%%&%%%$%%&%%%%%%%%$%%%%%%$$$$$$$#$%%&&%%%%$%$$$$$$%$#$##"###$$$$$$#$$#$$##"#%%%$$$$%%$#$$%%%$$$$#$$###$%$##$%%%%%$$$%%%%%$$#$#$$%%%$  !#%&$""###$$$$#""####$$%%&%$$$$%%$##$$#""###""""$%%&$$$$#$$$$%&&&%%$%%&%%%%%%%%%%%%%%%$$$$$$$$$$$&&%&%%%%%%$$$$$$$$$$##"###$$$$$$$$$$$$###$%&%$$$$%%$#$$%%%$#$#$$$$#$$$$$$$%%&%%$$$%%%%%$$#$#$$$%% !#%&$""##$$$$########$$%%&%$$$$%%$$$$$$#"###""""#$%%$$$$$$$$$%&%&%%%%%&%%%$%%&%%%%%%%%$$$$$$%%%%%%%%&%&%%%%%%%$$$$%$$$$$#####$$$$$$##$$$$$#"$%%%$%$%%$$##$%%%$####$$$#$$%$$$$$%&%%$$$%&%%%$$#$$$$%& !#%&$#"####$$$#######$$%%%%$$$$$%$$$$$$###$$$"""#$%%#####$$%$%%%&&%%%&%&%%%%&%%%%%%%%%%$$$$$$$%%&%%$#$%&&%%%$%$%%$$$%%$$$#####$$%$$$$$$#$$$$###%&%%%$$$$##$%%%%$#####$$#$%%$$$$$%%%%$#$$%&%%$$$$$$$% "#&&%#"####$$$######$$%&&&%$$$$%$$$$#$####$$##"#$%&%$#"#"#$$%%%&&%%%&&%&%%%%%%%%%%%%%%$$$#$#$$%%%%&%$$$%%&%&%%$$%%%$$$%%$$$#####$$%$$$$$$$$$$$###%%%%$$$$$##$%%%%$#"###$##$$%$%$$$%%%%$#$$%&%%%$$$$$% "#&&%#######$$$######$%%&&%%$%%$$$$$$$##"#$$##""$%&%######$$$%%%%%%%%&&%%%%%%&%%%%%&%%$$$##$$$$%%%&%%$$%%%%&%%%%$%$%%$$$%$$$$$$##$$%%$$$$$#$$$%$#"$%%%%%$$$$##$%%%$$##"##$##$$%%%$$$%%%%#$$%%&%%$$$$$$ !#%&&$##"##$$$$$$$###$$%%&%$$$#$$$$$$$$#"#####""#%%$####$$$%$%%%%%%$%&&%&%%%%&%&%%&%%%%$$$###$$%%&%%$$$$%$%%&&%%$%$$$%$#$$%%%$$$####$%%%%$$$$$$$%%#"#%%%%%%$$$##$%%%$$######$##$$%%%$%%%%$$$$%%%%%$$$$$!#&&&$$##"##$$$$$%$$$$%%&&%$#######$$$$##"###"""$%%$####$$$%%%%%&%$$%&%%%%%%%&%&&%&%&%%$$$##$%$%%%%%#$$$$$$$%%%&&%$$$$$%$$#$%%%$$####$$%%$%$$$##$$%$##$%&%%%%$%$$#$$%%%$#####$$#$$%%%%%%%%%%$#$%%%%$$$$$#&'%$$####$$%$$$$$#$$%%&&%$$#####$$$$##"###"!!"$%%%#"###$$%%%%%&%%%%&%%%%%%&%%&%&%%&%%$$###$$%%%%%%$$$%$$%%%%%%&&&%$##$$$$$$$%%$$#$####$$$%%%$$$#$$%$##$%%&%%$$%$$##$%&%$###$$$$$$$%%%%%%%%%%$#$$&%%$$$$&&%$$#""#$$%$$$$###$$$%&%%$##$$$$$$$$#""##"!!!#$%$####$#$%%%%&%%%%%&&&%%%%%&%%%&%%&%%%$####$%%%%%%%%%%%%%%&%%%%%&%%%##$$$%$$#$%%$$$$$####$$%%%$$#$$$%$##$%%&%%%%%$$##$%%%$$###$$$$$$%%%%%%&%%%$#$%%&%%$$&%$##""##$%$$$$###$$%&%%%######$$$$$#####"!!"#%%$#####$$$%%%%%%$%%&&%&%%%&%%%%%%%%%%$$###$$$$%%%%%$$%%%%&&%%%%$$$%&%%##$%%%$$#$%%%$$$#""##$$$%%$$$$$$%$##$%%%%%%%%%$#$$%%%$$####$$$$$%%%%%%%&%%$$$%%%%%%%$###"##$$$$#####$%%&&&%$#$#####$$$#####"!!"$%%%####$$$$$%%%%%$%%&%%%%%&&&%%%&%%$$$%$$#$$$$%%%%%$%%%%$%%&%%%%%###%%&%%$$$%%%$##$%%%$$$##"##$$%%%%$$$$$%$###$%%%%%&%%$#$%%%%$#####$$$$$%%%%%%%&&%$$$%&%%%#######$%$$######%%&&&%$$$$#$##$$$#####"!!"#%%%$###$$$$$%%%%%%%%%%&%%%%%%%%%%%%%$$##$#$$$%$%%%%$%%%%%%%&%%%%$$$$$$%%&%$$$$%%%$$#$%%$$$$#####$$%%%%$$$$$$$#"#%%%%%%&%%$#$%&%%$#####$##$$%%%$%%%%%%%$%%%&%##$##$$%$$######$%&&%%$$$$$$$$%%$######"!"#%%%$#$$$$$$$$$%%%$%%&&%%%%%&&%%%%&%%$#" !"$%%%%%%%$$$%%%%&&%&%%%$$$%$%$%&&%%$$$%%%$$$$%%%$$$$###$$$%%%$$$$$$%$#!#$%%%%%&%$$$$%%&%$####$$$$$$%%%%%%&&%&%%$%&&###$$$%%$$#####$%&&%%$$%$%$$$$$$#####""""$%%%####$$$$$$%%%$$$%&%&%%%%&&%%%%%&%%#  "%%%%%$$$$%%$%%%%&%&%%$%%%&%%%%&&%$##%%%%%$$$%%%$%$$#$#$$%%%%$$#$$$$$""#$%%%&%&%$#$$%%&%$$####$#$$$%%%%%%%%%&%%$%&###$$%$$$##"##$%&&&%$$$%%%$$$$$######"!#$%&%$#$#$#$$$%%%%%%$%&%%%%%%&%%%%&%&%%%# "%%%%%$$%%%$%%%%&%%%%%%%%&%&%%%%%%%$$#%%&%%$$$%%%$$$%$$$$$%%%%$$$#$$$$#"#%%$%%%&%%$$$%%%%$$$$$$$$$$$%%%%%%%%%%%$%%$$$$$$$$#####$%&&&%$%%%%%%$%$$######"!"$%&$#####$$$$$%%&%%%%%%&%%%&%%%%%%%&%%%&$!!!!!!"%%$%%%%%%%%%%%&%%&%%%%%&%&%%$###%%%$##$%%%%$$$%%%$%%%%$%%$%%%%%###$$$$##$%%%%%%&%%#$$%%&%$$#$$$$$$#$%%%%%%%&%&%%%$$$%$$$$###$$%&&&%$%$%%&%%$%$######"!#$%%$###$$$$$$$$%%%%$%%&%%%&%&&%%%%&%&%&%%%#!!!!!#$%%%%%%%%%%%%%&&%%%%%%&%%%%%$"""#%%%$###$%%$$$$%%$$%%%%$%%%%%%%%####$$$##$%%%%%%&%%##$%%%%$$$#$$#$##$$%%%%%%%&&%%$$$$$$##$$$%%&&&%%%%%%%%$$$$$##$##"!"$%%$####$$$$%%%%&%%$%%%%%%%%&&%%%%&%%%%%%%%#"!!!!"$%%%%&%%$%%%%&%%%%%%%%%&&%%$#""""#$%&$###$$$%%$$%%$$$%%%%%$%%%%%%#####$$##$%%%%%%%%%$$$%%%$$#$$$$$$##$%%%$%%%%%&&$%$#####$%%&&'&%%%%%%%%%##"##$$##"!#$%%$####$#$$$%%%&%%$%%%%%%%%&&%%&%&%%&%%%$$%#"""!!!$%%%&%%%%%%%&%%%%%%%%&&%%%$#####""#%&%%###$$%%$$$%%$$%%&%%%%$$%%%$$####$$##$%%$%%%&%$$$$%%%%$$$$$$$$##$$%%%$%%&%&%$$$###$$%&&&&%%%%%%%%%#"!#$$#"!#$%%%##"##$$$$$%%%%%%%%%%%%%%&&%&%%&%&%%%%$$$%#"!!!!!$%%&%%%%%%%&&%%%$%%%&%%&%$#"#######$%'&%####$%%%$%%%%$%%%%%%%$$%%&%$#$##$####$%%%%%&%%%$$%%%%$#$$$$$##$$$%%%%%%&%$$$###$$&&&&&%$$%%$%$$$"!###"#$%&$##"#$$#$$%%%%%$$%%%%%%%%&&&&&&%%%&%%%$$$%%#""!!!!$%%%%$%%%&&&%%$$%%&%%&%%$####$$$$#$$%&&&%$###$%%%$%%%$$$%%%%%%$$%%%%$####$####$%&%%%&%%%$$$%%%$$#$#$$###$%%%$%%%&$$####%%%&&&%%%%$%%$$$"!###%%&%$####$$$$%%%%%%$%%%%$$%%%%&%&&%&%&%%$$$$$$%$#!"""!#%%%%%$%%%&%%%%%%%%%&%%$####$$#$$%%%%%%&&&$##$$%%%$$%%$%$%%%%%%%%%&%%$$###$####$%&%&%&%%$$$$%%%$#$$$$#$$$$%%%%%%%####$$%%&&%%$%%%%%%$%%" !#%&%%######$$$%%%&%%%%%%$#$$%&%&%%&%%%&%%%$$$$$$$$#""!!!#%&%%%%%%&%%%%%%&%&%&%$$$$$$$$$$$%%%$#$%&&%%$$$$%$$%$$%%$$%%%%%%$$%%%%$#######"#$%&%%%&%%$$$%%%%$$#$#$$#$%%%%%%%%$##$$%&&&%%$%%%$%$%%%$$""!! "$%$####$$%$%%%%&%%$%%%$$$$&&%&%&&%&%&%&%$$$$$$$$%#"!"!!#%%%%&%&%%%%%%&%%&%&%$$$$$$$##$$%%%$#"#$&&&&%$$$$$%$$%%$%$$%%%%%%$$%%%%#$##$$##"#$%%&&%%&%%$$%%%%$$$$$#$$%%%%%&%%##$$%&&&&%%%%%$$$$%$$%%%%#!! !#$###$$$$%%%%%%$$%%%$$$%%&&%%&&&%%%&%%$$%$$##$%%#"!""!#$%%%%&&%&%%%&&%&%&%%$$$%$$$##$%%%$##$$$%%&&&%%$$$$$$#$%%%%%%&%%%%$%%%%%####$$##""$%%%%%%%%%$%%%%%$$$$$$$$%%%%%%&#$$%%&&&%%$%%$$$$%%%$#$&%%#! !#$$$$$%$%%%&%%%%$%$$$%%&&%&&&&%%&%%%$$%$$$$#$%%$""!!!"$%%&%%&%%%%&%&%&&%%$$$%%%$$$$%&&%$$%%%%%%%&&&%%$$$$$#$$%%%%%%&%%%%%$%%%%#####$#"!"$$%%&&%&%%$%&&&%%$$$##$$$$%%&%$$%%&&&%$%%%$$$%%%%$$#"#%%$"! !#$%$$$$$%%%$$%%%$$$%%&&%&%%&%%&%%%%$%%$$##$%%&#"!!"!"$%&%&&%%%%&%&%&%%%$$%%%%$$$$%%&%$$%%%&%%%%&&&&%%$$$$$$$$%%%%%%&%%%%%$%&%%####$$##""$%%%%%%&%%%%%%&%$$$$###$$$%%&%%%&&&%$%%$%$$$%%%$$##""#%%%#"  #$%$%%%%%$$%%$$$$%%&&&%%&&%&%&%%%%%%%$$#$%%%%#"""!!"$%&&%%%%&%&%%%%%%$$%%&%$$$$%&&%$$%%&&%%&%%%%%&&%%%%%%$$%$%%%$%%%%%%%%%%%%%###$$$$#"#$%%%&&&&%%%$%%&%%$$##$$$$$%%&&&'&%%%$%%$$%%%%$###"!!"#&&%#" !#$%%%&%$$%%%%$$%%&&&&%&%%&%%%%%%%%%%$$%%%%%%%#"!""!#&%%%%%%&%%&&%&%$%%%&%$$$$&&&%%$%%%%%%&%&%%%%&&&%%%%%%%%%$%%$%%%%%%%%%%%&%%$##$%$$#"#$%%%&%&&%%$$%%&%%$$###$$$$%&&&&%$$$%%$%%%%$$###"""""$%'&%#!  #$%%%$%%%%$$$%%&&%%%&%&%%&&%%$%%%%$$$%%%$%%%#"!"!"#%&%%%&%%%%%%%%%%%%%$$##$%&&&%%%%&%&&%%&%%%%%%&&&%&%&&%%%%%%%$$%%%%%%%%%%&%%$#$$%$$###$%&%%&&&%%$$%%&%%$$$#$$$$$&&%%$$%$$$%$%%%$####"""#$%%%&&%#"! "$%$$%%%%$$$%%&&%%$%%%%%&%%%$$%%$$$$%%%$$$%%#""""!#%%%&%%&%%&%%%$$%%%%$#$$%&&%$$%%%%&%%%&%%%%%%$%&&&%%&%%&%%$%%%%$%%%%%%%%%%&%%$#$$$%$###$%%%%%&&%%$$%%&%%$$$$$$$$&&%$$%$$$$#%%$####"""##%&&&%$&&%#"! !#%$$$%%&%$%%%&%%$$$$%%&%%%%$%$$$#$$%&%%$$%&%$"""!!"%%&%%&%&%%&%$%%%%%%$$$&&&%$$$%%%&%&%&%%%%%%$$$%&&&&%%%%%%%%%%%$$$%%%%%%%$%%&%$#$$$$$###$%%%&&%%%%$$%%&&%$$$#$$$&%$$$$%$$$$%$##""##""#%&&&$$$%&&%#!"#$%%%%%&%%$%%%&%%$$$%%%%%&%$$$$$##$$%&&%%%%%%&$"!""!"$%%&%%&%&%%%%%%%%%$$%%&&%%$%%%%&%&%%%%%%%%$$$$%%&&%%%%%%%%%%%%%%$$$%%%%%%%%%%%$##$$$##"#$%%%%%&%%%$$%%&%%$$$#$$%$$$%$$$$%%$#"""#####$%&%$$$#$%&%%#$%&&%%%&%%$$%%&%%$$$%%%%&%%$$%%$$$#$%%%%%%&%&%&$""""""$%&%%&%&%%$%%%&%%$$%&&&%%%%%%%&&%%%%%%%%%%%$$%%%%%%%$%$%%%%%%&%%%$$$%%%&%%%%%%%$##$$$#""##%%%&%&%%%%$%%&&%$$$$$$$$$$$$%%%%##""###$$%&&%$#$$$$$$&&%%&&%%%&%$$$%%&%%%$$$$%%%%%%$%$$$$$$%%%%%%%%%&&&%""!"!"$%&%%&%%%%$%%&%%%$%%&&&%$%%%%&&%%%%%%%%%%%$%%$$$$%&&&%$$$%%&%%&%%%%$%%%%&%%%%&%%$#$$$$$#"#$%%%&%%&%%%$$%&%%%$%$$$$$$$%%%%##""####$%&&&%$$$$$###%&&'&%%%%%$$$%%&%%$$$$$$%%%%%%%$$$$#$&%&%%%&%&&&%&%#"""!!#%%&%&%%%$%%%%%%$%&&&&$$%%%&&%%%%$$%%%%%%%%%%$$#$$%&&&%$$%%%%&%&%%%%%%%%%%&%$%%%%$#$$%$$###$%%%&%%&%%$$%%&&%%$%$$$%%%%%%$#"#$#$#$$&&&%$$$$$$##$%%&&%%&&%$$$%%&%%%$%$%$%%&%$$$%$$#$$%%%%%%%&&&&&&&%#""""!"%%%&%%%%%%%%%$$%%&&&%%&%&&%&%%%$$%$%%%%%%%%$$#$$$$%&&&$$$%&%%&%&%%%$%%%%%%%%$%%&%$$$%%$$#"#$%%&%&%%&%$$$%&&%%$$%%%%%%%#####$$$$$%&%%#$$$$$$$$%%%%%%%&%$$$%%&%%%%%%%%%%%%$%$%$$$$$%%%%$%%%&&&&&%&&$#"""!!$&%%%$%%%%%%%$%&&&&%%%&&&&%&%%%%$%%%%$%%%%$$$$$$$$%&''&%$%%%&&&%&%%%%%%%%%%%%%%%&%$$$%%%$#"#$%%&%%&%%%%%%%&&%%$$%%%%%####$$$$$%&&&%##$$%$$$%%%%%$%%&%%%$%%&%%%%%%%%%%%%$%$$$$$$$%%&%%%%%&&%%%%&&&%#""""!#%%%%$%&%%%$$%%&&&%%&&&&&%%%%%$$%%%%%%%%%$$$$$%%$$%%&&'&%$%%%%&&%&%%%%%%&%%%%%%%&&%$$$%%%$###$%%&%&%&%&%%%&&&&%%%%&%####$$$$$%&&&%#$$%$$%$%%%&%$%%&%%$$%%%%%$%%%&%%%%%$$$$$$#$%%&&&%%%&%%%&%&&%%&%#""""!#%&%$%%%%%$%%&&'&%&&&&&%%%%%$$$%%%%$%%%%%$$$%%%%%%%%%&&'&%$%%&%&&&%&%%&%%&%%&%%%%%%%$$$%%%$#"#$%%&%&%&&&%&%&&&$%%%%$$##$$$$#%%&%$$#$$$%%$%%%%%$%%&%%%$%&%&%%%%&&%%%%$$$$%$$$$$%&&&%&%&&&&&%&&%&%&%$""""!"$%%%%%%%$%%&&&&%&%&&&%&%%%$$$$%&%%$%%&%$$$%%%%%&%%$$$&&'&%$%%%%&%&%%%%&%&&%%&%%%%&%%$$$%%$$#"#$%%&%%&&&&&%%&&$%%$$##$$$$$$%&&%$$$$$$%%$%%%%%$$%&%%$$%&%&%%%&%&%%%%%$$$$$$#$$&%&%&&%&&&&%&&%&%%%&%$#"""""$%%%%%%%$%&&&&%%&&&&%&%&%$$#$%%%$%%%%$$$$%%%%%%%&%$$$%&&'&%$%%&%&&&%%%%%&&&&%&%%%%&%%$$$%$$####$%%%%%&'&&&&%&%%$$##$$$$$$%&&%$$#$$$%%$%%%%%$$%&%$$$%%&%%%%%%&%%%%$$$%$$$#$%%&&&&&%&&&&&%&&%&%%%%%$#"""""#%%%%%%$%&&&&%%&&&%%%%%%$##$%%%%%%%%%%$$%%%%%%&%%%$$$$%&'''%%$%%%%&%%%%%%&&%&%%%%%%&%%$#$$$$$###$%&%%%&&&&&&&%%$##$$$$$$%%&%%$#$$%%%$%%%&%$%%%%%$$$%&%%%%%%&%%%$$$$%$%$#$%%&&&&%&&&&&&&&%%&%%%%&&%##""""#%%%%$$%&&'&&&&&&%%&%&%$##$%%%%$%%%%%$%%%%%%%&%%$$%%&&%%&''&%%$$%&%&%%%%%%%&&%%%%%%%%%%$#$$$%$$##$%%%%%%&&&&&%$##$$$%$$%&%&$$#$$%%%%%%&%%%%%%%%#$%%&&%%%%%%%%%$$%$%%$$#$%%%%%%&%%&&'&&&&&%%%&%&%&&$""""!"%%%%$%&&&&&&&&&&%&%&%$$#$%&%%%%%%%$$%%%%%%%%%%%%%%&%&&%%&''&&$$$%%%&%%$%%%%%&%%%%%%%&%%$#$$%%$$$$%&&%%%%%%&&$##$$$$$$%&&%%$$$%%$%%%%&%&$%%%&%$$%%&&%%%%%%%%%$$%$%%$$##$%&&&&&%%&&&&&&&&%%%&%&%%&&$""""!"$%%%%%&&&%%&&&%%&%%%%$$$$%%$$%%&%%%$%%%%%%%&%%%%&%&&&%&%$%&'&%%%%%%%&%%$$%%&%&%%&%%%%&%%$$%$%%$$$$%%%%%%%%%&$#$$$$$$%%&&%$$$%%%%%%%&%%%%%%&%%%%%&%%%%%%%%%%%$$%%%$$#$%&&&&%&%%&&&%%&&%%%&&%%%&&&&$#"""""#%$%&&&&%%&&%%%&%&&%$$$$%$$$%%%%%%$%$$$%%%&&%%%%%&&%&%%$#$%&''&%%%%%%%&%%%%%&%%&%%&%%%&&%$$$%$%%%$$%%&%%%%%&$$$%$$$$&%%%%$%$%%%$%%%%%%$%%%%%$%&&&%%%%%%$%%$$$$%%%$##$%&&&&&%&&&&&&&%%%%&%%&%&&%%&%####$$%&%%&&&&&&&%&%&&&%%$$$$$%$%%%%%%%$%$$$%%&&%%%%%&%&%&%&%$$$$&&''&%%%%%%%%%%%%%%&%&%&&%%%&%%%$%%%%$%$%%%&%&%%%$$%$$$%%&&$$$$%%%%%%%&&%$%%%%%%%%%&&%%%$%$%%%%$$$%%%$$#$%&&&&%%&%&&%&%&%%%%%&%&&%&%%%%$$$$%&&%&&&&%%&&&&&&%&%%%$$$%$%%%%%$$$%%$$$%%&&%%%%%&%%&&%%%%%%$$%%'''&&%%%%&%&%%%%%%&%&%&&&%&&&%%$%%%%%$$%%%&%&%%$$$$$%&&%$$#$%%%%%%%&%%%%%%%%%%%%&%%%%%%$%%%%$$$%%%%##$%&&&&&&%&&&%&%&&%%%%%%&%&&&%$%&%&%&&&&&&&&&&%&%%&%&%&&$%$$$$%%%&%%$$%%%$%%&&&%%$%%%%&&%%%%%%%%%%%%&'''&&%%%%%%&%%%%&%%&&&&&&%%&&%%$$%%%%%%%%%&%%&$$##$%&%$$#$$%%%%%%&%%%%%%%%$%%%&%%%%%$$%%%%%%$%%%$$##$%&&&&%&&&&&&%&%%%%%&%%%&&%%%%%%&&&&%%%&&&&%%&%&&&%%%%$$$$$$$%%%%%%$%%%%$%%&&%%$%%%%&%%%%$$%%%%&%&%&&&'&&&%%%%&%&%%$%%&&%&&&&&%&%&%%%%%%%%%%%%%%&&$$$%%&%%$$$%%%%%%%&%%$$%%%%$%%%&%%%%%%$$%%%$$$%%%%$$#%%&&&%%&&&''&&&%&%%&&%%%&&%%$$$$%%%$$%%&&&%&%&&%&%&&%&%$$$$$$%&%&%$$%%%%$%%&&%%%%%%&%&&%%%$%%%&&&&&&%%&&''&%&%%%%%&$%$%&%%%%%&&&%&&&%%$%%%%%%%%%&%&$$%&&&%$$$%%%%%%&&&%%%%%%%$%%&&%%%%$%$%%$%%$%%%&%$$$%&&%&%&%%&&&&&%%&%&%%%%%%&%%$$$$$$$$$$%&&&&%%&%%&%&%%&%%$$$$$%%%&%$$$%%%%&&&&%%%%%%&%&%%%$$%%%%%&&&&&%%%&'''&%%%%%&%%$$%%%&&%&%&&&%&&&&%$%%%%&%%%%%%#$&&&%$$$%%%%%%%%&&%%%%%$%%%&&%%%%%%%%%%%$$%%%&%%$%%&&&&%&%%&%&&%&%%%&&%&%%%&&%%$$$$%$$$%&&'&&%&%%%&%%&%%%$$$$$$%%&%%%%%%%%%&%&&%%%%%&%%&%%%$$%$%%%%&&&&%&%&%&&''&&&&%%%%%%$%%%%%%%%%&&&%&&%%%%%%%%%&%&&$&&%%$$$$%%%%%%&&%%%&%%%%%%&&%%%$%$%$%%%$$%%%&%%$%%&&&&&%&%&&&&%&%%&&&&%%%&&%%$$$$$$$$%%&&'&&%&%%&&%%&%%$$$$%%%%&&%%%%$%%%&%&&&%%%%%&%%&%%%$#$$%%%%&&&&&%%&%%&&'''&%&%&%&%%%$%&%&%%%&&&&%%%&&$%$$%%%%%&%&&%%$$%%%%%%&%&%%%%%%&%%%%&&&%%$$$$$%%%$$$%%&%%%$%%&&&&%%%&%%&%&%%%&&&%%%%&%%$$$$$$$$%%&&&&%%&%&&&%&&%%$$$$%%%%%&%%%%%%%%&%&&&%&%%&%%&%&%%$$$$%%%&%&&&%%&&&&&%&&&''&&&%&%%%%%$%%%%%%%%&&%%$%%&%$%%%%&%&&&&%%$%%%%%%&&&&%%%%%%%%%&&%%%%%$$$$$%%$$$$%&%%%%%&&&&&&%&%%&%&%%%%&%&%%%&&&%%$$$$$$$%%&&'&%&%%&%&&%%%%$$$$%%%%%&&%%%$%%&%%&%&%&%%&&&%&%%%$$$%%%&%&&&&%&%%&&&&%%%&''''&&%%%&%%%%%&%%%&%%&%&%%%%%%%%%%%%&%&%%$%%%%%%%%&%&%%%%%%%%%&&&%$$$%$$%%%$$$$%%%%$$%%%&&&&&%&&&%&&%%%%&&%%%%&&%%$$$$$$$%%&&&&%&%&&%&&%&%%$$$$%%%&%&%%%$$%%%%%&&&%%%%&%%%&%%%$#$$%%%%&%&&%%%&&&&&&&%%&&&''&&%&%%&&%%%%%&%%%%%&&%%%&&%%%%%%&%&%%$%%%%%%%%&&%%%&%&%%%&&&%%$$%%$%%%%$##$%%%$$$$$%%&&%&%&%&%&&%%%%&%%%%%&&%$$#$$#$$%%&&&&%&%%&&&&%%%%$$$%%&%&%%%%%$$%%%&%&&&%&%%&%&%&%%$$#$$$%%%&%&&&%&&&&&&&&%%%%$%&''&&&%&%%&%%%%&%&%&%&&&&%%%&&%&%%%&%%$%%%%%%%&&&%%%%%&%%%%&&%%$$%$%%%%%%##$%%%$$$%%%%%%%%%%%&%&&%%%&&%&%%%&&%$##$$#$$%%&'&&%&%&&&&%%%%%$%$%%%%&%&%%$$$%%%&%&&&%%%%&%&%%&%%$$$$%%%%&%&&%%&%&&&&&&%&%%%$$%%''&&%%&%&%%%%%%&&&%&%&&&%%%&%%%%&%&%%%$%%%%%&%%%%%&%%%%%&%&%$%$%%%%%%%$#$%%%%$$%%%%&&&&%&&%%&%%%%&%%&%&%&&%$##$#$$$%%&&&&%&%%&%&&%&%$$%$%%%&%%&%%%%$%%&%&&&&%&%&%%&%%&%$$##$$%$%%&&&&&&&&&&&&&%%&&%%$#$%&''&&%%%%&&&%%&%&&&&&&&&&%%%&%%%%%%%%$%$$%%&%%%%&&%&%%&&&%%$$%%%%%%%%##$$%%%#$$%&%&&&&%&%&&&%&%%%%&%%&%&&%$#$#$$$%%%&&&&%&%&%&&%&%%%$%%%%%&%%&%%%%%%%&%&&&&%%%%%%&%%&%%$#$$$%%%%&&&&%&%&&&&&%%%&%%%%%$%%%&''&&&%%%%&&&%%%&%&%&%&&&%%%&&&%&&%$%$%%%&%%%%%&&&&%%&&&%%$$%%&%&%$$#$$%%$$$%%%%&%&&%&%%&&&%%%&%&&%&%&&%$$###$$%%%&&&&%%%%%&&%&%%%$%%%&%&%%&%&%%%%%%%&&&&%%&&%&%&%&%%$$$%%%&%%&&&&%&&&&&&&%&%&%%%%%%&%%&&'''&&%%%&&&&&%&%&&&&&&&&&%%%&%&%%%%%$%%&&%%%&&&%%%&&&%%$$%%%%%&%%$#$$%%$$$%%&%&%&&%%%%&%%%%%%%&%%&%&&%%$$##$$$%%&&&&%%&%&&%%&%%%$%%%&%&%%&&%%&%&%&&&&&%&%&%%&%&%&%%$$#$%%&%&&&&&%&&&&&&&&%%&%%%%%%&&&%%&'&''&&%%%%&&&&%&%&&&&&&%&%%%&&&%&%%$%%&&%&%%&&%&%&&&%%$$%$%%&%%%##$$%$$$$%%&%%%&&&&%&%%&%%%%&%%&%&&%%%$$$$$$$%%&&'&%%&%&%%&%%%$$%%&%%&%&&&&&%&%&%%&&&&%&%%&%%&%%%%$$$$%%%%%%&&&&&&&&&&&&&%&%%%$%%&%&&&&%%&&'''%%%%%&&&&%&&&&&&&&%&%%%&&%%%%%&&&%%%&&%&%&%&&%%%%$%%%%%%$$$$$$%%$$%%%%%&%&&%%&%&%%%%%&%%&%%%&%$$$$$$$%%%&&&%%&&%&%%&%%%%%%%%%&%%&&%&&%%%&%%&&&&%&%%&%&%%&&%$$$$%%$$$%&&&&&&&&&&&&%&%%%$$%%%&&&&&&&%%&&''&&&%%&&&&&%%&&&&%&%&%&%%%&&&%&&&%%&&&&%%%%&&%%%%%%%%%%%$$$#$%%%$%%%%%%%%&&%%&%&%%&%&&%&%&%&&%%$$$$$$%%%&&&&%%%%%&%&%%%$$%%&%&%%&&%&%%%&&%%&&&&%&&%&%&%%&%%%%$$%$$$$%&&%%&&&&&&&&&%%%$$$%%&%&&&&&&%%&%&&'''&%&%&&&&&&%&&&&%%%&&%%%%&%&&&&%&&&&&%%%&&%%%%%%%%%%&%$$$$%%$$%%%%%%%%&&%&%%&%%%%%%%%%%%&%%%$%%%$$%%%&&'&%&&&%%%&%%$$$%%%%&%&%%%&%&%&%%&&&&&&&%%&%%%&%%%%$$$$$$$$&&&&&&&&&&&&&&&%%%$$%%%%&&&&&&%&&&%&&''''&%&%&&&&&&&&&&%%&%%%%%&'&%&%&&&&&%%%%&&%%%%%%%%&%&$$#$$%%$$$%%%$$%%%&&%%&&&%%%&&%%%%%%&%%$%$%%$%%%&'&&%&%&&%%&%%$$$%%%&%%&%&%&%%&%%&&&&&&&&%&%%&&&&%%%$$$$$##$%&&&&%'''&'&&&&&&%$$%%&&&%&&&&%&%&&&%%&''''&%&%&&&&&%&&&&%%&&%&&&&&%%%%&&&%%%%&&&&%%%%%%&%%%$#$$%%$$$%%$$$$%%&%%&&&&%%%&%%%%%%%&%%%$%%%%%%%&&&&%&%&%&%&%%$$$$%%&%&%%&%%%%&%&%%&&&&&&%&%%&%%&%%%%$%%$$#$%&&&%&&&''&&&&&%%$$$%%&%%&&&&&%&%&&&&%%&&'''&&&&&&&&'&%&&&&%%&&&&&&%%%&&&&&&%&&&&%%%%%%%&%&%$#$$%%$$%&%%$%%%&%%%&%%%%%%&%&%%%%&&&%%$%%%%%%&&&&&%&%&&&%&%%%$$$%%&%&%%&%%%%&%&%%&&&&&&%%%&%&%&%%%$$$$$$$%%&&&%&&&&&&&&&&%%%$$%%&%&%&&&&&&%&&&&&%&%&&&''&&&&&&&&&&&&&&&&&&&&&&%%&&&&&%%&&&&&%%%%%%&%&%$#$$%%$$$%%%$%%%&%&&%%&&%%%%%%%$%%&&%%%$$%%%%&&&'&&%&%%&%%&%%$$$$%%&%%%&%%&%%%%&%&&&&&&&%&%&%&&%%%$$%%%$$$$&&'&&&&&&&&&&&&%%$$$%%%%&%&&&&%%&&&&&&%&&&%%&'''&&&&&&''&&%&&&&&&'&&%%&&&&%%&&&'&&%&%&%%&%%%$#$$%%$$$%%%$%%%%%&%%&&%%%$%%%%$%%%&%%$$%%%%&%&&&&%%&%&&%&%%%%$$$%%%%&&%&%&%%%&%%&&&&&&&%%%&%&&%&%%%%%%$$$$%&'&&&&&&&&&&%%%%%$%%%&%&%&&&&&%&%&%&%%&&&&%&&&&''&&&&&&&'&&%&&&&&&%%&%&&&&%%&&&&%%%%&%%%&&%$$$$%%$$%&%&%%%%&%&%%&%%%%%%&%%%%%&&%%$%$%%%%&&&&&&%%%&%%&%%&%$$$%%%%&%%%%%%%%&%&&%&&'&%&&%&%&%&&%%%%%%$$$%%&'&&&%&&&&&%&&&%$$%%%&%&%&&'&&&&&&&&%&%&&%%&%%&&''''&&&&'&'&&&&'&&&%&%&&&%%%&&&&%%%%&%%&&&%%$$$%$$$%%%&%%%%&%%&%&%%%%%%%%%%%%&&%%$%$%%&%&&&&&&%%&&&&&%&%%%$$%%%%&%%&%%%%%&%&&&&'&&&&%%&&&&&%%%%%%%$$$%&&'&&&%&&&'&&&&%%%%%%&&%&%&&&&&%&%&&&%&&&&%%&%&&%&&&&'&''&&'&&&&&&&%%&%&'&%%%%&&&%%%%%%%&&%%%$$$%$$$$%&&%%&%&%&%%&%&%%%%&%%%$%&%%%%%%%%%&&&&&&&%&&%&%&%%%%%$$%%%&&%&%%%%%%%%&&&&&&&&%%&&&&&&%&%%%&%$$$$%&'&&&%&&&&&&%&&%%%%&&&%%%&&&&&&&&&&&%&&&&%%%%&&&%%%&&&'&&&'''&'&&&%&&&&&&&%%%&&&%&%%%%%&%&&%%%$$$%$$%%&%%&%&%%&%&&&%%%%%%%%$%%&%%%%%%%&%&%&&&&%&%&&&&%&&%%$%%%%%%%&%&%%%%%&%&%&&'&&&&&%&%&&&&%%%&%%$$$$&&&%%%&&&&&&&&%%%$%&&&%&&&&''&&&&&&&%&%&&&&%&&&&&%&%%&&''&'&&'&&&%%&%%&&'ATBK_V_P 41 +Œ1ÿTßT¿PŸPL_LHHDDDD@@<<8440,,(($     +   \ No newline at end of file diff --git a/BACKUP/ART100/ATTRACT.IMG b/BACKUP/ART100/ATTRACT.IMG new file mode 100644 index 0000000..b63b522 Binary files /dev/null and b/BACKUP/ART100/ATTRACT.IMG differ diff --git a/BACKUP/ART100/ATTSTUFF.IMG b/BACKUP/ART100/ATTSTUFF.IMG new file mode 100644 index 0000000..30ced95 Binary files /dev/null and b/BACKUP/ART100/ATTSTUFF.IMG differ diff --git a/BACKUP/ART100/BALL.IMG b/BACKUP/ART100/BALL.IMG new file mode 100644 index 0000000..d6d5fd2 Binary files /dev/null and b/BACKUP/ART100/BALL.IMG differ diff --git a/BACKUP/ART100/BALLFONT.IMG b/BACKUP/ART100/BALLFONT.IMG new file mode 100644 index 0000000..8815483 Binary files /dev/null and b/BACKUP/ART100/BALLFONT.IMG differ diff --git a/BACKUP/ART100/BAST10.IMG b/BACKUP/ART100/BAST10.IMG new file mode 100644 index 0000000..567795c Binary files /dev/null and b/BACKUP/ART100/BAST10.IMG differ diff --git a/BACKUP/ART100/BAST18.IMG b/BACKUP/ART100/BAST18.IMG new file mode 100644 index 0000000..2bbe6a5 Binary files /dev/null and b/BACKUP/ART100/BAST18.IMG differ diff --git a/BACKUP/ART100/BAST7T.IMG b/BACKUP/ART100/BAST7T.IMG new file mode 100644 index 0000000..64a6287 Binary files /dev/null and b/BACKUP/ART100/BAST7T.IMG differ diff --git a/BACKUP/ART100/BAST8.IMG b/BACKUP/ART100/BAST8.IMG new file mode 100644 index 0000000..af99a06 Binary files /dev/null and b/BACKUP/ART100/BAST8.IMG differ diff --git a/BACKUP/ART100/BAST8T.IMG b/BACKUP/ART100/BAST8T.IMG new file mode 100644 index 0000000..22cb077 Binary files /dev/null and b/BACKUP/ART100/BAST8T.IMG differ diff --git a/BACKUP/ART100/BASTCYC.IMG b/BACKUP/ART100/BASTCYC.IMG new file mode 100644 index 0000000..99d8b62 Binary files /dev/null and b/BACKUP/ART100/BASTCYC.IMG differ diff --git a/BACKUP/ART100/BB.LOD b/BACKUP/ART100/BB.LOD new file mode 100644 index 0000000..e19731d --- /dev/null +++ b/BACKUP/ART100/BB.LOD @@ -0,0 +1,196 @@ +***> 5d6e300,1 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD.TBL +XON> +PPP> 6 +HDS1.IMG +GLO> PLYRHD.GLO +---> ewing0,ewing1 +GLO> XXXHD.GLO +---> ewing2,ewing3 +---> ewing4,ewing5,ewing6,ewing7,ewing8,ewing9,ewing10,ewing11,ewing12 +---> ewing13,ewing14,ewing15,ewing16 +GLO> PLYRHD.GLO +---> stock0,stock1 +GLO> XXXHD.GLO +---> stock2,stock3,stock4,stock5 +---> stock6,stock7,stock8,stock9,stock10,stock11,stock12,stock13,stock14 +---> stock15,stock16 +GLO> PLYRHD.GLO +---> shiek0,shiek1 +GLO> XXXHD.GLO +---> shiek2,shiek3,shiek4,shiek5,shiek6,shiek7,shiek8 +---> shiek9,shiek10,shiek11,shiek12,shiek13,shiek14,shiek15,shiek16 +GLO> PLYRHD.GLO +---> kmalone0,kmalone1 +GLO> XXXHD.GLO +---> kmalone2,kmalone3 +---> kmalone4,kmalone5,kmalone6,kmalone7,kmalone8,kmalone9,kmalone10 +---> kmalone11,kmalone12,kmalone13,kmalone14,kmalone15,kmalone16 +HDS2.IMG +GLO> PLYRHD.GLO +---> Person0,Person1 +GLO> XXXHD.GLO +---> Person2,Person3,Person4,Person5,Person6,Person7,Person8,Person9 +---> Person10,Person11,Person12,Person13,Person14,Person15,Person16 +GLO> PLYRHD.GLO +---> Augmon0,Augmon1 +GLO> XXXHD.GLO +---> Augmon2,Augmon3,Augmon4,Augmon5,Augmon6,Augmon7,Augmon8,Augmon9 +---> Augmon10,Augmon11,Augmon12,Augmon13,Augmon14,Augmon15,Augmon16 +GLO> PLYRHD.GLO +---> Benja0,Benja1 +GLO> XXXHD.GLO +---> Benja2,Benja3,Benja4,Benja5,Benja6,Benja7,Benja8,Benja9,Benja10,Benja11 +---> Benja12,Benja13,Benja14,Benja15,Benja16 +GLO> PLYRHD.GLO +---> Cole0,Cole1 +GLO> XXXHD.GLO +---> Cole2 +---> Cole3,Cole4,Cole5,Cole6,Cole7,Cole8,Cole9,Cole10,Cole11,Cole12,Cole13 +---> Cole14,Cole15,Cole16 +GLO> PLYRHD.GLO +---> Drex0,Drex1 +GLO> XXXHD.GLO +---> Drex2,Drex3,Drex4,Drex5,Drex6 +---> Drex7,Drex8,Drex9,Drex10,Drex11,Drex12,Drex13,Drex14,Drex15,Drex16 +GLO> PLYRHD.GLO +---> Elliot0,Elliot1 +GLO> XXXHD.GLO +---> Elliot2,Elliot3 +---> Elliot4,Elliot5,Elliot6,Elliot7,Elliot8,Elliot9,Elliot10,Elliot11 +---> Elliot12,Elliot13,Elliot14,Elliot15,Elliot16 +GLO> PLYRHD.GLO +---> Hrdaway0,Hrdaway1 +GLO> XXXHD.GLO +---> Hrdaway2,Hrdaway3 +---> Hrdaway4,Hrdaway5,Hrdaway6,Hrdaway7,Hrdaway8,Hrdaway9,Hrdaway10 +---> Hrdaway11,Hrdaway12,Hrdaway13,Hrdaway14,Hrdaway15,Hrdaway16 +HDS4.IMG +GLO> PLYRHD.GLO +---> Miller0,Miller1 +GLO> XXXHD.GLO +---> Miller2,Miller3,Miller4,Miller5,Miller6,Miller7 +---> Miller8,Miller9,Miller10,Miller11,Miller12,Miller13,Miller14,Miller15 +---> Miller16 +GLO> PLYRHD.GLO +---> Mutumbo0,Mutumbo1 +GLO> XXXHD.GLO +---> Mutumbo2,Mutumbo3,Mutumbo4,Mutumbo5,Mutumbo6,Mutumbo7 +---> Mutumbo8,Mutumbo9,Mutumbo10,Mutumbo11,Mutumbo12,Mutumbo13,Mutumbo14 +---> Mutumbo15,Mutumbo16 +GLO> PLYRHD.GLO +---> Oakley0,Oakley1 +GLO> XXXHD.GLO +---> Oakley2,Oakley3,Oakley4,Oakley5,Oakley6 +---> Oakley7,Oakley8,Oakley9,Oakley10,Oakley11,Oakley12,Oakley13,Oakley14 +---> Oakley15,Oakley16 +GLO> PLYRHD.GLO +---> Hakeem0,Hakeem1 +GLO> XXXHD.GLO +---> Hakeem2,Hakeem3,Hakeem4,Hakeem5,Hakeem6 +---> Hakeem7,Hakeem8,Hakeem9,Hakeem10,Hakeem11,Hakeem12,Hakeem13,Hakeem14 +---> Hakeem15,Hakeem16 +GLO> PLYRHD.GLO +---> Rice0,Rice1 +GLO> XXXHD.GLO +---> Rice2,Rice3,Rice4,Rice5 +---> Rice6,Rice7,Rice8,Rice9,Rice10,Rice11,Rice12,Rice13,Rice14,Rice15 +---> Rice16 +GLO> PLYRHD.GLO +---> Robins0,Robins1 +GLO> XXXHD.GLO +---> Robins2,Robins3,Robins4,Robins5,Robins6,Robins7,Robins8 +---> Robins9,Robins10,Robins11,Robins12,Robins13,Robins14,Robins15,Robins16 +HDS5.IMG +GLO> PLYRHD.GLO +---> schremp0,schremp1 +GLO> XXXHD.GLO +---> schremp2 +---> schremp3,schremp4,schremp5,schremp6,schremp7,schremp8,schremp9 +---> schremp10,schremp11,schremp12,schremp13,schremp14,schremp15,schremp16 +GLO> PLYRHD.GLO +---> smith0,smith1 +GLO> XXXHD.GLO +---> smith2,smith3,smith4 +---> smith5,smith6,smith7,smith8,smith9,smith10,smith11,smith12,smith13 +---> smith14,smith15,smith16 +GLO> PLYRHD.GLO +---> tisdale0,tisdale1 +GLO> XXXHD.GLO +---> tisdale2,tisdale3,tisdale4,tisdale5,tisdale6 +---> tisdale7,tisdale8,tisdale9,tisdale10,tisdale11,tisdale12,tisdale13 +---> tisdale14,tisdale15,tisdale16 +GLO> PLYRHD.GLO +---> laet0,laet1 +GLO> XXXHD.GLO +---> laet2,laet3,laet4,laet5,laet6,laet7,laet8,laet9,laet10 +---> laet11,laet12,laet13,laet14,laet15,laet16 +GLO> PLYRHD.GLO +---> hawkins0,hawkins1 +GLO> XXXHD.GLO +---> hawkins2,hawkins3 +---> hawkins4,hawkins5,hawkins6,hawkins7,hawkins8,hawkins9,hawkins10 +---> hawkins11,hawkins12,hawkins13,hawkins14,hawkins15,hawkins16 +;Larry +GLO> PLYRHD.GLO +---> johnson0,johnson1 +GLO> XXXHD.GLO +---> johnson2,johnson3,johnson4,johnson5,johnson6,johnson7,johnson8,johnson9 +---> johnson10,johnson11,johnson12,johnson13,johnson14,johnson15,johnson16 +GLO> PLYRHD.GLO +---> divac0,divac1 +GLO> XXXHD.GLO +---> divac2,divac3,divac4,divac5,divac6,divac7,divac8,divac9,divac10 +---> divac11,divac12,divac13,divac14,divac15,divac16 +HDS6.IMG +GLO> PLYRHD.GLO +---> kemp0,kemp1 +GLO> XXXHD.GLO +---> kemp2,kemp3,kemp4,kemp5,kemp6,kemp7,kemp8,kemp9 +---> kemp10,kemp11,kemp12,kemp13,kemp14,kemp15,kemp16 +GLO> PLYRHD.GLO +---> pippin0,pippin1 +GLO> XXXHD.GLO +---> pippin2,pippin3,pippin4,pippin5,pippin6,pippin7,pippin8,pippin9 +---> pippin10,pippin11,pippin12,pippin13,pippin14,pippin15,pippin16 +GLO> PLYRHD.GLO +---> gill0,gill1 +GLO> XXXHD.GLO +---> gill2,gill3,gill4,gill5,gill6,gill7,gill8,gill9,gill10,gill11,gill12 +---> gill13,gill14,gill15,gill16 +GLO> PLYRHD.GLO +---> mullin0,mullin1 +GLO> XXXHD.GLO +---> mullin2,mullin3,mullin4,mullin5,mullin6,mullin7,mullin8,mullin9 +---> mullin10,mullin11,mullin12,mullin13,mullin14,mullin15,mullin16 +ASM> PLYRHD2.TBL +HDS7.IMG +GLO> PLYRHD.GLO +---> BEdwrd0,BEdwrd1 +GLO> XXXHD.GLO +---> BEdwrd2,BEdwrd3,BEdwrd4,BEdwrd5 +---> BEdwrd6,BEdwrd7,BEdwrd8,BEdwrd9,BEdwrd10,BEdwrd11,BEdwrd12,BEdwrd13 +---> BEdwrd14,BEdwrd15,BEdwrd16 +GLO> PLYRHD.GLO +---> gug0,gug1 +GLO> XXXHD.GLO +---> gug2,gug3,gug4,gug5,gug6,gug7,gug8,gug9,gug10 +---> gug11,gug12,gug13,gug14,gug15,gug16 +;GLO> IMGTBL4.GLO +;ASM> plyrhd4.tbl +;ourhds2.img +;---> SAL1,SAL2,SAL3,SAL4,SAL5 +;---> SAL6,SAL7,SAL8,SAL9,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +;ourhds3.img +;---> RAIDEN01,RAIDEN02,RAIDEN03,RAIDEN04,RAIDEN05,RAIDEN06 +;---> RAIDEN07,RAIDEN08,RAIDEN09,RAIDEN10,RAIDEN11,RAIDEN12,RAIDEN13,RAIDEN14 +;---> RAIDEN15,RAIDEN16 +;raiden.img +;---> ballite1,ballite2,ballite3,ballite4,ballite5,ballite6,ballite7,lighten1 +;---> lighten2,lighten3,lighten4,lighten5,lighten6,lighten7 +PPP> 0 + + diff --git a/BACKUP/ART100/BB2.LOD b/BACKUP/ART100/BB2.LOD new file mode 100644 index 0000000..7f1fd13 --- /dev/null +++ b/BACKUP/ART100/BB2.LOD @@ -0,0 +1,93 @@ +***> 3eda390,1 +; +POF> +COF> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W +; +ASM> CROWD.TBL +; +nbacrowd.img +;---> COACH02,COACH03,COACH04,COACH05,COACH06 +;---> BNCHPL02,BNCHPL03 +;,BNCHPL04,BNCHPL05,BNCHPL06,BNCHPL07 +---> CR4THD02,CR4THD03,CR4THD04,CR4THD05 +;,CR4THD06,CR4THD07 +; +ASM> PLAQUES.TBL +; +tvtext.img +---> BST_DEFred,BST_STKred,BST_RNKred,BST_OFFred +; +PON> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRSEQ.TBL +GLO> PLYRSEQ.GLO +; +nba_pas1.img +---> w1cp1,w1cp2,w1cp3,w1cp4 +---> w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 +---> w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 +---> w5cp5,w5cp6 +---> w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 +---> w1ohp9,w1ohp10,w1ohp11 +---> w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 +---> w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 +---> w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 +---> w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11 +---> w5ohp1,w5ohp2,w5ohp3,w5ohp4 +---> w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 +; +nba_msc2.img +---> w1push1,w1push2,w1push3 +---> w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 +---> w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 +---> w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 +---> w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 +---> w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 +---> w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 +---> w5push10,w5push11 +; +nba_def1.img +---> T1SWPE1,T1SWPE2,T1SWPE3,T1SWPE4 +---> T1SWPE5 +---> T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T1SWPE10 +---> T1SWPE11,T1SWPE12,T2SWPE1,T2SWPE2 +---> T2SWPE3 +---> T2SWPE4,T2SWPE5 +---> T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T2SWPE10,T2SWPE11,T2SWPE12,T3SWPE1 +---> T3SWPE2,T3SWPE3,T3SWPE4 +---> T3SWPE5 +---> T3SWPE6,T3SWPE7,T3SWPE8 +---> T3SWPE9,T3SWPE10,T3SWPE11,T3SWPE12,T4SWPE1,T4SWPE2,T4SWPE3,T4SWPE4 +---> T4SWPE6 +---> T4SWPE5,T4SWPE7,T4SWPE8,T4SWPE9,T4SWPE10,T4SWPE11 +---> T4SWPE12,T5SWPE1,T5SWPE2,T5SWPE3,T5SWPE4,T5SWPE6 +---> T5SWPE5 +---> T5SWPE7,T5SWPE8,T5SWPE9,T5SWPE10,T5SWPE11,T5SWPE12 +; +nba_def3.img +---> w1reb5,w1reb7,w1reb8,w1reb9,w1reb10 +---> w2reb1,w2reb2,w2reb3,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 +;---> w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 +---> w4reb4,w4reb5,w4reb7,w4reb8,w4reb9,w4reb10 +---> w5reb5,w5reb7,w5reb8,w5reb9 +---> w1blokl1,w1blokl2,w1blokl3,w1blokl4 +---> w2blokl1,w2blokl2,w2blokl3,w2blokl4 +---> w3blokl1,w3blokl2,w3blokl3,w3blokl4 +---> w4blokl1,w4blokl2,w4blokl3,w4blokl4 +---> w5blokl1,w5blokl2,w5blokl3,w5blokl4 +; +nba_def4.img +---> w1rej1,w1rej2,w1rej3 +---> w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 +---> w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11 +;,w3rej1 +;---> w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 +---> w4rej1,w4rej2,w4rej3,w4rej4,w4rej5 +---> w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 +---> w4rej11 diff --git a/BACKUP/ART100/BB3.LOD b/BACKUP/ART100/BB3.LOD new file mode 100644 index 0000000..8b177b0 --- /dev/null +++ b/BACKUP/ART100/BB3.LOD @@ -0,0 +1,35 @@ +***> 5c3ec30,2 +; +COF> +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> BEHIND.TBL +; +nba_pas2.img +---> T1HINDR6,T1HINDR7,T1HINDR8,T1HINDR9,T1HINDR10 +---> T2HINDR6,T2HINDR7,T2HINDR8,T2HINDR9,T2HINDR10 +---> T3HINDR6,T3HINDR7,T3HINDR8,T3HINDR9,T3HINDR10 +---> T4HINDR6,T4HINDR7,T4HINDR8,T4HINDR9,T4HINDR10 +;---> T5HINDR6,T5HINDR7,T5HINDR8,T5HINDR9,T5HINDR10 +---> T2HINDL6,T2HINDL7,T2HINDL8,T2HINDL9,T2HINDL10 +---> T3HINDL6,T3HINDL7,T3HINDL8,T3HINDL9,T3HINDL10 +---> T4HINDL6,T4HINDL7,T4HINDL8,T4HINDL9,T4HINDL10 +; +ASM> PASS.TBL +; +---> W1NLPR1,W1NLPR2,W1NLPR3,W1NLPR4 +---> W2NLPR1,W2NLPR2,W2NLPR3,W2NLPR4 +---> W3NLPR1,W3NLPR2,W3NLPR3,W3NLPR4 +---> W4NLPR1,W4NLPR2,W4NLPR3,W4NLPR4 +---> W5NLPR1,W5NLPR2,W5NLPR3,W5NLPR4 +; +nba_pas3.img +---> W1ALPAS1,W1ALPAS2,W1ALPAS3,W1ALPAS4 +---> W2ALPAS1,W2ALPAS2,W2ALPAS3,W2ALPAS4 +---> W3ALPAS1,W3ALPAS2,W3ALPAS3,W3ALPAS4 +---> W4ALPAS1,W4ALPAS2,W4ALPAS3,W4ALPAS4 +---> W5ALPAS1,W5ALPAS2,W5ALPAS3,W5ALPAS4 diff --git a/BACKUP/ART100/BB4.LOD b/BACKUP/ART100/BB4.LOD new file mode 100644 index 0000000..269b55f --- /dev/null +++ b/BACKUP/ART100/BB4.LOD @@ -0,0 +1,48 @@ +***> 52e6c90,2 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> FLAIL.TBL +GLO> FLAIL.GLO +; +nba_msc1.img +;---> w1cow1,w1cow2,w1cow3 +;---> w1cow4,w1cow5,w1cow6,w1cow7,w2cow1,w2cow2,w2cow3,w2cow4,w2cow5,w2cow6 +;---> w2cow7,w3cow1,w3cow2,w3cow3,w3cow4,w3cow5,w3cow6,w3cow7,w4cow1,w4cow2 +;---> w4cow3,w4cow4,w4cow5,w4cow6,w4cow7,w5cow1,w5cow2,w5cow3,w5cow4,w5cow5 +;---> w5cow6,w5cow7 +---> w1flai1,w1flai2,w1flai3,w1flai4,w1flai5,w1flai6,w1flai7,w1flai8 +---> w2flai1,w2flai2,w2flai3,w2flai4 +---> w2flai5,w2flai6,w2flai7,w2flai8,w2flai9,w2flai11 +---> w3flai1,w3flai2,w3flai3,w3flai4,w3flai5,w3flai6,w3flai7 +---> w3flai8,w3flai9 +---> w4flai1,w4flai2,w4flai3,w4flai4,w4flai5,w4flai6 +---> w4flai7,w4flai8 +---> w5flai2,w5flai3,w5flai4,w5flai5,w5flai6 +---> w5flai7,w5flai8,w5flai10,w5flai11 +; +nba_msc4.img +---> w1fall1,w1fall2 +---> w1fall3,w1fall4,w1fall5,w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 +---> w1fall11,w1fall12,w1fall13,w1fall14,w1fall15,w1fall16,w1fall17,w1fall18 +---> w1fall19,w1fall20,w1fall21,w1fall22,w1fall23 +---> w2fall1,w2fall2 +---> w2fall3,w2fall4,w2fall5,w2fall6,w2fall7,w2fall8,w2fall9,w2fall10 +---> w2fall11,w2fall12,w2fall13,w2fall14,w2fall15,w2fall16,w2fall17,w2fall18 +---> w2fall19,w2fall20,w2fall21 +---> w3fall1,w3fall2,w3fall3,w3fall4 +---> w3fall5,w3fall6,w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 +---> w3fall13,w3fall14,w3fall15,w3fall16,w3fall17,w3fall18,w3fall19,w3fall20 +---> w3fall21,w3fall22,w3fall23,w3fall24 +---> w4fall1,w4fall2,w4fall3 +---> w4fall4,w4fall5,w4fall6,w4fall7,w4fall8,w4fall9,w4fall10,w4fall11 +---> w4fall12,w4fall13,w4fall14,w4fall15,w4fall16,w4fall17,w4fall18,w4fall19 +---> w4fall20,w4fall21,w4fall22 +---> w5fall1,w5fall2,w5fall3,w5fall4 +---> w5fall5,w5fall6,w5fall7,w5fall8,w5fall9,w5fall10,w5fall11,w5fall12 +---> w5fall13,w5fall14,w5fall15,w5fall16,w5fall17,w5fall18,w5fall19,w5fall20 +---> w5fall21,w5fall22 diff --git a/BACKUP/ART100/BB5.LOD b/BACKUP/ART100/BB5.LOD new file mode 100644 index 0000000..d557111 --- /dev/null +++ b/BACKUP/ART100/BB5.LOD @@ -0,0 +1,187 @@ +***> 36ad630,0 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRDSP.TBL +; +nba_sht2.img +---> T3DESPA1,T3DESPA2,T3DESPA3,T3DESPA4,T3DESPA5,T3DESPA6 +---> T3DESPA7 +---> T3DESPB1,T3DESPB2,T3DESPB3,T3DESPB4,T3DESPB5 +---> T3DESPB6,T3DESPB7,T3DESPB8 +---> T4DESPA1,T4DESPA2,T4DESPA3,T4DESPA4,T4DESPA5,T4DESPA6 +---> T4DESPA7,T4DESPA8 +; +ASM> PLYRDSEQ.TBL +GLO> DUNKS.GLO +; +nba_dnk1.img +---> M3SPRLA1,M3SPRLA2,M3SPRLA3,M3SPRLA4,M3SPRLA5 +---> M3SPRLA6,M3SPRLA7,M3SPRLA8,M3SPRLA9,M3SPRLA10 +---> W3SETLA1,W3SETLA2,W3SETLA3,W3SETLA4 +---> W3SETLA5,W3SETLA6,W3SETLA7,W3SETLA8,W3SETLA9 +---> S1SETLA1,S1SETLA2,S1SETLA3,S1SETLA4,S1SETLA5 +---> S1SETLA6,S1SETLA7,S1SETLA8,S1SETLA9 +---> S2HBHLA1,S2HBHLA2,S2HBHLA3,S2HBHLA4 +---> S2HBHLA5,S2HBHLA6,S2HBHLA7,S2HBHLA8,S2HBHLA9 +---> S3HBHLA1,S3HBHLA2,S3HBHLA3,S3HBHLA4 +---> S3HBHLA6,S3HBHLA7,S3HBHLA8,S3HBHLA9 +---> S3BEHLA1,S3BEHLA2,S3BEHLA3,S3BEHLA4 +---> S3BEHLA5,S3BEHLA6,S3BEHLA7,S3BEHLA8,S3BEHLA9 +---> S3BETLA2,S3BETLA3,S3BETLA4,S3BETLA5 +---> S3BETLA6,S3BETLA7,S3BETLA8,S3BETLA9,S3BETLA10 +---> S4SETLA1,S4SETLA2,S4SETLA3,S4SETLA4,S4SETLA5 +---> S4SETLA6,S4SETLA7,S4SETLA8,S4SETLA9 +---> S5SETLA1,S5SETLA2,S5SETLA3,S5SETLA4,S5SETLA5 +---> S5SETLA6,S5SETLA7,S5SETLA8,S5SETLA9,S5SETLA10 +---> W3SPLY1,W3SPLY2,W3SPLY3,W3SPLY4,W3SPLY5,W3SPLY6,W3SPLY7,W3SPLY8 +---> W3SPLY9,W3SPLY10,W3SPLY11,W3SPLY12,W3SPLY13,W3SPLY14,W3SPLY15,W3SPLY16 +---> W3SPLY17,W3SPLY18,W3SPLY19,W3SPLY20 +; +nba_dnk2.img +---> M1SPDU1,M1SPDU2,M1SPDU3 +---> M1SPDU4,M1SPDU5,M1SPDU6,M1SPDU7,M1SPDU8,M1SPDU9,M1SPDU10,M1SPDU11 +---> M1SPDU12,M1SPDU13,M1SPDU14,M1SPDU15,M1SPDU16,M1SPDU17,M1SPDU18,M1SPDU19 +---> M1SPDU20,M2DKDU1,M2DKDU2,M2DKDU3,M2DKDU4,M2DKDU5,M2DKDU6,M2DKDU7 +---> M2DKDU8,M2DKDU9,M2DKDU10,M2DKDU11,M2DKDU12,M2DKDU13,M2DKDU14,M2DKDU15 +---> M2DKDU16,M3TUKDU1,M3TUKDU2,M3TUKDU3,M3TUKDU4,M3TUKDU5,M3TUKDU6 +---> M3TUKDU7,M3TUKDU8,M3TUKDU9,M3TUKDU10,M3TUKDU11,M3TUKDU12,M3TUKDU13 +---> M3TUKDU14,M3TUKDU15,M3TUKDU16,M3TUKDU17,M3SPRDU1,M3SPRDU2,M3SPRDU3 +---> M3SPRDU4,M3SPRDU5,M3SPRDU6,M3SPRDU7,M3SPRDU8,M3SPRDU9,M3SPRDU10 +---> M3SPRDU11,M5REVDU1,M5REVDU2,M5REVDU3,M5REVDU4,M5REVDU5,M5REVDU6 +---> M5REVDU7,M5REVDU8,M5REVDU9,M5REVDU10,M5REVDU11,M5REVDU12,M5REVDU13 +---> M5REVDU14,M5REVDU15,M5REVDU16,S1TUKDU1,S1TUKDU2,S1TUKDU3,S1TUKDU4 +---> S1TUKDU5,S1TUKDU6,S1TUKDU7,S1TUKDU8,S1TUKDU9,S1TUKDU10,S1TUKDU11 +---> S3SORDU1,S3SORDU2,S3SORDU3,S3SORDU4,S3SORDU5,S3SORDU6,S3SORDU7,S3SORDU8 +---> S3BKDU1,S3BKDU2,S3BKDU3,S3BKDU4,S3BKDU5,S3BKDU6,S3BKDU7,S3BKDU8,S3BKDU9 +---> S3BKDU10,S3BKDU11,S3BKDU12,S3BKDU14,S3BKDU15,S3BKDU16,W3SPRDU1 +---> W3SPRDU2,W3SPRDU3,W3SPRDU4,W3SPRDU5,W3SPRDU6,W3SPRDU7,W3SPRDU8,W3SPRDU9 +---> W3SPRDU10,W3SPRDU11,W3SPRDU12,W3SPRDU13,W3SPRDU14 +;---> W3SWDU1,W3SWDU2,W3SWDU3,W3SWDU4,W3SWDU5,W3SWDU6,W3SWDU7,W3SWDU8,W3SWDU9 +---> W3SWDU10,W3SWDU11,W3SWDU12,W3FLDU1,W3FLDU2,W3FLDU3,W3FLDU4,W3FLDU5 +---> W3FLDU6,W3FLDU7,W3FLDU8,W3FLDU9,W3FLDU10,W3FLDU11,W3FLDU12,W3FLDU13 +---> W3CRZDU1,W3CRZDU2,W3CRZDU3,W3CRZDU4,W3CRZDU5,W3CRZDU6,W3CRZDU7,W3CRZDU8 +---> W3CRZDU9,W3CRZDU10,W3CRZDU11,W3CRZDU12,W3CRZDU13,W3CRZDU14,W3CRZDU15 +---> W3CRZDU16,W3CRZDU17,W3CRZDU18,W3CRZDU19,W3CRZDU20 +---> W3SPNDU1,W3SPNDU2,W3SPNDU3,W3SPNDU4,W3SPNDU5 +---> W3SPNDU6,W3SPNDU7,W3SPNDU8,W3SPNDU9,W3SPNDU10,W3SPNDU11,W3SPNDU12 +---> W3SPNDU13,W3SPNDU14,W3SPNDU15,W3SPNDU16,W3SPNDU17,W3SPNDU18,W3SPNDU19 +---> W3SPNDU20,W3SPNDU21 +---> W3SMDU6,W3SMDU7,W3SMDU8,W3SMDU9 +; +nbafades.img +---> W2FADIN4,W2FADIN5,W2FADIN6 +---> W2FADIN7,W2FADIN8,W2FADIN9,W2FADIN10,W2FADIN11,W2FADIN12,W2FADIN13 +---> W3FADIN5,W3FADIN6 +---> W3FADIN7,W3FADIN8,W3FADIN9,W3FADIN10,W3FADIN11,W3FADIN12,W3FADIN13 +---> W4FADIN2,W4FADIN3,W4FADIN4,W4FADIN5 +---> W4FADIN8,W4FADIN9,W4FADIN10,W4FADIN11,W4FADIN12,W4FADIN13 +---> W2FADAW3,W2FADAW4,W2FADAW5,W2FADAW6 +---> W2FADAW7,W2FADAW8,W2FADAW9,W2FADAW10,W2FADAW11,W2FADAW12,W2FADAW13 +---> W3FADAW3,W3FADAW4,W3FADAW5,W3FADAW6 +---> W3FADAW7,W3FADAW8,W3FADAW9,W3FADAW10,W3FADAW11,W3FADAW12,W3FADAW13 +---> W4FADAW3,W4FADAW4,W4FADAW5,W4FADAW6 +---> W4FADAW7,W4FADAW8,W4FADAW9,W4FADAW10,W4FADAW11,W4FADAW12,W4FADAW13 +; +nba_sht2.img +---> w1hks1,w1hks2,w1hks3 +---> w1hks4,w1hks5,w1hks6,w1hks7,w1hks8,w1hks9,w1hks10 +---> w3hks1,w3hks2,w3hks3 +---> w3hks4,w3hks5,w3hks6,w3hks7,w3hks8,w3hks9,w3hks10,w4hks1,w4hks2,w4hks3 +---> w4hks4,w4hks5,w4hks6,w4hks7,w4hks8,w4hks9,w4hks10,w5hks1,w5hks2,w5hks3 +---> w5hks4,w5hks5,w5hks6,w5hks7,w5hks8,w5hks9,w5hks10 +; +nbafhook.img +---> w3fhks1,w3fhks2,w3fhks3,w3fhks4,w3fhks5,w3fhks6,w3fhks7,w3fhks8,w3fhks9 +; +ASM> STAND.TBL +; +nba_msc3.img +---> w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 +---> w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 +---> w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 +; +nba_stn1.img +---> W1ST1 +---> W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 +---> W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 +---> W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 +---> w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 +---> w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 +---> w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 +; +ASM> PLYRSEQ2.TBL +; +nba_msc2.img +---> w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 +---> w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 +---> w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 +---> w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 +---> w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +; +nba_msc3.img +---> w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 +---> w4hndne1,w4hndne2,w4hndne3,w4hndne4 +---> w4hndne5 +---> w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 +---> w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 +---> w2hndhp1 +---> w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 +---> w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 +---> w1pikup1,w1pikup2 +---> w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 +---> w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 +---> w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +; +nbaspnmv.img +---> W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 +---> W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 +---> W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 +; +ASM> PLYRSEQ3.TBL +GLO> PLYRSEQ3.GLO +; +nba_stn1.img +---> w1dst1,w1dst2,w1dst3,w1dst4,w1dst5,w1dst6,w1dst7,w1dst8,w1dst9,w1dst10 +---> w2dst1,w2dst2,w2dst3,w2dst4,w2dst5,w2dst6,w2dst7,w2dst8,w2dst9,w2dst10 +---> w3dst1,w3dst2,w3dst3,w3dst4,w3dst5,w3dst6,w3dst7,w3dst8,w3dst9,w3dst10 +---> w4dst1,w4dst2,w4dst3,w4dst4,w4dst5,w4dst6,w4dst7,w4dst8,w4dst9,w4dst10 +---> w5dst1,w5dst2,w5dst3,w5dst4,w5dst5,w5dst6,w5dst7,w5dst8,w5dst9,w5dst10 +---> w1drcr1,w1drcr2,w1drcr3,w1drcr4,w1drcr5,w1drcr6,w1drcr7,w1drcr8,w1drcr9 +---> w1drcr10,w1drcr11,w1drcr12,w2drcr1,w2drcr2,w2drcr3,w2drcr4,w2drcr5 +---> w2drcr6,w2drcr7,w2drcr8,w2drcr9,w2drcr10,w2drcr11,w2drcr12,w3drcr1 +---> w3drcr2,w3drcr3,w3drcr4,w3drcr5,w3drcr6,w3drcr7,w3drcr8,w3drcr9 +---> w3drcr10,w3drcr11,w3drcr12,w4drcr1,w4drcr2,w4drcr3,w4drcr4,w4drcr5 +---> w4drcr6,w4drcr7,w4drcr8,w4drcr9,w4drcr10,w4drcr11,w4drcr12,w5drcr1 +---> w5drcr2,w5drcr3,w5drcr4,w5drcr5,w5drcr6,w5drcr7,w5drcr8,w5drcr9 +---> w5drcr10,w5drcr11,w5drcr12,w1stand1,w1stand2,w1stand3,w1stand4,w2stand1 +---> w2stand2,w2stand3,w2stand4,w3stand1,w3stand2,w3stand3,w3stand4,w4stand1 +---> w4stand2,w4stand3,w4stand4,w5stand1,w5stand2,w5stand3,w5stand4 +; +ASM> PLYRJSHT.TBL +; +nba_sht1.img +---> w1js1,w1js2,w1js3,w1js4 +---> w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 +---> w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 +---> w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 +---> w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 +---> w5js9,w5js10 +; +nba_sht3.img +---> W1UNDR1,W1UNDR2,W1UNDR3,W1UNDR4,W1UNDR5 +---> W1UNDR6,W1UNDR7,W1UNDR8,W1UNDR9 +---> W5UNDR1,W5UNDR2,W5UNDR3,W5UNDR4,W5UNDR5 +---> W5UNDR6,W5UNDR7,W5UNDR8,W5UNDR9,W5UNDR10,W5UNDR11 +; +ASM> PLYRMAKE.TBL +; +nba_mak1.img +;W5BGDR2 is an unused img +---> W5BGDR1,W5BGDR2,W5BGDR3,W5BGDR4,W5BGDR5,W5BGDR6,W5BGDR7,W5BGDR8,W5BGDR9 +---> W5BGDR10 + diff --git a/BACKUP/ART100/BB6.LOD b/BACKUP/ART100/BB6.LOD new file mode 100644 index 0000000..08c2e14 --- /dev/null +++ b/BACKUP/ART100/BB6.LOD @@ -0,0 +1,224 @@ +***> 4000000,2 +; +PON> +CON> +XOF> +; +ASM> names2.tbl +GLO> names2.glo +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +pnames2.img +---> SCOTT,ROBERTSON,CHAPMAN,WEBB,LANG,RUFFIN,MARCI2,WEATHSPN +---> AMRICH,ANZALONE,BENSON,BUTATA,FUNK,HAEGERJR,JIGGETTS +---> KELLER,LAWMAN,LEE,MDOC,MIKE,MUNDAY,NORTH,PERRY,RIVETT,SEAN,ZIRIN +---> HBETT,MBETT +pnames.img +---> GUGLI2,MCKEE2,ELLIOT2,TURMELL,CARLTON,HEY +---> FITZ,AIRMOR,BARDO,HEDRICK,MINIFE,MARTIN,PESINA,THOMPS,GEER,JAPPLE +---> FERRIER,VINIK,EHRLICH,LIPTAK,ROOT,MEDNICK,ROAN,OURSLER,QUINN,TOBIAS,BOON +PLYRNAME.img +---> ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR,BOSNBRO,BOSNBAR +;,ATLNROO,ATLNHEN +---> BOSNMON,BOSNRAD,BOSNFOX,CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR,CHINPIP +---> CHINROD,CHINKUK,CHINLON,CHINKER,CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER +---> DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC,DENNRAU,DENNMUT,DENNMcD,DENNROS +---> DENNELL,DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU,GOLNWIL,GOLNSPR,GOLNSEI +---> GOLNSMI,GOLNMUL,HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI,INDNMIL +;,GOLNCOL +---> INDNDAV,INDNSMI,INDNMcK,INDNJAC,LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR +---> LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON,MIANMOU,MIANWIL,MIANCHA +;,LALNJOH +---> MIANHAR,MIANDAN,MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU,MINNRID,MINNLAN +---> MINNWEB,MINNGUG,MINNGAR,NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW,NWYNEWI +---> NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA,ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO +;,NWYNAND,ORLNGAT +---> ORLNKON,PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX,PHONJOH,PHONTIS +---> PHONMAN,PHONPER,PHONFIN,PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI,SACNOWE +---> SACNRIT,SACNGRA,SACNMAR,SACNEDN,SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG +---> SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR,TORNROG,TORNSTO,TORNROB,TORNMIL +---> TORNMUR,UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR,VANNANT,VANNEDW,VANNSCO +---> VANNREE,VANNMUR,WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR +infowin.img +---> GAINED_TXT,IDIOTS_TXT +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> plyrdsq2.tbl +GLO> dunks2.glo +; +nba_dnk2.img +---> W3PLDDU5,W3PLDDU6,W3PLDDU7,W3PLDDU8,W3PLDDU9 +---> W3PLDDU10,W3PLDDU11,W3PLDDU12,W3PLDDU13,W3PLDDU14,W3PLDDU15 +---> W3SMDU1,W3SMDU2,W3SMDU3,W3SMDU4,W3SMDU5 +; +nba_dnk3.img +---> W2THPW1,W2THPW2,W2THPW3 +---> W2THPW4,W2THPW5,W2THPW6,W2THPW7,W2THPW8,W2THPW9,W2THPW10,W2THPW11 +---> W2THPW12,W4THPW1,W4THPW2,W4THPW3,W4THPW4,W4THPW5,W4THPW6 +---> W4THPW7,W4THPW8,W4THPW9,W4THPW10,W4THPW11,W4THPW12,W4THPW13,M5OHPB1 +---> M5OHPB2,M5OHPB3,M5OHPB4,M5OHPB5,M5OHPB6,M5OHPB7,M5OHPB8,M5OHPB9 +---> M5OHPB10,M5OHPB11,M5OHPB12 +---> W3SDTUK1,W3SDTUK2,W3SDTUK3,W3SDTUK4,W3SDTUK5,W3SDTUK6,W3SDTUK7 +---> W3SDTUK8,W3SDTUK9,W3SDTUK10,W3SDTUK11 +---> W3SDTUK12,W3SDTUK13,W3SDTUK14,W3SDTUK15 +---> W3ARMSP1,W3ARMSP3,W3ARMSP4,W3ARMSP5,W3ARMSP6 +---> W3ARMSP7,W3ARMSP8,W3ARMSP9,W3ARMSP10,W3ARMSP11,W3ARMSP12,W3ARMSP13 +---> W3ARMSP14,W3ARMSP15,W3ARMSP16,W3ARMSP17 +---> W4SDSLM1,W4SDSLM3,W4SDSLM4,W4SDSLM6,W4SDSLM7,W4SDSLM8 +---> W4SDSLM9,W4SDSLM10,W4SDSLM12,W4SDSLM13,W4SDSLM14 +---> W4SDSLM15,W4SDSLM16,W4SDSLM17,W4SDSLM18 +; +nba_dnk4.img +;---> S3OASD01,S3OASD02,S3OASD03 +;---> S3OASD04,S3OASD05,S3OASD06,S3OASD07,S3OASD08,S3OASD09,S3OASD10,S3OASD11 +;---> S3OASD12,S3OASD13,S3OASD14,S3OASD15,S3OASD16,S3OASD17,S3OASD18 +---> W3OHSD01,W3OHSD02,W3OHSD03,W3OHSD04,W3OHSD05,W3OHSD06,W3OHSD07,W3OHSD08 +---> W3OHSD09,W3OHSD10,W3OHSD11,W3OHSD12,W3OHSD13,W3OHSD14,W3OHSD15,W3OHSD16 +---> W3OHSD17,W3OHSD18,W3OHSD19,W3OHSD20,W3OHSD21,W3OHSD22,W3OHSD23,W3OHSD24 +---> W3OHSD25,W3OHSD26,W3SPLD01,W3SPLD02,W3SPLD03,W3SPLD04,W3SPLD05,W3SPLD06 +---> W3SPLD07,W3SPLD08,W3SPLD09,W3SPLD10,W3SPLD11,W3SPLD12,W3SPLD13,W3SPLD14 +---> W3SPLD15,W3SPLD16,W3SPLD17,W3SPLD18,W3SPLD19,W3SPLD20 +nba_dnk5.img +;---> W8ALY101,W8ALY102,W8ALY103 +;---> W8ALY104,W8ALY105,W8ALY106,W8ALY107,W8ALY108,W8ALY109,W8ALY110,W8ALY111 +;---> W8ALY112,W8ALY113,W8ALY114,W8ALY115 +;---> W8ALY501,W8ALY502,W8ALY503,W8ALY504 +;---> W8ALY505,W8ALY506,W8ALY507,W8ALY508,W8ALY509,W8ALY510,W8ALY511,W8ALY512 +---> W8OHP201,W8OHP202,W8OHP203,W8OHP204,W8OHP205,W8OHP206,W8OHP207,W8OHP208 +---> W8OHP209,W8OHP210,W8OHP211,W8OHP212,W8OHP213,W8OHP214,W8OHP215 +;---> W8OHP401 +;---> W8OHP402,W8OHP403,W8OHP404,W8OHP405,W8OHP406,W8OHP407,W8OHP408,W8OHP409 +;---> W8OHP410,W8OHP411,W8OHP412 +---> W8UND101,W8UND102,W8UND103,W8UND104,W8UND105 +---> W8UND106,W8UND107,W8UND108,W8UND109,W8UND110,W8UND111,W8UND112,W8UND113 +---> W8UND114,W8UND115,W8UND116,W8UND117,W8UND118,W8UND119,W8UND120 +; +nba_dnk6.img +;---> M8FLY201,M8FLY202,M8FLY203 +;---> M8FLY204,M8FLY205,M8FLY206,M8FLY207,M8FLY208,M8FLY209,M8FLY210,M8FLY211 +;---> M8FLY212 +;---> M8OASD01,M8OASD02,M8OASD03,M8OASD04,M8OASD05,M8OASD06 +;---> M8OASD07,M8OASD08,M8OASD09,M8OASD10,M8OASD11,M8OASD12,M8OASD13,M8OASD14 +;---> M8OASD15,M8OASD16 +;---> M8OHM201,M8OHM202,M8OHM203,M8OHM204 +;---> M8OHM205,M8OHM206,M8OHM207,M8OHM208,M8OHM209,M8OHM210,M8OHM211,M8OHM212 +;---> M8OHM213,M8OHM214,M8OHM215,M8OHM216,M8OHM217,M8OHM218 +---> M8OHM301,M8OHM302 +---> M8OHM303,M8OHM304,M8OHM305,M8OHM306,M8OHM307,M8OHM308,M8OHM309,M8OHM310 +---> M8OHM311,M8OHM312,M8OHM313,M8OHM314,M8OHM315,M8OHM316,M8OHM317,M8OHM318 +---> M8OHM319 +;---> M8OHM501,M8OHM502,M8OHM503,M8OHM504,M8OHM505,M8OHM506,M8OHM507 +;---> M8OHM508,M8OHM509,M8OHM510,M8OHM511,M8OHM512,M8OHM513,M8OHM514,M8OHM515 +;---> M8OHM516,M8OHM517,M8OHM518 +---> S8ALY201,S8ALY202 +---> S8ALY203,S8ALY204,S8ALY205,S8ALY206,S8ALY207,S8ALY208,S8ALY209,S8ALY210 +---> S8ALY211,S8ALY212,S8ALY213,S8ALY214,S8ALY401,S8ALY402,S8ALY403,S8ALY404 +---> S8ALY405,S8ALY406,S8ALY407,S8ALY408,S8ALY409,S8ALY410,S8ALY411,S8ALY412 +---> S8ALY413,S8ALY414 +nba_dnk7.img +;---> M8REVD01,M8REVD02,M8REVD03 +;---> M8REVD04,M8REVD05,M8REVD06,M8REVD07,M8REVD08,M8REVD09,M8REVD10,M8REVD11 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15,M8REVD16,M8REVD17,M8REVD18,M8REVD19 +;---> M8REVD20,M8REVD21,W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15 +---> W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +---> W8CLSD07,W8CLSD08,W8CLSD09,W8CLSD10,W8CLSD11,W8CLSD12 +;,W8CLSD13,W8CLSD14 +---> W8FL2D01,W8FL2D02,W8FL2D03,W8FL2D04,W8FL2D05,W8FL2D06,W8FL2D07,W8FL2D08 +---> W8FL2D09,W8FL2D10,W8FL2D11,W8FL2D12,W8FL2D13,W8FL2D14,W8FL2D15,W8FL2D16 +---> W8FL2D17 +---> W8FL3D01,W8FL3D02,W8FL3D03,W8FL3D04,W8FL3D05,W8FL3D06,W8FL3D07 +---> W8FL3D08,W8FL3D09,W8FL3D10,W8FL3D11,W8FL3D12,W8FL3D13,W8FL3D14,W8FL3D15 +nba_dnk8.img +---> W3CANN02 +---> W3CANN04,W3CANN06,W3CANN08 +---> W3CANN10,W3CANN12,W3CANN14,W3CANN16 +---> W3CANN18,W3CANN20,W3CANN22,W3CANN24 +---> W3CANN26,W3CANN28,W3CANN30,W3CANN32 +---> S8HLSP01,S8HLSP02,S8HLSP03,S8HLSP04,S8HLSP05,S8HLSP06,S8HLSP07 +---> S8HLSP08,S8HLSP09,S8HLSP10,S8HLSP11,S8HLSP12,S8HLSP13,S8HLSP14,S8HLSP15 +---> S8HLSP16 +; +nba_msc3.img +---> w3stwb3fix +nbajmpps.img +---> w1jupa,w2jupa,w3jupa,w4jupa,w5jupa +nba_pas4.img +;---> W2RN2P01,W2RN2P02,W2RN2P03 +;---> W2RN2P04,W2RN3P01,W2RN3P02,W2RN3P03,W2RN3P04,W2RN4P01,W2RN4P02,W2RN4P03 +;---> W2RN4P04 +; +;#3 run pass! +;---> W3RN1P01,W3RN1P02,W3RN1P03,W3RN1P04,W3RN1P05,W3RN1P06,W3RN2P01 +;---> W3RN2P02,W3RN2P03,W3RN2P04,W3RN3P01,W3RN3P02,W3RN3P03,W3RN3P04,W3RN4P01 +;---> W3RN4P02,W3RN4P03,W3RN4P04,W3RN5P01,W3RN5P02,W3RN5P03,W3RN5P04,W3RN5P05 +;---> W3RN5P06 +; +;,W4RN3P01,W4RN3P02,W4RN3P03,W4RN3P04,W4RN4P01,W4RN4P02,W4RN4P03 +;---> W4RN4P04,W4RN6P01,W4RN6P02,W4RN6P03,W4RN6P04 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> NCKNME.TBL +GLO> JUNKXXXX.GLO +; +stattxt2.img +---> PASSWORD,stx_avgallow,stx_avgscore +---> NN_ACE,NN_BERTHA,NN_BIGDAD +---> NN_BIGFOOT,NN_BOOGY,NN_BUBBA,NN_CHILLY,NN_CORNEL,NN_CUCKOO +---> NN_DINGBAT,NN_FATBOY,NN_FLASH,NN_FRANKIE +---> NN_FRNKCOW,NN_GATOR,NN_GRANDPA,NN_HAMMER,NN_HAWKEYE +---> NN_HOMEBOY,NN_JOKER,NN_LOVER,NN_MADDOG,NN_MARGE +---> NN_MERLIN,NN_PONGO,NN_SHADOW,NN_SLIM +---> NN_SNAKE,NN_SPANKY,NN_SPIDER,NN_SPIKE,NN_TOPGUN,NN_TREXX +---> NN_VIPER,NN_ZIPPY +; +ASM> PRIVLG.TBL +; +privilg2.img +---> TEX_SR,HIDEAT,OVRTME +privilg.img +---> TEX_NTA,TEX_DBH +statstxt.img +---> SENDTO,ENTRIES +; +ASM> CHEER.TBL +ZON> +; +cheer.img +---> CHEERA01,CHEERA02,CHEERA03,CHEERA04,CHEERA05,CHEERA06,CHEERA07,CHEERA08 +---> CHEERA09,CHEERA10,CHEERB01,CHEERB02,CHEERB03,CHEERB04,CHEERB05,CHEERB06 +---> CHEERB07,CHEERB08,CHEERB09 +;Start of game hot spots +hot.img +---> HOTred,HOTblu,HOTgrn,HOTyel +; +ASM> PLYRHD6A.TBL +; +ZOF> +XON> +CON> +PPP> 6 +; +HDS3.IMG +; +GLO> PLYRHD6A.GLO +---> GrantG0,GrantG1 +GLO> XXXHD.GLO +---> GrantG2,GrantG3,GrantG4,GrantG5,GrantG6,GrantG7,GrantG8,GrantG9 +---> GrantG10,GrantG11,GrantG12,GrantG13,GrantG14,GrantG15,GrantG16 +GLO> PLYRHD6A.GLO +---> Horna0,Horna1 +GLO> XXXHD.GLO +---> Horna2,Horna3,Horna4,Horna5,Horna6,Horna7,Horna8,Horna9,Horna10,Horna11 +---> Horna12,Horna13,Horna14,Horna15,Horna16 +GLO> PLYRHD6A.GLO +---> Manning0,Manning1 +GLO> XXXHD.GLO +---> Manning2,Manning3,Manning4,Manning5,Manning6,Manning7,Manning8 +---> Manning9,Manning10,Manning11,Manning12,Manning13,Manning14,Manning15 +---> Manning16 +; +offnba.img +---> OFFNBA diff --git a/BACKUP/ART100/BB7.LOD b/BACKUP/ART100/BB7.LOD new file mode 100644 index 0000000..e83e1ef --- /dev/null +++ b/BACKUP/ART100/BB7.LOD @@ -0,0 +1,533 @@ +***> 2f63930,1 +; +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> ARROW.TBL +GLO> ARROW.GLO +; +arrowsn.img +---> arrown1l,arrown1r,arrown2l,arrown2r,arrown3l,arrown3r,arrown4l,arrown4r +---> arrown1t,arrown2t,arrown3t,arrown4t +---> arrown1l2p,arrown1r2p,arrown2l2p,arrown2r2p +---> arrown1t2p,arrown2t2p +; +fball.img +PPP> 6 +---> nflash1,nflash2,nflash3,nflash3a,nflash4,nflash5,nflash6 +PPP> 0 +; +ASM> MUGSHOT.TBL +GLO> MUGSHOT.GLO +; +PPP> 8 +ZON> +; +mugs1.img +---> AUG_ATL,DIV_LAK,EWG_NEY,HRD_MIA,JON_CHA,KMP_SEA,MIL_IND +---> MLN_UTA,MUT_DEN,OAK_NEY,OLA_HOU,PIP_CHI,RAD_MK2,ROB_SAN,SAL_DIVM +---> SCH_SEA,SMT_HOU,STK_UTA +; +mugs2.img +---> AND_CHA,AND_ORL,BAK_MLW,BEN_UTA,BRO_BOS,CAM_LAK,CHE_WAS,DUM_DET,HAR_ORL +---> HOR_HOU,JAC_DAL,JOH_PHX,KUK_CHI,MAS_DAL,MAS_NEY,PAY_SEA,RIC_SAC,RID_MIN +---> ROB_PRT,SMI_IND,STA_NEY,WEA_PHL +; +mugs3.img +---> ANT_VAN,BAR_BOS,BAR_CLP,BEN_MLW,BLY_ATL,BRA_CLE,BRA_NEJ,CAS_HOU +---> CEB_LAK,CHI_PRT,COL_PHL,CUR_CHA,DAN_MIA,DAV_IND,DEL_SAN,DOU_MLW +---> DRX_HOU,EDN_SAC,EDW_NEJ,EDW_VAN,ELL_DEN,ELL_SAN,FER_CLE,FIN_PHX,FOR_SEA +---> FOX_BOS,GAR_MIN,GLL_NEJ,GIL_NEJ,GRA_SAC,GRT_ORL,GUG_MIN,HIL_CLE +---> HIL_DET,HOU_DET,HPR_NEY,HRN_UTA,HWD_WAS,HWK_SEA,JAC_IND,JON_DAL +---> JON_LAK,JON_SAN,KER_CHI,KID_DAL,KON_ORL,LAE_ATL,LON_CHI,MAN_PHX,MAR_SAC +---> MAX_PHL,MCC_DAL,MCD_DEN,MCK_IND,MIL_CLE,MIL_TOR,MLS_DET,MON_BOS,MOR_UTA +---> MOU_MIA,MUL_GLD,MUR_CLP,MUR_TOR,MUR_VAN,MUR_WAS,NOR_ATL,OBA_NEJ,OWE_SAC +---> PAC_WAS,PER_PHX,PHL_CLE,PRS_SAN,RAD_BOS,RAF_DEN,RCE_CHA,RCH_CLP,RES_MLW +---> REV_VAN,ROB_MLW,ROD_CHI,ROG_CLP,ROG_TOR,ROS_DEN,SAB_PRT,SCO_ORL +---> SKL_GLD,SMI_ATL,SMI_GLD,SPR_GLD,STA_PHL,STO_TOR,STR_PRT,THR_DET,TIS_PHX +---> VAN_LAK,VAU_CLP,WEB_WAS,WIL_PRT,WIL_MIA,WLS_GLD +---> ZID_CHA +---> RODBLK,RODBLU,RODORG,RODPRP,RODRED,RODWHT,RODYEL,RODGRN +; +mugs4.img +---> SCO_VAN,ROB_TOR,CHP_MIA,WEB_MIN,LNG_MIN,RUF_PHL +;JOH_LAK +mugsmsc1.img +---> COW,ALIEN,GUIDO,ANG,LIS,MEL,MIK,JOE +;ROS,SAL +mugsmsc2.img +---> BER,CHK,FAT,FRA,GOR,GRE,OLD,PIG,WIZ +mugsmsc3.img +---> ERI_MUG,KIM_MUG,MAR_MUG,ROH_MUG,SEA_MUG +mugsmsc4.img +---> BEA_MUG,CHE_MUG,CLO_MUG,JAB_MUG,BAL_MUG,MDOC_MUG,VIK_MUG +mugsmsc5.img +---> MUN_MUG,AMR_MUG,BAR_MUG,DIM_MUG,JAC_MUG,JIG_MUG,JON_MUG,MIK_MUG,MIN_MUG +---> MXV_MUG,WIL_MUG,NOR_MUG +mugsmsc6.img +---> CAR_MUG,DAN_MUG,EDD_MUG,EUG_MUG,JEF_MUG,SHN_MUG +---> JAM_MUG,TUR_MUG +mugsmsc7.img +---> BUD_MUG,HEY_MUG,JEN_MUG,JMC_MUG,NIK_MUG,ROT_MUG +---> SAL_MUG,PAT_MUG,NEI_MUG,PER_MUG +colmugs1.img +---> ALL_COL,CAM_COL,DAM_COL,DUN_COL,HAM_COL,HAR_COL,IVE_COL,KIT_COL,MAR_COL +---> MIN_COL,RIL_COL,WAL_COL +PPP> 0 +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> HOTSPOT.TBL +GLO> HOTSPOT.GLO +; +firefram.img +---> FFRAME01,FFRAME02,FFRAME03,FFRAME04,FFRAME05 +---> FFRAME06,FFRAME07,FFRAME08,FFRAME09,FFRAME10 +---> FFRAME11,FFRAME12,FFRAME13,FFRAME14,FFRAME15 +---> FFRAME16,FFRAME17,FFRAME18,FFRAME19,FFRAME20 +; +hotcircl.img +---> HOTCRC01,HOTCRC02,HOTCRC03,HOTCRC04,HOTCRC05,HOTCRC06,HOTCRC07 +---> HOTCRC08,HOTCRC09,HOTCRC10,HOTCRC11,HOTCRC12,HOTCRC13 +; +hotspot.img +;---> HOTA_01,HOTA_02,HOTA_03,HOTA_04,HOTA_05,HOTA_06,HOTA_07,HOTA_08,HOTA_09 +;---> HOTA_10,HOTA_11,HOTA_12,HOTA_13 +---> HOTNA_01,HOTNA_02,HOTNA_03,HOTNA_04 +---> HOTNA_05,HOTNA_06,HOTNA_07,HOTNA_08,HOTNA_09,HOTNA_10,HOTNA_11,HOTNA_12 +---> HOTNA_13 +; +explode.img +---> SMOKE01,SMOKE02 +---> SMOKE03,SMOKE04,SMOKE05,SMOKE06,SMOKE07,SMOKE08,SMOKE09,SMOKE10 +;---> SMOKEB01,SMOKEB02,SMOKEB03,SMOKEB04,SMOKEB05,SMOKEB06,SMOKEB07,SMOKEB08 +;---> SMOKEB09,SMOKEB10 +---> SALTA01,SALTA02,SALTA03,SALTA04,SALTA05,SALTA06 +---> SALTA07,SALTA08,SALTA09,SALTA10,SALTB01,SALTB02,SALTB03,SALTB04,SALTB05 +---> SALTB06,SALTB07,SALTB08,SALTB09,SALTB10,SALTB11 +---> XPLOD_BLU,XPLOD_BRT,XPLOD_YEL +---> SMOK1_01,SMOK1_02,SMOK1_03,SMOK1_04,SMOK1_05 +---> SMOK1_06,SMOK1_07,SMOK1_08,SMOK1_09,SMOK1_10,SMOK1_11,SMOK1_12 +;---> SMOK1_13,SMOK1_14 +; +ASM> BALLSHAD.TBL +GLO> BALLSHAD.GLO +; +ball.img +COF> +---> shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 +---> shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 +---> shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 +---> ballshad5 +POF> +---> ballshad2,ballshad3,ballshad4,ballshad6 +---> ballshad7 +PON> +; +ASM> BALL.TBL +GLO> JUNKXXXX.GLO +; +nball.img +PPP> 6 +---> NBALL101,NBALL601 +PPP> 0 +POF> +---> NBALL102,NBALL103,NBALL104,NBALL105,NBALL106,NBALL107,NBALL108 +---> NBALL109,NBALL110,NBALL111,NBALL112,NBALL113,NBALL114,NBALL115,NBALL116 +---> NBALL117,NBALL118,NBALL119,NBALL120,NBALL121,NBALL122,NBALL123,NBALL124 +---> NBALL125,NBALL126,NBALL127,NBALL128,NBALL129,NBALL130,NBALL201,NBALL202 +---> NBALL203,NBALL204,NBALL205,NBALL206,NBALL207,NBALL208,NBALL209,NBALL210 +---> NBALL211,NBALL212,NBALL213,NBALL214,NBALL215,NBALL216,NBALL217,NBALL218 +---> NBALL219,NBALL220,NBALL221,NBALL222,NBALL223,NBALL224,NBALL225,NBALL226 +---> NBALL227,NBALL228,NBALL229,NBALL230,NBALL301,NBALL302,NBALL303,NBALL304 +---> NBALL305,NBALL306,NBALL307,NBALL308,NBALL309,NBALL310,NBALL311,NBALL312 +---> NBALL313,NBALL314,NBALL315,NBALL316,NBALL317,NBALL318,NBALL319,NBALL320 +---> NBALL321,NBALL322,NBALL323,NBALL324,NBALL325,NBALL326,NBALL327,NBALL328 +---> NBALL329,NBALL330,NBALL401,NBALL402,NBALL403,NBALL404,NBALL405,NBALL406 +---> NBALL407,NBALL408,NBALL409,NBALL410,NBALL411,NBALL412,NBALL413,NBALL414 +---> NBALL415,NBALL416,NBALL417,NBALL418,NBALL419,NBALL420,NBALL421,NBALL422 +---> NBALL423,NBALL424,NBALL425,NBALL426,NBALL427,NBALL428,NBALL429,NBALL430 +---> NBALL501,NBALL502,NBALL503,NBALL504,NBALL505,NBALL506,NBALL507,NBALL508 +---> NBALL509,NBALL510,NBALL511,NBALL512,NBALL513,NBALL514,NBALL515,NBALL516 +---> NBALL517,NBALL518,NBALL519,NBALL520,NBALL521,NBALL522,NBALL523,NBALL524 +---> NBALL525,NBALL526,NBALL527,NBALL528,NBALL529,NBALL530 +---> NBALL602 +---> NBALL603,NBALL604,NBALL605,NBALL606,NBALL607,NBALL608,NBALL609,NBALL610 +---> NBALL611,NBALL612,NBALL613,NBALL614,NBALL615,NBALL616,NBALL617,NBALL618 +---> NBALL619,NBALL620,NBALL621,NBALL622,NBALL623,NBALL624,NBALL625,NBALL626 +---> NBALL627,NBALL628,NBALL629,NBALL630,NBALL701,NBALL702,NBALL703,NBALL704 +---> NBALL705,NBALL706,NBALL707,NBALL708,NBALL709,NBALL710,NBALL711,NBALL712 +---> NBALL713,NBALL714,NBALL715,NBALL716,NBALL717,NBALL718,NBALL719,NBALL720 +---> NBALL721,NBALL722,NBALL723,NBALL724,NBALL725,NBALL726,NBALL727,NBALL728 +---> NBALL729,NBALL730 +---> NBALL801,NBALL802,NBALL803,NBALL804,NBALL805,NBALL806 +---> NBALL807,NBALL808,NBALL809,NBALL810,NBALL811,NBALL812,NBALL813,NBALL814 +---> NBALL815,NBALL816,NBALL817,NBALL818,NBALL819,NBALL820,NBALL821,NBALL822 +---> NBALL823,NBALL824,NBALL825,NBALL826,NBALL827,NBALL828,NBALL829,NBALL830 +;;---> NBALL901,NBALL902,NBALL903,NBALL904,NBALL905,NBALL906,NBALL907,NBALL908 +;;---> NBALL909,NBALL910,NBALL911,NBALL912,NBALL913,NBALL914,NBALL915,NBALL916 +;;---> NBALL917,NBALL918,NBALL919,NBALL920,NBALL921,NBALL922,NBALL923,NBALL924 +;;---> NBALL925,NBALL926,NBALL927,NBALL928,NBALL929,NBALL930,NBALL1001 +;;---> NBALL1002,NBALL1003,NBALL1004,NBALL1005,NBALL1006,NBALL1007,NBALL1008 +;;---> NBALL1009,NBALL1010,NBALL1011,NBALL1012,NBALL1013,NBALL1014,NBALL1015 +;;---> NBALL1016,NBALL1017,NBALL1018,NBALL1019,NBALL1020,NBALL1021,NBALL1022 +;;---> NBALL1023,NBALL1024,NBALL1025,NBALL1026,NBALL1027,NBALL1028,NBALL1029 +;;---> NBALL1030 +PON> +; +fball.img +PPP> 6 +---> FBALL101 +PPP> 0 +POF> +---> FBALL102,FBALL103,FBALL104,FBALL105,FBALL106,FBALL107,FBALL108 +---> FBALL109,FBALL110,FBALL111,FBALL112,FBALL113,FBALL114,FBALL115,FBALL116 +---> FBALL117,FBALL118,FBALL119,FBALL120,FBALL121,FBALL122,FBALL123,FBALL124 +---> FBALL125,FBALL126,FBALL127,FBALL128,FBALL129,FBALL130,FBALL201,FBALL202 +---> FBALL203,FBALL204,FBALL205,FBALL206,FBALL207,FBALL208,FBALL209,FBALL210 +---> FBALL211,FBALL212,FBALL213,FBALL214,FBALL215,FBALL216,FBALL217,FBALL218 +---> FBALL219,FBALL220,FBALL221,FBALL222,FBALL223,FBALL224,FBALL225,FBALL226 +---> FBALL227,FBALL228,FBALL229,FBALL230,FBALL301,FBALL302,FBALL303,FBALL304 +---> FBALL305,FBALL306,FBALL307,FBALL308,FBALL309,FBALL310,FBALL311,FBALL312 +---> FBALL313,FBALL314,FBALL315,FBALL316,FBALL317,FBALL318,FBALL319,FBALL320 +---> FBALL321,FBALL322,FBALL323,FBALL324,FBALL325,FBALL326,FBALL327,FBALL328 +---> FBALL329,FBALL330,FBALL401,FBALL402,FBALL403,FBALL404,FBALL405,FBALL406 +---> FBALL407,FBALL408,FBALL409,FBALL410,FBALL411,FBALL412,FBALL413,FBALL414 +---> FBALL415,FBALL416,FBALL417,FBALL418,FBALL419,FBALL420,FBALL421,FBALL422 +---> FBALL423,FBALL424,FBALL425,FBALL426,FBALL427,FBALL428,FBALL429,FBALL430 +---> FBALL501,FBALL502,FBALL503,FBALL504,FBALL505,FBALL506,FBALL507,FBALL508 +---> FBALL509,FBALL510,FBALL511,FBALL512,FBALL513,FBALL514,FBALL515,FBALL516 +---> FBALL517,FBALL518,FBALL519,FBALL520,FBALL521,FBALL522,FBALL523,FBALL524 +---> FBALL525,FBALL526,FBALL527,FBALL528,FBALL529,FBALL530,FBALL601,FBALL602 +---> FBALL603,FBALL604,FBALL605,FBALL606,FBALL607,FBALL608,FBALL609,FBALL610 +---> FBALL611,FBALL612,FBALL613,FBALL614,FBALL615,FBALL616,FBALL617,FBALL618 +---> FBALL619,FBALL620,FBALL621,FBALL622,FBALL623,FBALL624,FBALL625,FBALL626 +---> FBALL627,FBALL628,FBALL629,FBALL630,FBALL701,FBALL702,FBALL703,FBALL704 +---> FBALL705,FBALL706,FBALL707,FBALL708,FBALL709,FBALL710,FBALL711,FBALL712 +---> FBALL713,FBALL714,FBALL715,FBALL716,FBALL717,FBALL718,FBALL719,FBALL720 +---> FBALL721,FBALL722,FBALL723,FBALL724,FBALL725,FBALL726,FBALL727,FBALL728 +---> FBALL729,FBALL730 +---> FBALL801,FBALL802,FBALL803,FBALL804,FBALL805,FBALL806 +---> FBALL807,FBALL808,FBALL809,FBALL810,FBALL811,FBALL812,FBALL813,FBALL814 +---> FBALL815,FBALL816,FBALL817,FBALL818,FBALL819,FBALL820,FBALL821,FBALL822 +---> FBALL823,FBALL824,FBALL825,FBALL826,FBALL827,FBALL828,FBALL829,FBALL830 +;;---> FBALL901,FBALL902,FBALL903,FBALL904,FBALL905,FBALL906,FBALL907,FBALL908 +;;---> FBALL909,FBALL910,FBALL911,FBALL912,FBALL913,FBALL914,FBALL915,FBALL916 +;;---> FBALL917,FBALL918,FBALL919,FBALL920,FBALL921,FBALL922,FBALL923,FBALL924 +;;---> FBALL925,FBALL926,FBALL927,FBALL928,FBALL929,FBALL930,FBALL1001 +;;---> FBALL1002,FBALL1003,FBALL1004,FBALL1005,FBALL1006,FBALL1007,FBALL1008 +;;---> FBALL1009,FBALL1010,FBALL1011,FBALL1012,FBALL1013,FBALL1014,FBALL1015 +;;---> FBALL1016,FBALL1017,FBALL1018,FBALL1019,FBALL1020,FBALL1021,FBALL1022 +;;---> FBALL1023,FBALL1024,FBALL1025,FBALL1026,FBALL1027,FBALL1028,FBALL1029 +;;---> FBALL1030 +PON> +; +aball.img +PPP> 6 +---> ABALL101 +PPP> 0 +POF> +---> ABALL102,ABALL103,ABALL104,ABALL105,ABALL106,ABALL107,ABALL108 +---> ABALL109,ABALL110,ABALL111,ABALL112,ABALL113,ABALL114,ABALL115,ABALL116 +---> ABALL117,ABALL118,ABALL119,ABALL120,ABALL121,ABALL122,ABALL123,ABALL124 +---> ABALL125,ABALL126,ABALL127,ABALL128,ABALL129,ABALL130,ABALL201,ABALL202 +---> ABALL203,ABALL204,ABALL205,ABALL206,ABALL207,ABALL208,ABALL209,ABALL210 +---> ABALL211,ABALL212,ABALL213,ABALL214,ABALL215,ABALL216,ABALL217,ABALL218 +---> ABALL219,ABALL220,ABALL221,ABALL222,ABALL223,ABALL224,ABALL225,ABALL226 +---> ABALL227,ABALL228,ABALL229,ABALL230,ABALL301,ABALL302,ABALL303,ABALL304 +---> ABALL305,ABALL306,ABALL307,ABALL308,ABALL309,ABALL310,ABALL311,ABALL312 +---> ABALL313,ABALL314,ABALL315,ABALL316,ABALL317,ABALL318,ABALL319,ABALL320 +---> ABALL321,ABALL322,ABALL323,ABALL324,ABALL325,ABALL326,ABALL327,ABALL328 +---> ABALL329,ABALL330,ABALL401,ABALL402,ABALL403,ABALL404,ABALL405,ABALL406 +---> ABALL407,ABALL408,ABALL409,ABALL410,ABALL411,ABALL412,ABALL413,ABALL414 +---> ABALL415,ABALL416,ABALL417,ABALL418,ABALL419,ABALL420,ABALL421,ABALL422 +---> ABALL423,ABALL424,ABALL425,ABALL426,ABALL427,ABALL428,ABALL429,ABALL430 +---> ABALL501,ABALL502,ABALL503,ABALL504,ABALL505,ABALL506,ABALL507,ABALL508 +---> ABALL509,ABALL510,ABALL511,ABALL512,ABALL513,ABALL514,ABALL515,ABALL516 +---> ABALL517,ABALL518,ABALL519,ABALL520,ABALL521,ABALL522,ABALL523,ABALL524 +---> ABALL525,ABALL526,ABALL527,ABALL528,ABALL529,ABALL530,ABALL601,ABALL602 +---> ABALL603,ABALL604,ABALL605,ABALL606,ABALL607,ABALL608,ABALL609,ABALL610 +---> ABALL611,ABALL612,ABALL613,ABALL614,ABALL615,ABALL616,ABALL617,ABALL618 +---> ABALL619,ABALL620,ABALL621,ABALL622,ABALL623,ABALL624,ABALL625,ABALL626 +---> ABALL627,ABALL628,ABALL629,ABALL630,ABALL701,ABALL702,ABALL703,ABALL704 +---> ABALL705,ABALL706,ABALL707,ABALL708,ABALL709,ABALL710,ABALL711,ABALL712 +---> ABALL713,ABALL714,ABALL715,ABALL716,ABALL717,ABALL718,ABALL719,ABALL720 +---> ABALL721,ABALL722,ABALL723,ABALL724,ABALL725,ABALL726,ABALL727,ABALL728 +---> ABALL729,ABALL730 +---> ABALL801,ABALL802,ABALL803,ABALL804,ABALL805,ABALL806 +---> ABALL807,ABALL808,ABALL809,ABALL810,ABALL811,ABALL812,ABALL813,ABALL814 +---> ABALL815,ABALL816,ABALL817,ABALL818,ABALL819,ABALL820,ABALL821,ABALL822 +---> ABALL823,ABALL824,ABALL825,ABALL826,ABALL827,ABALL828,ABALL829,ABALL830 +PON> +; +ASM> LOGOS.TBL +; +newlogos.img +ZON> +---> BALLBAK1,T_HAWKS,T_CELTS,T_HORS,T_BULLS,T_CAVS,T_MAVS,T_NUGS,T_PISS +---> T_PISS_N,T_WARS,T_ROCKS,T_PACER,T_LAKS,T_CLIPS,T_HEAT,T_BUCKS +---> T_TWOLV,T_TWOLV_N,T_NETS,T_KNIKS,T_MAGIC,T_76RS,T_SUNS,T_BLAZ,T_KINGS +---> T_SPURS,T_SONICS,T_RAPT,T_JAZZ,T_JAZZ_N,T_GRIZZ,T_BULTS +ZOF> +; +dcslogo.img +---> DCSRUM1 +;;---> DCSRUM2,DCSRUM3,DCSRUM4,DCSRUM5,DCSRUM6 +; +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +; +GAMEGRAF.IMG +---> NSHOTCLK,MUGPLAT +POF> +---> TUBEPIEC +PON> +TVSCORE.IMG +CON> +---> colon,cpu,freeply,credit +---> bbal,bbal_w +COF> +---> font60,font61,font62,font63,font64,font65,font66,font67,font68,font69 +---> font60w,font60r,font60g,font6?,font90r +---> S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4,S_LED_5,S_LED_6,S_LED_7,S_LED_8 +---> S_LED_9,S_LED_MAX +;---> BigLED_0,BigLED_1,BigLED_2,BigLED_3,BigLED_4,BigLED_5 +;---> BigLED_6,BigLED_7,BigLED_8,BigLED_9 +ASM> CREDIT.TBL +---> CRED_00 +GLO> XXXHD.GLO +---> CRED_01,CRED_02,CRED_03,CRED_04 +---> CRED_05,CRED_06,CRED_07,CRED_08,CRED_09 +---> CRED_10,CRED_11,CRED_12,CRED_13,CRED_14 +---> CRED_15,CRED_16,CRED_17,CRED_18,CRED_19 +---> CRED_20,CRED_21,CRED_22,CRED_23,CRED_24 +---> CRED_25,CRED_26,CRED_27,CRED_28,CRED_29 +---> CRED_30,CRED_31,CRED_32,CRED_33,CRED_34 +---> CRED_35,CRED_36,CRED_37,CRED_38,CRED_39 +---> CRED_40,CRED_41,CRED_42,CRED_43,CRED_44 +---> CRED_45,CRED_46,CRED_47,CRED_48,CRED_49 +---> CRED_50,CRED_51,CRED_52,CRED_53,CRED_54 +---> CRED_55,CRED_56,CRED_57,CRED_58,CRED_59 +---> CRED_60,CRED_61,CRED_62,CRED_63,CRED_64 +---> CRED_65,CRED_66,CRED_67,CRED_68,CRED_69 +---> CRED_70,CRED_71,CRED_72,CRED_73,CRED_74 +---> CRED_75,CRED_76,CRED_77,CRED_78,CRED_79 +---> CRED_80,CRED_81,CRED_82,CRED_83,CRED_84 +---> CRED_85,CRED_86,CRED_87,CRED_88,CRED_89 +---> CRED_90,CRED_91,CRED_92,CRED_93,CRED_94 +---> CRED_95,CRED_96,CRED_97,CRED_98,CRED_99 +IHDR SAG:L +PPP> 6 +;---> TURBO_60,TURBO_59,TURBO_58,TURBO_57,TURBO_56 +;---> TURBO_55,TURBO_54,TURBO_53,TURBO_52,TURBO_51 +---> TURBO_52,TURBO_51 +---> TURBO_50,TURBO_49,TURBO_48,TURBO_47,TURBO_46 +---> TURBO_45,TURBO_44,TURBO_43,TURBO_42,TURBO_41 +---> TURBO_40,TURBO_39,TURBO_38,TURBO_37,TURBO_36 +---> TURBO_35,TURBO_34,TURBO_33,TURBO_32,TURBO_31 +---> TURBO_30,TURBO_29,TURBO_28,TURBO_27,TURBO_26 +---> TURBO_25,TURBO_24,TURBO_23,TURBO_22,TURBO_21 +---> TURBO_20,TURBO_19,TURBO_18,TURBO_17,TURBO_16 +---> TURBO_15,TURBO_14,TURBO_13,TURBO_12,TURBO_11 +---> TURBO_10,TURBO_09,TURBO_08,TURBO_07,TURBO_06 +---> TURBO_05,TURBO_04,TURBO_03,TURBO_02,TURBO_01 +; +;---> TEAMZN30,TEAMZN29,TEAMZN28,TEAMZN27,TEAMZN26 +;---> TEAMZN25,TEAMZN24,TEAMZN23,TEAMZN22,TEAMZN21 +;---> TEAMZN20,TEAMZN19,TEAMZN18,TEAMZN17,TEAMZN16 +;---> TEAMZN15,TEAMZN14,TEAMZN13,TEAMZN12,TEAMZN11 +;---> TEAMZN10,TEAMZN09,TEAMZN08,TEAMZN07,TEAMZN06 +;---> TEAMZN05,TEAMZN04,TEAMZN03,TEAMZN02,TEAMZN01 +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +CON> +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +---> TURBO_01b,TURBO_01y,TURBO_01g,TURBO_01r +;---> TEAMZN_01r,TEAMZN_01b +PPP> 0 +---> S_LED_0r +; +ASM> HOOP.TBL +GLO> HOOP.GLO +; +hoop.img +CON> +PON> +ZON> +PPP> 8 +;Remove ZON to speed up(?) DMA transfer +---> hoopbot +ZOF> +PPP> 0 +---> hooptop +---> back1,back2,back3,back4,back5,back6,back7,back8,back9,back10 +---> RIM0_B_00,RIM0_F_00 +---> RIM1_F_01,RIM1_F_02,RIM1_F_03,RIM1_F_04,RIM1_F_05,RIM1_F_06 +---> RIM1_F_07,RIM1_F_08,RIM1_F_09,RIM1_F_10,RIM1_F_11 +---> RIM1_B_01,RIM1_B_02,RIM1_B_03,RIM1_B_06,RIM1_B_07,RIM1_B_08 +---> RIM1_B_09,RIM1_B_10,RIM1_B_11 +---> RIM2_F_01,RIM2_F_02,RIM2_F_03,RIM2_F_04,RIM2_F_05,RIM2_F_06 +---> RIM2_F_08 +---> RIM2_B_01,RIM2_B_02,RIM2_B_03,RIM2_B_05,RIM2_B_06,RIM2_B_08 +---> RIM3_F_01,RIM3_F_02,RIM3_F_03,RIM3_F_04,RIM3_F_05,RIM3_F_06 +---> RIM3_F_07,RIM3_F_08,RIM3_F_09,RIM3_F_11 +---> RIM3_B_01,RIM3_B_02,RIM3_B_03,RIM3_B_04,RIM3_B_05,RIM3_B_06 +---> RIM3_B_07,RIM3_B_08,RIM3_B_09,RIM3_B_11 +---> RIM4_F_01,RIM4_F_02,RIM5_F_01,RIM5_F_03 +---> RIM4_B_01,RIM4_B_02,RIM5_B_01,RIM5_B_03 +---> RIM7_F_01,RIM7_F_02,RIM7_F_03,RIM7_F_04,RIM7_F_05,RIM7_F_06 +---> RIM7_F_07,RIM7_F_08,RIM7_F_09,RIM7_F_11 +---> RIM7_B_01,RIM7_B_02,RIM7_B_03,RIM7_B_04,RIM7_B_05,RIM7_B_06 +---> RIM7_B_07,RIM7_B_08,RIM7_B_09,RIM7_B_11 +---> RIM8_F_01,RIM8_F_02,RIM8_F_03,RIM8_F_04,RIM8_F_05,RIM8_F_06 +---> RIM8_B_01,RIM8_B_02,RIM8_B_03,RIM8_B_04,RIM8_B_05,RIM8_B_06 +---> CHAN1F_01,CHAN1F_02,CHAN1F_03,CHAN1F_04,CHAN1F_05,CHAN1F_06,CHAN1F_07 +---> CHAN1F_08,CHAN1F_09,CHAN1F_10 +---> CHAN1B_01,CHAN1B_02,CHAN1B_03,CHAN1B_04,CHAN1B_05,CHAN1B_06,CHAN1B_07 +---> CHAN1B_08,CHAN1B_09,CHAN1B_10 +---> CHAN2F_01,CHAN2F_02,CHAN2F_03,CHAN2F_04,CHAN2F_05,CHAN2F_06,CHAN2F_07 +---> CHAN2B_01,CHAN2B_02,CHAN2B_03,CHAN2B_04,CHAN2B_05,CHAN2B_06,CHAN2B_07 +---> CHAN3F_01,CHAN3F_02,CHAN3F_03,CHAN3F_04,CHAN3F_05,CHAN3F_06,CHAN3F_07 +---> CHAN3F_08,CHAN3F_09,CHAN3F_10 +---> CHAN3B_01,CHAN3B_02,CHAN3B_03,CHAN3B_04,CHAN3B_05,CHAN3B_06,CHAN3B_07 +---> CHAN3B_08,CHAN3B_09,CHAN3B_10 +---> FLAME_F_01,FLAME_F_02,FLAME_F_03,FLAME_F_04,FLAME_F_05,FLAME_F_06 +---> FLAME_F_07,FLAME_F_08,FLAME_F_09,FLAME_F_10,FLAME_F_11,FLAME_F_12 +---> FLAME_F_13 +---> FLAME2F_01,FLAME2F_02,FLAME2F_03,FLAME2F_04,FLAME2F_05,FLAME2F_06 +---> FLAME2F_07 +---> FLAME2F_13 +;,FLAME2F_08,FLAME2F_09,FLAME2F_10,FLAME2F_11,FLAME2F_12 +;---> FLAME2B_01,FLAME2B_02,FLAME2B_03,FLAME2B_04,FLAME2B_05,FLAME2B_06 +;---> FLAME2B_07 +---> FLAME2B_09,FLAME2B_10,FLAME2B_11,FLAME2B_12,FLAME2B_08 +;---> FLAME2B_13 +; +nbbd8.img +PPP> 8 +ZON> +---> nback10,nback9,nback8,nback7,nback6,nback5,nback4,nback3,nback2,nback1 +---> nhoopbot +ZOF> +PPP> 0 +; +ASM> COURTFLR.TBL +; +;Load court and bench pals +; +crtflr.img +---> CRTPC1,CRTPC2,CRTPC3,CRTPC4,CRTPC5,CRTPC6,CRTPC7,CRTPC8,CRTPC9,CRTPC10 +---> CRTPC11,CRTPC12,CRTPC13,CRTPC14,CRTPC15,CRTPC16,CRTPC17,CRTPC18,CRTPC19,CRTPC20 +---> CRTPC21,CRTPC22,CRTPC23,CRTPC24,CRTPC25,CRTPC26,CRTPC27,CRTPC28,CRTPC29 +crwdflr.img +---> bk_flr1,bk_flr2,bk_flr3,bk_flr4,bk_flr5,bk_flr6,bk_flr7,bk_flr8,bk_flr9,bk_flr10 +---> bk_flr11,bk_flr12,bk_flr13,bk_flr14,bk_flr15,bk_flr16,bk_flr17,bk_flr18,bk_flr19,bk_flr20 +---> bk_flr21,bk_flr22,bk_flr23,bk_flr24,bk_flr25,bk_flr26,bk_flr27,bk_flr28,bk_flr29 +; +ASM> HANGFONT.TBL +; +hangfont.img +---> HANGF_A +---> HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G,HANGF_H,HANGF_I,HANGF_J +---> HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O,HANGF_P,HANGF_Q,HANGF_R,HANGF_S +---> HANGF_T,HANGF_U,HANGF_V,HANGF_W,HANGF_X,HANGF_Y,HANGF_Z,HANGF_0,HANGF_1 +---> HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7,HANGF_8,HANGF_9 +;---> HANGF_DOL,HANGF_PCT,HANGF_NUM,HANGF_AND,HANGF_STR,HANGF_PRL +;---> HANGF_PRR,HANGF_PLS,HANGF_MIN,HANGF_QUE,HANGF_PER,HANGF_SLS,HANGF_COL +;---> HANGF_SEM,HANGF_COM,HANGF_EQU +---> HANGF_EXC,HANGF_APO +; +ASM> BASTCYC.TBL +GLO> BASTCYC.GLO +; +bastcyc.img +;---> B10CYC_A,B10CYC_B,B10CYC_C,B10CYC_D,B10CYC_E,B10CYC_F,B10CYC_G,B10CYC_H +;---> B10CYC_I,B10CYC_J,B10CYC_K,B10CYC_L,B10CYC_M,B10CYC_N,B10CYC_O,B10CYC_P +;---> B10CYC_Q,B10CYC_R,B10CYC_S,B10CYC_T,B10CYC_U,B10CYC_V,B10CYC_W,B10CYC_X +;---> B10CYC_Y,B10CYC_Z,B10CYC_0,B10CYC_1,B10CYC_2,B10CYC_3,B10CYC_4,B10CYC_5 +;---> B10CYC_6,B10CYC_7,B10CYC_8,B10CYC_9,B10CYC_EXC,B10CYC_NUM,B10CYC_DOL +;---> B10CYC_PCT,B10CYC_AND,B10CYC_PRL,B10CYC_PRR,B10CYC_DSH,B10CYC_PLS +;---> B10CYC_SLS,B10CYC_COM,B10CYC_APO,B10CYC_PER,B10CYC_SEM,B10CYC_COL +;---> B10CYC_QUE +---> B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F +---> B8TCYC_G,B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N +---> B8TCYC_O,B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V +---> B8TCYC_W,B8TCYC_X,B8TCYC_Y,B8TCYC_Z,B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3 +---> B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7,B8TCYC_8,B8TCYC_9,B8TCYC_COL +---> B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_PRL,B8TCYC_PRR +---> B8TCYC_PER,B8TCYC_COM,B8TCYC_APO,B8TCYC_PLS,B8TCYC_QUE,B8TCYC_SEM +---> B8TCYC_SLS,B8TCYC_EXC +---> B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E +---> B7TCYC_F,B7TCYC_G,B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M +---> B7TCYC_N,B7TCYC_O,B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U +---> B7TCYC_V,B7TCYC_W,B7TCYC_X,B7TCYC_Y,B7TCYC_Z,B7TCYC_0,B7TCYC_1,B7TCYC_2 +---> B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7,B7TCYC_8,B7TCYC_9 +---> B7TCYC_EXC,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_AND,B7TCYC_PCT,B7TCYC_PRL +---> B7TCYC_PRR,B7TCYC_DSH,B7TCYC_PLS,B7TCYC_COM,B7TCYC_PER,B7TCYC_QUE +---> B7TCYC_APO,B7TCYC_COL,B7TCYC_SEM,B7TCYC_SLS +; +ASM> PLYRNUB.TBL +; +plyrnubs.img +---> PLYRNUB1,PLYRNUB2,PLYRNUB3,PLYRNUB4 +cities2.img +---> CUST6,CUST7,CUST8,CUST9,CUST10 +; +ASM> PRIZES.TBL +; +prizes.img +ZON> +---> prize1,prize2 +---> prize3,prizeG +ZOF> +; +ASM> POWERTXT.TBL +GLO> POWERTXT.GLO +; +bast8.img +---> TOURMODE2,NOCPU2,SECRETS2 +;---> NOPUSH2 +---> ASISTOFF2,SHOTPERC2,BABYPLAY2 +;---> WIN4FREE2,WINSTAY2,WNRSSTAY2 +; +brush20f.img +POF> +PPP> 5 +---> BRSH20APO +PPP> 0 +PON> +; +ASM> OUTDOOR.TBL +GLO> OUTDOOR.GLO +; +FRM> OUTDOOR +; +outdoor.img +ZON> +---> sidebot,sidetop +---> lamp1,lamp2,hang_logo,moon +ZOF> +---> BKg1,BKg2 +---> bkwall +;---> fence +---> city1,city2,city3 +---> outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 +---> outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +---> PAPER1,PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9,LGSHEET1 +---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7,LGSHEET8,LGSHEET9 +---> SMSHEET1,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5,SMSHEET6,SMSHEET7,SMSHEET8 +---> SMSHEET9,LEAF1,LEAF2,LEAF3,LEAF4,LEAF5,LEAF6,LEAF7,LEAF8 +---> STORM01 +;---> STORM02,STORM03,STORM04,STORM05,STORM06,STORM07,STORM08,STORM09,STORM10 +;---> STORM11,STORM12 +; +GLO> BGNDTBL.GLO +; +BBB> HANGTIME +BBB> VSSCR +BBB> TEAMSTAT + diff --git a/BACKUP/ART100/BB8.LOD b/BACKUP/ART100/BB8.LOD new file mode 100644 index 0000000..3a22e0d --- /dev/null +++ b/BACKUP/ART100/BB8.LOD @@ -0,0 +1,304 @@ +***> 4e66600,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRRSEQ.TBL +; +nba_run1.img +---> w1defst1,w1defst2,w1defst3,w1defst4,w2defst1,w2defst2,w2defst3,w2defst4 +---> w3defst1,w3defst2,w3defst3,w3defst4,w4defst1,w4defst2,w4defst3,w4defst4 +---> w5defst1,w5defst2,w5defst3,w5defst4 +---> w1run1,w1run2,w1run3 +---> w1run4,w1run5,w1run6,w1run7,w1run8,w1run9,w1run10,w1run11,w2run1,w2run2 +---> w2run3,w2run4,w2run5,w2run6,w2run7,w2run8,w2run9,w2run10,w2run11,w3run1 +---> w3run2,w3run3,w3run4,w3run5,w3run6,w3run7,w3run8,w3run9,w3run10,w3run11 +---> w4run1,w4run2,w4run3,w4run4,w4run5,w4run6,w4run7,w4run8,w4run9,w4run10 +---> w4run11,w5run1,w5run2,w5run3,w5run4,w5run5,w5run6,w5run7,w5run8,w5run9 +---> w5run10,w5run11 +;,w1spr1,w1spr2,w1spr3,w1spr4,w1spr5,w1spr6,w1spr7,w1spr8 +;---> w1spr9,w1spr10,w1spr11,w2spr1,w2spr2,w2spr3,w2spr4,w2spr5,w2spr6,w2spr7 +;---> w2spr8,w2spr9,w2spr10,w2spr11 +---> w3spr1,w3spr2,w3spr3,w3spr4 +---> w3spr5,w3spr6,w3spr7,w3spr8,w3spr9,w3spr10,w3spr11,w4spr1 +---> w4spr2,w4spr3,w4spr4,w4spr5,w4spr6,w4spr7,w4spr8,w4spr9,w4spr10,w4spr11 +;---> w5spr1,w5spr2,w5spr3,w5spr4,w5spr5,w5spr6,w5spr7,w5spr8,w5spr9,w5spr10 +;---> w5spr11,w1dspr1,w1dspr2,w1dspr3,w1dspr4,w1dspr5,w1dspr6,w1dspr7,w1dspr8 +;---> w1dspr9,w1dspr10,w1dspr11,w2dspr1,w2dspr2,w2dspr3,w2dspr4,w2dspr5 +;---> w2dspr6,w2dspr7,w2dspr8,w2dspr9,w2dspr10,w2dspr11 +---> w3dspr1,w3dspr2 +---> w3dspr3,w3dspr4,w3dspr5,w3dspr6,w3dspr7,w3dspr8,w3dspr9,w3dspr10 +---> w3dspr11,w4dspr1,w4dspr2,w4dspr3,w4dspr4,w4dspr5,w4dspr6,w4dspr7 +---> w4dspr8,w4dspr9,w4dspr10,w4dspr11 +;,w5dspr1,w5dspr2,w5dspr3,w5dspr4 +;---> w5dspr5,w5dspr6,w5dspr7,w5dspr8,w5dspr9,w5dspr10,w5dspr11 +---> w1drun1 +---> w1drun2,w1drun3,w1drun4,w1drun5,w1drun6,w1drun7,w1drun8,w1drun9 +---> w1drun10,w1drun11,w2drun1,w2drun2,w2drun3,w2drun4,w2drun5,w2drun6 +---> w2drun7,w2drun8,w2drun9,w2drun10,w2drun11,w3drun1,w3drun2,w3drun3 +---> w3drun4,w3drun5,w3drun6,w3drun7,w3drun8,w3drun9,w3drun10,w3drun11 +---> w4drun1,w4drun2,w4drun3,w4drun4,w4drun5,w4drun6,w4drun7,w4drun8,w4drun9 +---> w4drun10,w4drun11,w5drun1,w5drun2,w5drun3,w5drun4,w5drun5,w5drun6 +---> w5drun7,w5drun8,w5drun9,w5drun10,w5drun11 +;,w5defwd1,w5defwd2,w5defwd3 +;---> w5defwd4,w5defwd5,w5defwd6,w5defwd7,w5defwd8,w5defwd9,w5defwd10 +;---> w4defwd1,w4defwd2,w4defwd3,w4defwd4,w4defwd5,w4defwd6,w4defwd7,w4defwd8 +;---> w4defwd9,w4defwd10,w4defwd11,w3defwd1,w3defwd2,w3defwd3,w3defwd4 +;---> w3defwd5,w3defwd6,w3defwd7,w3defwd8,w3defwd9,w3defwd10,w2defwd1 +;---> w2defwd2,w2defwd3,w2defwd4,w2defwd5,w2defwd6,w2defwd7,w2defwd8,w2defwd9 +;---> w2defwd10,w1defwd1,w1defwd2,w1defwd3,w1defwd4,w1defwd5,w1defwd6 +;---> w1defwd7,w1defwd8,w1defwd9,w1defwd10 +; +nba_run2.img +---> w1dfcr1,w1dfcr2,w1dfcr3 +---> w1dfcr4,w1dfcr5,w1dfcr6,w2dfcr1 +---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +PPP> 6 +ASM> PLYRHD6.TBL +colhds1.img +GLO> PLYRHD6.GLO +---> MARBRY00,MARBRY01 +GLO> XXXHD.GLO +---> MARBRY02,MARBRY03,MARBRY04 +---> MARBRY05,MARBRY06,MARBRY07,MARBRY08,MARBRY09,MARBRY10,MARBRY11,MARBRY12 +---> MARBRY13,MARBRY14,MARBRY15,MARBRY16 +GLO> PLYRHD6.GLO +---> ALLEN00,ALLEN01 +GLO> XXXHD.GLO +---> ALLEN02,ALLEN03,ALLEN04,ALLEN05,ALLEN06,ALLEN07,ALLEN08 +---> ALLEN09,ALLEN10,ALLEN11,ALLEN12 +---> ALLEN13,ALLEN14,ALLEN15,ALLEN16 +GLO> PLYRHD6.GLO +---> CAMB00,CAMB01 +GLO> XXXHD.GLO +---> CAMB02,CAMB03,CAMB04,CAMB05,CAMB06,CAMB07,CAMB08 +---> CAMB09,CAMB10,CAMB11,CAMB12,CAMB13,CAMB14 +---> CAMB15,CAMB16 +GLO> PLYRHD6.GLO +---> DAMP00,DAMP01 +GLO> XXXHD.GLO +---> DAMP02,DAMP03,DAMP04,DAMP05,DAMP06,DAMP07 +---> DAMP08,DAMP09,DAMP10,DAMP11,DAMP12,DAMP13,DAMP14,DAMP15,DAMP16 +GLO> PLYRHD6.GLO +---> DUN00,DUN01 +GLO> XXXHD.GLO +---> DUN02,DUN03,DUN04,DUN05,DUN06,DUN07,DUN08,DUN09,DUN10,DUN11,DUN12 +---> DUN13,DUN14,DUN15,DUN16 +GLO> PLYRHD6.GLO +---> HAM00,HAM01 +GLO> XXXHD.GLO +---> HAM02,HAM03,HAM04,HAM05,HAM06,HAM07 +---> HAM08,HAM09,HAM10,HAM11,HAM12,HAM13,HAM14,HAM15,HAM16 +GLO> PLYRHD6.GLO +---> HARR00,HARR01 +GLO> XXXHD.GLO +---> HARR02,HARR03,HARR04,HARR05,HARR06,HARR07,HARR08,HARR09,HARR10,HARR11 +---> HARR12,HARR13,HARR14,HARR15,HARR16 +GLO> PLYRHD6.GLO +---> IVER00,IVER01 +GLO> XXXHD.GLO +---> IVER02,IVER03,IVER04,IVER05,IVER06,IVER07,IVER08 +---> IVER09,IVER10,IVER11,IVER12,IVER13,IVER14,IVER15,IVER16 +GLO> PLYRHD6.GLO +---> KIT00,KIT01 +GLO> XXXHD.GLO +---> KIT02,KIT03,KIT04,KIT05,KIT06,KIT07,KIT08 +---> KIT09,KIT10,KIT11,KIT12,KIT13,KIT14,KIT15,KIT16 +GLO> PLYRHD6.GLO +---> MINR00,MINR01 +GLO> XXXHD.GLO +---> MINR02,MINR03,MINR04,MINR05,MINR06,MINR07,MINR08 +---> MINR09,MINR10,MINR11,MINR12 +---> MINR13,MINR14,MINR15,MINR16 +GLO> PLYRHD6.GLO +---> RILY00,RILY01 +GLO> XXXHD.GLO +---> RILY02,RILY03,RILY04,RILY05,RILY06,RILY07,RILY08 +---> RILY09,RILY10,RILY11,RILY12,RILY13,RILY14,RILY15,RILY16 +GLO> PLYRHD6.GLO +---> WAL00,WAL01 +GLO> XXXHD.GLO +---> WAL02,WAL03,WAL04,WAL05,WAL06,WAL07,WAL08,WAL09 +---> WAL10,WAL11,WAL12,WAL13,WAL14,WAL15,WAL16 +hdsmsc6.img +GLO> PLYRHD6.GLO +---> CARY00,CARY01 +GLO> XXXHD.GLO +---> CARY02,CARY03,CARY04,CARY05 +;,CARY06 +;---> CARY07,CARY08,CARY09,CARY10,CARY11,CARY12,CARY13,CARY14,CARY15,CARY16 +---> CARY16 +GLO> PLYRHD6.GLO +---> DAN00,DAN01 +GLO> XXXHD.GLO +---> DAN02,DAN03,DAN04,DAN05,DAN06,DAN07,DAN08,DAN09 +---> DAN10,DAN11,DAN12,DAN13,DAN14,DAN15,DAN16 +GLO> PLYRHD6.GLO +---> EDDIE00,EDDIE01 +GLO> XXXHD.GLO +---> EDDIE02,EDDIE03,EDDIE04,EDDIE05,EDDIE06 +---> EDDIE07,EDDIE08,EDDIE09,EDDIE10,EDDIE11 +---> EDDIE12,EDDIE13,EDDIE14,EDDIE15,EDDIE16 +GLO> PLYRHD6.GLO +---> EUGG00,EUGG01 +GLO> XXXHD.GLO +---> EUGG02,EUGG03,EUGG04,EUGG05,EUGG06,EUGG07,EUGG08 +---> EUGG09,EUGG10,EUGG11,EUGG12,EUGG13 +---> EUGG14,EUGG15,EUGG16 +GLO> PLYRHD6.GLO +---> JEFF00,JEFF01 +GLO> XXXHD.GLO +---> JEFF02,JEFF03,JEFF04,JEFF05,JEFF06 +---> JEFF07,JEFF08,JEFF09,JEFF10,JEFF11,JEFF12,JEFF13,JEFF14,JEFF15,JEFF16 +GLO> PLYRHD6.GLO +---> JAMIE00,JAMIE01 +GLO> XXXHD.GLO +---> JAMIE02,JAMIE03,JAMIE04,JAMIE05 +---> JAMIE06,JAMIE07,JAMIE08,JAMIE09,JAMIE10,JAMIE11,JAMIE12,JAMIE13,JAMIE14 +---> JAMIE15,JAMIE16 +GLO> PLYRHD6.GLO +---> TURMEL00,TURMEL01 +GLO> XXXHD.GLO +---> TURMEL02,TURMEL03,TURMEL04,TURMEL05,TURMEL06,TURMEL07,TURMEL08 +---> TURMEL09,TURMEL10,TURMEL11,TURMEL12,TURMEL13,TURMEL14,TURMEL15,TURMEL16 +; +hdsmsc7.img +GLO> PLYRHD6.GLO +---> BUD00,BUD01 +GLO> XXXHD.GLO +---> BUD02,BUD03,BUD04,BUD05,BUD06 +---> BUD07,BUD08,BUD09,BUD10,BUD11,BUD12,BUD13,BUD14,BUD15,BUD16 +GLO> PLYRHD6.GLO +---> HEY00,HEY01 +GLO> XXXHD.GLO +---> HEY02,HEY03,HEY04,HEY05,HEY06,HEY07,HEY08,HEY09,HEY10,HEY11,HEY12,HEY13 +---> HEY14,HEY15,HEY16 +GLO> PLYRHD6.GLO +---> JEN00,JEN01 +GLO> XXXHD.GLO +---> JEN02,JEN03,JEN04,JEN05,JEN06,JEN07,JEN08 +---> JEN09,JEN10,JEN11,JEN12,JEN13,JEN14,JEN15,JEN16 +GLO> PLYRHD6.GLO +---> JOHNC00,JOHNC01 +GLO> XXXHD.GLO +---> JOHNC02,JOHNC03,JOHNC04,JOHNC05,JOHNC06,JOHNC07,JOHNC08 +---> JOHNC09,JOHNC10,JOHNC11 +---> JOHNC12,JOHNC13,JOHNC14,JOHNC15,JOHNC16 +GLO> PLYRHD6.GLO +---> NIK00,NIK01 +GLO> XXXHD.GLO +---> NIK02,NIK03,NIK04 +---> NIK05 +;,NIK06,NIK07,NIK08,NIK09,NIK10,NIK11,NIK12,NIK13,NIK14,NIK15,NIK16 +---> NIK16 +GLO> PLYRHD6.GLO +---> ROOT00,ROOT01 +GLO> XXXHD.GLO +---> ROOT02,ROOT03,ROOT04,ROOT05,ROOT06,ROOT07,ROOT08,ROOT09 +---> ROOT10,ROOT11,ROOT12,ROOT13,ROOT14,ROOT15,ROOT16 +GLO> PLYRHD6.GLO +---> NEILF00,NEILF01 +GLO> XXXHD.GLO +---> NEILF02,NEILF03,NEILF04 +---> NEILF05 +;---> NEILF06,NEILF07,NEILF08,NEILF09,NEILF10,NEILF11,NEILF12,NEILF13 +;---> NEILF14,NEILF15,NEILF16 +---> NEILF16 +GLO> PLYRHD6.GLO +---> PAT00,PAT01 +GLO> XXXHD.GLO +---> PAT02,PAT03,PAT04,PAT05,PAT06,PAT07 +---> PAT08,PAT09,PAT10,PAT11,PAT12,PAT13,PAT14,PAT15,PAT16 +GLO> PLYRHD6.GLO +---> PERRY00,PERRY01 +GLO> XXXHD.GLO +---> PERRY02,PERRY03,PERRY04,PERRY05,PERRY06,PERRY07,PERRY08,PERRY09,PERRY10 +---> PERRY11,PERRY12,PERRY13,PERRY14,PERRY15,PERRY16 +GLO> PLYRHD6.GLO +---> SAL00,SAL01 +GLO> XXXHD.GLO +---> SAL02,SAL03,SAL04 +---> SAL05,SAL06,SAL07,SAL08,SAL09,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +hdsmsc8.img +GLO> PLYRHD6.GLO +---> BOON00,BOON01 +GLO> XXXHD.GLO +---> BOON02,BOON03,BOON04,BOON05 +---> BOON06,BOON07,BOON08,BOON09,BOON10,BOON11,BOON12,BOON13,BOON14,BOON15 +---> BOON16 +GLO> PLYRHD6.GLO +---> CARLOS00,CARLOS01 +GLO> XXXHD.GLO +---> CARLOS02,CARLOS03,CARLOS04,CARLOS05,CARLOS16 +;---> CARLOS07,CARLOS08,CARLOS09,CARLOS10,CARLOS11,CARLOS12,CARLOS13,CARLOS14 +;---> CARLOS15,CARLOS16 +GLO> PLYRHD6.GLO +---> FIFI00,FIFI01 +GLO> XXXHD.GLO +---> FIFI02,FIFI03,FIFI04,FIFI05,FIFI06 +---> FIFI07,FIFI08,FIFI09,FIFI10,FIFI11,FIFI12,FIFI13,FIFI14,FIFI15,FIFI16 +GLO> PLYRHD6.GLO +---> HEITH00,HEITH01 +GLO> XXXHD.GLO +---> HEITH02,HEITH03,HEITH04,HEITH05,HEITH16 +;---> HEITH06,HEITH07,HEITH08 +;---> HEITH09,HEITH10,HEITH11,HEITH12,HEITH13,HEITH14,HEITH15,HEITH16 +;---> HEITH16 +GLO> PLYRHD6.GLO +---> JASON00,JASON01 +GLO> XXXHD.GLO +---> JASON02,JASON03,JASON04,JASON05,JASON16 +;---> JASON06,JASON07,JASON08,JASON09 +;---> JASON10,JASON11,JASON12,JASON13,JASON14,JASON15,JASON16 +GLO> PLYRHD6.GLO +---> JOSH00,JOSH01 +GLO> XXXHD.GLO +---> JOSH02,JOSH03,JOSH04,JOSH05,JOSH16 +;JOSH06,JOSH07,JOSH08,JOSH09,JOSH10,JOSH11 +;---> JOSH12,JOSH13,JOSH14,JOSH15,JOSH16 +GLO> PLYRHD6.GLO +---> MARTY00,MARTY01 +GLO> XXXHD.GLO +---> MARTY02,MARTY03 +---> MARTY04,MARTY05,MARTY16 +;MARTY06,MARTY07,MARTY08,MARTY09,MARTY10,MARTY11,MARTY12 +;---> MARTY13,MARTY14,MARTY15,MARTY16 +GLO> PLYRHD6.GLO +---> MATT00,MATT01 +GLO> XXXHD.GLO +---> MATT02,MATT03,MATT04 +---> MATT05 +;,MATT06,MATT07,MATT08,MATT09,MATT10,MATT11,MATT12,MATT13,MATT14 +;---> MATT15,MATT16 +---> MATT16 +GLO> PLYRHD6.GLO +---> OURSL00,OURSL01 +GLO> XXXHD.GLO +---> OURSL02,OURSL03,OURSL04,OURSL05,OURSL06 +---> OURSL07,OURSL08,OURSL09,OURSL10,OURSL11,OURSL12,OURSL13,OURSL14,OURSL15 +---> OURSL16 +GLO> PLYRHD6.GLO +---> QUINN00,QUINN01 +GLO> XXXHD.GLO +---> QUINN02,QUINN03,QUINN04,QUINN05,QUINN06,QUINN07 +---> QUINN08,QUINN09,QUINN10,QUINN11,QUINN12,QUINN13,QUINN14,QUINN15,QUINN16 +GLO> PLYRHD6.GLO +---> TOBIAS00,TOBIAS01 +GLO> XXXHD.GLO +---> TOBIAS02,TOBIAS03,TOBIAS04,TOBIAS05,TOBIAS06,TOBIAS07 +---> TOBIAS08,TOBIAS09,TOBIAS10,TOBIAS11,TOBIAS12,TOBIAS13,TOBIAS14,TOBIAS15 +---> TOBIAS16 +PPP> 0 +ASM> MUGSHOT8.TBL +mugsmsc8.img +---> FIFI_MUG,MAT_MUG,JOS_MUG,HEI_MUG,CARL_MUG,MARTY_MUG,BOO_MUG,QUI_MUG +---> JAS_MUG,OUR_MUG,TOB_MUG + diff --git a/BACKUP/ART100/BBMUG.LOD b/BACKUP/ART100/BBMUG.LOD new file mode 100644 index 0000000..66704cb --- /dev/null +++ b/BACKUP/ART100/BBMUG.LOD @@ -0,0 +1,930 @@ +***> 2000000,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD3.TBL +GLO> PLYRHD2.GLO +PPP> 6 +; +hds8.img +XON> +---> WILLIS0,WILLIS1 +GLO> XXXHD.GLO +---> WILLIS2,WILLIS3,WILLIS4,WILLIS5,WILLIS6,WILLIS7,WILLIS8 +---> WILLIS9,WILLIS10,WILLIS11 +---> WILLIS12,WILLIS13,WILLIS14,WILLIS15,WILLIS16 +GLO> PLYRHD2.GLO +---> BROWN0,BROWN1 +GLO> XXXHD.GLO +---> BROWN2,BROWN3,BROWN4,BROWN5,BROWN6,BROWN7,BROWN8,BROWN9,BROWN10 +---> BROWN11,BROWN12,BROWN13,BROWN14,BROWN15,BROWN16 +GLO> PLYRHD2.GLO +---> MOURN0,MOURN1 +GLO> XXXHD.GLO +---> MOURN2,MOURN3,MOURN4,MOURN5 +---> MOURN6,MOURN7,MOURN8,MOURN9,MOURN10,MOURN11,MOURN12,MOURN13,MOURN14 +---> MOURN15,MOURN16 +GLO> PLYRHD2.GLO +---> KUKOC0,KUKOC1 +GLO> XXXHD.GLO +---> KUKOC2,KUKOC3,KUKOC4,KUKOC5,KUKOC6,KUKOC7,KUKOC8,KUKOC9,KUKOC10 +---> KUKOC11,KUKOC12,KUKOC13,KUKOC14,KUKOC15,KUKOC16 +GLO> PLYRHD2.GLO +---> JACK0,JACK1 +GLO> XXXHD.GLO +---> JACK2,JACK3,JACK4,JACK5,JACK6 +---> JACK7,JACK8,JACK9,JACK10,JACK11,JACK12,JACK13,JACK14,JACK15,JACK16 +GLO> PLYRHD2.GLO +---> MASH0,MASH1 +GLO> XXXHD.GLO +---> MASH2,MASH3,MASH4,MASH5,MASH6,MASH7,MASH8,MASH9,MASH10,MASH11 +---> MASH12,MASH13,MASH14,MASH15,MASH16 +HDS9.IMG +GLO> PLYRHD2.GLO +---> DUMARS0,DUMARS1 +GLO> XXXHD.GLO +---> DUMARS2,DUMARS3,DUMARS4,DUMARS5,DUMARS6,DUMARS7,DUMARS8 +---> DUMARS9,DUMARS10,DUMARS11,DUMARS12,DUMARS13,DUMARS14,DUMARS15,DUMARS16 +GLO> PLYRHD2.GLO +---> RODMAN0,RODMAN1 +GLO> XXXHD.GLO +---> RODMAN2,RODMAN3,RODMAN4,RODMAN5,RODMAN6,RODMAN7,RODMAN8 +---> RODMAN9,RODMAN10,RODMAN11,RODMAN12,RODMAN13,RODMAN14,RODMAN15,RODMAN16 +---> RODCLR1,RODCLR2,RODCLR3 +---> RODCLR4,RODCLR5,RODCLR6,RODCLR7,RODCLR8 +GLO> PLYRHD2.GLO +---> WEBBER0,WEBBER1 +GLO> XXXHD.GLO +---> WEBBER2,WEBBER3,WEBBER4,WEBBER5,WEBBER6,WEBBER7,WEBBER8 +---> WEBBER9,WEBBER10,WEBBER11,WEBBER12,WEBBER13,WEBBER14,WEBBER15,WEBBER16 +GLO> PLYRHD2.GLO +---> HORRY0,HORRY1 +GLO> XXXHD.GLO +---> HORRY2,HORRY3,HORRY4,HORRY5,HORRY6,HORRY7 +---> HORRY8,HORRY9,HORRY10,HORRY11,HORRY12,HORRY13,HORRY14,HORRY15,HORRY16 +GLO> PLYRHD2.GLO +---> SMITS0,SMITS1 +GLO> XXXHD.GLO +---> SMITS2,SMITS3,SMITS4,SMITS5,SMITS6,SMITS7,SMITS8,SMITS9,SMITS10 +---> SMITS11,SMITS12,SMITS13,SMITS14,SMITS15,SMITS16 +HDS10.IMG +GLO> PLYRHD2.GLO +---> CAMP0,CAMP1 +GLO> XXXHD.GLO +---> CAMP2,CAMP3,CAMP4,CAMP5,CAMP6,CAMP7,CAMP8,CAMP9,CAMP10,CAMP11 +---> CAMP12,CAMP13,CAMP14,CAMP15,CAMP16 +GLO> PLYRHD2.GLO +---> BAKER0,BAKER1 +GLO> XXXHD.GLO +---> BAKER2,BAKER3,BAKER4,BAKER5,BAKER6,BAKER7,BAKER8,BAKER9,BAKER10 +---> BAKER11,BAKER12,BAKER13,BAKER14,BAKER15,BAKER16 +GLO> PLYRHD2.GLO +---> RIDER0,RIDER1 +GLO> XXXHD.GLO +---> RIDER2,RIDER3,RIDER4,RIDER5,RIDER6,RIDER7,RIDER8,RIDER9,RIDER10 +---> RIDER11,RIDER12,RIDER13,RIDER14,RIDER15,RIDER16 +GLO> PLYRHD2.GLO +---> K_AND0,K_AND1 +GLO> XXXHD.GLO +---> K_AND2,K_AND3 +---> K_AND4,K_AND5,K_AND6,K_AND7,K_AND8,K_AND9,K_AND10,K_AND11,K_AND12 +---> K_AND13,K_AND14,K_AND15,K_AND16 +GLO> PLYRHD2.GLO +---> MORRIS0,MORRIS1 +GLO> XXXHD.GLO +---> MORRIS2,MORRIS3,MORRIS4 +---> MORRIS5,MORRIS6,MORRIS7,MORRIS8,MORRIS9,MORRIS10,MORRIS11,MORRIS12 +---> MORRIS13,MORRIS14,MORRIS15,MORRIS16 +GLO> PLYRHD2.GLO +---> MASON0,MASON1 +GLO> XXXHD.GLO +---> MASON2,MASON3,MASON4,MASON5 +---> MASON6,MASON7,MASON8,MASON9,MASON10,MASON11,MASON12,MASON13,MASON14 +---> MASON15,MASON16 +GLO> PLYRHD2.GLO +---> STARKS0,STARKS1 +GLO> XXXHD.GLO +---> STARKS2,STARKS3,STARKS4,STARKS5,STARKS6 +---> STARKS7,STARKS8,STARKS9,STARKS10,STARKS11,STARKS12,STARKS13,STARKS14 +---> STARKS15,STARKS16 +HDS11.IMG +GLO> PLYRHD2.GLO +---> A_HARD0,A_HARD1 +GLO> XXXHD.GLO +---> A_HARD2,A_HARD3,A_HARD4,A_HARD5,A_HARD6,A_HARD7,A_HARD8 +---> A_HARD9,A_HARD10,A_HARD11,A_HARD12,A_HARD13,A_HARD14,A_HARD15,A_HARD16 +GLO> PLYRHD2.GLO +---> N_AND0,N_AND1 +GLO> XXXHD.GLO +---> N_AND2,N_AND3,N_AND4,N_AND5,N_AND6,N_AND7,N_AND8,N_AND9,N_AND10 +---> N_AND11,N_AND12,N_AND13,N_AND14,N_AND15,N_AND16 +GLO> PLYRHD2.GLO +---> WEATH0,WEATH1 +GLO> XXXHD.GLO +---> WEATH2,WEATH3 +---> WEATH4,WEATH5,WEATH6,WEATH7,WEATH8,WEATH9,WEATH10,WEATH11,WEATH12 +---> WEATH13,WEATH14,WEATH15,WEATH16 +GLO> PLYRHD2.GLO +---> BRAD0,BRAD1 +GLO> XXXHD.GLO +---> BRAD2,BRAD3,BRAD4,BRAD5,BRAD6 +---> BRAD7,BRAD8,BRAD9,BRAD10,BRAD11,BRAD12,BRAD13,BRAD14,BRAD15,BRAD16 +GLO> PLYRHD2.GLO +---> K_JOHN0,K_JOHN1 +GLO> XXXHD.GLO +---> K_JOHN2,K_JOHN3,K_JOHN4,K_JOHN5,K_JOHN6,K_JOHN7,K_JOHN8 +---> K_JOHN9,K_JOHN10,K_JOHN11,K_JOHN12,K_JOHN13,K_JOHN14,K_JOHN15,K_JOHN16 +GLO> PLYRHD2.GLO +---> C_ROB0,C_ROB1 +GLO> XXXHD.GLO +---> C_ROB2,C_ROB3,C_ROB4,C_ROB5,C_ROB6,C_ROB7,C_ROB8,C_ROB9,C_ROB10 +---> C_ROB11,C_ROB12,C_ROB13,C_ROB14,C_ROB15,C_ROB16 +GLO> PLYRHD2.GLO +---> RICH0,RICH1 +GLO> XXXHD.GLO +---> RICH2,RICH3 +---> RICH4,RICH5,RICH6,RICH7,RICH8,RICH9,RICH10,RICH11,RICH12,RICH13,RICH14 +---> RICH15,RICH16 +HDS12.IMG +GLO> PLYRHD2.GLO +---> PAYTON0,PAYTON1 +GLO> XXXHD.GLO +---> PAYTON2,PAYTON3,PAYTON4,PAYTON5,PAYTON6,PAYTON7,PAYTON8 +---> PAYTON9,PAYTON10,PAYTON11,PAYTON12,PAYTON13,PAYTON14,PAYTON15,PAYTON16 +GLO> PLYRHD2.GLO +---> MCKEY0,MCKEY1 +GLO> XXXHD.GLO +---> MCKEY2,MCKEY3,MCKEY4,MCKEY5,MCKEY6,MCKEY7,MCKEY8,MCKEY9,MCKEY10 +---> MCKEY11,MCKEY12,MCKEY13,MCKEY14,MCKEY15,MCKEY16 +GLO> PLYRHD2.GLO +---> BENOIT0,BENOIT1 +GLO> XXXHD.GLO +---> BENOIT2 +---> BENOIT3,BENOIT4,BENOIT5,BENOIT6,BENOIT7,BENOIT8,BENOIT9,BENOIT10 +---> BENOIT11,BENOIT12,BENOIT13,BENOIT14,BENOIT15,BENOIT16 +GLO> PLYRHD2.GLO +---> CHEAN0,CHEAN1 +GLO> XXXHD.GLO +---> CHEAN2 +---> CHEAN3,CHEAN4,CHEAN5,CHEAN6,CHEAN7,CHEAN8,CHEAN9,CHEAN10,CHEAN11 +---> CHEAN12,CHEAN13,CHEAN14,CHEAN15,CHEAN16 +; +ASM> PLYRHD5.TBL +GLO> PLYRHD5.GLO +; +hds13.img +---> BLAYLO0,BLAYLO1 +GLO> XXXHD.GLO +---> BLAYLO2,BLAYLO3,BLAYLO4,BLAYLO5,BLAYLO6,BLAYLO7,BLAYLO8,BLAYLO9 +---> BLAYLO10,BLAYLO11,BLAYLO12,BLAYLO13,BLAYLO14,BLAYLO15,BLAYLO16 +GLO> PLYRHD5.GLO +---> SSMITH0,SSMITH1 +GLO> XXXHD.GLO +---> SSMITH2,SSMITH3,SSMITH4,SSMITH5,SSMITH6,SSMITH7,SSMITH8,SSMITH9 +---> SSMITH10,SSMITH11,SSMITH12,SSMITH13,SSMITH14,SSMITH15,SSMITH16 +GLO> PLYRHD5.GLO +---> KNORMA0,KNORMA1 +GLO> XXXHD.GLO +---> KNORMA2,KNORMA3,KNORMA4,KNORMA5,KNORMA6,KNORMA7,KNORMA8,KNORMA9 +---> KNORMA10,KNORMA11,KNORMA12,KNORMA13,KNORMA14,KNORMA15,KNORMA16 +;GLO> PLYRHD5.GLO +;---> HENDER0,HENDER1 +;GLO> XXXHD.GLO +;---> HENDER2,HENDER3,HENDER4,HENDER5,HENDER6,HENDER7,HENDER8,HENDER9 +;---> HENDER10,HENDER11,HENDER12,HENDER13,HENDER14,HENDER15,HENDER16 +GLO> PLYRHD5.GLO +---> BARROS0,BARROS1 +GLO> XXXHD.GLO +---> BARROS2,BARROS3,BARROS4,BARROS5,BARROS6,BARROS7,BARROS8,BARROS9 +---> BARROS10,BARROS11,BARROS12,BARROS13,BARROS14,BARROS15,BARROS16 +GLO> PLYRHD5.GLO +---> MONTRO0,MONTRO1 +GLO> XXXHD.GLO +---> MONTRO2,MONTRO3,MONTRO4,MONTRO5,MONTRO6,MONTRO7,MONTRO8,MONTRO9 +---> MONTRO10,MONTRO11,MONTRO12,MONTRO13,MONTRO14,MONTRO15,MONTRO16 +GLO> PLYRHD5.GLO +---> RADJA0,RADJA1 +GLO> XXXHD.GLO +---> RADJA2,RADJA3,RADJA4,RADJA5,RADJA6,RADJA7,RADJA8,RADJA9,RADJA10,RADJA11 +---> RADJA12,RADJA13,RADJA14,RADJA15,RADJA16 +hds14.img +GLO> PLYRHD5.GLO +---> CURRY0,CURRY1 +GLO> XXXHD.GLO +---> CURRY2,CURRY3,CURRY4,CURRY5,CURRY6,CURRY7,CURRY8,CURRY9,CURRY10,CURRY11 +---> CURRY12,CURRY13,CURRY14,CURRY15,CURRY16 +GLO> PLYRHD5.GLO +---> ZIDEK0,ZIDEK1 +GLO> XXXHD.GLO +---> ZIDEK2,ZIDEK3,ZIDEK4 +---> ZIDEK5,ZIDEK6,ZIDEK7,ZIDEK8,ZIDEK9,ZIDEK10,ZIDEK11,ZIDEK12,ZIDEK13 +---> ZIDEK14,ZIDEK15,ZIDEK16 +GLO> PLYRHD5.GLO +---> KERR0,KERR1 +GLO> XXXHD.GLO +---> KERR2,KERR3,KERR4,KERR5,KERR6,KERR7,KERR8 +---> KERR9,KERR10,KERR11,KERR12,KERR13,KERR14,KERR15,KERR16 +GLO> PLYRHD5.GLO +---> THILL0,THILL1 +GLO> XXXHD.GLO +---> THILL2 +---> THILL3,THILL4,THILL5,THILL6,THILL7,THILL8,THILL9,THILL10,THILL11 +---> THILL12,THILL13,THILL14,THILL15,THILL16 +GLO> PLYRHD5.GLO +---> CMILLS0,CMILLS1 +GLO> XXXHD.GLO +---> CMILLS2,CMILLS3,CMILLS4 +---> CMILLS5,CMILLS6,CMILLS7,CMILLS8,CMILLS9,CMILLS10,CMILLS11,CMILLS12 +---> CMILLS13,CMILLS14,CMILLS15,CMILLS16 +hds15.img +GLO> PLYRHD5.GLO +---> PHILLS0,PHILLS1 +GLO> XXXHD.GLO +---> PHILLS2,PHILLS3,PHILLS4,PHILLS5,PHILLS6,PHILLS7,PHILLS8,PHILLS9 +---> PHILLS10,PHILLS11,PHILLS12,PHILLS13,PHILLS14,PHILLS15,PHILLS16 +GLO> PLYRHD5.GLO +---> KIDD0,KIDD1 +GLO> XXXHD.GLO +---> KIDD2,KIDD3,KIDD4,KIDD5,KIDD6,KIDD7 +---> KIDD8,KIDD9,KIDD10,KIDD11,KIDD12,KIDD13,KIDD14,KIDD15,KIDD16 +GLO> PLYRHD5.GLO +---> PJONES0,PJONES1 +GLO> XXXHD.GLO +---> PJONES2,PJONES3,PJONES4,PJONES5,PJONES6,PJONES7,PJONES8,PJONES9 +---> PJONES10,PJONES11,PJONES12,PJONES13,PJONES14,PJONES15,PJONES16 +GLO> PLYRHD5.GLO +---> RAUF0,RAUF1 +GLO> XXXHD.GLO +---> RAUF2,RAUF3,RAUF4,RAUF5 +---> RAUF6,RAUF7,RAUF8,RAUF9,RAUF10,RAUF11,RAUF12,RAUF13,RAUF14,RAUF15 +---> RAUF16 +GLO> PLYRHD5.GLO +---> PACK0,PACK1 +GLO> XXXHD.GLO +---> PACK2,PACK3,PACK4,PACK5,PACK6,PACK7,PACK8,PACK9,PACK10 +---> PACK11,PACK12,PACK13,PACK14,PACK15,PACK16 +hds16.img +GLO> PLYRHD5.GLO +---> MCDYES0,MCDYES1 +GLO> XXXHD.GLO +---> MCDYES2,MCDYES3,MCDYES4,MCDYES5,MCDYES6,MCDYES7,MCDYES8,MCDYES9 +---> MCDYES10,MCDYES11,MCDYES12,MCDYES13,MCDYES14,MCDYES15,MCDYES16 +GLO> PLYRHD5.GLO +---> GHILL0,GHILL1 +GLO> XXXHD.GLO +---> GHILL2,GHILL3,GHILL4,GHILL5,GHILL6,GHILL7,GHILL8,GHILL9,GHILL10,GHILL11 +---> GHILL12,GHILL13,GHILL14,GHILL15,GHILL16 +GLO> PLYRHD5.GLO +---> TMILLS0,TMILLS1 +GLO> XXXHD.GLO +---> TMILLS2,TMILLS3,TMILLS4 +---> TMILLS5,TMILLS6,TMILLS7,TMILLS8,TMILLS9,TMILLS10,TMILLS11,TMILLS12 +---> TMILLS13,TMILLS14,TMILLS15,TMILLS16 +GLO> PLYRHD5.GLO +---> THORPE0,THORPE1 +GLO> XXXHD.GLO +---> THORPE2,THORPE3,THORPE4 +---> THORPE5,THORPE6,THORPE7,THORPE8,THORPE9,THORPE10,THORPE11,THORPE12 +---> THORPE13,THORPE14,THORPE15,THORPE16 +GLO> PLYRHD5.GLO +---> SPREWE0,SPREWE1 +GLO> XXXHD.GLO +---> SPREWE2,SPREWE3,SPREWE4 +---> SPREWE5,SPREWE6,SPREWE7,SPREWE8,SPREWE9,SPREWE10,SPREWE11,SPREWE12 +---> SPREWE13,SPREWE14,SPREWE15,SPREWE16 +hds17.img +GLO> PLYRHD5.GLO +---> JSMITH0,JSMITH1 +GLO> XXXHD.GLO +---> JSMITH2,JSMITH3,JSMITH4,JSMITH5,JSMITH6,JSMITH7,JSMITH8,JSMITH9 +---> JSMITH10,JSMITH11,JSMITH12,JSMITH13,JSMITH14,JSMITH15,JSMITH16 +GLO> PLYRHD5.GLO +---> CASSEL0,CASSEL1 +GLO> XXXHD.GLO +---> CASSEL2,CASSEL3,CASSEL4,CASSEL5,CASSEL6,CASSEL7,CASSEL8,CASSEL9 +---> CASSEL10,CASSEL11,CASSEL12,CASSEL13,CASSEL14,CASSEL15,CASSEL16 +GLO> PLYRHD5.GLO +---> DDAVIS0,DDAVIS1 +GLO> XXXHD.GLO +---> DDAVIS2,DDAVIS3,DDAVIS4,DDAVIS5,DDAVIS6,DDAVIS7,DDAVIS8,DDAVIS9 +---> DDAVIS10,DDAVIS11,DDAVIS12,DDAVIS13,DDAVIS14,DDAVIS15,DDAVIS16 +GLO> PLYRHD5.GLO +---> MCKEE0,MCKEE1 +GLO> XXXHD.GLO +---> MCKEE2,MCKEE3,MCKEE4,MCKEE5,MCKEE6,MCKEE7,MCKEE8,MCKEE9,MCKEE10,MCKEE11 +---> MCKEE12,MCKEE13,MCKEE14,MCKEE15,MCKEE16 +GLO> PLYRHD5.GLO +---> VAUGHT0,VAUGHT1 +GLO> XXXHD.GLO +---> VAUGHT2,VAUGHT3,VAUGHT4,VAUGHT5,VAUGHT6,VAUGHT7,VAUGHT8 +---> VAUGHT9,VAUGHT10,VAUGHT11,VAUGHT12,VAUGHT13,VAUGHT14,VAUGHT15,VAUGHT16 +GLO> PLYRHD5.GLO +---> RROGER0,RROGER1 +GLO> XXXHD.GLO +---> RROGER2,RROGER3,RROGER4,RROGER5,RROGER6,RROGER7,RROGER8,RROGER9 +---> RROGER10,RROGER11,RROGER12,RROGER13,RROGER14,RROGER15,RROGER16 +hds18.img +GLO> PLYRHD5.GLO +---> LMURRA0,LMURRA1 +GLO> XXXHD.GLO +---> LMURRA2,LMURRA3,LMURRA4,LMURRA5,LMURRA6,LMURRA7,LMURRA8,LMURRA9 +---> LMURRA10,LMURRA11,LMURRA12,LMURRA13,LMURRA14,LMURRA15,LMURRA16 +GLO> PLYRHD5.GLO +---> PRICHA0,PRICHA1 +GLO> XXXHD.GLO +---> PRICHA2,PRICHA3,PRICHA4,PRICHA5,PRICHA6,PRICHA7,PRICHA8,PRICHA9 +---> PRICHA10,PRICHA11,PRICHA12,PRICHA13,PRICHA14,PRICHA15,PRICHA16 +GLO> PLYRHD5.GLO +---> BBARRY0,BBARRY1 +GLO> XXXHD.GLO +---> BBARRY2,BBARRY3,BBARRY4,BBARRY5,BBARRY6,BBARRY7,BBARRY8,BBARRY9 +---> BBARRY10,BBARRY11,BBARRY12,BBARRY13,BBARRY14,BBARRY15,BBARRY16 +GLO> PLYRHD5.GLO +---> EXEL0,EXEL1 +GLO> XXXHD.GLO +---> EXEL2,EXEL3,EXEL4,EXEL5,EXEL6,EXEL7,EXEL8,EXEL9,EXEL10,EXEL11,EXEL12 +---> EXEL13,EXEL14,EXEL15,EXEL16 +GLO> PLYRHD5.GLO +---> CEBALL0,CEBALL1 +GLO> XXXHD.GLO +---> CEBALL2,CEBALL3,CEBALL4,CEBALL5 +---> CEBALL6,CEBALL7,CEBALL8,CEBALL9,CEBALL10,CEBALL11,CEBALL12,CEBALL13 +---> CEBALL14,CEBALL15,CEBALL16 +GLO> PLYRHD5.GLO +---> EJONES0,EJONES1 +GLO> XXXHD.GLO +---> EJONES2,EJONES3,EJONES4,EJONES5 +---> EJONES6,EJONES7,EJONES8,EJONES9,EJONES10,EJONES11,EJONES12,EJONES13 +---> EJONES14,EJONES15,EJONES16 +GLO> PLYRHD5.GLO +---> BOWENS0,BOWENS1 +GLO> XXXHD.GLO +---> BOWENS2,BOWENS3,BOWENS4,BOWENS5 +---> BOWENS6,BOWENS7,BOWENS8,BOWENS9,BOWENS10,BOWENS11,BOWENS12,BOWENS13 +---> BOWENS14,BOWENS15,BOWENS16 +hds19.img +GLO> PLYRHD5.GLO +---> GROBIN0,GROBIN1 +GLO> XXXHD.GLO +---> GROBIN2,GROBIN3 +---> GROBIN4,GROBIN5,GROBIN6,GROBIN7,GROBIN8,GROBIN9,GROBIN10,GROBIN11 +---> GROBIN12,GROBIN13,GROBIN14,GROBIN15,GROBIN16 +GLO> PLYRHD5.GLO +---> EMURD0,EMURD1 +GLO> XXXHD.GLO +---> EMURD2,EMURD3 +---> EMURD4,EMURD5,EMURD6,EMURD7,EMURD8,EMURD9,EMURD10,EMURD11,EMURD12 +---> EMURD13,EMURD14,EMURD15,EMURD16 +GLO> PLYRHD5.GLO +---> RESPER0,RESPER1 +GLO> XXXHD.GLO +---> RESPER2,RESPER3,RESPER4,RESPER5 +---> RESPER6,RESPER7,RESPER8,RESPER9,RESPER10,RESPER11,RESPER12,RESPER13 +---> RESPER14,RESPER15,RESPER16 +;GLO> PLYRHD5.GLO +;---> MWILLI0,MWILLI1 +;GLO> XXXHD.GLO +;---> MWILLI2,MWILLI3,MWILLI4,MWILLI5 +;---> MWILLI6,MWILLI7,MWILLI8,MWILLI9,MWILLI10,MWILLI11,MWILLI12,MWILLI13 +;---> MWILLI14,MWILLI15,MWILLI16 +;GLO> PLYRHD5.GLO +;---> ROOKS0,ROOKS1 +;GLO> XXXHD.GLO +;---> ROOKS2,ROOKS3,ROOKS4,ROOKS5,ROOKS6 +;---> ROOKS7,ROOKS8,ROOKS9,ROOKS10,ROOKS11,ROOKS12,ROOKS13,ROOKS14,ROOKS15 +;---> ROOKS16 +hds20.img +GLO> PLYRHD5.GLO +---> GARNET0,GARNET1 +GLO> XXXHD.GLO +---> GARNET2,GARNET3,GARNET4,GARNET5,GARNET6,GARNET7,GARNET8,GARNET9 +---> GARNET10,GARNET11,GARNET12,GARNET13,GARNET14,GARNET15,GARNET16 +GLO> PLYRHD5.GLO +---> GILLIA0,GILLIA1 +GLO> XXXHD.GLO +---> GILLIA2,GILLIA3,GILLIA4,GILLIA5,GILLIA6,GILLIA7,GILLIA8,GILLIA9 +---> GILLIA10,GILLIA11,GILLIA12,GILLIA13,GILLIA14,GILLIA15,GILLIA16 +GLO> PLYRHD5.GLO +---> OBANN0,OBANN1 +GLO> XXXHD.GLO +---> OBANN2,OBANN3,OBANN4,OBANN5,OBANN6,OBANN7,OBANN8,OBANN9,OBANN10,OBANN11 +---> OBANN12,OBANN13,OBANN14,OBANN15,OBANN16 +GLO> PLYRHD5.GLO +---> DSCOTT0,DSCOTT1 +GLO> XXXHD.GLO +---> DSCOTT2,DSCOTT3,DSCOTT4 +---> DSCOTT5,DSCOTT6,DSCOTT7,DSCOTT8,DSCOTT9,DSCOTT10,DSCOTT11,DSCOTT12 +---> DSCOTT13,DSCOTT14,DSCOTT15,DSCOTT16 +GLO> PLYRHD5.GLO +---> WRIGHT0,WRIGHT1 +GLO> XXXHD.GLO +---> WRIGHT2,WRIGHT3,WRIGHT4 +---> WRIGHT5,WRIGHT6,WRIGHT7,WRIGHT8,WRIGHT9,WRIGHT10,WRIGHT11,WRIGHT12 +---> WRIGHT13,WRIGHT14,WRIGHT15,WRIGHT16 +hds21.img +GLO> PLYRHD5.GLO +---> STACK0,STACK1 +GLO> XXXHD.GLO +---> STACK2,STACK3,STACK4,STACK5,STACK6,STACK7,STACK8,STACK9,STACK10 +---> STACK11,STACK12,STACK13,STACK14,STACK15,STACK16 +GLO> PLYRHD5.GLO +---> WPERS0,WPERS1 +GLO> XXXHD.GLO +---> WPERS2,WPERS3 +---> WPERS4,WPERS5,WPERS6,WPERS7,WPERS8,WPERS9,WPERS10,WPERS11,WPERS12 +---> WPERS13,WPERS14,WPERS15,WPERS16 +GLO> PLYRHD5.GLO +---> FINLEY0,FINLEY1 +GLO> XXXHD.GLO +---> FINLEY2,FINLEY3,FINLEY4,FINLEY5 +---> FINLEY6,FINLEY7,FINLEY8,FINLEY9,FINLEY10,FINLEY11,FINLEY12,FINLEY13 +---> FINLEY14,FINLEY15,FINLEY16 +GLO> PLYRHD5.GLO +---> STRICK0,STRICK1 +GLO> XXXHD.GLO +---> STRICK2,STRICK3,STRICK4,STRICK5 +---> STRICK6,STRICK7,STRICK8,STRICK9,STRICK10,STRICK11,STRICK12,STRICK13 +---> STRICK14,STRICK15,STRICK16 +GLO> PLYRHD5.GLO +---> SABONI0,SABONI1 +GLO> XXXHD.GLO +---> SABONI2,SABONI3,SABONI4,SABONI5 +---> SABONI6,SABONI7,SABONI8,SABONI9,SABONI10,SABONI11,SABONI12,SABONI13 +---> SABONI14,SABONI15,SABONI16 +GLO> PLYRHD5.GLO +---> BWILLI0,BWILLI1 +GLO> XXXHD.GLO +---> BWILLI2,BWILLI3,BWILLI4,BWILLI5 +---> BWILLI6,BWILLI7,BWILLI8,BWILLI9,BWILLI10,BWILLI11,BWILLI12,BWILLI13 +---> BWILLI14,BWILLI15,BWILLI16 +hds22.img +GLO> PLYRHD5.GLO +---> CHILD0,CHILD1 +GLO> XXXHD.GLO +---> CHILD2,CHILD3,CHILD4,CHILD5,CHILD6,CHILD7,CHILD8,CHILD9,CHILD10 +---> CHILD11,CHILD12,CHILD13,CHILD14,CHILD15,CHILD16 +GLO> PLYRHD5.GLO +---> WWILLI0,WWILLI1 +GLO> XXXHD.GLO +---> WWILLI2,WWILLI3 +---> WWILLI4,WWILLI5,WWILLI6,WWILLI7,WWILLI8,WWILLI9,WWILLI10,WWILLI11 +---> WWILLI12,WWILLI13,WWILLI14,WWILLI15,WWILLI16 +GLO> PLYRHD5.GLO +---> BGRANT0,BGRANT1 +GLO> XXXHD.GLO +---> BGRANT2,BGRANT3 +---> BGRANT4,BGRANT5,BGRANT6,BGRANT7,BGRANT8,BGRANT9,BGRANT10,BGRANT11 +---> BGRANT12,BGRANT13,BGRANT14,BGRANT15,BGRANT16 +GLO> PLYRHD5.GLO +---> MARCIU0,MARCIU1 +GLO> XXXHD.GLO +---> MARCIU2,MARCIU3 +---> MARCIU4,MARCIU5,MARCIU6,MARCIU7,MARCIU8,MARCIU9,MARCIU10,MARCIU11 +---> MARCIU12,MARCIU13,MARCIU14,MARCIU15,MARCIU16 +;GLO> PLYRHD5.GLO +;---> CWILLI0,CWILLI1 +;GLO> XXXHD.GLO +;---> CWILLI2,CWILLI3 +;---> CWILLI4,CWILLI5,CWILLI6,CWILLI7,CWILLI8,CWILLI9,CWILLI10,CWILLI11 +;---> CWILLI12,CWILLI13,CWILLI14,CWILLI15,CWILLI16 +GLO> PLYRHD5.GLO +---> AJOHN0,AJOHN1 +GLO> XXXHD.GLO +---> AJOHN2,AJOHN3 +---> AJOHN4,AJOHN5,AJOHN6,AJOHN7,AJOHN8,AJOHN9,AJOHN10,AJOHN11,AJOHN12 +---> AJOHN13,AJOHN14,AJOHN15,AJOHN16 +hds23.img +GLO> PLYRHD5.GLO +---> FORD0,FORD1 +GLO> XXXHD.GLO +---> FORD2,FORD3,FORD4,FORD5,FORD6,FORD7,FORD8,FORD9,FORD10,FORD11 +---> FORD12,FORD13,FORD14,FORD15,FORD16 +GLO> PLYRHD5.GLO +---> CROGER0,CROGER1 +GLO> XXXHD.GLO +---> CROGER2,CROGER3,CROGER4 +---> CROGER5,CROGER6,CROGER7,CROGER8,CROGER9,CROGER10,CROGER11,CROGER12 +---> CROGER13,CROGER14,CROGER15,CROGER16 +GLO> PLYRHD5.GLO +---> STOUD0,STOUD1 +GLO> XXXHD.GLO +---> STOUD2,STOUD3 +---> STOUD4,STOUD5,STOUD6,STOUD7,STOUD8,STOUD9,STOUD10,STOUD11,STOUD12 +---> STOUD13,STOUD14,STOUD15,STOUD16 +GLO> PLYRHD5.GLO +---> ANTHON0,ANTHON1 +GLO> XXXHD.GLO +---> ANTHON2,ANTHON3,ANTHON4,ANTHON5,ANTHON6,ANTHON7 +---> ANTHON8,ANTHON9,ANTHON10,ANTHON11,ANTHON12,ANTHON13,ANTHON14,ANTHON15 +---> ANTHON16 +;GLO> PLYRHD5.GLO +;---> GATTIS0,GATTIS1 +;GLO> XXXHD.GLO +;---> GATTIS2,GATTIS3,GATTIS4,GATTIS5,GATTIS6,GATTIS7 +;---> GATTIS8,GATTIS9,GATTIS10,GATTIS11,GATTIS12,GATTIS13,GATTIS14,GATTIS15 +;---> GATTIS16 +GLO> PLYRHD5.GLO +---> JHOW0,JHOW1 +GLO> XXXHD.GLO +---> JHOW2 +---> JHOW3,JHOW4,JHOW5,JHOW6,JHOW7,JHOW8,JHOW9,JHOW10,JHOW11,JHOW12,JHOW13 +---> JHOW14,JHOW15,JHOW16 +hds24.img +GLO> PLYRHD5.GLO +---> FOX0,FOX1 +GLO> XXXHD.GLO +---> FOX2,FOX3,FOX4,FOX5,FOX6,FOX7,FOX8,FOX9,FOX10,FOX11,FOX12,FOX13 +---> FOX14,FOX15,FOX16 +GLO> PLYRHD5.GLO +---> LONG0,LONG1 +GLO> XXXHD.GLO +---> LONG2,LONG3,LONG4,LONG5,LONG6,LONG7,LONG8,LONG9 +---> LONG10,LONG11,LONG12,LONG13,LONG14,LONG15,LONG16 +GLO> PLYRHD5.GLO +---> BRAND0,BRAND1 +GLO> XXXHD.GLO +---> BRAND2,BRAND3 +---> BRAND4,BRAND5,BRAND6,BRAND7,BRAND8,BRAND9,BRAND10,BRAND11,BRAND12 +---> BRAND13,BRAND14,BRAND15,BRAND16 +GLO> PLYRHD5.GLO +---> FERRY0,FERRY1 +GLO> XXXHD.GLO +---> FERRY2,FERRY3,FERRY4,FERRY5 +---> FERRY6,FERRY7,FERRY8,FERRY9,FERRY10,FERRY11,FERRY12,FERRY13,FERRY14 +---> FERRY15,FERRY16 +GLO> PLYRHD5.GLO +---> MCCLOU0,MCCLOU1 +GLO> XXXHD.GLO +---> MCCLOU2,MCCLOU3,MCCLOU4,MCCLOU5,MCCLOU6,MCCLOU7 +---> MCCLOU8,MCCLOU9,MCCLOU10,MCCLOU11,MCCLOU12,MCCLOU13,MCCLOU14,MCCLOU15 +---> MCCLOU16 +GLO> PLYRHD5.GLO +---> ROSE0,ROSE1 +GLO> XXXHD.GLO +---> ROSE2,ROSE3,ROSE4,ROSE5,ROSE6,ROSE7,ROSE8,ROSE9,ROSE10 +---> ROSE11,ROSE12,ROSE13,ROSE14,ROSE15,ROSE16 +GLO> PLYRHD5.GLO +---> DELLIS0,DELLIS1 +GLO> XXXHD.GLO +---> DELLIS2,DELLIS3,DELLIS4 +---> DELLIS5,DELLIS6,DELLIS7,DELLIS8,DELLIS9,DELLIS10,DELLIS11,DELLIS12,DELLIS13 +---> DELLIS14,DELLIS15,DELLIS16 +GLO> PLYRHD5.GLO +---> HOUSTO0,HOUSTO1 +GLO> XXXHD.GLO +---> HOUSTO2,HOUSTO3,HOUSTO4,HOUSTO5,HOUSTO6 +---> HOUSTO7,HOUSTO8,HOUSTO9,HOUSTO10,HOUSTO11,HOUSTO12,HOUSTO13,HOUSTO14 +---> HOUSTO15,HOUSTO16 +GLO> PLYRHD5.GLO +---> MJACKS0,MJACKS1 +GLO> XXXHD.GLO +---> MJACKS2,MJACKS3,MJACKS4,MJACKS5,MJACKS6 +---> MJACKS7,MJACKS8,MJACKS9,MJACKS10,MJACKS11,MJACKS12,MJACKS13,MJACKS14 +---> MJACKS15,MJACKS16 +GLO> PLYRHD5.GLO +---> DANILO0,DANILO1 +GLO> XXXHD.GLO +---> DANILO2,DANILO3,DANILO4,DANILO5,DANILO6 +---> DANILO7,DANILO8,DANILO9,DANILO10,DANILO11,DANILO12,DANILO13,DANILO14 +---> DANILO15,DANILO16 +;GLO> PLYRHD5.GLO +;---> COLES0,COLES1 +;GLO> XXXHD.GLO +;---> COLES2,COLES3,COLES4,COLES5,COLES6,COLES7 +;---> COLES8,COLES9,COLES10,COLES11,COLES12,COLES13,COLES14,COLES15,COLES16 +GLO> PLYRHD5.GLO +---> DOUGLA0,DOUGLA1 +GLO> XXXHD.GLO +---> DOUGLA2,DOUGLA3,DOUGLA4,DOUGLA5,DOUGLA6,DOUGLA7,DOUGLA8,DOUGLA9 +---> DOUGLA10,DOUGLA11,DOUGLA12,DOUGLA13,DOUGLA14,DOUGLA15,DOUGLA16 +hds25.img +GLO> PLYRHD5.GLO +---> KEDWAR0,KEDWAR1 +GLO> XXXHD.GLO +---> KEDWAR2,KEDWAR3,KEDWAR4,KEDWAR5,KEDWAR6,KEDWAR7,KEDWAR8,KEDWAR9 +---> KEDWAR10,KEDWAR11,KEDWAR12,KEDWAR13,KEDWAR14,KEDWAR15,KEDWAR16 +GLO> PLYRHD5.GLO +---> KONCAK0,KONCAK1 +GLO> XXXHD.GLO +---> KONCAK2,KONCAK3,KONCAK4,KONCAK5,KONCAK6,KONCAK7,KONCAK8,KONCAK9 +---> KONCAK10,KONCAK11,KONCAK12,KONCAK13,KONCAK14,KONCAK15,KONCAK16 +GLO> PLYRHD5.GLO +---> VMAX0,VMAX1 +GLO> XXXHD.GLO +---> VMAX2,VMAX3,VMAX4,VMAX5,VMAX6,VMAX7,VMAX8,VMAX9,VMAX10,VMAX11,VMAX12 +---> VMAX13,VMAX14,VMAX15,VMAX16 +GLO> PLYRHD5.GLO +---> EDNEY0,EDNEY1 +GLO> XXXHD.GLO +---> EDNEY2,EDNEY3,EDNEY4,EDNEY5,EDNEY6 +---> EDNEY7,EDNEY8,EDNEY9,EDNEY10,EDNEY11,EDNEY12,EDNEY13,EDNEY14,EDNEY15 +---> EDNEY16 +GLO> PLYRHD5.GLO +---> DELNEG0,DELNEG1 +GLO> XXXHD.GLO +---> DELNEG2,DELNEG3,DELNEG4,DELNEG5,DELNEG6,DELNEG7,DELNEG8 +---> DELNEG9,DELNEG10,DELNEG11,DELNEG12,DELNEG13,DELNEG14,DELNEG15,DELNEG16 +GLO> PLYRHD5.GLO +---> WANDERS0,WANDERS1 +GLO> XXXHD.GLO +---> WANDERS2,WANDERS3,WANDERS4,WANDERS5,WANDERS6,WANDERS7,WANDERS8,WANDERS9 +---> WANDERS10,WANDERS11,WANDERS12,WANDERS13,WANDERS14,WANDERS15,WANDERS16 +GLO> PLYRHD5.GLO +---> OMILLER0,OMILLER1 +GLO> XXXHD.GLO +---> OMILLER2,OMILLER3,OMILLER4,OMILLER5,OMILLER6,OMILLER7,OMILLER8,OMILLER9 +---> OMILLER10,OMILLER11,OMILLER12,OMILLER13,OMILLER14,OMILLER15,OMILLER16 +GLO> PLYRHD5.GLO +---> MURRAY0,MURRAY1 +GLO> XXXHD.GLO +---> MURRAY2,MURRAY3,MURRAY4,MURRAY5,MURRAY6,MURRAY7,MURRAY8,MURRAY9 +---> MURRAY10,MURRAY11,MURRAY12,MURRAY13,MURRAY14,MURRAY15,MURRAY16 +GLO> PLYRHD5.GLO +---> MURESA0,MURESA1 +GLO> XXXHD.GLO +---> MURESA2,MURESA3,MURESA4,MURESA5,MURESA6,MURESA7,MURESA8,MURESA9 +---> MURESA10,MURESA11,MURESA12,MURESA13,MURESA14,MURESA15,MURESA16 +GLO> PLYRHD5.GLO +---> BREEV0,BREEV1 +GLO> XXXHD.GLO +---> BREEV2,BREEV3,BREEV4,BREEV5,BREEV6,BREEV7,BREEV8,BREEV9 +---> BREEV10,BREEV11,BREEV12,BREEV13,BREEV14,BREEV15,BREEV16 +GLO> PLYRHD5.GLO +---> DHARP0,DHARP1 +GLO> XXXHD.GLO +---> DHARP2,DHARP3,DHARP4,DHARP5,DHARP6,DHARP7,DHARP8,DHARP9 +---> DHARP10,DHARP11,DHARP12,DHARP13,DHARP14,DHARP15,DHARP16 +hds26.img +GLO> PLYRHD5.GLO +---> Robertsn0,Robertsn1 +GLO> XXXHD.GLO +---> Robertsn2,Robertsn3,Robertsn4,Robertsn5,Robertsn6,Robertsn7,Robertsn8,Robertsn9 +---> Robertsn10,Robertsn11,Robertsn12,Robertsn13,Robertsn14,Robertsn15,Robertsn16 +GLO> PLYRHD5.GLO +---> Chapman0,Chapman1 +GLO> XXXHD.GLO +---> Chapman2,Chapman3,Chapman4,Chapman5,Chapman6,Chapman7,Chapman8,Chapman9 +---> Chapman10,Chapman11,Chapman12,Chapman13,Chapman14,Chapman15,Chapman16 +GLO> PLYRHD5.GLO +---> Lang0,Lang1 +GLO> XXXHD.GLO +---> Lang2,Lang3,Lang4,Lang5,Lang6,Lang7,Lang8,Lang9 +---> Lang10,Lang11,Lang12,Lang13,Lang14,Lang15,Lang16 +GLO> PLYRHD5.GLO +---> Scott0,Scott1 +GLO> XXXHD.GLO +---> Scott2,Scott3,Scott4,Scott5,Scott6,Scott7,Scott8,Scott9 +---> Scott10,Scott11,Scott12,Scott13,Scott14,Scott15,Scott16 +GLO> PLYRHD5.GLO +---> Webb0,Webb1 +GLO> XXXHD.GLO +---> Webb2,Webb3,Webb4,Webb5,Webb6,Webb7,Webb8,Webb9 +---> Webb10,Webb11,Webb12,Webb13,Webb14,Webb15,Webb16 +;GLO> PLYRHD5.GLO +;---> MJohnson0,MJohnson1 +;GLO> XXXHD.GLO +;---> MJohnson2,MJohnson3,MJohnson4,MJohnson5,MJohnson6,MJohnson7,MJohnson8,MJohnson9 +;---> MJohnson10,MJohnson11,MJohnson12,MJohnson13,MJohnson14,MJohnson15,MJohnson16 +GLO> PLYRHD5.GLO +---> Ruffin0,Ruffin1 +GLO> XXXHD.GLO +---> Ruffin2,Ruffin3,Ruffin4,Ruffin5,Ruffin6,Ruffin7,Ruffin8,Ruffin9 +---> Ruffin10,Ruffin11,Ruffin12,Ruffin13,Ruffin14,Ruffin15,Ruffin16 +hdsmsc1.img +;GLO> PLYRHD5.GLO +;---> ROS_00,ROS_01 +;GLO> XXXHD.GLO +;---> ROS_02,ROS_03,ROS_04,ROS_05,ROS_06,ROS_07 +;---> ROS_08,ROS_09,ROS_10,ROS_11,ROS_12,ROS_13,ROS_14,ROS_15,ROS_16 +GLO> PLYRHD5.GLO +---> ANG_00,ANG_01 +GLO> XXXHD.GLO +---> ANG_02,ANG_03,ANG_04,ANG_05 +---> ANG_06,ANG_07,ANG_08,ANG_09,ANG_10,ANG_11,ANG_12,ANG_13,ANG_14,ANG_15 +---> ANG_16 +GLO> PLYRHD5.GLO +---> JOE_00,JOE_01 +GLO> XXXHD.GLO +---> JOE_02,JOE_03,JOE_04,JOE_05,JOE_06,JOE_07,JOE_08 +---> JOE_09,JOE_10,JOE_11,JOE_12,JOE_13,JOE_14,JOE_15,JOE_16 +GLO> PLYRHD5.GLO +---> LIS_00,LIS_01 +GLO> XXXHD.GLO +---> LIS_02,LIS_03,LIS_04,LIS_05,LIS_06,LIS_07,LIS_08,LIS_09,LIS_10,LIS_11 +---> LIS_12,LIS_13,LIS_14,LIS_15,LIS_16 +GLO> PLYRHD5.GLO +---> MEL_00,MEL_01 +GLO> XXXHD.GLO +---> MEL_02,MEL_03,MEL_04 +---> MEL_05,MEL_06,MEL_07,MEL_08,MEL_09,MEL_10,MEL_11,MEL_12,MEL_13,MEL_14 +---> MEL_15,MEL_16 +GLO> PLYRHD5.GLO +---> MIK_00,MIK_01 +GLO> XXXHD.GLO +---> MIK_02,MIK_03,MIK_04,MIK_05,MIK_06,MIK_07 +---> MIK_08,MIK_09,MIK_10,MIK_11,MIK_12,MIK_13,MIK_14,MIK_15,MIK_16 +GLO> PLYRHD5.GLO +---> ALIEN00,ALIEN01 +GLO> XXXHD.GLO +---> ALIEN02,ALIEN03,ALIEN04,ALIEN05,ALIEN06,ALIEN07,ALIEN08,ALIEN09 +---> ALIEN10,ALIEN11,ALIEN12,ALIEN13,ALIEN14,ALIEN15,ALIEN16 +GLO> PLYRHD5.GLO +---> COW00,COW01 +GLO> XXXHD.GLO +---> COW02,COW03,COW04,COW05,COW06,COW07,COW08,COW09,COW10,COW11,COW12,COW13 +---> COW14,COW15,COW16 +GLO> PLYRHD5.GLO +---> GUIDO00,GUIDO01 +GLO> XXXHD.GLO +---> GUIDO02,GUIDO03,GUIDO04,GUIDO05 +---> GUIDO06,GUIDO07,GUIDO08,GUIDO09,GUIDO10,GUIDO11,GUIDO12,GUIDO13,GUIDO14 +---> GUIDO15,GUIDO16 +hdsmsc2.img +GLO> PLYRHD5.GLO +---> BER00,BER01 +GLO> XXXHD.GLO +---> BER02,BER03,BER04,BER05,BER06 +---> BER07,BER08,BER09,BER10,BER11,BER12,BER13,BER14,BER15,BER16 +GLO> PLYRHD5.GLO +---> CHK00,CHK01 +GLO> XXXHD.GLO +---> CHK02,CHK03,CHK04,CHK05,CHK06,CHK07,CHK08,CHK09,CHK10,CHK11 +---> CHK12,CHK13,CHK14,CHK15,CHK16 +GLO> PLYRHD5.GLO +---> FAT00,FAT01 +GLO> XXXHD.GLO +---> FAT02,FAT03,FAT04,FAT05,FAT06,FAT07,FAT08 +---> FAT09,FAT10,FAT11,FAT12,FAT13,FAT14,FAT15,FAT16 +GLO> PLYRHD5.GLO +---> FRA00,FRA01 +GLO> XXXHD.GLO +---> FRA02,FRA03,FRA04,FRA05,FRA06,FRA07,FRA08,FRA09,FRA10 +---> FRA11,FRA12,FRA13,FRA14,FRA15,FRA16 +GLO> PLYRHD5.GLO +---> GOR00,GOR01 +GLO> XXXHD.GLO +---> GOR02,GOR03,GOR04,GOR05,GOR06,GOR07,GOR08,GOR09,GOR10 +---> GOR11,GOR12,GOR13,GOR14,GOR15,GOR16 +GLO> PLYRHD5.GLO +---> GRE00,GRE01 +GLO> XXXHD.GLO +---> GRE02,GRE03,GRE04,GRE05,GRE06,GRE07,GRE08,GRE09,GRE10,GRE11 +---> GRE12,GRE13,GRE14,GRE15,GRE16 +GLO> PLYRHD5.GLO +---> OLD00,OLD01 +GLO> XXXHD.GLO +---> OLD02,OLD03,OLD04,OLD05,OLD06,OLD07,OLD08,OLD09,OLD10,OLD11,OLD12 +---> OLD13,OLD14,OLD15,OLD16 +GLO> PLYRHD5.GLO +---> PIG00,PIG01 +GLO> XXXHD.GLO +---> PIG02,PIG03,PIG04,PIG05,PIG06,PIG07 +---> PIG08,PIG09,PIG10,PIG11,PIG12,PIG13,PIG14,PIG15,PIG16 +GLO> PLYRHD5.GLO +---> WIZ00,WIZ01 +GLO> XXXHD.GLO +---> WIZ02,WIZ03,WIZ04,WIZ05,WIZ06,WIZ07,WIZ08,WIZ09 +---> WIZ10,WIZ11,WIZ12,WIZ13,WIZ14,WIZ15,WIZ16 +hdsmsc3.img +GLO> PLYRHD5.GLO +---> ERI00,ERI01 +GLO> XXXHD.GLO +---> ERI02,ERI03,ERI04,ERI05,ERI06,ERI07,ERI08,ERI09,ERI10 +---> ERI11,ERI12,ERI13,ERI14,ERI15,ERI16 +GLO> PLYRHD5.GLO +---> KIM00,KIM01 +GLO> XXXHD.GLO +---> KIM02,KIM03,KIM04,KIM05,KIM06,KIM07,KIM08,KIM09,KIM10 +---> KIM11,KIM12,KIM13,KIM14,KIM15,KIM16 +GLO> PLYRHD5.GLO +---> MAR00,MAR01 +GLO> XXXHD.GLO +---> MAR02,MAR03,MAR04,MAR05,MAR06,MAR07,MAR08,MAR09,MAR10 +---> MAR11,MAR12,MAR13,MAR14,MAR15,MAR16 +GLO> PLYRHD5.GLO +---> ROH00,ROH01 +GLO> XXXHD.GLO +---> ROH02,ROH03,ROH04,ROH05,ROH06,ROH07,ROH08,ROH09,ROH10 +---> ROH11,ROH12,ROH13,ROH14,ROH15,ROH16 +GLO> PLYRHD5.GLO +---> SEA00,SEA01 +GLO> XXXHD.GLO +---> SEA02,SEA03,SEA04,SEA05,SEA06,SEA07,SEA08,SEA09,SEA10 +---> SEA11,SEA12,SEA13,SEA14,SEA15,SEA16 +hdsmsc4.img +GLO> PLYRHD5.GLO +---> CHEECH00,CHEECH01 +GLO> XXXHD.GLO +---> CHEECH02,CHEECH03,CHEECH04,CHEECH05,CHEECH06,CHEECH07 +---> CHEECH08,CHEECH09,CHEECH10,CHEECH11,CHEECH12 +---> CHEECH13,CHEECH14,CHEECH15,CHEECH16 +GLO> PLYRHD5.GLO +---> CLOWN00,CLOWN01 +GLO> XXXHD.GLO +---> CLOWN02,CLOWN03,CLOWN04,CLOWN05,CLOWN06,CLOWN07,CLOWN08,CLOWN09 +---> CLOWN10,CLOWN11,CLOWN12,CLOWN13,CLOWN14,CLOWN15,CLOWN16 +GLO> PLYRHD5.GLO +---> MADBAL00,MADBAL01 +GLO> XXXHD.GLO +---> MADBAL02,MADBAL03 +---> MADBAL04,MADBAL05,MADBAL06,MADBAL07,MADBAL08,MADBAL09,MADBAL10,MADBAL11 +---> MADBAL12,MADBAL13,MADBAL14,MADBAL15,MADBAL16 +GLO> PLYRHD5.GLO +---> VIKAPE00,VIKAPE01 +GLO> XXXHD.GLO +---> VIKAPE02,VIKAPE03,VIKAPE04,VIKAPE05 +---> VIKAPE06,VIKAPE07,VIKAPE08,VIKAPE09,VIKAPE10 +---> VIKAPE11,VIKAPE12,VIKAPE13,VIKAPE14,VIKAPE15,VIKAPE16 +GLO> PLYRHD5.GLO +---> BEAST00,BEAST01 +GLO> XXXHD.GLO +---> BEAST02,BEAST03,BEAST04 +---> BEAST05 +;,BEAST06,BEAST07,BEAST08,BEAST09,BEAST10,BEAST11,BEAST12,BEAST13 +;---> BEAST14,BEAST15,BEAST16 +---> BEAST16 +GLO> PLYRHD5.GLO +---> JABAL00,JABAL01 +GLO> XXXHD.GLO +---> JABAL02,JABAL03,JABAL04,JABAL05 +;---> JABAL06,JABAL07,JABAL08,JABAL09,JABAL10,JABAL11,JABAL12,JABAL13,JABAL14 +;---> JABAL15,JABAL16 +---> JABAL16 +GLO> PLYRHD5.GLO +---> MDOC00,MDOC01 +GLO> XXXHD.GLO +---> MDOC02,MDOC03,MDOC04,MDOC05,MDOC06,MDOC07 +---> MDOC08,MDOC09,MDOC10,MDOC11,MDOC12,MDOC13,MDOC14,MDOC15,MDOC16 +hdsmsc5.img +GLO> PLYRHD5.GLO +---> AMRICH00,AMRICH01 +GLO> XXXHD.GLO +---> AMRICH02,AMRICH03,AMRICH04 +---> AMRICH05,AMRICH06,AMRICH07,AMRICH08,AMRICH09,AMRICH10,AMRICH11,AMRICH12 +---> AMRICH13,AMRICH14,AMRICH15,AMRICH16 +GLO> PLYRHD5.GLO +---> BARD00,BARD01 +GLO> XXXHD.GLO +---> BARD02,BARD03,BARD04 +---> BARD05,BARD06,BARD07,BARD08,BARD09,BARD10,BARD11,BARD12,BARD13,BARD14 +---> BARD15,BARD16 +GLO> PLYRHD5.GLO +---> DIM00,DIM01 +GLO> XXXHD.GLO +---> DIM02,DIM03,DIM04,DIM05 +;,DIM06,DIM07,DIM08 +;---> DIM09,DIM10,DIM11,DIM12,DIM13,DIM14,DIM15,DIM16 +---> DIM16 +GLO> PLYRHD5.GLO +---> JACKJR00,JACKJR01 +GLO> XXXHD.GLO +---> JACKJR02,JACKJR03,JACKJR04,JACKJR05,JACKJR06,JACKJR07,JACKJR08,JACKJR09 +---> JACKJR10,JACKJR11,JACKJR12,JACKJR13,JACKJR14,JACKJR15,JACKJR16 +GLO> PLYRHD5.GLO +---> JIGGET00,JIGGET01 +GLO> XXXHD.GLO +---> JIGGET02,JIGGET03,JIGGET04,JIGGET05 +;,JIGGET06,JIGGET07,JIGGET08 +;---> JIGGET09,JIGGET10,JIGGET11,JIGGET12,JIGGET13,JIGGET14,JIGGET15,JIGGET16 +---> JIGGET16 +GLO> PLYRHD5.GLO +---> JON00,JON01 +GLO> XXXHD.GLO +---> JON02,JON03,JON04,JON05,JON06,JON07,JON08,JON09,JON10,JON11 +---> JON12,JON13,JON14,JON15,JON16 +GLO> PLYRHD5.GLO +---> MIKE00,MIKE01 +GLO> XXXHD.GLO +---> MIKE02,MIKE03,MIKE04,MIKE05,MIKE06 +---> MIKE07,MIKE08,MIKE09,MIKE10,MIKE11,MIKE12,MIKE13,MIKE14,MIKE15,MIKE16 +GLO> PLYRHD5.GLO +---> MIN00,MIN01 +GLO> XXXHD.GLO +---> MIN02,MIN03,MIN04,MIN05,MIN06,MIN07,MIN08,MIN09 +---> MIN10,MIN11,MIN12,MIN13,MIN14,MIN15,MIN16 +GLO> PLYRHD5.GLO +---> MUND00,MUND01 +GLO> XXXHD.GLO +---> MUND02,MUND03,MUND04,MUND05,MUND06, +---> MUND07,MUND08,MUND09,MUND10,MUND11,MUND12,MUND13,MUND14,MUND15,MUND16, +GLO> PLYRHD5.GLO +---> MXV00,MXV01 +GLO> XXXHD.GLO +---> MXV02,MXV03,MXV04,MXV05,MXV06,MXV07 +---> MXV08,MXV09,MXV10,MXV11,MXV12,MXV13,MXV14,MXV15,MXV16 +GLO> PLYRHD5.GLO +---> NORTH00,NORTH01 +GLO> XXXHD.GLO +---> NORTH02,NORTH03,NORTH04,NORTH05 +;---> NORTH06,NORTH07,NORTH08,NORTH09,NORTH10 +;---> NORTH11,NORTH12,NORTH13,NORTH14,NORTH15,NORTH16 +---> NORTH16 +GLO> PLYRHD5.GLO +---> WIL00,WIL01 +GLO> XXXHD.GLO +---> WIL02,WIL03,WIL04,WIL05,WIL06,WIL07, +---> WIL08,WIL09,WIL10,WIL11,WIL12,WIL13,WIL14,WIL15,WIL16 +PPP> 0 diff --git a/BACKUP/ART100/BBPAL.LOD b/BACKUP/ART100/BBPAL.LOD new file mode 100644 index 0000000..2878958 --- /dev/null +++ b/BACKUP/ART100/BBPAL.LOD @@ -0,0 +1,45 @@ +PON> +; +IHDR PAL:L +; +ASM> junkxxxx +; +;Flesh and uniform pals +anewp.img +---> NPAL1 +---> NPALW1 +---> XSPAL1,XSPAL2,XSPAL3,XSPAL4,XSPAL5,XSPAL6,XSPAL7,XSPAL8 +---> XSPAL9,XSPAL10,XSPAL11,XSPAL12,XSPAL13,XSPAL14,XSPAL15 +---> XSPAL16,XSPAL17,XSPAL18,XSPAL19,XSPAL20,XSPAL21,XSPAL22 +---> XSPAL23,XSPAL24,XSPAL25,XSPAL26,XSPAL27,XSPAL28,XSPAL29 +---> XSPAL30,XSPAL31,XSPAL32,XSPAL33,XSPAL34,XSPAL35,XSPAL36 +---> XSPAL37,XSPAL38,XSPAL39,XSPAL40,XSPAL41,XSPAL42,XSPAL43 +---> XSPAL44,XSPAL45,XSPAL46,XSPAL47,XSPAL48,XSPAL49,XSPAL50 +---> XSPAL51,XSPAL52,XSPAL53,XSPAL54,XSPAL55,XSPAL56,XSPAL57 +---> XSPAL58,XSPAL59,XSPAL60,XSPAL61,XSPAL62,XSPAL63,XSPAL64 +---> XSPAL65,XSPAL66,XSPAL67,XSPAL68,XSPAL69,XSPAL70,XSPAL71,XSPAL72 +---> XSPAL73,XSPAL74,XSPAL75,XSPAL76,XSPAL77,XSPAL78,XSPAL79 +---> XSPAL80,XSPAL81,XSPAL82,XSPAL83,XSPAL84,XSPAL85,XSPAL86 +---> XSPAL87,XSPAL88,XSPAL89,XSPAL90,XSPAL91,XSPAL92,XSPAL93 +---> XSPAL94,XSPAL95,XSPAL96,XSPAL97,XSPAL98,XSPAL99,XSPAL100 +---> XSPAL101,XSPAL102,XSPAL103,XSPAL104,XSPAL105,XSPAL106 +---> XSPAL107,XSPAL108,XSPAL109,XSPAL110,XSPAL111,XSPAL112 +---> XSPAL113,XSPAL114,XSPAL115,XSPAL116,XSPAL117,XSPAL118,XSPAL119,XSPAL120 +---> XSPAL121,XSPAL122,XSPAL123,XSPAL124,XSPAL125,XSPAL126 +---> XSPAL127,XSPAL128,XSPAL129,XSPAL130,XSPAL131,XSPAL132 +---> XSPAL133,XSPAL134,XSPAL135,XSPAL136,XSPAL137,XSPAL138 +---> XSPAL139,XSPAL140,XSPAL141,XSPAL142,XSPAL143,XSPAL144 +---> XSPAL145,XSPAL146,XSPAL147,XSPAL148,XSPAL149,XSPAL150,XSPAL151,XSPAL152 +---> XSPAL153,XSPAL154,XSPAL155,XSPAL156,XSPAL157,XSPAL158 +---> XSPAL159,XSPAL160,XSPAL161,XSPAL162,XSPAL163,XSPAL164 +---> XSPAL165,XSPAL166,XSPAL167,XSPAL168,XSPAL169,XSPAL170 +---> XSPAL171,XSPAL172,XSPAL173,XSPAL174,XSPAL175,XSPAL176 +---> XSPAL177,XSPAL178,XSPAL179,XSPAL180,XSPAL181,XSPAL182,XSPAL183,XSPAL184 +---> XSPAL185,XSPAL186,XSPAL187,XSPAL188,XSPAL189,XSPAL190 +---> XSPAL191,XSPAL192,XSPAL193,XSPAL194,XSPAL195,XSPAL196 +---> XSPAL197,XSPAL198,XSPAL199,XSPAL200,XSPAL201,XSPAL202 +---> XSPAL203,XSPAL204,XSPAL205,XSPAL206,XSPAL207,XSPAL208 +---> XSPAL209,XSPAL210,XSPAL211,XSPAL212,XSPAL213,XSPAL214,XSPAL215,XSPAL216 +---> XSPAL217,XSPAL218,XSPAL219,XSPAL220,XSPAL221,XSPAL222 +---> XSPAL223,XSPAL224,XSPAL225,XSPAL226,XSPAL227,XSPAL228 +---> XSPAL229,XSPAL230,XSPAL231,XSPAL232 diff --git a/BACKUP/ART100/BBVDA.LOD b/BACKUP/ART100/BBVDA.LOD new file mode 100644 index 0000000..df0c575 --- /dev/null +++ b/BACKUP/ART100/BBVDA.LOD @@ -0,0 +1,4 @@ +***> fff76000 +ASM> BBVDA.TBL +;FRM> CHEERS +FRM> TROPHY diff --git a/BACKUP/ART100/BLANKJAM.BDB b/BACKUP/ART100/BLANKJAM.BDB new file mode 100644 index 0000000..7ea688d --- /dev/null +++ b/BACKUP/ART100/BLANKJAM.BDB @@ -0,0 +1,11 @@ +blankjam 2000 1000 255 1 1 9 +blankjam 448 1041 251 639 +0 471 268 0 0 +0 471 388 0 0 +0 471 508 0 0 +0 651 268 0 0 +0 651 388 0 0 +0 651 508 0 0 +0 831 268 0 0 +0 831 388 0 0 +0 831 508 0 0 diff --git a/BACKUP/ART100/BLANKJAM.BDD b/BACKUP/ART100/BLANKJAM.BDD new file mode 100644 index 0000000..8c36a30 --- /dev/null +++ b/BACKUP/ART100/BLANKJAM.BDD @@ -0,0 +1,130 @@ +1 +0 180 120 1 +    +  +          +  +           +   +    +         +      +        +   +              +    +   +   +  +   +   +   +     +    +   +                  +                   +            + +            + +         +   +          + +          +  + +        +   +   +     +   +            +      +       +                        +       +      +                   +    +      +   +      +   +                 +       +      +            +     +      +          +      +         +    +       + +         + +          +                                    +     +    +  +    +      +              +     +   +     + +   +    + +       +          +        +       +                 +        +        +     +       +      +         +          +    + +    + +     +                                             +    +    +                        +        +          +             +   +      +         +                           +     + +     +  + +      +          +                                               +          +         +                                +      +    +      BNBA_V_P 21 + $ +   $ , ,4 +, +$ +$ \ No newline at end of file diff --git a/BACKUP/ART100/BRUSH10.IMG b/BACKUP/ART100/BRUSH10.IMG new file mode 100644 index 0000000..710fc6c Binary files /dev/null and b/BACKUP/ART100/BRUSH10.IMG differ diff --git a/BACKUP/ART100/BRUSH12.IMG b/BACKUP/ART100/BRUSH12.IMG new file mode 100644 index 0000000..400f594 Binary files /dev/null and b/BACKUP/ART100/BRUSH12.IMG differ diff --git a/BACKUP/ART100/BRUSH20F.IMG b/BACKUP/ART100/BRUSH20F.IMG new file mode 100644 index 0000000..ba138d1 Binary files /dev/null and b/BACKUP/ART100/BRUSH20F.IMG differ diff --git a/BACKUP/ART100/BRUSH50.IMG b/BACKUP/ART100/BRUSH50.IMG new file mode 100644 index 0000000..f672881 Binary files /dev/null and b/BACKUP/ART100/BRUSH50.IMG differ diff --git a/BACKUP/ART100/BUTTONS.IMG b/BACKUP/ART100/BUTTONS.IMG new file mode 100644 index 0000000..37f87db Binary files /dev/null and b/BACKUP/ART100/BUTTONS.IMG differ diff --git a/BACKUP/ART100/CHEER.IMG b/BACKUP/ART100/CHEER.IMG new file mode 100644 index 0000000..dd55c22 Binary files /dev/null and b/BACKUP/ART100/CHEER.IMG differ diff --git a/BACKUP/ART100/CHEERS.BIN b/BACKUP/ART100/CHEERS.BIN new file mode 100644 index 0000000..75acb59 Binary files /dev/null and b/BACKUP/ART100/CHEERS.BIN differ diff --git a/BACKUP/ART100/CHEERS1.VDA b/BACKUP/ART100/CHEERS1.VDA new file mode 100644 index 0000000..e36ae07 Binary files /dev/null and b/BACKUP/ART100/CHEERS1.VDA differ diff --git a/BACKUP/ART100/CITIES2.IMG b/BACKUP/ART100/CITIES2.IMG new file mode 100644 index 0000000..9281d0e Binary files /dev/null and b/BACKUP/ART100/CITIES2.IMG differ diff --git a/BACKUP/ART100/CITNAMES.IMG b/BACKUP/ART100/CITNAMES.IMG new file mode 100644 index 0000000..355d7a6 Binary files /dev/null and b/BACKUP/ART100/CITNAMES.IMG differ diff --git a/BACKUP/ART100/COLHDS1.IMG b/BACKUP/ART100/COLHDS1.IMG new file mode 100644 index 0000000..8a1abf2 Binary files /dev/null and b/BACKUP/ART100/COLHDS1.IMG differ diff --git a/BACKUP/ART100/COLMUGS1.IMG b/BACKUP/ART100/COLMUGS1.IMG new file mode 100644 index 0000000..15d39be Binary files /dev/null and b/BACKUP/ART100/COLMUGS1.IMG differ diff --git a/BACKUP/ART100/COURT.BIN b/BACKUP/ART100/COURT.BIN new file mode 100644 index 0000000..c6f0afc Binary files /dev/null and b/BACKUP/ART100/COURT.BIN differ diff --git a/BACKUP/ART100/CREDBALL.IMG b/BACKUP/ART100/CREDBALL.IMG new file mode 100644 index 0000000..e3fea94 Binary files /dev/null and b/BACKUP/ART100/CREDBALL.IMG differ diff --git a/BACKUP/ART100/CRTFLR.IMG b/BACKUP/ART100/CRTFLR.IMG new file mode 100644 index 0000000..911a84a Binary files /dev/null and b/BACKUP/ART100/CRTFLR.IMG differ diff --git a/BACKUP/ART100/CRTREF.IMG b/BACKUP/ART100/CRTREF.IMG new file mode 100644 index 0000000..685b51f Binary files /dev/null and b/BACKUP/ART100/CRTREF.IMG differ diff --git a/BACKUP/ART100/CRWDFLR.IMG b/BACKUP/ART100/CRWDFLR.IMG new file mode 100644 index 0000000..8a1d73c Binary files /dev/null and b/BACKUP/ART100/CRWDFLR.IMG differ diff --git a/BACKUP/ART100/DCSLOGO.IMG b/BACKUP/ART100/DCSLOGO.IMG new file mode 100644 index 0000000..4b069a0 Binary files /dev/null and b/BACKUP/ART100/DCSLOGO.IMG differ diff --git a/BACKUP/ART100/DESIGND.IMG b/BACKUP/ART100/DESIGND.IMG new file mode 100644 index 0000000..a54427a Binary files /dev/null and b/BACKUP/ART100/DESIGND.IMG differ diff --git a/BACKUP/ART100/DIAGP.IMG b/BACKUP/ART100/DIAGP.IMG new file mode 100644 index 0000000..75452f4 Binary files /dev/null and b/BACKUP/ART100/DIAGP.IMG differ diff --git a/BACKUP/ART100/ENTER4.BDB b/BACKUP/ART100/ENTER4.BDB new file mode 100644 index 0000000..ff44a10 --- /dev/null +++ b/BACKUP/ART100/ENTER4.BDB @@ -0,0 +1,66 @@ +ENTER4 2000 1000 255 2 13 63 +ENTER4 1342 1800 121 350 +ENTERKIT 685 1168 130 373 +A00 737 270 63 3 +A00 737 166 4E 7 +A00 737 170 6C 12 +F00 745 170 3 0 +F00 750 340 6 0 +F00 750 170 9 0 +E00 800 170 9 0 +F00 812 340 6 0 +A00 836 166 51 8 +F00 846 340 6 0 +F00 846 170 9 0 +F10 927 170 3 0 +A00 937 166 54 9 +A00 937 270 60 11 +F00 939 170 3 2 +F00 944 340 6 2 +F00 944 170 9 2 +E00 987 170 9 2 +F00 999 340 6 2 +A00 1037 166 57 10 +F00 1040 340 6 2 +F00 1040 170 9 2 +F10 1121 170 3 2 +A00 1129 170 78 12 +A00 1381 139 69 12 +A00 1381 143 6C 12 +F00 1389 143 3 0 +F00 1394 143 9 0 +F00 1394 313 6 0 +F00 1394 263 12 4 +F00 1394 225 15 4 +F00 1394 186 18 4 +F00 1394 148 1B 4 +F10 1475 143 3 0 +A00 1483 142 6F 12 +F00 1485 143 3 0 +F00 1490 143 9 0 +F00 1490 313 6 0 +F00 1490 148 21 5 +F00 1490 179 24 5 +F00 1490 219 27 5 +F00 1490 259 2A 5 +F10 1571 143 3 0 +A00 1579 143 72 12 +A00 1581 139 66 12 +F00 1583 143 3 2 +F00 1588 313 6 2 +F00 1588 143 9 2 +F00 1588 261 33 6 +F00 1588 220 36 6 +F00 1588 180 39 6 +F00 1588 148 3C 6 +F10 1669 143 3 2 +A00 1677 142 75 12 +F00 1679 143 3 2 +F00 1684 143 9 2 +F00 1684 313 6 2 +F00 1684 148 42 1 +F00 1684 181 45 1 +F00 1684 219 48 1 +F00 1684 255 4B 1 +A10 1765 143 3 2 +A00 1773 143 78 12 diff --git a/BACKUP/ART100/ENTER4.BDD b/BACKUP/ART100/ENTER4.BDD new file mode 100644 index 0000000..3d2d3bc --- /dev/null +++ b/BACKUP/ART100/ENTER4.BDD @@ -0,0 +1,9327 @@ +32 +63 200 74 1 +  +   + +   + + + + + + + +  + + + + +   +  +   +  + + +       +  +  +        +  +   +  + + +  + + + + + + + + +  + +   +   + +     + +   +   + + +            + +   + + +   + + + + + + +  + + + +     +   +       +   +  + + +    +  + +    + + + +  + + +    +  +       +       + +    + + + +    + + +  +       + +   + + +   +  +            +   +   + + + + +  +   + + + + +         +   +  +  +       +  + +  + +   + +    + + +       + +  +  +  + +   +   +        +  +   +  + + +  + + +  + +   + + +    +   +  +  + + + + +  + +     +              +   + +  + + + +    + + + +  +       +    + +    +  +        +  +    + + + + +  + + +  +  +  +     + + + + + +   +   + + + +         +     + +    + +   +    +  + +   +  + + + +  +  + + + + + +      +         +    +    + + + + +     + +  + +   + + + + +   +  + +  +             + + +   + + +   +   +  + + +     + +  + +   +            +   +  +  + +  + +    +  + +  +  + + + +     + +  +  +   +  +              + +   + +    + + + +     + + + + +   +   + + + + +     +  +  +              + +  +  +   +  +   +  + + +  + + + + + + + + + + + +  + +    +   + +                +     + +   + + + +  + +  + + + +   +   +    +                   +     +  +   + + + +  +       +                       + + + + +   + +   +  + +     + +                       + + + + + +  +  + + +  + + + +                   +   +    +   + + +   + + +                      +   +  +  +   +  + + +  +                      +       + +  +  + + + + + +   +  +                          + + + + + + + + + + +   + +                 +      + +    + + + +   +   +                  + +    +     +                      +    +   + + + +  +                     + +  + + +      +                      +  +     +    +              +   + +    + +   + + +  +  +                     +  + + +   + +  +  + +     +                         + +  + + + + + +   + +     +    +                      +     + +   +    + +   +   + + +  +                       +   + + +  +  + + +   + + + +  +      +                      +  +  + + + +   + + +             +                +    + +  + +   + + +  + + + + +  +                       +  + + + + + +   +   + + + + +    +  +   +                         +  +  + + +  + +  +  + +                 +   +   +  + + +    + +   +  +                 + + +  + + + + + +  + +  + +  +         +              +  +  +  + + + + +   + + + + + +  +   +                    +  +    + + + + +  + +  + + +    +  +        +  +                 +   + +  + + +   + + +     + + +                     + + + + + +  +    + + + + +     +      +         +    +  + + + + + +  + + + + +                         +  +  + +    + + +   + + +  +      +   +                  + + + +  +   + + + + +        + + +              +     + + +  +  +   + + + + +   +     +                    + +     + +  + +    + +      + +                +  +  + + +   + + + + + +   + + + +      +  +                +   + + +   +  +     + + +        + +            + +  + +  + +  + +     +   +      +  +                        +  +  + + + +     +     + + +  + +                 +  + +  + + + + + + + +    + + +     + +  + +              +   + +          + + +     +               + +      + + +       +    + +                    +    +   + +  + +   +  +  +    +  +               +   + +     + + +  + +    + +  +  +                  + +    + + + + + +   + + + + + +  +            +   + +     + + + +     + +  +                 + +        +     + +   +                +   + +  +      + +   +  +               +  +    + + + + + + +    + +  +                 +   + + + + + +  + +   + + + + +                   + + +     + + + + +   +   + + + + + + +  + +  +                 +  +     + + + +  +   + +                      +   +   + +  + +       +   +                 +     +  +  + + + + + + +      + +                 +  + +  + +      + +  +       + + + + +                 + +        + +         + +                  +   +     + + + +     + +  + +                     + + + + +   +   + +                 +   +   + + + + + +   + + +   +  +           +      + + + + + +   + + +  +      4E 100 104 1 +  + + + + +  + + + + + +   + + + +  +          + + + + + +  + + +   + + + +        + + + + + + + + + + + +    + + +   + +           + + + + + + + + +  + + +  + + + + +           + + + + + +  + + +  + + + + + +           + + + + + + + + +  + + + + + +            + + + + + +  + +  + + + + + +        + + + + + +    + + + + +  + +        + +   + + + + + + + +            + +    + + + + + + + +             + + + +  + + + + + + + +            +  +  + + + + +  + + +         +  + + +  + + + + +  + + +              +  + + + +  + +              + +  +  + + + +  + + +   + + +         +   +  + + + +    + + + + + + + +   +     +   +  + + +   + + + + +  + + +      + + +     + +  +  + + +  + + + + + +      + +    + + + + + +   + + +  +  + + + + + + +    + +     + + + + + + + + + + + + + + + + + +   + + +    +    + + + +   + + + +  + + + + + + + + + + +  +    + +      + +  +  + + + + +   + + + +  + +     +     + + + +  + + +  + +   + + + +     +        + +  + + + + +   + +  + + +  +    + +      + + + + + + +   + + + + + + +             + + + +  + +   + + + + +       + +  + + + + +  + +       + +    + + + + +  + + + +   + + + + + +    +    + + + +   +  + +  + +  + + +   +    +     + + + + +  + + + + + + + +   +    +       + + + + + + + +  + +  + + + + + +      +  +   + +  + +  + + + + +  + + + +  + + + + +      +  +    + +  + + + + + + +   + +  + +  + + +    +  +     + +  + + + + + +   + +  + + + +  + +    +  +      + + + + + + + + + + + + + +  + + +   + + +   +     +  + + + + +  + + + + + +   + +  + + +  + + +   +       + + +  + + + + + +  + + +   + + +    +  +        + + +  + +  +  + + +  + + +  +  +        + + + + + + + + + + + +  + +  + +  + + + +    +  + +      + +   + + + + + + + + + + + + + +  + + + + +          + +  +  +  + + + + + + + + + +  + + + +      + +  +    +   + + + + + + + + + + +  + + + + + +      +       + + + + + +  + + + + + + + +  + + + + +      +   + +  + + + + +   + + + + + +   + + + +    +     +     + + + + +  + + + + + + + + + + + + + +   + + + +         + + +    + + +    + + + + + + + + + + + + +  +   + +    + + +  +        + + + +  + + + +  +   +     + +     + + + + + + + +  + + +    +   +      + +     +  + + + + + + + + + + +  +              + + + + + + + + + + + +  + + + +        +    + +     + + + + + + + + + + + + + +  + + + + + + +       + +   +   +  + + + + + + + + + + + +  + + + + +      +     +      + + + + + + + + + + + + +  + + + + +         + +     + +   + + + + + + + + + + + + + + + +    +    + +      + + + + + + + + + + + + + + + + + +  + + + + +   + +   +        + +  + + +  +  + + + + + + + + + +     +  +    +  +     +  + + + + + +  + + + +         + +  +   + + + + + + +  + + + + + + +  +       +        + + + + + + + + + + + + +               + + + + + + + + + +  + + +    + +    +      + + + + + +  + + + + +  + + +    +   +  +       + + + + + + +  + + + + +  +    +   + + + + +  +   +  + + +  +   +  + + +       +  + +  +     + + +  + + + + + + + + + +   + +   + + +   + +    +  +       + + + + + + + + + + + +     + +  + + +   +     + + +    + + + + + + +  + + +    + + +  +     +  +        + + + + + +  + + + + +  + + +     + + + + + + + + +    +   +    +   + + + + + + + + + +  +  +  + + + +   +    +    +   + +  + + + + + +    +  + +  + + + +   +         +   + + +  + + + + + +    + +  + + + + +    +          + + + + +    +  + + + + + +    + +     +  + +    + +  + + + +    +  + + + + + + + +     + +    +     + +  +  + + + + + + +  + +    +     + + +   + +  + +   + + +  + +  + +       +   + + + +    +      + +   + + +    + +  +  + +  + + + + +  + + +     + +  +  + + + +  +  + +    +    + + +   + + + + + +  +   + + + +     + + + + + + + + + +      + + + + + + +    +  +      + + + + + + + +  +       + + + + +    + +  +    + + +  + +   +    + + + + + +  +  + +    + + +  + +     + + + + + +         +    + + + +  +    + + +      + +   +  + +  + + + + + + + +  + + +  +  +   + + +   + + + + + + +    +    +   + + + + + + +  + + + + +  + +  + + + + + +     + +    + + + + + + +  + + + +  + + +  + + + + + +  + + + +   +   + + + + +  +  + + + + + +  + + + +  + + + +      + + + +  +  + + + + + + + +    + +  +  + +   + +  + +    + + +  + + +  + + + + + + + +  +  + + +  + + +   + +     + + + + + + + +  + + + + + +  + + + + +   + +   +     + + + + + + +  + + + + +    + + + +   +  + + + +     +  + + + +  + +  + +       + + +      + + +        + + + + + + + + +   +      + + + + +  + +       + + + + + +  + +       + + +  + +      + + + + + +  + + +     + + +  + +        + + +  + + + + + + +   + + + +  +     + + + + + +  +  +    + + + + + + +     +  + + + + +   + +  +      +  + + + + +   + + +  + +  + +   + + + +   + +  + +   +    + +    + + + + +  + +     + + +  + +    +  +  + + + + + + + +    +   +   +  + + + +   +   + + + +   +  + + +     + + +  +  +  + + +  + + + +  + +    + + +  + +  + +  + + + + +    +       + +  + + + +   +    +  + + + + + +   +  +  + + +  + +    + + +   + + + + + + +  +   + + +  + + + +   + + + + + + + + +    + + + + 6C 8 174 1 + + + +  +   +     + + +  +   +   + +   + + +  + +  +  + +     +   + +  + +     +  +   + +  +  +  + +  + + +   +   + +  +     + +  + +     +   +    +    + +  + +     +    +     +   +   + +  +   +  +   +  +  +   + + + + + + +  + +  +  +   +   + + +  +   +    + +  + +     + +  + +  + +  + + + +    +   +   + + +   + +   + + +  +  +   +  + +  + +  +  +  + +  + + + + +  + + +  + + + +  + + + + + + + + +  + + +  + +    +    +   +  +  + +  +   +  +  +  +     + + +   + +    +  + + +   + +    +     +  +   +  +   +   +   +  +       + +   +    +  +  +  +   + +   +  +   +    + +    + + + + +    +      +    + +3 8 175 1 +]V]]V]OOSOcHHHHiBBBCn;;;;n;155n<155n;113nB+11nB*-1iH*,-iO(*-iP&**iV&(*i]"'(cc &(gi$(ci"&ck"&ci"]i!"]e"]c&]c&]c'Vb)V]+T]-V]1O[5OV;OV@OVHOVOIVVN]] O]a H]cO]cH]cHYcHV`DVaBV]BV]AUWHOD?HVH>LROBHVH +BHVH DNVH GHVO HKVO HLVP JIVV HNVV HHVV OOVV OIVV UOYV OV]VVV]VVV][V]]]VXa]]`cb_]cc`cfc"cchg"ccfc&ccig&ciic(giic(iijc*iiic*iimc*iin]*inmX*iil\*ikj[*iim\*iikV+imnV,iinV-iilV-iinS-imnV1iknP1imnU1ilnO2iinO1inoM5iknK3inrH5insH5insH9insE:nnpG9knsB;nnsF;knsB;nnsB;nns@;nns?;BBHHMOPVVOROOPPOOROVVPOMHHBB;?>BBBCB?=@BDHOOOOSPUTOOH;BBssssssprsqsssssrpsssopssnsnsssnspsssssssssssssssssspsnsssnsnssposssprsssssqsrpssssss51 104 104 0 + + +  + + + + + +  + + + + + + + + + +    + + + + +  + + + + +    + + + + + + +  + + + + + + + + +  + + + + + +  +  + + + + + + + + + +  + + + + + + + +  + + + + + + +  + + + + + + + +  + + +    + + + + + + +   + + + + + + + + +  + + + + + + + + +   + + + + +   + + + + + +       + + + + + + +   + + + +    +  + + + + + +     + + +  + + + + + + +   + +  + + + +     + + + + + + +    + + + + +    + + +  +  + +  +  + +   +   + + + + + +    +    + + +    +   + +  + + + + +  + +   + + + +      +  + + + + + + +     + + + +      +  + + +    + +   + + + + + +          +       + + + + +    +   + + + +     + + + + +     +     + + + +        + + + + +  + + + + + +  +    + + + +  +       + + + +   +     + + + + +   + +   + + +    +  +    + + + +    + +  + +   + +    +  +    + + + + +    + +  +   + + + + +    + +  +  + + +        +      + +    +    + + + + + +      +   + +     +         +  + +       +  + +     +      + + +         + +    +         +  + +            + + +          +  +    +  + + + +         + + +    +       + + + +  +         + + + + +       +   +          +        +  +        +   + +         + +  +       +       +      + + +           +                    +  +  +            +  +              +           +   + +   +                   + +    + +             +     +    + + +  +        + + +           + + + +      +   + +  +      +    + + +     +   +     + +      +        +        + + +      + +                           + +  +    + + + +        +          +  +    + +    +   +    +         +  + +   +54 100 104 0 +         + + + + +     +  + +   + +     + +    + +  +         +    +     +   + +   +  + +  +      +  +    +          +  +  +    +  + + +  +  +         + + +    +      +   + +   +   + + + +    +  + +  + + + + + + + + + +        + + + + + + + + + + + +       +   + + + + + + + + + + +    + + +   + + + + + + + + + + + +    + + + +  + +  + +  + +    + + + +  + + + + + + + + + + + + +  +   + + + + + +    + + + + + + + +   + + + + + + + + + + + + + +    +      + + + + + + + + + + +  + + + + +   + + + + + + + + + + + + + +  + + +     + + + + + + +   + + +   + + + + + + + + + + + + + + + +  +     + + + + + + + + +  + + +   +  + + +  + + + + + + + +    + +   +  + +   + + + + + + + + + + + +  +   +  + +   +     + + + + + + + + + +   +      + + + + + + +  +  +   + +  + + + + + + + + +       +  + + + + + + + + +  +       +   + + + + + + + +  +  + +     +  + + + + + + + + + + +       +    + + + + + + + +  + +     +      +   + + + + + + + +   +         + + +   + + + + + +  + +   +    +  + + + + + +        + + + + + + + + +   + +   +  + + + +  + + + + + + +      + +     + + + + + + + + + + +  +    + + +  + + + + + +  +   +   + +   + + +  + + + + + +     +   + + + + + + + + + + + + +     + +  + + + + +  + +      +     + +  + + + + + + + +  + +       +   +  + + + +  + + +   + +   + + +  + +   + + +  +     +    + + + + +   + +  +   +   + + +  + + + +   + + + + + + + +    + + + + + + + +    + +        + +  +  + + +   +        + + + +  +  + +    +  + + + + + + + + + +   +  + +  +   + +  + + + + + + + + + +   + + +     + + +  + + + +  + + + +    + +   +    + +  + + + + +  +   + +    + +   + + + + + + +  +   + +     + + + + +   + + + +   +  + + + + + +  + + + + +  + +     + +  + + + + + +  +  + + + + +    + +   + + + + + + + +  + + + + + +  + + +   + + + + + +  + + + + + +  + + + +   + + + +  +  + + +   + + + + +  +    +  + + + +  + +  + + +  + +     +  + + + + + + + + + + +  + + + + + +    + + + +  + + + + +   + + + + + +  + + + +     + + + +   + +  + + + + + + + + +   + + + + + +  + +  + + + + + + + + +  +  + + + + + + + + + + + +  + + + + + + + + + + +  + + + + + +  +  + + + + + + + + + + + + + +  + +  + +  + + + + + +  + + + + + + + +  + + +  + +   + + + + +    + + + + + + + + + + +  +   + + + +  + + + + + + + + + + + + + + + +  + +  + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + + + +  + + + + + + +  + + + + + + + + +  + + +   + + + +    + + + + + + + +  + + + + + + + + + +  + + +    + + + + + + + + + + + + + + + + +  + + +  + + + + +   +   + + + + + + + + + + + +  + + + + +   + + + +  +  + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + +   + + + +  + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + +  + + + + +   +  + + + + + + + + + + + +  + + + + + + + +  +  + +  + + + + + + + + + + + + + + +   + + +  + + + + + + + +  + + + + + + +  +  + +   + + +    + + + + + + + + + + +  + +  + + + + + + + + +   + + + + + + + + + + + + + + + +   + + + + + +  +  + + + + +  + + + + + + + + +       + + + + +  +  + + + +  + + + + + + + + +   + + + + + + +  + + + + + + +  + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + +    + + + + + + + + + +  + +  + + + + + + + +  + + + + + + +   + + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  +   + + + + + + + + + + + + + + + + + + + +  + + + +   + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + +     + + +  +  + + + + + + + + + + + + + + + + + + + + + +  + + +   + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + +    + + + + + + + + + + + + + + + +  + + + + + + + + +      + +  + + + + + + + + + + + +  + +  + + + +  + + + + + +  +     + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + +  + + + + + + + + + + + + + + + +  + + + + + + + + + + +60 200 74 1 +       + +   +  + +    +   +  + + + + + +     +     +      + +   + + +  + + +   +          +   +  + + +    + + + + + + + + +          +       + + + + +      + +  +    + + +  +   + + + + + +     +     + +  +    + +      + + + + + +            +   +   + +   +      + + + + + +        +    +   +  + +    +    + + + + + + + +           +   +  +  +  + + + + +  + + + +                + +   + +    + + + +        +     + + +  +     +      + +  + + + + + + + +                    +     + +    + + + + +           +  +    +  + +       + + + + + + + + +                 +  +     + +   + + + +  + +  +           +     + + + + +    + +   + + +  + + + + +           + +       + + +    + +  + + + + + + + +  +         +       + +     + + + + + + + + + + +  + +         +  +    + +   +     + + + + + + +  + + + +        +  + +  + +   +    + + + + + +       +      +  +   +  + + +       + + + + + +  + +                + + + + +    +      + + + +  + +  + + + + + +         +    +  +    + + +   +     + +  + + + + + +  + + +      +  + +       + + + + + + + +   + + +      + +  +  +   + +    +   + + +  + + +  + + +  +  + + + +            + +   + + +   + + +   +      + + + + +  + + + + + + +      +       + +    + +  +   +    +  + + + + + + +  + + + + + + +        +  +  +     + +  + + +   +  + + + + + + + + + + + +  + + + + + + + +      +     +  + +  + + + +        + + + + + + + + +  + + + + +          +  + +     + +   + + + +  + +  + +  + + + + +             +    +  + +  + + +      + + +  + + + +  + + + + + + +            +    + +      + + +  + + + + + + + + + + + +            +     +  +     + + + + + + + + +  + + + + +          +  +        + + + +      + +  + + +   + + + +                  + + + + + +    + +    + + + +  + + + + + + +               + +    + + + +  + + + + + + + +    +    +    +  + +   + + +  + +  + + +  + + + + +  + +        +       + + +  +  +    + + + + + + + +  +  + + + + + +       +       + + + +      + + + +  + + + +  + + + + + + + + +             + + +    + +  +  + + + + + +    +       +     + + + +   + + + + + + +  + + + +     +        + + + + + +  +  + + +   + + +  + +  + +  + + +  +     +  + +     + + + +     + + +  + + + +  + + + + +   +           +   + + +   + + + + + + + + + + + +        +  + +  + +   + + + + + + +  + + + + + + + +   +      + + + +      + + +  + + + + + + + + +         +    +   +  + +   + + +  + +  + + + + + + +  +        + +    + + + + + + +  + +  + + +    +   +   +  + + + + + + + + + + + + +  + + + + + + + +    + +      + +  +   + + + + + +  + + + +  + + + + + +    +  +  + + + + +       + + + + +   + +  + +  + + + + +       + +     + +   + + + + +     +   +    +    + +  +  +  + +       +     + +    +  +  + + +  + + + +          +   + + + + +  + +    +    + + +            +  + +   + +  +    + +   + + + + +             + +  + + + +   +  + + + + +  +    +    +   + + + +   + +  + + +         +  +    + +  + + +   +   +           + + + +   + + + + +   + + +   +       +   +  +   + + + + + + + + + + + + + +            + + + + + + + + + +           + +  +  + + + + + + + + + + +         +     + + + + + + +   +       +       + +   + +  + + + +  + +  +   +   + +   + + + +  +  + +   + + + + + + + + + + +           +     + + + + + + + + + + + + + + + + + +         +      +   + + + + + + + + + + + + + +       +    + + + +   + + + + + + + + + + + + + + + + + +       + +    +      + + + + + + + + + + + + + + + + + + +         +      + + + + + + + + + + + + + + + + + + + + + + + + +          +      + + + + + + + + + + + + + + + + + + + + + + + + + + +                + + + + + + + + + + + + + + + + + + + + + + + + +   +         +    +  + + + + + + + + + + + + + + + + + + + + +   +    + +    +        + + + + + + + + + + + + + +57 100 104 0 +                                   +                                                           +                +                                                                    +                                                                     +                                           +           +           +             +    +             +         +                     +      +        +           +           + +     + +             +          + + +     +                  +   +           + + + +  +                + +  + + + +             +   + + + + +                    + +  + +                   + + + + + + +      + +       +   + + + + +   +    + + + + +   + + +   + + + + + +     + +        + + +    + +  + + +    + + +    + + + +    + + + +       + + + +       + + + +    + + + +       + + +          + +  + + + + +    +  + +       + + + + +   + + + +  + +   + + + +   + + +  + + + + +    + + + + + +   + + + +   +  +       +  + + + +  + + + + +       + +           + + + + + + + + + + + +    + +  +   +  + + +  + +    +  + + + + + +  + +   + + + + +  + +       + +  + + + + + + + + +   + + +   + + + + + + +         + + + + + +  +  + + + +  + +  + + + + +  + + +       + +   + + + + +  + + + + + + + + + + +  + + + + + + + +        + + + + + +  + + + + +     + + + +  +    +    + + +  + + + + +  + + + + +  + + + +  + + + + +       + + +  + + + +   + + + + + + + + + + + +  + + + + +          + + + + + + + +  + + + + +  + + + + + + +  +        + + + + + + +  + + + + + + + + + + + + + + +  + +  + +   +    + +  + + + + +  + +   + + + + + + +   + + + + +   +  + + + + +  + + + + +   + + + + + + + + +  + + + + + + + + +        + +    +  + + + + + + + + + +   + + + +  +       + + + + + + +  + + + + + + + + +   + + +   +      + + +  + + + + + +  + + + + +     + +  +  + +     +    + + + + + + + + + +  + + + +    + + +   + +         + + + + + +  + + + + +     + + + + + + + + + +       +  + + + + + + + + +  + +      + + + + + + + + + + + + + + +  78 8 174 1 +     +                      +   +     +              +     +                         +                                                                                                                                                                                                           69 204 4 1 +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +  +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 84 50 1 + + +      + +  + +      +    +     + +    +   + +  +   + +  +  +   +  + + +   +   + + +     +  + + + +   +      +   + + + +   + + +          + +  +   +   +       +  +  +  +       +        + +  + +      +   + +  +  +   + + +  +  +    +   +  + +  + +   + +     +   + + +  + + + +        +  + + + +  + + + + +  +   + + +  + + +   + +  +  + + +  + + + + + +   + + + + + +     +    +  +   + +  + +     +   +  +  + + +  + + +   + +   + +  + + +   +  +   +  + + +  + +      + + + + +  + + + + +  +     + + + + + +   +  + + +    + + +    + + +  +  +   +  +   +  + + +   +  +     +   +  + + +    +         + + + + + + +    +  +   +  + + + + +   +  + + + + +     + + +  +  +  +     +  + +  + + +    + +  + +  +  + +   +  + +           +    +    + +   +       + +      +  +        +  +   +       +  +  + +  +  +            +  + + + +   + + +  +   +   + + + +  + + + +   + + + + +  +   + + +  + +  + + + +  + +       + +   + +    +    + + +  +  + + + +  + + +   +  + + + + + +   + + + + + + +  +  + +    + + +    + +  +    +    + + + + + + +  + +             + +   +  15 84 38 1 + + + +  + +  )/)(      +  + + + + + +  +   +  ()/  +  +  +    + + + + + +    ()(  + +  + +   + + + +  +  ( ! +  + +   +  +   +      +     + +  +            +   + + + + +     +  +  + +       !(   + +   +   + +   +(+  + +  +   +    ((  ! + + + +  +   +    ((   +  + +  +  +  +   +   +   +(+    +  +    + +   +    ((   +  + + +      +   +   +   +  + +      + + + +   + +       +    +  +  +  + +          + + +   + +   +  +   + +        + + +  +       +       +   + + +     + + +   +    +  + + + +    + +   +   + + +   + +  +  + + +   +    + + + +  + + + +   +   +       + + +    + +  +  +     +   +      +   + + + + +    +   +    + + + +  + +   + +  +   +  (  + + + + + +  +     + +  + +  + + + +   +   +   + + +    + + +  + + + +  +   + +      + + +  + + +  +       + +       +    + +  +  + +  +   +      +  +   +   +  + + +       + +   + +    + + + +  +    + + + +   + +  + + +         +  +  +   +  + +  +     +      +  + +    +  +   +   +   +        +   + +    + + +   + +   + + +    + +   +   + + +  + +  + +  18 84 39 1 + !"##  #$$%%&"'""'$())(((()))))))(*&! &+#%, %   + +!! !""&-%'"%# !' +)))((())))))))(+&!".$.##%   +!%# !"""#%#$-# %#- #()))(()))))))))(+. .,!,    + + '" '+$--% " " $-#.%,))((())))))))))($#'%$'%$, +    !" !$&# " "'&...-#&()(((()))))))))(*$"%,$. , +   + '!.% "!' #!'**&.&$$)))(((()))))))))(*,"'.$.. %    + '!# ''" "''##"+($--$+()/))((()))))))))(+!'#%$ ,    ! + %#!'"!!' %# '%+$..$$$*)//)((()))))))(((+# %#,, $, +     + %% '''% "'"" #.,,,$)//))(())))))(((+$% %#,%, +   + + %'!'!''!" "'!!!".,&&$)//))))))))))((+$ ' $$$,% + + +!  ! ''!!"!!'"''".#.+)//))))))))))(+$ %"%$$$$ ! +   ! "!!!'" "!'#$()/)))))))))))(+,#  % $$$  +   +  + + +'%#%%..''!,)//)))))))))))(+,'% ,  !  + +   +!  '!%%%%%#####% %)//)))))))))))(+,,$$ + +   +  ! %% .%%%###.# %+)/))))))))))((+,,+% +   ! %'!!%%%%###. )/)))))))))(((+,!! ! + + + + + +!  +!%%#####...,$+)//)))))))(((((+,%'! '' + +     + + +!%%%###...,$()//)))(((((((((+,%!! + + !!   +    + +  ! +! %%%%# #$,,()//))(((((((((++,%! ! +!     + + + +!! '!!' %%%#$$,$()//))(+++(((((++,%'% +  +!   + +  + + + +!!! %%''!!#$+()//)(+$$$+++((++,%' ! +    + + +   + + +! %%" ,$,$)//))( ,$++(++,!! + + +    +  + +!!!,+$)//))($ %% $+++!  + ! +  + +     + + +!'%  !!##+)//))($ $++,"! +!    +  +  +!%  '!%()//))(  ,$$ ! + + + +    +     %%%  !!  +)//))(      +   + +  +   + +  !%%%%!' '',)//))(% !! + +  + + + + +   +%%%  % )//))($  ' +  +   +   + +  + +!%%% '% ' + (//)(( % ',  + +      +   !% + +! +  )//)(+ +         !! + !! )/))(+  ! +   + + +    ! + % +  '(//))(+  + + +   + +    ! +   !!)//))(+$  + +      +    + !+))))(+, ! + +     +    !  ! //))(  +   + + ,  +! + ' +//))(  + +  + + + +   +   +//))+ +  +   + +  + + +    ,  (//)(      + + + + + + + !   (/))      +1B 84 38 1 +01 2223332100.&94994455444455-%#.9555599559&:55996% 773333371 11133332110,899554445955545:&&%#-955999559695449:.#%% 3373333371 117333332112 $95:;44444;-555%;:6:::9995995556;5449:.#&#"333333333371 11237010 &*95;:544456654& .&&;95559::9456-9559;;:6;-.!277373333711123377201.*995595455559; '%;;9599669556;6549&#*999:& + 2777233337111233372771.*9445954444-'".&99969445:#;9445*6959-;. +77007773217223332277 ,&!!64444:6445#"!'%:;&69;&;545:.*9555*-659;%% +777027777777223333211277 -.:4444#"55# !!%69*9559-9596&;4449-&699.#&#%# 7722777770007273333011111 .#;;654596%9"";96:5599545-.9449&&&*99#%:6:--# +207777770111123333011111 + + %#&*9*94999*:'! #.;::659*944*.-9559;.:9999-;*6:.#7777772000103330110011 !.:95499544*%" %#&;&.;:69959#;5449#%-955*&.&.&- "372000010111077#.699995446%''.-&69*96666&-9449;.;9496&..::%" .;!337000020721111122 %'.*59955.'!"%%%-99999599.#:959;#:449;.%#:99.%&*6;,#37010117222110 '"-*955&%!!%*:.-*999549&:9549#%-949;..##69.%-<*;;$. 333770111711771111 + ' -:5:%'!".*9*:;:;999:&;9445*&-949;##&-;;###*9*6:&% 330007111022111  .9;!! ;*6-;9966:&%9944:&:459&%%:99-:*::;;.% 2377711111201   !.6%!! .---&*9999;.&6999&.;949&#&..99:&&99<866-.#%7777337111111222 +%!.6%!".::#:9996&&9449:#.696.#-*6:*:&-%9<<<*;&.#. 12331101173 #!-."!! .:;&--6*9*&#-95446.:999;%#6**:&#&."&<9*6-&#&  17311122273 .##'"%---𐾴.%-94449664445966995*9<: %:**:-&--,$ 172731027122 %#'" &::&&%.<45<96944444<5444445444444//4;&#&8;-&-$$$$  111711112 + %%% ''" #6:&%#&<44954///////////////////////4<*:*-&-&-+$ 11271102  + %#%"!".&..%;<4444)//////////////////////////)*.;-;:;++.#$$  1002111227 !.#!!.:&-44////////////////==/=====//////=)*%;;;*8$#,$,  10001112722!%'!-;&%*4//////////////=5)))))))))5=//==))+"#&**$+*$%  000772 !'! ..#&84/////////=555)))<<<<<<<<<<)))))))8;!'-<8*8*   1007337  ! .*54//////=5)))))<<<8********8<)))))<*-'&*<<8$%! +  077372 +  !! &<54///==5))<<<<<88***+*+6666*8<<))<8+&  -<)$$$%' + 273371  + !'!!''#:8<9)///=))<<<<88***6666++6:;;:+8<<<<8*- $*$&,+,  + 03337 !''!'-:+*+)//=))<88888**66666+**+:-&&;*8<<<8*-.8+-$$ %17 +!!!!;-&;$)//=)<88888*+666666+***6-..-6*8<<8*- !&$$8**$  2727  '!!&#%.*///))8****+666666++*88*+;-..;*8))8*-'!.$)($$% + + 2777! '''&#%.)//))*+++6:;-;;;:6+*88<8*+;&.-+8))8*&!!%+*+$,  +7  '!''"#%&)/=8*$;--.###..&-:+88<<<8*+;-;+8))8+&!"',*$$, ,, 27 + +! '!!"";8+&.##% %%.;*8<))<<8*+$$+8))8+.,$$$# , +2 !!'"'-+*#"!'"%-+8<)))<88**+*8((*+%"%"#,$$,$ 3 !  '! #$*$%#%' .+*8))<88888*88((*$ & #$$$, +2  + +!! %'#+8-%&.$*8)(888()((())(*-' && $$#%  6F 4 174 1 + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + +   + + +  + + + + + + + + + + + + + + + + + + + +     +                + + + + + +  + + +    + + + + + +  + + +  + + +  + + +21 84 31 1 +9  999 99999 9+(33:<<:;<<<<<<<:3;<<<<<<<<72::2:<;/1+)99999999999999999 99&7(/3.=::;;=;<<<<:/<<<<<<<<:==//:<:/32&') 9999999999 9999 99999,+0012.//:;<:::;=://<<<<<<;/<;20:<:/.1&&1+9999999999999999  9996'2//23:;:=<<<<<<:212;<<<<<::;2'/<:3:=/10(1+'999999999999 9999 99999)6&3.:::;<;<<<;<<<:33;:02:<:::1'1<;/:=:32022(+9999999999  99999 &71(//33;;;:;;;=<<:3:<<;0&1:=:203<<;;=:32113(1')99999999999 9999970003322:./:;://::22<<<32333/11:<<;<=32212:;:+'') 99999999999999999 &77+171:;:/:<<;:311/<=32:<<;7,3<<>><<<3414339;.6.;..#%  ""$$$:-;765..122221.3=<=2365;7.533=<><>>>><><<2191397.9.;.60%%% ! %%%7.7..;-9222234322331;66.93==<><>><><><><<3316776.;;;7%--#! !$%--64467-77;12332213=239.9953,=<<<><<<<<<<<<<=39--..7;..-%%#0! $%-0433167-7;91132232=234691=<<<<<<<<<<<<<<<<==5-;.9666.7-7--#%#" $-04331466547-12233=231943=<><<<<<===========3.%7...6.77;.0-!""   %%:%044114446-.1==2233393=<><<============22334.::-;;77-7..07%%# %!#00.444131.7751222333.52<<<==========222333315.%:---7;7700-#-#   #08487.44134-794911153332=<<=====22222222331114567:%%-;99.0;7####""  #&/8446;61331665416%;13==<=====2222222222233114496.7;;.95.7777--%%#"  &//88860.1311334329-612======2222222222223311144996656549.--7777%"  #&/0/48.--6113223333433,====223322222222233111444599941114.;;;#0#-%"75 4 174 1 + + +  +       +  +                          +  +    +                                                                              42 84 33 1 +7:;77777::777((#,49995555555592+0++0455.**,4-233-9.1 ((::7:::7(((7(;::;;;;;::;;::;( ).55555555===55443220*9.0,,,3,339<-) (((((7:;:77(((((((::::;;;;::;;::;: *+45555=========59.4.20.*300.499.+3--,#(((((((7(((777(((:::;;77;:::;:::; +8--4955555========5594..,+2,+-95999.0,-,)#(((((7(77(((;::;;;77:::::::: .//,4955555========549994..4-.55559940+--,) 77((((7((((:;77;:::::;;::::"6/99<..<5===5=======5955595544555.9592*--1# 77((((((((:;7;;::;(((((;; + .4/99.2095==========59594554.9=55..<-**0-,)(((7(((777;:::::;(((7!///99-0*3995========94.4959.45===59.*2..2--,) (((((((77((7;:;;;(((6%//9559-30*,5======59233-99594555==9.3.959.-/4,# ((((7(((7;;:;((((8///9555<3++55=====900,4445=5-455=55.,55559--46#$ ((((((:;;:;((((( *0-.//5555.2.4.955==5-2,4945=55.2.5555<,95555<021 (((((((:::;;7(((73-..<99594<99949-99,++.4.25=55<..95599<.95559*2**((((((::::::7(( 1.//9559994<955-3<3+023.,.95559,.55555,*9554+1*$77(((((::;:::;((7*0*1/9555559-<559,2,0*0...9555555.3+455559-5543*00*7((7(((:;::::;7((*0*0.95595=92.<.-..3+2..<55555555-,+,55555555.*++**((((7((((((::::;7;;7$**/9/95==54...-.,32--,<55555555923--<99555.0,+*+*##((((((((7((((::::::::*#*155/955=5-..<<.,..220,<9555555599<.2.959.+03*+03+01#((7((77((7(7;::::::#+3/9/955559024<....,.,3-4.9995555559...94-****3,--1#*7(((77((7((7(;:::;***,//95555520-.2,-,.95<-,2..9559955599<.,03++32-4/.0*7((7((777(7(7::::$*).449555590-,3,.3,955.,,3349599959995903-..499955/1)#(((7(((77777(7;;; + +*6/9555559.2--,,---9554220*32.955999999<2<9955====5//9.# (77777(77;;7;:: +"#1649595559/22,03-,-99593000+029559,-559.5======''''5'56#777777((7(;:777: + 8864999559/-3+*+32,9999--+-<.0+.5592+99-5===='=''''''556*7777(((((::;(( 866.///9599-,2*+3+3<95942255420+-9<9.*.245===='''''5555/1$7(((((((7::7((# 8 .%99999/-22*02,32.9999-/59-+-.2///4+-<5=''''5555559/.)$(((((77:;;7 +"888.%%9559,++,,233-.99999/-0+.,+.99<,-.9='''55599////.,0(7((77(;;:  86!!%9999,*+*3223++049955-***,2-9/2-<5='''559//444..-1+ $77777(7:: 8!.%%%//1**+*0000++03+2<99/4,,+-4,2-3,-9='''559/4....--,)+ 77(((;;"86.%9/40$020++3++,-324///99,-/9-+000-5='''55/4....---,)+ (((((7::: +#886!%%/1+*$$*33*0-2,--00,.4/9/-///-,.-34='''55//4...----,)*$ ((77;: + +&!%%4)****+010,222,,230+3.//.4//-2.--<='''559/44...----,)*  7(77(7 +"&%!.++00,..--3010+0+**+./////-03,2.5''''59/....--.66-10 $* 77((( +##8!6*$$$*).-4//4+**020023,-//9-*++*3/='''55/4...--6.66,)+ $7(((45 84 38 1 +( + )*$+*+,--.//,+*011,,2*034.-+**3-5'''55/4....--6.--1)* (((7 +!&)*$***1--11.,+,3+3-,+3,*2/5'''559/4....666--,1#* $((((8$*-441)60)-60*03+*02*0+3+0.5''''55/4....666--,1)#* 7(( $+$6/..6--64.-00*0--301++-/5'''559/4..6666--,,1)#*$  ((+#,6.4.44/4-..1+0-,3013*0./'''559/4.66666--,,11)0 $* ((**$$+186#)666644.64//,*)-3333*0-95'''55//..66.6--,1111)0*  (( +**)1.8**)1-6-6,-44.-*+++0313+1/5'''559/4.6666--,11111)+ ((*11 ))),))),4.6,*1301--1.95'''55//4.66--,11111,,)#  )866*$)))8,8..)06,1,,13.5'''559/4.66--,1111,,,,1  $* $$*) &68#$)-..)..6)*1,00,)33/95'559/.6688--,111,,8,1)+ $    "" 8 ##).68888)*+0+0+*0-5'''5594.66--,,1111,,,,1#*$$ $#""*))1 1+*+)886661**+))+395'''55%4.66-,11111,,,,1)#*$ $$$" #"" #)1)).6,*+***0),,69'''5594.66-,111)11,, ,11#* $* ) 8 8 *+#**+11*+*+#111,.5''559/.68-,1)))11,,8 11# *   +"6&81+$*$$$*++)#1-%''555%.8-,1))))1,,, 1#  $  +"" $$&886 *$*0+3.'''559468,1)##)11,, "#  +""$)8&88"1+*#+*)#*+))-9''559%.8-1)0++)1, 8888 )$$$$   + + +"#*$*"" 661*#+))##)18%'''59%.8 ,)#+**),88 866668) $$   + + +#*##)188#+#*+##+#16%5'59946 11#+,.668886!!!8)*   "" #)8 )#**+*****149''59%681)#+*$6%468866!!! #$ $   + + "" "" ##+++###**)845''5%.8,1#+*$$199!6886!!!& $ + + + +"""*++*)#*)16%9''59%6 1)#*699!6888!!!& $ + +# "*$**$** 86%5'59%.81)#+*$ 49!68 86!!6"$ #  + + + "" *$*****1 .9''99!8")##* *%9%6 " 8&&8"    +"""* *$)#+**##,.''9%6 1)#*099%6")" 6&8)*$ +#  "$#*#))) !9''99. 1)##*$ 6559%6")1 88 )*   + +   $$* **)"##69''59!81)##*+9''9%. 1" 88") $  + + +$##**#)%9'9%6"))##* )%''99!8 " 8 "#     +  +#$$*# #*)%'%!8")))#* )5'99%&8 " $   + + $$* )###18%9%6 1))#$ *%''99%!&888 "# #   +  # )" !9%!8"))#* $"%''99%!!&&8"#  $ +   ***  )) %''9%6 ))##*$ )%''9%%!!!!&"#$ # $#* #89'%!8"))#*6''9%!!!!!!"#    + + #  ###"!99%6"))#$  $*199%!!!!!!!&" ##  +** # !%! "))#*  $*)!9%%!&&&&!!!" + + +  **)&%9%6 "## $# !%9%!6 &!!!  +    # * %!8")#*  #"!%%99! " &&& #   +      + &9%& "# $ $*)"&%'9! )#"  "$   +48 84 36 1 +    9%!"# $  '9%#""#  # +  !%%& # #" &%'%& "##    + +     !9%"#$ " &%''%&"#    + + +   +   +%99%& ## $  "%''9%&"  + + + +    "&%9%!" +#  # %''9%%&" +   + +  !'9%&" + + +   +"%''%%&  # +   #"%'%! + +# $ +"&%''9%%&"   +      + '&"#  # +" &%''9%%"#  + +     +"%%& ""  +" + +"&'%% +  + + +   + +&%!""""$  +"&%9%   + +    "%'%&" +"" +  " '%%&&&    +    +' + +""$ ""&%''%&&&&&   +    + %" + + + +   "&%''%%&& +  + + +   "%& + + + + + $  "%''9%&& +     % + + + +    %'%&&&&"  +   +% + +    + + "&%''%        "%&" +  + +"&%''%%" +     + +%% +    +" "&%''%%    + + +     +%%% +   """  ''%% +  +  %% + "%''%   + +  %%%% +  + + + + +9''%   + +%%%   + + + + + +%''%    + +% +  +#'% +   + + +%  +'%" +    + + +%     + + + + + + + + +%    + + + % +  + + + + + + + + +'%    + + % +   + + + + +'%    + +    +% +  + + + + + +"'% +    + +     % + + +   + + + + + + + + + + +'% +    + + +  + %% + +   + +  + + +%'%  +  + +  + %%  +    + + + +%'  + + + +  %%%    + + + +% +   + +    %    +  + + + + +%"    + + +  %%   + + +%% +    + +    %%       +%"  + + + +   %%     + + % +  + +   + + + + +4B 84 58 1 +%%  +   + + + +  + +    + +  %%  +  + # +  +    %  +  + + + + + + + +   +    %%  +  + + +     %  + +%%%  + +   % %%%%%  + + + +  + %  +%%% + + + +%%   %%  + +%%% + + + +%% %%%%%%%%  + + +%%% +       + + + +   + + + %     +   + +   + +     +    + + + + + + +        + +  + + +     +  +  +         +  +   + +      +   +        +         +  +      +  + +          +          +              % +         +%% +        %% +     %% +    %% +      +%% +   % +    + + +   + + +      % +      % +     +%%   %% +      % +     +      %% +   %% +   % +     +%% +        %% +      % +        +% +       %%      %% +       +% +        +        +        + +  +        +    +           + + +        +  +       + + +       +       + +  MBOX2B_P 122 +ÿ¿wŸso_k?gcÿ^ßZßZ¿VŸRN_J?FBBÿ=ß9ß9¿5Ÿ1Ÿ1-_)_)_)?%!!ÿßß¿ŸŸŸ _? + ENTD_P 62 + $(,84(  04,$$ X@< 4@0(H<*d, $48@H(00,D`< 8T H|MBOX2R_P 122 +ÿ½œ{Z9÷~Ö~Ö~µ~”~s~R~1~~~ï}Î}Î}­}Œ}Œ}k}J}J}J})}}}ç|Æ|Æ|¥|„|„|„|c|B|!||xttplllhddd`\\\\\XTTTTTTPLLLLLHDDDDDD@<<<<<<84444440,,,,,($$$$$  BK8_P 27 +       + +   ENTA_P 62 +    +  6  + 7       +   ?     ENTB_P 62 +  +  +   4 1  +  8       +  8 ENTC_P 63 +    $ (, (< $ (,)X08H(L(,$<PH84, 00$(XT)|BK1_P 22 +     ÿBK2_P 16 +   ÿBK3_P 16 +   BK4_P 16 +   BK7_P 27 +     ENT_P 27 +!       ÿ \ No newline at end of file diff --git a/BACKUP/ART100/EXPLODE.IMG b/BACKUP/ART100/EXPLODE.IMG new file mode 100644 index 0000000..9b04be1 Binary files /dev/null and b/BACKUP/ART100/EXPLODE.IMG differ diff --git a/BACKUP/ART100/EXPL_OLD.IMG b/BACKUP/ART100/EXPL_OLD.IMG new file mode 100644 index 0000000..87f8a20 Binary files /dev/null and b/BACKUP/ART100/EXPL_OLD.IMG differ diff --git a/BACKUP/ART100/FBALL.IMG b/BACKUP/ART100/FBALL.IMG new file mode 100644 index 0000000..54bd396 Binary files /dev/null and b/BACKUP/ART100/FBALL.IMG differ diff --git a/BACKUP/ART100/FIREFRAM.IMG b/BACKUP/ART100/FIREFRAM.IMG new file mode 100644 index 0000000..0b71a69 Binary files /dev/null and b/BACKUP/ART100/FIREFRAM.IMG differ diff --git a/BACKUP/ART100/FLASH.IMG b/BACKUP/ART100/FLASH.IMG new file mode 100644 index 0000000..45c8ccd Binary files /dev/null and b/BACKUP/ART100/FLASH.IMG differ diff --git a/BACKUP/ART100/FOG.IMG b/BACKUP/ART100/FOG.IMG new file mode 100644 index 0000000..18d3ae0 Binary files /dev/null and b/BACKUP/ART100/FOG.IMG differ diff --git a/BACKUP/ART100/GAMEGRAF.IMG b/BACKUP/ART100/GAMEGRAF.IMG new file mode 100644 index 0000000..2c87491 Binary files /dev/null and b/BACKUP/ART100/GAMEGRAF.IMG differ diff --git a/BACKUP/ART100/HALFTIME.BDB b/BACKUP/ART100/HALFTIME.BDB new file mode 100644 index 0000000..4de9e09 --- /dev/null +++ b/BACKUP/ART100/HALFTIME.BDB @@ -0,0 +1,38 @@ +HALFTIME 2000 1000 255 1 12 36 +HTSTATS 211 677 145 470 +4000 255 222 3 8 +A00 255 188 0 7 +6E00 263 222 6 2 +A00 263 434 9 9 +6E00 268 222 C 2 +6E00 268 429 F 2 +A00 268 227 12 4 +A00 268 291 15 6 +6B00 282 222 C 2 +6B00 334 429 F 2 +7300 356 226 18 1 +4000 356 417 1B 1 +A00 358 291 1E 6 +6E00 360 222 C 2 +6E00 360 429 F 2 +A00 360 227 12 4 +6E10 445 222 6 2 +A00 453 188 21 8 +A00 453 291 24 8 +6E00 458 222 6 0 +A00 458 188 27 11 +A00 458 434 2A 10 +6E00 463 429 F 0 +6E00 463 222 C 0 +A00 463 227 2D 5 +A00 463 291 30 3 +6B00 476 222 C 0 +6B00 515 429 F 0 +7300 551 226 18 1 +4000 551 417 1B 1 +A00 553 291 33 3 +6E00 555 222 C 0 +6E00 555 429 F 0 +A00 555 227 2D 5 +6E10 640 222 6 0 +4000 648 222 36 8 diff --git a/BACKUP/ART100/HALFTIME.BDD b/BACKUP/ART100/HALFTIME.BDD new file mode 100644 index 0000000..e97e28b Binary files /dev/null and b/BACKUP/ART100/HALFTIME.BDD differ diff --git a/BACKUP/ART100/HALFTIME.IMG b/BACKUP/ART100/HALFTIME.IMG new file mode 100644 index 0000000..3380170 Binary files /dev/null and b/BACKUP/ART100/HALFTIME.IMG differ diff --git a/BACKUP/ART100/HANGFONT.IMG b/BACKUP/ART100/HANGFONT.IMG new file mode 100644 index 0000000..400bf61 Binary files /dev/null and b/BACKUP/ART100/HANGFONT.IMG differ diff --git a/BACKUP/ART100/HANGTIME.BDB b/BACKUP/ART100/HANGTIME.BDB new file mode 100644 index 0000000..ff958c5 --- /dev/null +++ b/BACKUP/ART100/HANGTIME.BDB @@ -0,0 +1,27 @@ +hangtime 2000 1000 255 2 14 24 +maxim 867 1313 244 525 +hangtime 192 720 149 506 +A00 274 206 0 0 +A00 274 329 3 5 +A00 349 329 6 7 +A00 349 206 9 1 +A00 419 329 C 6 +A00 424 206 F 2 +A00 494 329 12 8 +A00 499 206 15 3 +A00 574 329 18 9 +A00 574 206 1B 4 +A00 888 376 3 5 +A00 888 253 0 0 +4000 915 294 1E 10 +A00 963 253 9 1 +A00 963 376 6 7 +4000 983 294 21 11 +A00 1033 376 C 6 +A00 1038 253 F 2 +4000 1052 295 24 12 +A00 1108 376 12 8 +A00 1113 253 15 3 +4000 1138 295 27 13 +A00 1188 253 1B 4 +A00 1188 376 18 9 diff --git a/BACKUP/ART100/HANGTIME.BDD b/BACKUP/ART100/HANGTIME.BDD new file mode 100644 index 0000000..2076500 Binary files /dev/null and b/BACKUP/ART100/HANGTIME.BDD differ diff --git a/BACKUP/ART100/HDS1.IMG b/BACKUP/ART100/HDS1.IMG new file mode 100644 index 0000000..b469ff4 Binary files /dev/null and b/BACKUP/ART100/HDS1.IMG differ diff --git a/BACKUP/ART100/HDS10.IMG b/BACKUP/ART100/HDS10.IMG new file mode 100644 index 0000000..b2320ee Binary files /dev/null and b/BACKUP/ART100/HDS10.IMG differ diff --git a/BACKUP/ART100/HDS11.IMG b/BACKUP/ART100/HDS11.IMG new file mode 100644 index 0000000..a5313cc Binary files /dev/null and b/BACKUP/ART100/HDS11.IMG differ diff --git a/BACKUP/ART100/HDS12.IMG b/BACKUP/ART100/HDS12.IMG new file mode 100644 index 0000000..f3cd005 Binary files /dev/null and b/BACKUP/ART100/HDS12.IMG differ diff --git a/BACKUP/ART100/HDS13.IMG b/BACKUP/ART100/HDS13.IMG new file mode 100644 index 0000000..f824438 Binary files /dev/null and b/BACKUP/ART100/HDS13.IMG differ diff --git a/BACKUP/ART100/HDS14.IMG b/BACKUP/ART100/HDS14.IMG new file mode 100644 index 0000000..33faa94 Binary files /dev/null and b/BACKUP/ART100/HDS14.IMG differ diff --git a/BACKUP/ART100/HDS15.IMG b/BACKUP/ART100/HDS15.IMG new file mode 100644 index 0000000..eb9783d Binary files /dev/null and b/BACKUP/ART100/HDS15.IMG differ diff --git a/BACKUP/ART100/HDS16.IMG b/BACKUP/ART100/HDS16.IMG new file mode 100644 index 0000000..ffddd6b Binary files /dev/null and b/BACKUP/ART100/HDS16.IMG differ diff --git a/BACKUP/ART100/HDS17.IMG b/BACKUP/ART100/HDS17.IMG new file mode 100644 index 0000000..95155f9 Binary files /dev/null and b/BACKUP/ART100/HDS17.IMG differ diff --git a/BACKUP/ART100/HDS18.IMG b/BACKUP/ART100/HDS18.IMG new file mode 100644 index 0000000..03b6e6d Binary files /dev/null and b/BACKUP/ART100/HDS18.IMG differ diff --git a/BACKUP/ART100/HDS19.IMG b/BACKUP/ART100/HDS19.IMG new file mode 100644 index 0000000..d866c66 Binary files /dev/null and b/BACKUP/ART100/HDS19.IMG differ diff --git a/BACKUP/ART100/HDS2.IMG b/BACKUP/ART100/HDS2.IMG new file mode 100644 index 0000000..cab2cd3 Binary files /dev/null and b/BACKUP/ART100/HDS2.IMG differ diff --git a/BACKUP/ART100/HDS20.IMG b/BACKUP/ART100/HDS20.IMG new file mode 100644 index 0000000..36e57e1 Binary files /dev/null and b/BACKUP/ART100/HDS20.IMG differ diff --git a/BACKUP/ART100/HDS21.IMG b/BACKUP/ART100/HDS21.IMG new file mode 100644 index 0000000..cdc242b Binary files /dev/null and b/BACKUP/ART100/HDS21.IMG differ diff --git a/BACKUP/ART100/HDS22.IMG b/BACKUP/ART100/HDS22.IMG new file mode 100644 index 0000000..9666b91 Binary files /dev/null and b/BACKUP/ART100/HDS22.IMG differ diff --git a/BACKUP/ART100/HDS23.IMG b/BACKUP/ART100/HDS23.IMG new file mode 100644 index 0000000..b893512 Binary files /dev/null and b/BACKUP/ART100/HDS23.IMG differ diff --git a/BACKUP/ART100/HDS24.IMG b/BACKUP/ART100/HDS24.IMG new file mode 100644 index 0000000..1298604 Binary files /dev/null and b/BACKUP/ART100/HDS24.IMG differ diff --git a/BACKUP/ART100/HDS25.IMG b/BACKUP/ART100/HDS25.IMG new file mode 100644 index 0000000..2433d32 Binary files /dev/null and b/BACKUP/ART100/HDS25.IMG differ diff --git a/BACKUP/ART100/HDS26.IMG b/BACKUP/ART100/HDS26.IMG new file mode 100644 index 0000000..7a3401a Binary files /dev/null and b/BACKUP/ART100/HDS26.IMG differ diff --git a/BACKUP/ART100/HDS3.IMG b/BACKUP/ART100/HDS3.IMG new file mode 100644 index 0000000..474ce6d Binary files /dev/null and b/BACKUP/ART100/HDS3.IMG differ diff --git a/BACKUP/ART100/HDS4.IMG b/BACKUP/ART100/HDS4.IMG new file mode 100644 index 0000000..96d415c Binary files /dev/null and b/BACKUP/ART100/HDS4.IMG differ diff --git a/BACKUP/ART100/HDS5.IMG b/BACKUP/ART100/HDS5.IMG new file mode 100644 index 0000000..8b9948e Binary files /dev/null and b/BACKUP/ART100/HDS5.IMG differ diff --git a/BACKUP/ART100/HDS6.IMG b/BACKUP/ART100/HDS6.IMG new file mode 100644 index 0000000..facec71 Binary files /dev/null and b/BACKUP/ART100/HDS6.IMG differ diff --git a/BACKUP/ART100/HDS7.IMG b/BACKUP/ART100/HDS7.IMG new file mode 100644 index 0000000..4902ace Binary files /dev/null and b/BACKUP/ART100/HDS7.IMG differ diff --git a/BACKUP/ART100/HDS8.IMG b/BACKUP/ART100/HDS8.IMG new file mode 100644 index 0000000..d83a52d Binary files /dev/null and b/BACKUP/ART100/HDS8.IMG differ diff --git a/BACKUP/ART100/HDS9.IMG b/BACKUP/ART100/HDS9.IMG new file mode 100644 index 0000000..2c72e93 Binary files /dev/null and b/BACKUP/ART100/HDS9.IMG differ diff --git a/BACKUP/ART100/HDSMSC1.IMG b/BACKUP/ART100/HDSMSC1.IMG new file mode 100644 index 0000000..f042161 Binary files /dev/null and b/BACKUP/ART100/HDSMSC1.IMG differ diff --git a/BACKUP/ART100/HDSMSC2.IMG b/BACKUP/ART100/HDSMSC2.IMG new file mode 100644 index 0000000..2ecf3e7 Binary files /dev/null and b/BACKUP/ART100/HDSMSC2.IMG differ diff --git a/BACKUP/ART100/HDSMSC3.IMG b/BACKUP/ART100/HDSMSC3.IMG new file mode 100644 index 0000000..d132d61 Binary files /dev/null and b/BACKUP/ART100/HDSMSC3.IMG differ diff --git a/BACKUP/ART100/HDSMSC4.IMG b/BACKUP/ART100/HDSMSC4.IMG new file mode 100644 index 0000000..6c33398 Binary files /dev/null and b/BACKUP/ART100/HDSMSC4.IMG differ diff --git a/BACKUP/ART100/HDSMSC5.IMG b/BACKUP/ART100/HDSMSC5.IMG new file mode 100644 index 0000000..8f4fdcb Binary files /dev/null and b/BACKUP/ART100/HDSMSC5.IMG differ diff --git a/BACKUP/ART100/HDSMSC6.IMG b/BACKUP/ART100/HDSMSC6.IMG new file mode 100644 index 0000000..e86f4d2 Binary files /dev/null and b/BACKUP/ART100/HDSMSC6.IMG differ diff --git a/BACKUP/ART100/HDSMSC7.IMG b/BACKUP/ART100/HDSMSC7.IMG new file mode 100644 index 0000000..a5fb288 Binary files /dev/null and b/BACKUP/ART100/HDSMSC7.IMG differ diff --git a/BACKUP/ART100/HDSMSC8.IMG b/BACKUP/ART100/HDSMSC8.IMG new file mode 100644 index 0000000..0d83eaf Binary files /dev/null and b/BACKUP/ART100/HDSMSC8.IMG differ diff --git a/BACKUP/ART100/HOOP.IMG b/BACKUP/ART100/HOOP.IMG new file mode 100644 index 0000000..fa6a223 Binary files /dev/null and b/BACKUP/ART100/HOOP.IMG differ diff --git a/BACKUP/ART100/HOT.IMG b/BACKUP/ART100/HOT.IMG new file mode 100644 index 0000000..5e101b4 Binary files /dev/null and b/BACKUP/ART100/HOT.IMG differ diff --git a/BACKUP/ART100/HOTCIRCL.IMG b/BACKUP/ART100/HOTCIRCL.IMG new file mode 100644 index 0000000..d122202 Binary files /dev/null and b/BACKUP/ART100/HOTCIRCL.IMG differ diff --git a/BACKUP/ART100/HOTSPOT.IMG b/BACKUP/ART100/HOTSPOT.IMG new file mode 100644 index 0000000..c1e857d Binary files /dev/null and b/BACKUP/ART100/HOTSPOT.IMG differ diff --git a/BACKUP/ART100/INFOWIN.IMG b/BACKUP/ART100/INFOWIN.IMG new file mode 100644 index 0000000..80d749d Binary files /dev/null and b/BACKUP/ART100/INFOWIN.IMG differ diff --git a/BACKUP/ART100/INGA16.IMG b/BACKUP/ART100/INGA16.IMG new file mode 100644 index 0000000..aa41a5c Binary files /dev/null and b/BACKUP/ART100/INGA16.IMG differ diff --git a/BACKUP/ART100/LEDS1.IMG b/BACKUP/ART100/LEDS1.IMG new file mode 100644 index 0000000..911fad0 Binary files /dev/null and b/BACKUP/ART100/LEDS1.IMG differ diff --git a/BACKUP/ART100/MAPPER.INI b/BACKUP/ART100/MAPPER.INI new file mode 100644 index 0000000..6c47dd9 --- /dev/null +++ b/BACKUP/ART100/MAPPER.INI @@ -0,0 +1,27 @@ +# +# MAPPER.INI +# +# lists all the files that mapper will look at. Keep this file in IMGDIR. +# + +#raw file address file + +;misc.irw misc.lod + +;bb5.irw bb5.lod + +bb.irw bb.lod + +bb2.irw bb2.lod + +bb3.irw bb3.lod + +bb4.irw bb4.lod + +bb6.irw bb6.lod + +bb7.irw bb7.lod + +bb8.irw bb8.lod + +bbmug.irw bbmug.lod diff --git a/BACKUP/ART100/MISC.LOD b/BACKUP/ART100/MISC.LOD new file mode 100644 index 0000000..94e2cfc --- /dev/null +++ b/BACKUP/ART100/MISC.LOD @@ -0,0 +1,580 @@ +***> 2000000,0 +; +PON> +XOF> +ZOF> +; +IHDR PAL:L +; +ASM> junkxxxx +;Loads DIAGP palette +diagp.img +---> DIAGPIMG +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> COURT.TBL +; +FRM> COURT +; +crtref.img +---> ref01n,ref02n,ref03n,ref04n,ref05n,ref06n,ref07n,ref08n +---> tabletop +---> ad01_nl,ad01_nr +---> ad01_ref_nl,ad01_ref_nr +; +nbacrowd.img +---> SIDECHK,SIDECAMS +---> TOPCRV,BOTCRV,TOPCHK,BOTCHK +---> STAIRS01,STAIRS02,STAIRS03,bk_flr +---> COACH01,BNCHPL01 +---> CR0FST01n,CR0FST02n,CR0FST03n,CR0FST04n,CR0FST05n,CR0FST06n,CR0FST07n +---> CR2FST01,CR2FST02,CR2FST03,CR2FST04,CR2FST05,CR2FST06,CR2FST07 +---> CR3FST01,CR3FST02,CR3FST03,CR3FST04,CR3FST05,CR3FST06,CR3FST07 +---> CR1SEC01,CR1SEC02,CR1SEC03,CR1SEC04,CR1SEC05,CR1SEC06,CR1SEC07 +---> CR2SEC01,CR2SEC02,CR2SEC03,CR2SEC04,CR2SEC05,CR2SEC06,CR2SEC07 +---> CR3SEC01,CR3SEC02,CR3SEC03,CR3SEC04,CR3SEC05,CR3SEC06,CR3SEC07 +---> CR4SEC01,CR4SEC02,CR4SEC03,CR4SEC04,CR4SEC05,CR4SEC06,CR4SEC07 +---> CR5SEC01,CR5SEC02,CR5SEC03,CR5SEC04,CR5SEC05,CR5SEC06,CR5SEC07 +---> CR1THD01,CR1THD02,CR1THD03,CR1THD04,CR1THD05,CR1THD06,CR1THD07 +---> CR2THD01,CR2THD02,CR2THD03,CR2THD04,CR2THD05,CR2THD06,CR2THD07 +---> CR3THD01,CR3THD02,CR3THD03,CR3THD04,CR3THD05,CR3THD06,CR3THD07 +---> CR4THD01 +; +ASM> IMGTBL.ASM +GLO> IMGTBL.GLO +; +tvscore.img +---> DoubleOT,TripleOT,endof1,endof3,endof4,halftime +---> please,start,insert,tocontrol +---> one,two,three,four,overtime,final +; +halftime.img +---> HTSTAT01,HTSTAT02,HTSTAT03,HTSTAT04 +---> HTFIRE01,HTFIRE02,HTFIRE03,HTFIRE04,HTFIRE05 +---> HTFIRE06,HTFIRE07,HTFIRE08,HTFIRE09,HTFIRE10 +---> HLFSTATS +; +optscr.img +---> SPOTLTA1 +---> SPOTLTA2,SPOTLTA3,SPOTLTA4,SPOTLTA5,SPOTLTB1,SPOTLTB2,SPOTLTB3,SPOTLTB4 +---> SPOTLTB5,SPOTLTC1,SPOTLTC2,SPOTLTC3,SPOTLTC4,SPOTLTC5,BIGBAL1 +---> SMBAL1,SMBALSA1,SMBALSA2,SMBALSB1 +---> SMBALSB2,SMBALSC1,SMBALSC2,BGBALSA1,BGBALSA2,BGBALSB1,BGBALSB2,BGBALSC1 +---> BGBALSC2 +; +transbar.img +ZON> +---> TRANBR01,TRANBR02,TRANBR03,TRANBR04,TRANBR05 +---> TRANBR06,TRANBR07,TRANBR08,TRANBR09,TRANBR10 +---> TRANBR11,TRANBR12,TRANBR13,TRANBR14,TRANBR15 +ZOF> +; +time.img +---> BRSH1800,BRSH1801,BRSH1802,BRSH1803,BRSH1804,BRSH1805,BRSH1806,BRSH1807 +---> BRSH1808,BRSH1809,BRSH18CO +; +attstuff.img +---> ATT_HT,ATT_WT,ATT_SP,ATT_PW,ATT_SH,ATT_DU,ATT_ST,ATT_BL +---> END_HT,END_WT,END_SP,END_PW,END_SH,END_DU,END_ST,END_BL +PPP> 3 +---> NOTCH_00,NOTCH_01,NOTCH_02,NOTCH_03,NOTCH_04,NOTCH_05 +---> NOTCH_06,NOTCH_07,NOTCH_08,NOTCH_09,NOTCH_10 +PPP> 0 +; +yes_no_4.img +---> NO,NOP,YES,YESP +---> SMNOP,SMYESP,SMYES,SMNO +---> SMNSHP,SMYSHP,ONE +ZON> +---> F_NO1,F_NO2 +ZOF> +; +fog.img +---> FOG_01,FOG_02,FOG_03,FOG_04,FOG_05,FOG_06,FOG_07,FOG_08,FOG_09 +---> FOG_10,FOG_11,FOG_12,FOG_13,FOG_14,FOG_15,FOG_16 +; +privilg.img +---> CHECK,PRVLGCK1 +---> TEX_HA,TEX_SD,TEX_AR,TEX_BD,TEX_BB,TEX_ST,TEX_BH +; +designd.img +---> HDAROW,HDBAR,HDSPTLT,HDSPTLT2 +ZON> +---> BIGBOX +ZOF> +---> TUBE01,TUBE02,TUBE03 +---> DITH_A,DITH_B,DITH_C,DITH_D +---> TIMEPRT,CREDTOOB +---> SPOTFL,TUBESH,BBTXT +---> TOTALBR,TEXTBAR +---> NNABAR,NNBAR,NNAROW +---> M_HOTSPT,M_NOARRW,M_BIGHED,M_QIKHND,M_UNLIMT,M_GOALTN,M_HYPRSP +---> M_FSTPAS,M_MAXSPD,M_BIGBAL,M_NOPUSH,M_MAXPOW,M_SHTPCT,M_BABYMD +---> M_STELTH +; +buttons.img +---> BUTTON_A,BUTTON_B,BUTTON_C,BUTTON_D,BUTTON_E,BUTTON_F,BUTTON_G,BUTTON_H +ZON> +---> BSHAD_A1,BSHAD_A2,BSHAD_B1,BSHAD_B2,BSHAD_C1,BSHAD_C2,BSHAD_D1,BSHAD_D2 +---> BSHAD_E1,BSHAD_E2,BSHAD_F1,BSHAD_F2 +---> BSHAD_G1,BSHAD_G2,BSHAD_H1,BSHAD_H2 +ZOF> +---> TXT_VIEW,TXT_HEAD,TXT_UNIFRM,TXT_ATTR,TXT_NEWN,TXT_SAVE +---> TXT_PRIV,TXT_NICK1 +; +teamsel4.img +---> TEAMBR,HEADER,SQUAD1,SQUAD2 +---> RHEAD,LHEAD,SCORE +---> SQDBAL01,SQDBAL02,SQDBAL03,SQDBAL04,SQDBAL05 +---> SQDBAL06,SQDBAL07,SQDBAL08,SQDBAL09,SQDBAL10,SQDBAL11,SQDBAL12,SQDBAL13 +---> SQDBAL14,SQDBAL15,SQDBAL16,SQDBAL17,SQDBAL18,SQDBAL19,SQDBAL20 +---> SQDBAL21,SQDBAL22,SQDBAL23,SQDBAL24,SQDBAL25,SQDBAL26,SQDBAL27 +---> SQDBAL28,SQDBAL29,SQDBAL30 +---> TEAMBR2 +; +attbar2.img +PPP> 4 +---> ATTBAR00,ATTBAR01,ATTBAR02,ATTBAR03,ATTBAR04,ATTBAR05 +---> ATTBAR06,ATTBAR07,ATTBAR08,ATTBAR09,ATTBAR10 +PPP> 0 +---> ATTRIBS +; +attract.img +---> NBABAR,NBALOGO +; +gamegraf.img +CON> +---> JMPBAL_L,JMPBAL_R,SCORTUBE,LOGOTUBE +---> RECVRBLK +---> clock,clock2 +COF> +; +cities2.img +PON> +---> city_atl +---> city_bos +POF> +---> city_cha,city_chi,city_cle,city_dal,city_den,city_det +---> city_gol,city_hou,city_ind,city_lac,city_lal,city_mia +---> city_mil,city_min,city_nej,city_ney,city_orl,city_phi,city_pho +---> city_por,city_sac,city_san,city_sea,city_tor,city_uta,city_van,city_was +---> DEFAULT,CUST1,CUST2,CUST3,CUST4,CUST5 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W +; +referee.img +CON> +PON> +;---> REFPNT1,REFPNT2,REFPNT3,REFPNT4,REFPNT5,REFPNT6,REFPNT7,REFPNT8,REFPNT9 +;---> REFPNT10,REFPNT11,REFPNT12,REFPNT13,REFPNT14,REFPNT15,REFPNT16,REFPNT17 +;---> REFPNT18,REFPNT19 +---> REFWHS1,REFWHS2,REFWHS3,REFWHS4,REFWHS5,REFWHS6 +---> REFWHS7,REFWHS8,REFWHS9 +---> REFTOS1,REFTOS2,REFTOS3,REFTOS4 +---> REFTOS5,REFTOS6,REFTOS7,REFTOS8,REFTOS9,REFTOS10,REFTOS11,REFTOS12 +---> REFTOS13,REFTOS14,REFTOS15,REFTOS16,REFTOS17,REFTOS18,REFTOS19,REFRUN1 +---> REFRUN2,REFRUN3,REFRUN4,REFRUN5,REFRUN6,REFRUN7,REFRUN8,REFRUN9 +---> REFRUN10,REFRUN11,REFSTN1,REFSTN2,REFSTN4 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +credball.img +PON> +---> t0000,tX000,tXX00,tXXX0 +---> tXXXX,t1000,t1100,t1110 +---> t1111,tX100,tX110,tX111 +---> tXX10,tXX11,tXXX1 +COF> +; +pnames.img +---> ABDULRAU,AHARDAWAY,AJOHNSON,WANDERSON,ANTHONY,AUGMON,BAKER +---> BARROS,BBARRY,BENJAMIN,BENOIT,BGRANT,BLAYLOCK +---> BOWENS,BRADLEY,BRANDON,BREEVES,BROWN,BWILLIAM +---> CAMPBELL,CASSELL,CEBALLOS,CHEANEY,CHILDRES,CMILLS,CMORRIS +---> COLEMAN,COLES,CROBINSON,CROGERS,CURRY,DANILOVI +---> DDAVIS,DELLIS,DELNEGRO,DIVAC,DOUGLAS,DREXLER,DROBINSON,DSCOTT +---> DUMARS,EDNEY,EDWARDS,EJONES,ELLIOT,EMURDOCK +---> EWING,FERRY,FINLEY,FOX,GARNETT,GATTISON,GHILL,GILL,GILLIAM +---> GRANT_HC,GROBINSO,GUGLI,HARPER_D,HAWKINS,HENDERSO +---> HORNACEK,HORRY,HOUSTON,HOWARD,JACK,JHOWARD +---> JOHNSN_L,JSMITH,KANDERSON,KEDWARDS,KEMP,KERR,KIDD,KJOHNSON +---> KNORMAN,KONCAK,KUKOC,LAETTNER +---> LMURRAY,LONGLEY,MALONE_K,MANNING,MARCIULO +---> MASH,MASON,MCCLOUD,MCDYESS,MCKEE,MILLER +---> MJACKSON,MONTROSS,MOURN,MULLIN,MURESAN,TMURRAY,MUTUMBO +---> NANDERSON,OAKLEY,OBANNON,OLAJUWON,OMILLER +---> PACK,PAYTON,PERSON,PHILLS,PIPPEN,PJONES +---> PRICHARD,RADJA,RESPERT,RICE,RICH,RIDER +---> RODMAN,ROOKS,ROSE,RROGERS,SABONIS,SCHREMPF,SEIKALY +---> SFORD,SMITH,SMITS,SPREWELL,SSMITH,STACKHOU,STARKS,STOCKTON +---> STOUDAMI,STRICKLA,THARDAWAY,THILL,THORPE,TISDALE,TMILLS +---> VANEXEL,VAUGHT,VMAXWELL,WEATH +---> WEBBER,WILLIS,WPERSON,WRIGHT,WWILLIAM,ZIDEK +;Special guests: +---> DIVITA +; +sparks.img +---> spark2,spark3,spark4,spark5,spark1 +; +tvtext.img +---> PRESSBUTT,PRESSTURB +---> TopTenred,TopTengrn +---> TopTenblu,TopTenyel +---> start3,insert3,freplay3,join3 +---> start2,insert2,freeplay +---> FulGamered,FulGameblu,FulGamegrn,FulGameyel +---> onePlblu,onePlgrn,onePlyel,onePlred +---> Customblu,Customgrn,Customyel,Customred +---> TopFivblu,TopFivgrn,TopFivyel,TopFivred +---> TournDblu,TournDgrn,TournDyel,TournDred +---> TurnNSblu,TurnNSgrn,TurnNSyel,TurnNSred +---> WorldRblu,WorldRgrn,WorldRyel,WorldRred +---> Top10Dblu,Top10Dgrn,Top10Dyel,Top10Dred +---> BstDfPlblu,BstDfPlgrn,BstDfPlyel,BstDfPlred +---> BstOfPlblu,BstOfPlgrn,BstOfPlyel,BstOfPlred +---> Top5DPblu,Top5DPgrn,Top5DPyel,Top5DPred +---> Top5OPblu,Top5OPgrn,Top5OPyel,Top5OPred +---> Top10Oblu,Top10Ogrn,Top10Oyel,Top10Ored +---> CORECTblu,CORECTgrn,CORECTyel,CORECTred +---> INCRECTblu,INCRECTgrn,INCRECTyel,INCRECTred +---> InvaldNMblu,InvaldNMgrn,InvaldNMyel,InvaldNMred +---> TRIVIA1,TRIVIA2,TRIVIA3,TRIVIA4 +---> QUALIFYblu,QUALIFYgrn,QUALIFYyel,QUALIFYred +---> GrtWnSblu,GrtWnSgrn,GrtWnSyel,GrtWnSred +---> NbaChpblu,NbaChpgrn,NbaChpyel,NbaChpred +---> PRESSPASS +; +inga16.img +PON> +PPP> 5 +---> INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G,INGA16_H +---> INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O,INGA16_P +---> INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W,INGA16_X +---> INGA16_Y,INGA16_Z,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6 +---> INGA16_7,INGA16_8,INGA16_9,INGA16_0,INGA16DEL,INGA16SPC,INGA16END +---> INGA16COM,INGA16PER,INGA16SLS,INGA16QUE,INGA16COL,INGA16EXC +---> INGA16NUM,INGA16DOL,INGA16PCT,INGA16AND,INGA16AST,INGA16PRL,INGA16PRR +---> INGA16ADD,INGA16SUB,INGA16APO +PPP> 0 +; +vsscr.img +ZON> +---> VSB01,VSB02,VSB03,VSB04,VSB05,VSB06,VSB07,VSB08,VSB09 +---> VSS01,VSS02,VSS03,VSS04,VSS05,VSS06,VSS07,VSS08,VSS09 +ZOF> +---> CODE +; +bast7t.img +PON> +---> BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G,BAST7T_H,BAST7T_I +---> BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O,BAST7T_P,BAST7T_Q,BAST7T_R +---> BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W +COF> +---> BAST7T_X +CON> +---> BAST7T_Y,BAST7T_Z,BAST7T_1 +COF> +---> BAST7T_2 +CON> +---> BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7,BAST7T_8,BAST7T_9 +---> BAST7T_0,BAST7TAST,BAST7TEXC,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TLPR +---> BAST7TRPR,BAST7TDSH,BAST7TPLS,BAST7TCOM,BAST7TPER,BAST7TQUE,BAST7TSLS,BAST7TAPO +---> BAST7TCOL,BAST7TSEM +; +bast8.img +---> WIN4FREE,WINSTAY,WNRSSTAY +---> ASISTOFF,NOPUSH,SHOTPERC,BABYPLAY +---> TOURMODE,NOCPU,SECRETS +---> TEAMST,TEAMST4 +---> TRIVPTS,CORRECT,POINTS +PPP> 4 +---> BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G,BAST8_H,BAST8_I +---> BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O,BAST8_P,BAST8_Q,BAST8_R +---> BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W,BAST8_X,BAST8_Y,BAST8_Z,BAST8_0 +---> BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7,BAST8_8,BAST8_9 +---> BAST8COL,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8PRL,BAST8PRR,BAST8PER +---> BAST8COM,BAST8PLS,BAST8QUE,BAST8SLS,BAST8APO,BAST8SEM,BAST8SPC,BAST8EXC +; +bast8t.img +---> BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H +---> BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P +---> BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X +---> BAST8T_Y,BAST8T_Z,BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5 +---> BAST8T_6,BAST8T_7,BAST8T_8,BAST8T_9,BAST8TCOL,BAST8TNUM,BAST8TDOL +---> BAST8TPCT,BAST8TAND,BAST8TPRL,BAST8TPRR,BAST8TPER,BAST8TCOM,BAST8TAPO +---> BAST8TPLS,BAST8TQUE,BAST8TSLS,BAST8TSEM,BAST8TSPC,BAST8TEXC +; +bast10.img +---> BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G,BAST10_H +---> BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O,BAST10_P +---> BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W,BAST10_X +---> BAST10_Y,BAST10_Z,BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5 +---> BAST10_6,BAST10_7,BAST10_8,BAST10_9,BAST10EXC,BAST10NUM,BAST10DOL +---> BAST10PCT,BAST10AND,BAST10PRL,BAST10PRR,BAST10PLS,BAST10APO,BAST10DSH +---> BAST10SLS,BAST10COM,BAST10PER,BAST10SEM,BAST10COL,BAST10QUE +PPP> 5 ;don't change this...its for echoing enter inits... +---> BAST10SPC +PPP> 0 +; +bast18.img +---> BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G +---> BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O +---> BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W +---> BAST18_X,BAST18_Y,BAST18_Z,BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4 +---> BAST18_5,BAST18_6,BAST18_7,BAST18_8,BAST18_9,BAST18EXC,BAST18NUM +---> BAST18DOL,BAST18PCT,BAST18AND,BAST18PRL,BAST18PRR,BAST18ADD,BAST18DSH +---> BAST18SLS,BAST18PER,BAST18COM,BAST18COL,BAST18APO,BAST18_1a +; +brush50.img +---> BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G,BRSH50_H +---> BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O,BRSH50_P +---> BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W,BRSH50_X +---> BRSH50_Y,BRSH50_Z,BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5 +---> BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9,BRSH50AND,BRSH50COL,BRSH50COM +---> BRSH50DOL,BRSH50EXC,BRSH50NUM,BRSH50PCT,BRSH50PER,BRSH50PRL,BRSH50PRR +---> BRSH50QUE,BRSH50SLS +; +brush20f.img +PON> +PPP> 5 +---> BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G +---> BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O +---> BRSH20_P,BRSH20_Q +COF> +---> BRSH20_R +CON> +---> BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W +---> BRSH20_X,BRSH20_Y,BRSH20_Z,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 +---> BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9,BRSH20_0,BRSH20COM,BRSH20PER +---> BRSH20SLS,BRSH20QUE,BRSH20EXC,BRSH20PCT,BRSH20COL +PPP> 0 +---> SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05,SQUD_06,SQUD_07,SQUD_08 +---> SQUD_09,SQUD_10,SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17 +---> SQUD_18,SQUD_19,SQUD_20 +---> useupbx,TRIVIA,CONTEST +; +ballfont.img +---> FNT_SEL,FNT_ENT,FNT_CRE +; +brush12.img +PON> +PPP> 5 +---> BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F +---> BRSH12_G,BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L +---> BRSH12_M,BRSH12_N,BRSH12_O,BRSH12_P,BRSH12_Q,BRSH12_R +---> BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W,BRSH12_X +---> BRSH12_Y,BRSH12_Z +---> BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 +---> BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +---> BRSH12QUE,BRSH12EXC,BRSH12COL +---> BRSH12DOL,BRSH12PER,BRSH12COM,BRSH12SLS,BRSH12NUM,BRSH12PCT,BRSH12AND +---> BRSH12PRL,BRSH12PRR,BRSH12DAS +PPP> 0 +; +brush10.img +PON> +PPP> 5 +---> BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F +---> BRSH10_G,BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L +---> BRSH10_M,BRSH10_N,BRSH10_O,BRSH10_P,BRSH10_Q,BRSH10_R +---> BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W,BRSH10_X +---> BRSH10_Y,BRSH10_Z +---> BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5 +---> BRSH10_6,BRSH10_7,BRSH10_8,BRSH10_9 +---> BRSH10COM,BRSH10PER,BRSH10SLS +---> BRSH10QUE,BRSH10EXC,BRSH10DOL,BRSH10PCT,BRSH10AND,BRSH10NUM,BRSH10PRL +---> BRSH10PRR,BRSH10COL +PPP> 0 +; +statstxt.img +---> scorshad1,scorshad2 +---> stx_all,stx_aveallow,stx_avescore,stx_created,stx_current,stx_defeated +---> stx_defrank,stx_havenot,stx_l,stx_nbateams,stx_nextcpu,stx_offrank +---> stx_ofthe27,stx_overall,stx_record,stx_tournwin,stx_w,stx_worldrec +---> stx_youhave,stx_avepoint,stx_lostto,stx_norecord,stx_pct,stx_wins +---> credbox +COF> +---> stshad1,stshad2 +CON> +; +threepnt.img +---> THREPNTS +IHDR PAL:L +---> THREP1,THREP2,THREP3,THREP4,THREP5,THREP6,THREP7,THREP8,THREP9,THREP10 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +sgmd8.img +---> plyr1,plyr2,plyr3,plyr4 +; +ogmd10.img +COF> +---> getready,_1quart,continue +---> _2quart,_3quart +---> _4quart,overtme +---> congrats_l,winstay_l,chalneed_l,chalacc_l,winfree +---> TMATE +---> CHALENG +CON> +; +infowin.img +---> dronetxt,firstwin,colormessage,joycontrol,red,blue,green,yellow +---> message1,message2,message3,message4,message5,message6,message7 +---> message9,message2a +---> infobox,CREDNOT,WINPIECE +; +expl_old.img +PON> +---> CLD1A +---> CLDB1 +---> CLDB1YELL +---> CLDB1WHT,CLDB1ORNG,CLDB1LGRY,CLDB1GRN,CLDB1PURP +POF> +---> CLD2,CLD3,CLD4,CLD4A,CLD4B,CLD5,CLD6,CLD7,CLD8,CLD9,CLD10,CLD11 +---> CLDB2,CLDB3,CLDB4 +PON> +; +flash.img +PPP> 5 +---> flash1,flash4 +---> flash3,flash3a,flash5,flash6,flash2 +PPP> 0 +; +;ASM> ARROW.TBL +; +arrows.img +---> arrow1l,arrow1r,arrow2l,arrow2r,arrow3l,arrow3r,arrow4l,arrow4r +---> arrow1t,arrow2t,arrow3t,arrow4t +---> arrow1l2p,arrow1r2p,arrow2l2p,arrow2r2p +---> arrow1t2p,arrow2t2p +; +ASM> CITY.TBL +; +citnames.img +---> ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND +---> LA_CLIP,LA_LAKS +---> MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT,SEA,UTAH,WASH +---> TORO,VANC +---> SCOR18_0,SCOR18_1,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5 +---> SCOR18_6,SCOR18_7,SCOR18_8,SCOR18_9 +; +ASM> LEDS.TBL +GLO> FONTTBL.GLO +; +leds1.img +ZOF> +COF> +---> QUARTR01,QUARTR02,QUARTR03,QUARTR04,OT01,OT02,OT03,OT04,SHOTPER,FREEPLT +---> MINCOL00,MINCOL01,MINCOL02,MINCOL03 +---> TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 +---> TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 +---> LED_00 +IHDR SAG:L +;These images are not referenced - but needed... +---> LED_0,LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LED_9 +---> LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,LED_17,LED_18,LED_19 +---> LED_20,LED_21,LED_22,LED_23,LED_24,LED_25,LED_26,LED_27,LED_28,LED_29 +---> LED_30,LED_31,LED_32,LED_33,LED_34,LED_35,LED_36,LED_37,LED_38,LED_39 +---> LED_40,LED_41,LED_42,LED_43,LED_44,LED_45,LED_46,LED_47,LED_48,LED_49 +---> LED_50,LED_51,LED_52,LED_53,LED_54,LED_55,LED_56,LED_57,LED_58,LED_59 +---> LED_60,LED_61,LED_62,LED_63,LED_64,LED_65,LED_66,LED_67,LED_68,LED_69 +---> LED_70,LED_71,LED_72,LED_73,LED_74,LED_75,LED_76,LED_77,LED_78,LED_79 +---> LED_80,LED_81,LED_82,LED_83,LED_84,LED_85,LED_86,LED_87,LED_88,LED_89 +---> LED_90,LED_91,LED_92,LED_93,LED_94,LED_95,LED_96,LED_97,LED_98,LED_99 +; +---> LED_100,LED_101,LED_102,LED_103,LED_104,LED_105,LED_106,LED_107,LED_108,LED_109 +---> LED_110,LED_111,LED_112,LED_113,LED_114,LED_115,LED_116,LED_117,LED_118,LED_119 +---> LED_120,LED_121,LED_122,LED_123,LED_124,LED_125,LED_126,LED_127,LED_128,LED_129 +---> LED_130,LED_131,LED_132,LED_133,LED_134,LED_135,LED_136,LED_137,LED_138,LED_139 +---> LED_140,LED_141,LED_142,LED_143,LED_144,LED_145,LED_146,LED_147,LED_148,LED_149 +---> LED_150 +---> LED_MAX +---> LED_0A,LED_1A,LED_2A,LED_3A,LED_4A,LED_5A,LED_6A,LED_7A,LED_8A,LED_9A +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> TEXT.TBL +; +trogf15.img +COF> +PON> +---> FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 +---> FON15A,FON15B,FON15C,FON15CR,FON15D,FON15E,FON15F,FON15G,FON15H,FON15I +---> FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P,FON15Q,FON15R,FON15S +---> FON15T,FON15U,FON15V,FON15W,FON15X,FON15Y,FON15Z,FON15and,FON15apos +---> FON15apos1,FON15ast,FON15backsp,FON15brackl,FON15brackr,FON15break +---> FON15carr,FON15colon,FON15comma,FON15dash,FON15doll,FON15engPOUN +---> FON15equal,FON15excla,FON15forsp,FON15la,FON15lb,FON15lc,FON15ld +---> FON15le,FON15less,FON15lf,FON15lg,FON15lh,FON15li,FON15line,FON15lj +---> FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp,FON15lq,FON15lr +---> FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx,FON15ly,FON15lz +---> FON15more,FON15paren2l,FON15paren2r,FON15parenl,FON15parenr,FON15perc +---> FON15period,FON15plus,FON15poun,FON15quest,FON15quote,FON15rquote +---> FON15semicol +; +trogf7.img +---> FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H,FONT7I,FONT7J +---> FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P,FONT7Q,FONT7R,FONT7S,FONT7T +---> FONT7U,FONT7V,FONT7W,FONT7X,FONT7Y,FONT7Z,FONT7a,FONT7b,FONT7c,FONT7d +---> FONT7e,FONT7f,FONT7g,FONT7h,FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n +---> FONT7o,FONT7p,FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT71,FONT72 +---> FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79,FONT70,FONT7excla +---> FONT7pound,FONT7doll,FONT7percen,FONT7and,FONT7ast,FONT7parenl +---> FONT7parenr,FONT7dash,FONT7line,FONT7equal,FONT7plus,FONT7bracl +---> FONT7bracr,FONT7backsp,FONT7paren2l,FONT7paren2r,FONT7break +---> FONT7semicol,FONT7apost,FONT7colon,FONT7quote,FONT7comma,FONT7period +---> FONT7forsp,FONT7less,FONT7more,FONT7quest +; +ASM> ROBOIMG.TBL +GLO> ROBOIMG.GLO +; +robotron.img +COF> +---> robo_bad,bullet_hrz,bullet_vrt,bullet_bck,bullet_fnt,grunt_1,grunt_2 +---> grunt_3,robo_dead +;---> brain_l1,brain_l2,brain_l3,brain_r1,brain_r2,brain_r3 +;---> brain_d1,brain_d2,brain_d3,brain_u1,brain_u2,brain_u3 +---> enf_1,enf_g1 +---> enf_g2,enf_g3,enf_g4,enf_g5,spark_1,spark_2,spark_3,spark_4,man_l1 +---> man_l2,man_l3,man_r1,man_r2,man_r3,man_d1,man_d2,man_d3,man_u1,man_u2 +---> man_u3,skull,one_k,two_k,three_k,four_k,five_k,mom_l1,mom_l2,mom_l3 +---> mom_r1,mom_r2,mom_r3,mom_d1,mom_d2,mom_d3,mom_u1,mom_u2,mom_u3,dad_l1 +---> dad_l2,dad_l3,dad_r1,dad_r2,dad_r3,dad_d1,dad_d2,dad_d3,dad_u1,dad_u2 +---> dad_u3,kid_l1,kid_l2,kid_l3,kid_r1,kid_r2,kid_r3,kid_d1,kid_d2,kid_d3 +---> kid_u1,kid_u2,kid_u3,hulk_l1,hulk_l2,hulk_l3,hulk_ud1,hulk_ud2,hulk_ud3 +---> hulk_r1,hulk_r2,hulk_r3,rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5 +---> rfont_6,rfont_7,rfont_8,rfont_9,rfont_exc,rfont_comma,rfont_period +---> rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g,rfont_h,rfont_i +---> rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o,rfont_p,rfont_q,rfont_r +---> rfont_s,rfont_t,rfont_u,rfont_v,rfont_w,rfont_x,rfont_y,rfont_z +---> rfont_lparens,rfont_rparens,rfont_fslash +;---> rfont_arrow +---> wave_text,circle_1 +---> circle_2,circle_3,circle_4,circle_5,circle_6,circle_7,circle_8,rsmall_0 +---> rsmall_1,rsmall_2,rsmall_3,rsmall_4,rsmall_5,rsmall_6,rsmall_7,rsmall_8 +---> rsmall_9,grunt_xv1,grunt_xv2,grunt_xv3,grunt_xv4,grunt_xdb1,grunt_xdb2 +---> grunt_xdb3,grunt_xdb4,grunt_xh1,grunt_xh2,grunt_xh3,grunt_xh4 +---> grunt_xdf1,grunt_xdf2,grunt_xdf3,grunt_xdf4,star_1,star_2,star_3 +---> crystal_1,crystal_2,crystal_3,diamond_1,diamond_2,diamond_3,R2084_1 +---> R2084_2,R2084_3,pcube_1,pcube_2,pcube_3,spiral_1,spiral_2,spiral_3 +---> square_1,square_2,square_3,triangle_1,triangle_2,triangle_3,rectangle_1 +---> rectangle_2,rectangle_3,enf_xv1,enf_xv2,enf_xv3,enf_xv4,enf_xv5,enf_xb1 +---> enf_xb2,enf_xb3,enf_xb4,enf_xh1,enf_xh2,enf_xh3,enf_xh4,enf_xf1,enf_xf2 +---> enf_xf3,enf_xf4,tank_g1,tank_g2,tank_g3,tank_g4,quark_1,quark_2,quark_3 +---> quark_4,quark_5,quark_6,quark_7,quark_8,tank_1,tank_2,tank_3,tank_4 +---> shell +CON> +; +;  ;THESE ARE CHARACTERS TO MAKE DIFFERENT! +ASM> IMGTBL.ASM +GLO> BGNDTBL.GLO +; +BBB> BLANKJAM +; +BBB> TEAMSEL4 +BBB> ENTER4 +BBB> OPTSCR +;BBB> VSSCR +BBB> SPORTBG +BBB> ATTRACT +BBB> HALFTIME diff --git a/BACKUP/ART100/MUGS1.IMG b/BACKUP/ART100/MUGS1.IMG new file mode 100644 index 0000000..89bb639 Binary files /dev/null and b/BACKUP/ART100/MUGS1.IMG differ diff --git a/BACKUP/ART100/MUGS2.IMG b/BACKUP/ART100/MUGS2.IMG new file mode 100644 index 0000000..a9929ea Binary files /dev/null and b/BACKUP/ART100/MUGS2.IMG differ diff --git a/BACKUP/ART100/MUGS3.IMG b/BACKUP/ART100/MUGS3.IMG new file mode 100644 index 0000000..1936988 Binary files /dev/null and b/BACKUP/ART100/MUGS3.IMG differ diff --git a/BACKUP/ART100/MUGS4.IMG b/BACKUP/ART100/MUGS4.IMG new file mode 100644 index 0000000..f3a9586 Binary files /dev/null and b/BACKUP/ART100/MUGS4.IMG differ diff --git a/BACKUP/ART100/MUGSMSC1.IMG b/BACKUP/ART100/MUGSMSC1.IMG new file mode 100644 index 0000000..c236751 Binary files /dev/null and b/BACKUP/ART100/MUGSMSC1.IMG differ diff --git a/BACKUP/ART100/MUGSMSC2.IMG b/BACKUP/ART100/MUGSMSC2.IMG new file mode 100644 index 0000000..310e5a8 Binary files /dev/null and b/BACKUP/ART100/MUGSMSC2.IMG differ diff --git a/BACKUP/ART100/MUGSMSC3.IMG b/BACKUP/ART100/MUGSMSC3.IMG new file mode 100644 index 0000000..a3675a1 Binary files /dev/null and b/BACKUP/ART100/MUGSMSC3.IMG differ diff --git a/BACKUP/ART100/MUGSMSC4.IMG b/BACKUP/ART100/MUGSMSC4.IMG new file mode 100644 index 0000000..14a97fc Binary files /dev/null and b/BACKUP/ART100/MUGSMSC4.IMG differ diff --git a/BACKUP/ART100/MUGSMSC5.IMG b/BACKUP/ART100/MUGSMSC5.IMG new file mode 100644 index 0000000..caab341 Binary files /dev/null and b/BACKUP/ART100/MUGSMSC5.IMG differ diff --git a/BACKUP/ART100/MUGSMSC6.IMG b/BACKUP/ART100/MUGSMSC6.IMG new file mode 100644 index 0000000..869a9cd Binary files /dev/null and b/BACKUP/ART100/MUGSMSC6.IMG differ diff --git a/BACKUP/ART100/MUGSMSC7.IMG b/BACKUP/ART100/MUGSMSC7.IMG new file mode 100644 index 0000000..cf68eaa Binary files /dev/null and b/BACKUP/ART100/MUGSMSC7.IMG differ diff --git a/BACKUP/ART100/MUGSMSC8.IMG b/BACKUP/ART100/MUGSMSC8.IMG new file mode 100644 index 0000000..ce2bfaa Binary files /dev/null and b/BACKUP/ART100/MUGSMSC8.IMG differ diff --git a/BACKUP/ART100/NBACROWD.IMG b/BACKUP/ART100/NBACROWD.IMG new file mode 100644 index 0000000..fac4024 Binary files /dev/null and b/BACKUP/ART100/NBACROWD.IMG differ diff --git a/BACKUP/ART100/NBAFADES.IMG b/BACKUP/ART100/NBAFADES.IMG new file mode 100644 index 0000000..47bdf26 Binary files /dev/null and b/BACKUP/ART100/NBAFADES.IMG differ diff --git a/BACKUP/ART100/NBAFHOOK.IMG b/BACKUP/ART100/NBAFHOOK.IMG new file mode 100644 index 0000000..0ae3a0b Binary files /dev/null and b/BACKUP/ART100/NBAFHOOK.IMG differ diff --git a/BACKUP/ART100/NBAJMPPS.IMG b/BACKUP/ART100/NBAJMPPS.IMG new file mode 100644 index 0000000..4bcedc2 Binary files /dev/null and b/BACKUP/ART100/NBAJMPPS.IMG differ diff --git a/BACKUP/ART100/NBALL.IMG b/BACKUP/ART100/NBALL.IMG new file mode 100644 index 0000000..f2fd2d1 Binary files /dev/null and b/BACKUP/ART100/NBALL.IMG differ diff --git a/BACKUP/ART100/NBASPNMV.IMG b/BACKUP/ART100/NBASPNMV.IMG new file mode 100644 index 0000000..3811406 Binary files /dev/null and b/BACKUP/ART100/NBASPNMV.IMG differ diff --git a/BACKUP/ART100/NBA_DEF1.IMG b/BACKUP/ART100/NBA_DEF1.IMG new file mode 100644 index 0000000..202fc48 Binary files /dev/null and b/BACKUP/ART100/NBA_DEF1.IMG differ diff --git a/BACKUP/ART100/NBA_DEF3.IMG b/BACKUP/ART100/NBA_DEF3.IMG new file mode 100644 index 0000000..c68a49e Binary files /dev/null and b/BACKUP/ART100/NBA_DEF3.IMG differ diff --git a/BACKUP/ART100/NBA_DEF4.IMG b/BACKUP/ART100/NBA_DEF4.IMG new file mode 100644 index 0000000..6fe4658 Binary files /dev/null and b/BACKUP/ART100/NBA_DEF4.IMG differ diff --git a/BACKUP/ART100/NBA_DNK1.IMG b/BACKUP/ART100/NBA_DNK1.IMG new file mode 100644 index 0000000..23bc494 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK1.IMG differ diff --git a/BACKUP/ART100/NBA_DNK2.IMG b/BACKUP/ART100/NBA_DNK2.IMG new file mode 100644 index 0000000..89172a9 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK2.IMG differ diff --git a/BACKUP/ART100/NBA_DNK3.IMG b/BACKUP/ART100/NBA_DNK3.IMG new file mode 100644 index 0000000..65b40dc Binary files /dev/null and b/BACKUP/ART100/NBA_DNK3.IMG differ diff --git a/BACKUP/ART100/NBA_DNK4.IMG b/BACKUP/ART100/NBA_DNK4.IMG new file mode 100644 index 0000000..97aa888 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK4.IMG differ diff --git a/BACKUP/ART100/NBA_DNK5.IMG b/BACKUP/ART100/NBA_DNK5.IMG new file mode 100644 index 0000000..6de9ce9 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK5.IMG differ diff --git a/BACKUP/ART100/NBA_DNK6.IMG b/BACKUP/ART100/NBA_DNK6.IMG new file mode 100644 index 0000000..a7e23ba Binary files /dev/null and b/BACKUP/ART100/NBA_DNK6.IMG differ diff --git a/BACKUP/ART100/NBA_DNK7.IMG b/BACKUP/ART100/NBA_DNK7.IMG new file mode 100644 index 0000000..3756803 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK7.IMG differ diff --git a/BACKUP/ART100/NBA_DNK8.IMG b/BACKUP/ART100/NBA_DNK8.IMG new file mode 100644 index 0000000..bdbb5c9 Binary files /dev/null and b/BACKUP/ART100/NBA_DNK8.IMG differ diff --git a/BACKUP/ART100/NBA_MAK1.IMG b/BACKUP/ART100/NBA_MAK1.IMG new file mode 100644 index 0000000..9ee1784 Binary files /dev/null and b/BACKUP/ART100/NBA_MAK1.IMG differ diff --git a/BACKUP/ART100/NBA_MSC1.IMG b/BACKUP/ART100/NBA_MSC1.IMG new file mode 100644 index 0000000..d9c497a Binary files /dev/null and b/BACKUP/ART100/NBA_MSC1.IMG differ diff --git a/BACKUP/ART100/NBA_MSC2.IMG b/BACKUP/ART100/NBA_MSC2.IMG new file mode 100644 index 0000000..1b4a762 Binary files /dev/null and b/BACKUP/ART100/NBA_MSC2.IMG differ diff --git a/BACKUP/ART100/NBA_MSC3.IMG b/BACKUP/ART100/NBA_MSC3.IMG new file mode 100644 index 0000000..926c427 Binary files /dev/null and b/BACKUP/ART100/NBA_MSC3.IMG differ diff --git a/BACKUP/ART100/NBA_MSC4.IMG b/BACKUP/ART100/NBA_MSC4.IMG new file mode 100644 index 0000000..045b9d9 Binary files /dev/null and b/BACKUP/ART100/NBA_MSC4.IMG differ diff --git a/BACKUP/ART100/NBA_PAS1.IMG b/BACKUP/ART100/NBA_PAS1.IMG new file mode 100644 index 0000000..5f9180b Binary files /dev/null and b/BACKUP/ART100/NBA_PAS1.IMG differ diff --git a/BACKUP/ART100/NBA_PAS2.IMG b/BACKUP/ART100/NBA_PAS2.IMG new file mode 100644 index 0000000..3d39ef7 Binary files /dev/null and b/BACKUP/ART100/NBA_PAS2.IMG differ diff --git a/BACKUP/ART100/NBA_PAS3.IMG b/BACKUP/ART100/NBA_PAS3.IMG new file mode 100644 index 0000000..0819b07 Binary files /dev/null and b/BACKUP/ART100/NBA_PAS3.IMG differ diff --git a/BACKUP/ART100/NBA_PAS4.IMG b/BACKUP/ART100/NBA_PAS4.IMG new file mode 100644 index 0000000..bb5f1b6 Binary files /dev/null and b/BACKUP/ART100/NBA_PAS4.IMG differ diff --git a/BACKUP/ART100/NBA_RUN1.IMG b/BACKUP/ART100/NBA_RUN1.IMG new file mode 100644 index 0000000..81490e0 Binary files /dev/null and b/BACKUP/ART100/NBA_RUN1.IMG differ diff --git a/BACKUP/ART100/NBA_RUN2.IMG b/BACKUP/ART100/NBA_RUN2.IMG new file mode 100644 index 0000000..75c8202 Binary files /dev/null and b/BACKUP/ART100/NBA_RUN2.IMG differ diff --git a/BACKUP/ART100/NBA_SHT1.IMG b/BACKUP/ART100/NBA_SHT1.IMG new file mode 100644 index 0000000..88f1481 Binary files /dev/null and b/BACKUP/ART100/NBA_SHT1.IMG differ diff --git a/BACKUP/ART100/NBA_SHT2.IMG b/BACKUP/ART100/NBA_SHT2.IMG new file mode 100644 index 0000000..1a6d2a2 Binary files /dev/null and b/BACKUP/ART100/NBA_SHT2.IMG differ diff --git a/BACKUP/ART100/NBA_SHT3.IMG b/BACKUP/ART100/NBA_SHT3.IMG new file mode 100644 index 0000000..f583f91 Binary files /dev/null and b/BACKUP/ART100/NBA_SHT3.IMG differ diff --git a/BACKUP/ART100/NBA_STN1.IMG b/BACKUP/ART100/NBA_STN1.IMG new file mode 100644 index 0000000..7cb1c20 Binary files /dev/null and b/BACKUP/ART100/NBA_STN1.IMG differ diff --git a/BACKUP/ART100/NBBD8.IMG b/BACKUP/ART100/NBBD8.IMG new file mode 100644 index 0000000..4a26aae Binary files /dev/null and b/BACKUP/ART100/NBBD8.IMG differ diff --git a/BACKUP/ART100/NEWLOGOS.IMG b/BACKUP/ART100/NEWLOGOS.IMG new file mode 100644 index 0000000..3b78aba Binary files /dev/null and b/BACKUP/ART100/NEWLOGOS.IMG differ diff --git a/BACKUP/ART100/OFFNBA.IMG b/BACKUP/ART100/OFFNBA.IMG new file mode 100644 index 0000000..0b4b600 Binary files /dev/null and b/BACKUP/ART100/OFFNBA.IMG differ diff --git a/BACKUP/ART100/OGMD10.IMG b/BACKUP/ART100/OGMD10.IMG new file mode 100644 index 0000000..5677505 Binary files /dev/null and b/BACKUP/ART100/OGMD10.IMG differ diff --git a/BACKUP/ART100/OPTSCR.BDB b/BACKUP/ART100/OPTSCR.BDB new file mode 100644 index 0000000..e20dfd3 --- /dev/null +++ b/BACKUP/ART100/OPTSCR.BDB @@ -0,0 +1,17 @@ +OPTSCR 2000 1000 255 2 8 14 +OPTSCR 887 1414 357 638 +BKGD 245 757 191 513 +4000 297 228 0 0 +4000 297 332 15 7 +4000 297 406 C 4 +4000 396 228 3 1 +4000 497 228 9 3 +4000 497 332 12 6 +4000 497 406 F 5 +4000 597 228 6 2 +4000 963 513 15 7 +4000 963 409 0 0 +4000 1062 409 3 1 +4000 1163 513 12 6 +4000 1163 409 9 3 +4000 1263 409 6 2 diff --git a/BACKUP/ART100/OPTSCR.BDD b/BACKUP/ART100/OPTSCR.BDD new file mode 100644 index 0000000..9ba7384 Binary files /dev/null and b/BACKUP/ART100/OPTSCR.BDD differ diff --git a/BACKUP/ART100/OPTSCR.IMG b/BACKUP/ART100/OPTSCR.IMG new file mode 100644 index 0000000..84e52a2 Binary files /dev/null and b/BACKUP/ART100/OPTSCR.IMG differ diff --git a/BACKUP/ART100/OUTDOOR.BIN b/BACKUP/ART100/OUTDOOR.BIN new file mode 100644 index 0000000..fca5620 Binary files /dev/null and b/BACKUP/ART100/OUTDOOR.BIN differ diff --git a/BACKUP/ART100/OUTDOOR.IMG b/BACKUP/ART100/OUTDOOR.IMG new file mode 100644 index 0000000..0c05275 Binary files /dev/null and b/BACKUP/ART100/OUTDOOR.IMG differ diff --git a/BACKUP/ART100/PLYRNAME.IMG b/BACKUP/ART100/PLYRNAME.IMG new file mode 100644 index 0000000..33d88f5 Binary files /dev/null and b/BACKUP/ART100/PLYRNAME.IMG differ diff --git a/BACKUP/ART100/PLYRNUBS.IMG b/BACKUP/ART100/PLYRNUBS.IMG new file mode 100644 index 0000000..0a795d9 Binary files /dev/null and b/BACKUP/ART100/PLYRNUBS.IMG differ diff --git a/BACKUP/ART100/PNAMES.IMG b/BACKUP/ART100/PNAMES.IMG new file mode 100644 index 0000000..91f9fef Binary files /dev/null and b/BACKUP/ART100/PNAMES.IMG differ diff --git a/BACKUP/ART100/PNAMES2.IMG b/BACKUP/ART100/PNAMES2.IMG new file mode 100644 index 0000000..fef47d9 Binary files /dev/null and b/BACKUP/ART100/PNAMES2.IMG differ diff --git a/BACKUP/ART100/PRIVILG.IMG b/BACKUP/ART100/PRIVILG.IMG new file mode 100644 index 0000000..4d05b72 Binary files /dev/null and b/BACKUP/ART100/PRIVILG.IMG differ diff --git a/BACKUP/ART100/PRIVILG2.IMG b/BACKUP/ART100/PRIVILG2.IMG new file mode 100644 index 0000000..27001a8 Binary files /dev/null and b/BACKUP/ART100/PRIVILG2.IMG differ diff --git a/BACKUP/ART100/PRIZES.IMG b/BACKUP/ART100/PRIZES.IMG new file mode 100644 index 0000000..ccd5991 Binary files /dev/null and b/BACKUP/ART100/PRIZES.IMG differ diff --git a/BACKUP/ART100/REFEREE.IMG b/BACKUP/ART100/REFEREE.IMG new file mode 100644 index 0000000..2464c90 Binary files /dev/null and b/BACKUP/ART100/REFEREE.IMG differ diff --git a/BACKUP/ART100/ROBOTRON.IMG b/BACKUP/ART100/ROBOTRON.IMG new file mode 100644 index 0000000..f5c6f98 Binary files /dev/null and b/BACKUP/ART100/ROBOTRON.IMG differ diff --git a/BACKUP/ART100/SGMD8.IMG b/BACKUP/ART100/SGMD8.IMG new file mode 100644 index 0000000..b9fe13f Binary files /dev/null and b/BACKUP/ART100/SGMD8.IMG differ diff --git a/BACKUP/ART100/SPARKS.IMG b/BACKUP/ART100/SPARKS.IMG new file mode 100644 index 0000000..04fa07e Binary files /dev/null and b/BACKUP/ART100/SPARKS.IMG differ diff --git a/BACKUP/ART100/SPORTBG.BDB b/BACKUP/ART100/SPORTBG.BDB new file mode 100644 index 0000000..c1509f9 --- /dev/null +++ b/BACKUP/ART100/SPORTBG.BDB @@ -0,0 +1,8 @@ +SPORTBG 2000 1000 255 1 6 6 +SPORTBG 82 492 94 434 +A00 174 308 9 3 +A00 174 223 6 2 +A00 174 143 0 0 +A00 374 308 F 5 +A00 374 223 3 1 +A00 374 143 C 4 diff --git a/BACKUP/ART100/SPORTBG.BDD b/BACKUP/ART100/SPORTBG.BDD new file mode 100644 index 0000000..4161c40 --- /dev/null +++ b/BACKUP/ART100/SPORTBG.BDD @@ -0,0 +1,720 @@ +6 +9 200 90 1 +utjsrqfslrpfrrirbfp\ildddhhddj`bgddee__d^\Z][[dT]WXXM^TTPPUeeeSYBJKOCOMNUNZCKVLSFHOIEEEHJHFBRB0FD@@D<<;F=???B9=?1B1=6;4445885;43?146&3545+*4%321)6*+$+,$*&(%2& +(//*) """!! +! +rrkjxfiiivqfrbjipaaihhlggg^^ddddgbf\g_eXd[dXd\VbT[dU[T[XZfKKKKKfHOOOLOHRSNeEPIFHGNGLKB0`B?FDLCFF;D@O<2F;;;;<=8>@=1?:=?2?<3;;9;3<22255&<4565632!1%343%%%&()2%)$+***"&!"&"$#! ! xqppfvqffwjslhljqfpqqfcldgghhd[__d[^gjVYcWW^[[[[WSbaaaYYVZPTMSFPOKYCVKRKFOVKRHHJ`J0RHFFIIDOD@F??H<==F<<;:@=?1?1?=;==5::9=22?13864?334)54%2123332((%(65!&())))"&1(&&"""$""/pxf{qxxxsttlltlkjbiiqpbhhhh_gjch[g^W^c\aYZcW^W^[X^ZYRRYYYZTWPLOPOSPSHKYVHVF7=2<<1246=25534;&223%&43%(*54*(%1!!% )%/1%%!%"## %#"  / +pqivxppskleultkkkjb\pqrhhdg[gbbgkccgd[]YaZWW^XTTTSVRKHYY?Y]PWTMTMMMMSLLFFHK?RRRR0RHLICOCFFHHBB?=C;H6=3;213;?15+844221!3&3&356(3&%2&(43!12&0&%*$"""("""" + ppirxieutttkklgtgktldlbichhdk^kfVbcjZ]g^bZZY\aKYYKfS^TUSRRK`HOSLSZIMPPI`RKKHHKFOCLFF;LD;??<D??<<<=C===9@9;<2?1?223=66=333<3334&212(32%2!%2%21!%&()(#$#"( $# !qvqqqxaqjkleulkltgudgggdllkjckd]Jf]^ghd[d_[b\YYpK\WPWWP\JRKYaRSMGPVLLSV?KHD><0<>F?2?<<=1?=;433=5321222<(5%332112&32!()(%3 )(!&+") *"###&"#"!!&%!   rivq{ppqivxoxjllksscsgcanqj^gk^gcfaaaaYYZS]^TbYS]bPTP\YOVZWPO`BRYKKVHHFHOLLLH?KKAA:=00B?<3;6;4==;;32?12<243!222&4&3!!1!6(23**)&%4") "##"#"&"% +  q{fxxqvwrfoop\ssssjbskjaaYbqbkgboRaffaaVfbWWW]Y]]]WT^OYYaHOVJnJRYFZOOFKKVLLHRKR?KFH?KGGC???BBH8C>:@@>:DD8@>CA981J12842222?122211133112&5)3%212%!1&(!1()%&&1! %%      + + ypxxxaxfxyaxvqfirvfffpaaitk]rYibbbiRfjWc]]]]]Za`RRJ`K\\VVVYRRKYHVKHOOHaFLOHKKR0?OAD89;=898201<22<22212122!04***)0//022%4!%(&!(!&%!  ! +  +  oopo`yxxxxvqiqvffqpyqijjff\bbjbZifJ```nR\YJRaR`RaVaKYHOOVVKRRaKRKHHFOOFK?RRKFF?BFDGNGICCFCCFBB1BJ?/F9D899D89D9;?1B%=321111211233=6+:75%1!(%3&!2))&2%!!%0%!!% "!   }a{yyxfqfqivqfrriqafirjjbffbji\b\pn`ooRaRnnao``\Z\VaRKYVVRRRRKOVYVOZOHY?RBVILHRFODMADCLDCCF;FF?B0B?<8<=;C8D::88<00?<211112;3?335&(+*)()(66 40&)1%(%!%%%%"  +   oyyayp{fypqqfxrrfofsbiijjafr]bbjjY``oaYa`nn``RKZ\VfVfYfKaRKYVOOYKHLO?BRRBRSIKBRCIG@LLCDDIDCC@@CK@C;CC;;<0B0228968582B1?10?576323455&/2&5(*+6(&(%0!0%&! !!!! +  + +  z`nnzoyppypxpaooaxirrjjiqijjb\oai\```aYYYaaYYaRRYVYRaVYYYYB`\LVaB`J?YKRRCOLPPOK?BFLCFFDD=R>?0D2<;615C237,:/?1:,119/11,6,1,7.,11/#,#,#,,,1,%)-/"$.-%%))$,"00 1  "" "#"/" !##!!pjjiii\yhslddme^kke_^eenZdkTe_`V_M[WI]Wg[LoGWRRXHXMHbRUYSKZN\C[WCLQP88GG[CL9WCDJH9?HD9HDQDMHHH9WCCC?:@90?>:08?2<2@:GC6379C??1?1001/?0C/910-79"1#/11?,--"1,)...%/#').&*/ "!   " " 0"" !!ji\zaijr[akm`nlk]d_dXpZf_eYde_`^dQaLiagGWLLbYOZYXMoW[HUKOVOM[GC8gHWGgPLHHHH?CWLH\?HJJIH1LDHC??1C???:6D?D<;950D>;>99972:11010099/?1-:,,,!01//"1/--$10/-/ 1)&.))."/-)*+(%F !! 1!! !"#1#"!"r\csicjXrrke_eeennedib^__e^^_Zd]d]iGLGGW\a[TVZ^^OZQP8PMZVOKMG[L[[LLC[LMQQQMDMDH?C?DJ>M9LH?CC?0GC9D::D??B<2:C517>,?0G?:/1::-9-.,:::-6-/0 C/6-,"#,15 ..,")*1 "/+*&&&%1  ""5 !!!"-$"##"!""""sppbijjsarXkdd_nnee_diik^d_ff^]T``b[oWWoC[MVZ^SVVOR\PG[NOTSSMHHHLLC[GWDD:LI@HL?LCWDI@?H>>?C?H:W9::HHCC;O7G52B3>9G0:@-?C19:6,/,:,1/:-,16.$?110 /:#1,..!,**.#.,"/0!*'))+&!!! 1"  !""###$$#!## "!""ppbrraarrQazike__e_ff]i\bpn`_d^ffOa[\aWW[\T^YMRZZTRQL\MIRRSNTX\L?[GC[?LaW?HDHW9M@@DHCC@@9?9@:H/DD:9CC2A;@CC;<>9?972900?,6-9C1?1?11//0!,:/!/-,9#/00../0!2()).)/%-$,/#%)'*&" "$"5 !##"""""!! !5"#!csrabbzWsksP[jeddeff_kciaQdedYZ`VrFG\QLaRZ_U]aQNYTXD\IM\HRTENM?WHQWGWMI?[LLCGCMJ@M@LCL9LLCCH9LC9H91?=B=>6?H7D90?7>D1C?,9,9!C,,001.@!G// 00:-,,,1!##1!51&2).%)).)*'%/-&&&%15#$" 0""!""""## !#" ! #iaospjscq]iobp`mdenZleYc\kcXYen^[Fg[o[WQd_UTUYRTYRITY]WGQINSIPG\IIDQISIHD@@LGWD@MQ9Q@@HCCC?CC?C9CGCBBA>2=<>71559761C-:,,/00,6:,9.7-/-66150/,,//---/00 1#-&-..-&(+*)%%.()"!!! $#"""!"$$""#"!#%#"rozbjsjk]iarcbq_n_ele^ek]hWrd__QFg[bQWaMR]dT`VXT^YTOOQG[WiMMGPPLID\@S@LLIMHH9HHHD?9@@9W?1?D:CC9>,C>B=;29C0?::99?0C,:,162,19.6//"1//#1,.-/0111/#$-)(*&.*')')%%&,!!50"#""#"!##"!##!5" !!rbsirjss\ra\s\tdmnmlYdedjgPXTeQxPabb\X]R\\YT^O^SYZ`VURLL[GDGGGW?LHHMML??L9L?HMMLGGHHHW?LHDH99@>DH6;E7>JBB=D80>E7/1191/90?,991?/-911///111,:15 /,/0!"##/"1.**.&%"-'))# ,"!0!!"!!""/#! "!!! #"  sptb{\aroz\jjrace_n_e_`djarbaLgxhLQLbT_ZRaMYTYY]RUVTYKS\W[Pg[L\HWaHDWC?\?CWLMII9WD@LCC?9999?LDD:H@6>>>=BA21F?E.?C:9//? G,6-,119/0!1/1 0!,6-/1,-1 !/,//"5#-#"-&5$&)'!FF !#"!!!!!$$"0  ##"/!pcjjc|ijbbjkYjWzkn_eff_dk]d\Pgxhaa[bd_`UeSXYTY]YTXXSSTNMQQWh?QHHMI@XQL9QHWC?D@L?@JDL??D9LC??:L19:H96ABBB<>C06,?11:/?991?66,9:.,::9/9/050:,/17.,11/,#"10 !08#&*%)((." F !#"!"$#$""""!1## ! bjtjscjjbpkkpXiabke^n_qd__RhhPhLQLi]YT^^^ZYXYU^VOM[HYSXXDQH?\QQbMSXDHQQ9LLHHHLCL>@L?HD9LL1?:D99W0C0@=BB=>;>:9C0G1C19,:::,:,,-7:-,,,/1!1,/11/%:11,$//"00/,0!-)'**(*#0  !0 "-%$"""#!"$# !! r{\irssssjtcjjcpii]edYdZfeaPoa\bri^Z^XY^T^Tb\TVVTSaaSYQGLa\LL?LDD@DHW??WLHMIH[WH\CW?L?L?99D:LD@9?CC>=BA;7DH@J<<>><<>W819::?C/,C0973619,1509,/#,/11-699,,#,/"/,-#1!1#---&-$ 8 "##/###""%$" """#"!!!$psr{pkppqltspkj\raobe`nsgxhiba[rWX^^T]c]TTdZVcQSTTRM[PGLQH\XERHHXMHWHMQHQLCWHQHHLL:H\?9@:?>N;JJ>>>EB;<<>>3E/5?,:D,9/9::000/?1C01!C!0",:,9,/0//1!/-, #%,--#! 5F 0 0/#!!#%$$"""%!!   tsijjjcjcppjcjsbbjpcz[[oaiab]de`_Xa^V_^Y\\]R]Si8aGL\LiHLLMIRXQWWWCWHDQ?CHI@@HLLDHDDDD:9H>@EAA;;;>>>2>15/76,911,:,-,110 1:,10/,,,///,,-,"#-,"11?,$$"%-#!F !0 "%&$#!!!1!#$ "#"! %jbpqqjijukldcsraspXj\[[WiWbde_Ze^pW]_^YZ_Xb]SRQ[PP[L\W\MMHXIDL\HLW?HQL\IJ@\W?L?M@DLL:L?H9@@@E2E/G?6H?1:H?96:9//1509,/,6:/91!"/--,1"-#1",$#","!--"!!!!"!0 !"!"$%"!!/! ""%" "!$|jqwqjjpqcqpsarjjbrarrWWW\]lnZ_l]]RibdTZVSMYY]RQWy[WLLRTYIQQH?HMQH\HLCME@H?LCW?LHH???L?H:H99@@;E>J/01116;799:/1/:11,9/0-%#,),001,#"!//00#-,,#! !1""0"#"""""#$#""!!##! $""""rjdqjstqtiiiirjelX\aaWaab]dZe]]dTe_bWXd^YdYYYSQaGW\WhWSTIH\?[[HHL?LLCCHDQ?LIMDH9WC0WJ>>HH1CW7@>;>>>;;;;>;4=;2,G05C7)9/9?05?111//00?1,734$,,"050/"""/###,,/$#0 !""!!#%-#"" $! !#"#!!  !tpjssbkkjsi[oi]lprr\biaad___eiaY_ZT\\\RY]]S]XCoG[HQMXRIXDaL?CW?WLWWLWMIWGWL@@H9L9WCJBBAJHCCC9H?:@;>;>7>>;;3;;90?96,////1005 111?0#/16)*)://!/"//$-,/,//#$,/"! ! 0!#$$"""#/! $#!!!!!  wqtrspqujbsiicksa\rbkji\ce_m^b[]^^]L[hbTT]XRLhPPaQITYSQLW[LQbH\CCW?HIJMHWLD\HHLH@DEKBAE;>H/GGPLH@7E4>7>276676?CC01,9/11011/,:622*-0!1 17%/,.,1"#"!1"#"!!1#,#! !$#"!!!#&$# %&!  $qssullpb|s\jmeproWajXb\\bd^ddYYld]a[G[WjRQ]\WGoL\QRTRD\\[CLDQLWH\L\MJML\JJM9C[CHDJEEANJ;A;S:5[PG?9@>;;<EA=A>/?9GP?09L:=<2;4A3;<:C0?7:911011:://1"72+B+-/1-#/!1""!01##/$$""""!!##!!%%##$#1"! !#"!#! #%$ riuvpiazrip]jraaccbj]kd_m]bde_^dXcoPPhhxP[[P[L\iQbXQ[[HXQLWWCGWLLQQ\LWLHHH9CDM:J>JJENEA=AANEANABBEEEJ;J;D9?5PFg81C6>>;3<4<2/C??05!/?,/119)2.)3*7..++-!/#1"$.,""/"1!10!!"! #/! !!!"#""%! !"wmqsaoajmejaarriiikYm^neQy[\bY]kdbWg[icXQ\Q\W\RRbIRb\LLWC[CLHQ\QMHW\JRQLaL0WH9WHKBAEAAE;J>I>;E>D?::C0G?::;<=;3<4;,051/9,?11,)<47/.*).)3$! ,/#1,$"111 1"! !###,%%#!"##!1#$$" # "'%#"wpsza|cvqs{o{]pjoiklnkkiaxi\ildd^dcGaXcQX]XQQ]ScMMQ\LL\L[CLQL\QQQQQMDHHW9MHHH[0LEKESEJJJ;A;;EAE;>>D0?:1G93=<;;3;26?0809:/1"C/3+43-0"7*3+)15 0$-"!0 "/#1"##/"##%%""$#! !$ $" !&  p{oo{kevjo[obqja[cdn_cp\Y]ckcYd^^ecLiMbLb]XLbSRbH\WGaQbQLQ\HL\HHL@IRHWGC\DHJMCC:@>J;E;J;KAEAAA;>3E>/?9CP0><2)3>6776?1,:/C10//3B4*60,4+2.-#,.),!!!",$"##"!1""/"#$"!"%#!"$#"# " azaspvvbaaasjbr[awfnmkk^m_l_kbbllT]i\aWrb\WLbQHHiQQWL\HWLbHaWDQ\Q@IHLLCWL9SJ@M:Q@JEEKA>E>76H?05C/:7;A;7>)>1?-/001:7-7+3*2/8#)*.*4.$*).#/$#,#/!1"1!0!!!" !" 5!$%$#!""! !$oitulk|azjukja[y\lfmdYlnm^l^diWckXX\baaXRQWQXXWaDMQiQHaCWLWWHXMMMM\LWDMDHIJJSJH??JEK=EJE>>>;@M><=>><<>11:G09<<3222?G1050.443-6*)3*1-1$)*()))&-//1",/! 0 0#$"!"#" !!$!!  #"{juvuizoztdjrooaj]kqkleedqYkcXrMkbo\\i]YcXX]S]bLiQ\?LWCCWWW\MQMIQLWCCQM\RJREKILWCIEEE>>>L0D;J2EA<79992;7771F5506+4B<,1-7*4-10/.*.)).$0! 5!! #""--##$##$,"1%%#"! !!$# tpqpsa\rsjbroackqcrbledkjLklYkja]aLao\XRMQbY]QLLLaLCWC[a\QIIMQMQL?H??L?JJSBBKEH?CJAJ@J;E@C9I<;A=N;2;;J3E3;;321C1/D055050C2;-627734.2+7-"11#.)7$0! 8!,,"/$/""/""!!"""!1!"$#! "#uupsrskpiro[appci[[ooobpkcke^cjW[xGo[o\\[oQL[[aQbLWLLQMQQHH\QbMHLHXDHWLIEKNEEJIHCHM>;AAAJD5L/C>J6@;J@@>;@@6,9C1550055-3+.:6)33+2)).)./8!,-#5 8!/#"!!"!"!"! !! "%!!##! ||bsss||aoatqecoyWroh\jqqk^ldi[xg[bbaQ]kQ\bbW[QbHLH\aL\Q\L\aLHMMHLHHLGLEBBSIIJ;DPG1JEEEE>@?[9=<;3B=3>;3>62J710 8855,3<;.,1.*2*3.#)4*,8 18880"!01!0! !"$,!-%" !#"""!## "% jissr\rhhyjwlcraass\[jkk^^qcbo\hGXcbi]YXXXRMbQM\WoaLWL\WW\IIQ\D\WCWPPGHNUNJEJSNJL5?JEA>@7J@W1AA<;BB<;<=4;;;>185P855:4B426-,/62-,-442%5!55  !""1 "$"!#$#"%!"%%%" !"! !'!{r{{\sso[zcktroscjibrijkmedcarWoipb\\RXb\bXi\LQa[CWWWMIQLIYX\\LLCLHWGCQQ;SJNKKEA>D72C8F80,6:3B42*.?!-*.)*2&))/"/" 1#/"###11,$#/$"!!%$! #$"" !" $ zrroo{aartks[hobjrazooacdcjo\o[W\\a\aL\aWQ\\aoWG[LQLHRXQQRI\WLWG[SMHLDHLWIJAKEJJ@L?@AE>E=A;J;J;;>;>6:2;>.@1F88585227-7;*23.08-:)3+).--/1#00#"!!,#!!$$/!"" !"!50#$" !" a{sroozzbqury[zara[[hhyaarhG[hazaro[rX\[oLaWWW\WLQQbQMQQQQWW?\L?RSJIMMHW9MJEESIJ>C5?I>JEEEEJJ<>I2<6C096@.?5855064=36/17323)?/-.2*3)" 1! 1! 0/!!!#""!"" ""0!"" """"$ sszy[ob}proari\a[oWaao[hx8xhh[o\b\LbXQaa\a[WHQHiQQQ\\aQ\\WG[HQYSJSNRILCW@NNI@JNAM?C:@>;E>>>HWJAEAAE;3<;>@9F88C555P58592<=3227.01,77.+*/ 8!!8"00"/"!""!#$#"#$#""##!!""&#!"  zhxyrjsoyozaraoo[arirriiz[oo[oaWzWa[[ooWoWo[WoCaQiLiXQWW\L?[HIXIKOKSJNJI9LHJJENJI@DGH>JEE;;;E>D?8gFF5558FFG,;44=6/66:,?"/6)3*6155880"""100! !//!/#"!/ !1""! ! '&&   |hrtso[orrr\aoyoiirri\ar\r[oWW[a\o[[[[[[GGWWWWaLWLQ\W[WWPP[LRNTKYJRNUKKRW1MSKKEJ>EHC9J>>JEEE6?555550G0G88:@2<<36-.2,:),9)3)7),0"1!550!!/#,!0""0 0! !,#!"$%# !!"8#& tprt|oyoarriro[orirriiariiaoWo[zLW[[o[[Ghh[W[W[W[[WWC[WWLW[PCXNNSJIINUKS>M9IJAE>JBBJ?L>E<>;AED850550C50/?16;6.<3762<3*777.,6...1 /15"" 0/,"!#,#!!!/"!#$"!#%%"  #$"$!  ptsioy[z{\{ay[zrirarraai\aooWoz\a[oW[[[hy[oWWLW[WLW[[[GGWW[PCMJRIIMISEJIJKNKESJJEBK;LDJAEEE;;@F888G011C?/6=39/)<<43434))320!7."F5 0 /%:"1""0!$,"1$,,#"!"1# "!"! siryxhoariayyar\raaaaarrooazoWrWooW[o[[h[[[WaWWWaoGGhGhPGGPG[LbIIRJNNJMDRAKEJJ@>EEE;LDI;;;>>@@955P5?9H1064<<71?*4<23276**6 ,,8 05!,%#1"" 5!""!!,###"! !#%5 #$! #   {oxyhyzzazyyorirrrrzaraooaWooaW[WWo[[[h[[[[WWoWaW[hG[hP\GhGWCPCbMIRSJIIJSEERIJSEEJ>@M99>JEE<>7@9?109:1G97;3==6/@3-9./0-37-1?, 0 5!,-#/!11"0""!0 0"#!"/#!"%$"!#!#%&  t[t{z[zoyhorsjssirrsia[oooa\zooWooW[h[oWo[[[[LW[G[[GhMMQQ\CP8GHM@JIMMIS;SR@IAAEJE>J>?g:@A0C0?910,@:6;=3;./00?/1,2.2,8505-&,1011!#,#"""!!""5 ##$$$!!"#!#   +touqtsroyorijjrrijjjbjbirrisiaLiraaW[[zWWWoG[WW[Gh[GhDXMXSRW5xPWI]IMD@IIJI@IJEJJ>SE;J@?L>;E;>>?50C?C89<<773;3<21F962*6)7)/888"-:!0"  ,#1!,,##$/!!/###"!!""((&    + }pvqpjryyri|bukcbssirtjsajl]ibbb\iayo\Q\\\WWaL[GhGGhQcXRSYRQ[58[IJMMIIIIMMMIJIII@@>J>;9?>>I>@C8C/?:2;=2:,>337:-,)+3*77.950//0 1,"1!1 0!,###$$""#! "#%#     uvl|t|~[sjtjjvkt|jiooi\arlksibaGW\b\aXcXj\ibQaW[[GPbRXJYY]MM\G[CHMMMIII@H:II@MMD@@@>>JHC@>@:G88851?93<;3<:1>;722:,7276-6,8F5/--,"00",""11 0!"#"$#!!""!"!##%$'   qmmu{ohtmwuppqtsjkjsir[oijibbXciicccXXXb\Qcbaaa?aoQRMRYNRMXMMH?[CQIIRI@MWLI>IM@@IM@>M@HCH@>?F55050996><;76/:*2;26:::-.,1F500%-/#,,#1#"1!,"""! !!!!$# $$$%'%!%&"   nnnq{hpmmmtsss\sjpbirisjb{WrbkkbicXbriLaicSMaCo\XbbQQSNSRMMMISMGhQIIIIMDCWLM@@I@@>I@6M6C5D0FF8g88G/C/63;7>.56;)72-5#:, 1 0,6#!?$#!0!0 "$#1"-$"!! #%#""#!%"  + + nfmu|svwwti{iiraarrazjcjrbj\icQzWbj\W\a[LRbi\QQiQ\W[Q]N]RcI]SJM\CHIIIMMID8G?MI@@I>@M@@@9G0FFFC11C09@73<>:1:77375?5105!,/5 "11 1 1"!1$%$"!""""#!!##%&&!   + + wmuuqmwluryosptizaohatjrikkXbiWoWr[hajXXbb\a\MiLaGGaMRRSSSYNYRIJIMRRIMMIM?GhL6I>I@@@@@@D0FFFF1D/GC1G07337705,727/888885/,,! !/05"//"!00"#,"!!$%$!! ""%($%  + + +tjtvmfmqtszrppirriozsioajkjirWho\iLaacpXiaWWLi\aWQiXMH\QJSNSSIRYTKNER>S>IHGF5WLI@@@@II@CFFFFFF?72905555,6677/0?.6.1F85!1,,,/,$/1!##/"!#,#"0 "&#! ! "#&#"   + o{qmnmpr|o[zj{azi{ijji{ssbbaoaaaiXbiiXX\WW[h[\QXR^ZURaWWMTTTTNNKKTSSKNESJM?FFGFCHM@@I>CFFFFFFC>;>@15P G0/6-66,,66,5880,-,///"//"!0//"0#.%#"! !"# "!"&''&&   +  xrvmwkz[hyor~[[oz\jsip]csi[[WjXi\bia\iaW[r\L]bXXYOT]RRX\bSSYYNYTNESETTEJSJLWP8FG?@@D@CFF8F889>>77:G ?GFG9:676:-6"88 C,-,!0!/1 0!0!!0 0$%#!"#,$#!$#"&'%%%!  y|uvthhhhPozrzy[zi{ajkpiiio[\ciWriLabiWGoQiYY]kTZY]]RYTTI\LISYNNRXJTEIJEAED?GPP88LM@0FFFFP0?977I6/C05850,76:,:1F851/#101!55  1/!5"$"0 "#$"!! "%$!!'("  haqvrhho{zzriroitsoassi{iQiib\ozaaorbQiaWiYYcYZZ^]XMRTUNXL8WLRTTNSTKTSENNSNID58PG8H?8FFFFFGCH10@6@>>/8P8F?:,,91FF!/1 50/15 !!00"!!#%-!5!""!!#"#$!$&''" + + +  {stioyzrra{iao{upi{cpsoaiiii{WoWriQi\iaWoR]]XTZTRRRRYYYYRRM\LMNNYKUNEENESEKS9[C99GC850G88CD;@:0W:6>7:C888550?!CFF51185 0 00!!0"-$"0 !$" "/"#" !""%' v|t~hhzrzoaoyotc{aplkciooabraiiibcj\aoWCckbM]dY]R]T^UTRMRYTRQHXSNSNSSJSR>SEJ9?HI@DC88GG8H795?@@:6/585/PPFF5115 G855! 5",#" !%$" ####""&&& +  uzryhyzyhoz[rszospqjroai\ooibi\jj\WW[[cTd]kT^RMbRTTT]SYYNTNQgLMIIRIXIJJJI>IH[?@D9GC[5g?AB<;E;:C966:69C?:0FFFF //05 5885 0#1 5 ",! 0!"1!"$""&     yoyyri{zor\tjrasjssiazjps[[ai\\\aWoWoXdk]YZZdcXbXRNYRTUTYYSMLHCCQENRJNNNJJJ@?GL9C?:9G1@NAN@CCPGH9CGDAE>C?69559:D>2277:90FF5//0550055 55"1 5 "#%""" &     + + + +yzs{{{{aho|travlts{r[[bbzoQjjQa\i\aakd]]]kYdRa[W\aL[\]S]SSJSTTILPGLQMSERIJKNE9GGGG?[1?>=E;:9@9C966/6;@776/88888 11580058855 55""  5 !%&$ "& +   zrzozoyyy{{[stjj{\sbti[hoijbrib\ro]d]X]Y]]XWhFoWPg[IRYSRRSTUNXWP8FCQJMM@JJEQP5W:L0??C@E;;>J7C?6;@99666:151!0/,/05 88 0 55"" 8  !$%&&! " !$  +    zoozrryhau|zspj~ooi|tiazorr\\ooarWa]]]]^^dYi[Fh[gg8WW\QISSTTSRJ\GGggCDJIISEWFFG9LCLJ@1?@J@J;DC@7779:779F8555/-76"C10588855"108 58 $$$%%#  " + +   +  yyr{azsujspvuujo[{tboabjiiro[z[Pooccjk^lYRcioQ[ggPGhGWiTUTSRIRRLGCC[\HMNAIGFFGC0?;KE9?9@><>9FC766>959/81C1C1/,91/?//0 5880!!8 0  !$$%$$% "$     +   +zoyzzor}tsttup|izrbro[{bi\raoa\rj\ajkYYk]]R]S\[5[\Q\GPPQSTSRRRIIL[CWWGL?JI0P8GGP5DE>J:[0:;J>>>:?7@61FF880/,62,9,/1"00 !//"1#$"88  !#%%%$$#$$$! "        + z{rzo{z{ss{tjooopproaisaozazaWcpc]]QikYk]R]TkQ[GabH\\b\CQRMXSYSSWgPLCGG?[FF8WCHJJ@>I@6??C:@@@>7H6661g855G/,9,///,1000 0,,,.-10   #$%$#$$$$&$       + + r{z{|ssqutt}sz[{jryatbs\raaaojp]kkkboikkkTeT]]\\LWaWaM\[LYSRSSSSL5aMQHQHG8g8GHJJA;>;;J6:G0H7>>7D-69850101::9/01?0100!//"/-..-#1#//"10 !  ###$&%$$%" ! + + +   oo{|{tqu|t}srztjoyoaiirzaazoXpckddkbog\RkeT]R^YX\W[[LL[GQNNRJNYRWWHHHM@WGGC[5D>J;S>>JE>9[00D;2@:9?8880?/:>.,?/1 550/-,C"6.$!/#/"/#"!!#-$!5"/#%#"     + + +  yzrzzuut{sroztus[ozzooooyoau]kYlkdkcPocYY]kYdT]\rL\X\GCbSRXRIMMLWWL\HWGCL?LCWLHI@>I;;>D9C?L66@698F880/:-6,?1/101C 0,/0 #,!05"""!!!0!$'$! !$$##$#      s}~ys}s{ssr{pryoirsso[oaoWocqkqdkdlkiabk]cR]Y]]MLbbHW[aQIXRNSMQ?PGL9LC[C?HHC9?9I@@JEJ@>>D9?1?9:P588C99/11111/11!111 0#.-00 00"! ")&$/## $&%#$$%        q}stu}sa{|sttayooibs\zoaatsi\cqkcckdk]cXbYd]Y]RRcQQLo[WLRMXSYYSIQCWW?HQHWLJJ9WLC?:JE;>7J>2@985?5g5C/66/?101000110//1506)$! 1"0!/#$%%$"#$" %&%&""%      +   +ti|pqu}sisjj~yoooarro[ratpkjrip]pccRkkkMiXYddddYd]\[5[\R]SS]ESSML\H?WHHCLIJI?GC0PW6J>M6J2J@6?g80,66::,/://C0 5!///:-%,150##/!"/,$%$"!!1!!"%%'&#!#     +   z|}tutsz~{j~hozz{so[yy[jppppaasdkdkcc]]biikTdSd^d]Q[P[MSSSRRR]SMHL[GWWC?@JJ?W?585P?@@@DD@@@@:P8FFC:69/:9/9,0505500/,-:15 1#1!00$-#"1"""5"" #&$$     ssr|||rz|syxo~isiroyhzcppkqkbyakkkkdqkkc\[QkS]YTSX]bQRcRSRXSSIIQCPPWLG[MRJM??[?P5G?D>J7L1H::P585?:,?0C//C01G 1--/!/.,10 5!!1! "/"""1##" """''$#$     0 200 80 1 +```I`I`_HYY`AfHX^S\cTYZZH^QmHN\MTYIXf;_IJRX@@Q@R2>BB11B1887111-544(;/4(<0-11161=/444/(;(//(4/$*)(0+1!+***%)(4#:5((4//4#'#/### ## $$$$#`YhRf_Hf_hI_XH^Q@TNMLYTKRHH^@T[TTZ<;XXARAH@_7C7>>>>1C76617B)Q444/4(<-=66616=(///;))@((5*=$;)-*+*0 -$/($/4:#(//#4/# #'###$$ )_RRgXHX^f_HXqA_XqK[[TT\YZaTZ10505@:4;)<+66+1++=-0(0;/44:4--%%5/=+* -$/-%#44#:# #4 #4/# :##4### $) fRqX_YYRHHq^HY`RAZZaKMMCLNNTIfISSKZ;WIKI_HRRA_X@QQ@HBBL7D8716-=121=06>0@/4Q/(-=*666226)//4:#(**-*-4%1**+$'( $#4: '#/#'(: /4##/## # #/$$ 'fR_X`SYR`IRA_YRXHKMMMTZaZT[ZSIH_SCLHHSIX_<_@;;Q@;@_AI11L871=*>>172>111=554#:Q5*2+++122/4:'#:;$/(-*1,%/(0****$5 0('4:##/ ######## ' ## #''### ')$)RYYR`Y_fIYRf_R_XfaM\[\[LaZJBT[AAKTXXXX@AIAA_@W4@RAII_@W@RA;@HBA);LC72>6<<>3827B666B1*0;4:'Q<7>+1264'4(:5+*)4) 1,*#/%--+**%$/'#: ##G#'#' G' +9 +'' ' +' +' ' + +''' +999 + 9 9)YYR___X@fH_;HHQ^HIYB[CZLJXJaZMH:R@;@eW^@@_R_@@X;AIIH;@/;5H;X6A@;73871=A517B6116-B*<<6*;/5A+1111;9 +:4:#;+*00/5*1 4:5 +*%$/' + +''''' :''' #'''9 +##'9''' ' +99 +'' + 9#G ' +9 +#R`RH_XQqHqQX_``A_X^XRJ_IR4ZMTKXeeQWGGHS_@H_@@R_X_RA@HL>B15@5787>>B1>6;5-=--J22=<*=-66)(5*6+5#G''#:)%05%$()+ 05:(*-04 9F '9 +# ' ''# ' + +'## ' +' +#'999''' + 9 / (fXfg`IgR``AfISh<`RQ:xe_`K[TLKY@eQXG9QLBRAH@Q;A;_A5QQAI5^/@@@AH/4<6A@;(H=>C8L>>65;=>B61>8859:H6*6=6>,;4/-6/'#d 9';4)%*+*00$5$99)):FFFF 9 +'''' ##''9###''''' '9 + +' ' +99)$## (YRXRnR_AS`A_SYRRSSR^4HISTMTSSRGQfHQ;JBAH;@WWQ;ARIB7876;A=<<>8.B09W@5+7>66=-<*6160($0;#d9999/-*(#40-- $()5$(#9##/F F F99'#:'''' #'9 +'##'''' #'' + +'##'9 +(%) 'Y`__ARfHRRfRA__RYJg@mJZM[KYSIXHH@@HYAX;;Q@@@@X_5HARAXQ4/;AJBA/;IA@QQ@4/J>BBBCD8J5-56B77166@#@0>1=-<-0*B+=0-*6$:'9 +9'/*=%@#'4$-0)//$0$49 '#FFFFF9 + +## ##::''#####/#'#4 ' $ %%$$ %9RHfHq^qHq^ARR_^H__XQQ`L[ZSRA^<_W:HJHXH^WQ__ARIAHXHA@4(;_AIBAQXIAQ:4Q:WQ1=0<05-22B**61;#9 v 99$5;)(#:)))5$0%-)F 99F F 9 + 4#4// 4# ! $ #qXRI_XXR`AgYJYR`RX4WWAYARIJ^f_W'^IH^ARH/@A_AIBSAA;@4QHR00L8D7>6QW@>37>6*65@B+<5=*-=1>1-=>2)'9 FF 9G'/)55/::(00%0-05#9'999 9 +#4(//()(/#$%)$)4# " $)$+ $(^^I`R_`YY`IYYRYSIfQQ_XeWfY@f;:dmIR@XRHX@^;AIR<=;4@BC>*J6=<-6<00-==6-<-=6+/99 FF :#''/5$0-F $- --$)'##' +9'#(%$((()%$))4)':%+$)%% %% RRR_XXR`RHRR_H`RXQqJSH:d:QXXW:QRI_A_XQQ4QXHHQQHH/Q5;H;;HQ4AS<;@Q<7C71=B1-(@0==<-===-<<<<-0/#:)--49FFF4(;(G'#;$--('9Q0**%5G44//@()$(4$/#'  %$% %$) ^W^mWW^m4mX^WW4WGGfI@eGee::GGQHX@X^:#:e:@71<5=.-:'GQQ4/@550=*5#/51.,=)5(44#::#''##';$())5(/($$/ 4 (/4 ) %$ /$% )' +#%# cbKZk[bhZZSZSfQ_R__RX^HHq@IMTAQXQQ@X^QHKI@Q5I@QQQWQWQXL>>7876676-:'9d#4@;5//%1>2,04-2.,10(:#G##'#/())0$$$)//$% //) ##$ !! %  %%% hZic]ThaS`a`@Q_nRgX^^QX^qRKK_^XAHH@e:4RYXWXJHQX@QW::G#XIJJ=J>BIJ<<6==I6B6A(/A1B>>17>6=>2A:':::/(4/@:;222265-2+**5:4'' #G/()((5%$(/())/##(/#%% % !! $%))$  ' +Q`bcbhSYg_@QWRZYRRXmQ^@@RL[g4Q_RAHQW4HAQWQAH4QWW4^QW4:QH=IJLBIIJ6KBBJ==BB>=J280 +9G/4/A=-54::4*16-,10-226'9#d9'/)(/))());)$ ##/(#/) %%% ! $ +9yh[iYYYRS_eeRa`RRqQXH__YTbKBBL>JB2>5Q/;:<>71B28-:'9G/)*726)4:44)00*2,*,8,-(#d +#4:#4(/$ $))))0%#/(((4$ "" $$ !$%")%  + + HYoZa`^`Rmm`ZIXfXQQRg_RKTRXf5_X^4:4IJX4H<^::5_=>>CD7>H@4G#J61628<#G:::Q;->26<;)50:027+6.,=)G#9'4(45))--%--%)()(#))//(#% !! % "%(!!%% $%  + + X^fiZfR_WG`T`Xf@xW^X_ISaRQ^H__@:Gx^_@QX;Q:eAIJIJIIJBK=IDDCL1>>>DDBB=X'GW4#;6>A''://W#:(6=*=-00;:/-88.,*-0##://4$%)$%0%5 (($/'#44#(4)%   )% % + 9'#ed_Kf_fWdmY`HXX_HHfXH`YgX@^^;^WWQ_I;Q^@WeeRJSJJYIJBBJIJTLC8>SB>BS>B1B1<5@@GdG55#'d'4Q((H()=-=*1=@45-,&160) v 44#:/$)$0%0)($($(4: (//)! %$%!  !%%   ' ' 9e^f_q:xQnRWQ^Qg`_;gSY_;RRf^@W:QRB1J1=@W/W(444:445A6>=@)=*=>-44)-)-=0(04'd'#:4/)%)$%))4(4 ($)//#4))(/ %!$$%$9'9 #`g`_^eeHSYRfmWXXX__a\Yf_R;QQWWQfH@WQX4eeAYSJSJJ=KLLCMEML>BKLJ<L>>>B66B>A@#(60/W4::45-*66+0@A1.26))00-('(//:##GG'40$)$5)$0%%0$G(/)$4/)%%+ %% ' %  +' ' iR``m:Hhh_fX_gRfQqRZKf@XX^mWWQ@^4eQ@WWWAJJYJS=YBLCCN?MKLBKCNJ:QAJBL>BBBLC7C>;::>>DC>J0Q4;5;QW:/<66A*6-5445662.3116=@/#''G##//5)(5$$-!-0((0#)$4/#//(! !! %!!% %' ' +  ^^^XgY_X^^y@fHXqYZY^m^WQ@m:WQ^WWQ@W::RJYJSKKZKBYHXJJBJA@;:@;=BBBB2>6->6(@Q4Q(/;111;/0-/Q(4(1227,6%-(d''9')$)/)$)$--$(()#)4(/4:4)(%%* + % + + 9#XW^gRgXqRf__q^^AZYf@f^;^WeeWQW:WQQWWRSYJSKKKBRAGeHLJSBLMMLJYJ6IHGd:H8CL7B=<6D=QQ(Q/;<;06610@@:;;50=6,1-0;/:':/:455/(0$$- $($$/):;(4 +!%() % $%$# +# # ^^_hg^^Xg`f@q@X`If^fHf^:e:WQ4WWQ4WWgJSSKTMNTRAW4@RAHRRKLB6I6LLBX +9GA>D7BJJ=B<4#:55H<0@5=JJ<((4//=.861.2-(4G';/4(/($%-**-();(/4#///%!! #: %!! %%  + # #  +WX`_XHffXXq^XYSY^@f@^Q:ee4QmWmQW:W^JKLTTMUU>IX;RHXX^:HIJII6L>LBQ':@X5<6=677<#'G#;5<=0:/<61660/5=.320*2*0//:#Q://5-*-*-((0)4(4(/(% % !(/! "%$! + # +  ^grqXg__qQWQgZYffX^4Wee:W^QW4QWWmQQTM[TLMN\KHHAXQ@QGWQ<21#(23.25A0#:G#::##@))0-***-0(50(4##)//4$ - %% " $(  % %  " +# ' 9fgXXffHq^^mXYnHX@^mmWWeWQ^QmQQ:QJ`HB5H*71+5d#'d''##444((5- +*%$)5$/(/#//4(%%%"! "! $%$! +# #  _g_rfX^^Qf`ahf@^^m4W:e4QmQQQQ^XSaKYRKLBTNTIKNJGQB=1<(;;66*-6=521*@:99'#d#4()))5-$0 -$()-0/(/))(4$ "! !!! %)(% !   # +' ffrH@^Qm^`hY^WQQ^QWee4QmWQ^^^@KMMTKSS[\ONTLNOM<@HAAHXQ:G5S=I=LDDH#4:WH<@:G9G:/LMC>=Q#@H<5/Q:W;55-=B1>66J6B=;;*.7>26-;44'':(4:/4/$--6+*%- 54#/((//)$)4$!!!%""!,! !%%%9"  ' +  #' + +^qqqqHqfH^Q^^^mWeWWQ@Hf__ISYL\c[TKTK<'^ISTTLKBSLJ@W/H_AX@I>CDL>BXG;<5;@44@;<@4;>;#@;;Q;H;<=(#:Q(AIJ6>111160/;000##::G'44::()0-+--**$())#G5((44(($444%!! ! %%   $% +# + + # ^q^^^f_@m^^@mWWW^^____H_Ib`@AK[KK[UMZMTKS[UCLTMZI@H@W:W:ICEC66>IQe::W/A<1=B22>0;5/W444;())5500- %%)4/)/((44 /($%()%! %! %! !!% !   + +    ^^QQq_XWm^X^:x^^`I`YanRY[MUaAY[[TNMZSUUIHLMZLTLBYIHQ:Q@ICN?LBK6AGW^/4Q;5B1=BA;@@/A0>222>2781-44:9:4:4)@(@$0$$%0005$)(();/4///4/$4$$%$/(+"! !"! !!$! ( ###     #ymWq_^mW^Q^WxQXYYgH`YRgTU]cTY`YZTTKaZMTIXRZZLSYISLJQ:;KNNNLKB6S@GQ;A;;5I=I=<;Q4//:;1.C>1C71-A:'9G#:#/((/0))-*-$0 0/)(4$($)$%)$"+ "!$% % #  +# # # mQ^_fm4^^^^QqQX_R_fHXHaT\\TZZHHSLKIKMMZYf@RKKYBSKLKQQSNNLBJJJB>@G4@;@<>7JAHQQ/::#Q6L71)=+-;:#9FG4:G#Q//0-)-6+-)%0#///(;$0-)#/)$4% *%$%!' + + +  # + mQffQy^X^fHff___^XH`YZZ[\aSZK`GHaTT[NUNKSR;HJZ[TLLSRIMMCBB=IJ7<4:W/@;L7BJ65@'Q<5@4/=266;#@@#Q:G#Q(/44(45*+6*+-;);:4(G))((/ //)(/( $ $  % ' +9% + + + ^ffym^ffqX_HfniaR^RZk[\c\TZZT[_XIMN\U\ZSMZAXKLLBSJISC?CJBL7BBRW#G4QQ;<==6L>=;6B=A;;*821=:(:::#:/(/4455)$=-*-*%;)$(#(;(/)//4)(/- $4%)% % % ! " #  +  + + Xq^QX_Rf^X^Qfaa`__`bT[\c\[T[\MSXR[TMMKYLULRXILKJJIJCOULJLLLB5GGe:;AA;QQ1B<;;H077>6Q4#'::4/W;00%<- =%0(5;/(()/////(/($)/#4* %)$()!   !'#  '  qm^fnZnfH_X^XIRgH`ISb[bTTZZT\TaJYAK[KYSTTSI@HgJJBZCEN>=SLK>@G'd'^
>16J<@Q@@(6>-=66B=;440;;<;G:'GQ444/);)55)0*0)0-%/(4#4 #4)$/$%(/ %$$%$  ##%%#!   +  m`oY`ffqRanRrHX__R`Z[[\[KKZTKSMU[JfA[\TSSSSKIXHKMNCKI;9'Q@@;IA@4;+5$%@#44##4)/:$5$%()* %) :%/$$## () % ($ '' '   na`fff^qf_AfXYiY_RYga\[bT\kTTMk\\Y4^TTSYKKS>ZX^KNCKBLKKC777B;ReG#W4QAHQ:Q5A@:e@<>C2L6A6>*5454GG:4::4@;;/;5*+6*0);/##()/($(/(()$@4(%%:%%( $ '$ # # +   # + + + `qq_`gR`__q_nY__Y`^ffaaaKbZMT\c[JSMK_ISTMZSJJSKAJYKLLBX:'#e4Q>61B-;:44#G:/(@445$-A(-1+=5((/((////(//))) %%/(%$((( $% % '# #    + nR`s_gR_fRnhYff`gYR_XSZaaabZbU\bZk\Y^HZLZKJJZTTIHIKBSQ'dGGW5KCLJSI5;;Q@X5H)A5:4<7>6;/@4G:::Q(;(@(0555--0)($54;(4Q)-*5/)%$5))#$$ (4!!#   +  q_XqXrXmX`iabpZH^qX^QhTTjc]U[SK[TSSIYX_RYRZOOCSJA;_;e4@@@ABTBJIAHI<@@@4XRH5<5@4;;9'GG::)5/4/4#/)A$56> 55/@(44//$0)-):/$-!$4/)/)## !!   # + +  # mf_rggg`kpcl\kbi`Rf_^mgZb\TaSYTSS\\MLbI^RMNZYSKKZX:::QQQHBJ1C>H/@;@@@;/:#4Q/Q:4/A=0$B*=-5(((/((4#:/0)()(4$%)%++-)/ %//) # +     +# `o_^rgiijkkZibahii`__SIZbaaabZ_IbTLaYJaBRRYKTTLX::W:Q@IBRXI>MDLBBJ67CBX4Q(44/@4G:;)(@@//-0;5=*=(@/:/;(44((()//)%$((0++%4;)/#/) + +' + +    + + + + +  g_qfnZiik[ohbkbZaaYhaSggS[\\bZR_YaIIJMU\I^HBLTHGGGe:;KMT=QHB>>K6JB>T>=/:@AH;@/::Q(X//505;);5)0)//0$/4(/45)(///$+-(4($$ (#(($( +9 #'$ # +' + +   f^qYijkclkbbk\bbbZbTbhX@hU\bKZS^_KSIa]VTSAfRKAG'e:eQJMCJ;QQHJJ=R7DL7T>=4H05;;;/44/44(0;;;;(;A=54@-5((/44($(/(/(**(5$%%/#%*$)))) ( +#   +   sRnh`hkccjjbkbZabkk[kZXqa[Taa[a@HaZTcETSBSHdQwGGQ_HKTLJH4QQ/IA@0CBABL><H5;@505;(@Q4@;;(/5;5**A)5)(@44:////50+045- %$!$$)()/ ' +  `ohg_`httbbZiaaa[k\k[bZZbZha[\TY:gK\MZYBZTYGGd'GQABTKJY@HX;@;Q:B7R#=B6A:44Q/55@@;5;);@/45=*=-A)(Q44Q(//-!0/4 !+$$%/(() #  #  ohgg_fmYiaaZbiYiZ[bbb[[[biSZ[TZ`GHaMZSJaL[5W:WQ@XITLS>LS@4Qm#:KCBI;JJ>=W:44@A0A5@@;/4Q5-0A<)/4;@/4;(///(/;/)-*0/:$ -()$))$(/)()))   +'  + + +    F 72 90 1 +28*777/9//643+664/+33//+3/+*3.1(++*/./"+++ *3+ * *+(3!==!! 2 228*7374464+333.4/+74.1/+/4+3+4(/33 4$./+/(/3 * 3+3"/+2;==!3 <222228*37746/3 3/7++3/11//44/(.(+33 3,05)+++"+3+3 3* "/(" !=;==!* ! 2 888*:33+47339///3**/4(//(/4./7++.0,)./ *3+** **3+("*3 2;;!**!22 ***:3*33:*3///333 7.+*7/++((++//3.,,1.,(8* *** + ++"+* /+ ;===! 2228*:+3:3*8*:*3 3*3/..//++//+3++//#0,...,." 3***+++"""+ "+*!;=;;228*3333******88**3//+////4///++3/.,))),).+** +"++"(++((( !;= 8  !*333738**3:**88*3337+*+(/+("+**++()00,))+2+(+3/+ 3#(3**!;==;! 2!!:3333**33:***8*+ *3 *83/3 3 **++*+&-,).. 2*++ +"/ "("3 *2=;=!*+ !! 3:3*8**3***8**+3*3 88 *8***2+." 4,,)).#"++ ""((#( *** ;=;!2 233**8*:***88*+3*3+** 3**2**+ *3.).(.#..( +("+/(( 3 !;=!* 2247****888833* 3**33 **2"/(*8 ".).#.))" /#/""+*("+!===;  22 43333*8888+ 8*3*83+ **2".1#+3 **((#()). +(""((*3"+ +!;=;=!2* ! /7/.4/*8** 38**88 3 **8".,)4#)+*+/(().#" "+"(" * * ;;=; !!2+41547++7//+++*8 3***27.1)(.))#( +"(#(()"*+" *+""+ 2!=!2 /1.//33////..+3++ *82/#).(.))4((/"((("(.#2 + *"" * ;=; *22 1143 3(5)/10./..+ 822 (.(#)).##((((("()#*** * *+2===2  !!14733/50.10.(4)(/+*** 3+..((((/(#(/())#( ***++ !==;!* 2 /+33/1,4(../(4./* *+3+ *"/((("(#(($$#(#"2* !;=;=!* 23:*+..7/./++(.,.+31&0#+3 2* ""(#(())####*22  !==; *++(.14//+(1./)./ 1--&,,." * +)((/#)#(##(* 2 !;==!2/4.1..1((1,.(.+ /&--)&')(3+2+(((#("""" *2 !;!( + !/4446,4/,14"/3*/)0,))--&)"**+# .$)###("+ 22 !;==! !4/+/./+(6("7+ ".%-,.&&$,$)("#"*"+)#)(("""2*2!=  1(/.43/.(+3++.,--&0&--&),,$$) "" +"#)#"" 2!==!" 44.1.)1(.4"3 )0-0&&--%-,&&,#"("""*##&)#" !=;=;2(.4.,1(.)/ * .&$,&&&'-$),&))#()" #)####+ 2 2!===; 4/+4.(/(/ 3*/((,&0&&&$))%$.%'&$+  +$#$$ ;=;=;!!24".1/3+3*/((#/#-'-%&,)$&%))%'%$)" *!$$$$!>=== ! /,5)/""+(.$1/")---&,))&-&&%%&&$$( $$##""  ;=;!  (5)//(7)1&&(+#(&&&&)&&$$,%%&$$$%&$$$  ")# +"";== !! .4//+")),0,("/(&-)#&%'#"$%$%)$$$$+" #" "!=; !>! ./+ *(1,-&-',((,&$$''$#(((%&$$ $"!=== +>==!/(/3+)1,)0'-&#()))%%$,&# ")$$)##$"* " +" !;=; !;=!/.(3"0-,&---$( .&-,$%&#)$$$$$   + +!===; !==+(3 /0-&--&&,(8"%&&%,%) ""$$% + +  !=;! !=***3")&-&&,)))((#,&%&%#""$$$  +  "!=;==; !! * +3+&-&--&$%&)"$%%%&%$#"$$$$$  + !=== +! ../ (#,&'',,'&" )&$%%%%$$$$" !==; 10#3".)&&-,$&'$ #$$&&$)" +  +;=  ! &,.(.),&&,$&%$#"($%%&$&$$" "  + ===; !! ,1,).)..)),&$,%%)(&&$)$ +    +!== > ,0-&,#"+#'%,$''%$"#$$$)))$ 2  + + !;=!! !-'--0) *)'&$&%&$* #)$)#  + + !====  !>---&&,#($,$&%&%&$""&$"  + !==! !! &,&&,&-&#)$&%&$$%$"$$$%%2  +" +!===! + +!> -0)),'-,#&&&%&&"($  !=;= ! -&,)&%$)&'%%-%&&$$" ")   !==! ! &,)--,#$'%%&%&$"$$"   + ==== ,)&'-$,&&&%$$$)$$$" +"  ===; ()-%),-%%&)$$#$$#  + ;=;==> + ,&&),%%''&$&&$$$ +   +== + + '&)),$&%&$%$)$$$" $ +  +  + ;==;  +!!&)&%&&)#))$)$$$$$$* +  + + ==! ))-'-%("$###$# +  +   +;====! +  )&&%%$(*"(&$  "    +!=;==! +  $,&&,))+"##)%%$$$ +" +  + +  + +!====! &-%$)$(+)   +" + + +  +!  + ;==! + %-&$&$$)"2(#$ +" + +    === + &&$)$$$"* """ + +   + + ;=== +  ,.)))))("+ $       + +  >=; + $$))$))$* #  + +   + + + ;===  + ,))$$))%) **2 +  + + + !=== ).$$)#&$"  #    + +  + +  !===; + #).#)&$("       !=== + #)$#)%$##  # + + + +  + +;===! #$)$&))$$*  + +   + +====! +!/"#$&)$       +   + =;== + ? ()##)$2      +   !==== + 2 ")$$$2"##  +   !=== + ? +++#)   +   +  + ===! ?# +" 22 $  +2!  + +    ;==! 3 * *  "  + +  +  +  !>===  +  !  *"  +! + + + + ===! !!! !!! 2!  ! !=! !!!  !  ! !===> + ? ;;!;!;!;;==!!!! !!!!!!!==!!!!!>!=;=!====!>!!====?!!!>===>====!======;==;=!!!==!>!!==;==>;>=;========;====;>;>===;=!==;== ;=;=;==;=;=;==;!=!;>!;=;=;=====;=;=;=======;============ + ==;=;=;!=!;===;!=!=!>;>;=======!=>;===!!>==;=>;=======  ?=;;!!;;!!!!;==;!!!!!>!!!!=;=!!=;=;=!>!=;=!!!>!>;==!==;=;>;===  ? ; !  !=!!  =! !!! !>  ! >>! >;!   "+  +  +  +!  +  + + + + + +*") ++    + +  +  + + + + +? ?+ ($%# "   +  + +  +  +  +   + ! * #$$#"# +  ! + +   +    + +  +?+###"  +  +  + +  +   + + +   + + +#"+"$$ + *  +  + + +  + +   + ? ?""(""#$+   + + + + +   + + +  +  +  ? "" ##" +  + + +   + + + +    "+*(#""   +  +  + +  + +  + + ?3 72 85 1 +44#0022#2$1#25('('5'&$3$2//#3###$' 4$&&$0/..,,-#.--3$1#101$2#1$5''''''(53&2##0/1&3&$$$$1/2/.,7,$..3113&211114'''5'''''''5&&$$#.01$$2$3$2#&1#..-,7,,$/.002&$221001&')6''''&((&'((($0/#$$&$&''000.,7,,-/#..0#$21#22#1#$'6((''&3&'&4'!)('&/./&&&'&'&0/0./.,,,,.3$21021'&2$$4!(4&4&$&&&''(( '(&0..#&'&&&$.-,,7,--./&2$#0014'&$2$$''''('''&&'5''&( &0/2&&''$#$#.,,,-/$1$32#1&''5$0&&&&5 ''((!($&'&&$#$/#' $&#/.00,,,...212#1'5'()(1/0'(&4'''2#(!((' ('$$&'#0#&'$#-./0#.,7,7-0045())*($##''''&'&2$' &') &&&&&&#$&$.-/#.,,.-,-11#0#((())6' '(''''$/2$' '&&'&&&&$&$#$0---./#0#,,,,---2$23()))('''2$(( ((!'#&&&& & ' #.#&$#,,,#,#2#$())(''(!$./0''(())'13$&$&&&&&( ( &&...#$$$-,,,,7-#.-,,011&)(''(!5$1#' ( ( '$&$&&&'&'&' &$0-...1$$#-,,7,.7,#013&'(5)!'''$$$((' '&&#&&' ' ' $#--..#$&&-,,-.-32#$&3$(!)''&''3#&(!(( '&3&'' & &2&$..###$$,,,-/.-'''4$#))'''&'#2(!!((( ''' ''&2&' &-.#$&$##,7,.-5(!&0/#'''' (!(2&(( ('' !''#&#--#&&&.#$0.,,-.,!*)&1#&$&& )!6!!$$''&& '' ''##.#.----&&.$.,,,,**(((&'')!(()(& '&'&&&'$0...$$&11,77,/,-+)(()'1&( (( ) #& (('&''#$.-/#&$###,,,,--( (('&$#$((('' ''$0) ' !!&##/' $#&&,,,7-.--''(( ('$&(!!)!!! ## ' '!!'.-#/#&$.,,7, --,)('()!(('!(!"((('&#$&( ! 0#/&#&$$#-,,,--,*"(!)(((!( (((('' &&& !! '$&/#  # $$##,77-.---)(((( '(!((  (!($#'!)!!!$#$. $$#,,---(!'' ' ()!)!(( ( $""!!"' //$$ &##$.,,,,..-,'' ()!))!!('!(' $#&!!!!'/.$&&&$-,,,-,,!((("")( (('( ('! &#. # #&$-77,---))!))) ' (!  !"!''%!&.0& $##,,7,7,--()! ( #$ ('!"!! !!!!!  ..'##,7, ((!'#&!!)!( !)!!! #&-.# &##.-,,-,,)(!!")0$ (!! (!!!!!#--$$$ -,7,,,,!(!)!('$2$ !"!!!(-/$,7,.!!(!(' &#&("""!!/ $$####/,,,-!)!  !!$'# """!(!. #77--)!! '!""$$# !! -//# $# ,,,,-.-!('(!")'##0&$/-.! ##.,,7,,-'!"! !$##$#$&&# ,,,- ("!!!! !( ##$0.  .-,7,-"""!")"!". !# #   ,7--""!!""" $###     /0-,,--! !!)"""!$#/ !# .,7,7,- (!)!!!!! ### #,,7,7, --!%"!"! ### -7,,-& %%"/#!! $  -,,,-0 "!"!/./&&##/ ,7--#& .#    .#,, -$ &$#$! #  .,7,7,-$&##.# !/!   .  ,,--#$$#  #    ,7,,--##.# ,77,- ##.   #   ,,,-$&###   .  ,,.-$#   +  ,77##  #/  +,, +/ 0 $     + ,77- #0!       +,7,, -## ##  +  + + ,,  "#   +     + 77--" .  +     -,7,, # #      ,77--$     +  + +  ,,,,,-     +  ,7--       +  +   ,77-#$  +   +  +  7,,- #     +      ,77      +     ,7,7,   +  + + + ,,          + + + +  77-   +  +  + + ,,7, -      +   + ,7#      + +  +  + + + + 7,,,     +  + +  + +  + +,,    +  +  777   + +   +   + + +  + ,,,,-   +  +   +  + + ,77  +  +   +  + +   +  + +  ,7,    +  +   + + + + + +  ,77    + + + + +   + + + + +7,7,      + + + + + + + +  +  + +,7,    +    + +  + + +  + + + +  +,7,7   + +  + +  + + +,,       +  + + +   ,77,    +  + +  + +     + +,77, C 72 80 1 +                                                                                                                                                                                                                                                                                                                                                                                        +    +                    +  +      +                              +            + +         +  + +       + + + + +  + + + + +      + +   + + +        +     + +      + +  + + +         + + + + + + +      +   + + + +      + +  +       + +   + + +     PLAYBK1_P 124 + $  $ +( , 0 48 048< +$ ( , <048 ( ,< + $048,<  (48@ $08<  (,4@ + $08<@ (,048<@D $,4<@ (048< + $,08   (,048 $(4   ,  +PLAYBK2_P 56 +  $( , $0( 4 +8 , 0$ +4 8( , +0 4 8$ ( +, 0 4 8  $ +( ,PLAYBK3_P 128 +  +8 , 0$ +4 8( < , +0 4 8 <$ ( +, 0 4 8  $ +( , 0 48 048 +$ ( , 048 ( , + $048,  (48 $0  (,4 + $08 (,048 $,4 (048 + $,08   (,04 $(   $(,  +   PLAYBK4_P 128 + (4$,08( 4, $0( , 0$ +4 8( , +0 4 8$ ( +, 0 4  $ +( , +$ ( , 0 ( , + $,  ( $  (, + $ (, $, ( + $,   (, $(   $  +  $     +PLAYBK5_P 32 +  $ (  $ +( +$ (  PLAYBK6_P 64 +$ ,($4 0< ,8@4(0<8$,4< (084<$,08( 4, $0(  \ No newline at end of file diff --git a/BACKUP/ART100/STATSTXT.IMG b/BACKUP/ART100/STATSTXT.IMG new file mode 100644 index 0000000..04aaf9e Binary files /dev/null and b/BACKUP/ART100/STATSTXT.IMG differ diff --git a/BACKUP/ART100/STATTXT2.IMG b/BACKUP/ART100/STATTXT2.IMG new file mode 100644 index 0000000..408dcb2 Binary files /dev/null and b/BACKUP/ART100/STATTXT2.IMG differ diff --git a/BACKUP/ART100/SWEETSPT.IMG b/BACKUP/ART100/SWEETSPT.IMG new file mode 100644 index 0000000..23272fc Binary files /dev/null and b/BACKUP/ART100/SWEETSPT.IMG differ diff --git a/BACKUP/ART100/TEAMSEL4.BDB b/BACKUP/ART100/TEAMSEL4.BDB new file mode 100644 index 0000000..f670713 --- /dev/null +++ b/BACKUP/ART100/TEAMSEL4.BDB @@ -0,0 +1,125 @@ +TEAMSEL4 2000 1000 255 6 9 118 +ATRBKIT 366 815 678 803 +ATRIBUTE 834 1305 400 535 +TEAMSEL4 139 641 232 571 +HTIME 823 1290 52 308 +ATRBHTKT 997 1434 557 664 +ATRBHT 1010 1438 709 810 +A00 206 268 0 8 +A00 206 372 3 8 +F00 213 272 6 0 +F00 214 372 9 0 +F00 218 272 C 0 +F00 218 367 F 0 +F00 219 442 15 0 +F00 219 372 12 0 +F10 297 272 6 0 +A00 305 268 18 5 +6700 388 696 1B 8 +F10 396 372 9 0 +6900 396 696 1E 1 +6700 396 755 21 8 +6900 401 696 24 1 +6900 401 750 27 1 +A00 404 372 2A 8 +A00 406 268 2D 4 +F00 408 372 9 3 +F00 413 372 12 3 +F00 413 442 15 3 +6A00 464 752 30 1 +6900 491 696 24 1 +6900 491 750 27 1 +F00 506 272 6 3 +A00 506 268 33 8 +F00 511 367 F 3 +F00 511 272 C 3 +6900 563 757 36 2 +6910 578 696 1E 1 +6700 586 696 39 8 +F10 590 372 9 3 +F10 590 272 6 3 +6700 590 755 3C 8 +6900 590 696 1E 1 +6900 595 696 24 1 +6900 595 750 27 1 +A00 598 372 3F 8 +6A00 658 752 30 1 +6900 685 750 27 1 +6900 685 696 24 1 +6910 772 696 1E 1 +6700 780 696 42 8 +A00 867 93 45 6 +A00 867 197 3 8 +F00 875 197 9 0 +F00 880 267 15 0 +F00 880 197 12 0 +6800 884 430 1B 8 +6900 892 430 1E 1 +6700 892 489 48 8 +6900 897 430 24 1 +6900 897 484 27 1 +6A00 914 486 30 1 +6A00 981 430 4B 1 +6900 987 430 24 1 +6900 987 484 27 1 +6A00 1006 486 30 1 +6800 1016 573 1B 8 +6700 1023 632 4E 8 +6900 1024 573 1E 1 +6800 1025 720 1B 8 +6900 1029 627 27 1 +6900 1029 573 24 1 +6700 1032 779 4E 8 +6900 1033 720 1E 1 +6900 1038 774 27 1 +6900 1038 720 24 1 +F10 1057 197 9 0 +6900 1059 490 36 2 +A00 1065 197 2A 8 +A00 1067 93 51 7 +F00 1069 197 9 3 +F00 1074 267 15 3 +F00 1074 197 12 3 +6910 1074 430 1E 1 +6700 1081 430 39 8 +6900 1086 430 1E 1 +6700 1086 489 54 8 +6900 1091 430 24 1 +6900 1091 484 27 1 +6A00 1108 486 30 1 +6900 1119 627 27 1 +6900 1119 573 24 1 +6A00 1122 720 4B 1 +6900 1128 774 27 1 +6900 1128 720 24 1 +6A00 1175 430 4B 1 +6900 1181 430 24 1 +6900 1181 484 27 1 +6900 1191 634 36 2 +6500 1200 781 36 2 +6A00 1201 486 30 1 +6910 1206 573 1E 1 +6700 1214 573 39 8 +6910 1215 720 1E 1 +6700 1218 632 57 8 +6900 1218 573 1E 1 +6900 1223 573 24 1 +6900 1223 627 27 1 +6700 1223 720 39 8 +6700 1227 779 57 8 +6900 1227 720 1E 1 +6900 1232 774 27 1 +6900 1232 720 24 1 +F10 1251 197 9 3 +A00 1259 197 3F 8 +6910 1268 430 1E 1 +6700 1276 430 42 8 +6900 1313 573 24 1 +6900 1313 627 27 1 +6A00 1316 720 4B 1 +6900 1322 774 27 1 +6900 1322 720 24 1 +6910 1400 573 1E 1 +6700 1408 573 42 8 +6910 1409 720 1E 1 +6700 1417 720 42 8 diff --git a/BACKUP/ART100/TEAMSEL4.BDD b/BACKUP/ART100/TEAMSEL4.BDD new file mode 100644 index 0000000..8bd9c5f Binary files /dev/null and b/BACKUP/ART100/TEAMSEL4.BDD differ diff --git a/BACKUP/ART100/TEAMSEL4.IMG b/BACKUP/ART100/TEAMSEL4.IMG new file mode 100644 index 0000000..0c0c2f6 Binary files /dev/null and b/BACKUP/ART100/TEAMSEL4.IMG differ diff --git a/BACKUP/ART100/TEAMSTAT.BDB b/BACKUP/ART100/TEAMSTAT.BDB new file mode 100644 index 0000000..971effb --- /dev/null +++ b/BACKUP/ART100/TEAMSTAT.BDB @@ -0,0 +1,63 @@ +teamstat 2000 1000 255 2 23 60 +teamstat 710 1162 131 422 +finalres 109 565 128 425 +4000 138 161 0 5 +500 138 151 3 12 +500 139 288 6 16 +500 139 220 9 13 +500 140 357 C 11 +4000 145 250 F 20 +4000 145 349 12 18 +4000 150 319 15 19 +4000 150 255 18 17 +4000 156 319 15 19 +4000 238 349 1B 18 +4000 242 319 15 19 +4000 242 255 18 17 +4000 248 319 15 19 +4000 248 338 1E 22 +4000 272 349 1B 18 +4000 306 349 1B 18 +500 338 221 21 15 +500 338 151 24 14 +500 339 286 27 10 +500 340 354 2A 9 +4000 340 349 1B 18 +4000 341 250 F 20 +4000 342 161 2D 5 +4000 346 319 15 21 +4000 346 255 18 17 +4000 352 319 15 21 +4000 374 349 1B 18 +4000 408 349 1B 18 +4000 438 319 15 21 +4000 438 255 18 17 +4000 442 349 1B 18 +4000 445 319 15 21 +4000 460 338 33 22 +4000 476 349 36 18 +500 738 151 3 12 +4000 738 161 0 5 +500 739 220 9 13 +500 739 288 6 16 +500 740 357 C 11 +A00 752 258 39 6 +C00 771 249 3C 2 +C00 797 383 3F 0 +2800 803 250 42 7 +A00 842 258 45 6 +C00 893 273 48 1 +2800 914 384 4B 8 +2800 917 373 4E 8 +2800 921 250 51 7 +2800 922 263 54 4 +500 938 223 21 15 +500 938 151 24 14 +500 939 286 27 10 +500 940 354 2A 9 +4000 942 161 2D 5 +C00 943 249 57 2 +C00 944 383 5A 0 +A00 946 258 5D 3 +2800 995 250 42 7 +A00 1036 258 60 3 diff --git a/BACKUP/ART100/TEAMSTAT.BDD b/BACKUP/ART100/TEAMSTAT.BDD new file mode 100644 index 0000000..1a7c84e --- /dev/null +++ b/BACKUP/ART100/TEAMSTAT.BDD @@ -0,0 +1,4513 @@ +32 +0 204 23 1 +ÍåìÞåìÞ¶æß··ÖÒ¸¸ÎΛΥ¦¸¸tjkr)¨¹¨llqqppQQPPQPPŽŽŽŽQQQPPPOPŽSOOS/OSOS////7.6Ls7-///7s.66666666777777/////////77664455555555335555555544444/pppQQT6444446666666666666444666L455NNN,,,,,...........----.åìÞåìååÞæÖææ¤××ÂΦ×؛اÁtt¦¨lÅ2uuqqQPQPPŽPTŽQ>TTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<  """!!"$"&"&!!!!!!!!!!!&"&&""%""$%""$$%"&"%%$+%"&$+%)%)&((!!'''((''(!))),'''&),''''&),&,)-),004777::1::411:7411  ;;;1    !"""""$"& %!!!!!!!!(!!&&&&""&""%""$$"'"+$%%++&"%+%%++&!!!'&'(((!('&)),,)&&,''''&,)),',-)'3: :40:11444949< 1;;59  """"""$!!!!!!!!(!!!!!&"&&&""&&&""&&+2$"$%!(!&"%+22)'!&&''!((((''&&,&))))'''&&))&'',,'(30:77:447704:1::4: 5;;919  ""! ""$ $"&"$&!!!!!!!!!(((&%%&&"$$""%)!("22%&%)&(&''%+++%'!'''&&&&'''&&'&'&))''&&,,,&''-*'(3'07:7 7777741:4 0;;9999   " "" "$ &!&"!!!!!!!((!%""%$%%%$%%"'%$$$)%%+%%)&)++))))'('&)&'&))))&''&&''')),,&3')*,''&'004:77440:7441440 9199;919   "!# " """ ""$$&!(!!!!!!!!!&""%$%""%%"&"%%%%%$++%%$%)++%%+%&''&&&&&))),,,))'''&&,,&'',),'('''00777444041:7<919 1   !!#$$"""&" $&!!!!!!(!!!(!&""""""&&"&&%+$%%$%%%%++%&"++*'!'&&''&&&))'&%)&'&&,&&&'&)-&((((', + +::0047 99   "!"""""$"&$&!!!!!!!!!!!&&""&"""&&'&"%$+2+%%%+++%'&%)!((&&&&&&,&'''&)&'&),&,&3')*)'(((',,007 7:77 700 000999    """" """$""!!!!!!!!!!&"%%""""'!&"&)2$)%%)++%%'!)(((('&&&))))&'&)'''&,&,,,&,*)''''&-),00:7/ + 7774 0 041119   """ ""$$$&!&&!!!!!!&!!!&"""""&&"&'(&&&&)%&%%%%"'!((((!&&&)))&)))&''''''&,,)),'''(,))&'00/ 77::0111991    "  """"""$ &"""!!!!!!!&!!!&&&&""%"'!(((&%+))%+%)!((!'&&&&&&&&&))&'&,,))&'&))''(((')),''::7:0 0411419191   """"&"&&!!!!!!!&!!!&&&"""&"&'!&%22%%++%!((('&""&&&&&''&'''&))))''&,'''&3(&)'(''00: 7: + + +000441147:9   "# $$"$"""&&!!!!!&!!!(!&"""&&""&!%22+%+2%!((((&)"&&%))&&,&''&&,))''))'(','',),'(')007 + 7 + +04110::199 <  "!$" $""""&!!!$%""&!!!!!!((!&"&&&&&&&"$$%%%%!(((('&&&&)%)&&%)&,)),&&'')*)''''',))&'&,-000::77 011149991;;;       """"""$ """!!&"""""&!&!!!!!((!'&&&""&'&&&&))%(((('&))'!'&&&&))&&)),&,'''))''''3&,,&)&,,,00: + 0::4191;5;   "&"""&""&%$"""""&!!!!!!!!!!&""&&&"&&!&")'!(=(&""&")))'''&&&&&,,&,))%,''''',&'')***-'00 +0:77740:41;;;;   # "&!!"$%"""&&$%"!!!!!!!!((!'&&&"%)&&&&!((((!")&&%%)&&&&&''''&'',%),'(((')*,')***.*&0017::4 ::4 ;;;;;; ##" "&"""%"$"$&!!!!!!!((((!&&")""&&!(((!&&&''&))&&))&),'&))'',%)''''',*,')*+..*-)/0 :74744111:4;;<;;  $$"""""""&"$ $"&&"!(!!!!!((((!&&&&&"&'!(((&""&'&)"&&&&),&&&)*)&&)&'('&&))&')*...***)0000 0:7 + + :4:741;;;;<   !  ####"""""""""""""""%$""&&&&&!!!!!!!(((!!&'&&&''&&'!!&"&&%))&'''''&&&&))&&),'(('&,)&'3)*..*-*))//: + 77:: +7:19 <;;;<   # ""&!&&"""$$$"&%$"&&!!!!(((!!!!!!"%"&""&&""&&"%)&&&&&&&!'&)&'&,&&&&''&)&''&*++*)**)*/ +00/ 7:777 47:411;<    #"""&""&"""$ $""!22 &&&"&!!!((!!!!(!!&%)&&&&&&&'&"&&&&&&)))&&))''&&'&,''&,''',)*.*)-*-**7 + + +47741141   !!# """&"$$$""& 2 ""%"&!(((!!!((!!!&&''&&&&&"))&'&&&"%)&&*)&&))&''''&))''',)))***-***0/ + + :::40     " #### "!"""""$"&"$$2 "!!""""!(!!!!!!!!!!!'!'&&&&)%)"&))&&&&&&&)&&)%,'!'(',,)&&&,,',**--*-)0 :1     !###!!"""&&" 2 $$!!""&!!!!((!!!!!!(!!&))))))&&&)&&&&'!&&'',,&''!'&&''*,&,,'(&-)----)/ 7/7:7 + 70        !!""""$$""$ $$$%%2"!%%&!((!!!!!!((!")))"&&'&&&'&&&)&&&&&&''!(')*)')***)''',))--)**0/ + + + + +77 00    00    "    "$ $$"""%$$2 $2 %&!&%%"!(!!!!((((((!&""&&&'&&"&'&)%)&)%)&&&'',*)')****)&&'',*-)-**// + + + + + 7  0  9 "!(!" " $""" %"" 222 %"&""&&&!!!(((((!((!&&&&%"&))"&))"'&*)&'&&'&)&')**.+***&'(')****-0 + + + +  + + :000      !   """"$""&" $"22 $"&&"""!!&"&!((((!!!!!!'&&))&")&&&)&&'))&''''&),',%*..+***,''',****)// + + 07 70  #""  $$""$ "$ $ $"&&&%"&"""&!!((!!!!!!!!!&&&'&&&&""!!&)'((!(')),)%*+.****)))&',-**)-// + + +/ 7 // :0 0      #!(" $ $"""$$ $"!"$$ $%!%$%$$%"&!(((!!!!!!!!!!!''&'!&))&"%)&(!')),,&,)*+*)**))-*)'&)-))./ + +  + + / :0000  99  #!!! ###$$$$"$"&$ !&% 22$$%%%%"&&'!!!!!!!!!!!!((!&))")"&)%%&''&)*)&''&&))))*))****),,))*.// + + + + +0000 9   "## "$" $ 2 "$ 2 $$ $&&&&&""&!!!''!!!!((!!&)%"&&))"&&'')%)'''''&'',***+**-*-),**../6///6 /0 8 + 777 + 000001000     !!""" $$222 """"$ $%$2 "&!(!&"%"'!!!!(!!((((!(&"'&&"&'!(!&),&'&&)),&&)))*+*-**))*...*6 +///// +// 70  00    "!  $(("!  2 $2 %&!!%22$$ "!!(!"""&&&!(((!(((((((!&'))!!''(!),('&*+++*),,',)*)-*****2.** +/  +   000     "$ #2 $$$$!!"$ $%!!!(!&"%"&&&&!((!((((((!((!&%)&&"&&)),%)*+++**%))''&,))****..**-/// /  010      $ $" 2 $$$% $&"$%!!(5(!"%""%)%)"!!!(((((!!((!&)&'""&)%)%**+++%%%))*)'',**-**+.*))) + //  /0 0410 #"  $" 2 $ 22%!!&"!&&!!!&""""%%)&""!(((((!!((!'!!'!'&)&&**%*++%%*))*+*))'&&)**...*--/ / + + +0 0100  !!!!" "$$ 2 $ 22$(!&((&!!"%"&'"%%&&"&!!(((!!((!'((((!'&&!%***++))**%*+****,'3)+**+**-* +         !""" #$$ $%"""&!!!!&$$%""""&&&&'!!!!!!((!'!((((!%%!)*%%+++*******%***,''-+.***-*.F 192 86 1 +*'*,''''****(''''''#""##''''''')(''')))'''')****'********)')********----****'('''''''***''''''''''''''***'''''''('****----********)')********'****)'''')))'''()'''''''##""#''''''(****'''',*'**''''""""'''$"""""""""""""''%"'%'''''"%'''''''''''''''''')*)********''''''#"""#%'''''"'$$&&&&$$'"'''''%#"""#''''''********)*)''''''''''''''''''%"'''''%'"%''"""""""""""""$'''""""''''**"""""""""""''""""%%'''''''''''%"""""'''''''''###'"""!""""""""""!"""'###'''''''''"""""%'''''''''''%%""""''"""""""""""*.""""""""""'"""'''''''""""""""""""""""""""""""""""""""""'''''''"""'"""""""""".34444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333""3/**/////-33--/  /-*/  /**-  -*'-  -''*  *'"'  '""*'  '*""*-  -*""-/  /-"*-  -**-   -*'*   *'"* + +*"( (' '' '' '' '%%' '* *' '"'" + +"'""'" "'""'" "'""'' ''""'' ''"""*' '*""''*' '*'''*,*  *,*'**--  --**--////----////--//0//0///33--33//33--33//33**33//33**33//33''33//33''33//33''33//34##43//34""43//3443/3>44>33>44>334444334444334444334444334334334//4344."".4445-""""-5445*""""""*5445*""""""""*5445''''''''''5444'''9999'''4444'**8888**'4443'**7777**'3441*+-6666-+*144/---6666---/44/---7777---/45/--/8888/--/55////9999////54/1//:::://1/443333;;;;3333443333<<<<3333444333====3334443333""""""" !"""""""""""""""""""""""""""""""""" !""""""""""""""""""""""""""""""""""""""""""! """"""""""""""""""""""""""""""""""! """""""3333443333333/////////////////////////////////////3//0///0/////////////////////////////////////33//////33/////////////////////////////////////0///0//3/////////////////////////////////////3333333444333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444433333/33333333//3////33333333333333333333333333333333333333333//3////333333333333333333322333333223333333333333333333////3//33333333333333333333333333333333333333333////3//33333333/3333344433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333412 96 46 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6+ 66&*&66++++++6666666&&&66+ + + + + + + + + + + + + + + + + + + + + 66&*&&66666&&&***&&.--%%%%%%%%%!!!!%%%%!!!!!!!!!!!!!!!!!""""""""""""""""!!!!!!!""""""!!!!!!""""""!!!!""""""22.)))))))%%%%%%%%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!"""""""!!!!!!!!!!!!9=2''''''((((((((((((((())))))))))%%%%%%%%%%%%%%%%%%%%%%%%!!!%%%%%%%%%%%%!!!!!!!%%%%%%%%%%%=39'''''''''''(((((((((()))))))))))))))))))))))))))))))))))%%%)))))))))))))0<3''''''''''''''''((((((((()))))))))))))))%%%%))))))))))))))))))))%%%%%%))))%%%%%%% +*;<'((()))))))))))))%%%%%%%!!!!%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""" 43%%%%!!!!!!!!!!!!!"""""""""""""""""""""""""  ;?0]'VFG;; +E9#6RooQ Q QO{P{{{{€{OP\QQ{O{\\P{{{{\oKy7U:X99:FGFF[::WGW[:G>L>Z?>>Z?;;;F;-;F=,E#6K Q QQQQOO{{{{{{O{{QoQ}OOOP\P{OPPPQxt7cV=:9:FGF::V:'J;[]XG[FG;GF<?FF +:,E9#16 gK o QP{{P\OO{O{\QQP{{{Poo\{{PQK6SR7VH::9YME9VYY9GF::]M4M9=;F;GGG?>44444::::::   7<<$!$,<,$#"$,###  "?   + 6 - -- + + + + + + + + + + + + ---  + + + +  +  +      4444::::44::  !$<<,! $###,.,!! !5## 6   - -----  + + + + + + + -66 + + + +--  + +  +     44>:444::++ #,,# #,$5"&.,"  !##!!  + +-6 - + + + + + + + - 6----  -   + +    *  44:4:::4++$ ! $7#$$,,# !","#,$5 !#    + + + +  -- - + + + + + + +- + -- + + + + +       444:+:4::::!7<# $,,<,#!#$,,$"#! !!!! ! +    -  + + + + -- + +  +  + + +      4>44:4: ##!$77,$!!$,<<$ #,$$$$#!5 &&&! #  - + -  + + + + + +-6---  --- + + + + + + + +    :44:44 !7<$$"#,<<,"!,$$"#5 !55 !#! #    +-  + + + + --- + -66-  +-- + +        4444:+:::   !#7$$$#,,,,$"#!&5 !  ## #!!& +  6  + + +- -  + + + - +---- + -6--   + +       44444:::+: !#$$,.$!#,,$.#55 &! 5 #%%!&!!!&!66   + + + -- + + +-6- + +-- + --66   +  +       4444:+: # ,./<!"$$$!5!!!! !%"#! &#""      +-- 66-- + - +-6-- +       444:::::: $7$##,.<."!$$$ =5#"! !&&#&! !&!!#""     + +  + + -6 --- ---- -- +  +      44::44**  $7<, !$,.,,,"".,$ &"&55 !&&&5 #%%##"#  +  --- +   +-- + -- -- -6 +   * + +  + + +    444444:4   7<7""""$,,,,.,&!"# 5!&!!#"& !%%#&"#!    -   + + + 6- + + -- --- + + + + *  + +    + +     4444  $<,$#!"! "$"$$$# && 5!"%"#"&&&""#&&#&!       ---  - ---  +   + +      444::44  $$,7!55".$"#&5!& 5 &%"#&&!&(#&!&((#" 6   -  +---6 + + -----66 *  + + +  + 4>44:4::  77$#,<<," 5 ""%&&5 !&!(""##! !!&##(((""'%   + - - - --- - ----- + 6-66--   +  + + + 4444::+<4:  7<7##"$!,/.%& &""!!###&((&(#%&!&%%%%'%(&(&&   +   + - + + + + -66- *  + + +    ****44: ##$7$#$$# #,"!5 !!!!&("&&&!(""%%%%"%%"%"&!!!&  +   +   -  + 6-    + + +   +   +  * * 44$+$77$!$.<.#!!5#& 5 !&#%#&!&((('.%"(""!&&!!(%(6    + + + + + 6---- 6- - -   + +   + + + +    * +787<7$! #>>=>=>>= + +  + + +  + + + +     %--55577777789119999989  +  + + +  + +      "#...%%-55---5555555555     + +   + +      + !!##%%%&%,,,,,,,,,,,     + + + +  + +    !!(...**************     +  + + + +         !!!!!"!(!()(((((((((     + +  + + +      +  !'!(!(''(((((((((  +  +  + + +    + + +   + !'''!((((())((((     + + + +    + +   !##&5555677789111122222    +     +     !.&5566777891133444444444 + +      +        $$$$$$77:::>>=>=>>=   + +         "!%--55577777789119999989 +        + +  !...%%-55---5555555555   +     +     ##%%%&%,,,,,,,,,,,    + +    + +      ! !(...************** +   + +  + +        !!!!!"!(!()(((((((((  +   +          +  !'!(!(''(((((((((  +          + !!!!!(!((((()))((((  +    +  + +     +  !&67777777789111122222             +  +  #.&5566777891133444444444          + + + $$$$$77:::>>=>=>>=  +          +     #!#%--55577777789119999989  +          +  +    '#...%%-55---5555555555      +   + +   + +!!##%%%&%,,,,,,,,,,,            + +!(...**************           +  +  + !!!!!"!(!()(((((((((    + + + + +   +!'!(!(''(((((((((            +    +!!!!!(!(!((((())))((           #&667776777779111112222        +   *5566777891133444444444          +    $$$$$77:::>>=>=>>=      +     %--55577777789119999989          +...%%-55---5555555555      +    ##%%%&%,,,,,,,,,,,        +     !(...**************          +   !!!!!!"!(!()(((((((((       +  !'!(!(''(((((((((      !!!''''((((())()((     + + &%67776667789111112222          5566777891133444444444    +    + $$$$$$77:::>>=>=>>=        +"%--55577777789119999989    ....%%-55---5555555555  +    + + !!##%%%&%,,,,,,,,,,,    + + !!(...**************        +!!!!!"!(!()(((((((((   + +  +  !!'!(!(''(((((((((     + !!(!(!''(((())((((    + + +#.677777677789111122222      +.&%5566777891133444444444   +$$$$$77:::>>=>=>>= "#%--55577777789119999989!!    !""...%%-55---5555555555!     !##%%%&%,,,,,,,,,,,!   "!(...**************!!!      !!!!!"!(!()(((((((((     !'!(!(''(((((((((    "!!"!(((!((()))((((!  +  677757777889111122222   !"#&5566777891133444444444!   $$$$$77:::>>=>=>>= "".%--55577777789119999989!!    !!!#....%%-55---5555555555!    !'###%%%&%,,,,,,,,,,,! !!!!(...**************   !!!!!"!(!()((((((((( !'!(!(''(((((((((!   "''('!(((((())))((   #"#&77776777789111112222 .5566777891133444444444 $$$$$$77:::>>=>=>>="!"  !%--55577777789119999989!   ...%%-55---5555555555!  ###%%%&%,,,,,,,,,,,!   ! !""!(...**************""   !!!!!"!(!()(((((((((!!  !'!(!(''((((((((("     !'!!''(((((())()((  !#%%6777777789111112222 .%&%5566777891133444444444" $$$$77:::>>=>=>>=    %--55577777789119999989  "##...%%-55---5555555555! !!!"""##%%%&%,,,,,,,,,,,!! !!"!(...**************  !!! !!!!!!!!"!(!()(((((((((   ! !'!(!(''(((((((((   !!  !!""!!!((('((())(((("!! !!""%%667776777781111122222   !"! ""!#5566777891133444444444   " $$$$77:::>>=>=>>= # !!!"!#%--55577777789119999989  #"" !""...%%-55---5555555555 "!"##%%%&%,,,,,,,,,,,  !#!!!#!(...**************  #!!!!!!!!!"!(!()(((((((((  !"#!!!!'!(!(''(((((((((  ##"! "!''(((((((()))(((( !" !!!      !!#     #" !" "     ""7"""#" " "##"!#   !  !   "   #!!#  "  !!       !!    +   !   7  ! +  77  !    !"!!    7  #!""!!!  3C 176 24 1 +Š‡‡‡ŠŒˆˆ¢ŒŒŠ¢Š‡¢‡¢“£Ž•¦’–’¦¦’§–§¨±¨©¨  ÁÁÁªªÂÃÃÃÄÄÄĹ¹¹¹¹¹¹¬¼¬¼¬¼¹¬¹¹¬¼¬¼¬¬¼¹¹¹¹¹¹¹¹¹¹Ä¹ÄÄÄÄÃÃÃêªÁš©š©¯¨™±¨§’’’–’‹‹¤¢¢Œ“Œ‡¢Šˆˆˆ‚‚ˆ……ƒƒƒ_Q~~``LaMMbNuuvcccccccgcdcgcgcˆŒˆˆˆˆŒŒŒŽŒ¢‡¢‡¢“Ž••’¦–§’¦™¨±¨©š ÁšªªÃÂÃÃÃÄÄŬ¬ºº»º»º»º»»»»»»º»º»ºººººº¼¬¬ºººº¬º¼¬¼¬¼¹¹¹ÄÄÄÄÅÅꪠ© š¯¨™™™§–’’§’’‹Ž“¢ŒŽ“Š¢‚ˆE…Œ‚EƒFFF__KQP`eaObNjvvggcgwwwwwdwwddddgˆŒ‡ŠˆŒˆŒ^ŒŒŽ¢‡‡¢Œ‘‘‘—‘˜‘˜¸¸µŸ·´·žÑÑÑÑÏÏÏÏ̶ÎÎÒÀÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×Ö×ÖÖÀÀÕ¿Ô¿ÔÇÇÇÇÔÇÇÔÇÇÇÇÇÇÇÈ®®®®ÉÉ°°²²²³³œœ­µ±›™’—›‘‘’Ž¤ŽŽŽŽ¢Š‡Œˆ…ˆ…EƒA††DqqqrWpJV{|Xo[]zzzzYzYzYzYYYzznŒ‚ˆ‡‚ˆ^ˆ…‰‡‡¢ŒŽŽ‘‘‘‘˜˜˜˜¸ŸŸŸŸ·Ÿ··ÑÑÑÑÑÓÓÐ涶ÒÒÒ×××××××××××××××××××ÖÀÀÀÀ¿¿¿¿¿¿¿¿ÔÔÔÔÇ¿¿ÇÕÈÕÈÌÉÉÉÉÊ°²Í²³³³³±¯˜––—˜’ŽŽŽŽŽ“ˆŒˆŒŒˆˆˆ…………B†DqqrrZZV{||[]]]YY\\\\\\\\\\\\\YzŒ^ˆŒ<‡ŠŒˆˆ‡‰¢¢‡¤Ž¤’—’——”—¯±¯±±š­³­œœ³Â²²°°ÆÆ®®¾¾È¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾½¾¼½½½½½½½½½½½½½½½¼¼¼Æ¼Æ¼ÄÄÅÅÅÅÅÂœœªšš¯¯±±››––¦¤¤•¤Ž¤ŒŽˆˆŒ‚^ˆE…ˆ^…†xxkkDSUHRRVygifmfmhhhhhhhhhhhfffˆˆŒŒ‡ŠŠˆˆŠ‰‰‰‰“ŒŽŽ“¤¦’’–’–§’¦§–¨§¨¨¨©±©©©ÁÁªªªªÂ«Â«ªÂªÂªÂªªªªªªªÂªÂªª  Á©š¯©±¨¨™™™§§’’¦¦••••““¢ŒŒŒŒŽŒˆˆ^Š‡ˆEˆˆE^^@ƒF__}KK~s`ttLaaaMMMˆ^Œ^Œ‡‡ŠŒ¢‰‰¡¢ŠŽ“‡¢¢“Ž¤•ŽŽ•••¥¦•¦¦¦¦¦¦§§¨™¨¨¨±¨¨©¨©¨¨©¨¨©¨¨©¨±©¨¯¨¨±©¨©¨©±©±©¯©©©©©©©¨©©¨±¨¨§§§§§’¦’¦’••¤¤••Ž¤Œ¢¢¢¢¢ŠŒŒˆ^ŒŒ‡‚^^^ˆ…^ˆ………@ƒƒ}_KKK~~~~sssss`GGssssssss`ŒŒŒŠŠŠŠ‡‡;¡‰¡‰‡ŠŠ“‡‡‡“Œ“Œ¤Ž¤••¤¤¤•¤¤•¦¦’’¦’¦¦’§¦§¦¨¦§§§§§§§§§§§§§§§§§¨§¦§§§§§§¨¨§¨¨¨§¨§§¨¨¦§§¦¦’¦¦¦•¥¦•••••¤¤Ž¤Œ¢“Š¢‡‡‡‡ŠŒ^ŒŒ‚‚‚‡‡‚‚^E^^EEE……@ƒƒ}__KKKKKKKKKKKKKKKKKKKKKŠŒ^ŒŒŒŠ‰;‰¢‰‡‡¢ŠŒ‰‰¢¢Š“Œ“¢Ž¤¤Œ“¢“£¤¤••¤¤¤¤¥¥¥¤¥¤¥¥¤¥¤¥¤¥¥¤¥¤¥¥¤¥¤¥¤¥¤¥¥¥¥¥¥¦¦¦¥¦¥¥¥¥¦¥¥¥¥¥¥¤¥¥¤••¤•¤•“£“¢¢¢ŒŽŒ¢Š‡¢‡¢¢‡ŠŠŒŒ‚‡‚‡‚‚‡‡‚‚‚‚^^^ˆ‚^^^EE……ƒƒ}ƒ}}}ƒƒƒƒƒƒƒƒƒƒƒƒƒƒŒ^ˆˆˆˆ‡¡‰‡ŠŠŠŠŠ‡‰¡‰‡¢ŒŒ‡¢ŠŒ¢¢¢‡¢¢¢¢¢“¤¢““¢£££¢££££££££££££££££££££££££¤££££££¤£¤££¤£¤£££££“¤£¢“““““““¢Š¢Œ¤ŒŠ¢¢Š¢‡ŽˆˆˆˆŠ‡Œ…ˆˆ‡‡‚^Œ^‚Œ‚=‡‚‡‚^Œ^^^^^^^^^^^^^^^^^^^^^E^ŒŒˆ^^‰;‰‰‡Œ‚ŠŠŠ‡¢‰‰ŠŒŒŠŠŠŠ¢‰‡¢Š¢Š¢“¢¢“¢£“¢¢¢¢£¢£¢££¢£££££¢£¢££¢£££££££££¢£££¢£¢££¢£¢££¢£“£““¢¢“““¢“¢¢¢“ŒŠ¢¢‡ŠŒŠ¢‡Œˆˆˆˆ‡ŒˆˆŠ<‰‚Œ^‚‚‚‡<‡‚‚^‚‚‚‚^‚‚^^‚‚^^^^^^^^^^^^‚Œ^Œ;‰‰‰‰‚ŒŒ‡ŠŠ‚‡‰‡ŠŒŒŠ¢Š¢¢¢¢“Š¢¢““““““¢££££££££¤£¤¤¤¤£¤£¤££££££££££££££££££££££££££££££“£¢““““£Œ¢¢ŒŽŽ“¢‡‡‡““Š‡‡ŠŽˆˆˆŒŒˆŒ‚‰‚‚‡^‡‡‡‡‚‚‚‚^^^‚^^^^^^^^ˆEˆEEˆEEˆ^^^‡ŒŒ;¡‡‡‡‡Œ‡‰‡‚ŠŠ‡‰‰‰‡‡‚‡‡;;¡¡‰‚‡^ˆ‚‡‚‡‚‡‚‡ŠŒŒŠŠŠŒŒŠ‡‚‡‡ŽŒŒŒŠŠ‡ŒŠŠŠˆŒ‡ŠŠ‡‡‡‡ˆˆˆˆŠ‡Šˆ‹ˆŠ‡‡‡‚ˆ…Œ‡‡‡‡‡‡ŠŒˆŒŒ‚Œˆˆˆ…ˆˆ‚‰‰‰‰‰‡‡;‰=‡‡‡‡‡‡<‚<‡<7‰7‰‰<‰‰‰7‡<‰^‡;‰‡‚Œ‚‚‰‰‰‡Š‚‚Š‰‰‰‰‡;¡¡‰‚Š‡ŒˆŽŽŽ•’’§™¯š©œÂÂÅÃÅĹ¹¹¹¼¼¼¼¼¼¼¼¼¼¹¹¹¹¹¹¹ÄÅÄÃÂÂÁ©š š±›§¦–’‹Ž““ŒŒŽˆŒ‡‡‡ŠŒŠŠŒ^ˆ……Š‚Œˆ…ˆ^‚‚<‡‡‚‚E…@}_K~~`LLOMbuNuvuccccgcggdgdcgdg‡‡‰‰‰‡ŒŒ^Œ‡‰;;‰‡‚Œ‚‚‡‰;;;¡¡;‰ŠŠŠŒ‹ŽŽ•’–––¨±š ªÅÃÅĹ¼º»»»»»»»»»»ººººººººº¼¼¼¼ÄÄÄÅÃÂœª­šš™––›—’•Ž¤Œ‹‹ˆŒ‡‡ŒŠ‚ˆˆ…‹‹‹‚‡‚ˆˆˆˆ‚‰‰‰‚‚^ˆE…ƒ}K~QPeaRbNjvvggiwwfidifwfiwiwdd‡;‰‰‰‰‡‚Œ^ˆŒ‚‰‰;‰Š‚‚ŒŒ;‰‰‰¡;¡‰;‡‚Šˆ……‘‘‘—˜¸Ÿ··ÑÑÓÓÐÐÒÒ×××××××××××ÖÀÀ¿¿¿Ô¿ÔÔÇÇ¿È®ÉÉ°²²³œµ±””›’ŽŽŽŽ‹}ŽŠ‡‡‡ŠŠ‚Œˆ…ˆ…ˆ‡‰‡‚^‚^Œ‚<‡^…A…††xkqrWZp{{|X[]]]YYY\\\\\\\\\\\\Yz‰‰‰‰‰‰‚ˆŒˆˆˆŒŒ‡‰‰¡‡‚Œ^Œ‡‰‰‰;¡‰‰‡Šˆˆˆˆˆ…‘—˜¸´·žÑÑÓÓÐ˶ÎÖ×ÖÀÖÀÀÖÀÖÀ¿¿ÔÔÔÔÔÔÔÔÔÇÈÈÈÉ®°°²³­¯´”›’¤Š‡ŠˆŒ‚‡ˆˆ…ŽŒ‡;‡‡‡ˆˆˆˆ^Œ‚E……†††xDSrWZpVV||X[zz]\zzzzzzzzzzzzzn‰‰‰‡ˆ…ˆŒ^Œ^Œ‚‰‰‰‰‚ˆŒ‚‚‡‰‰‰‰‰‡‚Œ‚ŒˆŒŒŽŒ¤Ž•••’™™±šš ªªÂÃÃÄÄĹÄÄÄÄÄÄÄÄÅÄÄÅÄÄÄÄÄÄÃÅÃÃê ª šš±š±›–•¤Ž‹‹Ž‡‡‡ŠˆŒ‡Œˆ…ˆŒ^‡^Œ‚Œ‚Œ^^ˆˆ^‡‚^ˆ^EƒFƒ†QQ~Q`StaMbNuNvcvcccccccccccuuc‰‡‚ˆˆˆŒ‚‡‚ŒŒ‡‰‰;‚Œ‚‚‚‡‰;‰‰‰‡‚‡‚Œˆ‚‡ŒŒŒŒŽŽ““¤•••¦’’––™™¨±©©©©©©©©©©©©©©©ÁÁ©©Á©©ÁÁÁ©©¯¨±™™–’’––•¤ŽŽŽ‹‹Ž¢‡‡¢‚Š‡‰ˆ…‹…^Œˆ……ˆ…^‡‚ˆˆˆ^‡‚‚‡^ˆEˆ…ƒ}}„KKKQss`s````ttetLt``t```tLt‡‚ŠˆˆŒŒŠ‰‡Œ^Œ‚‡‰‚Š‡¡;;‰‰Š‚Š‡‡ŒŠ‡‚ŒŒŠŒŠ¢¢“ŽŽŽ•••¦¦’¦–§§§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨±¨±¨¯¨¨¨¨§§–§’’¦¦¦¤“ŽŽŽŽŒ‡‡Œˆˆ‚‡‰‡ˆ‹…ŒŒˆ…ˆˆˆˆˆ‡‚^‚‚‡‚‡‡^ˆ^^E………ƒ}„„KKKKKK~~~~~~~~~~~~~~~~~~‰‡‡‚Œ^ŒŒ‡‚ŒŒ^ŒŒ‡‰‰‡‡;;¡‰;‰‡Š‚‚Š‚Š‚ŠŠ‡‡‡¢ŒŽ¤Ž¤¤•••¤¥¥¥¥¥¦¥¦¦¦¦¦¦¦¦¦¦¦¦¦¦§¦§¦¦¦¦¦¦¦¦•¤¤••Ž•“¢Œ“ŽŽŽŠ‡‡ŒˆŠ‡‚Œ^Œˆˆˆ…ˆŒ^Œ‚‚‚Œ‡‡‡‡^ˆ^^ˆE……ˆ…………ƒƒƒ}„_F___FFFFFFFFFFFFF}‡‡‚‡‚Œ‚Œˆˆ‚ŒŒŒ^ŒŒ‡‰‰;‡;¡¡¡¡‰<‡‚Œ‚‚Œ‚‡‡‡‡‡‡‡¢ŠŠŠ“¢¢¢““£“££££££££££££££¤¤¤¤¤¤¤¤¤¤¤¤¤¤“£¤““¤Ž¢Š¢ŒŒŽŒŠ‡‡‡ŠŠŠ‡‰‚Œ^‚‡‚ˆˆˆŒ‡‡Œˆ^Œ‚‚<‡‚‚‚‚‚^Œ‚‚‚‚^‚^^^^ˆEˆ^^E^ˆˆ^ˆEˆˆEˆˆEˆE‡ŒŒˆˆŠ‚Œˆ^Œ‚‚‡‚Œˆ^‚‰‰‰¡‰¡;‰‰‰ŠˆŒ‚ŒŒŠ‡‡‡‰‰ŒŠ¢‡Š¢‡¢ŠŠ¢¢“¢¢£¢£¢££££££¢£¢£££££££¢£££££¢“¢¢¢““ŽŒ¢Š¢ŒŠŒŒ‡‡ŒŒŠ‚‰‡ˆˆ‚‰‡‚‚‡‚‚‰‚ˆˆˆ‚‰‰‰<‡‡‚‡‡‚‚=‡‡=‡‡‚‚‚‚‚‚‚^^^‚‚^^^^?^‚^‚^^^ˆˆˆ…ˆ‚‚ŒŒ‚Š‚‡ˆ^ŒŠ‡‰;;¡;‰‰‰‰‚ˆ‚‚‚‡‡‡‡ŠŠ‡‡Š¢‡‡Š¢¢¢Š¢¢“¢££££££¤¤£¤££££££££££££££££“¢““““Ž¢‡‡¢ŠŒŒŠ¢‡ŠŒŒ‡^Œ‚‡‰‚‚Œ‚ŒEˆ‚‡‰;‰‰‡‡=‡‡‚‚‚‚‚‚‚‚^^^^^^^^^^ˆEEˆEEEE^^ˆ3F 148 11 1 +›™˜˜‰‰¨’—››—–’–œ’œœžžœžž¬­ŸÄÄ®¤ÆÆÇÇȽ½½½¾¾¾¾¾½¾¾¾¾½½½½½½ÈÈÇÇÆÅŮ🭭žœ©›¨¨™™˜˜”‰‰‰‰‰‰‰‰‰‰^ŽŠ^ŠŠFˆˆˆF‰‰]]^K‹KK„„L_HHvv`RaSbcgcxfddyydyyyyeyyyy™™˜””˜“—››“•••–’œœ’žœž¬ŸŸŸ£¤¤ÈÈȾ¾¿ÁÁÁÁÁÁÁÁÁÁÀÀ¿¿¿¿¿¿¿¾¾¾¾½ÈÇǤ¤®ŸŸšš¬ž—–››‘™˜˜”‰‰‰‰‰‰]‰F‰‰‰]]ŠŠFˆˆˆ‰‰]]‰‰]Š^^K„L_PQQvNizhUkgf††{{{{{{{jj{{j{{e™˜™‘›—“‘›““’—“““—¹¶»¸·º¼¼¼¼ÍÍÐÐÐÐÐÐÐÐÐÐÐÐÏÏÂÂÂÎÂÎÂÂÂÊËÌÌ°°±±±¯¡¹¢¢’—•‘‘™˜”¦‰‰‰]]‰]‰F‰]]‰ˆˆF‰]]‰]Š^|^||}Vrr‡t‚‚€[ZZ\\\ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ”™“—“™‘Ž‘—’——————¹¶¶»»³ººµµ´²ÍÃÐÐÃÃÃÃÃÃÃÃÏÂÂÎÎÎÎÎÎÎÉÊËËÌÌ°°±± ¯¡šš¢¢—•‘™™˜˜”‰‰‰‰‰]Š]‰‰‰Fˆˆˆ]]‰‰^^|Š||M}VGrXtt‚€€[Ys\\\ƒ˜”‘——™›—•“’’—•–’œ›•œœž¬­š­££¤¤ÆÇÇÇÈÈȽÈÈÈÈÈÈÇÈÇÈÈÇÈÈÇÈÇÇÇÇÇƤŤ¯ŸŸ­š¬žœœ•›¨™˜˜‰ˆF‰‰]]]‰‰FˆFF‰]‰F‰‰ŠŠ]Š|K|„LVHHQ`izzhbUxgfffyyydydydydTdT˜™“›˜Ž—’’—“•‘‘œ—‘››››•–œ©œž­­Ÿ­ŸŸŸÄÄÄÄÄÄÄÄÄÄÄÄÄÄ®®Ä®®®ÅÅ®®ÄŸ­­­«žœžžœ–•›‘‘‘˜”‰”‰‰‰‰‰‰]‰‰Fˆˆˆ‰]]‰‰‰]]]]]Š^^KKu„____PHHQvv`v``wwRRRRR``w`w`wR™›•Ž™™›’—•“™˜››‘™‘¨‘¨››¨›©•œžž¬žž««¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬­­­­­­­­¬««œœ©©•©••›¨‘™˜™˜””‰‰‰ˆF‰‰‰‰‰‰‰‰‰F‰‰]‰‰Š]Š‰‰‰‰]]Š^^KMuu„„„„ŒPPPHH…QQQ…Q………QQQQQQQ…›“›’——“““›™›“›˜˜™˜™¨‘¨™¨¨¨¨•©•©©œ©©©©©©©©©©©©©©©©©ªªªªªª©©©©©•©••›››‘™™‘›™”‰‰FFFˆ]Š]‰]‰]‰‰]ŠŠ‰‰]‰‰Š]]]Š^^^KKuuMM„„„„Œ_„_L„„„„L„„„„„„„„›‘—Œ–—“›™˜‘Œ“™˜˜˜˜™™™˜‘›‘™¨™™§™™¨¨™§§§§§§§§§§§§¨¨¨¨¨¨¨¨¨¨¨§§§§™¨¨™™˜˜”™‘‹‘”˜‰ˆF‰FFŠ]‰]‰‰‰‰‰‰]‰‰‰‰‰]ŠŠ]]]ŠŠ]]Š^ŠŠ^^^^^K^^‹^‹‹^K^‹^K‹^K^KK››“œ—•›—‘‘“–™˜˜Ž™™™™˜‘››››‘˜¦¦˜§™§§§˜§§§§§§§§§§§§§˜§˜˜§˜§˜§˜§˜™™˜˜˜˜˜˜Ž‘‘]‰˜ŠŠ‰ˆF‰ˆFF‰F‰F‰‰‰]]]]‰‰‰‰‰]]]]‰ŠŠ]]ŠŠ]]]Š]ŠŠŠŠ^Š^^^^Š^^^^^^^^^^^››››››——“—•˜˜˜™‘™˜™››‘“›¨™™˜˜˜˜§˜§§§§¨¨¨§§§§§§§§§§§§§§§§§§™§˜˜˜˜˜™™‘‘‘”‰”‰FFFF‰F‰‰]]]Š]‰]]‰‰‰]‰]]Š]‰ŠŠ]]]]]ŠŠŠ^^^^^^^^^‹‹K‹K‹K^‹^^42 84 9 0 +45 92 138 1 +      + +       +   + +             +   +   + +  +  +   +    + +          +   + + + +       +      +   +  + + +         +       +   + +   + + +  + +           + +     +  +                 + +      +    + +            +   + +  + +   +     +        + +  +      +  + + + + + +   + +         +  + +   +     + + +       +    +   +  + +  +   +      + + +   + + +  + +  +   + + + + + + +    + + +    +  + + +  +  + +   + + + + + + +   +    + +    + + + + +             + + +    + + + +   + +   + +       2222211111119877776766%%%% +     + + +    +   3333333332221197777666-%%&#"    + + +    ;;======<==<<3:7:777666,&&&  + +     +      ===<<<<<<<<<<:::77776666,& +    +    8898998998887777776666,,%.#"! +       555655665666666666,,,,..#"""!!  +       ,,,,--,------,,++.*...##""!!       *****++++++*****#####""!!!         (())))))))))))!((!!!!        ((((('('(''('''''           ((((((((((((('('''           2122211111199877766666%        3333333332221197777666-%%"!       ;;======<==<<3:7:777666&$&!          ===<<<<<<<<<<:::7777666&&&$           8898998998887777776666,%"        555655665666666666,,,,..      ,,,,--,------,,++.*...##      +  *****++++++*****#####"""    +   (())))))))))))!((!!!! +   +   ((((('('(''(''''' + +  +  (((((((((((((('!(!  + + +    1222111111199877777666   3333333332221197777666-&.   ;;======<==<<3:7:777666$$&   ===<<<<<<<<<<:::7777666$&&  8898998998887777776666,.##   555655665666666666,,,,." ,,,,--,------,,++.*...##   *****++++++*****#####""   (())))))))))))!((!!!!     ((((('('(''('''''      ((((((((((('((!!!!     + 21221111111998777777666&.##"!   3333333332221197777666-%.."" +  ;;======<==<<3:7:777666&& +     ===<<<<<<<<<<:::7777666&& + + 8898998998887777776666,%..#"!    555655665666666666,,,,..#"!"   ,,,,--,------,,++.*...##""!! + +  *****++++++*****#####"""!  + +   (())))))))))))!((!!!!  +   ((((('('(''('''''       (((((((((((((('''' +    21222111111998777766666%.  3333333332221197777666-%%.    ;;======<==<<3:7:777666&&  +   ===<<<<<<<<<<:::7777666&&   8898998998887777776666,% +   + +555655665666666666,,,,..    ,,,,--,------,,++.*...#  *****++++++*****#####"""!   (())))))))))))!((!!!!   + +((((('('(''('''''     +  (((((((((((((('('!     + +2122211111199877767766#"!  3333333332221197777666-6%##    + +;;======<==<<3:7:777666&$&   ===<<<<<<<<<<:::7777666&&&  + + +  + 8898998998887777776666,&#"!   555655665666666666,,,,..#""!  + + + + +  ,,,,--,------,,++.*...#""!! + +  + *****++++++*****#####""(! + + (())))))))))))!((!!!! + + + +   ((((('('(''('''''   + + +  + +  (((((((((((((((!'!!  + + + + +  1222111111199877776566%%.## +  + +3333333332221197777666-%%.! +  +    ;;======<==<<3:7:777666&$  +    ===<<<<<<<<<<:::7777666&& +  8898998998887777776666,...  + + + + 555655665666666666,,,,..#" + +  + +  ,,,,--,------,,++.*...##  +  *****++++++*****#####"""! +  +  +   + +(())))))))))))!((!!!!  +  +  + + ((((('('(''(''''' + +   +  ((((((((((((((('''    +  212211111119987777777666%  + + + 3333333332221197777666-%#"   + +;;======<==<<3:7:777666&$ +    ===<<<<<<<<<<:::7777666&&&& + +   +8898998998887777776666,%   + 555655665666666666,,,,.#!"     + ,,,,--,------,,++.*...#!!!     *****++++++*****#####"""! + +    (())))))))))))!((!!!!! +     ((((('('(''('''''     (((((((((((((('''!!       21222111111998777677666%%#"  +     3333333332221197777666-6&&    ;;======<==<<3:7:777666&&&     ===<<<<<<<<<<:::7777666&&&!   8898998998887777776666,%.#   + 555655665666666666,,,,...    +    ,,,,--,------,,++.*...#"#!     +*****++++++*****#####""!!      (())))))))))))!((!!!!    ((((('('(''('''''   + + + + ((((((((((((('!('      + +   2122211111199877766566,%.#"""     + +  3333333332221197777666-%+.""" +    +  ;;======<==<<3:7:777666&&&#  + + + +  + + ===<<<<<<<<<<:::7777666&$ + + + + + +8898998998887777776666,+*###!!   + 555655665666666666,,,,.##""!!  + +   ,,,,--,------,,++.*...#"!(!!       *****++++++*****#####""!      (())))))))))))!((!!!!    ((((('('(''('''''      (((((((((((((('('         + + +   + +     +     +  +        +     + +       + + +   + +   +             +  +  +         + +   + +         + +               + +  +           + +                 + + +           +  +              + +             + + + +        48 100 110 1 +ÑÑÑÔlÑÒÕÇÇ×kÉÒɘ˜Ê˜Ë¹¹mºII™oJpKqqvrLussss|t|s|t|ssssu›vqKw7p/66%   +ÑÊÊÑÉÖÈÈÕÕÉÑÉÉИ4˜G¹mmzyy¾ xNžMvuuÀ|¡¡¡¡¡¡¡{{¡¡{¡¡t¡ttt¡tt¡|t||uu9vMMw=x(6&'    ÑÔÊÔÉÈÈÈÈÒÉÉÉÉ£ÍÍÏ©V_°ÄË’cŒ‘h“eÅ••””·fffff··fffff³¯¯‚¯Y‚‚‚‚¯Y‰ª„€\^ƒT1A+2!*"    +ÉÊÉk×ÒÈÕÈÒÈÒkÓUÊ£ÍCΦ°†b’´Œ²µ“¶e‰³³a³a³³a³³³³³¯‚YYYªªª„ªªªª„„€€BXX?F1A2>** + + +×ÈÈÕÕ#ÕÈÈÈÈÈÈÉllÓÊ͘¢¹m¿nI šŸwKžvvœuusssLs›sLs›sLLsLLsu›œvv8žKpJ/6&H5550U    +ÕÕÇÕÇÕÕÕÈÈÉÒkÉÑÑ$lÊÊ4ËG¹mºHnI™™™o™ooošoJšššoošošošššJšJppppp½ppJšJšoo6™&.nH5G--  + + ÈÕÕÇÕÈÈÈÈÒÈÈÒÉkkÒllÊlʘ˜GG¹mmºHnnn»I»II»IIIIII»I»II»I»™I™™™™™™™™».nnnHHº%5˜44$$## +  + + +È#ÕÕÕ#×ÈÒÈÈÒkÒÈÒkÉÉÉÉ$lÊ4˜˜˜GG¹¹5mm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmmºmmmmm5mm5m55¹G-˜4l$$kk# +  + + + È×ÕÈÈÕÈÈÈÈÈÈ#ÈÈÈÈÈkÒkkkÉ$l$lllllÊlÊllÊÊÊlÊÊlÊÊ4444˜44˜˜˜4Ê4Ê4Ê4ÊÊll$kkk## + +   ÈÈÒÈÕÈ#×#×È#Õ###ÈÈ#ÈÈkÒkkkkÉÉ$É$É$$lll$Éllllllllllllllllll$lllll$$$lll$Ékkk##  + + +  + + +ÈÒÈÈ##Õ#ÈÈÈÕÈÕÈÕ##ÈÈÈkkkÉkÉ$ÉÉlllllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllll$k$kkk  + + + + + + + ÈÈÈ#×ÈÕÈÈ##ÈÈÈkÉÉlʘG¹mºnI™oJpKKqrv›Lss|s|t|t|tttttts|uLvrMKŸo6I.H%5G- + + +ÈÈ#×###È#ÕÈÈÈkkkÉÆ4Í¢m;¿PO xŸwMvuu||¡¡¡¡¡¡¡{¡¡{¡¡t¡¡t|t¡t|tttt||uuœvMwNxOyPzH-   +  + + + + Õ#ÕÈ#×ÈÈÕ#ÈÈÈkkU)£Ï©V_Ä‹’cŒ‘¸““jj•”””fffff·f·fff·³¯‚‰‚Y¯Y¯Y‚Yªª`€\X[…AW¨!*@©,0   +   + ÕÈ##ÈÈÕ##È#ÈÈkkÆƱ±CV_†b’®F‘µh¶e‰¯³aa³³³a³³³³³³¯‚‚ªYªª~ªªªªª„„¬€BXÁ?®AW¨Z}"V +  + +ÈÈÈÈÒÈÈÈÈÈÈÈÈkÓll£˜¢¢mzny¾ xŸwqvvœuussssLsLsuLssLLLsLuL›rv8žKŸo6I.H55%-  + + + +ÈÈklÉÒkkÈÈÈ#ÈÉ$ÉlÊÊ4ËG¹¹mmHn™™o6oooošššJššoošooošššJšpšpJp½ppppššJoo™InHmm5G-$  +  + + + + #ÈÑÉÒÈÈÇÈÈkkÉl$lll444˜˜GG¹ºHHnnnII»II»IIII»III»II»I»I™™™™™™™™In.nnHHmm¹GG--G-$$ + +  + ÇÕÈkÈkkkÈkkÉkÉÉkÉÉllllÊ44˜-GG¹¹mmÌ5mm5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmmmÌ5¹GGG˜-˜44$  +   kkÈ#ÈkÉÉkÈkkkÈkÈk$lÉkkkÉlllll4Ê4l4lÊlÊ4Êl4ÊÊ4Ê4Ê444444˜44˜4Ê4Ê4ÊÊlll$$É$Ék$$# + +  ÈÈkÒÈÈk#ÈkÒÈ#ÈÈ#ÈÉkkkkkÉkkkkÉ$É$lÉlll$Éllllll$l$lllllllllllllll$É$$É$kkkkkkk + Ç##ÈÈÉkÈ#Õ#È##kkkkkkÈkÉkkÉkÉ$$llllllllllÊl4Ê4Ê4ÊÊlllllllllllllllllÉl$ÉÉÉ$$kk$ +#  +Ç#kÉkÈÈ#Õ#ÈÈÈklÊ4444G5mHnI6oppKqrv›Lss|s|s|t||t|ttttts|urv8ž7ŸJo6.Hm¹-G- ÇÇÇ#ÈÈÈÈ###ÈÈkkkkllll4Í¢¹zPy xNwMMMuu|||¡¡¡¡¡¡{{¡{t¡tt¡t|t¡tt||tt||uuvMMwNNxOPzQ5¢-$  Ç kkÈ#Ç#kkÈk$ÆÆ) C,VÄÄbgcŒ‘–¸“eÅ••”·ffffff··ffff··³¯‚¯‰Y‚‚¯Y‚ªª„¬€­Xƒƒ…1A2S}@,<±< ) Ç# ÈÈÕ#ÈkÈ#ÈÈkÓUÆ)£©©°†Zb]…´²^Ž“¶e‰³³a³³³a³³³³³³‚‚YªYªªª~ªªªª„„€\ˆƒ[T®§2¤}V© £ k#ÈÈÈÈ###È#È$$$lƘQmmHI™Oo ŸNž8vvvœuusssssLLssssLLLsLu›vvvqKKJJo6I.%G-4l$$$ Ç##ÈÈÈÈ###Èkkkkkk$4-GGmºHºn.I™™ooooooššJššššoošoooššpšJšJpp½pppJšJšoo™InnHH%5G˜Ê$$kk#ÇÇÇ#ÕÈÈ#ÈÈÈkkkÈÈkkl4Ê4-GG5¹5mHnnnnnIII»I»IIII»III»III»II™™™™™™™™™nnnnnHHm5¹5G--4$k###ÇÇ###ÈÈ##ÈkÈkÈ#È#È$ÊlÊ4˜4˜˜GG¹G¹5Ìm5mmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmmºmºmmmm5m5m55¹¹GG˜-444$$kkÈÇÇkÉÕ#ÈÈÈÈÈ####Èk$$$lll$l$llÊÊÊ4ÊllÊl4l4lÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4Ê4Ê4ll$É$$$$$kÇÇÇÇ##Çkk##ÈÈ###È#Ç#È$$$É$$llÉkkkÉÉÉ$É$$ll$ll$$llllllll$llllllllllllllll$l$$lÉ$k$Ék$$$ÇÇ##ÇÈ##ÒkkÈÈÈ#Èk$ÉÉ$É$$Ékkk$k$É$lllllllllÊÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$$kÇ##ÕÕ#kÈÈÈkÈÈÈ$Êl4-G¹5¹5mnI™6š7Kqrr›uss|s||tt|tttt|st|suœrv8wpJ/6I.H%54$$$ #ÇÇÇ##ÈÈÈÈ###È#Èll4GG¹5QQQzPyORNwM9uu|¡|¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuuvMwNxx &P;HGl$$k$ ##ÇÇÒkÈÈ####Ç#$l)<©©V"_°i×gcŒ‘–“eÅ••””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yªª„€\Xƒ«…AW¤@@VC< ) #ÈÈÈ##ÈÈÈkÈ$££<¢0,¦°††b]´Œ‘µŽ“e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[TD§2Z@¦C<< Æ)$##ÈÈÈ#ÈÈÈ#k$$Ékl44˜˜¢GmHHmHy  JNwqMvœuusssss›sLsssLsLLLLL›œvvqqKpo/6IH5G-4l$###È###È##ÉÉÉÉ$kkl444˜GG¹G¹¹mHn»I™™™oooošoJšJšoošoošoššJšJšpp½ppppJšJšo66™InHHmG44ll$$$k# ÈÈÈÈÈ#k$k$$$kÈkll4˜-G-G-GG¹5mºHnnn»™I»II»I»I»I»IIIII»II™™™™™™™™IInnnnHH%m55G44l$$$$ ## #È###kÉÉ$llÉkÈ#kll44Ê4˜˜˜˜4˜-GGG¹55m5m¹¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmmmmm¹5¹5¹GG-˜4l$É$$$$## Õ#Õ#ÈÉ$$Él$l$k#È$$l$llll$llllÊll4ÊlÊl4l4l4lÊ4l4Êl44Ê44˜˜44444Ê4Ê4ÊlÊllllkkkkkk###  #È#È#$Él$lÉ$lÉÈk$É$É$$$$ÉkÉ$É$ÉÉl$llll$lllllllllllllllllllllllll$$l$lÉ$$kkÈÈkk## ÈÈÉkÈÈÉl$ÉÉÉl$$Ékkl$$$lÉÉ$É$É$É$llllllllÊÊ4Ê4Ê4lÊllÊllllllllllllllll$$É$Ékkk$##### + ##ÉÉ$kÈÉÉÉ$llÊ444-¹mHnIIoooJpKqrv›Lss|s||tt|t|ttttu›vrž7Ÿo6I..H%5-#  kÉÉ$ÉÈÈk$lll$l4444*¦,C )  #lÉll$ÉkÇÉll44<¢Ï0CV¦†Z‹]®´²^d`¶¶‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ……®§WZ}";©<£UU$ +# #É$lÉl$lÈ#È$l4444-GG¢Q%n.I¾ xŸwwžrvœuussssLsLsLs›sLsLLLsu›œvMžKŸJJo6.HHm5-$$ #ÉÑÉÉ$Ñ$ÉÈÈklÉlÊ4˜GG˜˜GmmHHn.I™6ooooošoššJššoošoošoššššJppppppppJšJo¼™™I»nHH5¹Gl$$$### ll$$É$l$É$klll$$l4˜4Ê4-¹5¹5mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™™»nnnnºm%m5G˜-4l$$$ # ###lllÑ$lÉl$ÉÈkllÉll$4l$l˜Ë-GGGG¹¹mmm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmm55¹5¹GGG-˜44$$kkk # +##ÑllÉ$Ñ$$ÉkkÈk$l4lll$$Ék$$llÊ4Ê4Ê4ÊlÊll4l4l4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4lÊlÊl$$l$kÈk## + $É$ÉÉlÑll$k#È$lll$$ll$kkÉ$$$l$É$$l$lll$$lllll$l$llllllll$llllll$lÉ$l$lÉ$É$k$k  +###ÉÉÉÉlllllllk#k$ll$ÉlÉ$kkÉl$Ñ$lllllllllllÊÊ4Ê4Ê4ÊÊllÊllllllllllllllllll$É$$Ékkk  ÉllllllllÉllÉkl44˜G5mmmHHIoJp½Kqrv›œLss|t|t||t|ttts|uuœrvKw7Jo&nH55-l#Ç # lllllÉllÉ$ll$kl44˜¢5Q;¿yyOxNwMM99u||¡¡¡¡¡¡¡{¡¡{¡t¡tt¡t¡t¡tttt|tu9vMwŸx OPzmm0-4#  +ÉlllÉl$ÉÉ$ll$lÓ£±©V_°†3g’´‘–h“¶Åj•””·fffff·f·fff··³¯‚‰‚Y¯Y¯‚‰Yª„€€­XX[…AW2¤E*VQ± # + +ÉlÉÉlll$lÊl4ʣƣV¦}†¨‹]®´Œµd¸“¶‰¯³³a³³³a³³³³³‡¯‚YªYªªª~ªªªª„Š€€Bƒ[¥AW¨SS*V00< +ll$lllllÊlll$4l$l˜G5QHnIIOOšxpwqMvvuussssLsLsussLLLLsLœLvvžKwJoOIIH%5G--## + +llÊlÊlkÉl$l$ÑllÉk$4˜G¹5mHHnnI»™6™ooošošJšššoošooooššJšJppJp½pppJšššo6™I»HHm5G-˜44$  +##lÊlÉlÉkklÉÉ$$Êl$kkl˜˜GG¹¹55¹mHºHnnn™III»IIIIIIII»II»III™™™™™™™™™.nnnnºmm55G-˜4$È  ÉlÉ$É$kÈÉlÉ$ll$llÉ$l4˜˜-˜˜˜˜˜GG¹5m¹5m¹5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmm5m¹5¹GG˜G-˜44$k ##ÉÉlÊl$ÉkÉ$ll$É$l$kkl4llÉ$É$$llÊ4ÊÊl4ÊÊ4lÊ4ÊÊÊÊ4Ê44Ê444˜44˜44Ê4ÊÊÊlllll$$$l$kk##   #ÒklÊÊll$ÈÉÉÉkk$$Ékk$l$kkkÉ$$$$Élllll$lll$l$l$llllllllllllllll$$l$$lÉ$$kkk## + ÈÉlÊl$É$ÈÈk$kkÉ$ÉkkkÈkÈkkkkÉ$lllllllllllÊl4Ê4Ê4ÊllllllllllllllllllÑlÉ$$É$kk$ÈÈÈ##   +# Éll$Ñ$ÉÉÈÇÈ$ll4˜GGG5¹5mmnI™Jppqq8rv›uss|st|t|tttttttsœ9v8žKŸJo66.m5G-4$ $ +##lllÑkÉ$lkÇÈÉl4˜-G¢mmQm;¿P¾RxwMv9uu||¡¡¡¡{¡¡{¡{¡¡¡¡¡¡t|t¡tt||tt||uuvvMwNx::Oz;50-$k +#  lÊll$lllÉ#Èkl4Í¢Q©VV"_i‹’F‘–h“ej••”””fffff·f·ffff³¯‚¯‰Y‚‚¯Y‚ªY„¬€\XÁ[«A¨S@@VC )U lllÉÉllÉÉÈÈkU<<0¢C©V¦ib®´²‘Ž`¶e‰³a³³³³³³³³³³³‚‚YªYªªª~ªªªª„„€€­Xƒ[T]WZS@¦"<))$#  ÉlÉÉ$lÉ$kÉk##l˜˜Æ4£<¹mnny:oxpžMvvœœusssssLLssssLLLsLuLœvvqžKpo6InHm5˜44 ## Ñ$ÉÉ$ÉÉk$lÉ#Èl44Ñ$ll4˜5m%ºnH»I6¼ooooošoJššJšoošoooššpšJšJpp½ppppššoo™6IInHm5GG4l$ ### llllÑ$É$llk#È$lkk$Éll-GG¹5¹¹5ºHnnn»II»I»II»IIIII»III»II™™™™™™™I™nnnnnHHm5¹G-G-l$##  +  ÑllÉ$ÑllÑlkÈÉÈÈÈÉk$l44˜˜-G˜˜GG¹mm5mm5m¹¹¹¹¹¹¹¹¹¹¹¹¹mmmºmºmmmmmmm5555¹G˜-444$$$$#  +kÑlÉÉlÉl$lÑkÈkÈ#ÈÉÉll$ÊlllllllÊ4llÊÊÊÊÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4ÊÊÊllll$$$$Ékk$# ÒÈkÉ$lÉlÊlkkkÈÈÈkÉ$$kÉ$$Ñ$ÉkÉÉ$lllll$$llllllll$lllllllllllllll$$l$l$ÉkÉ$$kk$##  È##kÊlÉlÊ4É#ÈkkÈkÉ$$lÉ$ll$$$É$$llllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$##  #ÇÒÉlllllÉÈÈk$Ñ4G¹mHHºI™ošpKKq8v›uss|s|s||tt|tttt|st|suvrMqw7JoI...%54k    Õ#ÈkÒkllk##Èkkk$l4¢5;z¿zO xNwMMvuuÀ||¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuvMžwNx:¾y&y;5$  ##kÈÕÈÈllk##k$Æ£<ÏC@°†b’cŒ‘–h“eÅj•””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yª„¬€\XX[…W22>*@V )$ ###ÑÉÈÇÇÕlkÈÈÈkÆ£<¢CC©_†Z‹]D´ŒµŽ“¶e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[T]WWR!*@0) # llkkÈÈÈ##ÕÈÉ4Ê4˜-˜-mHnI¾O6šŸ7ž8vvvœusssss›sLsssLsLLLLLu›œvvqK7poo™&.H%5kk ##  lÑllkkÈÕ#Ç#kÉÉl4˜˜˜4˜¹mmHºHnI™oo¼™ooošoJšJšoošoošoššJšJšpp½pppppšJšo6™Inn%H555G--$  +ÑlÊÉkÈÈ#Ç#kll$Él444˜44GG¹m5mmnnHnn»II»II»I»I»I»IIIII»II™™™™™™™™™.nnnHºHmm5G-G-## +# ÉlkÈÈÈkkÈÈlll$kklll4lll˜-GËGGGGG¹55Ìmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmm5mmÌ5¹¹G¹G˜4444$# # lÉÈÇÈkkkÈ$lÉ$kÈk$lllÉkllÊllllllÊllÊÊ4ÊÊlÊ4l4Êl44Ê44˜˜44444Ê4Ê4Ê4444l$$kk$$$  ÉÈÈÈ##kÈÈ#kÉ$ÉÉÈ#k$l$l$É$$lÉ$kkÉÉlÉlllÉ$llllllllllllllllllllllll$É$l$l$$$$kk$$ # È#kÒÈÈkÈÕÕkkÉl$kkÉ$lllkÉlÉ$ÉÉ$l$llllllllÊ4Ê4Ê4lÊllÊlllllllllllllllllll$l$$l$$ ## ÇÈÈÈ#kÉÉkÈkklʘ˜4$˜5mHHHHIo6špKKrv›uLs|s||tt|t|ttttuu›vrMKwJ/o6.H%%-k #Õ###Ò$lÉÉlÉkl4˜˜4Í5mz¿P¿O x=wMv9u||¡¡¡¡¡¡¡{{¡¡¡¡¡tt¡|tt¡t|tt|t|uuvMMNŸ::OPz%-## #È#ÕÈÉllll$lkkl£<ÏC©V°!×gcŒ‘–“eÅ••””·fffff··fffff³¯¯¯¯Y‚Y¯‚YYª„„€\Xƒ…AW>!!@" $#  Õ#kllÉÉ$lÉl$ÈUÍ<¢Q¦V°†¨ÃbÂc´‘µ““e‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ?…1A2Z¤*@< # ##ÉÊÊlÉÈkÉ$lÉÈ$4-GGQ5mHzHny¾ šNKžvvœœussssLsLsLs›sLsLLLsu›œvMqwKxJo66I%%5 ####Õll$É$È#ÉlllkkÑl44˜GGG˜G5mmnII™o™6oošoššJššoošoošoššššJpppppppppšJoo™IIInHH%55-  ### ÈÈÉÉllÉÈÉll$kÈÉl4˜44lÊ4˜G¹mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™IInnnnHmm555G--- $ +# ÒÈkÉÉll$ÉllkÕ###klllkÉ$ll4˜GGGG¹5m5¹mm¹¹5¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmmmm55¹GG˜˜˜4l-#lkÒk$lÑ$ÉÉkÇ##Õ#ÈÉkÈkkkÉ$l$llÊl4Ê4Êll4lÊl4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4ÊÊlll$$Ék$$$ # #ÑlkÒllÉÉ$kÈÇÕ##ÈÈÈ##ÒÈÉÉÉ$Ék$É$É$lll$$lllll$l$llllllll$lllllll$$l$ll$Ékkkkkkk$ + +# llÈkÉllÉllÈ###ÈÈ###ÈÈkÉ$$$ÉlÉ$lllllllllÊÊ4Ê4Ê4ÊÊllÊlllllllllllllllllll$$$kkÈ#$ + +# Ñ#ÇÕkkÉlÊÊkÈÈkÉÉ$lÊ4˜G5H»IooJKKq8rœ›Lss|t|t||t|t|ttts|u›vrMKwJ/6IH5G˜---  +  kÈÇÈÈ#ÉlllÉ#k$$Ê4<¢¢mz¿yO xNžMv9u||¡¡¡¡¡¡¡{¡¡{¡t¡tttt¡tt|ttt|t|uuuvMwwNx:&z;5¢- # ÉlÉÉkÈkllkÉ$ÉkkÆ ÏC,_†bg’cŒ–¸“eÅ••””ffffff·f·fff··³¯‚‰‚Y¯Y‚‚‰Yª„„€\^ƒT…AW>}",0C   + +  ll$ÉlÉÉllÉlllUUÆ£?<<784/75917.3.1.00.''##%$  ôóòòòòòòòòòòòòõòõòòòòòîïïîîîîïîïîîîîîðððñí +!! **#'"'.-(1.3--3355555585<7<8=8<7;:zznnnnnnnnnnooom|€yVZRrqqkDxBAAE=<<77485555651..0..%$$öõõõõõõõõõõõõõõõõõõòòòòòïòïïïïïïïïïïîîððððñññ! ))**###.'.,1--.5.11359555842477872::fifffiiiiiiidwggvgNNOOSPCQQBB…E>^=‰<771777111,,,1-((( " " ! + + +íííñíììëðëìëìëìëìììììììééééééééìéìéééèèèèèèííí +ê + + !   " --,1315155155585877;::7¡:::bbMbbbbbbbbbMaLL``G~~K__Fƒ@E^^?7‰<<<74/4///1/,Ù,Ù,(((  ßààá áááááááááááááàáàáàáàáááááááááááááááàáààààßÞß  ---.---1/,1155188758<877;::2:::22ss````tttt``ssG~~~QKK__F@ƒ@@E^???<‰7<7777/775//7///&,,,,,((Ü(Ü ÜÜÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßÞÞßÞßÞßÞÞÞÞÝÝ (,---11351&715115785547474:24:::;22KKK~K~~~KK~KKKKK_____@ƒ@@@EE^^^??‡<;4‰2<8<47/44//&&,,/&,,,,(ÜÜÜÜÜÝÝÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÝÞÝÝÝÝÝÝÜÜÜÜÜÜ(( ((,,Ù,1,111111/4/5188555=844;:277;2222;}}_}_}FF}}}}}ƒƒƒ@…@……EEˆ^^^?‚??=‚<7;4;4<774744444/4//&&/&,,,1Ù,ÙÙÙÚÚÚÛÚÚÚÚÛÚÛÚÛÚÛÚÛÛÛÛÚÛÚÛÛÛÛÜÜÜÜÜÜÜÜÛÜÜÛÛÛÛÚÚÚ,((,,,,,,/,/,11111117271878799824;::;‰4;;;247ˆEˆEˆEˆEE^^^^^^^^^‚‚‚^????=?=?==9=7477877774/4/4///4//////,1,/&&&&&Ù&&ÙÙ&ÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØ&ØØÙ,Ù/Ù/,/,/1/1/171877877447787555574247444;;;4<8^^^‚‚^‚‚^^^^^‚^‚‚‚‚=‚==‚?‚======<=8<78774444774/444/////,11/&&&&&,Ù&&ÙÙ&ÙÙ&ØØØØÙØÙØÙØÙØÙØÙØÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØØØ&ÙØØ&&&,//,,//1///17177117157777759988724<74;;;27959^^^^^^^^^^^^^^^^^‚‚‚=‚‡‚==‚??======9877474477/4///////11111/&&&&/Ù&&ÙÙ&ÙÙ&ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙ&Ù&Ù&Ù&&,,//////71717177785577895959877774;;;2;<599‰7;‰7=‚=======9=8777;;7477<9===?9999<4;7887744778877775963657457177777778775777777/71745577<7‰777444565777477844;<88888<47<88<8888885=8=5=889888728999998<;;;;;;4887898dcgdccgcdccccvvuNbMaLG~KK_FB@@@>>???87;7<77447474777777966351-0-1,(((  ââêãääåååæååååäåååååäääääããâá ß ""(,--31175559=9=888=9888877<9999887;;22;48887<88dwdwwddwcwggggvvNNNOeSPQBFF@@@>>>>>6?=7477;;7777747799556355330-(((  âêäåææççççççççççæææææææææååäããâá *(---13555599888888888888<77988<87;2;74;78987778znnnnnnnlnloXXm|€VpHUUPD††BABA>6?>6974;;;7777777796658565.333.100''%$öõõõõõõõõõõõõòïòïïïïïïîîðñ!!)*#""1.-3-35698888<<8=8<8999886988<4::;4;;88859748nnlllolllloohmm€iVTIUUDDDBAAAA>>>9?=<7;247<77777966687763333111.'''%*$öòõòòòòòõòòòòïïïïïïïïïïîðñ !)))*'-(1.3.5555478888998899999==88842:2;44478898877uuvcvccucvcvuvjuNMMOL`GCQBB@@E>>>??988=877<777;4779669842133.311Ù--'   áââãããäããããããããããêããããããâãâââà  "' --,,115555847<899=8889998987877;::22;4788995887LaLLaaaaaaLaLLtG`GC~QQK_@ƒ@E‚?????6?==88‰7<<4;7<88=69997475553313---((((Ü ÞÞßßßßßßßßÞßÞßßàßßßßßàààßßÞÞ ---11/15555958;7<88898=898997;7;:::2;7;7778898888~~~sssGsssssK~KKKKK___F@F@@‚?^=<=6?9=9=74;74;486?9889969787155333131,,,(((ÜÝÝÝÝÝÝÝÞÝÞÝÞÞÝÞÝÝÝÞÞÞÞÞÞÞÞÝÜÜ ( ---1111151555558<7777888=969998842::::;7<77<<4488998___K__K_______F_F}ƒ@@@@@EEE^??<=]>]BBBB>A>>E?BCC?>?A8883&&.+++ + ÜÜÜÞßààààáááááàááááààààààßßÞ /(6/6166:::7;:398338225:{ee{e{ee†ey†yyffgggUhiINQQG__LMKC]>‰F@‰>B‰AB]BB]>@>>]?C?B>?9899&&.++""(  àááãäääääääääããâââââââááááàß((////6666676:::595988355n~nnn~ppZmYookJO‡rllVGM||E‰‰>CCEB>AABBB>>‰FA>CB>>?>A<>995:---0%$!ììíííëëíëííëééèæææææææååçç ###)((//66666776::::3335:652~~~~~~p~~~~ppmmmWooqJtNllGG|D]‰>]DDCB]>>@BCBBE>A@B]>BBB=8<<<9:-:-00,%!  êìééééééééééèèèæææææææææåçç #')(*+/*466776:;66:88967:93dTdydTdTdTTdfTxxgbbSaR`QHPLLK^^E]‰EDEBBCBF@]BBCCC>>AAAB?===2239555+1"" Û ÜÝÞßßàßßßßßßÞÞÞßßßßÞßÞÞÞÝÜ ((((".15667::7;;;32896:539wRRRRaaaaaaaRwRw`vvvQH_L„„MK^^EE]]BDEB>BE>‰AAABCCCE>A2A>@@=2=88<335..5++""ÖÖ××ÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÚÛÛÛÛÛÛÚÙÙ×((///1.&&&316:6:6;6<223:539.5QQ…Qvvvvvvvvv…HHHHPP_„„uKKK^ŠEŠ]]>EEE>F>]A>AAF>BCCB>@ˆ@ˆ2@22A><<3333.51+++""""ÖÖ×××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙØ×ÖÕ"Ö//"/611.&&&35:6;::9285::591::„__P___P____L_LŒ„L„„MuK^K^ŠŠE]‰>]]]ECEB‰>B>]C>‰>CB>B]=@=@¥¥@A‰>]>>EDB]?E]>CCBB>B>]B>AAA@2=AA8=A<><<993333&&&&&ÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÒÓÒÒ..+515155335533595<228993357447^^^^^^^^^^^^^^ŠŠ^^^]Š]]]]]>Š]‰]EC‰‰BBBBBEBBCECEA>BB>@@A@@A>>A==8A<<<88333&3&&&&Ñ&ÑÑÑÒÒÒÒÒÒÒÒÑÒÒÒÒÒÑÒÑÑÒÑÒÑÑ&&&&&3+55555.3353338232=355893:444:^^^^^^^^^^^^^^^^^Š^Š]ŠŠ]]]]]>]C^C]AF>]BBCCCBCCBFA]>@@@¥@@>AA=AAAA++++##r}~~~|~|~|~YYY[SYX\YUXXYUYUUUYUUTTUUUTOSQCRRRRUUUTUUPUPOSRHTUPPUPOLOH:B::99+++#rrrzzzzzzzzYYY[R[TYYYXUUYUUYTUUT[KSTTOSRRRRRKOPVPONKUPPUPSRNOOPPPLN3A770;,,)%%  +klmnoppooooonYX\T[SZYYUYYYYUXUUUUTCRSSTSRKRRKKTPVUPUTRTOPVPNSKSSUPUNKAAAABBB,,)))ghiiiiiiiii\XX\ZRYXYXXUUUXXUUYZC^RRRSRKRCRRTPVVPUPUNNUPPOUOSCRNONRKNNNHHB0700,;)))%deefffffffff\\XYZ[YXYXXU\UUUYTSQQR[RRRRRRRRSUXVPUUOTKSNUOUPUNKRSSCRNKKNNNAAH70B,0,))bbbcbccccccXYZYZRZYYU\UYUUYZSR^RQRRRRRQQRNUVPVTSOTTTSSSTUPPOSRKCRCRKSANAKAAAA77$77$__```````````X\YYXZ[SYYYYUXXTSRRRRRRRRRR^RTYUPXUTTOUNTUNTUPUTUSKSSSRRKSKNNNAKAAAK(A$$77$$___````````\YYXWY[ZYUXYUXYT^RRRRR[RSSSSTUTTXPUTUXUUOYOTTTOUTSSSSRRSSKKSNNKNNHA(A7(7$$_``_```aa```YY\XX\SZYXU\UYUTQ^QRRRSS[SSTVUZSOXUVUPVXUUPURKYTNQRRKKNOONHHB0051))-  lnoppppqqqqYYX\U\STYYYUYYTYSRRRRSSZK[TVUXOSSUVXUXUOTUUTRRTNR[KRRSNOH7H000,))%%  + +nqqsttttttttY\YYYYZZSYYXUXYYTZS[[SZSRSYUUVVTSTUTSTS[TUYTSSSRRRRSTTNNNN:::F>9++++#r}~~~|~|~~~X\Y\YYYS^ZYXXYUYUR[RSZSRZTTTXXXUYSSRRSSSTUOUZRRRSRRTOTNSN:H:FF>99+++#r{{zzzzzzzz\YY\Y\YY[ZTYXUYYSRRSSRRZUXTYUUUXUSQRSTUUTUTUSRRRQRSTTSKNAKABB0,:1)%%  +klmnpopooooon]YYYYYYYZSYYYT]K^Q^[SSZUUXUZZYUUTTTSUXUUYTYSRCRRRSSSRRSTSNNNA77B;)51))%eghiiiiiiiiiZZZYZYYYZRYYTZR^RRRKSZUXUXUTKYUYUYTZUUYTTTZC^QRSTTZSSSSNNSANAA770B,,)))deefffffffffTYYZYYT]Z[SYYSQRRRR[SZTYUUYTSTUUUYTTZTTTZSQRRR[TTSNZNSSSSSKNNNAH77700,)bbcbcccccc]Y]YYYZTT[RZRQQ^Q^RRS[STXUYYYRTYUYYTRRSTTRRS[RSTS[STZSRSKKSTNKNNHAA((7$00```````````Y]TYYZYYZZRR^QQQQQ[[S[RZTYUUYZ[TTYUTR^SRRQS[RSTSRRS[KR[SRRKSKANONAAA7(77$$$$____````````ZYY]YZYZYZR^QQQ^QSZSR[SR[YUXYO[RZUUYSRQ^RR^RSZZSRSS[RRSSSSSKKSNNAAAHH77($$$$````aaa```ZYYZYTYYT[QQQQ^Q[YUZRRRRRZTTYYSRSTTY[QQRQQR[SNZSZZTSSSNNNNAHBB;,,)-% + moppppqqqqQ[ZZYZYY[QQ^Q^Q[YUYT[RRRR[[TZTTZZZTZRQR^RKZTZSSSSSSS[SSNNNHII;,))%%  pprstttttttt^R[TYZT[QQ^Q^QRZYYYYZ[RS[QRZTTYTTTTSC^RR[ZTSS[SSS[RSRSSSKN:MFF>9++#rr}|~~~|~|~~Q^R[ZY[QQQQ^CR[SSYYTTS[[R^RRZYTZZZ[QQQ^RSSZSRSRRRRRRRSNSA:::::>9+++++#r}{zzzzzzzz^RRRZ[^Q^QQQ[[S[[T]YYYS^RRQ^SZZZSSQQ^QQ[SSRR[SSRR[SRSSSNTLL770,)))%%  npopoooooo[[ZR[RR[R^R[ZYYZR[ZZYYZ[^^RRRRS[[QQQQQRSS^RRR[RRSRR[SSKSTONAA7BB,)))%%hiiiiiiihiZYYZ[^^RRRZXXYYYZRSYYZTSR^RS^Q^RQQ^Q^RS[RRRRRRR^RRRSRRSTNNKKAOBB700,))))%eefffffffgf[]ZS[R[R^[XW\X\YZ[ZZZZZZ[RSZRQQQQQQ^RSS[RRR[R^RRRRRRRSSSKKKKNHAAA7000,)bcbcccccccRSZ[[ZZR[Y\YZYYYZRRSYYTTY[ZZSQQ^Q^QRSZ[RR[RR^RRRRRRRRSSRRRKKKKKKAAH77($0$_``````````[[^RZS[[ZX\Y[[TZRRZZZYYYYYTZ[Q^QQQRSS[RR[RR^RRRRR^RRSSRRCRRKKCK3KAAHA77(($$$__`````_``R[R[[[[[YXX\ZSYZRZ]TSTYYYYZSRRRR^RS[RRRR[RRRRRRRRRRSS[RRRRRRRR3KKAHBHB7$($_`````aaaa`^[ZZR[S[Y\YYY\YRSZUYZZYTTZS^R[R[SZZ[R^RRRR^R^R[RRRSS[RR3KAA(770,)1.-*'  kmopppppqqqRZS[ZYY[[YYYY\ZR[YYYYSZYYZQ^RRRSTYTS[S[R^RQRRRRRRSZ[RCKKKAAA$0,).-*'& moprsttttttttR[[[YW\Z[ZYYXYZQ[YYZYZRZS^S[S[[ZZZSSSSS[RRRRR^RR[SRRRRSSNAN::::%++#r}|~~~|~|~~[^RZX\YZ[[Z\XYYS[T\YYS^R^RSR[STYTZ[SZSZSS[S[RRRSSRRRRRKKKAA::FGE++++#r}{zzzzzzzzR[RZYY\ZR[T\YYYYZSYYY[QQ^^R[SZYYZTZSSS[[RSSZSSZTSR^CRRRKKKA77;>11..% & +kkmnopoooooooZY\YYYYYS[[ZYYYYYZTYT[^RQRRRZSZZSSSZS[RSR[TTZUTS[RRRRRRCCKKA7BBI55511.% gghiiiiiiiiiY\X\Y\YYYZR[ZYYYYYZZZRR[S[[ZTZSSSS[SR[SSZSSTTYTZSTZSSSSKRKAKKABBB,;)11)%%%%eefffffffffYY\\YY\\YZ[[[ZXYYZZS^^R[SSZUYZS[S[RR[RZTZSSYYT[NZSSZTSSSNOTN3KA7HBB;;,))))%bbbcbccccccZZYYYY\UY]S[SZT]YTZ^^RQRZTTYZSSZSRSSR[TSSRZTSRRSSSSSSKSTUUNKKK3N7HHH7000,,````````````SZY]Y\X\YYYYZ[[SZZRRRQR[ZZSS[S[SZS[S[SS[RZYT[RR[S[KS[SSUUTNTNNKKNOH77H7000$`_````````Z[SZ\XYYY\\YYZRR[RR^R[ZYYSZS[[SR[SS[SZSRSTUTSRSSRRSSTTTTTNSNTNKNHLLBHBB00$__````aa`a`[[R[T\Y]YYYYY]S^Q^^^[ZYTTZZSTZSS[RRSZSZTTYZSRSZTZSSZTTOONAHH70,,?.--*&& + +mnopppppqqq^^R^Z]YYZYYYYYZR^QQQSTYZZZZZZZ[R[R[[SSTTZSRR[STSSRSSTTTNNHHB7055)-4'/  + pprstttttttt[RR[[YY\YZ[ZZZRRRRRSZZSR[ZSS[SRRSYTSSZYTS[RRRS[SS[SZNTNNOOO::F>9++##r}~~~|~|~~~ZZZ[S]Y\Y[Q[Z^R^^ZZYYZS[ZSSRRRR[TYS[STS[SSSS[S[RRTTUTSTTN:::F>99+++#rr{zzzzzzzz\YZ[[[Y\YT^S^C^^QZYYZZZTTZ[R[[R[ZZSSTYSR[SSSSTS[STUTTUNNNAAH;;551)%- ' + + noppooooonYZ[[RRYYZ]RR^^Q^SZTZ[ZYTZ[RSZTZZSRSZYYS[SSS[TSSSTYTSTTSKKKNHHHB;,;))%- ghiiiiiiiiiZ[R^^[YYZZ^R^R[SYYZRRSZZSR[SZZSSRS[ZTZRSR[R[SSZTTTSS[SSRKOLHHHH70;0)%.%%eefffffffff[[RRZS]YSR^RR[Z]TZS[[ZS^RR[[SZSRZYUT[K[R[SSS[SSTTTSSSRCRNUONNHHHH00000)1))%%bbbcbcccccc[[[YYZZS^^R^[[ZTZZSZYYZRR[SSS[R[UXYSRRRRSTTSSSZTTTZTSRRSTSSNNNOLAA7(($00,,,```````````SZY\YZ[^^QRRZZTZSSZTYZR[ZSZZZRSTUYSRR[R[ZZSSTYUTZSNSRSUUTSNSKNOAKAKA(A770000__````````YZYYZ[R^RR[S]YZZZZZZS[RRZZZSSZT]ZRRR[TTTSSSSZUUZSS[RRSUTSNNSNNAKK(A(A$(000,,`````aa```\\YZ[R[R[[[YYZZTZZS[RRR[SSS[STYSSR^RSTZS[SSZTTSSSRRRSTSNHOHLIB0))%  + moppppqqqq\Y]ZR[[[[[ZTZZ[SSZ[[[RRSZ[R[ZTZSSSS[SZSS[STTUT[SRRSTOTSNNNLIB,)))%'  + +pprsttttttttYZT^R^R[[SZZ[[SZZR[SZSZYT[[TXY[[S[[SS[R[SYUUZSSRR[TUZSTON:L:::>++++#r}~~~|~|~~~Z[^R^^RR[ZYTZZYYZ[SS[SYYSSTXYSRR[SSZSSRSTUYSS[[K[TTSSNOOOP:::::9++++#rrzzzzzzzzS^^^^R[ZZ]YZZZYZRRS[Z[SS[ZYYSRR[RRSTZSTUUYSSRRRSTTSRSSNOOHH770,)))-%  + + mnpopooooon^RR^R[]YTYZZSZS[R[[[[S[RSTT[RR[SSZZSSSTUYS[SSRSZTSSTTSNTNKAN7BBB0511)%%%ghiiiiiiiii^^^R[YYZZZSZ[SR^[SZZS[ZTZZS[RRSZTZSSZZYYSRSSSSZTSSSUTTTNKSKNHH70B5;,))beeeffffffffR^R[ZZZZSS[[SZ[[SZTZSZYYYTZS[[STZRSSSTTS[SS[SSNSSSTTTTSSKKKNAHAHB700,bbcbccccccc[[[ZYZS[ZYZ[ZSZ[ZYZ[SYYYSSS[RSZS[[SZTYTSZSS[SN[[TTSSSSSKNSNNSNHOH7A7777$0_```````````SZZYZZSZ]YZSZ[[SS[[RZYTSR[[RSZS[RSTUUYSSTSRST[RTUTZTSSKRSSNSNNONANAA7777$$$$_____````````ZZZ]ZZZZYZR[[[S[Z[R[YTR^RRRRZTZSZTYYYS[SRR[TZSTYOZNSSR[SKNSKNNNANAA777($$$__`````aa```SZZS[SZZS[R[RR[ZZSZYXY[R[S[SZZSSYYYTS[KRR[SSSTTSSSSSSNSNNNAHBB0,)))%% + moppppqqqqZYZZZZZZ[^[SZZSZZZYXY[RSZZTTZSSSYOZR[RR[TTSSTUS[SRRSSTNNNHBI;;11)%  + oprtttttttttZYYZZZYS[[SZZZZSZYTZ[RRSZZZ[SSZTYZRZN[RNYZSZTS[TTTSRKSNNNLM:F>+9+++#r}}~~~|~|~~ZZZZZZZ[[SZZZ[RZZT[RRRR[TZKRS[ZYYS[ZS[STZSSTSRSTTZKSSSKSHP::FF>:9+++#r{zzzzzzzzz[ZS[[[R[[[ZZS[SYZ[R[[^[ZS[[STTYUSSSR[SSSRSTTSZSTNSRTTTNNNH7H000,))  + nopoooooooZ]YZ[[[RRSZ[^S\XT[ZSSSZYSR[YYUTZS[RRRSSSZZSZTTZSRR[NTSNTNNNA7BB,0,,%%% hiiiiiiiiiZYZ[[SZZZZZSZYXZR[S[[ZYZS[TTYZSR[RSZT[STUTSSTSSSRRRSSNNTOONAHHB700,,5)%%%efffgfffffZS[[[ZZZZZZZTYZ[R[RRSTTS[YYTZS[SRRTTSSTUZRSSSSSSSSSSSSSNTNKNAA7A70B;,,))%%bbcbcccccccZ[RR[[ZZ[SZYYZRRRR[ZZ[[[YUXSR[ZS[STZRSYZSSSTSRSSZSSTTSSSNSKSNKKKAAH7$0B000,_```````````Z[[[ZZ[[R[ZZZS[[[[YYZS[TXVXZRSS[SZSRSTSRRSTTSSSSSSTUTSSNRRKNNNKKAHA(A77$$0,0___`_``````S[[ZTZZRZYYS[[S[[TYZ[RYUXXXZR[[SSSRRZTZSSZTSS[SSSSTTSNSSRKKNNAKHHHA77B7$00,```a`aaa``[[S]ZZ[Z\XY[R[[[SZSR[YXXXXXSRRR[SZTYTZNZTTSS[RSSSZSKSSSNOHH777,?1)%-''  + mnopppppqqq[[[ZZR[XXZRR[RRZYT[RSXWWUYUZRRS[[TYT[TZSZS[RRSSZTTSSRKKHHN7H0051)%'& pprsttttttttZZZSR[ZYZR[[SZZTZZSZZWXXYYYS[SZSSTZK[SSZSKSRSSTOTSSTSSNTHN::F>99+++#r}|~~~|~|~~ZZSZ[YYZRR^SZTYZZZ[SYXXYYYZTSS[STZRRSSZKSZSSZTTZSSSZNSNSNNHF>>>9++++#r}{zzzzzzzzZZ[ZYXZS[[[S]YS[[RZZYYTYYYUXT^SZZSRSYTSSZSSZTTSRSKSSSNSAKAAI;B,?.--%' +klnppooooooo[R[YX][ZZ[[ZZSRR[RSTZYUZTUXXSRSSRSTYUZSSSSRNZSRSS[RK[KSNNNHH77B5D5)..%dehhiiiiiiiii[[ZYZ[RSS[SYS^RZYYTZ[TYYY\UYYS[R[SYUZRS[R[STSRSYNSSSSRSNNOHNN7BB00,5)fffffffffZYY][^R[RZYZ[[YXXXS[SZYYXYTYUT[SZTTSSR[SSSSZSSTTSRTTSNSNTNSOHLBHH000,)bcbcbccccccZY]ZS[[R[ZSZZYXWWY[SRRYUXYYU\SRSTTZRRRSTTTTSTSS[RSSSN[SNSKNOOHNHBHA7(($0,,_```````````YZSS[[R]YZRSY\XWYYYZR^ZUYUXXXZRZTSSS[SZTZSSZSSRKRRSR[KSTKKSHTNNLNAAAA($00$$___````````Z[[[R[ZXYS[YYXX\TZYYUTYYYUXXUTZS[[SZSSSTSRSSSRSSSSSSRSTTTNTNSANHAAA77770$$$_`_````aa`a`ZR[RR[YY[RYYXX\UXYTXXYYYXYXUUYTSRSSSSSZSRSSRRSTTSSTNTTONNHLL;;;,,%%%  + lnopppppqqq[[[[ZYZ[[[ZXWY\X\YYX\YYUUYYYXXTSSS[SSZSSSZTSSSSSSSTTNSNNHOBID;)))%%& + opqsttttttttR[[YY][RR[T\YYYUYYYYTTYXXUYUXUZS[R[ZTSSSTSSSSSSSSKSSSSNSOO:FFF>+++###rr}}~~|~|~~~^RZYY[RZZZYZ[[ZZYYXYYYXXYUXVXXY[RRSYTSSSSS[SSSSRKZSSSNTPP:L:::>9+++#rrzzzzzzzzzR[]Z[RYXX\ZRRC[[SYYUXXYXUXXXVXTSQ[STSSS[[RRRSTSSZTTSSNUMMJL770,))%%&  +kmnoopooooonZYY[^ZXWWY[R^Q^SZZTXXYYYUXXXUYYSSZTR[S[KSSSSTSSSUTSSNUPPMPAA7B0B,5)1.%%gghiiiiiiiiiYXZSY\\W\YYZ[R[[R[ZYYYYXXUYYYTYUUS[SSRRSYTSSTSSSTSSSUUUPOKKK7HB;;0,)5)%%defffffffff]Z[Y\XW\TY\YYS[S^RS[RZXWVYUUTTYXUSR[SSZSSSS[SSSSSRRTVPPUKRCKNHHB70;;5)bbbbcbcccccc[RYYWWX\YYTYYZ[R[RR[QTXXYXXXYXUUYS[RSZTSS[SKSSSSNTTUVVVONKKONNNN7LL7$770_````````````[]Y\WW\YY\YYYYTZS[RR[ZYSZYYYUVXUYSRRSTS[KSRZTZSZTUTOVPUOUOPUOH3KHL7A707$$$$___````````RYXX\YYYYX\XYYXWYSZSSSRQRSTUXVXYUUYSSRRSSSTTTSSSUPZSTUOUPPOOONKNHAA7H770$_``````aa```Z\WW\]Y]YU\YYXXYYYYYYR^Q^RTYYUYUYUXY[RR[SZTTSRSTUUOTRNTOPLMI;;515)%  lnoppppqqqq]X\\YYYYY\YYYXXYYYXUZ[[[RRZZTYTYTUVTS[SNSTTSRSUVUUUTSSOPPIIB0551.%  +nqqsttttttttY]TY\XY\XYZYXYZTYWXYYZSR[SSTYUYTYUYYTSZTTZSRRUUUPXPUSKOMMJMF>FG++++#rr~~~|~|~~~Z[ZYYY\YYYYXX\Y\WWWYYTSTZ[[STYUXXUYTUSSZTK[STUZNUUUUTRTPJMJJJ>+E++++#r{{zzzzzzzzS[^ZYYYYY\XYYYXWWXYYYYYYZRR[SSUXXUUUSRSS[RSUVUTSTUUUTCNOLP>GGD5?1%%  lnoopooooonZ[[T\\YY\XT[ZYXWXXYYUXXUYSSRR[YUUUYTRR[RRRUVVVUS[TOUOTOSAPJMIIDD0,)%%hhiiiiiiiiiZ[[Y\YY\XY]R[UW\YTTYXXXYUYYZRSYYYYSRRRRSSTUVXUUUOUUUUVTKKOPLIII7000))eefffffffffZR[ZYY\XXYYZS\XTYZYUXXYUXYUUYSSTURRRRRRSUUZTUUUUXTTPVPNSTOHLLH3A$($0,,))bbbcbcccccccZ[RRZYXYYYYXZ]S[TXXXUYYYYYYXYZSSTRS[R^SUVUTSRNYPPOTVUUUUNSNTNC3333777$$0,0``````````\]R[S\\YY\WWYR[[\XWXYTYUTYUYTYTS[S[RRRTXXUUTR[TUUYUUUPPORRNNKAK3CA7A(770$7___````````XY[RZXYY\WWXZRRTXVXYYXXXYUYYYYSRRSRRRTUUUUVYSNTUUUPUVVPTRKKKKKK3AHAA77007$``````aa```YY[ZZYYYXWW\SZ]YX\YTXXUYXXUUXT[RRRQRZUYUUUUUTZTTVPXMVPUUNRRRRRCRNSSKNUTNNOSNNNSKTHNNOOHOLLY]T[[ZYWW\YYYYXWXYZTYYYYYXYUZSRRRR^TYUSZTUUUUTKTTYPVPUOUTRNNRQRSSSSSONNNTOOOOKRKSSNNNOOOYXY[R[\WWXYZYXWXYYYXY[R[TUYSRR[RRSUVXUTSSUUUTTZSSOVUTTUTRSNSRKSNNSNOOTNSNOOONNNNNKNKSHOHYW\ZZYWX\YYYXXXYYXXYSR^SZYSQ^RQ^SXVXUUYNRUVUUVORRUUTUUORRSSRKTTNSTOONTONNTONSOONNTNSLNNNY\\XYZY\YYYXXXYZYUYZ^RRR[SQR[SRRYVXUUXU[[TYUVVXUO[SSUURRRCCRSNTNNNTNTONTONSKKNNNNNOLLONNYYYX\[ZY]YXWX\TYYY[RQR[[RRRSSR[TXUYTXPZTSSSUVVVVTSCSTKRRRRRSSKSSNSNNSNTOONKKNSSNSNLLTHOL\\\XYRSYY\XXYYYXYZQQQ^RRRR[S[SSYXXTSNYSTSSSTUVVUTRRRCRRQCSTTSSSSSTOONNHTNSOTNNNKKNNTHNNOYXWW\ZZZXXX\YYXYS^RQ^[RRR[[RRZTTXVXUTTXTUXTTTVUTUTRK[CQQRNTSKSONTOOOTTTNSNNNNNSSNLOKNNHN\WWW\Z[ZXXYT]YYZR^QRSZZSZZSRTYSTXVXUUUYTVVUUUUTUUTSSKRCRTSKSSOUTOTONSNNKKSSSNNNOPOONNNOK\W\\YYSZYYYYYXYZQ^R[ZSSSYZSYWXTSUUUUUXUUXVVUSTUUURRSRRZOTSKRSNOTNNSSNSNSNNSNSNNOLOONLONPW\\YYY]ZZYY\XX\UZRR[SSZSZSTXVXY[SZYXUVVVUUVUSSUT^CRRRRTTSKSNNSNNSSNNSNTNTNNNNNONONNNONLMX\Y]YXXZ[Y\XYYYYYSR[[[[[RSUXXUUTSSUZZUUZOVUYSSSRCRRQKSSKKSOTTTTSKNTOTNNNNNSTOONNSKKSKLPL\YYXWW\Z^TYYYYYYZR[STS[KYYZTXUYYYYTSRUUZTUUUTSQ^C^KSTNSRRSOTTNTNTOOTNSSSSSKNNNNNONKNPLOL60 92 138 1 +HHHHHAAAHLHHAANANNKKKCKKKOPPOTOOTOUOOOTOOUPOOOOTRSNTOTOPULKRCRSKRKRRRKOOSNOOOOOPOOOOONSNBILHAKKHLMLHNKANNAAKANKRSOOUTUPUOOUOTOOUOOOUOTOOTNTNOOPLUOTCSONKRRCRNPOPONKNOPPPOOOONONKLLHAKAHHLLHNNHNNNKKONNNTONSNOUUOOTOOOOUOOOTOOOUOPNSOPPPPPPNSSNKRRRCRNPPPLTSNOOOHSNOOOOKRHNAKNMIMHHANKOHNKKTOOTOOTKRTTOOOTOTOTOUOUUUOOOOOONROPPPPPOTRKRRRRNNONOPLOONNONQNNNNOOTKCHK3KBMLHNNKKNNNKCNPOOOUTKRNOUOTTTOOUOPUPOOOUUOOUONSNPPPPOONKRCCRKTOOSTOOOOPTRCSOPTNOHNTNHNNHOLONKNNNHNRCTOPPUPPNRSNNTOOOTOUPUOOOUOTOOOOOOOSNPOOOOSRQRSKRNLPLNNNOOPLHKKPLLOONTNNSNNHOONAKKNHNNKRSOPPUPUOTTSSKTOUUOULUOTOONOOPOOOPPPOOMPOOTKQCRKRKTOOOPNSOLPUOSNLUOONONSKCNHOOHNKKNONNKCKUPOUPPOTPPTK[KTOOUOOOSNOOOOULUOUPPPPPUOOOSCQCRKKKNOOPLOSNPLOOOONNHONONARRNNOHONNOTNSRRRSUOUPUTTUPUOTSKNOOOOUTKSTUUPPUOOPPPOPONONKCQQCCRKSOOPPOOOSNTOPPHKRKRNNSRKNLOHNNKNONKRRRKTSNUUOTOUOOTOOSTUOOULUTRNNOOOOOULULPPSRSRQQQCRSRSNNOOPOLLOKNPLOOSCRCSKKKKNLONNSSNSKRCRNTSSSTTOPPUOTOOOOOOOUOPOONNSNOOOPPPPUPLOKCCQQQRNONNOTKKOOPPONOLOOOKCKNNRCRKNTNSKKKSKRCRTTTSNTRROPUOTOOTOOUOUOOOOTTKQSTOOPPMPPPPTKRCRRCNOONNNKRCNPLOOLNKOONRKONKKSKSROONKKSSSSKRSOUOTUUOSNTTTTOUOUUOOUPOOTOOONCKOSOPPPPLPNRQRCRCSOLPOOSRKSOOLULPNNOONNKNSKSNHSKNKRKSNTNSRTUPOOUOPUPUNRSNOUUOUOPOUOOTOPPTNSSKNOPPOONRCQCRRRNOOLPONKNONTOLPONOOLONSRKNNNNKKTSSSTNTKRSOUUUPPUOPPOTSKSNOOPOOUOOTOPPPPONSKSKKTNTSRQQQCQCKNOPPPLNNONKKNOOOLOOLNKKKNKKKRKCqqqqqqppppppoon %-.1?55;;IILOLONNKKSTKSNNRQQRRKRNOOPPOOOONKRKRKOLPNNNSKRNNNSKRCRtsssrrrrrrrqqpp +  -..?DDIIIPLOOUOSSONRNNRCCRKNOPPOONLOOPLRCNNKKNOKNSKQCKSNNKKKRK~||zyxxxxwxxx"""" !!446+?GGJMMMPMPLONNSKKRCQCROOOLPPOKNOPMPNNNTHSCKSKNKKKSKKNKKRHHzyyxwxwwwwwuvvv  " #!!!.1IJMIMMPONKSKNRQQRCSOLLPPLNKNLPPLLONNLSCRKKKNNNNKKRKRKONonnononononnnnl + + '%)))5D;IIIIPPPPUNRSKRCKRQROOONLPONKNOOLPPONOONKNNRKNNKNSKKCKNSCiiiiijijjjjjiiihg  %..50;;ILILPLPPLONKNSKKSKRAPOOOOONRNOKNOLOOLOASOOKKNSNKSKKRKNNKRffffffggggggggee%%%%1115,077HBIMMMPLPPOSNKRKSKKKOPMPLNSCKTNNNOLOLPOHNHNKNNKRRKKCKLOKKKccccccddddddcccbb))))5;;;BA(ANBPMPPMPONKRCRRKKSSPPMPLNSKONNOLOOOLONNNKKNNONKKKCKTHKKKK```aaaaaaaaaa```__,,000BBLHA3KKNOLPLPUNRCQQRKKOOKOLPOONNNOLPPLNNOONNNKRKSHNAKKRNONKRKKO``````_`_`___`___$$000H0HBBHHNAANNNNOOKRCQRRKSLPLONOOOLPOKNPLLOKCKNKRCKHONNKSRKHONKRKKNO``````````````__$$$000BBBHLHANONANKNNRCQRRKRNPPPONKNLMMPNNOOOONQNNNRRNHNNKKKCNOHKRKHOLHqqpqqqppppppoonlk +j &&'*-<1,,DBHANHAKQQCRNKNOPMOSRKPMPOON3OLPARNOKKNNOKRKKRKNNKCKHLLOKtsssrrrrrrqqqponm + h&'*46),,;B7AAARCQCCKHOPLPLONKNLPOLLOKOMONNOKRKNNKKKKKKHNRRKKOLOKR~||zyxxxxwxxx """//!46:5;B7AHKCCRKTOOPPMPOLHONNNOLPLLLONKSKKANNSKRKKNHNKKNNHOHKKHzyyxxwwwwwuuvv """"#!8+6):5:7HA3CCKSHOPMMPLLPPONRKNOPPLONKKKCKNNHNKNKKHOKRNHHOHKCKOonnnonoononnnmmlk +j  '*--<100;BBHAKKKNKNHOPLPOOLLONNOHOLLONKKRKNNONNKNKKNNKRKNOHNNKNNAiiiijijijjjjjiige%--.<150$$HBHAANSNNKSNHONHOMMPNOLOSNHKSKNNKNHOHNKKKKNNKCKKNNNKKLLHKffffffgggggggged%%..115;03(7AAKNNAOONRSNNOOPMMLLPLOHKKKKKKKNNNNKKKRKNKANNNHLHNKHLNKKcccccdcddddccccb))%5555;I;A(AAK33KNOOPONNNNNHMMOOLPOLLNCNNKKSHNNKKKRKNHSKNNHLLNKATAKKK```aaaaaaaaaaa`,,;,;;BBBH(KKAKKKSHHLPOHSNRKNPOOOLPLONNSHNKKNNRKNNNKHONKKNNHOHKNNNKRKK```````_`_`_`__0,00B0HHBAK3KAAKNOLOOONKNKKSNOOOHNHLONNNKRKNNNAKNNKNOHKKNNNNNKKNNNNAKK`````````````_`0,00BBBBA33CKAKAOLMMOHRNNSKRKOMLLNRNNNNKRKANHNNNKKNNKKKAHHNKKKOANNAKKKqpqqqppppppopo +&'%077AIMMMLNKOLONRKOMPLOCKKHKCKNNNNNKKKSAKKKKNLLHAHLHKAKSKKAtssrrrrrrrrqqpp + +&),,077BMMLLOLOPLNAKNOLLOCRARRKNLONKKSKANNKNNNOLNKNLHKKKKRAKN~~zzyxxxxwxx""""!%%%))55;BBILLPMPPLNKKKKHOOHKNKCKKNONASAKANNNNNHHHNKANNKKKNAKKNNyyyxxwwwwwuuwvv  """ %%))::;BBHLLLPIOKKKRNNNHNNHNKNNOHNKKKNHONKANHHHNKKNNKKKNNNANHHnnnoonoononnmmm  ),00BBBHHLILMLOKNCNLOHNKNSKKOLONKKKKNONKKNASNHNNNNNNAKANKKNHHiiiiijiijjjjjii ,,00BB77HHNOLLOOHNOLPLNKNKCKNHLNKANANNAKKNHHHNNNHNHNAKNKKAANHNffffffgggggggf`000;;BHANAANLPLLPLLPLNSNK3RKNNNKANOHHNKKKNLLHNHHNKNAAKKKKKNLLHcccccddddddccccb)`_$000BLHHAHNKKKHPLLPMPLNKAKKNNNNHKKKKHHNKANHHLHKKNNKKKKKKNHNHLLHH```aaaaaaaaaa`a`_$$$(0BBBLHAANOHNKRRHPLLLONKNKKNNNLOHNKKNNNKKOLOHNKNANKKAHNKKHHHLLAKN_`````__`_`_``__$$$$$(7BBLIBL3KHHNNNNKKNLLOKKNKKKNNAOHNNHHHNKRAHOHNAKKNHAKNHNANNNHLNKAA````````````_`_$$$$(70B;BBLAKKANNANNNNNLLOKNKKKNNKNHNNKHONAKAHNNNKANHHNANHNNKANHHNKAHHqqpqqpppppppoonlkjh''--.1);,77AAHHNKKOLKKKKKANAKNKAKKHNAKHLOHAKKNHHNAKAKKKANNHHNANHHtssrrrrrrrqqqppnmkj &'%.1<1;B77ANNAKKNKKCRKKNNOHHNKKANKKNHOHNNNHHHNKANHNKKNLHHNHHNHA~~zzyxxxxwxxx ""#!!!=+!>ÞüûÛø÷Ø|›|š ך\{™ z™z[Õy˜yZµxµxYwXwv³WvuVu“ tUt‘TSS4r RqR3 QQ6T5TS4SR3Rp Q2QP1n 0Om/N.- M.M, LL-KK,* J+I*I)H)('&%FIN_PLYRP 63 +Œ1½wœs{oZk9ggc÷b÷^Ö^ÖZµV”RsNrNRJ1FBï=Î9­5Œ1k1k-j-J-J)I))))%(%(!%!!è ç èçæÆÆÅ¥¥¥„ƒƒ dc B!]_LH80  cTUBE_LR_P 127 +J)Õ~r~îyîu«}Íu¬yi}‹y‹u‹qjuIyHyHu(y'yqÅxmæpiælÅl‚tæ`æ\Å`bp‚lapƒhÅ\‚hApalƒdbh‚dahAlÅTbd‚`adAh¥Tb`¤Ta`Adb\A`a\bX¤LA\aXbTAXaTƒLbPATaP„DAPBLAL!PaHƒ@BHbDAH!LƒTTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<7<<7<<7<>==>>>>==@====@@@@@@?AA??A())*)CC?AAAAA??@@==@@????@@==@?ACCAA?@@@??AAAAA?AACC&BB&B&(())*****`**`++++ ,,, -.-,--.-.   + + +  + lllGGLKJKJJJJJJJJJKeJJJeLDKDKDKmLFLFLFLLLLLGGlljllljlB```)Illjljjlljjjllvlllllllll?CAhAlllllllllvll@ll@?AACCCB()))``*))```*`++,,,-,-.--.----....../0   + + + +pRTpRRQTUUUUUUUTTUUUUTTQRoPNoQPNNNPQQNNM999dddddddddd8HABCHndddEKFKFKnFnFnFKmDmFmFm_jG__FFDDDF\\D\\___jjjllkkCCCBB((())(:))``++,,,,---.---------.--..////4    + +SsrSOqsuuWWWWuuVuuWWutSSxxx9xxx999xxx99fadbabbbbbbbbbbmjHjj_bcccdd8JEJEJ8d8d8]]^w^wEE\]E^^^777DD<=>==>=<><>>>=%@?A???$??AACCAAA?$AC&B&'&&'&&&(()----,CBBBBBCB&&'&&&&&&CCC'&&(((&&&&&((()((&(&((&()))*+*+#,,++++#,, -..--..////.0214  + +**))(&B&'&'''''''''''CB((((((((()))))(((())**++++++++++,000//+*********++++**)))*++++++*****+,++,,,,,,,,,,,,,,.---......///////0//000000132     + + + -,,+,+++++++****+*****++,,,+,,,,,,-,,,,,,,--..../////../11212.............-,-,,-,.--.-------......./......//////0001111200011222221111233     + + +0/0000000/0/0000//././/0///00001010100000100111122211112344431111111111111010010100100100010111121212222222212122223333332333443554333334 4       + +3244444332322223233233223323333333333333334434444444343556665444444443434344434333434344434434455544444444444445556555555556666555 55 5 5 56  5    + + + + + 3333333333333433333333433333333333333333333434444443435566665444444433343444443333444444443344454555445454554544656565656666566655 5 5 5 5 5 6 6     + + + 333333322222222222222222233333333333333333333333333334555554333333333333334433333444444333334343333334444444454556565454555656556655 55 565 6      + + !!!!!!!!!!!!!! + + + + + + + +! + + +     + + + + +  +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + + + + + + + + + + + + + + + + +     +    + + +!" + + + + + + + +! + +" + + + + + + + + + + + + + + + + + + + + + + + + + + + +! + + + + + + + + + + + + + + + +!" + +! + + +" + + + + +  + + + + + +        + + +  + + + + + + +" +   +  +  + +  ! +! +"   +  +  + +        + +  +                  +   + +! +  +               + + + +   +                      + +   + + +              +       + + + +                   +   + + + + +                 +  +  + + + + +        +   +       +     + + + + +         +          + + + +  + + + +                         + + + +                   + +  +   +6 44 54 1 +  +           +            +  +   +  + +   +    +   +    +  +  +  +   +     +  +        +     +    +         +         +     +    +      9 44 54 1 + +   + +  +  +    + +  + +       +     +    +       +   + +   +  + +  +  +  +   + +   +           +  +  +  +  +  + + +  + + + + + +   +     + +   +    +  C 200 21 1 +]]ZYX[[X\YXXXTZYS]]SSSSMMOMOJHPNNPLFLF;HFIDDDCCCAAA@@@@s@><<<>E<><<<<<===889k99::999:::0&&&&&&!&&&&&&&&&&&&&&&&&&$$$&$$&&&9999$&&&$&&& ----w-w -w + + + + + ,+,- &-&YZTZZYX[[X\YSS]]R]]TYTZJUOTOOPPNHLFHFFIFDDCCCCACAEEE>>><<<<<<>><<>><<=====88k::i:::000 &&$$%%% + + + + + +n %% %% + + + + +w + -% +w +w + + ***  *********,4{444^T^YS]Y[X\TZZS]SSSZZZTMTYOOOOOLHJLLHHFFyDDDvCACA@A@@@>>>>>>>>ssussrsrrrrrrpr=^!~%ž)v›þTOPBAR2P 241 +   $ +($ 08.4 +$ (-0,,+( @ 5d6e300,1 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD.TBL +XON> +PPP> 6 +HDS1.IMG +GLO> PLYRHD.GLO +---> ewing0,ewing1 +GLO> XXXHD.GLO +---> ewing2,ewing3 +---> ewing4,ewing5,ewing6,ewing7,ewing8,ewing9,ewing10,ewing11,ewing12 +---> ewing13,ewing14,ewing15,ewing16 +GLO> PLYRHD.GLO +---> stock0,stock1 +GLO> XXXHD.GLO +---> stock2,stock3,stock4,stock5 +---> stock6,stock7,stock8,stock9,stock10,stock11,stock12,stock13,stock14 +---> stock15,stock16 +GLO> PLYRHD.GLO +---> shiek0,shiek1 +GLO> XXXHD.GLO +---> shiek2,shiek3,shiek4,shiek5,shiek6,shiek7,shiek8 +---> shiek9,shiek10,shiek11,shiek12,shiek13,shiek14,shiek15,shiek16 +GLO> PLYRHD.GLO +---> kmalone0,kmalone1 +GLO> XXXHD.GLO +---> kmalone2,kmalone3 +---> kmalone4,kmalone5,kmalone6,kmalone7,kmalone8,kmalone9,kmalone10 +---> kmalone11,kmalone12,kmalone13,kmalone14,kmalone15,kmalone16 +HDS2.IMG +GLO> PLYRHD.GLO +---> Person0,Person1 +GLO> XXXHD.GLO +---> Person2,Person3,Person4,Person5,Person6,Person7,Person8,Person9 +---> Person10,Person11,Person12,Person13,Person14,Person15,Person16 +GLO> PLYRHD.GLO +---> Augmon0,Augmon1 +GLO> XXXHD.GLO +---> Augmon2,Augmon3,Augmon4,Augmon5,Augmon6,Augmon7,Augmon8,Augmon9 +---> Augmon10,Augmon11,Augmon12,Augmon13,Augmon14,Augmon15,Augmon16 +GLO> PLYRHD.GLO +---> Benja0,Benja1 +GLO> XXXHD.GLO +---> Benja2,Benja3,Benja4,Benja5,Benja6,Benja7,Benja8,Benja9,Benja10,Benja11 +---> Benja12,Benja13,Benja14,Benja15,Benja16 +GLO> PLYRHD.GLO +---> Cole0,Cole1 +GLO> XXXHD.GLO +---> Cole2 +---> Cole3,Cole4,Cole5,Cole6,Cole7,Cole8,Cole9,Cole10,Cole11,Cole12,Cole13 +---> Cole14,Cole15,Cole16 +GLO> PLYRHD.GLO +---> Drex0,Drex1 +GLO> XXXHD.GLO +---> Drex2,Drex3,Drex4,Drex5,Drex6 +---> Drex7,Drex8,Drex9,Drex10,Drex11,Drex12,Drex13,Drex14,Drex15,Drex16 +GLO> PLYRHD.GLO +---> Elliot0,Elliot1 +GLO> XXXHD.GLO +---> Elliot2,Elliot3 +---> Elliot4,Elliot5,Elliot6,Elliot7,Elliot8,Elliot9,Elliot10,Elliot11 +---> Elliot12,Elliot13,Elliot14,Elliot15,Elliot16 +GLO> PLYRHD.GLO +---> Hrdaway0,Hrdaway1 +GLO> XXXHD.GLO +---> Hrdaway2,Hrdaway3 +---> Hrdaway4,Hrdaway5,Hrdaway6,Hrdaway7,Hrdaway8,Hrdaway9,Hrdaway10 +---> Hrdaway11,Hrdaway12,Hrdaway13,Hrdaway14,Hrdaway15,Hrdaway16 +HDS4.IMG +GLO> PLYRHD.GLO +---> Miller0,Miller1 +GLO> XXXHD.GLO +---> Miller2,Miller3,Miller4,Miller5,Miller6,Miller7 +---> Miller8,Miller9,Miller10,Miller11,Miller12,Miller13,Miller14,Miller15 +---> Miller16 +GLO> PLYRHD.GLO +---> Mutumbo0,Mutumbo1 +GLO> XXXHD.GLO +---> Mutumbo2,Mutumbo3,Mutumbo4,Mutumbo5,Mutumbo6,Mutumbo7 +---> Mutumbo8,Mutumbo9,Mutumbo10,Mutumbo11,Mutumbo12,Mutumbo13,Mutumbo14 +---> Mutumbo15,Mutumbo16 +GLO> PLYRHD.GLO +---> Oakley0,Oakley1 +GLO> XXXHD.GLO +---> Oakley2,Oakley3,Oakley4,Oakley5,Oakley6 +---> Oakley7,Oakley8,Oakley9,Oakley10,Oakley11,Oakley12,Oakley13,Oakley14 +---> Oakley15,Oakley16 +GLO> PLYRHD.GLO +---> Hakeem0,Hakeem1 +GLO> XXXHD.GLO +---> Hakeem2,Hakeem3,Hakeem4,Hakeem5,Hakeem6 +---> Hakeem7,Hakeem8,Hakeem9,Hakeem10,Hakeem11,Hakeem12,Hakeem13,Hakeem14 +---> Hakeem15,Hakeem16 +GLO> PLYRHD.GLO +---> Rice0,Rice1 +GLO> XXXHD.GLO +---> Rice2,Rice3,Rice4,Rice5 +---> Rice6,Rice7,Rice8,Rice9,Rice10,Rice11,Rice12,Rice13,Rice14,Rice15 +---> Rice16 +GLO> PLYRHD.GLO +---> Robins0,Robins1 +GLO> XXXHD.GLO +---> Robins2,Robins3,Robins4,Robins5,Robins6,Robins7,Robins8 +---> Robins9,Robins10,Robins11,Robins12,Robins13,Robins14,Robins15,Robins16 +HDS5.IMG +GLO> PLYRHD.GLO +---> schremp0,schremp1 +GLO> XXXHD.GLO +---> schremp2 +---> schremp3,schremp4,schremp5,schremp6,schremp7,schremp8,schremp9 +---> schremp10,schremp11,schremp12,schremp13,schremp14,schremp15,schremp16 +GLO> PLYRHD.GLO +---> smith0,smith1 +GLO> XXXHD.GLO +---> smith2,smith3,smith4 +---> smith5,smith6,smith7,smith8,smith9,smith10,smith11,smith12,smith13 +---> smith14,smith15,smith16 +GLO> PLYRHD.GLO +---> tisdale0,tisdale1 +GLO> XXXHD.GLO +---> tisdale2,tisdale3,tisdale4,tisdale5,tisdale6 +---> tisdale7,tisdale8,tisdale9,tisdale10,tisdale11,tisdale12,tisdale13 +---> tisdale14,tisdale15,tisdale16 +GLO> PLYRHD.GLO +---> laet0,laet1 +GLO> XXXHD.GLO +---> laet2,laet3,laet4,laet5,laet6,laet7,laet8,laet9,laet10 +---> laet11,laet12,laet13,laet14,laet15,laet16 +GLO> PLYRHD.GLO +---> hawkins0,hawkins1 +GLO> XXXHD.GLO +---> hawkins2,hawkins3 +---> hawkins4,hawkins5,hawkins6,hawkins7,hawkins8,hawkins9,hawkins10 +---> hawkins11,hawkins12,hawkins13,hawkins14,hawkins15,hawkins16 +;Larry +GLO> PLYRHD.GLO +---> johnson0,johnson1 +GLO> XXXHD.GLO +---> johnson2,johnson3,johnson4,johnson5,johnson6,johnson7,johnson8,johnson9 +---> johnson10,johnson11,johnson12,johnson13,johnson14,johnson15,johnson16 +GLO> PLYRHD.GLO +---> divac0,divac1 +GLO> XXXHD.GLO +---> divac2,divac3,divac4,divac5,divac6,divac7,divac8,divac9,divac10 +---> divac11,divac12,divac13,divac14,divac15,divac16 +HDS6.IMG +GLO> PLYRHD.GLO +---> kemp0,kemp1 +GLO> XXXHD.GLO +---> kemp2,kemp3,kemp4,kemp5,kemp6,kemp7,kemp8,kemp9 +---> kemp10,kemp11,kemp12,kemp13,kemp14,kemp15,kemp16 +GLO> PLYRHD.GLO +---> pippin0,pippin1 +GLO> XXXHD.GLO +---> pippin2,pippin3,pippin4,pippin5,pippin6,pippin7,pippin8,pippin9 +---> pippin10,pippin11,pippin12,pippin13,pippin14,pippin15,pippin16 +GLO> PLYRHD.GLO +---> gill0,gill1 +GLO> XXXHD.GLO +---> gill2,gill3,gill4,gill5,gill6,gill7,gill8,gill9,gill10,gill11,gill12 +---> gill13,gill14,gill15,gill16 +GLO> PLYRHD.GLO +---> mullin0,mullin1 +GLO> XXXHD.GLO +---> mullin2,mullin3,mullin4,mullin5,mullin6,mullin7,mullin8,mullin9 +---> mullin10,mullin11,mullin12,mullin13,mullin14,mullin15,mullin16 +ASM> PLYRHD2.TBL +HDS7.IMG +GLO> PLYRHD.GLO +---> BEdwrd0,BEdwrd1 +GLO> XXXHD.GLO +---> BEdwrd2,BEdwrd3,BEdwrd4,BEdwrd5 +---> BEdwrd6,BEdwrd7,BEdwrd8,BEdwrd9,BEdwrd10,BEdwrd11,BEdwrd12,BEdwrd13 +---> BEdwrd14,BEdwrd15,BEdwrd16 +GLO> PLYRHD.GLO +---> gug0,gug1 +GLO> XXXHD.GLO +---> gug2,gug3,gug4,gug5,gug6,gug7,gug8,gug9,gug10 +---> gug11,gug12,gug13,gug14,gug15,gug16 +;GLO> IMGTBL4.GLO +;ASM> plyrhd4.tbl +;ourhds2.img +;---> SAL1,SAL2,SAL3,SAL4,SAL5 +;---> SAL6,SAL7,SAL8,SAL9,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +;ourhds3.img +;---> RAIDEN01,RAIDEN02,RAIDEN03,RAIDEN04,RAIDEN05,RAIDEN06 +;---> RAIDEN07,RAIDEN08,RAIDEN09,RAIDEN10,RAIDEN11,RAIDEN12,RAIDEN13,RAIDEN14 +;---> RAIDEN15,RAIDEN16 +;raiden.img +;---> ballite1,ballite2,ballite3,ballite4,ballite5,ballite6,ballite7,lighten1 +;---> lighten2,lighten3,lighten4,lighten5,lighten6,lighten7 +PPP> 0 + + diff --git a/BACKUP/ART110/BB2.LOD b/BACKUP/ART110/BB2.LOD new file mode 100644 index 0000000..7f1fd13 --- /dev/null +++ b/BACKUP/ART110/BB2.LOD @@ -0,0 +1,93 @@ +***> 3eda390,1 +; +POF> +COF> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W +; +ASM> CROWD.TBL +; +nbacrowd.img +;---> COACH02,COACH03,COACH04,COACH05,COACH06 +;---> BNCHPL02,BNCHPL03 +;,BNCHPL04,BNCHPL05,BNCHPL06,BNCHPL07 +---> CR4THD02,CR4THD03,CR4THD04,CR4THD05 +;,CR4THD06,CR4THD07 +; +ASM> PLAQUES.TBL +; +tvtext.img +---> BST_DEFred,BST_STKred,BST_RNKred,BST_OFFred +; +PON> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRSEQ.TBL +GLO> PLYRSEQ.GLO +; +nba_pas1.img +---> w1cp1,w1cp2,w1cp3,w1cp4 +---> w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 +---> w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 +---> w5cp5,w5cp6 +---> w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 +---> w1ohp9,w1ohp10,w1ohp11 +---> w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 +---> w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 +---> w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 +---> w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11 +---> w5ohp1,w5ohp2,w5ohp3,w5ohp4 +---> w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 +; +nba_msc2.img +---> w1push1,w1push2,w1push3 +---> w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 +---> w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 +---> w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 +---> w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 +---> w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 +---> w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 +---> w5push10,w5push11 +; +nba_def1.img +---> T1SWPE1,T1SWPE2,T1SWPE3,T1SWPE4 +---> T1SWPE5 +---> T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T1SWPE10 +---> T1SWPE11,T1SWPE12,T2SWPE1,T2SWPE2 +---> T2SWPE3 +---> T2SWPE4,T2SWPE5 +---> T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T2SWPE10,T2SWPE11,T2SWPE12,T3SWPE1 +---> T3SWPE2,T3SWPE3,T3SWPE4 +---> T3SWPE5 +---> T3SWPE6,T3SWPE7,T3SWPE8 +---> T3SWPE9,T3SWPE10,T3SWPE11,T3SWPE12,T4SWPE1,T4SWPE2,T4SWPE3,T4SWPE4 +---> T4SWPE6 +---> T4SWPE5,T4SWPE7,T4SWPE8,T4SWPE9,T4SWPE10,T4SWPE11 +---> T4SWPE12,T5SWPE1,T5SWPE2,T5SWPE3,T5SWPE4,T5SWPE6 +---> T5SWPE5 +---> T5SWPE7,T5SWPE8,T5SWPE9,T5SWPE10,T5SWPE11,T5SWPE12 +; +nba_def3.img +---> w1reb5,w1reb7,w1reb8,w1reb9,w1reb10 +---> w2reb1,w2reb2,w2reb3,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 +;---> w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 +---> w4reb4,w4reb5,w4reb7,w4reb8,w4reb9,w4reb10 +---> w5reb5,w5reb7,w5reb8,w5reb9 +---> w1blokl1,w1blokl2,w1blokl3,w1blokl4 +---> w2blokl1,w2blokl2,w2blokl3,w2blokl4 +---> w3blokl1,w3blokl2,w3blokl3,w3blokl4 +---> w4blokl1,w4blokl2,w4blokl3,w4blokl4 +---> w5blokl1,w5blokl2,w5blokl3,w5blokl4 +; +nba_def4.img +---> w1rej1,w1rej2,w1rej3 +---> w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 +---> w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11 +;,w3rej1 +;---> w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 +---> w4rej1,w4rej2,w4rej3,w4rej4,w4rej5 +---> w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 +---> w4rej11 diff --git a/BACKUP/ART110/BB3.LOD b/BACKUP/ART110/BB3.LOD new file mode 100644 index 0000000..8b177b0 --- /dev/null +++ b/BACKUP/ART110/BB3.LOD @@ -0,0 +1,35 @@ +***> 5c3ec30,2 +; +COF> +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> BEHIND.TBL +; +nba_pas2.img +---> T1HINDR6,T1HINDR7,T1HINDR8,T1HINDR9,T1HINDR10 +---> T2HINDR6,T2HINDR7,T2HINDR8,T2HINDR9,T2HINDR10 +---> T3HINDR6,T3HINDR7,T3HINDR8,T3HINDR9,T3HINDR10 +---> T4HINDR6,T4HINDR7,T4HINDR8,T4HINDR9,T4HINDR10 +;---> T5HINDR6,T5HINDR7,T5HINDR8,T5HINDR9,T5HINDR10 +---> T2HINDL6,T2HINDL7,T2HINDL8,T2HINDL9,T2HINDL10 +---> T3HINDL6,T3HINDL7,T3HINDL8,T3HINDL9,T3HINDL10 +---> T4HINDL6,T4HINDL7,T4HINDL8,T4HINDL9,T4HINDL10 +; +ASM> PASS.TBL +; +---> W1NLPR1,W1NLPR2,W1NLPR3,W1NLPR4 +---> W2NLPR1,W2NLPR2,W2NLPR3,W2NLPR4 +---> W3NLPR1,W3NLPR2,W3NLPR3,W3NLPR4 +---> W4NLPR1,W4NLPR2,W4NLPR3,W4NLPR4 +---> W5NLPR1,W5NLPR2,W5NLPR3,W5NLPR4 +; +nba_pas3.img +---> W1ALPAS1,W1ALPAS2,W1ALPAS3,W1ALPAS4 +---> W2ALPAS1,W2ALPAS2,W2ALPAS3,W2ALPAS4 +---> W3ALPAS1,W3ALPAS2,W3ALPAS3,W3ALPAS4 +---> W4ALPAS1,W4ALPAS2,W4ALPAS3,W4ALPAS4 +---> W5ALPAS1,W5ALPAS2,W5ALPAS3,W5ALPAS4 diff --git a/BACKUP/ART110/BB4.LOD b/BACKUP/ART110/BB4.LOD new file mode 100644 index 0000000..269b55f --- /dev/null +++ b/BACKUP/ART110/BB4.LOD @@ -0,0 +1,48 @@ +***> 52e6c90,2 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> FLAIL.TBL +GLO> FLAIL.GLO +; +nba_msc1.img +;---> w1cow1,w1cow2,w1cow3 +;---> w1cow4,w1cow5,w1cow6,w1cow7,w2cow1,w2cow2,w2cow3,w2cow4,w2cow5,w2cow6 +;---> w2cow7,w3cow1,w3cow2,w3cow3,w3cow4,w3cow5,w3cow6,w3cow7,w4cow1,w4cow2 +;---> w4cow3,w4cow4,w4cow5,w4cow6,w4cow7,w5cow1,w5cow2,w5cow3,w5cow4,w5cow5 +;---> w5cow6,w5cow7 +---> w1flai1,w1flai2,w1flai3,w1flai4,w1flai5,w1flai6,w1flai7,w1flai8 +---> w2flai1,w2flai2,w2flai3,w2flai4 +---> w2flai5,w2flai6,w2flai7,w2flai8,w2flai9,w2flai11 +---> w3flai1,w3flai2,w3flai3,w3flai4,w3flai5,w3flai6,w3flai7 +---> w3flai8,w3flai9 +---> w4flai1,w4flai2,w4flai3,w4flai4,w4flai5,w4flai6 +---> w4flai7,w4flai8 +---> w5flai2,w5flai3,w5flai4,w5flai5,w5flai6 +---> w5flai7,w5flai8,w5flai10,w5flai11 +; +nba_msc4.img +---> w1fall1,w1fall2 +---> w1fall3,w1fall4,w1fall5,w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 +---> w1fall11,w1fall12,w1fall13,w1fall14,w1fall15,w1fall16,w1fall17,w1fall18 +---> w1fall19,w1fall20,w1fall21,w1fall22,w1fall23 +---> w2fall1,w2fall2 +---> w2fall3,w2fall4,w2fall5,w2fall6,w2fall7,w2fall8,w2fall9,w2fall10 +---> w2fall11,w2fall12,w2fall13,w2fall14,w2fall15,w2fall16,w2fall17,w2fall18 +---> w2fall19,w2fall20,w2fall21 +---> w3fall1,w3fall2,w3fall3,w3fall4 +---> w3fall5,w3fall6,w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 +---> w3fall13,w3fall14,w3fall15,w3fall16,w3fall17,w3fall18,w3fall19,w3fall20 +---> w3fall21,w3fall22,w3fall23,w3fall24 +---> w4fall1,w4fall2,w4fall3 +---> w4fall4,w4fall5,w4fall6,w4fall7,w4fall8,w4fall9,w4fall10,w4fall11 +---> w4fall12,w4fall13,w4fall14,w4fall15,w4fall16,w4fall17,w4fall18,w4fall19 +---> w4fall20,w4fall21,w4fall22 +---> w5fall1,w5fall2,w5fall3,w5fall4 +---> w5fall5,w5fall6,w5fall7,w5fall8,w5fall9,w5fall10,w5fall11,w5fall12 +---> w5fall13,w5fall14,w5fall15,w5fall16,w5fall17,w5fall18,w5fall19,w5fall20 +---> w5fall21,w5fall22 diff --git a/BACKUP/ART110/BB5.LOD b/BACKUP/ART110/BB5.LOD new file mode 100644 index 0000000..d557111 --- /dev/null +++ b/BACKUP/ART110/BB5.LOD @@ -0,0 +1,187 @@ +***> 36ad630,0 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRDSP.TBL +; +nba_sht2.img +---> T3DESPA1,T3DESPA2,T3DESPA3,T3DESPA4,T3DESPA5,T3DESPA6 +---> T3DESPA7 +---> T3DESPB1,T3DESPB2,T3DESPB3,T3DESPB4,T3DESPB5 +---> T3DESPB6,T3DESPB7,T3DESPB8 +---> T4DESPA1,T4DESPA2,T4DESPA3,T4DESPA4,T4DESPA5,T4DESPA6 +---> T4DESPA7,T4DESPA8 +; +ASM> PLYRDSEQ.TBL +GLO> DUNKS.GLO +; +nba_dnk1.img +---> M3SPRLA1,M3SPRLA2,M3SPRLA3,M3SPRLA4,M3SPRLA5 +---> M3SPRLA6,M3SPRLA7,M3SPRLA8,M3SPRLA9,M3SPRLA10 +---> W3SETLA1,W3SETLA2,W3SETLA3,W3SETLA4 +---> W3SETLA5,W3SETLA6,W3SETLA7,W3SETLA8,W3SETLA9 +---> S1SETLA1,S1SETLA2,S1SETLA3,S1SETLA4,S1SETLA5 +---> S1SETLA6,S1SETLA7,S1SETLA8,S1SETLA9 +---> S2HBHLA1,S2HBHLA2,S2HBHLA3,S2HBHLA4 +---> S2HBHLA5,S2HBHLA6,S2HBHLA7,S2HBHLA8,S2HBHLA9 +---> S3HBHLA1,S3HBHLA2,S3HBHLA3,S3HBHLA4 +---> S3HBHLA6,S3HBHLA7,S3HBHLA8,S3HBHLA9 +---> S3BEHLA1,S3BEHLA2,S3BEHLA3,S3BEHLA4 +---> S3BEHLA5,S3BEHLA6,S3BEHLA7,S3BEHLA8,S3BEHLA9 +---> S3BETLA2,S3BETLA3,S3BETLA4,S3BETLA5 +---> S3BETLA6,S3BETLA7,S3BETLA8,S3BETLA9,S3BETLA10 +---> S4SETLA1,S4SETLA2,S4SETLA3,S4SETLA4,S4SETLA5 +---> S4SETLA6,S4SETLA7,S4SETLA8,S4SETLA9 +---> S5SETLA1,S5SETLA2,S5SETLA3,S5SETLA4,S5SETLA5 +---> S5SETLA6,S5SETLA7,S5SETLA8,S5SETLA9,S5SETLA10 +---> W3SPLY1,W3SPLY2,W3SPLY3,W3SPLY4,W3SPLY5,W3SPLY6,W3SPLY7,W3SPLY8 +---> W3SPLY9,W3SPLY10,W3SPLY11,W3SPLY12,W3SPLY13,W3SPLY14,W3SPLY15,W3SPLY16 +---> W3SPLY17,W3SPLY18,W3SPLY19,W3SPLY20 +; +nba_dnk2.img +---> M1SPDU1,M1SPDU2,M1SPDU3 +---> M1SPDU4,M1SPDU5,M1SPDU6,M1SPDU7,M1SPDU8,M1SPDU9,M1SPDU10,M1SPDU11 +---> M1SPDU12,M1SPDU13,M1SPDU14,M1SPDU15,M1SPDU16,M1SPDU17,M1SPDU18,M1SPDU19 +---> M1SPDU20,M2DKDU1,M2DKDU2,M2DKDU3,M2DKDU4,M2DKDU5,M2DKDU6,M2DKDU7 +---> M2DKDU8,M2DKDU9,M2DKDU10,M2DKDU11,M2DKDU12,M2DKDU13,M2DKDU14,M2DKDU15 +---> M2DKDU16,M3TUKDU1,M3TUKDU2,M3TUKDU3,M3TUKDU4,M3TUKDU5,M3TUKDU6 +---> M3TUKDU7,M3TUKDU8,M3TUKDU9,M3TUKDU10,M3TUKDU11,M3TUKDU12,M3TUKDU13 +---> M3TUKDU14,M3TUKDU15,M3TUKDU16,M3TUKDU17,M3SPRDU1,M3SPRDU2,M3SPRDU3 +---> M3SPRDU4,M3SPRDU5,M3SPRDU6,M3SPRDU7,M3SPRDU8,M3SPRDU9,M3SPRDU10 +---> M3SPRDU11,M5REVDU1,M5REVDU2,M5REVDU3,M5REVDU4,M5REVDU5,M5REVDU6 +---> M5REVDU7,M5REVDU8,M5REVDU9,M5REVDU10,M5REVDU11,M5REVDU12,M5REVDU13 +---> M5REVDU14,M5REVDU15,M5REVDU16,S1TUKDU1,S1TUKDU2,S1TUKDU3,S1TUKDU4 +---> S1TUKDU5,S1TUKDU6,S1TUKDU7,S1TUKDU8,S1TUKDU9,S1TUKDU10,S1TUKDU11 +---> S3SORDU1,S3SORDU2,S3SORDU3,S3SORDU4,S3SORDU5,S3SORDU6,S3SORDU7,S3SORDU8 +---> S3BKDU1,S3BKDU2,S3BKDU3,S3BKDU4,S3BKDU5,S3BKDU6,S3BKDU7,S3BKDU8,S3BKDU9 +---> S3BKDU10,S3BKDU11,S3BKDU12,S3BKDU14,S3BKDU15,S3BKDU16,W3SPRDU1 +---> W3SPRDU2,W3SPRDU3,W3SPRDU4,W3SPRDU5,W3SPRDU6,W3SPRDU7,W3SPRDU8,W3SPRDU9 +---> W3SPRDU10,W3SPRDU11,W3SPRDU12,W3SPRDU13,W3SPRDU14 +;---> W3SWDU1,W3SWDU2,W3SWDU3,W3SWDU4,W3SWDU5,W3SWDU6,W3SWDU7,W3SWDU8,W3SWDU9 +---> W3SWDU10,W3SWDU11,W3SWDU12,W3FLDU1,W3FLDU2,W3FLDU3,W3FLDU4,W3FLDU5 +---> W3FLDU6,W3FLDU7,W3FLDU8,W3FLDU9,W3FLDU10,W3FLDU11,W3FLDU12,W3FLDU13 +---> W3CRZDU1,W3CRZDU2,W3CRZDU3,W3CRZDU4,W3CRZDU5,W3CRZDU6,W3CRZDU7,W3CRZDU8 +---> W3CRZDU9,W3CRZDU10,W3CRZDU11,W3CRZDU12,W3CRZDU13,W3CRZDU14,W3CRZDU15 +---> W3CRZDU16,W3CRZDU17,W3CRZDU18,W3CRZDU19,W3CRZDU20 +---> W3SPNDU1,W3SPNDU2,W3SPNDU3,W3SPNDU4,W3SPNDU5 +---> W3SPNDU6,W3SPNDU7,W3SPNDU8,W3SPNDU9,W3SPNDU10,W3SPNDU11,W3SPNDU12 +---> W3SPNDU13,W3SPNDU14,W3SPNDU15,W3SPNDU16,W3SPNDU17,W3SPNDU18,W3SPNDU19 +---> W3SPNDU20,W3SPNDU21 +---> W3SMDU6,W3SMDU7,W3SMDU8,W3SMDU9 +; +nbafades.img +---> W2FADIN4,W2FADIN5,W2FADIN6 +---> W2FADIN7,W2FADIN8,W2FADIN9,W2FADIN10,W2FADIN11,W2FADIN12,W2FADIN13 +---> W3FADIN5,W3FADIN6 +---> W3FADIN7,W3FADIN8,W3FADIN9,W3FADIN10,W3FADIN11,W3FADIN12,W3FADIN13 +---> W4FADIN2,W4FADIN3,W4FADIN4,W4FADIN5 +---> W4FADIN8,W4FADIN9,W4FADIN10,W4FADIN11,W4FADIN12,W4FADIN13 +---> W2FADAW3,W2FADAW4,W2FADAW5,W2FADAW6 +---> W2FADAW7,W2FADAW8,W2FADAW9,W2FADAW10,W2FADAW11,W2FADAW12,W2FADAW13 +---> W3FADAW3,W3FADAW4,W3FADAW5,W3FADAW6 +---> W3FADAW7,W3FADAW8,W3FADAW9,W3FADAW10,W3FADAW11,W3FADAW12,W3FADAW13 +---> W4FADAW3,W4FADAW4,W4FADAW5,W4FADAW6 +---> W4FADAW7,W4FADAW8,W4FADAW9,W4FADAW10,W4FADAW11,W4FADAW12,W4FADAW13 +; +nba_sht2.img +---> w1hks1,w1hks2,w1hks3 +---> w1hks4,w1hks5,w1hks6,w1hks7,w1hks8,w1hks9,w1hks10 +---> w3hks1,w3hks2,w3hks3 +---> w3hks4,w3hks5,w3hks6,w3hks7,w3hks8,w3hks9,w3hks10,w4hks1,w4hks2,w4hks3 +---> w4hks4,w4hks5,w4hks6,w4hks7,w4hks8,w4hks9,w4hks10,w5hks1,w5hks2,w5hks3 +---> w5hks4,w5hks5,w5hks6,w5hks7,w5hks8,w5hks9,w5hks10 +; +nbafhook.img +---> w3fhks1,w3fhks2,w3fhks3,w3fhks4,w3fhks5,w3fhks6,w3fhks7,w3fhks8,w3fhks9 +; +ASM> STAND.TBL +; +nba_msc3.img +---> w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 +---> w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 +---> w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 +; +nba_stn1.img +---> W1ST1 +---> W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 +---> W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 +---> W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 +---> w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 +---> w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 +---> w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 +; +ASM> PLYRSEQ2.TBL +; +nba_msc2.img +---> w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 +---> w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 +---> w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 +---> w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 +---> w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +; +nba_msc3.img +---> w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 +---> w4hndne1,w4hndne2,w4hndne3,w4hndne4 +---> w4hndne5 +---> w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 +---> w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 +---> w2hndhp1 +---> w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 +---> w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 +---> w1pikup1,w1pikup2 +---> w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 +---> w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 +---> w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +; +nbaspnmv.img +---> W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 +---> W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 +---> W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 +; +ASM> PLYRSEQ3.TBL +GLO> PLYRSEQ3.GLO +; +nba_stn1.img +---> w1dst1,w1dst2,w1dst3,w1dst4,w1dst5,w1dst6,w1dst7,w1dst8,w1dst9,w1dst10 +---> w2dst1,w2dst2,w2dst3,w2dst4,w2dst5,w2dst6,w2dst7,w2dst8,w2dst9,w2dst10 +---> w3dst1,w3dst2,w3dst3,w3dst4,w3dst5,w3dst6,w3dst7,w3dst8,w3dst9,w3dst10 +---> w4dst1,w4dst2,w4dst3,w4dst4,w4dst5,w4dst6,w4dst7,w4dst8,w4dst9,w4dst10 +---> w5dst1,w5dst2,w5dst3,w5dst4,w5dst5,w5dst6,w5dst7,w5dst8,w5dst9,w5dst10 +---> w1drcr1,w1drcr2,w1drcr3,w1drcr4,w1drcr5,w1drcr6,w1drcr7,w1drcr8,w1drcr9 +---> w1drcr10,w1drcr11,w1drcr12,w2drcr1,w2drcr2,w2drcr3,w2drcr4,w2drcr5 +---> w2drcr6,w2drcr7,w2drcr8,w2drcr9,w2drcr10,w2drcr11,w2drcr12,w3drcr1 +---> w3drcr2,w3drcr3,w3drcr4,w3drcr5,w3drcr6,w3drcr7,w3drcr8,w3drcr9 +---> w3drcr10,w3drcr11,w3drcr12,w4drcr1,w4drcr2,w4drcr3,w4drcr4,w4drcr5 +---> w4drcr6,w4drcr7,w4drcr8,w4drcr9,w4drcr10,w4drcr11,w4drcr12,w5drcr1 +---> w5drcr2,w5drcr3,w5drcr4,w5drcr5,w5drcr6,w5drcr7,w5drcr8,w5drcr9 +---> w5drcr10,w5drcr11,w5drcr12,w1stand1,w1stand2,w1stand3,w1stand4,w2stand1 +---> w2stand2,w2stand3,w2stand4,w3stand1,w3stand2,w3stand3,w3stand4,w4stand1 +---> w4stand2,w4stand3,w4stand4,w5stand1,w5stand2,w5stand3,w5stand4 +; +ASM> PLYRJSHT.TBL +; +nba_sht1.img +---> w1js1,w1js2,w1js3,w1js4 +---> w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 +---> w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 +---> w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 +---> w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 +---> w5js9,w5js10 +; +nba_sht3.img +---> W1UNDR1,W1UNDR2,W1UNDR3,W1UNDR4,W1UNDR5 +---> W1UNDR6,W1UNDR7,W1UNDR8,W1UNDR9 +---> W5UNDR1,W5UNDR2,W5UNDR3,W5UNDR4,W5UNDR5 +---> W5UNDR6,W5UNDR7,W5UNDR8,W5UNDR9,W5UNDR10,W5UNDR11 +; +ASM> PLYRMAKE.TBL +; +nba_mak1.img +;W5BGDR2 is an unused img +---> W5BGDR1,W5BGDR2,W5BGDR3,W5BGDR4,W5BGDR5,W5BGDR6,W5BGDR7,W5BGDR8,W5BGDR9 +---> W5BGDR10 + diff --git a/BACKUP/ART110/BB6.LOD b/BACKUP/ART110/BB6.LOD new file mode 100644 index 0000000..08c2e14 --- /dev/null +++ b/BACKUP/ART110/BB6.LOD @@ -0,0 +1,224 @@ +***> 4000000,2 +; +PON> +CON> +XOF> +; +ASM> names2.tbl +GLO> names2.glo +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +pnames2.img +---> SCOTT,ROBERTSON,CHAPMAN,WEBB,LANG,RUFFIN,MARCI2,WEATHSPN +---> AMRICH,ANZALONE,BENSON,BUTATA,FUNK,HAEGERJR,JIGGETTS +---> KELLER,LAWMAN,LEE,MDOC,MIKE,MUNDAY,NORTH,PERRY,RIVETT,SEAN,ZIRIN +---> HBETT,MBETT +pnames.img +---> GUGLI2,MCKEE2,ELLIOT2,TURMELL,CARLTON,HEY +---> FITZ,AIRMOR,BARDO,HEDRICK,MINIFE,MARTIN,PESINA,THOMPS,GEER,JAPPLE +---> FERRIER,VINIK,EHRLICH,LIPTAK,ROOT,MEDNICK,ROAN,OURSLER,QUINN,TOBIAS,BOON +PLYRNAME.img +---> ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR,BOSNBRO,BOSNBAR +;,ATLNROO,ATLNHEN +---> BOSNMON,BOSNRAD,BOSNFOX,CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR,CHINPIP +---> CHINROD,CHINKUK,CHINLON,CHINKER,CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER +---> DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC,DENNRAU,DENNMUT,DENNMcD,DENNROS +---> DENNELL,DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU,GOLNWIL,GOLNSPR,GOLNSEI +---> GOLNSMI,GOLNMUL,HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI,INDNMIL +;,GOLNCOL +---> INDNDAV,INDNSMI,INDNMcK,INDNJAC,LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR +---> LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON,MIANMOU,MIANWIL,MIANCHA +;,LALNJOH +---> MIANHAR,MIANDAN,MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU,MINNRID,MINNLAN +---> MINNWEB,MINNGUG,MINNGAR,NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW,NWYNEWI +---> NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA,ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO +;,NWYNAND,ORLNGAT +---> ORLNKON,PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX,PHONJOH,PHONTIS +---> PHONMAN,PHONPER,PHONFIN,PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI,SACNOWE +---> SACNRIT,SACNGRA,SACNMAR,SACNEDN,SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG +---> SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR,TORNROG,TORNSTO,TORNROB,TORNMIL +---> TORNMUR,UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR,VANNANT,VANNEDW,VANNSCO +---> VANNREE,VANNMUR,WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR +infowin.img +---> GAINED_TXT,IDIOTS_TXT +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> plyrdsq2.tbl +GLO> dunks2.glo +; +nba_dnk2.img +---> W3PLDDU5,W3PLDDU6,W3PLDDU7,W3PLDDU8,W3PLDDU9 +---> W3PLDDU10,W3PLDDU11,W3PLDDU12,W3PLDDU13,W3PLDDU14,W3PLDDU15 +---> W3SMDU1,W3SMDU2,W3SMDU3,W3SMDU4,W3SMDU5 +; +nba_dnk3.img +---> W2THPW1,W2THPW2,W2THPW3 +---> W2THPW4,W2THPW5,W2THPW6,W2THPW7,W2THPW8,W2THPW9,W2THPW10,W2THPW11 +---> W2THPW12,W4THPW1,W4THPW2,W4THPW3,W4THPW4,W4THPW5,W4THPW6 +---> W4THPW7,W4THPW8,W4THPW9,W4THPW10,W4THPW11,W4THPW12,W4THPW13,M5OHPB1 +---> M5OHPB2,M5OHPB3,M5OHPB4,M5OHPB5,M5OHPB6,M5OHPB7,M5OHPB8,M5OHPB9 +---> M5OHPB10,M5OHPB11,M5OHPB12 +---> W3SDTUK1,W3SDTUK2,W3SDTUK3,W3SDTUK4,W3SDTUK5,W3SDTUK6,W3SDTUK7 +---> W3SDTUK8,W3SDTUK9,W3SDTUK10,W3SDTUK11 +---> W3SDTUK12,W3SDTUK13,W3SDTUK14,W3SDTUK15 +---> W3ARMSP1,W3ARMSP3,W3ARMSP4,W3ARMSP5,W3ARMSP6 +---> W3ARMSP7,W3ARMSP8,W3ARMSP9,W3ARMSP10,W3ARMSP11,W3ARMSP12,W3ARMSP13 +---> W3ARMSP14,W3ARMSP15,W3ARMSP16,W3ARMSP17 +---> W4SDSLM1,W4SDSLM3,W4SDSLM4,W4SDSLM6,W4SDSLM7,W4SDSLM8 +---> W4SDSLM9,W4SDSLM10,W4SDSLM12,W4SDSLM13,W4SDSLM14 +---> W4SDSLM15,W4SDSLM16,W4SDSLM17,W4SDSLM18 +; +nba_dnk4.img +;---> S3OASD01,S3OASD02,S3OASD03 +;---> S3OASD04,S3OASD05,S3OASD06,S3OASD07,S3OASD08,S3OASD09,S3OASD10,S3OASD11 +;---> S3OASD12,S3OASD13,S3OASD14,S3OASD15,S3OASD16,S3OASD17,S3OASD18 +---> W3OHSD01,W3OHSD02,W3OHSD03,W3OHSD04,W3OHSD05,W3OHSD06,W3OHSD07,W3OHSD08 +---> W3OHSD09,W3OHSD10,W3OHSD11,W3OHSD12,W3OHSD13,W3OHSD14,W3OHSD15,W3OHSD16 +---> W3OHSD17,W3OHSD18,W3OHSD19,W3OHSD20,W3OHSD21,W3OHSD22,W3OHSD23,W3OHSD24 +---> W3OHSD25,W3OHSD26,W3SPLD01,W3SPLD02,W3SPLD03,W3SPLD04,W3SPLD05,W3SPLD06 +---> W3SPLD07,W3SPLD08,W3SPLD09,W3SPLD10,W3SPLD11,W3SPLD12,W3SPLD13,W3SPLD14 +---> W3SPLD15,W3SPLD16,W3SPLD17,W3SPLD18,W3SPLD19,W3SPLD20 +nba_dnk5.img +;---> W8ALY101,W8ALY102,W8ALY103 +;---> W8ALY104,W8ALY105,W8ALY106,W8ALY107,W8ALY108,W8ALY109,W8ALY110,W8ALY111 +;---> W8ALY112,W8ALY113,W8ALY114,W8ALY115 +;---> W8ALY501,W8ALY502,W8ALY503,W8ALY504 +;---> W8ALY505,W8ALY506,W8ALY507,W8ALY508,W8ALY509,W8ALY510,W8ALY511,W8ALY512 +---> W8OHP201,W8OHP202,W8OHP203,W8OHP204,W8OHP205,W8OHP206,W8OHP207,W8OHP208 +---> W8OHP209,W8OHP210,W8OHP211,W8OHP212,W8OHP213,W8OHP214,W8OHP215 +;---> W8OHP401 +;---> W8OHP402,W8OHP403,W8OHP404,W8OHP405,W8OHP406,W8OHP407,W8OHP408,W8OHP409 +;---> W8OHP410,W8OHP411,W8OHP412 +---> W8UND101,W8UND102,W8UND103,W8UND104,W8UND105 +---> W8UND106,W8UND107,W8UND108,W8UND109,W8UND110,W8UND111,W8UND112,W8UND113 +---> W8UND114,W8UND115,W8UND116,W8UND117,W8UND118,W8UND119,W8UND120 +; +nba_dnk6.img +;---> M8FLY201,M8FLY202,M8FLY203 +;---> M8FLY204,M8FLY205,M8FLY206,M8FLY207,M8FLY208,M8FLY209,M8FLY210,M8FLY211 +;---> M8FLY212 +;---> M8OASD01,M8OASD02,M8OASD03,M8OASD04,M8OASD05,M8OASD06 +;---> M8OASD07,M8OASD08,M8OASD09,M8OASD10,M8OASD11,M8OASD12,M8OASD13,M8OASD14 +;---> M8OASD15,M8OASD16 +;---> M8OHM201,M8OHM202,M8OHM203,M8OHM204 +;---> M8OHM205,M8OHM206,M8OHM207,M8OHM208,M8OHM209,M8OHM210,M8OHM211,M8OHM212 +;---> M8OHM213,M8OHM214,M8OHM215,M8OHM216,M8OHM217,M8OHM218 +---> M8OHM301,M8OHM302 +---> M8OHM303,M8OHM304,M8OHM305,M8OHM306,M8OHM307,M8OHM308,M8OHM309,M8OHM310 +---> M8OHM311,M8OHM312,M8OHM313,M8OHM314,M8OHM315,M8OHM316,M8OHM317,M8OHM318 +---> M8OHM319 +;---> M8OHM501,M8OHM502,M8OHM503,M8OHM504,M8OHM505,M8OHM506,M8OHM507 +;---> M8OHM508,M8OHM509,M8OHM510,M8OHM511,M8OHM512,M8OHM513,M8OHM514,M8OHM515 +;---> M8OHM516,M8OHM517,M8OHM518 +---> S8ALY201,S8ALY202 +---> S8ALY203,S8ALY204,S8ALY205,S8ALY206,S8ALY207,S8ALY208,S8ALY209,S8ALY210 +---> S8ALY211,S8ALY212,S8ALY213,S8ALY214,S8ALY401,S8ALY402,S8ALY403,S8ALY404 +---> S8ALY405,S8ALY406,S8ALY407,S8ALY408,S8ALY409,S8ALY410,S8ALY411,S8ALY412 +---> S8ALY413,S8ALY414 +nba_dnk7.img +;---> M8REVD01,M8REVD02,M8REVD03 +;---> M8REVD04,M8REVD05,M8REVD06,M8REVD07,M8REVD08,M8REVD09,M8REVD10,M8REVD11 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15,M8REVD16,M8REVD17,M8REVD18,M8REVD19 +;---> M8REVD20,M8REVD21,W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15 +---> W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +---> W8CLSD07,W8CLSD08,W8CLSD09,W8CLSD10,W8CLSD11,W8CLSD12 +;,W8CLSD13,W8CLSD14 +---> W8FL2D01,W8FL2D02,W8FL2D03,W8FL2D04,W8FL2D05,W8FL2D06,W8FL2D07,W8FL2D08 +---> W8FL2D09,W8FL2D10,W8FL2D11,W8FL2D12,W8FL2D13,W8FL2D14,W8FL2D15,W8FL2D16 +---> W8FL2D17 +---> W8FL3D01,W8FL3D02,W8FL3D03,W8FL3D04,W8FL3D05,W8FL3D06,W8FL3D07 +---> W8FL3D08,W8FL3D09,W8FL3D10,W8FL3D11,W8FL3D12,W8FL3D13,W8FL3D14,W8FL3D15 +nba_dnk8.img +---> W3CANN02 +---> W3CANN04,W3CANN06,W3CANN08 +---> W3CANN10,W3CANN12,W3CANN14,W3CANN16 +---> W3CANN18,W3CANN20,W3CANN22,W3CANN24 +---> W3CANN26,W3CANN28,W3CANN30,W3CANN32 +---> S8HLSP01,S8HLSP02,S8HLSP03,S8HLSP04,S8HLSP05,S8HLSP06,S8HLSP07 +---> S8HLSP08,S8HLSP09,S8HLSP10,S8HLSP11,S8HLSP12,S8HLSP13,S8HLSP14,S8HLSP15 +---> S8HLSP16 +; +nba_msc3.img +---> w3stwb3fix +nbajmpps.img +---> w1jupa,w2jupa,w3jupa,w4jupa,w5jupa +nba_pas4.img +;---> W2RN2P01,W2RN2P02,W2RN2P03 +;---> W2RN2P04,W2RN3P01,W2RN3P02,W2RN3P03,W2RN3P04,W2RN4P01,W2RN4P02,W2RN4P03 +;---> W2RN4P04 +; +;#3 run pass! +;---> W3RN1P01,W3RN1P02,W3RN1P03,W3RN1P04,W3RN1P05,W3RN1P06,W3RN2P01 +;---> W3RN2P02,W3RN2P03,W3RN2P04,W3RN3P01,W3RN3P02,W3RN3P03,W3RN3P04,W3RN4P01 +;---> W3RN4P02,W3RN4P03,W3RN4P04,W3RN5P01,W3RN5P02,W3RN5P03,W3RN5P04,W3RN5P05 +;---> W3RN5P06 +; +;,W4RN3P01,W4RN3P02,W4RN3P03,W4RN3P04,W4RN4P01,W4RN4P02,W4RN4P03 +;---> W4RN4P04,W4RN6P01,W4RN6P02,W4RN6P03,W4RN6P04 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> NCKNME.TBL +GLO> JUNKXXXX.GLO +; +stattxt2.img +---> PASSWORD,stx_avgallow,stx_avgscore +---> NN_ACE,NN_BERTHA,NN_BIGDAD +---> NN_BIGFOOT,NN_BOOGY,NN_BUBBA,NN_CHILLY,NN_CORNEL,NN_CUCKOO +---> NN_DINGBAT,NN_FATBOY,NN_FLASH,NN_FRANKIE +---> NN_FRNKCOW,NN_GATOR,NN_GRANDPA,NN_HAMMER,NN_HAWKEYE +---> NN_HOMEBOY,NN_JOKER,NN_LOVER,NN_MADDOG,NN_MARGE +---> NN_MERLIN,NN_PONGO,NN_SHADOW,NN_SLIM +---> NN_SNAKE,NN_SPANKY,NN_SPIDER,NN_SPIKE,NN_TOPGUN,NN_TREXX +---> NN_VIPER,NN_ZIPPY +; +ASM> PRIVLG.TBL +; +privilg2.img +---> TEX_SR,HIDEAT,OVRTME +privilg.img +---> TEX_NTA,TEX_DBH +statstxt.img +---> SENDTO,ENTRIES +; +ASM> CHEER.TBL +ZON> +; +cheer.img +---> CHEERA01,CHEERA02,CHEERA03,CHEERA04,CHEERA05,CHEERA06,CHEERA07,CHEERA08 +---> CHEERA09,CHEERA10,CHEERB01,CHEERB02,CHEERB03,CHEERB04,CHEERB05,CHEERB06 +---> CHEERB07,CHEERB08,CHEERB09 +;Start of game hot spots +hot.img +---> HOTred,HOTblu,HOTgrn,HOTyel +; +ASM> PLYRHD6A.TBL +; +ZOF> +XON> +CON> +PPP> 6 +; +HDS3.IMG +; +GLO> PLYRHD6A.GLO +---> GrantG0,GrantG1 +GLO> XXXHD.GLO +---> GrantG2,GrantG3,GrantG4,GrantG5,GrantG6,GrantG7,GrantG8,GrantG9 +---> GrantG10,GrantG11,GrantG12,GrantG13,GrantG14,GrantG15,GrantG16 +GLO> PLYRHD6A.GLO +---> Horna0,Horna1 +GLO> XXXHD.GLO +---> Horna2,Horna3,Horna4,Horna5,Horna6,Horna7,Horna8,Horna9,Horna10,Horna11 +---> Horna12,Horna13,Horna14,Horna15,Horna16 +GLO> PLYRHD6A.GLO +---> Manning0,Manning1 +GLO> XXXHD.GLO +---> Manning2,Manning3,Manning4,Manning5,Manning6,Manning7,Manning8 +---> Manning9,Manning10,Manning11,Manning12,Manning13,Manning14,Manning15 +---> Manning16 +; +offnba.img +---> OFFNBA diff --git a/BACKUP/ART110/BB7.LOD b/BACKUP/ART110/BB7.LOD new file mode 100644 index 0000000..e83e1ef --- /dev/null +++ b/BACKUP/ART110/BB7.LOD @@ -0,0 +1,533 @@ +***> 2f63930,1 +; +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> ARROW.TBL +GLO> ARROW.GLO +; +arrowsn.img +---> arrown1l,arrown1r,arrown2l,arrown2r,arrown3l,arrown3r,arrown4l,arrown4r +---> arrown1t,arrown2t,arrown3t,arrown4t +---> arrown1l2p,arrown1r2p,arrown2l2p,arrown2r2p +---> arrown1t2p,arrown2t2p +; +fball.img +PPP> 6 +---> nflash1,nflash2,nflash3,nflash3a,nflash4,nflash5,nflash6 +PPP> 0 +; +ASM> MUGSHOT.TBL +GLO> MUGSHOT.GLO +; +PPP> 8 +ZON> +; +mugs1.img +---> AUG_ATL,DIV_LAK,EWG_NEY,HRD_MIA,JON_CHA,KMP_SEA,MIL_IND +---> MLN_UTA,MUT_DEN,OAK_NEY,OLA_HOU,PIP_CHI,RAD_MK2,ROB_SAN,SAL_DIVM +---> SCH_SEA,SMT_HOU,STK_UTA +; +mugs2.img +---> AND_CHA,AND_ORL,BAK_MLW,BEN_UTA,BRO_BOS,CAM_LAK,CHE_WAS,DUM_DET,HAR_ORL +---> HOR_HOU,JAC_DAL,JOH_PHX,KUK_CHI,MAS_DAL,MAS_NEY,PAY_SEA,RIC_SAC,RID_MIN +---> ROB_PRT,SMI_IND,STA_NEY,WEA_PHL +; +mugs3.img +---> ANT_VAN,BAR_BOS,BAR_CLP,BEN_MLW,BLY_ATL,BRA_CLE,BRA_NEJ,CAS_HOU +---> CEB_LAK,CHI_PRT,COL_PHL,CUR_CHA,DAN_MIA,DAV_IND,DEL_SAN,DOU_MLW +---> DRX_HOU,EDN_SAC,EDW_NEJ,EDW_VAN,ELL_DEN,ELL_SAN,FER_CLE,FIN_PHX,FOR_SEA +---> FOX_BOS,GAR_MIN,GLL_NEJ,GIL_NEJ,GRA_SAC,GRT_ORL,GUG_MIN,HIL_CLE +---> HIL_DET,HOU_DET,HPR_NEY,HRN_UTA,HWD_WAS,HWK_SEA,JAC_IND,JON_DAL +---> JON_LAK,JON_SAN,KER_CHI,KID_DAL,KON_ORL,LAE_ATL,LON_CHI,MAN_PHX,MAR_SAC +---> MAX_PHL,MCC_DAL,MCD_DEN,MCK_IND,MIL_CLE,MIL_TOR,MLS_DET,MON_BOS,MOR_UTA +---> MOU_MIA,MUL_GLD,MUR_CLP,MUR_TOR,MUR_VAN,MUR_WAS,NOR_ATL,OBA_NEJ,OWE_SAC +---> PAC_WAS,PER_PHX,PHL_CLE,PRS_SAN,RAD_BOS,RAF_DEN,RCE_CHA,RCH_CLP,RES_MLW +---> REV_VAN,ROB_MLW,ROD_CHI,ROG_CLP,ROG_TOR,ROS_DEN,SAB_PRT,SCO_ORL +---> SKL_GLD,SMI_ATL,SMI_GLD,SPR_GLD,STA_PHL,STO_TOR,STR_PRT,THR_DET,TIS_PHX +---> VAN_LAK,VAU_CLP,WEB_WAS,WIL_PRT,WIL_MIA,WLS_GLD +---> ZID_CHA +---> RODBLK,RODBLU,RODORG,RODPRP,RODRED,RODWHT,RODYEL,RODGRN +; +mugs4.img +---> SCO_VAN,ROB_TOR,CHP_MIA,WEB_MIN,LNG_MIN,RUF_PHL +;JOH_LAK +mugsmsc1.img +---> COW,ALIEN,GUIDO,ANG,LIS,MEL,MIK,JOE +;ROS,SAL +mugsmsc2.img +---> BER,CHK,FAT,FRA,GOR,GRE,OLD,PIG,WIZ +mugsmsc3.img +---> ERI_MUG,KIM_MUG,MAR_MUG,ROH_MUG,SEA_MUG +mugsmsc4.img +---> BEA_MUG,CHE_MUG,CLO_MUG,JAB_MUG,BAL_MUG,MDOC_MUG,VIK_MUG +mugsmsc5.img +---> MUN_MUG,AMR_MUG,BAR_MUG,DIM_MUG,JAC_MUG,JIG_MUG,JON_MUG,MIK_MUG,MIN_MUG +---> MXV_MUG,WIL_MUG,NOR_MUG +mugsmsc6.img +---> CAR_MUG,DAN_MUG,EDD_MUG,EUG_MUG,JEF_MUG,SHN_MUG +---> JAM_MUG,TUR_MUG +mugsmsc7.img +---> BUD_MUG,HEY_MUG,JEN_MUG,JMC_MUG,NIK_MUG,ROT_MUG +---> SAL_MUG,PAT_MUG,NEI_MUG,PER_MUG +colmugs1.img +---> ALL_COL,CAM_COL,DAM_COL,DUN_COL,HAM_COL,HAR_COL,IVE_COL,KIT_COL,MAR_COL +---> MIN_COL,RIL_COL,WAL_COL +PPP> 0 +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> HOTSPOT.TBL +GLO> HOTSPOT.GLO +; +firefram.img +---> FFRAME01,FFRAME02,FFRAME03,FFRAME04,FFRAME05 +---> FFRAME06,FFRAME07,FFRAME08,FFRAME09,FFRAME10 +---> FFRAME11,FFRAME12,FFRAME13,FFRAME14,FFRAME15 +---> FFRAME16,FFRAME17,FFRAME18,FFRAME19,FFRAME20 +; +hotcircl.img +---> HOTCRC01,HOTCRC02,HOTCRC03,HOTCRC04,HOTCRC05,HOTCRC06,HOTCRC07 +---> HOTCRC08,HOTCRC09,HOTCRC10,HOTCRC11,HOTCRC12,HOTCRC13 +; +hotspot.img +;---> HOTA_01,HOTA_02,HOTA_03,HOTA_04,HOTA_05,HOTA_06,HOTA_07,HOTA_08,HOTA_09 +;---> HOTA_10,HOTA_11,HOTA_12,HOTA_13 +---> HOTNA_01,HOTNA_02,HOTNA_03,HOTNA_04 +---> HOTNA_05,HOTNA_06,HOTNA_07,HOTNA_08,HOTNA_09,HOTNA_10,HOTNA_11,HOTNA_12 +---> HOTNA_13 +; +explode.img +---> SMOKE01,SMOKE02 +---> SMOKE03,SMOKE04,SMOKE05,SMOKE06,SMOKE07,SMOKE08,SMOKE09,SMOKE10 +;---> SMOKEB01,SMOKEB02,SMOKEB03,SMOKEB04,SMOKEB05,SMOKEB06,SMOKEB07,SMOKEB08 +;---> SMOKEB09,SMOKEB10 +---> SALTA01,SALTA02,SALTA03,SALTA04,SALTA05,SALTA06 +---> SALTA07,SALTA08,SALTA09,SALTA10,SALTB01,SALTB02,SALTB03,SALTB04,SALTB05 +---> SALTB06,SALTB07,SALTB08,SALTB09,SALTB10,SALTB11 +---> XPLOD_BLU,XPLOD_BRT,XPLOD_YEL +---> SMOK1_01,SMOK1_02,SMOK1_03,SMOK1_04,SMOK1_05 +---> SMOK1_06,SMOK1_07,SMOK1_08,SMOK1_09,SMOK1_10,SMOK1_11,SMOK1_12 +;---> SMOK1_13,SMOK1_14 +; +ASM> BALLSHAD.TBL +GLO> BALLSHAD.GLO +; +ball.img +COF> +---> shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 +---> shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 +---> shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 +---> ballshad5 +POF> +---> ballshad2,ballshad3,ballshad4,ballshad6 +---> ballshad7 +PON> +; +ASM> BALL.TBL +GLO> JUNKXXXX.GLO +; +nball.img +PPP> 6 +---> NBALL101,NBALL601 +PPP> 0 +POF> +---> NBALL102,NBALL103,NBALL104,NBALL105,NBALL106,NBALL107,NBALL108 +---> NBALL109,NBALL110,NBALL111,NBALL112,NBALL113,NBALL114,NBALL115,NBALL116 +---> NBALL117,NBALL118,NBALL119,NBALL120,NBALL121,NBALL122,NBALL123,NBALL124 +---> NBALL125,NBALL126,NBALL127,NBALL128,NBALL129,NBALL130,NBALL201,NBALL202 +---> NBALL203,NBALL204,NBALL205,NBALL206,NBALL207,NBALL208,NBALL209,NBALL210 +---> NBALL211,NBALL212,NBALL213,NBALL214,NBALL215,NBALL216,NBALL217,NBALL218 +---> NBALL219,NBALL220,NBALL221,NBALL222,NBALL223,NBALL224,NBALL225,NBALL226 +---> NBALL227,NBALL228,NBALL229,NBALL230,NBALL301,NBALL302,NBALL303,NBALL304 +---> NBALL305,NBALL306,NBALL307,NBALL308,NBALL309,NBALL310,NBALL311,NBALL312 +---> NBALL313,NBALL314,NBALL315,NBALL316,NBALL317,NBALL318,NBALL319,NBALL320 +---> NBALL321,NBALL322,NBALL323,NBALL324,NBALL325,NBALL326,NBALL327,NBALL328 +---> NBALL329,NBALL330,NBALL401,NBALL402,NBALL403,NBALL404,NBALL405,NBALL406 +---> NBALL407,NBALL408,NBALL409,NBALL410,NBALL411,NBALL412,NBALL413,NBALL414 +---> NBALL415,NBALL416,NBALL417,NBALL418,NBALL419,NBALL420,NBALL421,NBALL422 +---> NBALL423,NBALL424,NBALL425,NBALL426,NBALL427,NBALL428,NBALL429,NBALL430 +---> NBALL501,NBALL502,NBALL503,NBALL504,NBALL505,NBALL506,NBALL507,NBALL508 +---> NBALL509,NBALL510,NBALL511,NBALL512,NBALL513,NBALL514,NBALL515,NBALL516 +---> NBALL517,NBALL518,NBALL519,NBALL520,NBALL521,NBALL522,NBALL523,NBALL524 +---> NBALL525,NBALL526,NBALL527,NBALL528,NBALL529,NBALL530 +---> NBALL602 +---> NBALL603,NBALL604,NBALL605,NBALL606,NBALL607,NBALL608,NBALL609,NBALL610 +---> NBALL611,NBALL612,NBALL613,NBALL614,NBALL615,NBALL616,NBALL617,NBALL618 +---> NBALL619,NBALL620,NBALL621,NBALL622,NBALL623,NBALL624,NBALL625,NBALL626 +---> NBALL627,NBALL628,NBALL629,NBALL630,NBALL701,NBALL702,NBALL703,NBALL704 +---> NBALL705,NBALL706,NBALL707,NBALL708,NBALL709,NBALL710,NBALL711,NBALL712 +---> NBALL713,NBALL714,NBALL715,NBALL716,NBALL717,NBALL718,NBALL719,NBALL720 +---> NBALL721,NBALL722,NBALL723,NBALL724,NBALL725,NBALL726,NBALL727,NBALL728 +---> NBALL729,NBALL730 +---> NBALL801,NBALL802,NBALL803,NBALL804,NBALL805,NBALL806 +---> NBALL807,NBALL808,NBALL809,NBALL810,NBALL811,NBALL812,NBALL813,NBALL814 +---> NBALL815,NBALL816,NBALL817,NBALL818,NBALL819,NBALL820,NBALL821,NBALL822 +---> NBALL823,NBALL824,NBALL825,NBALL826,NBALL827,NBALL828,NBALL829,NBALL830 +;;---> NBALL901,NBALL902,NBALL903,NBALL904,NBALL905,NBALL906,NBALL907,NBALL908 +;;---> NBALL909,NBALL910,NBALL911,NBALL912,NBALL913,NBALL914,NBALL915,NBALL916 +;;---> NBALL917,NBALL918,NBALL919,NBALL920,NBALL921,NBALL922,NBALL923,NBALL924 +;;---> NBALL925,NBALL926,NBALL927,NBALL928,NBALL929,NBALL930,NBALL1001 +;;---> NBALL1002,NBALL1003,NBALL1004,NBALL1005,NBALL1006,NBALL1007,NBALL1008 +;;---> NBALL1009,NBALL1010,NBALL1011,NBALL1012,NBALL1013,NBALL1014,NBALL1015 +;;---> NBALL1016,NBALL1017,NBALL1018,NBALL1019,NBALL1020,NBALL1021,NBALL1022 +;;---> NBALL1023,NBALL1024,NBALL1025,NBALL1026,NBALL1027,NBALL1028,NBALL1029 +;;---> NBALL1030 +PON> +; +fball.img +PPP> 6 +---> FBALL101 +PPP> 0 +POF> +---> FBALL102,FBALL103,FBALL104,FBALL105,FBALL106,FBALL107,FBALL108 +---> FBALL109,FBALL110,FBALL111,FBALL112,FBALL113,FBALL114,FBALL115,FBALL116 +---> FBALL117,FBALL118,FBALL119,FBALL120,FBALL121,FBALL122,FBALL123,FBALL124 +---> FBALL125,FBALL126,FBALL127,FBALL128,FBALL129,FBALL130,FBALL201,FBALL202 +---> FBALL203,FBALL204,FBALL205,FBALL206,FBALL207,FBALL208,FBALL209,FBALL210 +---> FBALL211,FBALL212,FBALL213,FBALL214,FBALL215,FBALL216,FBALL217,FBALL218 +---> FBALL219,FBALL220,FBALL221,FBALL222,FBALL223,FBALL224,FBALL225,FBALL226 +---> FBALL227,FBALL228,FBALL229,FBALL230,FBALL301,FBALL302,FBALL303,FBALL304 +---> FBALL305,FBALL306,FBALL307,FBALL308,FBALL309,FBALL310,FBALL311,FBALL312 +---> FBALL313,FBALL314,FBALL315,FBALL316,FBALL317,FBALL318,FBALL319,FBALL320 +---> FBALL321,FBALL322,FBALL323,FBALL324,FBALL325,FBALL326,FBALL327,FBALL328 +---> FBALL329,FBALL330,FBALL401,FBALL402,FBALL403,FBALL404,FBALL405,FBALL406 +---> FBALL407,FBALL408,FBALL409,FBALL410,FBALL411,FBALL412,FBALL413,FBALL414 +---> FBALL415,FBALL416,FBALL417,FBALL418,FBALL419,FBALL420,FBALL421,FBALL422 +---> FBALL423,FBALL424,FBALL425,FBALL426,FBALL427,FBALL428,FBALL429,FBALL430 +---> FBALL501,FBALL502,FBALL503,FBALL504,FBALL505,FBALL506,FBALL507,FBALL508 +---> FBALL509,FBALL510,FBALL511,FBALL512,FBALL513,FBALL514,FBALL515,FBALL516 +---> FBALL517,FBALL518,FBALL519,FBALL520,FBALL521,FBALL522,FBALL523,FBALL524 +---> FBALL525,FBALL526,FBALL527,FBALL528,FBALL529,FBALL530,FBALL601,FBALL602 +---> FBALL603,FBALL604,FBALL605,FBALL606,FBALL607,FBALL608,FBALL609,FBALL610 +---> FBALL611,FBALL612,FBALL613,FBALL614,FBALL615,FBALL616,FBALL617,FBALL618 +---> FBALL619,FBALL620,FBALL621,FBALL622,FBALL623,FBALL624,FBALL625,FBALL626 +---> FBALL627,FBALL628,FBALL629,FBALL630,FBALL701,FBALL702,FBALL703,FBALL704 +---> FBALL705,FBALL706,FBALL707,FBALL708,FBALL709,FBALL710,FBALL711,FBALL712 +---> FBALL713,FBALL714,FBALL715,FBALL716,FBALL717,FBALL718,FBALL719,FBALL720 +---> FBALL721,FBALL722,FBALL723,FBALL724,FBALL725,FBALL726,FBALL727,FBALL728 +---> FBALL729,FBALL730 +---> FBALL801,FBALL802,FBALL803,FBALL804,FBALL805,FBALL806 +---> FBALL807,FBALL808,FBALL809,FBALL810,FBALL811,FBALL812,FBALL813,FBALL814 +---> FBALL815,FBALL816,FBALL817,FBALL818,FBALL819,FBALL820,FBALL821,FBALL822 +---> FBALL823,FBALL824,FBALL825,FBALL826,FBALL827,FBALL828,FBALL829,FBALL830 +;;---> FBALL901,FBALL902,FBALL903,FBALL904,FBALL905,FBALL906,FBALL907,FBALL908 +;;---> FBALL909,FBALL910,FBALL911,FBALL912,FBALL913,FBALL914,FBALL915,FBALL916 +;;---> FBALL917,FBALL918,FBALL919,FBALL920,FBALL921,FBALL922,FBALL923,FBALL924 +;;---> FBALL925,FBALL926,FBALL927,FBALL928,FBALL929,FBALL930,FBALL1001 +;;---> FBALL1002,FBALL1003,FBALL1004,FBALL1005,FBALL1006,FBALL1007,FBALL1008 +;;---> FBALL1009,FBALL1010,FBALL1011,FBALL1012,FBALL1013,FBALL1014,FBALL1015 +;;---> FBALL1016,FBALL1017,FBALL1018,FBALL1019,FBALL1020,FBALL1021,FBALL1022 +;;---> FBALL1023,FBALL1024,FBALL1025,FBALL1026,FBALL1027,FBALL1028,FBALL1029 +;;---> FBALL1030 +PON> +; +aball.img +PPP> 6 +---> ABALL101 +PPP> 0 +POF> +---> ABALL102,ABALL103,ABALL104,ABALL105,ABALL106,ABALL107,ABALL108 +---> ABALL109,ABALL110,ABALL111,ABALL112,ABALL113,ABALL114,ABALL115,ABALL116 +---> ABALL117,ABALL118,ABALL119,ABALL120,ABALL121,ABALL122,ABALL123,ABALL124 +---> ABALL125,ABALL126,ABALL127,ABALL128,ABALL129,ABALL130,ABALL201,ABALL202 +---> ABALL203,ABALL204,ABALL205,ABALL206,ABALL207,ABALL208,ABALL209,ABALL210 +---> ABALL211,ABALL212,ABALL213,ABALL214,ABALL215,ABALL216,ABALL217,ABALL218 +---> ABALL219,ABALL220,ABALL221,ABALL222,ABALL223,ABALL224,ABALL225,ABALL226 +---> ABALL227,ABALL228,ABALL229,ABALL230,ABALL301,ABALL302,ABALL303,ABALL304 +---> ABALL305,ABALL306,ABALL307,ABALL308,ABALL309,ABALL310,ABALL311,ABALL312 +---> ABALL313,ABALL314,ABALL315,ABALL316,ABALL317,ABALL318,ABALL319,ABALL320 +---> ABALL321,ABALL322,ABALL323,ABALL324,ABALL325,ABALL326,ABALL327,ABALL328 +---> ABALL329,ABALL330,ABALL401,ABALL402,ABALL403,ABALL404,ABALL405,ABALL406 +---> ABALL407,ABALL408,ABALL409,ABALL410,ABALL411,ABALL412,ABALL413,ABALL414 +---> ABALL415,ABALL416,ABALL417,ABALL418,ABALL419,ABALL420,ABALL421,ABALL422 +---> ABALL423,ABALL424,ABALL425,ABALL426,ABALL427,ABALL428,ABALL429,ABALL430 +---> ABALL501,ABALL502,ABALL503,ABALL504,ABALL505,ABALL506,ABALL507,ABALL508 +---> ABALL509,ABALL510,ABALL511,ABALL512,ABALL513,ABALL514,ABALL515,ABALL516 +---> ABALL517,ABALL518,ABALL519,ABALL520,ABALL521,ABALL522,ABALL523,ABALL524 +---> ABALL525,ABALL526,ABALL527,ABALL528,ABALL529,ABALL530,ABALL601,ABALL602 +---> ABALL603,ABALL604,ABALL605,ABALL606,ABALL607,ABALL608,ABALL609,ABALL610 +---> ABALL611,ABALL612,ABALL613,ABALL614,ABALL615,ABALL616,ABALL617,ABALL618 +---> ABALL619,ABALL620,ABALL621,ABALL622,ABALL623,ABALL624,ABALL625,ABALL626 +---> ABALL627,ABALL628,ABALL629,ABALL630,ABALL701,ABALL702,ABALL703,ABALL704 +---> ABALL705,ABALL706,ABALL707,ABALL708,ABALL709,ABALL710,ABALL711,ABALL712 +---> ABALL713,ABALL714,ABALL715,ABALL716,ABALL717,ABALL718,ABALL719,ABALL720 +---> ABALL721,ABALL722,ABALL723,ABALL724,ABALL725,ABALL726,ABALL727,ABALL728 +---> ABALL729,ABALL730 +---> ABALL801,ABALL802,ABALL803,ABALL804,ABALL805,ABALL806 +---> ABALL807,ABALL808,ABALL809,ABALL810,ABALL811,ABALL812,ABALL813,ABALL814 +---> ABALL815,ABALL816,ABALL817,ABALL818,ABALL819,ABALL820,ABALL821,ABALL822 +---> ABALL823,ABALL824,ABALL825,ABALL826,ABALL827,ABALL828,ABALL829,ABALL830 +PON> +; +ASM> LOGOS.TBL +; +newlogos.img +ZON> +---> BALLBAK1,T_HAWKS,T_CELTS,T_HORS,T_BULLS,T_CAVS,T_MAVS,T_NUGS,T_PISS +---> T_PISS_N,T_WARS,T_ROCKS,T_PACER,T_LAKS,T_CLIPS,T_HEAT,T_BUCKS +---> T_TWOLV,T_TWOLV_N,T_NETS,T_KNIKS,T_MAGIC,T_76RS,T_SUNS,T_BLAZ,T_KINGS +---> T_SPURS,T_SONICS,T_RAPT,T_JAZZ,T_JAZZ_N,T_GRIZZ,T_BULTS +ZOF> +; +dcslogo.img +---> DCSRUM1 +;;---> DCSRUM2,DCSRUM3,DCSRUM4,DCSRUM5,DCSRUM6 +; +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +; +GAMEGRAF.IMG +---> NSHOTCLK,MUGPLAT +POF> +---> TUBEPIEC +PON> +TVSCORE.IMG +CON> +---> colon,cpu,freeply,credit +---> bbal,bbal_w +COF> +---> font60,font61,font62,font63,font64,font65,font66,font67,font68,font69 +---> font60w,font60r,font60g,font6?,font90r +---> S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4,S_LED_5,S_LED_6,S_LED_7,S_LED_8 +---> S_LED_9,S_LED_MAX +;---> BigLED_0,BigLED_1,BigLED_2,BigLED_3,BigLED_4,BigLED_5 +;---> BigLED_6,BigLED_7,BigLED_8,BigLED_9 +ASM> CREDIT.TBL +---> CRED_00 +GLO> XXXHD.GLO +---> CRED_01,CRED_02,CRED_03,CRED_04 +---> CRED_05,CRED_06,CRED_07,CRED_08,CRED_09 +---> CRED_10,CRED_11,CRED_12,CRED_13,CRED_14 +---> CRED_15,CRED_16,CRED_17,CRED_18,CRED_19 +---> CRED_20,CRED_21,CRED_22,CRED_23,CRED_24 +---> CRED_25,CRED_26,CRED_27,CRED_28,CRED_29 +---> CRED_30,CRED_31,CRED_32,CRED_33,CRED_34 +---> CRED_35,CRED_36,CRED_37,CRED_38,CRED_39 +---> CRED_40,CRED_41,CRED_42,CRED_43,CRED_44 +---> CRED_45,CRED_46,CRED_47,CRED_48,CRED_49 +---> CRED_50,CRED_51,CRED_52,CRED_53,CRED_54 +---> CRED_55,CRED_56,CRED_57,CRED_58,CRED_59 +---> CRED_60,CRED_61,CRED_62,CRED_63,CRED_64 +---> CRED_65,CRED_66,CRED_67,CRED_68,CRED_69 +---> CRED_70,CRED_71,CRED_72,CRED_73,CRED_74 +---> CRED_75,CRED_76,CRED_77,CRED_78,CRED_79 +---> CRED_80,CRED_81,CRED_82,CRED_83,CRED_84 +---> CRED_85,CRED_86,CRED_87,CRED_88,CRED_89 +---> CRED_90,CRED_91,CRED_92,CRED_93,CRED_94 +---> CRED_95,CRED_96,CRED_97,CRED_98,CRED_99 +IHDR SAG:L +PPP> 6 +;---> TURBO_60,TURBO_59,TURBO_58,TURBO_57,TURBO_56 +;---> TURBO_55,TURBO_54,TURBO_53,TURBO_52,TURBO_51 +---> TURBO_52,TURBO_51 +---> TURBO_50,TURBO_49,TURBO_48,TURBO_47,TURBO_46 +---> TURBO_45,TURBO_44,TURBO_43,TURBO_42,TURBO_41 +---> TURBO_40,TURBO_39,TURBO_38,TURBO_37,TURBO_36 +---> TURBO_35,TURBO_34,TURBO_33,TURBO_32,TURBO_31 +---> TURBO_30,TURBO_29,TURBO_28,TURBO_27,TURBO_26 +---> TURBO_25,TURBO_24,TURBO_23,TURBO_22,TURBO_21 +---> TURBO_20,TURBO_19,TURBO_18,TURBO_17,TURBO_16 +---> TURBO_15,TURBO_14,TURBO_13,TURBO_12,TURBO_11 +---> TURBO_10,TURBO_09,TURBO_08,TURBO_07,TURBO_06 +---> TURBO_05,TURBO_04,TURBO_03,TURBO_02,TURBO_01 +; +;---> TEAMZN30,TEAMZN29,TEAMZN28,TEAMZN27,TEAMZN26 +;---> TEAMZN25,TEAMZN24,TEAMZN23,TEAMZN22,TEAMZN21 +;---> TEAMZN20,TEAMZN19,TEAMZN18,TEAMZN17,TEAMZN16 +;---> TEAMZN15,TEAMZN14,TEAMZN13,TEAMZN12,TEAMZN11 +;---> TEAMZN10,TEAMZN09,TEAMZN08,TEAMZN07,TEAMZN06 +;---> TEAMZN05,TEAMZN04,TEAMZN03,TEAMZN02,TEAMZN01 +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +CON> +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +---> TURBO_01b,TURBO_01y,TURBO_01g,TURBO_01r +;---> TEAMZN_01r,TEAMZN_01b +PPP> 0 +---> S_LED_0r +; +ASM> HOOP.TBL +GLO> HOOP.GLO +; +hoop.img +CON> +PON> +ZON> +PPP> 8 +;Remove ZON to speed up(?) DMA transfer +---> hoopbot +ZOF> +PPP> 0 +---> hooptop +---> back1,back2,back3,back4,back5,back6,back7,back8,back9,back10 +---> RIM0_B_00,RIM0_F_00 +---> RIM1_F_01,RIM1_F_02,RIM1_F_03,RIM1_F_04,RIM1_F_05,RIM1_F_06 +---> RIM1_F_07,RIM1_F_08,RIM1_F_09,RIM1_F_10,RIM1_F_11 +---> RIM1_B_01,RIM1_B_02,RIM1_B_03,RIM1_B_06,RIM1_B_07,RIM1_B_08 +---> RIM1_B_09,RIM1_B_10,RIM1_B_11 +---> RIM2_F_01,RIM2_F_02,RIM2_F_03,RIM2_F_04,RIM2_F_05,RIM2_F_06 +---> RIM2_F_08 +---> RIM2_B_01,RIM2_B_02,RIM2_B_03,RIM2_B_05,RIM2_B_06,RIM2_B_08 +---> RIM3_F_01,RIM3_F_02,RIM3_F_03,RIM3_F_04,RIM3_F_05,RIM3_F_06 +---> RIM3_F_07,RIM3_F_08,RIM3_F_09,RIM3_F_11 +---> RIM3_B_01,RIM3_B_02,RIM3_B_03,RIM3_B_04,RIM3_B_05,RIM3_B_06 +---> RIM3_B_07,RIM3_B_08,RIM3_B_09,RIM3_B_11 +---> RIM4_F_01,RIM4_F_02,RIM5_F_01,RIM5_F_03 +---> RIM4_B_01,RIM4_B_02,RIM5_B_01,RIM5_B_03 +---> RIM7_F_01,RIM7_F_02,RIM7_F_03,RIM7_F_04,RIM7_F_05,RIM7_F_06 +---> RIM7_F_07,RIM7_F_08,RIM7_F_09,RIM7_F_11 +---> RIM7_B_01,RIM7_B_02,RIM7_B_03,RIM7_B_04,RIM7_B_05,RIM7_B_06 +---> RIM7_B_07,RIM7_B_08,RIM7_B_09,RIM7_B_11 +---> RIM8_F_01,RIM8_F_02,RIM8_F_03,RIM8_F_04,RIM8_F_05,RIM8_F_06 +---> RIM8_B_01,RIM8_B_02,RIM8_B_03,RIM8_B_04,RIM8_B_05,RIM8_B_06 +---> CHAN1F_01,CHAN1F_02,CHAN1F_03,CHAN1F_04,CHAN1F_05,CHAN1F_06,CHAN1F_07 +---> CHAN1F_08,CHAN1F_09,CHAN1F_10 +---> CHAN1B_01,CHAN1B_02,CHAN1B_03,CHAN1B_04,CHAN1B_05,CHAN1B_06,CHAN1B_07 +---> CHAN1B_08,CHAN1B_09,CHAN1B_10 +---> CHAN2F_01,CHAN2F_02,CHAN2F_03,CHAN2F_04,CHAN2F_05,CHAN2F_06,CHAN2F_07 +---> CHAN2B_01,CHAN2B_02,CHAN2B_03,CHAN2B_04,CHAN2B_05,CHAN2B_06,CHAN2B_07 +---> CHAN3F_01,CHAN3F_02,CHAN3F_03,CHAN3F_04,CHAN3F_05,CHAN3F_06,CHAN3F_07 +---> CHAN3F_08,CHAN3F_09,CHAN3F_10 +---> CHAN3B_01,CHAN3B_02,CHAN3B_03,CHAN3B_04,CHAN3B_05,CHAN3B_06,CHAN3B_07 +---> CHAN3B_08,CHAN3B_09,CHAN3B_10 +---> FLAME_F_01,FLAME_F_02,FLAME_F_03,FLAME_F_04,FLAME_F_05,FLAME_F_06 +---> FLAME_F_07,FLAME_F_08,FLAME_F_09,FLAME_F_10,FLAME_F_11,FLAME_F_12 +---> FLAME_F_13 +---> FLAME2F_01,FLAME2F_02,FLAME2F_03,FLAME2F_04,FLAME2F_05,FLAME2F_06 +---> FLAME2F_07 +---> FLAME2F_13 +;,FLAME2F_08,FLAME2F_09,FLAME2F_10,FLAME2F_11,FLAME2F_12 +;---> FLAME2B_01,FLAME2B_02,FLAME2B_03,FLAME2B_04,FLAME2B_05,FLAME2B_06 +;---> FLAME2B_07 +---> FLAME2B_09,FLAME2B_10,FLAME2B_11,FLAME2B_12,FLAME2B_08 +;---> FLAME2B_13 +; +nbbd8.img +PPP> 8 +ZON> +---> nback10,nback9,nback8,nback7,nback6,nback5,nback4,nback3,nback2,nback1 +---> nhoopbot +ZOF> +PPP> 0 +; +ASM> COURTFLR.TBL +; +;Load court and bench pals +; +crtflr.img +---> CRTPC1,CRTPC2,CRTPC3,CRTPC4,CRTPC5,CRTPC6,CRTPC7,CRTPC8,CRTPC9,CRTPC10 +---> CRTPC11,CRTPC12,CRTPC13,CRTPC14,CRTPC15,CRTPC16,CRTPC17,CRTPC18,CRTPC19,CRTPC20 +---> CRTPC21,CRTPC22,CRTPC23,CRTPC24,CRTPC25,CRTPC26,CRTPC27,CRTPC28,CRTPC29 +crwdflr.img +---> bk_flr1,bk_flr2,bk_flr3,bk_flr4,bk_flr5,bk_flr6,bk_flr7,bk_flr8,bk_flr9,bk_flr10 +---> bk_flr11,bk_flr12,bk_flr13,bk_flr14,bk_flr15,bk_flr16,bk_flr17,bk_flr18,bk_flr19,bk_flr20 +---> bk_flr21,bk_flr22,bk_flr23,bk_flr24,bk_flr25,bk_flr26,bk_flr27,bk_flr28,bk_flr29 +; +ASM> HANGFONT.TBL +; +hangfont.img +---> HANGF_A +---> HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G,HANGF_H,HANGF_I,HANGF_J +---> HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O,HANGF_P,HANGF_Q,HANGF_R,HANGF_S +---> HANGF_T,HANGF_U,HANGF_V,HANGF_W,HANGF_X,HANGF_Y,HANGF_Z,HANGF_0,HANGF_1 +---> HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7,HANGF_8,HANGF_9 +;---> HANGF_DOL,HANGF_PCT,HANGF_NUM,HANGF_AND,HANGF_STR,HANGF_PRL +;---> HANGF_PRR,HANGF_PLS,HANGF_MIN,HANGF_QUE,HANGF_PER,HANGF_SLS,HANGF_COL +;---> HANGF_SEM,HANGF_COM,HANGF_EQU +---> HANGF_EXC,HANGF_APO +; +ASM> BASTCYC.TBL +GLO> BASTCYC.GLO +; +bastcyc.img +;---> B10CYC_A,B10CYC_B,B10CYC_C,B10CYC_D,B10CYC_E,B10CYC_F,B10CYC_G,B10CYC_H +;---> B10CYC_I,B10CYC_J,B10CYC_K,B10CYC_L,B10CYC_M,B10CYC_N,B10CYC_O,B10CYC_P +;---> B10CYC_Q,B10CYC_R,B10CYC_S,B10CYC_T,B10CYC_U,B10CYC_V,B10CYC_W,B10CYC_X +;---> B10CYC_Y,B10CYC_Z,B10CYC_0,B10CYC_1,B10CYC_2,B10CYC_3,B10CYC_4,B10CYC_5 +;---> B10CYC_6,B10CYC_7,B10CYC_8,B10CYC_9,B10CYC_EXC,B10CYC_NUM,B10CYC_DOL +;---> B10CYC_PCT,B10CYC_AND,B10CYC_PRL,B10CYC_PRR,B10CYC_DSH,B10CYC_PLS +;---> B10CYC_SLS,B10CYC_COM,B10CYC_APO,B10CYC_PER,B10CYC_SEM,B10CYC_COL +;---> B10CYC_QUE +---> B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F +---> B8TCYC_G,B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N +---> B8TCYC_O,B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V +---> B8TCYC_W,B8TCYC_X,B8TCYC_Y,B8TCYC_Z,B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3 +---> B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7,B8TCYC_8,B8TCYC_9,B8TCYC_COL +---> B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_PRL,B8TCYC_PRR +---> B8TCYC_PER,B8TCYC_COM,B8TCYC_APO,B8TCYC_PLS,B8TCYC_QUE,B8TCYC_SEM +---> B8TCYC_SLS,B8TCYC_EXC +---> B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E +---> B7TCYC_F,B7TCYC_G,B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M +---> B7TCYC_N,B7TCYC_O,B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U +---> B7TCYC_V,B7TCYC_W,B7TCYC_X,B7TCYC_Y,B7TCYC_Z,B7TCYC_0,B7TCYC_1,B7TCYC_2 +---> B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7,B7TCYC_8,B7TCYC_9 +---> B7TCYC_EXC,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_AND,B7TCYC_PCT,B7TCYC_PRL +---> B7TCYC_PRR,B7TCYC_DSH,B7TCYC_PLS,B7TCYC_COM,B7TCYC_PER,B7TCYC_QUE +---> B7TCYC_APO,B7TCYC_COL,B7TCYC_SEM,B7TCYC_SLS +; +ASM> PLYRNUB.TBL +; +plyrnubs.img +---> PLYRNUB1,PLYRNUB2,PLYRNUB3,PLYRNUB4 +cities2.img +---> CUST6,CUST7,CUST8,CUST9,CUST10 +; +ASM> PRIZES.TBL +; +prizes.img +ZON> +---> prize1,prize2 +---> prize3,prizeG +ZOF> +; +ASM> POWERTXT.TBL +GLO> POWERTXT.GLO +; +bast8.img +---> TOURMODE2,NOCPU2,SECRETS2 +;---> NOPUSH2 +---> ASISTOFF2,SHOTPERC2,BABYPLAY2 +;---> WIN4FREE2,WINSTAY2,WNRSSTAY2 +; +brush20f.img +POF> +PPP> 5 +---> BRSH20APO +PPP> 0 +PON> +; +ASM> OUTDOOR.TBL +GLO> OUTDOOR.GLO +; +FRM> OUTDOOR +; +outdoor.img +ZON> +---> sidebot,sidetop +---> lamp1,lamp2,hang_logo,moon +ZOF> +---> BKg1,BKg2 +---> bkwall +;---> fence +---> city1,city2,city3 +---> outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 +---> outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +---> PAPER1,PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9,LGSHEET1 +---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7,LGSHEET8,LGSHEET9 +---> SMSHEET1,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5,SMSHEET6,SMSHEET7,SMSHEET8 +---> SMSHEET9,LEAF1,LEAF2,LEAF3,LEAF4,LEAF5,LEAF6,LEAF7,LEAF8 +---> STORM01 +;---> STORM02,STORM03,STORM04,STORM05,STORM06,STORM07,STORM08,STORM09,STORM10 +;---> STORM11,STORM12 +; +GLO> BGNDTBL.GLO +; +BBB> HANGTIME +BBB> VSSCR +BBB> TEAMSTAT + diff --git a/BACKUP/ART110/BB8.LOD b/BACKUP/ART110/BB8.LOD new file mode 100644 index 0000000..3a22e0d --- /dev/null +++ b/BACKUP/ART110/BB8.LOD @@ -0,0 +1,304 @@ +***> 4e66600,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRRSEQ.TBL +; +nba_run1.img +---> w1defst1,w1defst2,w1defst3,w1defst4,w2defst1,w2defst2,w2defst3,w2defst4 +---> w3defst1,w3defst2,w3defst3,w3defst4,w4defst1,w4defst2,w4defst3,w4defst4 +---> w5defst1,w5defst2,w5defst3,w5defst4 +---> w1run1,w1run2,w1run3 +---> w1run4,w1run5,w1run6,w1run7,w1run8,w1run9,w1run10,w1run11,w2run1,w2run2 +---> w2run3,w2run4,w2run5,w2run6,w2run7,w2run8,w2run9,w2run10,w2run11,w3run1 +---> w3run2,w3run3,w3run4,w3run5,w3run6,w3run7,w3run8,w3run9,w3run10,w3run11 +---> w4run1,w4run2,w4run3,w4run4,w4run5,w4run6,w4run7,w4run8,w4run9,w4run10 +---> w4run11,w5run1,w5run2,w5run3,w5run4,w5run5,w5run6,w5run7,w5run8,w5run9 +---> w5run10,w5run11 +;,w1spr1,w1spr2,w1spr3,w1spr4,w1spr5,w1spr6,w1spr7,w1spr8 +;---> w1spr9,w1spr10,w1spr11,w2spr1,w2spr2,w2spr3,w2spr4,w2spr5,w2spr6,w2spr7 +;---> w2spr8,w2spr9,w2spr10,w2spr11 +---> w3spr1,w3spr2,w3spr3,w3spr4 +---> w3spr5,w3spr6,w3spr7,w3spr8,w3spr9,w3spr10,w3spr11,w4spr1 +---> w4spr2,w4spr3,w4spr4,w4spr5,w4spr6,w4spr7,w4spr8,w4spr9,w4spr10,w4spr11 +;---> w5spr1,w5spr2,w5spr3,w5spr4,w5spr5,w5spr6,w5spr7,w5spr8,w5spr9,w5spr10 +;---> w5spr11,w1dspr1,w1dspr2,w1dspr3,w1dspr4,w1dspr5,w1dspr6,w1dspr7,w1dspr8 +;---> w1dspr9,w1dspr10,w1dspr11,w2dspr1,w2dspr2,w2dspr3,w2dspr4,w2dspr5 +;---> w2dspr6,w2dspr7,w2dspr8,w2dspr9,w2dspr10,w2dspr11 +---> w3dspr1,w3dspr2 +---> w3dspr3,w3dspr4,w3dspr5,w3dspr6,w3dspr7,w3dspr8,w3dspr9,w3dspr10 +---> w3dspr11,w4dspr1,w4dspr2,w4dspr3,w4dspr4,w4dspr5,w4dspr6,w4dspr7 +---> w4dspr8,w4dspr9,w4dspr10,w4dspr11 +;,w5dspr1,w5dspr2,w5dspr3,w5dspr4 +;---> w5dspr5,w5dspr6,w5dspr7,w5dspr8,w5dspr9,w5dspr10,w5dspr11 +---> w1drun1 +---> w1drun2,w1drun3,w1drun4,w1drun5,w1drun6,w1drun7,w1drun8,w1drun9 +---> w1drun10,w1drun11,w2drun1,w2drun2,w2drun3,w2drun4,w2drun5,w2drun6 +---> w2drun7,w2drun8,w2drun9,w2drun10,w2drun11,w3drun1,w3drun2,w3drun3 +---> w3drun4,w3drun5,w3drun6,w3drun7,w3drun8,w3drun9,w3drun10,w3drun11 +---> w4drun1,w4drun2,w4drun3,w4drun4,w4drun5,w4drun6,w4drun7,w4drun8,w4drun9 +---> w4drun10,w4drun11,w5drun1,w5drun2,w5drun3,w5drun4,w5drun5,w5drun6 +---> w5drun7,w5drun8,w5drun9,w5drun10,w5drun11 +;,w5defwd1,w5defwd2,w5defwd3 +;---> w5defwd4,w5defwd5,w5defwd6,w5defwd7,w5defwd8,w5defwd9,w5defwd10 +;---> w4defwd1,w4defwd2,w4defwd3,w4defwd4,w4defwd5,w4defwd6,w4defwd7,w4defwd8 +;---> w4defwd9,w4defwd10,w4defwd11,w3defwd1,w3defwd2,w3defwd3,w3defwd4 +;---> w3defwd5,w3defwd6,w3defwd7,w3defwd8,w3defwd9,w3defwd10,w2defwd1 +;---> w2defwd2,w2defwd3,w2defwd4,w2defwd5,w2defwd6,w2defwd7,w2defwd8,w2defwd9 +;---> w2defwd10,w1defwd1,w1defwd2,w1defwd3,w1defwd4,w1defwd5,w1defwd6 +;---> w1defwd7,w1defwd8,w1defwd9,w1defwd10 +; +nba_run2.img +---> w1dfcr1,w1dfcr2,w1dfcr3 +---> w1dfcr4,w1dfcr5,w1dfcr6,w2dfcr1 +---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +PPP> 6 +ASM> PLYRHD6.TBL +colhds1.img +GLO> PLYRHD6.GLO +---> MARBRY00,MARBRY01 +GLO> XXXHD.GLO +---> MARBRY02,MARBRY03,MARBRY04 +---> MARBRY05,MARBRY06,MARBRY07,MARBRY08,MARBRY09,MARBRY10,MARBRY11,MARBRY12 +---> MARBRY13,MARBRY14,MARBRY15,MARBRY16 +GLO> PLYRHD6.GLO +---> ALLEN00,ALLEN01 +GLO> XXXHD.GLO +---> ALLEN02,ALLEN03,ALLEN04,ALLEN05,ALLEN06,ALLEN07,ALLEN08 +---> ALLEN09,ALLEN10,ALLEN11,ALLEN12 +---> ALLEN13,ALLEN14,ALLEN15,ALLEN16 +GLO> PLYRHD6.GLO +---> CAMB00,CAMB01 +GLO> XXXHD.GLO +---> CAMB02,CAMB03,CAMB04,CAMB05,CAMB06,CAMB07,CAMB08 +---> CAMB09,CAMB10,CAMB11,CAMB12,CAMB13,CAMB14 +---> CAMB15,CAMB16 +GLO> PLYRHD6.GLO +---> DAMP00,DAMP01 +GLO> XXXHD.GLO +---> DAMP02,DAMP03,DAMP04,DAMP05,DAMP06,DAMP07 +---> DAMP08,DAMP09,DAMP10,DAMP11,DAMP12,DAMP13,DAMP14,DAMP15,DAMP16 +GLO> PLYRHD6.GLO +---> DUN00,DUN01 +GLO> XXXHD.GLO +---> DUN02,DUN03,DUN04,DUN05,DUN06,DUN07,DUN08,DUN09,DUN10,DUN11,DUN12 +---> DUN13,DUN14,DUN15,DUN16 +GLO> PLYRHD6.GLO +---> HAM00,HAM01 +GLO> XXXHD.GLO +---> HAM02,HAM03,HAM04,HAM05,HAM06,HAM07 +---> HAM08,HAM09,HAM10,HAM11,HAM12,HAM13,HAM14,HAM15,HAM16 +GLO> PLYRHD6.GLO +---> HARR00,HARR01 +GLO> XXXHD.GLO +---> HARR02,HARR03,HARR04,HARR05,HARR06,HARR07,HARR08,HARR09,HARR10,HARR11 +---> HARR12,HARR13,HARR14,HARR15,HARR16 +GLO> PLYRHD6.GLO +---> IVER00,IVER01 +GLO> XXXHD.GLO +---> IVER02,IVER03,IVER04,IVER05,IVER06,IVER07,IVER08 +---> IVER09,IVER10,IVER11,IVER12,IVER13,IVER14,IVER15,IVER16 +GLO> PLYRHD6.GLO +---> KIT00,KIT01 +GLO> XXXHD.GLO +---> KIT02,KIT03,KIT04,KIT05,KIT06,KIT07,KIT08 +---> KIT09,KIT10,KIT11,KIT12,KIT13,KIT14,KIT15,KIT16 +GLO> PLYRHD6.GLO +---> MINR00,MINR01 +GLO> XXXHD.GLO +---> MINR02,MINR03,MINR04,MINR05,MINR06,MINR07,MINR08 +---> MINR09,MINR10,MINR11,MINR12 +---> MINR13,MINR14,MINR15,MINR16 +GLO> PLYRHD6.GLO +---> RILY00,RILY01 +GLO> XXXHD.GLO +---> RILY02,RILY03,RILY04,RILY05,RILY06,RILY07,RILY08 +---> RILY09,RILY10,RILY11,RILY12,RILY13,RILY14,RILY15,RILY16 +GLO> PLYRHD6.GLO +---> WAL00,WAL01 +GLO> XXXHD.GLO +---> WAL02,WAL03,WAL04,WAL05,WAL06,WAL07,WAL08,WAL09 +---> WAL10,WAL11,WAL12,WAL13,WAL14,WAL15,WAL16 +hdsmsc6.img +GLO> PLYRHD6.GLO +---> CARY00,CARY01 +GLO> XXXHD.GLO +---> CARY02,CARY03,CARY04,CARY05 +;,CARY06 +;---> CARY07,CARY08,CARY09,CARY10,CARY11,CARY12,CARY13,CARY14,CARY15,CARY16 +---> CARY16 +GLO> PLYRHD6.GLO +---> DAN00,DAN01 +GLO> XXXHD.GLO +---> DAN02,DAN03,DAN04,DAN05,DAN06,DAN07,DAN08,DAN09 +---> DAN10,DAN11,DAN12,DAN13,DAN14,DAN15,DAN16 +GLO> PLYRHD6.GLO +---> EDDIE00,EDDIE01 +GLO> XXXHD.GLO +---> EDDIE02,EDDIE03,EDDIE04,EDDIE05,EDDIE06 +---> EDDIE07,EDDIE08,EDDIE09,EDDIE10,EDDIE11 +---> EDDIE12,EDDIE13,EDDIE14,EDDIE15,EDDIE16 +GLO> PLYRHD6.GLO +---> EUGG00,EUGG01 +GLO> XXXHD.GLO +---> EUGG02,EUGG03,EUGG04,EUGG05,EUGG06,EUGG07,EUGG08 +---> EUGG09,EUGG10,EUGG11,EUGG12,EUGG13 +---> EUGG14,EUGG15,EUGG16 +GLO> PLYRHD6.GLO +---> JEFF00,JEFF01 +GLO> XXXHD.GLO +---> JEFF02,JEFF03,JEFF04,JEFF05,JEFF06 +---> JEFF07,JEFF08,JEFF09,JEFF10,JEFF11,JEFF12,JEFF13,JEFF14,JEFF15,JEFF16 +GLO> PLYRHD6.GLO +---> JAMIE00,JAMIE01 +GLO> XXXHD.GLO +---> JAMIE02,JAMIE03,JAMIE04,JAMIE05 +---> JAMIE06,JAMIE07,JAMIE08,JAMIE09,JAMIE10,JAMIE11,JAMIE12,JAMIE13,JAMIE14 +---> JAMIE15,JAMIE16 +GLO> PLYRHD6.GLO +---> TURMEL00,TURMEL01 +GLO> XXXHD.GLO +---> TURMEL02,TURMEL03,TURMEL04,TURMEL05,TURMEL06,TURMEL07,TURMEL08 +---> TURMEL09,TURMEL10,TURMEL11,TURMEL12,TURMEL13,TURMEL14,TURMEL15,TURMEL16 +; +hdsmsc7.img +GLO> PLYRHD6.GLO +---> BUD00,BUD01 +GLO> XXXHD.GLO +---> BUD02,BUD03,BUD04,BUD05,BUD06 +---> BUD07,BUD08,BUD09,BUD10,BUD11,BUD12,BUD13,BUD14,BUD15,BUD16 +GLO> PLYRHD6.GLO +---> HEY00,HEY01 +GLO> XXXHD.GLO +---> HEY02,HEY03,HEY04,HEY05,HEY06,HEY07,HEY08,HEY09,HEY10,HEY11,HEY12,HEY13 +---> HEY14,HEY15,HEY16 +GLO> PLYRHD6.GLO +---> JEN00,JEN01 +GLO> XXXHD.GLO +---> JEN02,JEN03,JEN04,JEN05,JEN06,JEN07,JEN08 +---> JEN09,JEN10,JEN11,JEN12,JEN13,JEN14,JEN15,JEN16 +GLO> PLYRHD6.GLO +---> JOHNC00,JOHNC01 +GLO> XXXHD.GLO +---> JOHNC02,JOHNC03,JOHNC04,JOHNC05,JOHNC06,JOHNC07,JOHNC08 +---> JOHNC09,JOHNC10,JOHNC11 +---> JOHNC12,JOHNC13,JOHNC14,JOHNC15,JOHNC16 +GLO> PLYRHD6.GLO +---> NIK00,NIK01 +GLO> XXXHD.GLO +---> NIK02,NIK03,NIK04 +---> NIK05 +;,NIK06,NIK07,NIK08,NIK09,NIK10,NIK11,NIK12,NIK13,NIK14,NIK15,NIK16 +---> NIK16 +GLO> PLYRHD6.GLO +---> ROOT00,ROOT01 +GLO> XXXHD.GLO +---> ROOT02,ROOT03,ROOT04,ROOT05,ROOT06,ROOT07,ROOT08,ROOT09 +---> ROOT10,ROOT11,ROOT12,ROOT13,ROOT14,ROOT15,ROOT16 +GLO> PLYRHD6.GLO +---> NEILF00,NEILF01 +GLO> XXXHD.GLO +---> NEILF02,NEILF03,NEILF04 +---> NEILF05 +;---> NEILF06,NEILF07,NEILF08,NEILF09,NEILF10,NEILF11,NEILF12,NEILF13 +;---> NEILF14,NEILF15,NEILF16 +---> NEILF16 +GLO> PLYRHD6.GLO +---> PAT00,PAT01 +GLO> XXXHD.GLO +---> PAT02,PAT03,PAT04,PAT05,PAT06,PAT07 +---> PAT08,PAT09,PAT10,PAT11,PAT12,PAT13,PAT14,PAT15,PAT16 +GLO> PLYRHD6.GLO +---> PERRY00,PERRY01 +GLO> XXXHD.GLO +---> PERRY02,PERRY03,PERRY04,PERRY05,PERRY06,PERRY07,PERRY08,PERRY09,PERRY10 +---> PERRY11,PERRY12,PERRY13,PERRY14,PERRY15,PERRY16 +GLO> PLYRHD6.GLO +---> SAL00,SAL01 +GLO> XXXHD.GLO +---> SAL02,SAL03,SAL04 +---> SAL05,SAL06,SAL07,SAL08,SAL09,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +hdsmsc8.img +GLO> PLYRHD6.GLO +---> BOON00,BOON01 +GLO> XXXHD.GLO +---> BOON02,BOON03,BOON04,BOON05 +---> BOON06,BOON07,BOON08,BOON09,BOON10,BOON11,BOON12,BOON13,BOON14,BOON15 +---> BOON16 +GLO> PLYRHD6.GLO +---> CARLOS00,CARLOS01 +GLO> XXXHD.GLO +---> CARLOS02,CARLOS03,CARLOS04,CARLOS05,CARLOS16 +;---> CARLOS07,CARLOS08,CARLOS09,CARLOS10,CARLOS11,CARLOS12,CARLOS13,CARLOS14 +;---> CARLOS15,CARLOS16 +GLO> PLYRHD6.GLO +---> FIFI00,FIFI01 +GLO> XXXHD.GLO +---> FIFI02,FIFI03,FIFI04,FIFI05,FIFI06 +---> FIFI07,FIFI08,FIFI09,FIFI10,FIFI11,FIFI12,FIFI13,FIFI14,FIFI15,FIFI16 +GLO> PLYRHD6.GLO +---> HEITH00,HEITH01 +GLO> XXXHD.GLO +---> HEITH02,HEITH03,HEITH04,HEITH05,HEITH16 +;---> HEITH06,HEITH07,HEITH08 +;---> HEITH09,HEITH10,HEITH11,HEITH12,HEITH13,HEITH14,HEITH15,HEITH16 +;---> HEITH16 +GLO> PLYRHD6.GLO +---> JASON00,JASON01 +GLO> XXXHD.GLO +---> JASON02,JASON03,JASON04,JASON05,JASON16 +;---> JASON06,JASON07,JASON08,JASON09 +;---> JASON10,JASON11,JASON12,JASON13,JASON14,JASON15,JASON16 +GLO> PLYRHD6.GLO +---> JOSH00,JOSH01 +GLO> XXXHD.GLO +---> JOSH02,JOSH03,JOSH04,JOSH05,JOSH16 +;JOSH06,JOSH07,JOSH08,JOSH09,JOSH10,JOSH11 +;---> JOSH12,JOSH13,JOSH14,JOSH15,JOSH16 +GLO> PLYRHD6.GLO +---> MARTY00,MARTY01 +GLO> XXXHD.GLO +---> MARTY02,MARTY03 +---> MARTY04,MARTY05,MARTY16 +;MARTY06,MARTY07,MARTY08,MARTY09,MARTY10,MARTY11,MARTY12 +;---> MARTY13,MARTY14,MARTY15,MARTY16 +GLO> PLYRHD6.GLO +---> MATT00,MATT01 +GLO> XXXHD.GLO +---> MATT02,MATT03,MATT04 +---> MATT05 +;,MATT06,MATT07,MATT08,MATT09,MATT10,MATT11,MATT12,MATT13,MATT14 +;---> MATT15,MATT16 +---> MATT16 +GLO> PLYRHD6.GLO +---> OURSL00,OURSL01 +GLO> XXXHD.GLO +---> OURSL02,OURSL03,OURSL04,OURSL05,OURSL06 +---> OURSL07,OURSL08,OURSL09,OURSL10,OURSL11,OURSL12,OURSL13,OURSL14,OURSL15 +---> OURSL16 +GLO> PLYRHD6.GLO +---> QUINN00,QUINN01 +GLO> XXXHD.GLO +---> QUINN02,QUINN03,QUINN04,QUINN05,QUINN06,QUINN07 +---> QUINN08,QUINN09,QUINN10,QUINN11,QUINN12,QUINN13,QUINN14,QUINN15,QUINN16 +GLO> PLYRHD6.GLO +---> TOBIAS00,TOBIAS01 +GLO> XXXHD.GLO +---> TOBIAS02,TOBIAS03,TOBIAS04,TOBIAS05,TOBIAS06,TOBIAS07 +---> TOBIAS08,TOBIAS09,TOBIAS10,TOBIAS11,TOBIAS12,TOBIAS13,TOBIAS14,TOBIAS15 +---> TOBIAS16 +PPP> 0 +ASM> MUGSHOT8.TBL +mugsmsc8.img +---> FIFI_MUG,MAT_MUG,JOS_MUG,HEI_MUG,CARL_MUG,MARTY_MUG,BOO_MUG,QUI_MUG +---> JAS_MUG,OUR_MUG,TOB_MUG + diff --git a/BACKUP/ART110/BBMUG.LOD b/BACKUP/ART110/BBMUG.LOD new file mode 100644 index 0000000..66704cb --- /dev/null +++ b/BACKUP/ART110/BBMUG.LOD @@ -0,0 +1,930 @@ +***> 2000000,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD3.TBL +GLO> PLYRHD2.GLO +PPP> 6 +; +hds8.img +XON> +---> WILLIS0,WILLIS1 +GLO> XXXHD.GLO +---> WILLIS2,WILLIS3,WILLIS4,WILLIS5,WILLIS6,WILLIS7,WILLIS8 +---> WILLIS9,WILLIS10,WILLIS11 +---> WILLIS12,WILLIS13,WILLIS14,WILLIS15,WILLIS16 +GLO> PLYRHD2.GLO +---> BROWN0,BROWN1 +GLO> XXXHD.GLO +---> BROWN2,BROWN3,BROWN4,BROWN5,BROWN6,BROWN7,BROWN8,BROWN9,BROWN10 +---> BROWN11,BROWN12,BROWN13,BROWN14,BROWN15,BROWN16 +GLO> PLYRHD2.GLO +---> MOURN0,MOURN1 +GLO> XXXHD.GLO +---> MOURN2,MOURN3,MOURN4,MOURN5 +---> MOURN6,MOURN7,MOURN8,MOURN9,MOURN10,MOURN11,MOURN12,MOURN13,MOURN14 +---> MOURN15,MOURN16 +GLO> PLYRHD2.GLO +---> KUKOC0,KUKOC1 +GLO> XXXHD.GLO +---> KUKOC2,KUKOC3,KUKOC4,KUKOC5,KUKOC6,KUKOC7,KUKOC8,KUKOC9,KUKOC10 +---> KUKOC11,KUKOC12,KUKOC13,KUKOC14,KUKOC15,KUKOC16 +GLO> PLYRHD2.GLO +---> JACK0,JACK1 +GLO> XXXHD.GLO +---> JACK2,JACK3,JACK4,JACK5,JACK6 +---> JACK7,JACK8,JACK9,JACK10,JACK11,JACK12,JACK13,JACK14,JACK15,JACK16 +GLO> PLYRHD2.GLO +---> MASH0,MASH1 +GLO> XXXHD.GLO +---> MASH2,MASH3,MASH4,MASH5,MASH6,MASH7,MASH8,MASH9,MASH10,MASH11 +---> MASH12,MASH13,MASH14,MASH15,MASH16 +HDS9.IMG +GLO> PLYRHD2.GLO +---> DUMARS0,DUMARS1 +GLO> XXXHD.GLO +---> DUMARS2,DUMARS3,DUMARS4,DUMARS5,DUMARS6,DUMARS7,DUMARS8 +---> DUMARS9,DUMARS10,DUMARS11,DUMARS12,DUMARS13,DUMARS14,DUMARS15,DUMARS16 +GLO> PLYRHD2.GLO +---> RODMAN0,RODMAN1 +GLO> XXXHD.GLO +---> RODMAN2,RODMAN3,RODMAN4,RODMAN5,RODMAN6,RODMAN7,RODMAN8 +---> RODMAN9,RODMAN10,RODMAN11,RODMAN12,RODMAN13,RODMAN14,RODMAN15,RODMAN16 +---> RODCLR1,RODCLR2,RODCLR3 +---> RODCLR4,RODCLR5,RODCLR6,RODCLR7,RODCLR8 +GLO> PLYRHD2.GLO +---> WEBBER0,WEBBER1 +GLO> XXXHD.GLO +---> WEBBER2,WEBBER3,WEBBER4,WEBBER5,WEBBER6,WEBBER7,WEBBER8 +---> WEBBER9,WEBBER10,WEBBER11,WEBBER12,WEBBER13,WEBBER14,WEBBER15,WEBBER16 +GLO> PLYRHD2.GLO +---> HORRY0,HORRY1 +GLO> XXXHD.GLO +---> HORRY2,HORRY3,HORRY4,HORRY5,HORRY6,HORRY7 +---> HORRY8,HORRY9,HORRY10,HORRY11,HORRY12,HORRY13,HORRY14,HORRY15,HORRY16 +GLO> PLYRHD2.GLO +---> SMITS0,SMITS1 +GLO> XXXHD.GLO +---> SMITS2,SMITS3,SMITS4,SMITS5,SMITS6,SMITS7,SMITS8,SMITS9,SMITS10 +---> SMITS11,SMITS12,SMITS13,SMITS14,SMITS15,SMITS16 +HDS10.IMG +GLO> PLYRHD2.GLO +---> CAMP0,CAMP1 +GLO> XXXHD.GLO +---> CAMP2,CAMP3,CAMP4,CAMP5,CAMP6,CAMP7,CAMP8,CAMP9,CAMP10,CAMP11 +---> CAMP12,CAMP13,CAMP14,CAMP15,CAMP16 +GLO> PLYRHD2.GLO +---> BAKER0,BAKER1 +GLO> XXXHD.GLO +---> BAKER2,BAKER3,BAKER4,BAKER5,BAKER6,BAKER7,BAKER8,BAKER9,BAKER10 +---> BAKER11,BAKER12,BAKER13,BAKER14,BAKER15,BAKER16 +GLO> PLYRHD2.GLO +---> RIDER0,RIDER1 +GLO> XXXHD.GLO +---> RIDER2,RIDER3,RIDER4,RIDER5,RIDER6,RIDER7,RIDER8,RIDER9,RIDER10 +---> RIDER11,RIDER12,RIDER13,RIDER14,RIDER15,RIDER16 +GLO> PLYRHD2.GLO +---> K_AND0,K_AND1 +GLO> XXXHD.GLO +---> K_AND2,K_AND3 +---> K_AND4,K_AND5,K_AND6,K_AND7,K_AND8,K_AND9,K_AND10,K_AND11,K_AND12 +---> K_AND13,K_AND14,K_AND15,K_AND16 +GLO> PLYRHD2.GLO +---> MORRIS0,MORRIS1 +GLO> XXXHD.GLO +---> MORRIS2,MORRIS3,MORRIS4 +---> MORRIS5,MORRIS6,MORRIS7,MORRIS8,MORRIS9,MORRIS10,MORRIS11,MORRIS12 +---> MORRIS13,MORRIS14,MORRIS15,MORRIS16 +GLO> PLYRHD2.GLO +---> MASON0,MASON1 +GLO> XXXHD.GLO +---> MASON2,MASON3,MASON4,MASON5 +---> MASON6,MASON7,MASON8,MASON9,MASON10,MASON11,MASON12,MASON13,MASON14 +---> MASON15,MASON16 +GLO> PLYRHD2.GLO +---> STARKS0,STARKS1 +GLO> XXXHD.GLO +---> STARKS2,STARKS3,STARKS4,STARKS5,STARKS6 +---> STARKS7,STARKS8,STARKS9,STARKS10,STARKS11,STARKS12,STARKS13,STARKS14 +---> STARKS15,STARKS16 +HDS11.IMG +GLO> PLYRHD2.GLO +---> A_HARD0,A_HARD1 +GLO> XXXHD.GLO +---> A_HARD2,A_HARD3,A_HARD4,A_HARD5,A_HARD6,A_HARD7,A_HARD8 +---> A_HARD9,A_HARD10,A_HARD11,A_HARD12,A_HARD13,A_HARD14,A_HARD15,A_HARD16 +GLO> PLYRHD2.GLO +---> N_AND0,N_AND1 +GLO> XXXHD.GLO +---> N_AND2,N_AND3,N_AND4,N_AND5,N_AND6,N_AND7,N_AND8,N_AND9,N_AND10 +---> N_AND11,N_AND12,N_AND13,N_AND14,N_AND15,N_AND16 +GLO> PLYRHD2.GLO +---> WEATH0,WEATH1 +GLO> XXXHD.GLO +---> WEATH2,WEATH3 +---> WEATH4,WEATH5,WEATH6,WEATH7,WEATH8,WEATH9,WEATH10,WEATH11,WEATH12 +---> WEATH13,WEATH14,WEATH15,WEATH16 +GLO> PLYRHD2.GLO +---> BRAD0,BRAD1 +GLO> XXXHD.GLO +---> BRAD2,BRAD3,BRAD4,BRAD5,BRAD6 +---> BRAD7,BRAD8,BRAD9,BRAD10,BRAD11,BRAD12,BRAD13,BRAD14,BRAD15,BRAD16 +GLO> PLYRHD2.GLO +---> K_JOHN0,K_JOHN1 +GLO> XXXHD.GLO +---> K_JOHN2,K_JOHN3,K_JOHN4,K_JOHN5,K_JOHN6,K_JOHN7,K_JOHN8 +---> K_JOHN9,K_JOHN10,K_JOHN11,K_JOHN12,K_JOHN13,K_JOHN14,K_JOHN15,K_JOHN16 +GLO> PLYRHD2.GLO +---> C_ROB0,C_ROB1 +GLO> XXXHD.GLO +---> C_ROB2,C_ROB3,C_ROB4,C_ROB5,C_ROB6,C_ROB7,C_ROB8,C_ROB9,C_ROB10 +---> C_ROB11,C_ROB12,C_ROB13,C_ROB14,C_ROB15,C_ROB16 +GLO> PLYRHD2.GLO +---> RICH0,RICH1 +GLO> XXXHD.GLO +---> RICH2,RICH3 +---> RICH4,RICH5,RICH6,RICH7,RICH8,RICH9,RICH10,RICH11,RICH12,RICH13,RICH14 +---> RICH15,RICH16 +HDS12.IMG +GLO> PLYRHD2.GLO +---> PAYTON0,PAYTON1 +GLO> XXXHD.GLO +---> PAYTON2,PAYTON3,PAYTON4,PAYTON5,PAYTON6,PAYTON7,PAYTON8 +---> PAYTON9,PAYTON10,PAYTON11,PAYTON12,PAYTON13,PAYTON14,PAYTON15,PAYTON16 +GLO> PLYRHD2.GLO +---> MCKEY0,MCKEY1 +GLO> XXXHD.GLO +---> MCKEY2,MCKEY3,MCKEY4,MCKEY5,MCKEY6,MCKEY7,MCKEY8,MCKEY9,MCKEY10 +---> MCKEY11,MCKEY12,MCKEY13,MCKEY14,MCKEY15,MCKEY16 +GLO> PLYRHD2.GLO +---> BENOIT0,BENOIT1 +GLO> XXXHD.GLO +---> BENOIT2 +---> BENOIT3,BENOIT4,BENOIT5,BENOIT6,BENOIT7,BENOIT8,BENOIT9,BENOIT10 +---> BENOIT11,BENOIT12,BENOIT13,BENOIT14,BENOIT15,BENOIT16 +GLO> PLYRHD2.GLO +---> CHEAN0,CHEAN1 +GLO> XXXHD.GLO +---> CHEAN2 +---> CHEAN3,CHEAN4,CHEAN5,CHEAN6,CHEAN7,CHEAN8,CHEAN9,CHEAN10,CHEAN11 +---> CHEAN12,CHEAN13,CHEAN14,CHEAN15,CHEAN16 +; +ASM> PLYRHD5.TBL +GLO> PLYRHD5.GLO +; +hds13.img +---> BLAYLO0,BLAYLO1 +GLO> XXXHD.GLO +---> BLAYLO2,BLAYLO3,BLAYLO4,BLAYLO5,BLAYLO6,BLAYLO7,BLAYLO8,BLAYLO9 +---> BLAYLO10,BLAYLO11,BLAYLO12,BLAYLO13,BLAYLO14,BLAYLO15,BLAYLO16 +GLO> PLYRHD5.GLO +---> SSMITH0,SSMITH1 +GLO> XXXHD.GLO +---> SSMITH2,SSMITH3,SSMITH4,SSMITH5,SSMITH6,SSMITH7,SSMITH8,SSMITH9 +---> SSMITH10,SSMITH11,SSMITH12,SSMITH13,SSMITH14,SSMITH15,SSMITH16 +GLO> PLYRHD5.GLO +---> KNORMA0,KNORMA1 +GLO> XXXHD.GLO +---> KNORMA2,KNORMA3,KNORMA4,KNORMA5,KNORMA6,KNORMA7,KNORMA8,KNORMA9 +---> KNORMA10,KNORMA11,KNORMA12,KNORMA13,KNORMA14,KNORMA15,KNORMA16 +;GLO> PLYRHD5.GLO +;---> HENDER0,HENDER1 +;GLO> XXXHD.GLO +;---> HENDER2,HENDER3,HENDER4,HENDER5,HENDER6,HENDER7,HENDER8,HENDER9 +;---> HENDER10,HENDER11,HENDER12,HENDER13,HENDER14,HENDER15,HENDER16 +GLO> PLYRHD5.GLO +---> BARROS0,BARROS1 +GLO> XXXHD.GLO +---> BARROS2,BARROS3,BARROS4,BARROS5,BARROS6,BARROS7,BARROS8,BARROS9 +---> BARROS10,BARROS11,BARROS12,BARROS13,BARROS14,BARROS15,BARROS16 +GLO> PLYRHD5.GLO +---> MONTRO0,MONTRO1 +GLO> XXXHD.GLO +---> MONTRO2,MONTRO3,MONTRO4,MONTRO5,MONTRO6,MONTRO7,MONTRO8,MONTRO9 +---> MONTRO10,MONTRO11,MONTRO12,MONTRO13,MONTRO14,MONTRO15,MONTRO16 +GLO> PLYRHD5.GLO +---> RADJA0,RADJA1 +GLO> XXXHD.GLO +---> RADJA2,RADJA3,RADJA4,RADJA5,RADJA6,RADJA7,RADJA8,RADJA9,RADJA10,RADJA11 +---> RADJA12,RADJA13,RADJA14,RADJA15,RADJA16 +hds14.img +GLO> PLYRHD5.GLO +---> CURRY0,CURRY1 +GLO> XXXHD.GLO +---> CURRY2,CURRY3,CURRY4,CURRY5,CURRY6,CURRY7,CURRY8,CURRY9,CURRY10,CURRY11 +---> CURRY12,CURRY13,CURRY14,CURRY15,CURRY16 +GLO> PLYRHD5.GLO +---> ZIDEK0,ZIDEK1 +GLO> XXXHD.GLO +---> ZIDEK2,ZIDEK3,ZIDEK4 +---> ZIDEK5,ZIDEK6,ZIDEK7,ZIDEK8,ZIDEK9,ZIDEK10,ZIDEK11,ZIDEK12,ZIDEK13 +---> ZIDEK14,ZIDEK15,ZIDEK16 +GLO> PLYRHD5.GLO +---> KERR0,KERR1 +GLO> XXXHD.GLO +---> KERR2,KERR3,KERR4,KERR5,KERR6,KERR7,KERR8 +---> KERR9,KERR10,KERR11,KERR12,KERR13,KERR14,KERR15,KERR16 +GLO> PLYRHD5.GLO +---> THILL0,THILL1 +GLO> XXXHD.GLO +---> THILL2 +---> THILL3,THILL4,THILL5,THILL6,THILL7,THILL8,THILL9,THILL10,THILL11 +---> THILL12,THILL13,THILL14,THILL15,THILL16 +GLO> PLYRHD5.GLO +---> CMILLS0,CMILLS1 +GLO> XXXHD.GLO +---> CMILLS2,CMILLS3,CMILLS4 +---> CMILLS5,CMILLS6,CMILLS7,CMILLS8,CMILLS9,CMILLS10,CMILLS11,CMILLS12 +---> CMILLS13,CMILLS14,CMILLS15,CMILLS16 +hds15.img +GLO> PLYRHD5.GLO +---> PHILLS0,PHILLS1 +GLO> XXXHD.GLO +---> PHILLS2,PHILLS3,PHILLS4,PHILLS5,PHILLS6,PHILLS7,PHILLS8,PHILLS9 +---> PHILLS10,PHILLS11,PHILLS12,PHILLS13,PHILLS14,PHILLS15,PHILLS16 +GLO> PLYRHD5.GLO +---> KIDD0,KIDD1 +GLO> XXXHD.GLO +---> KIDD2,KIDD3,KIDD4,KIDD5,KIDD6,KIDD7 +---> KIDD8,KIDD9,KIDD10,KIDD11,KIDD12,KIDD13,KIDD14,KIDD15,KIDD16 +GLO> PLYRHD5.GLO +---> PJONES0,PJONES1 +GLO> XXXHD.GLO +---> PJONES2,PJONES3,PJONES4,PJONES5,PJONES6,PJONES7,PJONES8,PJONES9 +---> PJONES10,PJONES11,PJONES12,PJONES13,PJONES14,PJONES15,PJONES16 +GLO> PLYRHD5.GLO +---> RAUF0,RAUF1 +GLO> XXXHD.GLO +---> RAUF2,RAUF3,RAUF4,RAUF5 +---> RAUF6,RAUF7,RAUF8,RAUF9,RAUF10,RAUF11,RAUF12,RAUF13,RAUF14,RAUF15 +---> RAUF16 +GLO> PLYRHD5.GLO +---> PACK0,PACK1 +GLO> XXXHD.GLO +---> PACK2,PACK3,PACK4,PACK5,PACK6,PACK7,PACK8,PACK9,PACK10 +---> PACK11,PACK12,PACK13,PACK14,PACK15,PACK16 +hds16.img +GLO> PLYRHD5.GLO +---> MCDYES0,MCDYES1 +GLO> XXXHD.GLO +---> MCDYES2,MCDYES3,MCDYES4,MCDYES5,MCDYES6,MCDYES7,MCDYES8,MCDYES9 +---> MCDYES10,MCDYES11,MCDYES12,MCDYES13,MCDYES14,MCDYES15,MCDYES16 +GLO> PLYRHD5.GLO +---> GHILL0,GHILL1 +GLO> XXXHD.GLO +---> GHILL2,GHILL3,GHILL4,GHILL5,GHILL6,GHILL7,GHILL8,GHILL9,GHILL10,GHILL11 +---> GHILL12,GHILL13,GHILL14,GHILL15,GHILL16 +GLO> PLYRHD5.GLO +---> TMILLS0,TMILLS1 +GLO> XXXHD.GLO +---> TMILLS2,TMILLS3,TMILLS4 +---> TMILLS5,TMILLS6,TMILLS7,TMILLS8,TMILLS9,TMILLS10,TMILLS11,TMILLS12 +---> TMILLS13,TMILLS14,TMILLS15,TMILLS16 +GLO> PLYRHD5.GLO +---> THORPE0,THORPE1 +GLO> XXXHD.GLO +---> THORPE2,THORPE3,THORPE4 +---> THORPE5,THORPE6,THORPE7,THORPE8,THORPE9,THORPE10,THORPE11,THORPE12 +---> THORPE13,THORPE14,THORPE15,THORPE16 +GLO> PLYRHD5.GLO +---> SPREWE0,SPREWE1 +GLO> XXXHD.GLO +---> SPREWE2,SPREWE3,SPREWE4 +---> SPREWE5,SPREWE6,SPREWE7,SPREWE8,SPREWE9,SPREWE10,SPREWE11,SPREWE12 +---> SPREWE13,SPREWE14,SPREWE15,SPREWE16 +hds17.img +GLO> PLYRHD5.GLO +---> JSMITH0,JSMITH1 +GLO> XXXHD.GLO +---> JSMITH2,JSMITH3,JSMITH4,JSMITH5,JSMITH6,JSMITH7,JSMITH8,JSMITH9 +---> JSMITH10,JSMITH11,JSMITH12,JSMITH13,JSMITH14,JSMITH15,JSMITH16 +GLO> PLYRHD5.GLO +---> CASSEL0,CASSEL1 +GLO> XXXHD.GLO +---> CASSEL2,CASSEL3,CASSEL4,CASSEL5,CASSEL6,CASSEL7,CASSEL8,CASSEL9 +---> CASSEL10,CASSEL11,CASSEL12,CASSEL13,CASSEL14,CASSEL15,CASSEL16 +GLO> PLYRHD5.GLO +---> DDAVIS0,DDAVIS1 +GLO> XXXHD.GLO +---> DDAVIS2,DDAVIS3,DDAVIS4,DDAVIS5,DDAVIS6,DDAVIS7,DDAVIS8,DDAVIS9 +---> DDAVIS10,DDAVIS11,DDAVIS12,DDAVIS13,DDAVIS14,DDAVIS15,DDAVIS16 +GLO> PLYRHD5.GLO +---> MCKEE0,MCKEE1 +GLO> XXXHD.GLO +---> MCKEE2,MCKEE3,MCKEE4,MCKEE5,MCKEE6,MCKEE7,MCKEE8,MCKEE9,MCKEE10,MCKEE11 +---> MCKEE12,MCKEE13,MCKEE14,MCKEE15,MCKEE16 +GLO> PLYRHD5.GLO +---> VAUGHT0,VAUGHT1 +GLO> XXXHD.GLO +---> VAUGHT2,VAUGHT3,VAUGHT4,VAUGHT5,VAUGHT6,VAUGHT7,VAUGHT8 +---> VAUGHT9,VAUGHT10,VAUGHT11,VAUGHT12,VAUGHT13,VAUGHT14,VAUGHT15,VAUGHT16 +GLO> PLYRHD5.GLO +---> RROGER0,RROGER1 +GLO> XXXHD.GLO +---> RROGER2,RROGER3,RROGER4,RROGER5,RROGER6,RROGER7,RROGER8,RROGER9 +---> RROGER10,RROGER11,RROGER12,RROGER13,RROGER14,RROGER15,RROGER16 +hds18.img +GLO> PLYRHD5.GLO +---> LMURRA0,LMURRA1 +GLO> XXXHD.GLO +---> LMURRA2,LMURRA3,LMURRA4,LMURRA5,LMURRA6,LMURRA7,LMURRA8,LMURRA9 +---> LMURRA10,LMURRA11,LMURRA12,LMURRA13,LMURRA14,LMURRA15,LMURRA16 +GLO> PLYRHD5.GLO +---> PRICHA0,PRICHA1 +GLO> XXXHD.GLO +---> PRICHA2,PRICHA3,PRICHA4,PRICHA5,PRICHA6,PRICHA7,PRICHA8,PRICHA9 +---> PRICHA10,PRICHA11,PRICHA12,PRICHA13,PRICHA14,PRICHA15,PRICHA16 +GLO> PLYRHD5.GLO +---> BBARRY0,BBARRY1 +GLO> XXXHD.GLO +---> BBARRY2,BBARRY3,BBARRY4,BBARRY5,BBARRY6,BBARRY7,BBARRY8,BBARRY9 +---> BBARRY10,BBARRY11,BBARRY12,BBARRY13,BBARRY14,BBARRY15,BBARRY16 +GLO> PLYRHD5.GLO +---> EXEL0,EXEL1 +GLO> XXXHD.GLO +---> EXEL2,EXEL3,EXEL4,EXEL5,EXEL6,EXEL7,EXEL8,EXEL9,EXEL10,EXEL11,EXEL12 +---> EXEL13,EXEL14,EXEL15,EXEL16 +GLO> PLYRHD5.GLO +---> CEBALL0,CEBALL1 +GLO> XXXHD.GLO +---> CEBALL2,CEBALL3,CEBALL4,CEBALL5 +---> CEBALL6,CEBALL7,CEBALL8,CEBALL9,CEBALL10,CEBALL11,CEBALL12,CEBALL13 +---> CEBALL14,CEBALL15,CEBALL16 +GLO> PLYRHD5.GLO +---> EJONES0,EJONES1 +GLO> XXXHD.GLO +---> EJONES2,EJONES3,EJONES4,EJONES5 +---> EJONES6,EJONES7,EJONES8,EJONES9,EJONES10,EJONES11,EJONES12,EJONES13 +---> EJONES14,EJONES15,EJONES16 +GLO> PLYRHD5.GLO +---> BOWENS0,BOWENS1 +GLO> XXXHD.GLO +---> BOWENS2,BOWENS3,BOWENS4,BOWENS5 +---> BOWENS6,BOWENS7,BOWENS8,BOWENS9,BOWENS10,BOWENS11,BOWENS12,BOWENS13 +---> BOWENS14,BOWENS15,BOWENS16 +hds19.img +GLO> PLYRHD5.GLO +---> GROBIN0,GROBIN1 +GLO> XXXHD.GLO +---> GROBIN2,GROBIN3 +---> GROBIN4,GROBIN5,GROBIN6,GROBIN7,GROBIN8,GROBIN9,GROBIN10,GROBIN11 +---> GROBIN12,GROBIN13,GROBIN14,GROBIN15,GROBIN16 +GLO> PLYRHD5.GLO +---> EMURD0,EMURD1 +GLO> XXXHD.GLO +---> EMURD2,EMURD3 +---> EMURD4,EMURD5,EMURD6,EMURD7,EMURD8,EMURD9,EMURD10,EMURD11,EMURD12 +---> EMURD13,EMURD14,EMURD15,EMURD16 +GLO> PLYRHD5.GLO +---> RESPER0,RESPER1 +GLO> XXXHD.GLO +---> RESPER2,RESPER3,RESPER4,RESPER5 +---> RESPER6,RESPER7,RESPER8,RESPER9,RESPER10,RESPER11,RESPER12,RESPER13 +---> RESPER14,RESPER15,RESPER16 +;GLO> PLYRHD5.GLO +;---> MWILLI0,MWILLI1 +;GLO> XXXHD.GLO +;---> MWILLI2,MWILLI3,MWILLI4,MWILLI5 +;---> MWILLI6,MWILLI7,MWILLI8,MWILLI9,MWILLI10,MWILLI11,MWILLI12,MWILLI13 +;---> MWILLI14,MWILLI15,MWILLI16 +;GLO> PLYRHD5.GLO +;---> ROOKS0,ROOKS1 +;GLO> XXXHD.GLO +;---> ROOKS2,ROOKS3,ROOKS4,ROOKS5,ROOKS6 +;---> ROOKS7,ROOKS8,ROOKS9,ROOKS10,ROOKS11,ROOKS12,ROOKS13,ROOKS14,ROOKS15 +;---> ROOKS16 +hds20.img +GLO> PLYRHD5.GLO +---> GARNET0,GARNET1 +GLO> XXXHD.GLO +---> GARNET2,GARNET3,GARNET4,GARNET5,GARNET6,GARNET7,GARNET8,GARNET9 +---> GARNET10,GARNET11,GARNET12,GARNET13,GARNET14,GARNET15,GARNET16 +GLO> PLYRHD5.GLO +---> GILLIA0,GILLIA1 +GLO> XXXHD.GLO +---> GILLIA2,GILLIA3,GILLIA4,GILLIA5,GILLIA6,GILLIA7,GILLIA8,GILLIA9 +---> GILLIA10,GILLIA11,GILLIA12,GILLIA13,GILLIA14,GILLIA15,GILLIA16 +GLO> PLYRHD5.GLO +---> OBANN0,OBANN1 +GLO> XXXHD.GLO +---> OBANN2,OBANN3,OBANN4,OBANN5,OBANN6,OBANN7,OBANN8,OBANN9,OBANN10,OBANN11 +---> OBANN12,OBANN13,OBANN14,OBANN15,OBANN16 +GLO> PLYRHD5.GLO +---> DSCOTT0,DSCOTT1 +GLO> XXXHD.GLO +---> DSCOTT2,DSCOTT3,DSCOTT4 +---> DSCOTT5,DSCOTT6,DSCOTT7,DSCOTT8,DSCOTT9,DSCOTT10,DSCOTT11,DSCOTT12 +---> DSCOTT13,DSCOTT14,DSCOTT15,DSCOTT16 +GLO> PLYRHD5.GLO +---> WRIGHT0,WRIGHT1 +GLO> XXXHD.GLO +---> WRIGHT2,WRIGHT3,WRIGHT4 +---> WRIGHT5,WRIGHT6,WRIGHT7,WRIGHT8,WRIGHT9,WRIGHT10,WRIGHT11,WRIGHT12 +---> WRIGHT13,WRIGHT14,WRIGHT15,WRIGHT16 +hds21.img +GLO> PLYRHD5.GLO +---> STACK0,STACK1 +GLO> XXXHD.GLO +---> STACK2,STACK3,STACK4,STACK5,STACK6,STACK7,STACK8,STACK9,STACK10 +---> STACK11,STACK12,STACK13,STACK14,STACK15,STACK16 +GLO> PLYRHD5.GLO +---> WPERS0,WPERS1 +GLO> XXXHD.GLO +---> WPERS2,WPERS3 +---> WPERS4,WPERS5,WPERS6,WPERS7,WPERS8,WPERS9,WPERS10,WPERS11,WPERS12 +---> WPERS13,WPERS14,WPERS15,WPERS16 +GLO> PLYRHD5.GLO +---> FINLEY0,FINLEY1 +GLO> XXXHD.GLO +---> FINLEY2,FINLEY3,FINLEY4,FINLEY5 +---> FINLEY6,FINLEY7,FINLEY8,FINLEY9,FINLEY10,FINLEY11,FINLEY12,FINLEY13 +---> FINLEY14,FINLEY15,FINLEY16 +GLO> PLYRHD5.GLO +---> STRICK0,STRICK1 +GLO> XXXHD.GLO +---> STRICK2,STRICK3,STRICK4,STRICK5 +---> STRICK6,STRICK7,STRICK8,STRICK9,STRICK10,STRICK11,STRICK12,STRICK13 +---> STRICK14,STRICK15,STRICK16 +GLO> PLYRHD5.GLO +---> SABONI0,SABONI1 +GLO> XXXHD.GLO +---> SABONI2,SABONI3,SABONI4,SABONI5 +---> SABONI6,SABONI7,SABONI8,SABONI9,SABONI10,SABONI11,SABONI12,SABONI13 +---> SABONI14,SABONI15,SABONI16 +GLO> PLYRHD5.GLO +---> BWILLI0,BWILLI1 +GLO> XXXHD.GLO +---> BWILLI2,BWILLI3,BWILLI4,BWILLI5 +---> BWILLI6,BWILLI7,BWILLI8,BWILLI9,BWILLI10,BWILLI11,BWILLI12,BWILLI13 +---> BWILLI14,BWILLI15,BWILLI16 +hds22.img +GLO> PLYRHD5.GLO +---> CHILD0,CHILD1 +GLO> XXXHD.GLO +---> CHILD2,CHILD3,CHILD4,CHILD5,CHILD6,CHILD7,CHILD8,CHILD9,CHILD10 +---> CHILD11,CHILD12,CHILD13,CHILD14,CHILD15,CHILD16 +GLO> PLYRHD5.GLO +---> WWILLI0,WWILLI1 +GLO> XXXHD.GLO +---> WWILLI2,WWILLI3 +---> WWILLI4,WWILLI5,WWILLI6,WWILLI7,WWILLI8,WWILLI9,WWILLI10,WWILLI11 +---> WWILLI12,WWILLI13,WWILLI14,WWILLI15,WWILLI16 +GLO> PLYRHD5.GLO +---> BGRANT0,BGRANT1 +GLO> XXXHD.GLO +---> BGRANT2,BGRANT3 +---> BGRANT4,BGRANT5,BGRANT6,BGRANT7,BGRANT8,BGRANT9,BGRANT10,BGRANT11 +---> BGRANT12,BGRANT13,BGRANT14,BGRANT15,BGRANT16 +GLO> PLYRHD5.GLO +---> MARCIU0,MARCIU1 +GLO> XXXHD.GLO +---> MARCIU2,MARCIU3 +---> MARCIU4,MARCIU5,MARCIU6,MARCIU7,MARCIU8,MARCIU9,MARCIU10,MARCIU11 +---> MARCIU12,MARCIU13,MARCIU14,MARCIU15,MARCIU16 +;GLO> PLYRHD5.GLO +;---> CWILLI0,CWILLI1 +;GLO> XXXHD.GLO +;---> CWILLI2,CWILLI3 +;---> CWILLI4,CWILLI5,CWILLI6,CWILLI7,CWILLI8,CWILLI9,CWILLI10,CWILLI11 +;---> CWILLI12,CWILLI13,CWILLI14,CWILLI15,CWILLI16 +GLO> PLYRHD5.GLO +---> AJOHN0,AJOHN1 +GLO> XXXHD.GLO +---> AJOHN2,AJOHN3 +---> AJOHN4,AJOHN5,AJOHN6,AJOHN7,AJOHN8,AJOHN9,AJOHN10,AJOHN11,AJOHN12 +---> AJOHN13,AJOHN14,AJOHN15,AJOHN16 +hds23.img +GLO> PLYRHD5.GLO +---> FORD0,FORD1 +GLO> XXXHD.GLO +---> FORD2,FORD3,FORD4,FORD5,FORD6,FORD7,FORD8,FORD9,FORD10,FORD11 +---> FORD12,FORD13,FORD14,FORD15,FORD16 +GLO> PLYRHD5.GLO +---> CROGER0,CROGER1 +GLO> XXXHD.GLO +---> CROGER2,CROGER3,CROGER4 +---> CROGER5,CROGER6,CROGER7,CROGER8,CROGER9,CROGER10,CROGER11,CROGER12 +---> CROGER13,CROGER14,CROGER15,CROGER16 +GLO> PLYRHD5.GLO +---> STOUD0,STOUD1 +GLO> XXXHD.GLO +---> STOUD2,STOUD3 +---> STOUD4,STOUD5,STOUD6,STOUD7,STOUD8,STOUD9,STOUD10,STOUD11,STOUD12 +---> STOUD13,STOUD14,STOUD15,STOUD16 +GLO> PLYRHD5.GLO +---> ANTHON0,ANTHON1 +GLO> XXXHD.GLO +---> ANTHON2,ANTHON3,ANTHON4,ANTHON5,ANTHON6,ANTHON7 +---> ANTHON8,ANTHON9,ANTHON10,ANTHON11,ANTHON12,ANTHON13,ANTHON14,ANTHON15 +---> ANTHON16 +;GLO> PLYRHD5.GLO +;---> GATTIS0,GATTIS1 +;GLO> XXXHD.GLO +;---> GATTIS2,GATTIS3,GATTIS4,GATTIS5,GATTIS6,GATTIS7 +;---> GATTIS8,GATTIS9,GATTIS10,GATTIS11,GATTIS12,GATTIS13,GATTIS14,GATTIS15 +;---> GATTIS16 +GLO> PLYRHD5.GLO +---> JHOW0,JHOW1 +GLO> XXXHD.GLO +---> JHOW2 +---> JHOW3,JHOW4,JHOW5,JHOW6,JHOW7,JHOW8,JHOW9,JHOW10,JHOW11,JHOW12,JHOW13 +---> JHOW14,JHOW15,JHOW16 +hds24.img +GLO> PLYRHD5.GLO +---> FOX0,FOX1 +GLO> XXXHD.GLO +---> FOX2,FOX3,FOX4,FOX5,FOX6,FOX7,FOX8,FOX9,FOX10,FOX11,FOX12,FOX13 +---> FOX14,FOX15,FOX16 +GLO> PLYRHD5.GLO +---> LONG0,LONG1 +GLO> XXXHD.GLO +---> LONG2,LONG3,LONG4,LONG5,LONG6,LONG7,LONG8,LONG9 +---> LONG10,LONG11,LONG12,LONG13,LONG14,LONG15,LONG16 +GLO> PLYRHD5.GLO +---> BRAND0,BRAND1 +GLO> XXXHD.GLO +---> BRAND2,BRAND3 +---> BRAND4,BRAND5,BRAND6,BRAND7,BRAND8,BRAND9,BRAND10,BRAND11,BRAND12 +---> BRAND13,BRAND14,BRAND15,BRAND16 +GLO> PLYRHD5.GLO +---> FERRY0,FERRY1 +GLO> XXXHD.GLO +---> FERRY2,FERRY3,FERRY4,FERRY5 +---> FERRY6,FERRY7,FERRY8,FERRY9,FERRY10,FERRY11,FERRY12,FERRY13,FERRY14 +---> FERRY15,FERRY16 +GLO> PLYRHD5.GLO +---> MCCLOU0,MCCLOU1 +GLO> XXXHD.GLO +---> MCCLOU2,MCCLOU3,MCCLOU4,MCCLOU5,MCCLOU6,MCCLOU7 +---> MCCLOU8,MCCLOU9,MCCLOU10,MCCLOU11,MCCLOU12,MCCLOU13,MCCLOU14,MCCLOU15 +---> MCCLOU16 +GLO> PLYRHD5.GLO +---> ROSE0,ROSE1 +GLO> XXXHD.GLO +---> ROSE2,ROSE3,ROSE4,ROSE5,ROSE6,ROSE7,ROSE8,ROSE9,ROSE10 +---> ROSE11,ROSE12,ROSE13,ROSE14,ROSE15,ROSE16 +GLO> PLYRHD5.GLO +---> DELLIS0,DELLIS1 +GLO> XXXHD.GLO +---> DELLIS2,DELLIS3,DELLIS4 +---> DELLIS5,DELLIS6,DELLIS7,DELLIS8,DELLIS9,DELLIS10,DELLIS11,DELLIS12,DELLIS13 +---> DELLIS14,DELLIS15,DELLIS16 +GLO> PLYRHD5.GLO +---> HOUSTO0,HOUSTO1 +GLO> XXXHD.GLO +---> HOUSTO2,HOUSTO3,HOUSTO4,HOUSTO5,HOUSTO6 +---> HOUSTO7,HOUSTO8,HOUSTO9,HOUSTO10,HOUSTO11,HOUSTO12,HOUSTO13,HOUSTO14 +---> HOUSTO15,HOUSTO16 +GLO> PLYRHD5.GLO +---> MJACKS0,MJACKS1 +GLO> XXXHD.GLO +---> MJACKS2,MJACKS3,MJACKS4,MJACKS5,MJACKS6 +---> MJACKS7,MJACKS8,MJACKS9,MJACKS10,MJACKS11,MJACKS12,MJACKS13,MJACKS14 +---> MJACKS15,MJACKS16 +GLO> PLYRHD5.GLO +---> DANILO0,DANILO1 +GLO> XXXHD.GLO +---> DANILO2,DANILO3,DANILO4,DANILO5,DANILO6 +---> DANILO7,DANILO8,DANILO9,DANILO10,DANILO11,DANILO12,DANILO13,DANILO14 +---> DANILO15,DANILO16 +;GLO> PLYRHD5.GLO +;---> COLES0,COLES1 +;GLO> XXXHD.GLO +;---> COLES2,COLES3,COLES4,COLES5,COLES6,COLES7 +;---> COLES8,COLES9,COLES10,COLES11,COLES12,COLES13,COLES14,COLES15,COLES16 +GLO> PLYRHD5.GLO +---> DOUGLA0,DOUGLA1 +GLO> XXXHD.GLO +---> DOUGLA2,DOUGLA3,DOUGLA4,DOUGLA5,DOUGLA6,DOUGLA7,DOUGLA8,DOUGLA9 +---> DOUGLA10,DOUGLA11,DOUGLA12,DOUGLA13,DOUGLA14,DOUGLA15,DOUGLA16 +hds25.img +GLO> PLYRHD5.GLO +---> KEDWAR0,KEDWAR1 +GLO> XXXHD.GLO +---> KEDWAR2,KEDWAR3,KEDWAR4,KEDWAR5,KEDWAR6,KEDWAR7,KEDWAR8,KEDWAR9 +---> KEDWAR10,KEDWAR11,KEDWAR12,KEDWAR13,KEDWAR14,KEDWAR15,KEDWAR16 +GLO> PLYRHD5.GLO +---> KONCAK0,KONCAK1 +GLO> XXXHD.GLO +---> KONCAK2,KONCAK3,KONCAK4,KONCAK5,KONCAK6,KONCAK7,KONCAK8,KONCAK9 +---> KONCAK10,KONCAK11,KONCAK12,KONCAK13,KONCAK14,KONCAK15,KONCAK16 +GLO> PLYRHD5.GLO +---> VMAX0,VMAX1 +GLO> XXXHD.GLO +---> VMAX2,VMAX3,VMAX4,VMAX5,VMAX6,VMAX7,VMAX8,VMAX9,VMAX10,VMAX11,VMAX12 +---> VMAX13,VMAX14,VMAX15,VMAX16 +GLO> PLYRHD5.GLO +---> EDNEY0,EDNEY1 +GLO> XXXHD.GLO +---> EDNEY2,EDNEY3,EDNEY4,EDNEY5,EDNEY6 +---> EDNEY7,EDNEY8,EDNEY9,EDNEY10,EDNEY11,EDNEY12,EDNEY13,EDNEY14,EDNEY15 +---> EDNEY16 +GLO> PLYRHD5.GLO +---> DELNEG0,DELNEG1 +GLO> XXXHD.GLO +---> DELNEG2,DELNEG3,DELNEG4,DELNEG5,DELNEG6,DELNEG7,DELNEG8 +---> DELNEG9,DELNEG10,DELNEG11,DELNEG12,DELNEG13,DELNEG14,DELNEG15,DELNEG16 +GLO> PLYRHD5.GLO +---> WANDERS0,WANDERS1 +GLO> XXXHD.GLO +---> WANDERS2,WANDERS3,WANDERS4,WANDERS5,WANDERS6,WANDERS7,WANDERS8,WANDERS9 +---> WANDERS10,WANDERS11,WANDERS12,WANDERS13,WANDERS14,WANDERS15,WANDERS16 +GLO> PLYRHD5.GLO +---> OMILLER0,OMILLER1 +GLO> XXXHD.GLO +---> OMILLER2,OMILLER3,OMILLER4,OMILLER5,OMILLER6,OMILLER7,OMILLER8,OMILLER9 +---> OMILLER10,OMILLER11,OMILLER12,OMILLER13,OMILLER14,OMILLER15,OMILLER16 +GLO> PLYRHD5.GLO +---> MURRAY0,MURRAY1 +GLO> XXXHD.GLO +---> MURRAY2,MURRAY3,MURRAY4,MURRAY5,MURRAY6,MURRAY7,MURRAY8,MURRAY9 +---> MURRAY10,MURRAY11,MURRAY12,MURRAY13,MURRAY14,MURRAY15,MURRAY16 +GLO> PLYRHD5.GLO +---> MURESA0,MURESA1 +GLO> XXXHD.GLO +---> MURESA2,MURESA3,MURESA4,MURESA5,MURESA6,MURESA7,MURESA8,MURESA9 +---> MURESA10,MURESA11,MURESA12,MURESA13,MURESA14,MURESA15,MURESA16 +GLO> PLYRHD5.GLO +---> BREEV0,BREEV1 +GLO> XXXHD.GLO +---> BREEV2,BREEV3,BREEV4,BREEV5,BREEV6,BREEV7,BREEV8,BREEV9 +---> BREEV10,BREEV11,BREEV12,BREEV13,BREEV14,BREEV15,BREEV16 +GLO> PLYRHD5.GLO +---> DHARP0,DHARP1 +GLO> XXXHD.GLO +---> DHARP2,DHARP3,DHARP4,DHARP5,DHARP6,DHARP7,DHARP8,DHARP9 +---> DHARP10,DHARP11,DHARP12,DHARP13,DHARP14,DHARP15,DHARP16 +hds26.img +GLO> PLYRHD5.GLO +---> Robertsn0,Robertsn1 +GLO> XXXHD.GLO +---> Robertsn2,Robertsn3,Robertsn4,Robertsn5,Robertsn6,Robertsn7,Robertsn8,Robertsn9 +---> Robertsn10,Robertsn11,Robertsn12,Robertsn13,Robertsn14,Robertsn15,Robertsn16 +GLO> PLYRHD5.GLO +---> Chapman0,Chapman1 +GLO> XXXHD.GLO +---> Chapman2,Chapman3,Chapman4,Chapman5,Chapman6,Chapman7,Chapman8,Chapman9 +---> Chapman10,Chapman11,Chapman12,Chapman13,Chapman14,Chapman15,Chapman16 +GLO> PLYRHD5.GLO +---> Lang0,Lang1 +GLO> XXXHD.GLO +---> Lang2,Lang3,Lang4,Lang5,Lang6,Lang7,Lang8,Lang9 +---> Lang10,Lang11,Lang12,Lang13,Lang14,Lang15,Lang16 +GLO> PLYRHD5.GLO +---> Scott0,Scott1 +GLO> XXXHD.GLO +---> Scott2,Scott3,Scott4,Scott5,Scott6,Scott7,Scott8,Scott9 +---> Scott10,Scott11,Scott12,Scott13,Scott14,Scott15,Scott16 +GLO> PLYRHD5.GLO +---> Webb0,Webb1 +GLO> XXXHD.GLO +---> Webb2,Webb3,Webb4,Webb5,Webb6,Webb7,Webb8,Webb9 +---> Webb10,Webb11,Webb12,Webb13,Webb14,Webb15,Webb16 +;GLO> PLYRHD5.GLO +;---> MJohnson0,MJohnson1 +;GLO> XXXHD.GLO +;---> MJohnson2,MJohnson3,MJohnson4,MJohnson5,MJohnson6,MJohnson7,MJohnson8,MJohnson9 +;---> MJohnson10,MJohnson11,MJohnson12,MJohnson13,MJohnson14,MJohnson15,MJohnson16 +GLO> PLYRHD5.GLO +---> Ruffin0,Ruffin1 +GLO> XXXHD.GLO +---> Ruffin2,Ruffin3,Ruffin4,Ruffin5,Ruffin6,Ruffin7,Ruffin8,Ruffin9 +---> Ruffin10,Ruffin11,Ruffin12,Ruffin13,Ruffin14,Ruffin15,Ruffin16 +hdsmsc1.img +;GLO> PLYRHD5.GLO +;---> ROS_00,ROS_01 +;GLO> XXXHD.GLO +;---> ROS_02,ROS_03,ROS_04,ROS_05,ROS_06,ROS_07 +;---> ROS_08,ROS_09,ROS_10,ROS_11,ROS_12,ROS_13,ROS_14,ROS_15,ROS_16 +GLO> PLYRHD5.GLO +---> ANG_00,ANG_01 +GLO> XXXHD.GLO +---> ANG_02,ANG_03,ANG_04,ANG_05 +---> ANG_06,ANG_07,ANG_08,ANG_09,ANG_10,ANG_11,ANG_12,ANG_13,ANG_14,ANG_15 +---> ANG_16 +GLO> PLYRHD5.GLO +---> JOE_00,JOE_01 +GLO> XXXHD.GLO +---> JOE_02,JOE_03,JOE_04,JOE_05,JOE_06,JOE_07,JOE_08 +---> JOE_09,JOE_10,JOE_11,JOE_12,JOE_13,JOE_14,JOE_15,JOE_16 +GLO> PLYRHD5.GLO +---> LIS_00,LIS_01 +GLO> XXXHD.GLO +---> LIS_02,LIS_03,LIS_04,LIS_05,LIS_06,LIS_07,LIS_08,LIS_09,LIS_10,LIS_11 +---> LIS_12,LIS_13,LIS_14,LIS_15,LIS_16 +GLO> PLYRHD5.GLO +---> MEL_00,MEL_01 +GLO> XXXHD.GLO +---> MEL_02,MEL_03,MEL_04 +---> MEL_05,MEL_06,MEL_07,MEL_08,MEL_09,MEL_10,MEL_11,MEL_12,MEL_13,MEL_14 +---> MEL_15,MEL_16 +GLO> PLYRHD5.GLO +---> MIK_00,MIK_01 +GLO> XXXHD.GLO +---> MIK_02,MIK_03,MIK_04,MIK_05,MIK_06,MIK_07 +---> MIK_08,MIK_09,MIK_10,MIK_11,MIK_12,MIK_13,MIK_14,MIK_15,MIK_16 +GLO> PLYRHD5.GLO +---> ALIEN00,ALIEN01 +GLO> XXXHD.GLO +---> ALIEN02,ALIEN03,ALIEN04,ALIEN05,ALIEN06,ALIEN07,ALIEN08,ALIEN09 +---> ALIEN10,ALIEN11,ALIEN12,ALIEN13,ALIEN14,ALIEN15,ALIEN16 +GLO> PLYRHD5.GLO +---> COW00,COW01 +GLO> XXXHD.GLO +---> COW02,COW03,COW04,COW05,COW06,COW07,COW08,COW09,COW10,COW11,COW12,COW13 +---> COW14,COW15,COW16 +GLO> PLYRHD5.GLO +---> GUIDO00,GUIDO01 +GLO> XXXHD.GLO +---> GUIDO02,GUIDO03,GUIDO04,GUIDO05 +---> GUIDO06,GUIDO07,GUIDO08,GUIDO09,GUIDO10,GUIDO11,GUIDO12,GUIDO13,GUIDO14 +---> GUIDO15,GUIDO16 +hdsmsc2.img +GLO> PLYRHD5.GLO +---> BER00,BER01 +GLO> XXXHD.GLO +---> BER02,BER03,BER04,BER05,BER06 +---> BER07,BER08,BER09,BER10,BER11,BER12,BER13,BER14,BER15,BER16 +GLO> PLYRHD5.GLO +---> CHK00,CHK01 +GLO> XXXHD.GLO +---> CHK02,CHK03,CHK04,CHK05,CHK06,CHK07,CHK08,CHK09,CHK10,CHK11 +---> CHK12,CHK13,CHK14,CHK15,CHK16 +GLO> PLYRHD5.GLO +---> FAT00,FAT01 +GLO> XXXHD.GLO +---> FAT02,FAT03,FAT04,FAT05,FAT06,FAT07,FAT08 +---> FAT09,FAT10,FAT11,FAT12,FAT13,FAT14,FAT15,FAT16 +GLO> PLYRHD5.GLO +---> FRA00,FRA01 +GLO> XXXHD.GLO +---> FRA02,FRA03,FRA04,FRA05,FRA06,FRA07,FRA08,FRA09,FRA10 +---> FRA11,FRA12,FRA13,FRA14,FRA15,FRA16 +GLO> PLYRHD5.GLO +---> GOR00,GOR01 +GLO> XXXHD.GLO +---> GOR02,GOR03,GOR04,GOR05,GOR06,GOR07,GOR08,GOR09,GOR10 +---> GOR11,GOR12,GOR13,GOR14,GOR15,GOR16 +GLO> PLYRHD5.GLO +---> GRE00,GRE01 +GLO> XXXHD.GLO +---> GRE02,GRE03,GRE04,GRE05,GRE06,GRE07,GRE08,GRE09,GRE10,GRE11 +---> GRE12,GRE13,GRE14,GRE15,GRE16 +GLO> PLYRHD5.GLO +---> OLD00,OLD01 +GLO> XXXHD.GLO +---> OLD02,OLD03,OLD04,OLD05,OLD06,OLD07,OLD08,OLD09,OLD10,OLD11,OLD12 +---> OLD13,OLD14,OLD15,OLD16 +GLO> PLYRHD5.GLO +---> PIG00,PIG01 +GLO> XXXHD.GLO +---> PIG02,PIG03,PIG04,PIG05,PIG06,PIG07 +---> PIG08,PIG09,PIG10,PIG11,PIG12,PIG13,PIG14,PIG15,PIG16 +GLO> PLYRHD5.GLO +---> WIZ00,WIZ01 +GLO> XXXHD.GLO +---> WIZ02,WIZ03,WIZ04,WIZ05,WIZ06,WIZ07,WIZ08,WIZ09 +---> WIZ10,WIZ11,WIZ12,WIZ13,WIZ14,WIZ15,WIZ16 +hdsmsc3.img +GLO> PLYRHD5.GLO +---> ERI00,ERI01 +GLO> XXXHD.GLO +---> ERI02,ERI03,ERI04,ERI05,ERI06,ERI07,ERI08,ERI09,ERI10 +---> ERI11,ERI12,ERI13,ERI14,ERI15,ERI16 +GLO> PLYRHD5.GLO +---> KIM00,KIM01 +GLO> XXXHD.GLO +---> KIM02,KIM03,KIM04,KIM05,KIM06,KIM07,KIM08,KIM09,KIM10 +---> KIM11,KIM12,KIM13,KIM14,KIM15,KIM16 +GLO> PLYRHD5.GLO +---> MAR00,MAR01 +GLO> XXXHD.GLO +---> MAR02,MAR03,MAR04,MAR05,MAR06,MAR07,MAR08,MAR09,MAR10 +---> MAR11,MAR12,MAR13,MAR14,MAR15,MAR16 +GLO> PLYRHD5.GLO +---> ROH00,ROH01 +GLO> XXXHD.GLO +---> ROH02,ROH03,ROH04,ROH05,ROH06,ROH07,ROH08,ROH09,ROH10 +---> ROH11,ROH12,ROH13,ROH14,ROH15,ROH16 +GLO> PLYRHD5.GLO +---> SEA00,SEA01 +GLO> XXXHD.GLO +---> SEA02,SEA03,SEA04,SEA05,SEA06,SEA07,SEA08,SEA09,SEA10 +---> SEA11,SEA12,SEA13,SEA14,SEA15,SEA16 +hdsmsc4.img +GLO> PLYRHD5.GLO +---> CHEECH00,CHEECH01 +GLO> XXXHD.GLO +---> CHEECH02,CHEECH03,CHEECH04,CHEECH05,CHEECH06,CHEECH07 +---> CHEECH08,CHEECH09,CHEECH10,CHEECH11,CHEECH12 +---> CHEECH13,CHEECH14,CHEECH15,CHEECH16 +GLO> PLYRHD5.GLO +---> CLOWN00,CLOWN01 +GLO> XXXHD.GLO +---> CLOWN02,CLOWN03,CLOWN04,CLOWN05,CLOWN06,CLOWN07,CLOWN08,CLOWN09 +---> CLOWN10,CLOWN11,CLOWN12,CLOWN13,CLOWN14,CLOWN15,CLOWN16 +GLO> PLYRHD5.GLO +---> MADBAL00,MADBAL01 +GLO> XXXHD.GLO +---> MADBAL02,MADBAL03 +---> MADBAL04,MADBAL05,MADBAL06,MADBAL07,MADBAL08,MADBAL09,MADBAL10,MADBAL11 +---> MADBAL12,MADBAL13,MADBAL14,MADBAL15,MADBAL16 +GLO> PLYRHD5.GLO +---> VIKAPE00,VIKAPE01 +GLO> XXXHD.GLO +---> VIKAPE02,VIKAPE03,VIKAPE04,VIKAPE05 +---> VIKAPE06,VIKAPE07,VIKAPE08,VIKAPE09,VIKAPE10 +---> VIKAPE11,VIKAPE12,VIKAPE13,VIKAPE14,VIKAPE15,VIKAPE16 +GLO> PLYRHD5.GLO +---> BEAST00,BEAST01 +GLO> XXXHD.GLO +---> BEAST02,BEAST03,BEAST04 +---> BEAST05 +;,BEAST06,BEAST07,BEAST08,BEAST09,BEAST10,BEAST11,BEAST12,BEAST13 +;---> BEAST14,BEAST15,BEAST16 +---> BEAST16 +GLO> PLYRHD5.GLO +---> JABAL00,JABAL01 +GLO> XXXHD.GLO +---> JABAL02,JABAL03,JABAL04,JABAL05 +;---> JABAL06,JABAL07,JABAL08,JABAL09,JABAL10,JABAL11,JABAL12,JABAL13,JABAL14 +;---> JABAL15,JABAL16 +---> JABAL16 +GLO> PLYRHD5.GLO +---> MDOC00,MDOC01 +GLO> XXXHD.GLO +---> MDOC02,MDOC03,MDOC04,MDOC05,MDOC06,MDOC07 +---> MDOC08,MDOC09,MDOC10,MDOC11,MDOC12,MDOC13,MDOC14,MDOC15,MDOC16 +hdsmsc5.img +GLO> PLYRHD5.GLO +---> AMRICH00,AMRICH01 +GLO> XXXHD.GLO +---> AMRICH02,AMRICH03,AMRICH04 +---> AMRICH05,AMRICH06,AMRICH07,AMRICH08,AMRICH09,AMRICH10,AMRICH11,AMRICH12 +---> AMRICH13,AMRICH14,AMRICH15,AMRICH16 +GLO> PLYRHD5.GLO +---> BARD00,BARD01 +GLO> XXXHD.GLO +---> BARD02,BARD03,BARD04 +---> BARD05,BARD06,BARD07,BARD08,BARD09,BARD10,BARD11,BARD12,BARD13,BARD14 +---> BARD15,BARD16 +GLO> PLYRHD5.GLO +---> DIM00,DIM01 +GLO> XXXHD.GLO +---> DIM02,DIM03,DIM04,DIM05 +;,DIM06,DIM07,DIM08 +;---> DIM09,DIM10,DIM11,DIM12,DIM13,DIM14,DIM15,DIM16 +---> DIM16 +GLO> PLYRHD5.GLO +---> JACKJR00,JACKJR01 +GLO> XXXHD.GLO +---> JACKJR02,JACKJR03,JACKJR04,JACKJR05,JACKJR06,JACKJR07,JACKJR08,JACKJR09 +---> JACKJR10,JACKJR11,JACKJR12,JACKJR13,JACKJR14,JACKJR15,JACKJR16 +GLO> PLYRHD5.GLO +---> JIGGET00,JIGGET01 +GLO> XXXHD.GLO +---> JIGGET02,JIGGET03,JIGGET04,JIGGET05 +;,JIGGET06,JIGGET07,JIGGET08 +;---> JIGGET09,JIGGET10,JIGGET11,JIGGET12,JIGGET13,JIGGET14,JIGGET15,JIGGET16 +---> JIGGET16 +GLO> PLYRHD5.GLO +---> JON00,JON01 +GLO> XXXHD.GLO +---> JON02,JON03,JON04,JON05,JON06,JON07,JON08,JON09,JON10,JON11 +---> JON12,JON13,JON14,JON15,JON16 +GLO> PLYRHD5.GLO +---> MIKE00,MIKE01 +GLO> XXXHD.GLO +---> MIKE02,MIKE03,MIKE04,MIKE05,MIKE06 +---> MIKE07,MIKE08,MIKE09,MIKE10,MIKE11,MIKE12,MIKE13,MIKE14,MIKE15,MIKE16 +GLO> PLYRHD5.GLO +---> MIN00,MIN01 +GLO> XXXHD.GLO +---> MIN02,MIN03,MIN04,MIN05,MIN06,MIN07,MIN08,MIN09 +---> MIN10,MIN11,MIN12,MIN13,MIN14,MIN15,MIN16 +GLO> PLYRHD5.GLO +---> MUND00,MUND01 +GLO> XXXHD.GLO +---> MUND02,MUND03,MUND04,MUND05,MUND06, +---> MUND07,MUND08,MUND09,MUND10,MUND11,MUND12,MUND13,MUND14,MUND15,MUND16, +GLO> PLYRHD5.GLO +---> MXV00,MXV01 +GLO> XXXHD.GLO +---> MXV02,MXV03,MXV04,MXV05,MXV06,MXV07 +---> MXV08,MXV09,MXV10,MXV11,MXV12,MXV13,MXV14,MXV15,MXV16 +GLO> PLYRHD5.GLO +---> NORTH00,NORTH01 +GLO> XXXHD.GLO +---> NORTH02,NORTH03,NORTH04,NORTH05 +;---> NORTH06,NORTH07,NORTH08,NORTH09,NORTH10 +;---> NORTH11,NORTH12,NORTH13,NORTH14,NORTH15,NORTH16 +---> NORTH16 +GLO> PLYRHD5.GLO +---> WIL00,WIL01 +GLO> XXXHD.GLO +---> WIL02,WIL03,WIL04,WIL05,WIL06,WIL07, +---> WIL08,WIL09,WIL10,WIL11,WIL12,WIL13,WIL14,WIL15,WIL16 +PPP> 0 diff --git a/BACKUP/ART110/BBPAL.LOD b/BACKUP/ART110/BBPAL.LOD new file mode 100644 index 0000000..2878958 --- /dev/null +++ b/BACKUP/ART110/BBPAL.LOD @@ -0,0 +1,45 @@ +PON> +; +IHDR PAL:L +; +ASM> junkxxxx +; +;Flesh and uniform pals +anewp.img +---> NPAL1 +---> NPALW1 +---> XSPAL1,XSPAL2,XSPAL3,XSPAL4,XSPAL5,XSPAL6,XSPAL7,XSPAL8 +---> XSPAL9,XSPAL10,XSPAL11,XSPAL12,XSPAL13,XSPAL14,XSPAL15 +---> XSPAL16,XSPAL17,XSPAL18,XSPAL19,XSPAL20,XSPAL21,XSPAL22 +---> XSPAL23,XSPAL24,XSPAL25,XSPAL26,XSPAL27,XSPAL28,XSPAL29 +---> XSPAL30,XSPAL31,XSPAL32,XSPAL33,XSPAL34,XSPAL35,XSPAL36 +---> XSPAL37,XSPAL38,XSPAL39,XSPAL40,XSPAL41,XSPAL42,XSPAL43 +---> XSPAL44,XSPAL45,XSPAL46,XSPAL47,XSPAL48,XSPAL49,XSPAL50 +---> XSPAL51,XSPAL52,XSPAL53,XSPAL54,XSPAL55,XSPAL56,XSPAL57 +---> XSPAL58,XSPAL59,XSPAL60,XSPAL61,XSPAL62,XSPAL63,XSPAL64 +---> XSPAL65,XSPAL66,XSPAL67,XSPAL68,XSPAL69,XSPAL70,XSPAL71,XSPAL72 +---> XSPAL73,XSPAL74,XSPAL75,XSPAL76,XSPAL77,XSPAL78,XSPAL79 +---> XSPAL80,XSPAL81,XSPAL82,XSPAL83,XSPAL84,XSPAL85,XSPAL86 +---> XSPAL87,XSPAL88,XSPAL89,XSPAL90,XSPAL91,XSPAL92,XSPAL93 +---> XSPAL94,XSPAL95,XSPAL96,XSPAL97,XSPAL98,XSPAL99,XSPAL100 +---> XSPAL101,XSPAL102,XSPAL103,XSPAL104,XSPAL105,XSPAL106 +---> XSPAL107,XSPAL108,XSPAL109,XSPAL110,XSPAL111,XSPAL112 +---> XSPAL113,XSPAL114,XSPAL115,XSPAL116,XSPAL117,XSPAL118,XSPAL119,XSPAL120 +---> XSPAL121,XSPAL122,XSPAL123,XSPAL124,XSPAL125,XSPAL126 +---> XSPAL127,XSPAL128,XSPAL129,XSPAL130,XSPAL131,XSPAL132 +---> XSPAL133,XSPAL134,XSPAL135,XSPAL136,XSPAL137,XSPAL138 +---> XSPAL139,XSPAL140,XSPAL141,XSPAL142,XSPAL143,XSPAL144 +---> XSPAL145,XSPAL146,XSPAL147,XSPAL148,XSPAL149,XSPAL150,XSPAL151,XSPAL152 +---> XSPAL153,XSPAL154,XSPAL155,XSPAL156,XSPAL157,XSPAL158 +---> XSPAL159,XSPAL160,XSPAL161,XSPAL162,XSPAL163,XSPAL164 +---> XSPAL165,XSPAL166,XSPAL167,XSPAL168,XSPAL169,XSPAL170 +---> XSPAL171,XSPAL172,XSPAL173,XSPAL174,XSPAL175,XSPAL176 +---> XSPAL177,XSPAL178,XSPAL179,XSPAL180,XSPAL181,XSPAL182,XSPAL183,XSPAL184 +---> XSPAL185,XSPAL186,XSPAL187,XSPAL188,XSPAL189,XSPAL190 +---> XSPAL191,XSPAL192,XSPAL193,XSPAL194,XSPAL195,XSPAL196 +---> XSPAL197,XSPAL198,XSPAL199,XSPAL200,XSPAL201,XSPAL202 +---> XSPAL203,XSPAL204,XSPAL205,XSPAL206,XSPAL207,XSPAL208 +---> XSPAL209,XSPAL210,XSPAL211,XSPAL212,XSPAL213,XSPAL214,XSPAL215,XSPAL216 +---> XSPAL217,XSPAL218,XSPAL219,XSPAL220,XSPAL221,XSPAL222 +---> XSPAL223,XSPAL224,XSPAL225,XSPAL226,XSPAL227,XSPAL228 +---> XSPAL229,XSPAL230,XSPAL231,XSPAL232 diff --git a/BACKUP/ART110/BBVDA.LOD b/BACKUP/ART110/BBVDA.LOD new file mode 100644 index 0000000..2390a79 --- /dev/null +++ b/BACKUP/ART110/BBVDA.LOD @@ -0,0 +1,4 @@ +***> fff90530 +ASM> BBVDA.TBL +;FRM> CHEERS +FRM> TROPHY diff --git a/BACKUP/ART110/BLANKJAM.BDB b/BACKUP/ART110/BLANKJAM.BDB new file mode 100644 index 0000000..7ea688d --- /dev/null +++ b/BACKUP/ART110/BLANKJAM.BDB @@ -0,0 +1,11 @@ +blankjam 2000 1000 255 1 1 9 +blankjam 448 1041 251 639 +0 471 268 0 0 +0 471 388 0 0 +0 471 508 0 0 +0 651 268 0 0 +0 651 388 0 0 +0 651 508 0 0 +0 831 268 0 0 +0 831 388 0 0 +0 831 508 0 0 diff --git a/BACKUP/ART110/BLANKJAM.BDD b/BACKUP/ART110/BLANKJAM.BDD new file mode 100644 index 0000000..8c36a30 --- /dev/null +++ b/BACKUP/ART110/BLANKJAM.BDD @@ -0,0 +1,130 @@ +1 +0 180 120 1 +    +  +          +  +           +   +    +         +      +        +   +              +    +   +   +  +   +   +   +     +    +   +                  +                   +            + +            + +         +   +          + +          +  + +        +   +   +     +   +            +      +       +                        +       +      +                   +    +      +   +      +   +                 +       +      +            +     +      +          +      +         +    +       + +         + +          +                                    +     +    +  +    +      +              +     +   +     + +   +    + +       +          +        +       +                 +        +        +     +       +      +         +          +    + +    + +     +                                             +    +    +                        +        +          +             +   +      +         +                           +     + +     +  + +      +          +                                               +          +         +                                +      +    +      BNBA_V_P 21 + $ +   $ , ,4 +, +$ +$ \ No newline at end of file diff --git a/BACKUP/ART110/BRUSH10.IMG b/BACKUP/ART110/BRUSH10.IMG new file mode 100644 index 0000000..710fc6c Binary files /dev/null and b/BACKUP/ART110/BRUSH10.IMG differ diff --git a/BACKUP/ART110/BRUSH12.IMG b/BACKUP/ART110/BRUSH12.IMG new file mode 100644 index 0000000..400f594 Binary files /dev/null and b/BACKUP/ART110/BRUSH12.IMG differ diff --git a/BACKUP/ART110/BRUSH20F.IMG b/BACKUP/ART110/BRUSH20F.IMG new file mode 100644 index 0000000..ba138d1 Binary files /dev/null and b/BACKUP/ART110/BRUSH20F.IMG differ diff --git a/BACKUP/ART110/BRUSH50.IMG b/BACKUP/ART110/BRUSH50.IMG new file mode 100644 index 0000000..f672881 Binary files /dev/null and b/BACKUP/ART110/BRUSH50.IMG differ diff --git a/BACKUP/ART110/BUTTONS.IMG b/BACKUP/ART110/BUTTONS.IMG new file mode 100644 index 0000000..37f87db Binary files /dev/null and b/BACKUP/ART110/BUTTONS.IMG differ diff --git a/BACKUP/ART110/CHEER.IMG b/BACKUP/ART110/CHEER.IMG new file mode 100644 index 0000000..dd55c22 Binary files /dev/null and b/BACKUP/ART110/CHEER.IMG differ diff --git a/BACKUP/ART110/CHEERS.BIN b/BACKUP/ART110/CHEERS.BIN new file mode 100644 index 0000000..75acb59 Binary files /dev/null and b/BACKUP/ART110/CHEERS.BIN differ diff --git a/BACKUP/ART110/CHEERS1.VDA b/BACKUP/ART110/CHEERS1.VDA new file mode 100644 index 0000000..e36ae07 Binary files /dev/null and b/BACKUP/ART110/CHEERS1.VDA differ diff --git a/BACKUP/ART110/CITIES2.IMG b/BACKUP/ART110/CITIES2.IMG new file mode 100644 index 0000000..9281d0e Binary files /dev/null and b/BACKUP/ART110/CITIES2.IMG differ diff --git a/BACKUP/ART110/CITNAMES.IMG b/BACKUP/ART110/CITNAMES.IMG new file mode 100644 index 0000000..355d7a6 Binary files /dev/null and b/BACKUP/ART110/CITNAMES.IMG differ diff --git a/BACKUP/ART110/COLHDS1.IMG b/BACKUP/ART110/COLHDS1.IMG new file mode 100644 index 0000000..8a1abf2 Binary files /dev/null and b/BACKUP/ART110/COLHDS1.IMG differ diff --git a/BACKUP/ART110/COLMUGS1.IMG b/BACKUP/ART110/COLMUGS1.IMG new file mode 100644 index 0000000..15d39be Binary files /dev/null and b/BACKUP/ART110/COLMUGS1.IMG differ diff --git a/BACKUP/ART110/COURT.BIN b/BACKUP/ART110/COURT.BIN new file mode 100644 index 0000000..c6f0afc Binary files /dev/null and b/BACKUP/ART110/COURT.BIN differ diff --git a/BACKUP/ART110/CREDBALL.IMG b/BACKUP/ART110/CREDBALL.IMG new file mode 100644 index 0000000..e3fea94 Binary files /dev/null and b/BACKUP/ART110/CREDBALL.IMG differ diff --git a/BACKUP/ART110/CRTFLR.IMG b/BACKUP/ART110/CRTFLR.IMG new file mode 100644 index 0000000..911a84a Binary files /dev/null and b/BACKUP/ART110/CRTFLR.IMG differ diff --git a/BACKUP/ART110/CRTREF.IMG b/BACKUP/ART110/CRTREF.IMG new file mode 100644 index 0000000..685b51f Binary files /dev/null and b/BACKUP/ART110/CRTREF.IMG differ diff --git a/BACKUP/ART110/CRWDFLR.IMG b/BACKUP/ART110/CRWDFLR.IMG new file mode 100644 index 0000000..8a1d73c Binary files /dev/null and b/BACKUP/ART110/CRWDFLR.IMG differ diff --git a/BACKUP/ART110/DCSLOGO.IMG b/BACKUP/ART110/DCSLOGO.IMG new file mode 100644 index 0000000..4b069a0 Binary files /dev/null and b/BACKUP/ART110/DCSLOGO.IMG differ diff --git a/BACKUP/ART110/DESIGND.IMG b/BACKUP/ART110/DESIGND.IMG new file mode 100644 index 0000000..a54427a Binary files /dev/null and b/BACKUP/ART110/DESIGND.IMG differ diff --git a/BACKUP/ART110/DIAGP.IMG b/BACKUP/ART110/DIAGP.IMG new file mode 100644 index 0000000..75452f4 Binary files /dev/null and b/BACKUP/ART110/DIAGP.IMG differ diff --git a/BACKUP/ART110/ENTER4.BDB b/BACKUP/ART110/ENTER4.BDB new file mode 100644 index 0000000..ff44a10 --- /dev/null +++ b/BACKUP/ART110/ENTER4.BDB @@ -0,0 +1,66 @@ +ENTER4 2000 1000 255 2 13 63 +ENTER4 1342 1800 121 350 +ENTERKIT 685 1168 130 373 +A00 737 270 63 3 +A00 737 166 4E 7 +A00 737 170 6C 12 +F00 745 170 3 0 +F00 750 340 6 0 +F00 750 170 9 0 +E00 800 170 9 0 +F00 812 340 6 0 +A00 836 166 51 8 +F00 846 340 6 0 +F00 846 170 9 0 +F10 927 170 3 0 +A00 937 166 54 9 +A00 937 270 60 11 +F00 939 170 3 2 +F00 944 340 6 2 +F00 944 170 9 2 +E00 987 170 9 2 +F00 999 340 6 2 +A00 1037 166 57 10 +F00 1040 340 6 2 +F00 1040 170 9 2 +F10 1121 170 3 2 +A00 1129 170 78 12 +A00 1381 139 69 12 +A00 1381 143 6C 12 +F00 1389 143 3 0 +F00 1394 143 9 0 +F00 1394 313 6 0 +F00 1394 263 12 4 +F00 1394 225 15 4 +F00 1394 186 18 4 +F00 1394 148 1B 4 +F10 1475 143 3 0 +A00 1483 142 6F 12 +F00 1485 143 3 0 +F00 1490 143 9 0 +F00 1490 313 6 0 +F00 1490 148 21 5 +F00 1490 179 24 5 +F00 1490 219 27 5 +F00 1490 259 2A 5 +F10 1571 143 3 0 +A00 1579 143 72 12 +A00 1581 139 66 12 +F00 1583 143 3 2 +F00 1588 313 6 2 +F00 1588 143 9 2 +F00 1588 261 33 6 +F00 1588 220 36 6 +F00 1588 180 39 6 +F00 1588 148 3C 6 +F10 1669 143 3 2 +A00 1677 142 75 12 +F00 1679 143 3 2 +F00 1684 143 9 2 +F00 1684 313 6 2 +F00 1684 148 42 1 +F00 1684 181 45 1 +F00 1684 219 48 1 +F00 1684 255 4B 1 +A10 1765 143 3 2 +A00 1773 143 78 12 diff --git a/BACKUP/ART110/ENTER4.BDD b/BACKUP/ART110/ENTER4.BDD new file mode 100644 index 0000000..3d2d3bc --- /dev/null +++ b/BACKUP/ART110/ENTER4.BDD @@ -0,0 +1,9327 @@ +32 +63 200 74 1 +  +   + +   + + + + + + + +  + + + + +   +  +   +  + + +       +  +  +        +  +   +  + + +  + + + + + + + + +  + +   +   + +     + +   +   + + +            + +   + + +   + + + + + + +  + + + +     +   +       +   +  + + +    +  + +    + + + +  + + +    +  +       +       + +    + + + +    + + +  +       + +   + + +   +  +            +   +   + + + + +  +   + + + + +         +   +  +  +       +  + +  + +   + +    + + +       + +  +  +  + +   +   +        +  +   +  + + +  + + +  + +   + + +    +   +  +  + + + + +  + +     +              +   + +  + + + +    + + + +  +       +    + +    +  +        +  +    + + + + +  + + +  +  +  +     + + + + + +   +   + + + +         +     + +    + +   +    +  + +   +  + + + +  +  + + + + + +      +         +    +    + + + + +     + +  + +   + + + + +   +  + +  +             + + +   + + +   +   +  + + +     + +  + +   +            +   +  +  + +  + +    +  + +  +  + + + +     + +  +  +   +  +              + +   + +    + + + +     + + + + +   +   + + + + +     +  +  +              + +  +  +   +  +   +  + + +  + + + + + + + + + + + +  + +    +   + +                +     + +   + + + +  + +  + + + +   +   +    +                   +     +  +   + + + +  +       +                       + + + + +   + +   +  + +     + +                       + + + + + +  +  + + +  + + + +                   +   +    +   + + +   + + +                      +   +  +  +   +  + + +  +                      +       + +  +  + + + + + +   +  +                          + + + + + + + + + + +   + +                 +      + +    + + + +   +   +                  + +    +     +                      +    +   + + + +  +                     + +  + + +      +                      +  +     +    +              +   + +    + +   + + +  +  +                     +  + + +   + +  +  + +     +                         + +  + + + + + +   + +     +    +                      +     + +   +    + +   +   + + +  +                       +   + + +  +  + + +   + + + +  +      +                      +  +  + + + +   + + +             +                +    + +  + +   + + +  + + + + +  +                       +  + + + + + +   +   + + + + +    +  +   +                         +  +  + + +  + +  +  + +                 +   +   +  + + +    + +   +  +                 + + +  + + + + + +  + +  + +  +         +              +  +  +  + + + + +   + + + + + +  +   +                    +  +    + + + + +  + +  + + +    +  +        +  +                 +   + +  + + +   + + +     + + +                     + + + + + +  +    + + + + +     +      +         +    +  + + + + + +  + + + + +                         +  +  + +    + + +   + + +  +      +   +                  + + + +  +   + + + + +        + + +              +     + + +  +  +   + + + + +   +     +                    + +     + +  + +    + +      + +                +  +  + + +   + + + + + +   + + + +      +  +                +   + + +   +  +     + + +        + +            + +  + +  + +  + +     +   +      +  +                        +  +  + + + +     +     + + +  + +                 +  + +  + + + + + + + +    + + +     + +  + +              +   + +          + + +     +               + +      + + +       +    + +                    +    +   + +  + +   +  +  +    +  +               +   + +     + + +  + +    + +  +  +                  + +    + + + + + +   + + + + + +  +            +   + +     + + + +     + +  +                 + +        +     + +   +                +   + +  +      + +   +  +               +  +    + + + + + + +    + +  +                 +   + + + + + +  + +   + + + + +                   + + +     + + + + +   +   + + + + + + +  + +  +                 +  +     + + + +  +   + +                      +   +   + +  + +       +   +                 +     +  +  + + + + + + +      + +                 +  + +  + +      + +  +       + + + + +                 + +        + +         + +                  +   +     + + + +     + +  + +                     + + + + +   +   + +                 +   +   + + + + + +   + + +   +  +           +      + + + + + +   + + +  +      4E 100 104 1 +  + + + + +  + + + + + +   + + + +  +          + + + + + +  + + +   + + + +        + + + + + + + + + + + +    + + +   + +           + + + + + + + + +  + + +  + + + + +           + + + + + +  + + +  + + + + + +           + + + + + + + + +  + + + + + +            + + + + + +  + +  + + + + + +        + + + + + +    + + + + +  + +        + +   + + + + + + + +            + +    + + + + + + + +             + + + +  + + + + + + + +            +  +  + + + + +  + + +         +  + + +  + + + + +  + + +              +  + + + +  + +              + +  +  + + + +  + + +   + + +         +   +  + + + +    + + + + + + + +   +     +   +  + + +   + + + + +  + + +      + + +     + +  +  + + +  + + + + + +      + +    + + + + + +   + + +  +  + + + + + + +    + +     + + + + + + + + + + + + + + + + + +   + + +    +    + + + +   + + + +  + + + + + + + + + + +  +    + +      + +  +  + + + + +   + + + +  + +     +     + + + +  + + +  + +   + + + +     +        + +  + + + + +   + +  + + +  +    + +      + + + + + + +   + + + + + + +             + + + +  + +   + + + + +       + +  + + + + +  + +       + +    + + + + +  + + + +   + + + + + +    +    + + + +   +  + +  + +  + + +   +    +     + + + + +  + + + + + + + +   +    +       + + + + + + + +  + +  + + + + + +      +  +   + +  + +  + + + + +  + + + +  + + + + +      +  +    + +  + + + + + + +   + +  + +  + + +    +  +     + +  + + + + + +   + +  + + + +  + +    +  +      + + + + + + + + + + + + + +  + + +   + + +   +     +  + + + + +  + + + + + +   + +  + + +  + + +   +       + + +  + + + + + +  + + +   + + +    +  +        + + +  + +  +  + + +  + + +  +  +        + + + + + + + + + + + +  + +  + +  + + + +    +  + +      + +   + + + + + + + + + + + + + +  + + + + +          + +  +  +  + + + + + + + + + +  + + + +      + +  +    +   + + + + + + + + + + +  + + + + + +      +       + + + + + +  + + + + + + + +  + + + + +      +   + +  + + + + +   + + + + + +   + + + +    +     +     + + + + +  + + + + + + + + + + + + + +   + + + +         + + +    + + +    + + + + + + + + + + + + +  +   + +    + + +  +        + + + +  + + + +  +   +     + +     + + + + + + + +  + + +    +   +      + +     +  + + + + + + + + + + +  +              + + + + + + + + + + + +  + + + +        +    + +     + + + + + + + + + + + + + +  + + + + + + +       + +   +   +  + + + + + + + + + + + +  + + + + +      +     +      + + + + + + + + + + + + +  + + + + +         + +     + +   + + + + + + + + + + + + + + + +    +    + +      + + + + + + + + + + + + + + + + + +  + + + + +   + +   +        + +  + + +  +  + + + + + + + + + +     +  +    +  +     +  + + + + + +  + + + +         + +  +   + + + + + + +  + + + + + + +  +       +        + + + + + + + + + + + + +               + + + + + + + + + +  + + +    + +    +      + + + + + +  + + + + +  + + +    +   +  +       + + + + + + +  + + + + +  +    +   + + + + +  +   +  + + +  +   +  + + +       +  + +  +     + + +  + + + + + + + + + +   + +   + + +   + +    +  +       + + + + + + + + + + + +     + +  + + +   +     + + +    + + + + + + +  + + +    + + +  +     +  +        + + + + + +  + + + + +  + + +     + + + + + + + + +    +   +    +   + + + + + + + + + +  +  +  + + + +   +    +    +   + +  + + + + + +    +  + +  + + + +   +         +   + + +  + + + + + +    + +  + + + + +    +          + + + + +    +  + + + + + +    + +     +  + +    + +  + + + +    +  + + + + + + + +     + +    +     + +  +  + + + + + + +  + +    +     + + +   + +  + +   + + +  + +  + +       +   + + + +    +      + +   + + +    + +  +  + +  + + + + +  + + +     + +  +  + + + +  +  + +    +    + + +   + + + + + +  +   + + + +     + + + + + + + + + +      + + + + + + +    +  +      + + + + + + + +  +       + + + + +    + +  +    + + +  + +   +    + + + + + +  +  + +    + + +  + +     + + + + + +         +    + + + +  +    + + +      + +   +  + +  + + + + + + + +  + + +  +  +   + + +   + + + + + + +    +    +   + + + + + + +  + + + + +  + +  + + + + + +     + +    + + + + + + +  + + + +  + + +  + + + + + +  + + + +   +   + + + + +  +  + + + + + +  + + + +  + + + +      + + + +  +  + + + + + + + +    + +  +  + +   + +  + +    + + +  + + +  + + + + + + + +  +  + + +  + + +   + +     + + + + + + + +  + + + + + +  + + + + +   + +   +     + + + + + + +  + + + + +    + + + +   +  + + + +     +  + + + +  + +  + +       + + +      + + +        + + + + + + + + +   +      + + + + +  + +       + + + + + +  + +       + + +  + +      + + + + + +  + + +     + + +  + +        + + +  + + + + + + +   + + + +  +     + + + + + +  +  +    + + + + + + +     +  + + + + +   + +  +      +  + + + + +   + + +  + +  + +   + + + +   + +  + +   +    + +    + + + + +  + +     + + +  + +    +  +  + + + + + + + +    +   +   +  + + + +   +   + + + +   +  + + +     + + +  +  +  + + +  + + + +  + +    + + +  + +  + +  + + + + +    +       + +  + + + +   +    +  + + + + + +   +  +  + + +  + +    + + +   + + + + + + +  +   + + +  + + + +   + + + + + + + + +    + + + + 6C 8 174 1 + + + +  +   +     + + +  +   +   + +   + + +  + +  +  + +     +   + +  + +     +  +   + +  +  +  + +  + + +   +   + +  +     + +  + +     +   +    +    + +  + +     +    +     +   +   + +  +   +  +   +  +  +   + + + + + + +  + +  +  +   +   + + +  +   +    + +  + +     + +  + +  + +  + + + +    +   +   + + +   + +   + + +  +  +   +  + +  + +  +  +  + +  + + + + +  + + +  + + + +  + + + + + + + + +  + + +  + +    +    +   +  +  + +  +   +  +  +  +     + + +   + +    +  + + +   + +    +     +  +   +  +   +   +   +  +       + +   +    +  +  +  +   + +   +  +   +    + +    + + + + +    +      +    + +3 8 175 1 +]V]]V]OOSOcHHHHiBBBCn;;;;n;155n<155n;113nB+11nB*-1iH*,-iO(*-iP&**iV&(*i]"'(cc &(gi$(ci"&ck"&ci"]i!"]e"]c&]c&]c'Vb)V]+T]-V]1O[5OV;OV@OVHOVOIVVN]] O]a H]cO]cH]cHYcHV`DVaBV]BV]AUWHOD?HVH>LROBHVH +BHVH DNVH GHVO HKVO HLVP JIVV HNVV HHVV OOVV OIVV UOYV OV]VVV]VVV][V]]]VXa]]`cb_]cc`cfc"cchg"ccfc&ccig&ciic(giic(iijc*iiic*iimc*iin]*inmX*iil\*ikj[*iim\*iikV+imnV,iinV-iilV-iinS-imnV1iknP1imnU1ilnO2iinO1inoM5iknK3inrH5insH5insH9insE:nnpG9knsB;nnsF;knsB;nnsB;nns@;nns?;BBHHMOPVVOROOPPOOROVVPOMHHBB;?>BBBCB?=@BDHOOOOSPUTOOH;BBssssssprsqsssssrpsssopssnsnsssnspsssssssssssssssssspsnsssnsnssposssprsssssqsrpssssss51 104 104 0 + + +  + + + + + +  + + + + + + + + + +    + + + + +  + + + + +    + + + + + + +  + + + + + + + + +  + + + + + +  +  + + + + + + + + + +  + + + + + + + +  + + + + + + +  + + + + + + + +  + + +    + + + + + + +   + + + + + + + + +  + + + + + + + + +   + + + + +   + + + + + +       + + + + + + +   + + + +    +  + + + + + +     + + +  + + + + + + +   + +  + + + +     + + + + + + +    + + + + +    + + +  +  + +  +  + +   +   + + + + + +    +    + + +    +   + +  + + + + +  + +   + + + +      +  + + + + + + +     + + + +      +  + + +    + +   + + + + + +          +       + + + + +    +   + + + +     + + + + +     +     + + + +        + + + + +  + + + + + +  +    + + + +  +       + + + +   +     + + + + +   + +   + + +    +  +    + + + +    + +  + +   + +    +  +    + + + + +    + +  +   + + + + +    + +  +  + + +        +      + +    +    + + + + + +      +   + +     +         +  + +       +  + +     +      + + +         + +    +         +  + +            + + +          +  +    +  + + + +         + + +    +       + + + +  +         + + + + +       +   +          +        +  +        +   + +         + +  +       +       +      + + +           +                    +  +  +            +  +              +           +   + +   +                   + +    + +             +     +    + + +  +        + + +           + + + +      +   + +  +      +    + + +     +   +     + +      +        +        + + +      + +                           + +  +    + + + +        +          +  +    + +    +   +    +         +  + +   +54 100 104 0 +         + + + + +     +  + +   + +     + +    + +  +         +    +     +   + +   +  + +  +      +  +    +          +  +  +    +  + + +  +  +         + + +    +      +   + +   +   + + + +    +  + +  + + + + + + + + + +        + + + + + + + + + + + +       +   + + + + + + + + + + +    + + +   + + + + + + + + + + + +    + + + +  + +  + +  + +    + + + +  + + + + + + + + + + + + +  +   + + + + + +    + + + + + + + +   + + + + + + + + + + + + + +    +      + + + + + + + + + + +  + + + + +   + + + + + + + + + + + + + +  + + +     + + + + + + +   + + +   + + + + + + + + + + + + + + + +  +     + + + + + + + + +  + + +   +  + + +  + + + + + + + +    + +   +  + +   + + + + + + + + + + + +  +   +  + +   +     + + + + + + + + + +   +      + + + + + + +  +  +   + +  + + + + + + + + +       +  + + + + + + + + +  +       +   + + + + + + + +  +  + +     +  + + + + + + + + + + +       +    + + + + + + + +  + +     +      +   + + + + + + + +   +         + + +   + + + + + +  + +   +    +  + + + + + +        + + + + + + + + +   + +   +  + + + +  + + + + + + +      + +     + + + + + + + + + + +  +    + + +  + + + + + +  +   +   + +   + + +  + + + + + +     +   + + + + + + + + + + + + +     + +  + + + + +  + +      +     + +  + + + + + + + +  + +       +   +  + + + +  + + +   + +   + + +  + +   + + +  +     +    + + + + +   + +  +   +   + + +  + + + +   + + + + + + + +    + + + + + + + +    + +        + +  +  + + +   +        + + + +  +  + +    +  + + + + + + + + + +   +  + +  +   + +  + + + + + + + + + +   + + +     + + +  + + + +  + + + +    + +   +    + +  + + + + +  +   + +    + +   + + + + + + +  +   + +     + + + + +   + + + +   +  + + + + + +  + + + + +  + +     + +  + + + + + +  +  + + + + +    + +   + + + + + + + +  + + + + + +  + + +   + + + + + +  + + + + + +  + + + +   + + + +  +  + + +   + + + + +  +    +  + + + +  + +  + + +  + +     +  + + + + + + + + + + +  + + + + + +    + + + +  + + + + +   + + + + + +  + + + +     + + + +   + +  + + + + + + + + +   + + + + + +  + +  + + + + + + + + +  +  + + + + + + + + + + + +  + + + + + + + + + + +  + + + + + +  +  + + + + + + + + + + + + + +  + +  + +  + + + + + +  + + + + + + + +  + + +  + +   + + + + +    + + + + + + + + + + +  +   + + + +  + + + + + + + + + + + + + + + +  + +  + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + + + +  + + + + + + +  + + + + + + + + +  + + +   + + + +    + + + + + + + +  + + + + + + + + + +  + + +    + + + + + + + + + + + + + + + + +  + + +  + + + + +   +   + + + + + + + + + + + +  + + + + +   + + + +  +  + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + +   + + + +  + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + +  + + + + +   +  + + + + + + + + + + + +  + + + + + + + +  +  + +  + + + + + + + + + + + + + + +   + + +  + + + + + + + +  + + + + + + +  +  + +   + + +    + + + + + + + + + + +  + +  + + + + + + + + +   + + + + + + + + + + + + + + + +   + + + + + +  +  + + + + +  + + + + + + + + +       + + + + +  +  + + + +  + + + + + + + + +   + + + + + + +  + + + + + + +  + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + +    + + + + + + + + + +  + +  + + + + + + + +  + + + + + + +   + + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  +   + + + + + + + + + + + + + + + + + + + +  + + + +   + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + +     + + +  +  + + + + + + + + + + + + + + + + + + + + + +  + + +   + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + +    + + + + + + + + + + + + + + + +  + + + + + + + + +      + +  + + + + + + + + + + + +  + +  + + + +  + + + + + +  +     + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + +  + + + + + + + + + + + + + + + +  + + + + + + + + + + +60 200 74 1 +       + +   +  + +    +   +  + + + + + +     +     +      + +   + + +  + + +   +          +   +  + + +    + + + + + + + + +          +       + + + + +      + +  +    + + +  +   + + + + + +     +     + +  +    + +      + + + + + +            +   +   + +   +      + + + + + +        +    +   +  + +    +    + + + + + + + +           +   +  +  +  + + + + +  + + + +                + +   + +    + + + +        +     + + +  +     +      + +  + + + + + + + +                    +     + +    + + + + +           +  +    +  + +       + + + + + + + + +                 +  +     + +   + + + +  + +  +           +     + + + + +    + +   + + +  + + + + +           + +       + + +    + +  + + + + + + + +  +         +       + +     + + + + + + + + + + +  + +         +  +    + +   +     + + + + + + +  + + + +        +  + +  + +   +    + + + + + +       +      +  +   +  + + +       + + + + + +  + +                + + + + +    +      + + + +  + +  + + + + + +         +    +  +    + + +   +     + +  + + + + + +  + + +      +  + +       + + + + + + + +   + + +      + +  +  +   + +    +   + + +  + + +  + + +  +  + + + +            + +   + + +   + + +   +      + + + + +  + + + + + + +      +       + +    + +  +   +    +  + + + + + + +  + + + + + + +        +  +  +     + +  + + +   +  + + + + + + + + + + + +  + + + + + + + +      +     +  + +  + + + +        + + + + + + + + +  + + + + +          +  + +     + +   + + + +  + +  + +  + + + + +             +    +  + +  + + +      + + +  + + + +  + + + + + + +            +    + +      + + +  + + + + + + + + + + + +            +     +  +     + + + + + + + + +  + + + + +          +  +        + + + +      + +  + + +   + + + +                  + + + + + +    + +    + + + +  + + + + + + +               + +    + + + +  + + + + + + + +    +    +    +  + +   + + +  + +  + + +  + + + + +  + +        +       + + +  +  +    + + + + + + + +  +  + + + + + +       +       + + + +      + + + +  + + + +  + + + + + + + + +             + + +    + +  +  + + + + + +    +       +     + + + +   + + + + + + +  + + + +     +        + + + + + +  +  + + +   + + +  + +  + +  + + +  +     +  + +     + + + +     + + +  + + + +  + + + + +   +           +   + + +   + + + + + + + + + + + +        +  + +  + +   + + + + + + +  + + + + + + + +   +      + + + +      + + +  + + + + + + + + +         +    +   +  + +   + + +  + +  + + + + + + +  +        + +    + + + + + + +  + +  + + +    +   +   +  + + + + + + + + + + + + +  + + + + + + + +    + +      + +  +   + + + + + +  + + + +  + + + + + +    +  +  + + + + +       + + + + +   + +  + +  + + + + +       + +     + +   + + + + +     +   +    +    + +  +  +  + +       +     + +    +  +  + + +  + + + +          +   + + + + +  + +    +    + + +            +  + +   + +  +    + +   + + + + +             + +  + + + +   +  + + + + +  +    +    +   + + + +   + +  + + +         +  +    + +  + + +   +   +           + + + +   + + + + +   + + +   +       +   +  +   + + + + + + + + + + + + + +            + + + + + + + + + +           + +  +  + + + + + + + + + + +         +     + + + + + + +   +       +       + +   + +  + + + +  + +  +   +   + +   + + + +  +  + +   + + + + + + + + + + +           +     + + + + + + + + + + + + + + + + + +         +      +   + + + + + + + + + + + + + +       +    + + + +   + + + + + + + + + + + + + + + + + +       + +    +      + + + + + + + + + + + + + + + + + + +         +      + + + + + + + + + + + + + + + + + + + + + + + + +          +      + + + + + + + + + + + + + + + + + + + + + + + + + + +                + + + + + + + + + + + + + + + + + + + + + + + + +   +         +    +  + + + + + + + + + + + + + + + + + + + + +   +    + +    +        + + + + + + + + + + + + + +57 100 104 0 +                                   +                                                           +                +                                                                    +                                                                     +                                           +           +           +             +    +             +         +                     +      +        +           +           + +     + +             +          + + +     +                  +   +           + + + +  +                + +  + + + +             +   + + + + +                    + +  + +                   + + + + + + +      + +       +   + + + + +   +    + + + + +   + + +   + + + + + +     + +        + + +    + +  + + +    + + +    + + + +    + + + +       + + + +       + + + +    + + + +       + + +          + +  + + + + +    +  + +       + + + + +   + + + +  + +   + + + +   + + +  + + + + +    + + + + + +   + + + +   +  +       +  + + + +  + + + + +       + +           + + + + + + + + + + + +    + +  +   +  + + +  + +    +  + + + + + +  + +   + + + + +  + +       + +  + + + + + + + + +   + + +   + + + + + + +         + + + + + +  +  + + + +  + +  + + + + +  + + +       + +   + + + + +  + + + + + + + + + + +  + + + + + + + +        + + + + + +  + + + + +     + + + +  +    +    + + +  + + + + +  + + + + +  + + + +  + + + + +       + + +  + + + +   + + + + + + + + + + + +  + + + + +          + + + + + + + +  + + + + +  + + + + + + +  +        + + + + + + +  + + + + + + + + + + + + + + +  + +  + +   +    + +  + + + + +  + +   + + + + + + +   + + + + +   +  + + + + +  + + + + +   + + + + + + + + +  + + + + + + + + +        + +    +  + + + + + + + + + +   + + + +  +       + + + + + + +  + + + + + + + + +   + + +   +      + + +  + + + + + +  + + + + +     + +  +  + +     +    + + + + + + + + + +  + + + +    + + +   + +         + + + + + +  + + + + +     + + + + + + + + + +       +  + + + + + + + + +  + +      + + + + + + + + + + + + + + +  78 8 174 1 +     +                      +   +     +              +     +                         +                                                                                                                                                                                                           69 204 4 1 +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +  +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 84 50 1 + + +      + +  + +      +    +     + +    +   + +  +   + +  +  +   +  + + +   +   + + +     +  + + + +   +      +   + + + +   + + +          + +  +   +   +       +  +  +  +       +        + +  + +      +   + +  +  +   + + +  +  +    +   +  + +  + +   + +     +   + + +  + + + +        +  + + + +  + + + + +  +   + + +  + + +   + +  +  + + +  + + + + + +   + + + + + +     +    +  +   + +  + +     +   +  +  + + +  + + +   + +   + +  + + +   +  +   +  + + +  + +      + + + + +  + + + + +  +     + + + + + +   +  + + +    + + +    + + +  +  +   +  +   +  + + +   +  +     +   +  + + +    +         + + + + + + +    +  +   +  + + + + +   +  + + + + +     + + +  +  +  +     +  + +  + + +    + +  + +  +  + +   +  + +           +    +    + +   +       + +      +  +        +  +   +       +  +  + +  +  +            +  + + + +   + + +  +   +   + + + +  + + + +   + + + + +  +   + + +  + +  + + + +  + +       + +   + +    +    + + +  +  + + + +  + + +   +  + + + + + +   + + + + + + +  +  + +    + + +    + +  +    +    + + + + + + +  + +             + +   +  15 84 38 1 + + + +  + +  )/)(      +  + + + + + +  +   +  ()/  +  +  +    + + + + + +    ()(  + +  + +   + + + +  +  ( ! +  + +   +  +   +      +     + +  +            +   + + + + +     +  +  + +       !(   + +   +   + +   +(+  + +  +   +    ((  ! + + + +  +   +    ((   +  + +  +  +  +   +   +   +(+    +  +    + +   +    ((   +  + + +      +   +   +   +  + +      + + + +   + +       +    +  +  +  + +          + + +   + +   +  +   + +        + + +  +       +       +   + + +     + + +   +    +  + + + +    + +   +   + + +   + +  +  + + +   +    + + + +  + + + +   +   +       + + +    + +  +  +     +   +      +   + + + + +    +   +    + + + +  + +   + +  +   +  (  + + + + + +  +     + +  + +  + + + +   +   +   + + +    + + +  + + + +  +   + +      + + +  + + +  +       + +       +    + +  +  + +  +   +      +  +   +   +  + + +       + +   + +    + + + +  +    + + + +   + +  + + +         +  +  +   +  + +  +     +      +  + +    +  +   +   +   +        +   + +    + + +   + +   + + +    + +   +   + + +  + +  + +  18 84 39 1 + !"##  #$$%%&"'""'$())(((()))))))(*&! &+#%, %   + +!! !""&-%'"%# !' +)))((())))))))(+&!".$.##%   +!%# !"""#%#$-# %#- #()))(()))))))))(+. .,!,    + + '" '+$--% " " $-#.%,))((())))))))))($#'%$'%$, +    !" !$&# " "'&...-#&()(((()))))))))(*$"%,$. , +   + '!.% "!' #!'**&.&$$)))(((()))))))))(*,"'.$.. %    + '!# ''" "''##"+($--$+()/))((()))))))))(+!'#%$ ,    ! + %#!'"!!' %# '%+$..$$$*)//)((()))))))(((+# %#,, $, +     + %% '''% "'"" #.,,,$)//))(())))))(((+$% %#,%, +   + + %'!'!''!" "'!!!".,&&$)//))))))))))((+$ ' $$$,% + + +!  ! ''!!"!!'"''".#.+)//))))))))))(+$ %"%$$$$ ! +   ! "!!!'" "!'#$()/)))))))))))(+,#  % $$$  +   +  + + +'%#%%..''!,)//)))))))))))(+,'% ,  !  + +   +!  '!%%%%%#####% %)//)))))))))))(+,,$$ + +   +  ! %% .%%%###.# %+)/))))))))))((+,,+% +   ! %'!!%%%%###. )/)))))))))(((+,!! ! + + + + + +!  +!%%#####...,$+)//)))))))(((((+,%'! '' + +     + + +!%%%###...,$()//)))(((((((((+,%!! + + !!   +    + +  ! +! %%%%# #$,,()//))(((((((((++,%! ! +!     + + + +!! '!!' %%%#$$,$()//))(+++(((((++,%'% +  +!   + +  + + + +!!! %%''!!#$+()//)(+$$$+++((++,%' ! +    + + +   + + +! %%" ,$,$)//))( ,$++(++,!! + + +    +  + +!!!,+$)//))($ %% $+++!  + ! +  + +     + + +!'%  !!##+)//))($ $++,"! +!    +  +  +!%  '!%()//))(  ,$$ ! + + + +    +     %%%  !!  +)//))(      +   + +  +   + +  !%%%%!' '',)//))(% !! + +  + + + + +   +%%%  % )//))($  ' +  +   +   + +  + +!%%% '% ' + (//)(( % ',  + +      +   !% + +! +  )//)(+ +         !! + !! )/))(+  ! +   + + +    ! + % +  '(//))(+  + + +   + +    ! +   !!)//))(+$  + +      +    + !+))))(+, ! + +     +    !  ! //))(  +   + + ,  +! + ' +//))(  + +  + + + +   +   +//))+ +  +   + +  + + +    ,  (//)(      + + + + + + + !   (/))      +1B 84 38 1 +01 2223332100.&94994455444455-%#.9555599559&:55996% 773333371 11133332110,899554445955545:&&%#-955999559695449:.#%% 3373333371 117333332112 $95:;44444;-555%;:6:::9995995556;5449:.#&#"333333333371 11237010 &*95;:544456654& .&&;95559::9456-9559;;:6;-.!277373333711123377201.*995595455559; '%;;9599669556;6549&#*999:& + 2777233337111233372771.*9445954444-'".&99969445:#;9445*6959-;. +77007773217223332277 ,&!!64444:6445#"!'%:;&69;&;545:.*9555*-659;%% +777027777777223333211277 -.:4444#"55# !!%69*9559-9596&;4449-&699.#&#%# 7722777770007273333011111 .#;;654596%9"";96:5599545-.9449&&&*99#%:6:--# +207777770111123333011111 + + %#&*9*94999*:'! #.;::659*944*.-9559;.:9999-;*6:.#7777772000103330110011 !.:95499544*%" %#&;&.;:69959#;5449#%-955*&.&.&- "372000010111077#.699995446%''.-&69*96666&-9449;.;9496&..::%" .;!337000020721111122 %'.*59955.'!"%%%-99999599.#:959;#:449;.%#:99.%&*6;,#37010117222110 '"-*955&%!!%*:.-*999549&:9549#%-949;..##69.%-<*;;$. 333770111711771111 + ' -:5:%'!".*9*:;:;999:&;9445*&-949;##&-;;###*9*6:&% 330007111022111  .9;!! ;*6-;9966:&%9944:&:459&%%:99-:*::;;.% 2377711111201   !.6%!! .---&*9999;.&6999&.;949&#&..99:&&99<866-.#%7777337111111222 +%!.6%!".::#:9996&&9449:#.696.#-*6:*:&-%9<<<*;&.#. 12331101173 #!-."!! .:;&--6*9*&#-95446.:999;%#6**:&#&."&<9*6-&#&  17311122273 .##'"%---𐾴.%-94449664445966995*9<: %:**:-&--,$ 172731027122 %#'" &::&&%.<45<96944444<5444445444444//4;&#&8;-&-$$$$  111711112 + %%% ''" #6:&%#&<44954///////////////////////4<*:*-&-&-+$ 11271102  + %#%"!".&..%;<4444)//////////////////////////)*.;-;:;++.#$$  1002111227 !.#!!.:&-44////////////////==/=====//////=)*%;;;*8$#,$,  10001112722!%'!-;&%*4//////////////=5)))))))))5=//==))+"#&**$+*$%  000772 !'! ..#&84/////////=555)))<<<<<<<<<<)))))))8;!'-<8*8*   1007337  ! .*54//////=5)))))<<<8********8<)))))<*-'&*<<8$%! +  077372 +  !! &<54///==5))<<<<<88***+*+6666*8<<))<8+&  -<)$$$%' + 273371  + !'!!''#:8<9)///=))<<<<88***6666++6:;;:+8<<<<8*- $*$&,+,  + 03337 !''!'-:+*+)//=))<88888**66666+**+:-&&;*8<<<8*-.8+-$$ %17 +!!!!;-&;$)//=)<88888*+666666+***6-..-6*8<<8*- !&$$8**$  2727  '!!&#%.*///))8****+666666++*88*+;-..;*8))8*-'!.$)($$% + + 2777! '''&#%.)//))*+++6:;-;;;:6+*88<8*+;&.-+8))8*&!!%+*+$,  +7  '!''"#%&)/=8*$;--.###..&-:+88<<<8*+;-;+8))8+&!"',*$$, ,, 27 + +! '!!"";8+&.##% %%.;*8<))<<8*+$$+8))8+.,$$$# , +2 !!'"'-+*#"!'"%-+8<)))<88**+*8((*+%"%"#,$$,$ 3 !  '! #$*$%#%' .+*8))<88888*88((*$ & #$$$, +2  + +!! %'#+8-%&.$*8)(888()((())(*-' && $$#%  6F 4 174 1 + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + +   + + +  + + + + + + + + + + + + + + + + + + + +     +                + + + + + +  + + +    + + + + + +  + + +  + + +  + + +21 84 31 1 +9  999 99999 9+(33:<<:;<<<<<<<:3;<<<<<<<<72::2:<;/1+)99999999999999999 99&7(/3.=::;;=;<<<<:/<<<<<<<<:==//:<:/32&') 9999999999 9999 99999,+0012.//:;<:::;=://<<<<<<;/<;20:<:/.1&&1+9999999999999999  9996'2//23:;:=<<<<<<:212;<<<<<::;2'/<:3:=/10(1+'999999999999 9999 99999)6&3.:::;<;<<<;<<<:33;:02:<:::1'1<;/:=:32022(+9999999999  99999 &71(//33;;;:;;;=<<:3:<<;0&1:=:203<<;;=:32113(1')99999999999 9999970003322:./:;://::22<<<32333/11:<<;<=32212:;:+'') 99999999999999999 &77+171:;:/:<<;:311/<=32:<<;7,3<<>><<<3414339;.6.;..#%  ""$$$:-;765..122221.3=<=2365;7.533=<><>>>><><<2191397.9.;.60%%% ! %%%7.7..;-9222234322331;66.93==<><>><><><><<3316776.;;;7%--#! !$%--64467-77;12332213=239.9953,=<<<><<<<<<<<<<=39--..7;..-%%#0! $%-0433167-7;91132232=234691=<<<<<<<<<<<<<<<<==5-;.9666.7-7--#%#" $-04331466547-12233=231943=<><<<<<===========3.%7...6.77;.0-!""   %%:%044114446-.1==2233393=<><<============22334.::-;;77-7..07%%# %!#00.444131.7751222333.52<<<==========222333315.%:---7;7700-#-#   #08487.44134-794911153332=<<=====22222222331114567:%%-;99.0;7####""  #&/8446;61331665416%;13==<=====2222222222233114496.7;;.95.7777--%%#"  &//88860.1311334329-612======2222222222223311144996656549.--7777%"  #&/0/48.--6113223333433,====223322222222233111444599941114.;;;#0#-%"75 4 174 1 + + +  +       +  +                          +  +    +                                                                              42 84 33 1 +7:;77777::777((#,49995555555592+0++0455.**,4-233-9.1 ((::7:::7(((7(;::;;;;;::;;::;( ).55555555===55443220*9.0,,,3,339<-) (((((7:;:77(((((((::::;;;;::;;::;: *+45555=========59.4.20.*300.499.+3--,#(((((((7(((777(((:::;;77;:::;:::; +8--4955555========5594..,+2,+-95999.0,-,)#(((((7(77(((;::;;;77:::::::: .//,4955555========549994..4-.55559940+--,) 77((((7((((:;77;:::::;;::::"6/99<..<5===5=======5955595544555.9592*--1# 77((((((((:;7;;::;(((((;; + .4/99.2095==========59594554.9=55..<-**0-,)(((7(((777;:::::;(((7!///99-0*3995========94.4959.45===59.*2..2--,) (((((((77((7;:;;;(((6%//9559-30*,5======59233-99594555==9.3.959.-/4,# ((((7(((7;;:;((((8///9555<3++55=====900,4445=5-455=55.,55559--46#$ ((((((:;;:;((((( *0-.//5555.2.4.955==5-2,4945=55.2.5555<,95555<021 (((((((:::;;7(((73-..<99594<99949-99,++.4.25=55<..95599<.95559*2**((((((::::::7(( 1.//9559994<955-3<3+023.,.95559,.55555,*9554+1*$77(((((::;:::;((7*0*1/9555559-<559,2,0*0...9555555.3+455559-5543*00*7((7(((:;::::;7((*0*0.95595=92.<.-..3+2..<55555555-,+,55555555.*++**((((7((((((::::;7;;7$**/9/95==54...-.,32--,<55555555923--<99555.0,+*+*##((((((((7((((::::::::*#*155/955=5-..<<.,..220,<9555555599<.2.959.+03*+03+01#((7((77((7(7;::::::#+3/9/955559024<....,.,3-4.9995555559...94-****3,--1#*7(((77((7((7(;:::;***,//95555520-.2,-,.95<-,2..9559955599<.,03++32-4/.0*7((7((777(7(7::::$*).449555590-,3,.3,955.,,3349599959995903-..499955/1)#(((7(((77777(7;;; + +*6/9555559.2--,,---9554220*32.955999999<2<9955====5//9.# (77777(77;;7;:: +"#1649595559/22,03-,-99593000+029559,-559.5======''''5'56#777777((7(;:777: + 8864999559/-3+*+32,9999--+-<.0+.5592+99-5===='=''''''556*7777(((((::;(( 866.///9599-,2*+3+3<95942255420+-9<9.*.245===='''''5555/1$7(((((((7::7((# 8 .%99999/-22*02,32.9999-/59-+-.2///4+-<5=''''5555559/.)$(((((77:;;7 +"888.%%9559,++,,233-.99999/-0+.,+.99<,-.9='''55599////.,0(7((77(;;:  86!!%9999,*+*3223++049955-***,2-9/2-<5='''559//444..-1+ $77777(7:: 8!.%%%//1**+*0000++03+2<99/4,,+-4,2-3,-9='''559/4....--,)+ 77(((;;"86.%9/40$020++3++,-324///99,-/9-+000-5='''55/4....---,)+ (((((7::: +#886!%%/1+*$$*33*0-2,--00,.4/9/-///-,.-34='''55//4...----,)*$ ((77;: + +&!%%4)****+010,222,,230+3.//.4//-2.--<='''559/44...----,)*  7(77(7 +"&%!.++00,..--3010+0+**+./////-03,2.5''''59/....--.66-10 $* 77((( +##8!6*$$$*).-4//4+**020023,-//9-*++*3/='''55/4...--6.66,)+ $7(((45 84 38 1 +( + )*$+*+,--.//,+*011,,2*034.-+**3-5'''55/4....--6.--1)* (((7 +!&)*$***1--11.,+,3+3-,+3,*2/5'''559/4....666--,1#* $((((8$*-441)60)-60*03+*02*0+3+0.5''''55/4....666--,1)#* 7(( $+$6/..6--64.-00*0--301++-/5'''559/4..6666--,,1)#*$  ((+#,6.4.44/4-..1+0-,3013*0./'''559/4.66666--,,11)0 $* ((**$$+186#)666644.64//,*)-3333*0-95'''55//..66.6--,1111)0*  (( +**)1.8**)1-6-6,-44.-*+++0313+1/5'''559/4.6666--,11111)+ ((*11 ))),))),4.6,*1301--1.95'''55//4.66--,11111,,)#  )866*$)))8,8..)06,1,,13.5'''559/4.66--,1111,,,,1  $* $$*) &68#$)-..)..6)*1,00,)33/95'559/.6688--,111,,8,1)+ $    "" 8 ##).68888)*+0+0+*0-5'''5594.66--,,1111,,,,1#*$$ $#""*))1 1+*+)886661**+))+395'''55%4.66-,11111,,,,1)#*$ $$$" #"" #)1)).6,*+***0),,69'''5594.66-,111)11,, ,11#* $* ) 8 8 *+#**+11*+*+#111,.5''559/.68-,1)))11,,8 11# *   +"6&81+$*$$$*++)#1-%''555%.8-,1))))1,,, 1#  $  +"" $$&886 *$*0+3.'''559468,1)##)11,, "#  +""$)8&88"1+*#+*)#*+))-9''559%.8-1)0++)1, 8888 )$$$$   + + +"#*$*"" 661*#+))##)18%'''59%.8 ,)#+**),88 866668) $$   + + +#*##)188#+#*+##+#16%5'59946 11#+,.668886!!!8)*   "" #)8 )#**+*****149''59%681)#+*$6%468866!!! #$ $   + + "" "" ##+++###**)845''5%.8,1#+*$$199!6886!!!& $ + + + +"""*++*)#*)16%9''59%6 1)#*699!6888!!!& $ + +# "*$**$** 86%5'59%.81)#+*$ 49!68 86!!6"$ #  + + + "" *$*****1 .9''99!8")##* *%9%6 " 8&&8"    +"""* *$)#+**##,.''9%6 1)#*099%6")" 6&8)*$ +#  "$#*#))) !9''99. 1)##*$ 6559%6")1 88 )*   + +   $$* **)"##69''59!81)##*+9''9%. 1" 88") $  + + +$##**#)%9'9%6"))##* )%''99!8 " 8 "#     +  +#$$*# #*)%'%!8")))#* )5'99%&8 " $   + + $$* )###18%9%6 1))#$ *%''99%!&888 "# #   +  # )" !9%!8"))#* $"%''99%!!&&8"#  $ +   ***  )) %''9%6 ))##*$ )%''9%%!!!!&"#$ # $#* #89'%!8"))#*6''9%!!!!!!"#    + + #  ###"!99%6"))#$  $*199%!!!!!!!&" ##  +** # !%! "))#*  $*)!9%%!&&&&!!!" + + +  **)&%9%6 "## $# !%9%!6 &!!!  +    # * %!8")#*  #"!%%99! " &&& #   +      + &9%& "# $ $*)"&%'9! )#"  "$   +48 84 36 1 +    9%!"# $  '9%#""#  # +  !%%& # #" &%'%& "##    + +     !9%"#$ " &%''%&"#    + + +   +   +%99%& ## $  "%''9%&"  + + + +    "&%9%!" +#  # %''9%%&" +   + +  !'9%&" + + +   +"%''%%&  # +   #"%'%! + +# $ +"&%''9%%&"   +      + '&"#  # +" &%''9%%"#  + +     +"%%& ""  +" + +"&'%% +  + + +   + +&%!""""$  +"&%9%   + +    "%'%&" +"" +  " '%%&&&    +    +' + +""$ ""&%''%&&&&&   +    + %" + + + +   "&%''%%&& +  + + +   "%& + + + + + $  "%''9%&& +     % + + + +    %'%&&&&"  +   +% + +    + + "&%''%        "%&" +  + +"&%''%%" +     + +%% +    +" "&%''%%    + + +     +%%% +   """  ''%% +  +  %% + "%''%   + +  %%%% +  + + + + +9''%   + +%%%   + + + + + +%''%    + +% +  +#'% +   + + +%  +'%" +    + + +%     + + + + + + + + +%    + + + % +  + + + + + + + + +'%    + + % +   + + + + +'%    + +    +% +  + + + + + +"'% +    + +     % + + +   + + + + + + + + + + +'% +    + + +  + %% + +   + +  + + +%'%  +  + +  + %%  +    + + + +%'  + + + +  %%%    + + + +% +   + +    %    +  + + + + +%"    + + +  %%   + + +%% +    + +    %%       +%"  + + + +   %%     + + % +  + +   + + + + +4B 84 58 1 +%%  +   + + + +  + +    + +  %%  +  + # +  +    %  +  + + + + + + + +   +    %%  +  + + +     %  + +%%%  + +   % %%%%%  + + + +  + %  +%%% + + + +%%   %%  + +%%% + + + +%% %%%%%%%%  + + +%%% +       + + + +   + + + %     +   + +   + +     +    + + + + + + +        + +  + + +     +  +  +         +  +   + +      +   +        +         +  +      +  + +          +          +              % +         +%% +        %% +     %% +    %% +      +%% +   % +    + + +   + + +      % +      % +     +%%   %% +      % +     +      %% +   %% +   % +     +%% +        %% +      % +        +% +       %%      %% +       +% +        +        +        + +  +        +    +           + + +        +  +       + + +       +       + +  MBOX2B_P 122 +ÿ¿wŸso_k?gcÿ^ßZßZ¿VŸRN_J?FBBÿ=ß9ß9¿5Ÿ1Ÿ1-_)_)_)?%!!ÿßß¿ŸŸŸ _? + ENTD_P 62 + $(,84(  04,$$ X@< 4@0(H<*d, $48@H(00,D`< 8T H|MBOX2R_P 122 +ÿ½œ{Z9÷~Ö~Ö~µ~”~s~R~1~~~ï}Î}Î}­}Œ}Œ}k}J}J}J})}}}ç|Æ|Æ|¥|„|„|„|c|B|!||xttplllhddd`\\\\\XTTTTTTPLLLLLHDDDDDD@<<<<<<84444440,,,,,($$$$$  BK8_P 27 +       + +   ENTA_P 62 +    +  6  + 7       +   ?     ENTB_P 62 +  +  +   4 1  +  8       +  8 ENTC_P 63 +    $ (, (< $ (,)X08H(L(,$<PH84, 00$(XT)|BK1_P 22 +     ÿBK2_P 16 +   ÿBK3_P 16 +   BK4_P 16 +   BK7_P 27 +     ENT_P 27 +!       ÿ \ No newline at end of file diff --git a/BACKUP/ART110/EXPLODE.IMG b/BACKUP/ART110/EXPLODE.IMG new file mode 100644 index 0000000..9b04be1 Binary files /dev/null and b/BACKUP/ART110/EXPLODE.IMG differ diff --git a/BACKUP/ART110/EXPL_OLD.IMG b/BACKUP/ART110/EXPL_OLD.IMG new file mode 100644 index 0000000..87f8a20 Binary files /dev/null and b/BACKUP/ART110/EXPL_OLD.IMG differ diff --git a/BACKUP/ART110/FBALL.IMG b/BACKUP/ART110/FBALL.IMG new file mode 100644 index 0000000..54bd396 Binary files /dev/null and b/BACKUP/ART110/FBALL.IMG differ diff --git a/BACKUP/ART110/FIREFRAM.IMG b/BACKUP/ART110/FIREFRAM.IMG new file mode 100644 index 0000000..0b71a69 Binary files /dev/null and b/BACKUP/ART110/FIREFRAM.IMG differ diff --git a/BACKUP/ART110/FLASH.IMG b/BACKUP/ART110/FLASH.IMG new file mode 100644 index 0000000..45c8ccd Binary files /dev/null and b/BACKUP/ART110/FLASH.IMG differ diff --git a/BACKUP/ART110/FOG.IMG b/BACKUP/ART110/FOG.IMG new file mode 100644 index 0000000..18d3ae0 Binary files /dev/null and b/BACKUP/ART110/FOG.IMG differ diff --git a/BACKUP/ART110/GAMEGRAF.IMG b/BACKUP/ART110/GAMEGRAF.IMG new file mode 100644 index 0000000..2c87491 Binary files /dev/null and b/BACKUP/ART110/GAMEGRAF.IMG differ diff --git a/BACKUP/ART110/HALFTIME.BDB b/BACKUP/ART110/HALFTIME.BDB new file mode 100644 index 0000000..4de9e09 --- /dev/null +++ b/BACKUP/ART110/HALFTIME.BDB @@ -0,0 +1,38 @@ +HALFTIME 2000 1000 255 1 12 36 +HTSTATS 211 677 145 470 +4000 255 222 3 8 +A00 255 188 0 7 +6E00 263 222 6 2 +A00 263 434 9 9 +6E00 268 222 C 2 +6E00 268 429 F 2 +A00 268 227 12 4 +A00 268 291 15 6 +6B00 282 222 C 2 +6B00 334 429 F 2 +7300 356 226 18 1 +4000 356 417 1B 1 +A00 358 291 1E 6 +6E00 360 222 C 2 +6E00 360 429 F 2 +A00 360 227 12 4 +6E10 445 222 6 2 +A00 453 188 21 8 +A00 453 291 24 8 +6E00 458 222 6 0 +A00 458 188 27 11 +A00 458 434 2A 10 +6E00 463 429 F 0 +6E00 463 222 C 0 +A00 463 227 2D 5 +A00 463 291 30 3 +6B00 476 222 C 0 +6B00 515 429 F 0 +7300 551 226 18 1 +4000 551 417 1B 1 +A00 553 291 33 3 +6E00 555 222 C 0 +6E00 555 429 F 0 +A00 555 227 2D 5 +6E10 640 222 6 0 +4000 648 222 36 8 diff --git a/BACKUP/ART110/HALFTIME.BDD b/BACKUP/ART110/HALFTIME.BDD new file mode 100644 index 0000000..e97e28b Binary files /dev/null and b/BACKUP/ART110/HALFTIME.BDD differ diff --git a/BACKUP/ART110/HALFTIME.IMG b/BACKUP/ART110/HALFTIME.IMG new file mode 100644 index 0000000..3380170 Binary files /dev/null and b/BACKUP/ART110/HALFTIME.IMG differ diff --git a/BACKUP/ART110/HANGFONT.IMG b/BACKUP/ART110/HANGFONT.IMG new file mode 100644 index 0000000..400bf61 Binary files /dev/null and b/BACKUP/ART110/HANGFONT.IMG differ diff --git a/BACKUP/ART110/HANGTIME.BDB b/BACKUP/ART110/HANGTIME.BDB new file mode 100644 index 0000000..ff958c5 --- /dev/null +++ b/BACKUP/ART110/HANGTIME.BDB @@ -0,0 +1,27 @@ +hangtime 2000 1000 255 2 14 24 +maxim 867 1313 244 525 +hangtime 192 720 149 506 +A00 274 206 0 0 +A00 274 329 3 5 +A00 349 329 6 7 +A00 349 206 9 1 +A00 419 329 C 6 +A00 424 206 F 2 +A00 494 329 12 8 +A00 499 206 15 3 +A00 574 329 18 9 +A00 574 206 1B 4 +A00 888 376 3 5 +A00 888 253 0 0 +4000 915 294 1E 10 +A00 963 253 9 1 +A00 963 376 6 7 +4000 983 294 21 11 +A00 1033 376 C 6 +A00 1038 253 F 2 +4000 1052 295 24 12 +A00 1108 376 12 8 +A00 1113 253 15 3 +4000 1138 295 27 13 +A00 1188 253 1B 4 +A00 1188 376 18 9 diff --git a/BACKUP/ART110/HANGTIME.BDD b/BACKUP/ART110/HANGTIME.BDD new file mode 100644 index 0000000..2076500 Binary files /dev/null and b/BACKUP/ART110/HANGTIME.BDD differ diff --git a/BACKUP/ART110/HDS1.IMG b/BACKUP/ART110/HDS1.IMG new file mode 100644 index 0000000..b469ff4 Binary files /dev/null and b/BACKUP/ART110/HDS1.IMG differ diff --git a/BACKUP/ART110/HDS10.IMG b/BACKUP/ART110/HDS10.IMG new file mode 100644 index 0000000..b2320ee Binary files /dev/null and b/BACKUP/ART110/HDS10.IMG differ diff --git a/BACKUP/ART110/HDS11.IMG b/BACKUP/ART110/HDS11.IMG new file mode 100644 index 0000000..a5313cc Binary files /dev/null and b/BACKUP/ART110/HDS11.IMG differ diff --git a/BACKUP/ART110/HDS12.IMG b/BACKUP/ART110/HDS12.IMG new file mode 100644 index 0000000..f3cd005 Binary files /dev/null and b/BACKUP/ART110/HDS12.IMG differ diff --git a/BACKUP/ART110/HDS13.IMG b/BACKUP/ART110/HDS13.IMG new file mode 100644 index 0000000..f824438 Binary files /dev/null and b/BACKUP/ART110/HDS13.IMG differ diff --git a/BACKUP/ART110/HDS14.IMG b/BACKUP/ART110/HDS14.IMG new file mode 100644 index 0000000..33faa94 Binary files /dev/null and b/BACKUP/ART110/HDS14.IMG differ diff --git a/BACKUP/ART110/HDS15.IMG b/BACKUP/ART110/HDS15.IMG new file mode 100644 index 0000000..eb9783d Binary files /dev/null and b/BACKUP/ART110/HDS15.IMG differ diff --git a/BACKUP/ART110/HDS16.IMG b/BACKUP/ART110/HDS16.IMG new file mode 100644 index 0000000..ffddd6b Binary files /dev/null and b/BACKUP/ART110/HDS16.IMG differ diff --git a/BACKUP/ART110/HDS17.IMG b/BACKUP/ART110/HDS17.IMG new file mode 100644 index 0000000..95155f9 Binary files /dev/null and b/BACKUP/ART110/HDS17.IMG differ diff --git a/BACKUP/ART110/HDS18.IMG b/BACKUP/ART110/HDS18.IMG new file mode 100644 index 0000000..03b6e6d Binary files /dev/null and b/BACKUP/ART110/HDS18.IMG differ diff --git a/BACKUP/ART110/HDS19.IMG b/BACKUP/ART110/HDS19.IMG new file mode 100644 index 0000000..d866c66 Binary files /dev/null and b/BACKUP/ART110/HDS19.IMG differ diff --git a/BACKUP/ART110/HDS2.IMG b/BACKUP/ART110/HDS2.IMG new file mode 100644 index 0000000..cab2cd3 Binary files /dev/null and b/BACKUP/ART110/HDS2.IMG differ diff --git a/BACKUP/ART110/HDS20.IMG b/BACKUP/ART110/HDS20.IMG new file mode 100644 index 0000000..36e57e1 Binary files /dev/null and b/BACKUP/ART110/HDS20.IMG differ diff --git a/BACKUP/ART110/HDS21.IMG b/BACKUP/ART110/HDS21.IMG new file mode 100644 index 0000000..cdc242b Binary files /dev/null and b/BACKUP/ART110/HDS21.IMG differ diff --git a/BACKUP/ART110/HDS22.IMG b/BACKUP/ART110/HDS22.IMG new file mode 100644 index 0000000..9666b91 Binary files /dev/null and b/BACKUP/ART110/HDS22.IMG differ diff --git a/BACKUP/ART110/HDS23.IMG b/BACKUP/ART110/HDS23.IMG new file mode 100644 index 0000000..b893512 Binary files /dev/null and b/BACKUP/ART110/HDS23.IMG differ diff --git a/BACKUP/ART110/HDS24.IMG b/BACKUP/ART110/HDS24.IMG new file mode 100644 index 0000000..1298604 Binary files /dev/null and b/BACKUP/ART110/HDS24.IMG differ diff --git a/BACKUP/ART110/HDS25.IMG b/BACKUP/ART110/HDS25.IMG new file mode 100644 index 0000000..2433d32 Binary files /dev/null and b/BACKUP/ART110/HDS25.IMG differ diff --git a/BACKUP/ART110/HDS26.IMG b/BACKUP/ART110/HDS26.IMG new file mode 100644 index 0000000..7a3401a Binary files /dev/null and b/BACKUP/ART110/HDS26.IMG differ diff --git a/BACKUP/ART110/HDS3.IMG b/BACKUP/ART110/HDS3.IMG new file mode 100644 index 0000000..474ce6d Binary files /dev/null and b/BACKUP/ART110/HDS3.IMG differ diff --git a/BACKUP/ART110/HDS4.IMG b/BACKUP/ART110/HDS4.IMG new file mode 100644 index 0000000..96d415c Binary files /dev/null and b/BACKUP/ART110/HDS4.IMG differ diff --git a/BACKUP/ART110/HDS5.IMG b/BACKUP/ART110/HDS5.IMG new file mode 100644 index 0000000..8b9948e Binary files /dev/null and b/BACKUP/ART110/HDS5.IMG differ diff --git a/BACKUP/ART110/HDS6.IMG b/BACKUP/ART110/HDS6.IMG new file mode 100644 index 0000000..facec71 Binary files /dev/null and b/BACKUP/ART110/HDS6.IMG differ diff --git a/BACKUP/ART110/HDS7.IMG b/BACKUP/ART110/HDS7.IMG new file mode 100644 index 0000000..4902ace Binary files /dev/null and b/BACKUP/ART110/HDS7.IMG differ diff --git a/BACKUP/ART110/HDS8.IMG b/BACKUP/ART110/HDS8.IMG new file mode 100644 index 0000000..d83a52d Binary files /dev/null and b/BACKUP/ART110/HDS8.IMG differ diff --git a/BACKUP/ART110/HDS9.IMG b/BACKUP/ART110/HDS9.IMG new file mode 100644 index 0000000..2c72e93 Binary files /dev/null and b/BACKUP/ART110/HDS9.IMG differ diff --git a/BACKUP/ART110/HDSMSC1.IMG b/BACKUP/ART110/HDSMSC1.IMG new file mode 100644 index 0000000..f042161 Binary files /dev/null and b/BACKUP/ART110/HDSMSC1.IMG differ diff --git a/BACKUP/ART110/HDSMSC2.IMG b/BACKUP/ART110/HDSMSC2.IMG new file mode 100644 index 0000000..2ecf3e7 Binary files /dev/null and b/BACKUP/ART110/HDSMSC2.IMG differ diff --git a/BACKUP/ART110/HDSMSC3.IMG b/BACKUP/ART110/HDSMSC3.IMG new file mode 100644 index 0000000..d132d61 Binary files /dev/null and b/BACKUP/ART110/HDSMSC3.IMG differ diff --git a/BACKUP/ART110/HDSMSC4.IMG b/BACKUP/ART110/HDSMSC4.IMG new file mode 100644 index 0000000..6c33398 Binary files /dev/null and b/BACKUP/ART110/HDSMSC4.IMG differ diff --git a/BACKUP/ART110/HDSMSC5.IMG b/BACKUP/ART110/HDSMSC5.IMG new file mode 100644 index 0000000..8f4fdcb Binary files /dev/null and b/BACKUP/ART110/HDSMSC5.IMG differ diff --git a/BACKUP/ART110/HDSMSC6.IMG b/BACKUP/ART110/HDSMSC6.IMG new file mode 100644 index 0000000..e86f4d2 Binary files /dev/null and b/BACKUP/ART110/HDSMSC6.IMG differ diff --git a/BACKUP/ART110/HDSMSC7.IMG b/BACKUP/ART110/HDSMSC7.IMG new file mode 100644 index 0000000..a5fb288 Binary files /dev/null and b/BACKUP/ART110/HDSMSC7.IMG differ diff --git a/BACKUP/ART110/HDSMSC8.IMG b/BACKUP/ART110/HDSMSC8.IMG new file mode 100644 index 0000000..0d83eaf Binary files /dev/null and b/BACKUP/ART110/HDSMSC8.IMG differ diff --git a/BACKUP/ART110/HOOP.IMG b/BACKUP/ART110/HOOP.IMG new file mode 100644 index 0000000..fa6a223 Binary files /dev/null and b/BACKUP/ART110/HOOP.IMG differ diff --git a/BACKUP/ART110/HOT.IMG b/BACKUP/ART110/HOT.IMG new file mode 100644 index 0000000..5e101b4 Binary files /dev/null and b/BACKUP/ART110/HOT.IMG differ diff --git a/BACKUP/ART110/HOTCIRCL.IMG b/BACKUP/ART110/HOTCIRCL.IMG new file mode 100644 index 0000000..d122202 Binary files /dev/null and b/BACKUP/ART110/HOTCIRCL.IMG differ diff --git a/BACKUP/ART110/HOTSPOT.IMG b/BACKUP/ART110/HOTSPOT.IMG new file mode 100644 index 0000000..c1e857d Binary files /dev/null and b/BACKUP/ART110/HOTSPOT.IMG differ diff --git a/BACKUP/ART110/INFOWIN.IMG b/BACKUP/ART110/INFOWIN.IMG new file mode 100644 index 0000000..80d749d Binary files /dev/null and b/BACKUP/ART110/INFOWIN.IMG differ diff --git a/BACKUP/ART110/INGA16.IMG b/BACKUP/ART110/INGA16.IMG new file mode 100644 index 0000000..aa41a5c Binary files /dev/null and b/BACKUP/ART110/INGA16.IMG differ diff --git a/BACKUP/ART110/LEDS1.IMG b/BACKUP/ART110/LEDS1.IMG new file mode 100644 index 0000000..911fad0 Binary files /dev/null and b/BACKUP/ART110/LEDS1.IMG differ diff --git a/BACKUP/ART110/MAPPER.INI b/BACKUP/ART110/MAPPER.INI new file mode 100644 index 0000000..6c47dd9 --- /dev/null +++ b/BACKUP/ART110/MAPPER.INI @@ -0,0 +1,27 @@ +# +# MAPPER.INI +# +# lists all the files that mapper will look at. Keep this file in IMGDIR. +# + +#raw file address file + +;misc.irw misc.lod + +;bb5.irw bb5.lod + +bb.irw bb.lod + +bb2.irw bb2.lod + +bb3.irw bb3.lod + +bb4.irw bb4.lod + +bb6.irw bb6.lod + +bb7.irw bb7.lod + +bb8.irw bb8.lod + +bbmug.irw bbmug.lod diff --git a/BACKUP/ART110/MISC.LOD b/BACKUP/ART110/MISC.LOD new file mode 100644 index 0000000..7e112f3 --- /dev/null +++ b/BACKUP/ART110/MISC.LOD @@ -0,0 +1,581 @@ +***> 2000000,0 +; +PON> +XOF> +ZOF> +; +IHDR PAL:L +; +ASM> junkxxxx +;Loads DIAGP palette +diagp.img +---> DIAGPIMG +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> COURT.TBL +; +FRM> COURT +; +crtref.img +---> ref01n,ref02n,ref03n,ref04n,ref05n,ref06n,ref07n,ref08n +---> tabletop +---> ad01_nl,ad01_nr +---> ad01_ref_nl,ad01_ref_nr +; +nbacrowd.img +---> SIDECHK,SIDECAMS +---> TOPCRV,BOTCRV,TOPCHK,BOTCHK +---> STAIRS01,STAIRS02,STAIRS03,bk_flr +---> COACH01,BNCHPL01 +---> CR0FST01n,CR0FST02n,CR0FST03n,CR0FST04n,CR0FST05n,CR0FST06n,CR0FST07n +---> CR2FST01,CR2FST02,CR2FST03,CR2FST04,CR2FST05,CR2FST06,CR2FST07 +---> CR3FST01,CR3FST02,CR3FST03,CR3FST04,CR3FST05,CR3FST06,CR3FST07 +---> CR1SEC01,CR1SEC02,CR1SEC03,CR1SEC04,CR1SEC05,CR1SEC06,CR1SEC07 +---> CR2SEC01,CR2SEC02,CR2SEC03,CR2SEC04,CR2SEC05,CR2SEC06,CR2SEC07 +---> CR3SEC01,CR3SEC02,CR3SEC03,CR3SEC04,CR3SEC05,CR3SEC06,CR3SEC07 +---> CR4SEC01,CR4SEC02,CR4SEC03,CR4SEC04,CR4SEC05,CR4SEC06,CR4SEC07 +---> CR5SEC01,CR5SEC02,CR5SEC03,CR5SEC04,CR5SEC05,CR5SEC06,CR5SEC07 +---> CR1THD01,CR1THD02,CR1THD03,CR1THD04,CR1THD05,CR1THD06,CR1THD07 +---> CR2THD01,CR2THD02,CR2THD03,CR2THD04,CR2THD05,CR2THD06,CR2THD07 +---> CR3THD01,CR3THD02,CR3THD03,CR3THD04,CR3THD05,CR3THD06,CR3THD07 +---> CR4THD01 +; +ASM> IMGTBL.ASM +GLO> IMGTBL.GLO +; +tvscore.img +---> DoubleOT,TripleOT,endof1,endof3,endof4,halftime +---> please,start,insert,tocontrol +---> one,two,three,four,overtime,final +; +halftime.img +---> HTSTAT01,HTSTAT02,HTSTAT03,HTSTAT04 +---> HTFIRE01,HTFIRE02,HTFIRE03,HTFIRE04,HTFIRE05 +---> HTFIRE06,HTFIRE07,HTFIRE08,HTFIRE09,HTFIRE10 +---> HLFSTATS +; +optscr.img +---> SPOTLTA1 +---> SPOTLTA2,SPOTLTA3,SPOTLTA4,SPOTLTA5,SPOTLTB1,SPOTLTB2,SPOTLTB3,SPOTLTB4 +---> SPOTLTB5,SPOTLTC1,SPOTLTC2,SPOTLTC3,SPOTLTC4,SPOTLTC5,BIGBAL1 +---> SMBAL1,SMBALSA1,SMBALSA2,SMBALSB1 +---> SMBALSB2,SMBALSC1,SMBALSC2,BGBALSA1,BGBALSA2,BGBALSB1,BGBALSB2,BGBALSC1 +---> BGBALSC2 +; +transbar.img +ZON> +---> TRANBR01,TRANBR02,TRANBR03,TRANBR04,TRANBR05 +---> TRANBR06,TRANBR07,TRANBR08,TRANBR09,TRANBR10 +---> TRANBR11,TRANBR12,TRANBR13,TRANBR14,TRANBR15 +ZOF> +; +time.img +---> BRSH1800,BRSH1801,BRSH1802,BRSH1803,BRSH1804,BRSH1805,BRSH1806,BRSH1807 +---> BRSH1808,BRSH1809,BRSH18CO +; +attstuff.img +---> ATT_HT,ATT_WT,ATT_SP,ATT_PW,ATT_SH,ATT_DU,ATT_ST,ATT_BL +---> END_HT,END_WT,END_SP,END_PW,END_SH,END_DU,END_ST,END_BL +PPP> 3 +---> NOTCH_00,NOTCH_01,NOTCH_02,NOTCH_03,NOTCH_04,NOTCH_05 +---> NOTCH_06,NOTCH_07,NOTCH_08,NOTCH_09,NOTCH_10 +PPP> 0 +; +yes_no_4.img +---> NO,NOP,YES,YESP +---> SMNOP,SMYESP,SMYES,SMNO +---> SMNSHP,SMYSHP,ONE +ZON> +---> F_NO1,F_NO2 +ZOF> +; +fog.img +---> FOG_01,FOG_02,FOG_03,FOG_04,FOG_05,FOG_06,FOG_07,FOG_08,FOG_09 +---> FOG_10,FOG_11,FOG_12,FOG_13,FOG_14,FOG_15,FOG_16 +; +privilg.img +---> CHECK,PRVLGCK1 +---> TEX_HA,TEX_SD,TEX_AR,TEX_BD,TEX_BB,TEX_ST,TEX_BH +; +designd.img +---> HDAROW,HDBAR,HDSPTLT,HDSPTLT2 +ZON> +---> BIGBOX +ZOF> +---> TUBE01,TUBE02,TUBE03 +---> DITH_A,DITH_B,DITH_C,DITH_D +---> TIMEPRT,CREDTOOB +---> SPOTFL,TUBESH,BBTXT +---> TOTALBR,TEXTBAR +---> NNABAR,NNBAR,NNAROW +---> M_HOTSPT,M_NOARRW,M_BIGHED,M_QIKHND,M_UNLIMT,M_GOALTN,M_HYPRSP +---> M_FSTPAS,M_MAXSPD,M_BIGBAL,M_NOPUSH,M_MAXPOW,M_SHTPCT,M_BABYMD +---> M_STELTH +; +buttons.img +---> BUTTON_A,BUTTON_B,BUTTON_C,BUTTON_D,BUTTON_E,BUTTON_F,BUTTON_G,BUTTON_H +ZON> +---> BSHAD_A1,BSHAD_A2,BSHAD_B1,BSHAD_B2,BSHAD_C1,BSHAD_C2,BSHAD_D1,BSHAD_D2 +---> BSHAD_E1,BSHAD_E2,BSHAD_F1,BSHAD_F2 +---> BSHAD_G1,BSHAD_G2,BSHAD_H1,BSHAD_H2 +ZOF> +---> TXT_VIEW,TXT_HEAD,TXT_UNIFRM,TXT_ATTR,TXT_NEWN,TXT_SAVE +---> TXT_PRIV,TXT_NICK1 +; +teamsel4.img +---> TEAMBR,HEADER,SQUAD1,SQUAD2 +---> RHEAD,LHEAD,SCORE +---> SQDBAL01,SQDBAL02,SQDBAL03,SQDBAL04,SQDBAL05 +---> SQDBAL06,SQDBAL07,SQDBAL08,SQDBAL09,SQDBAL10,SQDBAL11,SQDBAL12,SQDBAL13 +---> SQDBAL14,SQDBAL15,SQDBAL16,SQDBAL17,SQDBAL18,SQDBAL19,SQDBAL20 +---> SQDBAL21,SQDBAL22,SQDBAL23,SQDBAL24,SQDBAL25,SQDBAL26,SQDBAL27 +---> SQDBAL28,SQDBAL29,SQDBAL30 +---> TEAMBR2 +; +attbar2.img +PPP> 4 +---> ATTBAR00,ATTBAR01,ATTBAR02,ATTBAR03,ATTBAR04,ATTBAR05 +---> ATTBAR06,ATTBAR07,ATTBAR08,ATTBAR09,ATTBAR10 +PPP> 0 +---> ATTRIBS +; +attract.img +---> NBABAR,NBALOGO +; +gamegraf.img +CON> +---> JMPBAL_L,JMPBAL_R,SCORTUBE,LOGOTUBE +---> RECVRBLK +---> clock,clock2 +COF> +; +cities2.img +PON> +---> city_atl +---> city_bos +POF> +---> city_cha,city_chi,city_cle,city_dal,city_den,city_det +---> city_gol,city_hou,city_ind,city_lac,city_lal,city_mia +---> city_mil,city_min,city_nej,city_ney,city_orl,city_phi,city_pho +---> city_por,city_sac,city_san,city_sea,city_tor,city_uta,city_van,city_was +---> DEFAULT,CUST1,CUST2,CUST3,CUST4,CUST5 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W +; +referee.img +CON> +PON> +;---> REFPNT1,REFPNT2,REFPNT3,REFPNT4,REFPNT5,REFPNT6,REFPNT7,REFPNT8,REFPNT9 +;---> REFPNT10,REFPNT11,REFPNT12,REFPNT13,REFPNT14,REFPNT15,REFPNT16,REFPNT17 +;---> REFPNT18,REFPNT19 +---> REFWHS1,REFWHS2,REFWHS3,REFWHS4,REFWHS5,REFWHS6 +---> REFWHS7,REFWHS8,REFWHS9 +---> REFTOS1,REFTOS2,REFTOS3,REFTOS4 +---> REFTOS5,REFTOS6,REFTOS7,REFTOS8,REFTOS9,REFTOS10,REFTOS11,REFTOS12 +---> REFTOS13,REFTOS14,REFTOS15,REFTOS16,REFTOS17,REFTOS18,REFTOS19,REFRUN1 +---> REFRUN2,REFRUN3,REFRUN4,REFRUN5,REFRUN6,REFRUN7,REFRUN8,REFRUN9 +---> REFRUN10,REFRUN11,REFSTN1,REFSTN2,REFSTN4 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +credball.img +PON> +---> t0000,tX000,tXX00,tXXX0 +---> tXXXX,t1000,t1100,t1110 +---> t1111,tX100,tX110,tX111 +---> tXX10,tXX11,tXXX1 +COF> +; +pnames.img +---> ABDULRAU,AHARDAWAY,AJOHNSON,WANDERSON,ANTHONY,AUGMON,BAKER +---> BARROS,BBARRY,BENJAMIN,BENOIT,BGRANT,BLAYLOCK +---> BOWENS,BRADLEY,BRANDON,BREEVES,BROWN,BWILLIAM +---> CAMPBELL,CASSELL,CEBALLOS,CHEANEY,CHILDRES,CMILLS,CMORRIS +---> COLEMAN,COLES,CROBINSON,CROGERS,CURRY,DANILOVI +---> DDAVIS,DELLIS,DELNEGRO,DIVAC,DOUGLAS,DREXLER,DROBINSON,DSCOTT +---> DUMARS,EDNEY,EDWARDS,EJONES,ELLIOT,EMURDOCK +---> EWING,FERRY,FINLEY,FOX,GARNETT,GATTISON,GHILL,GILL,GILLIAM +---> GRANT_HC,GROBINSO,GUGLI,HARPER_D,HAWKINS,HENDERSO +---> HORNACEK,HORRY,HOUSTON,HOWARD,JACK,JHOWARD +---> JOHNSN_L,JSMITH,KANDERSON,KEDWARDS,KEMP,KERR,KIDD,KJOHNSON +---> KNORMAN,KONCAK,KUKOC,LAETTNER +---> LMURRAY,LONGLEY,MALONE_K,MANNING,MARCIULO +---> MASH,MASON,MCCLOUD,MCDYESS,MCKEE,MILLER +---> MJACKSON,MONTROSS,MOURN,MULLIN,MURESAN,TMURRAY,MUTUMBO +---> NANDERSON,OAKLEY,OBANNON,OLAJUWON,OMILLER +---> PACK,PAYTON,PERSON,PHILLS,PIPPEN,PJONES +---> PRICHARD,RADJA,RESPERT,RICE,RICH,RIDER +---> RODMAN,ROOKS,ROSE,RROGERS,SABONIS,SCHREMPF,SEIKALY +---> SFORD,SMITH,SMITS,SPREWELL,SSMITH,STACKHOU,STARKS,STOCKTON +---> STOUDAMI,STRICKLA,THARDAWAY,THILL,THORPE,TISDALE,TMILLS +---> VANEXEL,VAUGHT,VMAXWELL,WEATH +---> WEBBER,WILLIS,WPERSON,WRIGHT,WWILLIAM,ZIDEK +;Special guests: +---> DIVITA +; +sparks.img +---> spark2,spark3,spark4,spark5,spark1 +; +tvtext.img +---> PRESSBUTT,PRESSTURB +---> TopTenred,TopTengrn +---> TopTenblu,TopTenyel +---> start3,insert3,freplay3,join3 +---> start2,insert2,freeplay +---> FulGamered,FulGameblu,FulGamegrn,FulGameyel +---> onePlblu,onePlgrn,onePlyel,onePlred +---> Customblu,Customgrn,Customyel,Customred +---> TopFivblu,TopFivgrn,TopFivyel,TopFivred +---> TournDblu,TournDgrn,TournDyel,TournDred +---> TurnNSblu,TurnNSgrn,TurnNSyel,TurnNSred +---> WorldRblu,WorldRgrn,WorldRyel,WorldRred +---> Top10Dblu,Top10Dgrn,Top10Dyel,Top10Dred +---> BstDfPlblu,BstDfPlgrn,BstDfPlyel,BstDfPlred +---> BstOfPlblu,BstOfPlgrn,BstOfPlyel,BstOfPlred +---> Top5DPblu,Top5DPgrn,Top5DPyel,Top5DPred +---> Top5OPblu,Top5OPgrn,Top5OPyel,Top5OPred +---> Top10Oblu,Top10Ogrn,Top10Oyel,Top10Ored +---> CORECTblu,CORECTgrn,CORECTyel,CORECTred +---> INCRECTblu,INCRECTgrn,INCRECTyel,INCRECTred +---> InvaldNMblu,InvaldNMgrn,InvaldNMyel,InvaldNMred +---> TRIVIA1,TRIVIA2,TRIVIA3,TRIVIA4 +---> QUALIFYblu,QUALIFYgrn,QUALIFYyel,QUALIFYred +---> GrtWnSblu,GrtWnSgrn,GrtWnSyel,GrtWnSred +---> NbaChpblu,NbaChpgrn,NbaChpyel,NbaChpred +---> PRESSPASS +; +inga16.img +PON> +PPP> 5 +---> INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G,INGA16_H +---> INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O,INGA16_P +---> INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W,INGA16_X +---> INGA16_Y,INGA16_Z,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6 +---> INGA16_7,INGA16_8,INGA16_9,INGA16_0,INGA16DEL,INGA16SPC,INGA16END +---> INGA16COM,INGA16PER,INGA16SLS,INGA16QUE,INGA16COL,INGA16EXC +---> INGA16NUM,INGA16DOL,INGA16PCT,INGA16AND,INGA16AST,INGA16PRL,INGA16PRR +---> INGA16ADD,INGA16SUB,INGA16APO +PPP> 0 +; +vsscr.img +ZON> +---> VSB01,VSB02,VSB03,VSB04,VSB05,VSB06,VSB07,VSB08,VSB09 +---> VSS01,VSS02,VSS03,VSS04,VSS05,VSS06,VSS07,VSS08,VSS09 +ZOF> +---> CODE +; +bast7t.img +PON> +---> BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G,BAST7T_H,BAST7T_I +---> BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O,BAST7T_P,BAST7T_Q,BAST7T_R +---> BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W +COF> +---> BAST7T_X +CON> +---> BAST7T_Y,BAST7T_Z,BAST7T_1 +COF> +---> BAST7T_2 +CON> +---> BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7,BAST7T_8,BAST7T_9 +---> BAST7T_0,BAST7TAST,BAST7TEXC,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TLPR +---> BAST7TRPR,BAST7TDSH,BAST7TPLS,BAST7TCOM,BAST7TPER,BAST7TQUE,BAST7TSLS,BAST7TAPO +---> BAST7TCOL,BAST7TSEM +; +bast8.img +---> WIN4FREE,WINSTAY,WNRSSTAY +---> ASISTOFF,NOPUSH,SHOTPERC,BABYPLAY +---> TOURMODE,NOCPU,SECRETS +---> TEAMST,TEAMST4 +---> TRIVPTS,CORRECT,POINTS +PPP> 4 +---> BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G,BAST8_H,BAST8_I +---> BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O,BAST8_P,BAST8_Q,BAST8_R +---> BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W,BAST8_X,BAST8_Y,BAST8_Z,BAST8_0 +---> BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7,BAST8_8,BAST8_9 +---> BAST8COL,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8PRL,BAST8PRR,BAST8PER +---> BAST8COM,BAST8PLS,BAST8QUE,BAST8SLS,BAST8APO,BAST8SEM,BAST8SPC,BAST8EXC +; +bast8t.img +---> BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H +---> BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P +---> BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X +---> BAST8T_Y,BAST8T_Z,BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5 +---> BAST8T_6,BAST8T_7,BAST8T_8,BAST8T_9,BAST8TCOL,BAST8TNUM,BAST8TDOL +---> BAST8TPCT,BAST8TAND,BAST8TPRL,BAST8TPRR,BAST8TPER,BAST8TCOM,BAST8TAPO +---> BAST8TPLS,BAST8TQUE,BAST8TSLS,BAST8TSEM,BAST8TSPC,BAST8TEXC +; +bast10.img +---> BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G,BAST10_H +---> BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O,BAST10_P +---> BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W,BAST10_X +---> BAST10_Y,BAST10_Z,BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5 +---> BAST10_6,BAST10_7,BAST10_8,BAST10_9,BAST10EXC,BAST10NUM,BAST10DOL +---> BAST10PCT,BAST10AND,BAST10PRL,BAST10PRR,BAST10PLS,BAST10APO,BAST10DSH +---> BAST10SLS,BAST10COM,BAST10PER,BAST10SEM,BAST10COL,BAST10QUE +PPP> 5 ;don't change this...its for echoing enter inits... +---> BAST10SPC +PPP> 0 +; +bast18.img +---> BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G +---> BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O +---> BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W +---> BAST18_X,BAST18_Y,BAST18_Z,BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4 +---> BAST18_5,BAST18_6,BAST18_7,BAST18_8,BAST18_9,BAST18EXC,BAST18NUM +---> BAST18DOL,BAST18PCT,BAST18AND,BAST18PRL,BAST18PRR,BAST18ADD,BAST18DSH +---> BAST18SLS,BAST18PER,BAST18COM,BAST18COL,BAST18APO,BAST18_1a +; +brush50.img +---> BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G,BRSH50_H +---> BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O,BRSH50_P +---> BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W,BRSH50_X +---> BRSH50_Y,BRSH50_Z,BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5 +---> BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9,BRSH50AND,BRSH50COL,BRSH50COM +---> BRSH50DOL,BRSH50EXC,BRSH50NUM,BRSH50PCT,BRSH50PER,BRSH50PRL,BRSH50PRR +---> BRSH50QUE,BRSH50SLS +; +brush20f.img +PON> +PPP> 5 +---> BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G +---> BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O +---> BRSH20_P,BRSH20_Q +COF> +---> BRSH20_R +CON> +---> BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W +---> BRSH20_X,BRSH20_Y,BRSH20_Z,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 +---> BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9,BRSH20_0,BRSH20COM,BRSH20PER +---> BRSH20SLS,BRSH20QUE,BRSH20EXC,BRSH20PCT,BRSH20COL +PPP> 0 +---> SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05,SQUD_06,SQUD_07,SQUD_08 +---> SQUD_09,SQUD_10,SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17 +---> SQUD_18,SQUD_19,SQUD_20 +---> useupbx,TRIVIA,CONTEST +; +ballfont.img +---> FNT_SEL,FNT_ENT,FNT_CRE +; +brush12.img +PON> +PPP> 5 +---> BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F +---> BRSH12_G,BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L +---> BRSH12_M,BRSH12_N,BRSH12_O,BRSH12_P,BRSH12_Q,BRSH12_R +---> BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W,BRSH12_X +---> BRSH12_Y,BRSH12_Z +---> BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 +---> BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +---> BRSH12QUE,BRSH12EXC,BRSH12COL +---> BRSH12DOL,BRSH12PER,BRSH12COM,BRSH12SLS,BRSH12NUM,BRSH12PCT,BRSH12AND +---> BRSH12PRL,BRSH12PRR,BRSH12DAS +PPP> 0 +; +brush10.img +PON> +PPP> 5 +---> BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F +---> BRSH10_G,BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L +---> BRSH10_M,BRSH10_N,BRSH10_O,BRSH10_P,BRSH10_Q,BRSH10_R +---> BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W,BRSH10_X +---> BRSH10_Y,BRSH10_Z +---> BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5 +---> BRSH10_6,BRSH10_7,BRSH10_8,BRSH10_9 +---> BRSH10COM,BRSH10PER,BRSH10SLS +---> BRSH10QUE,BRSH10EXC,BRSH10DOL,BRSH10PCT,BRSH10AND,BRSH10NUM,BRSH10PRL +---> BRSH10PRR,BRSH10COL +PPP> 0 +; +statstxt.img +---> scorshad1,scorshad2 +---> stx_all,stx_aveallow,stx_avescore,stx_created,stx_current,stx_defeated +---> stx_defrank,stx_havenot,stx_l,stx_nbateams,stx_nextcpu,stx_offrank +---> stx_ofthe27,stx_overall,stx_record,stx_tournwin,stx_w,stx_worldrec +---> stx_youhave,stx_avepoint,stx_lostto,stx_norecord,stx_pct,stx_wins +---> credbox +COF> +---> stshad1,stshad2 +CON> +; +threepnt.img +---> THREPNTS +IHDR PAL:L +---> THREP1,THREP2,THREP3,THREP4,THREP5,THREP6,THREP7,THREP8,THREP9,THREP10 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +sgmd8.img +---> plyr1,plyr2,plyr3,plyr4 +; +ogmd10.img +COF> +---> getready,_1quart,continue +---> _2quart,_3quart +---> _4quart,overtme +---> congrats_l,winstay_l,chalneed_l,chalacc_l,winfree +---> TMATE +---> CHALENG +CON> +; +infowin.img +---> dronetxt,firstwin,colormessage,joycontrol,red,blue,green,yellow +---> message1,message2,message3,message4,message5,message6,message7 +---> message9,message2a +---> infobox,CREDNOT,WINPIECE +; +expl_old.img +PON> +---> CLD1A +---> CLDB1 +---> CLDB1YELL +---> CLDB1WHT,CLDB1ORNG,CLDB1LGRY,CLDB1GRN,CLDB1PURP +POF> +---> CLD2,CLD3,CLD4,CLD4A,CLD4B,CLD5,CLD6,CLD7,CLD8,CLD9,CLD10,CLD11 +---> CLDB2,CLDB3,CLDB4 +PON> +; +flash.img +PPP> 5 +---> flash1,flash4 +---> flash3,flash3a,flash5,flash6,flash2 +PPP> 0 +; +;ASM> ARROW.TBL +; +arrows.img +---> arrow1l,arrow1r,arrow2l,arrow2r,arrow3l,arrow3r,arrow4l,arrow4r +---> arrow1t,arrow2t,arrow3t,arrow4t +---> arrow1l2p,arrow1r2p,arrow2l2p,arrow2r2p +---> arrow1t2p,arrow2t2p +; +ASM> CITY.TBL +; +citnames.img +---> ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND +---> LA_CLIP,LA_LAKS +---> MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT,SEA,UTAH,WASH +---> TORO,VANC +---> SCOR18_0,SCOR18_1,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5 +---> SCOR18_6,SCOR18_7,SCOR18_8,SCOR18_9 +; +ASM> LEDS.TBL +GLO> FONTTBL.GLO +; +leds1.img +ZOF> +COF> +---> QUARTR01,QUARTR02,QUARTR03,QUARTR04,OT01,OT02,OT03,OT04,SHOTPER,FREEPLT +---> MINCOL00,MINCOL01,MINCOL02,MINCOL03 +---> TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 +---> TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 +---> LED_00 +IHDR SAG:L +;These images are not referenced - but needed... +---> LED_0,LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LED_9 +---> LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,LED_17,LED_18,LED_19 +---> LED_20,LED_21,LED_22,LED_23,LED_24,LED_25,LED_26,LED_27,LED_28,LED_29 +---> LED_30,LED_31,LED_32,LED_33,LED_34,LED_35,LED_36,LED_37,LED_38,LED_39 +---> LED_40,LED_41,LED_42,LED_43,LED_44,LED_45,LED_46,LED_47,LED_48,LED_49 +---> LED_50,LED_51,LED_52,LED_53,LED_54,LED_55,LED_56,LED_57,LED_58,LED_59 +---> LED_60,LED_61,LED_62,LED_63,LED_64,LED_65,LED_66,LED_67,LED_68,LED_69 +---> LED_70,LED_71,LED_72,LED_73,LED_74,LED_75,LED_76,LED_77,LED_78,LED_79 +---> LED_80,LED_81,LED_82,LED_83,LED_84,LED_85,LED_86,LED_87,LED_88,LED_89 +---> LED_90,LED_91,LED_92,LED_93,LED_94,LED_95,LED_96,LED_97,LED_98,LED_99 +; +---> LED_100,LED_101,LED_102,LED_103,LED_104,LED_105,LED_106,LED_107,LED_108,LED_109 +---> LED_110,LED_111,LED_112,LED_113,LED_114,LED_115,LED_116,LED_117,LED_118,LED_119 +---> LED_120,LED_121,LED_122,LED_123,LED_124,LED_125,LED_126,LED_127,LED_128,LED_129 +---> LED_130,LED_131,LED_132,LED_133,LED_134,LED_135,LED_136,LED_137,LED_138,LED_139 +---> LED_140,LED_141,LED_142,LED_143,LED_144,LED_145,LED_146,LED_147,LED_148,LED_149 +---> LED_150 +---> LED_MAX +---> LED_0A,LED_1A,LED_2A,LED_3A,LED_4A,LED_5A,LED_6A,LED_7A,LED_8A,LED_9A +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> TEXT.TBL +; +trogf15.img +COF> +POF> +---> FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 +---> FON15A,FON15B,FON15C,FON15CR,FON15D,FON15E,FON15F,FON15G,FON15H,FON15I +---> FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P,FON15Q,FON15R,FON15S +---> FON15T,FON15U,FON15V,FON15W,FON15X,FON15Y,FON15Z,FON15and,FON15apos +---> FON15apos1,FON15ast,FON15backsp,FON15brackl,FON15brackr,FON15break +---> FON15carr,FON15colon,FON15comma,FON15dash,FON15doll,FON15engPOUN +---> FON15equal,FON15excla,FON15forsp,FON15la,FON15lb,FON15lc,FON15ld +---> FON15le,FON15less,FON15lf,FON15lg,FON15lh,FON15li,FON15line,FON15lj +---> FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp,FON15lq,FON15lr +---> FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx,FON15ly,FON15lz +---> FON15more,FON15paren2l,FON15paren2r,FON15parenl,FON15parenr,FON15perc +---> FON15period,FON15plus,FON15poun,FON15quest,FON15quote,FON15rquote +---> FON15semicol +; +trogf7.img +---> FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H,FONT7I,FONT7J +---> FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P,FONT7Q,FONT7R,FONT7S,FONT7T +---> FONT7U,FONT7V,FONT7W,FONT7X,FONT7Y,FONT7Z,FONT7a,FONT7b,FONT7c,FONT7d +---> FONT7e,FONT7f,FONT7g,FONT7h,FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n +---> FONT7o,FONT7p,FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT71,FONT72 +---> FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79,FONT70,FONT7excla +---> FONT7pound,FONT7doll,FONT7percen,FONT7and,FONT7ast,FONT7parenl +---> FONT7parenr,FONT7dash,FONT7line,FONT7equal,FONT7plus,FONT7bracl +---> FONT7bracr,FONT7backsp,FONT7paren2l,FONT7paren2r,FONT7break +---> FONT7semicol,FONT7apost,FONT7colon,FONT7quote,FONT7comma,FONT7period +---> FONT7forsp,FONT7less,FONT7more,FONT7quest +PON> +; +ASM> ROBOIMG.TBL +GLO> ROBOIMG.GLO +; +robotron.img +COF> +---> robo_bad,bullet_hrz,bullet_vrt,bullet_bck,bullet_fnt,grunt_1,grunt_2 +---> grunt_3,robo_dead +;---> brain_l1,brain_l2,brain_l3,brain_r1,brain_r2,brain_r3 +;---> brain_d1,brain_d2,brain_d3,brain_u1,brain_u2,brain_u3 +---> enf_1,enf_g1 +---> enf_g2,enf_g3,enf_g4,enf_g5,spark_1,spark_2,spark_3,spark_4,man_l1 +---> man_l2,man_l3,man_r1,man_r2,man_r3,man_d1,man_d2,man_d3,man_u1,man_u2 +---> man_u3,skull,one_k,two_k,three_k,four_k,five_k,mom_l1,mom_l2,mom_l3 +---> mom_r1,mom_r2,mom_r3,mom_d1,mom_d2,mom_d3,mom_u1,mom_u2,mom_u3,dad_l1 +---> dad_l2,dad_l3,dad_r1,dad_r2,dad_r3,dad_d1,dad_d2,dad_d3,dad_u1,dad_u2 +---> dad_u3,kid_l1,kid_l2,kid_l3,kid_r1,kid_r2,kid_r3,kid_d1,kid_d2,kid_d3 +---> kid_u1,kid_u2,kid_u3,hulk_l1,hulk_l2,hulk_l3,hulk_ud1,hulk_ud2,hulk_ud3 +---> hulk_r1,hulk_r2,hulk_r3,rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5 +---> rfont_6,rfont_7,rfont_8,rfont_9,rfont_exc,rfont_comma,rfont_period +---> rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g,rfont_h,rfont_i +---> rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o,rfont_p,rfont_q,rfont_r +---> rfont_s,rfont_t,rfont_u,rfont_v,rfont_w,rfont_x,rfont_y,rfont_z +---> rfont_lparens,rfont_rparens,rfont_fslash +;---> rfont_arrow +---> wave_text,circle_1 +---> circle_2,circle_3,circle_4,circle_5,circle_6,circle_7,circle_8,rsmall_0 +---> rsmall_1,rsmall_2,rsmall_3,rsmall_4,rsmall_5,rsmall_6,rsmall_7,rsmall_8 +---> rsmall_9,grunt_xv1,grunt_xv2,grunt_xv3,grunt_xv4,grunt_xdb1,grunt_xdb2 +---> grunt_xdb3,grunt_xdb4,grunt_xh1,grunt_xh2,grunt_xh3,grunt_xh4 +---> grunt_xdf1,grunt_xdf2,grunt_xdf3,grunt_xdf4,star_1,star_2,star_3 +---> crystal_1,crystal_2,crystal_3,diamond_1,diamond_2,diamond_3,R2084_1 +---> R2084_2,R2084_3,pcube_1,pcube_2,pcube_3,spiral_1,spiral_2,spiral_3 +---> square_1,square_2,square_3,triangle_1,triangle_2,triangle_3,rectangle_1 +---> rectangle_2,rectangle_3,enf_xv1,enf_xv2,enf_xv3,enf_xv4,enf_xv5,enf_xb1 +---> enf_xb2,enf_xb3,enf_xb4,enf_xh1,enf_xh2,enf_xh3,enf_xh4,enf_xf1,enf_xf2 +---> enf_xf3,enf_xf4,tank_g1,tank_g2,tank_g3,tank_g4,quark_1,quark_2,quark_3 +---> quark_4,quark_5,quark_6,quark_7,quark_8,tank_1,tank_2,tank_3,tank_4 +---> shell +CON> +; +;  ;THESE ARE CHARACTERS TO MAKE DIFFERENT! +ASM> IMGTBL.ASM +GLO> BGNDTBL.GLO +; +BBB> BLANKJAM +; +BBB> TEAMSEL4 +BBB> ENTER4 +BBB> OPTSCR +;BBB> VSSCR +BBB> SPORTBG +BBB> ATTRACT +BBB> HALFTIME diff --git a/BACKUP/ART110/MUGS1.IMG b/BACKUP/ART110/MUGS1.IMG new file mode 100644 index 0000000..89bb639 Binary files /dev/null and b/BACKUP/ART110/MUGS1.IMG differ diff --git a/BACKUP/ART110/MUGS2.IMG b/BACKUP/ART110/MUGS2.IMG new file mode 100644 index 0000000..a9929ea Binary files /dev/null and b/BACKUP/ART110/MUGS2.IMG differ diff --git a/BACKUP/ART110/MUGS3.IMG b/BACKUP/ART110/MUGS3.IMG new file mode 100644 index 0000000..1936988 Binary files /dev/null and b/BACKUP/ART110/MUGS3.IMG differ diff --git a/BACKUP/ART110/MUGS4.IMG b/BACKUP/ART110/MUGS4.IMG new file mode 100644 index 0000000..f3a9586 Binary files /dev/null and b/BACKUP/ART110/MUGS4.IMG differ diff --git a/BACKUP/ART110/MUGSMSC1.IMG b/BACKUP/ART110/MUGSMSC1.IMG new file mode 100644 index 0000000..c236751 Binary files /dev/null and b/BACKUP/ART110/MUGSMSC1.IMG differ diff --git a/BACKUP/ART110/MUGSMSC2.IMG b/BACKUP/ART110/MUGSMSC2.IMG new file mode 100644 index 0000000..310e5a8 Binary files /dev/null and b/BACKUP/ART110/MUGSMSC2.IMG differ diff --git a/BACKUP/ART110/MUGSMSC3.IMG b/BACKUP/ART110/MUGSMSC3.IMG new file mode 100644 index 0000000..a3675a1 Binary files /dev/null and b/BACKUP/ART110/MUGSMSC3.IMG differ diff --git a/BACKUP/ART110/MUGSMSC4.IMG b/BACKUP/ART110/MUGSMSC4.IMG new file mode 100644 index 0000000..14a97fc Binary files /dev/null and b/BACKUP/ART110/MUGSMSC4.IMG differ diff --git a/BACKUP/ART110/MUGSMSC5.IMG b/BACKUP/ART110/MUGSMSC5.IMG new file mode 100644 index 0000000..caab341 Binary files /dev/null and b/BACKUP/ART110/MUGSMSC5.IMG differ diff --git a/BACKUP/ART110/MUGSMSC6.IMG b/BACKUP/ART110/MUGSMSC6.IMG new file mode 100644 index 0000000..869a9cd Binary files /dev/null and b/BACKUP/ART110/MUGSMSC6.IMG differ diff --git a/BACKUP/ART110/MUGSMSC7.IMG b/BACKUP/ART110/MUGSMSC7.IMG new file mode 100644 index 0000000..cf68eaa Binary files /dev/null and b/BACKUP/ART110/MUGSMSC7.IMG differ diff --git a/BACKUP/ART110/MUGSMSC8.IMG b/BACKUP/ART110/MUGSMSC8.IMG new file mode 100644 index 0000000..ce2bfaa Binary files /dev/null and b/BACKUP/ART110/MUGSMSC8.IMG differ diff --git a/BACKUP/ART110/NBACROWD.IMG b/BACKUP/ART110/NBACROWD.IMG new file mode 100644 index 0000000..fac4024 Binary files /dev/null and b/BACKUP/ART110/NBACROWD.IMG differ diff --git a/BACKUP/ART110/NBAFADES.IMG b/BACKUP/ART110/NBAFADES.IMG new file mode 100644 index 0000000..47bdf26 Binary files /dev/null and b/BACKUP/ART110/NBAFADES.IMG differ diff --git a/BACKUP/ART110/NBAFHOOK.IMG b/BACKUP/ART110/NBAFHOOK.IMG new file mode 100644 index 0000000..0ae3a0b Binary files /dev/null and b/BACKUP/ART110/NBAFHOOK.IMG differ diff --git a/BACKUP/ART110/NBAJMPPS.IMG b/BACKUP/ART110/NBAJMPPS.IMG new file mode 100644 index 0000000..4bcedc2 Binary files /dev/null and b/BACKUP/ART110/NBAJMPPS.IMG differ diff --git a/BACKUP/ART110/NBALL.IMG b/BACKUP/ART110/NBALL.IMG new file mode 100644 index 0000000..f2fd2d1 Binary files /dev/null and b/BACKUP/ART110/NBALL.IMG differ diff --git a/BACKUP/ART110/NBASPNMV.IMG b/BACKUP/ART110/NBASPNMV.IMG new file mode 100644 index 0000000..3811406 Binary files /dev/null and b/BACKUP/ART110/NBASPNMV.IMG differ diff --git a/BACKUP/ART110/NBA_DEF1.IMG b/BACKUP/ART110/NBA_DEF1.IMG new file mode 100644 index 0000000..202fc48 Binary files /dev/null and b/BACKUP/ART110/NBA_DEF1.IMG differ diff --git a/BACKUP/ART110/NBA_DEF3.IMG b/BACKUP/ART110/NBA_DEF3.IMG new file mode 100644 index 0000000..c68a49e Binary files /dev/null and b/BACKUP/ART110/NBA_DEF3.IMG differ diff --git a/BACKUP/ART110/NBA_DEF4.IMG b/BACKUP/ART110/NBA_DEF4.IMG new file mode 100644 index 0000000..6fe4658 Binary files /dev/null and b/BACKUP/ART110/NBA_DEF4.IMG differ diff --git a/BACKUP/ART110/NBA_DNK1.IMG b/BACKUP/ART110/NBA_DNK1.IMG new file mode 100644 index 0000000..23bc494 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK1.IMG differ diff --git a/BACKUP/ART110/NBA_DNK2.IMG b/BACKUP/ART110/NBA_DNK2.IMG new file mode 100644 index 0000000..89172a9 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK2.IMG differ diff --git a/BACKUP/ART110/NBA_DNK3.IMG b/BACKUP/ART110/NBA_DNK3.IMG new file mode 100644 index 0000000..65b40dc Binary files /dev/null and b/BACKUP/ART110/NBA_DNK3.IMG differ diff --git a/BACKUP/ART110/NBA_DNK4.IMG b/BACKUP/ART110/NBA_DNK4.IMG new file mode 100644 index 0000000..97aa888 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK4.IMG differ diff --git a/BACKUP/ART110/NBA_DNK5.IMG b/BACKUP/ART110/NBA_DNK5.IMG new file mode 100644 index 0000000..6de9ce9 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK5.IMG differ diff --git a/BACKUP/ART110/NBA_DNK6.IMG b/BACKUP/ART110/NBA_DNK6.IMG new file mode 100644 index 0000000..a7e23ba Binary files /dev/null and b/BACKUP/ART110/NBA_DNK6.IMG differ diff --git a/BACKUP/ART110/NBA_DNK7.IMG b/BACKUP/ART110/NBA_DNK7.IMG new file mode 100644 index 0000000..3756803 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK7.IMG differ diff --git a/BACKUP/ART110/NBA_DNK8.IMG b/BACKUP/ART110/NBA_DNK8.IMG new file mode 100644 index 0000000..bdbb5c9 Binary files /dev/null and b/BACKUP/ART110/NBA_DNK8.IMG differ diff --git a/BACKUP/ART110/NBA_MAK1.IMG b/BACKUP/ART110/NBA_MAK1.IMG new file mode 100644 index 0000000..9ee1784 Binary files /dev/null and b/BACKUP/ART110/NBA_MAK1.IMG differ diff --git a/BACKUP/ART110/NBA_MSC1.IMG b/BACKUP/ART110/NBA_MSC1.IMG new file mode 100644 index 0000000..d9c497a Binary files /dev/null and b/BACKUP/ART110/NBA_MSC1.IMG differ diff --git a/BACKUP/ART110/NBA_MSC2.IMG b/BACKUP/ART110/NBA_MSC2.IMG new file mode 100644 index 0000000..1b4a762 Binary files /dev/null and b/BACKUP/ART110/NBA_MSC2.IMG differ diff --git a/BACKUP/ART110/NBA_MSC3.IMG b/BACKUP/ART110/NBA_MSC3.IMG new file mode 100644 index 0000000..926c427 Binary files /dev/null and b/BACKUP/ART110/NBA_MSC3.IMG differ diff --git a/BACKUP/ART110/NBA_MSC4.IMG b/BACKUP/ART110/NBA_MSC4.IMG new file mode 100644 index 0000000..045b9d9 Binary files /dev/null and b/BACKUP/ART110/NBA_MSC4.IMG differ diff --git a/BACKUP/ART110/NBA_PAS1.IMG b/BACKUP/ART110/NBA_PAS1.IMG new file mode 100644 index 0000000..5f9180b Binary files /dev/null and b/BACKUP/ART110/NBA_PAS1.IMG differ diff --git a/BACKUP/ART110/NBA_PAS2.IMG b/BACKUP/ART110/NBA_PAS2.IMG new file mode 100644 index 0000000..3d39ef7 Binary files /dev/null and b/BACKUP/ART110/NBA_PAS2.IMG differ diff --git a/BACKUP/ART110/NBA_PAS3.IMG b/BACKUP/ART110/NBA_PAS3.IMG new file mode 100644 index 0000000..0819b07 Binary files /dev/null and b/BACKUP/ART110/NBA_PAS3.IMG differ diff --git a/BACKUP/ART110/NBA_PAS4.IMG b/BACKUP/ART110/NBA_PAS4.IMG new file mode 100644 index 0000000..bb5f1b6 Binary files /dev/null and b/BACKUP/ART110/NBA_PAS4.IMG differ diff --git a/BACKUP/ART110/NBA_RUN1.IMG b/BACKUP/ART110/NBA_RUN1.IMG new file mode 100644 index 0000000..81490e0 Binary files /dev/null and b/BACKUP/ART110/NBA_RUN1.IMG differ diff --git a/BACKUP/ART110/NBA_RUN2.IMG b/BACKUP/ART110/NBA_RUN2.IMG new file mode 100644 index 0000000..75c8202 Binary files /dev/null and b/BACKUP/ART110/NBA_RUN2.IMG differ diff --git a/BACKUP/ART110/NBA_SHT1.IMG b/BACKUP/ART110/NBA_SHT1.IMG new file mode 100644 index 0000000..88f1481 Binary files /dev/null and b/BACKUP/ART110/NBA_SHT1.IMG differ diff --git a/BACKUP/ART110/NBA_SHT2.IMG b/BACKUP/ART110/NBA_SHT2.IMG new file mode 100644 index 0000000..1a6d2a2 Binary files /dev/null and b/BACKUP/ART110/NBA_SHT2.IMG differ diff --git a/BACKUP/ART110/NBA_SHT3.IMG b/BACKUP/ART110/NBA_SHT3.IMG new file mode 100644 index 0000000..f583f91 Binary files /dev/null and b/BACKUP/ART110/NBA_SHT3.IMG differ diff --git a/BACKUP/ART110/NBA_STN1.IMG b/BACKUP/ART110/NBA_STN1.IMG new file mode 100644 index 0000000..7cb1c20 Binary files /dev/null and b/BACKUP/ART110/NBA_STN1.IMG differ diff --git a/BACKUP/ART110/NBBD8.IMG b/BACKUP/ART110/NBBD8.IMG new file mode 100644 index 0000000..4a26aae Binary files /dev/null and b/BACKUP/ART110/NBBD8.IMG differ diff --git a/BACKUP/ART110/NEWLOGOS.IMG b/BACKUP/ART110/NEWLOGOS.IMG new file mode 100644 index 0000000..3b78aba Binary files /dev/null and b/BACKUP/ART110/NEWLOGOS.IMG differ diff --git a/BACKUP/ART110/OFFNBA.IMG b/BACKUP/ART110/OFFNBA.IMG new file mode 100644 index 0000000..0b4b600 Binary files /dev/null and b/BACKUP/ART110/OFFNBA.IMG differ diff --git a/BACKUP/ART110/OGMD10.IMG b/BACKUP/ART110/OGMD10.IMG new file mode 100644 index 0000000..5677505 Binary files /dev/null and b/BACKUP/ART110/OGMD10.IMG differ diff --git a/BACKUP/ART110/OPTSCR.BDB b/BACKUP/ART110/OPTSCR.BDB new file mode 100644 index 0000000..e20dfd3 --- /dev/null +++ b/BACKUP/ART110/OPTSCR.BDB @@ -0,0 +1,17 @@ +OPTSCR 2000 1000 255 2 8 14 +OPTSCR 887 1414 357 638 +BKGD 245 757 191 513 +4000 297 228 0 0 +4000 297 332 15 7 +4000 297 406 C 4 +4000 396 228 3 1 +4000 497 228 9 3 +4000 497 332 12 6 +4000 497 406 F 5 +4000 597 228 6 2 +4000 963 513 15 7 +4000 963 409 0 0 +4000 1062 409 3 1 +4000 1163 513 12 6 +4000 1163 409 9 3 +4000 1263 409 6 2 diff --git a/BACKUP/ART110/OPTSCR.BDD b/BACKUP/ART110/OPTSCR.BDD new file mode 100644 index 0000000..9ba7384 Binary files /dev/null and b/BACKUP/ART110/OPTSCR.BDD differ diff --git a/BACKUP/ART110/OPTSCR.IMG b/BACKUP/ART110/OPTSCR.IMG new file mode 100644 index 0000000..84e52a2 Binary files /dev/null and b/BACKUP/ART110/OPTSCR.IMG differ diff --git a/BACKUP/ART110/OUTDOOR.BIN b/BACKUP/ART110/OUTDOOR.BIN new file mode 100644 index 0000000..fca5620 Binary files /dev/null and b/BACKUP/ART110/OUTDOOR.BIN differ diff --git a/BACKUP/ART110/OUTDOOR.IMG b/BACKUP/ART110/OUTDOOR.IMG new file mode 100644 index 0000000..0c05275 Binary files /dev/null and b/BACKUP/ART110/OUTDOOR.IMG differ diff --git a/BACKUP/ART110/PLYRNAME.IMG b/BACKUP/ART110/PLYRNAME.IMG new file mode 100644 index 0000000..33d88f5 Binary files /dev/null and b/BACKUP/ART110/PLYRNAME.IMG differ diff --git a/BACKUP/ART110/PLYRNUBS.IMG b/BACKUP/ART110/PLYRNUBS.IMG new file mode 100644 index 0000000..0a795d9 Binary files /dev/null and b/BACKUP/ART110/PLYRNUBS.IMG differ diff --git a/BACKUP/ART110/PNAMES.IMG b/BACKUP/ART110/PNAMES.IMG new file mode 100644 index 0000000..91f9fef Binary files /dev/null and b/BACKUP/ART110/PNAMES.IMG differ diff --git a/BACKUP/ART110/PNAMES2.IMG b/BACKUP/ART110/PNAMES2.IMG new file mode 100644 index 0000000..fef47d9 Binary files /dev/null and b/BACKUP/ART110/PNAMES2.IMG differ diff --git a/BACKUP/ART110/PRIVILG.IMG b/BACKUP/ART110/PRIVILG.IMG new file mode 100644 index 0000000..4d05b72 Binary files /dev/null and b/BACKUP/ART110/PRIVILG.IMG differ diff --git a/BACKUP/ART110/PRIVILG2.IMG b/BACKUP/ART110/PRIVILG2.IMG new file mode 100644 index 0000000..27001a8 Binary files /dev/null and b/BACKUP/ART110/PRIVILG2.IMG differ diff --git a/BACKUP/ART110/PRIZES.IMG b/BACKUP/ART110/PRIZES.IMG new file mode 100644 index 0000000..ccd5991 Binary files /dev/null and b/BACKUP/ART110/PRIZES.IMG differ diff --git a/BACKUP/ART110/REFEREE.IMG b/BACKUP/ART110/REFEREE.IMG new file mode 100644 index 0000000..2464c90 Binary files /dev/null and b/BACKUP/ART110/REFEREE.IMG differ diff --git a/BACKUP/ART110/ROBOTRON.IMG b/BACKUP/ART110/ROBOTRON.IMG new file mode 100644 index 0000000..f5c6f98 Binary files /dev/null and b/BACKUP/ART110/ROBOTRON.IMG differ diff --git a/BACKUP/ART110/SGMD8.IMG b/BACKUP/ART110/SGMD8.IMG new file mode 100644 index 0000000..b9fe13f Binary files /dev/null and b/BACKUP/ART110/SGMD8.IMG differ diff --git a/BACKUP/ART110/SPARKS.IMG b/BACKUP/ART110/SPARKS.IMG new file mode 100644 index 0000000..04fa07e Binary files /dev/null and b/BACKUP/ART110/SPARKS.IMG differ diff --git a/BACKUP/ART110/SPORTBG.BDB b/BACKUP/ART110/SPORTBG.BDB new file mode 100644 index 0000000..c1509f9 --- /dev/null +++ b/BACKUP/ART110/SPORTBG.BDB @@ -0,0 +1,8 @@ +SPORTBG 2000 1000 255 1 6 6 +SPORTBG 82 492 94 434 +A00 174 308 9 3 +A00 174 223 6 2 +A00 174 143 0 0 +A00 374 308 F 5 +A00 374 223 3 1 +A00 374 143 C 4 diff --git a/BACKUP/ART110/SPORTBG.BDD b/BACKUP/ART110/SPORTBG.BDD new file mode 100644 index 0000000..4161c40 --- /dev/null +++ b/BACKUP/ART110/SPORTBG.BDD @@ -0,0 +1,720 @@ +6 +9 200 90 1 +utjsrqfslrpfrrirbfp\ildddhhddj`bgddee__d^\Z][[dT]WXXM^TTPPUeeeSYBJKOCOMNUNZCKVLSFHOIEEEHJHFBRB0FD@@D<<;F=???B9=?1B1=6;4445885;43?146&3545+*4%321)6*+$+,$*&(%2& +(//*) """!! +! +rrkjxfiiivqfrbjipaaihhlggg^^ddddgbf\g_eXd[dXd\VbT[dU[T[XZfKKKKKfHOOOLOHRSNeEPIFHGNGLKB0`B?FDLCFF;D@O<2F;;;;<=8>@=1?:=?2?<3;;9;3<22255&<4565632!1%343%%%&()2%)$+***"&!"&"$#! ! xqppfvqffwjslhljqfpqqfcldgghhd[__d[^gjVYcWW^[[[[WSbaaaYYVZPTMSFPOKYCVKRKFOVKRHHJ`J0RHFFIIDOD@F??H<==F<<;:@=?1?1?=;==5::9=22?13864?334)54%2123332((%(65!&())))"&1(&&"""$""/pxf{qxxxsttlltlkjbiiqpbhhhh_gjch[g^W^c\aYZcW^W^[X^ZYRRYYYZTWPLOPOSPSHKYVHVF7=2<<1246=25534;&223%&43%(*54*(%1!!% )%/1%%!%"## %#"  / +pqivxppskleultkkkjb\pqrhhdg[gbbgkccgd[]YaZWW^XTTTSVRKHYY?Y]PWTMTMMMMSLLFFHK?RRRR0RHLICOCFFHHBB?=C;H6=3;213;?15+844221!3&3&356(3&%2&(43!12&0&%*$"""("""" + ppirxieutttkklgtgktldlbichhdk^kfVbcjZ]g^bZZY\aKYYKfS^TUSRRK`HOSLSZIMPPI`RKKHHKFOCLFF;LD;??<D??<<<=C===9@9;<2?1?223=66=333<3334&212(32%2!%2%21!%&()(#$#"( $# !qvqqqxaqjkleulkltgudgggdllkjckd]Jf]^ghd[d_[b\YYpK\WPWWP\JRKYaRSMGPVLLSV?KHD><0<>F?2?<<=1?=;433=5321222<(5%332112&32!()(%3 )(!&+") *"###&"#"!!&%!   rivq{ppqivxoxjllksscsgcanqj^gk^gcfaaaaYYZS]^TbYS]bPTP\YOVZWPO`BRYKKVHHFHOLLLH?KKAA:=00B?<3;6;4==;;32?12<243!222&4&3!!1!6(23**)&%4") "##"#"&"% +  q{fxxqvwrfoop\ssssjbskjaaYbqbkgboRaffaaVfbWWW]Y]]]WT^OYYaHOVJnJRYFZOOFKKVLLHRKR?KFH?KGGC???BBH8C>:@@>:DD8@>CA981J12842222?122211133112&5)3%212%!1&(!1()%&&1! %%      + + ypxxxaxfxyaxvqfirvfffpaaitk]rYibbbiRfjWc]]]]]Za`RRJ`K\\VVVYRRKYHVKHOOHaFLOHKKR0?OAD89;=898201<22<22212122!04***)0//022%4!%(&!(!&%!  ! +  +  oopo`yxxxxvqiqvffqpyqijjff\bbjbZifJ```nR\YJRaR`RaVaKYHOOVVKRRaKRKHHFOOFK?RRKFF?BFDGNGICCFCCFBB1BJ?/F9D899D89D9;?1B%=321111211233=6+:75%1!(%3&!2))&2%!!%0%!!% "!   }a{yyxfqfqivqfrriqafirjjbffbji\b\pn`ooRaRnnao``\Z\VaRKYVVRRRRKOVYVOZOHY?RBVILHRFODMADCLDCCF;FF?B0B?<8<=;C8D::88<00?<211112;3?335&(+*)()(66 40&)1%(%!%%%%"  +   oyyayp{fypqqfxrrfofsbiijjafr]bbjjY``oaYa`nn``RKZ\VfVfYfKaRKYVOOYKHLO?BRRBRSIKBRCIG@LLCDDIDCC@@CK@C;CC;;<0B0228968582B1?10?576323455&/2&5(*+6(&(%0!0%&! !!!! +  + +  z`nnzoyppypxpaooaxirrjjiqijjb\oai\```aYYYaaYYaRRYVYRaVYYYYB`\LVaB`J?YKRRCOLPPOK?BFLCFFDD=R>?0D2<;615C237,:/?1:,119/11,6,1,7.,11/#,#,#,,,1,%)-/"$.-%%))$,"00 1  "" "#"/" !##!!pjjiii\yhslddme^kke_^eenZdkTe_`V_M[WI]Wg[LoGWRRXHXMHbRUYSKZN\C[WCLQP88GG[CL9WCDJH9?HD9HDQDMHHH9WCCC?:@90?>:08?2<2@:GC6379C??1?1001/?0C/910-79"1#/11?,--"1,)...%/#').&*/ "!   " " 0"" !!ji\zaijr[akm`nlk]d_dXpZf_eYde_`^dQaLiagGWLLbYOZYXMoW[HUKOVOM[GC8gHWGgPLHHHH?CWLH\?HJJIH1LDHC??1C???:6D?D<;950D>;>99972:11010099/?1-:,,,!01//"1/--$10/-/ 1)&.))."/-)*+(%F !! 1!! !"#1#"!"r\csicjXrrke_eeennedib^__e^^_Zd]d]iGLGGW\a[TVZ^^OZQP8PMZVOKMG[L[[LLC[LMQQQMDMDH?C?DJ>M9LH?CC?0GC9D::D??B<2:C517>,?0G?:/1::-9-.,:::-6-/0 C/6-,"#,15 ..,")*1 "/+*&&&%1  ""5 !!!"-$"##"!""""sppbijjsarXkdd_nnee_diik^d_ff^]T``b[oWWoC[MVZ^SVVOR\PG[NOTSSMHHHLLC[GWDD:LI@HL?LCWDI@?H>>?C?H:W9::HHCC;O7G52B3>9G0:@-?C19:6,/,:,1/:-,16.$?110 /:#1,..!,**.#.,"/0!*'))+&!!! 1"  !""###$$#!## "!""ppbrraarrQazike__e_ff]i\bpn`_d^ffOa[\aWW[\T^YMRZZTRQL\MIRRSNTX\L?[GC[?LaW?HDHW9M@@DHCC@@9?9@:H/DD:9CC2A;@CC;<>9?972900?,6-9C1?1?11//0!,:/!/-,9#/00../0!2()).)/%-$,/#%)'*&" "$"5 !##"""""!! !5"#!csrabbzWsksP[jeddeff_kciaQdedYZ`VrFG\QLaRZ_U]aQNYTXD\IM\HRTENM?WHQWGWMI?[LLCGCMJ@M@LCL9LLCCH9LC9H91?=B=>6?H7D90?7>D1C?,9,9!C,,001.@!G// 00:-,,,1!##1!51&2).%)).)*'%/-&&&%15#$" 0""!""""## !#" ! #iaospjscq]iobp`mdenZleYc\kcXYen^[Fg[o[WQd_UTUYRTYRITY]WGQINSIPG\IIDQISIHD@@LGWD@MQ9Q@@HCCC?CC?C9CGCBBA>2=<>71559761C-:,,/00,6:,9.7-/-66150/,,//---/00 1#-&-..-&(+*)%%.()"!!! $#"""!"$$""#"!#%#"rozbjsjk]iarcbq_n_ele^ek]hWrd__QFg[bQWaMR]dT`VXT^YTOOQG[WiMMGPPLID\@S@LLIMHH9HHHD?9@@9W?1?D:CC9>,C>B=;29C0?::99?0C,:,162,19.6//"1//#1,.-/0111/#$-)(*&.*')')%%&,!!50"#""#"!##"!##!5" !!rbsirjss\ra\s\tdmnmlYdedjgPXTeQxPabb\X]R\\YT^O^SYZ`VURLL[GDGGGW?LHHMML??L9L?HMMLGGHHHW?LHDH99@>DH6;E7>JBB=D80>E7/1191/90?,991?/-911///111,:15 /,/0!"##/"1.**.&%"-'))# ,"!0!!"!!""/#! "!!! #"  sptb{\aroz\jjrace_n_e_`djarbaLgxhLQLbT_ZRaMYTYY]RUVTYKS\W[Pg[L\HWaHDWC?\?CWLMII9WD@LCC?9999?LDD:H@6>>>=BA21F?E.?C:9//? G,6-,119/0!1/1 0!,6-/1,-1 !/,//"5#-#"-&5$&)'!FF !#"!!!!!$$"0  ##"/!pcjjc|ijbbjkYjWzkn_eff_dk]d\Pgxhaa[bd_`UeSXYTY]YTXXSSTNMQQWh?QHHMI@XQL9QHWC?D@L?@JDL??D9LC??:L19:H96ABBB<>C06,?11:/?991?66,9:.,::9/9/050:,/17.,11/,#"10 !08#&*%)((." F !#"!"$#$""""!1## ! bjtjscjjbpkkpXiabke^n_qd__RhhPhLQLi]YT^^^ZYXYU^VOM[HYSXXDQH?\QQbMSXDHQQ9LLHHHLCL>@L?HD9LL1?:D99W0C0@=BB=>;>:9C0G1C19,:::,:,,-7:-,,,/1!1,/11/%:11,$//"00/,0!-)'**(*#0  !0 "-%$"""#!"$# !! r{\irssssjtcjjcpii]edYdZfeaPoa\bri^Z^XY^T^Tb\TVVTSaaSYQGLa\LL?LDD@DHW??WLHMIH[WH\CW?L?L?99D:LD@9?CC>=BA;7DH@J<<>><<>W819::?C/,C0973619,1509,/#,/11-699,,#,/"/,-#1!1#---&-$ 8 "##/###""%$" """#"!!!$psr{pkppqltspkj\raobe`nsgxhiba[rWX^^T]c]TTdZVcQSTTRM[PGLQH\XERHHXMHWHMQHQLCWHQHHLL:H\?9@:?>N;JJ>>>EB;<<>>3E/5?,:D,9/9::000/?1C01!C!0",:,9,/0//1!/-, #%,--#! 5F 0 0/#!!#%$$"""%!!   tsijjjcjcppjcjsbbjpcz[[oaiab]de`_Xa^V_^Y\\]R]Si8aGL\LiHLLMIRXQWWWCWHDQ?CHI@@HLLDHDDDD:9H>@EAA;;;>>>2>15/76,911,:,-,110 1:,10/,,,///,,-,"#-,"11?,$$"%-#!F !0 "%&$#!!!1!#$ "#"! %jbpqqjijukldcsraspXj\[[WiWbde_Ze^pW]_^YZ_Xb]SRQ[PP[L\W\MMHXIDL\HLW?HQL\IJ@\W?L?M@DLL:L?H9@@@E2E/G?6H?1:H?96:9//1509,/,6:/91!"/--,1"-#1",$#","!--"!!!!"!0 !"!"$%"!!/! ""%" "!$|jqwqjjpqcqpsarjjbrarrWWW\]lnZ_l]]RibdTZVSMYY]RQWy[WLLRTYIQQH?HMQH\HLCME@H?LCW?LHH???L?H:H99@@;E>J/01116;799:/1/:11,9/0-%#,),001,#"!//00#-,,#! !1""0"#"""""#$#""!!##! $""""rjdqjstqtiiiirjelX\aaWaab]dZe]]dTe_bWXd^YdYYYSQaGW\WhWSTIH\?[[HHL?LLCCHDQ?LIMDH9WC0WJ>>HH1CW7@>;>>>;;;;>;4=;2,G05C7)9/9?05?111//00?1,734$,,"050/"""/###,,/$#0 !""!!#%-#"" $! !#"#!!  !tpjssbkkjsi[oi]lprr\biaad___eiaY_ZT\\\RY]]S]XCoG[HQMXRIXDaL?CW?WLWWLWMIWGWL@@H9L9WCJBBAJHCCC9H?:@;>;>7>>;;3;;90?96,////1005 111?0#/16)*)://!/"//$-,/,//#$,/"! ! 0!#$$"""#/! $#!!!!!  wqtrspqujbsiicksa\rbkji\ce_m^b[]^^]L[hbTT]XRLhPPaQITYSQLW[LQbH\CCW?HIJMHWLD\HHLH@DEKBAE;>H/GGPLH@7E4>7>276676?CC01,9/11011/,:622*-0!1 17%/,.,1"#"!1"#"!!1#,#! !$#"!!!#&$# %&!  $qssullpb|s\jmeproWajXb\\bd^ddYYld]a[G[WjRQ]\WGoL\QRTRD\\[CLDQLWH\L\MJML\JJM9C[CHDJEEANJ;A;S:5[PG?9@>;;<EA=A>/?9GP?09L:=<2;4A3;<:C0?7:911011:://1"72+B+-/1-#/!1""!01##/$$""""!!##!!%%##$#1"! !#"!#! #%$ riuvpiazrip]jraaccbj]kd_m]bde_^dXcoPPhhxP[[P[L\iQbXQ[[HXQLWWCGWLLQQ\LWLHHH9CDM:J>JJENEA=AANEANABBEEEJ;J;D9?5PFg81C6>>;3<4<2/C??05!/?,/119)2.)3*7..++-!/#1"$.,""/"1!10!!"! #/! !!!"#""%! !"wmqsaoajmejaarriiikYm^neQy[\bY]kdbWg[icXQ\Q\W\RRbIRb\LLWC[CLHQ\QMHW\JRQLaL0WH9WHKBAEAAE;J>I>;E>D?::C0G?::;<=;3<4;,051/9,?11,)<47/.*).)3$! ,/#1,$"111 1"! !###,%%#!"##!1#$$" # "'%#"wpsza|cvqs{o{]pjoiklnkkiaxi\ildd^dcGaXcQX]XQQ]ScMMQ\LL\L[CLQL\QQQQQMDHHW9MHHH[0LEKESEJJJ;A;;EAE;>>D0?:1G93=<;;3;26?0809:/1"C/3+43-0"7*3+)15 0$-"!0 "/#1"##/"##%%""$#! !$ $" !&  p{oo{kevjo[obqja[cdn_cp\Y]ckcYd^^ecLiMbLb]XLbSRbH\WGaQbQLQ\HL\HHL@IRHWGC\DHJMCC:@>J;E;J;KAEAAA;>3E>/?9CP0><2)3>6776?1,:/C10//3B4*60,4+2.-#,.),!!!",$"##"!1""/"#$"!"%#!"$#"# " azaspvvbaaasjbr[awfnmkk^m_l_kbbllT]i\aWrb\WLbQHHiQQWL\HWLbHaWDQ\Q@IHLLCWL9SJ@M:Q@JEEKA>E>76H?05C/:7;A;7>)>1?-/001:7-7+3*2/8#)*.*4.$*).#/$#,#/!1"1!0!!!" !" 5!$%$#!""! !$oitulk|azjukja[y\lfmdYlnm^l^diWckXX\baaXRQWQXXWaDMQiQHaCWLWWHXMMMM\LWDMDHIJJSJH??JEK=EJE>>>;@M><=>><<>11:G09<<3222?G1050.443-6*)3*1-1$)*()))&-//1",/! 0 0#$"!"#" !!$!!  #"{juvuizoztdjrooaj]kqkleedqYkcXrMkbo\\i]YcXX]S]bLiQ\?LWCCWWW\MQMIQLWCCQM\RJREKILWCIEEE>>>L0D;J2EA<79992;7771F5506+4B<,1-7*4-10/.*.)).$0! 5!! #""--##$##$,"1%%#"! !!$# tpqpsa\rsjbroackqcrbledkjLklYkja]aLao\XRMQbY]QLLLaLCWC[a\QIIMQMQL?H??L?JJSBBKEH?CJAJ@J;E@C9I<;A=N;2;;J3E3;;321C1/D055050C2;-627734.2+7-"11#.)7$0! 8!,,"/$/""/""!!"""!1!"$#! "#uupsrskpiro[appci[[ooobpkcke^cjW[xGo[o\\[oQL[[aQbLWLLQMQQHH\QbMHLHXDHWLIEKNEEJIHCHM>;AAAJD5L/C>J6@;J@@>;@@6,9C1550055-3+.:6)33+2)).)./8!,-#5 8!/#"!!"!"!"! !! "%!!##! ||bsss||aoatqecoyWroh\jqqk^ldi[xg[bbaQ]kQ\bbW[QbHLH\aL\Q\L\aLHMMHLHHLGLEBBSIIJ;DPG1JEEEE>@?[9=<;3B=3>;3>62J710 8855,3<;.,1.*2*3.#)4*,8 18880"!01!0! !"$,!-%" !#"""!## "% jissr\rhhyjwlcraass\[jkk^^qcbo\hGXcbi]YXXXRMbQM\WoaLWL\WW\IIQ\D\WCWPPGHNUNJEJSNJL5?JEA>@7J@W1AA<;BB<;<=4;;;>185P855:4B426-,/62-,-442%5!55  !""1 "$"!#$#"%!"%%%" !"! !'!{r{{\sso[zcktroscjibrijkmedcarWoipb\\RXb\bXi\LQa[CWWWMIQLIYX\\LLCLHWGCQQ;SJNKKEA>D72C8F80,6:3B42*.?!-*.)*2&))/"/" 1#/"###11,$#/$"!!%$! #$"" !" $ zrroo{aartks[hobjrazooacdcjo\o[W\\a\aL\aWQ\\aoWG[LQLHRXQQRI\WLWG[SMHLDHLWIJAKEJJ@L?@AE>E=A;J;J;;>;>6:2;>.@1F88585227-7;*23.08-:)3+).--/1#00#"!!,#!!$$/!"" !"!50#$" !" a{sroozzbqury[zara[[hhyaarhG[hazaro[rX\[oLaWWW\WLQQbQMQQQQWW?\L?RSJIMMHW9MJEESIJ>C5?I>JEEEEJJ<>I2<6C096@.?5855064=36/17323)?/-.2*3)" 1! 1! 0/!!!#""!"" ""0!"" """"$ sszy[ob}proari\a[oWaao[hx8xhh[o\b\LbXQaa\a[WHQHiQQQ\\aQ\\WG[HQYSJSNRILCW@NNI@JNAM?C:@>;E>>>HWJAEAAE;3<;>@9F88C555P58592<=3227.01,77.+*/ 8!!8"00"/"!""!#$#"#$#""##!!""&#!"  zhxyrjsoyozaraoo[arirriiz[oo[oaWzWa[[ooWoWo[WoCaQiLiXQWW\L?[HIXIKOKSJNJI9LHJJENJI@DGH>JEE;;;E>D?8gFF5558FFG,;44=6/66:,?"/6)3*6155880"""100! !//!/#"!/ !1""! ! '&&   |hrtso[orrr\aoyoiirri\ar\r[oWW[a\o[[[[[[GGWWWWaLWLQ\W[WWPP[LRNTKYJRNUKKRW1MSKKEJ>EHC9J>>JEEE6?555550G0G88:@2<<36-.2,:),9)3)7),0"1!550!!/#,!0""0 0! !,#!"$%# !!"8#& tprt|oyoarriro[orirriiariiaoWo[zLW[[o[[Ghh[W[W[W[[WWC[WWLW[PCXNNSJIINUKS>M9IJAE>JBBJ?L>E<>;AED850550C50/?16;6.<3762<3*777.,6...1 /15"" 0/,"!#,#!!!/"!#$"!#%%"  #$"$!  ptsioy[z{\{ay[zrirarraai\aooWoz\a[oW[[[hy[oWWLW[WLW[[[GGWW[PCMJRIIMISEJIJKNKESJJEBK;LDJAEEE;;@F888G011C?/6=39/)<<43434))320!7."F5 0 /%:"1""0!$,"1$,,#"!"1# "!"! siryxhoariayyar\raaaaarrooazoWrWooW[o[[h[[[WaWWWaoGGhGhPGGPG[LbIIRJNNJMDRAKEJJ@>EEE;LDI;;;>>@@955P5?9H1064<<71?*4<23276**6 ,,8 05!,%#1"" 5!""!!,###"! !#%5 #$! #   {oxyhyzzazyyorirrrrzaraooaWooaW[WWo[[[h[[[[WWoWaW[hG[hP\GhGWCPCbMIRSJIIJSEERIJSEEJ>@M99>JEE<>7@9?109:1G97;3==6/@3-9./0-37-1?, 0 5!,-#/!11"0""!0 0"#!"/#!"%$"!#!#%&  t[t{z[zoyhorsjssirrsia[oooa\zooWooW[h[oWo[[[[LW[G[[GhMMQQ\CP8GHM@JIMMIS;SR@IAAEJE>J>?g:@A0C0?910,@:6;=3;./00?/1,2.2,8505-&,1011!#,#"""!!""5 ##$$$!!"#!#   +touqtsroyorijjrrijjjbjbirrisiaLiraaW[[zWWWoG[WW[Gh[GhDXMXSRW5xPWI]IMD@IIJI@IJEJJ>SE;J@?L>;E;>>?50C?C89<<773;3<21F962*6)7)/888"-:!0"  ,#1!,,##$/!!/###"!!""((&    + }pvqpjryyri|bukcbssirtjsajl]ibbb\iayo\Q\\\WWaL[GhGGhQcXRSYRQ[58[IJMMIIIIMMMIJIII@@>J>;9?>>I>@C8C/?:2;=2:,>337:-,)+3*77.950//0 1,"1!1 0!,###$$""#! "#%#     uvl|t|~[sjtjjvkt|jiooi\arlksibaGW\b\aXcXj\ibQaW[[GPbRXJYY]MM\G[CHMMMIII@H:II@MMD@@@>>JHC@>@:G88851?93<;3<:1>;722:,7276-6,8F5/--,"00",""11 0!"#"$#!!""!"!##%$'   qmmu{ohtmwuppqtsjkjsir[oijibbXciicccXXXb\Qcbaaa?aoQRMRYNRMXMMH?[CQIIRI@MWLI>IM@@IM@>M@HCH@>?F55050996><;76/:*2;26:::-.,1F500%-/#,,#1#"1!,"""! !!!!$# $$$%'%!%&"   nnnq{hpmmmtsss\sjpbirisjb{WrbkkbicXbriLaicSMaCo\XbbQQSNSRMMMISMGhQIIIIMDCWLM@@I@@>I@6M6C5D0FF8g88G/C/63;7>.56;)72-5#:, 1 0,6#!?$#!0!0 "$#1"-$"!! #%#""#!%"  + + nfmu|svwwti{iiraarrazjcjrbj\icQzWbj\W\a[LRbi\QQiQ\W[Q]N]RcI]SJM\CHIIIMMID8G?MI@@I>@M@@@9G0FFFC11C09@73<>:1:77375?5105!,/5 "11 1 1"!1$%$"!""""#!!##%&&!   + + wmuuqmwluryosptizaohatjrikkXbiWoWr[hajXXbb\a\MiLaGGaMRRSSSYNYRIJIMRRIMMIM?GhL6I>I@@@@@@D0FFFF1D/GC1G07337705,727/888885/,,! !/05"//"!00"#,"!!$%$!! ""%($%  + + +tjtvmfmqtszrppirriozsioajkjirWho\iLaacpXiaWWLi\aWQiXMH\QJSNSSIRYTKNER>S>IHGF5WLI@@@@II@CFFFFFF?72905555,6677/0?.6.1F85!1,,,/,$/1!##/"!#,#"0 "&#! ! "#&#"   + o{qmnmpr|o[zj{azi{ijji{ssbbaoaaaiXbiiXX\WW[h[\QXR^ZURaWWMTTTTNNKKTSSKNESJM?FFGFCHM@@I>CFFFFFFC>;>@15P G0/6-66,,66,5880,-,///"//"!0//"0#.%#"! !"# "!"&''&&   +  xrvmwkz[hyor~[[oz\jsip]csi[[WjXi\bia\iaW[r\L]bXXYOT]RRX\bSSYYNYTNESETTEJSJLWP8FG?@@D@CFF8F889>>77:G ?GFG9:676:-6"88 C,-,!0!/1 0!0!!0 0$%#!"#,$#!$#"&'%%%!  y|uvthhhhPozrzy[zi{ajkpiiio[\ciWriLabiWGoQiYY]kTZY]]RYTTI\LISYNNRXJTEIJEAED?GPP88LM@0FFFFP0?977I6/C05850,76:,:1F851/#101!55  1/!5"$"0 "#$"!! "%$!!'("  haqvrhho{zzriroitsoassi{iQiib\ozaaorbQiaWiYYcYZZ^]XMRTUNXL8WLRTTNSTKTSENNSNID58PG8H?8FFFFFGCH10@6@>>/8P8F?:,,91FF!/1 50/15 !!00"!!#%-!5!""!!#"#$!$&''" + + +  {stioyzrra{iao{upi{cpsoaiiii{WoWriQi\iaWoR]]XTZTRRRRYYYYRRM\LMNNYKUNEENESEKS9[C99GC850G88CD;@:0W:6>7:C888550?!CFF51185 0 00!!0"-$"0 !$" "/"#" !""%' v|t~hhzrzoaoyotc{aplkciooabraiiibcj\aoWCckbM]dY]R]T^UTRMRYTRQHXSNSNSSJSR>SEJ9?HI@DC88GG8H795?@@:6/585/PPFF5115 G855! 5",#" !%$" ####""&&& +  uzryhyzyhoz[rszospqjroai\ooibi\jj\WW[[cTd]kT^RMbRTTT]SYYNTNQgLMIIRIXIJJJI>IH[?@D9GC[5g?AB<;E;:C966:69C?:0FFFF //05 5885 0#1 5 ",! 0!"1!"$""&     yoyyri{zor\tjrasjssiazjps[[ai\\\aWoWoXdk]YZZdcXbXRNYRTUTYYSMLHCCQENRJNNNJJJ@?GL9C?:9G1@NAN@CCPGH9CGDAE>C?69559:D>2277:90FF5//0550055 55"1 5 "#%""" &     + + + +yzs{{{{aho|travlts{r[[bbzoQjjQa\i\aakd]]]kYdRa[W\aL[\]S]SSJSTTILPGLQMSERIJKNE9GGGG?[1?>=E;:9@9C966/6;@776/88888 11580058855 55""  5 !%&$ "& +   zrzozoyyy{{[stjj{\sbti[hoijbrib\ro]d]X]Y]]XWhFoWPg[IRYSRRSTUNXWP8FCQJMM@JJEQP5W:L0??C@E;;>J7C?6;@99666:151!0/,/05 88 0 55"" 8  !$%&&! " !$  +    zoozrryhau|zspj~ooi|tiazorr\\ooarWa]]]]^^dYi[Fh[gg8WW\QISSTTSRJ\GGggCDJIISEWFFG9LCLJ@1?@J@J;DC@7779:779F8555/-76"C10588855"108 58 $$$%%#  " + +   +  yyr{azsujspvuujo[{tboabjiiro[z[Pooccjk^lYRcioQ[ggPGhGWiTUTSRIRRLGCC[\HMNAIGFFGC0?;KE9?9@><>9FC766>959/81C1C1/,91/?//0 5880!!8 0  !$$%$$% "$     +   +zoyzzor}tsttup|izrbro[{bi\raoa\rj\ajkYYk]]R]S\[5[\Q\GPPQSTSRRRIIL[CWWGL?JI0P8GGP5DE>J:[0:;J>>>:?7@61FF880/,62,9,/1"00 !//"1#$"88  !#%%%$$#$$$! "        + z{rzo{z{ss{tjooopproaisaozazaWcpc]]QikYk]R]TkQ[GabH\\b\CQRMXSYSSWgPLCGG?[FF8WCHJJ@>I@6??C:@@@>7H6661g855G/,9,///,1000 0,,,.-10   #$%$#$$$$&$       + + r{z{|ssqutt}sz[{jryatbs\raaaojp]kkkboikkkTeT]]\\LWaWaM\[LYSRSSSSL5aMQHQHG8g8GHJJA;>;;J6:G0H7>>7D-69850101::9/01?0100!//"/-..-#1#//"10 !  ###$&%$$%" ! + + +   oo{|{tqu|t}srztjoyoaiirzaazoXpckddkbog\RkeT]R^YX\W[[LL[GQNNRJNYRWWHHHM@WGGC[5D>J;S>>JE>9[00D;2@:9?8880?/:>.,?/1 550/-,C"6.$!/#/"/#"!!#-$!5"/#%#"     + + +  yzrzzuut{sroztus[ozzooooyoau]kYlkdkcPocYY]kYdT]\rL\X\GCbSRXRIMMLWWL\HWGCL?LCWLHI@>I;;>D9C?L66@698F880/:-6,?1/101C 0,/0 #,!05"""!!!0!$'$! !$$##$#      s}~ys}s{ssr{pryoirsso[oaoWocqkqdkdlkiabk]cR]Y]]MLbbHW[aQIXRNSMQ?PGL9LC[C?HHC9?9I@@JEJ@>>D9?1?9:P588C99/11111/11!111 0#.-00 00"! ")&$/## $&%#$$%        q}stu}sa{|sttayooibs\zoaatsi\cqkcckdk]cXbYd]Y]RRcQQLo[WLRMXSYYSIQCWW?HQHWLJJ9WLC?:JE;>7J>2@985?5g5C/66/?101000110//1506)$! 1"0!/#$%%$"#$" %&%&""%      +   +ti|pqu}sisjj~yoooarro[ratpkjrip]pccRkkkMiXYddddYd]\[5[\R]SS]ESSML\H?WHHCLIJI?GC0PW6J>M6J2J@6?g80,66::,/://C0 5!///:-%,150##/!"/,$%$"!!1!!"%%'&#!#     +   z|}tutsz~{j~hozz{so[yy[jppppaasdkdkcc]]biikTdSd^d]Q[P[MSSSRRR]SMHL[GWWC?@JJ?W?585P?@@@DD@@@@:P8FFC:69/:9/9,0505500/,-:15 1#1!00$-#"1"""5"" #&$$     ssr|||rz|syxo~isiroyhzcppkqkbyakkkkdqkkc\[QkS]YTSX]bQRcRSRXSSIIQCPPWLG[MRJM??[?P5G?D>J7L1H::P585?:,?0C//C01G 1--/!/.,10 5!!1! "/"""1##" """''$#$     0 200 80 1 +```I`I`_HYY`AfHX^S\cTYZZH^QmHN\MTYIXf;_IJRX@@Q@R2>BB11B1887111-544(;/4(<0-11161=/444/(;(//(4/$*)(0+1!+***%)(4#:5((4//4#'#/### ## $$$$#`YhRf_Hf_hI_XH^Q@TNMLYTKRHH^@T[TTZ<;XXARAH@_7C7>>>>1C76617B)Q444/4(<-=66616=(///;))@((5*=$;)-*+*0 -$/($/4:#(//#4/# #'###$$ )_RRgXHX^f_HXqA_XqK[[TT\YZaTZ10505@:4;)<+66+1++=-0(0;/44:4--%%5/=+* -$/-%#44#:# #4 #4/# :##4### $) fRqX_YYRHHq^HY`RAZZaKMMCLNNTIfISSKZ;WIKI_HRRA_X@QQ@HBBL7D8716-=121=06>0@/4Q/(-=*666226)//4:#(**-*-4%1**+$'( $#4: '#/#'(: /4##/## # #/$$ 'fR_X`SYR`IRA_YRXHKMMMTZaZT[ZSIH_SCLHHSIX_<_@;;Q@;@_AI11L871=*>>172>111=554#:Q5*2+++122/4:'#:;$/(-*1,%/(0****$5 0('4:##/ ######## ' ## #''### ')$)RYYR`Y_fIYRf_R_XfaM\[\[LaZJBT[AAKTXXXX@AIAA_@W4@RAII_@W@RA;@HBA);LC72>6<<>3827B666B1*0;4:'Q<7>+1264'4(:5+*)4) 1,*#/%--+**%$/'#: ##G#'#' G' +9 +'' ' +' +' ' + +''' +999 + 9 9)YYR___X@fH_;HHQ^HIYB[CZLJXJaZMH:R@;@eW^@@_R_@@X;AIIH;@/;5H;X6A@;73871=A517B6116-B*<<6*;/5A+1111;9 +:4:#;+*00/5*1 4:5 +*%$/' + +''''' :''' #'''9 +##'9''' ' +99 +'' + 9#G ' +9 +#R`RH_XQqHqQX_``A_X^XRJ_IR4ZMTKXeeQWGGHS_@H_@@R_X_RA@HL>B15@5787>>B1>6;5-=--J22=<*=-66)(5*6+5#G''#:)%05%$()+ 05:(*-04 9F '9 +# ' ''# ' + +'## ' +' +#'999''' + 9 / (fXfg`IgR``AfISh<`RQ:xe_`K[TLKY@eQXG9QLBRAH@Q;A;_A5QQAI5^/@@@AH/4<6A@;(H=>C8L>>65;=>B61>8859:H6*6=6>,;4/-6/'#d 9';4)%*+*00$5$99)):FFFF 9 +'''' ##''9###''''' '9 + +' ' +99)$## (YRXRnR_AS`A_SYRRSSR^4HISTMTSSRGQfHQ;JBAH;@WWQ;ARIB7876;A=<<>8.B09W@5+7>66=-<*6160($0;#d9999/-*(#40-- $()5$(#9##/F F F99'#:'''' #'9 +'##'''' #'' + +'##'9 +(%) 'Y`__ARfHRRfRA__RYJg@mJZM[KYSIXHH@@HYAX;;Q@@@@X_5HARAXQ4/;AJBA/;IA@QQ@4/J>BBBCD8J5-56B77166@#@0>1=-<-0*B+=0-*6$:'9 +9'/*=%@#'4$-0)//$0$49 '#FFFFF9 + +## ##::''#####/#'#4 ' $ %%$$ %9RHfHq^qHq^ARR_^H__XQQ`L[ZSRA^<_W:HJHXH^WQ__ARIAHXHA@4(;_AIBAQXIAQ:4Q:WQ1=0<05-22B**61;#9 v 99$5;)(#:)))5$0%-)F 99F F 9 + 4#4// 4# ! $ #qXRI_XXR`AgYJYR`RX4WWAYARIJ^f_W'^IH^ARH/@A_AIBSAA;@4QHR00L8D7>6QW@>37>6*65@B+<5=*-=1>1-=>2)'9 FF 9G'/)55/::(00%0-05#9'999 9 +#4(//()(/#$%)$)4# " $)$+ $(^^I`R_`YY`IYYRYSIfQQ_XeWfY@f;:dmIR@XRHX@^;AIR<=;4@BC>*J6=<-6<00-==6-<-=6+/99 FF :#''/5$0-F $- --$)'##' +9'#(%$((()%$))4)':%+$)%% %% RRR_XXR`RHRR_H`RXQqJSH:d:QXXW:QRI_A_XQQ4QXHHQQHH/Q5;H;;HQ4AS<;@Q<7C71=B1-(@0==<-===-<<<<-0/#:)--49FFF4(;(G'#;$--('9Q0**%5G44//@()$(4$/#'  %$% %$) ^W^mWW^m4mX^WW4WGGfI@eGee::GGQHX@X^:#:e:@71<5=.-:'GQQ4/@550=*5#/51.,=)5(44#::#''##';$())5(/($$/ 4 (/4 ) %$ /$% )' +#%# cbKZk[bhZZSZSfQ_R__RX^HHq@IMTAQXQQ@X^QHKI@Q5I@QQQWQWQXL>>7876676-:'9d#4@;5//%1>2,04-2.,10(:#G##'#/())0$$$)//$% //) ##$ !! %  %%% hZic]ThaS`a`@Q_nRgX^^QX^qRKK_^XAHH@e:4RYXWXJHQX@QW::G#XIJJ=J>BIJ<<6==I6B6A(/A1B>>17>6=>2A:':::/(4/@:;222265-2+**5:4'' #G/()((5%$(/())/##(/#%% % !! $%))$  ' +Q`bcbhSYg_@QWRZYRRXmQ^@@RL[g4Q_RAHQW4HAQWQAH4QWW4^QW4:QH=IJLBIIJ6KBBJ==BB>=J280 +9G/4/A=-54::4*16-,10-226'9#d9'/)(/))());)$ ##/(#/) %%% ! $ +9yh[iYYYRS_eeRa`RRqQXH__YTbKBBL>JB2>5Q/;:<>71B28-:'9G/)*726)4:44)00*2,*,8,-(#d +#4:#4(/$ $))))0%#/(((4$ "" $$ !$%")%  + + HYoZa`^`Rmm`ZIXfXQQRg_RKTRXf5_X^4:4IJX4H<^::5_=>>CD7>H@4G#J61628<#G:::Q;->26<;)50:027+6.,=)G#9'4(45))--%--%)()(#))//(#% !! % "%(!!%% $%  + + X^fiZfR_WG`T`Xf@xW^X_ISaRQ^H__@:Gx^_@QX;Q:eAIJIJIIJBK=IDDCL1>>>DDBB=X'GW4#;6>A''://W#:(6=*=-00;:/-88.,*-0##://4$%)$%0%5 (($/'#44#(4)%   )% % + 9'#ed_Kf_fWdmY`HXX_HHfXH`YgX@^^;^WWQ_I;Q^@WeeRJSJJYIJBBJIJTLC8>SB>BS>B1B1<5@@GdG55#'d'4Q((H()=-=*1=@45-,&160) v 44#:/$)$0%0)($($(4: (//)! %$%!  !%%   ' ' 9e^f_q:xQnRWQ^Qg`_;gSY_;RRf^@W:QRB1J1=@W/W(444:445A6>=@)=*=>-44)-)-=0(04'd'#:4/)%)$%))4(4 ($)//#4))(/ %!$$%$9'9 #`g`_^eeHSYRfmWXXX__a\Yf_R;QQWWQfH@WQX4eeAYSJSJJ=KLLCMEML>BKLJ<L>>>B66B>A@#(60/W4::45-*66+0@A1.26))00-('(//:##GG'40$)$5)$0%%0$G(/)$4/)%%+ %% ' %  +' ' iR``m:Hhh_fX_gRfQqRZKf@XX^mWWQ@^4eQ@WWWAJJYJS=YBLCCN?MKLBKCNJ:QAJBL>BBBLC7C>;::>>DC>J0Q4;5;QW:/<66A*6-5445662.3116=@/#''G##//5)(5$$-!-0((0#)$4/#//(! !! %!!% %' ' +  ^^^XgY_X^^y@fHXqYZY^m^WQ@m:WQ^WWQ@W::RJYJSKKZKBYHXJJBJA@;:@;=BBBB2>6->6(@Q4Q(/;111;/0-/Q(4(1227,6%-(d''9')$)/)$)$--$(()#)4(/4:4)(%%* + % + + 9#XW^gRgXqRf__q^^AZYf@f^;^WeeWQW:WQQWWRSYJSKKKBRAGeHLJSBLMMLJYJ6IHGd:H8CL7B=<6D=QQ(Q/;<;06610@@:;;50=6,1-0;/:':/:455/(0$$- $($$/):;(4 +!%() % $%$# +# # ^^_hg^^Xg`f@q@X`If^fHf^:e:WQ4WWQ4WWgJSSKTMNTRAW4@RAHRRKLB6I6LLBX +9GA>D7BJJ=B<4#:55H<0@5=JJ<((4//=.861.2-(4G';/4(/($%-**-();(/4#///%!! #: %!! %%  + # #  +WX`_XHffXXq^XYSY^@f@^Q:ee4QmWmQW:W^JKLTTMUU>IX;RHXX^:HIJII6L>LBQ':@X5<6=677<#'G#;5<=0:/<61660/5=.320*2*0//:#Q://5-*-*-((0)4(4(/(% % !(/! "%$! + # +  ^grqXg__qQWQgZYffX^4Wee:W^QW4QWWmQQTM[TLMN\KHHAXQ@QGWQ<21#(23.25A0#:G#::##@))0-***-0(50(4##)//4$ - %% " $(  % %  " +# ' 9fgXXffHq^^mXYnHX@^mmWWeWQ^QmQQ:QJ`HB5H*71+5d#'d''##444((5- +*%$)5$/(/#//4(%%%"! "! $%$! +# #  _g_rfX^^Qf`ahf@^^m4W:e4QmQQQQ^XSaKYRKLBTNTIKNJGQB=1<(;;66*-6=521*@:99'#d#4()))5-$0 -$()-0/(/))(4$ "! !!! %)(% !   # +' ffrH@^Qm^`hY^WQQ^QWee4QmWQ^^^@KMMTKSS[\ONTLNOM<@HAAHXQ:G5S=I=LDDH#4:WH<@:G9G:/LMC>=Q#@H<5/Q:W;55-=B1>66J6B=;;*.7>26-;44'':(4:/4/$--6+*%- 54#/((//)$)4$!!!%""!,! !%%%9"  ' +  #' + +^qqqqHqfH^Q^^^mWeWWQ@Hf__ISYL\c[TKTK<'^ISTTLKBSLJ@W/H_AX@I>CDL>BXG;<5;@44@;<@4;>;#@;;Q;H;<=(#:Q(AIJ6>111160/;000##::G'44::()0-+--**$())#G5((44(($444%!! ! %%   $% +# + + # ^q^^^f_@m^^@mWWW^^____H_Ib`@AK[KK[UMZMTKS[UCLTMZI@H@W:W:ICEC66>IQe::W/A<1=B22>0;5/W444;())5500- %%)4/)/((44 /($%()%! %! %! !!% !   + +    ^^QQq_XWm^X^:x^^`I`YanRY[MUaAY[[TNMZSUUIHLMZLTLBYIHQ:Q@ICN?LBK6AGW^/4Q;5B1=BA;@@/A0>222>2781-44:9:4:4)@(@$0$$%0005$)(();/4///4/$4$$%$/(+"! !"! !!$! ( ###     #ymWq_^mW^Q^WxQXYYgH`YRgTU]cTY`YZTTKaZMTIXRZZLSYISLJQ:;KNNNLKB6S@GQ;A;;5I=I=<;Q4//:;1.C>1C71-A:'9G#:#/((/0))-*-$0 0/)(4$($)$%)$"+ "!$% % #  +# # # mQ^_fm4^^^^QqQX_R_fHXHaT\\TZZHHSLKIKMMZYf@RKKYBSKLKQQSNNLBJJJB>@G4@;@<>7JAHQQ/::#Q6L71)=+-;:#9FG4:G#Q//0-)-6+-)%0#///(;$0-)#/)$4% *%$%!' + + +  # + mQffQy^X^fHff___^XH`YZZ[\aSZK`GHaTT[NUNKSR;HJZ[TLLSRIMMCBB=IJ7<4:W/@;L7BJ65@'Q<5@4/=266;#@@#Q:G#Q(/44(45*+6*+-;);:4(G))((/ //)(/( $ $  % ' +9% + + + ^ffym^ffqX_HfniaR^RZk[\c\TZZT[_XIMN\U\ZSMZAXKLLBSJISC?CJBL7BBRW#G4QQ;<==6L>=;6B=A;;*821=:(:::#:/(/4455)$=-*-*%;)$(#(;(/)//4)(/- $4%)% % % ! " #  +  + + Xq^QX_Rf^X^Qfaa`__`bT[\c\[T[\MSXR[TMMKYLULRXILKJJIJCOULJLLLB5GGe:;AA;QQ1B<;;H077>6Q4#'::4/W;00%<- =%0(5;/(()/////(/($)/#4* %)$()!   !'#  '  qm^fnZnfH_X^XIRgH`ISb[bTTZZT\TaJYAK[KYSTTSI@HgJJBZCEN>=SLK>@G'd'^
>16J<@Q@@(6>-=66B=;440;;<;G:'GQ444/);)55)0*0)0-%/(4#4 #4)$/$%(/ %$$%$  ##%%#!   +  m`oY`ffqRanRrHX__R`Z[[\[KKZTKSMU[JfA[\TSSSSKIXHKMNCKI;9'Q@@;IA@4;+5$%@#44##4)/:$5$%()* %) :%/$$## () % ($ '' '   na`fff^qf_AfXYiY_RYga\[bT\kTTMk\\Y4^TTSYKKS>ZX^KNCKBLKKC777B;ReG#W4QAHQ:Q5A@:e@<>C2L6A6>*5454GG:4::4@;;/;5*+6*0);/##()/($(/(()$@4(%%:%%( $ '$ # # +   # + + + `qq_`gR`__q_nY__Y`^ffaaaKbZMT\c[JSMK_ISTMZSJJSKAJYKLLBX:'#e4Q>61B-;:44#G:/(@445$-A(-1+=5((/((////(//))) %%/(%$((( $% % '# #    + nR`s_gR_fRnhYff`gYR_XSZaaabZbU\bZk\Y^HZLZKJJZTTIHIKBSQ'dGGW5KCLJSI5;;Q@X5H)A5:4<7>6;/@4G:::Q(;(@(0555--0)($54;(4Q)-*5/)%$5))#$$ (4!!#   +  q_XqXrXmX`iabpZH^qX^QhTTjc]U[SK[TSSIYX_RYRZOOCSJA;_;e4@@@ABTBJIAHI<@@@4XRH5<5@4;;9'GG::)5/4/4#/)A$56> 55/@(44//$0)-):/$-!$4/)/)## !!   # + +  # mf_rggg`kpcl\kbi`Rf_^mgZb\TaSYTSS\\MLbI^RMNZYSKKZX:::QQQHBJ1C>H/@;@@@;/:#4Q/Q:4/A=0$B*=-5(((/((4#:/0)()(4$%)%++-)/ %//) # +     +# `o_^rgiijkkZibahii`__SIZbaaabZ_IbTLaYJaBRRYKTTLX::W:Q@IBRXI>MDLBBJ67CBX4Q(44/@4G:;)(@@//-0;5=*=(@/:/;(44((()//)%$((0++%4;)/#/) + +' + +    + + + + +  g_qfnZiik[ohbkbZaaYhaSggS[\\bZR_YaIIJMU\I^HBLTHGGGe:;KMT=QHB>>K6JB>T>=/:@AH;@/::Q(X//505;);5)0)//0$/4(/45)(///$+-(4($$ (#(($( +9 #'$ # +' + +   f^qYijkclkbbk\bbbZbTbhX@hU\bKZS^_KSIa]VTSAfRKAG'e:eQJMCJ;QQHJJ=R7DL7T>=4H05;;;/44/44(0;;;;(;A=54@-5((/44($(/(/(**(5$%%/#%*$)))) ( +#   +   sRnh`hkccjjbkbZabkk[kZXqa[Taa[a@HaZTcETSBSHdQwGGQ_HKTLJH4QQ/IA@0CBABL><H5;@505;(@Q4@;;(/5;5**A)5)(@44:////50+045- %$!$$)()/ ' +  `ohg_`httbbZiaaa[k\k[bZZbZha[\TY:gK\MZYBZTYGGd'GQABTKJY@HX;@;Q:B7R#=B6A:44Q/55@@;5;);@/45=*=-A)(Q44Q(//-!0/4 !+$$%/(() #  #  ohgg_fmYiaaZbiYiZ[bbb[[[biSZ[TZ`GHaMZSJaL[5W:WQ@XITLS>LS@4Qm#:KCBI;JJ>=W:44@A0A5@@;/4Q5-0A<)/4;@/4;(///(/;/)-*0/:$ -()$))$(/)()))   +'  + + +    F 72 90 1 +28*777/9//643+664/+33//+3/+*3.1(++*/./"+++ *3+ * *+(3!==!! 2 228*7374464+333.4/+74.1/+/4+3+4(/33 4$./+/(/3 * 3+3"/+2;==!3 <222228*37746/3 3/7++3/11//44/(.(+33 3,05)+++"+3+3 3* "/(" !=;==!* ! 2 888*:33+47339///3**/4(//(/4./7++.0,)./ *3+** **3+("*3 2;;!**!22 ***:3*33:*3///333 7.+*7/++((++//3.,,1.,(8* *** + ++"+* /+ ;===! 2228*:+3:3*8*:*3 3*3/..//++//+3++//#0,...,." 3***+++"""+ "+*!;=;;228*3333******88**3//+////4///++3/.,))),).+** +"++"(++((( !;= 8  !*333738**3:**88*3337+*+(/+("+**++()00,))+2+(+3/+ 3#(3**!;==;! 2!!:3333**33:***8*+ *3 *83/3 3 **++*+&-,).. 2*++ +"/ "("3 *2=;=!*+ !! 3:3*8**3***8**+3*3 88 *8***2+." 4,,)).#"++ ""((#( *** ;=;!2 233**8*:***88*+3*3+** 3**2**+ *3.).(.#..( +("+/(( 3 !;=!* 2247****888833* 3**33 **2"/(*8 ".).#.))" /#/""+*("+!===;  22 43333*8888+ 8*3*83+ **2".1#+3 **((#()). +(""((*3"+ +!;=;=!2* ! /7/.4/*8** 38**88 3 **8".,)4#)+*+/(().#" "+"(" * * ;;=; !!2+41547++7//+++*8 3***27.1)(.))#( +"(#(()"*+" *+""+ 2!=!2 /1.//33////..+3++ *82/#).(.))4((/"((("(.#2 + *"" * ;=; *22 1143 3(5)/10./..+ 822 (.(#)).##((((("()#*** * *+2===2  !!14733/50.10.(4)(/+*** 3+..((((/(#(/())#( ***++ !==;!* 2 /+33/1,4(../(4./* *+3+ *"/((("(#(($$#(#"2* !;=;=!* 23:*+..7/./++(.,.+31&0#+3 2* ""(#(())####*22  !==; *++(.14//+(1./)./ 1--&,,." * +)((/#)#(##(* 2 !;==!2/4.1..1((1,.(.+ /&--)&')(3+2+(((#("""" *2 !;!( + !/4446,4/,14"/3*/)0,))--&)"**+# .$)###("+ 22 !;==! !4/+/./+(6("7+ ".%-,.&&$,$)("#"*"+)#)(("""2*2!=  1(/.43/.(+3++.,--&0&--&),,$$) "" +"#)#"" 2!==!" 44.1.)1(.4"3 )0-0&&--%-,&&,#"("""*##&)#" !=;=;2(.4.,1(.)/ * .&$,&&&'-$),&))#()" #)####+ 2 2!===; 4/+4.(/(/ 3*/((,&0&&&$))%$.%'&$+  +$#$$ ;=;=;!!24".1/3+3*/((#/#-'-%&,)$&%))%'%$)" *!$$$$!>=== ! /,5)/""+(.$1/")---&,))&-&&%%&&$$( $$##""  ;=;!  (5)//(7)1&&(+#(&&&&)&&$$,%%&$$$%&$$$  ")# +"";== !! .4//+")),0,("/(&-)#&%'#"$%$%)$$$$+" #" "!=; !>! ./+ *(1,-&-',((,&$$''$#(((%&$$ $"!=== +>==!/(/3+)1,)0'-&#()))%%$,&# ")$$)##$"* " +" !;=; !;=!/.(3"0-,&---$( .&-,$%&#)$$$$$   + +!===; !==+(3 /0-&--&&,(8"%&&%,%) ""$$% + +  !=;! !=***3")&-&&,)))((#,&%&%#""$$$  +  "!=;==; !! * +3+&-&--&$%&)"$%%%&%$#"$$$$$  + !=== +! ../ (#,&'',,'&" )&$%%%%$$$$" !==; 10#3".)&&-,$&'$ #$$&&$)" +  +;=  ! &,.(.),&&,$&%$#"($%%&$&$$" "  + ===; !! ,1,).)..)),&$,%%)(&&$)$ +    +!== > ,0-&,#"+#'%,$''%$"#$$$)))$ 2  + + !;=!! !-'--0) *)'&$&%&$* #)$)#  + + !====  !>---&&,#($,$&%&%&$""&$"  + !==! !! &,&&,&-&#)$&%&$$%$"$$$%%2  +" +!===! + +!> -0)),'-,#&&&%&&"($  !=;= ! -&,)&%$)&'%%-%&&$$" ")   !==! ! &,)--,#$'%%&%&$"$$"   + ==== ,)&'-$,&&&%$$$)$$$" +"  ===; ()-%),-%%&)$$#$$#  + ;=;==> + ,&&),%%''&$&&$$$ +   +== + + '&)),$&%&$%$)$$$" $ +  +  + ;==;  +!!&)&%&&)#))$)$$$$$$* +  + + ==! ))-'-%("$###$# +  +   +;====! +  )&&%%$(*"(&$  "    +!=;==! +  $,&&,))+"##)%%$$$ +" +  + +  + +!====! &-%$)$(+)   +" + + +  +!  + ;==! + %-&$&$$)"2(#$ +" + +    === + &&$)$$$"* """ + +   + + ;=== +  ,.)))))("+ $       + +  >=; + $$))$))$* #  + +   + + + ;===  + ,))$$))%) **2 +  + + + !=== ).$$)#&$"  #    + +  + +  !===; + #).#)&$("       !=== + #)$#)%$##  # + + + +  + +;===! #$)$&))$$*  + +   + +====! +!/"#$&)$       +   + =;== + ? ()##)$2      +   !==== + 2 ")$$$2"##  +   !=== + ? +++#)   +   +  + ===! ?# +" 22 $  +2!  + +    ;==! 3 * *  "  + +  +  +  !>===  +  !  *"  +! + + + + ===! !!! !!! 2!  ! !=! !!!  !  ! !===> + ? ;;!;!;!;;==!!!! !!!!!!!==!!!!!>!=;=!====!>!!====?!!!>===>====!======;==;=!!!==!>!!==;==>;>=;========;====;>;>===;=!==;== ;=;=;==;=;=;==;!=!;>!;=;=;=====;=;=;=======;============ + ==;=;=;!=!;===;!=!=!>;>;=======!=>;===!!>==;=>;=======  ?=;;!!;;!!!!;==;!!!!!>!!!!=;=!!=;=;=!>!=;=!!!>!>;==!==;=;>;===  ? ; !  !=!!  =! !!! !>  ! >>! >;!   "+  +  +  +!  +  + + + + + +*") ++    + +  +  + + + + +? ?+ ($%# "   +  + +  +  +  +   + ! * #$$#"# +  ! + +   +    + +  +?+###"  +  +  + +  +   + + +   + + +#"+"$$ + *  +  + + +  + +   + ? ?""(""#$+   + + + + +   + + +  +  +  ? "" ##" +  + + +   + + + +    "+*(#""   +  +  + +  + +  + + ?3 72 85 1 +44#0022#2$1#25('('5'&$3$2//#3###$' 4$&&$0/..,,-#.--3$1#101$2#1$5''''''(53&2##0/1&3&$$$$1/2/.,7,$..3113&211114'''5'''''''5&&$$#.01$$2$3$2#&1#..-,7,,$/.002&$221001&')6''''&((&'((($0/#$$&$&''000.,7,,-/#..0#$21#22#1#$'6((''&3&'&4'!)('&/./&&&'&'&0/0./.,,,,.3$21021'&2$$4!(4&4&$&&&''(( '(&0..#&'&&&$.-,,7,--./&2$#0014'&$2$$''''('''&&'5''&( &0/2&&''$#$#.,,,-/$1$32#1&''5$0&&&&5 ''((!($&'&&$#$/#' $&#/.00,,,...212#1'5'()(1/0'(&4'''2#(!((' ('$$&'#0#&'$#-./0#.,7,7-0045())*($##''''&'&2$' &') &&&&&&#$&$.-/#.,,.-,-11#0#((())6' '(''''$/2$' '&&'&&&&$&$#$0---./#0#,,,,---2$23()))('''2$(( ((!'#&&&& & ' #.#&$#,,,#,#2#$())(''(!$./0''(())'13$&$&&&&&( ( &&...#$$$-,,,,7-#.-,,011&)(''(!5$1#' ( ( '$&$&&&'&'&' &$0-...1$$#-,,7,.7,#013&'(5)!'''$$$((' '&&#&&' ' ' $#--..#$&&-,,-.-32#$&3$(!)''&''3#&(!(( '&3&'' & &2&$..###$$,,,-/.-'''4$#))'''&'#2(!!((( ''' ''&2&' &-.#$&$##,7,.-5(!&0/#'''' (!(2&(( ('' !''#&#--#&&&.#$0.,,-.,!*)&1#&$&& )!6!!$$''&& '' ''##.#.----&&.$.,,,,**(((&'')!(()(& '&'&&&'$0...$$&11,77,/,-+)(()'1&( (( ) #& (('&''#$.-/#&$###,,,,--( (('&$#$((('' ''$0) ' !!&##/' $#&&,,,7-.--''(( ('$&(!!)!!! ## ' '!!'.-#/#&$.,,7, --,)('()!(('!(!"((('&#$&( ! 0#/&#&$$#-,,,--,*"(!)(((!( (((('' &&& !! '$&/#  # $$##,77-.---)(((( '(!((  (!($#'!)!!!$#$. $$#,,---(!'' ' ()!)!(( ( $""!!"' //$$ &##$.,,,,..-,'' ()!))!!('!(' $#&!!!!'/.$&&&$-,,,-,,!((("")( (('( ('! &#. # #&$-77,---))!))) ' (!  !"!''%!&.0& $##,,7,7,--()! ( #$ ('!"!! !!!!!  ..'##,7, ((!'#&!!)!( !)!!! #&-.# &##.-,,-,,)(!!")0$ (!! (!!!!!#--$$$ -,7,,,,!(!)!('$2$ !"!!!(-/$,7,.!!(!(' &#&("""!!/ $$####/,,,-!)!  !!$'# """!(!. #77--)!! '!""$$# !! -//# $# ,,,,-.-!('(!")'##0&$/-.! ##.,,7,,-'!"! !$##$#$&&# ,,,- ("!!!! !( ##$0.  .-,7,-"""!")"!". !# #   ,7--""!!""" $###     /0-,,--! !!)"""!$#/ !# .,7,7,- (!)!!!!! ### #,,7,7, --!%"!"! ### -7,,-& %%"/#!! $  -,,,-0 "!"!/./&&##/ ,7--#& .#    .#,, -$ &$#$! #  .,7,7,-$&##.# !/!   .  ,,--#$$#  #    ,7,,--##.# ,77,- ##.   #   ,,,-$&###   .  ,,.-$#   +  ,77##  #/  +,, +/ 0 $     + ,77- #0!       +,7,, -## ##  +  + + ,,  "#   +     + 77--" .  +     -,7,, # #      ,77--$     +  + +  ,,,,,-     +  ,7--       +  +   ,77-#$  +   +  +  7,,- #     +      ,77      +     ,7,7,   +  + + + ,,          + + + +  77-   +  +  + + ,,7, -      +   + ,7#      + +  +  + + + + 7,,,     +  + +  + +  + +,,    +  +  777   + +   +   + + +  + ,,,,-   +  +   +  + + ,77  +  +   +  + +   +  + +  ,7,    +  +   + + + + + +  ,77    + + + + +   + + + + +7,7,      + + + + + + + +  +  + +,7,    +    + +  + + +  + + + +  +,7,7   + +  + +  + + +,,       +  + + +   ,77,    +  + +  + +     + +,77, C 72 80 1 +                                                                                                                                                                                                                                                                                                                                                                                        +    +                    +  +      +                              +            + +         +  + +       + + + + +  + + + + +      + +   + + +        +     + +      + +  + + +         + + + + + + +      +   + + + +      + +  +       + +   + + +     PLAYBK1_P 124 + $  $ +( , 0 48 048< +$ ( , <048 ( ,< + $048,<  (48@ $08<  (,4@ + $08<@ (,048<@D $,4<@ (048< + $,08   (,048 $(4   ,  +PLAYBK2_P 56 +  $( , $0( 4 +8 , 0$ +4 8( , +0 4 8$ ( +, 0 4 8  $ +( ,PLAYBK3_P 128 +  +8 , 0$ +4 8( < , +0 4 8 <$ ( +, 0 4 8  $ +( , 0 48 048 +$ ( , 048 ( , + $048,  (48 $0  (,4 + $08 (,048 $,4 (048 + $,08   (,04 $(   $(,  +   PLAYBK4_P 128 + (4$,08( 4, $0( , 0$ +4 8( , +0 4 8$ ( +, 0 4  $ +( , +$ ( , 0 ( , + $,  ( $  (, + $ (, $, ( + $,   (, $(   $  +  $     +PLAYBK5_P 32 +  $ (  $ +( +$ (  PLAYBK6_P 64 +$ ,($4 0< ,8@4(0<8$,4< (084<$,08( 4, $0(  \ No newline at end of file diff --git a/BACKUP/ART110/STATSTXT.IMG b/BACKUP/ART110/STATSTXT.IMG new file mode 100644 index 0000000..04aaf9e Binary files /dev/null and b/BACKUP/ART110/STATSTXT.IMG differ diff --git a/BACKUP/ART110/STATTXT2.IMG b/BACKUP/ART110/STATTXT2.IMG new file mode 100644 index 0000000..408dcb2 Binary files /dev/null and b/BACKUP/ART110/STATTXT2.IMG differ diff --git a/BACKUP/ART110/SWEETSPT.IMG b/BACKUP/ART110/SWEETSPT.IMG new file mode 100644 index 0000000..23272fc Binary files /dev/null and b/BACKUP/ART110/SWEETSPT.IMG differ diff --git a/BACKUP/ART110/TEAMSEL4.BDB b/BACKUP/ART110/TEAMSEL4.BDB new file mode 100644 index 0000000..f670713 --- /dev/null +++ b/BACKUP/ART110/TEAMSEL4.BDB @@ -0,0 +1,125 @@ +TEAMSEL4 2000 1000 255 6 9 118 +ATRBKIT 366 815 678 803 +ATRIBUTE 834 1305 400 535 +TEAMSEL4 139 641 232 571 +HTIME 823 1290 52 308 +ATRBHTKT 997 1434 557 664 +ATRBHT 1010 1438 709 810 +A00 206 268 0 8 +A00 206 372 3 8 +F00 213 272 6 0 +F00 214 372 9 0 +F00 218 272 C 0 +F00 218 367 F 0 +F00 219 442 15 0 +F00 219 372 12 0 +F10 297 272 6 0 +A00 305 268 18 5 +6700 388 696 1B 8 +F10 396 372 9 0 +6900 396 696 1E 1 +6700 396 755 21 8 +6900 401 696 24 1 +6900 401 750 27 1 +A00 404 372 2A 8 +A00 406 268 2D 4 +F00 408 372 9 3 +F00 413 372 12 3 +F00 413 442 15 3 +6A00 464 752 30 1 +6900 491 696 24 1 +6900 491 750 27 1 +F00 506 272 6 3 +A00 506 268 33 8 +F00 511 367 F 3 +F00 511 272 C 3 +6900 563 757 36 2 +6910 578 696 1E 1 +6700 586 696 39 8 +F10 590 372 9 3 +F10 590 272 6 3 +6700 590 755 3C 8 +6900 590 696 1E 1 +6900 595 696 24 1 +6900 595 750 27 1 +A00 598 372 3F 8 +6A00 658 752 30 1 +6900 685 750 27 1 +6900 685 696 24 1 +6910 772 696 1E 1 +6700 780 696 42 8 +A00 867 93 45 6 +A00 867 197 3 8 +F00 875 197 9 0 +F00 880 267 15 0 +F00 880 197 12 0 +6800 884 430 1B 8 +6900 892 430 1E 1 +6700 892 489 48 8 +6900 897 430 24 1 +6900 897 484 27 1 +6A00 914 486 30 1 +6A00 981 430 4B 1 +6900 987 430 24 1 +6900 987 484 27 1 +6A00 1006 486 30 1 +6800 1016 573 1B 8 +6700 1023 632 4E 8 +6900 1024 573 1E 1 +6800 1025 720 1B 8 +6900 1029 627 27 1 +6900 1029 573 24 1 +6700 1032 779 4E 8 +6900 1033 720 1E 1 +6900 1038 774 27 1 +6900 1038 720 24 1 +F10 1057 197 9 0 +6900 1059 490 36 2 +A00 1065 197 2A 8 +A00 1067 93 51 7 +F00 1069 197 9 3 +F00 1074 267 15 3 +F00 1074 197 12 3 +6910 1074 430 1E 1 +6700 1081 430 39 8 +6900 1086 430 1E 1 +6700 1086 489 54 8 +6900 1091 430 24 1 +6900 1091 484 27 1 +6A00 1108 486 30 1 +6900 1119 627 27 1 +6900 1119 573 24 1 +6A00 1122 720 4B 1 +6900 1128 774 27 1 +6900 1128 720 24 1 +6A00 1175 430 4B 1 +6900 1181 430 24 1 +6900 1181 484 27 1 +6900 1191 634 36 2 +6500 1200 781 36 2 +6A00 1201 486 30 1 +6910 1206 573 1E 1 +6700 1214 573 39 8 +6910 1215 720 1E 1 +6700 1218 632 57 8 +6900 1218 573 1E 1 +6900 1223 573 24 1 +6900 1223 627 27 1 +6700 1223 720 39 8 +6700 1227 779 57 8 +6900 1227 720 1E 1 +6900 1232 774 27 1 +6900 1232 720 24 1 +F10 1251 197 9 3 +A00 1259 197 3F 8 +6910 1268 430 1E 1 +6700 1276 430 42 8 +6900 1313 573 24 1 +6900 1313 627 27 1 +6A00 1316 720 4B 1 +6900 1322 774 27 1 +6900 1322 720 24 1 +6910 1400 573 1E 1 +6700 1408 573 42 8 +6910 1409 720 1E 1 +6700 1417 720 42 8 diff --git a/BACKUP/ART110/TEAMSEL4.BDD b/BACKUP/ART110/TEAMSEL4.BDD new file mode 100644 index 0000000..8bd9c5f Binary files /dev/null and b/BACKUP/ART110/TEAMSEL4.BDD differ diff --git a/BACKUP/ART110/TEAMSEL4.IMG b/BACKUP/ART110/TEAMSEL4.IMG new file mode 100644 index 0000000..0c0c2f6 Binary files /dev/null and b/BACKUP/ART110/TEAMSEL4.IMG differ diff --git a/BACKUP/ART110/TEAMSTAT.BDB b/BACKUP/ART110/TEAMSTAT.BDB new file mode 100644 index 0000000..971effb --- /dev/null +++ b/BACKUP/ART110/TEAMSTAT.BDB @@ -0,0 +1,63 @@ +teamstat 2000 1000 255 2 23 60 +teamstat 710 1162 131 422 +finalres 109 565 128 425 +4000 138 161 0 5 +500 138 151 3 12 +500 139 288 6 16 +500 139 220 9 13 +500 140 357 C 11 +4000 145 250 F 20 +4000 145 349 12 18 +4000 150 319 15 19 +4000 150 255 18 17 +4000 156 319 15 19 +4000 238 349 1B 18 +4000 242 319 15 19 +4000 242 255 18 17 +4000 248 319 15 19 +4000 248 338 1E 22 +4000 272 349 1B 18 +4000 306 349 1B 18 +500 338 221 21 15 +500 338 151 24 14 +500 339 286 27 10 +500 340 354 2A 9 +4000 340 349 1B 18 +4000 341 250 F 20 +4000 342 161 2D 5 +4000 346 319 15 21 +4000 346 255 18 17 +4000 352 319 15 21 +4000 374 349 1B 18 +4000 408 349 1B 18 +4000 438 319 15 21 +4000 438 255 18 17 +4000 442 349 1B 18 +4000 445 319 15 21 +4000 460 338 33 22 +4000 476 349 36 18 +500 738 151 3 12 +4000 738 161 0 5 +500 739 220 9 13 +500 739 288 6 16 +500 740 357 C 11 +A00 752 258 39 6 +C00 771 249 3C 2 +C00 797 383 3F 0 +2800 803 250 42 7 +A00 842 258 45 6 +C00 893 273 48 1 +2800 914 384 4B 8 +2800 917 373 4E 8 +2800 921 250 51 7 +2800 922 263 54 4 +500 938 223 21 15 +500 938 151 24 14 +500 939 286 27 10 +500 940 354 2A 9 +4000 942 161 2D 5 +C00 943 249 57 2 +C00 944 383 5A 0 +A00 946 258 5D 3 +2800 995 250 42 7 +A00 1036 258 60 3 diff --git a/BACKUP/ART110/TEAMSTAT.BDD b/BACKUP/ART110/TEAMSTAT.BDD new file mode 100644 index 0000000..1a7c84e --- /dev/null +++ b/BACKUP/ART110/TEAMSTAT.BDD @@ -0,0 +1,4513 @@ +32 +0 204 23 1 +ÍåìÞåìÞ¶æß··ÖÒ¸¸ÎΛΥ¦¸¸tjkr)¨¹¨llqqppQQPPQPPŽŽŽŽQQQPPPOPŽSOOS/OSOS////7.6Ls7-///7s.66666666777777/////////77664455555555335555555544444/pppQQT6444446666666666666444666L455NNN,,,,,...........----.åìÞåìååÞæÖææ¤××ÂΦ×؛اÁtt¦¨lÅ2uuqqQPQPPŽPTŽQ>TTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<  """!!"$"&"&!!!!!!!!!!!&"&&""%""$%""$$%"&"%%$+%"&$+%)%)&((!!'''((''(!))),'''&),''''&),&,)-),004777::1::411:7411  ;;;1    !"""""$"& %!!!!!!!!(!!&&&&""&""%""$$"'"+$%%++&"%+%%++&!!!'&'(((!('&)),,)&&,''''&,)),',-)'3: :40:11444949< 1;;59  """"""$!!!!!!!!(!!!!!&"&&&""&&&""&&+2$"$%!(!&"%+22)'!&&''!((((''&&,&))))'''&&))&'',,'(30:77:447704:1::4: 5;;919  ""! ""$ $"&"$&!!!!!!!!!(((&%%&&"$$""%)!("22%&%)&(&''%+++%'!'''&&&&'''&&'&'&))''&&,,,&''-*'(3'07:7 7777741:4 0;;9999   " "" "$ &!&"!!!!!!!((!%""%$%%%$%%"'%$$$)%%+%%)&)++))))'('&)&'&))))&''&&''')),,&3')*,''&'004:77440:7441440 9199;919   "!# " """ ""$$&!(!!!!!!!!!&""%$%""%%"&"%%%%%$++%%$%)++%%+%&''&&&&&))),,,))'''&&,,&'',),'('''00777444041:7<919 1   !!#$$"""&" $&!!!!!!(!!!(!&""""""&&"&&%+$%%$%%%%++%&"++*'!'&&''&&&))'&%)&'&&,&&&'&)-&((((', + +::0047 99   "!"""""$"&$&!!!!!!!!!!!&&""&"""&&'&"%$+2+%%%+++%'&%)!((&&&&&&,&'''&)&'&),&,&3')*)'(((',,007 7:77 700 000999    """" """$""!!!!!!!!!!&"%%""""'!&"&)2$)%%)++%%'!)(((('&&&))))&'&)'''&,&,,,&,*)''''&-),00:7/ + 7774 0 041119   """ ""$$$&!&&!!!!!!&!!!&"""""&&"&'(&&&&)%&%%%%"'!((((!&&&)))&)))&''''''&,,)),'''(,))&'00/ 77::0111991    "  """"""$ &"""!!!!!!!&!!!&&&&""%"'!(((&%+))%+%)!((!'&&&&&&&&&))&'&,,))&'&))''(((')),''::7:0 0411419191   """"&"&&!!!!!!!&!!!&&&"""&"&'!&%22%%++%!((('&""&&&&&''&'''&))))''&,'''&3(&)'(''00: 7: + + +000441147:9   "# $$"$"""&&!!!!!&!!!(!&"""&&""&!%22+%+2%!((((&)"&&%))&&,&''&&,))''))'(','',),'(')007 + 7 + +04110::199 <  "!$" $""""&!!!$%""&!!!!!!((!&"&&&&&&&"$$%%%%!(((('&&&&)%)&&%)&,)),&&'')*)''''',))&'&,-000::77 011149991;;;       """"""$ """!!&"""""&!&!!!!!((!'&&&""&'&&&&))%(((('&))'!'&&&&))&&)),&,'''))''''3&,,&)&,,,00: + 0::4191;5;   "&"""&""&%$"""""&!!!!!!!!!!&""&&&"&&!&")'!(=(&""&")))'''&&&&&,,&,))%,''''',&'')***-'00 +0:77740:41;;;;   # "&!!"$%"""&&$%"!!!!!!!!((!'&&&"%)&&&&!((((!")&&%%)&&&&&''''&'',%),'(((')*,')***.*&0017::4 ::4 ;;;;;; ##" "&"""%"$"$&!!!!!!!((((!&&")""&&!(((!&&&''&))&&))&),'&))'',%)''''',*,')*+..*-)/0 :74744111:4;;<;;  $$"""""""&"$ $"&&"!(!!!!!((((!&&&&&"&'!(((&""&'&)"&&&&),&&&)*)&&)&'('&&))&')*...***)0000 0:7 + + :4:741;;;;<   !  ####"""""""""""""""%$""&&&&&!!!!!!!(((!!&'&&&''&&'!!&"&&%))&'''''&&&&))&&),'(('&,)&'3)*..*-*))//: + 77:: +7:19 <;;;<   # ""&!&&"""$$$"&%$"&&!!!!(((!!!!!!"%"&""&&""&&"%)&&&&&&&!'&)&'&,&&&&''&)&''&*++*)**)*/ +00/ 7:777 47:411;<    #"""&""&"""$ $""!22 &&&"&!!!((!!!!(!!&%)&&&&&&&'&"&&&&&&)))&&))''&&'&,''&,''',)*.*)-*-**7 + + +47741141   !!# """&"$$$""& 2 ""%"&!(((!!!((!!!&&''&&&&&"))&'&&&"%)&&*)&&))&''''&))''',)))***-***0/ + + :::40     " #### "!"""""$"&"$$2 "!!""""!(!!!!!!!!!!!'!'&&&&)%)"&))&&&&&&&)&&)%,'!'(',,)&&&,,',**--*-)0 :1     !###!!"""&&" 2 $$!!""&!!!!((!!!!!!(!!&))))))&&&)&&&&'!&&'',,&''!'&&''*,&,,'(&-)----)/ 7/7:7 + 70        !!""""$$""$ $$$%%2"!%%&!((!!!!!!((!")))"&&'&&&'&&&)&&&&&&''!(')*)')***)''',))--)**0/ + + + + +77 00    00    "    "$ $$"""%$$2 $2 %&!&%%"!(!!!!((((((!&""&&&'&&"&'&)%)&)%)&&&'',*)')****)&&'',*-)-**// + + + + + 7  0  9 "!(!" " $""" %"" 222 %"&""&&&!!!(((((!((!&&&&%"&))"&))"'&*)&'&&'&)&')**.+***&'(')****-0 + + + +  + + :000      !   """"$""&" $"22 $"&&"""!!&"&!((((!!!!!!'&&))&")&&&)&&'))&''''&),',%*..+***,''',****)// + + 07 70  #""  $$""$ "$ $ $"&&&%"&"""&!!((!!!!!!!!!&&&'&&&&""!!&)'((!(')),)%*+.****)))&',-**)-// + + +/ 7 // :0 0      #!(" $ $"""$$ $"!"$$ $%!%$%$$%"&!(((!!!!!!!!!!!''&'!&))&"%)&(!')),,&,)*+*)**))-*)'&)-))./ + +  + + / :0000  99  #!!! ###$$$$"$"&$ !&% 22$$%%%%"&&'!!!!!!!!!!!!((!&))")"&)%%&''&)*)&''&&))))*))****),,))*.// + + + + +0000 9   "## "$" $ 2 "$ 2 $$ $&&&&&""&!!!''!!!!((!!&)%"&&))"&&'')%)'''''&'',***+**-*-),**../6///6 /0 8 + 777 + 000001000     !!""" $$222 """"$ $%$2 "&!(!&"%"'!!!!(!!((((!(&"'&&"&'!(!&),&'&&)),&&)))*+*-**))*...*6 +///// +// 70  00    "!  $(("!  2 $2 %&!!%22$$ "!!(!"""&&&!(((!(((((((!&'))!!''(!),('&*+++*),,',)*)-*****2.** +/  +   000     "$ #2 $$$$!!"$ $%!!!(!&"%"&&&&!((!((((((!((!&%)&&"&&)),%)*+++**%))''&,))****..**-/// /  010      $ $" 2 $$$% $&"$%!!(5(!"%""%)%)"!!!(((((!!((!&)&'""&)%)%**+++%%%))*)'',**-**+.*))) + //  /0 0410 #"  $" 2 $ 22%!!&"!&&!!!&""""%%)&""!(((((!!((!'!!'!'&)&&**%*++%%*))*+*))'&&)**...*--/ / + + +0 0100  !!!!" "$$ 2 $ 22$(!&((&!!"%"&'"%%&&"&!!(((!!((!'((((!'&&!%***++))**%*+****,'3)+**+**-* +         !""" #$$ $%"""&!!!!&$$%""""&&&&'!!!!!!((!'!((((!%%!)*%%+++*******%***,''-+.***-*.F 192 86 1 +*'*,''''****(''''''#""##''''''')(''')))'''')****'********)')********----****'('''''''***''''''''''''''***'''''''('****----********)')********'****)'''')))'''()'''''''##""#''''''(****'''',*'**''''""""'''$"""""""""""""''%"'%'''''"%'''''''''''''''''')*)********''''''#"""#%'''''"'$$&&&&$$'"'''''%#"""#''''''********)*)''''''''''''''''''%"'''''%'"%''"""""""""""""$'''""""''''**"""""""""""''""""%%'''''''''''%"""""'''''''''###'"""!""""""""""!"""'###'''''''''"""""%'''''''''''%%""""''"""""""""""*.""""""""""'"""'''''''""""""""""""""""""""""""""""""""""'''''''"""'"""""""""".34444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333""3/**/////-33--/  /-*/  /**-  -*'-  -''*  *'"'  '""*'  '*""*-  -*""-/  /-"*-  -**-   -*'*   *'"* + +*"( (' '' '' '' '%%' '* *' '"'" + +"'""'" "'""'" "'""'' ''""'' ''"""*' '*""''*' '*'''*,*  *,*'**--  --**--////----////--//0//0///33--33//33--33//33**33//33**33//33''33//33''33//33''33//34##43//34""43//3443/3>44>33>44>334444334444334444334444334334334//4344."".4445-""""-5445*""""""*5445*""""""""*5445''''''''''5444'''9999'''4444'**8888**'4443'**7777**'3441*+-6666-+*144/---6666---/44/---7777---/45/--/8888/--/55////9999////54/1//:::://1/443333;;;;3333443333<<<<3333444333====3334443333""""""" !"""""""""""""""""""""""""""""""""" !""""""""""""""""""""""""""""""""""""""""""! """"""""""""""""""""""""""""""""""! """""""3333443333333/////////////////////////////////////3//0///0/////////////////////////////////////33//////33/////////////////////////////////////0///0//3/////////////////////////////////////3333333444333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444433333/33333333//3////33333333333333333333333333333333333333333//3////333333333333333333322333333223333333333333333333////3//33333333333333333333333333333333333333333////3//33333333/3333344433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333412 96 46 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6+ 66&*&66++++++6666666&&&66+ + + + + + + + + + + + + + + + + + + + + 66&*&&66666&&&***&&.--%%%%%%%%%!!!!%%%%!!!!!!!!!!!!!!!!!""""""""""""""""!!!!!!!""""""!!!!!!""""""!!!!""""""22.)))))))%%%%%%%%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!"""""""!!!!!!!!!!!!9=2''''''((((((((((((((())))))))))%%%%%%%%%%%%%%%%%%%%%%%%!!!%%%%%%%%%%%%!!!!!!!%%%%%%%%%%%=39'''''''''''(((((((((()))))))))))))))))))))))))))))))))))%%%)))))))))))))0<3''''''''''''''''((((((((()))))))))))))))%%%%))))))))))))))))))))%%%%%%))))%%%%%%% +*;<'((()))))))))))))%%%%%%%!!!!%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""" 43%%%%!!!!!!!!!!!!!"""""""""""""""""""""""""  ;?0]'VFG;; +E9#6RooQ Q QO{P{{{{€{OP\QQ{O{\\P{{{{\oKy7U:X99:FGFF[::WGW[:G>L>Z?>>Z?;;;F;-;F=,E#6K Q QQQQOO{{{{{{O{{QoQ}OOOP\P{OPPPQxt7cV=:9:FGF::V:'J;[]XG[FG;GF<?FF +:,E9#16 gK o QP{{P\OO{O{\QQP{{{Poo\{{PQK6SR7VH::9YME9VYY9GF::]M4M9=;F;GGG?>44444::::::   7<<$!$,<,$#"$,###  "?   + 6 - -- + + + + + + + + + + + + ---  + + + +  +  +      4444::::44::  !$<<,! $###,.,!! !5## 6   - -----  + + + + + + + -66 + + + +--  + +  +     44>:444::++ #,,# #,$5"&.,"  !##!!  + +-6 - + + + + + + + - 6----  -   + +    *  44:4:::4++$ ! $7#$$,,# !","#,$5 !#    + + + +  -- - + + + + + + +- + -- + + + + +       444:+:4::::!7<# $,,<,#!#$,,$"#! !!!! ! +    -  + + + + -- + +  +  + + +      4>44:4: ##!$77,$!!$,<<$ #,$$$$#!5 &&&! #  - + -  + + + + + +-6---  --- + + + + + + + +    :44:44 !7<$$"#,<<,"!,$$"#5 !55 !#! #    +-  + + + + --- + -66-  +-- + +        4444:+:::   !#7$$$#,,,,$"#!&5 !  ## #!!& +  6  + + +- -  + + + - +---- + -6--   + +       44444:::+: !#$$,.$!#,,$.#55 &! 5 #%%!&!!!&!66   + + + -- + + +-6- + +-- + --66   +  +       4444:+: # ,./<!"$$$!5!!!! !%"#! &#""      +-- 66-- + - +-6-- +       444:::::: $7$##,.<."!$$$ =5#"! !&&#&! !&!!#""     + +  + + -6 --- ---- -- +  +      44::44**  $7<, !$,.,,,"".,$ &"&55 !&&&5 #%%##"#  +  --- +   +-- + -- -- -6 +   * + +  + + +    444444:4   7<7""""$,,,,.,&!"# 5!&!!#"& !%%#&"#!    -   + + + 6- + + -- --- + + + + *  + +    + +     4444  $<,$#!"! "$"$$$# && 5!"%"#"&&&""#&&#&!       ---  - ---  +   + +      444::44  $$,7!55".$"#&5!& 5 &%"#&&!&(#&!&((#" 6   -  +---6 + + -----66 *  + + +  + 4>44:4::  77$#,<<," 5 ""%&&5 !&!(""##! !!&##(((""'%   + - - - --- - ----- + 6-66--   +  + + + 4444::+<4:  7<7##"$!,/.%& &""!!###&((&(#%&!&%%%%'%(&(&&   +   + - + + + + -66- *  + + +    ****44: ##$7$#$$# #,"!5 !!!!&("&&&!(""%%%%"%%"%"&!!!&  +   +   -  + 6-    + + +   +   +  * * 44$+$77$!$.<.#!!5#& 5 !&#%#&!&((('.%"(""!&&!!(%(6    + + + + + 6---- 6- - -   + +   + + + +    * +787<7$! #>>=>=>>= + +  + + +  + + + +     %--55577777789119999989  +  + + +  + +      "#...%%-55---5555555555     + +   + +      + !!##%%%&%,,,,,,,,,,,     + + + +  + +    !!(...**************     +  + + + +         !!!!!"!(!()(((((((((     + +  + + +      +  !'!(!(''(((((((((  +  +  + + +    + + +   + !'''!((((())((((     + + + +    + +   !##&5555677789111122222    +     +     !.&5566777891133444444444 + +      +        $$$$$$77:::>>=>=>>=   + +         "!%--55577777789119999989 +        + +  !...%%-55---5555555555   +     +     ##%%%&%,,,,,,,,,,,    + +    + +      ! !(...************** +   + +  + +        !!!!!"!(!()(((((((((  +   +          +  !'!(!(''(((((((((  +          + !!!!!(!((((()))((((  +    +  + +     +  !&67777777789111122222             +  +  #.&5566777891133444444444          + + + $$$$$77:::>>=>=>>=  +          +     #!#%--55577777789119999989  +          +  +    '#...%%-55---5555555555      +   + +   + +!!##%%%&%,,,,,,,,,,,            + +!(...**************           +  +  + !!!!!"!(!()(((((((((    + + + + +   +!'!(!(''(((((((((            +    +!!!!!(!(!((((())))((           #&667776777779111112222        +   *5566777891133444444444          +    $$$$$77:::>>=>=>>=      +     %--55577777789119999989          +...%%-55---5555555555      +    ##%%%&%,,,,,,,,,,,        +     !(...**************          +   !!!!!!"!(!()(((((((((       +  !'!(!(''(((((((((      !!!''''((((())()((     + + &%67776667789111112222          5566777891133444444444    +    + $$$$$$77:::>>=>=>>=        +"%--55577777789119999989    ....%%-55---5555555555  +    + + !!##%%%&%,,,,,,,,,,,    + + !!(...**************        +!!!!!"!(!()(((((((((   + +  +  !!'!(!(''(((((((((     + !!(!(!''(((())((((    + + +#.677777677789111122222      +.&%5566777891133444444444   +$$$$$77:::>>=>=>>= "#%--55577777789119999989!!    !""...%%-55---5555555555!     !##%%%&%,,,,,,,,,,,!   "!(...**************!!!      !!!!!"!(!()(((((((((     !'!(!(''(((((((((    "!!"!(((!((()))((((!  +  677757777889111122222   !"#&5566777891133444444444!   $$$$$77:::>>=>=>>= "".%--55577777789119999989!!    !!!#....%%-55---5555555555!    !'###%%%&%,,,,,,,,,,,! !!!!(...**************   !!!!!"!(!()((((((((( !'!(!(''(((((((((!   "''('!(((((())))((   #"#&77776777789111112222 .5566777891133444444444 $$$$$$77:::>>=>=>>="!"  !%--55577777789119999989!   ...%%-55---5555555555!  ###%%%&%,,,,,,,,,,,!   ! !""!(...**************""   !!!!!"!(!()(((((((((!!  !'!(!(''((((((((("     !'!!''(((((())()((  !#%%6777777789111112222 .%&%5566777891133444444444" $$$$77:::>>=>=>>=    %--55577777789119999989  "##...%%-55---5555555555! !!!"""##%%%&%,,,,,,,,,,,!! !!"!(...**************  !!! !!!!!!!!"!(!()(((((((((   ! !'!(!(''(((((((((   !!  !!""!!!((('((())(((("!! !!""%%667776777781111122222   !"! ""!#5566777891133444444444   " $$$$77:::>>=>=>>= # !!!"!#%--55577777789119999989  #"" !""...%%-55---5555555555 "!"##%%%&%,,,,,,,,,,,  !#!!!#!(...**************  #!!!!!!!!!"!(!()(((((((((  !"#!!!!'!(!(''(((((((((  ##"! "!''(((((((()))(((( !" !!!      !!#     #" !" "     ""7"""#" " "##"!#   !  !   "   #!!#  "  !!       !!    +   !   7  ! +  77  !    !"!!    7  #!""!!!  3C 176 24 1 +Š‡‡‡ŠŒˆˆ¢ŒŒŠ¢Š‡¢‡¢“£Ž•¦’–’¦¦’§–§¨±¨©¨  ÁÁÁªªÂÃÃÃÄÄÄĹ¹¹¹¹¹¹¬¼¬¼¬¼¹¬¹¹¬¼¬¼¬¬¼¹¹¹¹¹¹¹¹¹¹Ä¹ÄÄÄÄÃÃÃêªÁš©š©¯¨™±¨§’’’–’‹‹¤¢¢Œ“Œ‡¢Šˆˆˆ‚‚ˆ……ƒƒƒ_Q~~``LaMMbNuuvcccccccgcdcgcgcˆŒˆˆˆˆŒŒŒŽŒ¢‡¢‡¢“Ž••’¦–§’¦™¨±¨©š ÁšªªÃÂÃÃÃÄÄŬ¬ºº»º»º»º»»»»»»º»º»ºººººº¼¬¬ºººº¬º¼¬¼¬¼¹¹¹ÄÄÄÄÅÅꪠ© š¯¨™™™§–’’§’’‹Ž“¢ŒŽ“Š¢‚ˆE…Œ‚EƒFFF__KQP`eaObNjvvggcgwwwwwdwwddddgˆŒ‡ŠˆŒˆŒ^ŒŒŽ¢‡‡¢Œ‘‘‘—‘˜‘˜¸¸µŸ·´·žÑÑÑÑÏÏÏÏ̶ÎÎÒÀÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×Ö×ÖÖÀÀÕ¿Ô¿ÔÇÇÇÇÔÇÇÔÇÇÇÇÇÇÇÈ®®®®ÉÉ°°²²²³³œœ­µ±›™’—›‘‘’Ž¤ŽŽŽŽ¢Š‡Œˆ…ˆ…EƒA††DqqqrWpJV{|Xo[]zzzzYzYzYzYYYzznŒ‚ˆ‡‚ˆ^ˆ…‰‡‡¢ŒŽŽ‘‘‘‘˜˜˜˜¸ŸŸŸŸ·Ÿ··ÑÑÑÑÑÓÓÐ涶ÒÒÒ×××××××××××××××××××ÖÀÀÀÀ¿¿¿¿¿¿¿¿ÔÔÔÔÇ¿¿ÇÕÈÕÈÌÉÉÉÉÊ°²Í²³³³³±¯˜––—˜’ŽŽŽŽŽ“ˆŒˆŒŒˆˆˆ…………B†DqqrrZZV{||[]]]YY\\\\\\\\\\\\\YzŒ^ˆŒ<‡ŠŒˆˆ‡‰¢¢‡¤Ž¤’—’——”—¯±¯±±š­³­œœ³Â²²°°ÆÆ®®¾¾È¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾½¾¼½½½½½½½½½½½½½½½¼¼¼Æ¼Æ¼ÄÄÅÅÅÅÅÂœœªšš¯¯±±››––¦¤¤•¤Ž¤ŒŽˆˆŒ‚^ˆE…ˆ^…†xxkkDSUHRRVygifmfmhhhhhhhhhhhfffˆˆŒŒ‡ŠŠˆˆŠ‰‰‰‰“ŒŽŽ“¤¦’’–’–§’¦§–¨§¨¨¨©±©©©ÁÁªªªªÂ«Â«ªÂªÂªÂªªªªªªªÂªÂªª  Á©š¯©±¨¨™™™§§’’¦¦••••““¢ŒŒŒŒŽŒˆˆ^Š‡ˆEˆˆE^^@ƒF__}KK~s`ttLaaaMMMˆ^Œ^Œ‡‡ŠŒ¢‰‰¡¢ŠŽ“‡¢¢“Ž¤•ŽŽ•••¥¦•¦¦¦¦¦¦§§¨™¨¨¨±¨¨©¨©¨¨©¨¨©¨¨©¨±©¨¯¨¨±©¨©¨©±©±©¯©©©©©©©¨©©¨±¨¨§§§§§’¦’¦’••¤¤••Ž¤Œ¢¢¢¢¢ŠŒŒˆ^ŒŒ‡‚^^^ˆ…^ˆ………@ƒƒ}_KKK~~~~sssss`GGssssssss`ŒŒŒŠŠŠŠ‡‡;¡‰¡‰‡ŠŠ“‡‡‡“Œ“Œ¤Ž¤••¤¤¤•¤¤•¦¦’’¦’¦¦’§¦§¦¨¦§§§§§§§§§§§§§§§§§¨§¦§§§§§§¨¨§¨¨¨§¨§§¨¨¦§§¦¦’¦¦¦•¥¦•••••¤¤Ž¤Œ¢“Š¢‡‡‡‡ŠŒ^ŒŒ‚‚‚‡‡‚‚^E^^EEE……@ƒƒ}__KKKKKKKKKKKKKKKKKKKKKŠŒ^ŒŒŒŠ‰;‰¢‰‡‡¢ŠŒ‰‰¢¢Š“Œ“¢Ž¤¤Œ“¢“£¤¤••¤¤¤¤¥¥¥¤¥¤¥¥¤¥¤¥¤¥¥¤¥¤¥¥¤¥¤¥¤¥¤¥¥¥¥¥¥¦¦¦¥¦¥¥¥¥¦¥¥¥¥¥¥¤¥¥¤••¤•¤•“£“¢¢¢ŒŽŒ¢Š‡¢‡¢¢‡ŠŠŒŒ‚‡‚‡‚‚‡‡‚‚‚‚^^^ˆ‚^^^EE……ƒƒ}ƒ}}}ƒƒƒƒƒƒƒƒƒƒƒƒƒƒŒ^ˆˆˆˆ‡¡‰‡ŠŠŠŠŠ‡‰¡‰‡¢ŒŒ‡¢ŠŒ¢¢¢‡¢¢¢¢¢“¤¢““¢£££¢££££££££££££££££££££££££¤££££££¤£¤££¤£¤£££££“¤£¢“““““““¢Š¢Œ¤ŒŠ¢¢Š¢‡ŽˆˆˆˆŠ‡Œ…ˆˆ‡‡‚^Œ^‚Œ‚=‡‚‡‚^Œ^^^^^^^^^^^^^^^^^^^^^E^ŒŒˆ^^‰;‰‰‡Œ‚ŠŠŠ‡¢‰‰ŠŒŒŠŠŠŠ¢‰‡¢Š¢Š¢“¢¢“¢£“¢¢¢¢£¢£¢££¢£££££¢£¢££¢£££££££££¢£££¢£¢££¢£¢££¢£“£““¢¢“““¢“¢¢¢“ŒŠ¢¢‡ŠŒŠ¢‡Œˆˆˆˆ‡ŒˆˆŠ<‰‚Œ^‚‚‚‡<‡‚‚^‚‚‚‚^‚‚^^‚‚^^^^^^^^^^^^‚Œ^Œ;‰‰‰‰‚ŒŒ‡ŠŠ‚‡‰‡ŠŒŒŠ¢Š¢¢¢¢“Š¢¢““““““¢££££££££¤£¤¤¤¤£¤£¤££££££££££££££££££££££££££££££“£¢““““£Œ¢¢ŒŽŽ“¢‡‡‡““Š‡‡ŠŽˆˆˆŒŒˆŒ‚‰‚‚‡^‡‡‡‡‚‚‚‚^^^‚^^^^^^^^ˆEˆEEˆEEˆ^^^‡ŒŒ;¡‡‡‡‡Œ‡‰‡‚ŠŠ‡‰‰‰‡‡‚‡‡;;¡¡‰‚‡^ˆ‚‡‚‡‚‡‚‡ŠŒŒŠŠŠŒŒŠ‡‚‡‡ŽŒŒŒŠŠ‡ŒŠŠŠˆŒ‡ŠŠ‡‡‡‡ˆˆˆˆŠ‡Šˆ‹ˆŠ‡‡‡‚ˆ…Œ‡‡‡‡‡‡ŠŒˆŒŒ‚Œˆˆˆ…ˆˆ‚‰‰‰‰‰‡‡;‰=‡‡‡‡‡‡<‚<‡<7‰7‰‰<‰‰‰7‡<‰^‡;‰‡‚Œ‚‚‰‰‰‡Š‚‚Š‰‰‰‰‡;¡¡‰‚Š‡ŒˆŽŽŽ•’’§™¯š©œÂÂÅÃÅĹ¹¹¹¼¼¼¼¼¼¼¼¼¼¹¹¹¹¹¹¹ÄÅÄÃÂÂÁ©š š±›§¦–’‹Ž““ŒŒŽˆŒ‡‡‡ŠŒŠŠŒ^ˆ……Š‚Œˆ…ˆ^‚‚<‡‡‚‚E…@}_K~~`LLOMbuNuvuccccgcggdgdcgdg‡‡‰‰‰‡ŒŒ^Œ‡‰;;‰‡‚Œ‚‚‡‰;;;¡¡;‰ŠŠŠŒ‹ŽŽ•’–––¨±š ªÅÃÅĹ¼º»»»»»»»»»»ººººººººº¼¼¼¼ÄÄÄÅÃÂœª­šš™––›—’•Ž¤Œ‹‹ˆŒ‡‡ŒŠ‚ˆˆ…‹‹‹‚‡‚ˆˆˆˆ‚‰‰‰‚‚^ˆE…ƒ}K~QPeaRbNjvvggiwwfidifwfiwiwdd‡;‰‰‰‰‡‚Œ^ˆŒ‚‰‰;‰Š‚‚ŒŒ;‰‰‰¡;¡‰;‡‚Šˆ……‘‘‘—˜¸Ÿ··ÑÑÓÓÐÐÒÒ×××××××××××ÖÀÀ¿¿¿Ô¿ÔÔÇÇ¿È®ÉÉ°²²³œµ±””›’ŽŽŽŽ‹}ŽŠ‡‡‡ŠŠ‚Œˆ…ˆ…ˆ‡‰‡‚^‚^Œ‚<‡^…A…††xkqrWZp{{|X[]]]YYY\\\\\\\\\\\\Yz‰‰‰‰‰‰‚ˆŒˆˆˆŒŒ‡‰‰¡‡‚Œ^Œ‡‰‰‰;¡‰‰‡Šˆˆˆˆˆ…‘—˜¸´·žÑÑÓÓÐ˶ÎÖ×ÖÀÖÀÀÖÀÖÀ¿¿ÔÔÔÔÔÔÔÔÔÇÈÈÈÉ®°°²³­¯´”›’¤Š‡ŠˆŒ‚‡ˆˆ…ŽŒ‡;‡‡‡ˆˆˆˆ^Œ‚E……†††xDSrWZpVV||X[zz]\zzzzzzzzzzzzzn‰‰‰‡ˆ…ˆŒ^Œ^Œ‚‰‰‰‰‚ˆŒ‚‚‡‰‰‰‰‰‡‚Œ‚ŒˆŒŒŽŒ¤Ž•••’™™±šš ªªÂÃÃÄÄĹÄÄÄÄÄÄÄÄÅÄÄÅÄÄÄÄÄÄÃÅÃÃê ª šš±š±›–•¤Ž‹‹Ž‡‡‡ŠˆŒ‡Œˆ…ˆŒ^‡^Œ‚Œ‚Œ^^ˆˆ^‡‚^ˆ^EƒFƒ†QQ~Q`StaMbNuNvcvcccccccccccuuc‰‡‚ˆˆˆŒ‚‡‚ŒŒ‡‰‰;‚Œ‚‚‚‡‰;‰‰‰‡‚‡‚Œˆ‚‡ŒŒŒŒŽŽ““¤•••¦’’––™™¨±©©©©©©©©©©©©©©©ÁÁ©©Á©©ÁÁÁ©©¯¨±™™–’’––•¤ŽŽŽ‹‹Ž¢‡‡¢‚Š‡‰ˆ…‹…^Œˆ……ˆ…^‡‚ˆˆˆ^‡‚‚‡^ˆEˆ…ƒ}}„KKKQss`s````ttetLt``t```tLt‡‚ŠˆˆŒŒŠ‰‡Œ^Œ‚‡‰‚Š‡¡;;‰‰Š‚Š‡‡ŒŠ‡‚ŒŒŠŒŠ¢¢“ŽŽŽ•••¦¦’¦–§§§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨±¨±¨¯¨¨¨¨§§–§’’¦¦¦¤“ŽŽŽŽŒ‡‡Œˆˆ‚‡‰‡ˆ‹…ŒŒˆ…ˆˆˆˆˆ‡‚^‚‚‡‚‡‡^ˆ^^E………ƒ}„„KKKKKK~~~~~~~~~~~~~~~~~~‰‡‡‚Œ^ŒŒ‡‚ŒŒ^ŒŒ‡‰‰‡‡;;¡‰;‰‡Š‚‚Š‚Š‚ŠŠ‡‡‡¢ŒŽ¤Ž¤¤•••¤¥¥¥¥¥¦¥¦¦¦¦¦¦¦¦¦¦¦¦¦¦§¦§¦¦¦¦¦¦¦¦•¤¤••Ž•“¢Œ“ŽŽŽŠ‡‡ŒˆŠ‡‚Œ^Œˆˆˆ…ˆŒ^Œ‚‚‚Œ‡‡‡‡^ˆ^^ˆE……ˆ…………ƒƒƒ}„_F___FFFFFFFFFFFFF}‡‡‚‡‚Œ‚Œˆˆ‚ŒŒŒ^ŒŒ‡‰‰;‡;¡¡¡¡‰<‡‚Œ‚‚Œ‚‡‡‡‡‡‡‡¢ŠŠŠ“¢¢¢““£“££££££££££££££¤¤¤¤¤¤¤¤¤¤¤¤¤¤“£¤““¤Ž¢Š¢ŒŒŽŒŠ‡‡‡ŠŠŠ‡‰‚Œ^‚‡‚ˆˆˆŒ‡‡Œˆ^Œ‚‚<‡‚‚‚‚‚^Œ‚‚‚‚^‚^^^^ˆEˆ^^E^ˆˆ^ˆEˆˆEˆˆEˆE‡ŒŒˆˆŠ‚Œˆ^Œ‚‚‡‚Œˆ^‚‰‰‰¡‰¡;‰‰‰ŠˆŒ‚ŒŒŠ‡‡‡‰‰ŒŠ¢‡Š¢‡¢ŠŠ¢¢“¢¢£¢£¢££££££¢£¢£££££££¢£££££¢“¢¢¢““ŽŒ¢Š¢ŒŠŒŒ‡‡ŒŒŠ‚‰‡ˆˆ‚‰‡‚‚‡‚‚‰‚ˆˆˆ‚‰‰‰<‡‡‚‡‡‚‚=‡‡=‡‡‚‚‚‚‚‚‚^^^‚‚^^^^?^‚^‚^^^ˆˆˆ…ˆ‚‚ŒŒ‚Š‚‡ˆ^ŒŠ‡‰;;¡;‰‰‰‰‚ˆ‚‚‚‡‡‡‡ŠŠ‡‡Š¢‡‡Š¢¢¢Š¢¢“¢££££££¤¤£¤££££££££££££££££“¢““““Ž¢‡‡¢ŠŒŒŠ¢‡ŠŒŒ‡^Œ‚‡‰‚‚Œ‚ŒEˆ‚‡‰;‰‰‡‡=‡‡‚‚‚‚‚‚‚‚^^^^^^^^^^ˆEEˆEEEE^^ˆ3F 148 11 1 +›™˜˜‰‰¨’—››—–’–œ’œœžžœžž¬­ŸÄÄ®¤ÆÆÇÇȽ½½½¾¾¾¾¾½¾¾¾¾½½½½½½ÈÈÇÇÆÅŮ🭭žœ©›¨¨™™˜˜”‰‰‰‰‰‰‰‰‰‰^ŽŠ^ŠŠFˆˆˆF‰‰]]^K‹KK„„L_HHvv`RaSbcgcxfddyydyyyyeyyyy™™˜””˜“—››“•••–’œœ’žœž¬ŸŸŸ£¤¤ÈÈȾ¾¿ÁÁÁÁÁÁÁÁÁÁÀÀ¿¿¿¿¿¿¿¾¾¾¾½ÈÇǤ¤®ŸŸšš¬ž—–››‘™˜˜”‰‰‰‰‰‰]‰F‰‰‰]]ŠŠFˆˆˆ‰‰]]‰‰]Š^^K„L_PQQvNizhUkgf††{{{{{{{jj{{j{{e™˜™‘›—“‘›““’—“““—¹¶»¸·º¼¼¼¼ÍÍÐÐÐÐÐÐÐÐÐÐÐÐÏÏÂÂÂÎÂÎÂÂÂÊËÌÌ°°±±±¯¡¹¢¢’—•‘‘™˜”¦‰‰‰]]‰]‰F‰]]‰ˆˆF‰]]‰]Š^|^||}Vrr‡t‚‚€[ZZ\\\ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ”™“—“™‘Ž‘—’——————¹¶¶»»³ººµµ´²ÍÃÐÐÃÃÃÃÃÃÃÃÏÂÂÎÎÎÎÎÎÎÉÊËËÌÌ°°±± ¯¡šš¢¢—•‘™™˜˜”‰‰‰‰‰]Š]‰‰‰Fˆˆˆ]]‰‰^^|Š||M}VGrXtt‚€€[Ys\\\ƒ˜”‘——™›—•“’’—•–’œ›•œœž¬­š­££¤¤ÆÇÇÇÈÈȽÈÈÈÈÈÈÇÈÇÈÈÇÈÈÇÈÇÇÇÇÇƤŤ¯ŸŸ­š¬žœœ•›¨™˜˜‰ˆF‰‰]]]‰‰FˆFF‰]‰F‰‰ŠŠ]Š|K|„LVHHQ`izzhbUxgfffyyydydydydTdT˜™“›˜Ž—’’—“•‘‘œ—‘››››•–œ©œž­­Ÿ­ŸŸŸÄÄÄÄÄÄÄÄÄÄÄÄÄÄ®®Ä®®®ÅÅ®®ÄŸ­­­«žœžžœ–•›‘‘‘˜”‰”‰‰‰‰‰‰]‰‰Fˆˆˆ‰]]‰‰‰]]]]]Š^^KKu„____PHHQvv`v``wwRRRRR``w`w`wR™›•Ž™™›’—•“™˜››‘™‘¨‘¨››¨›©•œžž¬žž««¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬­­­­­­­­¬««œœ©©•©••›¨‘™˜™˜””‰‰‰ˆF‰‰‰‰‰‰‰‰‰F‰‰]‰‰Š]Š‰‰‰‰]]Š^^KMuu„„„„ŒPPPHH…QQQ…Q………QQQQQQQ…›“›’——“““›™›“›˜˜™˜™¨‘¨™¨¨¨¨•©•©©œ©©©©©©©©©©©©©©©©©ªªªªªª©©©©©•©••›››‘™™‘›™”‰‰FFFˆ]Š]‰]‰]‰‰]ŠŠ‰‰]‰‰Š]]]Š^^^KKuuMM„„„„Œ_„_L„„„„L„„„„„„„„›‘—Œ–—“›™˜‘Œ“™˜˜˜˜™™™˜‘›‘™¨™™§™™¨¨™§§§§§§§§§§§§¨¨¨¨¨¨¨¨¨¨¨§§§§™¨¨™™˜˜”™‘‹‘”˜‰ˆF‰FFŠ]‰]‰‰‰‰‰‰]‰‰‰‰‰]ŠŠ]]]ŠŠ]]Š^ŠŠ^^^^^K^^‹^‹‹^K^‹^K‹^K^KK››“œ—•›—‘‘“–™˜˜Ž™™™™˜‘››››‘˜¦¦˜§™§§§˜§§§§§§§§§§§§§˜§˜˜§˜§˜§˜§˜™™˜˜˜˜˜˜Ž‘‘]‰˜ŠŠ‰ˆF‰ˆFF‰F‰F‰‰‰]]]]‰‰‰‰‰]]]]‰ŠŠ]]ŠŠ]]]Š]ŠŠŠŠ^Š^^^^Š^^^^^^^^^^^››››››——“—•˜˜˜™‘™˜™››‘“›¨™™˜˜˜˜§˜§§§§¨¨¨§§§§§§§§§§§§§§§§§§™§˜˜˜˜˜™™‘‘‘”‰”‰FFFF‰F‰‰]]]Š]‰]]‰‰‰]‰]]Š]‰ŠŠ]]]]]ŠŠŠ^^^^^^^^^‹‹K‹K‹K^‹^^42 84 9 0 +45 92 138 1 +      + +       +   + +             +   +   + +  +  +   +    + +          +   + + + +       +      +   +  + + +         +       +   + +   + + +  + +           + +     +  +                 + +      +    + +            +   + +  + +   +     +        + +  +      +  + + + + + +   + +         +  + +   +     + + +       +    +   +  + +  +   +      + + +   + + +  + +  +   + + + + + + +    + + +    +  + + +  +  + +   + + + + + + +   +    + +    + + + + +             + + +    + + + +   + +   + +       2222211111119877776766%%%% +     + + +    +   3333333332221197777666-%%&#"    + + +    ;;======<==<<3:7:777666,&&&  + +     +      ===<<<<<<<<<<:::77776666,& +    +    8898998998887777776666,,%.#"! +       555655665666666666,,,,..#"""!!  +       ,,,,--,------,,++.*...##""!!       *****++++++*****#####""!!!         (())))))))))))!((!!!!        ((((('('(''('''''           ((((((((((((('('''           2122211111199877766666%        3333333332221197777666-%%"!       ;;======<==<<3:7:777666&$&!          ===<<<<<<<<<<:::7777666&&&$           8898998998887777776666,%"        555655665666666666,,,,..      ,,,,--,------,,++.*...##      +  *****++++++*****#####"""    +   (())))))))))))!((!!!! +   +   ((((('('(''(''''' + +  +  (((((((((((((('!(!  + + +    1222111111199877777666   3333333332221197777666-&.   ;;======<==<<3:7:777666$$&   ===<<<<<<<<<<:::7777666$&&  8898998998887777776666,.##   555655665666666666,,,,." ,,,,--,------,,++.*...##   *****++++++*****#####""   (())))))))))))!((!!!!     ((((('('(''('''''      ((((((((((('((!!!!     + 21221111111998777777666&.##"!   3333333332221197777666-%.."" +  ;;======<==<<3:7:777666&& +     ===<<<<<<<<<<:::7777666&& + + 8898998998887777776666,%..#"!    555655665666666666,,,,..#"!"   ,,,,--,------,,++.*...##""!! + +  *****++++++*****#####"""!  + +   (())))))))))))!((!!!!  +   ((((('('(''('''''       (((((((((((((('''' +    21222111111998777766666%.  3333333332221197777666-%%.    ;;======<==<<3:7:777666&&  +   ===<<<<<<<<<<:::7777666&&   8898998998887777776666,% +   + +555655665666666666,,,,..    ,,,,--,------,,++.*...#  *****++++++*****#####"""!   (())))))))))))!((!!!!   + +((((('('(''('''''     +  (((((((((((((('('!     + +2122211111199877767766#"!  3333333332221197777666-6%##    + +;;======<==<<3:7:777666&$&   ===<<<<<<<<<<:::7777666&&&  + + +  + 8898998998887777776666,&#"!   555655665666666666,,,,..#""!  + + + + +  ,,,,--,------,,++.*...#""!! + +  + *****++++++*****#####""(! + + (())))))))))))!((!!!! + + + +   ((((('('(''('''''   + + +  + +  (((((((((((((((!'!!  + + + + +  1222111111199877776566%%.## +  + +3333333332221197777666-%%.! +  +    ;;======<==<<3:7:777666&$  +    ===<<<<<<<<<<:::7777666&& +  8898998998887777776666,...  + + + + 555655665666666666,,,,..#" + +  + +  ,,,,--,------,,++.*...##  +  *****++++++*****#####"""! +  +  +   + +(())))))))))))!((!!!!  +  +  + + ((((('('(''(''''' + +   +  ((((((((((((((('''    +  212211111119987777777666%  + + + 3333333332221197777666-%#"   + +;;======<==<<3:7:777666&$ +    ===<<<<<<<<<<:::7777666&&&& + +   +8898998998887777776666,%   + 555655665666666666,,,,.#!"     + ,,,,--,------,,++.*...#!!!     *****++++++*****#####"""! + +    (())))))))))))!((!!!!! +     ((((('('(''('''''     (((((((((((((('''!!       21222111111998777677666%%#"  +     3333333332221197777666-6&&    ;;======<==<<3:7:777666&&&     ===<<<<<<<<<<:::7777666&&&!   8898998998887777776666,%.#   + 555655665666666666,,,,...    +    ,,,,--,------,,++.*...#"#!     +*****++++++*****#####""!!      (())))))))))))!((!!!!    ((((('('(''('''''   + + + + ((((((((((((('!('      + +   2122211111199877766566,%.#"""     + +  3333333332221197777666-%+.""" +    +  ;;======<==<<3:7:777666&&&#  + + + +  + + ===<<<<<<<<<<:::7777666&$ + + + + + +8898998998887777776666,+*###!!   + 555655665666666666,,,,.##""!!  + +   ,,,,--,------,,++.*...#"!(!!       *****++++++*****#####""!      (())))))))))))!((!!!!    ((((('('(''('''''      (((((((((((((('('         + + +   + +     +     +  +        +     + +       + + +   + +   +             +  +  +         + +   + +         + +               + +  +           + +                 + + +           +  +              + +             + + + +        48 100 110 1 +ÑÑÑÔlÑÒÕÇÇ×kÉÒɘ˜Ê˜Ë¹¹mºII™oJpKqqvrLussss|t|s|t|ssssu›vqKw7p/66%   +ÑÊÊÑÉÖÈÈÕÕÉÑÉÉИ4˜G¹mmzyy¾ xNžMvuuÀ|¡¡¡¡¡¡¡{{¡¡{¡¡t¡ttt¡tt¡|t||uu9vMMw=x(6&'    ÑÔÊÔÉÈÈÈÈÒÉÉÉÉ£ÍÍÏ©V_°ÄË’cŒ‘h“eÅ••””·fffff··fffff³¯¯‚¯Y‚‚‚‚¯Y‰ª„€\^ƒT1A+2!*"    +ÉÊÉk×ÒÈÕÈÒÈÒkÓUÊ£ÍCΦ°†b’´Œ²µ“¶e‰³³a³a³³a³³³³³¯‚YYYªªª„ªªªª„„€€BXX?F1A2>** + + +×ÈÈÕÕ#ÕÈÈÈÈÈÈÉllÓÊ͘¢¹m¿nI šŸwKžvvœuusssLs›sLs›sLLsLLsu›œvv8žKpJ/6&H5550U    +ÕÕÇÕÇÕÕÕÈÈÉÒkÉÑÑ$lÊÊ4ËG¹mºHnI™™™o™ooošoJšššoošošošššJšJppppp½ppJšJšoo6™&.nH5G--  + + ÈÕÕÇÕÈÈÈÈÒÈÈÒÉkkÒllÊlʘ˜GG¹mmºHnnn»I»II»IIIIII»I»II»I»™I™™™™™™™™».nnnHHº%5˜44$$## +  + + +È#ÕÕÕ#×ÈÒÈÈÒkÒÈÒkÉÉÉÉ$lÊ4˜˜˜GG¹¹5mm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmmºmmmmm5mm5m55¹G-˜4l$$kk# +  + + + È×ÕÈÈÕÈÈÈÈÈÈ#ÈÈÈÈÈkÒkkkÉ$l$lllllÊlÊllÊÊÊlÊÊlÊÊ4444˜44˜˜˜4Ê4Ê4Ê4ÊÊll$kkk## + +   ÈÈÒÈÕÈ#×#×È#Õ###ÈÈ#ÈÈkÒkkkkÉÉ$É$É$$lll$Éllllllllllllllllll$lllll$$$lll$Ékkk##  + + +  + + +ÈÒÈÈ##Õ#ÈÈÈÕÈÕÈÕ##ÈÈÈkkkÉkÉ$ÉÉlllllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllll$k$kkk  + + + + + + + ÈÈÈ#×ÈÕÈÈ##ÈÈÈkÉÉlʘG¹mºnI™oJpKKqrv›Lss|s|t|t|tttttts|uLvrMKŸo6I.H%5G- + + +ÈÈ#×###È#ÕÈÈÈkkkÉÆ4Í¢m;¿PO xŸwMvuu||¡¡¡¡¡¡¡{¡¡{¡¡t¡¡t|t¡t|tttt||uuœvMwNxOyPzH-   +  + + + + Õ#ÕÈ#×ÈÈÕ#ÈÈÈkkU)£Ï©V_Ä‹’cŒ‘¸““jj•”””fffff·f·fff·³¯‚‰‚Y¯Y¯Y‚Yªª`€\X[…AW¨!*@©,0   +   + ÕÈ##ÈÈÕ##È#ÈÈkkÆƱ±CV_†b’®F‘µh¶e‰¯³aa³³³a³³³³³³¯‚‚ªYªª~ªªªªª„„¬€BXÁ?®AW¨Z}"V +  + +ÈÈÈÈÒÈÈÈÈÈÈÈÈkÓll£˜¢¢mzny¾ xŸwqvvœuussssLsLsuLssLLLsLuL›rv8žKŸo6I.H55%-  + + + +ÈÈklÉÒkkÈÈÈ#ÈÉ$ÉlÊÊ4ËG¹¹mmHn™™o6oooošššJššoošooošššJšpšpJp½ppppššJoo™InHmm5G-$  +  + + + + #ÈÑÉÒÈÈÇÈÈkkÉl$lll444˜˜GG¹ºHHnnnII»II»IIII»III»II»I»I™™™™™™™™In.nnHHmm¹GG--G-$$ + +  + ÇÕÈkÈkkkÈkkÉkÉÉkÉÉllllÊ44˜-GG¹¹mmÌ5mm5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmmmÌ5¹GGG˜-˜44$  +   kkÈ#ÈkÉÉkÈkkkÈkÈk$lÉkkkÉlllll4Ê4l4lÊlÊ4Êl4ÊÊ4Ê4Ê444444˜44˜4Ê4Ê4ÊÊlll$$É$Ék$$# + +  ÈÈkÒÈÈk#ÈkÒÈ#ÈÈ#ÈÉkkkkkÉkkkkÉ$É$lÉlll$Éllllll$l$lllllllllllllll$É$$É$kkkkkkk + Ç##ÈÈÉkÈ#Õ#È##kkkkkkÈkÉkkÉkÉ$$llllllllllÊl4Ê4Ê4ÊÊlllllllllllllllllÉl$ÉÉÉ$$kk$ +#  +Ç#kÉkÈÈ#Õ#ÈÈÈklÊ4444G5mHnI6oppKqrv›Lss|s|s|t||t|ttttts|urv8ž7ŸJo6.Hm¹-G- ÇÇÇ#ÈÈÈÈ###ÈÈkkkkllll4Í¢¹zPy xNwMMMuu|||¡¡¡¡¡¡{{¡{t¡tt¡t|t¡tt||tt||uuvMMwNNxOPzQ5¢-$  Ç kkÈ#Ç#kkÈk$ÆÆ) C,VÄÄbgcŒ‘–¸“eÅ••”·ffffff··ffff··³¯‚¯‰Y‚‚¯Y‚ªª„¬€­Xƒƒ…1A2S}@,<±< ) Ç# ÈÈÕ#ÈkÈ#ÈÈkÓUÆ)£©©°†Zb]…´²^Ž“¶e‰³³a³³³a³³³³³³‚‚YªYªªª~ªªªª„„€\ˆƒ[T®§2¤}V© £ k#ÈÈÈÈ###È#È$$$lƘQmmHI™Oo ŸNž8vvvœuusssssLLssssLLLsLu›vvvqKKJJo6I.%G-4l$$$ Ç##ÈÈÈÈ###Èkkkkkk$4-GGmºHºn.I™™ooooooššJššššoošoooššpšJšJpp½pppJšJšoo™InnHH%5G˜Ê$$kk#ÇÇÇ#ÕÈÈ#ÈÈÈkkkÈÈkkl4Ê4-GG5¹5mHnnnnnIII»I»IIII»III»III»II™™™™™™™™™nnnnnHHm5¹5G--4$k###ÇÇ###ÈÈ##ÈkÈkÈ#È#È$ÊlÊ4˜4˜˜GG¹G¹5Ìm5mmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmmºmºmmmm5m5m55¹¹GG˜-444$$kkÈÇÇkÉÕ#ÈÈÈÈÈ####Èk$$$lll$l$llÊÊÊ4ÊllÊl4l4lÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4Ê4Ê4ll$É$$$$$kÇÇÇÇ##Çkk##ÈÈ###È#Ç#È$$$É$$llÉkkkÉÉÉ$É$$ll$ll$$llllllll$llllllllllllllll$l$$lÉ$k$Ék$$$ÇÇ##ÇÈ##ÒkkÈÈÈ#Èk$ÉÉ$É$$Ékkk$k$É$lllllllllÊÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$$kÇ##ÕÕ#kÈÈÈkÈÈÈ$Êl4-G¹5¹5mnI™6š7Kqrr›uss|s||tt|tttt|st|suœrv8wpJ/6I.H%54$$$ #ÇÇÇ##ÈÈÈÈ###È#Èll4GG¹5QQQzPyORNwM9uu|¡|¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuuvMwNxx &P;HGl$$k$ ##ÇÇÒkÈÈ####Ç#$l)<©©V"_°i×gcŒ‘–“eÅ••””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yªª„€\Xƒ«…AW¤@@VC< ) #ÈÈÈ##ÈÈÈkÈ$££<¢0,¦°††b]´Œ‘µŽ“e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[TD§2Z@¦C<< Æ)$##ÈÈÈ#ÈÈÈ#k$$Ékl44˜˜¢GmHHmHy  JNwqMvœuusssss›sLsssLsLLLLL›œvvqqKpo/6IH5G-4l$###È###È##ÉÉÉÉ$kkl444˜GG¹G¹¹mHn»I™™™oooošoJšJšoošoošoššJšJšpp½ppppJšJšo66™InHHmG44ll$$$k# ÈÈÈÈÈ#k$k$$$kÈkll4˜-G-G-GG¹5mºHnnn»™I»II»I»I»I»IIIII»II™™™™™™™™IInnnnHH%m55G44l$$$$ ## #È###kÉÉ$llÉkÈ#kll44Ê4˜˜˜˜4˜-GGG¹55m5m¹¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmmmmm¹5¹5¹GG-˜4l$É$$$$## Õ#Õ#ÈÉ$$Él$l$k#È$$l$llll$llllÊll4ÊlÊl4l4l4lÊ4l4Êl44Ê44˜˜44444Ê4Ê4ÊlÊllllkkkkkk###  #È#È#$Él$lÉ$lÉÈk$É$É$$$$ÉkÉ$É$ÉÉl$llll$lllllllllllllllllllllllll$$l$lÉ$$kkÈÈkk## ÈÈÉkÈÈÉl$ÉÉÉl$$Ékkl$$$lÉÉ$É$É$É$llllllllÊÊ4Ê4Ê4lÊllÊllllllllllllllll$$É$Ékkk$##### + ##ÉÉ$kÈÉÉÉ$llÊ444-¹mHnIIoooJpKqrv›Lss|s||tt|t|ttttu›vrž7Ÿo6I..H%5-#  kÉÉ$ÉÈÈk$lll$l4444*¦,C )  #lÉll$ÉkÇÉll44<¢Ï0CV¦†Z‹]®´²^d`¶¶‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ……®§WZ}";©<£UU$ +# #É$lÉl$lÈ#È$l4444-GG¢Q%n.I¾ xŸwwžrvœuussssLsLsLs›sLsLLLsu›œvMžKŸJJo6.HHm5-$$ #ÉÑÉÉ$Ñ$ÉÈÈklÉlÊ4˜GG˜˜GmmHHn.I™6ooooošoššJššoošoošoššššJppppppppJšJo¼™™I»nHH5¹Gl$$$### ll$$É$l$É$klll$$l4˜4Ê4-¹5¹5mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™™»nnnnºm%m5G˜-4l$$$ # ###lllÑ$lÉl$ÉÈkllÉll$4l$l˜Ë-GGGG¹¹mmm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmm55¹5¹GGG-˜44$$kkk # +##ÑllÉ$Ñ$$ÉkkÈk$l4lll$$Ék$$llÊ4Ê4Ê4ÊlÊll4l4l4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4lÊlÊl$$l$kÈk## + $É$ÉÉlÑll$k#È$lll$$ll$kkÉ$$$l$É$$l$lll$$lllll$l$llllllll$llllll$lÉ$l$lÉ$É$k$k  +###ÉÉÉÉlllllllk#k$ll$ÉlÉ$kkÉl$Ñ$lllllllllllÊÊ4Ê4Ê4ÊÊllÊllllllllllllllllll$É$$Ékkk  ÉllllllllÉllÉkl44˜G5mmmHHIoJp½Kqrv›œLss|t|t||t|ttts|uuœrvKw7Jo&nH55-l#Ç # lllllÉllÉ$ll$kl44˜¢5Q;¿yyOxNwMM99u||¡¡¡¡¡¡¡{¡¡{¡t¡tt¡t¡t¡tttt|tu9vMwŸx OPzmm0-4#  +ÉlllÉl$ÉÉ$ll$lÓ£±©V_°†3g’´‘–h“¶Åj•””·fffff·f·fff··³¯‚‰‚Y¯Y¯‚‰Yª„€€­XX[…AW2¤E*VQ± # + +ÉlÉÉlll$lÊl4ʣƣV¦}†¨‹]®´Œµd¸“¶‰¯³³a³³³a³³³³³‡¯‚YªYªªª~ªªªª„Š€€Bƒ[¥AW¨SS*V00< +ll$lllllÊlll$4l$l˜G5QHnIIOOšxpwqMvvuussssLsLsussLLLLsLœLvvžKwJoOIIH%5G--## + +llÊlÊlkÉl$l$ÑllÉk$4˜G¹5mHHnnI»™6™ooošošJšššoošooooššJšJppJp½pppJšššo6™I»HHm5G-˜44$  +##lÊlÉlÉkklÉÉ$$Êl$kkl˜˜GG¹¹55¹mHºHnnn™III»IIIIIIII»II»III™™™™™™™™™.nnnnºmm55G-˜4$È  ÉlÉ$É$kÈÉlÉ$ll$llÉ$l4˜˜-˜˜˜˜˜GG¹5m¹5m¹5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmm5m¹5¹GG˜G-˜44$k ##ÉÉlÊl$ÉkÉ$ll$É$l$kkl4llÉ$É$$llÊ4ÊÊl4ÊÊ4lÊ4ÊÊÊÊ4Ê44Ê444˜44˜44Ê4ÊÊÊlllll$$$l$kk##   #ÒklÊÊll$ÈÉÉÉkk$$Ékk$l$kkkÉ$$$$Élllll$lll$l$l$llllllllllllllll$$l$$lÉ$$kkk## + ÈÉlÊl$É$ÈÈk$kkÉ$ÉkkkÈkÈkkkkÉ$lllllllllllÊl4Ê4Ê4ÊllllllllllllllllllÑlÉ$$É$kk$ÈÈÈ##   +# Éll$Ñ$ÉÉÈÇÈ$ll4˜GGG5¹5mmnI™Jppqq8rv›uss|st|t|tttttttsœ9v8žKŸJo66.m5G-4$ $ +##lllÑkÉ$lkÇÈÉl4˜-G¢mmQm;¿P¾RxwMv9uu||¡¡¡¡{¡¡{¡{¡¡¡¡¡¡t|t¡tt||tt||uuvvMwNx::Oz;50-$k +#  lÊll$lllÉ#Èkl4Í¢Q©VV"_i‹’F‘–h“ej••”””fffff·f·ffff³¯‚¯‰Y‚‚¯Y‚ªY„¬€\XÁ[«A¨S@@VC )U lllÉÉllÉÉÈÈkU<<0¢C©V¦ib®´²‘Ž`¶e‰³a³³³³³³³³³³³‚‚YªYªªª~ªªªª„„€€­Xƒ[T]WZS@¦"<))$#  ÉlÉÉ$lÉ$kÉk##l˜˜Æ4£<¹mnny:oxpžMvvœœusssssLLssssLLLsLuLœvvqžKpo6InHm5˜44 ## Ñ$ÉÉ$ÉÉk$lÉ#Èl44Ñ$ll4˜5m%ºnH»I6¼ooooošoJššJšoošoooššpšJšJpp½ppppššoo™6IInHm5GG4l$ ### llllÑ$É$llk#È$lkk$Éll-GG¹5¹¹5ºHnnn»II»I»II»IIIII»III»II™™™™™™™I™nnnnnHHm5¹G-G-l$##  +  ÑllÉ$ÑllÑlkÈÉÈÈÈÉk$l44˜˜-G˜˜GG¹mm5mm5m¹¹¹¹¹¹¹¹¹¹¹¹¹mmmºmºmmmmmmm5555¹G˜-444$$$$#  +kÑlÉÉlÉl$lÑkÈkÈ#ÈÉÉll$ÊlllllllÊ4llÊÊÊÊÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4ÊÊÊllll$$$$Ékk$# ÒÈkÉ$lÉlÊlkkkÈÈÈkÉ$$kÉ$$Ñ$ÉkÉÉ$lllll$$llllllll$lllllllllllllll$$l$l$ÉkÉ$$kk$##  È##kÊlÉlÊ4É#ÈkkÈkÉ$$lÉ$ll$$$É$$llllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$##  #ÇÒÉlllllÉÈÈk$Ñ4G¹mHHºI™ošpKKq8v›uss|s|s||tt|tttt|st|suvrMqw7JoI...%54k    Õ#ÈkÒkllk##Èkkk$l4¢5;z¿zO xNwMMvuuÀ||¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuvMžwNx:¾y&y;5$  ##kÈÕÈÈllk##k$Æ£<ÏC@°†b’cŒ‘–h“eÅj•””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yª„¬€\XX[…W22>*@V )$ ###ÑÉÈÇÇÕlkÈÈÈkÆ£<¢CC©_†Z‹]D´ŒµŽ“¶e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[T]WWR!*@0) # llkkÈÈÈ##ÕÈÉ4Ê4˜-˜-mHnI¾O6šŸ7ž8vvvœusssss›sLsssLsLLLLLu›œvvqK7poo™&.H%5kk ##  lÑllkkÈÕ#Ç#kÉÉl4˜˜˜4˜¹mmHºHnI™oo¼™ooošoJšJšoošoošoššJšJšpp½pppppšJšo6™Inn%H555G--$  +ÑlÊÉkÈÈ#Ç#kll$Él444˜44GG¹m5mmnnHnn»II»II»I»I»I»IIIII»II™™™™™™™™™.nnnHºHmm5G-G-## +# ÉlkÈÈÈkkÈÈlll$kklll4lll˜-GËGGGGG¹55Ìmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmm5mmÌ5¹¹G¹G˜4444$# # lÉÈÇÈkkkÈ$lÉ$kÈk$lllÉkllÊllllllÊllÊÊ4ÊÊlÊ4l4Êl44Ê44˜˜44444Ê4Ê4Ê4444l$$kk$$$  ÉÈÈÈ##kÈÈ#kÉ$ÉÉÈ#k$l$l$É$$lÉ$kkÉÉlÉlllÉ$llllllllllllllllllllllll$É$l$l$$$$kk$$ # È#kÒÈÈkÈÕÕkkÉl$kkÉ$lllkÉlÉ$ÉÉ$l$llllllllÊ4Ê4Ê4lÊllÊlllllllllllllllllll$l$$l$$ ## ÇÈÈÈ#kÉÉkÈkklʘ˜4$˜5mHHHHIo6špKKrv›uLs|s||tt|t|ttttuu›vrMKwJ/o6.H%%-k #Õ###Ò$lÉÉlÉkl4˜˜4Í5mz¿P¿O x=wMv9u||¡¡¡¡¡¡¡{{¡¡¡¡¡tt¡|tt¡t|tt|t|uuvMMNŸ::OPz%-## #È#ÕÈÉllll$lkkl£<ÏC©V°!×gcŒ‘–“eÅ••””·fffff··fffff³¯¯¯¯Y‚Y¯‚YYª„„€\Xƒ…AW>!!@" $#  Õ#kllÉÉ$lÉl$ÈUÍ<¢Q¦V°†¨ÃbÂc´‘µ““e‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ?…1A2Z¤*@< # ##ÉÊÊlÉÈkÉ$lÉÈ$4-GGQ5mHzHny¾ šNKžvvœœussssLsLsLs›sLsLLLsu›œvMqwKxJo66I%%5 ####Õll$É$È#ÉlllkkÑl44˜GGG˜G5mmnII™o™6oošoššJššoošoošoššššJpppppppppšJoo™IIInHH%55-  ### ÈÈÉÉllÉÈÉll$kÈÉl4˜44lÊ4˜G¹mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™IInnnnHmm555G--- $ +# ÒÈkÉÉll$ÉllkÕ###klllkÉ$ll4˜GGGG¹5m5¹mm¹¹5¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmmmm55¹GG˜˜˜4l-#lkÒk$lÑ$ÉÉkÇ##Õ#ÈÉkÈkkkÉ$l$llÊl4Ê4Êll4lÊl4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4ÊÊlll$$Ék$$$ # #ÑlkÒllÉÉ$kÈÇÕ##ÈÈÈ##ÒÈÉÉÉ$Ék$É$É$lll$$lllll$l$llllllll$lllllll$$l$ll$Ékkkkkkk$ + +# llÈkÉllÉllÈ###ÈÈ###ÈÈkÉ$$$ÉlÉ$lllllllllÊÊ4Ê4Ê4ÊÊllÊlllllllllllllllllll$$$kkÈ#$ + +# Ñ#ÇÕkkÉlÊÊkÈÈkÉÉ$lÊ4˜G5H»IooJKKq8rœ›Lss|t|t||t|t|ttts|u›vrMKwJ/6IH5G˜---  +  kÈÇÈÈ#ÉlllÉ#k$$Ê4<¢¢mz¿yO xNžMv9u||¡¡¡¡¡¡¡{¡¡{¡t¡tttt¡tt|ttt|t|uuuvMwwNx:&z;5¢- # ÉlÉÉkÈkllkÉ$ÉkkÆ ÏC,_†bg’cŒ–¸“eÅ••””ffffff·f·fff··³¯‚‰‚Y¯Y‚‚‰Yª„„€\^ƒT…AW>}",0C   + +  ll$ÉlÉÉllÉlllUUÆ£?<<784/75917.3.1.00.''##%$  ôóòòòòòòòòòòòòõòõòòòòòîïïîîîîïîïîîîîîðððñí +!! **#'"'.-(1.3--3355555585<7<8=8<7;:zznnnnnnnnnnooom|€yVZRrqqkDxBAAE=<<77485555651..0..%$$öõõõõõõõõõõõõõõõõõõòòòòòïòïïïïïïïïïïîîððððñññ! ))**###.'.,1--.5.11359555842477872::fifffiiiiiiidwggvgNNOOSPCQQBB…E>^=‰<771777111,,,1-((( " " ! + + +íííñíììëðëìëìëìëìììììììééééééééìéìéééèèèèèèííí +ê + + !   " --,1315155155585877;::7¡:::bbMbbbbbbbbbMaLL``G~~K__Fƒ@E^^?7‰<<<74/4///1/,Ù,Ù,(((  ßààá áááááááááááááàáàáàáàáááááááááááááááàáààààßÞß  ---.---1/,1155188758<877;::2:::22ss````tttt``ssG~~~QKK__F@ƒ@@E^???<‰7<7777/775//7///&,,,,,((Ü(Ü ÜÜÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßÞÞßÞßÞßÞÞÞÞÝÝ (,---11351&715115785547474:24:::;22KKK~K~~~KK~KKKKK_____@ƒ@@@EE^^^??‡<;4‰2<8<47/44//&&,,/&,,,,(ÜÜÜÜÜÝÝÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÝÞÝÝÝÝÝÝÜÜÜÜÜÜ(( ((,,Ù,1,111111/4/5188555=844;:277;2222;}}_}_}FF}}}}}ƒƒƒ@…@……EEˆ^^^?‚??=‚<7;4;4<774744444/4//&&/&,,,1Ù,ÙÙÙÚÚÚÛÚÚÚÚÛÚÛÚÛÚÛÚÛÛÛÛÚÛÚÛÛÛÛÜÜÜÜÜÜÜÜÛÜÜÛÛÛÛÚÚÚ,((,,,,,,/,/,11111117271878799824;::;‰4;;;247ˆEˆEˆEˆEE^^^^^^^^^‚‚‚^????=?=?==9=7477877774/4/4///4//////,1,/&&&&&Ù&&ÙÙ&ÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØ&ØØÙ,Ù/Ù/,/,/1/1/171877877447787555574247444;;;4<8^^^‚‚^‚‚^^^^^‚^‚‚‚‚=‚==‚?‚======<=8<78774444774/444/////,11/&&&&&,Ù&&ÙÙ&ÙÙ&ØØØØÙØÙØÙØÙØÙØÙØÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØØØ&ÙØØ&&&,//,,//1///17177117157777759988724<74;;;27959^^^^^^^^^^^^^^^^^‚‚‚=‚‡‚==‚??======9877474477/4///////11111/&&&&/Ù&&ÙÙ&ÙÙ&ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙ&Ù&Ù&Ù&&,,//////71717177785577895959877774;;;2;<599‰7;‰7=‚=======9=8777;;7477<9===?9999<4;7887744778877775963657457177777778775777777/71745577<7‰777444565777477844;<88888<47<88<8888885=8=5=889888728999998<;;;;;;4887898dcgdccgcdccccvvuNbMaLG~KK_FB@@@>>???87;7<77447474777777966351-0-1,(((  ââêãääåååæååååäåååååäääääããâá ß ""(,--31175559=9=888=9888877<9999887;;22;48887<88dwdwwddwcwggggvvNNNOeSPQBFF@@@>>>>>6?=7477;;7777747799556355330-(((  âêäåææççççççççççæææææææææååäããâá *(---13555599888888888888<77988<87;2;74;78987778znnnnnnnlnloXXm|€VpHUUPD††BABA>6?>6974;;;7777777796658565.333.100''%$öõõõõõõõõõõõõòïòïïïïïïîîðñ!!)*#""1.-3-35698888<<8=8<8999886988<4::;4;;88859748nnlllolllloohmm€iVTIUUDDDBAAAA>>>9?=<7;247<77777966687763333111.'''%*$öòõòòòòòõòòòòïïïïïïïïïïîðñ !)))*'-(1.3.5555478888998899999==88842:2;44478898877uuvcvccucvcvuvjuNMMOL`GCQBB@@E>>>??988=877<777;4779669842133.311Ù--'   áââãããäããããããããããêããããããâãâââà  "' --,,115555847<899=8889998987877;::22;4788995887LaLLaaaaaaLaLLtG`GC~QQK_@ƒ@E‚?????6?==88‰7<<4;7<88=69997475553313---((((Ü ÞÞßßßßßßßßÞßÞßßàßßßßßàààßßÞÞ ---11/15555958;7<88898=898997;7;:::2;7;7778898888~~~sssGsssssK~KKKKK___F@F@@‚?^=<=6?9=9=74;74;486?9889969787155333131,,,(((ÜÝÝÝÝÝÝÝÞÝÞÝÞÞÝÞÝÝÝÞÞÞÞÞÞÞÞÝÜÜ ( ---1111151555558<7777888=969998842::::;7<77<<4488998___K__K_______F_F}ƒ@@@@@EEE^??<=]>]BBBB>A>>E?BCC?>?A8883&&.+++ + ÜÜÜÞßààààáááááàááááààààààßßÞ /(6/6166:::7;:398338225:{ee{e{ee†ey†yyffgggUhiINQQG__LMKC]>‰F@‰>B‰AB]BB]>@>>]?C?B>?9899&&.++""(  àááãäääääääääããâââââââááááàß((////6666676:::595988355n~nnn~ppZmYookJO‡rllVGM||E‰‰>CCEB>AABBB>>‰FA>CB>>?>A<>995:---0%$!ììíííëëíëííëééèæææææææååçç ###)((//66666776::::3335:652~~~~~~p~~~~ppmmmWooqJtNllGG|D]‰>]DDCB]>>@BCBBE>A@B]>BBB=8<<<9:-:-00,%!  êìééééééééééèèèæææææææææåçç #')(*+/*466776:;66:88967:93dTdydTdTdTTdfTxxgbbSaR`QHPLLK^^E]‰EDEBBCBF@]BBCCC>>AAAB?===2239555+1"" Û ÜÝÞßßàßßßßßßÞÞÞßßßßÞßÞÞÞÝÜ ((((".15667::7;;;32896:539wRRRRaaaaaaaRwRw`vvvQH_L„„MK^^EE]]BDEB>BE>‰AAABCCCE>A2A>@@=2=88<335..5++""ÖÖ××ÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÚÛÛÛÛÛÛÚÙÙ×((///1.&&&316:6:6;6<223:539.5QQ…Qvvvvvvvvv…HHHHPP_„„uKKK^ŠEŠ]]>EEE>F>]A>AAF>BCCB>@ˆ@ˆ2@22A><<3333.51+++""""ÖÖ×××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙØ×ÖÕ"Ö//"/611.&&&35:6;::9285::591::„__P___P____L_LŒ„L„„MuK^K^ŠŠE]‰>]]]ECEB‰>B>]C>‰>CB>B]=@=@¥¥@A‰>]>>EDB]?E]>CCBB>B>]B>AAA@2=AA8=A<><<993333&&&&&ÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÒÓÒÒ..+515155335533595<228993357447^^^^^^^^^^^^^^ŠŠ^^^]Š]]]]]>Š]‰]EC‰‰BBBBBEBBCECEA>BB>@@A@@A>>A==8A<<<88333&3&&&&Ñ&ÑÑÑÒÒÒÒÒÒÒÒÑÒÒÒÒÒÑÒÑÑÒÑÒÑÑ&&&&&3+55555.3353338232=355893:444:^^^^^^^^^^^^^^^^^Š^Š]ŠŠ]]]]]>]C^C]AF>]BBCCCBCCBFA]>@@@¥@@>AA=AAAA++++##r}~~~|~|~|~YYY[SYX\YUXXYUYUUUYUUTTUUUTOSQCRRRRUUUTUUPUPOSRHTUPPUPOLOH:B::99+++#rrrzzzzzzzzYYY[R[TYYYXUUYUUYTUUT[KSTTOSRRRRRKOPVPONKUPPUPSRNOOPPPLN3A770;,,)%%  +klmnoppooooonYX\T[SZYYUYYYYUXUUUUTCRSSTSRKRRKKTPVUPUTRTOPVPNSKSSUPUNKAAAABBB,,)))ghiiiiiiiii\XX\ZRYXYXXUUUXXUUYZC^RRRSRKRCRRTPVVPUPUNNUPPOUOSCRNONRKNNNHHB0700,;)))%deefffffffff\\XYZ[YXYXXU\UUUYTSQQR[RRRRRRRRSUXVPUUOTKSNUOUPUNKRSSCRNKKNNNAAH70B,0,))bbbcbccccccXYZYZRZYYU\UYUUYZSR^RQRRRRRQQRNUVPVTSOTTTSSSTUPPOSRKCRCRKSANAKAAAA77$77$__```````````X\YYXZ[SYYYYUXXTSRRRRRRRRRR^RTYUPXUTTOUNTUNTUPUTUSKSSSRRKSKNNNAKAAAK(A$$77$$___````````\YYXWY[ZYUXYUXYT^RRRRR[RSSSSTUTTXPUTUXUUOYOTTTOUTSSSSRRSSKKSNNKNNHA(A7(7$$_``_```aa```YY\XX\SZYXU\UYUTQ^QRRRSS[SSTVUZSOXUVUPVXUUPURKYTNQRRKKNOONHHB0051))-  lnoppppqqqqYYX\U\STYYYUYYTYSRRRRSSZK[TVUXOSSUVXUXUOTUUTRRTNR[KRRSNOH7H000,))%%  + +nqqsttttttttY\YYYYZZSYYXUXYYTZS[[SZSRSYUUVVTSTUTSTS[TUYTSSSRRRRSTTNNNN:::F>9++++#r}~~~|~|~~~X\Y\YYYS^ZYXXYUYUR[RSZSRZTTTXXXUYSSRRSSSTUOUZRRRSRRTOTNSN:H:FF>99+++#r{{zzzzzzzz\YY\Y\YY[ZTYXUYYSRRSSRRZUXTYUUUXUSQRSTUUTUTUSRRRQRSTTSKNAKABB0,:1)%%  +klmnpopooooon]YYYYYYYZSYYYT]K^Q^[SSZUUXUZZYUUTTTSUXUUYTYSRCRRRSSSRRSTSNNNA77B;)51))%eghiiiiiiiiiZZZYZYYYZRYYTZR^RRRKSZUXUXUTKYUYUYTZUUYTTTZC^QRSTTZSSSSNNSANAA770B,,)))deefffffffffTYYZYYT]Z[SYYSQRRRR[SZTYUUYTSTUUUYTTZTTTZSQRRR[TTSNZNSSSSSKNNNAH77700,)bbcbcccccc]Y]YYYZTT[RZRQQ^Q^RRS[STXUYYYRTYUYYTRRSTTRRS[RSTS[STZSRSKKSTNKNNHAA((7$00```````````Y]TYYZYYZZRR^QQQQQ[[S[RZTYUUYZ[TTYUTR^SRRQS[RSTSRRS[KR[SRRKSKANONAAA7(77$$$$____````````ZYY]YZYZYZR^QQQ^QSZSR[SR[YUXYO[RZUUYSRQ^RR^RSZZSRSS[RRSSSSSKKSNNAAAHH77($$$$````aaa```ZYYZYTYYT[QQQQ^Q[YUZRRRRRZTTYYSRSTTY[QQRQQR[SNZSZZTSSSNNNNAHBB;,,)-% + moppppqqqqQ[ZZYZYY[QQ^Q^Q[YUYT[RRRR[[TZTTZZZTZRQR^RKZTZSSSSSSS[SSNNNHII;,))%%  pprstttttttt^R[TYZT[QQ^Q^QRZYYYYZ[RS[QRZTTYTTTTSC^RR[ZTSS[SSS[RSRSSSKN:MFF>9++#rr}|~~~|~|~~Q^R[ZY[QQQQ^CR[SSYYTTS[[R^RRZYTZZZ[QQQ^RSSZSRSRRRRRRRSNSA:::::>9+++++#r}{zzzzzzzz^RRRZ[^Q^QQQ[[S[[T]YYYS^RRQ^SZZZSSQQ^QQ[SSRR[SSRR[SRSSSNTLL770,)))%%  npopoooooo[[ZR[RR[R^R[ZYYZR[ZZYYZ[^^RRRRS[[QQQQQRSS^RRR[RRSRR[SSKSTONAA7BB,)))%%hiiiiiiihiZYYZ[^^RRRZXXYYYZRSYYZTSR^RS^Q^RQQ^Q^RS[RRRRRRR^RRRSRRSTNNKKAOBB700,))))%eefffffffgf[]ZS[R[R^[XW\X\YZ[ZZZZZZ[RSZRQQQQQQ^RSS[RRR[R^RRRRRRRSSSKKKKNHAAA7000,)bcbcccccccRSZ[[ZZR[Y\YZYYYZRRSYYTTY[ZZSQQ^Q^QRSZ[RR[RR^RRRRRRRRSSRRRKKKKKKAAH77($0$_``````````[[^RZS[[ZX\Y[[TZRRZZZYYYYYTZ[Q^QQQRSS[RR[RR^RRRRR^RRSSRRCRRKKCK3KAAHA77(($$$__`````_``R[R[[[[[YXX\ZSYZRZ]TSTYYYYZSRRRR^RS[RRRR[RRRRRRRRRRSS[RRRRRRRR3KKAHBHB7$($_`````aaaa`^[ZZR[S[Y\YYY\YRSZUYZZYTTZS^R[R[SZZ[R^RRRR^R^R[RRRSS[RR3KAA(770,)1.-*'  kmopppppqqqRZS[ZYY[[YYYY\ZR[YYYYSZYYZQ^RRRSTYTS[S[R^RQRRRRRRSZ[RCKKKAAA$0,).-*'& moprsttttttttR[[[YW\Z[ZYYXYZQ[YYZYZRZS^S[S[[ZZZSSSSS[RRRRR^RR[SRRRRSSNAN::::%++#r}|~~~|~|~~[^RZX\YZ[[Z\XYYS[T\YYS^R^RSR[STYTZ[SZSZSS[S[RRRSSRRRRRKKKAA::FGE++++#r}{zzzzzzzzR[RZYY\ZR[T\YYYYZSYYY[QQ^^R[SZYYZTZSSS[[RSSZSSZTSR^CRRRKKKA77;>11..% & +kkmnopoooooooZY\YYYYYS[[ZYYYYYZTYT[^RQRRRZSZZSSSZS[RSR[TTZUTS[RRRRRRCCKKA7BBI55511.% gghiiiiiiiiiY\X\Y\YYYZR[ZYYYYYZZZRR[S[[ZTZSSSS[SR[SSZSSTTYTZSTZSSSSKRKAKKABBB,;)11)%%%%eefffffffffYY\\YY\\YZ[[[ZXYYZZS^^R[SSZUYZS[S[RR[RZTZSSYYT[NZSSZTSSSNOTN3KA7HBB;;,))))%bbbcbccccccZZYYYY\UY]S[SZT]YTZ^^RQRZTTYZSSZSRSSR[TSSRZTSRRSSSSSSKSTUUNKKK3N7HHH7000,,````````````SZY]Y\X\YYYYZ[[SZZRRRQR[ZZSS[S[SZS[S[SS[RZYT[RR[S[KS[SSUUTNTNNKKNOH77H7000$`_````````Z[SZ\XYYY\\YYZRR[RR^R[ZYYSZS[[SR[SS[SZSRSTUTSRSSRRSSTTTTTNSNTNKNHLLBHBB00$__````aa`a`[[R[T\Y]YYYYY]S^Q^^^[ZYTTZZSTZSS[RRSZSZTTYZSRSZTZSSZTTOONAHH70,,?.--*&& + +mnopppppqqq^^R^Z]YYZYYYYYZR^QQQSTYZZZZZZZ[R[R[[SSTTZSRR[STSSRSSTTTNNHHB7055)-4'/  + pprstttttttt[RR[[YY\YZ[ZZZRRRRRSZZSR[ZSS[SRRSYTSSZYTS[RRRS[SS[SZNTNNOOO::F>9++##r}~~~|~|~~~ZZZ[S]Y\Y[Q[Z^R^^ZZYYZS[ZSSRRRR[TYS[STS[SSSS[S[RRTTUTSTTN:::F>99+++#rr{zzzzzzzz\YZ[[[Y\YT^S^C^^QZYYZZZTTZ[R[[R[ZZSSTYSR[SSSSTS[STUTTUNNNAAH;;551)%- ' + + noppooooonYZ[[RRYYZ]RR^^Q^SZTZ[ZYTZ[RSZTZZSRSZYYS[SSS[TSSSTYTSTTSKKKNHHHB;,;))%- ghiiiiiiiiiZ[R^^[YYZZ^R^R[SYYZRRSZZSR[SZZSSRS[ZTZRSR[R[SSZTTTSS[SSRKOLHHHH70;0)%.%%eefffffffff[[RRZS]YSR^RR[Z]TZS[[ZS^RR[[SZSRZYUT[K[R[SSS[SSTTTSSSRCRNUONNHHHH00000)1))%%bbbcbcccccc[[[YYZZS^^R^[[ZTZZSZYYZRR[SSS[R[UXYSRRRRSTTSSSZTTTZTSRRSTSSNNNOLAA7(($00,,,```````````SZY\YZ[^^QRRZZTZSSZTYZR[ZSZZZRSTUYSRR[R[ZZSSTYUTZSNSRSUUTSNSKNOAKAKA(A770000__````````YZYYZ[R^RR[S]YZZZZZZS[RRZZZSSZT]ZRRR[TTTSSSSZUUZSS[RRSUTSNNSNNAKK(A(A$(000,,`````aa```\\YZ[R[R[[[YYZZTZZS[RRR[SSS[STYSSR^RSTZS[SSZTTSSSRRRSTSNHOHLIB0))%  + moppppqqqq\Y]ZR[[[[[ZTZZ[SSZ[[[RRSZ[R[ZTZSSSS[SZSS[STTUT[SRRSTOTSNNNLIB,)))%'  + +pprsttttttttYZT^R^R[[SZZ[[SZZR[SZSZYT[[TXY[[S[[SS[R[SYUUZSSRR[TUZSTON:L:::>++++#r}~~~|~|~~~Z[^R^^RR[ZYTZZYYZ[SS[SYYSSTXYSRR[SSZSSRSTUYSS[[K[TTSSNOOOP:::::9++++#rrzzzzzzzzS^^^^R[ZZ]YZZZYZRRS[Z[SS[ZYYSRR[RRSTZSTUUYSSRRRSTTSRSSNOOHH770,)))-%  + + mnpopooooon^RR^R[]YTYZZSZS[R[[[[S[RSTT[RR[SSZZSSSTUYS[SSRSZTSSTTSNTNKAN7BBB0511)%%%ghiiiiiiiii^^^R[YYZZZSZ[SR^[SZZS[ZTZZS[RRSZTZSSZZYYSRSSSSZTSSSUTTTNKSKNHH70B5;,))beeeffffffffR^R[ZZZZSS[[SZ[[SZTZSZYYYTZS[[STZRSSSTTS[SS[SSNSSSTTTTSSKKKNAHAHB700,bbcbccccccc[[[ZYZS[ZYZ[ZSZ[ZYZ[SYYYSSS[RSZS[[SZTYTSZSS[SN[[TTSSSSSKNSNNSNHOH7A7777$0_```````````SZZYZZSZ]YZSZ[[SS[[RZYTSR[[RSZS[RSTUUYSSTSRST[RTUTZTSSKRSSNSNNONANAA7777$$$$_____````````ZZZ]ZZZZYZR[[[S[Z[R[YTR^RRRRZTZSZTYYYS[SRR[TZSTYOZNSSR[SKNSKNNNANAA777($$$__`````aa```SZZS[SZZS[R[RR[ZZSZYXY[R[S[SZZSSYYYTS[KRR[SSSTTSSSSSSNSNNNAHBB0,)))%% + moppppqqqqZYZZZZZZ[^[SZZSZZZYXY[RSZZTTZSSSYOZR[RR[TTSSTUS[SRRSSTNNNHBI;;11)%  + oprtttttttttZYYZZZYS[[SZZZZSZYTZ[RRSZZZ[SSZTYZRZN[RNYZSZTS[TTTSRKSNNNLM:F>+9+++#r}}~~~|~|~~ZZZZZZZ[[SZZZ[RZZT[RRRR[TZKRS[ZYYS[ZS[STZSSTSRSTTZKSSSKSHP::FF>:9+++#r{zzzzzzzzz[ZS[[[R[[[ZZS[SYZ[R[[^[ZS[[STTYUSSSR[SSSRSTTSZSTNSRTTTNNNH7H000,))  + nopoooooooZ]YZ[[[RRSZ[^S\XT[ZSSSZYSR[YYUTZS[RRRSSSZZSZTTZSRR[NTSNTNNNA7BB,0,,%%% hiiiiiiiiiZYZ[[SZZZZZSZYXZR[S[[ZYZS[TTYZSR[RSZT[STUTSSTSSSRRRSSNNTOONAHHB700,,5)%%%efffgfffffZS[[[ZZZZZZZTYZ[R[RRSTTS[YYTZS[SRRTTSSTUZRSSSSSSSSSSSSSNTNKNAA7A70B;,,))%%bbcbcccccccZ[RR[[ZZ[SZYYZRRRR[ZZ[[[YUXSR[ZS[STZRSYZSSSTSRSSZSSTTSSSNSKSNKKKAAH7$0B000,_```````````Z[[[ZZ[[R[ZZZS[[[[YYZS[TXVXZRSS[SZSRSTSRRSTTSSSSSSTUTSSNRRKNNNKKAHA(A77$$0,0___`_``````S[[ZTZZRZYYS[[S[[TYZ[RYUXXXZR[[SSSRRZTZSSZTSS[SSSSTTSNSSRKKNNAKHHHA77B7$00,```a`aaa``[[S]ZZ[Z\XY[R[[[SZSR[YXXXXXSRRR[SZTYTZNZTTSS[RSSSZSKSSSNOHH777,?1)%-''  + mnopppppqqq[[[ZZR[XXZRR[RRZYT[RSXWWUYUZRRS[[TYT[TZSZS[RRSSZTTSSRKKHHN7H0051)%'& pprsttttttttZZZSR[ZYZR[[SZZTZZSZZWXXYYYS[SZSSTZK[SSZSKSRSSTOTSSTSSNTHN::F>99+++#r}|~~~|~|~~ZZSZ[YYZRR^SZTYZZZ[SYXXYYYZTSS[STZRRSSZKSZSSZTTZSSSZNSNSNNHF>>>9++++#r}{zzzzzzzzZZ[ZYXZS[[[S]YS[[RZZYYTYYYUXT^SZZSRSYTSSZSSZTTSRSKSSSNSAKAAI;B,?.--%' +klnppooooooo[R[YX][ZZ[[ZZSRR[RSTZYUZTUXXSRSSRSTYUZSSSSRNZSRSS[RK[KSNNNHH77B5D5)..%dehhiiiiiiiii[[ZYZ[RSS[SYS^RZYYTZ[TYYY\UYYS[R[SYUZRS[R[STSRSYNSSSSRSNNOHNN7BB00,5)fffffffffZYY][^R[RZYZ[[YXXXS[SZYYXYTYUT[SZTTSSR[SSSSZSSTTSRTTSNSNTNSOHLBHH000,)bcbcbccccccZY]ZS[[R[ZSZZYXWWY[SRRYUXYYU\SRSTTZRRRSTTTTSTSS[RSSSN[SNSKNOOHNHBHA7(($0,,_```````````YZSS[[R]YZRSY\XWYYYZR^ZUYUXXXZRZTSSS[SZTZSSZSSRKRRSR[KSTKKSHTNNLNAAAA($00$$___````````Z[[[R[ZXYS[YYXX\TZYYUTYYYUXXUTZS[[SZSSSTSRSSSRSSSSSSRSTTTNTNSANHAAA77770$$$_`_````aa`a`ZR[RR[YY[RYYXX\UXYTXXYYYXYXUUYTSRSSSSSZSRSSRRSTTSSTNTTONNHLL;;;,,%%%  + lnopppppqqq[[[[ZYZ[[[ZXWY\X\YYX\YYUUYYYXXTSSS[SSZSSSZTSSSSSSSTTNSNNHOBID;)))%%& + opqsttttttttR[[YY][RR[T\YYYUYYYYTTYXXUYUXUZS[R[ZTSSSTSSSSSSSSKSSSSNSOO:FFF>+++###rr}}~~|~|~~~^RZYY[RZZZYZ[[ZZYYXYYYXXYUXVXXY[RRSYTSSSSS[SSSSRKZSSSNTPP:L:::>9+++#rrzzzzzzzzzR[]Z[RYXX\ZRRC[[SYYUXXYXUXXXVXTSQ[STSSS[[RRRSTSSZTTSSNUMMJL770,))%%&  +kmnoopooooonZYY[^ZXWWY[R^Q^SZZTXXYYYUXXXUYYSSZTR[S[KSSSSTSSSUTSSNUPPMPAA7B0B,5)1.%%gghiiiiiiiiiYXZSY\\W\YYZ[R[[R[ZYYYYXXUYYYTYUUS[SSRRSYTSSTSSSTSSSUUUPOKKK7HB;;0,)5)%%defffffffff]Z[Y\XW\TY\YYS[S^RS[RZXWVYUUTTYXUSR[SSZSSSS[SSSSSRRTVPPUKRCKNHHB70;;5)bbbbcbcccccc[RYYWWX\YYTYYZ[R[RR[QTXXYXXXYXUUYS[RSZTSS[SKSSSSNTTUVVVONKKONNNN7LL7$770_````````````[]Y\WW\YY\YYYYTZS[RR[ZYSZYYYUVXUYSRRSTS[KSRZTZSZTUTOVPUOUOPUOH3KHL7A707$$$$___````````RYXX\YYYYX\XYYXWYSZSSSRQRSTUXVXYUUYSSRRSSSTTTSSSUPZSTUOUPPOOONKNHAA7H770$_``````aa```Z\WW\]Y]YU\YYXXYYYYYYR^Q^RTYYUYUYUXY[RR[SZTTSRSTUUOTRNTOPLMI;;515)%  lnoppppqqqq]X\\YYYYY\YYYXXYYYXUZ[[[RRZZTYTYTUVTS[SNSTTSRSUVUUUTSSOPPIIB0551.%  +nqqsttttttttY]TY\XY\XYZYXYZTYWXYYZSR[SSTYUYTYUYYTSZTTZSRRUUUPXPUSKOMMJMF>FG++++#rr~~~|~|~~~Z[ZYYY\YYYYXX\Y\WWWYYTSTZ[[STYUXXUYTUSSZTK[STUZNUUUUTRTPJMJJJ>+E++++#r{{zzzzzzzzS[^ZYYYYY\XYYYXWWXYYYYYYZRR[SSUXXUUUSRSS[RSUVUTSTUUUTCNOLP>GGD5?1%%  lnoopooooonZ[[T\\YY\XT[ZYXWXXYYUXXUYSSRR[YUUUYTRR[RRRUVVVUS[TOUOTOSAPJMIIDD0,)%%hhiiiiiiiiiZ[[Y\YY\XY]R[UW\YTTYXXXYUYYZRSYYYYSRRRRSSTUVXUUUOUUUUVTKKOPLIII7000))eefffffffffZR[ZYY\XXYYZS\XTYZYUXXYUXYUUYSSTURRRRRRSUUZTUUUUXTTPVPNSTOHLLH3A$($0,,))bbbcbcccccccZ[RRZYXYYYYXZ]S[TXXXUYYYYYYXYZSSTRS[R^SUVUTSRNYPPOTVUUUUNSNTNC3333777$$0,0``````````\]R[S\\YY\WWYR[[\XWXYTYUTYUYTYTS[S[RRRTXXUUTR[TUUYUUUPPORRNNKAK3CA7A(770$7___````````XY[RZXYY\WWXZRRTXVXYYXXXYUYYYYSRRSRRRTUUUUVYSNTUUUPUVVPTRKKKKKK3AHAA77007$``````aa```YY[ZZYYYXWW\SZ]YX\YTXXUYXXUUXT[RRRQRZUYUUUUUTZTTVPXMVPUUNRRRRRCRNSSKNUTNNOSNNNSKTHNNOOHOLLY]T[[ZYWW\YYYYXWXYZTYYYYYXYUZSRRRR^TYUSZTUUUUTKTTYPVPUOUTRNNRQRSSSSSONNNTOOOOKRKSSNNNOOOYXY[R[\WWXYZYXWXYYYXY[R[TUYSRR[RRSUVXUTSSUUUTTZSSOVUTTUTRSNSRKSNNSNOOTNSNOOONNNNNKNKSHOHYW\ZZYWX\YYYXXXYYXXYSR^SZYSQ^RQ^SXVXUUYNRUVUUVORRUUTUUORRSSRKTTNSTOONTONNTONSOONNTNSLNNNY\\XYZY\YYYXXXYZYUYZ^RRR[SQR[SRRYVXUUXU[[TYUVVXUO[SSUURRRCCRSNTNNNTNTONTONSKKNNNNNOLLONNYYYX\[ZY]YXWX\TYYY[RQR[[RRRSSR[TXUYTXPZTSSSUVVVVTSCSTKRRRRRSSKSSNSNNSNTOONKKNSSNSNLLTHOL\\\XYRSYY\XXYYYXYZQQQ^RRRR[S[SSYXXTSNYSTSSSTUVVUTRRRCRRQCSTTSSSSSTOONNHTNSOTNNNKKNNTHNNOYXWW\ZZZXXX\YYXYS^RQ^[RRR[[RRZTTXVXUTTXTUXTTTVUTUTRK[CQQRNTSKSONTOOOTTTNSNNNNNSSNLOKNNHN\WWW\Z[ZXXYT]YYZR^QRSZZSZZSRTYSTXVXUUUYTVVUUUUTUUTSSKRCRTSKSSOUTOTONSNNKKSSSNNNOPOONNNOK\W\\YYSZYYYYYXYZQ^R[ZSSSYZSYWXTSUUUUUXUUXVVUSTUUURRSRRZOTSKRSNOTNNSSNSNSNNSNSNNOLOONLONPW\\YYY]ZZYY\XX\UZRR[SSZSZSTXVXY[SZYXUVVVUUVUSSUT^CRRRRTTSKSNNSNNSSNNSNTNTNNNNNONONNNONLMX\Y]YXXZ[Y\XYYYYYSR[[[[[RSUXXUUTSSUZZUUZOVUYSSSRCRRQKSSKKSOTTTTSKNTOTNNNNNSTOONNSKKSKLPL\YYXWW\Z^TYYYYYYZR[STS[KYYZTXUYYYYTSRUUZTUUUTSQ^C^KSTNSRRSOTTNTNTOOTNSSSSSKNNNNNONKNPLOL60 92 138 1 +HHHHHAAAHLHHAANANNKKKCKKKOPPOTOOTOUOOOTOOUPOOOOTRSNTOTOPULKRCRSKRKRRRKOOSNOOOOOPOOOOONSNBILHAKKHLMLHNKANNAAKANKRSOOUTUPUOOUOTOOUOOOUOTOOTNTNOOPLUOTCSONKRRCRNPOPONKNOPPPOOOONONKLLHAKAHHLLHNNHNNNKKONNNTONSNOUUOOTOOOOUOOOTOOOUOPNSOPPPPPPNSSNKRRRCRNPPPLTSNOOOHSNOOOOKRHNAKNMIMHHANKOHNKKTOOTOOTKRTTOOOTOTOTOUOUUUOOOOOONROPPPPPOTRKRRRRNNONOPLOONNONQNNNNOOTKCHK3KBMLHNNKKNNNKCNPOOOUTKRNOUOTTTOOUOPUPOOOUUOOUONSNPPPPOONKRCCRKTOOSTOOOOPTRCSOPTNOHNTNHNNHOLONKNNNHNRCTOPPUPPNRSNNTOOOTOUPUOOOUOTOOOOOOOSNPOOOOSRQRSKRNLPLNNNOOPLHKKPLLOONTNNSNNHOONAKKNHNNKRSOPPUPUOTTSSKTOUUOULUOTOONOOPOOOPPPOOMPOOTKQCRKRKTOOOPNSOLPUOSNLUOONONSKCNHOOHNKKNONNKCKUPOUPPOTPPTK[KTOOUOOOSNOOOOULUOUPPPPPUOOOSCQCRKKKNOOPLOSNPLOOOONNHONONARRNNOHONNOTNSRRRSUOUPUTTUPUOTSKNOOOOUTKSTUUPPUOOPPPOPONONKCQQCCRKSOOPPOOOSNTOPPHKRKRNNSRKNLOHNNKNONKRRRKTSNUUOTOUOOTOOSTUOOULUTRNNOOOOOULULPPSRSRQQQCRSRSNNOOPOLLOKNPLOOSCRCSKKKKNLONNSSNSKRCRNTSSSTTOPPUOTOOOOOOOUOPOONNSNOOOPPPPUPLOKCCQQQRNONNOTKKOOPPONOLOOOKCKNNRCRKNTNSKKKSKRCRTTTSNTRROPUOTOOTOOUOUOOOOTTKQSTOOPPMPPPPTKRCRRCNOONNNKRCNPLOOLNKOONRKONKKSKSROONKKSSSSKRSOUOTUUOSNTTTTOUOUUOOUPOOTOOONCKOSOPPPPLPNRQRCRCSOLPOOSRKSOOLULPNNOONNKNSKSNHSKNKRKSNTNSRTUPOOUOPUPUNRSNOUUOUOPOUOOTOPPTNSSKNOPPOONRCQCRRRNOOLPONKNONTOLPONOOLONSRKNNNNKKTSSSTNTKRSOUUUPPUOPPOTSKSNOOPOOUOOTOPPPPONSKSKKTNTSRQQQCQCKNOPPPLNNONKKNOOOLOOLNKKKNKKKRKCqqqqqqppppppoon %-.1?55;;IILOLONNKKSTKSNNRQQRRKRNOOPPOOOONKRKRKOLPNNNSKRNNNSKRCRtsssrrrrrrrqqpp +  -..?DDIIIPLOOUOSSONRNNRCCRKNOPPOONLOOPLRCNNKKNOKNSKQCKSNNKKKRK~||zyxxxxwxxx"""" !!446+?GGJMMMPMPLONNSKKRCQCROOOLPPOKNOPMPNNNTHSCKSKNKKKSKKNKKRHHzyyxwxwwwwwuvvv  " #!!!.1IJMIMMPONKSKNRQQRCSOLLPPLNKNLPPLLONNLSCRKKKNNNNKKRKRKONonnononononnnnl + + '%)))5D;IIIIPPPPUNRSKRCKRQROOONLPONKNOOLPPONOONKNNRKNNKNSKKCKNSCiiiiijijjjjjiiihg  %..50;;ILILPLPPLONKNSKKSKRAPOOOOONRNOKNOLOOLOASOOKKNSNKSKKRKNNKRffffffggggggggee%%%%1115,077HBIMMMPLPPOSNKRKSKKKOPMPLNSCKTNNNOLOLPOHNHNKNNKRRKKCKLOKKKccccccddddddcccbb))))5;;;BA(ANBPMPPMPONKRCRRKKSSPPMPLNSKONNOLOOOLONNNKKNNONKKKCKTHKKKK```aaaaaaaaaa```__,,000BBLHA3KKNOLPLPUNRCQQRKKOOKOLPOONNNOLPPLNNOONNNKRKSHNAKKRNONKRKKO``````_`_`___`___$$000H0HBBHHNAANNNNOOKRCQRRKSLPLONOOOLPOKNPLLOKCKNKRCKHONNKSRKHONKRKKNO``````````````__$$$000BBBHLHANONANKNNRCQRRKRNPPPONKNLMMPNNOOOONQNNNRRNHNNKKKCNOHKRKHOLHqqpqqqppppppoonlk +j &&'*-<1,,DBHANHAKQQCRNKNOPMOSRKPMPOON3OLPARNOKKNNOKRKKRKNNKCKHLLOKtsssrrrrrrqqqponm + h&'*46),,;B7AAARCQCCKHOPLPLONKNLPOLLOKOMONNOKRKNNKKKKKKHNRRKKOLOKR~||zyxxxxwxxx """//!46:5;B7AHKCCRKTOOPPMPOLHONNNOLPLLLONKSKKANNSKRKKNHNKKNNHOHKKHzyyxxwwwwwuuvv """"#!8+6):5:7HA3CCKSHOPMMPLLPPONRKNOPPLONKKKCKNNHNKNKKHOKRNHHOHKCKOonnnonoononnnmmlk +j  '*--<100;BBHAKKKNKNHOPLPOOLLONNOHOLLONKKRKNNONNKNKKNNKRKNOHNNKNNAiiiijijijjjjjiige%--.<150$$HBHAANSNNKSNHONHOMMPNOLOSNHKSKNNKNHOHNKKKKNNKCKKNNNKKLLHKffffffgggggggged%%..115;03(7AAKNNAOONRSNNOOPMMLLPLOHKKKKKKKNNNNKKKRKNKANNNHLHNKHLNKKcccccdcddddccccb))%5555;I;A(AAK33KNOOPONNNNNHMMOOLPOLLNCNNKKSHNNKKKRKNHSKNNHLLNKATAKKK```aaaaaaaaaaa`,,;,;;BBBH(KKAKKKSHHLPOHSNRKNPOOOLPLONNSHNKKNNRKNNNKHONKKNNHOHKNNNKRKK```````_`_`_`__0,00B0HHBAK3KAAKNOLOOONKNKKSNOOOHNHLONNNKRKNNNAKNNKNOHKKNNNNNKKNNNNAKK`````````````_`0,00BBBBA33CKAKAOLMMOHRNNSKRKOMLLNRNNNNKRKANHNNNKKNNKKKAHHNKKKOANNAKKKqpqqqppppppopo +&'%077AIMMMLNKOLONRKOMPLOCKKHKCKNNNNNKKKSAKKKKNLLHAHLHKAKSKKAtssrrrrrrrrqqpp + +&),,077BMMLLOLOPLNAKNOLLOCRARRKNLONKKSKANNKNNNOLNKNLHKKKKRAKN~~zzyxxxxwxx""""!%%%))55;BBILLPMPPLNKKKKHOOHKNKCKKNONASAKANNNNNHHHNKANNKKKNAKKNNyyyxxwwwwwuuwvv  """ %%))::;BBHLLLPIOKKKRNNNHNNHNKNNOHNKKKNHONKANHHHNKKNNKKKNNNANHHnnnoonoononnmmm  ),00BBBHHLILMLOKNCNLOHNKNSKKOLONKKKKNONKKNASNHNNNNNNAKANKKNHHiiiiijiijjjjjii ,,00BB77HHNOLLOOHNOLPLNKNKCKNHLNKANANNAKKNHHHNNNHNHNAKNKKAANHNffffffgggggggf`000;;BHANAANLPLLPLLPLNSNK3RKNNNKANOHHNKKKNLLHNHHNKNAAKKKKKNLLHcccccddddddccccb)`_$000BLHHAHNKKKHPLLPMPLNKAKKNNNNHKKKKHHNKANHHLHKKNNKKKKKKNHNHLLHH```aaaaaaaaaa`a`_$$$(0BBBLHAANOHNKRRHPLLLONKNKKNNNLOHNKKNNNKKOLOHNKNANKKAHNKKHHHLLAKN_`````__`_`_``__$$$$$(7BBLIBL3KHHNNNNKKNLLOKKNKKKNNAOHNNHHHNKRAHOHNAKKNHAKNHNANNNHLNKAA````````````_`_$$$$(70B;BBLAKKANNANNNNNLLOKNKKKNNKNHNNKHONAKAHNNNKANHHNANHNNKANHHNKAHHqqpqqpppppppoonlkjh''--.1);,77AAHHNKKOLKKKKKANAKNKAKKHNAKHLOHAKKNHHNAKAKKKANNHHNANHHtssrrrrrrrqqqppnmkj &'%.1<1;B77ANNAKKNKKCRKKNNOHHNKKANKKNHOHNNNHHHNKANHNKKNLHHNHHNHA~~zzyxxxxwxxx ""#!!!=+!>ÞüûÛø÷Ø|›|š ך\{™ z™z[Õy˜yZµxµxYwXwv³WvuVu“ tUt‘TSS4r RqR3 QQ6T5TS4SR3Rp Q2QP1n 0Om/N.- M.M, LL-KK,* J+I*I)H)('&%FIN_PLYRP 63 +Œ1½wœs{oZk9ggc÷b÷^Ö^ÖZµV”RsNrNRJ1FBï=Î9­5Œ1k1k-j-J-J)I))))%(%(!%!!è ç èçæÆÆÅ¥¥¥„ƒƒ dc B!]_LH80  cTUBE_LR_P 127 +J)Õ~r~îyîu«}Íu¬yi}‹y‹u‹qjuIyHyHu(y'yqÅxmæpiælÅl‚tæ`æ\Å`bp‚lapƒhÅ\‚hApalƒdbh‚dahAlÅTbd‚`adAh¥Tb`¤Ta`Adb\A`a\bX¤LA\aXbTAXaTƒLbPATaP„DAPBLAL!PaHƒ@BHbDAH!LƒTTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<7<<7<<7<>==>>>>==@====@@@@@@?AA??A())*)CC?AAAAA??@@==@@????@@==@?ACCAA?@@@??AAAAA?AACC&BB&B&(())*****`**`++++ ,,, -.-,--.-.   + + +  + lllGGLKJKJJJJJJJJJKeJJJeLDKDKDKmLFLFLFLLLLLGGlljllljlB```)Illjljjlljjjllvlllllllll?CAhAlllllllllvll@ll@?AACCCB()))``*))```*`++,,,-,-.--.----....../0   + + + +pRTpRRQTUUUUUUUTTUUUUTTQRoPNoQPNNNPQQNNM999dddddddddd8HABCHndddEKFKFKnFnFnFKmDmFmFm_jG__FFDDDF\\D\\___jjjllkkCCCBB((())(:))``++,,,,---.---------.--..////4    + +SsrSOqsuuWWWWuuVuuWWutSSxxx9xxx999xxx99fadbabbbbbbbbbbmjHjj_bcccdd8JEJEJ8d8d8]]^w^wEE\]E^^^777DD<=>==>=<><>>>=%@?A???$??AACCAAA?$AC&B&'&&'&&&(()----,CBBBBBCB&&'&&&&&&CCC'&&(((&&&&&((()((&(&((&()))*+*+#,,++++#,, -..--..////.0214  + +**))(&B&'&'''''''''''CB((((((((()))))(((())**++++++++++,000//+*********++++**)))*++++++*****+,++,,,,,,,,,,,,,,.---......///////0//000000132     + + + -,,+,+++++++****+*****++,,,+,,,,,,-,,,,,,,--..../////../11212.............-,-,,-,.--.-------......./......//////0001111200011222221111233     + + +0/0000000/0/0000//././/0///00001010100000100111122211112344431111111111111010010100100100010111121212222222212122223333332333443554333334 4       + +3244444332322223233233223323333333333333334434444444343556665444444443434344434333434344434434455544444444444445556555555556666555 55 5 5 56  5    + + + + + 3333333333333433333333433333333333333333333434444443435566665444444433343444443333444444443344454555445454554544656565656666566655 5 5 5 5 5 6 6     + + + 333333322222222222222222233333333333333333333333333334555554333333333333334433333444444333334343333334444444454556565454555656556655 55 565 6      + + !!!!!!!!!!!!!! + + + + + + + +! + + +     + + + + +  +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + + + + + + + + + + + + + + + + +     +    + + +!" + + + + + + + +! + +" + + + + + + + + + + + + + + + + + + + + + + + + + + + +! + + + + + + + + + + + + + + + +!" + +! + + +" + + + + +  + + + + + +        + + +  + + + + + + +" +   +  +  + +  ! +! +"   +  +  + +        + +  +                  +   + +! +  +               + + + +   +                      + +   + + +              +       + + + +                   +   + + + + +                 +  +  + + + + +        +   +       +     + + + + +         +          + + + +  + + + +                         + + + +                   + +  +   +6 44 54 1 +  +           +            +  +   +  + +   +    +   +    +  +  +  +   +     +  +        +     +    +         +         +     +    +      9 44 54 1 + +   + +  +  +    + +  + +       +     +    +       +   + +   +  + +  +  +  +   + +   +           +  +  +  +  +  + + +  + + + + + +   +     + +   +    +  C 200 21 1 +]]ZYX[[X\YXXXTZYS]]SSSSMMOMOJHPNNPLFLF;HFIDDDCCCAAA@@@@s@><<<>E<><<<<<===889k99::999:::0&&&&&&!&&&&&&&&&&&&&&&&&&$$$&$$&&&9999$&&&$&&& ----w-w -w + + + + + ,+,- &-&YZTZZYX[[X\YSS]]R]]TYTZJUOTOOPPNHLFHFFIFDDCCCCACAEEE>>><<<<<<>><<>><<=====88k::i:::000 &&$$%%% + + + + + +n %% %% + + + + +w + -% +w +w + + ***  *********,4{444^T^YS]Y[X\TZZS]SSSZZZTMTYOOOOOLHJLLHHFFyDDDvCACA@A@@@>>>>>>>>ssussrsrrrrrrpr=^!~%ž)v›þTOPBAR2P 241 +   $ +($ 08.4 +$ (-0,,+( @ ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE100/ATTRACT.ASM b/BACKUP/CODE100/ATTRACT.ASM new file mode 100644 index 0000000..c37e119 --- /dev/null +++ b/BACKUP/CODE100/ATTRACT.ASM @@ -0,0 +1,5985 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +; .ref grand_champs_screen +; JSRP grand_champs_screen + + JSRP show_title + calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt +;; JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +;FIXX!!! Or take out... +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + CREATE0 ck_octopus2 + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 +; +; movi TSEC*4+40,a10 +; JSRP time_delay ;SLEEP 30 + + movi #des_t,a8 + JSRP prt_dt + + SLEEP TSEC*4+40 + +; movi TSEC*4+40,a10 +; JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + clr a0 + movi -1,a1 + calla obj_delc + + movi thanx_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +;;;;;; +; jruc #dog + + movi thanx1_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + + movi #thanx2_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + + movi #thanx3_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + + movi #thanx4_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + + movi #thanx5_t,a8 + JSRP prt_dt + + movi TSEC*2+50,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +;#dog + +;#sclout +; JSRP scrn_scaleout + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + +;Temp + movi #thanx6_t,a8 + JSRP prt_dt2 + + movi TSEC*5,a10 + JSRP time_delay ;SLEEP 30 + +#sclout + JSRP scrn_scaleout + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + RETP + +#des_t + WL -1,BRSH_B_P + .word -2,118,3 + .byte "DESIGN TEAM:",0 + .long 0 + WL -1,BRSH_Y_P + .word -2,60,37 +; .byte "MARK TURMELL",0 +; LWW MRK_TURM,>b2,>32 +; .byte "SHAWN LIPTAK",0 +; LWW SHA_LIPM,>f0,>1d +; WL -1,AQUAPAL +; .byte "TONY GOSKIE",0 ;-6 +; LWW TON_GOSM,185,>1f +; .byte "JOHN CARLTON",0 +; LWW JON_CARM,>ff92,>20 +; .byte "SAL DIVITA",0 +; LWW SAL_DIVM,>ffa3,>20 +; WL -1,GREENPAL +; .byte "JON HEY",0 +; LWW JON_HEYM,>ffbf,>1c +; WL -1,BRSH_Y_P +; .byte "JAMIE RIVETT",0 +; LWW JAM_RIVM,>a0,>18 + .word 0 + +thanx_t + WL -1,BRSH_W_P + .word -2,200,3 + .byte "STARRING:",0 + .long 0 + WL -1,BRSH_B_P + .word -2,200,37 + .byte "STEPHEN HOWARD",0 + .long 0 + .byte "WILLIE MORRIS JR",0 + .long 0 + .byte "TODD MCCLEARN",0 + .long 0 + .byte "TONY SCOTT",0 + .long 0 + .byte "KERRI HOSKINS",0 + .long 0 + .byte "LORRAINE OLIVIA",0 + .long 0 + .byte "AWARDS BY KAYDAN",0 + .long 0 + .word 0 +thanx1_t + WL -1,BRSH_W_P + .word -2,200,3 + .byte "HARDWARE SUPPORT:",0 + .long 0 + WL -1,BRSH_R_P + .word -2,200,37 + .byte "CARY MEDNICK",0 + .long 0 + .byte "PAT COX",0 + .long 0 + .byte "RAY MACIKA",0 + .long 0 + .byte "SHERIDAN OURSLER",0 + .long 0 + .byte "MATT BOOTY",0 + .long 0 + .byte "JOHN LOWES",0 + .long 0 + .byte "AL LASKO",0 + .long 0 + .word 0 + + +#thanx2_t + WL -1,BRSH_W_P + .word -2,200,3 + .byte "SPECIAL THANKS:",0 + .long 0 + WL -1,BRSH_R_P + .word -2,200,37 + .byte "GEORGE PETRO",0 + .long 0 + .byte "JOHN NEWCOMER",0 + .long 0 + .byte "WARREN DAVIS",0 + .long 0 + .byte "EUGENE JARVIS",0 + .long 0 + .BYTE "MARK LOFFREDO",0 + .long 0 + .byte "L.E.D.",0 + .long 0 + .byte "RAY GAY",0 + .long 0 + .word 0 + +#thanx3_t + WL -1,BRSH_R_P + .word -2,200,3 + .byte "SPECIAL THANKS:",0 + .long 0 + WL -1,BRSH_G_P + .word -2,200,37 + .byte "BETTY PURCELL",0 + .long 0 + .byte "PAUL HEITSCH",0 + .long 0 + .byte "CHRIS GRANNER",0 + .long 0 + .byte "JIM GREENE",0 + .long 0 + .byte "ED BOON",0 + .long 0 + .byte "JOHN TOBIAS",0 + .long 0 + .byte "JOSH & FLANDERS",0 + .long 0 + .word 0 + + +#thanx4_t + WL -1,BRSH_R_P + .word -2,200,3 + .byte "SPECIAL THANKS:",0 + .long 0 + WL -1,BRSH_G_P + .word -2,200,37 + .byte "DAN FORDEN",0 + .long 0 + .byte "LINDA DEAL",0 + .long 0 + .byte "JACK HAEGER",0 + .long 0 + .byte "ROGER SHARPE",0 + .long 0 + .byte "JAKE SIMPSON",0 + .long 0 + .byte "TIM KIZEROW",0 + .long 0 + .byte "FELECIA TURMELL",0 + .long 0 + .word 0 + + +#thanx5_t + WL -1,BRSH_W_P + .word -2,200,20 + .byte "EXECUTIVE PRODUCERS:",0 + .long 0 + WL -1,BRSH_R_P + .word -2,200,80 + .byte "NEIL NICASTRO",0 + .long 0 + .byte "KEN FEDESNA",0 + .long 0 + .byte "WALLY SMOLUCHA",0 + .long 0 + .byte "PAUL DUSSAULT",0 + .long 0 + .word 0 + +#thanx6_t + WL -1,SGMD8WHT + .word -2,200-42,25 + .byte "THANK YOU:",0 + .long 0 + WL -1,SGMD8WHT + .word -2,40,60 + .byte "MANY INTERNET USERS",0 + .long 0 + .byte "RANDOLPH VANCE",0 + .long 0 + .byte "WILLIAM HENDERSON",0 + .long 0 + .byte "RAY KIRKLAND",0 + .long 0 + .byte "MIKE DAVIDSON",0 + .long 0 + .byte "LEWIS PODLASZEWSKI",0 + .long 0 + .byte "ANDREW PODLASZEWSKI",0 + .long 0 + .byte "SEAN STEWART",0 + .long 0 + .byte "CHRIS JOHNSON",0 + .long 0 + .byte "CHRIS CANIANO",0 + .long 0 + .byte "ERIC HOLMA",0 + .long 0 + .byte "MIKE OVERBY",0 + .long 0 + .word -2,250,60 + .byte "CASEY",0 + .long 0 + .byte "VINCE FIELDS",0 + .long 0 + .byte "DAVE EDENZON",0 + .long 0 + .byte "RIC RORSCHACH",0 + .long 0 + .byte "DARYL GREEN",0 + .long 0 + .byte "JERRY CATTELL",0 + .long 0 + .byte "SHAWN PETREN",0 + .long 0 + .byte "CHUCK HOROWITZ",0 + .long 0 + .byte "MACE",0 + .long 0 + .byte "JIM HSU",0 + .long 0 + .byte "JASON DRISKO",0 + .long 0 + .byte "CARL CHAVEZ",0 + .long 0 + .word 0 + + .even + +#******************************* +* A8=*Data + + SUBRP prt_dt + jruc #nxt + +#prtlp + cmpi -1,a0 + jrne #nopal + + move *a8+,a0,L ;>Change pal + calla pal_getf + move a0,a6 + jruc #nxt + +#nopal + cmpi -2,a0 ;>New XY + jrne #noxy + move *a8+,a9,L + jruc #nxt + +#noxy + subk 16,a8 + clr a0 + movk 1,a10 + movi brush20_ascii,a11 + PUSHP a9 + + cmpi thanx_t,a8 + jrge #cn + + JSRP STRLNRMO_1 + jruc #cnx + +#cn + JSRP STRCNRMO_1 +#cnx + PULLP a9 + + addk 15,a8 + srl 4,a8 + sll 4,a8 + move *a8+,a2,L + jrz #noobj ;No object? + + move *a8+,a0,L + PUSH a6,a8 + + addxy a9,a0 + clr a1 + movy a0,a1 ;Y + sll 16,a0 ;X + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a6,a8 +#noobj + addi [30,0],a9 + cmpi thanx_t,a8 + jrge #cn2 + addi [0,15],a9 +#cn2 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 20 + PULLP a6 +#nxt + move *a8+,a0 + jrnz #prtlp + RETP + + +#******************************* +* A8=*Data + + SUBRP prt_dt2 + jruc #nxt + +#prtlp + cmpi -1,a0 + jrne #nopal + + move *a8+,a0,L ;>Change pal + calla pal_getf + move a0,a6 + jruc #nxt + +#nopal + cmpi -2,a0 ;>New XY + jrne #noxy + move *a8+,a9,L + jruc #nxt + +#noxy + subk 16,a8 + clr a0 + movk 1,a10 + movi brush20_ascii,a11 + PUSHP a9 + + + JSRP STRLNRMO_1 +; JSRP STRCNRMO_1 + PULLP a9 + + addk 15,a8 + srl 4,a8 + sll 4,a8 + move *a8+,a2,L + jrz #noobj ;No object? + + move *a8+,a0,L + PUSH a6,a8 + + addxy a9,a0 + clr a1 + movy a0,a1 ;Y + sll 16,a0 ;X + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a6,a8 +#noobj + addi [15,0],a9 + +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; jrnz #olp +; movi [>320,>320],a1 +; move a1,*a14(ODATA_p),L +; jruc #olp +;#oend + + PUSHP a6 + SLEEPK 10 + PULLP a6 +#nxt + move *a8+,a0 + jrnz #prtlp + RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,0 + + +#******************************* + +showdt_scl +#lp + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + cmpi [>100,>100],a0 + jrle #olp + subi [>10,>10],a0 + move a0,*a14(ODATA_p),L + jruc #olp +#oend + SLEEPK 1 + jruc #lp + + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + +;;;; calla set_volume_for_amode + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +#str_h12 + .string "hotspots",0 +#str_h12a + .string "if a player makes 3 jump shots",1 + .string "from the same spot on the court,",1 + .string "then that spot becomes his hotspot!",1 + .string " ",1 + .string "shooting from a hotspot dramatically",1 + .string "increases the shot percentage!!",0 + +#str_h13 + .string "lean-out jumper",0 +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit2 + dsj a10,time_delay +#exit2 RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + diff --git a/BACKUP/CODE100/AUDIT.ASM b/BACKUP/CODE100/AUDIT.ASM new file mode 100644 index 0000000..4cb00d9 --- /dev/null +++ b/BACKUP/CODE100/AUDIT.ASM @@ -0,0 +1,3492 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS + .ref opmsg_clr + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIX!!! +; jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + SOUND1 bounce_snd + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + +bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + + calla opmsg_clr + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + + .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE100/AUDIT.EQU b/BACKUP/CODE100/AUDIT.EQU new file mode 100644 index 0000000..c3bf52c --- /dev/null +++ b/BACKUP/CODE100/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_ATRB_PTS_INC equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE100/BAKGND.ASM b/BACKUP/CODE100/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE100/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE100/BB.ASM b/BACKUP/CODE100/BB.ASM new file mode 100644 index 0000000..928da36 --- /dev/null +++ b/BACKUP/CODE100/BB.ASM @@ -0,0 +1,3424 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? + jrnz initp50 ; br=no + + movi AUD_LOCKUP,a0 ;Watchdog audit + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE100/BB.CMD b/BACKUP/CODE100/BB.CMD new file mode 100644 index 0000000..4b1ee01 --- /dev/null +++ b/BACKUP/CODE100/BB.CMD @@ -0,0 +1,96 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ + +/*UNZIP.OBJ*/ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE100/BB2.ASM b/BACKUP/CODE100/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE100/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE100/BB3.ASM b/BACKUP/CODE100/BB3.ASM new file mode 100644 index 0000000..0290903 --- /dev/null +++ b/BACKUP/CODE100/BB3.ASM @@ -0,0 +1,3124 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + movi 100,a0 + calla RNDPER + jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF +#ok + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 40 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 55 + +sp_showshotper + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 50 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 50 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 40 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE100/BB4.ASM b/BACKUP/CODE100/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE100/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE100/BBC.BAT b/BACKUP/CODE100/BBC.BAT new file mode 100644 index 0000000..d80f954 --- /dev/null +++ b/BACKUP/CODE100/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE100/BBL.BAT b/BACKUP/CODE100/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE100/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE100/BBSEC.EQU b/BACKUP/CODE100/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE100/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE100/DIAG.ASM b/BACKUP/CODE100/DIAG.ASM new file mode 100644 index 0000000..76af499 --- /dev/null +++ b/BACKUP/CODE100/DIAG.ASM @@ -0,0 +1,6023 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +CKSUM1 .equ >bce1 +CKSUM2 .equ >f4dc + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE100/DIPSW.EQU b/BACKUP/CODE100/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE100/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE100/DISP.EQU b/BACKUP/CODE100/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE100/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE100/DRONE.ASM b/BACKUP/CODE100/DRONE.ASM new file mode 100644 index 0000000..c92e57a --- /dev/null +++ b/BACKUP/CODE100/DRONE.ASM @@ -0,0 +1,2359 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 + ori BUT3_M,a0 ;Push turbo + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + \ No newline at end of file diff --git a/BACKUP/CODE100/GAME.EQU b/BACKUP/CODE100/GAME.EQU new file mode 100644 index 0000000..3b47aa1 --- /dev/null +++ b/BACKUP/CODE100/GAME.EQU @@ -0,0 +1,786 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (206 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;must be on byte boundary + +****************************************************************************** + + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 410 ;increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit +;;NUM_PRECORDS equ 290 + + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE100/GSP.EQU b/BACKUP/CODE100/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE100/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE100/HSTD.ASM b/BACKUP/CODE100/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE100/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE100/IMGFIND.CMD b/BACKUP/CODE100/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE100/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE100/LINK.EQU b/BACKUP/CODE100/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE100/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE100/MACROS.HDR b/BACKUP/CODE100/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE100/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + + calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + +; CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;; CALLA RESET_VOICE_QUEUE +;; CREATE VOICE_PID,ANNOUNCE_VOICE + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE100/MAKE.INI b/BACKUP/CODE100/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE100/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE100/MAKEFILE b/BACKUP/CODE100/MAKEFILE new file mode 100644 index 0000000..3fc48f4 --- /dev/null +++ b/BACKUP/CODE100/MAKEFILE @@ -0,0 +1,68 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ +# PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE100/MAKEPLR.ASM b/BACKUP/CODE100/MAKEPLR.ASM new file mode 100644 index 0000000..91104fb --- /dev/null +++ b/BACKUP/CODE100/MAKEPLR.ASM @@ -0,0 +1,3407 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of attributes to adjust + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE100/MAKEPLR2.ASM b/BACKUP/CODE100/MAKEPLR2.ASM new file mode 100644 index 0000000..9062128 --- /dev/null +++ b/BACKUP/CODE100/MAKEPLR2.ASM @@ -0,0 +1,2957 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + movi privileges_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +privileges_str + .string "CHECK 2 OF THE 7",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE100/MAKEVDA.BAT b/BACKUP/CODE100/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE100/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE100/MENU.ASM b/BACKUP/CODE100/MENU.ASM new file mode 100644 index 0000000..e513930 --- /dev/null +++ b/BACKUP/CODE100/MENU.ASM @@ -0,0 +1,8214 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER + .ref opmsg_main + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +CLOCK_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long CLKH_MESS1 + .long CLKH_MESS2 +CLKH_MESS1 + .string "DISPLAY OR SET",0 + .even +CLKH_MESS2 + .string "THE REAL TIME CLOCK",0 + .even +CLK_DISPLAY_HELP + .word 0 + .word COLOR_BLUE + .word 3 + .long CDISP_H1 + .long CDISP_H2 + .long CDISP_H3 +CDISP_H1 + .string "DISPLAYS THE CURRENT",0 + .even +CDISP_H2 + .string "DATE AND TIME FROM",0 + .even +CDISP_H3 + .string "THE REAL TIME CLOCK",0 + .even +CLK_SET_HELP + .word 0 + .word COLOR_BLUE + .word 3 + .long CSET_H1 + .long CSET_H2 + .long CSET_H3 +CSET_H1 + .string "ALLOWS SETTING OF THE",0 + .even +CSET_H2 + .string "DATE AND TIME FOR",0 + .even +CSET_H3 + .string "THE REAL TIME CLOCK",0 + .even +CLK_CALIBRATE_HELP + .word 0 + .word COLOR_BLUE + .word 3 + .long CCAL_H1 + .long CCAL_H2 + .long CCAL_H3 +CCAL_H1 + .string "PREFORMS AUTOMATIC",0 + .even +CCAL_H2 + .string "CALIBRATION OF THE",0 + .even +CCAL_H3 + .string "REAL TIME CLOCK",0 + .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +MESS_CLOCK + .string "REAL TIME CLOCK",0 + .even + +CAL_MESS_Y EQU 114 + +CLK_CALIBRATE_MESS + MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 + .string "Calibrating Real Time Clock" + .byte 0,1 + .even + MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 + .string "Please Wait" + .byte 0,0 + .even +CLK_CALIBRATE_OK_MESS + MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 + .string "Calibration Successful" + .byte 0,0 + .even +M_CLK_DISPLAY + .string "DATE AND TIME DISPLAY",0,0 + .even +M_CLK_CALIBRATE + .string "REAL TIME CLOCK CALIBRATION",0,0 + .even +M_CLK_SET + .string "SETTING REAL TIME CLOCK",0,0 + .even + +CDAY_PROMPT_Y EQU 50 +CTIME_PROMPT_Y EQU 130 +CDAY_Y EQU CDAY_PROMPT_Y+30 +CDATE_Y EQU CDAY_Y+20 +CTIME_Y EQU CTIME_PROMPT_Y+30 + +MESS_CLKD_PROMPTS + MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 + .string "Current Date" + .byte 0,1 + .even + MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 + .string "Current Time" + .byte 0,1 + .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +MESS_RTC_SET + MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 + .string "THE REAL TIME CLOCK HAS BEEN SET" + .byte 0,0 + .even +MESS_SUNDAY + .string "Sunday",0 + .even +MESS_MONDAY + .string "Monday",0 + .even +MESS_TUESDAY + .string "Tuesday",0 + .even +MESS_WEDNESDAY + .string "Wednesday",0 + .even +MESS_THURSDAY + .string "Thursday",0 + .even +MESS_FRIDAY + .string "Friday",0 + .even +MESS_SATURDAY + .string "Saturday",0 + .even + +DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY + .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY + .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +TSEPERATOR + .string ":",0 + .even +ZPAD + .string "0",0 + .even +TIME_PM + .string " PM",0 + .even +TIME_AM + .string " AM",0 + .even +DAY_SETUP + MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even +DATE_SETUP + MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even +TIME_SETUP + MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even +DAYADJ_SETUP + MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even +DATEADJ_SETUP + MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even +TADJ_SETUP + MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 + .string "" + .byte 0,0 + .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +MESS_CLK_TITLE + .string "REAL TIME CLOCK",0 + .even +MESS_DISPLAY + .string "DISPLAY",0 + .even +MESS_SET + .string "SET",0 + .even +MESS_CALIBRATE + .string "CALIBRATE",0 + .even + +MEN_CLOCK + .long RD7FONT ;FONT + .long STRCNRM ;CENTER PLEASE + .long MESS_CLK_TITLE ;TITLE + .word COLOR_GREEN ;COLOR OF TITLE + .word 104 ;UL X + .word MENU_Y-3 ;UL Y + .word MENU_DY-4 ;VERTICAL SPACING + .word ROBO_WHITE ;COLOR WHEN NOT SELECTED + .word 16 ;HEIGHT OF SELECTION BAR + .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .word BAR_DX ;EXTRA X ON EACH SIDE. + .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) + .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) + .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP + .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP + .long MESS_MM,RET_CLOCK,NO_HELP + .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +M_TIME_SET + .string "SET REAL TIME CLOCK",0 + .even +MESS_YEAR_SET + .string "YEAR",0 + .even +MESS_DATE_SET + .string "DATE",0 + .even +MESS_MONTH_SET + .string "MONTH",0 + .even +MESS_DAY_SET + .string "DAY",0 + .even +MESS_HOUR_SET + .string "HOURS",0 + .even +MESS_MINUTE_SET + .string "MINUTES",0 + .even +MESS_SECOND_SET + .string "SECONDS",0 + .even +MESS_SET_CLOCK + .string "SET TIME/DATE",0 + .even +MESS_CLK_RET + .string "RETURN TO PREV MENU",0 + .even + +MEN_TIME_SET + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_TIME_SET ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD CS_X ;UL X + .WORD CS_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD CS_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP + .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP + .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY + .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP + .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP + .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP + .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP + .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP + .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +CS_ADV + MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +SCH_1 + .string "SETS THE REAL TIME CLOCK",0 + .even +SCH_2 + .string "TO THE VALUES SPECIFIED BY",0 + .even +SCH_3 + .string "THE OTHER MENU ITEMS.",0 + .even +SET_CLOCK_HELP + .word 1 + .word COLOR_BLUE + .word 3 + .long SCH_1 + .long SCH_2 + .long SCH_3 + .even +YSH_1 + .string " SET THE REAL TIME CLOCK's",0 + .even +YSH_2 + .string " YEAR VALUE.",0 + .even +YSH_3 + .string " Takes effect when SET is",0 + .even +YSH_4 + .string " selected on the RTC MENU",0 + .even +HELP_YEAR + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long YSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_YEAR + .long GEN_TS ; Routine to run + .long MESS_YEAR_SET ; Header Message + .long HELP_YEAR ; Help Messages + .word 6 ; Index number of val to change + .long 0 ; Minimum value + .long 99 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long YEAR_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long 0 ; Just Show Number + .long MESS_YEAR_SET ; Header Message + +DTSH_2 + .string " DATE VALUE.",0 + .even +HELP_DATE + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long DTSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_DATE + .long GEN_TS ; Routine to run + .long MESS_DATE_SET ; Header Message + .long HELP_DATE ; Help Messages + .word 4 ; Index Number of val to change + .long 1 ; Minimum value + .long 31 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long DATE_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long 0 ; Just Show Number + .long MESS_DATE_SET ; Header Message + + +MSH_2 + .string " MONTH OF YEAR.",0 + .even +HELP_MONTH + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long MSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_MONTH + .long GEN_TS ; Routine to run + .long MESS_MONTH_SET ; Header Message + .long HELP_MONTH ; Help Messages + .word 5 ; Index Number of val to change + .long 1 ; Minimum value + .long 12 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long MONTH_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long MONTH_TABLE ; Just Show Number + .long MESS_MONTH_SET ; Header Message + + +DSH_2 + .string " DAY OF WEEK.",0 + .even +HELP_DAY + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long DSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_DAY + .long GEN_TS ; Routine to run + .long MESS_DAY_SET ; Header Message + .long HELP_DAY ; Help Messages + .word 3 ; Index Number of val to change + .long 1 ; Minimum value + .long 7 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long DAY_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long DAY_TABLE ; Just Show Number + .long MESS_DAY_SET ; Header Message + +HSH_2 + .string " HOUR VALUE.",0 + .even +HELP_HOUR + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long HSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_HOUR + .long GEN_TS ; Routine to run + .long MESS_HOUR_SET ; Header Message + .long HELP_HOUR ; Help Messages + .word 2 ; Index Number of val to change + .long 1 ; Minimum value + .long 24 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long HOUR_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long 0 ; Just Show Number + .long MESS_HOUR_SET ; Header Message + + +MINSH_2 + .string " MINUTE VALUE.",0 + .even +HELP_MINUTE + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long MINSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_MINUTE + .long GEN_TS ; Routine to run + .long MESS_MINUTE_SET ; Header Message + .long HELP_MINUTE ; Help Messages + .word 1 ; Index Number of val to change + .long 0 ; Minimum value + .long 59 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long MINUTE_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long 0 ; Just Show Number + .long MESS_MINUTE_SET ; Header Message + +SSH_2 + .string " SECOND VALUE.",0 + .even +HELP_SECOND + .word 1 + .word COLOR_BLUE + .word 4 + .long YSH_1 + .long SSH_2 + .long YSH_3 + .long YSH_4 + .even +DO_SECOND + .long GEN_TS ; Routine to run + .long MESS_SECOND_SET ; Header Message + .long HELP_SECOND ; Help Messages + .word 0 ; Not used + .long 0 ; Minimum value + .long 59 ; Maximum value + .long 1 ; Move up and down by 1's + .long 0 ; Dont sub zero for any + .long SECOND_SET ; Message list for values + .word WRAP_VAL ; Wrap around + .long 0 ; Just Show Number + .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +GO_CLOCK: + move @_clk_rd,a8,L ;Save current auto update state + move a8,@_auto_update_save,L + clr a8 ;Enable auto update + move a8,@_clk_rd,L + JSRP _GetTime + movi MEN_CLOCK,a8 + jauc GEN_MENU +RET_CLOCK: + move @_auto_update_save,a8,L ;Restore Auto Update state + move a8,@_clk_rd,L + JSRP FORCE_MAIN + RETP + + +GO_CALIBRATE: + calla CLR_SCRN ; Clear the screen + movi M_CLK_CALIBRATE,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message + JSRP L_MESS + SLEEP 5*60 ; Do calibration here + move @0c00000b0h,a0 ; Make sure transparency is OFF + move a0,-*sp + andni 020h,a0 + move a0,@0c00000b0h + movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message + movi [40,400],a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + move *sp+,a0 + move a0,@0c00000b0h ; Restore CONTROL register + movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message + JSRP L_MESS + SLEEP 60 ; Let user see it + calla CLR_SCRN + RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +******************************************************************* +* _GetTime - Process subroutine to get the current time. Time is +* returned in the _tXXXXXX globals. +* + SUBRP _GetTime + move @_clk_rd,a0,L ;Save status of auto update + move a0,@_auto_update_save,L + movi -1,a0 ;Shut down auto update + move a0,@_clk_rd,L + calla _aquire_time ;Arm time aquistion + SLEEPK 5 ;Wait for it to aquire time + calla _get_time ;Get the current time + move @_auto_update_save,a0,L + move a0,@_clk_rd,L ;Restore auto update status + RETP ;All done + +; Process Subroutine to print time +_display_time: + clr a0 + move a0,@message_buffer + move @_thours,a0 ; Hours + jrnz _hour_gz1 + addk 12,a0 + jruc _time_is_am +_hour_gz1 + cmpi 12,a0 + jrle _time_is_am + move @_thours,a0 ; Hours + subi 12,a0 +_time_is_am + movi 12,a1 ; Max hours + calla dec_to_asc + calla concat_string + movi TSEPERATOR,a4 + calla concat_rom_string + move @_tminutes,a0 + cmpi 9,a0 + jrgt _no_min_pad + movi ZPAD,a4 + calla concat_rom_string +_no_min_pad + move @_tminutes,a0 + movi 59,a1 ; Max Minutes + calla dec_to_asc + calla concat_string + movi TSEPERATOR,a4 + calla concat_rom_string + move @_tseconds,a0 + move a0,@_last_seconds + cmpi 9,a0 + jrgt _no_sec_pad + movi ZPAD,a4 + calla concat_rom_string +_no_sec_pad + move @_tseconds,a0 + movi 59,a1 ; Max Seconds + calla dec_to_asc + calla concat_string + move @_thours,a0 ; Hours + cmpi 11,a0 + jrgt _time_is_pm + movi TIME_AM,a4 + jruc _tdone +_time_is_pm + movi TIME_PM,a4 +_tdone + calla concat_rom_string + movi TIME_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS +_time_check_sw: + SLEEP 1 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + or a1,a0 + not a0 + jrnz _dtime_done + move @_tseconds,a0 + move @_last_seconds,a1 + cmp a0,a1 + jrz _time_check_sw + .ref cntdown_snd + SOUND1 cntdown_snd +; movi 1cch,a3 +; calla SNDSND + move @CONTROL,a0 ; Make sure transparency is OFF + move a0,-*sp + andni 020h,a0 + move a0,@CONTROL + movi [CTIME_Y,0],a0 ; Get rid of calibrating message + movi [20,400],a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + move *sp+,a0 + move a0,@CONTROL ; Restore CONTROL register + jruc _display_time +_dtime_done + RETP + + +GO_DISPLAY: + calla CLR_SCRN ; Clear the screen + movi M_CLK_DISPLAY,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX +GO_CLKS: +; move @_clk_rd,a0,L ;Save current auto update state +; move a0,@_auto_update_save,L +; clr a0 ;Enable auto update +; move a0,@_clk_rd,L +; JSRP _GetTime + movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts + JSRP L_MESS + SLEEP 5 + movi DAY_TABLE,a8 ; Put Day of week up + move @_tday,a0 ; Day of week (1-7) + dec a0 + cmpi 6,a0 + jrgt _bad_day + sll 5,a0 + add a0,a8 + move *a8,a4,L + calla copy_rom_string + movi DAY_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS +_bad_day + movi MONTH_TABLE,a8 ; Put month of year up + move @_tmonth,a0 ; Month of year number (0-11) + dec a0 + cmpi 11,a0 + jrgt _bad_month + sll 5,a0 + add a0,a8 + move *a8,a4,L + calla copy_rom_string ; Copy month name to buffer +_bad_month + move @_tdate,a0 ; Date (1-31) + cmpi 9,a0 + jrgt _no_date_pad + movi ZPAD,a4 + calla concat_rom_string +_no_date_pad + move @_tdate,a0 ; Date (1-31) + movi 31,a1 ; Maximum Date + calla dec_to_asc ; Convert Date to ascii + calla concat_string ; Add to buffer + movi MESS_HYEARS,a4 ; , 19 + calla concat_rom_string ; Add to buffer + move @_tyear,a0 ; Year (0 - 99) + cmpi 9,a0 + jrgt _no_year_pad + movi ZPAD,a4 + calla concat_rom_string +_no_year_pad + move @_tyear,a0 + movi 99,a1 ; Max year + calla dec_to_asc ; Convert Years to ascii + calla concat_string ; Add to buffer + movi DATE_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS + JSRP _display_time +; move @_auto_update_save,a0,L ;Restore Auto Update state +; move a0,@_clk_rd,L + SOUND1 cntdown_snd +; movi 0c7h,a3 +; calla SNDSND + RETP ; All done + +_transfer_time + mmtm sp,a1,a2,a3 + movi _rtc_seconds,a1 + movi _tseconds,a2 + movi 7,a3 +_tt_loop1 + move *a2+,*a1+ + dsjs a3,_tt_loop1 + mmfm sp,a1,a2,a3 + rets + +GO_CLOCK_SET: + calla CLR_SCRN ; Clear the screen + movi M_CLK_SET,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + calla _set_time + movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message + JSRP L_MESS +; SLEEP 16 + SLEEP 30 + callr _transfer_time + jauc GO_CLKS + +GO_TIME_SET +; JSRP _GetTime + callr _transfer_time + movi MEN_TIME_SET,a8 +GEN_TIME_SET + move a8,-*a12,L + movk 1,a0 + move a0,-*a12,W +TIME_SET_LOOP + calla CLR_SCRN + movi CS_ADV,a8 + JSRP L_MESS + move *a12(WORD_SIZE),a8,L + JSRP MENU_TOP + movi COLOR_RED,a9 + calla COL_INST + move *a12,a9,W + JSRP B_MENU + move a9,a9 + jrz GO_TS_QUIT +_not_set_time + move a8,*a12,W + move *a9(AD_ROUT),a0,L + movi TIME_SET_LOOP,a7 + move a7,-*a12,L + cmpi 9,a8 + jrz _time_set + jump a0 +_time_set + jauc GO_CLOCK_SET +GO_TS_QUIT + addk WORD_SIZE,a12 + addk LONG_SIZE,a12 + RETP + +_do_title + mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +; move @_clk_rd,a0,L ;Save current auto update state +; move a0,@_auto_update_save,L +; clr a0 ;Enable auto update +; move a0,@_clk_rd,L +; JSRP _GetTime + subk 4,a10 + move a11,a6 + movi CS_HX,a9 + addi TIT_LRX,a9 + srl 1,a9 + subk 4,a9 + sll 16,a10 ;SHIFT Y DOWN + movy a10,a9 ;X,Y SET + move a2,a8 ;TEXT POINTER + clr a0 ;NO SLEEP + movi SPACING20,a10 + movi RD15FONT,a11 + JSRP STRCNRM ;DO IT! + mmfm a12,a10,a11,a8 ;POP THE STUFF. + RETP + +_adj_time_and_date + movi DAY_TABLE,a8 ; Put Day of week up + move @_rtc_day,a0 ; Day of week number (1-7) + dec a0 +; cmpi 6,a0 +; jrgt _abad_day + sll 5,a0 + add a0,a8 + move *a8,a4,L + calla copy_rom_string + movi DAYADJ_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS +_abad_day + movi MONTH_TABLE,a8 ; Put month of year up + move @_rtc_month,a0 ; Month of year number (1 - 12) + dec a0 +; cmpi 11,a0 +; jrgt _abad_month + sll 5,a0 + add a0,a8 + move *a8,a4,L + calla copy_rom_string ; Copy month name to buffer +_abad_month + move @_rtc_date,a0 ; Date + cmpi 9,a0 + jrgt _no_date_pad1 + movi ZPAD,a4 + calla concat_rom_string +_no_date_pad1 + move @_rtc_date,a0 ; Date + movi 31,a1 ; Maximum Date + calla dec_to_asc ; Convert Date to ascii + calla concat_string ; Add to buffer + movi MESS_HYEARS,a4 ; , 19 + calla concat_rom_string ; Add to buffer + move @_rtc_year,a0 ; Year + cmpi 9,a0 + jrgt _no_year_pad1 + movi ZPAD,a4 + calla concat_rom_string +_no_year_pad1 + move @_rtc_year,a0 + movi 99,a1 ; Max year + calla dec_to_asc ; Convert Years to ascii + calla concat_string ; Add to buffer + movi DATEADJ_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS + + clr a0 + move a0,@message_buffer + move @_rtc_hours,a0 ; Hours + jrnz _hour_gz + addk 12,a0 + jruc _time_is_am1 +_hour_gz + cmpi 12,a0 + jrle _time_is_am1 + move @_rtc_hours,a0 ; Hours + subi 12,a0 +_time_is_am1 + movi 12,a1 ; Max hours + calla dec_to_asc + calla concat_string + movi TSEPERATOR,a4 + calla concat_rom_string + move @_rtc_minutes,a0 + cmpi 9,a0 + jrgt _no_min_pad1 + movi ZPAD,a4 + calla concat_rom_string +_no_min_pad1 + move @_rtc_minutes,a0 + movi 59,a1 ; Max Minutes + calla dec_to_asc + calla concat_string + movi TSEPERATOR,a4 + calla concat_rom_string + move @_rtc_seconds,a0 + cmpi 9,a0 + jrgt _no_sec_pad1 + movi ZPAD,a4 + calla concat_rom_string +_no_sec_pad1 + move @_rtc_seconds,a0 + movi 59,a1 ; Max Seconds + calla dec_to_asc + calla concat_string + move @_rtc_hours,a0 ; Hours + cmpi 11,a0 + jrgt _time_is_pm1 + movi TIME_AM,a4 + jruc _tdone1 +_time_is_pm1 + movi TIME_PM,a4 +_tdone1 + calla concat_rom_string + movi TADJ_SETUP,a0 + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS + RETP + +_set_it_up + calla CLR_CUR + movi 6,a1 + movk 5,a4 + calla CADJ_BOX + movi 1,a1 + clr a4 + calla CADJ_BOX + movi [ADJ_CULY+5,CS_HX+5],A3 + movi [21,185],A4 + calla BLNKAREA + movi [ADJ_CULY+31,CS_HX+5],A3 + movi [58,185],A4 + calla BLNKAREA + SLEEPK 2 ; I dare you to take this out + RETP + + +YEAR_SET + JSRP _set_it_up + movi MESS_YEAR_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +MONTH_SET + JSRP _set_it_up + movi MESS_MONTH_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +DATE_SET + JSRP _set_it_up + movi MESS_DATE_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +DAY_SET + JSRP _set_it_up + movi MESS_DAY_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +HOUR_SET + JSRP _set_it_up + movi MESS_HOUR_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +MINUTE_SET + JSRP _set_it_up + movi MESS_MINUTE_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +SECOND_SET + JSRP _set_it_up + movi MESS_SECOND_SET,a2 + JSRP _do_title + JSRP _adj_time_and_date + RETP + +; a0 = value code +; a8 = PTR to data struct +; TRASHES a0, a3, a2 +_ts_val_up: + mmtm sp,a0,a2,a3 + sll 4,a0 + addi _rtc_seconds,a0 + move *a0,a3 + addk 1,a3 + move *a8(AD_MAX),a2,L + cmp a3,a2 + jrge _ts_vu_done + move *a8(AD_MIN),a3,L +_ts_vu_done + andi 0ffh,a1 + move a3,*a0 + mmfm sp,a0,a2,a3 + rets + +; a0 = value code +; a8 = PTR to data struct +; TRASHES a0, a3 +_ts_val_down: + mmtm sp,a0,a3,a1 + sll 4,a0 + addi _rtc_seconds,a0 + move *a0,a3 + subk 1,a3 + move *a8(AD_MIN),a1,L + cmp a1,a3 + jrge _ts_vd_done + move *a8(AD_MAX),a3,L +_ts_vd_done + andi 0ffh,a3 + move a3,*a0 + mmfm sp,a0,a3,a1 + rets + +GEN_TS: + movk 2,a0 + move a0,@_switch_map_mode,L + move a9,*a13(PDATA),L + move a9,a8 + calla CLR_MAIN + calla ADJ_INST + JSRP ST_STICK + SLEEPK 2 +TS_CHNG + SLEEPK 1 + movi 31000h,a5 + JSRP GETSTICK + move *a13(PDATA),a8,L + move a0,a1 + jrz TS_CHNG + move *a8(AD_CMOS),a0,W ; Get What we are adjusting + cmpi 3,a1 + jrz TS_BUTT + cmpi 2,a1 + jrz TS_DOWN + callr _ts_val_up ; Incrment the value + jruc TS_JOIN +TS_DOWN: + callr _ts_val_down ; Decrement the value +TS_JOIN: +; movi beep1_snd,a3 +; calla SNDSND + JSRP TS_UPDATE + jruc TS_CHNG +TS_UPDATE: + move *a8(AD_NAMEIT),a0,L + movi ROBO_LASER,a11 + jump a0 +TS_BUTT: + +; movi beep2_snd,a3 +; calla SNDSND + JSRP TS_UPDATE + SLEEPK 5 +TS_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +GO_AMODE_VOL + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_AMODE_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height2 + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume_amode_diag + callr vol_to_ht + callr adjust_bar_height2 + SLEEPK 2 + calla display_unblank + +vtop_1 + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0e7ffh,a0 + or a0,a1 + jrnz vdone_1 + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vtop_1 + + ;get the volume + movi ADJAVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad + + btst JOYDN,a1 + jrnz vdec_1 + + ;increment volume + cmpi 255,a0 + jreq vtop_1 + inc a0 + calla set_volume_amode_diag + callr vol_to_ht + callr adjust_bar_height2 + jruc vtop_1 + +vdec_1 + cmpi 4,a0 + jreq vtop_1 + dec a0 + calla set_volume_amode_diag + callr vol_to_ht + callr adjust_bar_height2 + jruc vtop_1 + +vdone_1 +;dont use a-mode sound level for diag. + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0e7ffh,a0 + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +DO_HSRES + MOVI MESS_HSRESET,A8 + MOVI HSSOFT,A9 + MOVI MESS_HSRCONF,A10 + JAUC AREUSURE + +HSSOFT + CALLR RES_ALL + RETP ;PROGRAM TO DO THE JOB! + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire,0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0,ROBO_YELLOW + + AMAC str_alley_oops,0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks,0,AUD_DBLE_DNKS,ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_atb_pts_inc,0,AUD_ATRB_PTS_INC,ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "CREATED A PLAYER" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_atb_pts_inc TXTLINE "ATTRIBUTE POINT INCREASE AWARDS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +MISC_AUD + .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar + AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN + AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP + AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW + AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW + AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW + AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW + AMAC adiff_s,diff_prt,0,>1212 + .LONG 0 + +adiff_s TXTLINE "GAME DIFFICULTY LEVEL" + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +DOHSLEFT + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;IS IF OFF? + JRZ DOHSOFF ;YEP...PRINT IT + + CALLA GET_HSC ;GET THE COUNTER VALUE + MOVE A0,A3 + jruc NUMBER_WORK ;AND SHOW IT! + +DOHSOFF + MOVI MESS_AUD_NUM,A8 + CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. + + MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! + JAUC RIGHT_FINISH + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "JAMS FROM THE LEFT" +M_CCOIN2 TXTLINE "JAMS FROM THE CENTER" +M_RCOIN2 TXTLINE "JAMS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +M_HSLEFT + TXTLINE "PLAYS UNTIL H.S. RESET" + +M_HSOFF TXTLINE "OFF" + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "JAM INFO" + +M_VERINF + TXTLINE "031-0" + +M_LOCKUP + TXTLINE "LOCKUPS" +M_HIDB TXTLINE "GAMES NOT FINISHED" + +M_SECBON + TXTLINE "WARPS" + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP + .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +; .LONG opmsg_s,opmsg_main,OPMSG_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# of ENTRIES + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY + .long opmsg_s + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +AMODE_VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +HSRES_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_RESHS1 + .LONG MEH_RESHS2 + .LONG MEH_RESHS3 + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +MESS_AMOD_VOL + .byte "A-MODE VOLUME ADJ." + .BYTE 0 + .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +MESS_HSRESET +U_HSRESET .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + +MESS_HSRES + .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +MESS_FAM + .byte "FOR ATTRACT MODE",0 + .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_HSRCONF + .byte "HIGH SCORE TABLE RESET.",0,1 + .EVEN + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 + .byte "TOTAL CARNAGE TEAM:",0,1 + MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 + .byte "MARK TURMELL",0,1 + MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 + .byte "JOHN TOBIAS",0,1 + MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 + .byte "JIM GENTILE",0,1 + MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 + .byte "SHAWN LIPTAK",0,1 + MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 + .byte "JON HEY",0,1 + MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 + .byte "TONY GOSKIE",0,0 + .even + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +MEH_RESHS1 .byte "RESET HIGH SCORE",0 + .EVEN +MEH_RESHS2 .byte "TABLE TO FACTORY",0 + .EVEN +MEH_RESHS3 .byte "DEFAULT VALUES",0 + .EVEN + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 20, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL4E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL6E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE100/MENU.EQU b/BACKUP/CODE100/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE100/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE100/MPROC.ASM b/BACKUP/CODE100/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE100/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE100/MPROC.EQU b/BACKUP/CODE100/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE100/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE100/NDSP1.ASM b/BACKUP/CODE100/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE100/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE100/PAL.ASM b/BACKUP/CODE100/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE100/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE100/PATCH.ASM b/BACKUP/CODE100/PATCH.ASM new file mode 100644 index 0000000..2d2f334 --- /dev/null +++ b/BACKUP/CODE100/PATCH.ASM @@ -0,0 +1,163 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 +TVPATCHX: + diff --git a/BACKUP/CODE100/PLYR.ASM b/BACKUP/CODE100/PLYR.ASM new file mode 100644 index 0000000..c53f975 --- /dev/null +++ b/BACKUP/CODE100/PLYR.ASM @@ -0,0 +1,12077 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: All three butns send flag to drones to jmp up for alley oop +; All three at once, no effect on passer... +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Cannonball dunk +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Pick up ball bug +;MARK: Add weight att. to gameplay +;MARK: Plyr trails for team fire dunks - outdoor only?!? +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: Get Jordan, Barkley, Shaq look alike heads +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: jazz up dunks...some how ? +;MARK: Dunks - shadow trails, smoke from body, etc. +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Fix Utah, Golden State, Lakers, court pals +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd +;MARK: Shot clock big bug! +;MARK: Shot clock text on top of G.T. text! +;MARK: Inbound on the run - powerup? +;MARK: Drone big head. +;MARK: Running pass +;MARK: Cut back defender off-screen-back-to-on-screen speed +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Line up trivia question text +;MARK: Attract show create a player +;MARK: Hide some heads in create player +;MARK: Hide some privileges in create player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Halftime team swap +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Do attract mode/sound volume +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: Cannonball sound effect +;JEFF: Get rid of long delay on sound board reset (at reset game time) + + +;JEFF: Put in extra trivia questions +;JEFF: Check all secret players, check audio for them as well... +;JEFF: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;JEFF: put grunts on push downs!!! +;JEFF: put noise on big dunks!!! + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff +;DAN: New imgs (cheer, nba, etc) +;DAN: Design team,thanks screens + +;DAN: MDoc credits +;DAN: Press button bozo for team select +;DAN: Put cheerleaders on court - outside perhaps +;DAN: Put in ZIP screens +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + + subi >3000,a14 ;Slow him down + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass + subk 20,a2 ;at least 20 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + .if DEBUG + cmpi WRLDMID-IBX_OOB-15,a2 + jrle #bugout + cmpi WRLDMID+IBX_OOB+15,a2 + jrlt #nobug +#bugout + LOCKUP +#nobug + .endif + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + .if DEBUG + cmpi CZMIN-17,a2 + jrle #bugout1 + cmpi CZMAX+17,a2 + jrlt #nobug1 +#bugout1 + LOCKUP +#nobug1 + .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + diff --git a/BACKUP/CODE100/PLYR.EQU b/BACKUP/CODE100/PLYR.EQU new file mode 100644 index 0000000..efcbaef --- /dev/null +++ b/BACKUP/CODE100/PLYR.EQU @@ -0,0 +1,371 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE100/PLYR2.ASM b/BACKUP/CODE100/PLYR2.ASM new file mode 100644 index 0000000..8ea73b2 --- /dev/null +++ b/BACKUP/CODE100/PLYR2.ASM @@ -0,0 +1,6119 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref chrch_bel_sp + SLEEPK 20 + callr flash_ball + SOUND1 chrch_bel_sp + SLEEPK 27 + callr flash_ball + SLEEPK 27 + callr flash_ball + SOUND1 chrch_bel_sp + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 + move *a13(plyr_seq),a14 + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + + callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE100/PLYR3.ASM b/BACKUP/CODE100/PLYR3.ASM new file mode 100644 index 0000000..2955913 --- /dev/null +++ b/BACKUP/CODE100/PLYR3.ASM @@ -0,0 +1,3694 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,2 + LW SMOK1_09,2 + LW SMOK1_10,2 + LW SMOK1_11,2 + LWL0 SMOK1_12,2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,2 + LW SMOK1_09,2 + LW SMOK1_10,1 + LW SMOK1_11,1 + LWL0 SMOK1_12,1 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,2 + LW SMOK1_09,2 + LW SMOK1_10,2 + LW SMOK1_11,2 + LWL0 SMOK1_12,2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,2 + LW SMOK1_09,2 + LW SMOK1_10,1 + LW SMOK1_11,1 + LWL0 SMOK1_12,1 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 4-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ,DUNKV4_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKV_SEQ,DUNKZ3_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKV2_SEQ,DUNKT5_SEQ,DUNKU2_SEQ,DUNKV_SEQ + .word DUNKV2_SEQ,DUNKV3_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 17-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKV_SEQ,DUNKR_SEQ,DUNKT_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 9-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + .word DUNKV_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 24-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKV2_SEQ,DUNKV3_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ,DUNKV_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 20-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ + .word DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKV_SEQ,DUNKR_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 29-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKV_SEQ,DUNKV2_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ + .word DUNKW3_SEQ,DUNKX2_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKLAY6_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 4-1 + .word DUNKV2_SEQ,DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKLAY6_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 1-1 + .word DUNKLAY6_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d4m_t .word 1-1 + .word DUNKLAY6_SEQ + + +#d5m_t .word 1-1 + .word DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 1-1 + .word DUNKLAY6_SEQ + + +#d5l_t .word 1-1 + .word DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 200,a0 + jreq #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE100/PLYRAT.ASM b/BACKUP/CODE100/PLYRAT.ASM new file mode 100644 index 0000000..26296be --- /dev/null +++ b/BACKUP/CODE100/PLYRAT.ASM @@ -0,0 +1,2174 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV6,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,5,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK5,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT5,DNK6,DEF5,SDEF6,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,3,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT8,DNK1,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT5,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,2,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV6,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK3,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,8,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT4,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF1,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT5,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT7,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT6,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV7,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,2,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT5,DNK4,DEF7,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,9,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT7,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF8,SDEF6,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 7,6,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK9,DEF9,SDEF9,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JOHN HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT9,DNK9,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV1,SHT2,DNK2,DEF2,SDEF7,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end diff --git a/BACKUP/CODE100/PLYRAT2.ASM b/BACKUP/CODE100/PLYRAT2.ASM new file mode 100644 index 0000000..35bed8b --- /dev/null +++ b/BACKUP/CODE100/PLYRAT2.ASM @@ -0,0 +1,648 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + .def setup_created_plyr_attrib_tbl + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + +; .def created_plyr1_attrib_tables +; .def created_plyr2_attrib_tables +; .def created_plyr3_attrib_tables +; .def created_plyr4_attrib_tables + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE +; .bss created_plyr1_attrib_tables,PLYRAT_TBL_SIZE ;sizeof ATL_t in plyrat.asm +; .bss created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; .bss created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; .bss created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;deleted alot of .asg's +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 +; addi MIDDLE_HEAD,a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L +;; move *a7(PAT_PALF_p),a2,L ;Copy flesh + move a2,*a1(PAT_PALF_p),L + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show +; movi Brown_h,a2,L + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE100/PLYRAT3.ASM b/BACKUP/CODE100/PLYRAT3.ASM new file mode 100644 index 0000000..b8b7a24 --- /dev/null +++ b/BACKUP/CODE100/PLYRAT3.ASM @@ -0,0 +1,528 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE100/PLYRDSEQ.ASM b/BACKUP/CODE100/PLYRDSEQ.ASM new file mode 100644 index 0000000..6065c0c --- /dev/null +++ b/BACKUP/CODE100/PLYRDSEQ.ASM @@ -0,0 +1,2914 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref tarzan,ohmy,jet2_snd + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_shadow_trail + .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE100/PLYRDSQ2.ASM b/BACKUP/CODE100/PLYRDSQ2.ASM new file mode 100644 index 0000000..0978a99 --- /dev/null +++ b/BACKUP/CODE100/PLYRDSQ2.ASM @@ -0,0 +1,1861 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE100/PLYRLSEQ.ASM b/BACKUP/CODE100/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE100/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE100/PLYRRSEQ.ASM b/BACKUP/CODE100/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE100/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE100/PLYRSEQ.ASM b/BACKUP/CODE100/PLYRSEQ.ASM new file mode 100644 index 0000000..5e07c9c --- /dev/null +++ b/BACKUP/CODE100/PLYRSEQ.ASM @@ -0,0 +1,2880 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) + .word NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) + .word NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE100/PLYRSEQ2.ASM b/BACKUP/CODE100/PLYRSEQ2.ASM new file mode 100644 index 0000000..f743f8e --- /dev/null +++ b/BACKUP/CODE100/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 + btst 3,a14 + jrnz #x + btst 0,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + \ No newline at end of file diff --git a/BACKUP/CODE100/PLYRSTND.ASM b/BACKUP/CODE100/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE100/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE100/QUEST.DOC b/BACKUP/CODE100/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE100/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE100/RECORD.ASM b/BACKUP/CODE100/RECORD.ASM new file mode 100644 index 0000000..20ba55a --- /dev/null +++ b/BACKUP/CODE100/RECORD.ASM @@ -0,0 +1,5784 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p2_crtplr, 16 + BSSX kp_p3_crtplr, 16 + BSSX kp_p4_crtplr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 + move *a3(PS_2PTS_MADE*10h),a0 + move *a3(PS_3PTS_MADE*10h),a14 + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +* 0 = BEST OVERALL PLAYER +* 1 = GRAND CHAMPIONS +* 2 = WORLD RECORDS +* 3 = GREATEST PLAYERS +* 4 = BEST DEFENSIVE PLAYERS +* 5 = BEST OFFENSIVE PLAYERS +* 6 = EXPERIENCED PLAYERS +* 7 = WINNING STREAKS +* 8 = TRIVIA MASTERS +* 7 = MOST POPULAR TEAMS +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +#teampals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop + + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end diff --git a/BACKUP/CODE100/SCORE.ASM b/BACKUP/CODE100/SCORE.ASM new file mode 100644 index 0000000..87a75ef --- /dev/null +++ b/BACKUP/CODE100/SCORE.ASM @@ -0,0 +1,4674 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_40,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... +; +;;Only decrement team zone timer when that particular team is in possession +;;of the ball. +; +;;cntl_team = Team in control (0,1,-1) +;;a11 = team on fire (!0=team 1, 0=team 2) +; +; .ref cntl_team +; move @cntl_team,a0 +; jrn #lptick +; jrz #t1 +;;Team 2 +; move a11,a11 +; jrz #cont +; jruc #lptick +; +;#t1 +;;Team 1 +; move a11,a11 +; jrz #lptick +; +;#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE diff --git a/BACKUP/CODE100/SCORE2.ASM b/BACKUP/CODE100/SCORE2.ASM new file mode 100644 index 0000000..b8899dc --- /dev/null +++ b/BACKUP/CODE100/SCORE2.ASM @@ -0,0 +1,2140 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + diff --git a/BACKUP/CODE100/SCREEN.ASM b/BACKUP/CODE100/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE100/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE100/SELECT.ASM b/BACKUP/CODE100/SELECT.ASM new file mode 100644 index 0000000..6c61425 --- /dev/null +++ b/BACKUP/CODE100/SELECT.ASM @@ -0,0 +1,6319 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 + jrz #ncp1 + + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 + jrz #ncp2 + + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 + jrz #ncp3 ;br=plyr doesn't have privilege + + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 + jrz #ncp4 + + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JOHN HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','2'-'0','2'-'0','5'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;; cmpi _PHX,a2 +;; jrz #yesd1 +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 + + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +#choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + + move @player3_data+PR_NAME1,a0 + jrgt #cont1 + move @player4_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team1,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;NUM_TEAMS elements +#setnum .word 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1 + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;; cmpi _PHX,a2 +;; jrz #yesd3 +; cmpi _DAL,a2 +; jrz #yesd3 + + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +#choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + + move @player1_data+PR_NAME1,a0 + jrgt #cont2 + move @player2_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + move a0,@HALT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 8 + + SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 25*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#grand_mess_tbl + .long #line_blnk + .long #line_blnk + .long #line_blnk + .long #line1 + .long #line2 + .long #line2a + .long #line_blnk + .long #line3 + .long #line3a + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line1 + .word 33 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .word 134 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .word 53 + .long HANGF_Y_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .word 104 + .long HANGF_G_P + .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .word 43 + .long HANGF_G_P + .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 06,05,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,05 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,02,03 + .word 04,05,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,03,05,06 + .word 06,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,08,01 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,02,05,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,02,08,06 + .word 05,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 05,09,07,03 + .word 04,04,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,07,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 06,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 08,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 06,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,05,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,08,04,03 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,09,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,07,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,05,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,07,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,04,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,09 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,01,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,05,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,07,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,06,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 07,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,06,04 + .word 08,05,03,05 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,02,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,09,05,04 + .word 05,07,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,07,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE100/SELECT3.ASM b/BACKUP/CODE100/SELECT3.ASM new file mode 100644 index 0000000..cb4487c --- /dev/null +++ b/BACKUP/CODE100/SELECT3.ASM @@ -0,0 +1,4679 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE100/SELECT4.ASM b/BACKUP/CODE100/SELECT4.ASM new file mode 100644 index 0000000..cb73ac5 --- /dev/null +++ b/BACKUP/CODE100/SELECT4.ASM @@ -0,0 +1,6150 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblp.glo" + .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar + .ref concat_string,concat_rom_string,copy_rom_string + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean + .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 1, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 1, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 1, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 1,247,235,245,236,ANSWER_A + LWWWWWW question8, 1,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 1, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 1, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 1, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 1, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 1, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 1,266,292,244,253,ANSWER_A + LWWWWWW question23, 1,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C +; LWWWWWW question25, 2, 63, 64, 36, 65,ANSWER_B + LWWWWWW question26, 1, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 1, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 1, 20, 16, 70, 18,ANSWER_D +; LWWWWWW question29, 1, 73, 40, 16, 49,ANSWER_C + LWWWWWW question30, 1, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 1, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 1, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 2, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 2, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 2, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 1, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 1, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 1, 73, 91, 54, 92,ANSWER_C +; LWWWWWW question40, 1, 93, 94, 68, 95,ANSWER_D + LWWWWWW question41, 1, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 1, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 1, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 5,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 1,163,164,165,166,ANSWER_A +; LWWWWWW question62, 1, 48, 34, 49, 16,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 1,170,167,169,168,ANSWER_B + LWWWWWW question66, 1, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 1, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 1, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 1,243,244,235,301,ANSWER_D + LWWWWWW question70, 1, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 1,177,182,180,181,ANSWER_C + LWWWWWW question72, 1, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 1,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 1, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 1,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 2,233,246,247,236,ANSWER_A + LWWWWWW question78, 2, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 1, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 1,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 1,248,249,250,251,ANSWER_C + LWWWWWW question82, 1,247,252,253,254,ANSWER_B + LWWWWWW question83, 1,255,221,256,257,ANSWER_A +; LWWWWWW question84, 1,183,184,185,186,ANSWER_C + LWWWWWW question85, 1,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 1,243,261,325,259,ANSWER_D + LWWWWWW question88, 1,247,252,260,261,ANSWER_A + LWWWWWW question89, 1, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 1, 18,113, 19,114,ANSWER_A +; LWWWWWW question91, 1,111, 38, 16, 50,ANSWER_C + LWWWWWW question92, 1,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 1,122, 17,123,112,ANSWER_D + LWWWWWW question99, 1,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A +; LWWWWWW question107,2, 20,130, 18,131,ANSWER_C + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B +; LWWWWWW question115,2,137, 14, 26, 20,ANSWER_D + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C +; LWWWWWW question119,2,139, 23, 19,140,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,2,224,225,226,227,ANSWER_C + LWWWWWW question127,2,228,229,240,218,ANSWER_D + LWWWWWW question128,2,241,227,239,242,ANSWER_B + LWWWWWW question129,2,123, 74,141,142,ANSWER_A + LWWWWWW question130,2,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C +; LWWWWWW question141,2,151,152,153,154,ANSWER_A +; LWWWWWW question142,2,155,156,157,158,ANSWER_B +; LWWWWWW question143,2,247,268,267,244,ANSWER_A +; LWWWWWW question144,1,312,313,314,317,ANSWER_C +; LWWWWWW question145,1,312,313,314,321,ANSWER_A + LWWWWWW question146,1,312,313,314,331,ANSWER_B + LWWWWWW question147,1,312,313,314,332,ANSWER_B +; LWWWWWW question148,2,306,310,307,305,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,1,312,313,314,326,ANSWER_A + LWWWWWW question151,1,312,313,314,334,ANSWER_A + LWWWWWW question152,1,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,274,272,236,ANSWER_C + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,1,292,247,271,266,ANSWER_C + LWWWWWW question157,1,293,294,295,296,ANSWER_C + LWWWWWW question158,1,203,189,205,206,ANSWER_B + LWWWWWW question159,1,275,276,277,278,ANSWER_C + LWWWWWW question160,1,279,280,281,275,ANSWER_B + LWWWWWW question161,1,312,314,313,321,ANSWER_B + LWWWWWW question162,1,312,314,313,316,ANSWER_B + LWWWWWW question163,1,312,314,313,324,ANSWER_B + LWWWWWW question164,1,312,314,313,317,ANSWER_B + LWWWWWW question165,1,312,314,313,330,ANSWER_C + LWWWWWW question166,1,312,314,313,332,ANSWER_A + LWWWWWW question167,1,312,314,313,323,ANSWER_B + LWWWWWW question168,1,312,314,313,315,ANSWER_B + LWWWWWW question169,1,312,314,313,316,ANSWER_C + LWWWWWW question170,1,282,283,284,285,ANSWER_A + LWWWWWW question171,1,286,287,288,289,ANSWER_C + LWWWWWW question172,1,290,291,289,288,ANSWER_C + LWWWWWW question173,1,112, 50, 54, 24,ANSWER_A + LWWWWWW question174,1,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,1,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,1,261,244,245,260,ANSWER_A + LWWWWWW question177,1,289,297,298,299,ANSWER_B + LWWWWWW question178,1,289,298,299,297,ANSWER_C + LWWWWWW question179,2,307,311,309,308,ANSWER_A + LWWWWWW question180,1,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,244,271,252,266,ANSWER_A +; LWWWWWW question183,2, 14, 16, 20,118,ANSWER_C + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,1,312,314,313,331,ANSWER_A + LWWWWWW question187,1,312,314,313,322,ANSWER_B + LWWWWWW question188,1,312,314,313,330,ANSWER_A + LWWWWWW question189,1,312,314,313,324,ANSWER_C + LWWWWWW question190,1,312,314,313,329,ANSWER_C + LWWWWWW question191,1,312,314,313,328,ANSWER_B + LWWWWWW question192,1,312,314,313,325,ANSWER_A + LWWWWWW question193,1,312,314,313,331,ANSWER_A + LWWWWWW question194,1,312,314,313,327,ANSWER_A + LWWWWWW question195,1,312,314,313,326,ANSWER_A + LWWWWWW question196,1,312,314,313,332,ANSWER_B + LWWWWWW question197,1,312,314,313,318,ANSWER_A + LWWWWWW question198,1,312,314,313,319,ANSWER_B + LWWWWWW question199,1,312,314,313,320,ANSWER_A + LWWWWWW question200,1,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr341 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "CENTRAL ARKANSAS UNIVERSITY",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "XAVIER MCDANIEL",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DOUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG UNIT",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 15000,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE100/SOUNDS.ASM b/BACKUP/CODE100/SOUNDS.ASM new file mode 100644 index 0000000..67b03d9 --- /dev/null +++ b/BACKUP/CODE100/SOUNDS.ASM @@ -0,0 +1,1229 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >2001,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1901,35, >180 + SX elbow2_snd, >1901,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1501,35, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + +;dunk sounds + SX jet4_snd, >1203,70, >2f9 + SX jet1_snd, >1203,80, >108 + SX jet2_snd, >1203,80, >128 + SX jet3_snd, >1203,80, >126 + SX tarzan, >1203,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE100/SPEECH.ASM b/BACKUP/CODE100/SPEECH.ASM new file mode 100644 index 0000000..e0d5258 --- /dev/null +++ b/BACKUP/CODE100/SPEECH.ASM @@ -0,0 +1,4373 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long stp_n_pop_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long fires_jumpr + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long ltle_jmpr_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a0,a14 ;do I own ball ? + jrne #nolay ;br=no + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + jrz #dname + calla snd_play1 + rets +#dname + move @plyr_shot,a0 + callr call_player_name +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long drv_layup_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi 200,a0 ;20% of tim + calla RNDPER + jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE100/STRING.ASM b/BACKUP/CODE100/STRING.ASM new file mode 100644 index 0000000..df3fb23 --- /dev/null +++ b/BACKUP/CODE100/STRING.ASM @@ -0,0 +1,2052 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + .global initials_entry + .global cmos_test + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE100/SYS.EQU b/BACKUP/CODE100/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE100/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE100/TEST.ASM b/BACKUP/CODE100/TEST.ASM new file mode 100644 index 0000000..3508b7d --- /dev/null +++ b/BACKUP/CODE100/TEST.ASM @@ -0,0 +1,3628 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 + .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC + .ref diag_cursor + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end + diff --git a/BACKUP/CODE100/TEXT.ASM b/BACKUP/CODE100/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE100/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE100/TODO.ASM b/BACKUP/CODE100/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE100/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE100/TODO.DOC b/BACKUP/CODE100/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE100/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE100/UNZIP.ASM b/BACKUP/CODE100/UNZIP.ASM new file mode 100644 index 0000000..c420b0c --- /dev/null +++ b/BACKUP/CODE100/UNZIP.ASM @@ -0,0 +1,1139 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + + .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + + + +BPP .set 3 +RAMBUFSIZ .set (4*1024)*8 ; << BPP +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +PAGE1ADR .equ PAGE1YO*512*8 + +CARYTEST .equ 0 ;1 for Cary's board testing +ERRORTEST .equ 0 ;1 for random pixel test +DEBUGPORT .equ >1d01010 + + + STRUCTPD + LONG PTEMP1 + LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + + +;RamBuffer .usect "unzip",RAMBUFSIZ +RamBuffer equ >1200000 + + BSSX lengthtree ,256*32 + .bss disttree ,256*32 + .bss minptrtbl ,256*32 + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + + SUBR show_trophy + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi TROPHY,a8 + clr a9 + movi SCRNST+SCRNXP,a10 ;XY + JSRP movie_run + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + calla WIPEOUT + + RETP + + +#******************************* +* Stop for error (DEBUG) + + .if TUNITDB + + SUBRP movie_error + + PUSH a0,a1 + pushst + dint + + move @SYSCOPY,a0 + ori 4,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + +#lp2 movi 20000,a1 +#lp move a0,@ERASELOC + addk 1,a0 + dsj a1,#lp + + move @SWITCH+16,a1 + not a1 + andi >624,a1 + jrz #lp2 + + move @SYSCOPY,a0 + xori 4,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + PULL a0,a1 + rets + + .endif + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Mode (0=Normal, 1=x2) +* A10=Screen * for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + + addi SCRNXP*8,a10 ;+XPad offset + move @dpage,a14 + jrnz #p2 + addi PAGE1YO*512*8,a10 ;Start in page 1 if page 0 is being displayed +#p2 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b3,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a10 ;* to bottom left + + callr movie_getpal + jrz #error + ;A4=# frames + ;A6=X size + ;B3=Y size + ;B4=strtpal + movi blowline,b10 + move a9,a9 + jrz #mode0 + movi blowlinex2,b10 +#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + + .if CARYTEST=0 + + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + + .endif + +#x rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + calla pal_getf + jrz #x + + move a7,a1 + sll 4,a1 ;*16 + add a1,a8 + + move a0,b4 + addk 1,a1 ;Clr Z + +#x rets + + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A4=# frames +* >A6/B9=X +* >A7=# colors in palette +* >B3=Y +* Trashes scratch + +movie_parsehdr + + move a8,a14 + movk 30,a0 ;# retries + +#rd move *a8+,a6 ;X size of frames + move *a8+,a1 ;Y size of frames + move *a8+,a4 ;# of frames + move *a8+,a7 ;# of colors + move a1,b3 + move a6,b9 + +; cmpi 100,a6 ;X +; jrne #error +; cmpi 68,b3 ;Y +; jrne #error +; cmpi 5,a4 ;#frms +; jrlt #error +; cmpi 35,a4 +; jrgt #error +; cmpi 200,a7 ;#colors +; jrlt #error +; cmpi 255,a7 +; jrhi #error + + clr a0 + rets + +#error + movk 101b,a8 + move a8,@DEBUGPORT + + move a14,a8 + dsj a0,#rd + + addk 1,a0 + rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + + + +#******************************* +* Uncompress a tree +* A7=* to tree table +* A8=* to compressed data +* >A0=!0 if error (CC) + +UncompressTree: + + PUSH a4,a5 + + move a7,a5 ;Save start of tree + + clr a4 + PUSH a8 + ;>Determine how many codes of each bit length + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Constant + clr a6 ;Total number of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;number of codes of this bit length + add a2,a6 ;adjust total + and a3,a1 + addk 1,a1 ;bit length + move a1,a11 + sll 16,a11 + movy a11,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + + PULL a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + + cmp a2,a4 + jrne #error ;Chksums don't match? + + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a9 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move a5,a7 ; restore start of tree + movi 06543h,a14 ; current minimum + move a6,b6 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a11 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj b6,utr3 + +; end of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a11 ; set this minimum high. + move a11,*a0+,L ; place translation ptr in MinPtrTbl. + + dsjs a9,utr2 + + ;>Compute the codes + clr a11 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength + move a6,a14 ;loop counter +utr4 + move *-a0,a7,L ;translated pointer + add a1,a11 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a11,a5 ;copy of Code in a5 + movk 16,a9 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a9,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a14,utr4 + + clr a0 + +#x PULL a4,a5 + move a0,a0 + rets + + +#error + movk 1001b,a14 + move a14,@DEBUGPORT + + LOCKUP + movk 1,a0 ;Error! + jruc #x + + + +******************************** + +SetConstants: + movi lengthtree,b0 + movi disttree,b1 +SetConstX + movi RamBuffer+RAMBUFSIZ-1,a0 ;mask for rambuf ptr + movi RamBuffer,a6 ;used for negative wraparound + movi 0c0c0h,b7 ;for blowing words of + movi DMACMAP,b8 +; movi blowline,b10 + rets + + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + + + .if TUNITDB + jruc #debugstrt + .endif + + + movi lengthtree,b0 + movi disttree,b1 + + movk 10,a5 +#ltlp move b0,a7 ;Length Tree + move a8,b2 + callr UncompressTree + jrz #ltok ;OK? + move b2,a8 + dsj a5,#ltlp + jruc #error +#ltok + + movk 10,a5 +#dtlp move b1,a7 ;Distance Tree + move a8,b2 + callr UncompressTree + jrz #dtok ;OK? + move b2,a8 + dsj a5,#dtlp + jruc #error +#dtok + + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + + ;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi 1024,a2 ;4K + clr a3 +clrbuf + move a3,*-a1,L + dsj a2,clrbuf + + ;Do some initializing + mpyu b9,b3 + move b3,a11 ;total # bytes in frame in a11 + move a11,*a13(PIXPERFRM),L + callr SetConstX + move a6,a9 ;Where to uncompress to + move a9,b3 ;first frame start + clr b5 ;pixel count for Stills only + + cmpi 1,a4 + jreq UncompressFrame ;1 frame? + +;---- + +#lp + mmtm a12,a4,a10 + + callr movie_waitdma + + .if CARYTEST + movk 10b,a14 + move a14,@DEBUGPORT + .endif + + .if TUNITDB + movi 50,a0 +#dblp + movi 80,a2 +#dblp2 + move a8,a9 + addi GRANT_F2-GRANT_F,a9 + movb *a8,a14 + movb *a9,a1 + move a14,@SCRATCH+13 + move a1,@SCRATCH+16+15 + cmp a1,a14 + jreq #cmpok +#dberr callr movie_error + mmfm a12,a4,a10 + RETP +#cmpok + move @DMACTRL,a1 + move @DMACTRL,a1 + move @DMACTRL,a1 + move @SWITCH,a1,L + move @SWITCH,a1,L + move @SWITCH,a1,L + movb *a9,a1 + cmp a1,a14 + jrne #dberr + move @SCRATCH+13,a1 + cmp a1,a14 + jrne #dberr + movb *a8,a14 + move @SCRATCH+16+15,a1 + cmp a1,a14 + jrne #dberr + + movb a14,*a10 + addk 8,a8 + addk 8,a9 + addk 8,a10 + dsj a2,#dblp2 + addi (512-80)*8,a10 + dsj a0,#dblp + + jruc #skipuncomp + .endif + + + JSRP UncompressFrame + + clr a0 + move a0,@DEBUGPORT +#skipuncomp + + movk 1,a0 ;1 tick sleep +; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +; jrz chk4hold +; subk 1,a14 +; jrne nonono +; +; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +; add a14,a0 +; jruc nonono +; +;chk4hold +; move *a13(HOLDFADE),a14 +; jrz nonono ; if need to hold, create fade process +; PUSH a8 +; move b4,a8 +;; CREATE0 HOLD_FADE_PROC +; PULL a8 +; movk 6,a0 ; sleep longer if we are fading pal +;nonono + + + movi swappg,a14 + jruc GoToSleep + + +swappg + + mmfm a12,a4,a10 + + xori PAGE1YO*512*8,a10 ;Flip * to other page + +; PUSH a0 + + setf 16,1,0 + + +; move *a13(FRAMENUM),a14 ;sound only on first frame +; jrnz no +; move *a13(CLIPSND),a0,L ;sound from sound table +; jrz no +; PUSH a14 +; calla snd_play1 +; PULL a14 +;no +; PULL a0 +; +; addk 1,a14 +; move a14,*a13(FRAMENUM) ;save next frame number + + move *a13(PIXPERFRM),a14,L ;number of pixels in a frame + add a14,a11 ;adjust by extra pixels done last time + +; cmpi 2,a4 +; jrne #nxtf +; movi blowlinelastfrm,b10 + +#nxtf + PUSH a0,a1,a2 + calla get_all_buttons_cur + PULL a0,a1,a2 + jrnz #abort + + + dsj a4,#lp ;Loop once for each frame + +#abort + callr movie_waitdma + ;>Copy visable frame to other page + move *a13(PIXPERFRM),a14,L ;# of pixels in a frame + + move b4,*b8 ;Set pallette + + move a10,a2 ;* screen + xori PAGE1YO*512*8,a2 ;Flip * to other page +#cpylp + move a2,a0 + move a10,a1 + + move b9,a5 ;X size + srl 1,a5 ;X/2 = loop counter +#cllp move *a0+,*a1+ + dsj a5,#cllp + + subi SCRN_PTCH,a2 + subi SCRN_PTCH,a10 + move b9,a0 + sub a0,a14 + jrgt #cpylp ;More pixels? + + +#x + RETP + + +#error LOCKUP + jruc #x + + +******************************** + + +GoToSleep + getst b2 + move a12,b6 + mmtm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + setf 16,1,0 + setf 32,0,1 + move a14,*a13(PTEMP1),L + calla PRCSLP + + move a12,b6 + mmfm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + callr SetConstants + move *a13(PTEMP1),a14,L + + putst b2 + exgpc a14 ;Return + + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move b4,*b8,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ; if bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + setf 8,0,0 + + move *a8+,*a9+ + and a0,a9 + + addk 1,b5 ; pixel count + subk 1,a11 +us1 + cmp b5,b9 ; have we filled a line yet? + jrgt us0 + + call b10 ; Blow Line Routine + +us0 + move a11,a11 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b1,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll BPP,a1 ; turn it into a pointer + + move b0,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a9,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a6,a2 ;copy pointer is now in a2 + + sub a7,a11 ;Adjust total pixel count + move a7,b6 + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a9+ ;>Copy + and a0,a2 + and a0,a9 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 + +#x + move b6,a7 + rets ;Result returned in a7 + + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + +; setf 32,0,0 + + move a10,a2 ;* screen + + move b3,a1 ;Start of line + move b9,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #by4 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 +#by4 +#lp + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + dsj a5,#lp + + +endblowline + subi SCRN_PTCH,a10 + move a1,b3 ;save for next frame + sub b9,b5 ;readjust pixels for next line + cmp b9,b5 ;added 6/92. if there are enough pixels + jrge #nuther ;left to do another line, do it. + + rets + +#nuther + jruc blowline + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + + SUBRP blowlinex2 + + + move a10,a2 ;* screen + move a10,a3 + addi SCRN_PTCH,a3 + + move b3,a1 ;start of line + move b9,a5 ;X size + + setf 8,0,0 +#lp + move *a1+,a14 ;Get 8 bits + move a14,a4 + sll 8,a4 + or a4,a14 + move a14,*a2+,1 ;16 bits + move a14,*a3+,1 + and a0,a1 + dsjs a5,#lp + + + subi SCRN_PTCH*2,a10 + move a1,b3 ; save for next frame + sub b9,b5 ; readjust pixels for next line + cmp b9,b5 ; added 6/92. if there are enough pixels + jrge #nuther ; left to do another line, do it. + + rets + +#nuther + jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets +; +; + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + + .end diff --git a/BACKUP/CODE100/UTIL.ASM b/BACKUP/CODE100/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE100/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE100/WORLD.EQU b/BACKUP/CODE100/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE100/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE100/_MARKER_ b/BACKUP/CODE100/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE100/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE111L/ADJUST.ASM b/BACKUP/CODE111L/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE111L/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE111L/ATTRACT.ASM b/BACKUP/CODE111L/ATTRACT.ASM new file mode 100644 index 0000000..cc78edf --- /dev/null +++ b/BACKUP/CODE111L/ATTRACT.ASM @@ -0,0 +1,6594 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + + ;let the sound board reset finish up. + SLEEPK 8 + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE111L/AUDIT.ASM b/BACKUP/CODE111L/AUDIT.ASM new file mode 100644 index 0000000..0074b21 --- /dev/null +++ b/BACKUP/CODE111L/AUDIT.ASM @@ -0,0 +1,3512 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS + .ref opmsg_clr + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + + calla opmsg_clr + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + + .byte "NBA HANGTIME - VER L1.1 4/16/96",0 +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111L/AUDIT.EQU b/BACKUP/CODE111L/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE111L/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE111L/BAKGND.ASM b/BACKUP/CODE111L/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE111L/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE111L/BB.ASM b/BACKUP/CODE111L/BB.ASM new file mode 100644 index 0000000..0291749 --- /dev/null +++ b/BACKUP/CODE111L/BB.ASM @@ -0,0 +1,3429 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? + jrnz initp50 ; br=no + + movi AUD_LOCKUP,a0 ;Watchdog audit + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE111L/BB.CMD b/BACKUP/CODE111L/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE111L/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE111L/BB2.ASM b/BACKUP/CODE111L/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE111L/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE111L/BB3.ASM b/BACKUP/CODE111L/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE111L/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE111L/BB4.ASM b/BACKUP/CODE111L/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE111L/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE111L/BBC.BAT b/BACKUP/CODE111L/BBC.BAT new file mode 100644 index 0000000..d80f954 --- /dev/null +++ b/BACKUP/CODE111L/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE111L/BBL.BAT b/BACKUP/CODE111L/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE111L/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE111L/BBSEC.EQU b/BACKUP/CODE111L/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE111L/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE111L/COMBOS.DOC b/BACKUP/CODE111L/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE111L/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE111L/DIAG.ASM b/BACKUP/CODE111L/DIAG.ASM new file mode 100644 index 0000000..6a3849a --- /dev/null +++ b/BACKUP/CODE111L/DIAG.ASM @@ -0,0 +1,6023 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +CKSUM1 .equ >1ac1 +CKSUM2 .equ >b893 + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE111L/DIPSW.EQU b/BACKUP/CODE111L/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE111L/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE111L/DISP.EQU b/BACKUP/CODE111L/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE111L/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE111L/DRONE.ASM b/BACKUP/CODE111L/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE111L/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE111L/GAME.EQU b/BACKUP/CODE111L/GAME.EQU new file mode 100644 index 0000000..3b47aa1 --- /dev/null +++ b/BACKUP/CODE111L/GAME.EQU @@ -0,0 +1,786 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (206 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;must be on byte boundary + +****************************************************************************** + + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 410 ;increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit +;;NUM_PRECORDS equ 290 + + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE111L/GSP.EQU b/BACKUP/CODE111L/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE111L/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE111L/HSTD.ASM b/BACKUP/CODE111L/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE111L/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE111L/IMGFIND.CMD b/BACKUP/CODE111L/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE111L/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE111L/LINK.EQU b/BACKUP/CODE111L/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE111L/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE111L/MACROS.HDR b/BACKUP/CODE111L/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE111L/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE111L/MAKE.INI b/BACKUP/CODE111L/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE111L/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE111L/MAKEFILE b/BACKUP/CODE111L/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE111L/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE111L/MAKEPLR.ASM b/BACKUP/CODE111L/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE111L/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE111L/MAKEPLR2.ASM b/BACKUP/CODE111L/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE111L/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE111L/MAKEVDA.BAT b/BACKUP/CODE111L/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE111L/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE111L/MENU.ASM b/BACKUP/CODE111L/MENU.ASM new file mode 100644 index 0000000..349e784 --- /dev/null +++ b/BACKUP/CODE111L/MENU.ASM @@ -0,0 +1,8267 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER + .ref opmsg_main + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0e7ffh,a0 + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +DO_HSRES + MOVI MESS_HSRESET,A8 + MOVI HSSOFT,A9 + MOVI MESS_HSRCONF,A10 + JAUC AREUSURE + +HSSOFT + CALLR RES_ALL + RETP ;PROGRAM TO DO THE JOB! + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +MISC_AUD + .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar + AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN + AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP + AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW + AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW + AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW + AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW + AMAC adiff_s,diff_prt,0,>1212 + .LONG 0 + +adiff_s TXTLINE "GAME DIFFICULTY LEVEL" + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +DOHSLEFT + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;IS IF OFF? + JRZ DOHSOFF ;YEP...PRINT IT + + CALLA GET_HSC ;GET THE COUNTER VALUE + MOVE A0,A3 + jruc NUMBER_WORK ;AND SHOW IT! + +DOHSOFF + MOVI MESS_AUD_NUM,A8 + CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. + + MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! + JAUC RIGHT_FINISH + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +M_HSLEFT + TXTLINE "PLAYS UNTIL H.S. RESET" + +M_HSOFF TXTLINE "OFF" + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +M_LOCKUP + TXTLINE "LOCKUPS" +M_HIDB TXTLINE "GAMES NOT FINISHED" + +M_SECBON + TXTLINE "WARPS" + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +; .LONG opmsg_s,opmsg_main,OPMSG_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# of ENTRIES + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY + .long opmsg_s + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +HSRES_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_RESHS1 + .LONG MEH_RESHS2 + .LONG MEH_RESHS3 + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +MESS_HSRESET +U_HSRESET .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + +MESS_HSRES + .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +MESS_FAM +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_HSRCONF + .byte "HIGH SCORE TABLE RESET.",0,1 + .EVEN + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 + .byte "TOTAL CARNAGE TEAM:",0,1 + MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 + .byte "MARK TURMELL",0,1 + MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 + .byte "JOHN TOBIAS",0,1 + MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 + .byte "JIM GENTILE",0,1 + MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 + .byte "SHAWN LIPTAK",0,1 + MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 + .byte "JON HEY",0,1 + MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 + .byte "TONY GOSKIE",0,0 + .even + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +MEH_RESHS1 .byte "RESET HIGH SCORE",0 + .EVEN +MEH_RESHS2 .byte "TABLE TO FACTORY",0 + .EVEN +MEH_RESHS3 .byte "DEFAULT VALUES",0 + .EVEN + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE111L/MENU.EQU b/BACKUP/CODE111L/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE111L/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE111L/MPROC.ASM b/BACKUP/CODE111L/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE111L/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE111L/MPROC.EQU b/BACKUP/CODE111L/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE111L/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE111L/NDSP1.ASM b/BACKUP/CODE111L/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE111L/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE111L/PAL.ASM b/BACKUP/CODE111L/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE111L/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE111L/PATCH.ASM b/BACKUP/CODE111L/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE111L/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE111L/PLYR.ASM b/BACKUP/CODE111L/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE111L/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE111L/PLYR.EQU b/BACKUP/CODE111L/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE111L/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE111L/PLYR2.ASM b/BACKUP/CODE111L/PLYR2.ASM new file mode 100644 index 0000000..23ca4c5 --- /dev/null +++ b/BACKUP/CODE111L/PLYR2.ASM @@ -0,0 +1,6129 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 + move *a13(plyr_seq),a14 + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE111L/PLYR3.ASM b/BACKUP/CODE111L/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE111L/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE111L/PLYRAT.ASM b/BACKUP/CODE111L/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE111L/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE111L/PLYRAT2.ASM b/BACKUP/CODE111L/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE111L/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE111L/PLYRAT3.ASM b/BACKUP/CODE111L/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE111L/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE111L/PLYRDSEQ.ASM b/BACKUP/CODE111L/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE111L/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE111L/PLYRDSQ2.ASM b/BACKUP/CODE111L/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE111L/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE111L/PLYRLSEQ.ASM b/BACKUP/CODE111L/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE111L/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE111L/PLYRRSEQ.ASM b/BACKUP/CODE111L/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE111L/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE111L/PLYRSEQ.ASM b/BACKUP/CODE111L/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE111L/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE111L/PLYRSEQ2.ASM b/BACKUP/CODE111L/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE111L/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE111L/PLYRSTND.ASM b/BACKUP/CODE111L/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE111L/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE111L/QUEST.DOC b/BACKUP/CODE111L/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE111L/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE111L/RECORD.ASM b/BACKUP/CODE111L/RECORD.ASM new file mode 100644 index 0000000..b2c42e3 --- /dev/null +++ b/BACKUP/CODE111L/RECORD.ASM @@ -0,0 +1,5816 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 + move *a3(PS_2PTS_MADE*10h),a0 + move *a3(PS_3PTS_MADE*10h),a14 + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +* 0 = BEST OVERALL PLAYER +* 1 = GRAND CHAMPIONS +* 2 = WORLD RECORDS +* 3 = GREATEST PLAYERS +* 4 = BEST DEFENSIVE PLAYERS +* 5 = BEST OFFENSIVE PLAYERS +* 6 = EXPERIENCED PLAYERS +* 7 = WINNING STREAKS +* 8 = TRIVIA MASTERS +* 7 = MOST POPULAR TEAMS +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +#teampals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop + + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111L/ROBO.ASM b/BACKUP/CODE111L/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE111L/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111L/SCORE.ASM b/BACKUP/CODE111L/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE111L/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE111L/SCORE2.ASM b/BACKUP/CODE111L/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE111L/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE111L/SCREEN.ASM b/BACKUP/CODE111L/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE111L/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111L/SELECT.ASM b/BACKUP/CODE111L/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE111L/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;; cmpi _PHX,a2 +;; jrz #yesd1 +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 + + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +#choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + + move @player3_data+PR_NAME1,a0 + jrgt #cont1 + move @player4_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team1,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;NUM_TEAMS elements +#setnum .word 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1 + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;; cmpi _PHX,a2 +;; jrz #yesd3 +; cmpi _DAL,a2 +; jrz #yesd3 + + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +#choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + + move @player1_data+PR_NAME1,a0 + jrgt #cont2 + move @player2_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE111L/SELECT3.ASM b/BACKUP/CODE111L/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE111L/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111L/SELECT4.ASM b/BACKUP/CODE111L/SELECT4.ASM new file mode 100644 index 0000000..ff482c4 --- /dev/null +++ b/BACKUP/CODE111L/SELECT4.ASM @@ -0,0 +1,6148 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar + .ref concat_string,concat_rom_string,copy_rom_string + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean + .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE111L/SOUNDS.ASM b/BACKUP/CODE111L/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE111L/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE111L/SPEECH.ASM b/BACKUP/CODE111L/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE111L/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE111L/STRING.ASM b/BACKUP/CODE111L/STRING.ASM new file mode 100644 index 0000000..c5bd3f3 --- /dev/null +++ b/BACKUP/CODE111L/STRING.ASM @@ -0,0 +1,2050 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111L/SYS.EQU b/BACKUP/CODE111L/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE111L/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE111L/TEST.ASM b/BACKUP/CODE111L/TEST.ASM new file mode 100644 index 0000000..3508b7d --- /dev/null +++ b/BACKUP/CODE111L/TEST.ASM @@ -0,0 +1,3628 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 + .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC + .ref diag_cursor + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end + diff --git a/BACKUP/CODE111L/TEXT.ASM b/BACKUP/CODE111L/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE111L/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE111L/TODO.ASM b/BACKUP/CODE111L/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE111L/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE111L/TODO.DOC b/BACKUP/CODE111L/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE111L/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE111L/UNZIP.ASM b/BACKUP/CODE111L/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE111L/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE111L/UTIL.ASM b/BACKUP/CODE111L/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE111L/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE111L/WORLD.EQU b/BACKUP/CODE111L/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE111L/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE111L/_MARKER_ b/BACKUP/CODE111L/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE111L/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE111M/ADJUST.ASM b/BACKUP/CODE111M/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE111M/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE111M/ATTRACT.ASM b/BACKUP/CODE111M/ATTRACT.ASM new file mode 100644 index 0000000..cc78edf --- /dev/null +++ b/BACKUP/CODE111M/ATTRACT.ASM @@ -0,0 +1,6594 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + + ;let the sound board reset finish up. + SLEEPK 8 + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE111M/AUDIT.ASM b/BACKUP/CODE111M/AUDIT.ASM new file mode 100644 index 0000000..42c821c --- /dev/null +++ b/BACKUP/CODE111M/AUDIT.ASM @@ -0,0 +1,3515 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS + .ref opmsg_clr + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + + calla opmsg_clr + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start + .byte "NBA HANGTIME - VER M1.1 4/16/96",0 ;Last 8K CMOS v# +; .byte "NBA HANGTIME - VER L1.1 4/16/96",0 ;Last dedicated v# +;DJT End +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111M/AUDIT.EQU b/BACKUP/CODE111M/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE111M/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE111M/BAKGND.ASM b/BACKUP/CODE111M/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE111M/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE111M/BB.ASM b/BACKUP/CODE111M/BB.ASM new file mode 100644 index 0000000..0291749 --- /dev/null +++ b/BACKUP/CODE111M/BB.ASM @@ -0,0 +1,3429 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? + jrnz initp50 ; br=no + + movi AUD_LOCKUP,a0 ;Watchdog audit + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE111M/BB.CMD b/BACKUP/CODE111M/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE111M/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE111M/BB2.ASM b/BACKUP/CODE111M/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE111M/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE111M/BB3.ASM b/BACKUP/CODE111M/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE111M/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE111M/BB4.ASM b/BACKUP/CODE111M/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE111M/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE111M/BBC.BAT b/BACKUP/CODE111M/BBC.BAT new file mode 100644 index 0000000..10bc24b --- /dev/null +++ b/BACKUP/CODE111M/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +if .%winbootdir%.==.. ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE111M/BBL.BAT b/BACKUP/CODE111M/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE111M/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE111M/BBSEC.EQU b/BACKUP/CODE111M/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE111M/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE111M/CHANGES.DOC b/BACKUP/CODE111M/CHANGES.DOC new file mode 100644 index 0000000..e0ff2f1 --- /dev/null +++ b/BACKUP/CODE111M/CHANGES.DOC @@ -0,0 +1,20 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/BACKUP/CODE111M/COMBOS.DOC b/BACKUP/CODE111M/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE111M/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE111M/DIAG.ASM b/BACKUP/CODE111M/DIAG.ASM new file mode 100644 index 0000000..1206378 --- /dev/null +++ b/BACKUP/CODE111M/DIAG.ASM @@ -0,0 +1,6027 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >5878 +CKSUM2 .equ >b4e3 +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE111M/DIPSW.EQU b/BACKUP/CODE111M/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE111M/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE111M/DISP.EQU b/BACKUP/CODE111M/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE111M/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE111M/DRONE.ASM b/BACKUP/CODE111M/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE111M/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE111M/GAME.EQU b/BACKUP/CODE111M/GAME.EQU new file mode 100644 index 0000000..483734e --- /dev/null +++ b/BACKUP/CODE111M/GAME.EQU @@ -0,0 +1,794 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +****************************************************************************** + + +;FIX!!!!!!!!!! +;DJT Start +NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit +;DJT End + + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE111M/GSP.EQU b/BACKUP/CODE111M/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE111M/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE111M/HSTD.ASM b/BACKUP/CODE111M/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE111M/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE111M/IMGFIND.CMD b/BACKUP/CODE111M/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE111M/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE111M/LINK.EQU b/BACKUP/CODE111M/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE111M/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE111M/MACROS.HDR b/BACKUP/CODE111M/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE111M/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE111M/MAKE.INI b/BACKUP/CODE111M/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE111M/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE111M/MAKEFILE b/BACKUP/CODE111M/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE111M/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE111M/MAKEPLR.ASM b/BACKUP/CODE111M/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE111M/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE111M/MAKEPLR2.ASM b/BACKUP/CODE111M/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE111M/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE111M/MAKEVDA.BAT b/BACKUP/CODE111M/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE111M/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE111M/MENU.ASM b/BACKUP/CODE111M/MENU.ASM new file mode 100644 index 0000000..349e784 --- /dev/null +++ b/BACKUP/CODE111M/MENU.ASM @@ -0,0 +1,8267 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER + .ref opmsg_main + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0e7ffh,a0 + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +DO_HSRES + MOVI MESS_HSRESET,A8 + MOVI HSSOFT,A9 + MOVI MESS_HSRCONF,A10 + JAUC AREUSURE + +HSSOFT + CALLR RES_ALL + RETP ;PROGRAM TO DO THE JOB! + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +MISC_AUD + .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar + AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN + AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP + AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW + AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW + AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW + AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW + AMAC adiff_s,diff_prt,0,>1212 + .LONG 0 + +adiff_s TXTLINE "GAME DIFFICULTY LEVEL" + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +DOHSLEFT + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;IS IF OFF? + JRZ DOHSOFF ;YEP...PRINT IT + + CALLA GET_HSC ;GET THE COUNTER VALUE + MOVE A0,A3 + jruc NUMBER_WORK ;AND SHOW IT! + +DOHSOFF + MOVI MESS_AUD_NUM,A8 + CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. + + MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! + JAUC RIGHT_FINISH + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +M_HSLEFT + TXTLINE "PLAYS UNTIL H.S. RESET" + +M_HSOFF TXTLINE "OFF" + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +M_LOCKUP + TXTLINE "LOCKUPS" +M_HIDB TXTLINE "GAMES NOT FINISHED" + +M_SECBON + TXTLINE "WARPS" + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +; .LONG opmsg_s,opmsg_main,OPMSG_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# of ENTRIES + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY + .long opmsg_s + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +HSRES_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_RESHS1 + .LONG MEH_RESHS2 + .LONG MEH_RESHS3 + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +MESS_HSRESET +U_HSRESET .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + +MESS_HSRES + .byte "RESET HIGH SCORES" + .BYTE 0 + .EVEN + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +MESS_FAM +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_HSRCONF + .byte "HIGH SCORE TABLE RESET.",0,1 + .EVEN + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 + .byte "TOTAL CARNAGE TEAM:",0,1 + MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 + .byte "MARK TURMELL",0,1 + MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 + .byte "JOHN TOBIAS",0,1 + MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 + .byte "JIM GENTILE",0,1 + MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 + .byte "SHAWN LIPTAK",0,1 + MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 + .byte "JON HEY",0,1 + MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 + .byte "TONY GOSKIE",0,0 + .even + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +MEH_RESHS1 .byte "RESET HIGH SCORE",0 + .EVEN +MEH_RESHS2 .byte "TABLE TO FACTORY",0 + .EVEN +MEH_RESHS3 .byte "DEFAULT VALUES",0 + .EVEN + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE111M/MENU.EQU b/BACKUP/CODE111M/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE111M/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE111M/MPROC.ASM b/BACKUP/CODE111M/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE111M/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE111M/MPROC.EQU b/BACKUP/CODE111M/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE111M/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE111M/NDSP1.ASM b/BACKUP/CODE111M/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE111M/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE111M/PAL.ASM b/BACKUP/CODE111M/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE111M/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE111M/PATCH.ASM b/BACKUP/CODE111M/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE111M/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE111M/PLYR.ASM b/BACKUP/CODE111M/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE111M/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE111M/PLYR.EQU b/BACKUP/CODE111M/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE111M/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE111M/PLYR2.ASM b/BACKUP/CODE111M/PLYR2.ASM new file mode 100644 index 0000000..81e4ff6 --- /dev/null +++ b/BACKUP/CODE111M/PLYR2.ASM @@ -0,0 +1,6132 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 +;DJT Start + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE111M/PLYR3.ASM b/BACKUP/CODE111M/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE111M/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE111M/PLYRAT.ASM b/BACKUP/CODE111M/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE111M/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE111M/PLYRAT2.ASM b/BACKUP/CODE111M/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE111M/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE111M/PLYRAT3.ASM b/BACKUP/CODE111M/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE111M/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE111M/PLYRDSEQ.ASM b/BACKUP/CODE111M/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE111M/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE111M/PLYRDSQ2.ASM b/BACKUP/CODE111M/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE111M/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE111M/PLYRLSEQ.ASM b/BACKUP/CODE111M/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE111M/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE111M/PLYRRSEQ.ASM b/BACKUP/CODE111M/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE111M/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE111M/PLYRSEQ.ASM b/BACKUP/CODE111M/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE111M/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE111M/PLYRSEQ2.ASM b/BACKUP/CODE111M/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE111M/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE111M/PLYRSTND.ASM b/BACKUP/CODE111M/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE111M/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE111M/QUEST.DOC b/BACKUP/CODE111M/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE111M/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE111M/RECORD.ASM b/BACKUP/CODE111M/RECORD.ASM new file mode 100644 index 0000000..bc8c9f8 --- /dev/null +++ b/BACKUP/CODE111M/RECORD.ASM @@ -0,0 +1,5822 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +* 0 = BEST OVERALL PLAYER +* 1 = GRAND CHAMPIONS +* 2 = WORLD RECORDS +* 3 = GREATEST PLAYERS +* 4 = BEST DEFENSIVE PLAYERS +* 5 = BEST OFFENSIVE PLAYERS +* 6 = EXPERIENCED PLAYERS +* 7 = WINNING STREAKS +* 8 = TRIVIA MASTERS +* 7 = MOST POPULAR TEAMS +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits + addi #teampals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +#teampals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop + + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111M/ROBO.ASM b/BACKUP/CODE111M/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE111M/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111M/SCORE.ASM b/BACKUP/CODE111M/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE111M/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE111M/SCORE2.ASM b/BACKUP/CODE111M/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE111M/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE111M/SCREEN.ASM b/BACKUP/CODE111M/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE111M/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111M/SELECT.ASM b/BACKUP/CODE111M/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE111M/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;; cmpi _PHX,a2 +;; jrz #yesd1 +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 + + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +#choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + + move @player3_data+PR_NAME1,a0 + jrgt #cont1 + move @player4_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team1,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;NUM_TEAMS elements +#setnum .word 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1 + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;; cmpi _PHX,a2 +;; jrz #yesd3 +; cmpi _DAL,a2 +; jrz #yesd3 + + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +#choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + + move @player1_data+PR_NAME1,a0 + jrgt #cont2 + move @player2_data+PR_NAME1,a0 + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 + sll 4,a0 + addi #setnum,a0 + move *a0,a0 + + move @team2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE111M/SELECT3.ASM b/BACKUP/CODE111M/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE111M/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE111M/SELECT4.ASM b/BACKUP/CODE111M/SELECT4.ASM new file mode 100644 index 0000000..6edb26d --- /dev/null +++ b/BACKUP/CODE111M/SELECT4.ASM @@ -0,0 +1,6152 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE111M/SOUNDS.ASM b/BACKUP/CODE111M/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE111M/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE111M/SPEECH.ASM b/BACKUP/CODE111M/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE111M/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE111M/STRING.ASM b/BACKUP/CODE111M/STRING.ASM new file mode 100644 index 0000000..c7c809e --- /dev/null +++ b/BACKUP/CODE111M/STRING.ASM @@ -0,0 +1,2086 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE111M/SYS.EQU b/BACKUP/CODE111M/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE111M/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE111M/TEST.ASM b/BACKUP/CODE111M/TEST.ASM new file mode 100644 index 0000000..3508b7d --- /dev/null +++ b/BACKUP/CODE111M/TEST.ASM @@ -0,0 +1,3628 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 + .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC + .ref diag_cursor + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end + diff --git a/BACKUP/CODE111M/TEXT.ASM b/BACKUP/CODE111M/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE111M/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE111M/TODO.ASM b/BACKUP/CODE111M/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE111M/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE111M/TODO.DOC b/BACKUP/CODE111M/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE111M/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE111M/UNZIP.ASM b/BACKUP/CODE111M/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE111M/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE111M/UTIL.ASM b/BACKUP/CODE111M/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE111M/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE111M/WORLD.EQU b/BACKUP/CODE111M/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE111M/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE111M/_MARKER_ b/BACKUP/CODE111M/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE111M/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE112L/ADJUST.ASM b/BACKUP/CODE112L/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE112L/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE112L/ATTRACT.ASM b/BACKUP/CODE112L/ATTRACT.ASM new file mode 100644 index 0000000..cc78edf --- /dev/null +++ b/BACKUP/CODE112L/ATTRACT.ASM @@ -0,0 +1,6594 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + + ;let the sound board reset finish up. + SLEEPK 8 + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE112L/AUDIT.ASM b/BACKUP/CODE112L/AUDIT.ASM new file mode 100644 index 0000000..c65cb39 --- /dev/null +++ b/BACKUP/CODE112L/AUDIT.ASM @@ -0,0 +1,3518 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .ref opmsg_clr + calla opmsg_clr +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start +; .byte "NBA HANGTIME - VER M1.2 8/29/96",0 ;Last 8K CMOS v# + .byte "NBA HANGTIME - VER L1.2 8/29/96",0 ;Last dedicated v# +;DJT End +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112L/AUDIT.EQU b/BACKUP/CODE112L/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE112L/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE112L/BAKGND.ASM b/BACKUP/CODE112L/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE112L/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE112L/BB.ASM b/BACKUP/CODE112L/BB.ASM new file mode 100644 index 0000000..a187df5 --- /dev/null +++ b/BACKUP/CODE112L/BB.ASM @@ -0,0 +1,3443 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE112L/BB.CMD b/BACKUP/CODE112L/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE112L/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE112L/BB2.ASM b/BACKUP/CODE112L/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE112L/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE112L/BB3.ASM b/BACKUP/CODE112L/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE112L/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE112L/BB4.ASM b/BACKUP/CODE112L/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE112L/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE112L/BBC.BAT b/BACKUP/CODE112L/BBC.BAT new file mode 100644 index 0000000..10bc24b --- /dev/null +++ b/BACKUP/CODE112L/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +if .%winbootdir%.==.. ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE112L/BBL.BAT b/BACKUP/CODE112L/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE112L/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE112L/BBSEC.EQU b/BACKUP/CODE112L/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE112L/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE112L/CHANGES.DOC b/BACKUP/CODE112L/CHANGES.DOC new file mode 100644 index 0000000..4b2891e --- /dev/null +++ b/BACKUP/CODE112L/CHANGES.DOC @@ -0,0 +1,59 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file diff --git a/BACKUP/CODE112L/COMBOS.DOC b/BACKUP/CODE112L/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE112L/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE112L/DIAG.ASM b/BACKUP/CODE112L/DIAG.ASM new file mode 100644 index 0000000..b86fe57 --- /dev/null +++ b/BACKUP/CODE112L/DIAG.ASM @@ -0,0 +1,6039 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >9d41 +CKSUM2 .equ >aae6 +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE112L/DIPSW.EQU b/BACKUP/CODE112L/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE112L/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE112L/DISP.EQU b/BACKUP/CODE112L/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE112L/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE112L/DRONE.ASM b/BACKUP/CODE112L/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE112L/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE112L/GAME.EQU b/BACKUP/CODE112L/GAME.EQU new file mode 100644 index 0000000..aba0543 --- /dev/null +++ b/BACKUP/CODE112L/GAME.EQU @@ -0,0 +1,797 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +;NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE112L/GSP.EQU b/BACKUP/CODE112L/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE112L/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE112L/HSTD.ASM b/BACKUP/CODE112L/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE112L/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE112L/IMGFIND.CMD b/BACKUP/CODE112L/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE112L/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE112L/LINK.EQU b/BACKUP/CODE112L/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE112L/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE112L/MACROS.HDR b/BACKUP/CODE112L/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE112L/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE112L/MAKE.INI b/BACKUP/CODE112L/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE112L/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE112L/MAKEFILE b/BACKUP/CODE112L/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE112L/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE112L/MAKEPLR.ASM b/BACKUP/CODE112L/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE112L/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE112L/MAKEPLR2.ASM b/BACKUP/CODE112L/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE112L/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE112L/MAKEVDA.BAT b/BACKUP/CODE112L/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE112L/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE112L/MENU.ASM b/BACKUP/CODE112L/MENU.ASM new file mode 100644 index 0000000..c842bdf --- /dev/null +++ b/BACKUP/CODE112L/MENU.ASM @@ -0,0 +1,8299 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .ref opmsg_main +; .LONG opmsg_s,opmsg_main,OPMSG_HELP +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start +; .WORD 6 ;# of ENTRIES + .WORD 5 ;# of ENTRIES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start +; .long opmsg_s +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE112L/MENU.EQU b/BACKUP/CODE112L/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE112L/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE112L/MPROC.ASM b/BACKUP/CODE112L/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE112L/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE112L/MPROC.EQU b/BACKUP/CODE112L/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE112L/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE112L/NDSP1.ASM b/BACKUP/CODE112L/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE112L/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE112L/PAL.ASM b/BACKUP/CODE112L/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE112L/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE112L/PATCH.ASM b/BACKUP/CODE112L/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE112L/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE112L/PLYR.ASM b/BACKUP/CODE112L/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE112L/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE112L/PLYR.EQU b/BACKUP/CODE112L/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE112L/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE112L/PLYR2.ASM b/BACKUP/CODE112L/PLYR2.ASM new file mode 100644 index 0000000..81e4ff6 --- /dev/null +++ b/BACKUP/CODE112L/PLYR2.ASM @@ -0,0 +1,6132 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 +;DJT Start + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE112L/PLYR3.ASM b/BACKUP/CODE112L/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE112L/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE112L/PLYRAT.ASM b/BACKUP/CODE112L/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE112L/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE112L/PLYRAT2.ASM b/BACKUP/CODE112L/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE112L/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE112L/PLYRAT3.ASM b/BACKUP/CODE112L/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE112L/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE112L/PLYRDSEQ.ASM b/BACKUP/CODE112L/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE112L/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE112L/PLYRDSQ2.ASM b/BACKUP/CODE112L/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE112L/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE112L/PLYRLSEQ.ASM b/BACKUP/CODE112L/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE112L/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE112L/PLYRRSEQ.ASM b/BACKUP/CODE112L/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE112L/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE112L/PLYRSEQ.ASM b/BACKUP/CODE112L/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE112L/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE112L/PLYRSEQ2.ASM b/BACKUP/CODE112L/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE112L/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE112L/PLYRSTND.ASM b/BACKUP/CODE112L/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE112L/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE112L/QUEST.DOC b/BACKUP/CODE112L/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE112L/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE112L/RECORD.ASM b/BACKUP/CODE112L/RECORD.ASM new file mode 100644 index 0000000..84bb22a --- /dev/null +++ b/BACKUP/CODE112L/RECORD.ASM @@ -0,0 +1,5843 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112L/REVUP.DOC b/BACKUP/CODE112L/REVUP.DOC new file mode 100644 index 0000000..4463d1c --- /dev/null +++ b/BACKUP/CODE112L/REVUP.DOC @@ -0,0 +1,19 @@ +9/3/96 + + +Here is the list of the changes from NBA Hangtime version L1.1 to +version L1.2: + + 1) Grand Champion leading-space initials crash bugfix + + 2) Watchdog failure during CPU board SRAM check bugfix + + 3) Watchdog & Process KO auditing bugfix + + 4) Points per Game world record bugfix + + 5) Hi-score decimal followed by a zero display problem bugfix + + 6) "DIPSWITCH TEST SELECT" message corrected + + 7) Ball-to-player detection improved diff --git a/BACKUP/CODE112L/ROBO.ASM b/BACKUP/CODE112L/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE112L/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112L/SCORE.ASM b/BACKUP/CODE112L/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE112L/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE112L/SCORE2.ASM b/BACKUP/CODE112L/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE112L/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE112L/SCREEN.ASM b/BACKUP/CODE112L/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE112L/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112L/SELECT.ASM b/BACKUP/CODE112L/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE112L/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 +;DJT + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +;DJT #choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + +;DJT Start + move @player3_data+PR_NAME1,a14 + jrgt #cont1 + move @player4_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm1set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;DJT Start +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd3 +;DJT + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +;DJT #choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + +;DJT Start + move @player1_data+PR_NAME1,a14 + jrgt #cont2 + move @player2_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm2set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE112L/SELECT3.ASM b/BACKUP/CODE112L/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE112L/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112L/SELECT4.ASM b/BACKUP/CODE112L/SELECT4.ASM new file mode 100644 index 0000000..6edb26d --- /dev/null +++ b/BACKUP/CODE112L/SELECT4.ASM @@ -0,0 +1,6152 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE112L/SOUNDS.ASM b/BACKUP/CODE112L/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE112L/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE112L/SPEECH.ASM b/BACKUP/CODE112L/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE112L/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE112L/STRING.ASM b/BACKUP/CODE112L/STRING.ASM new file mode 100644 index 0000000..c7c809e --- /dev/null +++ b/BACKUP/CODE112L/STRING.ASM @@ -0,0 +1,2086 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112L/SYS.EQU b/BACKUP/CODE112L/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE112L/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE112L/TEST.ASM b/BACKUP/CODE112L/TEST.ASM new file mode 100644 index 0000000..0a85a21 --- /dev/null +++ b/BACKUP/CODE112L/TEST.ASM @@ -0,0 +1,3632 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/CODE112L/TEXT.ASM b/BACKUP/CODE112L/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE112L/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE112L/TODO.ASM b/BACKUP/CODE112L/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE112L/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE112L/TODO.DOC b/BACKUP/CODE112L/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE112L/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE112L/UNZIP.ASM b/BACKUP/CODE112L/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE112L/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE112L/UTIL.ASM b/BACKUP/CODE112L/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE112L/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE112L/WORLD.EQU b/BACKUP/CODE112L/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE112L/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE112L/_MARKER_ b/BACKUP/CODE112L/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE112L/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE112M/ADJUST.ASM b/BACKUP/CODE112M/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE112M/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE112M/ATTRACT.ASM b/BACKUP/CODE112M/ATTRACT.ASM new file mode 100644 index 0000000..cc78edf --- /dev/null +++ b/BACKUP/CODE112M/ATTRACT.ASM @@ -0,0 +1,6594 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + + ;let the sound board reset finish up. + SLEEPK 8 + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE112M/AUDIT.ASM b/BACKUP/CODE112M/AUDIT.ASM new file mode 100644 index 0000000..29bdec2 --- /dev/null +++ b/BACKUP/CODE112M/AUDIT.ASM @@ -0,0 +1,3518 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .ref opmsg_clr + calla opmsg_clr +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start + .byte "NBA HANGTIME - VER M1.2 8/29/96",0 ;Last 8K CMOS v# +; .byte "NBA HANGTIME - VER L1.2 8/29/96",0 ;Last dedicated v# +;DJT End +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112M/AUDIT.EQU b/BACKUP/CODE112M/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE112M/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE112M/BAKGND.ASM b/BACKUP/CODE112M/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE112M/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE112M/BB.ASM b/BACKUP/CODE112M/BB.ASM new file mode 100644 index 0000000..a187df5 --- /dev/null +++ b/BACKUP/CODE112M/BB.ASM @@ -0,0 +1,3443 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE112M/BB.CMD b/BACKUP/CODE112M/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE112M/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE112M/BB2.ASM b/BACKUP/CODE112M/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE112M/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE112M/BB3.ASM b/BACKUP/CODE112M/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE112M/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE112M/BB4.ASM b/BACKUP/CODE112M/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE112M/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE112M/BBC.BAT b/BACKUP/CODE112M/BBC.BAT new file mode 100644 index 0000000..10bc24b --- /dev/null +++ b/BACKUP/CODE112M/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +if .%winbootdir%.==.. ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE112M/BBL.BAT b/BACKUP/CODE112M/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE112M/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE112M/BBSEC.EQU b/BACKUP/CODE112M/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE112M/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE112M/CHANGES.DOC b/BACKUP/CODE112M/CHANGES.DOC new file mode 100644 index 0000000..10014b4 --- /dev/null +++ b/BACKUP/CODE112M/CHANGES.DOC @@ -0,0 +1,99 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.1 -> M1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + 4) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/BACKUP/CODE112M/COMBOS.DOC b/BACKUP/CODE112M/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE112M/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE112M/DIAG.ASM b/BACKUP/CODE112M/DIAG.ASM new file mode 100644 index 0000000..b524e59 --- /dev/null +++ b/BACKUP/CODE112M/DIAG.ASM @@ -0,0 +1,6039 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >c2aa +CKSUM2 .equ >a8fa +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE112M/DIPSW.EQU b/BACKUP/CODE112M/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE112M/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE112M/DISP.EQU b/BACKUP/CODE112M/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE112M/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE112M/DRONE.ASM b/BACKUP/CODE112M/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE112M/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE112M/GAME.EQU b/BACKUP/CODE112M/GAME.EQU new file mode 100644 index 0000000..2336275 --- /dev/null +++ b/BACKUP/CODE112M/GAME.EQU @@ -0,0 +1,797 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE112M/GSP.EQU b/BACKUP/CODE112M/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE112M/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE112M/HSTD.ASM b/BACKUP/CODE112M/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE112M/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE112M/IMGFIND.CMD b/BACKUP/CODE112M/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE112M/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE112M/LINK.EQU b/BACKUP/CODE112M/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE112M/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE112M/MACROS.HDR b/BACKUP/CODE112M/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE112M/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE112M/MAKE.INI b/BACKUP/CODE112M/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE112M/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE112M/MAKEFILE b/BACKUP/CODE112M/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE112M/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE112M/MAKEPLR.ASM b/BACKUP/CODE112M/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE112M/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE112M/MAKEPLR2.ASM b/BACKUP/CODE112M/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE112M/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE112M/MAKEVDA.BAT b/BACKUP/CODE112M/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE112M/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE112M/MENU.ASM b/BACKUP/CODE112M/MENU.ASM new file mode 100644 index 0000000..c842bdf --- /dev/null +++ b/BACKUP/CODE112M/MENU.ASM @@ -0,0 +1,8299 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .ref opmsg_main +; .LONG opmsg_s,opmsg_main,OPMSG_HELP +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start +; .WORD 6 ;# of ENTRIES + .WORD 5 ;# of ENTRIES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start +; .long opmsg_s +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE112M/MENU.EQU b/BACKUP/CODE112M/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE112M/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE112M/MPROC.ASM b/BACKUP/CODE112M/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE112M/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE112M/MPROC.EQU b/BACKUP/CODE112M/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE112M/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE112M/NDSP1.ASM b/BACKUP/CODE112M/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE112M/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE112M/PAL.ASM b/BACKUP/CODE112M/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE112M/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE112M/PATCH.ASM b/BACKUP/CODE112M/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE112M/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE112M/PLYR.ASM b/BACKUP/CODE112M/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE112M/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE112M/PLYR.EQU b/BACKUP/CODE112M/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE112M/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE112M/PLYR2.ASM b/BACKUP/CODE112M/PLYR2.ASM new file mode 100644 index 0000000..81e4ff6 --- /dev/null +++ b/BACKUP/CODE112M/PLYR2.ASM @@ -0,0 +1,6132 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 +;DJT Start + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE112M/PLYR3.ASM b/BACKUP/CODE112M/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE112M/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE112M/PLYRAT.ASM b/BACKUP/CODE112M/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE112M/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE112M/PLYRAT2.ASM b/BACKUP/CODE112M/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE112M/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE112M/PLYRAT3.ASM b/BACKUP/CODE112M/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE112M/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE112M/PLYRDSEQ.ASM b/BACKUP/CODE112M/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE112M/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE112M/PLYRDSQ2.ASM b/BACKUP/CODE112M/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE112M/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE112M/PLYRLSEQ.ASM b/BACKUP/CODE112M/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE112M/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE112M/PLYRRSEQ.ASM b/BACKUP/CODE112M/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE112M/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE112M/PLYRSEQ.ASM b/BACKUP/CODE112M/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE112M/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE112M/PLYRSEQ2.ASM b/BACKUP/CODE112M/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE112M/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE112M/PLYRSTND.ASM b/BACKUP/CODE112M/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE112M/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE112M/QUEST.DOC b/BACKUP/CODE112M/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE112M/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE112M/RECORD.ASM b/BACKUP/CODE112M/RECORD.ASM new file mode 100644 index 0000000..84bb22a --- /dev/null +++ b/BACKUP/CODE112M/RECORD.ASM @@ -0,0 +1,5843 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112M/REVUP.DOC b/BACKUP/CODE112M/REVUP.DOC new file mode 100644 index 0000000..6a5a78b --- /dev/null +++ b/BACKUP/CODE112M/REVUP.DOC @@ -0,0 +1,21 @@ +9/3/96 + + +Here is the list of the changes from NBA Hangtime version L1.1 to +version M1.2: + + 1) Grand Champion leading-space initials crash bugfix + + 2) Watchdog failure during CPU board SRAM check bugfix + + 3) Watchdog & Process KO auditing bugfix + + 4) Points per Game world record bugfix + + 5) Hi-score decimal followed by a zero display problem bugfix + + 6) "DIPSWITCH TEST SELECT" message corrected + + 7) Ball-to-player detection improved + + 8) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/BACKUP/CODE112M/ROBO.ASM b/BACKUP/CODE112M/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE112M/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112M/SCORE.ASM b/BACKUP/CODE112M/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE112M/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE112M/SCORE2.ASM b/BACKUP/CODE112M/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE112M/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE112M/SCREEN.ASM b/BACKUP/CODE112M/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE112M/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112M/SELECT.ASM b/BACKUP/CODE112M/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE112M/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 +;DJT + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +;DJT #choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + +;DJT Start + move @player3_data+PR_NAME1,a14 + jrgt #cont1 + move @player4_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm1set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;DJT Start +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd3 +;DJT + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +;DJT #choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + +;DJT Start + move @player1_data+PR_NAME1,a14 + jrgt #cont2 + move @player2_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm2set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE112M/SELECT3.ASM b/BACKUP/CODE112M/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE112M/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE112M/SELECT4.ASM b/BACKUP/CODE112M/SELECT4.ASM new file mode 100644 index 0000000..6edb26d --- /dev/null +++ b/BACKUP/CODE112M/SELECT4.ASM @@ -0,0 +1,6152 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE112M/SOUNDS.ASM b/BACKUP/CODE112M/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE112M/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE112M/SPEECH.ASM b/BACKUP/CODE112M/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE112M/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE112M/STRING.ASM b/BACKUP/CODE112M/STRING.ASM new file mode 100644 index 0000000..c7c809e --- /dev/null +++ b/BACKUP/CODE112M/STRING.ASM @@ -0,0 +1,2086 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE112M/SYS.EQU b/BACKUP/CODE112M/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE112M/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE112M/TEST.ASM b/BACKUP/CODE112M/TEST.ASM new file mode 100644 index 0000000..0a85a21 --- /dev/null +++ b/BACKUP/CODE112M/TEST.ASM @@ -0,0 +1,3632 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/CODE112M/TEXT.ASM b/BACKUP/CODE112M/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE112M/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE112M/TODO.ASM b/BACKUP/CODE112M/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE112M/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE112M/TODO.DOC b/BACKUP/CODE112M/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE112M/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE112M/UNZIP.ASM b/BACKUP/CODE112M/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE112M/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE112M/UTIL.ASM b/BACKUP/CODE112M/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE112M/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE112M/WORLD.EQU b/BACKUP/CODE112M/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE112M/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE112M/_MARKER_ b/BACKUP/CODE112M/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE112M/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE113L/ADJUST.ASM b/BACKUP/CODE113L/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE113L/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE113L/ATTRACT.ASM b/BACKUP/CODE113L/ATTRACT.ASM new file mode 100644 index 0000000..4f7416d --- /dev/null +++ b/BACKUP/CODE113L/ATTRACT.ASM @@ -0,0 +1,6604 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + +;DJT Start +;BAD!! VERY BAD!! ;let the sound board reset finish up. +;BAD!! VERY BAD!! SLEEPK 8 + + .ref set_game_snd + move @SOUNDSUP,a0 + clr a14 + move a14,@SOUNDSUP + calla set_game_snd + move a0,@SOUNDSUP + +;DJT End + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE113L/AUDIT.ASM b/BACKUP/CODE113L/AUDIT.ASM new file mode 100644 index 0000000..956ddee --- /dev/null +++ b/BACKUP/CODE113L/AUDIT.ASM @@ -0,0 +1,3518 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .ref opmsg_clr + calla opmsg_clr +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start +; .byte "NBA HANGTIME - VER M1.2 8/29/96",0 ;Last 8K CMOS v# + .byte "NBA HANGTIME - VER L1.3 10/10/96",0 ;Last dedicated v# +;DJT End +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113L/AUDIT.EQU b/BACKUP/CODE113L/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE113L/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE113L/BAKGND.ASM b/BACKUP/CODE113L/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE113L/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE113L/BB.ASM b/BACKUP/CODE113L/BB.ASM new file mode 100644 index 0000000..a187df5 --- /dev/null +++ b/BACKUP/CODE113L/BB.ASM @@ -0,0 +1,3443 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE113L/BB.CMD b/BACKUP/CODE113L/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE113L/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE113L/BB2.ASM b/BACKUP/CODE113L/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE113L/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE113L/BB3.ASM b/BACKUP/CODE113L/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE113L/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE113L/BB4.ASM b/BACKUP/CODE113L/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE113L/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE113L/BBC.BAT b/BACKUP/CODE113L/BBC.BAT new file mode 100644 index 0000000..10bc24b --- /dev/null +++ b/BACKUP/CODE113L/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +if .%winbootdir%.==.. ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE113L/BBL.BAT b/BACKUP/CODE113L/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE113L/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE113L/BBSEC.EQU b/BACKUP/CODE113L/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE113L/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE113L/CHANGES.DOC b/BACKUP/CODE113L/CHANGES.DOC new file mode 100644 index 0000000..e27c272 --- /dev/null +++ b/BACKUP/CODE113L/CHANGES.DOC @@ -0,0 +1,70 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.2 -> L1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums diff --git a/BACKUP/CODE113L/COMBOS.DOC b/BACKUP/CODE113L/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE113L/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE113L/DIAG.ASM b/BACKUP/CODE113L/DIAG.ASM new file mode 100644 index 0000000..cd3677c --- /dev/null +++ b/BACKUP/CODE113L/DIAG.ASM @@ -0,0 +1,6039 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >d082 +CKSUM2 .equ >abf3 +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE113L/DIPSW.EQU b/BACKUP/CODE113L/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE113L/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE113L/DISP.EQU b/BACKUP/CODE113L/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE113L/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE113L/DRONE.ASM b/BACKUP/CODE113L/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE113L/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE113L/GAME.EQU b/BACKUP/CODE113L/GAME.EQU new file mode 100644 index 0000000..aba0543 --- /dev/null +++ b/BACKUP/CODE113L/GAME.EQU @@ -0,0 +1,797 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +;NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE113L/GSP.EQU b/BACKUP/CODE113L/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE113L/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE113L/HSTD.ASM b/BACKUP/CODE113L/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE113L/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE113L/IMGFIND.CMD b/BACKUP/CODE113L/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE113L/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE113L/LINK.EQU b/BACKUP/CODE113L/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE113L/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE113L/MACROS.HDR b/BACKUP/CODE113L/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE113L/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE113L/MAKE.INI b/BACKUP/CODE113L/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE113L/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE113L/MAKEFILE b/BACKUP/CODE113L/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE113L/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE113L/MAKEPLR.ASM b/BACKUP/CODE113L/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE113L/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE113L/MAKEPLR2.ASM b/BACKUP/CODE113L/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE113L/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE113L/MAKEVDA.BAT b/BACKUP/CODE113L/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE113L/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE113L/MENU.ASM b/BACKUP/CODE113L/MENU.ASM new file mode 100644 index 0000000..c842bdf --- /dev/null +++ b/BACKUP/CODE113L/MENU.ASM @@ -0,0 +1,8299 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .ref opmsg_main +; .LONG opmsg_s,opmsg_main,OPMSG_HELP +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start +; .WORD 6 ;# of ENTRIES + .WORD 5 ;# of ENTRIES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start +; .long opmsg_s +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE113L/MENU.EQU b/BACKUP/CODE113L/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE113L/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE113L/MPROC.ASM b/BACKUP/CODE113L/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE113L/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE113L/MPROC.EQU b/BACKUP/CODE113L/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE113L/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE113L/NDSP1.ASM b/BACKUP/CODE113L/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE113L/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE113L/PAL.ASM b/BACKUP/CODE113L/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE113L/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE113L/PATCH.ASM b/BACKUP/CODE113L/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE113L/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE113L/PLYR.ASM b/BACKUP/CODE113L/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE113L/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE113L/PLYR.EQU b/BACKUP/CODE113L/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE113L/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE113L/PLYR2.ASM b/BACKUP/CODE113L/PLYR2.ASM new file mode 100644 index 0000000..81e4ff6 --- /dev/null +++ b/BACKUP/CODE113L/PLYR2.ASM @@ -0,0 +1,6132 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 +;DJT Start + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE113L/PLYR3.ASM b/BACKUP/CODE113L/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE113L/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE113L/PLYRAT.ASM b/BACKUP/CODE113L/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE113L/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE113L/PLYRAT2.ASM b/BACKUP/CODE113L/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE113L/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE113L/PLYRAT3.ASM b/BACKUP/CODE113L/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE113L/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE113L/PLYRDSEQ.ASM b/BACKUP/CODE113L/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE113L/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE113L/PLYRDSQ2.ASM b/BACKUP/CODE113L/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE113L/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE113L/PLYRLSEQ.ASM b/BACKUP/CODE113L/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE113L/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE113L/PLYRRSEQ.ASM b/BACKUP/CODE113L/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE113L/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE113L/PLYRSEQ.ASM b/BACKUP/CODE113L/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE113L/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE113L/PLYRSEQ2.ASM b/BACKUP/CODE113L/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE113L/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE113L/PLYRSTND.ASM b/BACKUP/CODE113L/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE113L/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE113L/QUEST.DOC b/BACKUP/CODE113L/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE113L/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE113L/RECORD.ASM b/BACKUP/CODE113L/RECORD.ASM new file mode 100644 index 0000000..84bb22a --- /dev/null +++ b/BACKUP/CODE113L/RECORD.ASM @@ -0,0 +1,5843 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113L/REVUP.DOC b/BACKUP/CODE113L/REVUP.DOC new file mode 100644 index 0000000..55ab555 --- /dev/null +++ b/BACKUP/CODE113L/REVUP.DOC @@ -0,0 +1,12 @@ +10/11/96 + + +Here is the list of the changes from NBA Hangtime version L1.2 to +version L1.3: + + 1) Free full-game on power-up for players 1 & 2 bugfix; + produced if a player pressed a start button within the first + 8 ticks (1/7 second) of entry to Attract mode following power-up + Version screen; then, while still on Credits screen, player + would drop enough to start a game, thereby allowing players 1 & 2 + to press start for a free full-game diff --git a/BACKUP/CODE113L/ROBO.ASM b/BACKUP/CODE113L/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE113L/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113L/SCORE.ASM b/BACKUP/CODE113L/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE113L/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE113L/SCORE2.ASM b/BACKUP/CODE113L/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE113L/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE113L/SCREEN.ASM b/BACKUP/CODE113L/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE113L/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113L/SELECT.ASM b/BACKUP/CODE113L/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE113L/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 +;DJT + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +;DJT #choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + +;DJT Start + move @player3_data+PR_NAME1,a14 + jrgt #cont1 + move @player4_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm1set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;DJT Start +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd3 +;DJT + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +;DJT #choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + +;DJT Start + move @player1_data+PR_NAME1,a14 + jrgt #cont2 + move @player2_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm2set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE113L/SELECT3.ASM b/BACKUP/CODE113L/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE113L/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113L/SELECT4.ASM b/BACKUP/CODE113L/SELECT4.ASM new file mode 100644 index 0000000..6edb26d --- /dev/null +++ b/BACKUP/CODE113L/SELECT4.ASM @@ -0,0 +1,6152 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE113L/SOUNDS.ASM b/BACKUP/CODE113L/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE113L/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE113L/SPEECH.ASM b/BACKUP/CODE113L/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE113L/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE113L/STRING.ASM b/BACKUP/CODE113L/STRING.ASM new file mode 100644 index 0000000..c7c809e --- /dev/null +++ b/BACKUP/CODE113L/STRING.ASM @@ -0,0 +1,2086 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113L/SYS.EQU b/BACKUP/CODE113L/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE113L/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE113L/TEST.ASM b/BACKUP/CODE113L/TEST.ASM new file mode 100644 index 0000000..0a85a21 --- /dev/null +++ b/BACKUP/CODE113L/TEST.ASM @@ -0,0 +1,3632 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/CODE113L/TEXT.ASM b/BACKUP/CODE113L/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE113L/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE113L/TODO.ASM b/BACKUP/CODE113L/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE113L/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE113L/TODO.DOC b/BACKUP/CODE113L/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE113L/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE113L/UNZIP.ASM b/BACKUP/CODE113L/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE113L/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE113L/UTIL.ASM b/BACKUP/CODE113L/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE113L/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE113L/WORLD.EQU b/BACKUP/CODE113L/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE113L/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE113L/_MARKER_ b/BACKUP/CODE113L/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE113L/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/CODE113M/ADJUST.ASM b/BACKUP/CODE113M/ADJUST.ASM new file mode 100644 index 0000000..9f6a683 --- /dev/null +++ b/BACKUP/CODE113M/ADJUST.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +MH_0 .STRING "CUSTOMISE THE INTERNAL" + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +LIST_TRIVIA + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/CODE113M/ATTRACT.ASM b/BACKUP/CODE113M/ATTRACT.ASM new file mode 100644 index 0000000..4f7416d --- /dev/null +++ b/BACKUP/CODE113M/ATTRACT.ASM @@ -0,0 +1,6604 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd + .ref QSNDRST + + .ref show_prizes + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads + .ref FRANIMQ + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC + .ref anim_script,anim_killall + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop + .ref set_volume_for_amode + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen + .ref trivia_game + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire + .ref BASTC_W_P + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref logos,name_sort,player_heads2 + .ref plyr_names_img_tbl,BALLBAK1 + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + + +; .bss cycram ,8*2*16 ;Palette cycle mem +; +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + + .bss loop ,16 ;Cntr for when to show design team + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + +;DJT Start +;BAD!! VERY BAD!! ;let the sound board reset finish up. +;BAD!! VERY BAD!! SLEEPK 8 + + .ref set_game_snd + move @SOUNDSUP,a0 + clr a14 + move a14,@SOUNDSUP + calla set_game_snd + move a0,@SOUNDSUP + +;DJT End + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp + +;; JSRP show_designteam + +;; .ref grand_champs_screen +;; JSRP grand_champs_screen + + JSRP show_title +; .ref show_trophy +; JSRP show_trophy +; calla set_volume_for_amode + JSRP show_hiscore +;TEMP!!! + +; JSRP show_operatormsg + JSRP new_page + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + + JSRP show_prizes +;;;; JSRP drw_stars + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + + JSRP result_screen + JSRP new_page + JSRP show_title + JSRP show_copyright + JSRP creditscreen +; JSRP show_operatormsg + JSRP demogame + SOUND1 tuneend_snd + JSRP show_nba_plyrs + +;;;; JSRP drw_chicks +;;;; JSRP drw_ladder + + move @loop,a0 + inc a0 + move a0,@loop + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + move @loop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + jruc #lp + + + .def pObj + .bss pObj,32 + + + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + +;TEMP + movi CYCPID,a0 + calla KIL1C + SLEEP 40 + + calla WIPEOUT + RETP + +title_scr_mod + .long hangtimeBMOD + .word 0,0 + .long 0 + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! + .if 0 + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX + .endif + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",0 + .even + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + movk 1,a0 + calla create_title_bar + + movi #design_tm_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #addition_desgn_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + +; clr a0 +; move a0,@DISPLAYON +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movk 1,a0 +; calla create_title_bar +; +; movi #addition_desgn_str_setup,a2,L +; calla setup_message +; movi #addition_desgn_str,a4 +; calla print_string_C2 +; +; movi #addition_desgn_str_setup2,a2,L +; calla setup_message +; movk 22,a0 +; move a0,@mess_line_spacing +; movi #snd_dudes_str,a4 +; calla print_string_C2 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; movi TSEC*4,a10 +; JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #snd_desgn_str_setup,a2,L + calla setup_message + movi #snd_desgn_str2,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movk 17,a0 + move a0,@mess_line_spacing + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #actors_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #hardware_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movi #hardware_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #nba_help_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3,a10 + JSRP time_delay ;SLEEP 30 + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #gme_tsters_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movk 22,a0 + move a0,@mess_line_spacing + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #thanks_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movi #thanks_str_setup2,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6,a10 + JSRP time_delay ;SLEEP 30 + + + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #exec_producers_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movk 25,a0 + move a0,@mess_line_spacing + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4,a10 + JSRP time_delay ;SLEEP 30 + + clr a0 + movi -1,a1 + calla obj_delc + +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc +; +;; movi #thanx5_t,a8 +;; JSRP prt_dt +; +; movi TSEC*2+50,a10 +; JSRP time_delay ;SLEEP 30 +; +; clr a0 +; movi -1,a1 +; calla obj_delc + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +;Temp +; movi #thanx6_t,a8 +; JSRP prt_dt2 + +; movi TSEC*5,a10 +; JSRP time_delay ;SLEEP 30 + +;#sclout +; JSRP scrn_scaleout + +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@dpageflip +; move a0,@DISPLAYON +; +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 +; +; SLEEPK 2 +; +; calla display_unblank + +#sclout + RETP + + + +#design_tm_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#design_tm_str + .string "DESIGN TEAM:",0 + .even + + +#actors_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#actors_str + .string "ACTORS:",0 + .even + + +#thanks_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#thanks_str + .string "SPECIAL THANKS:",0 + .even + +#hardware_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + .even + + +#exec_producers_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + .even + + +#addition_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + .even + + +#snd_desgn_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#snd_desgn_str + .string "SOUND AND MUSIC:",0 + .even + +#snd_desgn_str2 + .string "MUSIC:",0 + .even + + +#gme_tsters_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#gme_tester_str + .string "GAME TESTERS:",0 + .even + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + .even + + +#nba_help_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#nba_help_str + .string "NBA SUPPORT:",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 + .even + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + .even + + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + .even + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + .even + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + .even + +#gme_tstrs_str2 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 + .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + .even + + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + .even + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + .even + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + .even + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + .even + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + .even + +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +; movk 12,a0 ;Team # + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +; movk 4,a0 ;Team # + move a0,@team2 ;Team controlled by plyrs 3 & 4 + + clr a0 + move @otdloop,a14 + addk 1,a14 + cmpi 100,a14 ;!!! + jrlo #otd + clr a14 + movk 1,a0 +#otd + move a14,@otdloop + move a0,@pup_court + move a0,@pup_aba + + SOUND1 tuneend_snd + + movk 1,a0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO + MOVE A0,A0 + JRNZ NONO1 + CLR A0 + MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .long #str_h8 + .long #str_h8a + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "150 NBA",0 +#str_h0a + .string "PLAYERS",0 + +#str_h1 + .string "CREATE",0 +#str_h1a + .string "PLAYER",0 + +#str_h2 + .string "ALLEY",0 +#str_h2a + .string "OOPS",0 + +#str_h3 + .string "DOUBLE",0 +#str_h3a + .string "DUNKS",0 + +#str_h4 + .string "ROOF TOP",0 +#str_h4a + .string "COURT",0 + +#str_h5 + .string "SPIN",0 +#str_h5a + .string "MOVES",0 + +#str_h6 + .string "DIGITAL",0 +#str_h6a + .string "SOUND",0 + +#str_h7 + .string "M DOC",0 +#str_h7a + .string "RAPS",0 + +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + +#str_h9 + .string "MEGA",0 +#str_h9a + .string "SECRETS",0 + +#str_h10 + .string "AND",0 +#str_h10a + .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBRP flash_bigtxt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + + 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 + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD1_X + .asg 65,HD2_X + .asg 140,HD3_X + .asg 215,HD4_X + .asg 290,HD5_X + .asg 190,HDS_Y + +#***************************************************************************** +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 132,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + clr a0 + move a0,@tmloop + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;print city name and team name +#lp + move @tmnbr,a8 + cmpi NUM_TEAMS-1,a8 + jrle #vok + clr a0 + move a0,@tmnbr +#vok + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movk OBJID,a5 + movi [LOGO_X,0],a0,L ;X + movi [LOGO_Y,0],a1,L ;Y + movi 1901,a3 ;z pos + calla BEGINOBJ2 + +;head 1 + movi [HD1_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + calla BEGINOBJ2 + + move @tmnbr,a11 + movi 5*32,a0 + mpyu a0,a11 + addi player_heads2,a11,L + move *a11+,a2,L + + movi [HD1_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + clr a1 + callr create_plr_name + + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + + movi TSEC-20,a8 +#lp1 SLEEPK 1 +; calla get_all_buttons_cur2 +; jrnz #mksnd + dsj a8,#lp1 + + movk NAME_ID,a0 + calla obj_del1c + +;head 2 + movi [HD2_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD2_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 1,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp2 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp2 + + movk NAME_ID,a0 + calla obj_del1c + +;head 3 + movi [HD3_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD3_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 2,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp3 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp3 + + movk NAME_ID,a0 + calla obj_del1c + +;head 4 + movi [HD4_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD4_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 3,a1 + callr create_plr_name + + movi TSEC-20,a8 +#lp4 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp4 + + movk NAME_ID,a0 + calla obj_del1c + +;head 5 + movi [HD5_X,0],a0,L ;X + movi [HDS_Y,0],a1,L ;Y + movi 1900,a3 ;z pos + movi MUGPLAT,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movk OBJID,a5 + calla BEGINOBJ2 + + movi [HD5_X+26,0],a0,L ;X + movi [HDS_Y+10,0],a1,L ;Y + move *a11+,a2,L + movi 2000,a3 ;z pos + calla BEGINOBJ2 + + movk 4,a1 + callr create_plr_name + + movi TSEC-10,a8 +#lp5 SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #mksnd + dsj a8,#lp5 + + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk NAME_ID,a0 + calla obj_del1c + + movk OBJID,a0 + calla obj_del1c + + move @tmnbr,a0 + inc a0 + move a0,@tmnbr + cmpi NUM_TEAMS-1,a0 + jrle #nxt + clr a0 + move a0,@tmnbr +#nxt + move @tmloop,a0 + inc a0 + move a0,@tmloop + subk 4,a0 + jrlt #lp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 + + movk OBJID,a0 + calla obj_del1c + movk NAME_ID,a0 + calla obj_del1c + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "ST",1,-4,"ARRING:",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + +****************************************************************************** +****************************************************************************** + SUBRP create_plr_name + + move @tmnbr,a0 + sll 7,a0 + move @tmnbr,a10 + sll 5,a10 + add a0,a10 + addi plyr_names_img_tbl,a10 + sll 5,a1 ;goto player name + add a1,a10 + move *a10,a2,L + + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 + + movi [222,0],a1,L ;Y + movk NAME_ID,a5 + calla BEGINOBJ2 + rets + + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/CODE113M/AUDIT.ASM b/BACKUP/CODE113M/AUDIT.ASM new file mode 100644 index 0000000..a02169d --- /dev/null +++ b/BACKUP/CODE113M/AUDIT.ASM @@ -0,0 +1,3518 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + + callr getcoin + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + callr getcoin + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .ref opmsg_clr + calla opmsg_clr +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start + .byte "NBA HANGTIME - VER M1.3 10/10/96",0 ;Last 8K CMOS v# +; .byte "NBA HANGTIME - VER L1.2 8/29/96",0 ;Last dedicated v# +;DJT End +; .byte "NBA HANGTIME - VER L1.0 4/9/96",0 + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +; SOUND1 coin_snd + movi coin_snd,a0 + jauc snd_play1 + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113M/AUDIT.EQU b/BACKUP/CODE113M/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/CODE113M/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/CODE113M/BAKGND.ASM b/BACKUP/CODE113M/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/CODE113M/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/CODE113M/BB.ASM b/BACKUP/CODE113M/BB.ASM new file mode 100644 index 0000000..a187df5 --- /dev/null +++ b/BACKUP/CODE113M/BB.ASM @@ -0,0 +1,3443 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP + .ref QSNDRST + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H + .ref original_names +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT + .ref FLASHME,RD7FONT + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST + .ref FRANIM,FRANIMQ + .ref OBJOFF,OBJON,pal_getf + .ref GETCPNT,BGND_UD1 + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased + .ref security_chk + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 + BSSX names ,32*NUMPLYRS ;pntrs to player imgs + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + + + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + + + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + movk ININTRO,a0 + move a0,@GAMSTATE + + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay + .ref ballnumscored,balltmshotcnt + move a0,@ballnumscored + move a0,@balltmshotcnt + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names + + move @names,a0,L + move a0,@original_names,L + move @names+32,a0,L + move a0,@original_names+32,L + move @names+64,a0,L + move a0,@original_names+64,L + move @names+96,a0,L + move a0,@original_names+96,L + + + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + + SLEEP 35 + SOUND1 heres_tip_sp + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + + movi player1_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag1a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag1lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag1a + dsj a14,#tag1lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P1DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag1a + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + + movi player2_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag2a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag2a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag2lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag2a + dsj a14,#tag2lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P2DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag2a + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + + movi player3_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag3a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag3a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag3lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag3a + dsj a14,#tag3lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P3DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag3a + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + + movi player4_data,a0,L + move *a0(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrnz #tag4a + addi PR_NAME1,a0 ;Yes. Chk validity of name + move *a0,a1 + jrle #tag4a ;Assume no name if first=0 + movk NAME_LETTERS,a14 +#tag4lp + move *a0+,a1 + cmpi END_CHAR,a1,W ;In range? No if > + jrhi #tag4a + dsj a14,#tag4lp + + subi NAME_LETTERS*16,a0 ;Reset ptr + move @P4DATA+ply_meter_imgs,a1,L ;Put created *name in ODATA_p + move a0,*a1(ODATA_p),L ; of plyr name obj + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X + move *a1(OFLAGS),a14 ;Set obj type + addi M_CHARGEN,a14,W + move a14,*a1(OFLAGS) +#tag4a + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + +;#dog + move @special_heads,a14 + jrn #not_spec1 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + + + move @special_heads+10h,a14 + jrn #not_spec2 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + + +;Team 2 + movi player_names,a10 + move @team2,a2 +#lp2 cmpi 0,a2 + jrz #out2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;; 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 *a10,a1,L ;image addr + move *a10(20h),a2,L ;image addr + + move @special_heads+20h,a14 + jrn #not_spec3 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + + + move @special_heads+30h,a14 + jrn #not_spec4 + sll 5,a14 ;x 32 bits + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + + rets + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/CODE113M/BB.CMD b/BACKUP/CODE113M/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/CODE113M/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/CODE113M/BB2.ASM b/BACKUP/CODE113M/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/CODE113M/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/CODE113M/BB3.ASM b/BACKUP/CODE113M/BB3.ASM new file mode 100644 index 0000000..ecead9b --- /dev/null +++ b/BACKUP/CODE113M/BB3.ASM @@ -0,0 +1,3398 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + + move @P1CTRL,a0 + xor a0,a8 + sll 32-8,a8 + jrz #no1 + move a0,a8 + sll 32-8,a8 + srl 32-8,a8 +#no1 + move a8,*A13(STKREL_P1) + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-8,a9 + jrz #no2 + move a0,a9 + sll 32-8,a9 + srl 32-8,a9 +#no2 + move a9,*A13(STKREL_P2) + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-8,a10 + jrz #no3 + move a0,a10 + sll 32-8,a10 + srl 32-8,a10 +#no3 + move a10,*A13(STKREL_P3) + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-8,a11 + jrz #no4 + move a0,a11 + sll 32-8,a11 + srl 32-8,a11 +#no4 + move a11,*A13(STKREL_P4) + move a0,a11 + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +; andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + + sll 5,a9 + addi lock_cmbo_snds,a9 + move *a9,a0,L + calla snd_play1 +; LOCKUP + DIE + + .ref combo_lock1,combo_lock2,combo_lock3,combo_lock4 +lock_cmbo_snds + .long combo_lock1 + .long combo_lock2 + .long combo_lock3 + .long combo_lock4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + + CREATE0 flash_backdrop + + jruc pupsnd + +flash_backdrop + .ref lock_ram + move a9,a0 + sll 5,a0 + addi lock_ram,a0 + move *a0,a8,L + + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 2,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + SLEEPK 1 + dsj a9,#tg0 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + + DIE + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + + CREATE0 flash_backdrop + + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + + WAITSWITCH_DWN JOY_UP,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + + +;a9=0-3 for player + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupsnd + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN BUT_PASS,0,#lp +; WAITSWITCH_DWN BUT_PASS,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,0,#lp + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN BUT_TURBO,0,#lp + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_RIGHT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_RIGHT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + + CREATE0 flash_backdrop + jruc pupsnd + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_court + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_LEFT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + WAITSWITCH_DWN JOY_LEFT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; WAITSWITCH_DWN JOY_LEFT|BUT_TURBO,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_court + + CREATE0 flash_backdrop + +pupsnd + sll 5,a9 + addi pwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + DIE + +pwrup_snds + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .long chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 80 + +sp_special + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp +; WAITSWITCH_DWN BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_RIGHT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_DOWN_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP_LEFT|BUT_SHOOT,0,#lp + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,0,#lp + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + move a0,@pup_court + + sll a9,a0 + + move @pup_showshotper,a1 + jrnz nossp + move a0,@pup_showshotper +nossp + move @pup_bighead,a1 + or a0,a1 + move a1,@pup_bighead + move @pup_hugehead,a1 + andn a0,a1 + move a1,@pup_hugehead + + sll 5,a9 + addi spcpwrup_snds,a9 + move *a9,a0,L + calla snd_play1 + + CREATE0 flash_backdrop + + DIE + +spcpwrup_snds + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + + .end diff --git a/BACKUP/CODE113M/BB4.ASM b/BACKUP/CODE113M/BB4.ASM new file mode 100644 index 0000000..6dcc891 --- /dev/null +++ b/BACKUP/CODE113M/BB4.ASM @@ -0,0 +1,37 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.tbl" + .include "plyrhd.glo" + .include "plyrseq3.tbl" + .include "plyrseq3.glo" + .include "imgtblp.glo" + .include "imgpalp.asm" + + .include "imgtbl1.glo" + .include "imgpal1.asm" + + .end + + diff --git a/BACKUP/CODE113M/BBC.BAT b/BACKUP/CODE113M/BBC.BAT new file mode 100644 index 0000000..10bc24b --- /dev/null +++ b/BACKUP/CODE113M/BBC.BAT @@ -0,0 +1,36 @@ +@echo off +set ~bbcp=attrib123 + +if .%1.==./d. set ~bbcp=del +if .%1.==./D. set ~bbcp=del +if .%1.==.-d. set ~bbcp=del +if .%1.==.-D. set ~bbcp=del + +if .%~bbcp%.==.attrib123. goto PROC +if .%~bbcp%.==.del. goto PROC + +echo ERROR -- insufficient DOS environment space +echo. +goto EXIT + + +:PROC +if .%~bbcp%.==.attrib123. set ~bbcp=attrib -a + +if exist c:\video\bball\imgpal*.asm %~bbcp% c:\video\bball\imgpal*.asm +if exist c:\video\bball\imgtbl*.asm %~bbcp% c:\video\bball\imgtbl*.asm +if exist c:\video\bball\bgnd*.asm %~bbcp% c:\video\bball\bgnd*.asm +if exist c:\video\bball\*.h %~bbcp% c:\video\bball\*.h +if exist c:\video\bball\*.obj %~bbcp% c:\video\bball\*.obj +if exist c:\video\bball\*.lst %~bbcp% c:\video\bball\*.lst +if exist c:\video\bball\*.glo %~bbcp% c:\video\bball\*.glo +if exist c:\video\bball\*.tbl %~bbcp% c:\video\bball\*.tbl + + +:EXIT +if exist c:\video\bball\mc*. del c:\video\bball\mc*. +if exist c:\video\bball\*.axx del c:\video\bball\*.axx + +if .%winbootdir%.==.. ds en c:\video\bball + +set ~bbcp= diff --git a/BACKUP/CODE113M/BBL.BAT b/BACKUP/CODE113M/BBL.BAT new file mode 100644 index 0000000..3171f85 --- /dev/null +++ b/BACKUP/CODE113M/BBL.BAT @@ -0,0 +1,283 @@ +@echo off +set ~bblall=0 +set ~bblopx=/x + +REM Check that environment can handle enough locked flags + +set ~bbl=1234567890M +if not "%~bbl%"=="1234567890M" goto ENVERR + +REM Check command-line parms + +if "%1"=="" goto CHKLOCK +if "%1"=="/x" goto CHKLOCK +if "%1"=="/X" goto CHKLOCK +if "%1"=="-x" goto CHKLOCK +if "%1"=="-X" goto CHKLOCK + +echo ERROR -- unknown option "%1". Valid options: +echo. +echo /X disable .LOD build-time download to GSP; no effect +echo when doing .IRW load only; case insensative +goto EXIT + +REM Check locked status of LOD files + +:CHKLOCK +set ~bbl= +c: +cd \video\bball\img + +type BB.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/CODE113M/BBSEC.EQU b/BACKUP/CODE113M/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/CODE113M/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/CODE113M/CHANGES.DOC b/BACKUP/CODE113M/CHANGES.DOC new file mode 100644 index 0000000..f3bcd69 --- /dev/null +++ b/BACKUP/CODE113M/CHANGES.DOC @@ -0,0 +1,121 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.1 -> M1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + 4) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.2 -> L1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums + +M1.2 -> M1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums diff --git a/BACKUP/CODE113M/COMBOS.DOC b/BACKUP/CODE113M/COMBOS.DOC new file mode 100644 index 0000000..12004bf --- /dev/null +++ b/BACKUP/CODE113M/COMBOS.DOC @@ -0,0 +1,54 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/CODE113M/DIAG.ASM b/BACKUP/CODE113M/DIAG.ASM new file mode 100644 index 0000000..dc1584b --- /dev/null +++ b/BACKUP/CODE113M/DIAG.ASM @@ -0,0 +1,6039 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >f5eb +CKSUM2 .equ >aa07 +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/CODE113M/DIPSW.EQU b/BACKUP/CODE113M/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/CODE113M/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/CODE113M/DISP.EQU b/BACKUP/CODE113M/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/CODE113M/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/CODE113M/DRONE.ASM b/BACKUP/CODE113M/DRONE.ASM new file mode 100644 index 0000000..6533581 --- /dev/null +++ b/BACKUP/CODE113M/DRONE.ASM @@ -0,0 +1,2369 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/CODE113M/GAME.EQU b/BACKUP/CODE113M/GAME.EQU new file mode 100644 index 0000000..2336275 --- /dev/null +++ b/BACKUP/CODE113M/GAME.EQU @@ -0,0 +1,797 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 +DEFAULT_HIT_PTS equ 40 +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/CODE113M/GSP.EQU b/BACKUP/CODE113M/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/CODE113M/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/CODE113M/HSTD.ASM b/BACKUP/CODE113M/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/CODE113M/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/CODE113M/IMGFIND.CMD b/BACKUP/CODE113M/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/CODE113M/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/CODE113M/LINK.EQU b/BACKUP/CODE113M/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/CODE113M/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/CODE113M/MACROS.HDR b/BACKUP/CODE113M/MACROS.HDR new file mode 100644 index 0000000..2670e36 --- /dev/null +++ b/BACKUP/CODE113M/MACROS.HDR @@ -0,0 +1,764 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend + MOVE @ROLLING_COUNT,A1 + INC A1 + MOVE A1,@ROLLING_COUNT + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/CODE113M/MAKE.INI b/BACKUP/CODE113M/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/CODE113M/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/CODE113M/MAKEFILE b/BACKUP/CODE113M/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/CODE113M/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/CODE113M/MAKEPLR.ASM b/BACKUP/CODE113M/MAKEPLR.ASM new file mode 100644 index 0000000..c6f99a5 --- /dev/null +++ b/BACKUP/CODE113M/MAKEPLR.ASM @@ -0,0 +1,3419 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P + .ref diag_cursor + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + movk 6,a0 + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 + cmpi 60,a1 + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal + SOUND1 diag_cursor + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_cur + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC + calla get_but_val_cur + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + calla get_player_record + + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 + calla get_stick_val_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/CODE113M/MAKEPLR2.ASM b/BACKUP/CODE113M/MAKEPLR2.ASM new file mode 100644 index 0000000..dde50f9 --- /dev/null +++ b/BACKUP/CODE113M/MAKEPLR2.ASM @@ -0,0 +1,2967 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne cnl_1a ;not in CREATE PLAYER + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/CODE113M/MAKEVDA.BAT b/BACKUP/CODE113M/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/CODE113M/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/CODE113M/MENU.ASM b/BACKUP/CODE113M/MENU.ASM new file mode 100644 index 0000000..c842bdf --- /dev/null +++ b/BACKUP/CODE113M/MENU.ASM @@ -0,0 +1,8299 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM + .ref snd_reset, QSNDRST + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 + .ref set_volume_amode_diag +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .ref opmsg_main +; .LONG opmsg_s,opmsg_main,OPMSG_HELP +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start +; .WORD 6 ;# of ENTRIES + .WORD 5 ;# of ENTRIES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start +; .long opmsg_s +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/CODE113M/MENU.EQU b/BACKUP/CODE113M/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/CODE113M/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/CODE113M/MPROC.ASM b/BACKUP/CODE113M/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/CODE113M/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/CODE113M/MPROC.EQU b/BACKUP/CODE113M/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/CODE113M/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/CODE113M/NDSP1.ASM b/BACKUP/CODE113M/NDSP1.ASM new file mode 100644 index 0000000..9d990d1 --- /dev/null +++ b/BACKUP/CODE113M/NDSP1.ASM @@ -0,0 +1,3891 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img + + SUBR char_gen + + move *a0(ODATA_p),a1,L ;Get *plyrname + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + dsj b0,#lp +#done + neg b0 ;Redo cnt to get # of chars + addk NAME_LETTERS,b0 + jrz dma_objlst ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + + .if 0 +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/CODE113M/PAL.ASM b/BACKUP/CODE113M/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/CODE113M/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/CODE113M/PATCH.ASM b/BACKUP/CODE113M/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/CODE113M/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/CODE113M/PLYR.ASM b/BACKUP/CODE113M/PLYR.ASM new file mode 100644 index 0000000..6373a9d --- /dev/null +++ b/BACKUP/CODE113M/PLYR.ASM @@ -0,0 +1,12138 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + + move a0,@pup_showhotspots + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal + move a0,@pup_strongmen ;Grand champion playing flag + + movk 1,a2 + movk 1,a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + movk 2,a3 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrz #easy0 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 +; cmpi >7ffffff,a0 + jrnz #nea + + +#easy0 move a3,@pup_strongmen ;Grand champion playing flag +; jruc #easy + + +#nea + + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) + move *a7(PAT_SKILL),a0 ;drone skill +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 ;is plyr human or drone? + btst a11,a1 + jrnz #hmn + + movk 1,a14 ;Drone + xor a11,a14 + btst a14,a1 + jrz #tdrn ;Teammate is a drone? +#hmn +; movk 2,a14 ;Human +; xor a11,a14 +; sll 5,a14 ;*32 +; addi plyrproc_t,a14 +; move *a14,a14,L + clr a0 + jruc #setskl +#tdrn + movk 2,a14 ;We are drones + xor a11,a14 + btst a14,a1 ;Human opponent? + jrnz #humop + movk 1,a2 ;at least one isn't + xor a2,a14 + btst a14,a1 ;All drones? yes if 0 + jrz #setskl +#humop + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + movk 6,a2 + move *a14(PR_COUNT),a1 ;- if no entry + jrn #wimp + move *a14(PR_NUMDEF),a2 ;# teams defeated + +;If a player is real good, almost all teams beaten, give hime +;the in the zone spch call at game start + subk 5,a2 + jrlt #few + + PUSH a0,a1,a14 + .ref thr_zone_sp + movi thr_zone_sp,a0 + calla snd_play1 + PULL a0,a1,a14 + +;Old tougher drones flag +; move a2,@drone2on + +#few + movk 4,a2 ;3 + subk 4,a1 + jrle #wimp ;1st couple of games? + movk 1,a2 +#wimp + sub a2,a0 + move *a14(PR_WINSTREAK),a1 ;Won last game? yes if !0 + jrnz #setskl + subk 4,a0 ;lower skill for 1st timers (no wins) +#setskl + move a0,*a13(plyr_d_skill) + +;---------- +; check for conflicting team pals +; +; dont check for conflicting pals when a created palyer +; + move a11,a14 ;player number + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_CREATED_PLYR),a3 + jrle #t1a ;br=not a created player + move *a14(PR_UNIFORM_NBR),a3 + btst 6,a3 + jrnz #altc ;br=home team pal. + jruc #keepc +#t1a + movi team1,a14 + move *a14+,a3 ;get team #'s & determine which one + move *a14,a4 ; we are now + btst 1,a11 + jrz #t1 + SWAP a3,a4 +#t1 sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + btst 1,a11 + jrnz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build plyr palette + + move a11,a2 + sll 8+4,a2 + addi plyrpals_t,a2 + PUSH a2 + +; movi 255,a0 + movi 128,a0 + move a0,*a2+ ;Set # colors + + .ref SHT11 ;MK SPECIAL FLAG + move *a7(PAT_SHOTSKILL),a1 ;Check for special pals + cmpi SHT11,a1 + jrne #reg ;Stay with defined pals if != + move a7,a6 +#reg + + move *a7(PAT_PALF_p),a1,L ;Copy flesh +; .ref NFL55_p +; movi NFL55_p,a1 + + move *a1+,a0 +; addk 16,a1 +; subk 1,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + + move *a6(PAT_PALT_p),a1,L ;Copy trim +; .ref TR2_p +; movi TR2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + + move *a6(PAT_PALSW_p),a1,L ;Copy trim +; .ref SW2_p +; movi SW2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + + move *a6(PAT_PALVP_p),a1,L ;Copy trim +; .ref VP2_p +; movi VP2_p,a1 + + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + +; +;;Use this color to flash player white +; movi 31<<10+31<<5+31,a0 ;White +; move a0,*a2+ +; +;;Use this color to flash player black +; clr a0 ;Black +; move a0,*a2+ + + PULL a0 + calla pal_getf + move a0,*a8(OPAL) + +;---------- +; Get head + + PUSH a8 ;save plyr *obj + + clr a0 + clr a1 + move *a7(PAT_HEADT_p),a2,L + addi 5*32,a2 ;POINT at 6th head (straight ahead) + move *a2,a2,L + + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;If Rodman, change hair color according to player choice! + move *a13(plyr_num),a14 + srl 1,a14 + move *a8(OIMG),a2,L + move *a2(ICMAP),a0,L ;Get *palette + .ref check_rodman2 + calla check_rodman2 + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + + move a8,*a13(plyr_headobj_p),L + +;---------- +; setup head size + + movi scalebighead_t,a0,L ;assume big + move *a13(plyr_num),a1 + + move @pup_bighead,a2 + btst a1,a2 + jrnz #chkhd + + move a1,a3 ;plyr # to chk + movk 2,a2 ;privilege bit to chk + move @PSTATUS,a14 + btst a1,a14 + jrnz #ndrnh ;br=human + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_num),a3 ;plyr # to chk + movk 4,a2 ;privilege bit to chk +#ndrnh + sll 5,a3 + addi player_data,a3,L + move *a3,a3,L + move *a3(PR_PRIVILEGES),a3 + jrle #reghd ; br=not a created player + btst a2,a3 ;BIG HEAD privilege? + jrnz #sethd ; br=yes +#reghd + movi scalehead_t,a0,L ;set default *scale_t +#chkhd + move @pup_hugehead,a2 + btst a1,a2 + jrz #sethd + movi scalehugehead_t,a0,L ;really big! +#sethd + move a0,*a8(ODATA_p),L + + move *a13(plyr_num),a1 + sll 5,a1 + addi player_data,a1,L + move *a1,a1,L + move *a1(PR_PRIVILEGES),a1 + jrle #nsmrt ; br=not a created player + btst 6,a1 ;smarter drone ? + jrz #nsmrt ;br=no + + move @dronesmrt,a0 + move *a13(plyr_num),a1 + movk 1,a14 + xor a14,a1 + movk 1,a14 + sll a1,a14 + or a14,a0 + move a0,@dronesmrt +#nsmrt + + +;---------- +; Get shadow + + clr a0 + clr a1 + movi shadow1,a2 + move *a8(OZPOS),a3 + subi 50,a3 ;stupid K!!! + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + calla BEGINOBJ2 + move a8,*a13(plyr_shadobj_p),L + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + PULL a8 ;retrieve plyr *obj + +; .if DEBUG +; callr plyr_getgndaligndot +; .endif + +;---------- +; init secondary data structure + + clr a0 + movi PLDSZ,a9 + mpyu a11,a9 + addi pld,a9 ;A9=*Plyr secondary data struc + move a9,a1 + movi PLDSZ/16,b0 +#cpldlp move a0,*a1+ + dsj b0,#cpldlp + + sll 4,a11 ;*16 + addi P1CTRL,a11 ;A11=*PxCTRL + move a0,*a11 + +;---------- +; set initial sequence + +; move @inmatchup,a0 +; jrz #pn02 +; movk STND_SEQ,a0 +; jruc #pn03 +; +;#pn02 + movk STND_SEQ,a0 + move @gmqrtr,a14 + jrnz #goa + movi TIPSTND_SEQ,a0 +#goa + + + move *a13(plyr_num),a14 ;plyrs 0 & 3 will be standing + jrz #pn03 + subk 3,a14 + jrge #pn03 + move @gmqrtr,a14 ;so will plyrs 1 & 2 if not 1st qrtr + jrnz #pn03 + movi TIP_SEQ,a0 ;set game start tip-off seq + +#pn03 + + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq + movk STND_SEQ,a0 +#skipq + .endif + + move *a13(plyr_dir),a7 + callr plyr_setseq ;Rets: A10=Ani cntdn + +; move @inmatchup,a0 +; jrz #pn03b +;#pn03a SLEEP 1 +; dsj a10,#noa +; move *a13(plyr_ani_p),a14,L ;>Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball + move @pup_strongmen,a1 + jrz #notchamp + srl 1,a1 +;A grand champion is playing! + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrz #notchamp ;br=champ getting pushed + movi 900,a0 ;### + calla RNDPER + jrhi #keepball + +#notchamp + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + + move @plyr_onfire,a14 ;Do on-fire shot snd +;; cmp a0,a14 +;; jrne #cold + btst a0,a14 + jrz #cold ;br=not on-fire + SOUND1 fball_snd +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +; LOCKUP + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor + movk 14,a0 ;15 ;!!! ;% factor + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly + movi 850,a9 ;!!! ;Base shot % for layup +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk + movi 700,a9 ;!!! ;Base shot % for hook + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +; move *a13(plyr_seqflgs),a14 +; btst LAYUP_B,a14 +; jrz #hkck +; +; jruc #hkck +; +; addk 2,a4 ;8 +; move @HCOUNT,a14 +; btst 0,a14 +; jrz #hko +; subk 10,a4 +; jruc #hko +; +;#hkck + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + + movi 6*TSEC+10-70+60-20,a11 + CREATE0 scr1 + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + + CREATE0 score_showtvpanel2 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/CODE113M/PLYR.EQU b/BACKUP/CODE113M/PLYR.EQU new file mode 100644 index 0000000..38020e5 --- /dev/null +++ b/BACKUP/CODE113M/PLYR.EQU @@ -0,0 +1,376 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; + STRUCTPD ;70 Words max + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 + + + + + + + + + + + diff --git a/BACKUP/CODE113M/PLYR2.ASM b/BACKUP/CODE113M/PLYR2.ASM new file mode 100644 index 0000000..81e4ff6 --- /dev/null +++ b/BACKUP/CODE113M/PLYR2.ASM @@ -0,0 +1,6132 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + + BSSX original_names ,32*NUMPLYRS ;Names of original players in game +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored + + move a0,@brick_count,L + move a0,@brick_count+20h,L + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move *a8(OXVEL),a1,L ;Chk vel for which limit to chk + jreq #xok ; = if held or dribbled + jrgt #xvpos + + cmpi LFTCRT_X,a6 ;Neg vel. Chk left X limit + jrge #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad + +#xvpos cmpi RGTCRT_X,a6 ;Pos vel. Chk right X limit + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + +#xbad move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +#zbad move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + addk 3,a0 +;DJT Start + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +takedunk_t +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + + .word 0,0,0,0,0,0,0,100,130,170,200,300,400,600,800,800 + .word 999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1 + + move *a14(plyr_num),a0 + move @pup_maxpower,a1 + btst a0,a1 + jrz #nochng +;This guy has max power! Can't take ball! + movk 9,a0 + jruc #maxp +#nochng + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;Guy trying to dunk ball +#maxp + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;Guy trying to take ball + cmpi 4,a14 + jrle #nxt0z ;3 power can't take ball! + +;Cut blocked dunks in half! + move @HCOUNT,a1 + btst 0,a1 + jrz #nxt0z + + sub a14,a0 ;a0=-10 thru 10 + addk 10,a0 + sll 4,a0 + addi takedunk_t,a0 + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1 +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +; LOCKUP +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 + jreq #rcvok ;The receiver has it? + + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... + addi 25,a14 ;Alley oop steal power! +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej + +; LOCKUP + + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +; LOCKUP + nop + nop +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Try turning on fire circles under player +;If on defense, don't do fire circles. + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time + + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher +; cmpi ->4b200,a1 ;Let him jump higher + cmpi ->4b400,a1 ;Let him jump higher + jrgt #maxok + movi ->4b400,a1 + jruc #maxok +#losing + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a14,a0 +;; jrnz #nofire + btst a14,a0 + jrz #nofire + +;Stop fire circles under on fire alley oop jumper! + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire + + move @tvpanelon,a0,L + jrnz #nofire +;Try turning on fire circles under player + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 + jrnz #xz2 + + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE113M/PLYR3.ASM b/BACKUP/CODE113M/PLYR3.ASM new file mode 100644 index 0000000..a6e41cb --- /dev/null +++ b/BACKUP/CODE113M/PLYR3.ASM @@ -0,0 +1,3713 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) + +#no + move @PSTATUS,a0 + btst a11,a0 + jrnz #conta +;Jumpball player is not in game +;Check teammate + cmpi 1,a11 + jrnz #tm2 + btst 0,a0 + jrz #drone_taps +;Have player 0 control meter + clr a0 + jruc #getbut +#tm2 btst 3,a0 + jrz #drone_taps +;Have player 3 control meter + movk 3,a0 + jruc #getbut + +#drone_taps + movi 190,a0 + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/CODE113M/PLYRAT.ASM b/BACKUP/CODE113M/PLYRAT.ASM new file mode 100644 index 0000000..6a9fecd --- /dev/null +++ b/BACKUP/CODE113M/PLYRAT.ASM @@ -0,0 +1,2201 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,496 + BSSX created_plyr3_attrib_tables,496 + BSSX created_plyr4_attrib_tables,496 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch +ATL_t + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL0 + + ;Flesh pal, Primary uniform pal, Alternate uniform pal, Primary + ;trim pal, Alternate trim pal + + .long Augmon_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Augmon_h + .word 4,3,8 + + ;Primary swipe pal, Alternate swipe pal, Primary vertical panel pal, + ;Alternate vertical panel pal + + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + +ATL_tend + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL0 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL0 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL_10 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL0 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +BOST_t ;Done + + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL0 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL0 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL0 + .long MONTRO_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Montross_h + .word 3,8,3 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL0 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL0 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHAR_t + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL0 + .long K_AND_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,KAnderson_h + .word 9,3,6 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 ;Can shatter + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL0 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL0 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 ;Can shatter + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF4,DSKL1 +; .long ALIEN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL0 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL0 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL0 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL0 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL3 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DAL_t + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL_11 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL_11 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL_11 + .long PJONES_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Pjones_h + .word 3,8,3 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DEN_t + LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF1,SDEF8,DSKL_7 + .long RAUF_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rauf_h + .word 8,2,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 ;Can shatter + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL_7 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL_7 + .long ROSE_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Rose_h + .word 8,4,9 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL_7 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +DET_t + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL1 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL1 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL1 + .long HOUSTO_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Houston_h + .word 5,1,7 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +GOLD_t + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL_6 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL_4 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL_6 + .long shiek_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Seikaly_h + .word 4,8,4 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL_4 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL_4 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL3 ;Can shatter + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL1 + .long HORRY_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Horry_h + .word 5,6,9 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL1 + .long CASSEL_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Cassel_h + .word 6,1,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL0 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL0 + .long MJACKS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,MJackson_h + .word 9,4,4 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL0 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL0 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL0 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL0 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT8,DNK4,DEF2,SDEF7,DSKL0 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,2,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL1 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL1 + .long divac_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Divac_h + .word 6,8,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL1 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL1 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MIAMI_t ;Done + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL_8 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL_4 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL_6 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL_2 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL_2 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +MINN_t + LWWWWWW scale65_t,BV9,SHT5,DNK9,DEF1,SDEF4,DSKL_10 + .long RIDER_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Rider_h + .word 2,4,6 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL_10 + .long Lang_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Lang_h + .word 2,8,4 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL_5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL_10 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL0 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL_9 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL0 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 ;Shatter + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL2 + .long MASON_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Mason_h + .word 4,9,6 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL_11 + .long DHARP_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,DHarper_h + .word 5,5,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL2 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL2 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL2 + .long KONCAK_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Koncak_h + .word 3,6,2 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHIL_t + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL0 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL_9 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL_9 + .long VMAX_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,VMaxwell_h + .word 6,4,4 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL3 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL_8 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL0 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +PORT_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL3 + .long STRICK_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Strickland_h + .word 10,3,6 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL3 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL3 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL_6 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL_8 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL_8 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL_8 + .long MARCIU_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Marciulonis_h + .word 2,5,7 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL_8 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL_10 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL_10 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL0 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL0 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL0 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL0 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL_6 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL4 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 ;Can shatter + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL_9 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL0 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL0 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL_2 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL0 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +WASH_t + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL_5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL0 + .long PACK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Pack_h + .word 9,3,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL_5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Pass ability, power, clutch + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + +;FIXX!!! +;Superstar guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEN + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;SPUD WEBB + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + + +**************************************************************** + + .end + diff --git a/BACKUP/CODE113M/PLYRAT2.ASM b/BACKUP/CODE113M/PLYRAT2.ASM new file mode 100644 index 0000000..34f86c7 --- /dev/null +++ b/BACKUP/CODE113M/PLYRAT2.ASM @@ -0,0 +1,650 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +#lp3 cmpi 0,a0 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 +;; addi 20*64,a10 + dec a0 + jruc #lp3 +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end + + + diff --git a/BACKUP/CODE113M/PLYRAT3.ASM b/BACKUP/CODE113M/PLYRAT3.ASM new file mode 100644 index 0000000..b2911f5 --- /dev/null +++ b/BACKUP/CODE113M/PLYRAT3.ASM @@ -0,0 +1,532 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h + .text + + +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/CODE113M/PLYRDSEQ.ASM b/BACKUP/CODE113M/PLYRDSEQ.ASM new file mode 100644 index 0000000..763c525 --- /dev/null +++ b/BACKUP/CODE113M/PLYRDSEQ.ASM @@ -0,0 +1,2931 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA5,64 + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 38,S1SETLA4,F + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F + WLLW -1,seq_strtdunk,S2HBHLA6,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 43,S2HBHLA4,F + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,76 + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F + WLW 42,S3BETLA5,F + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA5,76 + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F + WLW 43,S4SETLA3,F + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA5,65 + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F + WLW 38,S5SETLA3,F + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/CODE113M/PLYRDSQ2.ASM b/BACKUP/CODE113M/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/CODE113M/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/CODE113M/PLYRLSEQ.ASM b/BACKUP/CODE113M/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/CODE113M/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/CODE113M/PLYRRSEQ.ASM b/BACKUP/CODE113M/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/CODE113M/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/CODE113M/PLYRSEQ.ASM b/BACKUP/CODE113M/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/CODE113M/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/CODE113M/PLYRSEQ2.ASM b/BACKUP/CODE113M/PLYRSEQ2.ASM new file mode 100644 index 0000000..01ee78b --- /dev/null +++ b/BACKUP/CODE113M/PLYRSEQ2.ASM @@ -0,0 +1,1687 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movk 5,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #ex ; br=yes + addk 4,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 + movi -024000h,a14 +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 + movi 024000h,a14 +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c + movi -050000h,a14 + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c + movi 052000h,a14 + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a + movi 040d00h,a14 + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a + movi 024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 + movi -024000h,a14 +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c + movi -024000h,a14 + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 + movi 024000h,a14 +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d + movi 050000h,a14 + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b + movi 043300h,a14 + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b + movi 022000h,a14 + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c + movi -052000h,a14 + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d + movi -022000h,a14 + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a + movi -040d00h,a14 + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b + movi -043300h,a14 + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/CODE113M/PLYRSTND.ASM b/BACKUP/CODE113M/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/CODE113M/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/CODE113M/QUEST.DOC b/BACKUP/CODE113M/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/CODE113M/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/CODE113M/RECORD.ASM b/BACKUP/CODE113M/RECORD.ASM new file mode 100644 index 0000000..84bb22a --- /dev/null +++ b/BACKUP/CODE113M/RECORD.ASM @@ -0,0 +1,5843 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + + +HISCORE_TABLES equ 9 + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 + cmpi 69,a14 ;too many ? + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no + movk 2,a9 ;2 pts. +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) + .long #method8 ;9 (most trivia points) + .long #method3 ;10 (most popular teams) + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) + .long #sort_trivia_pts ;9 (most trivia points) + .long #sort_teams ;10 (most popular teams) + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_teams + calla get_teams_pop + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 + .long #hd6,#hd7,#hd8,#hd9,#hda,#hd1 + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 + .long #hd26,#hd27,#hd28,#hd29,#hd30,#hd21 + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +#hd9 .string "TRIVIA MASTERS",0 +#hda .string "MOST POPULAR TEAMS",0 + +#hd20 .string "(all stats based on 4 games minimum)",0 +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +#hd29 .string "(best NBA knowledge)",0 +#hd30 .string "(at this location)",0 + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113M/REVUP.DOC b/BACKUP/CODE113M/REVUP.DOC new file mode 100644 index 0000000..4d8afa8 --- /dev/null +++ b/BACKUP/CODE113M/REVUP.DOC @@ -0,0 +1,12 @@ +10/11/96 + + +Here is the list of the changes from NBA Hangtime version M1.2 to +version M1.3: + + 1) Free full-game on power-up for players 1 & 2 bugfix; + produced if a player pressed a start button within the first + 8 ticks (1/7 second) of entry to Attract mode following power-up + Version screen; then, while still on Credits screen, player + would drop enough to start a game, thereby allowing players 1 & 2 + to press start for a free full-game diff --git a/BACKUP/CODE113M/ROBO.ASM b/BACKUP/CODE113M/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/CODE113M/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113M/SCORE.ASM b/BACKUP/CODE113M/SCORE.ASM new file mode 100644 index 0000000..54dcfec --- /dev/null +++ b/BACKUP/CODE113M/SCORE.ASM @@ -0,0 +1,4689 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON + .ref CWINDOW,GETCPNT,LOWZ + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp + callr replenish_turbo + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmpi 8,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg + movb *a10(3*8),a0 ;Get mins byte + + + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd +#noplay + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 + rets + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + + movi [186+45,0],a1 + move @gmqrtr,a2 + sll 5,a2 + + movi 5002,a3 + + move @game_time,a0,L + jrnz #notend + + move @scores,a4 + move @scores+16,a0 + cmp a0,a4 + jrnz #notie +;tie score + addi tie_eqrtrt,a2 + jruc #tie +#notie + addi eqrtrt,a2 +#tie +; movi [9,0],a0 + clr a0 + move *a2,a2,L + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + calla BEGINOBJ2 + jruc #skip + + +#notend + addi qrtrt,a2 + movi [-9,0],a0 + move *a2,a2,L + calla BEGINOBJ2 +#skip + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;FIX!!! Get different snd + SOUND1 warn_snd ;Warn players clock is running down + jruc #lptick + +#clean_up + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power + movk 3,a3 + cmpi 2,a0 + jrz #tag1 + movk >c,a3 +#tag1 move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/CODE113M/SCORE2.ASM b/BACKUP/CODE113M/SCORE2.ASM new file mode 100644 index 0000000..5a4e9f0 --- /dev/null +++ b/BACKUP/CODE113M/SCORE2.ASM @@ -0,0 +1,2208 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/CODE113M/SCREEN.ASM b/BACKUP/CODE113M/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/CODE113M/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113M/SELECT.ASM b/BACKUP/CODE113M/SELECT.ASM new file mode 100644 index 0000000..06959be --- /dev/null +++ b/BACKUP/CODE113M/SELECT.ASM @@ -0,0 +1,6335 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech + .ref set_names + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 + .ref ask_yes_no,show_trivia_stuff + .ref del_yes_no_buttons + .ref qualify_plaque + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + + .def _TOR + .def _VAN + .def _DAL + .def _MIN + .def _MI + .def _WAS + .def _PHI + .def _SAC + .def _MIL + .def _DEN + .def _GOL + .def _SAN + .def _SEA + .def _ATL + .def _ORL + .def _LAC + .def _NJ + .def _CHA + .def _BOS + .def _CLE + .def _DET + .def _HOU + .def _IND + .def _LAL + .def _UTA + .def _NY + .def _POR + .def _PHX + .def _CHI + + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats + .ref print_trivia_info +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +_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 +_TOR equ 25 ;toronto +_UTA equ 26 +_VAN equ 27 ;vancouver +_WAS equ 28 + +_MK2 equ 27 ;Special defeated all 27 teams - MK2 + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b + cmpi JOY_DOWN,a0 + jreq #jd1 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd1 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd1 + cmpi JOY_UP,a0 + jreq #ju1 + cmpi JOY_UP_RIGHT,a0 + jreq #ju1 + cmpi JOY_UP_LEFT,a0 + jrne #rj_1 +;upward +#ju1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + dec a0 + jrnn #jup1a + movi NUM_TEAMS-1,a0 +#jup1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 + +;downward +#jd1 + SOUND1 tm_sel_cur1 + + move @tm1_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd1a + clr a0 +#jd1a move a0,@tm1_cur_pos + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + callr create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_cur1 + jruc #rj_1 +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b + cmpi JOY_DOWN,a0 + jreq #jd2 + cmpi JOY_DOWN_RIGHT,a0 + jreq #jd2 + cmpi JOY_DOWN_LEFT,a0 + jreq #jd2 + cmpi JOY_UP,a0 + jreq #ju2 + cmpi JOY_UP_RIGHT,a0 + jreq #ju2 + cmpi JOY_UP_LEFT,a0 + jrne #rj_2 +;upward +#ju2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + dec a0 + jrnn #jup2a + movi NUM_TEAMS-1,a0 +#jup2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 + +;downward +#jdr2 +#jd2 + SOUND1 tm_sel_cur2 + + move @tm2_cur_pos,a0 + inc a0 + cmpi NUM_TEAMS,a0 + jrlo #jd2a + clr a0 +#jd2a move a0,@tm2_cur_pos + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd + SLEEP 65 + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + 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 NEXT_TEAM,a10 ;7 combinations * 3 heads +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + 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 NEXT_TEAM,a10 ;compute offset into HEAD tbl + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 ;table in score2.asm + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +#stxy2 .long 140<<16 ;Y + .word 80,311 + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 + jreq #not_2pc ;no heading during CREATE PLAYER + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne #gyval1 ;not in CREATE PLAYER + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x111 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #x211 + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 + CREATE0 qualify_plaque + calla print_trivia_info + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected + JSRP show_trivia_stuff + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 19,a0 + calla RNDRNG0 + + move @team1,a14 +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd +; cmpi _PHI,a14 +; jrz #bigd + + sll 4,a14 + addi tm1set,a14 + move a0,*a14 +#bigd + clr a8 + CREATE0 cpu_subs + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 + movk 19,a0 + calla RNDRNG0 + move @team2,a14 + +;This is the check for those teams who didn't have 5 players per team +; cmpi _DAL,a14 +; jrz #bigd1 +; cmpi _PHI,a14 +; jrz #bigd1 + + sll 4,a14 + addi tm2set,a14 + move a0,*a14 +#bigd1 + movk 1,a8 + CREATE0 cpu_subs + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! + movi DMAWNZ,a0 + movi OBJLST,a1 + jruc so20 +so10 move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 + + move @kp_qscrs2+128,a0 + move @kp_qscrs2+144,a14 + add a14,a0 + jrz ovr_2 + + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +ovr_2 + move @kp_qscrs2+160,a0 + move @kp_qscrs2+176,a14 + add a14,a0 + jrz ovr_3 + + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +ovr_3 + move @kp_qscrs2+192,a0 + move @kp_qscrs2+208,a14 + add a14,a0 + jrz ovr_4 + + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +ovr_4 + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +; CREATE VS_LOGO_PID,animate_vs_logo + CREATE0 call_matchup + + movi 5*TSEC,a10 ;!!! 4 +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit1 + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit2 + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +; calla get_all_buttons_down2 + calla get_all_buttons_cur2 + jrnz #xit3 + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; +#team_data + .word 'J'-'@','A'-'@','P'-'@','P'-'@','L'-'@','E'-'@' + .word '7'-'0','7'-'0','7'-'0','1'-'0' ;1 JOHNSON +#team_data1 + .word 'D'-'@','I'-'@','V'-'@','I'-'@','T'-'@','A'-'@' + .word '1'-'0','3'-'0','1'-'0','2'-'0' ;2 DIVITA + + .word 'T'-'@','U'-'@','R'-'@','M'-'@','E'-'@','L'-'@' + .word '1'-'0','4'-'0','3'-'0','3'-'0' ;2 TURMELL + + .word 'D'-'@','A'-'@','N'-'@','I'-'@','E'-'@','L'-'@' + .word '1'-'0','7'-'0','1'-'0','5'-'0' ;2 THOMPSON + + .word 'E'-'@','U'-'@','G'-'@','E'-'@','N'-'@','E'-'@' + .word '7'-'0','8'-'0','7'-'0','8'-'0' ;2 GEER + + .word 'J'-'@','C'-'@',0,0,0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;2 CARLTON + + .word 'J'-'@','F'-'@','E'-'@','R'-'@',0,0 + .word '1'-'0','6'-'0','1'-'0','4'-'0' ;2 HEDRICK + + .word 'J'-'@','O'-'@','N'-'@','H'-'@','E'-'@','Y'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 JON HEY + + .word 'M'-'@','O'-'@','R'-'@','R'-'@','I'-'@','S'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 AIR MORRIS + + .word 'B'-'@','A'-'@','R'-'@','D'-'@','O'-'@',0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 STEVE BARDO + + .word 'M'-'@','I'-'@','N'-'@','I'-'@','F'-'@','E'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 MINIFEE + + .word 'M'-'@','A'-'@','R'-'@','T'-'@','Y'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 MARTINEZ + + .word 'C'-'@','A'-'@','R'-'@','L'-'@','O'-'@','S'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;2 PESINA + + .word 'S'-'@','H'-'@','A'-'@','W'-'@','N'-'@',0 + .word '1'-'0','2'-'0','3'-'0','4'-'0' ;2 LIPTAK + + .word 'E'-'@','D'-'@','D'-'@','I'-'@','E'-'@',0 + .word '7'-'0','3'-'0','2'-'0','4'-'0' ;2 EDDIE + + .word 'M'-'@','X'-'@','V'-'@',0,0,0 + .word '2'-'0','1'-'0','2'-'0','5'-'0' ;2 MIKE V. + + .word 'J'-'@','A'-'@','M'-'@','I'-'@','E'-'@',0 + .word '2'-'0','1'-'0','1'-'0','1'-'0' ;2 JAMIE + + .word 'N'-'@','I'-'@','C'-'@','K'-'@',0,0 + .word '8'-'0','1'-'0','1'-'0','1'-'0' ;2 NICK E. + + .word 'R'-'@','O'-'@','O'-'@','T'-'@',0,0 + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 J. ROOT + + .word 'M'-'@','E'-'@','D'-'@','N'-'@','I'-'@','K'-'@' + .word '7'-'0','1'-'0','1'-'0','1'-'0' ;2 C. MEDNICK + + .word 'D'-'@','A'-'@','N'-'@','R'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;20 DAN R. + + .word 'P'-'@','A'-'@','T'-'@','F'-'@',0,0 + .word '3'-'0','1'-'0','1'-'0','1'-'0' ;21 PAT F. + + .word 'K'-'@','O'-'@','M'-'@','B'-'@','A'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;22 ED BOON + + .word 'M'-'@','O'-'@','R'-'@','T'-'@','A'-'@','L'-'@' + .word '1'-'0','1'-'0','1'-'0','5'-'0' ;23 J. TOBIAS + + .word 'S'-'@','N'-'@','O'-'@',0,0,0 + .word '1'-'0','2'-'0','1'-'0','4'-'0' ;24 OURSLER + + .word 'J'-'@','A'-'@','S'-'@','O'-'@','N'-'@',0 + .word '1'-'0','8'-'0','3'-'0',':'-'0' ;25 JASON + + .word 'Q'-'@','U'-'@','I'-'@','N'-'@',0,0 + .word '1'-'0','4'-'0','4'-'0','1'-'0' ;26 QUINN + + .word 'P'-'@','E'-'@','R'-'@','R'-'@','Y'-'@',0 + .word '4'-'0','6'-'0','1'-'0','1'-'0' ;27 PERRY + + .word 'N'-'@','F'-'@','U'-'@','N'-'@','K'-'@',0 + .word '1'-'0','2'-'0','1'-'0','2'-'0' ;28 NEIL FUNK + + .word 'M'-'@','D'-'@','O'-'@','C'-'@',0,0 + .word '3'-'0','1'-'0','0'-'0','0'-'0' ;29 MDOC + + .word 'N'-'@','O'-'@','B'-'@','U'-'@','D'-'@',0 + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;30 BUD + + .word 'M'-'@','A'-'@','R'-'@','I'-'@','U'-'@','S'-'@' + .word '2'-'0','1'-'0','1'-'0','6'-'0' ;31 MARIUS + + .word 'M'-'@','U'-'@','N'-'@','D'-'@','A'-'@','Y'-'@' + .word '6'-'0','5'-'0','4'-'0','3'-'0' ;32 MUNDAY + + .word 'N'-'@','O'-'@','R'-'@','T'-'@','H'-'@',0 + .word '6'-'0','1'-'0','6'-'0','1'-'0' ;33 NORTH + + .word 'A'-'@','M'-'@','R'-'@','I'-'@','C'-'@','H'-'@' + .word '3'-'0','1'-'0','3'-'0','1'-'0' ;34 AMRICH + + .word 'J'-'@','I'-'@','G'-'@','G'-'@','E'-'@','T'-'@' + .word '2'-'0','1'-'0','2'-'0','1'-'0' ;35 JIGGETS + + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word 'P'-'@','I'-'@','P'-'@','P'-'@','E'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;PIPPEN + + .word 'R'-'@','O'-'@','D'-'@','M'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RODMAN + + .word 'J'-'@','O'-'@','H'-'@','N'-'@','S'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;JOHNSN_L + + .word 'R'-'@','I'-'@','C'-'@','E'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;RICE + + .word 'K'-'@','I'-'@','D'-'@','D'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KIDD + + .word 'M'-'@','O'-'@','T'-'@','U'-'@','M'-'@','B'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOTUMBO + + .word 'G'-'@','H'-'@','I'-'@','L'-'@','L'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. HILL + + .word 'D'-'@','R'-'@','E'-'@','A'-'@','M'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;OLAJUAMWN + + .word 'M'-'@','I'-'@','L'-'@','L'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. MILLER + + .word 'S'-'@','M'-'@','I'-'@','T'-'@','S'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;R. SMITS + + .word 'M'-'@','O'-'@','U'-'@','R'-'@','N'-'@','G'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MOURNING + + .word 'G'-'@','L'-'@','E'-'@','N'-'@','N'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;G. ROBINSON + + .word 'W'-'@','E'-'@','B'-'@','B'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;SPUD WEBB + + .word 'E'-'@','W'-'@','I'-'@','N'-'@','G'-'@',0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;EWING + + .word 'S'-'@','T'-'@','A'-'@','R'-'@','K'-'@','S'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STARKS + + .word 'A'-'@','H'-'@','R'-'@','D'-'@','W'-'@','Y'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;A. HARDAWAY + + .word 'H'-'@','G'-'@','R'-'@','A'-'@','N'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;H. GRANT + + .word 'S'-'@','T'-'@','A'-'@','C'-'@','K'-'@','H'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;STACKHOUSE + + .word 'C'-'@','L'-'@','I'-'@','F'-'@','F'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;CLIFF R. + + .word 'D'-'@','A'-'@','V'-'@','I'-'@','D'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;DAVID R. + + .word 'E'-'@','L'-'@','L'-'@','I'-'@','O'-'@','T'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;S. ELLIOT + + .word 'K'-'@','E'-'@','M'-'@','P'-'@',0,0 + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;KEMP + + .word 'M'-'@','A'-'@','L'-'@','O'-'@','N'-'@','E'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MALONE + + .word 'W'-'@','E'-'@','B'-'@','B'-'@','E'-'@','R'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;WEBBER + + .word 'M'-'@','U'-'@','R'-'@','S'-'@','A'-'@','N'-'@' + .word '1'-'0','1'-'0','1'-'0','1'-'0' ;MURESAN +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,70,>8f2 ;0 JEFF JOHNSON (JAPPLE) + .word >3505,70,>8e4 ;1 SAL DIVITA + .word >3505,70,>8e0 ;2 TURMELL + .word >3505,70,>8ee ;3 THOMPSON + .word >3505,70,>8e6 ;4 GEER + .word >3505,70,>8f0 ;5 CARLTON + .word >3505,70,>8e8 ;6 HEDRICK + .word >3505,70,>8e2 ;7 JOHN HEY + .word >3505,70,>8da ;8 AIR MORRIS + .word >3505,70,>8dc ;9 STEVE BARDO + .word >3505,70,>8de ;10 MINIFEE + .word >3505,70,>8ea ;11 MARTINEZ + .word >3505,70,>8ec ;12 PESINA + .word >3505,50,>b33 ;13 LIPTAK + .word >3505,50,>b33 ;14 EDDIE + .word >3505,50,>b33 ;15 MIKE V + .word >3505,50,>b33 ;16 JAMIE R. + .word >3505,50,>b33 ;17 NICK E. + .word >3505,50,>b33 ;18 J. ROOT + .word >3505,50,>b33 ;19 MEDNICK + .word >3505,50,>b33 ;20 DAN R. + .word >3505,50,>b33 ;21 PAT F. + .word >3505,50,>b33 ;22 ED BOON + .word >3505,50,>b33 ;23 J. TOBIAS + .word >3505,50,>b33 ;24 OURSLER + .word >3505,50,>b33 ;25 JASON S. + .word >3505,50,>b33 ;26 QUINN + .word >3505,50,>b33 ;27 M. PERRY + .word >3505,50,>b33 ;28 N. FUNK + .word >3505,50,>b33 ;29 MDOC + .word >3505,50,>b33 ;30 BUD + .word >3505,50,>754 ;31 MARIUS + .word >3505,50,>b33 ;32 MUNDAY + .word >3505,50,>b33 ;33 NORTH + .word >3505,50,>b33 ;34 AMRICH + .word >3505,50,>b33 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>550 ;PIPPEN + .word >100D,52,>554 ;RODMAN + .word >100D,52,>540 ;L. JOHNSON + .word >100D,52,>544 ;G. RICE + .word >100D,52,>57c ;KIDD + .word >100D,52,>590 ;MUTOMBO + .word >100D,52,>5a4 ;G. HILL + .word >100D,52,>5c8 ;Olajuwan + .word >100D,52,>5dc ;r. miller + .word >100D,52,>5e4 ;smits + .word >100D,52,>618 ;a. mourning + .word >100D,52,>630 ;g. robinson + .word >100D,52,>7ac ;spud webb + .word >100D,52,>668 ;ewing + .word >100D,52,>678 ;starks + .word >100D,52,>67c ;a. hardaway + .word >100D,52,>680 ;h. grant + .word >100D,52,>690 ;stackhouse + .word >100D,52,>6bc ;c. robinson + .word >100D,52,>6e4 ;d. robinson + .word >100D,52,>6e0 ;s. elliot + .word >100D,52,>6f4 ;shawn kemp + .word >100D,52,>720 ;k. malone + .word >100D,52,>748 ;webber + .word >100D,52,>754 ;muresan + + +#****************************************************************************** + + SUBR select_teams + + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random1 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd1 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd1 + movk 19,a0 +#yesd1 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm1set,a14 + move a0,*a14 + move a2,@team1 +;DJT + jruc #teams_ok + + +#choose_random1 +;Opponent has beaten all the teams, give him a superstar matchup + PULL a1 + +;DJT #choose_random1a + movk NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 + move a0,@team1 + +;DJT Start + move @player3_data+PR_NAME1,a14 + jrgt #cont1 + move @player4_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! +#cont1 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm1set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +;;; addi 56,a0 ;0 + move a0,@special_heads+10h +;remove these two lines when uncommted the ones above +;; clr a0 +;; move a0,@special_heads+10h + + jruc #teams_ok + +;DJT Start +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 + PUSH a1 + calla calc_num_defeated + cmpi NUM_TEAMS,a0 + jreq #choose_random2 + + movi NUM_TEAMS-1,a1 + sub a0,a1 + move a1,a0 + calla RNDRNG0 + PULL a1 + calla get_opponent_team + +;This is the check for those teams who didn't have 5 players per team +; movk 1,a0 +; cmpi _PHI,a2 +; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +;; cmpi _PHX,a2 +;; jrz #yesd3 +;DJT Start +; movk 1,a0 +;DJT End +; cmpi _DAL,a2 +; jrz #yesd3 +;DJT + movk 19,a0 +#yesd3 + calla RNDRNG0 + move a2,a14 + sll 4,a14 + addi tm2set,a14 + move a0,*a14 + move a2,@team2 + jruc #teams_ok + + +#choose_random2 + PULL a1 + +;DJT #choose_random2a + movk NUM_TEAMS-1,a0 ;0-26 + calla RNDRNG0 + move a0,@team2 + +;DJT Start + move @player1_data+PR_NAME1,a14 + jrgt #cont2 + move @player2_data+PR_NAME1,a14 +;DJT End + jrle #teams_ok +;Someone really has beaten all the teams! + +#cont2 +;DJT Start + move @HCOUNT,a1 ;Select squad + movk 1,a14 + and a14,a1 + + sll 4,a0 + addi tm2set,a0 + move a1,*a0 +;DJT End + +;FIX!!! + movi NUM_MEMBRS-1,a0 ;68 + calla RNDRNG0 +; addi 56,a0 ;0 + move a0,@special_heads+30h +;remove these two lines when uncommted the ones above +; clr a0 +; move a0,@special_heads+30h + +#teams_ok + rets + + +;This table should be ranked by real NBA record +;Updated on 2/17/96 +;Worst to Best: +team_orders + .word _VAN ;28 + .word _PHI ;29 + .word _TOR ;27 ;2 new nba teams + .word _DAL ;24 + .word _MIL ;21 + .word _MIN ;26 + .word _BOS ;22 + .word _LAC ;23 + .word _NJ ;25 + .word _DEN ;20 + .word _GOL ;18 + .word _SAC ;13 + .word _WAS ;19 + .word _POR ;15 + .word _PHX ;16 + .word _CHA ;14 + .word _MI ;17 + .word _ATL ;11 + .word _CLE ;10 + .word _DET ;12 + .word _NY ;7 + .word _IND ;8 + .word _HOU ;6 + .word _LAL ;9 + .word _UTA ;4 + .word _SAN ;5 + .word _ORL ;3 + .word _SEA ;2 + .word _CHI ;1 + .word -1 + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ + jrnc #found_champ +; jruc #found_champ + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +#found_champ + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + + movi TROPHY,a8 + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + + SLEEP 7*TSEC + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + move *a9+,a4,L + move *a4+,a0,W + move a0,@mess_cursx2 + + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + + move *a9,a0,L + cmpi 4000,a0 ;at end ? + jrne #txt ;br=no + + + movi -0d000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*13 + + CREATE0 plyr_jscrowdsnd + + SLEEP 16*TSEC + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_Y_P,kern_chars +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line2a + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line_blnk + .long #line8 + .long #line9 + .long #line10 + .long #line11 + .long #line_blnk + .long #line15 + .long #line15a + .long #line_blnk + .long #line15c + .long #line15b + .long #line15d + .long #line_blnk + .long #line15e + .long #line15f + .long #line_blnk + .long #line14 + .long #line14a + .long #line2 + .long #line2a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,48 ;x,y +; .long BRSH_B_P + .long BRSHGYGP + .string "YOU ARE",0 +; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,74 ;x,y + .long BRSHGYGP + .string "THE NBA",0 +; .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line2a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,100 ;x,y + .long BRSHGYGP + .string "HANGTIME",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,126 ;x,y + .long BRSHGYGP + .string "GRAND",0 +; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 20,152 ;x,y + .long BRSHGYGP + .string "CHAMPION!",0 +; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + .even + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 67 + .long HANGF_Y_P + .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 + .even + +#line4a + .word 62 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 + .even + +#line4b + .word 100 + .long HANGF_Y_P + .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 + .even + +#line5 + .word 38 + .long HANGF_Y_P + .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 + .even + + +#line8 + .word 113 + .long HANGF_Y_P + .string "B",1,-3,"U",1,-1,"T"," ","A",0 + .even + +#line9 + .word 74 + .long HANGF_Y_P + .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 + .even + +#line10 + .word 42 + .long HANGF_Y_P + .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 + .even + +#line11 + .word 83 + .long HANGF_Y_P + .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 + .even + + +#line14 + .word 44 + .long HANGF_Y_P + .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 + .even + +#line14a + .word 27 + .long HANGF_Y_P + .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + + +#line15 + .word 87 + .long HANGF_Y_P + .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 + .even + +#line15a + .word 121 + .long HANGF_Y_P + .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 + .even + +#line15b + .word 55 + .long HANGF_R_P + .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 + .even + +#line15c + .word 134 + .long HANGF_R_P + .string "N",1,-6,"B",1,-5,"A",0 + .even + +#line15d + .word 53 + .long HANGF_R_P + .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 + .even + + +#line15e + .word 45 + .long HANGF_Y_P + .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 + .even + +#line15f + .word 110 + .long HANGF_Y_P + .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 + .even + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +plyr_names_img_tbl + .long ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR + .long BOSNBRO,BOSNBAR,BOSNMON,BOSNRAD,BOSNFOX + .long CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR + .long CHINPIP,CHINROD,CHINKUK,CHINLON,CHINKER + .long CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER + .long DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC + .long DENNRAU,DENNMUT,DENNMcD,DENNROS,DENNELL + .long DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU + .long GOLNWIL,GOLNSPR,GOLNSEI,GOLNSMI,GOLNMUL + .long HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI + .long INDNMIL,INDNDAV,INDNSMI,INDNMcK,INDNJAC + .long LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR + .long LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON + .long MIANMOU,MIANWIL,MIANCHA,MIANHAR,MIANDAN + .long MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU + .long MINNRID,MINNLAN,MINNWEB,MINNGUG,MINNGAR + .long NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW + .long NWYNEWI,NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA + .long ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO,ORLNKON + .long PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX + .long PHONJOH,PHONTIS,PHONMAN,PHONPER,PHONFIN + .long PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI + .long SACNOWE,SACNRIT,SACNGRA,SACNMAR,SACNEDN + .long SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG + .long SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR + .long TORNROG,TORNSTO,TORNROB,TORNMIL,TORNMUR + .long UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR + .long VANNANT,VANNEDW,VANNSCO,VANNREE,VANNMUR + .long WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR + + +;------------------- +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup + PRINT_STR bast8_ascii,5,0,200,195,BAST_Y_P,0 + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .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_RAPT ;25 TORONTO + .long T_JAZZ ;26 UTAH + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;1 ATLANTA HAWKS + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;2 BOSTON CELTICS ;Done + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS ____________ + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;3 CHARLOTTE HORNETS + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _____________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;4 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;5 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;6 DALLAS MAVERICKS + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD ______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 07,05,07,05 + .word 05,05,04,02 ;GEORGE McCLOUD 6'8" 215 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;7 DENVER NUGGETS + + .word 08,02,07,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS ______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE ______________ + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;8 DETROIT PISTONS + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _____________ + + .word 04,06,06,02 + .word 04,02,05,08 ;TERRY MILLS 6'10" 250 fat + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;9 GOLDEN STATE WARRIORS + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _____________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 INDIANA PACERS + + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 07,05,05,05 + .word 07,07,06,03 ;DEREK McKEE 6'10" 225 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _____________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _____________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _____________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES ________________ + +; .word 07,07,08,01 +; .word 08,05,09,09 ;MAGIC JOHNSON + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MIAMI HEAT ;Done + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + + .word 06,03,08,02 + .word 02,04,06,09 ;REX CHAPMAN 6'8" 230 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON ______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT ______________ + + .word 03,09,04,04 + .word 03,07,01,01 ;BENOIT BENJAMIN 7'0" 265 fat + + .word 06,03,06,00 + .word 06,01,06,03 ;SHERMAN DOUGLAS 6'1" 180 fat + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 MINNESOTA TIMBERWOLVES + + .word 09,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 06,08,05,06 + .word 04,09,02,04 ;ANTONIO LANG 6'11" 235 reg + + .word 09,00,05,09 + .word 07,00,06,05 ;SPUD WEBB 6'5" 215 thin + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 06,08,07,06 + .word 07,06,04,02 ;ARMON GILLIAM 6'9" 245 fat + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON ______________ + + .word 07,02,06,01 + .word 08,01,03,03 ;KEVIN EDWARDS 6'3" 210 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 05,08,05,07 + .word 05,02,04,02 ;CHARLES OAKLEY 6'9" 245 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHILADELPHIA 76ers + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE ______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat + + .word 08,01,07,01 + .word 04,01,07,04 ;TREVOR RUFFIN + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,05,07,04 + .word 08,05,04,09 ;WESLEY PERSON ____________ + + .word 09,02,07,09 + .word 07,02,04,09 ;MICHAEL FINLEY ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 PORTLAND TRAILBLAZERS + + .word 08,03,07,00 + .word 07,01,09,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 06,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 06,05,04,06 + .word 04,05,04,04 ;BUCK WILLIAMS _______________ + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS ____________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,03 ;BILLY OWENS 6'9" 220 reg + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT ______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY ______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 06,06,06,04 + .word 04,04,02,07 ;CHUCK PERSON 6'8" 225 reg + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10' 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS ______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 06,04,06,01 + .word 09,06,07,08 ;ALVIN ROBERTSON ______________ + + .word 04,08,05,02 + .word 04,09,04,02 ;OLIVER MILLER 6'9" 290 ex fat + + .word 06,05,07,05 + .word 03,03,02,07 ;TRACY MURRAY 6'7" 228 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 06,05,05,06 + .word 05,05,05,04 ;DAVID BENOIT 6'8" 220 thin + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ + + .word 08,02,06,01 + .word 09,01,06,05 ;ERIC MURDOCK _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;29 WASHINGTON BULLETS + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _____________ + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +name_sort + .long AUGMON,BLAYLOCK,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN,BARROS,MONTROSS,RADJA,FOX ;01 CELTICS + .long KANDERSON,JOHNSN_L,RICE,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long JACK,KIDD,MASH,PJONES,MCCLOUD ;05 MAVERICKS + .long ABDULRAU,MUTUMBO,MCDYESS,ROSE,DELLIS ;06 NUGGETS + .long DUMARS,GHILL,TMILLS,THORPE,HOUSTON ;07 PISTONS + .long WILLIS,SPREWELL,SEIKALY,JSMITH,MULLIN ;08 WARRIORS + .long OLAJUWON,DREXLER,HORRY,CASSELL,SMITH ;09 ROCKETS + .long MILLER,DDAVIS,SMITS,MCKEE2,MJACKSON ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS +; .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,MJOHNSON ;12 LAKERS + .long VANEXEL,DIVAC,CEBALLOS,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,WWILLIAM,CHAPMAN,THARDAWAY,DANILOVI ;13 HEAT + .long BAKER,GROBINSO,RESPERT,BENJAMIN,DOUGLAS ;14 BUCKS + .long RIDER,LANG,WEBB,GUGLI2,GARNETT ;15 TIMBERWOLVES + .long GILL,BRADLEY,GILLIAM,OBANNON,KEDWARDS ;16 NETS + .long EWING,MASON,HARPER_D,OAKLEY,STARKS ;17 KNICKS + .long AHARDAWAY,GRANT_HC,NANDERSON,DSCOTT,KONCAK ;18 MAGIC + .long STACKHOU,COLEMAN,WEATHSPN,RUFFIN,VMAXWELL ;19 76ers + .long KJOHNSON,TISDALE,MANNING,WPERSON,FINLEY ;20 SUNS + .long STRICKLA,CROBINSON,SABONIS,BWILLIAM,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,RICH,BGRANT,MARCIULO,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,AJOHNSON,PERSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS,STOUDAMI,ROBERTSON,OMILLER,TMURRAY ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,BENOIT,CMORRIS ;26 JAZZ + .long ANTHONY,EDWARDS,SCOTT,BREEVES,EMURDOCK ;27 GRIZZLIES + .long JHOWARD,WEBBER,CHEANEY,PACK,MURESAN ;28 BULLETS + .long 0 + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 20 ;DENVER + .word 20 ;DETROIT + .word 20 ;GOLDEN STATE + .word 20 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 20 ;MIAMI + .word 20 ;MILWAUKEE + .word 20 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;UTAH + .word 20 ;TORONTO + .word 20 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;0 JEFF JOHNSON + .long DIVITA ;1 SAL DIVITA + .long TURMELL ;2 TURMELL + .long THOMPS ;3 THOMPSON + .long GEER ;4 GEER + .long CARLTON ;5 CARLTON + .long HEDRICK ;6 HEDRICK + .long HEY ;7 JOHN HEY + .long AIRMOR ;8 AIR MORRIS + .long BARDO ;9 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 + .long TOBIAS ;23 + .long OURSLER ;24 + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + + .long PIPPEN ; + .long RODMAN ; + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long WEBB + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS + +;superstars + .long PIP_CHI ; + .long ROD_CHI ; + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long WEB_MIN + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + + .end diff --git a/BACKUP/CODE113M/SELECT3.ASM b/BACKUP/CODE113M/SELECT3.ASM new file mode 100644 index 0000000..464aab0 --- /dev/null +++ b/BACKUP/CODE113M/SELECT3.ASM @@ -0,0 +1,4690 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + + .asg 157,VS_X + .asg -76,VS_Y + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a2,L ;image addr +; +;name 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + + move @special_heads,a0 + jrn #not_spec1 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec1 + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y1+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +;name 2 (team 1) +; +#hd2 move *a10(20h),a2,L ;image addr + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + + move @special_heads+10h,a0 + jrn #not_spec2 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec2 + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y2+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + + move @special_heads+20h,a0 + jrn #not_spec3 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec3 + + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y3+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; name 2 (team 2) +; +#hd4 move *a10(20h),a2,L ;image addr + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + + move @special_heads+30h,a0 + jrn #not_spec4 + sll 5,a0 ;x 32 bits + addi our_names,a0 + move *a0,a2,L +#not_spec4 + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 +; movi [STBOX_Y4+71,0],a1 ;y val + movi 120,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +#hd5 PULL a9 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSB01,a2 + calla BEGINOBJ2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y+104,0],a1 + movi VSS01,a2 + calla BEGINOBJ2 + move a8,a9 + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end + diff --git a/BACKUP/CODE113M/SELECT4.ASM b/BACKUP/CODE113M/SELECT4.ASM new file mode 100644 index 0000000..6edb26d --- /dev/null +++ b/BACKUP/CODE113M/SELECT4.ASM @@ -0,0 +1,6152 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .def player_heads,player_heads2 ;table addr. + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf + .ref timeout4,credits3 + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + + + + .asg 183,PLAQUE_Y + +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + + +;----------------------------------------------------------------------------- +; This table is used for the STARRING nba players page in attract mode +;----------------------------------------------------------------------------- +player_heads2 + .long AUG_ATL + .long BLY_ATL + .long SMI_ATL + .long LAE_ATL + .long NOR_ATL + + .long BRO_BOS + .long BAR_BOS + .long MON_BOS + .long RAD_BOS + .long FOX_BOS + + .long AND_CHA + .long JON_CHA + .long RCE_CHA + .long ZID_CHA + .long CUR_CHA + + .long PIP_CHI + .long ROD_CHI + .long KUK_CHI + .long LON_CHI + .long KER_CHI + + .long HIL_CLE + .long MIL_CLE + .long PHL_CLE + .long BRA_CLE + .long FER_CLE + + .long JAC_DAL + .long KID_DAL + .long MAS_DAL + .long JON_DAL + .long MCC_DAL + + .long RAF_DEN + .long MUT_DEN + .long MCD_DEN + .long ROS_DEN + .long ELL_DEN + + .long DUM_DET + .long HIL_DET + .long MLS_DET + .long THR_DET + .long HOU_DET + + .long WLS_GLD + .long SPR_GLD + .long SKL_GLD + .long SMI_GLD + .long MUL_GLD + + .long OLA_HOU + .long DRX_HOU + .long HOR_HOU + .long CAS_HOU + .long SMT_HOU + + .long MIL_IND + .long DAV_IND + .long SMI_IND + .long MCK_IND + .long JAC_IND + + .long VAU_CLP + .long ROG_CLP + .long MUR_CLP + .long RCH_CLP + .long BAR_CLP + + .long VAN_LAK + .long DIV_LAK + .long CEB_LAK + .long CAM_LAK + .long JON_LAK + + .long MOU_MIA + .long WIL_MIA + .long CHP_MIA + .long HRD_MIA + .long DAN_MIA + + .long BAK_MLW + .long ROB_MLW + .long RES_MLW + .long BEN_MLW + .long DOU_MLW + + .long RID_MIN + .long LNG_MIN + .long WEB_MIN + .long GUG_MIN + .long GAR_MIN + + .long GLL_NEJ + .long BRA_NEJ + .long GIL_NEJ + .long OBA_NEJ + .long EDW_NEJ + + .long EWG_NEY + .long MAS_NEY + .long HPR_NEY + .long OAK_NEY + .long STA_NEY + + .long HAR_ORL + .long GRT_ORL + .long AND_ORL + .long SCO_ORL + .long KON_ORL + + .long STA_PHL + .long COL_PHL + .long WEA_PHL + .long RUF_PHL + .long MAX_PHL + + .long JOH_PHX + .long TIS_PHX + .long MAN_PHX + .long PER_PHX + .long FIN_PHX + + .long STR_PRT + .long ROB_PRT + .long SAB_PRT + .long WIL_PRT + .long CHI_PRT + + .long OWE_SAC + .long RIC_SAC + .long GRA_SAC + .long MAR_SAC + .long EDN_SAC + + .long ELL_SAN + .long ROB_SAN + .long JON_SAN + .long PRS_SAN + .long DEL_SAN + + .long KMP_SEA + .long PAY_SEA + .long SCH_SEA + .long HWK_SEA + .long FOR_SEA + + .long ROG_TOR + .long STO_TOR + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + + .long STK_UTA + .long MLN_UTA + .long HRN_UTA + .long BEN_UTA + .long MOR_UTA + + .long ANT_VAN + .long EDW_VAN + .long SCO_VAN + .long REV_VAN + .long MUR_VAN + + .long HWD_WAS + .long WEB_WAS + .long CHE_WAS + .long PAC_WAS + .long MUR_WAS + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;00 ATLANTA + .long AUG_ATL,BLY_ATL + .long AUG_ATL,SMI_ATL + .long AUG_ATL,LAE_ATL + .long AUG_ATL,NOR_ATL + + .long BLY_ATL,AUG_ATL + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long SMI_ATL,AUG_ATL + .long SMI_ATL,BLY_ATL + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,AUG_ATL + .long LAE_ATL,BLY_ATL + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,AUG_ATL + .long NOR_ATL,BLY_ATL + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,BAR_BOS + .long BRO_BOS,MON_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,MON_BOS + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long MON_BOS,BRO_BOS + .long MON_BOS,BAR_BOS + .long MON_BOS,RAD_BOS + .long MON_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,BAR_BOS + .long RAD_BOS,MON_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,BAR_BOS + .long FOX_BOS,MON_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long AND_CHA,JON_CHA + .long AND_CHA,RCE_CHA + .long AND_CHA,ZID_CHA + .long AND_CHA,CUR_CHA + + .long JON_CHA,AND_CHA + .long JON_CHA,RCE_CHA + .long JON_CHA,ZID_CHA + .long JON_CHA,CUR_CHA + + .long RCE_CHA,AND_CHA + .long RCE_CHA,JON_CHA + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long ZID_CHA,AND_CHA + .long ZID_CHA,JON_CHA + .long ZID_CHA,RCE_CHA + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,AND_CHA + .long CUR_CHA,JON_CHA + .long CUR_CHA,RCE_CHA + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long JAC_DAL,KID_DAL + .long JAC_DAL,MAS_DAL + .long JAC_DAL,JON_DAL + .long JAC_DAL,MCC_DAL + + .long KID_DAL,JAC_DAL + .long KID_DAL,MAS_DAL + .long KID_DAL,JON_DAL + .long KID_DAL,MCC_DAL + + .long MAS_DAL,JAC_DAL + .long MAS_DAL,KID_DAL + .long MAS_DAL,JON_DAL + .long MAS_DAL,MCC_DAL + + .long JON_DAL,JAC_DAL + .long JON_DAL,KID_DAL + .long JON_DAL,MAS_DAL + .long JON_DAL,MCC_DAL + + .long MCC_DAL,JAC_DAL + .long MCC_DAL,KID_DAL + .long MCC_DAL,MAS_DAL + .long MCC_DAL,JON_DAL + +;06 DENVER + .long RAF_DEN,MUT_DEN + .long RAF_DEN,MCD_DEN + .long RAF_DEN,ROS_DEN + .long RAF_DEN,ELL_DEN + + .long MUT_DEN,RAF_DEN + .long MUT_DEN,MCD_DEN + .long MUT_DEN,ROS_DEN + .long MUT_DEN,ELL_DEN + + .long MCD_DEN,RAF_DEN + .long MCD_DEN,MUT_DEN + .long MCD_DEN,ROS_DEN + .long MCD_DEN,ELL_DEN + + .long ROS_DEN,RAF_DEN + .long ROS_DEN,MUT_DEN + .long ROS_DEN,MCD_DEN + .long ROS_DEN,ELL_DEN + + .long ELL_DEN,RAF_DEN + .long ELL_DEN,MUT_DEN + .long ELL_DEN,MCD_DEN + .long ELL_DEN,ROS_DEN + +;07 DETROIT + .long DUM_DET,HIL_DET + .long DUM_DET,MLS_DET + .long DUM_DET,THR_DET + .long DUM_DET,HOU_DET + + .long HIL_DET,DUM_DET + .long HIL_DET,MLS_DET + .long HIL_DET,THR_DET + .long HIL_DET,HOU_DET + + .long MLS_DET,DUM_DET + .long MLS_DET,HIL_DET + .long MLS_DET,THR_DET + .long MLS_DET,HOU_DET + + .long THR_DET,DUM_DET + .long THR_DET,HIL_DET + .long THR_DET,MLS_DET + .long THR_DET,HOU_DET + + .long HOU_DET,DUM_DET + .long HOU_DET,HIL_DET + .long HOU_DET,MLS_DET + .long HOU_DET,THR_DET + +;08 GOLDEN STATE + .long WLS_GLD,SPR_GLD + .long WLS_GLD,SKL_GLD + .long WLS_GLD,SMI_GLD + .long WLS_GLD,MUL_GLD + + .long SPR_GLD,WLS_GLD + .long SPR_GLD,SKL_GLD + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long SKL_GLD,WLS_GLD + .long SKL_GLD,SPR_GLD + .long SKL_GLD,SMI_GLD + .long SKL_GLD,MUL_GLD + + .long SMI_GLD,WLS_GLD + .long SMI_GLD,SPR_GLD + .long SMI_GLD,SKL_GLD + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,WLS_GLD + .long MUL_GLD,SPR_GLD + .long MUL_GLD,SKL_GLD + .long MUL_GLD,SMI_GLD + +;09 HOUSTON + .long OLA_HOU,DRX_HOU + .long OLA_HOU,HOR_HOU + .long OLA_HOU,CAS_HOU + .long OLA_HOU,SMT_HOU + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HOR_HOU + .long DRX_HOU,CAS_HOU + .long DRX_HOU,SMT_HOU + + .long HOR_HOU,OLA_HOU + .long HOR_HOU,DRX_HOU + .long HOR_HOU,CAS_HOU + .long HOR_HOU,SMT_HOU + + .long CAS_HOU,OLA_HOU + .long CAS_HOU,DRX_HOU + .long CAS_HOU,HOR_HOU + .long CAS_HOU,SMT_HOU + + .long SMT_HOU,OLA_HOU + .long SMT_HOU,DRX_HOU + .long SMT_HOU,HOR_HOU + .long SMT_HOU,CAS_HOU + +;10 INDIANA + .long MIL_IND,DAV_IND + .long MIL_IND,SMI_IND + .long MIL_IND,MCK_IND + .long MIL_IND,JAC_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,SMI_IND + .long DAV_IND,MCK_IND + .long DAV_IND,JAC_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAV_IND + .long SMI_IND,MCK_IND + .long SMI_IND,JAC_IND + + .long MCK_IND,MIL_IND + .long MCK_IND,DAV_IND + .long MCK_IND,SMI_IND + .long MCK_IND,JAC_IND + + .long JAC_IND,MIL_IND + .long JAC_IND,DAV_IND + .long JAC_IND,SMI_IND + .long JAC_IND,MCK_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS +;FIX!!! +;JOH_LAK for JON_LAK + .long VAN_LAK,DIV_LAK + .long VAN_LAK,CEB_LAK + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long DIV_LAK,VAN_LAK + .long DIV_LAK,CEB_LAK + .long DIV_LAK,CAM_LAK + .long DIV_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,DIV_LAK + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,DIV_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,DIV_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,WIL_MIA + .long MOU_MIA,CHP_MIA + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long WIL_MIA,MOU_MIA + .long WIL_MIA,CHP_MIA + .long WIL_MIA,HRD_MIA + .long WIL_MIA,DAN_MIA + + .long CHP_MIA,MOU_MIA + .long CHP_MIA,WIL_MIA + .long CHP_MIA,HRD_MIA + .long CHP_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,WIL_MIA + .long HRD_MIA,CHP_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,WIL_MIA + .long DAN_MIA,CHP_MIA + .long DAN_MIA,HRD_MIA + +;14 MILWAUKEE + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + .long BAK_MLW,BEN_MLW + .long BAK_MLW,DOU_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,RES_MLW + .long ROB_MLW,BEN_MLW + .long ROB_MLW,DOU_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ROB_MLW + .long RES_MLW,BEN_MLW + .long RES_MLW,DOU_MLW + + .long BEN_MLW,BAK_MLW + .long BEN_MLW,ROB_MLW + .long BEN_MLW,RES_MLW + .long BEN_MLW,DOU_MLW + + .long DOU_MLW,BAK_MLW + .long DOU_MLW,ROB_MLW + .long DOU_MLW,RES_MLW + .long DOU_MLW,BEN_MLW + +;15 MINNESOTTA + .long RID_MIN,LNG_MIN + .long RID_MIN,WEB_MIN + .long RID_MIN,GUG_MIN + .long RID_MIN,GAR_MIN + + .long LNG_MIN,RID_MIN + .long LNG_MIN,WEB_MIN + .long LNG_MIN,GUG_MIN + .long LNG_MIN,GAR_MIN + + .long WEB_MIN,RID_MIN + .long WEB_MIN,LNG_MIN + .long WEB_MIN,GUG_MIN + .long WEB_MIN,GAR_MIN + + .long GUG_MIN,RID_MIN + .long GUG_MIN,LNG_MIN + .long GUG_MIN,WEB_MIN + .long GUG_MIN,GAR_MIN + + .long GAR_MIN,RID_MIN + .long GAR_MIN,LNG_MIN + .long GAR_MIN,WEB_MIN + .long GAR_MIN,GUG_MIN + +;16 NEW JERSEY +;GLL is Gill +;GIL is Gilliam + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,GIL_NEJ + .long GLL_NEJ,OBA_NEJ + .long GLL_NEJ,EDW_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,GIL_NEJ + .long BRA_NEJ,OBA_NEJ + .long BRA_NEJ,EDW_NEJ + + .long GIL_NEJ,GLL_NEJ + .long GIL_NEJ,BRA_NEJ + .long GIL_NEJ,OBA_NEJ + .long GIL_NEJ,EDW_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,BRA_NEJ + .long OBA_NEJ,GIL_NEJ + .long OBA_NEJ,EDW_NEJ + + .long EDW_NEJ,GLL_NEJ + .long EDW_NEJ,BRA_NEJ + .long EDW_NEJ,GIL_NEJ + .long EDW_NEJ,OBA_NEJ + +;17 NEW YORK + .long EWG_NEY,MAS_NEY + .long EWG_NEY,HPR_NEY + .long EWG_NEY,OAK_NEY + .long EWG_NEY,STA_NEY + + .long MAS_NEY,EWG_NEY + .long MAS_NEY,HPR_NEY + .long MAS_NEY,OAK_NEY + .long MAS_NEY,STA_NEY + + .long HPR_NEY,EWG_NEY + .long HPR_NEY,MAS_NEY + .long HPR_NEY,OAK_NEY + .long HPR_NEY,STA_NEY + + .long OAK_NEY,EWG_NEY + .long OAK_NEY,MAS_NEY + .long OAK_NEY,HPR_NEY + .long OAK_NEY,STA_NEY + + .long STA_NEY,EWG_NEY + .long STA_NEY,MAS_NEY + .long STA_NEY,HPR_NEY + .long STA_NEY,OAK_NEY + +;18 ORLANDO + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + .long HAR_ORL,KON_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + .long GRT_ORL,KON_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + .long AND_ORL,KON_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + .long SCO_ORL,KON_ORL + + .long KON_ORL,HAR_ORL + .long KON_ORL,GRT_ORL + .long KON_ORL,AND_ORL + .long KON_ORL,SCO_ORL + +;19 PHILADELPHIA + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + .long STA_PHL,RUF_PHL + .long STA_PHL,MAX_PHL + + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + .long COL_PHL,RUF_PHL + .long COL_PHL,MAX_PHL + + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + .long WEA_PHL,RUF_PHL + .long WEA_PHL,MAX_PHL + + .long RUF_PHL,STA_PHL + .long RUF_PHL,COL_PHL + .long RUF_PHL,WEA_PHL + .long RUF_PHL,MAX_PHL + + .long MAX_PHL,STA_PHL + .long MAX_PHL,COL_PHL + .long MAX_PHL,WEA_PHL + .long MAX_PHL,RUF_PHL + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,PER_PHX + .long JOH_PHX,FIN_PHX + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,PER_PHX + .long TIS_PHX,FIN_PHX + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,PER_PHX + .long MAN_PHX,FIN_PHX + + .long PER_PHX,JOH_PHX + .long PER_PHX,TIS_PHX + .long PER_PHX,MAN_PHX + .long PER_PHX,FIN_PHX + + .long FIN_PHX,JOH_PHX + .long FIN_PHX,TIS_PHX + .long FIN_PHX,MAN_PHX + .long FIN_PHX,PER_PHX + +;21 PORTLAND + .long STR_PRT,ROB_PRT + .long STR_PRT,SAB_PRT + .long STR_PRT,WIL_PRT + .long STR_PRT,CHI_PRT + + .long ROB_PRT,STR_PRT + .long ROB_PRT,SAB_PRT + .long ROB_PRT,WIL_PRT + .long ROB_PRT,CHI_PRT + + .long SAB_PRT,STR_PRT + .long SAB_PRT,ROB_PRT + .long SAB_PRT,WIL_PRT + .long SAB_PRT,CHI_PRT + + .long WIL_PRT,STR_PRT + .long WIL_PRT,ROB_PRT + .long WIL_PRT,SAB_PRT + .long WIL_PRT,CHI_PRT + + .long CHI_PRT,STR_PRT + .long CHI_PRT,ROB_PRT + .long CHI_PRT,SAB_PRT + .long CHI_PRT,WIL_PRT + +;22 SACRAMENTO + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,MAR_SAC + .long OWE_SAC,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,GRA_SAC + .long RIC_SAC,MAR_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RIC_SAC + .long GRA_SAC,MAR_SAC + .long GRA_SAC,EDN_SAC + + .long MAR_SAC,OWE_SAC + .long MAR_SAC,RIC_SAC + .long MAR_SAC,GRA_SAC + .long MAR_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + .long EDN_SAC,MAR_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,JON_SAN + .long ELL_SAN,PRS_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,JON_SAN + .long ROB_SAN,PRS_SAN + .long ROB_SAN,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,PRS_SAN + .long JON_SAN,DEL_SAN + + .long PRS_SAN,ELL_SAN + .long PRS_SAN,ROB_SAN + .long PRS_SAN,JON_SAN + .long PRS_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,JON_SAN + .long DEL_SAN,PRS_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO +;FIX!!! +;Put back MUR_TOR when mugshot gets done +;MUR_TOR + .long ROG_TOR,STO_TOR + .long ROG_TOR,ROB_TOR + .long ROG_TOR,MIL_TOR + .long ROG_TOR,MUR_TOR + + .long STO_TOR,ROG_TOR + .long STO_TOR,ROB_TOR + .long STO_TOR,MIL_TOR + .long STO_TOR,MUR_TOR + + .long ROB_TOR,ROG_TOR + .long ROB_TOR,STO_TOR + .long ROB_TOR,MIL_TOR + .long ROB_TOR,MUR_TOR + + .long MIL_TOR,ROG_TOR + .long MIL_TOR,STO_TOR + .long MIL_TOR,ROB_TOR + .long MIL_TOR,MUR_TOR + + .long MUR_TOR,ROG_TOR + .long MUR_TOR,STO_TOR + .long MUR_TOR,ROB_TOR + .long MUR_TOR,MIL_TOR + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,BEN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,BEN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,BEN_UTA + .long HRN_UTA,MOR_UTA + + .long BEN_UTA,STK_UTA + .long BEN_UTA,MLN_UTA + .long BEN_UTA,HRN_UTA + .long BEN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + .long MOR_UTA,BEN_UTA + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,SCO_VAN + .long ANT_VAN,REV_VAN + .long ANT_VAN,MUR_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,SCO_VAN + .long EDW_VAN,REV_VAN + .long EDW_VAN,MUR_VAN + + .long SCO_VAN,ANT_VAN + .long SCO_VAN,EDW_VAN + .long SCO_VAN,REV_VAN + .long SCO_VAN,MUR_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + .long REV_VAN,SCO_VAN + .long REV_VAN,MUR_VAN + + .long MUR_VAN,ANT_VAN + .long MUR_VAN,EDW_VAN + .long MUR_VAN,SCO_VAN + .long MUR_VAN,REV_VAN + +;28 WASHINGTON + .long HWD_WAS,WEB_WAS + .long HWD_WAS,CHE_WAS + .long HWD_WAS,PAC_WAS + .long HWD_WAS,MUR_WAS + + .long WEB_WAS,HWD_WAS + .long WEB_WAS,CHE_WAS + .long WEB_WAS,PAC_WAS + .long WEB_WAS,MUR_WAS + + .long CHE_WAS,HWD_WAS + .long CHE_WAS,WEB_WAS + .long CHE_WAS,PAC_WAS + .long CHE_WAS,MUR_WAS + + .long PAC_WAS,HWD_WAS + .long PAC_WAS,WEB_WAS + .long PAC_WAS,CHE_WAS + .long PAC_WAS,MUR_WAS + + .long MUR_WAS,HWD_WAS + .long MUR_WAS,WEB_WAS + .long MUR_WAS,CHE_WAS + .long MUR_WAS,PAC_WAS + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;00 ATLANTA + .long AUGMON,BLAYLOCK + .long AUGMON,SSMITH + .long AUGMON,LAETTNER + .long AUGMON,KNORMAN + + .long BLAYLOCK,AUGMON + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long SSMITH,AUGMON + .long SSMITH,BLAYLOCK + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,AUGMON + .long LAETTNER,BLAYLOCK + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,AUGMON + .long KNORMAN,BLAYLOCK + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,BARROS + .long BROWN,MONTROSS + .long BROWN,RADJA + .long BROWN,FOX + + .long BARROS,BROWN + .long BARROS,MONTROSS + .long BARROS,RADJA + .long BARROS,FOX + + .long MONTROSS,BROWN + .long MONTROSS,BARROS + .long MONTROSS,RADJA + .long MONTROSS,FOX + + .long RADJA,BROWN + .long RADJA,BARROS + .long RADJA,MONTROSS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,BARROS + .long FOX,MONTROSS + .long FOX,RADJA + + +;02 CHARLOTTE + .long KANDERSON,JOHNSN_L + .long KANDERSON,RICE + .long KANDERSON,ZIDEK + .long KANDERSON,CURRY + + .long JOHNSN_L,KANDERSON + .long JOHNSN_L,RICE + .long JOHNSN_L,ZIDEK + .long JOHNSN_L,CURRY + + .long RICE,KANDERSON + .long RICE,JOHNSN_L + .long RICE,ZIDEK + .long RICE,CURRY + + .long ZIDEK,KANDERSON + .long ZIDEK,JOHNSN_L + .long ZIDEK,RICE + .long ZIDEK,CURRY + + .long CURRY,KANDERSON + .long CURRY,JOHNSN_L + .long CURRY,RICE + .long CURRY,ZIDEK + + + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + + + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + + +;05 DALLAS + .long JACK,KIDD + .long JACK,MASH + .long JACK,PJONES + .long JACK,MCCLOUD + + .long KIDD,JACK + .long KIDD,MASH + .long KIDD,PJONES + .long KIDD,MCCLOUD + + .long MASH,JACK + .long MASH,KIDD + .long MASH,PJONES + .long MASH,MCCLOUD + + .long PJONES,JACK + .long PJONES,KIDD + .long PJONES,MASH + .long PJONES,MCCLOUD + + .long MCCLOUD,JACK + .long MCCLOUD,KIDD + .long MCCLOUD,MASH + .long MCCLOUD,PJONES + + +;06 DENVER + .long ABDULRAU,MUTUMBO + .long ABDULRAU,MCDYESS + .long ABDULRAU,ROSE + .long ABDULRAU,DELLIS + + .long MUTUMBO,ABDULRAU + .long MUTUMBO,MCDYESS + .long MUTUMBO,ROSE + .long MUTUMBO,DELLIS + + .long MCDYESS,ABDULRAU + .long MCDYESS,MUTUMBO + .long MCDYESS,ROSE + .long MCDYESS,DELLIS + + .long ROSE,ABDULRAU + .long ROSE,MUTUMBO + .long ROSE,MCDYESS + .long ROSE,DELLIS + + .long DELLIS,ABDULRAU + .long DELLIS,MUTUMBO + .long DELLIS,MCDYESS + .long DELLIS,ROSE + +;07 DETROIT + .long DUMARS,GHILL + .long DUMARS,TMILLS + .long DUMARS,THORPE + .long DUMARS,HOUSTON + + .long GHILL,DUMARS + .long GHILL,TMILLS + .long GHILL,THORPE + .long GHILL,HOUSTON + + .long TMILLS,DUMARS + .long TMILLS,GHILL + .long TMILLS,THORPE + .long TMILLS,HOUSTON + + .long THORPE,DUMARS + .long THORPE,GHILL + .long THORPE,TMILLS + .long THORPE,HOUSTON + + .long HOUSTON,DUMARS + .long HOUSTON,GHILL + .long HOUSTON,TMILLS + .long HOUSTON,THORPE + + +;08 GOLDEN STATE + .long WILLIS,SPREWELL + .long WILLIS,SEIKALY + .long WILLIS,JSMITH + .long WILLIS,MULLIN + + .long SPREWELL,WILLIS + .long SPREWELL,SEIKALY + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long SEIKALY,WILLIS + .long SEIKALY,SPREWELL + .long SEIKALY,JSMITH + .long SEIKALY,MULLIN + + .long JSMITH,WILLIS + .long JSMITH,SPREWELL + .long JSMITH,SEIKALY + .long JSMITH,MULLIN + + .long MULLIN,WILLIS + .long MULLIN,SPREWELL + .long MULLIN,SEIKALY + .long MULLIN,JSMITH + + + +;09 HOUSTON + .long OLAJUWON,DREXLER + .long OLAJUWON,HORRY + .long OLAJUWON,CASSELL + .long OLAJUWON,SMITH + + .long DREXLER,OLAJUWON + .long DREXLER,HORRY + .long DREXLER,CASSELL + .long DREXLER,SMITH + + .long HORRY,OLAJUWON + .long HORRY,DREXLER + .long HORRY,CASSELL + .long HORRY,SMITH + + .long CASSELL,OLAJUWON + .long CASSELL,DREXLER + .long CASSELL,HORRY + .long CASSELL,SMITH + + .long SMITH,OLAJUWON + .long SMITH,DREXLER + .long SMITH,HORRY + .long SMITH,CASSELL + +;10 INDIANA + .long MILLER,DDAVIS + .long MILLER,SMITS + .long MILLER,MCKEE2 + .long MILLER,MJACKSON + + .long DDAVIS,MILLER + .long DDAVIS,SMITS + .long DDAVIS,MCKEE2 + .long DDAVIS,MJACKSON + + .long SMITS,MILLER + .long SMITS,DDAVIS + .long SMITS,MCKEE2 + .long SMITS,MJACKSON + + .long MCKEE2,MILLER + .long MCKEE2,DDAVIS + .long MCKEE2,SMITS + .long MCKEE2,MJACKSON + + .long MJACKSON,MILLER + .long MJACKSON,DDAVIS + .long MJACKSON,SMITS + .long MJACKSON,MCKEE2 + + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS +;MJOHNSON or EJONES + .long VANEXEL,DIVAC + .long VANEXEL,CEBALLOS + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long DIVAC,VANEXEL + .long DIVAC,CEBALLOS + .long DIVAC,CAMPBELL + .long DIVAC,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,DIVAC + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,DIVAC + .long CAMPBELL,CEBALLOS + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,DIVAC + .long EJONES,CEBALLOS + .long EJONES,CAMPBELL + + +;13 MIAMI + .long MOURN,WWILLIAM + .long MOURN,CHAPMAN + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long WWILLIAM,MOURN + .long WWILLIAM,CHAPMAN + .long WWILLIAM,THARDAWAY + .long WWILLIAM,DANILOVI + + .long CHAPMAN,MOURN + .long CHAPMAN,WWILLIAM + .long CHAPMAN,THARDAWAY + .long CHAPMAN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,WWILLIAM + .long THARDAWAY,CHAPMAN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,WWILLIAM + .long DANILOVI,CHAPMAN + .long DANILOVI,THARDAWAY + + +;14 MILWAUKEE + .long BAKER,GROBINSO + .long BAKER,RESPERT + .long BAKER,BENJAMIN + .long BAKER,DOUGLAS + + .long GROBINSO,BAKER + .long GROBINSO,RESPERT + .long GROBINSO,BENJAMIN + .long GROBINSO,DOUGLAS + + .long RESPERT,BAKER + .long RESPERT,GROBINSO + .long RESPERT,BENJAMIN + .long RESPERT,DOUGLAS + + .long BENJAMIN,BAKER + .long BENJAMIN,GROBINSO + .long BENJAMIN,RESPERT + .long BENJAMIN,DOUGLAS + + .long DOUGLAS,BAKER + .long DOUGLAS,GROBINSO + .long DOUGLAS,RESPERT + .long DOUGLAS,BENJAMIN + + +;15 MINNESOTTA + .long RIDER,LANG + .long RIDER,WEBB + .long RIDER,GUGLI2 + .long RIDER,GARNETT + + .long LANG,RIDER + .long LANG,WEBB + .long LANG,GUGLI2 + .long LANG,GARNETT + + .long WEBB,RIDER + .long WEBB,LANG + .long WEBB,GUGLI2 + .long WEBB,GARNETT + + .long GUGLI2,RIDER + .long GUGLI2,LANG + .long GUGLI2,WEBB + .long GUGLI2,GARNETT + + .long GARNETT,RIDER + .long GARNETT,LANG + .long GARNETT,WEBB + .long GARNETT,GUGLI2 + + +;16 NEW JERSEY + .long GILL,BRADLEY + .long GILL,GILLIAM + .long GILL,OBANNON + .long GILL,KEDWARDS + + .long BRADLEY,GILL + .long BRADLEY,GILLIAM + .long BRADLEY,OBANNON + .long BRADLEY,KEDWARDS + + .long GILLIAM,GILL + .long GILLIAM,BRADLEY + .long GILLIAM,OBANNON + .long GILLIAM,KEDWARDS + + .long OBANNON,GILL + .long OBANNON,BRADLEY + .long OBANNON,GILLIAM + .long OBANNON,KEDWARDS + + .long KEDWARDS,GILL + .long KEDWARDS,BRADLEY + .long KEDWARDS,GILLIAM + .long KEDWARDS,OBANNON + + +;17 NEW YORK + .long EWING,MASON + .long EWING,HARPER_D + .long EWING,OAKLEY + .long EWING,STARKS + + .long MASON,EWING + .long MASON,HARPER_D + .long MASON,OAKLEY + .long MASON,STARKS + + .long HARPER_D,EWING + .long HARPER_D,MASON + .long HARPER_D,OAKLEY + .long HARPER_D,STARKS + + .long OAKLEY,EWING + .long OAKLEY,MASON + .long OAKLEY,HARPER_D + .long OAKLEY,STARKS + + .long STARKS,EWING + .long STARKS,MASON + .long STARKS,HARPER_D + .long STARKS,OAKLEY + + + +;18 ORLANDO + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + .long AHARDAWAY,KONCAK + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + .long GRANT_HC,KONCAK + + .long NANDERSON,AHARDAWAY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + .long NANDERSON,KONCAK + + .long DSCOTT,AHARDAWAY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + .long DSCOTT,KONCAK + + .long KONCAK,AHARDAWAY + .long KONCAK,GRANT_HC + .long KONCAK,NANDERSON + .long KONCAK,DSCOTT + +;19 PHILADELPHIA + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + .long STACKHOU,RUFFIN + .long STACKHOU,VMAXWELL + + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + .long COLEMAN,RUFFIN + .long COLEMAN,VMAXWELL + + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + .long WEATHSPN,RUFFIN + .long WEATHSPN,VMAXWELL + + .long RUFFIN,STACKHOU + .long RUFFIN,COLEMAN + .long RUFFIN,WEATHSPN + .long RUFFIN,VMAXWELL + + .long VMAXWELL,STACKHOU + .long VMAXWELL,COLEMAN + .long VMAXWELL,WEATHSPN + .long VMAXWELL,RUFFIN + + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,WPERSON + .long KJOHNSON,FINLEY + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,WPERSON + .long TISDALE,FINLEY + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,WPERSON + .long MANNING,FINLEY + + .long WPERSON,KJOHNSON + .long WPERSON,TISDALE + .long WPERSON,MANNING + .long WPERSON,FINLEY + + .long FINLEY,KJOHNSON + .long FINLEY,TISDALE + .long FINLEY,MANNING + .long FINLEY,WPERSON + + +;21 PORTLAND + .long STRICKLA,CROBINSON + .long STRICKLA,SABONIS + .long STRICKLA,BWILLIAM + .long STRICKLA,CHILDRES + + .long CROBINSON,STRICKLA + .long CROBINSON,SABONIS + .long CROBINSON,BWILLIAM + .long CROBINSON,CHILDRES + + .long SABONIS,STRICKLA + .long SABONIS,CROBINSON + .long SABONIS,BWILLIAM + .long SABONIS,CHILDRES + + .long BWILLIAM,STRICKLA + .long BWILLIAM,CROBINSON + .long BWILLIAM,SABONIS + .long BWILLIAM,CHILDRES + + .long CHILDRES,STRICKLA + .long CHILDRES,CROBINSON + .long CHILDRES,SABONIS + .long CHILDRES,BWILLIAM + + +;22 SACRAMENTO + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,MARCIULO + .long BOWENS,EDNEY + + .long RICH,BOWENS + .long RICH,BGRANT + .long RICH,MARCIULO + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,RICH + .long BGRANT,MARCIULO + .long BGRANT,EDNEY + + .long MARCIULO,BOWENS + .long MARCIULO,RICH + .long MARCIULO,BGRANT + .long MARCIULO,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,RICH + .long EDNEY,BGRANT + .long EDNEY,MARCIULO + + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,AJOHNSON + .long ELLIOT2,PERSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,AJOHNSON + .long DROBINSON,PERSON + .long DROBINSON,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,PERSON + .long AJOHNSON,DELNEGRO + + .long PERSON,ELLIOT2 + .long PERSON,DROBINSON + .long PERSON,AJOHNSON + .long PERSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,AJOHNSON + .long DELNEGRO,PERSON + + + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + + +;25 TORONTO + .long CROGERS,STOUDAMI + .long CROGERS,ROBERTSON + .long CROGERS,OMILLER + .long CROGERS,TMURRAY + + .long STOUDAMI,CROGERS + .long STOUDAMI,ROBERTSON + .long STOUDAMI,OMILLER + .long STOUDAMI,TMURRAY + + .long ROBERTSON,CROGERS + .long ROBERTSON,STOUDAMI + .long ROBERTSON,OMILLER + .long ROBERTSON,TMURRAY + + .long OMILLER,CROGERS + .long OMILLER,STOUDAMI + .long OMILLER,ROBERTSON + .long OMILLER,TMURRAY + + .long TMURRAY,CROGERS + .long TMURRAY,STOUDAMI + .long TMURRAY,ROBERTSON + .long TMURRAY,OMILLER + + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,BENOIT + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,BENOIT + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,BENOIT + .long HORNACEK,CMORRIS + + .long BENOIT,STOCKTON + .long BENOIT,MALONE_K + .long BENOIT,HORNACEK + .long BENOIT,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + .long CMORRIS,BENOIT + + + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,SCOTT + .long ANTHONY,BREEVES + .long ANTHONY,EMURDOCK + + .long EDWARDS,ANTHONY + .long EDWARDS,SCOTT + .long EDWARDS,BREEVES + .long EDWARDS,EMURDOCK + + .long SCOTT,ANTHONY + .long SCOTT,EDWARDS + .long SCOTT,BREEVES + .long SCOTT,EMURDOCK + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + .long BREEVES,SCOTT + .long BREEVES,EMURDOCK + + .long EMURDOCK,ANTHONY + .long EMURDOCK,EDWARDS + .long EMURDOCK,SCOTT + .long EMURDOCK,BREEVES + + +;28 WASHINGTON + .long JHOWARD,WEBBER + .long JHOWARD,CHEANEY + .long JHOWARD,PACK + .long JHOWARD,MURESAN + + .long WEBBER,JHOWARD + .long WEBBER,CHEANEY + .long WEBBER,PACK + .long WEBBER,MURESAN + + .long CHEANEY,JHOWARD + .long CHEANEY,WEBBER + .long CHEANEY,PACK + .long CHEANEY,MURESAN + + .long PACK,JHOWARD + .long PACK,WEBBER + .long PACK,CHEANEY + .long PACK,MURESAN + + .long MURESAN,JHOWARD + .long MURESAN,WEBBER + .long MURESAN,CHEANEY + .long MURESAN,PACK + + + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end + diff --git a/BACKUP/CODE113M/SOUNDS.ASM b/BACKUP/CODE113M/SOUNDS.ASM new file mode 100644 index 0000000..bce3b9c --- /dev/null +++ b/BACKUP/CODE113M/SOUNDS.ASM @@ -0,0 +1,1234 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 + SX diag_cursor, >0101,27, >27c + SX diag_select, >0101,27, >280 + SX bx_slide_snd,>0001,28, >1f6 + SX update_adj, >0501,27, >278 + SX adj_menu_ext,>0501,27, >280 + SX adj_menu_ent,>0501,27, >280 + SX error_found, >4001,66, >367 + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd + SX warn_snd, >1504,20, >1fd + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc + SX aly_pass_snd,>1903,104,>2e2 + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white + +;dunk sounds + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + + clr a14 + move a14,@doing_dcs_reset + + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + + JSRP QSNDRST + DIE + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/CODE113M/SPEECH.ASM b/BACKUP/CODE113M/SPEECH.ASM new file mode 100644 index 0000000..44c2a56 --- /dev/null +++ b/BACKUP/CODE113M/SPEECH.ASM @@ -0,0 +1,4377 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 + SX nba_hngtm_sp,>200D,99, >b02 + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 + SX with_sp, >100D,18, >aef + SX leadng_by_sp,>100D,64, >84e + SX leads_by_sp, >100D,58, >84b + SX lead_by_sp, >100D,43, >849 + SX by_sp, >100D,19, >851 + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + + SX downby_sp, >100D,41, >845 + SX behind_by_sp,>100D,56, >853 + SX catchg_up_sp,>100D,41, >873 + + SX gme_tied1_sp,>100D,44, >864 + SX gme_tied2_sp,>100D,49, >864 + SX tied_at_sp, >100D,99, >866 + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 + SX tp_circle_sp,>100D,63, >b1c ;7e5 + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b + SX lev_tmate_sp,>120D,83, >b3d + SX is_legal_sp ,>100D,65, >b21 + + SX tm_onfire_sp,>140D,76, >b3e + SX bth_onfre_sp,>100D,80, >b3f + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 + SX lch_atbkt_sp,>110D,100,>980 + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 + + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,69, >91b + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 + SX incredble_sp,>100D,49, >970 +; SX supr_dnk_sp, >100D,61, >971 ;** + SX mnstr_jam_sp,>100D,70, >971 + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is + SX its_hstry_sp,>100D,47, >861 + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f + SX tks_rbnd3_sp,>100D,96, >a61 + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c + SX look_out_sp, >130D,41, >a6f + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 + SX shvd_asde_sp,>090D,67, >aca + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,77,1300 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,83,1304 ;BLAYLOCK, mookie + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,66,1324 ;BARROS, dana + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,64,1620 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,74,1344 ;JOHNSN_L, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,70,1352 ;ZIDEK, george + .word >100D,64,1356 ;CURRY, dell + + .word >100D,72,1360 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,62,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, tonic + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,67,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,83,1400 ;JACKSON, jim ( DALLAS ) + .word >100D,68,1404 ;KIDD, jason + .word >100D,88,1408 ;MASHBURN, jamal + .word >100D,74,1412 ;JONES, popeye + .word >100D,84,1416 ;McCLOUD, george + + .word >100D,89,1420 ;ABDUL-RAUF ( DENVER ) + .word >100D,103,1424 ;MUTUMBO + .word >100D,96,1428 ;McDYESS + .word >100D,71,1432 ;ROSE + .word >100D,51,1436 ;ELLIS + + .word >100D,74,1440 ;DUMARS ( DETROIT ) + .word >100D,63,1444 ;HILL, grant + .word >100D,76,1448 ;MILLS, terry + .word >100D,65,1452 ;THORPE + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,61,1568 ;WILLIS ( GOLDEN STATE ) + .word >100D,76,1464 ;SPREWELL + .word >100D,84,1468 ;SEIKALY + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN + + .word >100D,118,1480 ;OLAJUWON ( HOUSTON ) + .word >100D,76,1484 ;DREXLER + .word >100D,80,1488 ;HORRY + .word >100D,70,1492 ;CASSELL + .word >100D,63,1496 ;SMITH, kenny + + .word >100D,85,1500 ;MILLER ( INDIANA ) + .word >100D,71,1504 ;DAVIS, dale + .word >100D,71,1508 ;SMITS + .word >100D,77,1512 ;McKEE + .word >100D,78,1516 ;JACKSON, mark + + .word >100D,51,1520 ;VAUGHT ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDS + .word >100D,72,1536 ;BARRY + + .word >100D,76,1540 ;VAN EXEL ( LAKERS ) + .word >100D,78,1544 ;DIVAC + .word >100D,83,1548 ;CEBALLOS + .word >100D,62,1552 ;CAMPBELL + .word >100D,65,1556 ;MAGIC JOHNSON +; .word >100D,36,1701 ;MAGIC JOHNSON + + .word >100D,97,1560 ;MOURNING ( MIAMI ) + .word >100D,78,1740 ;WILLIAMS, walt + .word >100D,58,1961 ;REX CHAPMAN + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC + + .word >100D,70,1580 ;BAKER vin ( MILWAUKEE ) + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,73,1588 ;RESPERT + .word >100D,69,1592 ;BENJAMIN + .word >100D,71,1596 ;DOUGLAS + + .word >100D,94,1600 ;RIDER ( MINNESOTTA ) + .word >100D,68,1955 ;ANDREW LANG + .word >100D,57,1964 ;SPUD WEBB + .word >100D,73,1612 ;GUGLIOTTA + .word >100D,72,1616 ;GARNETT + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,81,1624 ;BRADLEY + .word >100D,54,1628 ;GILLIAM + .word >100D,61,1632 ;O'BANNON + .word >100D,61,1636 ;EDWARDS, kevin + + .word >100D,82,1640 ;EWING ( NEW YORK ) + .word >100D,80,1644 ;MASON + .word >100D,71,1648 ;HARPER, derek + .word >100D,81,1652 ;OAKLEY + .word >100D,70,1656 ;STARKS + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + .word >100D,72,1676 ;KONCAK, jon + + .word >100D,96,1680 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,110,1688 ;WEATHERSPOON + .word >100D,60,1967 ;RUFFIN, trevor + .word >100D,90,1696 ;MAXWELL, vernon + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE + .word >100D,69,1708 ;MANNING + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY + + .word >100D,77,1720 ;STRICKLAND ( PORTLAND ) + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,93,1728 ;SABONIS + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,76,1736 ;CHILDRESS + + .word >100D,74,1564 ;OWENS ( SACRAMENTO ) + .word >100D,82,1744 ;RICHMOND + .word >100D,85,1748 ;GRANT, brian + .word >100D,100,1752 ;MARCIULIONIS + .word >100D,55,1756 ;EDNEY + + .word >100D,69,1760 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,91,1764 ;ROBINSON, david + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,71,1772 ;PERSON, chuck + .word >100D,82,1776 ;DEL NEGRO + + .word >100D,68,1780 ;KEMP ( SEATTLE ) + .word >100D,74,1784 ;PAYTON + .word >100D,57,1788 ;SCHREMPF + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD + + .word >100D,66,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,92,1804 ;STOUDAMIRE + .word >100D,58,1952 ;ALVIN ROBERTSON + .word >100D,67,1812 ;MILLER + .word >100D,53,1816 ;MURRAY, tracy + + .word >100D,79,1820 ;STOCKTON ( UTAH ) + .word >100D,68,1824 ;MALONE + .word >100D,70,1828 ;HORNACEK + .word >100D,69,1832 ;BENOIT + .word >100D,64,1836 ;MORRIS + + .word >100D,78,1840 ;ANTHONY ( VANCOUVER ) + .word >100D,68,1844 ;EDWARDS, blue + .word >100D,56,1958 ;BYRON SCOTT + .word >100D,74,1852 ;REEVES + .word >100D,63,1856 ;MURDOCK + + .word >100D,75,1860 ;HOWARD ( WASHINGTON ) + .word >100D,75,1864 ;WEBBER + .word >100D,69,1868 ;CHEANEY + .word >100D,70,1872 ;PACK + .word >100D,92,1876 ;MURESAN + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,40,1303 ;TO AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,40,1307 ;TO BLAYLOCK, mookie + .word >100D,40,1311 ;TO SMITH, steve + .word >100D,40,1607 ;TO LAETNER + .word >100D,40,1319 ;TO NORMAN, ken + + .word >100D,40,1323 ;TO BROWN, dee ( BOSTON ) + .word >100D,40,1327 ;TO BARROS, dana + .word >100D,40,1331 ;TO MONTROSS, eric + .word >100D,40,1335 ;TO RADJA, dino + .word >100D,40,1339 ;TO FOX, rick + + .word >100D,40,1623 ;TO ANDERSON, kenny ( CHARLOTTE ) + .word >100D,40,1347 ;TO JOHNSN_L, larry + .word >100D,40,1351 ;TO RICE, glen + .word >100D,40,1355 ;TO ZIDEK, george + .word >100D,40,1359 ;TO CURRY, dell + + .word >100D,40,1363 ;TO PIPPEN. scottie ( CHICAGO ) + .word >100D,40,1367 ;TO RODMAN, dennis + .word >100D,40,1371 ;TO KUKOC, tonic + .word >100D,40,1375 ;TO LONGLEY, luke + .word >100D,40,1379 ;TO KERR, steve + + .word >100D,40,1383 ;TO HILL, tyrone ( CLEVELAND ) + .word >100D,40,1387 ;TO MILLS, chris + .word >100D,40,1391 ;TO PHILLS, bobby + .word >100D,40,1395 ;TO BRANDON, terrell + .word >100D,40,1399 ;TO FERRY, danny + + .word >100D,40,1403 ;TO JACKSON, jim ( DALLAS ) + .word >100D,40,1407 ;TO KIDD, jason + .word >100D,40,1411 ;TO MASHBURN, jamal + .word >100D,40,1415 ;TO JONES, popeye + .word >100D,40,1419 ;TO McCLOUD, george + + .word >100D,40,1423 ;TO ABDUL-RAUF ( DENVER ) + .word >100D,40,1427 ;TO MUTUMBO + .word >100D,40,1431 ;TO McDYESS + .word >100D,40,1435 ;TO ROSE + .word >100D,40,1439 ;TO ELLIS + + .word >100D,40,1443 ;TO DUMARS ( DETROIT ) + .word >100D,40,1447 ;TO HILL, grant + .word >100D,40,1451 ;TO MILLS, terry + .word >100D,40,1455 ;TO THORPE + .word >100D,40,1459 ;TO HOUSTON, allan + + .word >100D,40,1571 ;TO WILLIS ( GOLDEN STATE ) + .word >100D,40,1467 ;TO SPREWELL + .word >100D,40,1471 ;TO SEIKALY + .word >100D,40,1475 ;TO SMITH, joe + .word >100D,40,1479 ;TO MULLIN + + .word >100D,40,1483 ;TO OLAJUWON ( HOUSTON ) + .word >100D,40,1487 ;TO DREXLER + .word >100D,40,1491 ;TO HORRY + .word >100D,40,1495 ;TO CASSELL + .word >100D,40,1499 ;TO SMITH, kenny + + .word >100D,40,1503 ;TO MILLER ( INDIANA ) + .word >100D,40,1507 ;TO DAVIS, dale + .word >100D,40,1511 ;TO SMITS + .word >100D,40,1515 ;TO McKEE + .word >100D,40,1519 ;TO JACKSON, mark + + .word >100D,40,1523 ;TO VAUGHT ( CLIPPERS ) + .word >100D,40,1527 ;TO ROGERS, rodney + .word >100D,40,1531 ;TO MURRAY, lamond + .word >100D,40,1535 ;TO RICHARDS + .word >100D,40,1539 ;TO BARRY + + .word >100D,40,1543 ;TO VAN EXEL ( LAKERS ) + .word >100D,40,1547 ;TO DIVAC + .word >100D,40,1551 ;TO CEBALLOS + .word >100D,40,1555 ;TO CAMPBELL + .word >100D,40,1559 ;TO JONES +; .word >100D,40,1703 ;TO JOHNSON, magic + + .word >100D,40,1563 ;TO MOURNING ( MIAMI ) + .word >100D,40,1743 ;TO WILLIAMS, walt + .word >100D,40,1963 ;TO CHAPMAN + .word >100D,40,1463 ;TO HARDAWAY, tim + .word >100D,40,1575 ;TO DANILOVIC + + .word >100D,40,1583 ;TO BAKER vin ( MILWAUKEE ) + .word >100D,40,1587 ;TO ROBINSON, glen + .word >100D,40,1591 ;TO RESPERT + .word >100D,40,1595 ;TO BENJAMIN + .word >100D,40,1599 ;TO DOUGLAS + + .word >100D,40,1603 ;TO RIDER ( MINNESOTTA ) + .word >100D,40,1957 ;TO ANDREW LANG + .word >100D,40,1966 ;TO SPUD WEBB + .word >100D,40,1615 ;TO GUGLIOTTA + .word >100D,40,1619 ;TO GARNETT + + .word >100D,40,1343 ;TO GILL, kendall ( NEW JERSEY ) + .word >100D,40,1627 ;TO BRADLEY + .word >100D,40,1631 ;TO GILLIAM + .word >100D,40,1635 ;TO O'BANNON + .word >100D,40,1639 ;TO EDWARDS, kevin + + .word >100D,40,1643 ;TO EWING ( NEW YORK ) + .word >100D,40,1647 ;TO MASON + .word >100D,40,1651 ;TO HARPER, derek + .word >100D,40,1655 ;TO OAKLEY + .word >100D,40,1659 ;TO STARKS + + .word >100D,40,1663 ;TO HARDAWAY, anfernee ( ORLANDO ) + .word >100D,40,1667 ;TO GRANT, horace + .word >100D,40,1671 ;TO ANDERSON, nick + .word >100D,40,1675 ;TO SCOTT, dennis + .word >100D,40,1679 ;TO KONCAK, jon + + .word >100D,40,1683 ;TO STACKHOUSE ( PHILADELPHIA ) + .word >100D,40,1687 ;TO COLEMAN, derrick + .word >100D,40,1691 ;TO WEATHERSPOON + .word >100D,40,1969 ;TO RUFFIN + .word >100D,40,1699 ;TO MAXWELL, vernon + + .word >100D,40,1703 ;TO JOHNSON, kevin ( PHOENIX ) + .word >100D,40,1707 ;TO TISDALE + .word >100D,40,1711 ;TO MANNING + .word >100D,40,1715 ;TO PERSON, wesley + .word >100D,40,1719 ;TO FINLEY + + .word >100D,40,1723 ;TO STRICKLAND ( PORTLAND ) + .word >100D,40,1727 ;TO ROBINSON, cliff + .word >100D,40,1731 ;TO SABONIS + .word >100D,40,1735 ;TO WILLIAMS, buck + .word >100D,40,1739 ;TO CHILDRESS + + .word >100D,40,1567 ;TO OWENS ( SACRAMENTO ) + .word >100D,40,1747 ;TO RICHMOND + .word >100D,40,1751 ;TO GRANT, brian + .word >100D,40,1755 ;TO MARCIULIONIS + .word >100D,40,1759 ;TO EDNEY + + .word >100D,40,1763 ;TO ELLIOTT ( SAN ANTONIO ) + .word >100D,40,1767 ;TO ROBINSON, david + .word >100D,40,1771 ;TO JOHNSON, avery + .word >100D,40,1775 ;TO PERSON, chuck + .word >100D,40,1779 ;TO DEL NEGRO + + .word >100D,40,1783 ;TO KEMP ( SEATTLE ) + .word >100D,40,1787 ;TO PAYTON + .word >100D,40,1791 ;TO SCHREMPF + .word >100D,40,1795 ;TO HAWKINS, hersey + .word >100D,40,1799 ;TO FORD + + .word >100D,40,1803 ;TO ROGERS, carlos ( TORONTO ) + .word >100D,40,1807 ;TO STOUDAMIRE + .word >100D,40,1954 ;TO ROBERTSON + .word >100D,40,1815 ;TO MILLER + .word >100D,40,1819 ;TO MURRAY, tracy + + .word >100D,40,1823 ;TO STOCKTON ( UTAH ) + .word >100D,40,1827 ;TO MALONE + .word >100D,40,1831 ;TO HORNACEK + .word >100D,40,1835 ;TO BENOIT + .word >100D,40,1839 ;TO MORRIS + + .word >100D,40,1843 ;TO ANTHONY ( VANCOUVER ) + .word >100D,40,1847 ;TO EDWARDS, blue + .word >100D,40,1960 ;TO SCOTT + .word >100D,40,1855 ;TO REEVES + .word >100D,40,1859 ;TO MURDOCK + + .word >100D,40,1863 ;TO HOWARD ( WASHINGTON ) + .word >100D,40,1867 ;TO WEBBER + .word >100D,40,1871 ;TO CHEANEY + .word >100D,40,1875 ;TO PACK + .word >100D,40,1879 ;TO MURESAN + + + +*********** +*********** +name_speech ;(last name only, excited) + + + .word >100D,32,1301 ;AUGMON, stacey ( ALTANTA HAWKS ) + .word >100D,42,1305 ;BLAYLOCK, mookie + .word >100D,31,1309 ;SMITH, steve + .word >100D,31,1605 ;LAETNER + .word >100D,32,1317 ;NORMAN, ken + + .word >100D,35,1321 ;BROWN, dee ( BOSTON ) + .word >100D,30,1325 ;BARROS, dana + .word >100D,51,1329 ;MONTROSS, eric + .word >100D,33,1333 ;RADJA, dino + .word >100D,30,1337 ;FOX, rick + + .word >100D,31,1621 ;ANDERSON, kenny ( CHARLOTTE ) + .word >100D,36,1345 ;JOHNSN_L, larry + .word >100D,31,1349 ;RICE, glen + .word >100D,30,1353 ;ZIDEK, george + .word >100D,31,1357 ;CURRY, dell + + .word >100D,27,1361 ;PIPPEN. scottie ( CHICAGO ) + .word >100D,29,1365 ;RODMAN, dennis + .word >100D,34,1369 ;KUKOC, tonic + .word >100D,43,1373 ;LONGLEY, luke + .word >100D,32,1377 ;KERR, steve + + .word >100D,31,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,40,1385 ;MILLS, chris + .word >100D,33,1389 ;PHILLS, bobby + .word >100D,29,1393 ;BRANDON, terrell + .word >100D,26,1397 ;FERRY, danny + + .word >100D,46,1401 ;JACKSON, jim ( DALLAS ) + .word >100D,30,1405 ;KIDD, jason + .word >100D,47,1409 ;MASHBURN, jamal + .word >100D,38,1413 ;JONES, popeye + .word >100D,44,1417 ;McCLOUD, george + + .word >100D,48,1421 ;ABDUL-RAUF ( DENVER ) + .word >100D,56,1425 ;MUTUMBO + .word >100D,47,1429 ;McDYESS + .word >100D,30,1433 ;ROSE + .word >100D,30,1437 ;ELLIS + + .word >100D,44,1441 ;DUMARS ( DETROIT ) + .word >100D,31,1445 ;HILL, grant + .word >100D,40,1449 ;MILLS, terry + .word >100D,32,1453 ;THORPE + .word >100D,41,1457 ;HOUSTON, allan + + .word >100D,29,1569 ;WILLIS ( GOLDEN STATE ) + .word >100D,41,1465 ;SPREWELL + .word >100D,42,1469 ;SEIKALY + .word >100D,31,1473 ;SMITH, joe + .word >100D,40,1477 ;MULLIN + + .word >100D,68,1481 ;OLAJUWON ( HOUSTON ) + .word >100D,34,1485 ;DREXLER + .word >100D,39,1489 ;HORRY + .word >100D,35,1493 ;CASSELL + .word >100D,31,1497 ;SMITH, kenny + + .word >100D,37,1501 ;MILLER ( INDIANA ) + .word >100D,32,1505 ;DAVIS, dale + .word >100D,67,1509 ;SMITS + .word >100D,41,1513 ;McKEE + .word >100D,45,1517 ;JACKSON, mark + + .word >100D,31,1521 ;VAUGHT ( CLIPPERS ) + .word >100D,32,1525 ;ROGERS, rodney + .word >100D,29,1529 ;MURRAY, lamond + .word >100D,42,1533 ;RICHARDS + .word >100D,31,1537 ;BARRY + + .word >100D,42,1541 ;VAN EXEL ( LAKERS ) + .word >100D,37,1545 ;DIVAC + .word >100D,42,1549 ;CEBALLOS + .word >100D,35,1553 ;CAMPBELL + .word >100D,36,1557 ;JONES +; .word >100D,36,1701 ;JOHNSON, magic + + .word >100D,33,1561 ;MOURNING ( MIAMI ) + .word >100D,34,1741 ;WILLIAMS, walt + .word >100D,33,1962 ;CHAPMAN + .word >100D,43,1461 ;HARDAWAY, tim + .word >100D,46,1573 ;DANILOVIC + + .word >100D,37,1581 ;BAKER vin ( MILWAUKEE ) + .word >100D,56,1585 ;ROBINSON, glen + .word >100D,35,1589 ;RESPERT + .word >100D,32,1593 ;BENJAMIN + .word >100D,29,1597 ;DOUGLAS + + .word >100D,41,1601 ;RIDER ( MINNESOTTA ) + .word >100D,33,1956 ;ANDREW LANG + .word >100D,28,1965 ;SPUD WEBB + .word >100D,41,1613 ;GUGLIOTTA + .word >100D,39,1617 ;GARNETT + + .word >100D,30,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,41,1625 ;BRADLEY + .word >100D,29,1629 ;GILLIAM + .word >100D,34,1633 ;O'BANNON + .word >100D,29,1637 ;EDWARDS, kevin + + .word >100D,40,1641 ;EWING ( NEW YORK ) + .word >100D,49,1645 ;MASON + .word >100D,35,1649 ;HARPER, derek + .word >100D,34,1653 ;OAKLEY + .word >100D,34,1657 ;STARKS + + .word >100D,45,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,32,1665 ;GRANT, horace + .word >100D,31,1669 ;ANDERSON, nick + .word >100D,34,1673 ;SCOTT, dennis + .word >100D,35,1677 ;KONCAK, jon + + .word >100D,55,1681 ;STACKHOUSE ( PHILADELPHIA ) + .word >100D,35,1685 ;COLEMAN, derrick + .word >100D,63,1689 ;WEATHERSPOON + .word >100D,29,1968 ;RUFFIN, trevor + .word >100D,54,1697 ;MAXWELL, vernon + + .word >100D,36,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,48,1705 ;TISDALE + .word >100D,29,1709 ;MANNING + .word >100D,34,1713 ;PERSON, wesley + .word >100D,40,1717 ;FINLEY + + .word >100D,40,1721 ;STRICKLAND ( PORTLAND ) + .word >100D,58,1725 ;ROBINSON, cliff + .word >100D,38,1729 ;SABONIS + .word >100D,34,1733 ;WILLIAMS, buck + .word >100D,35,1737 ;CHILDRESS + + .word >100D,39,1565 ;OWENS ( SACRAMENTO ) + .word >100D,38,1745 ;RICHMOND + .word >100D,32,1749 ;GRANT, brian + .word >100D,46,1753 ;MARCIULIONIS + .word >100D,30,1757 ;EDNEY + + .word >100D,30,1761 ;ELLIOTT ( SAN ANTONIO ) + .word >100D,58,1765 ;ROBINSON, david + .word >100D,36,1769 ;JOHNSON, avery + .word >100D,34,1773 ;PERSON, chuck + .word >100D,42,1777 ;DEL NEGRO + + .word >100D,30,1781 ;KEMP ( SEATTLE ) + .word >100D,31,1785 ;PAYTON + .word >100D,30,1789 ;SCHREMPF + .word >100D,33,1793 ;HAWKINS, hersey + .word >100D,29,1797 ;FORD + + .word >100D,32,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,51,1805 ;STOUDAMIRE + .word >100D,33,1953 ;ROBERTSON + .word >100D,37,1813 ;MILLER + .word >100D,29,1817 ;MURRAY, tracy + + .word >100D,41,1821 ;STOCKTON ( UTAH ) + .word >100D,40,1825 ;MALONE + .word >100D,38,1829 ;HORNACEK + .word >100D,36,1833 ;BENOIT + .word >100D,29,1837 ;MORRIS + + .word >100D,29,1841 ;ANTHONY ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,32,1959 ;SCOTT + .word >100D,36,1853 ;REEVES + .word >100D,34,1857 ;MURDOCK + + .word >100D,32,1861 ;HOWARD ( WASHINGTON ) + .word >100D,38,1865 ;WEBBER + .word >100D,31,1869 ;CHEANEY + .word >100D,30,1873 ;PACK + .word >100D,51,1877 ;MURESAN + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... + +special_name_speech + .word >100D,52,>8f2 ;0 JEFF JOHNSON + .word >100D,52,>8e4 ;1 SAL DIVITA + .word >100D,52,>8e0 ;2 TURMELL + .word >100D,52,>8ee ;3 THOMPSON + .word >100D,52,>8e6 ;4 GEER + .word >100D,52,>8f0 ;5 CARLTON + .word >100D,52,>8e8 ;6 HEDRICK + .word >100D,52,>8e2 ;7 JOHN HEY + .word >100D,52,>8da ;8 AIR MORRIS + .word >100D,52,>8dc ;9 STEVE BARDO + .word >100D,52,>8de ;10 MINIFEE + .word >100D,52,>8ea ;11 MARTINEZ + .word >100D,52,>8ec ;12 PESINA + .word >0105,52,>8ca ;13 LIPTAK + .word >0105,52,>776 ;14 EDDIE + .word >0105,52,>75e ;15 MIKE V. + .word >0105,52,>8c0 ;16 JAMIE R. + .word >0105,52,>8c0 ;17 NICK E. + .word >0105,52,>8c0 ;18 J. ROOT + .word >0105,52,>8c0 ;19 MEDNICK + .word >0105,52,>8c0 ;20 DAN R. + .word >0105,52,>8c0 ;21 PAT F. + .word >0105,52,>8c0 ;22 ED BOON + .word >0105,52,>8c0 ;23 J. TOBIAS + .word >0105,52,>8c0 ;24 OURSLER + .word >0105,52,>8c0 ;25 JASON S. + .word >0105,52,>8c0 ;26 QUINN + .word >0105,52,>8c0 ;27 M. PERRY + .word >0105,52,>8c0 ;28 N. FUNK + .word >0105,52,>8c0 ;29 MDOC + .word >0105,52,>8c0 ;30 BUD + .word >0105,52,>754 ;31 MARIUS + .word >0105,52,>8c0 ;32 MUNDAY + .word >0105,52,>8c0 ;33 NORTH + .word >0105,52,>8c0 ;34 AMRICH + .word >0105,52,>8c0 ;35 JIGGETS + +;Superstar special guests + .word >100D,52,>551 ;PIPPEN + .word >100D,52,>555 ;RODMAN + .word >100D,52,>541 ;L. JOHNSON + .word >100D,52,>545 ;G. RICE + .word >100D,52,>57d ;KIDD + .word >100D,52,>591 ;MUTOMBO + .word >100D,52,>5a5 ;G. HILL + .word >100D,52,>5c9 ;Olajuwan + .word >100D,52,>5dd ;r. miller + .word >100D,52,>5e5 ;smits + .word >100D,52,>619 ;a. mourning + .word >100D,52,>631 ;g. robinson + .word >100D,52,>7ad ;spud webb + .word >100D,52,>669 ;ewing + .word >100D,52,>679 ;starks + .word >100D,52,>67d ;a. hardaway + .word >100D,52,>681 ;h. grant + .word >100D,52,>691 ;stackhouse + .word >100D,52,>6bd ;c. robinson + .word >100D,52,>6e5 ;d. robinson + .word >100D,52,>6e1 ;s. elliot + .word >100D,52,>6f5 ;shawn kemp + .word >100D,52,>721 ;k. malone + .word >100D,52,>749 ;webber + .word >100D,52,>755 ;muresan + + +special_pass_speech +;special guests + .word >100D,52,>8f3 ;0 JEFF JOHNSON + .word >100D,37,>8e5 ;1 SAL DIVITA + .word >100D,37,>8e1 ;2 TURMELL + .word >100D,34,>8ef ;3 THOMPSON + .word >100D,27,>8e7 ;4 GEER + .word >100D,37,>8f1 ;5 CARLTON + .word >100D,33,>8e9 ;6 HEDRICK + .word >100D,27,>8e3 ;7 JOHN HEY + .word >100D,48,>8db ;8 AIR MORRIS + .word >100D,35,>8dd ;9 STEVE BARDO + .word >100D,39,>8df ;10 MINIFEE + .word >100D,46,>8eb ;11 MARTINEZ + .word >100D,41,>8ed ;12 PESINA + .word >0105,52,>8cb ;13 LIPTAK + .word >0105,52,>777 ;14 EDDIE + .word >0105,52,>75f ;15 MIKE V. + .word >0105,52,>8c1 ;16 JAMIE R. + .word >0105,52,>8c1 ;17 NICK E. + .word >0105,52,>8c1 ;18 J. ROOT + .word >0105,52,>8c1 ;19 MEDNICK + .word >0105,52,>8c1 ;20 DAN R. + .word >0105,52,>8c1 ;21 PAT F. + .word >0105,52,>8c1 ;22 ED BOON + .word >0105,52,>8c1 ;23 J. TOBIAS + .word >0105,52,>8c1 ;24 OURSLER + .word >0105,52,>8c1 ;25 JASON S. + .word >0105,52,>8c1 ;26 QUINN + .word >0105,52,>8c1 ;27 M. PERRY + .word >0105,52,>8c1 ;28 N. FUNK + .word >0105,52,>8c1 ;29 MDOC + .word >0105,52,>8c1 ;30 BUD + .word >0105,52,>757 ;31 MARIUS + .word >0105,52,>8c1 ;32 MUNDAY + .word >0105,52,>8c1 ;33 NORTH + .word >0105,52,>8c1 ;34 AMRICH + .word >0105,52,>8c1 ;35 JIGGETS +;Superstar special guests + .word >100D,52,>553 ;PIPPEN + .word >100D,52,>557 ;RODMAN + .word >100D,52,>543 ;L. JOHNSON + .word >100D,52,>547 ;G. RICE + .word >100D,52,>57f ;KIDD + .word >100D,52,>593 ;MUTOMBO + .word >100D,52,>5a7 ;G. HILL + .word >100D,52,>5cb ;Olajuwan + .word >100D,52,>5df ;r. miller + .word >100D,52,>5e7 ;smits + .word >100D,52,>61b ;a. mourning + .word >100D,52,>633 ;g. robinson + .word >100D,52,>7ae ;spud webb + .word >100D,52,>66b ;ewing + .word >100D,52,>67b ;starks + .word >100D,52,>67f ;a. hardaway + .word >100D,52,>683 ;h. grant + .word >100D,52,>693 ;stackhouse + .word >100D,52,>6bf ;c. robinson + .word >100D,52,>6e7 ;d. robinson + .word >100D,52,>6e3 ;s. elliot + .word >100D,52,>6f7 ;shawn kemp + .word >100D,52,>723 ;k. malone + .word >100D,52,>74b ;webber + .word >100D,52,>757 ;muresan + + + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,35,>4b2 ;00 ATLANTA "Hawks" + .word >100D,42,>4b5 ;01 BOSTON "Celtics" + .word >100D,34,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,31,>4bb ;03 CHICAGO "Bulls" + .word >100D,45,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,40,>4c1 ;05 DALLAS "Maverick" + .word >100D,38,>4c4 ;06 DENVER "Nuggets" + .word >100D,46,>4c7 ;07 DETROIT "Pistons" + .word >100D,48,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,39,>4cd ;09 HOUSTON "Rockets" + .word >100D,41,>4d0 ;10 INDIANA "Pacers" + .word >100D,32,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,41,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,28,>4d9 ;13 MIAMI "Heat" + .word >100D,34,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,46,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,33,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,34,>4e5 ;17 NEW YORK "Knicks" + .word >100D,33,>4e8 ;18 ORLANDO "Magic" + .word >100D,68,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,36,>4ee ;20 PHOENIX "Suns" + .word >100D,54,>4f1 ;21 PORTLAND "Blazers" + .word >100D,37,>4f3 ;22 SACRAMENTO "Kings" + .word >100D,42,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,62,>4fa ;24 SEATTLE "Supersonics" + .word >100D,44,>4fd ;26 TORONTO "Raptors" + .word >100D,36,>500 ;26 UTAH "Jazz" + .word >100D,45,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,28,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,47,>4b1 ;00 ATLANTA + .word >100D,36,>4b4 ;01 BOSTON + .word >100D,32,>4b7 ;02 CHARLOTTE + .word >100D,50,>4ba ;03 CHICAGO + .word >100D,36,>4bd ;04 CLEVELAND + .word >100D,38,>4c0 ;05 DALLAS + .word >100D,34,>4c3 ;06 DENVER + .word >100D,44,>4c6 ;07 DETROIT + .word >100D,59,>4c9 ;08 GOLDEN STATE + .word >100D,44,>4cc ;09 HOUSTON + .word >100D,46,>4cf ;10 INDIANA + .word >100D,55,>4d2 ;11 L.A. CLIPPERS + .word >100D,55,>4d5 ;12 L.A. LAKERS + .word >100D,44,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,51,>4de ;15 MINNESOTTA + .word >100D,47,>4e1 ;16 NEW JERSEY + .word >100D,43,>4e4 ;17 NEW YORK + .word >100D,54,>4e7 ;18 ORLANDO + .word >100D,55,>4ea ;19 PHILADELPHIA + .word >100D,37,>4ed ;20 PHOENIX + .word >100D,41,>4f0 ;21 PORTLAND + .word >100D,54,>4f3 ;22 SACRAMENTO + .word >100D,67,>4f6 ;23 SAN ANTONIO + .word >100D,40,>4f9 ;24 SEATTLE + .word >100D,51,>4fc ;26 TORONTO + .word >100D,44,>4ff ;26 UTAH + .word >100D,45,>502 ;27 VANCOUVER + .word >100D,50,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + + movk 10,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab + .long whyyyy_sp + .long ill_shot_sp + .long whyyyy_sp + .long unlod_one_sp + .long outof_rng_sp + .long wild_shot_sp + .long hail_mary_sp + .long ill_shot_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +**************** +#long_range + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 + movk 14,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + + movk 5,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp + .long kaboom2_sp + .long unbelieve_sp + +**************** +#long_range + + callr itsgood + jrnc #xlong + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp + .long its_good_sp + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + + movk 15,a0 + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + + movk 18,a0 + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp + .long chk_it_up_sp + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp + .long jam_it_in_sp + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + + movk 14,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + + movk 12,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp + .long kaboom2_sp + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl + .long cros_crt_sp + .long downcourt_sp + .long hev_dncrt_sp + .long 0 + .long pas_outsd_sp + .long 0 + .long he_passes_sp + .long cros_crt_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi run_out_sp,a0 +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow + movi blowout_sp,a0 ;it's a blowout + cmpi 9,a1 + jrge #blowout + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp + .long fnl_strw_sp + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit + movk 2,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 + .long shvd_asde_sp + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp + .long swish_sp + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + + movi 99,a0 + calla rndrng0 + cmpi 45,a0 + jrls #no_call ;br=30% of time, nothing + cmpi 60,a0 + jrls #anc_scr ;br=35% of time, annouce scores + cmpi 87,a0 + jrls #crwd_fx ;br=15% of time, organ fx + + move @pup_court,a14 + jrnz #die ;br=outdoor court! + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + jrz #tied + + move a1,a2 + abs a2 + cmpi 59,a2 + jrhi #no_call ;br=if score diff > 59, ignore + + move a11,a11 + jrnz #tm1_scored +#tm2_scored + move @team2,a2 + neg a1 + jruc #cnt + +#tm1_scored + move @team1,a2 +#cnt + movi #anc_scr_win_tbl,a0 + move a1,a1 + jrp #pos + movi #anc_scr_lose_tbl,a0 + neg a1 ;make positive +#pos + move a0,a3 + move a1,a4 + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst + + move a3,*a4+,W ;store it + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + + +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 + + + +****************************************************************************** +#tied + + movi 800,a0 ;call name 25% time + calla RNDPER + jrls #tied1 + + cmpi 60,a1 + jrhs #tied1 ;br=dont announce..too high + movi sound_ram,a4,L + movi tied_at_sp,a14,L + move a14,*a4+,L + move *a14(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + sll 6,a1 + addi scr_nbr_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#tied1 + movi gme_tied1_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #tied2 + movi gme_tied2_sp,a0,L +#tied2 + calla snd_play1 +#tied3 + DIE + + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + + SOUND1 error_found + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp3 +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/CODE113M/STRING.ASM b/BACKUP/CODE113M/STRING.ASM new file mode 100644 index 0000000..c7c809e --- /dev/null +++ b/BACKUP/CODE113M/STRING.ASM @@ -0,0 +1,2086 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers + .def SENDTO_P + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(20h),L ;null terminate + + movi init_convert_table,a5 +;1st letter + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + add a5,a0 + move *a0,a0 ;get ascii LETTER from table + movb a0,*a3 + +;2nd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(8h) + +;3rd letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(10h) + +;4th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(18h) + +;5th letter + move *a4+,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(20h) + +;6th letter + move *a4,a0 + jrz #no_more + sll 4,a0 + add a5,a0 + move *a0,a0 + movb a0,*a3(28h) +#no_more + rets + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + + +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end + diff --git a/BACKUP/CODE113M/SYS.EQU b/BACKUP/CODE113M/SYS.EQU new file mode 100644 index 0000000..5c52ba8 --- /dev/null +++ b/BACKUP/CODE113M/SYS.EQU @@ -0,0 +1,354 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/CODE113M/TEST.ASM b/BACKUP/CODE113M/TEST.ASM new file mode 100644 index 0000000..0a85a21 --- /dev/null +++ b/BACKUP/CODE113M/TEST.ASM @@ -0,0 +1,3632 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET + .REF QSNDRST,qsndrst_proc + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 4,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/CODE113M/TEXT.ASM b/BACKUP/CODE113M/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/CODE113M/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/CODE113M/TODO.ASM b/BACKUP/CODE113M/TODO.ASM new file mode 100644 index 0000000..a1a5e35 --- /dev/null +++ b/BACKUP/CODE113M/TODO.ASM @@ -0,0 +1,19 @@ +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/CODE113M/TODO.DOC b/BACKUP/CODE113M/TODO.DOC new file mode 100644 index 0000000..6dc0612 --- /dev/null +++ b/BACKUP/CODE113M/TODO.DOC @@ -0,0 +1,15 @@ +;JEFF: More heads in create player +;JEFF: Fix angle 1&5 alleyoops (jump from out-of-bounds) +;JEFF: Dont push player if failing or falling down +;JEFF: Team starring page +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Put in secret players and adjust their stats +;JEFF: Fix white pix on stat screen fade down +;JEFF: Softly off of glass speech happened on pure swish + + diff --git a/BACKUP/CODE113M/UNZIP.ASM b/BACKUP/CODE113M/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/CODE113M/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/CODE113M/UTIL.ASM b/BACKUP/CODE113M/UTIL.ASM new file mode 100644 index 0000000..6570265 --- /dev/null +++ b/BACKUP/CODE113M/UTIL.ASM @@ -0,0 +1,2479 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA + .def FRANIM,FRANIMQ + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + + .def STRNGRAM,HEXTOASC,GETANIX,WRLD + .def COLCYC,CYCLE_TABLE,FLASHME + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +FLASHME + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +GETANIX + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +FRANIM + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end + + diff --git a/BACKUP/CODE113M/WORLD.EQU b/BACKUP/CODE113M/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/CODE113M/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/CODE113M/_MARKER_ b/BACKUP/CODE113M/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/CODE113M/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XART100/ABALL.IMG b/BACKUP/XART100/ABALL.IMG new file mode 100644 index 0000000..ce92589 Binary files /dev/null and b/BACKUP/XART100/ABALL.IMG differ diff --git a/BACKUP/XART100/ANEWP.IMG b/BACKUP/XART100/ANEWP.IMG new file mode 100644 index 0000000..e18fbc6 Binary files /dev/null and b/BACKUP/XART100/ANEWP.IMG differ diff --git a/BACKUP/XART100/ARROWS.IMG b/BACKUP/XART100/ARROWS.IMG new file mode 100644 index 0000000..c8e515c Binary files /dev/null and b/BACKUP/XART100/ARROWS.IMG differ diff --git a/BACKUP/XART100/ARROWSN.IMG b/BACKUP/XART100/ARROWSN.IMG new file mode 100644 index 0000000..0814cba Binary files /dev/null and b/BACKUP/XART100/ARROWSN.IMG differ diff --git a/BACKUP/XART100/ATTBAR2.IMG b/BACKUP/XART100/ATTBAR2.IMG new file mode 100644 index 0000000..0308972 Binary files /dev/null and b/BACKUP/XART100/ATTBAR2.IMG differ diff --git a/BACKUP/XART100/ATTRACT.BDB b/BACKUP/XART100/ATTRACT.BDB new file mode 100644 index 0000000..3657a80 --- /dev/null +++ b/BACKUP/XART100/ATTRACT.BDB @@ -0,0 +1,6 @@ +ATTRACT 2000 1000 255 1 1 4 +ATTRACT 229 699 195 511 +4000 272 229 0 0 +4000 272 354 3 0 +4000 472 229 6 0 +4000 472 354 9 0 diff --git a/BACKUP/XART100/ATTRACT.BDD b/BACKUP/XART100/ATTRACT.BDD new file mode 100644 index 0000000..0ceb4e3 --- /dev/null +++ b/BACKUP/XART100/ATTRACT.BDD @@ -0,0 +1,127 @@ +4 +0 200 125 1 + #%('('('('(''$" !$'''''((''''&'%"  + + + + + +  +!#$&''('''('(&#  !#&'''('(''&'&'$!  +  !"#&'('('''('%"  "%''('(''&'&'&#! +   + !!#%('(''''''$  !$'(('''''&''%#!   !#$''('''('&# "$'''''&&''&'$#  !"$&''''(''$" + !$&'''&''&'''$"!"$%''''''&$! "#%''''&''''&#! !"#%''''''&#   !"$&''&'''''%#  !"#%&(''''%#   !#%''''&'''$! !"$&'''''%"!"%''&''''&"  !#$&'''&&$" "$&''''''%"!!##%&'''&#  "$%'''''&#!  !"##%'''$"  "#%''''&%#!  ! !#%'&&#" !"#%''''&%#! !#%'&%"!!  !#%&''&'$#! !#$%&$"!!!!"$&''&&$#! !"#%&$##" !"#%&'&&#"!  !"$%%$$!  !!"$&''%$"!  "%%%$#! !"$%''%$""!!#%%%#!!  !#%'&%$#"!"%&%%#"! !#%'&$##!!#%&%$#"!  "#%'&%#"  #$%$#$#!! !!"#%&%%$! "#$$###"!  !##%%&$" "####""""!  !##$%%#!!"""!"!!""!  !"#%$$" !"!!!!!!!!!!!!  !!#$$#"! "!! !!!!!!!!! !!"####! !!  !!!!"!!!""###!    !!""  !"""##"!   !   !!"!!!"""""#!   !!!!!!  !!""""!!!  !!!"!!  !!!!!!!  !!""!  !!!!!  ! !"!!  !!!  ! !"!! !  !!  !!"!!!    !!!      !!  !    !!!    !!!    !   !!!     !!!! !!    ! !!  !!!  !    !   !      ! !!      !    !    !  !!     !!      ! !"!   ! !!"!      !! !!  !      ! !!  !      !!   !!       ! !  !       !   !    !   !   !! !  !  !!   !  !  ! !   ! !!!!!    !  !  ! !!  !   !!!       !   !!  !   !""      !   ! !"!    !  !!   "#"!!     !! !  !!!!    !  !!  !""!    !  !!!! !!! !!! !   """      ! !! !!! !!!! !!  !!!!"##!           "!!   !"! !!! !#$#! !!!   !      !! !!! !"! !!   !#$#"  !!!!   !!      !  !!!  !!!  !!   "###"! !!!!  !        !!  !!!  !!!   "#$$! ! !!!      !  !  !   !"!!!!   !###!  !!  !        !   !  ""!  !!!  !"##!  !  ! !           ! !!!!! !"!  !!"! "###! !!!   ! !!     !     !! !!!!!!"! !"! !"! !!   !###!!!!!"!  !! !!!! !        ! !!!!!! !"#!  !!! !!!  !###"! !!!!!  !   !! !!!! !!     !    !!    ""!"!! "#"!  ! !!!! !!  "###"!!!!! !   !!!!""!!!     !    !!  !  """"!  ""!  !!!"!  !  !"#" !!"!!   !""!       !!!   !  !!    """! !""!  !!   !""! !"""!   !""!     !!   !!  !!  !!  !!    "!!!"#!  !   !""! !!"!!   !!!""!   !! !! !!!  !!! !!!! !! !!"    "!  ""!  !!  !##! ! !!""!   !  ! !!!!   !!!!   !"! !!! !!"!! !!   !!!   ! !""! !!!!  #$# !!! !!!!!  !!  !!! !!! ! !!!!   !"! !!! !!""!!!!!  !!!     !##"!  !!  !"##! !!! !!!! !! !!    !!!  ! !!!!!  !  !!!  !! !!""!!!!   !! !!   !##"!  !!!   !##"!!  !!  !!!!  !!!!!! !  !!   !!!!!  !!!  !!  !!! !!!!"!!  ! !!!    !"#"! !!!"!  !  !#$$! !!  !!  !!!!  !!  !!!  !!   !!!! !!!  !! "!  !!!""!   !!! !!   ! !###! !!"!!   ! !! !###!! !""  ! !!!!! !!!  !!!   !  !!!!! !!!  !! !!"! !!!!!!!  !!  !! !!  ! !###"!! !!"!"!!  !! ! "##"  !!!""! !!  !!! !!!!! !!!!    !  ! !!!!!!  !"!! !!!! !""!! !!"!"!!  !  !!  !!  !##""!!! !!!""!!     !##" !! !"#"!!!  !!!!!!!!!!!"!! !!  !!!!!!!  !"!  """!!!""!!!!!!!!!!    !!!!!  "##"!!!!!!!!!"!!  !!  !##"! !""!"##"!   !!!!!!!!!! !"!!  !!! ! !!!  !""! !"""! !"""!!!!!!!!   !  !! !! !!##$$"!!!!!""""!!    !!! !### !  !!"!"###"   ! !!! ""#!! !!!  !!!!  !""! !!""!!!!"""!!!!!!!   !  !! !!! !"###""""""""""!!   !!!!#$#!  !! !"""!"##!    ! !!!!!!"##!   !!!  !"!!  !""!! !!"!!!!##"!!!!!!!   !!  !!  !! ###"!!"""""""""!! !!!! "#%$#!!!!!!!! !!"!!"#"!   !!! !!!!!"##!  !!   !!!  !""!! !!"!!!""#"!! !!!   !! !!  !!  !!!  $##!!!"!"!!""!! ! !!!""! "#$$#!!!"!!!!!!!!!"!!!!""!   !!! !!!"!!###!   !!   !"!!   !""!!!!!!!!!"##"!!!!!!  !! !!  !!!!!! $#"!!"""""""!! !!!!!!""! "#$#"!!!!!!!!!!!!! !!!!!!##!   !!!! !!!"!!###!   !!   !!!! !! !""!!!!"!!!!"#""! !!!  !!!!   "!!!!!!! ! ##"""""!!""!! !!!""!""!  "$$##!!"! !!!!!""!!!!!"! !#"!   !"!!! !!""""#$#!   !"!  !""!!!!!!!! !"""!!!"""!!!#"!!!!! ! ! !!!!   !!!!!!!! "###""!!"""!!!"""""""" !"#$$#""""!! !!!"!!!!!!!""!! !""!    !""!!!!!!"!!###! !!! !!"!!!!!""" !""!"""""""!""""! ! !  !!!!  "!!!!!! ####""""""! !!"""""""! "#""!!"""""!!!!!""!!!"!!!!"! !""!   !""! !!""!!!###! !!! !"""!!!""#"!! """"""""""!!!""!!   !!! !  !! !!!!!! ####""#""!!!!"!""""!!!!##!!!""""!!!!!!!"!!!!!!!!!! !""!    !"!!!!"""!!!###"  !!! !"""!!!""#"! !""##""""""!!!""!! !   !!!!!  !  !!! """""###"!!"""""""! !"##! !"""!!!!!!!!!""!!!!""!!! !""! !!"! !"""""!!"$#!  !!!  !"""!!!""#"" !"###"""""!! !!"!!  !!!    !!!"!   !" """"###!!!"""!"""!!"#"! !"""! !!!! !!""!!""""!!! "!!  !"""!""###!!!###!   !!  !""!!!!"""!! !###"##""!! !!!! !!!  !  !!!!!!  !!!#$####"!!"""!"""! !"##" !"#"!!!!! !!"#""""""!!!!  ""!    !""""####""!!###!  !"!  !""!!!!!""!! !"##"##""!!! !!"! !!!!  !  !!!!!  !!!  ###$#"!!"""""""!  "#$#!  "#"""!!!!!!"##"""""!!!!!  ""!  !  !""""####""!!###!  !"!  !""!"!!!!"!! !"###"##""!! !!"! !"!!   !!  !!!! !!!!""!##$#"""""""""""!  "##"!!!!!  !##""""""!""###!!"!!!!!  "!!   ""#""""###"""###!  !!"#"  """"""!"!"!! !"##""""""!! !!"! !"!!!  ! !  ! !!! !""! ###"!!""""""""!  !"#"!!"#"!!  "###"#"""""###"!!!!!!!"! !"!!  !  !#""""#####""#$#"  !!!"#"  !""""""!""!!!!"#""""""!! !"! !!""! !! !!  !!  !!! !""! $#"!!!""""#""!  !"##! !#""!  "######""""###"! ! !!""! !""!  !  "##"""####"""###" !!!!"##  "##""""""!!! !"#"!!"""!!! !!"! !!""!! !!!! !!  !!!!!  !"! !  "$#""""""###"! !"#$#!  !"""!! !"######"""###""! !!!!"! !"!!  "###"""###"!"#$#"  !!!""##!  !"#""""""!!!!!""!!!!!!"!  !"!! !!!"""! !!"!! !!!  !!!!  !!!  ###""""#####"!  !!"#$#!!!"!  """!!! !"#######"""###!! !!!! !"!! !! !"###"""#"""!"###"  !!!"##"!  !""""""""""!"!!!"!! !!!!! !!"!! !!"""! !!"!! !!!  !!!  !! !##!"!"""####""  ""$$#!!!""""! !#"!!! !!!"########"#"#""!!  !!!!! !""!!! ! !####"##"""!!!###" !!""#$#!  "###"""""""!!!!"! !!!! !""! ! !"""!! !!"! !!!!!!!! ! "##! """"""##"! !!#$$$#!!""""""! !"""!!  !!!"#$#$###"""###"!  !!!! !""!!!! !!! !#######""!!!!###" !!!"""###!  "###"#""#""! !!"!  !!! !""! !!""""!!!""!!! ! !!!!!!"$#!"######""   !#$#$"!"#"""""#"! """!!  !##$$####"#"##"!  !!! !"""!!! !!! !#####""!!!! !###"!!!!!!"####!  !###"#""""! !"!  !!!  """!!!!""#"!!!!"!! !!! !!!! !$$"  ##"####"! !!####! !""""!"""""! "#""!  !##$####"""""#"!  !"!!!##!!!!!!!!!!!"####""!!!! !"##"!!!!!""""#"!!!!! !"#"##""""!  !"!  !!! """!!!"""#""!!!""!!!"! !!!!!##"! ######!  "#$$#!!!""""!!!!!!!!! "#""!    "#$$$#""""""##"!  ""!""""!!!!!!!!!!#####""!! !!"##"!!!!!"!!!"""!! !!! !"###"#"!!!! !!"!  !!!! !!"!!!!"""#""!!!""!!!!!!!!!"$#!!""! $####!  "#$$#"!""#"""""!!!!!"! "##!! !"#$$$##"!!""##"!  !""!!"#"!!!!!"! !"####""!!!!!""##""!!!!"!!!"""!! !"###"""!!!! !!"!  !"!! !"""!""""###"!!!""!!!""! "$$" !""!###"!  "#$$#"!!####"""""!!!!!"" "#"!!! ! !!"#$$##""!!!""##!  "#!!!##"!!!!!"! !"$####"""""""###""!!!"""!""""!! ! !!#####""""!! !""!! !""!! !""""""""###""!!!!!!!!!!$$"!! !""##"! !"#$%$"!!"""##""""""! !!!""! "#"!! !!!!!!"#$$##""!!!""##!  !"""!!"#"!!!!"!! !"#$####""""""###""!!""#"!"##"! !!"####""!!!!! !!"!! !"""!!!"#"""#######"!!!!!! "$#"!!! !"""! !"#$%%$#"""""""#""""""!! !!""! "##!!!!!!! !##$##""!!!""#""! !"!!"###"""""!!!"#$##"##"###"###"!!""#######"! !!! !"####""!!!!!! !!"!! !!!"!!!!!#""""######""""!!#$#! !""! !"!  !!#$$#""#$#"!!!"""""""#"! !"" !"##"!!!!!! !"####""!!!!"#""!! !!""!!"##""!!"!!! "#####"#####"###""""########"!!! !!"####"!!!!!!! !!"! !"""!! !"#""""######"""!"$$"  !!""! "! !!!!!"#$##" !#$##""!"""#""""#"! !!"  "##"!!!!!! !"$##"""!!!!""""!!! !!""""###""!"""! "#####""####"###""""####"###"! !! !"$##""! !!  !"!!!""""!!!!"####"#"####"!"$#"!!  !"#"! !!!!!!!!"#$$#!!!""#$##""""""##"###"!  !!  "##"!! !!! !"###""""!!!!""!!! !"#""#$##""!"""!  "####"""###""#####""#####"##!!!!!! !"###"!!!  !"!!!""!"!!!!"##""##"###!"$#!!""!! !"#"!!!!!!!!"#$%#! !"#""#$$##""""####"##"! !! "###"!!!! !"###""#""!!!""!! !!"#####$""!""""! !####"#""##"!#####""####"##"!!!!!! !!"###"!  !!"!!"""""!!"######"#"!"$#"!!!"""! !!##"!!!!!!"#$$#"!!!"##""#$$##""""########!  !  "###""!!!  !"###"###"!!!"!! !!"######$#"!"###! "####"#"""""!"###"#"####""##!!!!!!! !"###"!!  !""!""""""!!"######"! #$#! !!!!"""! !##!"""""#%%#!!!!"""""""#$$###"#""###$###!  ! "###"! !! !###"""###! !""!! !!!"###""$$#!!"###"  "#####"###""!"###""###$#####!!!"""!!!"###"! !!!  !""""""""""!"#$##"! #$$! !!!"""!! "#""""#$%%%#""""""!"""!!"$$#####""#######" !  "###"!! !! !"##"""""" !!"""!!!!"###"#$$"!!""##"  "######"""""!"#####"##$#####!!!"""!  "##""!!!!!!! !"""""""""!!"###! #$$"!  ! !"""!!!"""##$$%$$####""""!!""!!##$####"######$##"!! !!!  "###!! !!"!!!"#""!!!!! !"##""""!"###"#$#"!!""""" !"#########"!!"########$####"!!"##"!  !"##"!!!!!!  !"#"""!""#"!"#" #%$"!"! ! !!"""!!!###$$%$###$##""""!!!""!!#$$####"######$$#"!!!!!!  "##""! !!!! "#""! ! "##"""""""#####$#"!!!!"""! "##$#####""!!"####"###$###$#"""##"!  !"#""!!!!!! !"###"""#"""! #%$"!!"""!!!! !!!!""! $$$%%$"""#$$$##""!!!"""!!"$$####$$$#####$$""!!!!!  "##"!! !!! "##!! ! !""#"""""!"####$$$"!!!!"""! "#########"!!"####""##$#####"""#""!  !"#""!!!!  !####"####! #%%#""!""""!!!!!!!!!""!$$&%$"!"##$$###""!"!!"#" !"$$###$$$#####$$##"! !! !"##"!! !! !"##"! ! !!"""""""!"#$$#$$$#!!!!"""! !"#########""!"##############""""""! !!""!!!! !!  !####"#"!!#%%####"""""""!!!!!! !""$%%%"!!"####$###""!!!!"""!!"$$$#####$#####$#""!!!"!! "##"!! !""! !"##"! ! "##""##""##$$#$$$#!!"!"""! "#$$######""""#$############""""""!  """!!!!!!!! !###"" !$%$####""""""""!!!!!!! !"3 200 130 1 +$$%$""!""###$$$##"!! !!""" !"$$##########$$$##""!!"!! !"#""!!!!"" !"###! !! "##""#####$$###$$#"!"!"""!"#$########!!"#$##########$#"!""#"! !!"""!!!!!!!  ""#" !$&%#"##"##"#""""""!!!!!!!!###$##""""####$$##""! !!""" !"$$##"###$####$$##""!!!"! ""#""!!!!! !#$##!!!!!!!"##""#$####$###$$#"!!""""  !#$$#$####"!!"###$#$$#######!"""#"! !!"""""!!!!! !"" !$%%$###########"""""!!!"!!!$###%%$#"#"###$$$$#""! !!""" "#$###########$$#""!!!!!! "#""!!! !!!!!"###""""!!!"##"##$####$####$#"!!""""  "##$#####""!!"#$####$$######""#""!! !""#""!!!!!!!! !$%$###############"#""!!!"!!#$###$$$#"#"####$$$##"!!!"##" !$$$#"###$####$$$"!! !!! "#"""!!! ! !!##$#"""""!"###"##$########$$#!"!!"#"  "#$#######"""##$#$#$$$#$$####""""!!  !###"!!!!"!! !#%%#!"#$$##########""#"!!!!!!$#$##$%%$###""##$$$###"!!!###" !$%$######$#$$$##"!!! !!  !##""! ! !!"#$##""""!"#$#"##$###$$###$$#"""""#"  !#$$########"##$$#$##$$$#$##"""!!!  "###""!""" !#%%##"""#$############"#"" !"$$$$###%$$####""##$$$##!!!"###!"$%$$########$$$#"!! !!"  "#"""!! !!#$$#"""""""#$####$####$#"#$$#"""""#"  "#$$#####$##"#$$###$$$$$####""""!!!  !"##"""! !$%$##$##""#$$#####"#####"""!! !$$$$$##$$%$$#"####$$$$##"!!####!!$$$$$#######$$$#""!!!"!! !##"!! !!##$$#"#"""############$###$$#"""""#"  "#$$##$#######$$$$##$$#$####""""!!  "###"" !$&%#!"#$##"##$############"#""! $$$#####$$%$###"###$$$$#""!""##! !$$$#####$##$$$$##!!!!""!!"""! !!!!"#$$####""##$#####$$$#$###$$#""""##" !"#$$$#####$####$#$$##$$##"##""""!!! !"#" !$&%$#""##$$####$##############""!%%$#####"$$%$######$$$$###!!!"""! "$$$$#######$$$$#"!!""#"!!#"!!  !!!!"#$$###""###$#"#$$$#$#$###$$#"""""#" !##$######$##"##$$####$$#####"#"""!! !"" !$$##$$$#"##$$####$####"#######"#""%%$$#$##""#$%$######$$$$$##!!!!""! "$$$###$$###$$$$#"!!""##!!""!! !!!!!#$$$$##"""##$####$$$#$$###$$##"""##" !"#$$$#$####""##$$$####$########"""!  !$%#!!#$$$#"#$$$#"##$#########$#####$%%$$#######$%$#####$$$$#$#"""!"##"!"$$$$#$%$$##$$$$#"!"""##! !"#!! !! !"#$$###""##$$###$$$$$$$###$$#""""##"  "#$$$##$###!!##$$$####$###$###"""""!! !$$#!!!!#$$$#"##$$#""#$$##"###########$$$$$##""###$%$#####$$$$$###"#"###"! "$%$#$$%%$$#$$$$""!!""##! !#""!  ! !###########$$#"##$##$$$###$$#"""###" !"#$#$######"!#$$$#$$#$#$###""""##""! !$%#"!!!!"#$$#""####"""##$$############$$$%$$#####"#$$$#####$$###$#$######"! "$%$$$$$$$$#$$$$"!!!"###! !##"!  ! !!##$$#####$#$$#######$$$###$%#""""##"!!#$$$#######""##$$#####$##""""!"""" !$%#"!!!"""##$$#"""###""##$$######$#$##$#$$$%$$#"""#"#%%$$###$$$$#$$###""###"! #$%$##$$$$$$$$$#"!!"####! "###!  !!!"#$$$##$$$$#$$#""##$$$$$$#$$$#""""##" !"$$$$$$##$####$$########"""""""" !$&$""!!""""""#$$#"!"#$##"##$$$#######$#$$##$$$$$##""###%$$$####$$$$$#####"###"! "$%$##$$%$$$$$$#"!!#####! "###! !!!!"#$$$$#$$$$##$##"###$$$$$#$$$#""""##" !"$$$$$#$$$####$$########!""""!!$%%###""!"""""#####"""#$$#""#$$#$#####$$$$$###$$$###""""#%$$$####$#$##########""! !#$%$$#$$$$$$$$%#"!!"###"! "##""! !!!!"#$$$#$$$#$##$##"####$$$###$$$""""##"!!#$$$$$$##$##"##$########""#"!$%###$##"""!""""##$##""###$#"##$$####$##$$$$$$##$####"#"#"#%%$####$$#$$$####"#####! !"$%$$$$$$$$#$$$#"!!"""!! "#$#"!!!!!!!"#$$###$$$##$$########$$$##$$#""""##"! !#$$%$$$$#$##"##$###"#####"!"$%#!!"#$###!!""""##$$$#""##$$#""#$$#######$#$#$$##$$###"""""#$$$$###$##$$#$#####$$$#"!!#$%%$$$$$$###$$#!! !!!!! !###"! !!!!!#$$##$$$$##$$###"####$$###$$##""###"! !#$$$$$$$#$#""#$###""####!!$%#!!!!##$$##"""#""###$$##""#$$#""#$$######$#$###$##$$###""!!"#%$$$$$$$$#$$$$#####$$$#"!!#$%%$$$$###"#$$"! !!!! !##""! !!!!!!#$$$#$$$$##$$####""###$###$$##""####! !#$$%$$$$$$##"##$#"""#"!!$$#"!!!!!##$$$##"""""###$$#"!"####""#$$###$#$$##$#$$######""!"!"#$%$#$$$$$$$$#$#####$$##!! #%%$$$$##""##$#"! !!!!! !#$"!!!!""! !#$%$#$###$$$$$###"""##$###$$##""###"! !#$$$$$$$#$#####$###" "$%#!!"""!!!"$$$$##""""""#$$##"!"###"""#$$$###$$$$#$$$$######"!!!""#$%$##$###$#$##$###$$$#"! "$%$$$$##"""##$"! ! "###"!!!""!!"#$%$$###########""""####$#$%##""####! !#$%$%$$$####"##$#"  #%%# !"""!!!##$$##"""#"""##$##!!"####"##$$##$$$$$$$$$%$#####""!!!""#%$$###$#$#$$###########" #$%$$$##""!!"$##! !!"$##"!""""!!"$$%$#$##########""""##$###$%##""####! !#$$$%$$$####"#$#! #%&$"! !!!!"""!!#$$###"""""""##$$#"!"#$####$$$##$$$$$$$$$$$###"#""!!""##%%$###$$#$$$$$#########! #$%$$$##""!!"$$#!! ! ! "#$##"""##"!"#$%$####"##$$#####"######$$%$#####$#"!!#$$%$$$$######! #%%$##"! !!!!"""!!#$$$##"""""""#$$$#""#$$##"#$$$$$$$$#$$$$$$$###"#""!!""#$%%$#$$$#$#$$$#$#$#####"! !#$%$$$##""""#$$#"! !!! !"#$##"""##"!"#$%$$#"###$$$$##""""##$##$$%$#####$#"!!#$%$$$#$##$#! "%%$"####! !!"""!!!"#$$##""!"""""##$$#""#####""$$$%$$$$#$$$#$$$#"###"""""#"$%%%$$#$#$$$#$#$########"!!#$%$$$######$$$#"!!!!!!!  "$##"!""#"!!"$$%$$####$$$%$########$##$$%######$#"!!#$%$$$$$##! "$%#"""####"!!!!""!!!"#$$###"""""""#$$$#"##$##""##%%%$$$$$$$$#$%$#"####"""####%%$$$$###$$$$###$#$####"!!#$%$$$$#####$$$#"!!!!"""  "#$#""""""!!"$%%$$####$$$%$######$$$##$$%$#$###$#"!"#$$%$$$#! #%%#!""""###"""!!!"""!!"#$$$##"#"#""##$$$####$##"""#%&%$$$#$$$$#$%$#######""###$%%$$$$#$#$#$$$#$$###$##" !"$%$$$$$###$$%$$#""""#""! "$$#"!"""""!#$%%$$####$$%%$######$$$##$%%$#####$#"""#$$$$#! #%&#!!!"""""##"""""""""!!"#$$$$$##"##"##$$####$###""#$%&%%$$$$%$##$%%$#####"""####%%$$$$#$#$$$$$$#$$$$$##" !#$%$$$####$$$$$$#""""###! "$$$""""#""""$%%$$###$$%%$$$######$$$##$%$#####$$#""#$$#! #%&%#! ! !!"!"###!""""##"!!"#$%$$$#"#"##"#$$####$####"$%%%%$$$$$%$$#$$$$###""##""##$%%$$$$#$#$$$$$$$$$#$$#"! !#$%$$#$####$$$$##""#####! !"$$##"""#"""#$%$$$##$$$%$$#$######$$##$$%$#####$##"###!!#%&$$##! !!!!"###"#####"""""#$%$$#"""#""##$$$########%$%%%%$$$$%%$##$$$$###"""""###$%%%$$$$$#$$$$#$$$$#$$#"! "$%$$#####$###$$##"#####! !#$%$#"""#"""#$%%$$###$$$#$#$#$#$#$$$$#$%%$#####$##""!!#&%#"#$$#! !!!""##########""""#$%$#""!"#"""#$$$#$#####%$$$%&&$$$$%%%##$$$$####"#""###$%%$$$#$$$$$$$$$$#$#$$#"! !"$%$$######$###$##"##"##! #$$$#"""#"""#$%%$$#######$$$##$$$$$$$$$$%$####$$$#!!#&%$"!!#%$#"!!!!"""##$#########"""#$$##"!!"###"#$$$##$###%%$$%%&%%$$%%$$##$$$$####"###"##$%%$$$$$#$#$$##$$$$$$##"! "$$$$############"""####" !#%$$#"""##"""$$%%$$#####$$$$#$$$$$$$$$$%%$####$$"!#%%$"""""#%$$#"""""#"##$###$#####"!"#$$##"""""##"##$$$####$%%%%%%%%%$$%%$$###$$$$######""#"$%%$$#$$$$$####$$###$##! !$$$$#######$###"""""##"" !#%$##"""###"#$%%%$$#$$$#$$#$#$$$$$%$$$$%%$$$$#!!#&&%#"""""##%%$#""###"########$####"!"$$%$#""""##"##$$$$$##%$%%$$$$%%%$$%%$$#"#$$$#$$$###"""#$%%%$$$$#$##$#$$$###$$#" !$$$$$##########""""!"""!!!#$%##"""##""#$%%%$$###$$$$$###$$$$$$$#$%%%$#"!#&&%$######"##%%##""####"############!!"$$%$#"""####"##%%%$#%%%%%$##$$%%$%%$$$###$%$$$####""""#$&%%$$$$$$$###$####$$##! !$%$$$$##########"!!""##! "#%%##""###"!"$%%%$$####$$$$###$$$$$$$$$%%$"!#%%%$$$$#####"#$$%##""###"""#$######$#"!!"$%%%#"""#######$$$$%&%%$$$###%%$%%%$$###$%$$##$###""###$&%%$$#$$$$$###$$##$$##" !$%$$######"####""!!""""!!"$%%$######!!##%%%$$#$##$$$$##$$$$$$$$#$$" !$%%##$$$$$##""###$%%$"###$##""######$$#$"!!"$%%$#"""#$#####$%$%%%%%$$#"#$%&$$%%%$$##$$$######""""##%%%%$#$$$%$#$#$####$$$#" "$%$$$########$##!!"""#"!!"$%%$##"#""!!#$%%%$###$$#$$$$#$$$$$$$$#" "$%&"!!#$$$$$#######$%$###$$$#"""$#$###$$##"!!"$%%$#""""######$$%%%$$$$####%%%$%%%%$$##$%$$#####""""##%%%%$$$$%%$$$#$$###$$$#"!"$%$$$#$######$##"!"###"!!"$%%$##""##"!"$%%%$$$#$$$%$$$$#$$$$$#! "$%%$"! !#$$$$$$$#####$%%$###$$##""#$$#######"!!"#%%$#"""#######$$$$$$##$$$$$%%%$%%%%$$$#$$$#$#####"""##$%%%$$$$%%%$$#$####$##"! "$%%$$#$#$#######!""###""!"$%%$#""###""##%%%%%$$$$$%%$$#$$$$#" "$%&$###!!!#$$%%$$#$#####%$####$$##"#$$$###$###"!!"#%%$##""#$####$%$$$#$$$%%$$$%%%%%&%%$$$##%$#####$#####$%%&$$#$%%%%$$##$######"!!$$%#$#$##$###$##""#####"!"$%%##"###""!"$%%%%%%%$$$%$$$$$$#! "$%&#"####! !"$$$$$#$##$###$%$#####$####$$$###$$#"!!"$$%$$#"""###"#$$###$$%%%%$$%%%%%%&%%%$##$$$$##$$$##"###$%%$$$$$%$$$$###$####!! !#%$$$###############$##"!"$%$$#####"""##%&%&%$$$$$$%$$$#" !#%&&$#"####"!!"##$$$$##$####$$$$###$$$####$$$$#$$$##"!"#$%$$#""#####$$##$$%%%%%&%%%%%%%%%%%$$$#$%$$$#$#$####$#$&%$$#$$$$$$#######"""" !$%%$#####"###$######$##"!"$%%$##"###""#$%%%%%$$$$%%%$#! !"$&&&%########"!"#$$$$#$#$#####%$####$$$####$$$###$$$#"!"#$%$###"###"$#$#$$%%%%&%%%$$$$%%%%%$$$$#$%%$$####$###$#$&%$$##$$$$$$$##$####""!!#%$$$$$####$$$$##$##$$#"!"$%%$##"###"!"#%&%%%$$$$$%$! !"%&&%$%%$#"#####"!"##$$$########$%%$###$$$####$$$####$##"""$$%$#########$$$%%$$%%%%%$$$%%%%%%%%%$$$%%$$$##$######$$&%%$#$#$$$$$##$#$$$##"! !#%%$$##$###$$$$####$$$#"!"$%%$##"##""""#%%%%%$$$%$" !#$&&%$#$%%$#######"""#$$$$##$#$$##$%%$###$%%$###$$$####$$#""##$%$$#######$$%%%%%%%%%$$$$$&%%$%%%%%$$%%%%$####$$###$$%%%%$$#$$$$$#$#$$$$##"""! !$%%$$$$$$$$$$$$#$#$$$##"!!#%%%$####"!!"#%%%%$$$$" !"$&&$$$###$%$#######"""#$$$###$$$###$%%$###$$%$##$$$##"##$%$#"#$$%$#####$#$%%%%%%%%$$$$$%%$%%%$%&%%%$%$%%$$$####$####$%%&%$##$$#$$$####$##""""!!$%%$$$#$$#$$%$$###$$$#""!!#%%$####$""!"$$%%%$#! !#%&&%##$$$#$%%$#######"!"#$$$###$$$$##$%%$##$$%%$##$$$$###$%$$#"#$$$$$#$#$%%%$%%%%%%$$$%%%%$##$%%%&%&%$%$%%%$$$###$$####%%%%$$#$#$$$#####$$"!!!!!"$%%$$$#$$$$$%$$##$#$$##"""#%%$$#####"""$%%$$! !#$&&%$$$$$$$#$%%$$######"""#$$$$$$$$$$$#$%%$$#$%%%$#$$%$$##$$%$$###$$$$$$$%%%%%%%%%%$%$%%%%$$#"$%%%%&%%%$$$%%%$#$##$####$$$&%%$$##$$#$#######"!!!!! !$%%$$$###$$$$$#$#$$#$$$#""#%%$$###$####$$$! !#%'&%$$$#$#$$$#$%%$####"##"""#$$$$$$$$$$$$$%%$#$$$%%$$$%%%$####$$####$%$$$$%&%%&&%%%%%$%%%&%$$###$%%%&%%%$$$%$%%$$####$#####$&%%$#$$#$$########!!!!""! "$%%$$$$$$$$$$$$$$$$$$$%#""#%%$#$#$$$#$$#" !#%&&&%$$$$$$$$$$##%%$$######"""#$$$##$#$$$$$$%%$$$$%%%$$$%%$$$#$$$$$###$$%$$%%%&%%%%%$$%%%%%$$$$###$%%%%&%%$$$%%%%$$######"#$$%%%%$#$##$$$####$##!!!"#! !"$%%$$#$####$#$$$%$$$$%$$""#$%$####$$$#! !#%&'%$%%$$$$$$#$$###$%$$######"""#$$$##$$$$$$$$%%$$$$%$%$$$%%$$###$$$$###$$%$&%&%%%%%$%%%%%%$$$$$$###$%%%%&%$$$%%%%%%#$####""##$$&%%$$$#$$$$####$$""!""#"! "$%%$$$$$$###$$%$$%$$$$%#""#%$$####$#" !#%&&%$$%%%%$$$$$$$$####%$$######"!"#$$$####$$$$$$%%%$%$$%$$$$%%$$$#$#$$$###$$%%%&%&%%%%%%%%%$#$$$$$$$$$%%%$%%%%$%%%%%%$###$###"##$$&%%$#$$$$$$###$$##"!""#"!!"$%%$$$#$#$$$$$$%$$$$$$$$""#%$#####" !"%&&%$$$$%&%$$$$$###$###$%$$#######""#$%%$$$$$%$$$$%%%$$$$$$%$$%$$$#$#$$$$$##$$&&%%%&%%$%%%%$#$$#$#$$%%%$$$%$%&%%%%%%&%%$$#########$$%%%$$$#$$$####$$$#"!""#"!!"$%%%$$$$$$$$$$$%$$$$$$$#""$%%$$#" !#$&'%%$$$%%%&%$$$##$#$###$$%$$######"""#$%$%$#$$$%$$$%%%$$$#$$%%$%%$$$$$$$$$$$$#&%%%%%%%%%%$#$###$$$$%&%%$$$%%%%&&%%%%%&%%$$$#$###"##$$&%%$#$$#$$####$$##"""###!!#$%%%$$$$$$$$$%$%$$$$$$$#""$%%$" !"%&'&%%%%%$%%%%%$$####$#$$##$%$$#######""#%%$%$$$$%%$$$$%%$$#$$%%%%%%$$#$$$%%$$##%&&%&%%%%%$$$$$###$$%&%%%$##$%&%&&%%$%%%&%%$$$#$$##"###$%%$$##$#$$####$$##""####!!"$%%%%$%$$$$$$$$%%$$$$$$$##$%" !#%&&%%%%%%$%$%%&%%$$#####$$%$$$%$$$$$$###""#$%%%$$$$%%$$$%%%$$$$$%%%%%%$$$$$$$%$# &&&%%%%&%$$$$$##$$$%%%%%%$$##%%&%%%&%$%%%%&%$$$#####"###$%%$$$##$$$####$$$##"####"!"$&%%%%$%$$$$$$$$%$$$$$$$$#" !!#%&&$$%%&%%%$%$%%%&%%$####$$$%$$$%%######$#""#$%%$$$$%%%%$$%&%$$$$$%%%%%%$$$$$$$# &&%%%%%%$$$$$##$$$%%&%%$$$#$$$%%%%&%%%%%$%%%&%$###$##""##$%%%$##$$$$##"#$$$##"####!!"$%&%%%$%%$$#$$%$$$$$$$%#! !#%&&$$#$%%&%%%%%%%%%&%$$#$$##$%$$#$$$####$$##""#$%%$$$%%%%%%$%%%%$#$$%%&%%%%$$$$#&%&%%%$$##$####$$%&%%%%$$$$$%$$$%%%&%%%%%&%&%&%$$#####"###$&%%$##$$$$##"#$$$#""##$#"!"%%%%%%$%$$$$$$%$$$$$$$!!!#%&%$#$$$#%%&%%%%$$%$%%%%$######$$##$%$#$#$$$##""#$%%%$%%&%%%$$%%%$$$$%%%&&%%$$$"&%%%&%$#$$####$$%%%%%%$$##$%%%###%%%%%%%%&%&&%%%$###$#""###$&%%$##$$%$$#"#$$$#####$#!!"%&%%%%%%%$$$$$%$$$$#" !!#%&%#"##$$$$%%&&%%$$$$$%%%$$$###"#$$##$%$##$$$#$#""#$%%%%%%&&%%$$%%%%$%$%%%%%%%$" %%%%%$$$$$#$#$%%&%&%%$$$$%%%%$$#$$%%%%%%%%%&%%&%%$$#$$#"""##$&%%$#$$%%$####$$$#"###$#!!"$%&%%%%$%$$$%%$%$#" !#%'&$##"##$##$%&%&%%%$$$$%%%$$##""##$$##$%$##$##$$#"##$$%%%%%%%%%$$%%%%%%$%%%&%$#  %%%$$$$%$###$%%%%%%$$$%$%%%%$$$$$$%%%%%%%%%%&%%%%$#$$$##"!""#$%&%$#$$$%%$#"#$$#####$$#!!#%&%%%%%%$$$%$%%$" !"#%&&%$#####$$$#$$&&%&%%$$$$%%%$###""##$$##$%$##$$$$$#"#$$%%$%$$$%%%$$%%%%%%$%%%$# !&%$$#$%$$#$$%%&%&%$$$%$%&%%%$$$$$$$%&%%%&%%%%%%%&%%##$###"""##$%%$$##$%$$$###$$$#####$#"!"%%&%%%%$$$%%%$" !#%&%#$%%$####$$#$$$%&%%%%%$$$%%%$###"##$$$##$%$#####$$##"#$%%%$%$%%%%$$%%%%%%%%$# !#%$$$$%%$$#$%%%&%%%$$$%&%%%$$$%$$$#$%%%&%%%%%&&%%%&%%##$$$$#""##$%%%###$%%$$$##$$$####$##! #%&&%%%%%%$$$" "#%&&$""$%%$$#$#$$#$$%%%&&%%%$$$%%%%######$%$#$$%$####$$$$###$$%%%%$%%%$#$%%%$%$$# !#&$##$%%$$#$%%%&%%$$$$%%%%%$$$%$$##$$$$$%&%&%&%%&%&%%%$$#$$$$#####$&%$$##$$%$$$##$$$$#####"!!#%%&&%%%%%$! !"#%'&%$$##$%$$$#$$$$$##$%%%%%%$%$$%%%$$####$$$$##$%$$###$$$###$$%%%%%%$%%%$#%%%%$# !$&&##$%%%$$$%%%&%%%$$%$%&%%$$$$$$$$$%%$$$%%&%%%%%&&%%&%%$$$$%$$###$$$%&$$#$$$%$$#$#$$$$#####"!"#%&%&%%%$" !!#%&%%$%%$#"$%%$#$$$$$###$%&%%%%$$$%%%%%$####$$%$##$%$$###$$%$##$$%%%%$%$%%%$$%%$# !"$%&%##$%%$#$%%&%%%%$%$%%%%%$$$$$$$$$%%%$$$$%%&%%%%%&%%%%&%$$$$$$######$%&%###$%%$$###$$$$######!"#%&&%%%"  !!#%&&$$$%%%$##$$%$#$$$$$###$%%%%%%%$$%%&%$$###$$$$$##%%%$###$$$$##$$%%%%$%$%%$$$$#  !!#%&$#$$$$$#$%%%%&%%%$%%%&%%$$$$$$$$$%&%%$%%%%%&%&%%%&&%%%%%%$#$$$$$#####$%%%$$$$$%%$$##$$%$$$#$##""#%&%%"  !!$%'&$##$$$%%$##$%$$#$$$$$##"$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$$#$%%%%%%%%%%%## !$&%$"#$$$##$%%&&&%%%%%%%&%%$$$$%$$$%%%%%%%%%&%&%&%%&%%&%%$$$%%$$$$$$##"###$%%%$#$$$$%$$##$$%%$$$$$#""$%%# !"#%&&%$$###$$%%$##$%%$$$$$$$###$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$#$$%%%%$%$%%$#  "$%%$""#%$$$$%%&%%%&%%$%%&%%$$$$%$$$%%%%%$%%&%%&%%&&&%&%%&%%$$$$%$$$$$###"###$%%%$$$$%%$$$$$$$%$$#$$$##"#" !"#%&&%$%$$##$$$$%$##$$%$$$$$#$#"##%&%%$$$%%%%%%$$$#$$$$$##$$%%$####$$$$#$%%&%%%$$#  "$%&#""#$%%%%%%&%%%&%%%%%%%%$$$$$$$%%%&%%%%&%%&%%&%%%&&%%&%&%%$$$$$$$$$$$##""##$%%%$$$$$%%$$#$$$%$$$$%%%#!!!"#&'&$#$%%%$##$#$#$###$$$$#$#####"#$%%%%%$$$%%%&%$$##$#$$$###%%%$$###$$$$$$%%%%$$" !"$%%#"###$%%%%%&%%%%%%%%&%&%$##$$%%$%%%%%%%&%%&%%&%%%%%%&%%&%%%%$#$$$$#$$$$$#"""#$%%%$$$%$%%$$##$%$$$%%%$" !"$%'%%$$#$%%%$#$####$#"#$%$$$$$######%%%%%%$$%%%%%%$$##$#$$$$##$%%$$###$$$$$$%%%$#  !"#%%#"####$%%%%&&%&&%%%%&%%%$#$$$%$$%%%%%$%%%%%%&%&%&%%$%%&&%%&%%$$##$$$#$$$$##""##$&&%$%$$%%%$$$$$%%$%%%"  !!"$%'&%$$$$$%%&%%######$$###%%#$#$####$#$%%&%%$%%&%&%%$#$$$$#$$$##%%%$$$$#$%$$$$%$#  !"#%%#""###$$%%&%%%%%%%%%%%&%$$$$%$%%%%%%$$%%%%%%%%%%%%%%$$%%&%&%%%%$$#$$%$$#$$$#"!"#$$%&%%$%$%$%%$$$$%%%$"  !!"#%'&%%%$$$$$%%&%$$##$$$$##"$$%$$$###$##$$%%%&%%%%%%%%%$$$$$$$$$$##%%%%$#$$$$$$$$#  !"$%%#""###$$%%%&&%%%&%%%%&%%%%$%%%%$%&%%%%$%%%%%%&%&%%%%%$#$%%%%&%%%%%$#$$$$$#$$##"""##%%&%$$$%%%%%$$$%%$"  !!"#%&'&&%%%%$%$$%%&%%$$$$$$$###$%%$$$###$###$%%%%$$%%&%%%%$$$$$$$$$$##%%%%$$#$$%%$#  !"$%%#!""##$$$$%&%%&%&%%%%&%%%%%%%%%%%%%%$$$%%%%%%&%&%&%%%$$$$$%&%%&&%%%%$$$%%$$#####"""##%%&%$%$$$%%%%$$$" !!"#%&%%%&&&%%$$$$%%%&%%%%$$$$$$##$%%$$$#"#####$%%%%$$%%&%%%%$$$$$#$$%$#$%%%%$$$$$$# !!"$%%#""###$$%%%%&%&%&&&%&&%&%%$$%%%$%%%%%$%%%%$%%%%&%%%%%%%$%%%%$$%%%&&%%$$#$%%$###$$##""##%%&&%$%$%$%$$#! !!"$%&%#"#%&&%%%%%%%%%&&%%%%$$$$$###$$%$$##"######$%%%$$%%%%%%$$#$###$$%$$$%&%$$$$$#  !!"$&%#""##$$%%%%$&%&%&&%%&%%&%%%$%$$$$%%%$$%%%%%%%%&%%&%%%$$$%%%%###$%%%%%%%%$$$%%$##$$###""#$%%&%%$$$$%$#  !!##&&&$"""#%&%&%&%%%$%%%&%%%$$$$$$$##$%$$##"#$$#! !$%%$$$%%%%%%%$#$$$$#$$%$%%%%$$$# !"$&%#""###$$%%%$$&%%&%&%&&%%%%$%$$$$$%%$$%%%%%%%%%&%&%&%%%$%%%&%$##"#$$%%&%%%%$$%%%$#######""#$%%&%$%%$$#! !"#$%&&$$$#""#%&&%&%%%%%%%%&%%%$%$$$$$""#%$$#####!!$%%%$$%$$%$%%$#$$$$$$%%%%%&%$"  !!"$&%#!"###$$%%%$$#%%&%%&%%&%%$%$$$$$$%%%$$$%&%%%%%&%%&%%%%%%%&%%$####"#$%%%&&%&%%$%&%$#######""##$%&%%%%#! !!"$&&&$%$$$#""#%&&%&%%%%%%%%&%%%$$$$$$##"#$%$$$#"#$%%%$$%$$$%%%$$$$$$$$%%%%%%#! !!"$%%#""###$%%%$$###%&%%%&%&%%%$%$%$$%%%$$$%%&%%%%%&%%&%%$$%%%&%%$##$$####$%%%%&&%%%%%&%$#######""##%%&%%$" !!!$%&&$$$%%$$$""#%&%%&%%%%%%%%&%%%$$$$$%##"#%%$$# #$%%%%%$$$%%%%$$$$$$#$$%$$# !!!"$&%$"####$%%%%$##$$&%&%&%&%%%%%$%$%%%%%$$$%%%%%%&%&%&%%$$%%&%%%###$$#$###%%&%&%%&&%%%%%%$######"""##$&%$" !!"$%&&%$%$%%%%$$#"#%&&%&%%%%%$%%%&%$$$%$%$$""#%%%#! #$%%%%%$$$%%%%$$$$$#$$%$" !!!"$&%$"##$$$%%%%$###$$%&%&&&%%%%$$%$%%%%%$$$%%%%%%%%&%%%%%$%%%%%$###$$$$#$$$$%%&%%%%%%%%%%&&%$#####"""#$$$! !!"$%'%$$%%%%$%%%$##!#%&&%&%%%%%$%%%%%%$%%%$$#""#$%%$#"! "$%%%%%$%%%%%%$$$%$$$#" !!#$&%$"##$#$%%%$$$$$#$%&%&&&%%%%$%$$%%&%%$$$%%%$$%%&%%&&%%%%%%&%%###$$$#$$$%&%%%%%%%%%&%&%%%%%%$$######### !!#$%'&%$$%%%%%%$%%%#"!#%&&%%%%%%%%%&&%%$$$$$$$#""#$&&&$"! "$%&%%%$$%%%%%$$$$$#"!!!#$&&$###$$$%%%%$#$#$$$%%&&&%&%%$$$$%&&%%$$$%%%$$$%&%%&%%%%%%%&%%$##$$$$#$$%%&&%$%%%%%%%&%&%%%&&%$$$$$#$$# !!#$&'&%%%$$%%%%%%$$%$$""#%&&%%%%%%%%%%&%%%$$$$#$#""#%%&%$"! "$%%&%%$%%%%%%$$%$" !!#%&&$"##$$$%%%%$$$$$$%%&&&%%%%%%$$%%%%%%$$$%%%$%%%&%%&%&%%$%%&%%#$$%%$$$$$%%&&%%%$$%&%%$%%%%%&&%%%$$#$$%#  !!#$&&&%%&%%%$$%%%%$%$%$$#"#%&&%%%%&&%%&%%&%%$$#$$$#""#%&&%$"! "$%%%%%%%%&%%%$$" !"#%&&%##$$$$%%%%$$#$$$%%&&&&%&%%$$$$%%&%%$$$%%%%%%%&%&%%&%%%%%&%%##$%%%%$%%%&&&%%%%$#$%%%%$%%%%%&&&%%$$$%#! !"$&'&%%%%%%%$%$%%%%$%%%$$#"#%&&%%&&%&%%&%&%%%$$%$%$##"#$&&&$"! #$%%%%%%%%&%%$" !!#%&&%$$$$%%%%%%$####$$&&&&&&%%%$$%$%%%%%$#$$%%%%%%%&%%&&%&%%%&&%$#$%%%%%%%%&&&%%%%$$##%%&%%%%%%%%%%&%%$%#! !!"$%'&%%%%%&%%%%%$%%$%$$%%$$##$%&&&%%&%%%%%%&&%%$%$%$%#""#$%&&$!! #%%%%%%%%%%%"  !"#%&&%$$$$%%%$%$$$$###$%&&&&%%%%$%%%%%%%%$##$%%%%%%%&%%&&&%%%&&&%$#$%%%%%$%%%&&&&%%$$$$$%&%&&%%%%%%%%%&%%#! !"$%'&&&%%%%%%%%%%%%%%%%$%$%%$##$%&&%%%%%&%&%%%&%%$$$$$$#""#$%&%$"! "$%%&%%%%$" !"#%'&%$$$$%$$$%%$$###$$%%&&%%&%%%%%%%%%%%$$$%%$%%&&&%&%&&%%%%&%%$##$%%%%%$$%%&&%%%%$$$$$%%%%&&%%%%%%%%%%%$! !!"$%&%%%&&&%%&&%&%%&%%%$%%%%%%%$##$%&&%%%%%%%&%&%&%%#$$$$%##"#$&&%$"! #$%%%%$$! !!#%&&&%$$$$$$%%%$$$$#$$%&&&&%$%%%%%%%%%%%$$$%%%%%%%&%&%%%%&%%&&&%##$$%%&%$$%&&&%%%%%$$$%%&%$%%%&%&%%%%%%%$  !"$&&%$$$%&&&%%%&%%%%%%%%%%%%&%&%$""$%&&%%%%%%&%%&%%&$##$$$%$###$&&&$"! "$%%%$! !!$%'&&%$%$$$%%$%$%$$##$%&&&%%$$%%%%&%%%%%%%$%&%&%%%&%%%&%&%%%&%&%$#$%%&%%$%%%&&&&%%$%%%%&%%$$$$$%%%&%%%%%#  !!#$&&&$##$$%&'&&&%&%%%&&%%%%%%%&%%$$#"$%&&&%%%%%%&%%&%%$##$$%%$###$&&&$#!!"$%$" !"#%&&%%%$$$$$$%%%%%$$$$%%&&%%$$$%%%%%%%%%%$$%%%%%&%&%&%&%&%%%%%%%$#$%%&%%%$%%&&&%%%%%%%%%%%%%$$##$%&%%%%%#  !!#$&&%$$$$$$$%&&&%%%%%%%%%%%%%%$%%%%$##"#%&&&&&%%&%&%&%&%$$$$%%%$###$&&&$#! !#" !!#%&&%%%$$##$%%%%%%%$$$%&&'&%$$$$%%%&&%%%%%%%%%%%%%&%&%%&%%%%&&&%$#$%%&%%$$%%&&&%%%%%%%%&&&%%%%$#$$$%&%%%#  !#$&&%$$#$##$$$&&'&%&%%%%%&&%%%%%$%%%$$$""$%&&&%&%%&%%%%%&%%$$$$$%$##$%&&&$#!  !!#%&&%$$$###$%%%%%%%$$%%&&&&%$$$$$%%&%%&%%%$%%%%%%%&%&%&%%%&%&%&%$$$%%%%%%$%%&&&%%%%%%%&&%%%%%%$$$%$$%%&%#  !!#$&'%%$$$$$$##$$%&'&%%%%%%%%&%%%%%$%%%%$$#"$%&&&&%%%&%&%%&%%%$$$$%%$###%%&&$"!! !!$%&%$$$$##$$%&%%&%%%%%%&&&&%$$$$$$&%%&%%%$%%%%%%%%%%&%%%&&%&%&&%$$%%%%%%%%%%&&&%&%%$%%&%&&%%%$$$$$$$%%%%#  !!#$&'&%$$$$%%$$##$%%&&&&%%%%%%&%&%%%%$%$%%$$#"$%&&&&%%%&%%&%&%%%$$$$$$$###%%&%$#!!  !"#%&&$#####$$%%%%%%%%%%%&&&&%$$$$$$$%%&%%%$$%%%%%%%%&&%%&&%%%%&&%$$$%&%&%%$%%&&%&%%%%%%%&&%%%%%$$$$$$%%%$"  !!#$&'&%%&%$$$$%$$##$$%&&&%&%%%%%&%%%%%%$%%%%$$#"#%&&&%%&%&&%%%&%%%$$$$$$$##$%&'&%#!! !#%&%######$$%%%%%%%%%%%%'&&%$$$%%%$%&%%%%%%%%%%%%&&%%%&&%%&%&&&%$$$%&%%%%$&&&%%&%%&%%%&&&%%%%%%$%%%%%&&%# !!#%&'%%%%%&%%$%$$$##$$$$&&&%%&%%%%%&%%%%%$%$%%$$""#%&&&&%&&%&%&%%%%%$$$$$%$$#$%&&%#!!!!!"#%&%####$#$%%%%%$%%%%%%%&&%%$%$%%%%%%&%%%%$%%%&%&%%&%&%%&%&%&&%%%$$%&%%%%%%&&&&%%&%%%&%&%%%%%%%$%%%%%&&%#  !"#%&'&%$%%&%%%$$%$$%$#$$$%&&&%%&%%%&%%&%%%%%$%$%$##"$%&&&%%&&%&%%%%&%%$$$$$%%$$$%%#!!!!!!#%&$#"###$$$%%&%%%%%%$%%&&&$$$$%%%%%%%%%%%%%%&%%&%&&&&%%&%%%&%&%%$$%&%%%%%%&%&%%%&%&%%&&%&%%$%$$%%%$%%&%#  !"#%&'&%%%%%%%&&%$$$$%$$$$$$&&'&&%&%&%%&%%%%%%%%%%$$$###&&&&%&&%%%&&%%%%%$%$$%%%$$#!  !!"#%&%#"##$$$%%%%%%%%%%%%&&&&%%$$%%$$%%%%%%%%%%&%%&%&%&%&%&%&&&&%%$$$%&%%%$%%%%&%%&&%&%%&&&&%$%%%%%%%%%%&$#  !"#%&'&&%&&%%%%%%%%$$%$%%$$$$%%&&&&%%&%&%&%&%%%%%%$$%%$##$%&%&%%%%%%%%%%%%%$%$%%%%#! !!#%&%##$$$%$$%%%%%%%%$$%%&'&&%%%%%$$%%%%$%%%%%%%&%%&%&%%%&%%&&&%%$$$%%%&%%%%&&&%&%%%&%&&&&%%$%%%%%%%%%%&$" !"#%&'&%%%&%%%%%%%&&%%$%%%%%$%%%%&&&%&%&%%%&%&%%%%%$%%%&%$#$&&&%&%%%%%%%%$%%%$%%%%$! !"#%&%###$$%%%%%%%&&%%%$%%&&&%%%%%$$%%%%%$$%%%%%%%%&%&%%&&%%&&&%&%$$$%%%%%%%%&&%&%&&&%%&%&&%%$%%%$%%%%&&%$#  !"#%&'&%&%&%&&&&%%%%%%%$$%%%%%$$$%%&&&%&%%&%%&%%&%%%%$%%&%&$#$&&&%&%%%%%%%%%%%%%$%$! !!#%&%###$%$$%%%%%%%%%%$%%&&&%%%%%%$%$%%%$$$%&%%%%%%%&%%&%%%&%&&&$$$$%%&%%%%%%&%&%%&%%&%&&&%%%%%%%%%%$%%%%#  !!#%&'&%%%&&%&&&%&%%$%%&%%%%%%%%$$%%%&&&%%%%%&%&%%&%%%$$%%&&&$$$%&&%%%%%%%%%%%%%%%#! !"#%&%$##$%$$%%$%%%&%%%$%&&''%%%%%$%%%%&%$#$$&%%%%%&%&&%&&&%&&&&%%$$$%&%%%%%%%&%&%%&%%&%&&&%%%%%&%%%%%%&%%# !!"#%&'&%%%%%%&&&&&&%%%%%%%%%%%%%$$$$$%%&&&&%&%&%%&&%%%%%$%%&%%&$$$&&&&%%%$%%%%%%%%$! !"#%&&##$$%$%%%%%%%%%%%$%%&'&%%%%$$%%%%%%$$$$$%%%%%%%&&%&%%%&%&&&%$$$%%%%%%%%%&&%&%&&%&%&&&%%%%%&%&%%%%%%%#!!!"#%&'&%&%%%%%&&&&&&&%%%$%&&%%%%$$$$%%$%%&&&%&%&%&&%&&%&%%$$$%%%%%$$%&%&%%%%%%%%%%$! !"$%&&##$%%%%%%$%%%%%%%%%%&'&%%$%$$%$%%&%%%$##$%%%&&&&%&&%&%&%&&%%$$%%%%%%%%%&&%&%%&&%%%&&&%&%%%&%&%%%%%&%#!!!"#%&'&%%$$%%%&%&&&&&&%&%%%%&%&%%%$$$$$$%$%&&&%&%%%&&%%&%%%$$#$$%%%$$$&&%&%%%%%&%%#!!!"$%'%$#$%%$%$%$$$%%%%%%%&''&%%$%%%%$%%&%$$$$#$#%%%%&%&&&%&%%&&&&$##$%%%%$%%&&%&%%&&&%&&&&&&%%&%&&&%&%%%%$#  !"#%&&%%%$%$%&%%%%&&%%%&%&%%%%&&%%%%$$$$$$%%%&&&&&%&%%&&&&%&%$$$$$%%%$#$%&&%%%%%%%$! !!"$%&%$#$%$%%$%$$$$%%%%%%&&&&%%%%%$%%%&%%%#$#####%%%&%&&&%&%%&&&&%$$$%%%%%%%&&%&&%&&&&&&%&&%%%&%&&&%&%%&%%# !!"#%&'%%$$%%%%%%&%%%&&&%&&%&&%%%%&%%%%$$$$$$$$%&&&%&%%&%&&%&&&%%$$$$$%%%$$%&&&%%%%$" !!"$%&%$#$%%%%$%$%$%%%%%%%%&&&%$$%$$%%%%&%$$#$##$##%&&%&%%%&%%&&&&%$$$%%%%%$%%&&&%%&%&&&%&&&&%%&%&&%%%%%&%%# !!"#%&&%%$%%%%%&&%%%%%%&%%&&&&%%%%%%&%%%$%%$$$#$%%&&&%&%%&%&&&%&&%%$$$$%%%$$%&&%%%%#! !"#%&%$#$$%$$%$%%$%%%%%%%&''&%%$%%%$%%%&%$$#$$$##$%&%%&%&%&%&&&&%%$#$%%%%%%%%&%&%&%&&&%&&&%&%&&&&&%%$%%%%%# !!"#%&'&$$%%%%&&%%%&%&%%%&&&&&&&&%%$$&&%%%$$%$$#$$$%&&&%&%&%&&&&&&%&%%$$$%%&%$%&&&%$! !!"$&&&$#$$%$$%%%$%%%%%%%&&&'&%%%%%%%%%%%%$$$$$$#$$%&%&%%&%%%&&&&&%$$$%%%%%%%&&&&%&%%&%%&%%&%%&%&&&%%%%$%%$#  !""$%&'%$%$%%&%&%&%%%&%%%%&&&&&&&&%%%$$%&%%%%%$$###$$%&&&%&%&%&&&&&&%%%%$$$%%%%$%&%$! ""$%'%##$$%%$%$%%%%&%%%%&%'&&%%%$%%%%%%%%%$$%$$$#$%&&&%%&%%&&&&&&%%$$%%%%%%%%&&&%%%&&&%&%&&%&%&&&&%%%%%&%$#! !"##%&'%%$$$%%%&%&%%%&%%%%%&&'&&&&&&&%%$%%&%%%$%$$$#$$$%%&&&%%%&%&&&&&&%%%$$$%%%%%%$" !!"$&&%##$$%$$$%%%%%%%&%%%&'&&&%%%%%%%&%&%%%%%%$$$$%&&&&%&%&&&%&&&%%%$%%%%%%%%&&&%%&&%%&&%&&&&%&&%%&%%%%%%%#! !""#%''%%$$%%%%&%&%%&%&%%%&&&&%&&&&&&%&%%%%%&%%%$$%$$$$$$%&&&&%%%%&%&&&&%&%%$%$$%%%$! !!"$%&%##$$$$$%%%%%%%%%%&%&&'&%%%$%$%%%%%%$%%%%$$$$&&&&%%&%&&%&&&&%%$$%%%%%%%&&&&%&%%%&&%&&&&%&&&&%%%%%%%%$#! !""$%&'%%$$$%%%&%&%%%&%%%%&&&&%$%%&&&&&&&%%%%&&%%$%%%$$$%%%%&&&&%%%%%%&&&&&%%%%%$%%$" !!"$%&%###$$$$$%%&%&%%%%&%&&'&%%%%$%%%%&&%%$%%%$###%&&&%%%&&&&&&'&%%$%%%%%%%%%&&&%&%&%&%%&&&&%&%&%&%%%&%%%$$! !""#%''&%$$$%%%&&%%&%&%&%&%&&&%%$#$%%%%&&&&&%%%&&%%$$%%%%%$%%%&'&%&%%%%%&&&&&%%%%%%$" !!#$&&%####$$$$%%&%%%%%%%%&&&&%%%$$%$%%&&%%$%%%$###%%&%$$%&&&%&&&&%%$%%%%%%%%%&&&&&%&%%&&&&&&%&%&%%%%%&%%%$$! !"#$%'&&$$$$%%&&&%%&%&%%%%%&&&%%$$##$%&%&&&&&&%%%&&%%%%%%%%%%%%%&&&&&%%%%%&&&&&%&%&$" !"#$&&&###$$$$$%%&&&&%%%%&&&'&%%$$$$%%%&&%%%%%$$##$%&&%$$$%&&&&&&&%%$%%%&%%%%&&&&&%%&%%&&&&&&&%%&%%%%%%%&%$#! !!"#$%&'&$$$$%%&&&&%&%&%&%%&&&&&%$$$$$$%&&&&&&&&&%%%&&%%%%%%%$%$%$%&&&&%%%&%%&&&&%%%$"  !"#$%'%$##$$%$%%%&&%%%%%%&&&'&%%%$%$%%%&&%$$$%%$##$%&&%%$$%%&&&&&&%%$%&%&%%%%&&&&%%&%%&%&&&&&&&&%%%%%%%&%%%#! !!"#$%''%%%$%%%&&&&%%%&%&%&%&&&&%$$$$%%%%&&'&&%&&&&&%%%&%%%%%%%%%$%%%&&&&&%%&%&&&&&%$" !!""$&'%$##$$$%%%%&&%&%%$%%%&&&&%%%$$%%%&&%%$$%%$#$$%%&%%$$%%%&&&&&%%%%%%%%%%%&&&&&%&%%&%&&&&&&&&%%%%$%%&%&&%"!!!"#$%''%%$$$%&&&&%%%&&%%%%%&&&%$$$$$%%%%%&&&&&&%&&&&&%%&&%%%%%%%%%%%%%&'&&&%%&%%%&&$" !!"#$&&&$$$$$$$%%%&%&%%%%%%&&&%%$%$$$%%%&&&%%%%%$$#$%&&&$$$$%&%&&&&%$%%&%&%%%%%&&&&%&%&%&&&&&&%&&%%%%%$%%%&%%# !""#$%''&%%$$%%&&&&%&&%%&%%%&&%%%$$$$%%%&&&&%&&&&%&%&&%&%%&&&%&&&%%%%%%%%&'&&%&%&%&%$" !!"#$%'&$$$$$%$%%%&%%&%%%%%&''&%%$$$$%%%&&%%%%%%$##%%&&%%%$%%%%&&&&%%$%%%%%&%&&&&&%%&%%%&&&&&&&&&%&%%%$%%%&%&# !""#$%'&&%$$$%%&&&&&%%&&%%%&&&&%%$$$$$%%&&&&&%%%&&&%&%&&&%&&&&%&%&%&%%%%%%%&&'&%&%%&$" !!"#$%'&$##$$$$%%%%%&%%%%%%&&&&%$$$$%%%%&&%%%$%$$$#$%&'&%%$%%%&%%'&%$$%%%&%&%&&&&&%&%%&&%&&&&&%&&&%%%&%&&&&%%# "##$%&'&$$$$%%&&&&&%&&%&&%&&&&%%$$$$$%&&&&&&%%%$%%&&%%%%&&%&&&&%&%&&&%%%%%%&&&&%%&%$" !""#$%'&$$#$#$$%%&%&%%%$%%%&'&&$$$$$%$%&&&&%%%%%$#$$&&&%%$%%%%%&%&&%%$$%%&%&%%&&&&&%%%&%%&&&&&%%%%%&%&%&&&&&%# !"#$%''%$$$$%&&&&&%&&&&&%%&&&&&&%%$$$%%%&&&&%&%%$$%%&&&%&%%&&%&%&%&%&&&&%%%&%%&'&%%%" !!"#$&'&$$$$##$$%%%&%%%%$%%&'&%%$$$$%%%%&&%%%%%%$$$$%&&&$$$$%%%&%&%%%$$%%&%&%%&&&%%%&%&%&&&&&&%%&&%&%&%&&%&%%# !##$%''&%$$%%%&&'&%&&&&%%%%&&&%%%$$$%%%%&&&&%&%&%%%%%&'&&%&%&%&%%&%%&%&&&&&&%&%&&&%%" !""#$&'%$$$$#$$%%&%&%%%$$%%&&'&%$$$$%%%%&&%%$%%%$$$$%&&%%%$%%%%%%%%&%$%%&%%&%&&&&%%%&%%&%&&&&&&&%%%&%%%&&%&&%# "##$%''%%$%$%%&'&&&&&&&%&%&&&%%%%$$$%%%&&&&%%%%%%%&%%%&'&&%&%%&&%%%&&%&%&&&%%&%&%%&%"!!!""#$&'%$$#$$$$%%&&&%&%%%%%&&&%%$$$$%%%&&&%%$%%$%$$$%&&&%$$%%%%%%&&%%%%%&%&%%&&&&%&%&%&%%&&&&&&%&&%&%%&%%&&%%# !""#$%''&%$%$%&&'&&%&&&&&%&&&&%%$$$$%%%%%&&&&%%%%%%%%&&%%&&'&&%&%%&&%%&%%&&&'&&&&&&%$"! !"##%&'%$$$$$$$%%&&&&%%%%%%&&'&%$$$$$%%&&&%%%%%%$$$$%&&%$$$$%%%&&%%&%%%&%%&%&%&&%&%%%&&%&%&&&&&%&&&%%%%%&%%&&" "##$%''&%$%$%&&&&&%&&&'&&%%&&&$$$#$$%%%&&%&%%%%%%%%%&%&&&%&'&&&%%&%%%%%&&%%&&&&&&&%%" !""##$&'%$#$$%$$%%&%&%%&&%&&&''&%%%%$$%%%%&%$$%%%$$$$&&&%%$$$%%%&%%&&&&&&%%&%&%&&%%%%%&&&&%&&&&&&&%&%&%%%%%%%&"!"##$%''&%$%$%%&&&&%&&&&&&&&&&%$$###$%%&%&&&%%%%%%%%%%&&&&&&&&'&&%&%%&%&%&&&%&&'&&&&$" !""##%&'%$#$$%%%%%&&%&%&%%%%&&'&%%%%$$%%&&&%$$%%%$$#$%&&%%$$$%%%&%%&&&&%&%&%%&%&&&%%&&&&&%&&&&&%%&%&&%%&%%%%%%# !""#$&''%%%%$%%&&&&%&&&&%%&&&&%%$#$$$$%%&&&&%%%%%%$%%%&&&&&&&%&&''&%&&%&%&%&%&%&&'&&%"!!""##$&'%$#$%%%$%%&&%%%&&%&%&&'&%$$%$%%%%&&&%%%%%%$#$$%&%%$%%%%&%%&&&&&%&&&%&%%&&&&&%&&&&%%&&&&%&%&&&%&%&&%%%%$! ""##%&'&%%%%%%&&&%%%&&&&%%&&'&%%$$$$%%%%&&&&%%%%%%%$%&%&&&&&&&%&&'&&%&%%&%%&%&%%&&'%$!!""""$%'&%$$%%$$%%%%%&&%&&%&%&'&%$$%%%$%%&&&%%&%%%$$$$%&%%%%%%%%%&%%&&&%&&&6 200 125 1 + + + + "$''(((''''''$"  !$&&&&&'('''('('(''$"  + +  + + +  +  + +   !#&'''''''''&#! "%&&''''''''''(''&#  + +  + + +     #&'('''''''%#! !$&''((''''''(''(%! + +  +    "%(''''''''$"   !$''('''''''('(''$!  + +    #$&'''''''%$"!  + +#%''''''''''(''(&"   + +   "#%'''''''%$#"   +!#%'''''''''''(''%! +  !!$'&'''&'%$#!  +"$%&'''''''''(''&#! + +  !$&''''&&%$!   +!"##%''''''''('''&#!  +  !#%'''''&%#   + + +  + !!"#$&''''''''''&%"  + + + + !#%'''''&$"  + +  !!!"#%&''&''('''''$! +   +  + "$&''''%#!  + + +   "#$%'&'''''''&&#! + + +  "#%'''&$"!   + +  "#$%&''''''&&'%#  + + !#&'''&$#!   + + + !""$%&''''''&'&$!   +   #%'''%$"! +  + +!!!"#%&'''''&''&#!  + +!#$&'&%#"!  + + !"#%&'''&'''&%"!  + +  "#$%&&%#! +  + + !"#$%&'&''&&&$""!   + !"#%'&$#!  !!"#$%&&''&'&&$##!   +  !"$&%$"! !  +  !"##$%'''&&&%%##!  + "#%%#!! !  + !!"#$&&'&&&&%%$"   + "#$$""!!  +  !!#$%&&&&&'&%#!   + !##$#""!  +   !#$%&&&&''%$#!  + !""####!!  + + !"##$%&&&''%$"! + !"#$#"!  +!!##$$&'''&%$"!  + + + !##$#"!!   !"""#%&''(&$#"!  + + + + !#####"!!   !! !#%''('%%#"!  + + + + ""#"##"!   ! !!"$%''''%$#"!   + + !"!!""""!  ! !"#%&&''&&$$!!  + +  !!!!!"#"  !!#$%%&'(&%$#"!!  + +  !!!!!!!"!  "#$%&&''&%$#"!! +  ! !!!! "#$$%&''%%##"! +    !!  #$$%%&&%$##"     !  !#$$%&&%$##!  +  !!  !$$%&%%%#"!  +  !   #%%%&%$#"!  +  !!#%&%%##!!   !!!$%%%$"!  +   !!"! !#$$#"!    !! !""  !##"!     ! !"!  !#"!   !   !""! "!!!   !  !##! !"" !    !"###" !!!!     "#"###"      !   !""""#$$#! !  !    """!!!"#$#"    !!  !"""!!!""#"##"  !     !""! !!""""$#" !! !   !!! !!"""####" ! !!    !!!  !!""##!!"#"! !"     !"!!  !!!!"""! ""! "" !!  !  !!  !!!!###!!   ""   !!! !  !!  !!""##"    ""!   !   !!!  !!!"##"  #"!  !!  !!!! !!""#! "#! !!!   ! !!!! !!! !"#"!  !  #"!! ! !!!!!  !!  !! !!!! !""! !$# !  ""! !!!  !  ! !"!! !!!  !! !!!#%%"!  #" !! ! !"!!!!  !!! !! !"" !!  ##"#$"!  "!  !!!! !"! !!! !!! !!!  "" !! !""!!"#$" !  "! !!!!!! !   !! !!! !!!! !! !!!#" !!##"  "! !!!! !!  !  !!!! !!! !! !!!#" !!##"  "! !!!!  !"! !!!  !!!! !!!!!!! !! ###! ! "#$"  "! !"!  !"! !  !!!!  !!! !!!!  !! !!!#"!""" ! !"#"    ""!!! !  !" !!  ! !!!  !!"!!!!!!  !! !"#! ""!!!  !#$"  !#"   !! !""! !!! !  !"!  !!! !!"  !  !! ""!  !""!!  !#$#   !#"   ! !"""!!!!!!!! !"!!   !!! !!!! !!  !!""! !!  !""!  !##"  !#! !  ""! !!!!!!!"! !!!  !!!! !!!  ! !!"#! !!  ""!  !##"  !#  !""! !!"!!!!!!!   !!   !! ! "#" !!!! !!!  !"#$# !"#!!##" !!"!!!!!      !! ! "$$"! !!""!!"! !"##" !  "#!  """!!!"!"!!!"! !!! !! "$$#""!!!!""#"!!"!! !!"##"   !   ##!  !"#! !"""!!!!"!  !!   !  !$$"!"#"!!!!"##"! "! !!!"$#      #$!   "##"!!"#"!!!!!! !!   !!!!   #$#!!!"#""!!""#""  "!! !!""##  !    #$"  !##"!!###!!!!!!!#! !!  !!"!  "$#!!!!!"""!!!"##"!  "! !!!"#"   !   !  ##!   "#!!!""#"!!!""!!##!!!  !! !!  !"##! !!!!!""""!!"##"" !"!! !!!"#"   !!  !  ##" !"#!! !""!! !!"! !""#$" !!  ! ! "##!! !!! !""""!!"#"""!!!! ! "##   !!! !!!  #$"  !###!"""""!!!!  !""!""$$"  !"! !!  !!$%#! !! !!! !"#""!!""""!  !! !!!!"##   !!  !"!   ##!  """!!#"""!!""! !! """!!!!#$"  !! !! !!!$%$#"!!! ! ! !""""!!""""!  "! !!!!!"##   !!! !"""  ##! !    ""! !!"""""!"!!  !  """!!! !#$" !   !#%%#"""!!! !!! "##"!"!!"""  !! !!!!!!"$#! !"! !!!!"  ##! !  !##! !!"""""""!   !"""!!!!! !!#$#!"!  !!!%%#"""#""!! !!! !!##"!!!""""!!"! !!!! !"$#  !! !"!  !!!"    #$! !!!!   "#! !"#"##"""!  !"#"!!!!!!!!!"$$" !  "" #$#""!!"""!! ! !"!!!"#""""!"""!!!!! ! ! !"#"    ! !!"!  !!!! ! ##! !!!!  !"! !"""#""""!   """!!!!!!!!!!!!"#! !!##""##!!!!!!!""!! !!!"!!!""""!!!!!"!! !!! ! "##!  ! !"! !! !! ##! !  "! !!!""""""!  !"!! !!!!!!!!! !#$" !"#$$" #$#! !!!! !""!! !!""" !"#"!"!!!""!! !! !! !!"$#!   !"!! !!!  ##!  !!!! !"#! !!"""""""!  !"#"! ! !! !!!! !#$# #"##""""! #%#"!!!!!! !""!! !!""" !"""!"!""""!!  !!!!!! !"##    ! !""! !!!! ##! !!"!! !!! !!""""""""! !"##"!"!!!!!!"! !!"#$"####"!!"#$#"#%%#!!! !  !""!!!!!""!! """"!"!!""!! !!!!! !"##!   !!"!! !! !  ##  !!!!!!!!  !""!!!!""! !"#"!""""!!!!""!! !!!"!"#$""$##"! !!"$%%%%$""!!  !"""!!!!"#! !!#""!!!!!"!! !!!!! !"$$!  !!!!"""!!!!  ##  !!!!  !"" !"#"!!!!!! !  !##"!!"#"!! !!! !!!"""""##$" "$##""! !!!"#$$$###"!  !"""!!!!""!! !"""!!!!!!"!!"!!!! !!"$#!  !!! !!!!"""!!!  ## !!!!!!!  !"!! "#""!!!!! !##""!"""!!!""! !!!!!"""! "#!!$%#" !!!!!"!!"####$#"!  """!!""""!!!!""!!!!!!!"!!!!!!! !"##!  !"!! ! !""""!  ## !!!!!!!  !!! !"!!!!!!!  !"#""!!!!!!!"""! !!!!!!!!!!! #%$#!! """!"!!!"#######"  ""!!"!"""" !"""!!!!!""!!!!! ! !"$#!  !!"!! !!""""  #$"  ! !  !"! !!!!!! !! !###"!""""!!"""!!!!!!!"!!!! !$$#"""!!""""""""#""####"! """!"""""! !!"""!!!!!"!!"!!! !!!"$#! !!!!! "## !$$"!!! ! !   !""" !!!!!!!!  ""!  "#$##""""""!"""!! !""!!"""!  #$#"!"##""""""#""!"#"""##"! "#"!""!""" !"""!!!!!"! !"!!!!!!!"##! !""!  !"#!#$" !!!!!!!  !!!!  !!!!!! !  !""! "#$###""""""###! !!"!!!!!"! #%#"!!"###"!"""##"""""!!""#"! "#""""!""! !!!"""! !!!! !!!!!!! !"##! !"!!!  !"!$#!!! !!!!!  !!!!!!!"! !! !""! !"###"""""""""##"!!!!!!"!!"! !$$#!!"""##"!""#""##"""""!"##"!!  "#""""!""" !"""!!!!!!! !"!!!!!!!"##"  !"!! !" #$!!!!!!!!  !!!""##"  !  !!! !"#$#""""""!!"""! !!!"""""" ! #$#""!""""###"""#"###"""""!"##"!   "##""!!""! !""""! !!!  !"!!!! ! "##!  !!!!! !!"" ##!! !!!!!"!  !!!!""! !!!!!  !! !"#$##"""##""""#!! !!"!!!"""  ! !$#""""""!""###"!"#""##""""!!"##"   "#"""!!!"! !!"""!! !!!  !"!! !!!!"##! !!"!!!!!"# #$" ! !"!"!!!! !!!!""! !!!!!  !! "####"""##""###"!!!!""""""!  #$""!""#"""""###"!###""#"""!!!"##"   "#"!""!!"! !"""! !!!  !"!! !!!!"#$! !""""""""!##! !! !"""!"""!"""#"" !!!  !"##$###$##"""###"!!!!"""#"!  #%$""""""#"""#"###""###"###""!!!"#""! !!  "##"""!!!!! !"#"!!! !  !"!!!!!"!"$#! ! !"##""!"!$#  ! !!"!""""""##"! !!!!  !"#$$$#####"""##"!!!!!"""#""  ! !$%$"""""""###""""#$$#####"##"""!!!"##"!  !  "##""!"!!!! !"#""!!!  !"!!!!""""##! ! !"##""!!$#! !! !! !!!!!""""""!!!"!!!!!  !!####$$$###""##"!!!!!!!!"""  ! !$%$"!""#""""####""##$######"##""""!!"###!   "##""!!!!!!!!"#""!!!  ""!!!"#""#$$" !  !"#"""!$#!  !! ! !!!!!""""  !"""!!  ! !!""#"##$$$#""###"!!!!""!"""!  !$&%#"!""""""!"########$$#$###"###""!!!"###!   "##""!!!!! !!"#""!!!!  !" !!!"""#$$"!"! !"#""!$$" !!!  !!!"""! !!!!"!!  !!!!"###"######""##"!!!""""""#" ! $&$#""""""###"""########$$####"""""#""!!"###"   "##""""!!!!!!""""!!!!  !"! !!!!""$$"!!! !"#"$$#!! !!! !!!   !!"!"""!"""!"!!  !!!!!"#""""####"###"!!!"""""##"  !  #%#""##""""####"""#######$$$#"##"!!""""""!"###"! !!! "##""!!!!! !!""""!!!  !!! !!!!"##!!"! ""##""""!! !! !!! !#"""""""!!!!!  !""""""""#######"!!""""""!!  ! !#$#! !"##""""####""##$####$$$##"##!!!!""#""!"###"! !!!  !#"""!!!!!!!!"#""!!!  !"!!!!!!""$#"!"! "#  """!! !!! !!! !!!!""""""!!  !!!!!"""!!"""##"####"""""##"""! !!$%"  !"###"""#####""#$$#$$$%$##""#"!!!""#""""###"!!!!!  !##"""!!!! !"""""!  !!!!!!!""#$$!!""!!! !#""!!!"!!!!"! !!!!!""!"!!!!  !!!!!""""!"""###"####""""""""""!  !$%#  !"###""######"####$$%$$$##"##"!!!!"""""#####!!!!! !##"!!!!!!  "#""!!  """!!"!""#$$" !"! !"""""!!"!!!!"!!!! !"!!!!!!!  !!!""""!!"!""####$###"""""""""! !!!%%$!!! !"###""###$##"##$$#$$#$###"##"!!!!!"""""####!! "#""""!!!  !"#""!  !"""!"!"!"#$%# !""!  "#"""!"""!!!"!! !!!!!!"!  !!!""!"!!!!!"""""######"#"#""! ! "%&$"!!"!! !!""###"###$##"##$$####$###"##"! ! !"""##$#"!!! !#""!"!!!!!"##"!   """!"!"""#$$# !""  """""!"""!!!""! ! !!!!!"" !!"""!!!!!"!!!!!###$########""! ! "%&%##""""!! !!"###""###$$#"##$$#####$##""#"!! !!"""##$$#"!  !"#"!!!!"!  !"##!  ! """"!""""#$$"!#  """""!"""!!!"!! !"!!!!!! !!""!!!!"""""!!"######"#####"!!!"!"$&%$####""!!!!!!!"#########$$$##$$$##"#####"##"!!! !"###$#$#!  "##!"!!""!  !"##"!! !! !"""""!""""#$" !   """""!"""!!!"" !"!!!""!!!!!"!!!!!!"""""#######"##"##"!!!"!!$%%#$$$$##""!!!!!!!"########$$%$##$$$##"#####"##"!! !!!"###$$##!   """!!!"""!  !###"!!!!! !!""#"""""""#$$#!   """!"!"""!!"""! !!"! !""!""""!!!!"!!!!"##############"!!"!"%%$"#$$$$$##"""!!!!!""########$$$$##$$$###"####"###!!!!!!####$$##!  "##"!""""! !"###!!!!!!!!""#""""#"##$$" !  !""!"!!"""!!"#"!! !!"! !"""#"!!!""""!!""#""""#"####$#"!!!!!%&%"""##$$$$##"""! !!"!""$######$%$$##$$$###"###"###""!!!!"####$$##! ! "##!!"###"! !"##"!"!!"!"!""##"""#"##$$#!"!  ! !"""!""###"!"##! !!!""! !!"""!!!""#"""##"""""""#"###"!"!!"$&$#######$$#$##"!!!!!!!!""#$$##$%%%$$###$$###""##""###"!"!!"#####$$#"  """!!""##"! !"#""!"!!!"!""###"""##"#$%$!"""  !  !""""####""""#"!! !!""! !!!"""!!"!""""""###"#"##""!!!!"$&$""###""###$$$##""!! !!! !"##$#$$$$$%##"####"#"##"""###""""!"####$$$#"!  ""!!!!""""! !!"##"!!!"!""""##"##""###$%#!!"""!  !! ""#"######"""""! !!""! !!!"!!!!!"""!""""######"!!"!"%%#"!"####""#####$$#""!!! !!"#$$$$$$$$$#""#$#"#"####""###""""!"###$$$%$"!  """!!!!"""!!!!"""""!!!""""###"#"""###$$#! !""! !!! !##"""""##"!"#"! !"!!! !!"""!!!"""!!!""""####""""!"$&#"!"""####""######$##"!! ! !!""#$$####$$$#""###""#####""###""""!"####$$$#"  "#!!!!!!""!!!!###""!!!"#""####"""####$$#! !""!! !!!!  !##"!""###"!"""! !!!!! !""""""""""#""""###""""!"$&#"""""""#"##""##$##$$#""!!!!!!!"##$####$$$$#""#######$$#""###"""!"##$$$#$$#"! "#"!!!!!""!!!!###"""!!""######""#####%$#"! !""!!!! ! !#""""""##""""!! !!!! !"""#""""###"#####"""! #%&#""#""""""##"#""!!"###$##!!!!!!!"!##$#####$#$#""#$###$$$###"##""""""##$##$$$#"!!!!!!##"!!""""!!!!####"!""##""#####"##$##%%$"! !##"!!  "#""""""##"!!""! !!!!! !!""!""####"####"##! "&%#"!"##"""""""#""!!!#$##"!!!!!""""#$#####$$$#!"###############"""#"##$###$$#"! !""""!!!"""!!!!####"""""#######"###$##$$#"!!!"##"!!! !#####"###"!!"!! !""!!! !"""#"#""""###"##! "%&$#"""""###"""""#"!#$##""!!!!!!""#$$######$#!!"###"###$##########""#$####$#"! !!!#""!"!!""! !"###"#""####$$$#"##$$#$$##"""!!"""!!!!!  !####""###"!!""!"""!!"! !!"###""""#""""#! "%%####""""#""""""#"""$$$#"""!!!"!""#$#######$#!!"##""###$$###$###$#########$#"! !!! !##""!""""! !#$#####"#$$$#$######$$$""#"""!""""!!!! ! "#$##""###"!"""!!"!!!"! !!###"""##"""#" "%%#!"###"""""###"#"#"!###$$##"""!"!"""#$#""###$##!!"#######$#$########"#####$$$#"!! !!!"##""!!"""!! !"#########$##$######$# !"#""!!!"#""!!!!!  !#$#"""###"!""" !!!!!"! !""#"""#""##" "%%$"!!"###"""!"""""""!"$$###$$##""!""""""#$#""###$##""############$###$##""#####$$#"!!!!"" !##"""""#"" !!#########$###$$####$$ !!"##""!"""""!!!!!  !###"""###"!""!! !!!!!!!!"#"""!!!"" "%%$"""""###"""!!""""""  #%%#"#$$$###""!"""""##$""""#$##!!"#######$##########""#$$$$$$#"!!!"#"!##"""""##!! !##$$##########$#####!!!!""##"!""#""!!!!! !###""##$#"!""! !!!!"""""#"""!"!!#&&#""""#""####"""!""##" #%$$#""#$$###""""""""#$##""##$##!!"#$##$####"######$#"##$$##$%#! !!##"!###""""##!! !#############$#$###""!!!"##""!""#"!! !! !#######$##!"""!!!"!!""""##"""!!#%&$"!!"###"""###""!!""#"!$$$###""#$$###""""#"#####""""###"! "###$$####"######$$####$##$$#" !""!!##"##"#""!!!!#############$$#$$9 200 130 1 +""!!!"####""""#"! !!! !##########!"#""!""!!"##"##"!!#&&$$#!!""###"""###!"!!"#" #$$####"!"$$$###"""#"##"######"#$#"!!"##$####"#""###"#$$#######$$#" !""!!###"""#"""!!!###########$$$$$$"""!!!"####"""##"!! !!"! !######"##""""""!""!!""""" !#%&$###$"!""""#""###""!!!"!!#$#$###"""#$%$###"""###""#$$##"##$#"!!"##$$#"###""##"##$########$$$! !!""!!"###""##""!!!########$$#$%$$#!"""!!!"####"""##"!!!!!"! !##""""!"##!""""!""!!"#"  #%&%###$$#"""""##""###"!"""!$$########""$$$####"""##"""#$####$$#"!!"#######"#""#"###$$##$####$$$" !!"! !###"""###!!!"#$$#####$$$$$$$!!""""!!"####""###"!!!!""!!!""""""""##"!""""!""!!"  #%&%$$$#$$%$#"""###""##$##"!!$####$$$$##"#$%$###""""#""!##$####$$$#!!"#$$$########""##$########$%#" !!!! !###""""##!!!!##$####$$$$$$$!!!"#"!!!"#$####"##""!"""""!!"##"#""""""!!"""!""!  #%&&%%%$$$$$$$##""###"!"#$##! !###$$#$$$$##"#$%$###""""##"!"#$##"#$$$#!!##$$$$#$$$$###"######$####$$$"! !"! !"##""###""!!!#$##$$###$$$$"""""#""!""##$######"""""""#!!"##"#""""#"!"""""" #&&%%$%%%%$$$$%$##""###"!"$##  !#"##$$$$$$$####$%$###""####"!"#$#####$$#!!##$$$$#$$$$$#"""#$##$$####$$$"! !""" !###"""###"!!"#$#######$#$!""""""#""""##########""!""""!!"##"""""##"!"#"!!#%&%%%%%%$%%$$$$$$######""!###!#"!!##$$$#$$$####%%%####""#"""""#$#####$$#!!#$$$$$$$$%$$#"#"###$######$$$#!!!!"!  "###"""###"!!"#$$$$$###$$ !!""""#"""! "########"""!""#"!""#"""""##"""" #%&%$$%%$$%%%$$$#$$$###""##""#! !#"! !"#$$$$$$$####%%%###"""""""""#$#####$$#"""$$$$$#$$%%$$####$$$##$$##$$$#!!!!""! !#####"###"!!"#$$$$#$$#$! !"!!!"#" "#$######""!!"##"!""#""#"###"! $&&%$#$$$$$$$$%$$##$$$########"  #$"! !"#$$$$$$#$##$$%$####"!""#"!##$####$$$$""#$$$$$##$%$$#####$$$$#$###$%$#"!"!!!! "###"#"###""!"#$$$$$##$" !!!!"!"#$######""!!"##"""##"""""#" #%&%#$##$$$$$$$$$$$###$$######$# !##!!! !"#$$$$%$$$#$$$%$####"!""""""#$#$###$$$#"#$$$$$#$#%$$###"#$$#$#$###$$$#"!!!!!! "#####"###""""#$$$$####"  !"!"  ##$######""!!"##""###""""!  #&&$####"#$$$$$$$$$$$##$$$$##$### !#"! ! !"#$$$%%%%$$$#$%%$###"!!""""##$#####$%$#"#$$$#$##$$#####"#$###$$$##$%$#!! !!! "####"####""!"#$$$$$###!! !"""! "#$##"###""!!####"####"! #&%$#$#####$$$$$$$$$%$$$###$#####" "#"! !!!!!!##$$$%%%%$###$%$$##""!!!"""#######$$%$#"#$$$$#$#######"""###$$$$##$$$#" !!!! !"#######$##""!#$$$$$###"!!""""!  "$###"###"!"""#######! #&&$$######$$$$$$$##$$%$$##$$##"##!!#$"!!!!""!!!##$$%%%%$$####$$##""!!!"""""$$####$$%$""#$$$$$$$#$###"""####$$$$##$$$#!!!!!"! !"##########"""#$$$$###$#"!""###! "$###"###"!""######! #&%$######$#####$$$$###$$%$$##$###"!$%#"!!!!"!!!!##$$%%%$$##""#$$##"!!!!""#""$$####$%%$""#$$$$$$#$#####"######$$$##$%$$"!!!!"! !"#$#########""#$%$###$$#"!"#$%#! #####"###"""""$##! #&%$###$####$##"###$$$###$$$$###$$#" !%%$#"!!""""!!"#$$$%%%$$##""#$$##""!!!"#""#$$####$%%$###$$$$$$#$$############$$$##%%##!!!!"! !"#$#####$$##""#%%$$###$#"!!#$%$! ####""#####"""#! #%&#######$$$##"#"##$$$$####$$$###$$" "$$%$#""!!""!!!"#$$%%%$$$#"""#%$#""!!!!"#"!"#$###$$$%%###$$$$$$$#####"########$$##$$%##!"!""!! "##$###$#$#####%#####$##"!!"#$#! ####""######"! #&%#########$##""##"#$%&%##""##$###$#" !#$$$%$$"""!"""!!""#$%$$$$$$#"#$%$##"!!!!!"""##$#"##%%%%###$$$$$$$$####"####""###$##$%%$#"!"##"!!!#$#$#$#$$##"##$$$####$"!!!"#$#!!####""####"" #&%#""##"##$###"######%&%&%##""######$! !$$##$%$$""!""""!""##$$$$$$$##""$%$$#"!! !"!"#$$#"#$$%%%$###$$$$#$$$###"####"""##$##$%%##!""##!! "##$#$##$$######$$######!!!"$$#!!####""###! #%%""###"######"###$$$%%%&%%%$#"##$####!!$$###$%%$""!"""""""#$$%%$$$$$#""#%$$#""!!!""""#$$###$%%%%$"##$$$$$#$$###""###""""#$##$%%#"""###"! "##$#####$$#$##$$$######!!!"$%$" "####""" $%%""####"#####"##$$$$%%%$#%&%%$#####$$#   !$#####$%%##"!!""""""##$%$$$$$##""$$%$##"!!!"##"#$$###$$%%%#"##$$$$$$#$##"""###"""###$#$$%#"""#$#"! "#$#$##$#$$$##$$$$$#$###"!!#%%#" "###"!!$%$"!"##""#####"##$$$$%%%$##$$&%%%$$$$##" "##"####$%%##""""""#""#$%%%$$$$##""$%%$##"!!!""#"#$$$#$$$%%$#""$$$$##$###"""###""""##$##$%$#"""#$$#! !#$#$###$#$$##$$%$$#$###"""#%%$" "##!!#%$!!"##""#####"###$$$%&%$##$#$%%%%%$$$$#" "$#"#####$%%$#"!""""""""#$%%$$$$##""#$%$###"!!"##"#%$$##$#$%$#"##$$$$#######"####"""##$##$%%#"""#$##!!"#$$#$##$#####$$%$$$#$$##""#%%$" ""!#&$! !##"""####"###$#$%%%%$$$$$#$%%%%$$$$$! !#$####$###$%$$#"""""""!""#$$%$$$$#"""#$$$$#""!!""#""$$$##$$$%%###$$$$$$#######$###"""#$$$$$%%#"!"#$$#"!"#$$##$#$$####$$%%$$$$$##!"#%%$! $%$!!!##""#####"#####$%&%%##$%%%$##$%%%$$$$! !#%$#####$$$$%$$#""!!!!!!!"#$$$$%$$$"""#$$$##""!!"#"!"$$$###$$%$$###$$$$$$$##########"##$$#$$%$#"!"#$%$""##$$$##$$$#$#$$$%$%$#$##"!"#$$#" !$%$! !"#"""#########$$%%%$$#$$%%$$$###$%%$$$   !#%$#$##$#$##$$%$#"""""""!!"#$%$$%$$#"""#$$$##"!!""#""#$$$#$#$$%$$##$$$#$#$#$####$$##"##$$$$#$%%#"""$%%$""#$$$$$#%%$####$$$%$$$$##"!!#$%$" !#%%" !!"!!"####"""##$$%&%%$$$%$$%$$$##"#$%%$#  "$$$$###$##$##$$$$#""!!!"""""$$$#$$$##"""#$%$##""""##""#$$$###$$%$####$$$$$###$#$##$#####$$$$$$%%#"!"#$$#""#$$$$##$$$$####$$$$$$$##"!"#%%$" !$&%"!!"""""####"#####$%%%%$$$$$%$$$###"!"#$$$#  #$$$$$$##$###$#$%$$##""!""""!"#$#$$%$$#"!!#$%$###"####""#$$$#$#$$$$####$$$$#########$$###$$$$$$%%%$"""#$$#"##$$$$#$%$$$#####$%$$$$$#"""#%%# !$%%" !!!"""##""""##"##%%%$$$$$%$$$$##$###""#$$$!!!!""#%$#$$$$$$###$$#$%%$##""""#""!"#$#$$%%$#"!!"$%$#######$#"#$$$$$#$$$$#"##$$$$##########$###$$%%#$%%%$"!"#$$##"#$$$""$%$$######$%$$$$$#""##$!"$&%"!!!!"""##""""##"#$%%%$$$$$$$$$$#$####$###$%%$$$$$$%%$$#$%$$$$##$$$#$$%$#""!"#"#"""#$$$$%$$##!!#%%$$#####$$#"#$%$$$#$$$$###$$$$$######"##$$$##$%$$$#%%%$"""#$$####$$#"#$$%$##$###$%%$$$$###""$&$"! !!!""##""""#####%%&%$$$$%%%$$$####$$$$$$$%&&&&&&&%$%$$##$$$$$##$$$$$%%$##""""#"""##$$$$%%$##!"#%%$$#######"!"$%$$#$$%$$#"##$$$$######"##$$$#$$%$$$$%%%$""##$$#""#$#""#$$$$$##$#$$%$%$%$$""$&$" !!"####"""#####$%%$$$$%%%%$$$$####$$$%$$%$%&&&&%%$$$$$##$$$$######$$$%%$#"""""###"##$$$$%%$$"""#%%$$##""###"""$%$$##$$$$###$$$$$#########$$$#$$$$$$$%%%$#"##$$##"###""#$$%$$#####$%$%$$# !$&$"! !!!"####"""####$%%%$$#$$$%$$$$$###$#$$$$%%$$#$%%%%$$##$$$###$$$#$###$$$%%%$#""""""##"##$$#$$$##"!"#%%$$###"###""#$%$####$$$###$$$$$##########$$#$$$$$#$%%%$#""#$$#"####""#$$%$$$$$#$$%$$# "$&$"!!!!!!"###""""##$$%%%%$$$$$%%$$$##"####$$$%%%%##"#$%%%$$$$$$$$#$$$#$####$$$%%%$#"""""###""#$$$$$##""!"#$%%$##"####"##$%$####$$$###$$%$$###$$#####$$$$$%$$$$%%%$#"###$##$###""#$%%$$#$$#$$$# "$&$"!!!!!"####""""###$%%%%$$%%%%%%$$$##"####$$%%%$$##""#$%%%%$$$$%%$#$$$$#$###$$$%%%$###""""#"""#$$$#$##""!!#$%%$$######""#$$$#$#$$$$####$$$$$##$######$#$%%$$$$$%%%$####$#####$##"#$%%$$##$$$"  "$%$" !!"""#$$#""""##$$%%%$$$%%%$%$%%$#####$$$$%%%$$###"""$$%&%%$$$$%%$$$$$$#$$##$$$$%%$###""""""!!"$$$$$$#""!!#%%%$$###"###"#$%$#$#$$$$###$$$$$$##$######$$%%%%$%$$%&%$####$$#########$$%$$###" "$&$! !!"#####""""##$%%%%$#$%%%$%$$$$#####$$$$%%%$$########$%&%%%$$$$%%$$$$$$#$#"#$$$$$%$###"""""!!!#$%$%$$##"!"#%%%%$##"####"#$%$$$$#$$$###$$$$$#$##$####$$%$%$$$$$$%&%%$#$$#$####$####$%$$##" #%&$! !!""#####""!""##$%%%$#$$%%$$%$$$#""##$$$$%%%$$######$$%%%&%%$$$$$%%%$$$$$$#######$$$%$##""""#""!!#$%%%$$####"#%%%%$##"####"#%%$$#$$$%$$##$$$$#$####$#$#$$$$$$$$%$%%&%$##$$%$###$$$###$$$$#  #%%$! !""#####""!!""##$%%%$##$%%$$$$%$#####$$$$$%%$#######$%%%%%%%%%$$$$$%%%$$%%$$#$###$$#$$$$$#"""###"!"#$%$%$$#$##"#%%%$##""######$%$$#$$$%$$##$$$$$$#$#$####$$$$$$$$%$%%&%$$##$%$###$%$###$$#  #$&#"!!""#####"!!""###$%%%$##$$$$#$$$$#""#$$$$$$%%$###"###$%%&%%$#%%%%$$$$$%%%%$%%$$#$$#$$##$%%$$#"######""#$%$$$####"##%&%%##""####"#$$$$#$$$$$$$$#$$$$$$$$$#####$$$$$$%%%%%&%%$$$$%$###$$$####  #%%$"!""######""!!""#$%%%%$###$$$$#$$##"##$$$$$$%%$$######$%%%%%%$#$%&%%$$$$%$%%%$%%$$$$%$##$#$$%$##"###$###"#$%$$#######$%%%$$##"####!"$%$$$$$$%%$###$$$$%$$##$##$$$$%%$$%%%%%&%%$##%%$$###$$#"!#%&$""""######"""""##$$%%%$###$$$$$$$##"##$$$$$$%%%$######$$%%&%%$$$$%%&%&%$%$$$$%$$%%%$%%$######$$$$####$#$#""#$%$####$$##$%&%%$######""#$%$$#$$$%%$###$%%%%$$#$####$%%%%$$$%%%%%%%###$%$###$$#!#$&$#"##"######""####$$%%%##$$$$%$$$$$#"#$$%%$$$%%%$#####$$%%%%%%#$$%%$$%&%%%$$$#$$%$$%%%$%$%######$$$$########""#$%$$###$$$#$%&%%#######""#$%$$$$$$%%$###$%%$$$$$$$$##$%%%%%$$%%%%%&""#$$%$$##"!#%&$#"####"#########$$%&%%$####$$$$$$$""#$%%%$$$%%%$$$#$$$$%%%&%%$$$%%%$$%&&%%$$#$##$%$$%%$$$$$####"#$$$#########""#%%$###$$$$$$%%%%$###"##""#$%%$#$$$$%%$##$%%$$$$##$###$%%%%$#$%%%%%##"##$$$$"!#%&$#"######$$########$%%%$##$$$$$$#$#"""$$%$$#$%%%$$$#$#$$%%%%%%$$$%%%$%%$$&%&%$$$##$$%$$$$%$%$$##"""#$$$$####$###!"#%%$$###$$$$$%%&%$#""###""#$$$$#$$$%%$$#$$%%%$#$$$#$#$$%$%$$$$%%%%#####$$$#  !"%&$#"###$#$$$########$%%%####$$$$$$$##""#$%$###%%%$#$##$$%%%%%%%$$%%%%$%%%%$$%&&%%$#$#$$$$$$%%$$$###"""#$%$$######$#"!#%%$$##$$$$$%%%%$$######"""$$$##$$$%%$$#$$%$%$$#$$$###$$%$%$$$&%%#$$###$#!"%%$"##$#############$%%&%####$#$$$$$###"#######%%%$#####$%%%%&%%$$$%%%$%%%%%$$%%&&%%$$##$$$$$$%%$$$###""#$%%$$###$####"!#%%$$##$$$$$$%&%$########"#$$$#$$$%%&%$#$$%%$$$#$$$$#$$$$%%$$%%&#$$$$$" !#%%$"##$$###$####"###$$&%%$###$$$$$$#$#"####"""#%%%$######$%&%&%%$$%%%$%%%%%%%%$$%%&&%%$$$$%%$$#$$%$$$$####$$%$$#$####$$#""#%%$$$$$$%$$$$&%%$$#####""#$$$$$$$%%%%$#$$%%$$$#$$#$##$%%%%%$%%$#$$$# !#%%$"##$$##$#####"#"#$%%%%$$$$%$$$$$$$#"####"!!#$%%%#######$%%%&%$%%%%%%%%%%%%$$%%%%%&%%$$$%%%%$$#$%$$$$$$#$#$$$$$$######$#""$%%%$$$$%$$$$%&%%$$#"###"""$$$$$%$%&%%$#$$%$$$$$$$$##$$%$%%%$%$$$$#!#%%#"##$#$#$####"####$%%%%##$$%$$$$$%##"####"!"#$%%%#######$$%%%%$$%%%%%$%%%%$$%%&%%$$%%&%%%%%%%$$#$$%%$$$$###$$$%$$#$####$$#""#%%%$$$$$%$#$%%&%$$###$##""$$$$$$$%%%$##$$%%$$$####$#$%%%%%%$$##" !#%%$""#$#$######"####$%%&%$##$%$$$#$###""###"""#%&%%$$$$##$$$%%%%$$%%%%%$%%%%%$%%%%%%$$$$%&%%%%%%%$$##$%%$%$$#####$$%$$######$#""$%%%%$$%$%$$$%%%%$$#####"""$$$$$$$%%%%##$$%%%$$$$##$$$%%%%%$$$# !#%%$""##$$#$###""""##$$%%%$##$%%$#$$$#"""####""$%&%%%$$$$$#$%%%&%%%%%%%%%%%%%%%$%%%&%$%$##$%%&%%%%%%%$###%%$$$##"###$$$$$$$$$####""$%%%$$$$%%$#$%%%%$$#####"""#$$$$$$%%%$$#$%%%%$$$$#$#$$$%%$%$#  !#%&#""##$$$$$#######$$$%%%$##$%$$##$$##""###"""#%%%%$$$#$#$$%%%&%$%%%%%%$%%%%%$%%%%%%$$$$###$%&%&%%%%%$$##$$%$$$##"###$$$$$$###$$$###$%&%$$$$%%$#$$%%%$$######"#$$$##$%%&&$$$$%%%%$$#$#$$$$%%$$#  !#%%#""##$#$#########$$%%&%$#$$$$$##$$$#"#$##"""$%%%$$$$$$$$$%%&%%%$%%&%%%%%%%%$%%%%%%$$$$$$$#$%%&&%%%%$%$$$$$$%$#$##"###$$$$$$#$$#$$##"#%%%$$$$%%$#$$%%%$$$$#$$###$%$##$%%%%%$$$%%%%%$$#$#$$%%%$  !#%&$""###$$$$#""####$$%%&%$$$$%%$##$$#""###""""$%%&$$$$#$$$$%&&&%%$%%&%%%%%%%%%%%%%%%$$$$$$$$$$$&&%&%%%%%%$$$$$$$$$$##"###$$$$$$$$$$$$###$%&%$$$$%%$#$$%%%$#$#$$$$#$$$$$$$%%&%%$$$%%%%%$$#$#$$$%% !#%&$""##$$$$########$$%%&%$$$$%%$$$$$$#"###""""#$%%$$$$$$$$$%&%&%%%%%&%%%$%%&%%%%%%%%$$$$$$%%%%%%%%&%&%%%%%%%$$$$%$$$$$#####$$$$$$##$$$$$#"$%%%$%$%%$$##$%%%$####$$$#$$%$$$$$%&%%$$$%&%%%$$#$$$$%& !#%&$#"####$$$#######$$%%%%$$$$$%$$$$$$###$$$"""#$%%#####$$%$%%%&&%%%&%&%%%%&%%%%%%%%%%$$$$$$$%%&%%$#$%&&%%%$%$%%$$$%%$$$#####$$%$$$$$$#$$$$###%&%%%$$$$##$%%%%$#####$$#$%%$$$$$%%%%$#$$%&%%$$$$$$$% "#&&%#"####$$$######$$%&&&%$$$$%$$$$#$####$$##"#$%&%$#"#"#$$%%%&&%%%&&%&%%%%%%%%%%%%%%$$$#$#$$%%%%&%$$$%%&%&%%$$%%%$$$%%$$$#####$$%$$$$$$$$$$$###%%%%$$$$$##$%%%%$#"###$##$$%$%$$$%%%%$#$$%&%%%$$$$$% "#&&%#######$$$######$%%&&%%$%%$$$$$$$##"#$$##""$%&%######$$$%%%%%%%%&&%%%%%%&%%%%%&%%$$$##$$$$%%%&%%$$%%%%&%%%%$%$%%$$$%$$$$$$##$$%%$$$$$#$$$%$#"$%%%%%$$$$##$%%%$$##"##$##$$%%%$$$%%%%#$$%%&%%$$$$$$ !#%&&$##"##$$$$$$$###$$%%&%$$$#$$$$$$$$#"#####""#%%$####$$$%$%%%%%%$%&&%&%%%%&%&%%&%%%%$$$###$$%%&%%$$$$%$%%&&%%$%$$$%$#$$%%%$$$####$%%%%$$$$$$$%%#"#%%%%%%$$$##$%%%$$######$##$$%%%$%%%%$$$$%%%%%$$$$$!#&&&$$##"##$$$$$%$$$$%%&&%$#######$$$$##"###"""$%%$####$$$%%%%%&%$$%&%%%%%%%&%&&%&%&%%$$$##$%$%%%%%#$$$$$$$%%%&&%$$$$$%$$#$%%%$$####$$%%$%$$$##$$%$##$%&%%%%$%$$#$$%%%$#####$$#$$%%%%%%%%%%$#$%%%%$$$$$#&'%$$####$$%$$$$$#$$%%&&%$$#####$$$$##"###"!!"$%%%#"###$$%%%%%&%%%%&%%%%%%&%%&%&%%&%%$$###$$%%%%%%$$$%$$%%%%%%&&&%$##$$$$$$$%%$$#$####$$$%%%$$$#$$%$##$%%&%%$$%$$##$%&%$###$$$$$$$%%%%%%%%%%$#$$&%%$$$$&&%$$#""#$$%$$$$###$$$%&%%$##$$$$$$$$#""##"!!!#$%$####$#$%%%%&%%%%%&&&%%%%%&%%%&%%&%%%$####$%%%%%%%%%%%%%%&%%%%%&%%%##$$$%$$#$%%$$$$$####$$%%%$$#$$$%$##$%%&%%%%%$$##$%%%$$###$$$$$$%%%%%%&%%%$#$%%&%%$$&%$##""##$%$$$$###$$%&%%%######$$$$$#####"!!"#%%$#####$$$%%%%%%$%%&&%&%%%&%%%%%%%%%%$$###$$$$%%%%%$$%%%%&&%%%%$$$%&%%##$%%%$$#$%%%$$$#""##$$$%%$$$$$$%$##$%%%%%%%%%$#$$%%%$$####$$$$$%%%%%%%&%%$$$%%%%%%%$###"##$$$$#####$%%&&&%$#$#####$$$#####"!!"$%%%####$$$$$%%%%%$%%&%%%%%&&&%%%&%%$$$%$$#$$$$%%%%%$%%%%$%%&%%%%%###%%&%%$$$%%%$##$%%%$$$##"##$$%%%%$$$$$%$###$%%%%%&%%$#$%%%%$#####$$$$$%%%%%%%&&%$$$%&%%%#######$%$$######%%&&&%$$$$#$##$$$#####"!!"#%%%$###$$$$$%%%%%%%%%%&%%%%%%%%%%%%%$$##$#$$$%$%%%%$%%%%%%%&%%%%$$$$$$%%&%$$$$%%%$$#$%%$$$$#####$$%%%%$$$$$$$#"#%%%%%%&%%$#$%&%%$#####$##$$%%%$%%%%%%%$%%%&%##$##$$%$$######$%&&%%$$$$$$$$%%$######"!"#%%%$#$$$$$$$$$%%%$%%&&%%%%%&&%%%%&%%$#" !"$%%%%%%%$$$%%%%&&%&%%%$$$%$%$%&&%%$$$%%%$$$$%%%$$$$###$$$%%%$$$$$$%$#!#$%%%%%&%$$$$%%&%$####$$$$$$%%%%%%&&%&%%$%&&###$$$%%$$#####$%&&%%$$%$%$$$$$$#####""""$%%%####$$$$$$%%%$$$%&%&%%%%&&%%%%%&%%#  "%%%%%$$$$%%$%%%%&%&%%$%%%&%%%%&&%$##%%%%%$$$%%%$%$$#$#$$%%%%$$#$$$$$""#$%%%&%&%$#$$%%&%$$####$#$$$%%%%%%%%%&%%$%&###$$%$$$##"##$%&&&%$$$%%%$$$$$######"!#$%&%$#$#$#$$$%%%%%%$%&%%%%%%&%%%%&%&%%%# "%%%%%$$%%%$%%%%&%%%%%%%%&%&%%%%%%%$$#%%&%%$$$%%%$$$%$$$$$%%%%$$$#$$$$#"#%%$%%%&%%$$$%%%%$$$$$$$$$$$%%%%%%%%%%%$%%$$$$$$$$#####$%&&&%$%%%%%%$%$$######"!"$%&$#####$$$$$%%&%%%%%%&%%%&%%%%%%%&%%%&$!!!!!!"%%$%%%%%%%%%%%&%%&%%%%%&%&%%$###%%%$##$%%%%$$$%%%$%%%%$%%$%%%%%###$$$$##$%%%%%%&%%#$$%%&%$$#$$$$$$#$%%%%%%%&%&%%%$$$%$$$$###$$%&&&%$%$%%&%%$%$######"!#$%%$###$$$$$$$$%%%%$%%&%%%&%&&%%%%&%&%&%%%#!!!!!#$%%%%%%%%%%%%%&&%%%%%%&%%%%%$"""#%%%$###$%%$$$$%%$$%%%%$%%%%%%%%####$$$##$%%%%%%&%%##$%%%%$$$#$$#$##$$%%%%%%%&&%%$$$$$$##$$$%%&&&%%%%%%%%$$$$$##$##"!"$%%$####$$$$%%%%&%%$%%%%%%%%&&%%%%&%%%%%%%%#"!!!!"$%%%%&%%$%%%%&%%%%%%%%%&&%%$#""""#$%&$###$$$%%$$%%$$$%%%%%$%%%%%%#####$$##$%%%%%%%%%$$$%%%$$#$$$$$$##$%%%$%%%%%&&$%$#####$%%&&'&%%%%%%%%%##"##$$##"!#$%%$####$#$$$%%%&%%$%%%%%%%%&&%%&%&%%&%%%$$%#"""!!!$%%%&%%%%%%%&%%%%%%%%&&%%%$#####""#%&%%###$$%%$$$%%$$%%&%%%%$$%%%$$####$$##$%%$%%%&%$$$$%%%%$$$$$$$$##$$%%%$%%&%&%$$$###$$%&&&&%%%%%%%%%#"!#$$#"!#$%%%##"##$$$$$%%%%%%%%%%%%%%&&%&%%&%&%%%%$$$%#"!!!!!$%%&%%%%%%%&&%%%$%%%&%%&%$#"#######$%'&%####$%%%$%%%%$%%%%%%%$$%%&%$#$##$####$%%%%%&%%%$$%%%%$#$$$$$##$$$%%%%%%&%$$$###$$&&&&&%$$%%$%$$$"!###"#$%&$##"#$$#$$%%%%%$$%%%%%%%%&&&&&&%%%&%%%$$$%%#""!!!!$%%%%$%%%&&&%%$$%%&%%&%%$####$$$$#$$%&&&%$###$%%%$%%%$$$%%%%%%$$%%%%$####$####$%&%%%&%%%$$$%%%$$#$#$$###$%%%$%%%&$$####%%%&&&%%%%$%%$$$"!###%%&%$####$$$$%%%%%%$%%%%$$%%%%&%&&%&%&%%$$$$$$%$#!"""!#%%%%%$%%%&%%%%%%%%%&%%$####$$#$$%%%%%%&&&$##$$%%%$$%%$%$%%%%%%%%%&%%$$###$####$%&%&%&%%$$$$%%%$#$$$$#$$$$%%%%%%%####$$%%&&%%$%%%%%%$%%" !#%&%%######$$$%%%&%%%%%%$#$$%&%&%%&%%%&%%%$$$$$$$$#""!!!#%&%%%%%%&%%%%%%&%&%&%$$$$$$$$$$$%%%$#$%&&%%$$$$%$$%$$%%$$%%%%%%$$%%%%$#######"#$%&%%%&%%$$$%%%%$$#$#$$#$%%%%%%%%$##$$%&&&%%$%%%$%$%%%$$""!! "$%$####$$%$%%%%&%%$%%%$$$$&&%&%&&%&%&%&%$$$$$$$$%#"!"!!#%%%%&%&%%%%%%&%%&%&%$$$$$$$##$$%%%$#"#$&&&&%$$$$$%$$%%$%$$%%%%%%$$%%%%#$##$$##"#$%%&&%%&%%$$%%%%$$$$$#$$%%%%%&%%##$$%&&&&%%%%%$$$$%$$%%%%#!! !#$###$$$$%%%%%%$$%%%$$$%%&&%%&&&%%%&%%$$%$$##$%%#"!""!#$%%%%&&%&%%%&&%&%&%%$$$%$$$##$%%%$##$$$%%&&&%%$$$$$$#$%%%%%%&%%%%$%%%%%####$$##""$%%%%%%%%%$%%%%%$$$$$$$$%%%%%%&#$$%%&&&%%$%%$$$$%%%$#$&%%#! !#$$$$$%$%%%&%%%%$%$$$%%&&%&&&&%%&%%%$$%$$$$#$%%$""!!!"$%%&%%&%%%%&%&%&&%%$$$%%%$$$$%&&%$$%%%%%%%&&&%%$$$$$#$$%%%%%%&%%%%%$%%%%#####$#"!"$$%%&&%&%%$%&&&%%$$$##$$$$%%&%$$%%&&&%$%%%$$$%%%%$$#"#%%$"! !#$%$$$$$%%%$$%%%$$$%%&&%&%%&%%&%%%%$%%$$##$%%&#"!!"!"$%&%&&%%%%&%&%&%%%$$%%%%$$$$%%&%$$%%%&%%%%&&&&%%$$$$$$$$%%%%%%&%%%%%$%&%%####$$##""$%%%%%%&%%%%%%&%$$$$###$$$%%&%%%&&&%$%%$%$$$%%%$$##""#%%%#"  #$%$%%%%%$$%%$$$$%%&&&%%&&%&%&%%%%%%%$$#$%%%%#"""!!"$%&&%%%%&%&%%%%%%$$%%&%$$$$%&&%$$%%&&%%&%%%%%&&%%%%%%$$%$%%%$%%%%%%%%%%%%%###$$$$#"#$%%%&&&&%%%$%%&%%$$##$$$$$%%&&&'&%%%$%%$$%%%%$###"!!"#&&%#" !#$%%%&%$$%%%%$$%%&&&&%&%%&%%%%%%%%%%$$%%%%%%%#"!""!#&%%%%%%&%%&&%&%$%%%&%$$$$&&&%%$%%%%%%&%&%%%%&&&%%%%%%%%%$%%$%%%%%%%%%%%&%%$##$%$$#"#$%%%&%&&%%$$%%&%%$$###$$$$%&&&&%$$$%%$%%%%$$###"""""$%'&%#!  #$%%%$%%%%$$$%%&&%%%&%&%%&&%%$%%%%$$$%%%$%%%#"!"!"#%&%%%&%%%%%%%%%%%%%$$##$%&&&%%%%&%&&%%&%%%%%%&&&%&%&&%%%%%%%$$%%%%%%%%%%&%%$#$$%$$###$%&%%&&&%%$$%%&%%$$$#$$$$$&&%%$$%$$$%$%%%$####"""#$%%%&&%#"! "$%$$%%%%$$$%%&&%%$%%%%%&%%%$$%%$$$$%%%$$$%%#""""!#%%%&%%&%%&%%%$$%%%%$#$$%&&%$$%%%%&%%%&%%%%%%$%&&&%%&%%&%%$%%%%$%%%%%%%%%%&%%$#$$$%$###$%%%%%&&%%$$%%&%%$$$$$$$$&&%$$%$$$$#%%$####"""##%&&&%$&&%#"! !#%$$$%%&%$%%%&%%$$$$%%&%%%%$%$$$#$$%&%%$$%&%$"""!!"%%&%%&%&%%&%$%%%%%%$$$&&&%$$$%%%&%&%&%%%%%%$$$%&&&&%%%%%%%%%%%$$$%%%%%%%$%%&%$#$$$$$###$%%%&&%%%%$$%%&&%$$$#$$$&%$$$$%$$$$%$##""##""#%&&&$$$%&&%#!"#$%%%%%&%%$%%%&%%$$$%%%%%&%$$$$$##$$%&&%%%%%%&$"!""!"$%%&%%&%&%%%%%%%%%$$%%&&%%$%%%%&%&%%%%%%%%$$$$%%&&%%%%%%%%%%%%%%$$$%%%%%%%%%%%$##$$$##"#$%%%%%&%%%$$%%&%%$$$#$$%$$$%$$$$%%$#"""#####$%&%$$$#$%&%%#$%&&%%%&%%$$%%&%%$$$%%%%&%%$$%%$$$#$%%%%%%&%&%&$""""""$%&%%&%&%%$%%%&%%$$%&&&%%%%%%%&&%%%%%%%%%%%$$%%%%%%%$%$%%%%%%&%%%$$$%%%&%%%%%%%$##$$$#""##%%%&%&%%%%$%%&&%$$$$$$$$$$$$%%%%##""###$$%&&%$#$$$$$$&&%%&&%%%&%$$$%%&%%%$$$$%%%%%%$%$$$$$$%%%%%%%%%&&&%""!"!"$%&%%&%%%%$%%&%%%$%%&&&%$%%%%&&%%%%%%%%%%%$%%$$$$%&&&%$$$%%&%%&%%%%$%%%%&%%%%&%%$#$$$$$#"#$%%%&%%&%%%$$%&%%%$%$$$$$$$%%%%##""####$%&&&%$$$$$###%&&'&%%%%%$$$%%&%%$$$$$$%%%%%%%$$$$#$&%&%%%&%&&&%&%#"""!!#%%&%&%%%$%%%%%%$%&&&&$$%%%&&%%%%$$%%%%%%%%%%$$#$$%&&&%$$%%%%&%&%%%%%%%%%%&%$%%%%$#$$%$$###$%%%&%%&%%$$%%&&%%$%$$$%%%%%%$#"#$#$#$$&&&%$$$$$$##$%%&&%%&&%$$$%%&%%%$%$%$%%&%$$$%$$#$$%%%%%%%&&&&&&&%#""""!"%%%&%%%%%%%%%$$%%&&&%%&%&&%&%%%$$%$%%%%%%%%$$#$$$$%&&&$$$%&%%&%&%%%$%%%%%%%%$%%&%$$$%%$$#"#$%%&%&%%&%$$$%&&%%$$%%%%%%%#####$$$$$%&%%#$$$$$$$$%%%%%%%&%$$$%%&%%%%%%%%%%%%$%$%$$$$$%%%%$%%%&&&&&%&&$#"""!!$&%%%$%%%%%%%$%&&&&%%%&&&&%&%%%%$%%%%$%%%%$$$$$$$$%&''&%$%%%&&&%&%%%%%%%%%%%%%%%&%$$$%%%$#"#$%%&%%&%%%%%%%&&%%$$%%%%%####$$$$$%&&&%##$$%$$$%%%%%$%%&%%%$%%&%%%%%%%%%%%%$%$$$$$$$%%&%%%%%&&%%%%&&&%#""""!#%%%%$%&%%%$$%%&&&%%&&&&&%%%%%$$%%%%%%%%%$$$$$%%$$%%&&'&%$%%%%&&%&%%%%%%&%%%%%%%&&%$$$%%%$###$%%&%&%&%&%%%&&&&%%%%&%####$$$$$%&&&%#$$%$$%$%%%&%$%%&%%$$%%%%%$%%%&%%%%%$$$$$$#$%%&&&%%%&%%%&%&&%%&%#""""!#%&%$%%%%%$%%&&'&%&&&&&%%%%%$$$%%%%$%%%%%$$$%%%%%%%%%&&'&%$%%&%&&&%&%%&%%&%%&%%%%%%%$$$%%%$#"#$%%&%&%&&&%&%&&&$%%%%$$##$$$$#%%&%$$#$$$%%$%%%%%$%%&%%%$%&%&%%%%&&%%%%$$$$%$$$$$%&&&%&%&&&&&%&&%&%&%$""""!"$%%%%%%%$%%&&&&%&%&&&%&%%%$$$$%&%%$%%&%$$$%%%%%&%%$$$&&'&%$%%%%&%&%%%%&%&&%%&%%%%&%%$$$%%$$#"#$%%&%%&&&&&%%&&$%%$$##$$$$$$%&&%$$$$$$%%$%%%%%$$%&%%$$%&%&%%%&%&%%%%%$$$$$$#$$&%&%&&%&&&&%&&%&%%%&%$#"""""$%%%%%%%$%&&&&%%&&&&%&%&%$$#$%%%$%%%%$$$$%%%%%%%&%$$$%&&'&%$%%&%&&&%%%%%&&&&%&%%%%&%%$$$%$$####$%%%%%&'&&&&%&%%$$##$$$$$$%&&%$$#$$$%%$%%%%%$$%&%$$$%%&%%%%%%&%%%%$$$%$$$#$%%&&&&&%&&&&&%&&%&%%%%%$#"""""#%%%%%%$%&&&&%%&&&%%%%%%$##$%%%%%%%%%%$$%%%%%%&%%%$$$$%&'''%%$%%%%&%%%%%%&&%&%%%%%%&%%$#$$$$$###$%&%%%&&&&&&&%%$##$$$$$$%%&%%$#$$%%%$%%%&%$%%%%%$$$%&%%%%%%&%%%$$$$%$%$#$%%&&&&%&&&&&&&&%%&%%%%&&%##""""#%%%%$$%&&'&&&&&&%%&%&%$##$%%%%$%%%%%$%%%%%%%&%%$$%%&&%%&''&%%$$%&%&%%%%%%%&&%%%%%%%%%%$#$$$%$$##$%%%%%%&&&&&%$##$$$%$$%&%&$$#$$%%%%%%&%%%%%%%%#$%%&&%%%%%%%%%$$%$%%$$#$%%%%%%&%%&&'&&&&&%%%&%&%&&$""""!"%%%%$%&&&&&&&&&&%&%&%$$#$%&%%%%%%%$$%%%%%%%%%%%%%%&%&&%%&''&&$$$%%%&%%$%%%%%&%%%%%%%&%%$#$$%%$$$$%&&%%%%%%&&$##$$$$$$%&&%%$$$%%$%%%%&%&$%%%&%$$%%&&%%%%%%%%%$$%$%%$$##$%&&&&&%%&&&&&&&&%%%&%&%%&&$""""!"$%%%%%&&&%%&&&%%&%%%%$$$$%%$$%%&%%%$%%%%%%%&%%%%&%&&&%&%$%&'&%%%%%%%&%%$$%%&%&%%&%%%%&%%$$%$%%$$$$%%%%%%%%%&$#$$$$$$%%&&%$$$%%%%%%%&%%%%%%&%%%%%&%%%%%%%%%%%$$%%%$$#$%&&&&%&%%&&&%%&&%%%&&%%%&&&&$#"""""#%$%&&&&%%&&%%%&%&&%$$$$%$$$%%%%%%$%$$$%%%&&%%%%%&&%&%%$#$%&''&%%%%%%%&%%%%%&%%&%%&%%%&&%$$$%$%%%$$%%&%%%%%&$$$%$$$$&%%%%$%$%%%$%%%%%%$%%%%%$%&&&%%%%%%$%%$$$$%%%$##$%&&&&&%&&&&&&&%%%%&%%&%&&%%&%####$$%&%%&&&&&&&%&%&&&%%$$$$$%$%%%%%%%$%$$$%%&&%%%%%&%&%&%&%$$$$&&''&%%%%%%%%%%%%%%&%&%&&%%%&%%%$%%%%$%$%%%&%&%%%$$%$$$%%&&$$$$%%%%%%%&&%$%%%%%%%%%&&%%%$%$%%%%$$$%%%$$#$%&&&&%%&%&&%&%&%%%%%&%&&%&%%%%$$$$%&&%&&&&%%&&&&&&%&%%%$$$%$%%%%%$$$%%$$$%%&&%%%%%&%%&&%%%%%%$$%%'''&&%%%%&%&%%%%%%&%&%&&&%&&&%%$%%%%%$$%%%&%&%%$$$$$%&&%$$#$%%%%%%%&%%%%%%%%%%%%&%%%%%%$%%%%$$$%%%%##$%&&&&&&%&&&%&%&&%%%%%%&%&&&%$%&%&%&&&&&&&&&&%&%%&%&%&&$%$$$$%%%&%%$$%%%$%%&&&%%$%%%%&&%%%%%%%%%%%%&'''&&%%%%%%&%%%%&%%&&&&&&%%&&%%$$%%%%%%%%%&%%&$$##$%&%$$#$$%%%%%%&%%%%%%%%$%%%&%%%%%$$%%%%%%$%%%$$##$%&&&&%&&&&&&%&%%%%%&%%%&&%%%%%%&&&&%%%&&&&%%&%&&&%%%%$$$$$$$%%%%%%$%%%%$%%&&%%$%%%%&%%%%$$%%%%&%&%&&&'&&&%%%%&%&%%$%%&&%&&&&&%&%&%%%%%%%%%%%%%%&&$$$%%&%%$$$%%%%%%%&%%$$%%%%$%%%&%%%%%%$$%%%$$$%%%%$$#%%&&&%%&&&''&&&%&%%&&%%%&&%%$$$$%%%$$%%&&&%&%&&%&%&&%&%$$$$$$%&%&%$$%%%%$%%&&%%%%%%&%&&%%%$%%%&&&&&&%%&&''&%&%%%%%&$%$%&%%%%%&&&%&&&%%$%%%%%%%%%&%&$$%&&&%$$$%%%%%%&&&%%%%%%%$%%&&%%%%$%$%%$%%$%%%&%$$$%&&%&%&%%&&&&&%%&%&%%%%%%&%%$$$$$$$$$$%&&&&%%&%%&%&%%&%%$$$$$%%%&%$$$%%%%&&&&%%%%%%&%&%%%$$%%%%%&&&&&%%%&'''&%%%%%&%%$$%%%&&%&%&&&%&&&&%$%%%%&%%%%%%#$&&&%$$$%%%%%%%%&&%%%%%$%%%&&%%%%%%%%%%%$$%%%&%%$%%&&&&%&%%&%&&%&%%%&&%&%%%&&%%$$$$%$$$%&&'&&%&%%%&%%&%%%$$$$$$%%&%%%%%%%%%&%&&%%%%%&%%&%%%$$%$%%%%&&&&%&%&%&&''&&&&%%%%%%$%%%%%%%%%&&&%&&%%%%%%%%%&%&&$&&%%$$$$%%%%%%&&%%%&%%%%%%&&%%%$%$%$%%%$$%%%&%%$%%&&&&&%&%&&&&%&%%&&&&%%%&&%%$$$$$$$$%%&&'&&%&%%&&%%&%%$$$$%%%%&&%%%%$%%%&%&&&%%%%%&%%&%%%$#$$%%%%&&&&&%%&%%&&'''&%&%&%&%%%$%&%&%%%&&&&%%%&&$%$$%%%%%&%&&%%$$%%%%%%&%&%%%%%%&%%%%&&&%%$$$$$%%%$$$%%&%%%$%%&&&&%%%&%%&%&%%%&&&%%%%&%%$$$$$$$$%%&&&&%%&%&&&%&&%%$$$$%%%%%&%%%%%%%%&%&&&%&%%&%%&%&%%$$$$%%%&%&&&%%&&&&&%&&&''&&&%&%%%%%$%%%%%%%%&&%%$%%&%$%%%%&%&&&&%%$%%%%%%&&&&%%%%%%%%%&&%%%%%$$$$$%%$$$$%&%%%%%&&&&&&%&%%&%&%%%%&%&%%%&&&%%$$$$$$$%%&&'&%&%%&%&&%%%%$$$$%%%%%&&%%%$%%&%%&%&%&%%&&&%&%%%$$$%%%&%&&&&%&%%&&&&%%%&''''&&%%%&%%%%%&%%%&%%&%&%%%%%%%%%%%%&%&%%$%%%%%%%%&%&%%%%%%%%%&&&%$$$%$$%%%$$$$%%%%$$%%%&&&&&%&&&%&&%%%%&&%%%%&&%%$$$$$$$%%&&&&%&%&&%&&%&%%$$$$%%%&%&%%%$$%%%%%&&&%%%%&%%%&%%%$#$$%%%%&%&&%%%&&&&&&&%%&&&''&&%&%%&&%%%%%&%%%%%&&%%%&&%%%%%%&%&%%$%%%%%%%%&&%%%&%&%%%&&&%%$$%%$%%%%$##$%%%$$$$$%%&&%&%&%&%&&%%%%&%%%%%&&%$$#$$#$$%%&&&&%&%%&&&&%%%%$$$%%&%&%%%%%$$%%%&%&&&%&%%&%&%&%%$$#$$$%%%&%&&&%&&&&&&&&%%%%$%&''&&&%&%%&%%%%&%&%&%&&&&%%%&&%&%%%&%%$%%%%%%%&&&%%%%%&%%%%&&%%$$%$%%%%%%##$%%%$$$%%%%%%%%%%%&%&&%%%&&%&%%%&&%$##$$#$$%%&'&&%&%&&&&%%%%%$%$%%%%&%&%%$$$%%%&%&&&%%%%&%&%%&%%$$$$%%%%&%&&%%&%&&&&&&%&%%%$$%%''&&%%&%&%%%%%%&&&%&%&&&%%%&%%%%&%&%%%$%%%%%&%%%%%&%%%%%&%&%$%$%%%%%%%$#$%%%%$$%%%%&&&&%&&%%&%%%%&%%&%&%&&%$##$#$$$%%&&&&%&%%&%&&%&%$$%$%%%&%%&%%%%$%%&%&&&&%&%&%%&%%&%$$##$$%$%%&&&&&&&&&&&&&%%&&%%$#$%&''&&%%%%&&&%%&%&&&&&&&&&%%%&%%%%%%%%$%$$%%&%%%%&&%&%%&&&%%$$%%%%%%%%##$$%%%#$$%&%&&&&%&%&&&%&%%%%&%%&%&&%$#$#$$$%%%&&&&%&%&%&&%&%%%$%%%%%&%%&%%%%%%%&%&&&&%%%%%%&%%&%%$#$$$%%%%&&&&%&%&&&&&%%%&%%%%%$%%%&''&&&%%%%&&&%%%&%&%&%&&&%%%&&&%&&%$%$%%%&%%%%%&&&&%%&&&%%$$%%&%&%$$#$$%%$$$%%%%&%&&%&%%&&&%%%&%&&%&%&&%$$###$$%%%&&&&%%%%%&&%&%%%$%%%&%&%%&%&%%%%%%%&&&&%%&&%&%&%&%%$$$%%%&%%&&&&%&&&&&&&%&%&%%%%%%&%%&&'''&&%%%&&&&&%&%&&&&&&&&&%%%&%&%%%%%$%%&&%%%&&&%%%&&&%%$$%%%%%&%%$#$$%%$$$%%&%&%&&%%%%&%%%%%%%&%%&%&&%%$$##$$$%%&&&&%%&%&&%%&%%%$%%%&%&%%&&%%&%&%&&&&&%&%&%%&%&%&%%$$#$%%&%&&&&&%&&&&&&&&%%&%%%%%%&&&%%&'&''&&%%%%&&&&%&%&&&&&&%&%%%&&&%&%%$%%&&%&%%&&%&%&&&%%$$%$%%&%%%##$$%$$$$%%&%%%&&&&%&%%&%%%%&%%&%&&%%%$$$$$$$%%&&'&%%&%&%%&%%%$$%%&%%&%&&&&&%&%&%%&&&&%&%%&%%&%%%%$$$$%%%%%%&&&&&&&&&&&&&%&%%%$%%&%&&&&%%&&'''%%%%%&&&&%&&&&&&&&%&%%%&&%%%%%&&&%%%&&%&%&%&&%%%%$%%%%%%$$$$$$%%$$%%%%%&%&&%%&%&%%%%%&%%&%%%&%$$$$$$$%%%&&&%%&&%&%%&%%%%%%%%%&%%&&%&&%%%&%%&&&&%&%%&%&%%&&%$$$$%%$$$%&&&&&&&&&&&&%&%%%$$%%%&&&&&&&%%&&''&&&%%&&&&&%%&&&&%&%&%&%%%&&&%&&&%%&&&&%%%%&&%%%%%%%%%%%$$$#$%%%$%%%%%%%%&&%%&%&%%&%&&%&%&%&&%%$$$$$$%%%&&&&%%%%%&%&%%%$$%%&%&%%&&%&%%%&&%%&&&&%&&%&%&%%&%%%%$$%$$$$%&&%%&&&&&&&&&%%%$$$%%&%&&&&&&%%&%&&'''&%&%&&&&&&%&&&&%%%&&%%%%&%&&&&%&&&&&%%%&&%%%%%%%%%%&%$$$$%%$$%%%%%%%%&&%&%%&%%%%%%%%%%%&%%%$%%%$$%%%&&'&%&&&%%%&%%$$$%%%%&%&%%%&%&%&%%&&&&&&&%%&%%%&%%%%$$$$$$$$&&&&&&&&&&&&&&&%%%$$%%%%&&&&&&%&&&%&&''''&%&%&&&&&&&&&&%%&%%%%%&'&%&%&&&&&%%%%&&%%%%%%%%&%&$$#$$%%$$$%%%$$%%%&&%%&&&%%%&&%%%%%%&%%$%$%%$%%%&'&&%&%&&%%&%%$$$%%%&%%&%&%&%%&%%&&&&&&&&%&%%&&&&%%%$$$$$##$%&&&&%'''&'&&&&&&%$$%%&&&%&&&&%&%&&&%%&''''&%&%&&&&&%&&&&%%&&%&&&&&%%%%&&&%%%%&&&&%%%%%%&%%%$#$$%%$$$%%$$$$%%&%%&&&&%%%&%%%%%%%&%%%$%%%%%%%&&&&%&%&%&%&%%$$$$%%&%&%%&%%%%&%&%%&&&&&&%&%%&%%&%%%%$%%$$#$%&&&%&&&''&&&&&%%$$$%%&%%&&&&&%&%&&&&%%&&'''&&&&&&&&'&%&&&&%%&&&&&&%%%&&&&&&%&&&&%%%%%%%&%&%$#$$%%$$%&%%$%%%&%%%&%%%%%%&%&%%%%&&&%%$%%%%%%&&&&&%&%&&&%&%%%$$$%%&%&%%&%%%%&%&%%&&&&&&%%%&%&%&%%%$$$$$$$%%&&&%&&&&&&&&&&%%%$$%%&%&%&&&&&&%&&&&&%&%&&&''&&&&&&&&&&&&&&&&&&&&&&%%&&&&&%%&&&&&%%%%%%&%&%$#$$%%$$$%%%$%%%&%&&%%&&%%%%%%%$%%&&%%%$$%%%%&&&'&&%&%%&%%&%%$$$$%%&%%%&%%&%%%%&%&&&&&&&%&%&%&&%%%$$%%%$$$$&&'&&&&&&&&&&&&%%$$$%%%%&%&&&&%%&&&&&&%&&&%%&'''&&&&&&''&&%&&&&&&'&&%%&&&&%%&&&'&&%&%&%%&%%%$#$$%%$$$%%%$%%%%%&%%&&%%%$%%%%$%%%&%%$$%%%%&%&&&&%%&%&&%&%%%%$$$%%%%&&%&%&%%%&%%&&&&&&&%%%&%&&%&%%%%%%$$$$%&'&&&&&&&&&&%%%%%$%%%&%&%&&&&&%&%&%&%%&&&&%&&&&''&&&&&&&'&&%&&&&&&%%&%&&&&%%&&&&%%%%&%%%&&%$$$$%%$$%&%&%%%%&%&%%&%%%%%%&%%%%%&&%%$%$%%%%&&&&&&%%%&%%&%%&%$$$%%%%&%%%%%%%%&%&&%&&'&%&&%&%&%&&%%%%%%$$$%%&'&&&%&&&&&%&&&%$$%%%&%&%&&'&&&&&&&&%&%&&%%&%%&&''''&&&&'&'&&&&'&&&%&%&&&%%%&&&&%%%%&%%&&&%%$$$%$$$%%%&%%%%&%%&%&%%%%%%%%%%%%&&%%$%$%%&%&&&&&&%%&&&&&%&%%%$$%%%%&%%&%%%%%&%&&&&'&&&&%%&&&&&%%%%%%%$$$%&&'&&&%&&&'&&&&%%%%%%&&%&%&&&&&%&%&&&%&&&&%%&%&&%&&&&'&''&&'&&&&&&&%%&%&'&%%%%&&&%%%%%%%&&%%%$$$%$$$$%&&%%&%&%&%%&%&%%%%&%%%$%&%%%%%%%%%&&&&&&&%&&%&%&%%%%%$$%%%&&%&%%%%%%%%&&&&&&&&%%&&&&&&%&%%%&%$$$$%&'&&&%&&&&&&%&&%%%%&&&%%%&&&&&&&&&&&%&&&&%%%%&&&%%%&&&'&&&'''&'&&&%&&&&&&&%%%&&&%&%%%%%&%&&%%%$$$%$$%%&%%&%&%%&%&&&%%%%%%%%$%%&%%%%%%%&%&%&&&&%&%&&&&%&&%%$%%%%%%%&%&%%%%%&%&%&&'&&&&&%&%&&&&%%%&%%$$$$&&&%%%&&&&&&&&%%%$%&&&%&&&&''&&&&&&&%&%&&&&%&&&&&%&%%&&''&'&&'&&&%%&%%&&'ATBK_V_P 41 +Œ1ÿTßT¿PŸPL_LHHDDDD@@<<8440,,(($     +   \ No newline at end of file diff --git a/BACKUP/XART100/ATTRACT.IMG b/BACKUP/XART100/ATTRACT.IMG new file mode 100644 index 0000000..b63b522 Binary files /dev/null and b/BACKUP/XART100/ATTRACT.IMG differ diff --git a/BACKUP/XART100/ATTSTUFF.IMG b/BACKUP/XART100/ATTSTUFF.IMG new file mode 100644 index 0000000..30ced95 Binary files /dev/null and b/BACKUP/XART100/ATTSTUFF.IMG differ diff --git a/BACKUP/XART100/BALL.IMG b/BACKUP/XART100/BALL.IMG new file mode 100644 index 0000000..d6d5fd2 Binary files /dev/null and b/BACKUP/XART100/BALL.IMG differ diff --git a/BACKUP/XART100/BALLFONT.IMG b/BACKUP/XART100/BALLFONT.IMG new file mode 100644 index 0000000..8815483 Binary files /dev/null and b/BACKUP/XART100/BALLFONT.IMG differ diff --git a/BACKUP/XART100/BAST10.IMG b/BACKUP/XART100/BAST10.IMG new file mode 100644 index 0000000..567795c Binary files /dev/null and b/BACKUP/XART100/BAST10.IMG differ diff --git a/BACKUP/XART100/BAST18.IMG b/BACKUP/XART100/BAST18.IMG new file mode 100644 index 0000000..2bbe6a5 Binary files /dev/null and b/BACKUP/XART100/BAST18.IMG differ diff --git a/BACKUP/XART100/BAST7T.IMG b/BACKUP/XART100/BAST7T.IMG new file mode 100644 index 0000000..64a6287 Binary files /dev/null and b/BACKUP/XART100/BAST7T.IMG differ diff --git a/BACKUP/XART100/BAST8.IMG b/BACKUP/XART100/BAST8.IMG new file mode 100644 index 0000000..af99a06 Binary files /dev/null and b/BACKUP/XART100/BAST8.IMG differ diff --git a/BACKUP/XART100/BAST8T.IMG b/BACKUP/XART100/BAST8T.IMG new file mode 100644 index 0000000..22cb077 Binary files /dev/null and b/BACKUP/XART100/BAST8T.IMG differ diff --git a/BACKUP/XART100/BASTCYC.IMG b/BACKUP/XART100/BASTCYC.IMG new file mode 100644 index 0000000..99d8b62 Binary files /dev/null and b/BACKUP/XART100/BASTCYC.IMG differ diff --git a/BACKUP/XART100/BB.LOD b/BACKUP/XART100/BB.LOD new file mode 100644 index 0000000..e19731d --- /dev/null +++ b/BACKUP/XART100/BB.LOD @@ -0,0 +1,196 @@ +***> 5d6e300,1 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD.TBL +XON> +PPP> 6 +HDS1.IMG +GLO> PLYRHD.GLO +---> ewing0,ewing1 +GLO> XXXHD.GLO +---> ewing2,ewing3 +---> ewing4,ewing5,ewing6,ewing7,ewing8,ewing9,ewing10,ewing11,ewing12 +---> ewing13,ewing14,ewing15,ewing16 +GLO> PLYRHD.GLO +---> stock0,stock1 +GLO> XXXHD.GLO +---> stock2,stock3,stock4,stock5 +---> stock6,stock7,stock8,stock9,stock10,stock11,stock12,stock13,stock14 +---> stock15,stock16 +GLO> PLYRHD.GLO +---> shiek0,shiek1 +GLO> XXXHD.GLO +---> shiek2,shiek3,shiek4,shiek5,shiek6,shiek7,shiek8 +---> shiek9,shiek10,shiek11,shiek12,shiek13,shiek14,shiek15,shiek16 +GLO> PLYRHD.GLO +---> kmalone0,kmalone1 +GLO> XXXHD.GLO +---> kmalone2,kmalone3 +---> kmalone4,kmalone5,kmalone6,kmalone7,kmalone8,kmalone9,kmalone10 +---> kmalone11,kmalone12,kmalone13,kmalone14,kmalone15,kmalone16 +HDS2.IMG +GLO> PLYRHD.GLO +---> Person0,Person1 +GLO> XXXHD.GLO +---> Person2,Person3,Person4,Person5,Person6,Person7,Person8,Person9 +---> Person10,Person11,Person12,Person13,Person14,Person15,Person16 +GLO> PLYRHD.GLO +---> Augmon0,Augmon1 +GLO> XXXHD.GLO +---> Augmon2,Augmon3,Augmon4,Augmon5,Augmon6,Augmon7,Augmon8,Augmon9 +---> Augmon10,Augmon11,Augmon12,Augmon13,Augmon14,Augmon15,Augmon16 +GLO> PLYRHD.GLO +---> Benja0,Benja1 +GLO> XXXHD.GLO +---> Benja2,Benja3,Benja4,Benja5,Benja6,Benja7,Benja8,Benja9,Benja10,Benja11 +---> Benja12,Benja13,Benja14,Benja15,Benja16 +GLO> PLYRHD.GLO +---> Cole0,Cole1 +GLO> XXXHD.GLO +---> Cole2 +---> Cole3,Cole4,Cole5,Cole6,Cole7,Cole8,Cole9,Cole10,Cole11,Cole12,Cole13 +---> Cole14,Cole15,Cole16 +GLO> PLYRHD.GLO +---> Drex0,Drex1 +GLO> XXXHD.GLO +---> Drex2,Drex3,Drex4,Drex5,Drex6 +---> Drex7,Drex8,Drex9,Drex10,Drex11,Drex12,Drex13,Drex14,Drex15,Drex16 +GLO> PLYRHD.GLO +---> Elliot0,Elliot1 +GLO> XXXHD.GLO +---> Elliot2,Elliot3 +---> Elliot4,Elliot5,Elliot6,Elliot7,Elliot8,Elliot9,Elliot10,Elliot11 +---> Elliot12,Elliot13,Elliot14,Elliot15,Elliot16 +GLO> PLYRHD.GLO +---> Hrdaway0,Hrdaway1 +GLO> XXXHD.GLO +---> Hrdaway2,Hrdaway3 +---> Hrdaway4,Hrdaway5,Hrdaway6,Hrdaway7,Hrdaway8,Hrdaway9,Hrdaway10 +---> Hrdaway11,Hrdaway12,Hrdaway13,Hrdaway14,Hrdaway15,Hrdaway16 +HDS4.IMG +GLO> PLYRHD.GLO +---> Miller0,Miller1 +GLO> XXXHD.GLO +---> Miller2,Miller3,Miller4,Miller5,Miller6,Miller7 +---> Miller8,Miller9,Miller10,Miller11,Miller12,Miller13,Miller14,Miller15 +---> Miller16 +GLO> PLYRHD.GLO +---> Mutumbo0,Mutumbo1 +GLO> XXXHD.GLO +---> Mutumbo2,Mutumbo3,Mutumbo4,Mutumbo5,Mutumbo6,Mutumbo7 +---> Mutumbo8,Mutumbo9,Mutumbo10,Mutumbo11,Mutumbo12,Mutumbo13,Mutumbo14 +---> Mutumbo15,Mutumbo16 +GLO> PLYRHD.GLO +---> Oakley0,Oakley1 +GLO> XXXHD.GLO +---> Oakley2,Oakley3,Oakley4,Oakley5,Oakley6 +---> Oakley7,Oakley8,Oakley9,Oakley10,Oakley11,Oakley12,Oakley13,Oakley14 +---> Oakley15,Oakley16 +GLO> PLYRHD.GLO +---> Hakeem0,Hakeem1 +GLO> XXXHD.GLO +---> Hakeem2,Hakeem3,Hakeem4,Hakeem5,Hakeem6 +---> Hakeem7,Hakeem8,Hakeem9,Hakeem10,Hakeem11,Hakeem12,Hakeem13,Hakeem14 +---> Hakeem15,Hakeem16 +GLO> PLYRHD.GLO +---> Rice0,Rice1 +GLO> XXXHD.GLO +---> Rice2,Rice3,Rice4,Rice5 +---> Rice6,Rice7,Rice8,Rice9,Rice10,Rice11,Rice12,Rice13,Rice14,Rice15 +---> Rice16 +GLO> PLYRHD.GLO +---> Robins0,Robins1 +GLO> XXXHD.GLO +---> Robins2,Robins3,Robins4,Robins5,Robins6,Robins7,Robins8 +---> Robins9,Robins10,Robins11,Robins12,Robins13,Robins14,Robins15,Robins16 +HDS5.IMG +GLO> PLYRHD.GLO +---> schremp0,schremp1 +GLO> XXXHD.GLO +---> schremp2 +---> schremp3,schremp4,schremp5,schremp6,schremp7,schremp8,schremp9 +---> schremp10,schremp11,schremp12,schremp13,schremp14,schremp15,schremp16 +GLO> PLYRHD.GLO +---> smith0,smith1 +GLO> XXXHD.GLO +---> smith2,smith3,smith4 +---> smith5,smith6,smith7,smith8,smith9,smith10,smith11,smith12,smith13 +---> smith14,smith15,smith16 +GLO> PLYRHD.GLO +---> tisdale0,tisdale1 +GLO> XXXHD.GLO +---> tisdale2,tisdale3,tisdale4,tisdale5,tisdale6 +---> tisdale7,tisdale8,tisdale9,tisdale10,tisdale11,tisdale12,tisdale13 +---> tisdale14,tisdale15,tisdale16 +GLO> PLYRHD.GLO +---> laet0,laet1 +GLO> XXXHD.GLO +---> laet2,laet3,laet4,laet5,laet6,laet7,laet8,laet9,laet10 +---> laet11,laet12,laet13,laet14,laet15,laet16 +GLO> PLYRHD.GLO +---> hawkins0,hawkins1 +GLO> XXXHD.GLO +---> hawkins2,hawkins3 +---> hawkins4,hawkins5,hawkins6,hawkins7,hawkins8,hawkins9,hawkins10 +---> hawkins11,hawkins12,hawkins13,hawkins14,hawkins15,hawkins16 +;Larry +GLO> PLYRHD.GLO +---> johnson0,johnson1 +GLO> XXXHD.GLO +---> johnson2,johnson3,johnson4,johnson5,johnson6,johnson7,johnson8,johnson9 +---> johnson10,johnson11,johnson12,johnson13,johnson14,johnson15,johnson16 +GLO> PLYRHD.GLO +---> divac0,divac1 +GLO> XXXHD.GLO +---> divac2,divac3,divac4,divac5,divac6,divac7,divac8,divac9,divac10 +---> divac11,divac12,divac13,divac14,divac15,divac16 +HDS6.IMG +GLO> PLYRHD.GLO +---> kemp0,kemp1 +GLO> XXXHD.GLO +---> kemp2,kemp3,kemp4,kemp5,kemp6,kemp7,kemp8,kemp9 +---> kemp10,kemp11,kemp12,kemp13,kemp14,kemp15,kemp16 +GLO> PLYRHD.GLO +---> pippin0,pippin1 +GLO> XXXHD.GLO +---> pippin2,pippin3,pippin4,pippin5,pippin6,pippin7,pippin8,pippin9 +---> pippin10,pippin11,pippin12,pippin13,pippin14,pippin15,pippin16 +GLO> PLYRHD.GLO +---> gill0,gill1 +GLO> XXXHD.GLO +---> gill2,gill3,gill4,gill5,gill6,gill7,gill8,gill9,gill10,gill11,gill12 +---> gill13,gill14,gill15,gill16 +GLO> PLYRHD.GLO +---> mullin0,mullin1 +GLO> XXXHD.GLO +---> mullin2,mullin3,mullin4,mullin5,mullin6,mullin7,mullin8,mullin9 +---> mullin10,mullin11,mullin12,mullin13,mullin14,mullin15,mullin16 +ASM> PLYRHD2.TBL +HDS7.IMG +GLO> PLYRHD.GLO +---> BEdwrd0,BEdwrd1 +GLO> XXXHD.GLO +---> BEdwrd2,BEdwrd3,BEdwrd4,BEdwrd5 +---> BEdwrd6,BEdwrd7,BEdwrd8,BEdwrd9,BEdwrd10,BEdwrd11,BEdwrd12,BEdwrd13 +---> BEdwrd14,BEdwrd15,BEdwrd16 +GLO> PLYRHD.GLO +---> gug0,gug1 +GLO> XXXHD.GLO +---> gug2,gug3,gug4,gug5,gug6,gug7,gug8,gug9,gug10 +---> gug11,gug12,gug13,gug14,gug15,gug16 +;GLO> IMGTBL4.GLO +;ASM> plyrhd4.tbl +;ourhds2.img +;---> SAL1,SAL2,SAL3,SAL4,SAL5 +;---> SAL6,SAL7,SAL8,SAL9,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +;ourhds3.img +;---> RAIDEN01,RAIDEN02,RAIDEN03,RAIDEN04,RAIDEN05,RAIDEN06 +;---> RAIDEN07,RAIDEN08,RAIDEN09,RAIDEN10,RAIDEN11,RAIDEN12,RAIDEN13,RAIDEN14 +;---> RAIDEN15,RAIDEN16 +;raiden.img +;---> ballite1,ballite2,ballite3,ballite4,ballite5,ballite6,ballite7,lighten1 +;---> lighten2,lighten3,lighten4,lighten5,lighten6,lighten7 +PPP> 0 + + diff --git a/BACKUP/XART100/BB2.LOD b/BACKUP/XART100/BB2.LOD new file mode 100644 index 0000000..7f1fd13 --- /dev/null +++ b/BACKUP/XART100/BB2.LOD @@ -0,0 +1,93 @@ +***> 3eda390,1 +; +POF> +COF> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W +; +ASM> CROWD.TBL +; +nbacrowd.img +;---> COACH02,COACH03,COACH04,COACH05,COACH06 +;---> BNCHPL02,BNCHPL03 +;,BNCHPL04,BNCHPL05,BNCHPL06,BNCHPL07 +---> CR4THD02,CR4THD03,CR4THD04,CR4THD05 +;,CR4THD06,CR4THD07 +; +ASM> PLAQUES.TBL +; +tvtext.img +---> BST_DEFred,BST_STKred,BST_RNKred,BST_OFFred +; +PON> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRSEQ.TBL +GLO> PLYRSEQ.GLO +; +nba_pas1.img +---> w1cp1,w1cp2,w1cp3,w1cp4 +---> w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 +---> w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 +---> w5cp5,w5cp6 +---> w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 +---> w1ohp9,w1ohp10,w1ohp11 +---> w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 +---> w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 +---> w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 +---> w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11 +---> w5ohp1,w5ohp2,w5ohp3,w5ohp4 +---> w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 +; +nba_msc2.img +---> w1push1,w1push2,w1push3 +---> w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 +---> w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 +---> w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 +---> w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 +---> w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 +---> w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 +---> w5push10,w5push11 +; +nba_def1.img +---> T1SWPE1,T1SWPE2,T1SWPE3,T1SWPE4 +---> T1SWPE5 +---> T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T1SWPE10 +---> T1SWPE11,T1SWPE12,T2SWPE1,T2SWPE2 +---> T2SWPE3 +---> T2SWPE4,T2SWPE5 +---> T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T2SWPE10,T2SWPE11,T2SWPE12,T3SWPE1 +---> T3SWPE2,T3SWPE3,T3SWPE4 +---> T3SWPE5 +---> T3SWPE6,T3SWPE7,T3SWPE8 +---> T3SWPE9,T3SWPE10,T3SWPE11,T3SWPE12,T4SWPE1,T4SWPE2,T4SWPE3,T4SWPE4 +---> T4SWPE6 +---> T4SWPE5,T4SWPE7,T4SWPE8,T4SWPE9,T4SWPE10,T4SWPE11 +---> T4SWPE12,T5SWPE1,T5SWPE2,T5SWPE3,T5SWPE4,T5SWPE6 +---> T5SWPE5 +---> T5SWPE7,T5SWPE8,T5SWPE9,T5SWPE10,T5SWPE11,T5SWPE12 +; +nba_def3.img +---> w1reb5,w1reb7,w1reb8,w1reb9,w1reb10 +---> w2reb1,w2reb2,w2reb3,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 +;---> w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 +---> w4reb4,w4reb5,w4reb7,w4reb8,w4reb9,w4reb10 +---> w5reb5,w5reb7,w5reb8,w5reb9 +---> w1blokl1,w1blokl2,w1blokl3,w1blokl4 +---> w2blokl1,w2blokl2,w2blokl3,w2blokl4 +---> w3blokl1,w3blokl2,w3blokl3,w3blokl4 +---> w4blokl1,w4blokl2,w4blokl3,w4blokl4 +---> w5blokl1,w5blokl2,w5blokl3,w5blokl4 +; +nba_def4.img +---> w1rej1,w1rej2,w1rej3 +---> w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 +---> w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11 +;,w3rej1 +;---> w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 +---> w4rej1,w4rej2,w4rej3,w4rej4,w4rej5 +---> w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 +---> w4rej11 diff --git a/BACKUP/XART100/BB3.LOD b/BACKUP/XART100/BB3.LOD new file mode 100644 index 0000000..8b177b0 --- /dev/null +++ b/BACKUP/XART100/BB3.LOD @@ -0,0 +1,35 @@ +***> 5c3ec30,2 +; +COF> +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> BEHIND.TBL +; +nba_pas2.img +---> T1HINDR6,T1HINDR7,T1HINDR8,T1HINDR9,T1HINDR10 +---> T2HINDR6,T2HINDR7,T2HINDR8,T2HINDR9,T2HINDR10 +---> T3HINDR6,T3HINDR7,T3HINDR8,T3HINDR9,T3HINDR10 +---> T4HINDR6,T4HINDR7,T4HINDR8,T4HINDR9,T4HINDR10 +;---> T5HINDR6,T5HINDR7,T5HINDR8,T5HINDR9,T5HINDR10 +---> T2HINDL6,T2HINDL7,T2HINDL8,T2HINDL9,T2HINDL10 +---> T3HINDL6,T3HINDL7,T3HINDL8,T3HINDL9,T3HINDL10 +---> T4HINDL6,T4HINDL7,T4HINDL8,T4HINDL9,T4HINDL10 +; +ASM> PASS.TBL +; +---> W1NLPR1,W1NLPR2,W1NLPR3,W1NLPR4 +---> W2NLPR1,W2NLPR2,W2NLPR3,W2NLPR4 +---> W3NLPR1,W3NLPR2,W3NLPR3,W3NLPR4 +---> W4NLPR1,W4NLPR2,W4NLPR3,W4NLPR4 +---> W5NLPR1,W5NLPR2,W5NLPR3,W5NLPR4 +; +nba_pas3.img +---> W1ALPAS1,W1ALPAS2,W1ALPAS3,W1ALPAS4 +---> W2ALPAS1,W2ALPAS2,W2ALPAS3,W2ALPAS4 +---> W3ALPAS1,W3ALPAS2,W3ALPAS3,W3ALPAS4 +---> W4ALPAS1,W4ALPAS2,W4ALPAS3,W4ALPAS4 +---> W5ALPAS1,W5ALPAS2,W5ALPAS3,W5ALPAS4 diff --git a/BACKUP/XART100/BB4.LOD b/BACKUP/XART100/BB4.LOD new file mode 100644 index 0000000..269b55f --- /dev/null +++ b/BACKUP/XART100/BB4.LOD @@ -0,0 +1,48 @@ +***> 52e6c90,2 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> FLAIL.TBL +GLO> FLAIL.GLO +; +nba_msc1.img +;---> w1cow1,w1cow2,w1cow3 +;---> w1cow4,w1cow5,w1cow6,w1cow7,w2cow1,w2cow2,w2cow3,w2cow4,w2cow5,w2cow6 +;---> w2cow7,w3cow1,w3cow2,w3cow3,w3cow4,w3cow5,w3cow6,w3cow7,w4cow1,w4cow2 +;---> w4cow3,w4cow4,w4cow5,w4cow6,w4cow7,w5cow1,w5cow2,w5cow3,w5cow4,w5cow5 +;---> w5cow6,w5cow7 +---> w1flai1,w1flai2,w1flai3,w1flai4,w1flai5,w1flai6,w1flai7,w1flai8 +---> w2flai1,w2flai2,w2flai3,w2flai4 +---> w2flai5,w2flai6,w2flai7,w2flai8,w2flai9,w2flai11 +---> w3flai1,w3flai2,w3flai3,w3flai4,w3flai5,w3flai6,w3flai7 +---> w3flai8,w3flai9 +---> w4flai1,w4flai2,w4flai3,w4flai4,w4flai5,w4flai6 +---> w4flai7,w4flai8 +---> w5flai2,w5flai3,w5flai4,w5flai5,w5flai6 +---> w5flai7,w5flai8,w5flai10,w5flai11 +; +nba_msc4.img +---> w1fall1,w1fall2 +---> w1fall3,w1fall4,w1fall5,w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 +---> w1fall11,w1fall12,w1fall13,w1fall14,w1fall15,w1fall16,w1fall17,w1fall18 +---> w1fall19,w1fall20,w1fall21,w1fall22,w1fall23 +---> w2fall1,w2fall2 +---> w2fall3,w2fall4,w2fall5,w2fall6,w2fall7,w2fall8,w2fall9,w2fall10 +---> w2fall11,w2fall12,w2fall13,w2fall14,w2fall15,w2fall16,w2fall17,w2fall18 +---> w2fall19,w2fall20,w2fall21 +---> w3fall1,w3fall2,w3fall3,w3fall4 +---> w3fall5,w3fall6,w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 +---> w3fall13,w3fall14,w3fall15,w3fall16,w3fall17,w3fall18,w3fall19,w3fall20 +---> w3fall21,w3fall22,w3fall23,w3fall24 +---> w4fall1,w4fall2,w4fall3 +---> w4fall4,w4fall5,w4fall6,w4fall7,w4fall8,w4fall9,w4fall10,w4fall11 +---> w4fall12,w4fall13,w4fall14,w4fall15,w4fall16,w4fall17,w4fall18,w4fall19 +---> w4fall20,w4fall21,w4fall22 +---> w5fall1,w5fall2,w5fall3,w5fall4 +---> w5fall5,w5fall6,w5fall7,w5fall8,w5fall9,w5fall10,w5fall11,w5fall12 +---> w5fall13,w5fall14,w5fall15,w5fall16,w5fall17,w5fall18,w5fall19,w5fall20 +---> w5fall21,w5fall22 diff --git a/BACKUP/XART100/BB5.LOD b/BACKUP/XART100/BB5.LOD new file mode 100644 index 0000000..d557111 --- /dev/null +++ b/BACKUP/XART100/BB5.LOD @@ -0,0 +1,187 @@ +***> 36ad630,0 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRDSP.TBL +; +nba_sht2.img +---> T3DESPA1,T3DESPA2,T3DESPA3,T3DESPA4,T3DESPA5,T3DESPA6 +---> T3DESPA7 +---> T3DESPB1,T3DESPB2,T3DESPB3,T3DESPB4,T3DESPB5 +---> T3DESPB6,T3DESPB7,T3DESPB8 +---> T4DESPA1,T4DESPA2,T4DESPA3,T4DESPA4,T4DESPA5,T4DESPA6 +---> T4DESPA7,T4DESPA8 +; +ASM> PLYRDSEQ.TBL +GLO> DUNKS.GLO +; +nba_dnk1.img +---> M3SPRLA1,M3SPRLA2,M3SPRLA3,M3SPRLA4,M3SPRLA5 +---> M3SPRLA6,M3SPRLA7,M3SPRLA8,M3SPRLA9,M3SPRLA10 +---> W3SETLA1,W3SETLA2,W3SETLA3,W3SETLA4 +---> W3SETLA5,W3SETLA6,W3SETLA7,W3SETLA8,W3SETLA9 +---> S1SETLA1,S1SETLA2,S1SETLA3,S1SETLA4,S1SETLA5 +---> S1SETLA6,S1SETLA7,S1SETLA8,S1SETLA9 +---> S2HBHLA1,S2HBHLA2,S2HBHLA3,S2HBHLA4 +---> S2HBHLA5,S2HBHLA6,S2HBHLA7,S2HBHLA8,S2HBHLA9 +---> S3HBHLA1,S3HBHLA2,S3HBHLA3,S3HBHLA4 +---> S3HBHLA6,S3HBHLA7,S3HBHLA8,S3HBHLA9 +---> S3BEHLA1,S3BEHLA2,S3BEHLA3,S3BEHLA4 +---> S3BEHLA5,S3BEHLA6,S3BEHLA7,S3BEHLA8,S3BEHLA9 +---> S3BETLA2,S3BETLA3,S3BETLA4,S3BETLA5 +---> S3BETLA6,S3BETLA7,S3BETLA8,S3BETLA9,S3BETLA10 +---> S4SETLA1,S4SETLA2,S4SETLA3,S4SETLA4,S4SETLA5 +---> S4SETLA6,S4SETLA7,S4SETLA8,S4SETLA9 +---> S5SETLA1,S5SETLA2,S5SETLA3,S5SETLA4,S5SETLA5 +---> S5SETLA6,S5SETLA7,S5SETLA8,S5SETLA9,S5SETLA10 +---> W3SPLY1,W3SPLY2,W3SPLY3,W3SPLY4,W3SPLY5,W3SPLY6,W3SPLY7,W3SPLY8 +---> W3SPLY9,W3SPLY10,W3SPLY11,W3SPLY12,W3SPLY13,W3SPLY14,W3SPLY15,W3SPLY16 +---> W3SPLY17,W3SPLY18,W3SPLY19,W3SPLY20 +; +nba_dnk2.img +---> M1SPDU1,M1SPDU2,M1SPDU3 +---> M1SPDU4,M1SPDU5,M1SPDU6,M1SPDU7,M1SPDU8,M1SPDU9,M1SPDU10,M1SPDU11 +---> M1SPDU12,M1SPDU13,M1SPDU14,M1SPDU15,M1SPDU16,M1SPDU17,M1SPDU18,M1SPDU19 +---> M1SPDU20,M2DKDU1,M2DKDU2,M2DKDU3,M2DKDU4,M2DKDU5,M2DKDU6,M2DKDU7 +---> M2DKDU8,M2DKDU9,M2DKDU10,M2DKDU11,M2DKDU12,M2DKDU13,M2DKDU14,M2DKDU15 +---> M2DKDU16,M3TUKDU1,M3TUKDU2,M3TUKDU3,M3TUKDU4,M3TUKDU5,M3TUKDU6 +---> M3TUKDU7,M3TUKDU8,M3TUKDU9,M3TUKDU10,M3TUKDU11,M3TUKDU12,M3TUKDU13 +---> M3TUKDU14,M3TUKDU15,M3TUKDU16,M3TUKDU17,M3SPRDU1,M3SPRDU2,M3SPRDU3 +---> M3SPRDU4,M3SPRDU5,M3SPRDU6,M3SPRDU7,M3SPRDU8,M3SPRDU9,M3SPRDU10 +---> M3SPRDU11,M5REVDU1,M5REVDU2,M5REVDU3,M5REVDU4,M5REVDU5,M5REVDU6 +---> M5REVDU7,M5REVDU8,M5REVDU9,M5REVDU10,M5REVDU11,M5REVDU12,M5REVDU13 +---> M5REVDU14,M5REVDU15,M5REVDU16,S1TUKDU1,S1TUKDU2,S1TUKDU3,S1TUKDU4 +---> S1TUKDU5,S1TUKDU6,S1TUKDU7,S1TUKDU8,S1TUKDU9,S1TUKDU10,S1TUKDU11 +---> S3SORDU1,S3SORDU2,S3SORDU3,S3SORDU4,S3SORDU5,S3SORDU6,S3SORDU7,S3SORDU8 +---> S3BKDU1,S3BKDU2,S3BKDU3,S3BKDU4,S3BKDU5,S3BKDU6,S3BKDU7,S3BKDU8,S3BKDU9 +---> S3BKDU10,S3BKDU11,S3BKDU12,S3BKDU14,S3BKDU15,S3BKDU16,W3SPRDU1 +---> W3SPRDU2,W3SPRDU3,W3SPRDU4,W3SPRDU5,W3SPRDU6,W3SPRDU7,W3SPRDU8,W3SPRDU9 +---> W3SPRDU10,W3SPRDU11,W3SPRDU12,W3SPRDU13,W3SPRDU14 +;---> W3SWDU1,W3SWDU2,W3SWDU3,W3SWDU4,W3SWDU5,W3SWDU6,W3SWDU7,W3SWDU8,W3SWDU9 +---> W3SWDU10,W3SWDU11,W3SWDU12,W3FLDU1,W3FLDU2,W3FLDU3,W3FLDU4,W3FLDU5 +---> W3FLDU6,W3FLDU7,W3FLDU8,W3FLDU9,W3FLDU10,W3FLDU11,W3FLDU12,W3FLDU13 +---> W3CRZDU1,W3CRZDU2,W3CRZDU3,W3CRZDU4,W3CRZDU5,W3CRZDU6,W3CRZDU7,W3CRZDU8 +---> W3CRZDU9,W3CRZDU10,W3CRZDU11,W3CRZDU12,W3CRZDU13,W3CRZDU14,W3CRZDU15 +---> W3CRZDU16,W3CRZDU17,W3CRZDU18,W3CRZDU19,W3CRZDU20 +---> W3SPNDU1,W3SPNDU2,W3SPNDU3,W3SPNDU4,W3SPNDU5 +---> W3SPNDU6,W3SPNDU7,W3SPNDU8,W3SPNDU9,W3SPNDU10,W3SPNDU11,W3SPNDU12 +---> W3SPNDU13,W3SPNDU14,W3SPNDU15,W3SPNDU16,W3SPNDU17,W3SPNDU18,W3SPNDU19 +---> W3SPNDU20,W3SPNDU21 +---> W3SMDU6,W3SMDU7,W3SMDU8,W3SMDU9 +; +nbafades.img +---> W2FADIN4,W2FADIN5,W2FADIN6 +---> W2FADIN7,W2FADIN8,W2FADIN9,W2FADIN10,W2FADIN11,W2FADIN12,W2FADIN13 +---> W3FADIN5,W3FADIN6 +---> W3FADIN7,W3FADIN8,W3FADIN9,W3FADIN10,W3FADIN11,W3FADIN12,W3FADIN13 +---> W4FADIN2,W4FADIN3,W4FADIN4,W4FADIN5 +---> W4FADIN8,W4FADIN9,W4FADIN10,W4FADIN11,W4FADIN12,W4FADIN13 +---> W2FADAW3,W2FADAW4,W2FADAW5,W2FADAW6 +---> W2FADAW7,W2FADAW8,W2FADAW9,W2FADAW10,W2FADAW11,W2FADAW12,W2FADAW13 +---> W3FADAW3,W3FADAW4,W3FADAW5,W3FADAW6 +---> W3FADAW7,W3FADAW8,W3FADAW9,W3FADAW10,W3FADAW11,W3FADAW12,W3FADAW13 +---> W4FADAW3,W4FADAW4,W4FADAW5,W4FADAW6 +---> W4FADAW7,W4FADAW8,W4FADAW9,W4FADAW10,W4FADAW11,W4FADAW12,W4FADAW13 +; +nba_sht2.img +---> w1hks1,w1hks2,w1hks3 +---> w1hks4,w1hks5,w1hks6,w1hks7,w1hks8,w1hks9,w1hks10 +---> w3hks1,w3hks2,w3hks3 +---> w3hks4,w3hks5,w3hks6,w3hks7,w3hks8,w3hks9,w3hks10,w4hks1,w4hks2,w4hks3 +---> w4hks4,w4hks5,w4hks6,w4hks7,w4hks8,w4hks9,w4hks10,w5hks1,w5hks2,w5hks3 +---> w5hks4,w5hks5,w5hks6,w5hks7,w5hks8,w5hks9,w5hks10 +; +nbafhook.img +---> w3fhks1,w3fhks2,w3fhks3,w3fhks4,w3fhks5,w3fhks6,w3fhks7,w3fhks8,w3fhks9 +; +ASM> STAND.TBL +; +nba_msc3.img +---> w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 +---> w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 +---> w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 +; +nba_stn1.img +---> W1ST1 +---> W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 +---> W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 +---> W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 +---> w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 +---> w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 +---> w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 +; +ASM> PLYRSEQ2.TBL +; +nba_msc2.img +---> w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 +---> w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 +---> w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 +---> w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 +---> w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +; +nba_msc3.img +---> w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 +---> w4hndne1,w4hndne2,w4hndne3,w4hndne4 +---> w4hndne5 +---> w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 +---> w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 +---> w2hndhp1 +---> w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 +---> w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 +---> w1pikup1,w1pikup2 +---> w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 +---> w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 +---> w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +; +nbaspnmv.img +---> W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 +---> W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 +---> W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 +; +ASM> PLYRSEQ3.TBL +GLO> PLYRSEQ3.GLO +; +nba_stn1.img +---> w1dst1,w1dst2,w1dst3,w1dst4,w1dst5,w1dst6,w1dst7,w1dst8,w1dst9,w1dst10 +---> w2dst1,w2dst2,w2dst3,w2dst4,w2dst5,w2dst6,w2dst7,w2dst8,w2dst9,w2dst10 +---> w3dst1,w3dst2,w3dst3,w3dst4,w3dst5,w3dst6,w3dst7,w3dst8,w3dst9,w3dst10 +---> w4dst1,w4dst2,w4dst3,w4dst4,w4dst5,w4dst6,w4dst7,w4dst8,w4dst9,w4dst10 +---> w5dst1,w5dst2,w5dst3,w5dst4,w5dst5,w5dst6,w5dst7,w5dst8,w5dst9,w5dst10 +---> w1drcr1,w1drcr2,w1drcr3,w1drcr4,w1drcr5,w1drcr6,w1drcr7,w1drcr8,w1drcr9 +---> w1drcr10,w1drcr11,w1drcr12,w2drcr1,w2drcr2,w2drcr3,w2drcr4,w2drcr5 +---> w2drcr6,w2drcr7,w2drcr8,w2drcr9,w2drcr10,w2drcr11,w2drcr12,w3drcr1 +---> w3drcr2,w3drcr3,w3drcr4,w3drcr5,w3drcr6,w3drcr7,w3drcr8,w3drcr9 +---> w3drcr10,w3drcr11,w3drcr12,w4drcr1,w4drcr2,w4drcr3,w4drcr4,w4drcr5 +---> w4drcr6,w4drcr7,w4drcr8,w4drcr9,w4drcr10,w4drcr11,w4drcr12,w5drcr1 +---> w5drcr2,w5drcr3,w5drcr4,w5drcr5,w5drcr6,w5drcr7,w5drcr8,w5drcr9 +---> w5drcr10,w5drcr11,w5drcr12,w1stand1,w1stand2,w1stand3,w1stand4,w2stand1 +---> w2stand2,w2stand3,w2stand4,w3stand1,w3stand2,w3stand3,w3stand4,w4stand1 +---> w4stand2,w4stand3,w4stand4,w5stand1,w5stand2,w5stand3,w5stand4 +; +ASM> PLYRJSHT.TBL +; +nba_sht1.img +---> w1js1,w1js2,w1js3,w1js4 +---> w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 +---> w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 +---> w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 +---> w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 +---> w5js9,w5js10 +; +nba_sht3.img +---> W1UNDR1,W1UNDR2,W1UNDR3,W1UNDR4,W1UNDR5 +---> W1UNDR6,W1UNDR7,W1UNDR8,W1UNDR9 +---> W5UNDR1,W5UNDR2,W5UNDR3,W5UNDR4,W5UNDR5 +---> W5UNDR6,W5UNDR7,W5UNDR8,W5UNDR9,W5UNDR10,W5UNDR11 +; +ASM> PLYRMAKE.TBL +; +nba_mak1.img +;W5BGDR2 is an unused img +---> W5BGDR1,W5BGDR2,W5BGDR3,W5BGDR4,W5BGDR5,W5BGDR6,W5BGDR7,W5BGDR8,W5BGDR9 +---> W5BGDR10 + diff --git a/BACKUP/XART100/BB6.LOD b/BACKUP/XART100/BB6.LOD new file mode 100644 index 0000000..08c2e14 --- /dev/null +++ b/BACKUP/XART100/BB6.LOD @@ -0,0 +1,224 @@ +***> 4000000,2 +; +PON> +CON> +XOF> +; +ASM> names2.tbl +GLO> names2.glo +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +pnames2.img +---> SCOTT,ROBERTSON,CHAPMAN,WEBB,LANG,RUFFIN,MARCI2,WEATHSPN +---> AMRICH,ANZALONE,BENSON,BUTATA,FUNK,HAEGERJR,JIGGETTS +---> KELLER,LAWMAN,LEE,MDOC,MIKE,MUNDAY,NORTH,PERRY,RIVETT,SEAN,ZIRIN +---> HBETT,MBETT +pnames.img +---> GUGLI2,MCKEE2,ELLIOT2,TURMELL,CARLTON,HEY +---> FITZ,AIRMOR,BARDO,HEDRICK,MINIFE,MARTIN,PESINA,THOMPS,GEER,JAPPLE +---> FERRIER,VINIK,EHRLICH,LIPTAK,ROOT,MEDNICK,ROAN,OURSLER,QUINN,TOBIAS,BOON +PLYRNAME.img +---> ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR,BOSNBRO,BOSNBAR +;,ATLNROO,ATLNHEN +---> BOSNMON,BOSNRAD,BOSNFOX,CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR,CHINPIP +---> CHINROD,CHINKUK,CHINLON,CHINKER,CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER +---> DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC,DENNRAU,DENNMUT,DENNMcD,DENNROS +---> DENNELL,DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU,GOLNWIL,GOLNSPR,GOLNSEI +---> GOLNSMI,GOLNMUL,HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI,INDNMIL +;,GOLNCOL +---> INDNDAV,INDNSMI,INDNMcK,INDNJAC,LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR +---> LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON,MIANMOU,MIANWIL,MIANCHA +;,LALNJOH +---> MIANHAR,MIANDAN,MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU,MINNRID,MINNLAN +---> MINNWEB,MINNGUG,MINNGAR,NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW,NWYNEWI +---> NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA,ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO +;,NWYNAND,ORLNGAT +---> ORLNKON,PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX,PHONJOH,PHONTIS +---> PHONMAN,PHONPER,PHONFIN,PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI,SACNOWE +---> SACNRIT,SACNGRA,SACNMAR,SACNEDN,SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG +---> SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR,TORNROG,TORNSTO,TORNROB,TORNMIL +---> TORNMUR,UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR,VANNANT,VANNEDW,VANNSCO +---> VANNREE,VANNMUR,WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR +infowin.img +---> GAINED_TXT,IDIOTS_TXT +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> plyrdsq2.tbl +GLO> dunks2.glo +; +nba_dnk2.img +---> W3PLDDU5,W3PLDDU6,W3PLDDU7,W3PLDDU8,W3PLDDU9 +---> W3PLDDU10,W3PLDDU11,W3PLDDU12,W3PLDDU13,W3PLDDU14,W3PLDDU15 +---> W3SMDU1,W3SMDU2,W3SMDU3,W3SMDU4,W3SMDU5 +; +nba_dnk3.img +---> W2THPW1,W2THPW2,W2THPW3 +---> W2THPW4,W2THPW5,W2THPW6,W2THPW7,W2THPW8,W2THPW9,W2THPW10,W2THPW11 +---> W2THPW12,W4THPW1,W4THPW2,W4THPW3,W4THPW4,W4THPW5,W4THPW6 +---> W4THPW7,W4THPW8,W4THPW9,W4THPW10,W4THPW11,W4THPW12,W4THPW13,M5OHPB1 +---> M5OHPB2,M5OHPB3,M5OHPB4,M5OHPB5,M5OHPB6,M5OHPB7,M5OHPB8,M5OHPB9 +---> M5OHPB10,M5OHPB11,M5OHPB12 +---> W3SDTUK1,W3SDTUK2,W3SDTUK3,W3SDTUK4,W3SDTUK5,W3SDTUK6,W3SDTUK7 +---> W3SDTUK8,W3SDTUK9,W3SDTUK10,W3SDTUK11 +---> W3SDTUK12,W3SDTUK13,W3SDTUK14,W3SDTUK15 +---> W3ARMSP1,W3ARMSP3,W3ARMSP4,W3ARMSP5,W3ARMSP6 +---> W3ARMSP7,W3ARMSP8,W3ARMSP9,W3ARMSP10,W3ARMSP11,W3ARMSP12,W3ARMSP13 +---> W3ARMSP14,W3ARMSP15,W3ARMSP16,W3ARMSP17 +---> W4SDSLM1,W4SDSLM3,W4SDSLM4,W4SDSLM6,W4SDSLM7,W4SDSLM8 +---> W4SDSLM9,W4SDSLM10,W4SDSLM12,W4SDSLM13,W4SDSLM14 +---> W4SDSLM15,W4SDSLM16,W4SDSLM17,W4SDSLM18 +; +nba_dnk4.img +;---> S3OASD01,S3OASD02,S3OASD03 +;---> S3OASD04,S3OASD05,S3OASD06,S3OASD07,S3OASD08,S3OASD09,S3OASD10,S3OASD11 +;---> S3OASD12,S3OASD13,S3OASD14,S3OASD15,S3OASD16,S3OASD17,S3OASD18 +---> W3OHSD01,W3OHSD02,W3OHSD03,W3OHSD04,W3OHSD05,W3OHSD06,W3OHSD07,W3OHSD08 +---> W3OHSD09,W3OHSD10,W3OHSD11,W3OHSD12,W3OHSD13,W3OHSD14,W3OHSD15,W3OHSD16 +---> W3OHSD17,W3OHSD18,W3OHSD19,W3OHSD20,W3OHSD21,W3OHSD22,W3OHSD23,W3OHSD24 +---> W3OHSD25,W3OHSD26,W3SPLD01,W3SPLD02,W3SPLD03,W3SPLD04,W3SPLD05,W3SPLD06 +---> W3SPLD07,W3SPLD08,W3SPLD09,W3SPLD10,W3SPLD11,W3SPLD12,W3SPLD13,W3SPLD14 +---> W3SPLD15,W3SPLD16,W3SPLD17,W3SPLD18,W3SPLD19,W3SPLD20 +nba_dnk5.img +;---> W8ALY101,W8ALY102,W8ALY103 +;---> W8ALY104,W8ALY105,W8ALY106,W8ALY107,W8ALY108,W8ALY109,W8ALY110,W8ALY111 +;---> W8ALY112,W8ALY113,W8ALY114,W8ALY115 +;---> W8ALY501,W8ALY502,W8ALY503,W8ALY504 +;---> W8ALY505,W8ALY506,W8ALY507,W8ALY508,W8ALY509,W8ALY510,W8ALY511,W8ALY512 +---> W8OHP201,W8OHP202,W8OHP203,W8OHP204,W8OHP205,W8OHP206,W8OHP207,W8OHP208 +---> W8OHP209,W8OHP210,W8OHP211,W8OHP212,W8OHP213,W8OHP214,W8OHP215 +;---> W8OHP401 +;---> W8OHP402,W8OHP403,W8OHP404,W8OHP405,W8OHP406,W8OHP407,W8OHP408,W8OHP409 +;---> W8OHP410,W8OHP411,W8OHP412 +---> W8UND101,W8UND102,W8UND103,W8UND104,W8UND105 +---> W8UND106,W8UND107,W8UND108,W8UND109,W8UND110,W8UND111,W8UND112,W8UND113 +---> W8UND114,W8UND115,W8UND116,W8UND117,W8UND118,W8UND119,W8UND120 +; +nba_dnk6.img +;---> M8FLY201,M8FLY202,M8FLY203 +;---> M8FLY204,M8FLY205,M8FLY206,M8FLY207,M8FLY208,M8FLY209,M8FLY210,M8FLY211 +;---> M8FLY212 +;---> M8OASD01,M8OASD02,M8OASD03,M8OASD04,M8OASD05,M8OASD06 +;---> M8OASD07,M8OASD08,M8OASD09,M8OASD10,M8OASD11,M8OASD12,M8OASD13,M8OASD14 +;---> M8OASD15,M8OASD16 +;---> M8OHM201,M8OHM202,M8OHM203,M8OHM204 +;---> M8OHM205,M8OHM206,M8OHM207,M8OHM208,M8OHM209,M8OHM210,M8OHM211,M8OHM212 +;---> M8OHM213,M8OHM214,M8OHM215,M8OHM216,M8OHM217,M8OHM218 +---> M8OHM301,M8OHM302 +---> M8OHM303,M8OHM304,M8OHM305,M8OHM306,M8OHM307,M8OHM308,M8OHM309,M8OHM310 +---> M8OHM311,M8OHM312,M8OHM313,M8OHM314,M8OHM315,M8OHM316,M8OHM317,M8OHM318 +---> M8OHM319 +;---> M8OHM501,M8OHM502,M8OHM503,M8OHM504,M8OHM505,M8OHM506,M8OHM507 +;---> M8OHM508,M8OHM509,M8OHM510,M8OHM511,M8OHM512,M8OHM513,M8OHM514,M8OHM515 +;---> M8OHM516,M8OHM517,M8OHM518 +---> S8ALY201,S8ALY202 +---> S8ALY203,S8ALY204,S8ALY205,S8ALY206,S8ALY207,S8ALY208,S8ALY209,S8ALY210 +---> S8ALY211,S8ALY212,S8ALY213,S8ALY214,S8ALY401,S8ALY402,S8ALY403,S8ALY404 +---> S8ALY405,S8ALY406,S8ALY407,S8ALY408,S8ALY409,S8ALY410,S8ALY411,S8ALY412 +---> S8ALY413,S8ALY414 +nba_dnk7.img +;---> M8REVD01,M8REVD02,M8REVD03 +;---> M8REVD04,M8REVD05,M8REVD06,M8REVD07,M8REVD08,M8REVD09,M8REVD10,M8REVD11 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15,M8REVD16,M8REVD17,M8REVD18,M8REVD19 +;---> M8REVD20,M8REVD21,W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15 +---> W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +---> W8CLSD07,W8CLSD08,W8CLSD09,W8CLSD10,W8CLSD11,W8CLSD12 +;,W8CLSD13,W8CLSD14 +---> W8FL2D01,W8FL2D02,W8FL2D03,W8FL2D04,W8FL2D05,W8FL2D06,W8FL2D07,W8FL2D08 +---> W8FL2D09,W8FL2D10,W8FL2D11,W8FL2D12,W8FL2D13,W8FL2D14,W8FL2D15,W8FL2D16 +---> W8FL2D17 +---> W8FL3D01,W8FL3D02,W8FL3D03,W8FL3D04,W8FL3D05,W8FL3D06,W8FL3D07 +---> W8FL3D08,W8FL3D09,W8FL3D10,W8FL3D11,W8FL3D12,W8FL3D13,W8FL3D14,W8FL3D15 +nba_dnk8.img +---> W3CANN02 +---> W3CANN04,W3CANN06,W3CANN08 +---> W3CANN10,W3CANN12,W3CANN14,W3CANN16 +---> W3CANN18,W3CANN20,W3CANN22,W3CANN24 +---> W3CANN26,W3CANN28,W3CANN30,W3CANN32 +---> S8HLSP01,S8HLSP02,S8HLSP03,S8HLSP04,S8HLSP05,S8HLSP06,S8HLSP07 +---> S8HLSP08,S8HLSP09,S8HLSP10,S8HLSP11,S8HLSP12,S8HLSP13,S8HLSP14,S8HLSP15 +---> S8HLSP16 +; +nba_msc3.img +---> w3stwb3fix +nbajmpps.img +---> w1jupa,w2jupa,w3jupa,w4jupa,w5jupa +nba_pas4.img +;---> W2RN2P01,W2RN2P02,W2RN2P03 +;---> W2RN2P04,W2RN3P01,W2RN3P02,W2RN3P03,W2RN3P04,W2RN4P01,W2RN4P02,W2RN4P03 +;---> W2RN4P04 +; +;#3 run pass! +;---> W3RN1P01,W3RN1P02,W3RN1P03,W3RN1P04,W3RN1P05,W3RN1P06,W3RN2P01 +;---> W3RN2P02,W3RN2P03,W3RN2P04,W3RN3P01,W3RN3P02,W3RN3P03,W3RN3P04,W3RN4P01 +;---> W3RN4P02,W3RN4P03,W3RN4P04,W3RN5P01,W3RN5P02,W3RN5P03,W3RN5P04,W3RN5P05 +;---> W3RN5P06 +; +;,W4RN3P01,W4RN3P02,W4RN3P03,W4RN3P04,W4RN4P01,W4RN4P02,W4RN4P03 +;---> W4RN4P04,W4RN6P01,W4RN6P02,W4RN6P03,W4RN6P04 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> NCKNME.TBL +GLO> JUNKXXXX.GLO +; +stattxt2.img +---> PASSWORD,stx_avgallow,stx_avgscore +---> NN_ACE,NN_BERTHA,NN_BIGDAD +---> NN_BIGFOOT,NN_BOOGY,NN_BUBBA,NN_CHILLY,NN_CORNEL,NN_CUCKOO +---> NN_DINGBAT,NN_FATBOY,NN_FLASH,NN_FRANKIE +---> NN_FRNKCOW,NN_GATOR,NN_GRANDPA,NN_HAMMER,NN_HAWKEYE +---> NN_HOMEBOY,NN_JOKER,NN_LOVER,NN_MADDOG,NN_MARGE +---> NN_MERLIN,NN_PONGO,NN_SHADOW,NN_SLIM +---> NN_SNAKE,NN_SPANKY,NN_SPIDER,NN_SPIKE,NN_TOPGUN,NN_TREXX +---> NN_VIPER,NN_ZIPPY +; +ASM> PRIVLG.TBL +; +privilg2.img +---> TEX_SR,HIDEAT,OVRTME +privilg.img +---> TEX_NTA,TEX_DBH +statstxt.img +---> SENDTO,ENTRIES +; +ASM> CHEER.TBL +ZON> +; +cheer.img +---> CHEERA01,CHEERA02,CHEERA03,CHEERA04,CHEERA05,CHEERA06,CHEERA07,CHEERA08 +---> CHEERA09,CHEERA10,CHEERB01,CHEERB02,CHEERB03,CHEERB04,CHEERB05,CHEERB06 +---> CHEERB07,CHEERB08,CHEERB09 +;Start of game hot spots +hot.img +---> HOTred,HOTblu,HOTgrn,HOTyel +; +ASM> PLYRHD6A.TBL +; +ZOF> +XON> +CON> +PPP> 6 +; +HDS3.IMG +; +GLO> PLYRHD6A.GLO +---> GrantG0,GrantG1 +GLO> XXXHD.GLO +---> GrantG2,GrantG3,GrantG4,GrantG5,GrantG6,GrantG7,GrantG8,GrantG9 +---> GrantG10,GrantG11,GrantG12,GrantG13,GrantG14,GrantG15,GrantG16 +GLO> PLYRHD6A.GLO +---> Horna0,Horna1 +GLO> XXXHD.GLO +---> Horna2,Horna3,Horna4,Horna5,Horna6,Horna7,Horna8,Horna9,Horna10,Horna11 +---> Horna12,Horna13,Horna14,Horna15,Horna16 +GLO> PLYRHD6A.GLO +---> Manning0,Manning1 +GLO> XXXHD.GLO +---> Manning2,Manning3,Manning4,Manning5,Manning6,Manning7,Manning8 +---> Manning9,Manning10,Manning11,Manning12,Manning13,Manning14,Manning15 +---> Manning16 +; +offnba.img +---> OFFNBA diff --git a/BACKUP/XART100/BB7.LOD b/BACKUP/XART100/BB7.LOD new file mode 100644 index 0000000..e83e1ef --- /dev/null +++ b/BACKUP/XART100/BB7.LOD @@ -0,0 +1,533 @@ +***> 2f63930,1 +; +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> ARROW.TBL +GLO> ARROW.GLO +; +arrowsn.img +---> arrown1l,arrown1r,arrown2l,arrown2r,arrown3l,arrown3r,arrown4l,arrown4r +---> arrown1t,arrown2t,arrown3t,arrown4t +---> arrown1l2p,arrown1r2p,arrown2l2p,arrown2r2p +---> arrown1t2p,arrown2t2p +; +fball.img +PPP> 6 +---> nflash1,nflash2,nflash3,nflash3a,nflash4,nflash5,nflash6 +PPP> 0 +; +ASM> MUGSHOT.TBL +GLO> MUGSHOT.GLO +; +PPP> 8 +ZON> +; +mugs1.img +---> AUG_ATL,DIV_LAK,EWG_NEY,HRD_MIA,JON_CHA,KMP_SEA,MIL_IND +---> MLN_UTA,MUT_DEN,OAK_NEY,OLA_HOU,PIP_CHI,RAD_MK2,ROB_SAN,SAL_DIVM +---> SCH_SEA,SMT_HOU,STK_UTA +; +mugs2.img +---> AND_CHA,AND_ORL,BAK_MLW,BEN_UTA,BRO_BOS,CAM_LAK,CHE_WAS,DUM_DET,HAR_ORL +---> HOR_HOU,JAC_DAL,JOH_PHX,KUK_CHI,MAS_DAL,MAS_NEY,PAY_SEA,RIC_SAC,RID_MIN +---> ROB_PRT,SMI_IND,STA_NEY,WEA_PHL +; +mugs3.img +---> ANT_VAN,BAR_BOS,BAR_CLP,BEN_MLW,BLY_ATL,BRA_CLE,BRA_NEJ,CAS_HOU +---> CEB_LAK,CHI_PRT,COL_PHL,CUR_CHA,DAN_MIA,DAV_IND,DEL_SAN,DOU_MLW +---> DRX_HOU,EDN_SAC,EDW_NEJ,EDW_VAN,ELL_DEN,ELL_SAN,FER_CLE,FIN_PHX,FOR_SEA +---> FOX_BOS,GAR_MIN,GLL_NEJ,GIL_NEJ,GRA_SAC,GRT_ORL,GUG_MIN,HIL_CLE +---> HIL_DET,HOU_DET,HPR_NEY,HRN_UTA,HWD_WAS,HWK_SEA,JAC_IND,JON_DAL +---> JON_LAK,JON_SAN,KER_CHI,KID_DAL,KON_ORL,LAE_ATL,LON_CHI,MAN_PHX,MAR_SAC +---> MAX_PHL,MCC_DAL,MCD_DEN,MCK_IND,MIL_CLE,MIL_TOR,MLS_DET,MON_BOS,MOR_UTA +---> MOU_MIA,MUL_GLD,MUR_CLP,MUR_TOR,MUR_VAN,MUR_WAS,NOR_ATL,OBA_NEJ,OWE_SAC +---> PAC_WAS,PER_PHX,PHL_CLE,PRS_SAN,RAD_BOS,RAF_DEN,RCE_CHA,RCH_CLP,RES_MLW +---> REV_VAN,ROB_MLW,ROD_CHI,ROG_CLP,ROG_TOR,ROS_DEN,SAB_PRT,SCO_ORL +---> SKL_GLD,SMI_ATL,SMI_GLD,SPR_GLD,STA_PHL,STO_TOR,STR_PRT,THR_DET,TIS_PHX +---> VAN_LAK,VAU_CLP,WEB_WAS,WIL_PRT,WIL_MIA,WLS_GLD +---> ZID_CHA +---> RODBLK,RODBLU,RODORG,RODPRP,RODRED,RODWHT,RODYEL,RODGRN +; +mugs4.img +---> SCO_VAN,ROB_TOR,CHP_MIA,WEB_MIN,LNG_MIN,RUF_PHL +;JOH_LAK +mugsmsc1.img +---> COW,ALIEN,GUIDO,ANG,LIS,MEL,MIK,JOE +;ROS,SAL +mugsmsc2.img +---> BER,CHK,FAT,FRA,GOR,GRE,OLD,PIG,WIZ +mugsmsc3.img +---> ERI_MUG,KIM_MUG,MAR_MUG,ROH_MUG,SEA_MUG +mugsmsc4.img +---> BEA_MUG,CHE_MUG,CLO_MUG,JAB_MUG,BAL_MUG,MDOC_MUG,VIK_MUG +mugsmsc5.img +---> MUN_MUG,AMR_MUG,BAR_MUG,DIM_MUG,JAC_MUG,JIG_MUG,JON_MUG,MIK_MUG,MIN_MUG +---> MXV_MUG,WIL_MUG,NOR_MUG +mugsmsc6.img +---> CAR_MUG,DAN_MUG,EDD_MUG,EUG_MUG,JEF_MUG,SHN_MUG +---> JAM_MUG,TUR_MUG +mugsmsc7.img +---> BUD_MUG,HEY_MUG,JEN_MUG,JMC_MUG,NIK_MUG,ROT_MUG +---> SAL_MUG,PAT_MUG,NEI_MUG,PER_MUG +colmugs1.img +---> ALL_COL,CAM_COL,DAM_COL,DUN_COL,HAM_COL,HAR_COL,IVE_COL,KIT_COL,MAR_COL +---> MIN_COL,RIL_COL,WAL_COL +PPP> 0 +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> HOTSPOT.TBL +GLO> HOTSPOT.GLO +; +firefram.img +---> FFRAME01,FFRAME02,FFRAME03,FFRAME04,FFRAME05 +---> FFRAME06,FFRAME07,FFRAME08,FFRAME09,FFRAME10 +---> FFRAME11,FFRAME12,FFRAME13,FFRAME14,FFRAME15 +---> FFRAME16,FFRAME17,FFRAME18,FFRAME19,FFRAME20 +; +hotcircl.img +---> HOTCRC01,HOTCRC02,HOTCRC03,HOTCRC04,HOTCRC05,HOTCRC06,HOTCRC07 +---> HOTCRC08,HOTCRC09,HOTCRC10,HOTCRC11,HOTCRC12,HOTCRC13 +; +hotspot.img +;---> HOTA_01,HOTA_02,HOTA_03,HOTA_04,HOTA_05,HOTA_06,HOTA_07,HOTA_08,HOTA_09 +;---> HOTA_10,HOTA_11,HOTA_12,HOTA_13 +---> HOTNA_01,HOTNA_02,HOTNA_03,HOTNA_04 +---> HOTNA_05,HOTNA_06,HOTNA_07,HOTNA_08,HOTNA_09,HOTNA_10,HOTNA_11,HOTNA_12 +---> HOTNA_13 +; +explode.img +---> SMOKE01,SMOKE02 +---> SMOKE03,SMOKE04,SMOKE05,SMOKE06,SMOKE07,SMOKE08,SMOKE09,SMOKE10 +;---> SMOKEB01,SMOKEB02,SMOKEB03,SMOKEB04,SMOKEB05,SMOKEB06,SMOKEB07,SMOKEB08 +;---> SMOKEB09,SMOKEB10 +---> SALTA01,SALTA02,SALTA03,SALTA04,SALTA05,SALTA06 +---> SALTA07,SALTA08,SALTA09,SALTA10,SALTB01,SALTB02,SALTB03,SALTB04,SALTB05 +---> SALTB06,SALTB07,SALTB08,SALTB09,SALTB10,SALTB11 +---> XPLOD_BLU,XPLOD_BRT,XPLOD_YEL +---> SMOK1_01,SMOK1_02,SMOK1_03,SMOK1_04,SMOK1_05 +---> SMOK1_06,SMOK1_07,SMOK1_08,SMOK1_09,SMOK1_10,SMOK1_11,SMOK1_12 +;---> SMOK1_13,SMOK1_14 +; +ASM> BALLSHAD.TBL +GLO> BALLSHAD.GLO +; +ball.img +COF> +---> shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 +---> shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 +---> shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 +---> ballshad5 +POF> +---> ballshad2,ballshad3,ballshad4,ballshad6 +---> ballshad7 +PON> +; +ASM> BALL.TBL +GLO> JUNKXXXX.GLO +; +nball.img +PPP> 6 +---> NBALL101,NBALL601 +PPP> 0 +POF> +---> NBALL102,NBALL103,NBALL104,NBALL105,NBALL106,NBALL107,NBALL108 +---> NBALL109,NBALL110,NBALL111,NBALL112,NBALL113,NBALL114,NBALL115,NBALL116 +---> NBALL117,NBALL118,NBALL119,NBALL120,NBALL121,NBALL122,NBALL123,NBALL124 +---> NBALL125,NBALL126,NBALL127,NBALL128,NBALL129,NBALL130,NBALL201,NBALL202 +---> NBALL203,NBALL204,NBALL205,NBALL206,NBALL207,NBALL208,NBALL209,NBALL210 +---> NBALL211,NBALL212,NBALL213,NBALL214,NBALL215,NBALL216,NBALL217,NBALL218 +---> NBALL219,NBALL220,NBALL221,NBALL222,NBALL223,NBALL224,NBALL225,NBALL226 +---> NBALL227,NBALL228,NBALL229,NBALL230,NBALL301,NBALL302,NBALL303,NBALL304 +---> NBALL305,NBALL306,NBALL307,NBALL308,NBALL309,NBALL310,NBALL311,NBALL312 +---> NBALL313,NBALL314,NBALL315,NBALL316,NBALL317,NBALL318,NBALL319,NBALL320 +---> NBALL321,NBALL322,NBALL323,NBALL324,NBALL325,NBALL326,NBALL327,NBALL328 +---> NBALL329,NBALL330,NBALL401,NBALL402,NBALL403,NBALL404,NBALL405,NBALL406 +---> NBALL407,NBALL408,NBALL409,NBALL410,NBALL411,NBALL412,NBALL413,NBALL414 +---> NBALL415,NBALL416,NBALL417,NBALL418,NBALL419,NBALL420,NBALL421,NBALL422 +---> NBALL423,NBALL424,NBALL425,NBALL426,NBALL427,NBALL428,NBALL429,NBALL430 +---> NBALL501,NBALL502,NBALL503,NBALL504,NBALL505,NBALL506,NBALL507,NBALL508 +---> NBALL509,NBALL510,NBALL511,NBALL512,NBALL513,NBALL514,NBALL515,NBALL516 +---> NBALL517,NBALL518,NBALL519,NBALL520,NBALL521,NBALL522,NBALL523,NBALL524 +---> NBALL525,NBALL526,NBALL527,NBALL528,NBALL529,NBALL530 +---> NBALL602 +---> NBALL603,NBALL604,NBALL605,NBALL606,NBALL607,NBALL608,NBALL609,NBALL610 +---> NBALL611,NBALL612,NBALL613,NBALL614,NBALL615,NBALL616,NBALL617,NBALL618 +---> NBALL619,NBALL620,NBALL621,NBALL622,NBALL623,NBALL624,NBALL625,NBALL626 +---> NBALL627,NBALL628,NBALL629,NBALL630,NBALL701,NBALL702,NBALL703,NBALL704 +---> NBALL705,NBALL706,NBALL707,NBALL708,NBALL709,NBALL710,NBALL711,NBALL712 +---> NBALL713,NBALL714,NBALL715,NBALL716,NBALL717,NBALL718,NBALL719,NBALL720 +---> NBALL721,NBALL722,NBALL723,NBALL724,NBALL725,NBALL726,NBALL727,NBALL728 +---> NBALL729,NBALL730 +---> NBALL801,NBALL802,NBALL803,NBALL804,NBALL805,NBALL806 +---> NBALL807,NBALL808,NBALL809,NBALL810,NBALL811,NBALL812,NBALL813,NBALL814 +---> NBALL815,NBALL816,NBALL817,NBALL818,NBALL819,NBALL820,NBALL821,NBALL822 +---> NBALL823,NBALL824,NBALL825,NBALL826,NBALL827,NBALL828,NBALL829,NBALL830 +;;---> NBALL901,NBALL902,NBALL903,NBALL904,NBALL905,NBALL906,NBALL907,NBALL908 +;;---> NBALL909,NBALL910,NBALL911,NBALL912,NBALL913,NBALL914,NBALL915,NBALL916 +;;---> NBALL917,NBALL918,NBALL919,NBALL920,NBALL921,NBALL922,NBALL923,NBALL924 +;;---> NBALL925,NBALL926,NBALL927,NBALL928,NBALL929,NBALL930,NBALL1001 +;;---> NBALL1002,NBALL1003,NBALL1004,NBALL1005,NBALL1006,NBALL1007,NBALL1008 +;;---> NBALL1009,NBALL1010,NBALL1011,NBALL1012,NBALL1013,NBALL1014,NBALL1015 +;;---> NBALL1016,NBALL1017,NBALL1018,NBALL1019,NBALL1020,NBALL1021,NBALL1022 +;;---> NBALL1023,NBALL1024,NBALL1025,NBALL1026,NBALL1027,NBALL1028,NBALL1029 +;;---> NBALL1030 +PON> +; +fball.img +PPP> 6 +---> FBALL101 +PPP> 0 +POF> +---> FBALL102,FBALL103,FBALL104,FBALL105,FBALL106,FBALL107,FBALL108 +---> FBALL109,FBALL110,FBALL111,FBALL112,FBALL113,FBALL114,FBALL115,FBALL116 +---> FBALL117,FBALL118,FBALL119,FBALL120,FBALL121,FBALL122,FBALL123,FBALL124 +---> FBALL125,FBALL126,FBALL127,FBALL128,FBALL129,FBALL130,FBALL201,FBALL202 +---> FBALL203,FBALL204,FBALL205,FBALL206,FBALL207,FBALL208,FBALL209,FBALL210 +---> FBALL211,FBALL212,FBALL213,FBALL214,FBALL215,FBALL216,FBALL217,FBALL218 +---> FBALL219,FBALL220,FBALL221,FBALL222,FBALL223,FBALL224,FBALL225,FBALL226 +---> FBALL227,FBALL228,FBALL229,FBALL230,FBALL301,FBALL302,FBALL303,FBALL304 +---> FBALL305,FBALL306,FBALL307,FBALL308,FBALL309,FBALL310,FBALL311,FBALL312 +---> FBALL313,FBALL314,FBALL315,FBALL316,FBALL317,FBALL318,FBALL319,FBALL320 +---> FBALL321,FBALL322,FBALL323,FBALL324,FBALL325,FBALL326,FBALL327,FBALL328 +---> FBALL329,FBALL330,FBALL401,FBALL402,FBALL403,FBALL404,FBALL405,FBALL406 +---> FBALL407,FBALL408,FBALL409,FBALL410,FBALL411,FBALL412,FBALL413,FBALL414 +---> FBALL415,FBALL416,FBALL417,FBALL418,FBALL419,FBALL420,FBALL421,FBALL422 +---> FBALL423,FBALL424,FBALL425,FBALL426,FBALL427,FBALL428,FBALL429,FBALL430 +---> FBALL501,FBALL502,FBALL503,FBALL504,FBALL505,FBALL506,FBALL507,FBALL508 +---> FBALL509,FBALL510,FBALL511,FBALL512,FBALL513,FBALL514,FBALL515,FBALL516 +---> FBALL517,FBALL518,FBALL519,FBALL520,FBALL521,FBALL522,FBALL523,FBALL524 +---> FBALL525,FBALL526,FBALL527,FBALL528,FBALL529,FBALL530,FBALL601,FBALL602 +---> FBALL603,FBALL604,FBALL605,FBALL606,FBALL607,FBALL608,FBALL609,FBALL610 +---> FBALL611,FBALL612,FBALL613,FBALL614,FBALL615,FBALL616,FBALL617,FBALL618 +---> FBALL619,FBALL620,FBALL621,FBALL622,FBALL623,FBALL624,FBALL625,FBALL626 +---> FBALL627,FBALL628,FBALL629,FBALL630,FBALL701,FBALL702,FBALL703,FBALL704 +---> FBALL705,FBALL706,FBALL707,FBALL708,FBALL709,FBALL710,FBALL711,FBALL712 +---> FBALL713,FBALL714,FBALL715,FBALL716,FBALL717,FBALL718,FBALL719,FBALL720 +---> FBALL721,FBALL722,FBALL723,FBALL724,FBALL725,FBALL726,FBALL727,FBALL728 +---> FBALL729,FBALL730 +---> FBALL801,FBALL802,FBALL803,FBALL804,FBALL805,FBALL806 +---> FBALL807,FBALL808,FBALL809,FBALL810,FBALL811,FBALL812,FBALL813,FBALL814 +---> FBALL815,FBALL816,FBALL817,FBALL818,FBALL819,FBALL820,FBALL821,FBALL822 +---> FBALL823,FBALL824,FBALL825,FBALL826,FBALL827,FBALL828,FBALL829,FBALL830 +;;---> FBALL901,FBALL902,FBALL903,FBALL904,FBALL905,FBALL906,FBALL907,FBALL908 +;;---> FBALL909,FBALL910,FBALL911,FBALL912,FBALL913,FBALL914,FBALL915,FBALL916 +;;---> FBALL917,FBALL918,FBALL919,FBALL920,FBALL921,FBALL922,FBALL923,FBALL924 +;;---> FBALL925,FBALL926,FBALL927,FBALL928,FBALL929,FBALL930,FBALL1001 +;;---> FBALL1002,FBALL1003,FBALL1004,FBALL1005,FBALL1006,FBALL1007,FBALL1008 +;;---> FBALL1009,FBALL1010,FBALL1011,FBALL1012,FBALL1013,FBALL1014,FBALL1015 +;;---> FBALL1016,FBALL1017,FBALL1018,FBALL1019,FBALL1020,FBALL1021,FBALL1022 +;;---> FBALL1023,FBALL1024,FBALL1025,FBALL1026,FBALL1027,FBALL1028,FBALL1029 +;;---> FBALL1030 +PON> +; +aball.img +PPP> 6 +---> ABALL101 +PPP> 0 +POF> +---> ABALL102,ABALL103,ABALL104,ABALL105,ABALL106,ABALL107,ABALL108 +---> ABALL109,ABALL110,ABALL111,ABALL112,ABALL113,ABALL114,ABALL115,ABALL116 +---> ABALL117,ABALL118,ABALL119,ABALL120,ABALL121,ABALL122,ABALL123,ABALL124 +---> ABALL125,ABALL126,ABALL127,ABALL128,ABALL129,ABALL130,ABALL201,ABALL202 +---> ABALL203,ABALL204,ABALL205,ABALL206,ABALL207,ABALL208,ABALL209,ABALL210 +---> ABALL211,ABALL212,ABALL213,ABALL214,ABALL215,ABALL216,ABALL217,ABALL218 +---> ABALL219,ABALL220,ABALL221,ABALL222,ABALL223,ABALL224,ABALL225,ABALL226 +---> ABALL227,ABALL228,ABALL229,ABALL230,ABALL301,ABALL302,ABALL303,ABALL304 +---> ABALL305,ABALL306,ABALL307,ABALL308,ABALL309,ABALL310,ABALL311,ABALL312 +---> ABALL313,ABALL314,ABALL315,ABALL316,ABALL317,ABALL318,ABALL319,ABALL320 +---> ABALL321,ABALL322,ABALL323,ABALL324,ABALL325,ABALL326,ABALL327,ABALL328 +---> ABALL329,ABALL330,ABALL401,ABALL402,ABALL403,ABALL404,ABALL405,ABALL406 +---> ABALL407,ABALL408,ABALL409,ABALL410,ABALL411,ABALL412,ABALL413,ABALL414 +---> ABALL415,ABALL416,ABALL417,ABALL418,ABALL419,ABALL420,ABALL421,ABALL422 +---> ABALL423,ABALL424,ABALL425,ABALL426,ABALL427,ABALL428,ABALL429,ABALL430 +---> ABALL501,ABALL502,ABALL503,ABALL504,ABALL505,ABALL506,ABALL507,ABALL508 +---> ABALL509,ABALL510,ABALL511,ABALL512,ABALL513,ABALL514,ABALL515,ABALL516 +---> ABALL517,ABALL518,ABALL519,ABALL520,ABALL521,ABALL522,ABALL523,ABALL524 +---> ABALL525,ABALL526,ABALL527,ABALL528,ABALL529,ABALL530,ABALL601,ABALL602 +---> ABALL603,ABALL604,ABALL605,ABALL606,ABALL607,ABALL608,ABALL609,ABALL610 +---> ABALL611,ABALL612,ABALL613,ABALL614,ABALL615,ABALL616,ABALL617,ABALL618 +---> ABALL619,ABALL620,ABALL621,ABALL622,ABALL623,ABALL624,ABALL625,ABALL626 +---> ABALL627,ABALL628,ABALL629,ABALL630,ABALL701,ABALL702,ABALL703,ABALL704 +---> ABALL705,ABALL706,ABALL707,ABALL708,ABALL709,ABALL710,ABALL711,ABALL712 +---> ABALL713,ABALL714,ABALL715,ABALL716,ABALL717,ABALL718,ABALL719,ABALL720 +---> ABALL721,ABALL722,ABALL723,ABALL724,ABALL725,ABALL726,ABALL727,ABALL728 +---> ABALL729,ABALL730 +---> ABALL801,ABALL802,ABALL803,ABALL804,ABALL805,ABALL806 +---> ABALL807,ABALL808,ABALL809,ABALL810,ABALL811,ABALL812,ABALL813,ABALL814 +---> ABALL815,ABALL816,ABALL817,ABALL818,ABALL819,ABALL820,ABALL821,ABALL822 +---> ABALL823,ABALL824,ABALL825,ABALL826,ABALL827,ABALL828,ABALL829,ABALL830 +PON> +; +ASM> LOGOS.TBL +; +newlogos.img +ZON> +---> BALLBAK1,T_HAWKS,T_CELTS,T_HORS,T_BULLS,T_CAVS,T_MAVS,T_NUGS,T_PISS +---> T_PISS_N,T_WARS,T_ROCKS,T_PACER,T_LAKS,T_CLIPS,T_HEAT,T_BUCKS +---> T_TWOLV,T_TWOLV_N,T_NETS,T_KNIKS,T_MAGIC,T_76RS,T_SUNS,T_BLAZ,T_KINGS +---> T_SPURS,T_SONICS,T_RAPT,T_JAZZ,T_JAZZ_N,T_GRIZZ,T_BULTS +ZOF> +; +dcslogo.img +---> DCSRUM1 +;;---> DCSRUM2,DCSRUM3,DCSRUM4,DCSRUM5,DCSRUM6 +; +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +; +GAMEGRAF.IMG +---> NSHOTCLK,MUGPLAT +POF> +---> TUBEPIEC +PON> +TVSCORE.IMG +CON> +---> colon,cpu,freeply,credit +---> bbal,bbal_w +COF> +---> font60,font61,font62,font63,font64,font65,font66,font67,font68,font69 +---> font60w,font60r,font60g,font6?,font90r +---> S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4,S_LED_5,S_LED_6,S_LED_7,S_LED_8 +---> S_LED_9,S_LED_MAX +;---> BigLED_0,BigLED_1,BigLED_2,BigLED_3,BigLED_4,BigLED_5 +;---> BigLED_6,BigLED_7,BigLED_8,BigLED_9 +ASM> CREDIT.TBL +---> CRED_00 +GLO> XXXHD.GLO +---> CRED_01,CRED_02,CRED_03,CRED_04 +---> CRED_05,CRED_06,CRED_07,CRED_08,CRED_09 +---> CRED_10,CRED_11,CRED_12,CRED_13,CRED_14 +---> CRED_15,CRED_16,CRED_17,CRED_18,CRED_19 +---> CRED_20,CRED_21,CRED_22,CRED_23,CRED_24 +---> CRED_25,CRED_26,CRED_27,CRED_28,CRED_29 +---> CRED_30,CRED_31,CRED_32,CRED_33,CRED_34 +---> CRED_35,CRED_36,CRED_37,CRED_38,CRED_39 +---> CRED_40,CRED_41,CRED_42,CRED_43,CRED_44 +---> CRED_45,CRED_46,CRED_47,CRED_48,CRED_49 +---> CRED_50,CRED_51,CRED_52,CRED_53,CRED_54 +---> CRED_55,CRED_56,CRED_57,CRED_58,CRED_59 +---> CRED_60,CRED_61,CRED_62,CRED_63,CRED_64 +---> CRED_65,CRED_66,CRED_67,CRED_68,CRED_69 +---> CRED_70,CRED_71,CRED_72,CRED_73,CRED_74 +---> CRED_75,CRED_76,CRED_77,CRED_78,CRED_79 +---> CRED_80,CRED_81,CRED_82,CRED_83,CRED_84 +---> CRED_85,CRED_86,CRED_87,CRED_88,CRED_89 +---> CRED_90,CRED_91,CRED_92,CRED_93,CRED_94 +---> CRED_95,CRED_96,CRED_97,CRED_98,CRED_99 +IHDR SAG:L +PPP> 6 +;---> TURBO_60,TURBO_59,TURBO_58,TURBO_57,TURBO_56 +;---> TURBO_55,TURBO_54,TURBO_53,TURBO_52,TURBO_51 +---> TURBO_52,TURBO_51 +---> TURBO_50,TURBO_49,TURBO_48,TURBO_47,TURBO_46 +---> TURBO_45,TURBO_44,TURBO_43,TURBO_42,TURBO_41 +---> TURBO_40,TURBO_39,TURBO_38,TURBO_37,TURBO_36 +---> TURBO_35,TURBO_34,TURBO_33,TURBO_32,TURBO_31 +---> TURBO_30,TURBO_29,TURBO_28,TURBO_27,TURBO_26 +---> TURBO_25,TURBO_24,TURBO_23,TURBO_22,TURBO_21 +---> TURBO_20,TURBO_19,TURBO_18,TURBO_17,TURBO_16 +---> TURBO_15,TURBO_14,TURBO_13,TURBO_12,TURBO_11 +---> TURBO_10,TURBO_09,TURBO_08,TURBO_07,TURBO_06 +---> TURBO_05,TURBO_04,TURBO_03,TURBO_02,TURBO_01 +; +;---> TEAMZN30,TEAMZN29,TEAMZN28,TEAMZN27,TEAMZN26 +;---> TEAMZN25,TEAMZN24,TEAMZN23,TEAMZN22,TEAMZN21 +;---> TEAMZN20,TEAMZN19,TEAMZN18,TEAMZN17,TEAMZN16 +;---> TEAMZN15,TEAMZN14,TEAMZN13,TEAMZN12,TEAMZN11 +;---> TEAMZN10,TEAMZN09,TEAMZN08,TEAMZN07,TEAMZN06 +;---> TEAMZN05,TEAMZN04,TEAMZN03,TEAMZN02,TEAMZN01 +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +CON> +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +---> TURBO_01b,TURBO_01y,TURBO_01g,TURBO_01r +;---> TEAMZN_01r,TEAMZN_01b +PPP> 0 +---> S_LED_0r +; +ASM> HOOP.TBL +GLO> HOOP.GLO +; +hoop.img +CON> +PON> +ZON> +PPP> 8 +;Remove ZON to speed up(?) DMA transfer +---> hoopbot +ZOF> +PPP> 0 +---> hooptop +---> back1,back2,back3,back4,back5,back6,back7,back8,back9,back10 +---> RIM0_B_00,RIM0_F_00 +---> RIM1_F_01,RIM1_F_02,RIM1_F_03,RIM1_F_04,RIM1_F_05,RIM1_F_06 +---> RIM1_F_07,RIM1_F_08,RIM1_F_09,RIM1_F_10,RIM1_F_11 +---> RIM1_B_01,RIM1_B_02,RIM1_B_03,RIM1_B_06,RIM1_B_07,RIM1_B_08 +---> RIM1_B_09,RIM1_B_10,RIM1_B_11 +---> RIM2_F_01,RIM2_F_02,RIM2_F_03,RIM2_F_04,RIM2_F_05,RIM2_F_06 +---> RIM2_F_08 +---> RIM2_B_01,RIM2_B_02,RIM2_B_03,RIM2_B_05,RIM2_B_06,RIM2_B_08 +---> RIM3_F_01,RIM3_F_02,RIM3_F_03,RIM3_F_04,RIM3_F_05,RIM3_F_06 +---> RIM3_F_07,RIM3_F_08,RIM3_F_09,RIM3_F_11 +---> RIM3_B_01,RIM3_B_02,RIM3_B_03,RIM3_B_04,RIM3_B_05,RIM3_B_06 +---> RIM3_B_07,RIM3_B_08,RIM3_B_09,RIM3_B_11 +---> RIM4_F_01,RIM4_F_02,RIM5_F_01,RIM5_F_03 +---> RIM4_B_01,RIM4_B_02,RIM5_B_01,RIM5_B_03 +---> RIM7_F_01,RIM7_F_02,RIM7_F_03,RIM7_F_04,RIM7_F_05,RIM7_F_06 +---> RIM7_F_07,RIM7_F_08,RIM7_F_09,RIM7_F_11 +---> RIM7_B_01,RIM7_B_02,RIM7_B_03,RIM7_B_04,RIM7_B_05,RIM7_B_06 +---> RIM7_B_07,RIM7_B_08,RIM7_B_09,RIM7_B_11 +---> RIM8_F_01,RIM8_F_02,RIM8_F_03,RIM8_F_04,RIM8_F_05,RIM8_F_06 +---> RIM8_B_01,RIM8_B_02,RIM8_B_03,RIM8_B_04,RIM8_B_05,RIM8_B_06 +---> CHAN1F_01,CHAN1F_02,CHAN1F_03,CHAN1F_04,CHAN1F_05,CHAN1F_06,CHAN1F_07 +---> CHAN1F_08,CHAN1F_09,CHAN1F_10 +---> CHAN1B_01,CHAN1B_02,CHAN1B_03,CHAN1B_04,CHAN1B_05,CHAN1B_06,CHAN1B_07 +---> CHAN1B_08,CHAN1B_09,CHAN1B_10 +---> CHAN2F_01,CHAN2F_02,CHAN2F_03,CHAN2F_04,CHAN2F_05,CHAN2F_06,CHAN2F_07 +---> CHAN2B_01,CHAN2B_02,CHAN2B_03,CHAN2B_04,CHAN2B_05,CHAN2B_06,CHAN2B_07 +---> CHAN3F_01,CHAN3F_02,CHAN3F_03,CHAN3F_04,CHAN3F_05,CHAN3F_06,CHAN3F_07 +---> CHAN3F_08,CHAN3F_09,CHAN3F_10 +---> CHAN3B_01,CHAN3B_02,CHAN3B_03,CHAN3B_04,CHAN3B_05,CHAN3B_06,CHAN3B_07 +---> CHAN3B_08,CHAN3B_09,CHAN3B_10 +---> FLAME_F_01,FLAME_F_02,FLAME_F_03,FLAME_F_04,FLAME_F_05,FLAME_F_06 +---> FLAME_F_07,FLAME_F_08,FLAME_F_09,FLAME_F_10,FLAME_F_11,FLAME_F_12 +---> FLAME_F_13 +---> FLAME2F_01,FLAME2F_02,FLAME2F_03,FLAME2F_04,FLAME2F_05,FLAME2F_06 +---> FLAME2F_07 +---> FLAME2F_13 +;,FLAME2F_08,FLAME2F_09,FLAME2F_10,FLAME2F_11,FLAME2F_12 +;---> FLAME2B_01,FLAME2B_02,FLAME2B_03,FLAME2B_04,FLAME2B_05,FLAME2B_06 +;---> FLAME2B_07 +---> FLAME2B_09,FLAME2B_10,FLAME2B_11,FLAME2B_12,FLAME2B_08 +;---> FLAME2B_13 +; +nbbd8.img +PPP> 8 +ZON> +---> nback10,nback9,nback8,nback7,nback6,nback5,nback4,nback3,nback2,nback1 +---> nhoopbot +ZOF> +PPP> 0 +; +ASM> COURTFLR.TBL +; +;Load court and bench pals +; +crtflr.img +---> CRTPC1,CRTPC2,CRTPC3,CRTPC4,CRTPC5,CRTPC6,CRTPC7,CRTPC8,CRTPC9,CRTPC10 +---> CRTPC11,CRTPC12,CRTPC13,CRTPC14,CRTPC15,CRTPC16,CRTPC17,CRTPC18,CRTPC19,CRTPC20 +---> CRTPC21,CRTPC22,CRTPC23,CRTPC24,CRTPC25,CRTPC26,CRTPC27,CRTPC28,CRTPC29 +crwdflr.img +---> bk_flr1,bk_flr2,bk_flr3,bk_flr4,bk_flr5,bk_flr6,bk_flr7,bk_flr8,bk_flr9,bk_flr10 +---> bk_flr11,bk_flr12,bk_flr13,bk_flr14,bk_flr15,bk_flr16,bk_flr17,bk_flr18,bk_flr19,bk_flr20 +---> bk_flr21,bk_flr22,bk_flr23,bk_flr24,bk_flr25,bk_flr26,bk_flr27,bk_flr28,bk_flr29 +; +ASM> HANGFONT.TBL +; +hangfont.img +---> HANGF_A +---> HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G,HANGF_H,HANGF_I,HANGF_J +---> HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O,HANGF_P,HANGF_Q,HANGF_R,HANGF_S +---> HANGF_T,HANGF_U,HANGF_V,HANGF_W,HANGF_X,HANGF_Y,HANGF_Z,HANGF_0,HANGF_1 +---> HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7,HANGF_8,HANGF_9 +;---> HANGF_DOL,HANGF_PCT,HANGF_NUM,HANGF_AND,HANGF_STR,HANGF_PRL +;---> HANGF_PRR,HANGF_PLS,HANGF_MIN,HANGF_QUE,HANGF_PER,HANGF_SLS,HANGF_COL +;---> HANGF_SEM,HANGF_COM,HANGF_EQU +---> HANGF_EXC,HANGF_APO +; +ASM> BASTCYC.TBL +GLO> BASTCYC.GLO +; +bastcyc.img +;---> B10CYC_A,B10CYC_B,B10CYC_C,B10CYC_D,B10CYC_E,B10CYC_F,B10CYC_G,B10CYC_H +;---> B10CYC_I,B10CYC_J,B10CYC_K,B10CYC_L,B10CYC_M,B10CYC_N,B10CYC_O,B10CYC_P +;---> B10CYC_Q,B10CYC_R,B10CYC_S,B10CYC_T,B10CYC_U,B10CYC_V,B10CYC_W,B10CYC_X +;---> B10CYC_Y,B10CYC_Z,B10CYC_0,B10CYC_1,B10CYC_2,B10CYC_3,B10CYC_4,B10CYC_5 +;---> B10CYC_6,B10CYC_7,B10CYC_8,B10CYC_9,B10CYC_EXC,B10CYC_NUM,B10CYC_DOL +;---> B10CYC_PCT,B10CYC_AND,B10CYC_PRL,B10CYC_PRR,B10CYC_DSH,B10CYC_PLS +;---> B10CYC_SLS,B10CYC_COM,B10CYC_APO,B10CYC_PER,B10CYC_SEM,B10CYC_COL +;---> B10CYC_QUE +---> B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F +---> B8TCYC_G,B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N +---> B8TCYC_O,B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V +---> B8TCYC_W,B8TCYC_X,B8TCYC_Y,B8TCYC_Z,B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3 +---> B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7,B8TCYC_8,B8TCYC_9,B8TCYC_COL +---> B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_PRL,B8TCYC_PRR +---> B8TCYC_PER,B8TCYC_COM,B8TCYC_APO,B8TCYC_PLS,B8TCYC_QUE,B8TCYC_SEM +---> B8TCYC_SLS,B8TCYC_EXC +---> B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E +---> B7TCYC_F,B7TCYC_G,B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M +---> B7TCYC_N,B7TCYC_O,B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U +---> B7TCYC_V,B7TCYC_W,B7TCYC_X,B7TCYC_Y,B7TCYC_Z,B7TCYC_0,B7TCYC_1,B7TCYC_2 +---> B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7,B7TCYC_8,B7TCYC_9 +---> B7TCYC_EXC,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_AND,B7TCYC_PCT,B7TCYC_PRL +---> B7TCYC_PRR,B7TCYC_DSH,B7TCYC_PLS,B7TCYC_COM,B7TCYC_PER,B7TCYC_QUE +---> B7TCYC_APO,B7TCYC_COL,B7TCYC_SEM,B7TCYC_SLS +; +ASM> PLYRNUB.TBL +; +plyrnubs.img +---> PLYRNUB1,PLYRNUB2,PLYRNUB3,PLYRNUB4 +cities2.img +---> CUST6,CUST7,CUST8,CUST9,CUST10 +; +ASM> PRIZES.TBL +; +prizes.img +ZON> +---> prize1,prize2 +---> prize3,prizeG +ZOF> +; +ASM> POWERTXT.TBL +GLO> POWERTXT.GLO +; +bast8.img +---> TOURMODE2,NOCPU2,SECRETS2 +;---> NOPUSH2 +---> ASISTOFF2,SHOTPERC2,BABYPLAY2 +;---> WIN4FREE2,WINSTAY2,WNRSSTAY2 +; +brush20f.img +POF> +PPP> 5 +---> BRSH20APO +PPP> 0 +PON> +; +ASM> OUTDOOR.TBL +GLO> OUTDOOR.GLO +; +FRM> OUTDOOR +; +outdoor.img +ZON> +---> sidebot,sidetop +---> lamp1,lamp2,hang_logo,moon +ZOF> +---> BKg1,BKg2 +---> bkwall +;---> fence +---> city1,city2,city3 +---> outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 +---> outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +---> PAPER1,PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9,LGSHEET1 +---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7,LGSHEET8,LGSHEET9 +---> SMSHEET1,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5,SMSHEET6,SMSHEET7,SMSHEET8 +---> SMSHEET9,LEAF1,LEAF2,LEAF3,LEAF4,LEAF5,LEAF6,LEAF7,LEAF8 +---> STORM01 +;---> STORM02,STORM03,STORM04,STORM05,STORM06,STORM07,STORM08,STORM09,STORM10 +;---> STORM11,STORM12 +; +GLO> BGNDTBL.GLO +; +BBB> HANGTIME +BBB> VSSCR +BBB> TEAMSTAT + diff --git a/BACKUP/XART100/BB8.LOD b/BACKUP/XART100/BB8.LOD new file mode 100644 index 0000000..3a22e0d --- /dev/null +++ b/BACKUP/XART100/BB8.LOD @@ -0,0 +1,304 @@ +***> 4e66600,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRRSEQ.TBL +; +nba_run1.img +---> w1defst1,w1defst2,w1defst3,w1defst4,w2defst1,w2defst2,w2defst3,w2defst4 +---> w3defst1,w3defst2,w3defst3,w3defst4,w4defst1,w4defst2,w4defst3,w4defst4 +---> w5defst1,w5defst2,w5defst3,w5defst4 +---> w1run1,w1run2,w1run3 +---> w1run4,w1run5,w1run6,w1run7,w1run8,w1run9,w1run10,w1run11,w2run1,w2run2 +---> w2run3,w2run4,w2run5,w2run6,w2run7,w2run8,w2run9,w2run10,w2run11,w3run1 +---> w3run2,w3run3,w3run4,w3run5,w3run6,w3run7,w3run8,w3run9,w3run10,w3run11 +---> w4run1,w4run2,w4run3,w4run4,w4run5,w4run6,w4run7,w4run8,w4run9,w4run10 +---> w4run11,w5run1,w5run2,w5run3,w5run4,w5run5,w5run6,w5run7,w5run8,w5run9 +---> w5run10,w5run11 +;,w1spr1,w1spr2,w1spr3,w1spr4,w1spr5,w1spr6,w1spr7,w1spr8 +;---> w1spr9,w1spr10,w1spr11,w2spr1,w2spr2,w2spr3,w2spr4,w2spr5,w2spr6,w2spr7 +;---> w2spr8,w2spr9,w2spr10,w2spr11 +---> w3spr1,w3spr2,w3spr3,w3spr4 +---> w3spr5,w3spr6,w3spr7,w3spr8,w3spr9,w3spr10,w3spr11,w4spr1 +---> w4spr2,w4spr3,w4spr4,w4spr5,w4spr6,w4spr7,w4spr8,w4spr9,w4spr10,w4spr11 +;---> w5spr1,w5spr2,w5spr3,w5spr4,w5spr5,w5spr6,w5spr7,w5spr8,w5spr9,w5spr10 +;---> w5spr11,w1dspr1,w1dspr2,w1dspr3,w1dspr4,w1dspr5,w1dspr6,w1dspr7,w1dspr8 +;---> w1dspr9,w1dspr10,w1dspr11,w2dspr1,w2dspr2,w2dspr3,w2dspr4,w2dspr5 +;---> w2dspr6,w2dspr7,w2dspr8,w2dspr9,w2dspr10,w2dspr11 +---> w3dspr1,w3dspr2 +---> w3dspr3,w3dspr4,w3dspr5,w3dspr6,w3dspr7,w3dspr8,w3dspr9,w3dspr10 +---> w3dspr11,w4dspr1,w4dspr2,w4dspr3,w4dspr4,w4dspr5,w4dspr6,w4dspr7 +---> w4dspr8,w4dspr9,w4dspr10,w4dspr11 +;,w5dspr1,w5dspr2,w5dspr3,w5dspr4 +;---> w5dspr5,w5dspr6,w5dspr7,w5dspr8,w5dspr9,w5dspr10,w5dspr11 +---> w1drun1 +---> w1drun2,w1drun3,w1drun4,w1drun5,w1drun6,w1drun7,w1drun8,w1drun9 +---> w1drun10,w1drun11,w2drun1,w2drun2,w2drun3,w2drun4,w2drun5,w2drun6 +---> w2drun7,w2drun8,w2drun9,w2drun10,w2drun11,w3drun1,w3drun2,w3drun3 +---> w3drun4,w3drun5,w3drun6,w3drun7,w3drun8,w3drun9,w3drun10,w3drun11 +---> w4drun1,w4drun2,w4drun3,w4drun4,w4drun5,w4drun6,w4drun7,w4drun8,w4drun9 +---> w4drun10,w4drun11,w5drun1,w5drun2,w5drun3,w5drun4,w5drun5,w5drun6 +---> w5drun7,w5drun8,w5drun9,w5drun10,w5drun11 +;,w5defwd1,w5defwd2,w5defwd3 +;---> w5defwd4,w5defwd5,w5defwd6,w5defwd7,w5defwd8,w5defwd9,w5defwd10 +;---> w4defwd1,w4defwd2,w4defwd3,w4defwd4,w4defwd5,w4defwd6,w4defwd7,w4defwd8 +;---> w4defwd9,w4defwd10,w4defwd11,w3defwd1,w3defwd2,w3defwd3,w3defwd4 +;---> w3defwd5,w3defwd6,w3defwd7,w3defwd8,w3defwd9,w3defwd10,w2defwd1 +;---> w2defwd2,w2defwd3,w2defwd4,w2defwd5,w2defwd6,w2defwd7,w2defwd8,w2defwd9 +;---> w2defwd10,w1defwd1,w1defwd2,w1defwd3,w1defwd4,w1defwd5,w1defwd6 +;---> w1defwd7,w1defwd8,w1defwd9,w1defwd10 +; +nba_run2.img +---> w1dfcr1,w1dfcr2,w1dfcr3 +---> w1dfcr4,w1dfcr5,w1dfcr6,w2dfcr1 +---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +PPP> 6 +ASM> PLYRHD6.TBL +colhds1.img +GLO> PLYRHD6.GLO +---> MARBRY00,MARBRY01 +GLO> XXXHD.GLO +---> MARBRY02,MARBRY03,MARBRY04 +---> MARBRY05,MARBRY06,MARBRY07,MARBRY08,MARBRY09,MARBRY10,MARBRY11,MARBRY12 +---> MARBRY13,MARBRY14,MARBRY15,MARBRY16 +GLO> PLYRHD6.GLO +---> ALLEN00,ALLEN01 +GLO> XXXHD.GLO +---> ALLEN02,ALLEN03,ALLEN04,ALLEN05,ALLEN06,ALLEN07,ALLEN08 +---> ALLEN09,ALLEN10,ALLEN11,ALLEN12 +---> ALLEN13,ALLEN14,ALLEN15,ALLEN16 +GLO> PLYRHD6.GLO +---> CAMB00,CAMB01 +GLO> XXXHD.GLO +---> CAMB02,CAMB03,CAMB04,CAMB05,CAMB06,CAMB07,CAMB08 +---> CAMB09,CAMB10,CAMB11,CAMB12,CAMB13,CAMB14 +---> CAMB15,CAMB16 +GLO> PLYRHD6.GLO +---> DAMP00,DAMP01 +GLO> XXXHD.GLO +---> DAMP02,DAMP03,DAMP04,DAMP05,DAMP06,DAMP07 +---> DAMP08,DAMP09,DAMP10,DAMP11,DAMP12,DAMP13,DAMP14,DAMP15,DAMP16 +GLO> PLYRHD6.GLO +---> DUN00,DUN01 +GLO> XXXHD.GLO +---> DUN02,DUN03,DUN04,DUN05,DUN06,DUN07,DUN08,DUN09,DUN10,DUN11,DUN12 +---> DUN13,DUN14,DUN15,DUN16 +GLO> PLYRHD6.GLO +---> HAM00,HAM01 +GLO> XXXHD.GLO +---> HAM02,HAM03,HAM04,HAM05,HAM06,HAM07 +---> HAM08,HAM09,HAM10,HAM11,HAM12,HAM13,HAM14,HAM15,HAM16 +GLO> PLYRHD6.GLO +---> HARR00,HARR01 +GLO> XXXHD.GLO +---> HARR02,HARR03,HARR04,HARR05,HARR06,HARR07,HARR08,HARR09,HARR10,HARR11 +---> HARR12,HARR13,HARR14,HARR15,HARR16 +GLO> PLYRHD6.GLO +---> IVER00,IVER01 +GLO> XXXHD.GLO +---> IVER02,IVER03,IVER04,IVER05,IVER06,IVER07,IVER08 +---> IVER09,IVER10,IVER11,IVER12,IVER13,IVER14,IVER15,IVER16 +GLO> PLYRHD6.GLO +---> KIT00,KIT01 +GLO> XXXHD.GLO +---> KIT02,KIT03,KIT04,KIT05,KIT06,KIT07,KIT08 +---> KIT09,KIT10,KIT11,KIT12,KIT13,KIT14,KIT15,KIT16 +GLO> PLYRHD6.GLO +---> MINR00,MINR01 +GLO> XXXHD.GLO +---> MINR02,MINR03,MINR04,MINR05,MINR06,MINR07,MINR08 +---> MINR09,MINR10,MINR11,MINR12 +---> MINR13,MINR14,MINR15,MINR16 +GLO> PLYRHD6.GLO +---> RILY00,RILY01 +GLO> XXXHD.GLO +---> RILY02,RILY03,RILY04,RILY05,RILY06,RILY07,RILY08 +---> RILY09,RILY10,RILY11,RILY12,RILY13,RILY14,RILY15,RILY16 +GLO> PLYRHD6.GLO +---> WAL00,WAL01 +GLO> XXXHD.GLO +---> WAL02,WAL03,WAL04,WAL05,WAL06,WAL07,WAL08,WAL09 +---> WAL10,WAL11,WAL12,WAL13,WAL14,WAL15,WAL16 +hdsmsc6.img +GLO> PLYRHD6.GLO +---> CARY00,CARY01 +GLO> XXXHD.GLO +---> CARY02,CARY03,CARY04,CARY05 +;,CARY06 +;---> CARY07,CARY08,CARY09,CARY10,CARY11,CARY12,CARY13,CARY14,CARY15,CARY16 +---> CARY16 +GLO> PLYRHD6.GLO +---> DAN00,DAN01 +GLO> XXXHD.GLO +---> DAN02,DAN03,DAN04,DAN05,DAN06,DAN07,DAN08,DAN09 +---> DAN10,DAN11,DAN12,DAN13,DAN14,DAN15,DAN16 +GLO> PLYRHD6.GLO +---> EDDIE00,EDDIE01 +GLO> XXXHD.GLO +---> EDDIE02,EDDIE03,EDDIE04,EDDIE05,EDDIE06 +---> EDDIE07,EDDIE08,EDDIE09,EDDIE10,EDDIE11 +---> EDDIE12,EDDIE13,EDDIE14,EDDIE15,EDDIE16 +GLO> PLYRHD6.GLO +---> EUGG00,EUGG01 +GLO> XXXHD.GLO +---> EUGG02,EUGG03,EUGG04,EUGG05,EUGG06,EUGG07,EUGG08 +---> EUGG09,EUGG10,EUGG11,EUGG12,EUGG13 +---> EUGG14,EUGG15,EUGG16 +GLO> PLYRHD6.GLO +---> JEFF00,JEFF01 +GLO> XXXHD.GLO +---> JEFF02,JEFF03,JEFF04,JEFF05,JEFF06 +---> JEFF07,JEFF08,JEFF09,JEFF10,JEFF11,JEFF12,JEFF13,JEFF14,JEFF15,JEFF16 +GLO> PLYRHD6.GLO +---> JAMIE00,JAMIE01 +GLO> XXXHD.GLO +---> JAMIE02,JAMIE03,JAMIE04,JAMIE05 +---> JAMIE06,JAMIE07,JAMIE08,JAMIE09,JAMIE10,JAMIE11,JAMIE12,JAMIE13,JAMIE14 +---> JAMIE15,JAMIE16 +GLO> PLYRHD6.GLO +---> TURMEL00,TURMEL01 +GLO> XXXHD.GLO +---> TURMEL02,TURMEL03,TURMEL04,TURMEL05,TURMEL06,TURMEL07,TURMEL08 +---> TURMEL09,TURMEL10,TURMEL11,TURMEL12,TURMEL13,TURMEL14,TURMEL15,TURMEL16 +; +hdsmsc7.img +GLO> PLYRHD6.GLO +---> BUD00,BUD01 +GLO> XXXHD.GLO +---> BUD02,BUD03,BUD04,BUD05,BUD06 +---> BUD07,BUD08,BUD09,BUD10,BUD11,BUD12,BUD13,BUD14,BUD15,BUD16 +GLO> PLYRHD6.GLO +---> HEY00,HEY01 +GLO> XXXHD.GLO +---> HEY02,HEY03,HEY04,HEY05,HEY06,HEY07,HEY08,HEY09,HEY10,HEY11,HEY12,HEY13 +---> HEY14,HEY15,HEY16 +GLO> PLYRHD6.GLO +---> JEN00,JEN01 +GLO> XXXHD.GLO +---> JEN02,JEN03,JEN04,JEN05,JEN06,JEN07,JEN08 +---> JEN09,JEN10,JEN11,JEN12,JEN13,JEN14,JEN15,JEN16 +GLO> PLYRHD6.GLO +---> JOHNC00,JOHNC01 +GLO> XXXHD.GLO +---> JOHNC02,JOHNC03,JOHNC04,JOHNC05,JOHNC06,JOHNC07,JOHNC08 +---> JOHNC09,JOHNC10,JOHNC11 +---> JOHNC12,JOHNC13,JOHNC14,JOHNC15,JOHNC16 +GLO> PLYRHD6.GLO +---> NIK00,NIK01 +GLO> XXXHD.GLO +---> NIK02,NIK03,NIK04 +---> NIK05 +;,NIK06,NIK07,NIK08,NIK09,NIK10,NIK11,NIK12,NIK13,NIK14,NIK15,NIK16 +---> NIK16 +GLO> PLYRHD6.GLO +---> ROOT00,ROOT01 +GLO> XXXHD.GLO +---> ROOT02,ROOT03,ROOT04,ROOT05,ROOT06,ROOT07,ROOT08,ROOT09 +---> ROOT10,ROOT11,ROOT12,ROOT13,ROOT14,ROOT15,ROOT16 +GLO> PLYRHD6.GLO +---> NEILF00,NEILF01 +GLO> XXXHD.GLO +---> NEILF02,NEILF03,NEILF04 +---> NEILF05 +;---> NEILF06,NEILF07,NEILF08,NEILF09,NEILF10,NEILF11,NEILF12,NEILF13 +;---> NEILF14,NEILF15,NEILF16 +---> NEILF16 +GLO> PLYRHD6.GLO +---> PAT00,PAT01 +GLO> XXXHD.GLO +---> PAT02,PAT03,PAT04,PAT05,PAT06,PAT07 +---> PAT08,PAT09,PAT10,PAT11,PAT12,PAT13,PAT14,PAT15,PAT16 +GLO> PLYRHD6.GLO +---> PERRY00,PERRY01 +GLO> XXXHD.GLO +---> PERRY02,PERRY03,PERRY04,PERRY05,PERRY06,PERRY07,PERRY08,PERRY09,PERRY10 +---> PERRY11,PERRY12,PERRY13,PERRY14,PERRY15,PERRY16 +GLO> PLYRHD6.GLO +---> SAL00,SAL01 +GLO> XXXHD.GLO +---> SAL02,SAL03,SAL04 +---> SAL05,SAL06,SAL07,SAL08,SAL09,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +hdsmsc8.img +GLO> PLYRHD6.GLO +---> BOON00,BOON01 +GLO> XXXHD.GLO +---> BOON02,BOON03,BOON04,BOON05 +---> BOON06,BOON07,BOON08,BOON09,BOON10,BOON11,BOON12,BOON13,BOON14,BOON15 +---> BOON16 +GLO> PLYRHD6.GLO +---> CARLOS00,CARLOS01 +GLO> XXXHD.GLO +---> CARLOS02,CARLOS03,CARLOS04,CARLOS05,CARLOS16 +;---> CARLOS07,CARLOS08,CARLOS09,CARLOS10,CARLOS11,CARLOS12,CARLOS13,CARLOS14 +;---> CARLOS15,CARLOS16 +GLO> PLYRHD6.GLO +---> FIFI00,FIFI01 +GLO> XXXHD.GLO +---> FIFI02,FIFI03,FIFI04,FIFI05,FIFI06 +---> FIFI07,FIFI08,FIFI09,FIFI10,FIFI11,FIFI12,FIFI13,FIFI14,FIFI15,FIFI16 +GLO> PLYRHD6.GLO +---> HEITH00,HEITH01 +GLO> XXXHD.GLO +---> HEITH02,HEITH03,HEITH04,HEITH05,HEITH16 +;---> HEITH06,HEITH07,HEITH08 +;---> HEITH09,HEITH10,HEITH11,HEITH12,HEITH13,HEITH14,HEITH15,HEITH16 +;---> HEITH16 +GLO> PLYRHD6.GLO +---> JASON00,JASON01 +GLO> XXXHD.GLO +---> JASON02,JASON03,JASON04,JASON05,JASON16 +;---> JASON06,JASON07,JASON08,JASON09 +;---> JASON10,JASON11,JASON12,JASON13,JASON14,JASON15,JASON16 +GLO> PLYRHD6.GLO +---> JOSH00,JOSH01 +GLO> XXXHD.GLO +---> JOSH02,JOSH03,JOSH04,JOSH05,JOSH16 +;JOSH06,JOSH07,JOSH08,JOSH09,JOSH10,JOSH11 +;---> JOSH12,JOSH13,JOSH14,JOSH15,JOSH16 +GLO> PLYRHD6.GLO +---> MARTY00,MARTY01 +GLO> XXXHD.GLO +---> MARTY02,MARTY03 +---> MARTY04,MARTY05,MARTY16 +;MARTY06,MARTY07,MARTY08,MARTY09,MARTY10,MARTY11,MARTY12 +;---> MARTY13,MARTY14,MARTY15,MARTY16 +GLO> PLYRHD6.GLO +---> MATT00,MATT01 +GLO> XXXHD.GLO +---> MATT02,MATT03,MATT04 +---> MATT05 +;,MATT06,MATT07,MATT08,MATT09,MATT10,MATT11,MATT12,MATT13,MATT14 +;---> MATT15,MATT16 +---> MATT16 +GLO> PLYRHD6.GLO +---> OURSL00,OURSL01 +GLO> XXXHD.GLO +---> OURSL02,OURSL03,OURSL04,OURSL05,OURSL06 +---> OURSL07,OURSL08,OURSL09,OURSL10,OURSL11,OURSL12,OURSL13,OURSL14,OURSL15 +---> OURSL16 +GLO> PLYRHD6.GLO +---> QUINN00,QUINN01 +GLO> XXXHD.GLO +---> QUINN02,QUINN03,QUINN04,QUINN05,QUINN06,QUINN07 +---> QUINN08,QUINN09,QUINN10,QUINN11,QUINN12,QUINN13,QUINN14,QUINN15,QUINN16 +GLO> PLYRHD6.GLO +---> TOBIAS00,TOBIAS01 +GLO> XXXHD.GLO +---> TOBIAS02,TOBIAS03,TOBIAS04,TOBIAS05,TOBIAS06,TOBIAS07 +---> TOBIAS08,TOBIAS09,TOBIAS10,TOBIAS11,TOBIAS12,TOBIAS13,TOBIAS14,TOBIAS15 +---> TOBIAS16 +PPP> 0 +ASM> MUGSHOT8.TBL +mugsmsc8.img +---> FIFI_MUG,MAT_MUG,JOS_MUG,HEI_MUG,CARL_MUG,MARTY_MUG,BOO_MUG,QUI_MUG +---> JAS_MUG,OUR_MUG,TOB_MUG + diff --git a/BACKUP/XART100/BBMUG.LOD b/BACKUP/XART100/BBMUG.LOD new file mode 100644 index 0000000..66704cb --- /dev/null +++ b/BACKUP/XART100/BBMUG.LOD @@ -0,0 +1,930 @@ +***> 2000000,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD3.TBL +GLO> PLYRHD2.GLO +PPP> 6 +; +hds8.img +XON> +---> WILLIS0,WILLIS1 +GLO> XXXHD.GLO +---> WILLIS2,WILLIS3,WILLIS4,WILLIS5,WILLIS6,WILLIS7,WILLIS8 +---> WILLIS9,WILLIS10,WILLIS11 +---> WILLIS12,WILLIS13,WILLIS14,WILLIS15,WILLIS16 +GLO> PLYRHD2.GLO +---> BROWN0,BROWN1 +GLO> XXXHD.GLO +---> BROWN2,BROWN3,BROWN4,BROWN5,BROWN6,BROWN7,BROWN8,BROWN9,BROWN10 +---> BROWN11,BROWN12,BROWN13,BROWN14,BROWN15,BROWN16 +GLO> PLYRHD2.GLO +---> MOURN0,MOURN1 +GLO> XXXHD.GLO +---> MOURN2,MOURN3,MOURN4,MOURN5 +---> MOURN6,MOURN7,MOURN8,MOURN9,MOURN10,MOURN11,MOURN12,MOURN13,MOURN14 +---> MOURN15,MOURN16 +GLO> PLYRHD2.GLO +---> KUKOC0,KUKOC1 +GLO> XXXHD.GLO +---> KUKOC2,KUKOC3,KUKOC4,KUKOC5,KUKOC6,KUKOC7,KUKOC8,KUKOC9,KUKOC10 +---> KUKOC11,KUKOC12,KUKOC13,KUKOC14,KUKOC15,KUKOC16 +GLO> PLYRHD2.GLO +---> JACK0,JACK1 +GLO> XXXHD.GLO +---> JACK2,JACK3,JACK4,JACK5,JACK6 +---> JACK7,JACK8,JACK9,JACK10,JACK11,JACK12,JACK13,JACK14,JACK15,JACK16 +GLO> PLYRHD2.GLO +---> MASH0,MASH1 +GLO> XXXHD.GLO +---> MASH2,MASH3,MASH4,MASH5,MASH6,MASH7,MASH8,MASH9,MASH10,MASH11 +---> MASH12,MASH13,MASH14,MASH15,MASH16 +HDS9.IMG +GLO> PLYRHD2.GLO +---> DUMARS0,DUMARS1 +GLO> XXXHD.GLO +---> DUMARS2,DUMARS3,DUMARS4,DUMARS5,DUMARS6,DUMARS7,DUMARS8 +---> DUMARS9,DUMARS10,DUMARS11,DUMARS12,DUMARS13,DUMARS14,DUMARS15,DUMARS16 +GLO> PLYRHD2.GLO +---> RODMAN0,RODMAN1 +GLO> XXXHD.GLO +---> RODMAN2,RODMAN3,RODMAN4,RODMAN5,RODMAN6,RODMAN7,RODMAN8 +---> RODMAN9,RODMAN10,RODMAN11,RODMAN12,RODMAN13,RODMAN14,RODMAN15,RODMAN16 +---> RODCLR1,RODCLR2,RODCLR3 +---> RODCLR4,RODCLR5,RODCLR6,RODCLR7,RODCLR8 +GLO> PLYRHD2.GLO +---> WEBBER0,WEBBER1 +GLO> XXXHD.GLO +---> WEBBER2,WEBBER3,WEBBER4,WEBBER5,WEBBER6,WEBBER7,WEBBER8 +---> WEBBER9,WEBBER10,WEBBER11,WEBBER12,WEBBER13,WEBBER14,WEBBER15,WEBBER16 +GLO> PLYRHD2.GLO +---> HORRY0,HORRY1 +GLO> XXXHD.GLO +---> HORRY2,HORRY3,HORRY4,HORRY5,HORRY6,HORRY7 +---> HORRY8,HORRY9,HORRY10,HORRY11,HORRY12,HORRY13,HORRY14,HORRY15,HORRY16 +GLO> PLYRHD2.GLO +---> SMITS0,SMITS1 +GLO> XXXHD.GLO +---> SMITS2,SMITS3,SMITS4,SMITS5,SMITS6,SMITS7,SMITS8,SMITS9,SMITS10 +---> SMITS11,SMITS12,SMITS13,SMITS14,SMITS15,SMITS16 +HDS10.IMG +GLO> PLYRHD2.GLO +---> CAMP0,CAMP1 +GLO> XXXHD.GLO +---> CAMP2,CAMP3,CAMP4,CAMP5,CAMP6,CAMP7,CAMP8,CAMP9,CAMP10,CAMP11 +---> CAMP12,CAMP13,CAMP14,CAMP15,CAMP16 +GLO> PLYRHD2.GLO +---> BAKER0,BAKER1 +GLO> XXXHD.GLO +---> BAKER2,BAKER3,BAKER4,BAKER5,BAKER6,BAKER7,BAKER8,BAKER9,BAKER10 +---> BAKER11,BAKER12,BAKER13,BAKER14,BAKER15,BAKER16 +GLO> PLYRHD2.GLO +---> RIDER0,RIDER1 +GLO> XXXHD.GLO +---> RIDER2,RIDER3,RIDER4,RIDER5,RIDER6,RIDER7,RIDER8,RIDER9,RIDER10 +---> RIDER11,RIDER12,RIDER13,RIDER14,RIDER15,RIDER16 +GLO> PLYRHD2.GLO +---> K_AND0,K_AND1 +GLO> XXXHD.GLO +---> K_AND2,K_AND3 +---> K_AND4,K_AND5,K_AND6,K_AND7,K_AND8,K_AND9,K_AND10,K_AND11,K_AND12 +---> K_AND13,K_AND14,K_AND15,K_AND16 +GLO> PLYRHD2.GLO +---> MORRIS0,MORRIS1 +GLO> XXXHD.GLO +---> MORRIS2,MORRIS3,MORRIS4 +---> MORRIS5,MORRIS6,MORRIS7,MORRIS8,MORRIS9,MORRIS10,MORRIS11,MORRIS12 +---> MORRIS13,MORRIS14,MORRIS15,MORRIS16 +GLO> PLYRHD2.GLO +---> MASON0,MASON1 +GLO> XXXHD.GLO +---> MASON2,MASON3,MASON4,MASON5 +---> MASON6,MASON7,MASON8,MASON9,MASON10,MASON11,MASON12,MASON13,MASON14 +---> MASON15,MASON16 +GLO> PLYRHD2.GLO +---> STARKS0,STARKS1 +GLO> XXXHD.GLO +---> STARKS2,STARKS3,STARKS4,STARKS5,STARKS6 +---> STARKS7,STARKS8,STARKS9,STARKS10,STARKS11,STARKS12,STARKS13,STARKS14 +---> STARKS15,STARKS16 +HDS11.IMG +GLO> PLYRHD2.GLO +---> A_HARD0,A_HARD1 +GLO> XXXHD.GLO +---> A_HARD2,A_HARD3,A_HARD4,A_HARD5,A_HARD6,A_HARD7,A_HARD8 +---> A_HARD9,A_HARD10,A_HARD11,A_HARD12,A_HARD13,A_HARD14,A_HARD15,A_HARD16 +GLO> PLYRHD2.GLO +---> N_AND0,N_AND1 +GLO> XXXHD.GLO +---> N_AND2,N_AND3,N_AND4,N_AND5,N_AND6,N_AND7,N_AND8,N_AND9,N_AND10 +---> N_AND11,N_AND12,N_AND13,N_AND14,N_AND15,N_AND16 +GLO> PLYRHD2.GLO +---> WEATH0,WEATH1 +GLO> XXXHD.GLO +---> WEATH2,WEATH3 +---> WEATH4,WEATH5,WEATH6,WEATH7,WEATH8,WEATH9,WEATH10,WEATH11,WEATH12 +---> WEATH13,WEATH14,WEATH15,WEATH16 +GLO> PLYRHD2.GLO +---> BRAD0,BRAD1 +GLO> XXXHD.GLO +---> BRAD2,BRAD3,BRAD4,BRAD5,BRAD6 +---> BRAD7,BRAD8,BRAD9,BRAD10,BRAD11,BRAD12,BRAD13,BRAD14,BRAD15,BRAD16 +GLO> PLYRHD2.GLO +---> K_JOHN0,K_JOHN1 +GLO> XXXHD.GLO +---> K_JOHN2,K_JOHN3,K_JOHN4,K_JOHN5,K_JOHN6,K_JOHN7,K_JOHN8 +---> K_JOHN9,K_JOHN10,K_JOHN11,K_JOHN12,K_JOHN13,K_JOHN14,K_JOHN15,K_JOHN16 +GLO> PLYRHD2.GLO +---> C_ROB0,C_ROB1 +GLO> XXXHD.GLO +---> C_ROB2,C_ROB3,C_ROB4,C_ROB5,C_ROB6,C_ROB7,C_ROB8,C_ROB9,C_ROB10 +---> C_ROB11,C_ROB12,C_ROB13,C_ROB14,C_ROB15,C_ROB16 +GLO> PLYRHD2.GLO +---> RICH0,RICH1 +GLO> XXXHD.GLO +---> RICH2,RICH3 +---> RICH4,RICH5,RICH6,RICH7,RICH8,RICH9,RICH10,RICH11,RICH12,RICH13,RICH14 +---> RICH15,RICH16 +HDS12.IMG +GLO> PLYRHD2.GLO +---> PAYTON0,PAYTON1 +GLO> XXXHD.GLO +---> PAYTON2,PAYTON3,PAYTON4,PAYTON5,PAYTON6,PAYTON7,PAYTON8 +---> PAYTON9,PAYTON10,PAYTON11,PAYTON12,PAYTON13,PAYTON14,PAYTON15,PAYTON16 +GLO> PLYRHD2.GLO +---> MCKEY0,MCKEY1 +GLO> XXXHD.GLO +---> MCKEY2,MCKEY3,MCKEY4,MCKEY5,MCKEY6,MCKEY7,MCKEY8,MCKEY9,MCKEY10 +---> MCKEY11,MCKEY12,MCKEY13,MCKEY14,MCKEY15,MCKEY16 +GLO> PLYRHD2.GLO +---> BENOIT0,BENOIT1 +GLO> XXXHD.GLO +---> BENOIT2 +---> BENOIT3,BENOIT4,BENOIT5,BENOIT6,BENOIT7,BENOIT8,BENOIT9,BENOIT10 +---> BENOIT11,BENOIT12,BENOIT13,BENOIT14,BENOIT15,BENOIT16 +GLO> PLYRHD2.GLO +---> CHEAN0,CHEAN1 +GLO> XXXHD.GLO +---> CHEAN2 +---> CHEAN3,CHEAN4,CHEAN5,CHEAN6,CHEAN7,CHEAN8,CHEAN9,CHEAN10,CHEAN11 +---> CHEAN12,CHEAN13,CHEAN14,CHEAN15,CHEAN16 +; +ASM> PLYRHD5.TBL +GLO> PLYRHD5.GLO +; +hds13.img +---> BLAYLO0,BLAYLO1 +GLO> XXXHD.GLO +---> BLAYLO2,BLAYLO3,BLAYLO4,BLAYLO5,BLAYLO6,BLAYLO7,BLAYLO8,BLAYLO9 +---> BLAYLO10,BLAYLO11,BLAYLO12,BLAYLO13,BLAYLO14,BLAYLO15,BLAYLO16 +GLO> PLYRHD5.GLO +---> SSMITH0,SSMITH1 +GLO> XXXHD.GLO +---> SSMITH2,SSMITH3,SSMITH4,SSMITH5,SSMITH6,SSMITH7,SSMITH8,SSMITH9 +---> SSMITH10,SSMITH11,SSMITH12,SSMITH13,SSMITH14,SSMITH15,SSMITH16 +GLO> PLYRHD5.GLO +---> KNORMA0,KNORMA1 +GLO> XXXHD.GLO +---> KNORMA2,KNORMA3,KNORMA4,KNORMA5,KNORMA6,KNORMA7,KNORMA8,KNORMA9 +---> KNORMA10,KNORMA11,KNORMA12,KNORMA13,KNORMA14,KNORMA15,KNORMA16 +;GLO> PLYRHD5.GLO +;---> HENDER0,HENDER1 +;GLO> XXXHD.GLO +;---> HENDER2,HENDER3,HENDER4,HENDER5,HENDER6,HENDER7,HENDER8,HENDER9 +;---> HENDER10,HENDER11,HENDER12,HENDER13,HENDER14,HENDER15,HENDER16 +GLO> PLYRHD5.GLO +---> BARROS0,BARROS1 +GLO> XXXHD.GLO +---> BARROS2,BARROS3,BARROS4,BARROS5,BARROS6,BARROS7,BARROS8,BARROS9 +---> BARROS10,BARROS11,BARROS12,BARROS13,BARROS14,BARROS15,BARROS16 +GLO> PLYRHD5.GLO +---> MONTRO0,MONTRO1 +GLO> XXXHD.GLO +---> MONTRO2,MONTRO3,MONTRO4,MONTRO5,MONTRO6,MONTRO7,MONTRO8,MONTRO9 +---> MONTRO10,MONTRO11,MONTRO12,MONTRO13,MONTRO14,MONTRO15,MONTRO16 +GLO> PLYRHD5.GLO +---> RADJA0,RADJA1 +GLO> XXXHD.GLO +---> RADJA2,RADJA3,RADJA4,RADJA5,RADJA6,RADJA7,RADJA8,RADJA9,RADJA10,RADJA11 +---> RADJA12,RADJA13,RADJA14,RADJA15,RADJA16 +hds14.img +GLO> PLYRHD5.GLO +---> CURRY0,CURRY1 +GLO> XXXHD.GLO +---> CURRY2,CURRY3,CURRY4,CURRY5,CURRY6,CURRY7,CURRY8,CURRY9,CURRY10,CURRY11 +---> CURRY12,CURRY13,CURRY14,CURRY15,CURRY16 +GLO> PLYRHD5.GLO +---> ZIDEK0,ZIDEK1 +GLO> XXXHD.GLO +---> ZIDEK2,ZIDEK3,ZIDEK4 +---> ZIDEK5,ZIDEK6,ZIDEK7,ZIDEK8,ZIDEK9,ZIDEK10,ZIDEK11,ZIDEK12,ZIDEK13 +---> ZIDEK14,ZIDEK15,ZIDEK16 +GLO> PLYRHD5.GLO +---> KERR0,KERR1 +GLO> XXXHD.GLO +---> KERR2,KERR3,KERR4,KERR5,KERR6,KERR7,KERR8 +---> KERR9,KERR10,KERR11,KERR12,KERR13,KERR14,KERR15,KERR16 +GLO> PLYRHD5.GLO +---> THILL0,THILL1 +GLO> XXXHD.GLO +---> THILL2 +---> THILL3,THILL4,THILL5,THILL6,THILL7,THILL8,THILL9,THILL10,THILL11 +---> THILL12,THILL13,THILL14,THILL15,THILL16 +GLO> PLYRHD5.GLO +---> CMILLS0,CMILLS1 +GLO> XXXHD.GLO +---> CMILLS2,CMILLS3,CMILLS4 +---> CMILLS5,CMILLS6,CMILLS7,CMILLS8,CMILLS9,CMILLS10,CMILLS11,CMILLS12 +---> CMILLS13,CMILLS14,CMILLS15,CMILLS16 +hds15.img +GLO> PLYRHD5.GLO +---> PHILLS0,PHILLS1 +GLO> XXXHD.GLO +---> PHILLS2,PHILLS3,PHILLS4,PHILLS5,PHILLS6,PHILLS7,PHILLS8,PHILLS9 +---> PHILLS10,PHILLS11,PHILLS12,PHILLS13,PHILLS14,PHILLS15,PHILLS16 +GLO> PLYRHD5.GLO +---> KIDD0,KIDD1 +GLO> XXXHD.GLO +---> KIDD2,KIDD3,KIDD4,KIDD5,KIDD6,KIDD7 +---> KIDD8,KIDD9,KIDD10,KIDD11,KIDD12,KIDD13,KIDD14,KIDD15,KIDD16 +GLO> PLYRHD5.GLO +---> PJONES0,PJONES1 +GLO> XXXHD.GLO +---> PJONES2,PJONES3,PJONES4,PJONES5,PJONES6,PJONES7,PJONES8,PJONES9 +---> PJONES10,PJONES11,PJONES12,PJONES13,PJONES14,PJONES15,PJONES16 +GLO> PLYRHD5.GLO +---> RAUF0,RAUF1 +GLO> XXXHD.GLO +---> RAUF2,RAUF3,RAUF4,RAUF5 +---> RAUF6,RAUF7,RAUF8,RAUF9,RAUF10,RAUF11,RAUF12,RAUF13,RAUF14,RAUF15 +---> RAUF16 +GLO> PLYRHD5.GLO +---> PACK0,PACK1 +GLO> XXXHD.GLO +---> PACK2,PACK3,PACK4,PACK5,PACK6,PACK7,PACK8,PACK9,PACK10 +---> PACK11,PACK12,PACK13,PACK14,PACK15,PACK16 +hds16.img +GLO> PLYRHD5.GLO +---> MCDYES0,MCDYES1 +GLO> XXXHD.GLO +---> MCDYES2,MCDYES3,MCDYES4,MCDYES5,MCDYES6,MCDYES7,MCDYES8,MCDYES9 +---> MCDYES10,MCDYES11,MCDYES12,MCDYES13,MCDYES14,MCDYES15,MCDYES16 +GLO> PLYRHD5.GLO +---> GHILL0,GHILL1 +GLO> XXXHD.GLO +---> GHILL2,GHILL3,GHILL4,GHILL5,GHILL6,GHILL7,GHILL8,GHILL9,GHILL10,GHILL11 +---> GHILL12,GHILL13,GHILL14,GHILL15,GHILL16 +GLO> PLYRHD5.GLO +---> TMILLS0,TMILLS1 +GLO> XXXHD.GLO +---> TMILLS2,TMILLS3,TMILLS4 +---> TMILLS5,TMILLS6,TMILLS7,TMILLS8,TMILLS9,TMILLS10,TMILLS11,TMILLS12 +---> TMILLS13,TMILLS14,TMILLS15,TMILLS16 +GLO> PLYRHD5.GLO +---> THORPE0,THORPE1 +GLO> XXXHD.GLO +---> THORPE2,THORPE3,THORPE4 +---> THORPE5,THORPE6,THORPE7,THORPE8,THORPE9,THORPE10,THORPE11,THORPE12 +---> THORPE13,THORPE14,THORPE15,THORPE16 +GLO> PLYRHD5.GLO +---> SPREWE0,SPREWE1 +GLO> XXXHD.GLO +---> SPREWE2,SPREWE3,SPREWE4 +---> SPREWE5,SPREWE6,SPREWE7,SPREWE8,SPREWE9,SPREWE10,SPREWE11,SPREWE12 +---> SPREWE13,SPREWE14,SPREWE15,SPREWE16 +hds17.img +GLO> PLYRHD5.GLO +---> JSMITH0,JSMITH1 +GLO> XXXHD.GLO +---> JSMITH2,JSMITH3,JSMITH4,JSMITH5,JSMITH6,JSMITH7,JSMITH8,JSMITH9 +---> JSMITH10,JSMITH11,JSMITH12,JSMITH13,JSMITH14,JSMITH15,JSMITH16 +GLO> PLYRHD5.GLO +---> CASSEL0,CASSEL1 +GLO> XXXHD.GLO +---> CASSEL2,CASSEL3,CASSEL4,CASSEL5,CASSEL6,CASSEL7,CASSEL8,CASSEL9 +---> CASSEL10,CASSEL11,CASSEL12,CASSEL13,CASSEL14,CASSEL15,CASSEL16 +GLO> PLYRHD5.GLO +---> DDAVIS0,DDAVIS1 +GLO> XXXHD.GLO +---> DDAVIS2,DDAVIS3,DDAVIS4,DDAVIS5,DDAVIS6,DDAVIS7,DDAVIS8,DDAVIS9 +---> DDAVIS10,DDAVIS11,DDAVIS12,DDAVIS13,DDAVIS14,DDAVIS15,DDAVIS16 +GLO> PLYRHD5.GLO +---> MCKEE0,MCKEE1 +GLO> XXXHD.GLO +---> MCKEE2,MCKEE3,MCKEE4,MCKEE5,MCKEE6,MCKEE7,MCKEE8,MCKEE9,MCKEE10,MCKEE11 +---> MCKEE12,MCKEE13,MCKEE14,MCKEE15,MCKEE16 +GLO> PLYRHD5.GLO +---> VAUGHT0,VAUGHT1 +GLO> XXXHD.GLO +---> VAUGHT2,VAUGHT3,VAUGHT4,VAUGHT5,VAUGHT6,VAUGHT7,VAUGHT8 +---> VAUGHT9,VAUGHT10,VAUGHT11,VAUGHT12,VAUGHT13,VAUGHT14,VAUGHT15,VAUGHT16 +GLO> PLYRHD5.GLO +---> RROGER0,RROGER1 +GLO> XXXHD.GLO +---> RROGER2,RROGER3,RROGER4,RROGER5,RROGER6,RROGER7,RROGER8,RROGER9 +---> RROGER10,RROGER11,RROGER12,RROGER13,RROGER14,RROGER15,RROGER16 +hds18.img +GLO> PLYRHD5.GLO +---> LMURRA0,LMURRA1 +GLO> XXXHD.GLO +---> LMURRA2,LMURRA3,LMURRA4,LMURRA5,LMURRA6,LMURRA7,LMURRA8,LMURRA9 +---> LMURRA10,LMURRA11,LMURRA12,LMURRA13,LMURRA14,LMURRA15,LMURRA16 +GLO> PLYRHD5.GLO +---> PRICHA0,PRICHA1 +GLO> XXXHD.GLO +---> PRICHA2,PRICHA3,PRICHA4,PRICHA5,PRICHA6,PRICHA7,PRICHA8,PRICHA9 +---> PRICHA10,PRICHA11,PRICHA12,PRICHA13,PRICHA14,PRICHA15,PRICHA16 +GLO> PLYRHD5.GLO +---> BBARRY0,BBARRY1 +GLO> XXXHD.GLO +---> BBARRY2,BBARRY3,BBARRY4,BBARRY5,BBARRY6,BBARRY7,BBARRY8,BBARRY9 +---> BBARRY10,BBARRY11,BBARRY12,BBARRY13,BBARRY14,BBARRY15,BBARRY16 +GLO> PLYRHD5.GLO +---> EXEL0,EXEL1 +GLO> XXXHD.GLO +---> EXEL2,EXEL3,EXEL4,EXEL5,EXEL6,EXEL7,EXEL8,EXEL9,EXEL10,EXEL11,EXEL12 +---> EXEL13,EXEL14,EXEL15,EXEL16 +GLO> PLYRHD5.GLO +---> CEBALL0,CEBALL1 +GLO> XXXHD.GLO +---> CEBALL2,CEBALL3,CEBALL4,CEBALL5 +---> CEBALL6,CEBALL7,CEBALL8,CEBALL9,CEBALL10,CEBALL11,CEBALL12,CEBALL13 +---> CEBALL14,CEBALL15,CEBALL16 +GLO> PLYRHD5.GLO +---> EJONES0,EJONES1 +GLO> XXXHD.GLO +---> EJONES2,EJONES3,EJONES4,EJONES5 +---> EJONES6,EJONES7,EJONES8,EJONES9,EJONES10,EJONES11,EJONES12,EJONES13 +---> EJONES14,EJONES15,EJONES16 +GLO> PLYRHD5.GLO +---> BOWENS0,BOWENS1 +GLO> XXXHD.GLO +---> BOWENS2,BOWENS3,BOWENS4,BOWENS5 +---> BOWENS6,BOWENS7,BOWENS8,BOWENS9,BOWENS10,BOWENS11,BOWENS12,BOWENS13 +---> BOWENS14,BOWENS15,BOWENS16 +hds19.img +GLO> PLYRHD5.GLO +---> GROBIN0,GROBIN1 +GLO> XXXHD.GLO +---> GROBIN2,GROBIN3 +---> GROBIN4,GROBIN5,GROBIN6,GROBIN7,GROBIN8,GROBIN9,GROBIN10,GROBIN11 +---> GROBIN12,GROBIN13,GROBIN14,GROBIN15,GROBIN16 +GLO> PLYRHD5.GLO +---> EMURD0,EMURD1 +GLO> XXXHD.GLO +---> EMURD2,EMURD3 +---> EMURD4,EMURD5,EMURD6,EMURD7,EMURD8,EMURD9,EMURD10,EMURD11,EMURD12 +---> EMURD13,EMURD14,EMURD15,EMURD16 +GLO> PLYRHD5.GLO +---> RESPER0,RESPER1 +GLO> XXXHD.GLO +---> RESPER2,RESPER3,RESPER4,RESPER5 +---> RESPER6,RESPER7,RESPER8,RESPER9,RESPER10,RESPER11,RESPER12,RESPER13 +---> RESPER14,RESPER15,RESPER16 +;GLO> PLYRHD5.GLO +;---> MWILLI0,MWILLI1 +;GLO> XXXHD.GLO +;---> MWILLI2,MWILLI3,MWILLI4,MWILLI5 +;---> MWILLI6,MWILLI7,MWILLI8,MWILLI9,MWILLI10,MWILLI11,MWILLI12,MWILLI13 +;---> MWILLI14,MWILLI15,MWILLI16 +;GLO> PLYRHD5.GLO +;---> ROOKS0,ROOKS1 +;GLO> XXXHD.GLO +;---> ROOKS2,ROOKS3,ROOKS4,ROOKS5,ROOKS6 +;---> ROOKS7,ROOKS8,ROOKS9,ROOKS10,ROOKS11,ROOKS12,ROOKS13,ROOKS14,ROOKS15 +;---> ROOKS16 +hds20.img +GLO> PLYRHD5.GLO +---> GARNET0,GARNET1 +GLO> XXXHD.GLO +---> GARNET2,GARNET3,GARNET4,GARNET5,GARNET6,GARNET7,GARNET8,GARNET9 +---> GARNET10,GARNET11,GARNET12,GARNET13,GARNET14,GARNET15,GARNET16 +GLO> PLYRHD5.GLO +---> GILLIA0,GILLIA1 +GLO> XXXHD.GLO +---> GILLIA2,GILLIA3,GILLIA4,GILLIA5,GILLIA6,GILLIA7,GILLIA8,GILLIA9 +---> GILLIA10,GILLIA11,GILLIA12,GILLIA13,GILLIA14,GILLIA15,GILLIA16 +GLO> PLYRHD5.GLO +---> OBANN0,OBANN1 +GLO> XXXHD.GLO +---> OBANN2,OBANN3,OBANN4,OBANN5,OBANN6,OBANN7,OBANN8,OBANN9,OBANN10,OBANN11 +---> OBANN12,OBANN13,OBANN14,OBANN15,OBANN16 +GLO> PLYRHD5.GLO +---> DSCOTT0,DSCOTT1 +GLO> XXXHD.GLO +---> DSCOTT2,DSCOTT3,DSCOTT4 +---> DSCOTT5,DSCOTT6,DSCOTT7,DSCOTT8,DSCOTT9,DSCOTT10,DSCOTT11,DSCOTT12 +---> DSCOTT13,DSCOTT14,DSCOTT15,DSCOTT16 +GLO> PLYRHD5.GLO +---> WRIGHT0,WRIGHT1 +GLO> XXXHD.GLO +---> WRIGHT2,WRIGHT3,WRIGHT4 +---> WRIGHT5,WRIGHT6,WRIGHT7,WRIGHT8,WRIGHT9,WRIGHT10,WRIGHT11,WRIGHT12 +---> WRIGHT13,WRIGHT14,WRIGHT15,WRIGHT16 +hds21.img +GLO> PLYRHD5.GLO +---> STACK0,STACK1 +GLO> XXXHD.GLO +---> STACK2,STACK3,STACK4,STACK5,STACK6,STACK7,STACK8,STACK9,STACK10 +---> STACK11,STACK12,STACK13,STACK14,STACK15,STACK16 +GLO> PLYRHD5.GLO +---> WPERS0,WPERS1 +GLO> XXXHD.GLO +---> WPERS2,WPERS3 +---> WPERS4,WPERS5,WPERS6,WPERS7,WPERS8,WPERS9,WPERS10,WPERS11,WPERS12 +---> WPERS13,WPERS14,WPERS15,WPERS16 +GLO> PLYRHD5.GLO +---> FINLEY0,FINLEY1 +GLO> XXXHD.GLO +---> FINLEY2,FINLEY3,FINLEY4,FINLEY5 +---> FINLEY6,FINLEY7,FINLEY8,FINLEY9,FINLEY10,FINLEY11,FINLEY12,FINLEY13 +---> FINLEY14,FINLEY15,FINLEY16 +GLO> PLYRHD5.GLO +---> STRICK0,STRICK1 +GLO> XXXHD.GLO +---> STRICK2,STRICK3,STRICK4,STRICK5 +---> STRICK6,STRICK7,STRICK8,STRICK9,STRICK10,STRICK11,STRICK12,STRICK13 +---> STRICK14,STRICK15,STRICK16 +GLO> PLYRHD5.GLO +---> SABONI0,SABONI1 +GLO> XXXHD.GLO +---> SABONI2,SABONI3,SABONI4,SABONI5 +---> SABONI6,SABONI7,SABONI8,SABONI9,SABONI10,SABONI11,SABONI12,SABONI13 +---> SABONI14,SABONI15,SABONI16 +GLO> PLYRHD5.GLO +---> BWILLI0,BWILLI1 +GLO> XXXHD.GLO +---> BWILLI2,BWILLI3,BWILLI4,BWILLI5 +---> BWILLI6,BWILLI7,BWILLI8,BWILLI9,BWILLI10,BWILLI11,BWILLI12,BWILLI13 +---> BWILLI14,BWILLI15,BWILLI16 +hds22.img +GLO> PLYRHD5.GLO +---> CHILD0,CHILD1 +GLO> XXXHD.GLO +---> CHILD2,CHILD3,CHILD4,CHILD5,CHILD6,CHILD7,CHILD8,CHILD9,CHILD10 +---> CHILD11,CHILD12,CHILD13,CHILD14,CHILD15,CHILD16 +GLO> PLYRHD5.GLO +---> WWILLI0,WWILLI1 +GLO> XXXHD.GLO +---> WWILLI2,WWILLI3 +---> WWILLI4,WWILLI5,WWILLI6,WWILLI7,WWILLI8,WWILLI9,WWILLI10,WWILLI11 +---> WWILLI12,WWILLI13,WWILLI14,WWILLI15,WWILLI16 +GLO> PLYRHD5.GLO +---> BGRANT0,BGRANT1 +GLO> XXXHD.GLO +---> BGRANT2,BGRANT3 +---> BGRANT4,BGRANT5,BGRANT6,BGRANT7,BGRANT8,BGRANT9,BGRANT10,BGRANT11 +---> BGRANT12,BGRANT13,BGRANT14,BGRANT15,BGRANT16 +GLO> PLYRHD5.GLO +---> MARCIU0,MARCIU1 +GLO> XXXHD.GLO +---> MARCIU2,MARCIU3 +---> MARCIU4,MARCIU5,MARCIU6,MARCIU7,MARCIU8,MARCIU9,MARCIU10,MARCIU11 +---> MARCIU12,MARCIU13,MARCIU14,MARCIU15,MARCIU16 +;GLO> PLYRHD5.GLO +;---> CWILLI0,CWILLI1 +;GLO> XXXHD.GLO +;---> CWILLI2,CWILLI3 +;---> CWILLI4,CWILLI5,CWILLI6,CWILLI7,CWILLI8,CWILLI9,CWILLI10,CWILLI11 +;---> CWILLI12,CWILLI13,CWILLI14,CWILLI15,CWILLI16 +GLO> PLYRHD5.GLO +---> AJOHN0,AJOHN1 +GLO> XXXHD.GLO +---> AJOHN2,AJOHN3 +---> AJOHN4,AJOHN5,AJOHN6,AJOHN7,AJOHN8,AJOHN9,AJOHN10,AJOHN11,AJOHN12 +---> AJOHN13,AJOHN14,AJOHN15,AJOHN16 +hds23.img +GLO> PLYRHD5.GLO +---> FORD0,FORD1 +GLO> XXXHD.GLO +---> FORD2,FORD3,FORD4,FORD5,FORD6,FORD7,FORD8,FORD9,FORD10,FORD11 +---> FORD12,FORD13,FORD14,FORD15,FORD16 +GLO> PLYRHD5.GLO +---> CROGER0,CROGER1 +GLO> XXXHD.GLO +---> CROGER2,CROGER3,CROGER4 +---> CROGER5,CROGER6,CROGER7,CROGER8,CROGER9,CROGER10,CROGER11,CROGER12 +---> CROGER13,CROGER14,CROGER15,CROGER16 +GLO> PLYRHD5.GLO +---> STOUD0,STOUD1 +GLO> XXXHD.GLO +---> STOUD2,STOUD3 +---> STOUD4,STOUD5,STOUD6,STOUD7,STOUD8,STOUD9,STOUD10,STOUD11,STOUD12 +---> STOUD13,STOUD14,STOUD15,STOUD16 +GLO> PLYRHD5.GLO +---> ANTHON0,ANTHON1 +GLO> XXXHD.GLO +---> ANTHON2,ANTHON3,ANTHON4,ANTHON5,ANTHON6,ANTHON7 +---> ANTHON8,ANTHON9,ANTHON10,ANTHON11,ANTHON12,ANTHON13,ANTHON14,ANTHON15 +---> ANTHON16 +;GLO> PLYRHD5.GLO +;---> GATTIS0,GATTIS1 +;GLO> XXXHD.GLO +;---> GATTIS2,GATTIS3,GATTIS4,GATTIS5,GATTIS6,GATTIS7 +;---> GATTIS8,GATTIS9,GATTIS10,GATTIS11,GATTIS12,GATTIS13,GATTIS14,GATTIS15 +;---> GATTIS16 +GLO> PLYRHD5.GLO +---> JHOW0,JHOW1 +GLO> XXXHD.GLO +---> JHOW2 +---> JHOW3,JHOW4,JHOW5,JHOW6,JHOW7,JHOW8,JHOW9,JHOW10,JHOW11,JHOW12,JHOW13 +---> JHOW14,JHOW15,JHOW16 +hds24.img +GLO> PLYRHD5.GLO +---> FOX0,FOX1 +GLO> XXXHD.GLO +---> FOX2,FOX3,FOX4,FOX5,FOX6,FOX7,FOX8,FOX9,FOX10,FOX11,FOX12,FOX13 +---> FOX14,FOX15,FOX16 +GLO> PLYRHD5.GLO +---> LONG0,LONG1 +GLO> XXXHD.GLO +---> LONG2,LONG3,LONG4,LONG5,LONG6,LONG7,LONG8,LONG9 +---> LONG10,LONG11,LONG12,LONG13,LONG14,LONG15,LONG16 +GLO> PLYRHD5.GLO +---> BRAND0,BRAND1 +GLO> XXXHD.GLO +---> BRAND2,BRAND3 +---> BRAND4,BRAND5,BRAND6,BRAND7,BRAND8,BRAND9,BRAND10,BRAND11,BRAND12 +---> BRAND13,BRAND14,BRAND15,BRAND16 +GLO> PLYRHD5.GLO +---> FERRY0,FERRY1 +GLO> XXXHD.GLO +---> FERRY2,FERRY3,FERRY4,FERRY5 +---> FERRY6,FERRY7,FERRY8,FERRY9,FERRY10,FERRY11,FERRY12,FERRY13,FERRY14 +---> FERRY15,FERRY16 +GLO> PLYRHD5.GLO +---> MCCLOU0,MCCLOU1 +GLO> XXXHD.GLO +---> MCCLOU2,MCCLOU3,MCCLOU4,MCCLOU5,MCCLOU6,MCCLOU7 +---> MCCLOU8,MCCLOU9,MCCLOU10,MCCLOU11,MCCLOU12,MCCLOU13,MCCLOU14,MCCLOU15 +---> MCCLOU16 +GLO> PLYRHD5.GLO +---> ROSE0,ROSE1 +GLO> XXXHD.GLO +---> ROSE2,ROSE3,ROSE4,ROSE5,ROSE6,ROSE7,ROSE8,ROSE9,ROSE10 +---> ROSE11,ROSE12,ROSE13,ROSE14,ROSE15,ROSE16 +GLO> PLYRHD5.GLO +---> DELLIS0,DELLIS1 +GLO> XXXHD.GLO +---> DELLIS2,DELLIS3,DELLIS4 +---> DELLIS5,DELLIS6,DELLIS7,DELLIS8,DELLIS9,DELLIS10,DELLIS11,DELLIS12,DELLIS13 +---> DELLIS14,DELLIS15,DELLIS16 +GLO> PLYRHD5.GLO +---> HOUSTO0,HOUSTO1 +GLO> XXXHD.GLO +---> HOUSTO2,HOUSTO3,HOUSTO4,HOUSTO5,HOUSTO6 +---> HOUSTO7,HOUSTO8,HOUSTO9,HOUSTO10,HOUSTO11,HOUSTO12,HOUSTO13,HOUSTO14 +---> HOUSTO15,HOUSTO16 +GLO> PLYRHD5.GLO +---> MJACKS0,MJACKS1 +GLO> XXXHD.GLO +---> MJACKS2,MJACKS3,MJACKS4,MJACKS5,MJACKS6 +---> MJACKS7,MJACKS8,MJACKS9,MJACKS10,MJACKS11,MJACKS12,MJACKS13,MJACKS14 +---> MJACKS15,MJACKS16 +GLO> PLYRHD5.GLO +---> DANILO0,DANILO1 +GLO> XXXHD.GLO +---> DANILO2,DANILO3,DANILO4,DANILO5,DANILO6 +---> DANILO7,DANILO8,DANILO9,DANILO10,DANILO11,DANILO12,DANILO13,DANILO14 +---> DANILO15,DANILO16 +;GLO> PLYRHD5.GLO +;---> COLES0,COLES1 +;GLO> XXXHD.GLO +;---> COLES2,COLES3,COLES4,COLES5,COLES6,COLES7 +;---> COLES8,COLES9,COLES10,COLES11,COLES12,COLES13,COLES14,COLES15,COLES16 +GLO> PLYRHD5.GLO +---> DOUGLA0,DOUGLA1 +GLO> XXXHD.GLO +---> DOUGLA2,DOUGLA3,DOUGLA4,DOUGLA5,DOUGLA6,DOUGLA7,DOUGLA8,DOUGLA9 +---> DOUGLA10,DOUGLA11,DOUGLA12,DOUGLA13,DOUGLA14,DOUGLA15,DOUGLA16 +hds25.img +GLO> PLYRHD5.GLO +---> KEDWAR0,KEDWAR1 +GLO> XXXHD.GLO +---> KEDWAR2,KEDWAR3,KEDWAR4,KEDWAR5,KEDWAR6,KEDWAR7,KEDWAR8,KEDWAR9 +---> KEDWAR10,KEDWAR11,KEDWAR12,KEDWAR13,KEDWAR14,KEDWAR15,KEDWAR16 +GLO> PLYRHD5.GLO +---> KONCAK0,KONCAK1 +GLO> XXXHD.GLO +---> KONCAK2,KONCAK3,KONCAK4,KONCAK5,KONCAK6,KONCAK7,KONCAK8,KONCAK9 +---> KONCAK10,KONCAK11,KONCAK12,KONCAK13,KONCAK14,KONCAK15,KONCAK16 +GLO> PLYRHD5.GLO +---> VMAX0,VMAX1 +GLO> XXXHD.GLO +---> VMAX2,VMAX3,VMAX4,VMAX5,VMAX6,VMAX7,VMAX8,VMAX9,VMAX10,VMAX11,VMAX12 +---> VMAX13,VMAX14,VMAX15,VMAX16 +GLO> PLYRHD5.GLO +---> EDNEY0,EDNEY1 +GLO> XXXHD.GLO +---> EDNEY2,EDNEY3,EDNEY4,EDNEY5,EDNEY6 +---> EDNEY7,EDNEY8,EDNEY9,EDNEY10,EDNEY11,EDNEY12,EDNEY13,EDNEY14,EDNEY15 +---> EDNEY16 +GLO> PLYRHD5.GLO +---> DELNEG0,DELNEG1 +GLO> XXXHD.GLO +---> DELNEG2,DELNEG3,DELNEG4,DELNEG5,DELNEG6,DELNEG7,DELNEG8 +---> DELNEG9,DELNEG10,DELNEG11,DELNEG12,DELNEG13,DELNEG14,DELNEG15,DELNEG16 +GLO> PLYRHD5.GLO +---> WANDERS0,WANDERS1 +GLO> XXXHD.GLO +---> WANDERS2,WANDERS3,WANDERS4,WANDERS5,WANDERS6,WANDERS7,WANDERS8,WANDERS9 +---> WANDERS10,WANDERS11,WANDERS12,WANDERS13,WANDERS14,WANDERS15,WANDERS16 +GLO> PLYRHD5.GLO +---> OMILLER0,OMILLER1 +GLO> XXXHD.GLO +---> OMILLER2,OMILLER3,OMILLER4,OMILLER5,OMILLER6,OMILLER7,OMILLER8,OMILLER9 +---> OMILLER10,OMILLER11,OMILLER12,OMILLER13,OMILLER14,OMILLER15,OMILLER16 +GLO> PLYRHD5.GLO +---> MURRAY0,MURRAY1 +GLO> XXXHD.GLO +---> MURRAY2,MURRAY3,MURRAY4,MURRAY5,MURRAY6,MURRAY7,MURRAY8,MURRAY9 +---> MURRAY10,MURRAY11,MURRAY12,MURRAY13,MURRAY14,MURRAY15,MURRAY16 +GLO> PLYRHD5.GLO +---> MURESA0,MURESA1 +GLO> XXXHD.GLO +---> MURESA2,MURESA3,MURESA4,MURESA5,MURESA6,MURESA7,MURESA8,MURESA9 +---> MURESA10,MURESA11,MURESA12,MURESA13,MURESA14,MURESA15,MURESA16 +GLO> PLYRHD5.GLO +---> BREEV0,BREEV1 +GLO> XXXHD.GLO +---> BREEV2,BREEV3,BREEV4,BREEV5,BREEV6,BREEV7,BREEV8,BREEV9 +---> BREEV10,BREEV11,BREEV12,BREEV13,BREEV14,BREEV15,BREEV16 +GLO> PLYRHD5.GLO +---> DHARP0,DHARP1 +GLO> XXXHD.GLO +---> DHARP2,DHARP3,DHARP4,DHARP5,DHARP6,DHARP7,DHARP8,DHARP9 +---> DHARP10,DHARP11,DHARP12,DHARP13,DHARP14,DHARP15,DHARP16 +hds26.img +GLO> PLYRHD5.GLO +---> Robertsn0,Robertsn1 +GLO> XXXHD.GLO +---> Robertsn2,Robertsn3,Robertsn4,Robertsn5,Robertsn6,Robertsn7,Robertsn8,Robertsn9 +---> Robertsn10,Robertsn11,Robertsn12,Robertsn13,Robertsn14,Robertsn15,Robertsn16 +GLO> PLYRHD5.GLO +---> Chapman0,Chapman1 +GLO> XXXHD.GLO +---> Chapman2,Chapman3,Chapman4,Chapman5,Chapman6,Chapman7,Chapman8,Chapman9 +---> Chapman10,Chapman11,Chapman12,Chapman13,Chapman14,Chapman15,Chapman16 +GLO> PLYRHD5.GLO +---> Lang0,Lang1 +GLO> XXXHD.GLO +---> Lang2,Lang3,Lang4,Lang5,Lang6,Lang7,Lang8,Lang9 +---> Lang10,Lang11,Lang12,Lang13,Lang14,Lang15,Lang16 +GLO> PLYRHD5.GLO +---> Scott0,Scott1 +GLO> XXXHD.GLO +---> Scott2,Scott3,Scott4,Scott5,Scott6,Scott7,Scott8,Scott9 +---> Scott10,Scott11,Scott12,Scott13,Scott14,Scott15,Scott16 +GLO> PLYRHD5.GLO +---> Webb0,Webb1 +GLO> XXXHD.GLO +---> Webb2,Webb3,Webb4,Webb5,Webb6,Webb7,Webb8,Webb9 +---> Webb10,Webb11,Webb12,Webb13,Webb14,Webb15,Webb16 +;GLO> PLYRHD5.GLO +;---> MJohnson0,MJohnson1 +;GLO> XXXHD.GLO +;---> MJohnson2,MJohnson3,MJohnson4,MJohnson5,MJohnson6,MJohnson7,MJohnson8,MJohnson9 +;---> MJohnson10,MJohnson11,MJohnson12,MJohnson13,MJohnson14,MJohnson15,MJohnson16 +GLO> PLYRHD5.GLO +---> Ruffin0,Ruffin1 +GLO> XXXHD.GLO +---> Ruffin2,Ruffin3,Ruffin4,Ruffin5,Ruffin6,Ruffin7,Ruffin8,Ruffin9 +---> Ruffin10,Ruffin11,Ruffin12,Ruffin13,Ruffin14,Ruffin15,Ruffin16 +hdsmsc1.img +;GLO> PLYRHD5.GLO +;---> ROS_00,ROS_01 +;GLO> XXXHD.GLO +;---> ROS_02,ROS_03,ROS_04,ROS_05,ROS_06,ROS_07 +;---> ROS_08,ROS_09,ROS_10,ROS_11,ROS_12,ROS_13,ROS_14,ROS_15,ROS_16 +GLO> PLYRHD5.GLO +---> ANG_00,ANG_01 +GLO> XXXHD.GLO +---> ANG_02,ANG_03,ANG_04,ANG_05 +---> ANG_06,ANG_07,ANG_08,ANG_09,ANG_10,ANG_11,ANG_12,ANG_13,ANG_14,ANG_15 +---> ANG_16 +GLO> PLYRHD5.GLO +---> JOE_00,JOE_01 +GLO> XXXHD.GLO +---> JOE_02,JOE_03,JOE_04,JOE_05,JOE_06,JOE_07,JOE_08 +---> JOE_09,JOE_10,JOE_11,JOE_12,JOE_13,JOE_14,JOE_15,JOE_16 +GLO> PLYRHD5.GLO +---> LIS_00,LIS_01 +GLO> XXXHD.GLO +---> LIS_02,LIS_03,LIS_04,LIS_05,LIS_06,LIS_07,LIS_08,LIS_09,LIS_10,LIS_11 +---> LIS_12,LIS_13,LIS_14,LIS_15,LIS_16 +GLO> PLYRHD5.GLO +---> MEL_00,MEL_01 +GLO> XXXHD.GLO +---> MEL_02,MEL_03,MEL_04 +---> MEL_05,MEL_06,MEL_07,MEL_08,MEL_09,MEL_10,MEL_11,MEL_12,MEL_13,MEL_14 +---> MEL_15,MEL_16 +GLO> PLYRHD5.GLO +---> MIK_00,MIK_01 +GLO> XXXHD.GLO +---> MIK_02,MIK_03,MIK_04,MIK_05,MIK_06,MIK_07 +---> MIK_08,MIK_09,MIK_10,MIK_11,MIK_12,MIK_13,MIK_14,MIK_15,MIK_16 +GLO> PLYRHD5.GLO +---> ALIEN00,ALIEN01 +GLO> XXXHD.GLO +---> ALIEN02,ALIEN03,ALIEN04,ALIEN05,ALIEN06,ALIEN07,ALIEN08,ALIEN09 +---> ALIEN10,ALIEN11,ALIEN12,ALIEN13,ALIEN14,ALIEN15,ALIEN16 +GLO> PLYRHD5.GLO +---> COW00,COW01 +GLO> XXXHD.GLO +---> COW02,COW03,COW04,COW05,COW06,COW07,COW08,COW09,COW10,COW11,COW12,COW13 +---> COW14,COW15,COW16 +GLO> PLYRHD5.GLO +---> GUIDO00,GUIDO01 +GLO> XXXHD.GLO +---> GUIDO02,GUIDO03,GUIDO04,GUIDO05 +---> GUIDO06,GUIDO07,GUIDO08,GUIDO09,GUIDO10,GUIDO11,GUIDO12,GUIDO13,GUIDO14 +---> GUIDO15,GUIDO16 +hdsmsc2.img +GLO> PLYRHD5.GLO +---> BER00,BER01 +GLO> XXXHD.GLO +---> BER02,BER03,BER04,BER05,BER06 +---> BER07,BER08,BER09,BER10,BER11,BER12,BER13,BER14,BER15,BER16 +GLO> PLYRHD5.GLO +---> CHK00,CHK01 +GLO> XXXHD.GLO +---> CHK02,CHK03,CHK04,CHK05,CHK06,CHK07,CHK08,CHK09,CHK10,CHK11 +---> CHK12,CHK13,CHK14,CHK15,CHK16 +GLO> PLYRHD5.GLO +---> FAT00,FAT01 +GLO> XXXHD.GLO +---> FAT02,FAT03,FAT04,FAT05,FAT06,FAT07,FAT08 +---> FAT09,FAT10,FAT11,FAT12,FAT13,FAT14,FAT15,FAT16 +GLO> PLYRHD5.GLO +---> FRA00,FRA01 +GLO> XXXHD.GLO +---> FRA02,FRA03,FRA04,FRA05,FRA06,FRA07,FRA08,FRA09,FRA10 +---> FRA11,FRA12,FRA13,FRA14,FRA15,FRA16 +GLO> PLYRHD5.GLO +---> GOR00,GOR01 +GLO> XXXHD.GLO +---> GOR02,GOR03,GOR04,GOR05,GOR06,GOR07,GOR08,GOR09,GOR10 +---> GOR11,GOR12,GOR13,GOR14,GOR15,GOR16 +GLO> PLYRHD5.GLO +---> GRE00,GRE01 +GLO> XXXHD.GLO +---> GRE02,GRE03,GRE04,GRE05,GRE06,GRE07,GRE08,GRE09,GRE10,GRE11 +---> GRE12,GRE13,GRE14,GRE15,GRE16 +GLO> PLYRHD5.GLO +---> OLD00,OLD01 +GLO> XXXHD.GLO +---> OLD02,OLD03,OLD04,OLD05,OLD06,OLD07,OLD08,OLD09,OLD10,OLD11,OLD12 +---> OLD13,OLD14,OLD15,OLD16 +GLO> PLYRHD5.GLO +---> PIG00,PIG01 +GLO> XXXHD.GLO +---> PIG02,PIG03,PIG04,PIG05,PIG06,PIG07 +---> PIG08,PIG09,PIG10,PIG11,PIG12,PIG13,PIG14,PIG15,PIG16 +GLO> PLYRHD5.GLO +---> WIZ00,WIZ01 +GLO> XXXHD.GLO +---> WIZ02,WIZ03,WIZ04,WIZ05,WIZ06,WIZ07,WIZ08,WIZ09 +---> WIZ10,WIZ11,WIZ12,WIZ13,WIZ14,WIZ15,WIZ16 +hdsmsc3.img +GLO> PLYRHD5.GLO +---> ERI00,ERI01 +GLO> XXXHD.GLO +---> ERI02,ERI03,ERI04,ERI05,ERI06,ERI07,ERI08,ERI09,ERI10 +---> ERI11,ERI12,ERI13,ERI14,ERI15,ERI16 +GLO> PLYRHD5.GLO +---> KIM00,KIM01 +GLO> XXXHD.GLO +---> KIM02,KIM03,KIM04,KIM05,KIM06,KIM07,KIM08,KIM09,KIM10 +---> KIM11,KIM12,KIM13,KIM14,KIM15,KIM16 +GLO> PLYRHD5.GLO +---> MAR00,MAR01 +GLO> XXXHD.GLO +---> MAR02,MAR03,MAR04,MAR05,MAR06,MAR07,MAR08,MAR09,MAR10 +---> MAR11,MAR12,MAR13,MAR14,MAR15,MAR16 +GLO> PLYRHD5.GLO +---> ROH00,ROH01 +GLO> XXXHD.GLO +---> ROH02,ROH03,ROH04,ROH05,ROH06,ROH07,ROH08,ROH09,ROH10 +---> ROH11,ROH12,ROH13,ROH14,ROH15,ROH16 +GLO> PLYRHD5.GLO +---> SEA00,SEA01 +GLO> XXXHD.GLO +---> SEA02,SEA03,SEA04,SEA05,SEA06,SEA07,SEA08,SEA09,SEA10 +---> SEA11,SEA12,SEA13,SEA14,SEA15,SEA16 +hdsmsc4.img +GLO> PLYRHD5.GLO +---> CHEECH00,CHEECH01 +GLO> XXXHD.GLO +---> CHEECH02,CHEECH03,CHEECH04,CHEECH05,CHEECH06,CHEECH07 +---> CHEECH08,CHEECH09,CHEECH10,CHEECH11,CHEECH12 +---> CHEECH13,CHEECH14,CHEECH15,CHEECH16 +GLO> PLYRHD5.GLO +---> CLOWN00,CLOWN01 +GLO> XXXHD.GLO +---> CLOWN02,CLOWN03,CLOWN04,CLOWN05,CLOWN06,CLOWN07,CLOWN08,CLOWN09 +---> CLOWN10,CLOWN11,CLOWN12,CLOWN13,CLOWN14,CLOWN15,CLOWN16 +GLO> PLYRHD5.GLO +---> MADBAL00,MADBAL01 +GLO> XXXHD.GLO +---> MADBAL02,MADBAL03 +---> MADBAL04,MADBAL05,MADBAL06,MADBAL07,MADBAL08,MADBAL09,MADBAL10,MADBAL11 +---> MADBAL12,MADBAL13,MADBAL14,MADBAL15,MADBAL16 +GLO> PLYRHD5.GLO +---> VIKAPE00,VIKAPE01 +GLO> XXXHD.GLO +---> VIKAPE02,VIKAPE03,VIKAPE04,VIKAPE05 +---> VIKAPE06,VIKAPE07,VIKAPE08,VIKAPE09,VIKAPE10 +---> VIKAPE11,VIKAPE12,VIKAPE13,VIKAPE14,VIKAPE15,VIKAPE16 +GLO> PLYRHD5.GLO +---> BEAST00,BEAST01 +GLO> XXXHD.GLO +---> BEAST02,BEAST03,BEAST04 +---> BEAST05 +;,BEAST06,BEAST07,BEAST08,BEAST09,BEAST10,BEAST11,BEAST12,BEAST13 +;---> BEAST14,BEAST15,BEAST16 +---> BEAST16 +GLO> PLYRHD5.GLO +---> JABAL00,JABAL01 +GLO> XXXHD.GLO +---> JABAL02,JABAL03,JABAL04,JABAL05 +;---> JABAL06,JABAL07,JABAL08,JABAL09,JABAL10,JABAL11,JABAL12,JABAL13,JABAL14 +;---> JABAL15,JABAL16 +---> JABAL16 +GLO> PLYRHD5.GLO +---> MDOC00,MDOC01 +GLO> XXXHD.GLO +---> MDOC02,MDOC03,MDOC04,MDOC05,MDOC06,MDOC07 +---> MDOC08,MDOC09,MDOC10,MDOC11,MDOC12,MDOC13,MDOC14,MDOC15,MDOC16 +hdsmsc5.img +GLO> PLYRHD5.GLO +---> AMRICH00,AMRICH01 +GLO> XXXHD.GLO +---> AMRICH02,AMRICH03,AMRICH04 +---> AMRICH05,AMRICH06,AMRICH07,AMRICH08,AMRICH09,AMRICH10,AMRICH11,AMRICH12 +---> AMRICH13,AMRICH14,AMRICH15,AMRICH16 +GLO> PLYRHD5.GLO +---> BARD00,BARD01 +GLO> XXXHD.GLO +---> BARD02,BARD03,BARD04 +---> BARD05,BARD06,BARD07,BARD08,BARD09,BARD10,BARD11,BARD12,BARD13,BARD14 +---> BARD15,BARD16 +GLO> PLYRHD5.GLO +---> DIM00,DIM01 +GLO> XXXHD.GLO +---> DIM02,DIM03,DIM04,DIM05 +;,DIM06,DIM07,DIM08 +;---> DIM09,DIM10,DIM11,DIM12,DIM13,DIM14,DIM15,DIM16 +---> DIM16 +GLO> PLYRHD5.GLO +---> JACKJR00,JACKJR01 +GLO> XXXHD.GLO +---> JACKJR02,JACKJR03,JACKJR04,JACKJR05,JACKJR06,JACKJR07,JACKJR08,JACKJR09 +---> JACKJR10,JACKJR11,JACKJR12,JACKJR13,JACKJR14,JACKJR15,JACKJR16 +GLO> PLYRHD5.GLO +---> JIGGET00,JIGGET01 +GLO> XXXHD.GLO +---> JIGGET02,JIGGET03,JIGGET04,JIGGET05 +;,JIGGET06,JIGGET07,JIGGET08 +;---> JIGGET09,JIGGET10,JIGGET11,JIGGET12,JIGGET13,JIGGET14,JIGGET15,JIGGET16 +---> JIGGET16 +GLO> PLYRHD5.GLO +---> JON00,JON01 +GLO> XXXHD.GLO +---> JON02,JON03,JON04,JON05,JON06,JON07,JON08,JON09,JON10,JON11 +---> JON12,JON13,JON14,JON15,JON16 +GLO> PLYRHD5.GLO +---> MIKE00,MIKE01 +GLO> XXXHD.GLO +---> MIKE02,MIKE03,MIKE04,MIKE05,MIKE06 +---> MIKE07,MIKE08,MIKE09,MIKE10,MIKE11,MIKE12,MIKE13,MIKE14,MIKE15,MIKE16 +GLO> PLYRHD5.GLO +---> MIN00,MIN01 +GLO> XXXHD.GLO +---> MIN02,MIN03,MIN04,MIN05,MIN06,MIN07,MIN08,MIN09 +---> MIN10,MIN11,MIN12,MIN13,MIN14,MIN15,MIN16 +GLO> PLYRHD5.GLO +---> MUND00,MUND01 +GLO> XXXHD.GLO +---> MUND02,MUND03,MUND04,MUND05,MUND06, +---> MUND07,MUND08,MUND09,MUND10,MUND11,MUND12,MUND13,MUND14,MUND15,MUND16, +GLO> PLYRHD5.GLO +---> MXV00,MXV01 +GLO> XXXHD.GLO +---> MXV02,MXV03,MXV04,MXV05,MXV06,MXV07 +---> MXV08,MXV09,MXV10,MXV11,MXV12,MXV13,MXV14,MXV15,MXV16 +GLO> PLYRHD5.GLO +---> NORTH00,NORTH01 +GLO> XXXHD.GLO +---> NORTH02,NORTH03,NORTH04,NORTH05 +;---> NORTH06,NORTH07,NORTH08,NORTH09,NORTH10 +;---> NORTH11,NORTH12,NORTH13,NORTH14,NORTH15,NORTH16 +---> NORTH16 +GLO> PLYRHD5.GLO +---> WIL00,WIL01 +GLO> XXXHD.GLO +---> WIL02,WIL03,WIL04,WIL05,WIL06,WIL07, +---> WIL08,WIL09,WIL10,WIL11,WIL12,WIL13,WIL14,WIL15,WIL16 +PPP> 0 diff --git a/BACKUP/XART100/BBPAL.LOD b/BACKUP/XART100/BBPAL.LOD new file mode 100644 index 0000000..2878958 --- /dev/null +++ b/BACKUP/XART100/BBPAL.LOD @@ -0,0 +1,45 @@ +PON> +; +IHDR PAL:L +; +ASM> junkxxxx +; +;Flesh and uniform pals +anewp.img +---> NPAL1 +---> NPALW1 +---> XSPAL1,XSPAL2,XSPAL3,XSPAL4,XSPAL5,XSPAL6,XSPAL7,XSPAL8 +---> XSPAL9,XSPAL10,XSPAL11,XSPAL12,XSPAL13,XSPAL14,XSPAL15 +---> XSPAL16,XSPAL17,XSPAL18,XSPAL19,XSPAL20,XSPAL21,XSPAL22 +---> XSPAL23,XSPAL24,XSPAL25,XSPAL26,XSPAL27,XSPAL28,XSPAL29 +---> XSPAL30,XSPAL31,XSPAL32,XSPAL33,XSPAL34,XSPAL35,XSPAL36 +---> XSPAL37,XSPAL38,XSPAL39,XSPAL40,XSPAL41,XSPAL42,XSPAL43 +---> XSPAL44,XSPAL45,XSPAL46,XSPAL47,XSPAL48,XSPAL49,XSPAL50 +---> XSPAL51,XSPAL52,XSPAL53,XSPAL54,XSPAL55,XSPAL56,XSPAL57 +---> XSPAL58,XSPAL59,XSPAL60,XSPAL61,XSPAL62,XSPAL63,XSPAL64 +---> XSPAL65,XSPAL66,XSPAL67,XSPAL68,XSPAL69,XSPAL70,XSPAL71,XSPAL72 +---> XSPAL73,XSPAL74,XSPAL75,XSPAL76,XSPAL77,XSPAL78,XSPAL79 +---> XSPAL80,XSPAL81,XSPAL82,XSPAL83,XSPAL84,XSPAL85,XSPAL86 +---> XSPAL87,XSPAL88,XSPAL89,XSPAL90,XSPAL91,XSPAL92,XSPAL93 +---> XSPAL94,XSPAL95,XSPAL96,XSPAL97,XSPAL98,XSPAL99,XSPAL100 +---> XSPAL101,XSPAL102,XSPAL103,XSPAL104,XSPAL105,XSPAL106 +---> XSPAL107,XSPAL108,XSPAL109,XSPAL110,XSPAL111,XSPAL112 +---> XSPAL113,XSPAL114,XSPAL115,XSPAL116,XSPAL117,XSPAL118,XSPAL119,XSPAL120 +---> XSPAL121,XSPAL122,XSPAL123,XSPAL124,XSPAL125,XSPAL126 +---> XSPAL127,XSPAL128,XSPAL129,XSPAL130,XSPAL131,XSPAL132 +---> XSPAL133,XSPAL134,XSPAL135,XSPAL136,XSPAL137,XSPAL138 +---> XSPAL139,XSPAL140,XSPAL141,XSPAL142,XSPAL143,XSPAL144 +---> XSPAL145,XSPAL146,XSPAL147,XSPAL148,XSPAL149,XSPAL150,XSPAL151,XSPAL152 +---> XSPAL153,XSPAL154,XSPAL155,XSPAL156,XSPAL157,XSPAL158 +---> XSPAL159,XSPAL160,XSPAL161,XSPAL162,XSPAL163,XSPAL164 +---> XSPAL165,XSPAL166,XSPAL167,XSPAL168,XSPAL169,XSPAL170 +---> XSPAL171,XSPAL172,XSPAL173,XSPAL174,XSPAL175,XSPAL176 +---> XSPAL177,XSPAL178,XSPAL179,XSPAL180,XSPAL181,XSPAL182,XSPAL183,XSPAL184 +---> XSPAL185,XSPAL186,XSPAL187,XSPAL188,XSPAL189,XSPAL190 +---> XSPAL191,XSPAL192,XSPAL193,XSPAL194,XSPAL195,XSPAL196 +---> XSPAL197,XSPAL198,XSPAL199,XSPAL200,XSPAL201,XSPAL202 +---> XSPAL203,XSPAL204,XSPAL205,XSPAL206,XSPAL207,XSPAL208 +---> XSPAL209,XSPAL210,XSPAL211,XSPAL212,XSPAL213,XSPAL214,XSPAL215,XSPAL216 +---> XSPAL217,XSPAL218,XSPAL219,XSPAL220,XSPAL221,XSPAL222 +---> XSPAL223,XSPAL224,XSPAL225,XSPAL226,XSPAL227,XSPAL228 +---> XSPAL229,XSPAL230,XSPAL231,XSPAL232 diff --git a/BACKUP/XART100/BBVDA.LOD b/BACKUP/XART100/BBVDA.LOD new file mode 100644 index 0000000..6671c10 --- /dev/null +++ b/BACKUP/XART100/BBVDA.LOD @@ -0,0 +1,5 @@ +;Memory ceiling for LOAD2 is $fffff000 (512 bytes below top) +***> fff6ba30 +ASM> BBVDA.TBL +FRM> CHEERS +;FRM> TROPHY diff --git a/BACKUP/XART100/BLANKJAM.BDB b/BACKUP/XART100/BLANKJAM.BDB new file mode 100644 index 0000000..7ea688d --- /dev/null +++ b/BACKUP/XART100/BLANKJAM.BDB @@ -0,0 +1,11 @@ +blankjam 2000 1000 255 1 1 9 +blankjam 448 1041 251 639 +0 471 268 0 0 +0 471 388 0 0 +0 471 508 0 0 +0 651 268 0 0 +0 651 388 0 0 +0 651 508 0 0 +0 831 268 0 0 +0 831 388 0 0 +0 831 508 0 0 diff --git a/BACKUP/XART100/BLANKJAM.BDD b/BACKUP/XART100/BLANKJAM.BDD new file mode 100644 index 0000000..8c36a30 --- /dev/null +++ b/BACKUP/XART100/BLANKJAM.BDD @@ -0,0 +1,130 @@ +1 +0 180 120 1 +    +  +          +  +           +   +    +         +      +        +   +              +    +   +   +  +   +   +   +     +    +   +                  +                   +            + +            + +         +   +          + +          +  + +        +   +   +     +   +            +      +       +                        +       +      +                   +    +      +   +      +   +                 +       +      +            +     +      +          +      +         +    +       + +         + +          +                                    +     +    +  +    +      +              +     +   +     + +   +    + +       +          +        +       +                 +        +        +     +       +      +         +          +    + +    + +     +                                             +    +    +                        +        +          +             +   +      +         +                           +     + +     +  + +      +          +                                               +          +         +                                +      +    +      BNBA_V_P 21 + $ +   $ , ,4 +, +$ +$ \ No newline at end of file diff --git a/BACKUP/XART100/BRUSH10.IMG b/BACKUP/XART100/BRUSH10.IMG new file mode 100644 index 0000000..710fc6c Binary files /dev/null and b/BACKUP/XART100/BRUSH10.IMG differ diff --git a/BACKUP/XART100/BRUSH12.IMG b/BACKUP/XART100/BRUSH12.IMG new file mode 100644 index 0000000..400f594 Binary files /dev/null and b/BACKUP/XART100/BRUSH12.IMG differ diff --git a/BACKUP/XART100/BRUSH20F.IMG b/BACKUP/XART100/BRUSH20F.IMG new file mode 100644 index 0000000..ba138d1 Binary files /dev/null and b/BACKUP/XART100/BRUSH20F.IMG differ diff --git a/BACKUP/XART100/BRUSH50.IMG b/BACKUP/XART100/BRUSH50.IMG new file mode 100644 index 0000000..f672881 Binary files /dev/null and b/BACKUP/XART100/BRUSH50.IMG differ diff --git a/BACKUP/XART100/BUTTONS.IMG b/BACKUP/XART100/BUTTONS.IMG new file mode 100644 index 0000000..37f87db Binary files /dev/null and b/BACKUP/XART100/BUTTONS.IMG differ diff --git a/BACKUP/XART100/CHEER.IMG b/BACKUP/XART100/CHEER.IMG new file mode 100644 index 0000000..dd55c22 Binary files /dev/null and b/BACKUP/XART100/CHEER.IMG differ diff --git a/BACKUP/XART100/CHEERS.BIN b/BACKUP/XART100/CHEERS.BIN new file mode 100644 index 0000000..75acb59 Binary files /dev/null and b/BACKUP/XART100/CHEERS.BIN differ diff --git a/BACKUP/XART100/CHEERS1.VDA b/BACKUP/XART100/CHEERS1.VDA new file mode 100644 index 0000000..e36ae07 Binary files /dev/null and b/BACKUP/XART100/CHEERS1.VDA differ diff --git a/BACKUP/XART100/CITIES2.IMG b/BACKUP/XART100/CITIES2.IMG new file mode 100644 index 0000000..9281d0e Binary files /dev/null and b/BACKUP/XART100/CITIES2.IMG differ diff --git a/BACKUP/XART100/CITNAMES.IMG b/BACKUP/XART100/CITNAMES.IMG new file mode 100644 index 0000000..355d7a6 Binary files /dev/null and b/BACKUP/XART100/CITNAMES.IMG differ diff --git a/BACKUP/XART100/COLHDS1.IMG b/BACKUP/XART100/COLHDS1.IMG new file mode 100644 index 0000000..8a1abf2 Binary files /dev/null and b/BACKUP/XART100/COLHDS1.IMG differ diff --git a/BACKUP/XART100/COLMUGS1.IMG b/BACKUP/XART100/COLMUGS1.IMG new file mode 100644 index 0000000..3ac93a0 Binary files /dev/null and b/BACKUP/XART100/COLMUGS1.IMG differ diff --git a/BACKUP/XART100/COURT.BIN b/BACKUP/XART100/COURT.BIN new file mode 100644 index 0000000..c6f0afc Binary files /dev/null and b/BACKUP/XART100/COURT.BIN differ diff --git a/BACKUP/XART100/CREDBALL.IMG b/BACKUP/XART100/CREDBALL.IMG new file mode 100644 index 0000000..e3fea94 Binary files /dev/null and b/BACKUP/XART100/CREDBALL.IMG differ diff --git a/BACKUP/XART100/CRTFLR.IMG b/BACKUP/XART100/CRTFLR.IMG new file mode 100644 index 0000000..911a84a Binary files /dev/null and b/BACKUP/XART100/CRTFLR.IMG differ diff --git a/BACKUP/XART100/CRTREF.IMG b/BACKUP/XART100/CRTREF.IMG new file mode 100644 index 0000000..685b51f Binary files /dev/null and b/BACKUP/XART100/CRTREF.IMG differ diff --git a/BACKUP/XART100/CRWDFLR.IMG b/BACKUP/XART100/CRWDFLR.IMG new file mode 100644 index 0000000..8a1d73c Binary files /dev/null and b/BACKUP/XART100/CRWDFLR.IMG differ diff --git a/BACKUP/XART100/DCSLOGO.IMG b/BACKUP/XART100/DCSLOGO.IMG new file mode 100644 index 0000000..4b069a0 Binary files /dev/null and b/BACKUP/XART100/DCSLOGO.IMG differ diff --git a/BACKUP/XART100/DESIGND.IMG b/BACKUP/XART100/DESIGND.IMG new file mode 100644 index 0000000..a54427a Binary files /dev/null and b/BACKUP/XART100/DESIGND.IMG differ diff --git a/BACKUP/XART100/DIAGP.IMG b/BACKUP/XART100/DIAGP.IMG new file mode 100644 index 0000000..75452f4 Binary files /dev/null and b/BACKUP/XART100/DIAGP.IMG differ diff --git a/BACKUP/XART100/ENTER4.BDB b/BACKUP/XART100/ENTER4.BDB new file mode 100644 index 0000000..ff44a10 --- /dev/null +++ b/BACKUP/XART100/ENTER4.BDB @@ -0,0 +1,66 @@ +ENTER4 2000 1000 255 2 13 63 +ENTER4 1342 1800 121 350 +ENTERKIT 685 1168 130 373 +A00 737 270 63 3 +A00 737 166 4E 7 +A00 737 170 6C 12 +F00 745 170 3 0 +F00 750 340 6 0 +F00 750 170 9 0 +E00 800 170 9 0 +F00 812 340 6 0 +A00 836 166 51 8 +F00 846 340 6 0 +F00 846 170 9 0 +F10 927 170 3 0 +A00 937 166 54 9 +A00 937 270 60 11 +F00 939 170 3 2 +F00 944 340 6 2 +F00 944 170 9 2 +E00 987 170 9 2 +F00 999 340 6 2 +A00 1037 166 57 10 +F00 1040 340 6 2 +F00 1040 170 9 2 +F10 1121 170 3 2 +A00 1129 170 78 12 +A00 1381 139 69 12 +A00 1381 143 6C 12 +F00 1389 143 3 0 +F00 1394 143 9 0 +F00 1394 313 6 0 +F00 1394 263 12 4 +F00 1394 225 15 4 +F00 1394 186 18 4 +F00 1394 148 1B 4 +F10 1475 143 3 0 +A00 1483 142 6F 12 +F00 1485 143 3 0 +F00 1490 143 9 0 +F00 1490 313 6 0 +F00 1490 148 21 5 +F00 1490 179 24 5 +F00 1490 219 27 5 +F00 1490 259 2A 5 +F10 1571 143 3 0 +A00 1579 143 72 12 +A00 1581 139 66 12 +F00 1583 143 3 2 +F00 1588 313 6 2 +F00 1588 143 9 2 +F00 1588 261 33 6 +F00 1588 220 36 6 +F00 1588 180 39 6 +F00 1588 148 3C 6 +F10 1669 143 3 2 +A00 1677 142 75 12 +F00 1679 143 3 2 +F00 1684 143 9 2 +F00 1684 313 6 2 +F00 1684 148 42 1 +F00 1684 181 45 1 +F00 1684 219 48 1 +F00 1684 255 4B 1 +A10 1765 143 3 2 +A00 1773 143 78 12 diff --git a/BACKUP/XART100/ENTER4.BDD b/BACKUP/XART100/ENTER4.BDD new file mode 100644 index 0000000..3d2d3bc --- /dev/null +++ b/BACKUP/XART100/ENTER4.BDD @@ -0,0 +1,9327 @@ +32 +63 200 74 1 +  +   + +   + + + + + + + +  + + + + +   +  +   +  + + +       +  +  +        +  +   +  + + +  + + + + + + + + +  + +   +   + +     + +   +   + + +            + +   + + +   + + + + + + +  + + + +     +   +       +   +  + + +    +  + +    + + + +  + + +    +  +       +       + +    + + + +    + + +  +       + +   + + +   +  +            +   +   + + + + +  +   + + + + +         +   +  +  +       +  + +  + +   + +    + + +       + +  +  +  + +   +   +        +  +   +  + + +  + + +  + +   + + +    +   +  +  + + + + +  + +     +              +   + +  + + + +    + + + +  +       +    + +    +  +        +  +    + + + + +  + + +  +  +  +     + + + + + +   +   + + + +         +     + +    + +   +    +  + +   +  + + + +  +  + + + + + +      +         +    +    + + + + +     + +  + +   + + + + +   +  + +  +             + + +   + + +   +   +  + + +     + +  + +   +            +   +  +  + +  + +    +  + +  +  + + + +     + +  +  +   +  +              + +   + +    + + + +     + + + + +   +   + + + + +     +  +  +              + +  +  +   +  +   +  + + +  + + + + + + + + + + + +  + +    +   + +                +     + +   + + + +  + +  + + + +   +   +    +                   +     +  +   + + + +  +       +                       + + + + +   + +   +  + +     + +                       + + + + + +  +  + + +  + + + +                   +   +    +   + + +   + + +                      +   +  +  +   +  + + +  +                      +       + +  +  + + + + + +   +  +                          + + + + + + + + + + +   + +                 +      + +    + + + +   +   +                  + +    +     +                      +    +   + + + +  +                     + +  + + +      +                      +  +     +    +              +   + +    + +   + + +  +  +                     +  + + +   + +  +  + +     +                         + +  + + + + + +   + +     +    +                      +     + +   +    + +   +   + + +  +                       +   + + +  +  + + +   + + + +  +      +                      +  +  + + + +   + + +             +                +    + +  + +   + + +  + + + + +  +                       +  + + + + + +   +   + + + + +    +  +   +                         +  +  + + +  + +  +  + +                 +   +   +  + + +    + +   +  +                 + + +  + + + + + +  + +  + +  +         +              +  +  +  + + + + +   + + + + + +  +   +                    +  +    + + + + +  + +  + + +    +  +        +  +                 +   + +  + + +   + + +     + + +                     + + + + + +  +    + + + + +     +      +         +    +  + + + + + +  + + + + +                         +  +  + +    + + +   + + +  +      +   +                  + + + +  +   + + + + +        + + +              +     + + +  +  +   + + + + +   +     +                    + +     + +  + +    + +      + +                +  +  + + +   + + + + + +   + + + +      +  +                +   + + +   +  +     + + +        + +            + +  + +  + +  + +     +   +      +  +                        +  +  + + + +     +     + + +  + +                 +  + +  + + + + + + + +    + + +     + +  + +              +   + +          + + +     +               + +      + + +       +    + +                    +    +   + +  + +   +  +  +    +  +               +   + +     + + +  + +    + +  +  +                  + +    + + + + + +   + + + + + +  +            +   + +     + + + +     + +  +                 + +        +     + +   +                +   + +  +      + +   +  +               +  +    + + + + + + +    + +  +                 +   + + + + + +  + +   + + + + +                   + + +     + + + + +   +   + + + + + + +  + +  +                 +  +     + + + +  +   + +                      +   +   + +  + +       +   +                 +     +  +  + + + + + + +      + +                 +  + +  + +      + +  +       + + + + +                 + +        + +         + +                  +   +     + + + +     + +  + +                     + + + + +   +   + +                 +   +   + + + + + +   + + +   +  +           +      + + + + + +   + + +  +      4E 100 104 1 +  + + + + +  + + + + + +   + + + +  +          + + + + + +  + + +   + + + +        + + + + + + + + + + + +    + + +   + +           + + + + + + + + +  + + +  + + + + +           + + + + + +  + + +  + + + + + +           + + + + + + + + +  + + + + + +            + + + + + +  + +  + + + + + +        + + + + + +    + + + + +  + +        + +   + + + + + + + +            + +    + + + + + + + +             + + + +  + + + + + + + +            +  +  + + + + +  + + +         +  + + +  + + + + +  + + +              +  + + + +  + +              + +  +  + + + +  + + +   + + +         +   +  + + + +    + + + + + + + +   +     +   +  + + +   + + + + +  + + +      + + +     + +  +  + + +  + + + + + +      + +    + + + + + +   + + +  +  + + + + + + +    + +     + + + + + + + + + + + + + + + + + +   + + +    +    + + + +   + + + +  + + + + + + + + + + +  +    + +      + +  +  + + + + +   + + + +  + +     +     + + + +  + + +  + +   + + + +     +        + +  + + + + +   + +  + + +  +    + +      + + + + + + +   + + + + + + +             + + + +  + +   + + + + +       + +  + + + + +  + +       + +    + + + + +  + + + +   + + + + + +    +    + + + +   +  + +  + +  + + +   +    +     + + + + +  + + + + + + + +   +    +       + + + + + + + +  + +  + + + + + +      +  +   + +  + +  + + + + +  + + + +  + + + + +      +  +    + +  + + + + + + +   + +  + +  + + +    +  +     + +  + + + + + +   + +  + + + +  + +    +  +      + + + + + + + + + + + + + +  + + +   + + +   +     +  + + + + +  + + + + + +   + +  + + +  + + +   +       + + +  + + + + + +  + + +   + + +    +  +        + + +  + +  +  + + +  + + +  +  +        + + + + + + + + + + + +  + +  + +  + + + +    +  + +      + +   + + + + + + + + + + + + + +  + + + + +          + +  +  +  + + + + + + + + + +  + + + +      + +  +    +   + + + + + + + + + + +  + + + + + +      +       + + + + + +  + + + + + + + +  + + + + +      +   + +  + + + + +   + + + + + +   + + + +    +     +     + + + + +  + + + + + + + + + + + + + +   + + + +         + + +    + + +    + + + + + + + + + + + + +  +   + +    + + +  +        + + + +  + + + +  +   +     + +     + + + + + + + +  + + +    +   +      + +     +  + + + + + + + + + + +  +              + + + + + + + + + + + +  + + + +        +    + +     + + + + + + + + + + + + + +  + + + + + + +       + +   +   +  + + + + + + + + + + + +  + + + + +      +     +      + + + + + + + + + + + + +  + + + + +         + +     + +   + + + + + + + + + + + + + + + +    +    + +      + + + + + + + + + + + + + + + + + +  + + + + +   + +   +        + +  + + +  +  + + + + + + + + + +     +  +    +  +     +  + + + + + +  + + + +         + +  +   + + + + + + +  + + + + + + +  +       +        + + + + + + + + + + + + +               + + + + + + + + + +  + + +    + +    +      + + + + + +  + + + + +  + + +    +   +  +       + + + + + + +  + + + + +  +    +   + + + + +  +   +  + + +  +   +  + + +       +  + +  +     + + +  + + + + + + + + + +   + +   + + +   + +    +  +       + + + + + + + + + + + +     + +  + + +   +     + + +    + + + + + + +  + + +    + + +  +     +  +        + + + + + +  + + + + +  + + +     + + + + + + + + +    +   +    +   + + + + + + + + + +  +  +  + + + +   +    +    +   + +  + + + + + +    +  + +  + + + +   +         +   + + +  + + + + + +    + +  + + + + +    +          + + + + +    +  + + + + + +    + +     +  + +    + +  + + + +    +  + + + + + + + +     + +    +     + +  +  + + + + + + +  + +    +     + + +   + +  + +   + + +  + +  + +       +   + + + +    +      + +   + + +    + +  +  + +  + + + + +  + + +     + +  +  + + + +  +  + +    +    + + +   + + + + + +  +   + + + +     + + + + + + + + + +      + + + + + + +    +  +      + + + + + + + +  +       + + + + +    + +  +    + + +  + +   +    + + + + + +  +  + +    + + +  + +     + + + + + +         +    + + + +  +    + + +      + +   +  + +  + + + + + + + +  + + +  +  +   + + +   + + + + + + +    +    +   + + + + + + +  + + + + +  + +  + + + + + +     + +    + + + + + + +  + + + +  + + +  + + + + + +  + + + +   +   + + + + +  +  + + + + + +  + + + +  + + + +      + + + +  +  + + + + + + + +    + +  +  + +   + +  + +    + + +  + + +  + + + + + + + +  +  + + +  + + +   + +     + + + + + + + +  + + + + + +  + + + + +   + +   +     + + + + + + +  + + + + +    + + + +   +  + + + +     +  + + + +  + +  + +       + + +      + + +        + + + + + + + + +   +      + + + + +  + +       + + + + + +  + +       + + +  + +      + + + + + +  + + +     + + +  + +        + + +  + + + + + + +   + + + +  +     + + + + + +  +  +    + + + + + + +     +  + + + + +   + +  +      +  + + + + +   + + +  + +  + +   + + + +   + +  + +   +    + +    + + + + +  + +     + + +  + +    +  +  + + + + + + + +    +   +   +  + + + +   +   + + + +   +  + + +     + + +  +  +  + + +  + + + +  + +    + + +  + +  + +  + + + + +    +       + +  + + + +   +    +  + + + + + +   +  +  + + +  + +    + + +   + + + + + + +  +   + + +  + + + +   + + + + + + + + +    + + + + 6C 8 174 1 + + + +  +   +     + + +  +   +   + +   + + +  + +  +  + +     +   + +  + +     +  +   + +  +  +  + +  + + +   +   + +  +     + +  + +     +   +    +    + +  + +     +    +     +   +   + +  +   +  +   +  +  +   + + + + + + +  + +  +  +   +   + + +  +   +    + +  + +     + +  + +  + +  + + + +    +   +   + + +   + +   + + +  +  +   +  + +  + +  +  +  + +  + + + + +  + + +  + + + +  + + + + + + + + +  + + +  + +    +    +   +  +  + +  +   +  +  +  +     + + +   + +    +  + + +   + +    +     +  +   +  +   +   +   +  +       + +   +    +  +  +  +   + +   +  +   +    + +    + + + + +    +      +    + +3 8 175 1 +]V]]V]OOSOcHHHHiBBBCn;;;;n;155n<155n;113nB+11nB*-1iH*,-iO(*-iP&**iV&(*i]"'(cc &(gi$(ci"&ck"&ci"]i!"]e"]c&]c&]c'Vb)V]+T]-V]1O[5OV;OV@OVHOVOIVVN]] O]a H]cO]cH]cHYcHV`DVaBV]BV]AUWHOD?HVH>LROBHVH +BHVH DNVH GHVO HKVO HLVP JIVV HNVV HHVV OOVV OIVV UOYV OV]VVV]VVV][V]]]VXa]]`cb_]cc`cfc"cchg"ccfc&ccig&ciic(giic(iijc*iiic*iimc*iin]*inmX*iil\*ikj[*iim\*iikV+imnV,iinV-iilV-iinS-imnV1iknP1imnU1ilnO2iinO1inoM5iknK3inrH5insH5insH9insE:nnpG9knsB;nnsF;knsB;nnsB;nns@;nns?;BBHHMOPVVOROOPPOOROVVPOMHHBB;?>BBBCB?=@BDHOOOOSPUTOOH;BBssssssprsqsssssrpsssopssnsnsssnspsssssssssssssssssspsnsssnsnssposssprsssssqsrpssssss51 104 104 0 + + +  + + + + + +  + + + + + + + + + +    + + + + +  + + + + +    + + + + + + +  + + + + + + + + +  + + + + + +  +  + + + + + + + + + +  + + + + + + + +  + + + + + + +  + + + + + + + +  + + +    + + + + + + +   + + + + + + + + +  + + + + + + + + +   + + + + +   + + + + + +       + + + + + + +   + + + +    +  + + + + + +     + + +  + + + + + + +   + +  + + + +     + + + + + + +    + + + + +    + + +  +  + +  +  + +   +   + + + + + +    +    + + +    +   + +  + + + + +  + +   + + + +      +  + + + + + + +     + + + +      +  + + +    + +   + + + + + +          +       + + + + +    +   + + + +     + + + + +     +     + + + +        + + + + +  + + + + + +  +    + + + +  +       + + + +   +     + + + + +   + +   + + +    +  +    + + + +    + +  + +   + +    +  +    + + + + +    + +  +   + + + + +    + +  +  + + +        +      + +    +    + + + + + +      +   + +     +         +  + +       +  + +     +      + + +         + +    +         +  + +            + + +          +  +    +  + + + +         + + +    +       + + + +  +         + + + + +       +   +          +        +  +        +   + +         + +  +       +       +      + + +           +                    +  +  +            +  +              +           +   + +   +                   + +    + +             +     +    + + +  +        + + +           + + + +      +   + +  +      +    + + +     +   +     + +      +        +        + + +      + +                           + +  +    + + + +        +          +  +    + +    +   +    +         +  + +   +54 100 104 0 +         + + + + +     +  + +   + +     + +    + +  +         +    +     +   + +   +  + +  +      +  +    +          +  +  +    +  + + +  +  +         + + +    +      +   + +   +   + + + +    +  + +  + + + + + + + + + +        + + + + + + + + + + + +       +   + + + + + + + + + + +    + + +   + + + + + + + + + + + +    + + + +  + +  + +  + +    + + + +  + + + + + + + + + + + + +  +   + + + + + +    + + + + + + + +   + + + + + + + + + + + + + +    +      + + + + + + + + + + +  + + + + +   + + + + + + + + + + + + + +  + + +     + + + + + + +   + + +   + + + + + + + + + + + + + + + +  +     + + + + + + + + +  + + +   +  + + +  + + + + + + + +    + +   +  + +   + + + + + + + + + + + +  +   +  + +   +     + + + + + + + + + +   +      + + + + + + +  +  +   + +  + + + + + + + + +       +  + + + + + + + + +  +       +   + + + + + + + +  +  + +     +  + + + + + + + + + + +       +    + + + + + + + +  + +     +      +   + + + + + + + +   +         + + +   + + + + + +  + +   +    +  + + + + + +        + + + + + + + + +   + +   +  + + + +  + + + + + + +      + +     + + + + + + + + + + +  +    + + +  + + + + + +  +   +   + +   + + +  + + + + + +     +   + + + + + + + + + + + + +     + +  + + + + +  + +      +     + +  + + + + + + + +  + +       +   +  + + + +  + + +   + +   + + +  + +   + + +  +     +    + + + + +   + +  +   +   + + +  + + + +   + + + + + + + +    + + + + + + + +    + +        + +  +  + + +   +        + + + +  +  + +    +  + + + + + + + + + +   +  + +  +   + +  + + + + + + + + + +   + + +     + + +  + + + +  + + + +    + +   +    + +  + + + + +  +   + +    + +   + + + + + + +  +   + +     + + + + +   + + + +   +  + + + + + +  + + + + +  + +     + +  + + + + + +  +  + + + + +    + +   + + + + + + + +  + + + + + +  + + +   + + + + + +  + + + + + +  + + + +   + + + +  +  + + +   + + + + +  +    +  + + + +  + +  + + +  + +     +  + + + + + + + + + + +  + + + + + +    + + + +  + + + + +   + + + + + +  + + + +     + + + +   + +  + + + + + + + + +   + + + + + +  + +  + + + + + + + + +  +  + + + + + + + + + + + +  + + + + + + + + + + +  + + + + + +  +  + + + + + + + + + + + + + +  + +  + +  + + + + + +  + + + + + + + +  + + +  + +   + + + + +    + + + + + + + + + + +  +   + + + +  + + + + + + + + + + + + + + + +  + +  + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + + + +  + + + + + + +  + + + + + + + + +  + + +   + + + +    + + + + + + + +  + + + + + + + + + +  + + +    + + + + + + + + + + + + + + + + +  + + +  + + + + +   +   + + + + + + + + + + + +  + + + + +   + + + +  +  + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + +   + + + +  + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + +  + + + + +   +  + + + + + + + + + + + +  + + + + + + + +  +  + +  + + + + + + + + + + + + + + +   + + +  + + + + + + + +  + + + + + + +  +  + +   + + +    + + + + + + + + + + +  + +  + + + + + + + + +   + + + + + + + + + + + + + + + +   + + + + + +  +  + + + + +  + + + + + + + + +       + + + + +  +  + + + +  + + + + + + + + +   + + + + + + +  + + + + + + +  + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + +    + + + + + + + + + +  + +  + + + + + + + +  + + + + + + +   + + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  +   + + + + + + + + + + + + + + + + + + + +  + + + +   + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + +     + + +  +  + + + + + + + + + + + + + + + + + + + + + +  + + +   + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + +    + + + + + + + + + + + + + + + +  + + + + + + + + +      + +  + + + + + + + + + + + +  + +  + + + +  + + + + + +  +     + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + +  + + + + + + + + + + + + + + + +  + + + + + + + + + + +60 200 74 1 +       + +   +  + +    +   +  + + + + + +     +     +      + +   + + +  + + +   +          +   +  + + +    + + + + + + + + +          +       + + + + +      + +  +    + + +  +   + + + + + +     +     + +  +    + +      + + + + + +            +   +   + +   +      + + + + + +        +    +   +  + +    +    + + + + + + + +           +   +  +  +  + + + + +  + + + +                + +   + +    + + + +        +     + + +  +     +      + +  + + + + + + + +                    +     + +    + + + + +           +  +    +  + +       + + + + + + + + +                 +  +     + +   + + + +  + +  +           +     + + + + +    + +   + + +  + + + + +           + +       + + +    + +  + + + + + + + +  +         +       + +     + + + + + + + + + + +  + +         +  +    + +   +     + + + + + + +  + + + +        +  + +  + +   +    + + + + + +       +      +  +   +  + + +       + + + + + +  + +                + + + + +    +      + + + +  + +  + + + + + +         +    +  +    + + +   +     + +  + + + + + +  + + +      +  + +       + + + + + + + +   + + +      + +  +  +   + +    +   + + +  + + +  + + +  +  + + + +            + +   + + +   + + +   +      + + + + +  + + + + + + +      +       + +    + +  +   +    +  + + + + + + +  + + + + + + +        +  +  +     + +  + + +   +  + + + + + + + + + + + +  + + + + + + + +      +     +  + +  + + + +        + + + + + + + + +  + + + + +          +  + +     + +   + + + +  + +  + +  + + + + +             +    +  + +  + + +      + + +  + + + +  + + + + + + +            +    + +      + + +  + + + + + + + + + + + +            +     +  +     + + + + + + + + +  + + + + +          +  +        + + + +      + +  + + +   + + + +                  + + + + + +    + +    + + + +  + + + + + + +               + +    + + + +  + + + + + + + +    +    +    +  + +   + + +  + +  + + +  + + + + +  + +        +       + + +  +  +    + + + + + + + +  +  + + + + + +       +       + + + +      + + + +  + + + +  + + + + + + + + +             + + +    + +  +  + + + + + +    +       +     + + + +   + + + + + + +  + + + +     +        + + + + + +  +  + + +   + + +  + +  + +  + + +  +     +  + +     + + + +     + + +  + + + +  + + + + +   +           +   + + +   + + + + + + + + + + + +        +  + +  + +   + + + + + + +  + + + + + + + +   +      + + + +      + + +  + + + + + + + + +         +    +   +  + +   + + +  + +  + + + + + + +  +        + +    + + + + + + +  + +  + + +    +   +   +  + + + + + + + + + + + + +  + + + + + + + +    + +      + +  +   + + + + + +  + + + +  + + + + + +    +  +  + + + + +       + + + + +   + +  + +  + + + + +       + +     + +   + + + + +     +   +    +    + +  +  +  + +       +     + +    +  +  + + +  + + + +          +   + + + + +  + +    +    + + +            +  + +   + +  +    + +   + + + + +             + +  + + + +   +  + + + + +  +    +    +   + + + +   + +  + + +         +  +    + +  + + +   +   +           + + + +   + + + + +   + + +   +       +   +  +   + + + + + + + + + + + + + +            + + + + + + + + + +           + +  +  + + + + + + + + + + +         +     + + + + + + +   +       +       + +   + +  + + + +  + +  +   +   + +   + + + +  +  + +   + + + + + + + + + + +           +     + + + + + + + + + + + + + + + + + +         +      +   + + + + + + + + + + + + + +       +    + + + +   + + + + + + + + + + + + + + + + + +       + +    +      + + + + + + + + + + + + + + + + + + +         +      + + + + + + + + + + + + + + + + + + + + + + + + +          +      + + + + + + + + + + + + + + + + + + + + + + + + + + +                + + + + + + + + + + + + + + + + + + + + + + + + +   +         +    +  + + + + + + + + + + + + + + + + + + + + +   +    + +    +        + + + + + + + + + + + + + +57 100 104 0 +                                   +                                                           +                +                                                                    +                                                                     +                                           +           +           +             +    +             +         +                     +      +        +           +           + +     + +             +          + + +     +                  +   +           + + + +  +                + +  + + + +             +   + + + + +                    + +  + +                   + + + + + + +      + +       +   + + + + +   +    + + + + +   + + +   + + + + + +     + +        + + +    + +  + + +    + + +    + + + +    + + + +       + + + +       + + + +    + + + +       + + +          + +  + + + + +    +  + +       + + + + +   + + + +  + +   + + + +   + + +  + + + + +    + + + + + +   + + + +   +  +       +  + + + +  + + + + +       + +           + + + + + + + + + + + +    + +  +   +  + + +  + +    +  + + + + + +  + +   + + + + +  + +       + +  + + + + + + + + +   + + +   + + + + + + +         + + + + + +  +  + + + +  + +  + + + + +  + + +       + +   + + + + +  + + + + + + + + + + +  + + + + + + + +        + + + + + +  + + + + +     + + + +  +    +    + + +  + + + + +  + + + + +  + + + +  + + + + +       + + +  + + + +   + + + + + + + + + + + +  + + + + +          + + + + + + + +  + + + + +  + + + + + + +  +        + + + + + + +  + + + + + + + + + + + + + + +  + +  + +   +    + +  + + + + +  + +   + + + + + + +   + + + + +   +  + + + + +  + + + + +   + + + + + + + + +  + + + + + + + + +        + +    +  + + + + + + + + + +   + + + +  +       + + + + + + +  + + + + + + + + +   + + +   +      + + +  + + + + + +  + + + + +     + +  +  + +     +    + + + + + + + + + +  + + + +    + + +   + +         + + + + + +  + + + + +     + + + + + + + + + +       +  + + + + + + + + +  + +      + + + + + + + + + + + + + + +  78 8 174 1 +     +                      +   +     +              +     +                         +                                                                                                                                                                                                           69 204 4 1 +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +  +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 84 50 1 + + +      + +  + +      +    +     + +    +   + +  +   + +  +  +   +  + + +   +   + + +     +  + + + +   +      +   + + + +   + + +          + +  +   +   +       +  +  +  +       +        + +  + +      +   + +  +  +   + + +  +  +    +   +  + +  + +   + +     +   + + +  + + + +        +  + + + +  + + + + +  +   + + +  + + +   + +  +  + + +  + + + + + +   + + + + + +     +    +  +   + +  + +     +   +  +  + + +  + + +   + +   + +  + + +   +  +   +  + + +  + +      + + + + +  + + + + +  +     + + + + + +   +  + + +    + + +    + + +  +  +   +  +   +  + + +   +  +     +   +  + + +    +         + + + + + + +    +  +   +  + + + + +   +  + + + + +     + + +  +  +  +     +  + +  + + +    + +  + +  +  + +   +  + +           +    +    + +   +       + +      +  +        +  +   +       +  +  + +  +  +            +  + + + +   + + +  +   +   + + + +  + + + +   + + + + +  +   + + +  + +  + + + +  + +       + +   + +    +    + + +  +  + + + +  + + +   +  + + + + + +   + + + + + + +  +  + +    + + +    + +  +    +    + + + + + + +  + +             + +   +  15 84 38 1 + + + +  + +  )/)(      +  + + + + + +  +   +  ()/  +  +  +    + + + + + +    ()(  + +  + +   + + + +  +  ( ! +  + +   +  +   +      +     + +  +            +   + + + + +     +  +  + +       !(   + +   +   + +   +(+  + +  +   +    ((  ! + + + +  +   +    ((   +  + +  +  +  +   +   +   +(+    +  +    + +   +    ((   +  + + +      +   +   +   +  + +      + + + +   + +       +    +  +  +  + +          + + +   + +   +  +   + +        + + +  +       +       +   + + +     + + +   +    +  + + + +    + +   +   + + +   + +  +  + + +   +    + + + +  + + + +   +   +       + + +    + +  +  +     +   +      +   + + + + +    +   +    + + + +  + +   + +  +   +  (  + + + + + +  +     + +  + +  + + + +   +   +   + + +    + + +  + + + +  +   + +      + + +  + + +  +       + +       +    + +  +  + +  +   +      +  +   +   +  + + +       + +   + +    + + + +  +    + + + +   + +  + + +         +  +  +   +  + +  +     +      +  + +    +  +   +   +   +        +   + +    + + +   + +   + + +    + +   +   + + +  + +  + +  18 84 39 1 + !"##  #$$%%&"'""'$())(((()))))))(*&! &+#%, %   + +!! !""&-%'"%# !' +)))((())))))))(+&!".$.##%   +!%# !"""#%#$-# %#- #()))(()))))))))(+. .,!,    + + '" '+$--% " " $-#.%,))((())))))))))($#'%$'%$, +    !" !$&# " "'&...-#&()(((()))))))))(*$"%,$. , +   + '!.% "!' #!'**&.&$$)))(((()))))))))(*,"'.$.. %    + '!# ''" "''##"+($--$+()/))((()))))))))(+!'#%$ ,    ! + %#!'"!!' %# '%+$..$$$*)//)((()))))))(((+# %#,, $, +     + %% '''% "'"" #.,,,$)//))(())))))(((+$% %#,%, +   + + %'!'!''!" "'!!!".,&&$)//))))))))))((+$ ' $$$,% + + +!  ! ''!!"!!'"''".#.+)//))))))))))(+$ %"%$$$$ ! +   ! "!!!'" "!'#$()/)))))))))))(+,#  % $$$  +   +  + + +'%#%%..''!,)//)))))))))))(+,'% ,  !  + +   +!  '!%%%%%#####% %)//)))))))))))(+,,$$ + +   +  ! %% .%%%###.# %+)/))))))))))((+,,+% +   ! %'!!%%%%###. )/)))))))))(((+,!! ! + + + + + +!  +!%%#####...,$+)//)))))))(((((+,%'! '' + +     + + +!%%%###...,$()//)))(((((((((+,%!! + + !!   +    + +  ! +! %%%%# #$,,()//))(((((((((++,%! ! +!     + + + +!! '!!' %%%#$$,$()//))(+++(((((++,%'% +  +!   + +  + + + +!!! %%''!!#$+()//)(+$$$+++((++,%' ! +    + + +   + + +! %%" ,$,$)//))( ,$++(++,!! + + +    +  + +!!!,+$)//))($ %% $+++!  + ! +  + +     + + +!'%  !!##+)//))($ $++,"! +!    +  +  +!%  '!%()//))(  ,$$ ! + + + +    +     %%%  !!  +)//))(      +   + +  +   + +  !%%%%!' '',)//))(% !! + +  + + + + +   +%%%  % )//))($  ' +  +   +   + +  + +!%%% '% ' + (//)(( % ',  + +      +   !% + +! +  )//)(+ +         !! + !! )/))(+  ! +   + + +    ! + % +  '(//))(+  + + +   + +    ! +   !!)//))(+$  + +      +    + !+))))(+, ! + +     +    !  ! //))(  +   + + ,  +! + ' +//))(  + +  + + + +   +   +//))+ +  +   + +  + + +    ,  (//)(      + + + + + + + !   (/))      +1B 84 38 1 +01 2223332100.&94994455444455-%#.9555599559&:55996% 773333371 11133332110,899554445955545:&&%#-955999559695449:.#%% 3373333371 117333332112 $95:;44444;-555%;:6:::9995995556;5449:.#&#"333333333371 11237010 &*95;:544456654& .&&;95559::9456-9559;;:6;-.!277373333711123377201.*995595455559; '%;;9599669556;6549&#*999:& + 2777233337111233372771.*9445954444-'".&99969445:#;9445*6959-;. +77007773217223332277 ,&!!64444:6445#"!'%:;&69;&;545:.*9555*-659;%% +777027777777223333211277 -.:4444#"55# !!%69*9559-9596&;4449-&699.#&#%# 7722777770007273333011111 .#;;654596%9"";96:5599545-.9449&&&*99#%:6:--# +207777770111123333011111 + + %#&*9*94999*:'! #.;::659*944*.-9559;.:9999-;*6:.#7777772000103330110011 !.:95499544*%" %#&;&.;:69959#;5449#%-955*&.&.&- "372000010111077#.699995446%''.-&69*96666&-9449;.;9496&..::%" .;!337000020721111122 %'.*59955.'!"%%%-99999599.#:959;#:449;.%#:99.%&*6;,#37010117222110 '"-*955&%!!%*:.-*999549&:9549#%-949;..##69.%-<*;;$. 333770111711771111 + ' -:5:%'!".*9*:;:;999:&;9445*&-949;##&-;;###*9*6:&% 330007111022111  .9;!! ;*6-;9966:&%9944:&:459&%%:99-:*::;;.% 2377711111201   !.6%!! .---&*9999;.&6999&.;949&#&..99:&&99<866-.#%7777337111111222 +%!.6%!".::#:9996&&9449:#.696.#-*6:*:&-%9<<<*;&.#. 12331101173 #!-."!! .:;&--6*9*&#-95446.:999;%#6**:&#&."&<9*6-&#&  17311122273 .##'"%---𐾴.%-94449664445966995*9<: %:**:-&--,$ 172731027122 %#'" &::&&%.<45<96944444<5444445444444//4;&#&8;-&-$$$$  111711112 + %%% ''" #6:&%#&<44954///////////////////////4<*:*-&-&-+$ 11271102  + %#%"!".&..%;<4444)//////////////////////////)*.;-;:;++.#$$  1002111227 !.#!!.:&-44////////////////==/=====//////=)*%;;;*8$#,$,  10001112722!%'!-;&%*4//////////////=5)))))))))5=//==))+"#&**$+*$%  000772 !'! ..#&84/////////=555)))<<<<<<<<<<)))))))8;!'-<8*8*   1007337  ! .*54//////=5)))))<<<8********8<)))))<*-'&*<<8$%! +  077372 +  !! &<54///==5))<<<<<88***+*+6666*8<<))<8+&  -<)$$$%' + 273371  + !'!!''#:8<9)///=))<<<<88***6666++6:;;:+8<<<<8*- $*$&,+,  + 03337 !''!'-:+*+)//=))<88888**66666+**+:-&&;*8<<<8*-.8+-$$ %17 +!!!!;-&;$)//=)<88888*+666666+***6-..-6*8<<8*- !&$$8**$  2727  '!!&#%.*///))8****+666666++*88*+;-..;*8))8*-'!.$)($$% + + 2777! '''&#%.)//))*+++6:;-;;;:6+*88<8*+;&.-+8))8*&!!%+*+$,  +7  '!''"#%&)/=8*$;--.###..&-:+88<<<8*+;-;+8))8+&!"',*$$, ,, 27 + +! '!!"";8+&.##% %%.;*8<))<<8*+$$+8))8+.,$$$# , +2 !!'"'-+*#"!'"%-+8<)))<88**+*8((*+%"%"#,$$,$ 3 !  '! #$*$%#%' .+*8))<88888*88((*$ & #$$$, +2  + +!! %'#+8-%&.$*8)(888()((())(*-' && $$#%  6F 4 174 1 + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + +   + + +  + + + + + + + + + + + + + + + + + + + +     +                + + + + + +  + + +    + + + + + +  + + +  + + +  + + +21 84 31 1 +9  999 99999 9+(33:<<:;<<<<<<<:3;<<<<<<<<72::2:<;/1+)99999999999999999 99&7(/3.=::;;=;<<<<:/<<<<<<<<:==//:<:/32&') 9999999999 9999 99999,+0012.//:;<:::;=://<<<<<<;/<;20:<:/.1&&1+9999999999999999  9996'2//23:;:=<<<<<<:212;<<<<<::;2'/<:3:=/10(1+'999999999999 9999 99999)6&3.:::;<;<<<;<<<:33;:02:<:::1'1<;/:=:32022(+9999999999  99999 &71(//33;;;:;;;=<<:3:<<;0&1:=:203<<;;=:32113(1')99999999999 9999970003322:./:;://::22<<<32333/11:<<;<=32212:;:+'') 99999999999999999 &77+171:;:/:<<;:311/<=32:<<;7,3<<>><<<3414339;.6.;..#%  ""$$$:-;765..122221.3=<=2365;7.533=<><>>>><><<2191397.9.;.60%%% ! %%%7.7..;-9222234322331;66.93==<><>><><><><<3316776.;;;7%--#! !$%--64467-77;12332213=239.9953,=<<<><<<<<<<<<<=39--..7;..-%%#0! $%-0433167-7;91132232=234691=<<<<<<<<<<<<<<<<==5-;.9666.7-7--#%#" $-04331466547-12233=231943=<><<<<<===========3.%7...6.77;.0-!""   %%:%044114446-.1==2233393=<><<============22334.::-;;77-7..07%%# %!#00.444131.7751222333.52<<<==========222333315.%:---7;7700-#-#   #08487.44134-794911153332=<<=====22222222331114567:%%-;99.0;7####""  #&/8446;61331665416%;13==<=====2222222222233114496.7;;.95.7777--%%#"  &//88860.1311334329-612======2222222222223311144996656549.--7777%"  #&/0/48.--6113223333433,====223322222222233111444599941114.;;;#0#-%"75 4 174 1 + + +  +       +  +                          +  +    +                                                                              42 84 33 1 +7:;77777::777((#,49995555555592+0++0455.**,4-233-9.1 ((::7:::7(((7(;::;;;;;::;;::;( ).55555555===55443220*9.0,,,3,339<-) (((((7:;:77(((((((::::;;;;::;;::;: *+45555=========59.4.20.*300.499.+3--,#(((((((7(((777(((:::;;77;:::;:::; +8--4955555========5594..,+2,+-95999.0,-,)#(((((7(77(((;::;;;77:::::::: .//,4955555========549994..4-.55559940+--,) 77((((7((((:;77;:::::;;::::"6/99<..<5===5=======5955595544555.9592*--1# 77((((((((:;7;;::;(((((;; + .4/99.2095==========59594554.9=55..<-**0-,)(((7(((777;:::::;(((7!///99-0*3995========94.4959.45===59.*2..2--,) (((((((77((7;:;;;(((6%//9559-30*,5======59233-99594555==9.3.959.-/4,# ((((7(((7;;:;((((8///9555<3++55=====900,4445=5-455=55.,55559--46#$ ((((((:;;:;((((( *0-.//5555.2.4.955==5-2,4945=55.2.5555<,95555<021 (((((((:::;;7(((73-..<99594<99949-99,++.4.25=55<..95599<.95559*2**((((((::::::7(( 1.//9559994<955-3<3+023.,.95559,.55555,*9554+1*$77(((((::;:::;((7*0*1/9555559-<559,2,0*0...9555555.3+455559-5543*00*7((7(((:;::::;7((*0*0.95595=92.<.-..3+2..<55555555-,+,55555555.*++**((((7((((((::::;7;;7$**/9/95==54...-.,32--,<55555555923--<99555.0,+*+*##((((((((7((((::::::::*#*155/955=5-..<<.,..220,<9555555599<.2.959.+03*+03+01#((7((77((7(7;::::::#+3/9/955559024<....,.,3-4.9995555559...94-****3,--1#*7(((77((7((7(;:::;***,//95555520-.2,-,.95<-,2..9559955599<.,03++32-4/.0*7((7((777(7(7::::$*).449555590-,3,.3,955.,,3349599959995903-..499955/1)#(((7(((77777(7;;; + +*6/9555559.2--,,---9554220*32.955999999<2<9955====5//9.# (77777(77;;7;:: +"#1649595559/22,03-,-99593000+029559,-559.5======''''5'56#777777((7(;:777: + 8864999559/-3+*+32,9999--+-<.0+.5592+99-5===='=''''''556*7777(((((::;(( 866.///9599-,2*+3+3<95942255420+-9<9.*.245===='''''5555/1$7(((((((7::7((# 8 .%99999/-22*02,32.9999-/59-+-.2///4+-<5=''''5555559/.)$(((((77:;;7 +"888.%%9559,++,,233-.99999/-0+.,+.99<,-.9='''55599////.,0(7((77(;;:  86!!%9999,*+*3223++049955-***,2-9/2-<5='''559//444..-1+ $77777(7:: 8!.%%%//1**+*0000++03+2<99/4,,+-4,2-3,-9='''559/4....--,)+ 77(((;;"86.%9/40$020++3++,-324///99,-/9-+000-5='''55/4....---,)+ (((((7::: +#886!%%/1+*$$*33*0-2,--00,.4/9/-///-,.-34='''55//4...----,)*$ ((77;: + +&!%%4)****+010,222,,230+3.//.4//-2.--<='''559/44...----,)*  7(77(7 +"&%!.++00,..--3010+0+**+./////-03,2.5''''59/....--.66-10 $* 77((( +##8!6*$$$*).-4//4+**020023,-//9-*++*3/='''55/4...--6.66,)+ $7(((45 84 38 1 +( + )*$+*+,--.//,+*011,,2*034.-+**3-5'''55/4....--6.--1)* (((7 +!&)*$***1--11.,+,3+3-,+3,*2/5'''559/4....666--,1#* $((((8$*-441)60)-60*03+*02*0+3+0.5''''55/4....666--,1)#* 7(( $+$6/..6--64.-00*0--301++-/5'''559/4..6666--,,1)#*$  ((+#,6.4.44/4-..1+0-,3013*0./'''559/4.66666--,,11)0 $* ((**$$+186#)666644.64//,*)-3333*0-95'''55//..66.6--,1111)0*  (( +**)1.8**)1-6-6,-44.-*+++0313+1/5'''559/4.6666--,11111)+ ((*11 ))),))),4.6,*1301--1.95'''55//4.66--,11111,,)#  )866*$)))8,8..)06,1,,13.5'''559/4.66--,1111,,,,1  $* $$*) &68#$)-..)..6)*1,00,)33/95'559/.6688--,111,,8,1)+ $    "" 8 ##).68888)*+0+0+*0-5'''5594.66--,,1111,,,,1#*$$ $#""*))1 1+*+)886661**+))+395'''55%4.66-,11111,,,,1)#*$ $$$" #"" #)1)).6,*+***0),,69'''5594.66-,111)11,, ,11#* $* ) 8 8 *+#**+11*+*+#111,.5''559/.68-,1)))11,,8 11# *   +"6&81+$*$$$*++)#1-%''555%.8-,1))))1,,, 1#  $  +"" $$&886 *$*0+3.'''559468,1)##)11,, "#  +""$)8&88"1+*#+*)#*+))-9''559%.8-1)0++)1, 8888 )$$$$   + + +"#*$*"" 661*#+))##)18%'''59%.8 ,)#+**),88 866668) $$   + + +#*##)188#+#*+##+#16%5'59946 11#+,.668886!!!8)*   "" #)8 )#**+*****149''59%681)#+*$6%468866!!! #$ $   + + "" "" ##+++###**)845''5%.8,1#+*$$199!6886!!!& $ + + + +"""*++*)#*)16%9''59%6 1)#*699!6888!!!& $ + +# "*$**$** 86%5'59%.81)#+*$ 49!68 86!!6"$ #  + + + "" *$*****1 .9''99!8")##* *%9%6 " 8&&8"    +"""* *$)#+**##,.''9%6 1)#*099%6")" 6&8)*$ +#  "$#*#))) !9''99. 1)##*$ 6559%6")1 88 )*   + +   $$* **)"##69''59!81)##*+9''9%. 1" 88") $  + + +$##**#)%9'9%6"))##* )%''99!8 " 8 "#     +  +#$$*# #*)%'%!8")))#* )5'99%&8 " $   + + $$* )###18%9%6 1))#$ *%''99%!&888 "# #   +  # )" !9%!8"))#* $"%''99%!!&&8"#  $ +   ***  )) %''9%6 ))##*$ )%''9%%!!!!&"#$ # $#* #89'%!8"))#*6''9%!!!!!!"#    + + #  ###"!99%6"))#$  $*199%!!!!!!!&" ##  +** # !%! "))#*  $*)!9%%!&&&&!!!" + + +  **)&%9%6 "## $# !%9%!6 &!!!  +    # * %!8")#*  #"!%%99! " &&& #   +      + &9%& "# $ $*)"&%'9! )#"  "$   +48 84 36 1 +    9%!"# $  '9%#""#  # +  !%%& # #" &%'%& "##    + +     !9%"#$ " &%''%&"#    + + +   +   +%99%& ## $  "%''9%&"  + + + +    "&%9%!" +#  # %''9%%&" +   + +  !'9%&" + + +   +"%''%%&  # +   #"%'%! + +# $ +"&%''9%%&"   +      + '&"#  # +" &%''9%%"#  + +     +"%%& ""  +" + +"&'%% +  + + +   + +&%!""""$  +"&%9%   + +    "%'%&" +"" +  " '%%&&&    +    +' + +""$ ""&%''%&&&&&   +    + %" + + + +   "&%''%%&& +  + + +   "%& + + + + + $  "%''9%&& +     % + + + +    %'%&&&&"  +   +% + +    + + "&%''%        "%&" +  + +"&%''%%" +     + +%% +    +" "&%''%%    + + +     +%%% +   """  ''%% +  +  %% + "%''%   + +  %%%% +  + + + + +9''%   + +%%%   + + + + + +%''%    + +% +  +#'% +   + + +%  +'%" +    + + +%     + + + + + + + + +%    + + + % +  + + + + + + + + +'%    + + % +   + + + + +'%    + +    +% +  + + + + + +"'% +    + +     % + + +   + + + + + + + + + + +'% +    + + +  + %% + +   + +  + + +%'%  +  + +  + %%  +    + + + +%'  + + + +  %%%    + + + +% +   + +    %    +  + + + + +%"    + + +  %%   + + +%% +    + +    %%       +%"  + + + +   %%     + + % +  + +   + + + + +4B 84 58 1 +%%  +   + + + +  + +    + +  %%  +  + # +  +    %  +  + + + + + + + +   +    %%  +  + + +     %  + +%%%  + +   % %%%%%  + + + +  + %  +%%% + + + +%%   %%  + +%%% + + + +%% %%%%%%%%  + + +%%% +       + + + +   + + + %     +   + +   + +     +    + + + + + + +        + +  + + +     +  +  +         +  +   + +      +   +        +         +  +      +  + +          +          +              % +         +%% +        %% +     %% +    %% +      +%% +   % +    + + +   + + +      % +      % +     +%%   %% +      % +     +      %% +   %% +   % +     +%% +        %% +      % +        +% +       %%      %% +       +% +        +        +        + +  +        +    +           + + +        +  +       + + +       +       + +  MBOX2B_P 122 +ÿ¿wŸso_k?gcÿ^ßZßZ¿VŸRN_J?FBBÿ=ß9ß9¿5Ÿ1Ÿ1-_)_)_)?%!!ÿßß¿ŸŸŸ _? + ENTD_P 62 + $(,84(  04,$$ X@< 4@0(H<*d, $48@H(00,D`< 8T H|MBOX2R_P 122 +ÿ½œ{Z9÷~Ö~Ö~µ~”~s~R~1~~~ï}Î}Î}­}Œ}Œ}k}J}J}J})}}}ç|Æ|Æ|¥|„|„|„|c|B|!||xttplllhddd`\\\\\XTTTTTTPLLLLLHDDDDDD@<<<<<<84444440,,,,,($$$$$  BK8_P 27 +       + +   ENTA_P 62 +    +  6  + 7       +   ?     ENTB_P 62 +  +  +   4 1  +  8       +  8 ENTC_P 63 +    $ (, (< $ (,)X08H(L(,$<PH84, 00$(XT)|BK1_P 22 +     ÿBK2_P 16 +   ÿBK3_P 16 +   BK4_P 16 +   BK7_P 27 +     ENT_P 27 +!       ÿ \ No newline at end of file diff --git a/BACKUP/XART100/EXPLODE.IMG b/BACKUP/XART100/EXPLODE.IMG new file mode 100644 index 0000000..9b04be1 Binary files /dev/null and b/BACKUP/XART100/EXPLODE.IMG differ diff --git a/BACKUP/XART100/EXPL_OLD.IMG b/BACKUP/XART100/EXPL_OLD.IMG new file mode 100644 index 0000000..87f8a20 Binary files /dev/null and b/BACKUP/XART100/EXPL_OLD.IMG differ diff --git a/BACKUP/XART100/FBALL.IMG b/BACKUP/XART100/FBALL.IMG new file mode 100644 index 0000000..54bd396 Binary files /dev/null and b/BACKUP/XART100/FBALL.IMG differ diff --git a/BACKUP/XART100/FIREFRAM.IMG b/BACKUP/XART100/FIREFRAM.IMG new file mode 100644 index 0000000..0b71a69 Binary files /dev/null and b/BACKUP/XART100/FIREFRAM.IMG differ diff --git a/BACKUP/XART100/FLASH.IMG b/BACKUP/XART100/FLASH.IMG new file mode 100644 index 0000000..45c8ccd Binary files /dev/null and b/BACKUP/XART100/FLASH.IMG differ diff --git a/BACKUP/XART100/FOG.IMG b/BACKUP/XART100/FOG.IMG new file mode 100644 index 0000000..18d3ae0 Binary files /dev/null and b/BACKUP/XART100/FOG.IMG differ diff --git a/BACKUP/XART100/GAMEGRAF.IMG b/BACKUP/XART100/GAMEGRAF.IMG new file mode 100644 index 0000000..2c87491 Binary files /dev/null and b/BACKUP/XART100/GAMEGRAF.IMG differ diff --git a/BACKUP/XART100/HALFTIME.BDB b/BACKUP/XART100/HALFTIME.BDB new file mode 100644 index 0000000..4de9e09 --- /dev/null +++ b/BACKUP/XART100/HALFTIME.BDB @@ -0,0 +1,38 @@ +HALFTIME 2000 1000 255 1 12 36 +HTSTATS 211 677 145 470 +4000 255 222 3 8 +A00 255 188 0 7 +6E00 263 222 6 2 +A00 263 434 9 9 +6E00 268 222 C 2 +6E00 268 429 F 2 +A00 268 227 12 4 +A00 268 291 15 6 +6B00 282 222 C 2 +6B00 334 429 F 2 +7300 356 226 18 1 +4000 356 417 1B 1 +A00 358 291 1E 6 +6E00 360 222 C 2 +6E00 360 429 F 2 +A00 360 227 12 4 +6E10 445 222 6 2 +A00 453 188 21 8 +A00 453 291 24 8 +6E00 458 222 6 0 +A00 458 188 27 11 +A00 458 434 2A 10 +6E00 463 429 F 0 +6E00 463 222 C 0 +A00 463 227 2D 5 +A00 463 291 30 3 +6B00 476 222 C 0 +6B00 515 429 F 0 +7300 551 226 18 1 +4000 551 417 1B 1 +A00 553 291 33 3 +6E00 555 222 C 0 +6E00 555 429 F 0 +A00 555 227 2D 5 +6E10 640 222 6 0 +4000 648 222 36 8 diff --git a/BACKUP/XART100/HALFTIME.BDD b/BACKUP/XART100/HALFTIME.BDD new file mode 100644 index 0000000..e97e28b Binary files /dev/null and b/BACKUP/XART100/HALFTIME.BDD differ diff --git a/BACKUP/XART100/HALFTIME.IMG b/BACKUP/XART100/HALFTIME.IMG new file mode 100644 index 0000000..3380170 Binary files /dev/null and b/BACKUP/XART100/HALFTIME.IMG differ diff --git a/BACKUP/XART100/HANGFONT.IMG b/BACKUP/XART100/HANGFONT.IMG new file mode 100644 index 0000000..400bf61 Binary files /dev/null and b/BACKUP/XART100/HANGFONT.IMG differ diff --git a/BACKUP/XART100/HANGTIME.BDB b/BACKUP/XART100/HANGTIME.BDB new file mode 100644 index 0000000..ff958c5 --- /dev/null +++ b/BACKUP/XART100/HANGTIME.BDB @@ -0,0 +1,27 @@ +hangtime 2000 1000 255 2 14 24 +maxim 867 1313 244 525 +hangtime 192 720 149 506 +A00 274 206 0 0 +A00 274 329 3 5 +A00 349 329 6 7 +A00 349 206 9 1 +A00 419 329 C 6 +A00 424 206 F 2 +A00 494 329 12 8 +A00 499 206 15 3 +A00 574 329 18 9 +A00 574 206 1B 4 +A00 888 376 3 5 +A00 888 253 0 0 +4000 915 294 1E 10 +A00 963 253 9 1 +A00 963 376 6 7 +4000 983 294 21 11 +A00 1033 376 C 6 +A00 1038 253 F 2 +4000 1052 295 24 12 +A00 1108 376 12 8 +A00 1113 253 15 3 +4000 1138 295 27 13 +A00 1188 253 1B 4 +A00 1188 376 18 9 diff --git a/BACKUP/XART100/HANGTIME.BDD b/BACKUP/XART100/HANGTIME.BDD new file mode 100644 index 0000000..2076500 Binary files /dev/null and b/BACKUP/XART100/HANGTIME.BDD differ diff --git a/BACKUP/XART100/HDS1.IMG b/BACKUP/XART100/HDS1.IMG new file mode 100644 index 0000000..b469ff4 Binary files /dev/null and b/BACKUP/XART100/HDS1.IMG differ diff --git a/BACKUP/XART100/HDS10.IMG b/BACKUP/XART100/HDS10.IMG new file mode 100644 index 0000000..b2320ee Binary files /dev/null and b/BACKUP/XART100/HDS10.IMG differ diff --git a/BACKUP/XART100/HDS11.IMG b/BACKUP/XART100/HDS11.IMG new file mode 100644 index 0000000..a5313cc Binary files /dev/null and b/BACKUP/XART100/HDS11.IMG differ diff --git a/BACKUP/XART100/HDS12.IMG b/BACKUP/XART100/HDS12.IMG new file mode 100644 index 0000000..f3cd005 Binary files /dev/null and b/BACKUP/XART100/HDS12.IMG differ diff --git a/BACKUP/XART100/HDS13.IMG b/BACKUP/XART100/HDS13.IMG new file mode 100644 index 0000000..f824438 Binary files /dev/null and b/BACKUP/XART100/HDS13.IMG differ diff --git a/BACKUP/XART100/HDS14.IMG b/BACKUP/XART100/HDS14.IMG new file mode 100644 index 0000000..33faa94 Binary files /dev/null and b/BACKUP/XART100/HDS14.IMG differ diff --git a/BACKUP/XART100/HDS15.IMG b/BACKUP/XART100/HDS15.IMG new file mode 100644 index 0000000..eb9783d Binary files /dev/null and b/BACKUP/XART100/HDS15.IMG differ diff --git a/BACKUP/XART100/HDS16.IMG b/BACKUP/XART100/HDS16.IMG new file mode 100644 index 0000000..ffddd6b Binary files /dev/null and b/BACKUP/XART100/HDS16.IMG differ diff --git a/BACKUP/XART100/HDS17.IMG b/BACKUP/XART100/HDS17.IMG new file mode 100644 index 0000000..95155f9 Binary files /dev/null and b/BACKUP/XART100/HDS17.IMG differ diff --git a/BACKUP/XART100/HDS18.IMG b/BACKUP/XART100/HDS18.IMG new file mode 100644 index 0000000..03b6e6d Binary files /dev/null and b/BACKUP/XART100/HDS18.IMG differ diff --git a/BACKUP/XART100/HDS19.IMG b/BACKUP/XART100/HDS19.IMG new file mode 100644 index 0000000..d866c66 Binary files /dev/null and b/BACKUP/XART100/HDS19.IMG differ diff --git a/BACKUP/XART100/HDS2.IMG b/BACKUP/XART100/HDS2.IMG new file mode 100644 index 0000000..cab2cd3 Binary files /dev/null and b/BACKUP/XART100/HDS2.IMG differ diff --git a/BACKUP/XART100/HDS20.IMG b/BACKUP/XART100/HDS20.IMG new file mode 100644 index 0000000..36e57e1 Binary files /dev/null and b/BACKUP/XART100/HDS20.IMG differ diff --git a/BACKUP/XART100/HDS21.IMG b/BACKUP/XART100/HDS21.IMG new file mode 100644 index 0000000..cdc242b Binary files /dev/null and b/BACKUP/XART100/HDS21.IMG differ diff --git a/BACKUP/XART100/HDS22.IMG b/BACKUP/XART100/HDS22.IMG new file mode 100644 index 0000000..9666b91 Binary files /dev/null and b/BACKUP/XART100/HDS22.IMG differ diff --git a/BACKUP/XART100/HDS23.IMG b/BACKUP/XART100/HDS23.IMG new file mode 100644 index 0000000..b893512 Binary files /dev/null and b/BACKUP/XART100/HDS23.IMG differ diff --git a/BACKUP/XART100/HDS24.IMG b/BACKUP/XART100/HDS24.IMG new file mode 100644 index 0000000..1298604 Binary files /dev/null and b/BACKUP/XART100/HDS24.IMG differ diff --git a/BACKUP/XART100/HDS25.IMG b/BACKUP/XART100/HDS25.IMG new file mode 100644 index 0000000..2433d32 Binary files /dev/null and b/BACKUP/XART100/HDS25.IMG differ diff --git a/BACKUP/XART100/HDS26.IMG b/BACKUP/XART100/HDS26.IMG new file mode 100644 index 0000000..7a3401a Binary files /dev/null and b/BACKUP/XART100/HDS26.IMG differ diff --git a/BACKUP/XART100/HDS3.IMG b/BACKUP/XART100/HDS3.IMG new file mode 100644 index 0000000..474ce6d Binary files /dev/null and b/BACKUP/XART100/HDS3.IMG differ diff --git a/BACKUP/XART100/HDS4.IMG b/BACKUP/XART100/HDS4.IMG new file mode 100644 index 0000000..96d415c Binary files /dev/null and b/BACKUP/XART100/HDS4.IMG differ diff --git a/BACKUP/XART100/HDS5.IMG b/BACKUP/XART100/HDS5.IMG new file mode 100644 index 0000000..8b9948e Binary files /dev/null and b/BACKUP/XART100/HDS5.IMG differ diff --git a/BACKUP/XART100/HDS6.IMG b/BACKUP/XART100/HDS6.IMG new file mode 100644 index 0000000..facec71 Binary files /dev/null and b/BACKUP/XART100/HDS6.IMG differ diff --git a/BACKUP/XART100/HDS7.IMG b/BACKUP/XART100/HDS7.IMG new file mode 100644 index 0000000..4902ace Binary files /dev/null and b/BACKUP/XART100/HDS7.IMG differ diff --git a/BACKUP/XART100/HDS8.IMG b/BACKUP/XART100/HDS8.IMG new file mode 100644 index 0000000..d83a52d Binary files /dev/null and b/BACKUP/XART100/HDS8.IMG differ diff --git a/BACKUP/XART100/HDS9.IMG b/BACKUP/XART100/HDS9.IMG new file mode 100644 index 0000000..2c72e93 Binary files /dev/null and b/BACKUP/XART100/HDS9.IMG differ diff --git a/BACKUP/XART100/HDSMSC1.IMG b/BACKUP/XART100/HDSMSC1.IMG new file mode 100644 index 0000000..f042161 Binary files /dev/null and b/BACKUP/XART100/HDSMSC1.IMG differ diff --git a/BACKUP/XART100/HDSMSC2.IMG b/BACKUP/XART100/HDSMSC2.IMG new file mode 100644 index 0000000..2ecf3e7 Binary files /dev/null and b/BACKUP/XART100/HDSMSC2.IMG differ diff --git a/BACKUP/XART100/HDSMSC3.IMG b/BACKUP/XART100/HDSMSC3.IMG new file mode 100644 index 0000000..d132d61 Binary files /dev/null and b/BACKUP/XART100/HDSMSC3.IMG differ diff --git a/BACKUP/XART100/HDSMSC4.IMG b/BACKUP/XART100/HDSMSC4.IMG new file mode 100644 index 0000000..6c33398 Binary files /dev/null and b/BACKUP/XART100/HDSMSC4.IMG differ diff --git a/BACKUP/XART100/HDSMSC5.IMG b/BACKUP/XART100/HDSMSC5.IMG new file mode 100644 index 0000000..8f4fdcb Binary files /dev/null and b/BACKUP/XART100/HDSMSC5.IMG differ diff --git a/BACKUP/XART100/HDSMSC6.IMG b/BACKUP/XART100/HDSMSC6.IMG new file mode 100644 index 0000000..e86f4d2 Binary files /dev/null and b/BACKUP/XART100/HDSMSC6.IMG differ diff --git a/BACKUP/XART100/HDSMSC7.IMG b/BACKUP/XART100/HDSMSC7.IMG new file mode 100644 index 0000000..a5fb288 Binary files /dev/null and b/BACKUP/XART100/HDSMSC7.IMG differ diff --git a/BACKUP/XART100/HDSMSC8.IMG b/BACKUP/XART100/HDSMSC8.IMG new file mode 100644 index 0000000..0d83eaf Binary files /dev/null and b/BACKUP/XART100/HDSMSC8.IMG differ diff --git a/BACKUP/XART100/HOOP.IMG b/BACKUP/XART100/HOOP.IMG new file mode 100644 index 0000000..fa6a223 Binary files /dev/null and b/BACKUP/XART100/HOOP.IMG differ diff --git a/BACKUP/XART100/HOT.IMG b/BACKUP/XART100/HOT.IMG new file mode 100644 index 0000000..5e101b4 Binary files /dev/null and b/BACKUP/XART100/HOT.IMG differ diff --git a/BACKUP/XART100/HOTCIRCL.IMG b/BACKUP/XART100/HOTCIRCL.IMG new file mode 100644 index 0000000..d122202 Binary files /dev/null and b/BACKUP/XART100/HOTCIRCL.IMG differ diff --git a/BACKUP/XART100/HOTSPOT.IMG b/BACKUP/XART100/HOTSPOT.IMG new file mode 100644 index 0000000..c1e857d Binary files /dev/null and b/BACKUP/XART100/HOTSPOT.IMG differ diff --git a/BACKUP/XART100/INFOWIN.IMG b/BACKUP/XART100/INFOWIN.IMG new file mode 100644 index 0000000..80d749d Binary files /dev/null and b/BACKUP/XART100/INFOWIN.IMG differ diff --git a/BACKUP/XART100/INGA16.IMG b/BACKUP/XART100/INGA16.IMG new file mode 100644 index 0000000..aa41a5c Binary files /dev/null and b/BACKUP/XART100/INGA16.IMG differ diff --git a/BACKUP/XART100/LEDS1.IMG b/BACKUP/XART100/LEDS1.IMG new file mode 100644 index 0000000..911fad0 Binary files /dev/null and b/BACKUP/XART100/LEDS1.IMG differ diff --git a/BACKUP/XART100/MAPPER.INI b/BACKUP/XART100/MAPPER.INI new file mode 100644 index 0000000..6c47dd9 --- /dev/null +++ b/BACKUP/XART100/MAPPER.INI @@ -0,0 +1,27 @@ +# +# MAPPER.INI +# +# lists all the files that mapper will look at. Keep this file in IMGDIR. +# + +#raw file address file + +;misc.irw misc.lod + +;bb5.irw bb5.lod + +bb.irw bb.lod + +bb2.irw bb2.lod + +bb3.irw bb3.lod + +bb4.irw bb4.lod + +bb6.irw bb6.lod + +bb7.irw bb7.lod + +bb8.irw bb8.lod + +bbmug.irw bbmug.lod diff --git a/BACKUP/XART100/MISC.LOD b/BACKUP/XART100/MISC.LOD new file mode 100644 index 0000000..7e112f3 --- /dev/null +++ b/BACKUP/XART100/MISC.LOD @@ -0,0 +1,581 @@ +***> 2000000,0 +; +PON> +XOF> +ZOF> +; +IHDR PAL:L +; +ASM> junkxxxx +;Loads DIAGP palette +diagp.img +---> DIAGPIMG +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> COURT.TBL +; +FRM> COURT +; +crtref.img +---> ref01n,ref02n,ref03n,ref04n,ref05n,ref06n,ref07n,ref08n +---> tabletop +---> ad01_nl,ad01_nr +---> ad01_ref_nl,ad01_ref_nr +; +nbacrowd.img +---> SIDECHK,SIDECAMS +---> TOPCRV,BOTCRV,TOPCHK,BOTCHK +---> STAIRS01,STAIRS02,STAIRS03,bk_flr +---> COACH01,BNCHPL01 +---> CR0FST01n,CR0FST02n,CR0FST03n,CR0FST04n,CR0FST05n,CR0FST06n,CR0FST07n +---> CR2FST01,CR2FST02,CR2FST03,CR2FST04,CR2FST05,CR2FST06,CR2FST07 +---> CR3FST01,CR3FST02,CR3FST03,CR3FST04,CR3FST05,CR3FST06,CR3FST07 +---> CR1SEC01,CR1SEC02,CR1SEC03,CR1SEC04,CR1SEC05,CR1SEC06,CR1SEC07 +---> CR2SEC01,CR2SEC02,CR2SEC03,CR2SEC04,CR2SEC05,CR2SEC06,CR2SEC07 +---> CR3SEC01,CR3SEC02,CR3SEC03,CR3SEC04,CR3SEC05,CR3SEC06,CR3SEC07 +---> CR4SEC01,CR4SEC02,CR4SEC03,CR4SEC04,CR4SEC05,CR4SEC06,CR4SEC07 +---> CR5SEC01,CR5SEC02,CR5SEC03,CR5SEC04,CR5SEC05,CR5SEC06,CR5SEC07 +---> CR1THD01,CR1THD02,CR1THD03,CR1THD04,CR1THD05,CR1THD06,CR1THD07 +---> CR2THD01,CR2THD02,CR2THD03,CR2THD04,CR2THD05,CR2THD06,CR2THD07 +---> CR3THD01,CR3THD02,CR3THD03,CR3THD04,CR3THD05,CR3THD06,CR3THD07 +---> CR4THD01 +; +ASM> IMGTBL.ASM +GLO> IMGTBL.GLO +; +tvscore.img +---> DoubleOT,TripleOT,endof1,endof3,endof4,halftime +---> please,start,insert,tocontrol +---> one,two,three,four,overtime,final +; +halftime.img +---> HTSTAT01,HTSTAT02,HTSTAT03,HTSTAT04 +---> HTFIRE01,HTFIRE02,HTFIRE03,HTFIRE04,HTFIRE05 +---> HTFIRE06,HTFIRE07,HTFIRE08,HTFIRE09,HTFIRE10 +---> HLFSTATS +; +optscr.img +---> SPOTLTA1 +---> SPOTLTA2,SPOTLTA3,SPOTLTA4,SPOTLTA5,SPOTLTB1,SPOTLTB2,SPOTLTB3,SPOTLTB4 +---> SPOTLTB5,SPOTLTC1,SPOTLTC2,SPOTLTC3,SPOTLTC4,SPOTLTC5,BIGBAL1 +---> SMBAL1,SMBALSA1,SMBALSA2,SMBALSB1 +---> SMBALSB2,SMBALSC1,SMBALSC2,BGBALSA1,BGBALSA2,BGBALSB1,BGBALSB2,BGBALSC1 +---> BGBALSC2 +; +transbar.img +ZON> +---> TRANBR01,TRANBR02,TRANBR03,TRANBR04,TRANBR05 +---> TRANBR06,TRANBR07,TRANBR08,TRANBR09,TRANBR10 +---> TRANBR11,TRANBR12,TRANBR13,TRANBR14,TRANBR15 +ZOF> +; +time.img +---> BRSH1800,BRSH1801,BRSH1802,BRSH1803,BRSH1804,BRSH1805,BRSH1806,BRSH1807 +---> BRSH1808,BRSH1809,BRSH18CO +; +attstuff.img +---> ATT_HT,ATT_WT,ATT_SP,ATT_PW,ATT_SH,ATT_DU,ATT_ST,ATT_BL +---> END_HT,END_WT,END_SP,END_PW,END_SH,END_DU,END_ST,END_BL +PPP> 3 +---> NOTCH_00,NOTCH_01,NOTCH_02,NOTCH_03,NOTCH_04,NOTCH_05 +---> NOTCH_06,NOTCH_07,NOTCH_08,NOTCH_09,NOTCH_10 +PPP> 0 +; +yes_no_4.img +---> NO,NOP,YES,YESP +---> SMNOP,SMYESP,SMYES,SMNO +---> SMNSHP,SMYSHP,ONE +ZON> +---> F_NO1,F_NO2 +ZOF> +; +fog.img +---> FOG_01,FOG_02,FOG_03,FOG_04,FOG_05,FOG_06,FOG_07,FOG_08,FOG_09 +---> FOG_10,FOG_11,FOG_12,FOG_13,FOG_14,FOG_15,FOG_16 +; +privilg.img +---> CHECK,PRVLGCK1 +---> TEX_HA,TEX_SD,TEX_AR,TEX_BD,TEX_BB,TEX_ST,TEX_BH +; +designd.img +---> HDAROW,HDBAR,HDSPTLT,HDSPTLT2 +ZON> +---> BIGBOX +ZOF> +---> TUBE01,TUBE02,TUBE03 +---> DITH_A,DITH_B,DITH_C,DITH_D +---> TIMEPRT,CREDTOOB +---> SPOTFL,TUBESH,BBTXT +---> TOTALBR,TEXTBAR +---> NNABAR,NNBAR,NNAROW +---> M_HOTSPT,M_NOARRW,M_BIGHED,M_QIKHND,M_UNLIMT,M_GOALTN,M_HYPRSP +---> M_FSTPAS,M_MAXSPD,M_BIGBAL,M_NOPUSH,M_MAXPOW,M_SHTPCT,M_BABYMD +---> M_STELTH +; +buttons.img +---> BUTTON_A,BUTTON_B,BUTTON_C,BUTTON_D,BUTTON_E,BUTTON_F,BUTTON_G,BUTTON_H +ZON> +---> BSHAD_A1,BSHAD_A2,BSHAD_B1,BSHAD_B2,BSHAD_C1,BSHAD_C2,BSHAD_D1,BSHAD_D2 +---> BSHAD_E1,BSHAD_E2,BSHAD_F1,BSHAD_F2 +---> BSHAD_G1,BSHAD_G2,BSHAD_H1,BSHAD_H2 +ZOF> +---> TXT_VIEW,TXT_HEAD,TXT_UNIFRM,TXT_ATTR,TXT_NEWN,TXT_SAVE +---> TXT_PRIV,TXT_NICK1 +; +teamsel4.img +---> TEAMBR,HEADER,SQUAD1,SQUAD2 +---> RHEAD,LHEAD,SCORE +---> SQDBAL01,SQDBAL02,SQDBAL03,SQDBAL04,SQDBAL05 +---> SQDBAL06,SQDBAL07,SQDBAL08,SQDBAL09,SQDBAL10,SQDBAL11,SQDBAL12,SQDBAL13 +---> SQDBAL14,SQDBAL15,SQDBAL16,SQDBAL17,SQDBAL18,SQDBAL19,SQDBAL20 +---> SQDBAL21,SQDBAL22,SQDBAL23,SQDBAL24,SQDBAL25,SQDBAL26,SQDBAL27 +---> SQDBAL28,SQDBAL29,SQDBAL30 +---> TEAMBR2 +; +attbar2.img +PPP> 4 +---> ATTBAR00,ATTBAR01,ATTBAR02,ATTBAR03,ATTBAR04,ATTBAR05 +---> ATTBAR06,ATTBAR07,ATTBAR08,ATTBAR09,ATTBAR10 +PPP> 0 +---> ATTRIBS +; +attract.img +---> NBABAR,NBALOGO +; +gamegraf.img +CON> +---> JMPBAL_L,JMPBAL_R,SCORTUBE,LOGOTUBE +---> RECVRBLK +---> clock,clock2 +COF> +; +cities2.img +PON> +---> city_atl +---> city_bos +POF> +---> city_cha,city_chi,city_cle,city_dal,city_den,city_det +---> city_gol,city_hou,city_ind,city_lac,city_lal,city_mia +---> city_mil,city_min,city_nej,city_ney,city_orl,city_phi,city_pho +---> city_por,city_sac,city_san,city_sea,city_tor,city_uta,city_van,city_was +---> DEFAULT,CUST1,CUST2,CUST3,CUST4,CUST5 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W +; +referee.img +CON> +PON> +;---> REFPNT1,REFPNT2,REFPNT3,REFPNT4,REFPNT5,REFPNT6,REFPNT7,REFPNT8,REFPNT9 +;---> REFPNT10,REFPNT11,REFPNT12,REFPNT13,REFPNT14,REFPNT15,REFPNT16,REFPNT17 +;---> REFPNT18,REFPNT19 +---> REFWHS1,REFWHS2,REFWHS3,REFWHS4,REFWHS5,REFWHS6 +---> REFWHS7,REFWHS8,REFWHS9 +---> REFTOS1,REFTOS2,REFTOS3,REFTOS4 +---> REFTOS5,REFTOS6,REFTOS7,REFTOS8,REFTOS9,REFTOS10,REFTOS11,REFTOS12 +---> REFTOS13,REFTOS14,REFTOS15,REFTOS16,REFTOS17,REFTOS18,REFTOS19,REFRUN1 +---> REFRUN2,REFRUN3,REFRUN4,REFRUN5,REFRUN6,REFRUN7,REFRUN8,REFRUN9 +---> REFRUN10,REFRUN11,REFSTN1,REFSTN2,REFSTN4 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +credball.img +PON> +---> t0000,tX000,tXX00,tXXX0 +---> tXXXX,t1000,t1100,t1110 +---> t1111,tX100,tX110,tX111 +---> tXX10,tXX11,tXXX1 +COF> +; +pnames.img +---> ABDULRAU,AHARDAWAY,AJOHNSON,WANDERSON,ANTHONY,AUGMON,BAKER +---> BARROS,BBARRY,BENJAMIN,BENOIT,BGRANT,BLAYLOCK +---> BOWENS,BRADLEY,BRANDON,BREEVES,BROWN,BWILLIAM +---> CAMPBELL,CASSELL,CEBALLOS,CHEANEY,CHILDRES,CMILLS,CMORRIS +---> COLEMAN,COLES,CROBINSON,CROGERS,CURRY,DANILOVI +---> DDAVIS,DELLIS,DELNEGRO,DIVAC,DOUGLAS,DREXLER,DROBINSON,DSCOTT +---> DUMARS,EDNEY,EDWARDS,EJONES,ELLIOT,EMURDOCK +---> EWING,FERRY,FINLEY,FOX,GARNETT,GATTISON,GHILL,GILL,GILLIAM +---> GRANT_HC,GROBINSO,GUGLI,HARPER_D,HAWKINS,HENDERSO +---> HORNACEK,HORRY,HOUSTON,HOWARD,JACK,JHOWARD +---> JOHNSN_L,JSMITH,KANDERSON,KEDWARDS,KEMP,KERR,KIDD,KJOHNSON +---> KNORMAN,KONCAK,KUKOC,LAETTNER +---> LMURRAY,LONGLEY,MALONE_K,MANNING,MARCIULO +---> MASH,MASON,MCCLOUD,MCDYESS,MCKEE,MILLER +---> MJACKSON,MONTROSS,MOURN,MULLIN,MURESAN,TMURRAY,MUTUMBO +---> NANDERSON,OAKLEY,OBANNON,OLAJUWON,OMILLER +---> PACK,PAYTON,PERSON,PHILLS,PIPPEN,PJONES +---> PRICHARD,RADJA,RESPERT,RICE,RICH,RIDER +---> RODMAN,ROOKS,ROSE,RROGERS,SABONIS,SCHREMPF,SEIKALY +---> SFORD,SMITH,SMITS,SPREWELL,SSMITH,STACKHOU,STARKS,STOCKTON +---> STOUDAMI,STRICKLA,THARDAWAY,THILL,THORPE,TISDALE,TMILLS +---> VANEXEL,VAUGHT,VMAXWELL,WEATH +---> WEBBER,WILLIS,WPERSON,WRIGHT,WWILLIAM,ZIDEK +;Special guests: +---> DIVITA +; +sparks.img +---> spark2,spark3,spark4,spark5,spark1 +; +tvtext.img +---> PRESSBUTT,PRESSTURB +---> TopTenred,TopTengrn +---> TopTenblu,TopTenyel +---> start3,insert3,freplay3,join3 +---> start2,insert2,freeplay +---> FulGamered,FulGameblu,FulGamegrn,FulGameyel +---> onePlblu,onePlgrn,onePlyel,onePlred +---> Customblu,Customgrn,Customyel,Customred +---> TopFivblu,TopFivgrn,TopFivyel,TopFivred +---> TournDblu,TournDgrn,TournDyel,TournDred +---> TurnNSblu,TurnNSgrn,TurnNSyel,TurnNSred +---> WorldRblu,WorldRgrn,WorldRyel,WorldRred +---> Top10Dblu,Top10Dgrn,Top10Dyel,Top10Dred +---> BstDfPlblu,BstDfPlgrn,BstDfPlyel,BstDfPlred +---> BstOfPlblu,BstOfPlgrn,BstOfPlyel,BstOfPlred +---> Top5DPblu,Top5DPgrn,Top5DPyel,Top5DPred +---> Top5OPblu,Top5OPgrn,Top5OPyel,Top5OPred +---> Top10Oblu,Top10Ogrn,Top10Oyel,Top10Ored +---> CORECTblu,CORECTgrn,CORECTyel,CORECTred +---> INCRECTblu,INCRECTgrn,INCRECTyel,INCRECTred +---> InvaldNMblu,InvaldNMgrn,InvaldNMyel,InvaldNMred +---> TRIVIA1,TRIVIA2,TRIVIA3,TRIVIA4 +---> QUALIFYblu,QUALIFYgrn,QUALIFYyel,QUALIFYred +---> GrtWnSblu,GrtWnSgrn,GrtWnSyel,GrtWnSred +---> NbaChpblu,NbaChpgrn,NbaChpyel,NbaChpred +---> PRESSPASS +; +inga16.img +PON> +PPP> 5 +---> INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G,INGA16_H +---> INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O,INGA16_P +---> INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W,INGA16_X +---> INGA16_Y,INGA16_Z,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6 +---> INGA16_7,INGA16_8,INGA16_9,INGA16_0,INGA16DEL,INGA16SPC,INGA16END +---> INGA16COM,INGA16PER,INGA16SLS,INGA16QUE,INGA16COL,INGA16EXC +---> INGA16NUM,INGA16DOL,INGA16PCT,INGA16AND,INGA16AST,INGA16PRL,INGA16PRR +---> INGA16ADD,INGA16SUB,INGA16APO +PPP> 0 +; +vsscr.img +ZON> +---> VSB01,VSB02,VSB03,VSB04,VSB05,VSB06,VSB07,VSB08,VSB09 +---> VSS01,VSS02,VSS03,VSS04,VSS05,VSS06,VSS07,VSS08,VSS09 +ZOF> +---> CODE +; +bast7t.img +PON> +---> BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G,BAST7T_H,BAST7T_I +---> BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O,BAST7T_P,BAST7T_Q,BAST7T_R +---> BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W +COF> +---> BAST7T_X +CON> +---> BAST7T_Y,BAST7T_Z,BAST7T_1 +COF> +---> BAST7T_2 +CON> +---> BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7,BAST7T_8,BAST7T_9 +---> BAST7T_0,BAST7TAST,BAST7TEXC,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TLPR +---> BAST7TRPR,BAST7TDSH,BAST7TPLS,BAST7TCOM,BAST7TPER,BAST7TQUE,BAST7TSLS,BAST7TAPO +---> BAST7TCOL,BAST7TSEM +; +bast8.img +---> WIN4FREE,WINSTAY,WNRSSTAY +---> ASISTOFF,NOPUSH,SHOTPERC,BABYPLAY +---> TOURMODE,NOCPU,SECRETS +---> TEAMST,TEAMST4 +---> TRIVPTS,CORRECT,POINTS +PPP> 4 +---> BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G,BAST8_H,BAST8_I +---> BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O,BAST8_P,BAST8_Q,BAST8_R +---> BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W,BAST8_X,BAST8_Y,BAST8_Z,BAST8_0 +---> BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7,BAST8_8,BAST8_9 +---> BAST8COL,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8PRL,BAST8PRR,BAST8PER +---> BAST8COM,BAST8PLS,BAST8QUE,BAST8SLS,BAST8APO,BAST8SEM,BAST8SPC,BAST8EXC +; +bast8t.img +---> BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H +---> BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P +---> BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X +---> BAST8T_Y,BAST8T_Z,BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5 +---> BAST8T_6,BAST8T_7,BAST8T_8,BAST8T_9,BAST8TCOL,BAST8TNUM,BAST8TDOL +---> BAST8TPCT,BAST8TAND,BAST8TPRL,BAST8TPRR,BAST8TPER,BAST8TCOM,BAST8TAPO +---> BAST8TPLS,BAST8TQUE,BAST8TSLS,BAST8TSEM,BAST8TSPC,BAST8TEXC +; +bast10.img +---> BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G,BAST10_H +---> BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O,BAST10_P +---> BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W,BAST10_X +---> BAST10_Y,BAST10_Z,BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5 +---> BAST10_6,BAST10_7,BAST10_8,BAST10_9,BAST10EXC,BAST10NUM,BAST10DOL +---> BAST10PCT,BAST10AND,BAST10PRL,BAST10PRR,BAST10PLS,BAST10APO,BAST10DSH +---> BAST10SLS,BAST10COM,BAST10PER,BAST10SEM,BAST10COL,BAST10QUE +PPP> 5 ;don't change this...its for echoing enter inits... +---> BAST10SPC +PPP> 0 +; +bast18.img +---> BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G +---> BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O +---> BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W +---> BAST18_X,BAST18_Y,BAST18_Z,BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4 +---> BAST18_5,BAST18_6,BAST18_7,BAST18_8,BAST18_9,BAST18EXC,BAST18NUM +---> BAST18DOL,BAST18PCT,BAST18AND,BAST18PRL,BAST18PRR,BAST18ADD,BAST18DSH +---> BAST18SLS,BAST18PER,BAST18COM,BAST18COL,BAST18APO,BAST18_1a +; +brush50.img +---> BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G,BRSH50_H +---> BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O,BRSH50_P +---> BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W,BRSH50_X +---> BRSH50_Y,BRSH50_Z,BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5 +---> BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9,BRSH50AND,BRSH50COL,BRSH50COM +---> BRSH50DOL,BRSH50EXC,BRSH50NUM,BRSH50PCT,BRSH50PER,BRSH50PRL,BRSH50PRR +---> BRSH50QUE,BRSH50SLS +; +brush20f.img +PON> +PPP> 5 +---> BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G +---> BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O +---> BRSH20_P,BRSH20_Q +COF> +---> BRSH20_R +CON> +---> BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W +---> BRSH20_X,BRSH20_Y,BRSH20_Z,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 +---> BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9,BRSH20_0,BRSH20COM,BRSH20PER +---> BRSH20SLS,BRSH20QUE,BRSH20EXC,BRSH20PCT,BRSH20COL +PPP> 0 +---> SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05,SQUD_06,SQUD_07,SQUD_08 +---> SQUD_09,SQUD_10,SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17 +---> SQUD_18,SQUD_19,SQUD_20 +---> useupbx,TRIVIA,CONTEST +; +ballfont.img +---> FNT_SEL,FNT_ENT,FNT_CRE +; +brush12.img +PON> +PPP> 5 +---> BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F +---> BRSH12_G,BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L +---> BRSH12_M,BRSH12_N,BRSH12_O,BRSH12_P,BRSH12_Q,BRSH12_R +---> BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W,BRSH12_X +---> BRSH12_Y,BRSH12_Z +---> BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 +---> BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +---> BRSH12QUE,BRSH12EXC,BRSH12COL +---> BRSH12DOL,BRSH12PER,BRSH12COM,BRSH12SLS,BRSH12NUM,BRSH12PCT,BRSH12AND +---> BRSH12PRL,BRSH12PRR,BRSH12DAS +PPP> 0 +; +brush10.img +PON> +PPP> 5 +---> BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F +---> BRSH10_G,BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L +---> BRSH10_M,BRSH10_N,BRSH10_O,BRSH10_P,BRSH10_Q,BRSH10_R +---> BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W,BRSH10_X +---> BRSH10_Y,BRSH10_Z +---> BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5 +---> BRSH10_6,BRSH10_7,BRSH10_8,BRSH10_9 +---> BRSH10COM,BRSH10PER,BRSH10SLS +---> BRSH10QUE,BRSH10EXC,BRSH10DOL,BRSH10PCT,BRSH10AND,BRSH10NUM,BRSH10PRL +---> BRSH10PRR,BRSH10COL +PPP> 0 +; +statstxt.img +---> scorshad1,scorshad2 +---> stx_all,stx_aveallow,stx_avescore,stx_created,stx_current,stx_defeated +---> stx_defrank,stx_havenot,stx_l,stx_nbateams,stx_nextcpu,stx_offrank +---> stx_ofthe27,stx_overall,stx_record,stx_tournwin,stx_w,stx_worldrec +---> stx_youhave,stx_avepoint,stx_lostto,stx_norecord,stx_pct,stx_wins +---> credbox +COF> +---> stshad1,stshad2 +CON> +; +threepnt.img +---> THREPNTS +IHDR PAL:L +---> THREP1,THREP2,THREP3,THREP4,THREP5,THREP6,THREP7,THREP8,THREP9,THREP10 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +sgmd8.img +---> plyr1,plyr2,plyr3,plyr4 +; +ogmd10.img +COF> +---> getready,_1quart,continue +---> _2quart,_3quart +---> _4quart,overtme +---> congrats_l,winstay_l,chalneed_l,chalacc_l,winfree +---> TMATE +---> CHALENG +CON> +; +infowin.img +---> dronetxt,firstwin,colormessage,joycontrol,red,blue,green,yellow +---> message1,message2,message3,message4,message5,message6,message7 +---> message9,message2a +---> infobox,CREDNOT,WINPIECE +; +expl_old.img +PON> +---> CLD1A +---> CLDB1 +---> CLDB1YELL +---> CLDB1WHT,CLDB1ORNG,CLDB1LGRY,CLDB1GRN,CLDB1PURP +POF> +---> CLD2,CLD3,CLD4,CLD4A,CLD4B,CLD5,CLD6,CLD7,CLD8,CLD9,CLD10,CLD11 +---> CLDB2,CLDB3,CLDB4 +PON> +; +flash.img +PPP> 5 +---> flash1,flash4 +---> flash3,flash3a,flash5,flash6,flash2 +PPP> 0 +; +;ASM> ARROW.TBL +; +arrows.img +---> arrow1l,arrow1r,arrow2l,arrow2r,arrow3l,arrow3r,arrow4l,arrow4r +---> arrow1t,arrow2t,arrow3t,arrow4t +---> arrow1l2p,arrow1r2p,arrow2l2p,arrow2r2p +---> arrow1t2p,arrow2t2p +; +ASM> CITY.TBL +; +citnames.img +---> ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND +---> LA_CLIP,LA_LAKS +---> MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT,SEA,UTAH,WASH +---> TORO,VANC +---> SCOR18_0,SCOR18_1,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5 +---> SCOR18_6,SCOR18_7,SCOR18_8,SCOR18_9 +; +ASM> LEDS.TBL +GLO> FONTTBL.GLO +; +leds1.img +ZOF> +COF> +---> QUARTR01,QUARTR02,QUARTR03,QUARTR04,OT01,OT02,OT03,OT04,SHOTPER,FREEPLT +---> MINCOL00,MINCOL01,MINCOL02,MINCOL03 +---> TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 +---> TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 +---> LED_00 +IHDR SAG:L +;These images are not referenced - but needed... +---> LED_0,LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LED_9 +---> LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,LED_17,LED_18,LED_19 +---> LED_20,LED_21,LED_22,LED_23,LED_24,LED_25,LED_26,LED_27,LED_28,LED_29 +---> LED_30,LED_31,LED_32,LED_33,LED_34,LED_35,LED_36,LED_37,LED_38,LED_39 +---> LED_40,LED_41,LED_42,LED_43,LED_44,LED_45,LED_46,LED_47,LED_48,LED_49 +---> LED_50,LED_51,LED_52,LED_53,LED_54,LED_55,LED_56,LED_57,LED_58,LED_59 +---> LED_60,LED_61,LED_62,LED_63,LED_64,LED_65,LED_66,LED_67,LED_68,LED_69 +---> LED_70,LED_71,LED_72,LED_73,LED_74,LED_75,LED_76,LED_77,LED_78,LED_79 +---> LED_80,LED_81,LED_82,LED_83,LED_84,LED_85,LED_86,LED_87,LED_88,LED_89 +---> LED_90,LED_91,LED_92,LED_93,LED_94,LED_95,LED_96,LED_97,LED_98,LED_99 +; +---> LED_100,LED_101,LED_102,LED_103,LED_104,LED_105,LED_106,LED_107,LED_108,LED_109 +---> LED_110,LED_111,LED_112,LED_113,LED_114,LED_115,LED_116,LED_117,LED_118,LED_119 +---> LED_120,LED_121,LED_122,LED_123,LED_124,LED_125,LED_126,LED_127,LED_128,LED_129 +---> LED_130,LED_131,LED_132,LED_133,LED_134,LED_135,LED_136,LED_137,LED_138,LED_139 +---> LED_140,LED_141,LED_142,LED_143,LED_144,LED_145,LED_146,LED_147,LED_148,LED_149 +---> LED_150 +---> LED_MAX +---> LED_0A,LED_1A,LED_2A,LED_3A,LED_4A,LED_5A,LED_6A,LED_7A,LED_8A,LED_9A +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> TEXT.TBL +; +trogf15.img +COF> +POF> +---> FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 +---> FON15A,FON15B,FON15C,FON15CR,FON15D,FON15E,FON15F,FON15G,FON15H,FON15I +---> FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P,FON15Q,FON15R,FON15S +---> FON15T,FON15U,FON15V,FON15W,FON15X,FON15Y,FON15Z,FON15and,FON15apos +---> FON15apos1,FON15ast,FON15backsp,FON15brackl,FON15brackr,FON15break +---> FON15carr,FON15colon,FON15comma,FON15dash,FON15doll,FON15engPOUN +---> FON15equal,FON15excla,FON15forsp,FON15la,FON15lb,FON15lc,FON15ld +---> FON15le,FON15less,FON15lf,FON15lg,FON15lh,FON15li,FON15line,FON15lj +---> FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp,FON15lq,FON15lr +---> FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx,FON15ly,FON15lz +---> FON15more,FON15paren2l,FON15paren2r,FON15parenl,FON15parenr,FON15perc +---> FON15period,FON15plus,FON15poun,FON15quest,FON15quote,FON15rquote +---> FON15semicol +; +trogf7.img +---> FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H,FONT7I,FONT7J +---> FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P,FONT7Q,FONT7R,FONT7S,FONT7T +---> FONT7U,FONT7V,FONT7W,FONT7X,FONT7Y,FONT7Z,FONT7a,FONT7b,FONT7c,FONT7d +---> FONT7e,FONT7f,FONT7g,FONT7h,FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n +---> FONT7o,FONT7p,FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT71,FONT72 +---> FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79,FONT70,FONT7excla +---> FONT7pound,FONT7doll,FONT7percen,FONT7and,FONT7ast,FONT7parenl +---> FONT7parenr,FONT7dash,FONT7line,FONT7equal,FONT7plus,FONT7bracl +---> FONT7bracr,FONT7backsp,FONT7paren2l,FONT7paren2r,FONT7break +---> FONT7semicol,FONT7apost,FONT7colon,FONT7quote,FONT7comma,FONT7period +---> FONT7forsp,FONT7less,FONT7more,FONT7quest +PON> +; +ASM> ROBOIMG.TBL +GLO> ROBOIMG.GLO +; +robotron.img +COF> +---> robo_bad,bullet_hrz,bullet_vrt,bullet_bck,bullet_fnt,grunt_1,grunt_2 +---> grunt_3,robo_dead +;---> brain_l1,brain_l2,brain_l3,brain_r1,brain_r2,brain_r3 +;---> brain_d1,brain_d2,brain_d3,brain_u1,brain_u2,brain_u3 +---> enf_1,enf_g1 +---> enf_g2,enf_g3,enf_g4,enf_g5,spark_1,spark_2,spark_3,spark_4,man_l1 +---> man_l2,man_l3,man_r1,man_r2,man_r3,man_d1,man_d2,man_d3,man_u1,man_u2 +---> man_u3,skull,one_k,two_k,three_k,four_k,five_k,mom_l1,mom_l2,mom_l3 +---> mom_r1,mom_r2,mom_r3,mom_d1,mom_d2,mom_d3,mom_u1,mom_u2,mom_u3,dad_l1 +---> dad_l2,dad_l3,dad_r1,dad_r2,dad_r3,dad_d1,dad_d2,dad_d3,dad_u1,dad_u2 +---> dad_u3,kid_l1,kid_l2,kid_l3,kid_r1,kid_r2,kid_r3,kid_d1,kid_d2,kid_d3 +---> kid_u1,kid_u2,kid_u3,hulk_l1,hulk_l2,hulk_l3,hulk_ud1,hulk_ud2,hulk_ud3 +---> hulk_r1,hulk_r2,hulk_r3,rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5 +---> rfont_6,rfont_7,rfont_8,rfont_9,rfont_exc,rfont_comma,rfont_period +---> rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g,rfont_h,rfont_i +---> rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o,rfont_p,rfont_q,rfont_r +---> rfont_s,rfont_t,rfont_u,rfont_v,rfont_w,rfont_x,rfont_y,rfont_z +---> rfont_lparens,rfont_rparens,rfont_fslash +;---> rfont_arrow +---> wave_text,circle_1 +---> circle_2,circle_3,circle_4,circle_5,circle_6,circle_7,circle_8,rsmall_0 +---> rsmall_1,rsmall_2,rsmall_3,rsmall_4,rsmall_5,rsmall_6,rsmall_7,rsmall_8 +---> rsmall_9,grunt_xv1,grunt_xv2,grunt_xv3,grunt_xv4,grunt_xdb1,grunt_xdb2 +---> grunt_xdb3,grunt_xdb4,grunt_xh1,grunt_xh2,grunt_xh3,grunt_xh4 +---> grunt_xdf1,grunt_xdf2,grunt_xdf3,grunt_xdf4,star_1,star_2,star_3 +---> crystal_1,crystal_2,crystal_3,diamond_1,diamond_2,diamond_3,R2084_1 +---> R2084_2,R2084_3,pcube_1,pcube_2,pcube_3,spiral_1,spiral_2,spiral_3 +---> square_1,square_2,square_3,triangle_1,triangle_2,triangle_3,rectangle_1 +---> rectangle_2,rectangle_3,enf_xv1,enf_xv2,enf_xv3,enf_xv4,enf_xv5,enf_xb1 +---> enf_xb2,enf_xb3,enf_xb4,enf_xh1,enf_xh2,enf_xh3,enf_xh4,enf_xf1,enf_xf2 +---> enf_xf3,enf_xf4,tank_g1,tank_g2,tank_g3,tank_g4,quark_1,quark_2,quark_3 +---> quark_4,quark_5,quark_6,quark_7,quark_8,tank_1,tank_2,tank_3,tank_4 +---> shell +CON> +; +;  ;THESE ARE CHARACTERS TO MAKE DIFFERENT! +ASM> IMGTBL.ASM +GLO> BGNDTBL.GLO +; +BBB> BLANKJAM +; +BBB> TEAMSEL4 +BBB> ENTER4 +BBB> OPTSCR +;BBB> VSSCR +BBB> SPORTBG +BBB> ATTRACT +BBB> HALFTIME diff --git a/BACKUP/XART100/MUGS1.IMG b/BACKUP/XART100/MUGS1.IMG new file mode 100644 index 0000000..89bb639 Binary files /dev/null and b/BACKUP/XART100/MUGS1.IMG differ diff --git a/BACKUP/XART100/MUGS2.IMG b/BACKUP/XART100/MUGS2.IMG new file mode 100644 index 0000000..a9929ea Binary files /dev/null and b/BACKUP/XART100/MUGS2.IMG differ diff --git a/BACKUP/XART100/MUGS3.IMG b/BACKUP/XART100/MUGS3.IMG new file mode 100644 index 0000000..1936988 Binary files /dev/null and b/BACKUP/XART100/MUGS3.IMG differ diff --git a/BACKUP/XART100/MUGS4.IMG b/BACKUP/XART100/MUGS4.IMG new file mode 100644 index 0000000..f3a9586 Binary files /dev/null and b/BACKUP/XART100/MUGS4.IMG differ diff --git a/BACKUP/XART100/MUGSMSC1.IMG b/BACKUP/XART100/MUGSMSC1.IMG new file mode 100644 index 0000000..c236751 Binary files /dev/null and b/BACKUP/XART100/MUGSMSC1.IMG differ diff --git a/BACKUP/XART100/MUGSMSC2.IMG b/BACKUP/XART100/MUGSMSC2.IMG new file mode 100644 index 0000000..310e5a8 Binary files /dev/null and b/BACKUP/XART100/MUGSMSC2.IMG differ diff --git a/BACKUP/XART100/MUGSMSC3.IMG b/BACKUP/XART100/MUGSMSC3.IMG new file mode 100644 index 0000000..a3675a1 Binary files /dev/null and b/BACKUP/XART100/MUGSMSC3.IMG differ diff --git a/BACKUP/XART100/MUGSMSC4.IMG b/BACKUP/XART100/MUGSMSC4.IMG new file mode 100644 index 0000000..14a97fc Binary files /dev/null and b/BACKUP/XART100/MUGSMSC4.IMG differ diff --git a/BACKUP/XART100/MUGSMSC5.IMG b/BACKUP/XART100/MUGSMSC5.IMG new file mode 100644 index 0000000..caab341 Binary files /dev/null and b/BACKUP/XART100/MUGSMSC5.IMG differ diff --git a/BACKUP/XART100/MUGSMSC6.IMG b/BACKUP/XART100/MUGSMSC6.IMG new file mode 100644 index 0000000..869a9cd Binary files /dev/null and b/BACKUP/XART100/MUGSMSC6.IMG differ diff --git a/BACKUP/XART100/MUGSMSC7.IMG b/BACKUP/XART100/MUGSMSC7.IMG new file mode 100644 index 0000000..cf68eaa Binary files /dev/null and b/BACKUP/XART100/MUGSMSC7.IMG differ diff --git a/BACKUP/XART100/MUGSMSC8.IMG b/BACKUP/XART100/MUGSMSC8.IMG new file mode 100644 index 0000000..ce2bfaa Binary files /dev/null and b/BACKUP/XART100/MUGSMSC8.IMG differ diff --git a/BACKUP/XART100/NBACROWD.IMG b/BACKUP/XART100/NBACROWD.IMG new file mode 100644 index 0000000..fac4024 Binary files /dev/null and b/BACKUP/XART100/NBACROWD.IMG differ diff --git a/BACKUP/XART100/NBAFADES.IMG b/BACKUP/XART100/NBAFADES.IMG new file mode 100644 index 0000000..47bdf26 Binary files /dev/null and b/BACKUP/XART100/NBAFADES.IMG differ diff --git a/BACKUP/XART100/NBAFHOOK.IMG b/BACKUP/XART100/NBAFHOOK.IMG new file mode 100644 index 0000000..0ae3a0b Binary files /dev/null and b/BACKUP/XART100/NBAFHOOK.IMG differ diff --git a/BACKUP/XART100/NBAJMPPS.IMG b/BACKUP/XART100/NBAJMPPS.IMG new file mode 100644 index 0000000..4bcedc2 Binary files /dev/null and b/BACKUP/XART100/NBAJMPPS.IMG differ diff --git a/BACKUP/XART100/NBALL.IMG b/BACKUP/XART100/NBALL.IMG new file mode 100644 index 0000000..f2fd2d1 Binary files /dev/null and b/BACKUP/XART100/NBALL.IMG differ diff --git a/BACKUP/XART100/NBASPNMV.IMG b/BACKUP/XART100/NBASPNMV.IMG new file mode 100644 index 0000000..3811406 Binary files /dev/null and b/BACKUP/XART100/NBASPNMV.IMG differ diff --git a/BACKUP/XART100/NBA_DEF1.IMG b/BACKUP/XART100/NBA_DEF1.IMG new file mode 100644 index 0000000..202fc48 Binary files /dev/null and b/BACKUP/XART100/NBA_DEF1.IMG differ diff --git a/BACKUP/XART100/NBA_DEF3.IMG b/BACKUP/XART100/NBA_DEF3.IMG new file mode 100644 index 0000000..c68a49e Binary files /dev/null and b/BACKUP/XART100/NBA_DEF3.IMG differ diff --git a/BACKUP/XART100/NBA_DEF4.IMG b/BACKUP/XART100/NBA_DEF4.IMG new file mode 100644 index 0000000..6fe4658 Binary files /dev/null and b/BACKUP/XART100/NBA_DEF4.IMG differ diff --git a/BACKUP/XART100/NBA_DNK1.IMG b/BACKUP/XART100/NBA_DNK1.IMG new file mode 100644 index 0000000..23bc494 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK1.IMG differ diff --git a/BACKUP/XART100/NBA_DNK2.IMG b/BACKUP/XART100/NBA_DNK2.IMG new file mode 100644 index 0000000..89172a9 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK2.IMG differ diff --git a/BACKUP/XART100/NBA_DNK3.IMG b/BACKUP/XART100/NBA_DNK3.IMG new file mode 100644 index 0000000..65b40dc Binary files /dev/null and b/BACKUP/XART100/NBA_DNK3.IMG differ diff --git a/BACKUP/XART100/NBA_DNK4.IMG b/BACKUP/XART100/NBA_DNK4.IMG new file mode 100644 index 0000000..97aa888 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK4.IMG differ diff --git a/BACKUP/XART100/NBA_DNK5.IMG b/BACKUP/XART100/NBA_DNK5.IMG new file mode 100644 index 0000000..6de9ce9 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK5.IMG differ diff --git a/BACKUP/XART100/NBA_DNK6.IMG b/BACKUP/XART100/NBA_DNK6.IMG new file mode 100644 index 0000000..a7e23ba Binary files /dev/null and b/BACKUP/XART100/NBA_DNK6.IMG differ diff --git a/BACKUP/XART100/NBA_DNK7.IMG b/BACKUP/XART100/NBA_DNK7.IMG new file mode 100644 index 0000000..3756803 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK7.IMG differ diff --git a/BACKUP/XART100/NBA_DNK8.IMG b/BACKUP/XART100/NBA_DNK8.IMG new file mode 100644 index 0000000..bdbb5c9 Binary files /dev/null and b/BACKUP/XART100/NBA_DNK8.IMG differ diff --git a/BACKUP/XART100/NBA_MAK1.IMG b/BACKUP/XART100/NBA_MAK1.IMG new file mode 100644 index 0000000..9ee1784 Binary files /dev/null and b/BACKUP/XART100/NBA_MAK1.IMG differ diff --git a/BACKUP/XART100/NBA_MSC1.IMG b/BACKUP/XART100/NBA_MSC1.IMG new file mode 100644 index 0000000..d9c497a Binary files /dev/null and b/BACKUP/XART100/NBA_MSC1.IMG differ diff --git a/BACKUP/XART100/NBA_MSC2.IMG b/BACKUP/XART100/NBA_MSC2.IMG new file mode 100644 index 0000000..1b4a762 Binary files /dev/null and b/BACKUP/XART100/NBA_MSC2.IMG differ diff --git a/BACKUP/XART100/NBA_MSC3.IMG b/BACKUP/XART100/NBA_MSC3.IMG new file mode 100644 index 0000000..926c427 Binary files /dev/null and b/BACKUP/XART100/NBA_MSC3.IMG differ diff --git a/BACKUP/XART100/NBA_MSC4.IMG b/BACKUP/XART100/NBA_MSC4.IMG new file mode 100644 index 0000000..045b9d9 Binary files /dev/null and b/BACKUP/XART100/NBA_MSC4.IMG differ diff --git a/BACKUP/XART100/NBA_PAS1.IMG b/BACKUP/XART100/NBA_PAS1.IMG new file mode 100644 index 0000000..5f9180b Binary files /dev/null and b/BACKUP/XART100/NBA_PAS1.IMG differ diff --git a/BACKUP/XART100/NBA_PAS2.IMG b/BACKUP/XART100/NBA_PAS2.IMG new file mode 100644 index 0000000..3d39ef7 Binary files /dev/null and b/BACKUP/XART100/NBA_PAS2.IMG differ diff --git a/BACKUP/XART100/NBA_PAS3.IMG b/BACKUP/XART100/NBA_PAS3.IMG new file mode 100644 index 0000000..0819b07 Binary files /dev/null and b/BACKUP/XART100/NBA_PAS3.IMG differ diff --git a/BACKUP/XART100/NBA_PAS4.IMG b/BACKUP/XART100/NBA_PAS4.IMG new file mode 100644 index 0000000..bb5f1b6 Binary files /dev/null and b/BACKUP/XART100/NBA_PAS4.IMG differ diff --git a/BACKUP/XART100/NBA_RUN1.IMG b/BACKUP/XART100/NBA_RUN1.IMG new file mode 100644 index 0000000..81490e0 Binary files /dev/null and b/BACKUP/XART100/NBA_RUN1.IMG differ diff --git a/BACKUP/XART100/NBA_RUN2.IMG b/BACKUP/XART100/NBA_RUN2.IMG new file mode 100644 index 0000000..75c8202 Binary files /dev/null and b/BACKUP/XART100/NBA_RUN2.IMG differ diff --git a/BACKUP/XART100/NBA_SHT1.IMG b/BACKUP/XART100/NBA_SHT1.IMG new file mode 100644 index 0000000..88f1481 Binary files /dev/null and b/BACKUP/XART100/NBA_SHT1.IMG differ diff --git a/BACKUP/XART100/NBA_SHT2.IMG b/BACKUP/XART100/NBA_SHT2.IMG new file mode 100644 index 0000000..1a6d2a2 Binary files /dev/null and b/BACKUP/XART100/NBA_SHT2.IMG differ diff --git a/BACKUP/XART100/NBA_SHT3.IMG b/BACKUP/XART100/NBA_SHT3.IMG new file mode 100644 index 0000000..f583f91 Binary files /dev/null and b/BACKUP/XART100/NBA_SHT3.IMG differ diff --git a/BACKUP/XART100/NBA_STN1.IMG b/BACKUP/XART100/NBA_STN1.IMG new file mode 100644 index 0000000..7cb1c20 Binary files /dev/null and b/BACKUP/XART100/NBA_STN1.IMG differ diff --git a/BACKUP/XART100/NBBD8.IMG b/BACKUP/XART100/NBBD8.IMG new file mode 100644 index 0000000..4a26aae Binary files /dev/null and b/BACKUP/XART100/NBBD8.IMG differ diff --git a/BACKUP/XART100/NEWLOGOS.IMG b/BACKUP/XART100/NEWLOGOS.IMG new file mode 100644 index 0000000..3b78aba Binary files /dev/null and b/BACKUP/XART100/NEWLOGOS.IMG differ diff --git a/BACKUP/XART100/OFFNBA.IMG b/BACKUP/XART100/OFFNBA.IMG new file mode 100644 index 0000000..0b4b600 Binary files /dev/null and b/BACKUP/XART100/OFFNBA.IMG differ diff --git a/BACKUP/XART100/OGMD10.IMG b/BACKUP/XART100/OGMD10.IMG new file mode 100644 index 0000000..5677505 Binary files /dev/null and b/BACKUP/XART100/OGMD10.IMG differ diff --git a/BACKUP/XART100/OPTSCR.BDB b/BACKUP/XART100/OPTSCR.BDB new file mode 100644 index 0000000..e20dfd3 --- /dev/null +++ b/BACKUP/XART100/OPTSCR.BDB @@ -0,0 +1,17 @@ +OPTSCR 2000 1000 255 2 8 14 +OPTSCR 887 1414 357 638 +BKGD 245 757 191 513 +4000 297 228 0 0 +4000 297 332 15 7 +4000 297 406 C 4 +4000 396 228 3 1 +4000 497 228 9 3 +4000 497 332 12 6 +4000 497 406 F 5 +4000 597 228 6 2 +4000 963 513 15 7 +4000 963 409 0 0 +4000 1062 409 3 1 +4000 1163 513 12 6 +4000 1163 409 9 3 +4000 1263 409 6 2 diff --git a/BACKUP/XART100/OPTSCR.BDD b/BACKUP/XART100/OPTSCR.BDD new file mode 100644 index 0000000..9ba7384 Binary files /dev/null and b/BACKUP/XART100/OPTSCR.BDD differ diff --git a/BACKUP/XART100/OPTSCR.IMG b/BACKUP/XART100/OPTSCR.IMG new file mode 100644 index 0000000..84e52a2 Binary files /dev/null and b/BACKUP/XART100/OPTSCR.IMG differ diff --git a/BACKUP/XART100/OUTDOOR.BIN b/BACKUP/XART100/OUTDOOR.BIN new file mode 100644 index 0000000..fca5620 Binary files /dev/null and b/BACKUP/XART100/OUTDOOR.BIN differ diff --git a/BACKUP/XART100/OUTDOOR.IMG b/BACKUP/XART100/OUTDOOR.IMG new file mode 100644 index 0000000..0c05275 Binary files /dev/null and b/BACKUP/XART100/OUTDOOR.IMG differ diff --git a/BACKUP/XART100/PLYRNAME.IMG b/BACKUP/XART100/PLYRNAME.IMG new file mode 100644 index 0000000..33d88f5 Binary files /dev/null and b/BACKUP/XART100/PLYRNAME.IMG differ diff --git a/BACKUP/XART100/PLYRNUBS.IMG b/BACKUP/XART100/PLYRNUBS.IMG new file mode 100644 index 0000000..0a795d9 Binary files /dev/null and b/BACKUP/XART100/PLYRNUBS.IMG differ diff --git a/BACKUP/XART100/PNAMES.IMG b/BACKUP/XART100/PNAMES.IMG new file mode 100644 index 0000000..91f9fef Binary files /dev/null and b/BACKUP/XART100/PNAMES.IMG differ diff --git a/BACKUP/XART100/PNAMES2.IMG b/BACKUP/XART100/PNAMES2.IMG new file mode 100644 index 0000000..fef47d9 Binary files /dev/null and b/BACKUP/XART100/PNAMES2.IMG differ diff --git a/BACKUP/XART100/PRIVILG.IMG b/BACKUP/XART100/PRIVILG.IMG new file mode 100644 index 0000000..4d05b72 Binary files /dev/null and b/BACKUP/XART100/PRIVILG.IMG differ diff --git a/BACKUP/XART100/PRIVILG2.IMG b/BACKUP/XART100/PRIVILG2.IMG new file mode 100644 index 0000000..27001a8 Binary files /dev/null and b/BACKUP/XART100/PRIVILG2.IMG differ diff --git a/BACKUP/XART100/PRIZES.IMG b/BACKUP/XART100/PRIZES.IMG new file mode 100644 index 0000000..ccd5991 Binary files /dev/null and b/BACKUP/XART100/PRIZES.IMG differ diff --git a/BACKUP/XART100/REFEREE.IMG b/BACKUP/XART100/REFEREE.IMG new file mode 100644 index 0000000..2464c90 Binary files /dev/null and b/BACKUP/XART100/REFEREE.IMG differ diff --git a/BACKUP/XART100/ROBOTRON.IMG b/BACKUP/XART100/ROBOTRON.IMG new file mode 100644 index 0000000..f5c6f98 Binary files /dev/null and b/BACKUP/XART100/ROBOTRON.IMG differ diff --git a/BACKUP/XART100/SGMD8.IMG b/BACKUP/XART100/SGMD8.IMG new file mode 100644 index 0000000..b9fe13f Binary files /dev/null and b/BACKUP/XART100/SGMD8.IMG differ diff --git a/BACKUP/XART100/SPARKS.IMG b/BACKUP/XART100/SPARKS.IMG new file mode 100644 index 0000000..04fa07e Binary files /dev/null and b/BACKUP/XART100/SPARKS.IMG differ diff --git a/BACKUP/XART100/SPORTBG.BDB b/BACKUP/XART100/SPORTBG.BDB new file mode 100644 index 0000000..c1509f9 --- /dev/null +++ b/BACKUP/XART100/SPORTBG.BDB @@ -0,0 +1,8 @@ +SPORTBG 2000 1000 255 1 6 6 +SPORTBG 82 492 94 434 +A00 174 308 9 3 +A00 174 223 6 2 +A00 174 143 0 0 +A00 374 308 F 5 +A00 374 223 3 1 +A00 374 143 C 4 diff --git a/BACKUP/XART100/SPORTBG.BDD b/BACKUP/XART100/SPORTBG.BDD new file mode 100644 index 0000000..4161c40 --- /dev/null +++ b/BACKUP/XART100/SPORTBG.BDD @@ -0,0 +1,720 @@ +6 +9 200 90 1 +utjsrqfslrpfrrirbfp\ildddhhddj`bgddee__d^\Z][[dT]WXXM^TTPPUeeeSYBJKOCOMNUNZCKVLSFHOIEEEHJHFBRB0FD@@D<<;F=???B9=?1B1=6;4445885;43?146&3545+*4%321)6*+$+,$*&(%2& +(//*) """!! +! +rrkjxfiiivqfrbjipaaihhlggg^^ddddgbf\g_eXd[dXd\VbT[dU[T[XZfKKKKKfHOOOLOHRSNeEPIFHGNGLKB0`B?FDLCFF;D@O<2F;;;;<=8>@=1?:=?2?<3;;9;3<22255&<4565632!1%343%%%&()2%)$+***"&!"&"$#! ! xqppfvqffwjslhljqfpqqfcldgghhd[__d[^gjVYcWW^[[[[WSbaaaYYVZPTMSFPOKYCVKRKFOVKRHHJ`J0RHFFIIDOD@F??H<==F<<;:@=?1?1?=;==5::9=22?13864?334)54%2123332((%(65!&())))"&1(&&"""$""/pxf{qxxxsttlltlkjbiiqpbhhhh_gjch[g^W^c\aYZcW^W^[X^ZYRRYYYZTWPLOPOSPSHKYVHVF7=2<<1246=25534;&223%&43%(*54*(%1!!% )%/1%%!%"## %#"  / +pqivxppskleultkkkjb\pqrhhdg[gbbgkccgd[]YaZWW^XTTTSVRKHYY?Y]PWTMTMMMMSLLFFHK?RRRR0RHLICOCFFHHBB?=C;H6=3;213;?15+844221!3&3&356(3&%2&(43!12&0&%*$"""("""" + ppirxieutttkklgtgktldlbichhdk^kfVbcjZ]g^bZZY\aKYYKfS^TUSRRK`HOSLSZIMPPI`RKKHHKFOCLFF;LD;??<D??<<<=C===9@9;<2?1?223=66=333<3334&212(32%2!%2%21!%&()(#$#"( $# !qvqqqxaqjkleulkltgudgggdllkjckd]Jf]^ghd[d_[b\YYpK\WPWWP\JRKYaRSMGPVLLSV?KHD><0<>F?2?<<=1?=;433=5321222<(5%332112&32!()(%3 )(!&+") *"###&"#"!!&%!   rivq{ppqivxoxjllksscsgcanqj^gk^gcfaaaaYYZS]^TbYS]bPTP\YOVZWPO`BRYKKVHHFHOLLLH?KKAA:=00B?<3;6;4==;;32?12<243!222&4&3!!1!6(23**)&%4") "##"#"&"% +  q{fxxqvwrfoop\ssssjbskjaaYbqbkgboRaffaaVfbWWW]Y]]]WT^OYYaHOVJnJRYFZOOFKKVLLHRKR?KFH?KGGC???BBH8C>:@@>:DD8@>CA981J12842222?122211133112&5)3%212%!1&(!1()%&&1! %%      + + ypxxxaxfxyaxvqfirvfffpaaitk]rYibbbiRfjWc]]]]]Za`RRJ`K\\VVVYRRKYHVKHOOHaFLOHKKR0?OAD89;=898201<22<22212122!04***)0//022%4!%(&!(!&%!  ! +  +  oopo`yxxxxvqiqvffqpyqijjff\bbjbZifJ```nR\YJRaR`RaVaKYHOOVVKRRaKRKHHFOOFK?RRKFF?BFDGNGICCFCCFBB1BJ?/F9D899D89D9;?1B%=321111211233=6+:75%1!(%3&!2))&2%!!%0%!!% "!   }a{yyxfqfqivqfrriqafirjjbffbji\b\pn`ooRaRnnao``\Z\VaRKYVVRRRRKOVYVOZOHY?RBVILHRFODMADCLDCCF;FF?B0B?<8<=;C8D::88<00?<211112;3?335&(+*)()(66 40&)1%(%!%%%%"  +   oyyayp{fypqqfxrrfofsbiijjafr]bbjjY``oaYa`nn``RKZ\VfVfYfKaRKYVOOYKHLO?BRRBRSIKBRCIG@LLCDDIDCC@@CK@C;CC;;<0B0228968582B1?10?576323455&/2&5(*+6(&(%0!0%&! !!!! +  + +  z`nnzoyppypxpaooaxirrjjiqijjb\oai\```aYYYaaYYaRRYVYRaVYYYYB`\LVaB`J?YKRRCOLPPOK?BFLCFFDD=R>?0D2<;615C237,:/?1:,119/11,6,1,7.,11/#,#,#,,,1,%)-/"$.-%%))$,"00 1  "" "#"/" !##!!pjjiii\yhslddme^kke_^eenZdkTe_`V_M[WI]Wg[LoGWRRXHXMHbRUYSKZN\C[WCLQP88GG[CL9WCDJH9?HD9HDQDMHHH9WCCC?:@90?>:08?2<2@:GC6379C??1?1001/?0C/910-79"1#/11?,--"1,)...%/#').&*/ "!   " " 0"" !!ji\zaijr[akm`nlk]d_dXpZf_eYde_`^dQaLiagGWLLbYOZYXMoW[HUKOVOM[GC8gHWGgPLHHHH?CWLH\?HJJIH1LDHC??1C???:6D?D<;950D>;>99972:11010099/?1-:,,,!01//"1/--$10/-/ 1)&.))."/-)*+(%F !! 1!! !"#1#"!"r\csicjXrrke_eeennedib^__e^^_Zd]d]iGLGGW\a[TVZ^^OZQP8PMZVOKMG[L[[LLC[LMQQQMDMDH?C?DJ>M9LH?CC?0GC9D::D??B<2:C517>,?0G?:/1::-9-.,:::-6-/0 C/6-,"#,15 ..,")*1 "/+*&&&%1  ""5 !!!"-$"##"!""""sppbijjsarXkdd_nnee_diik^d_ff^]T``b[oWWoC[MVZ^SVVOR\PG[NOTSSMHHHLLC[GWDD:LI@HL?LCWDI@?H>>?C?H:W9::HHCC;O7G52B3>9G0:@-?C19:6,/,:,1/:-,16.$?110 /:#1,..!,**.#.,"/0!*'))+&!!! 1"  !""###$$#!## "!""ppbrraarrQazike__e_ff]i\bpn`_d^ffOa[\aWW[\T^YMRZZTRQL\MIRRSNTX\L?[GC[?LaW?HDHW9M@@DHCC@@9?9@:H/DD:9CC2A;@CC;<>9?972900?,6-9C1?1?11//0!,:/!/-,9#/00../0!2()).)/%-$,/#%)'*&" "$"5 !##"""""!! !5"#!csrabbzWsksP[jeddeff_kciaQdedYZ`VrFG\QLaRZ_U]aQNYTXD\IM\HRTENM?WHQWGWMI?[LLCGCMJ@M@LCL9LLCCH9LC9H91?=B=>6?H7D90?7>D1C?,9,9!C,,001.@!G// 00:-,,,1!##1!51&2).%)).)*'%/-&&&%15#$" 0""!""""## !#" ! #iaospjscq]iobp`mdenZleYc\kcXYen^[Fg[o[WQd_UTUYRTYRITY]WGQINSIPG\IIDQISIHD@@LGWD@MQ9Q@@HCCC?CC?C9CGCBBA>2=<>71559761C-:,,/00,6:,9.7-/-66150/,,//---/00 1#-&-..-&(+*)%%.()"!!! $#"""!"$$""#"!#%#"rozbjsjk]iarcbq_n_ele^ek]hWrd__QFg[bQWaMR]dT`VXT^YTOOQG[WiMMGPPLID\@S@LLIMHH9HHHD?9@@9W?1?D:CC9>,C>B=;29C0?::99?0C,:,162,19.6//"1//#1,.-/0111/#$-)(*&.*')')%%&,!!50"#""#"!##"!##!5" !!rbsirjss\ra\s\tdmnmlYdedjgPXTeQxPabb\X]R\\YT^O^SYZ`VURLL[GDGGGW?LHHMML??L9L?HMMLGGHHHW?LHDH99@>DH6;E7>JBB=D80>E7/1191/90?,991?/-911///111,:15 /,/0!"##/"1.**.&%"-'))# ,"!0!!"!!""/#! "!!! #"  sptb{\aroz\jjrace_n_e_`djarbaLgxhLQLbT_ZRaMYTYY]RUVTYKS\W[Pg[L\HWaHDWC?\?CWLMII9WD@LCC?9999?LDD:H@6>>>=BA21F?E.?C:9//? G,6-,119/0!1/1 0!,6-/1,-1 !/,//"5#-#"-&5$&)'!FF !#"!!!!!$$"0  ##"/!pcjjc|ijbbjkYjWzkn_eff_dk]d\Pgxhaa[bd_`UeSXYTY]YTXXSSTNMQQWh?QHHMI@XQL9QHWC?D@L?@JDL??D9LC??:L19:H96ABBB<>C06,?11:/?991?66,9:.,::9/9/050:,/17.,11/,#"10 !08#&*%)((." F !#"!"$#$""""!1## ! bjtjscjjbpkkpXiabke^n_qd__RhhPhLQLi]YT^^^ZYXYU^VOM[HYSXXDQH?\QQbMSXDHQQ9LLHHHLCL>@L?HD9LL1?:D99W0C0@=BB=>;>:9C0G1C19,:::,:,,-7:-,,,/1!1,/11/%:11,$//"00/,0!-)'**(*#0  !0 "-%$"""#!"$# !! r{\irssssjtcjjcpii]edYdZfeaPoa\bri^Z^XY^T^Tb\TVVTSaaSYQGLa\LL?LDD@DHW??WLHMIH[WH\CW?L?L?99D:LD@9?CC>=BA;7DH@J<<>><<>W819::?C/,C0973619,1509,/#,/11-699,,#,/"/,-#1!1#---&-$ 8 "##/###""%$" """#"!!!$psr{pkppqltspkj\raobe`nsgxhiba[rWX^^T]c]TTdZVcQSTTRM[PGLQH\XERHHXMHWHMQHQLCWHQHHLL:H\?9@:?>N;JJ>>>EB;<<>>3E/5?,:D,9/9::000/?1C01!C!0",:,9,/0//1!/-, #%,--#! 5F 0 0/#!!#%$$"""%!!   tsijjjcjcppjcjsbbjpcz[[oaiab]de`_Xa^V_^Y\\]R]Si8aGL\LiHLLMIRXQWWWCWHDQ?CHI@@HLLDHDDDD:9H>@EAA;;;>>>2>15/76,911,:,-,110 1:,10/,,,///,,-,"#-,"11?,$$"%-#!F !0 "%&$#!!!1!#$ "#"! %jbpqqjijukldcsraspXj\[[WiWbde_Ze^pW]_^YZ_Xb]SRQ[PP[L\W\MMHXIDL\HLW?HQL\IJ@\W?L?M@DLL:L?H9@@@E2E/G?6H?1:H?96:9//1509,/,6:/91!"/--,1"-#1",$#","!--"!!!!"!0 !"!"$%"!!/! ""%" "!$|jqwqjjpqcqpsarjjbrarrWWW\]lnZ_l]]RibdTZVSMYY]RQWy[WLLRTYIQQH?HMQH\HLCME@H?LCW?LHH???L?H:H99@@;E>J/01116;799:/1/:11,9/0-%#,),001,#"!//00#-,,#! !1""0"#"""""#$#""!!##! $""""rjdqjstqtiiiirjelX\aaWaab]dZe]]dTe_bWXd^YdYYYSQaGW\WhWSTIH\?[[HHL?LLCCHDQ?LIMDH9WC0WJ>>HH1CW7@>;>>>;;;;>;4=;2,G05C7)9/9?05?111//00?1,734$,,"050/"""/###,,/$#0 !""!!#%-#"" $! !#"#!!  !tpjssbkkjsi[oi]lprr\biaad___eiaY_ZT\\\RY]]S]XCoG[HQMXRIXDaL?CW?WLWWLWMIWGWL@@H9L9WCJBBAJHCCC9H?:@;>;>7>>;;3;;90?96,////1005 111?0#/16)*)://!/"//$-,/,//#$,/"! ! 0!#$$"""#/! $#!!!!!  wqtrspqujbsiicksa\rbkji\ce_m^b[]^^]L[hbTT]XRLhPPaQITYSQLW[LQbH\CCW?HIJMHWLD\HHLH@DEKBAE;>H/GGPLH@7E4>7>276676?CC01,9/11011/,:622*-0!1 17%/,.,1"#"!1"#"!!1#,#! !$#"!!!#&$# %&!  $qssullpb|s\jmeproWajXb\\bd^ddYYld]a[G[WjRQ]\WGoL\QRTRD\\[CLDQLWH\L\MJML\JJM9C[CHDJEEANJ;A;S:5[PG?9@>;;<EA=A>/?9GP?09L:=<2;4A3;<:C0?7:911011:://1"72+B+-/1-#/!1""!01##/$$""""!!##!!%%##$#1"! !#"!#! #%$ riuvpiazrip]jraaccbj]kd_m]bde_^dXcoPPhhxP[[P[L\iQbXQ[[HXQLWWCGWLLQQ\LWLHHH9CDM:J>JJENEA=AANEANABBEEEJ;J;D9?5PFg81C6>>;3<4<2/C??05!/?,/119)2.)3*7..++-!/#1"$.,""/"1!10!!"! #/! !!!"#""%! !"wmqsaoajmejaarriiikYm^neQy[\bY]kdbWg[icXQ\Q\W\RRbIRb\LLWC[CLHQ\QMHW\JRQLaL0WH9WHKBAEAAE;J>I>;E>D?::C0G?::;<=;3<4;,051/9,?11,)<47/.*).)3$! ,/#1,$"111 1"! !###,%%#!"##!1#$$" # "'%#"wpsza|cvqs{o{]pjoiklnkkiaxi\ildd^dcGaXcQX]XQQ]ScMMQ\LL\L[CLQL\QQQQQMDHHW9MHHH[0LEKESEJJJ;A;;EAE;>>D0?:1G93=<;;3;26?0809:/1"C/3+43-0"7*3+)15 0$-"!0 "/#1"##/"##%%""$#! !$ $" !&  p{oo{kevjo[obqja[cdn_cp\Y]ckcYd^^ecLiMbLb]XLbSRbH\WGaQbQLQ\HL\HHL@IRHWGC\DHJMCC:@>J;E;J;KAEAAA;>3E>/?9CP0><2)3>6776?1,:/C10//3B4*60,4+2.-#,.),!!!",$"##"!1""/"#$"!"%#!"$#"# " azaspvvbaaasjbr[awfnmkk^m_l_kbbllT]i\aWrb\WLbQHHiQQWL\HWLbHaWDQ\Q@IHLLCWL9SJ@M:Q@JEEKA>E>76H?05C/:7;A;7>)>1?-/001:7-7+3*2/8#)*.*4.$*).#/$#,#/!1"1!0!!!" !" 5!$%$#!""! !$oitulk|azjukja[y\lfmdYlnm^l^diWckXX\baaXRQWQXXWaDMQiQHaCWLWWHXMMMM\LWDMDHIJJSJH??JEK=EJE>>>;@M><=>><<>11:G09<<3222?G1050.443-6*)3*1-1$)*()))&-//1",/! 0 0#$"!"#" !!$!!  #"{juvuizoztdjrooaj]kqkleedqYkcXrMkbo\\i]YcXX]S]bLiQ\?LWCCWWW\MQMIQLWCCQM\RJREKILWCIEEE>>>L0D;J2EA<79992;7771F5506+4B<,1-7*4-10/.*.)).$0! 5!! #""--##$##$,"1%%#"! !!$# tpqpsa\rsjbroackqcrbledkjLklYkja]aLao\XRMQbY]QLLLaLCWC[a\QIIMQMQL?H??L?JJSBBKEH?CJAJ@J;E@C9I<;A=N;2;;J3E3;;321C1/D055050C2;-627734.2+7-"11#.)7$0! 8!,,"/$/""/""!!"""!1!"$#! "#uupsrskpiro[appci[[ooobpkcke^cjW[xGo[o\\[oQL[[aQbLWLLQMQQHH\QbMHLHXDHWLIEKNEEJIHCHM>;AAAJD5L/C>J6@;J@@>;@@6,9C1550055-3+.:6)33+2)).)./8!,-#5 8!/#"!!"!"!"! !! "%!!##! ||bsss||aoatqecoyWroh\jqqk^ldi[xg[bbaQ]kQ\bbW[QbHLH\aL\Q\L\aLHMMHLHHLGLEBBSIIJ;DPG1JEEEE>@?[9=<;3B=3>;3>62J710 8855,3<;.,1.*2*3.#)4*,8 18880"!01!0! !"$,!-%" !#"""!## "% jissr\rhhyjwlcraass\[jkk^^qcbo\hGXcbi]YXXXRMbQM\WoaLWL\WW\IIQ\D\WCWPPGHNUNJEJSNJL5?JEA>@7J@W1AA<;BB<;<=4;;;>185P855:4B426-,/62-,-442%5!55  !""1 "$"!#$#"%!"%%%" !"! !'!{r{{\sso[zcktroscjibrijkmedcarWoipb\\RXb\bXi\LQa[CWWWMIQLIYX\\LLCLHWGCQQ;SJNKKEA>D72C8F80,6:3B42*.?!-*.)*2&))/"/" 1#/"###11,$#/$"!!%$! #$"" !" $ zrroo{aartks[hobjrazooacdcjo\o[W\\a\aL\aWQ\\aoWG[LQLHRXQQRI\WLWG[SMHLDHLWIJAKEJJ@L?@AE>E=A;J;J;;>;>6:2;>.@1F88585227-7;*23.08-:)3+).--/1#00#"!!,#!!$$/!"" !"!50#$" !" a{sroozzbqury[zara[[hhyaarhG[hazaro[rX\[oLaWWW\WLQQbQMQQQQWW?\L?RSJIMMHW9MJEESIJ>C5?I>JEEEEJJ<>I2<6C096@.?5855064=36/17323)?/-.2*3)" 1! 1! 0/!!!#""!"" ""0!"" """"$ sszy[ob}proari\a[oWaao[hx8xhh[o\b\LbXQaa\a[WHQHiQQQ\\aQ\\WG[HQYSJSNRILCW@NNI@JNAM?C:@>;E>>>HWJAEAAE;3<;>@9F88C555P58592<=3227.01,77.+*/ 8!!8"00"/"!""!#$#"#$#""##!!""&#!"  zhxyrjsoyozaraoo[arirriiz[oo[oaWzWa[[ooWoWo[WoCaQiLiXQWW\L?[HIXIKOKSJNJI9LHJJENJI@DGH>JEE;;;E>D?8gFF5558FFG,;44=6/66:,?"/6)3*6155880"""100! !//!/#"!/ !1""! ! '&&   |hrtso[orrr\aoyoiirri\ar\r[oWW[a\o[[[[[[GGWWWWaLWLQ\W[WWPP[LRNTKYJRNUKKRW1MSKKEJ>EHC9J>>JEEE6?555550G0G88:@2<<36-.2,:),9)3)7),0"1!550!!/#,!0""0 0! !,#!"$%# !!"8#& tprt|oyoarriro[orirriiariiaoWo[zLW[[o[[Ghh[W[W[W[[WWC[WWLW[PCXNNSJIINUKS>M9IJAE>JBBJ?L>E<>;AED850550C50/?16;6.<3762<3*777.,6...1 /15"" 0/,"!#,#!!!/"!#$"!#%%"  #$"$!  ptsioy[z{\{ay[zrirarraai\aooWoz\a[oW[[[hy[oWWLW[WLW[[[GGWW[PCMJRIIMISEJIJKNKESJJEBK;LDJAEEE;;@F888G011C?/6=39/)<<43434))320!7."F5 0 /%:"1""0!$,"1$,,#"!"1# "!"! siryxhoariayyar\raaaaarrooazoWrWooW[o[[h[[[WaWWWaoGGhGhPGGPG[LbIIRJNNJMDRAKEJJ@>EEE;LDI;;;>>@@955P5?9H1064<<71?*4<23276**6 ,,8 05!,%#1"" 5!""!!,###"! !#%5 #$! #   {oxyhyzzazyyorirrrrzaraooaWooaW[WWo[[[h[[[[WWoWaW[hG[hP\GhGWCPCbMIRSJIIJSEERIJSEEJ>@M99>JEE<>7@9?109:1G97;3==6/@3-9./0-37-1?, 0 5!,-#/!11"0""!0 0"#!"/#!"%$"!#!#%&  t[t{z[zoyhorsjssirrsia[oooa\zooWooW[h[oWo[[[[LW[G[[GhMMQQ\CP8GHM@JIMMIS;SR@IAAEJE>J>?g:@A0C0?910,@:6;=3;./00?/1,2.2,8505-&,1011!#,#"""!!""5 ##$$$!!"#!#   +touqtsroyorijjrrijjjbjbirrisiaLiraaW[[zWWWoG[WW[Gh[GhDXMXSRW5xPWI]IMD@IIJI@IJEJJ>SE;J@?L>;E;>>?50C?C89<<773;3<21F962*6)7)/888"-:!0"  ,#1!,,##$/!!/###"!!""((&    + }pvqpjryyri|bukcbssirtjsajl]ibbb\iayo\Q\\\WWaL[GhGGhQcXRSYRQ[58[IJMMIIIIMMMIJIII@@>J>;9?>>I>@C8C/?:2;=2:,>337:-,)+3*77.950//0 1,"1!1 0!,###$$""#! "#%#     uvl|t|~[sjtjjvkt|jiooi\arlksibaGW\b\aXcXj\ibQaW[[GPbRXJYY]MM\G[CHMMMIII@H:II@MMD@@@>>JHC@>@:G88851?93<;3<:1>;722:,7276-6,8F5/--,"00",""11 0!"#"$#!!""!"!##%$'   qmmu{ohtmwuppqtsjkjsir[oijibbXciicccXXXb\Qcbaaa?aoQRMRYNRMXMMH?[CQIIRI@MWLI>IM@@IM@>M@HCH@>?F55050996><;76/:*2;26:::-.,1F500%-/#,,#1#"1!,"""! !!!!$# $$$%'%!%&"   nnnq{hpmmmtsss\sjpbirisjb{WrbkkbicXbriLaicSMaCo\XbbQQSNSRMMMISMGhQIIIIMDCWLM@@I@@>I@6M6C5D0FF8g88G/C/63;7>.56;)72-5#:, 1 0,6#!?$#!0!0 "$#1"-$"!! #%#""#!%"  + + nfmu|svwwti{iiraarrazjcjrbj\icQzWbj\W\a[LRbi\QQiQ\W[Q]N]RcI]SJM\CHIIIMMID8G?MI@@I>@M@@@9G0FFFC11C09@73<>:1:77375?5105!,/5 "11 1 1"!1$%$"!""""#!!##%&&!   + + wmuuqmwluryosptizaohatjrikkXbiWoWr[hajXXbb\a\MiLaGGaMRRSSSYNYRIJIMRRIMMIM?GhL6I>I@@@@@@D0FFFF1D/GC1G07337705,727/888885/,,! !/05"//"!00"#,"!!$%$!! ""%($%  + + +tjtvmfmqtszrppirriozsioajkjirWho\iLaacpXiaWWLi\aWQiXMH\QJSNSSIRYTKNER>S>IHGF5WLI@@@@II@CFFFFFF?72905555,6677/0?.6.1F85!1,,,/,$/1!##/"!#,#"0 "&#! ! "#&#"   + o{qmnmpr|o[zj{azi{ijji{ssbbaoaaaiXbiiXX\WW[h[\QXR^ZURaWWMTTTTNNKKTSSKNESJM?FFGFCHM@@I>CFFFFFFC>;>@15P G0/6-66,,66,5880,-,///"//"!0//"0#.%#"! !"# "!"&''&&   +  xrvmwkz[hyor~[[oz\jsip]csi[[WjXi\bia\iaW[r\L]bXXYOT]RRX\bSSYYNYTNESETTEJSJLWP8FG?@@D@CFF8F889>>77:G ?GFG9:676:-6"88 C,-,!0!/1 0!0!!0 0$%#!"#,$#!$#"&'%%%!  y|uvthhhhPozrzy[zi{ajkpiiio[\ciWriLabiWGoQiYY]kTZY]]RYTTI\LISYNNRXJTEIJEAED?GPP88LM@0FFFFP0?977I6/C05850,76:,:1F851/#101!55  1/!5"$"0 "#$"!! "%$!!'("  haqvrhho{zzriroitsoassi{iQiib\ozaaorbQiaWiYYcYZZ^]XMRTUNXL8WLRTTNSTKTSENNSNID58PG8H?8FFFFFGCH10@6@>>/8P8F?:,,91FF!/1 50/15 !!00"!!#%-!5!""!!#"#$!$&''" + + +  {stioyzrra{iao{upi{cpsoaiiii{WoWriQi\iaWoR]]XTZTRRRRYYYYRRM\LMNNYKUNEENESEKS9[C99GC850G88CD;@:0W:6>7:C888550?!CFF51185 0 00!!0"-$"0 !$" "/"#" !""%' v|t~hhzrzoaoyotc{aplkciooabraiiibcj\aoWCckbM]dY]R]T^UTRMRYTRQHXSNSNSSJSR>SEJ9?HI@DC88GG8H795?@@:6/585/PPFF5115 G855! 5",#" !%$" ####""&&& +  uzryhyzyhoz[rszospqjroai\ooibi\jj\WW[[cTd]kT^RMbRTTT]SYYNTNQgLMIIRIXIJJJI>IH[?@D9GC[5g?AB<;E;:C966:69C?:0FFFF //05 5885 0#1 5 ",! 0!"1!"$""&     yoyyri{zor\tjrasjssiazjps[[ai\\\aWoWoXdk]YZZdcXbXRNYRTUTYYSMLHCCQENRJNNNJJJ@?GL9C?:9G1@NAN@CCPGH9CGDAE>C?69559:D>2277:90FF5//0550055 55"1 5 "#%""" &     + + + +yzs{{{{aho|travlts{r[[bbzoQjjQa\i\aakd]]]kYdRa[W\aL[\]S]SSJSTTILPGLQMSERIJKNE9GGGG?[1?>=E;:9@9C966/6;@776/88888 11580058855 55""  5 !%&$ "& +   zrzozoyyy{{[stjj{\sbti[hoijbrib\ro]d]X]Y]]XWhFoWPg[IRYSRRSTUNXWP8FCQJMM@JJEQP5W:L0??C@E;;>J7C?6;@99666:151!0/,/05 88 0 55"" 8  !$%&&! " !$  +    zoozrryhau|zspj~ooi|tiazorr\\ooarWa]]]]^^dYi[Fh[gg8WW\QISSTTSRJ\GGggCDJIISEWFFG9LCLJ@1?@J@J;DC@7779:779F8555/-76"C10588855"108 58 $$$%%#  " + +   +  yyr{azsujspvuujo[{tboabjiiro[z[Pooccjk^lYRcioQ[ggPGhGWiTUTSRIRRLGCC[\HMNAIGFFGC0?;KE9?9@><>9FC766>959/81C1C1/,91/?//0 5880!!8 0  !$$%$$% "$     +   +zoyzzor}tsttup|izrbro[{bi\raoa\rj\ajkYYk]]R]S\[5[\Q\GPPQSTSRRRIIL[CWWGL?JI0P8GGP5DE>J:[0:;J>>>:?7@61FF880/,62,9,/1"00 !//"1#$"88  !#%%%$$#$$$! "        + z{rzo{z{ss{tjooopproaisaozazaWcpc]]QikYk]R]TkQ[GabH\\b\CQRMXSYSSWgPLCGG?[FF8WCHJJ@>I@6??C:@@@>7H6661g855G/,9,///,1000 0,,,.-10   #$%$#$$$$&$       + + r{z{|ssqutt}sz[{jryatbs\raaaojp]kkkboikkkTeT]]\\LWaWaM\[LYSRSSSSL5aMQHQHG8g8GHJJA;>;;J6:G0H7>>7D-69850101::9/01?0100!//"/-..-#1#//"10 !  ###$&%$$%" ! + + +   oo{|{tqu|t}srztjoyoaiirzaazoXpckddkbog\RkeT]R^YX\W[[LL[GQNNRJNYRWWHHHM@WGGC[5D>J;S>>JE>9[00D;2@:9?8880?/:>.,?/1 550/-,C"6.$!/#/"/#"!!#-$!5"/#%#"     + + +  yzrzzuut{sroztus[ozzooooyoau]kYlkdkcPocYY]kYdT]\rL\X\GCbSRXRIMMLWWL\HWGCL?LCWLHI@>I;;>D9C?L66@698F880/:-6,?1/101C 0,/0 #,!05"""!!!0!$'$! !$$##$#      s}~ys}s{ssr{pryoirsso[oaoWocqkqdkdlkiabk]cR]Y]]MLbbHW[aQIXRNSMQ?PGL9LC[C?HHC9?9I@@JEJ@>>D9?1?9:P588C99/11111/11!111 0#.-00 00"! ")&$/## $&%#$$%        q}stu}sa{|sttayooibs\zoaatsi\cqkcckdk]cXbYd]Y]RRcQQLo[WLRMXSYYSIQCWW?HQHWLJJ9WLC?:JE;>7J>2@985?5g5C/66/?101000110//1506)$! 1"0!/#$%%$"#$" %&%&""%      +   +ti|pqu}sisjj~yoooarro[ratpkjrip]pccRkkkMiXYddddYd]\[5[\R]SS]ESSML\H?WHHCLIJI?GC0PW6J>M6J2J@6?g80,66::,/://C0 5!///:-%,150##/!"/,$%$"!!1!!"%%'&#!#     +   z|}tutsz~{j~hozz{so[yy[jppppaasdkdkcc]]biikTdSd^d]Q[P[MSSSRRR]SMHL[GWWC?@JJ?W?585P?@@@DD@@@@:P8FFC:69/:9/9,0505500/,-:15 1#1!00$-#"1"""5"" #&$$     ssr|||rz|syxo~isiroyhzcppkqkbyakkkkdqkkc\[QkS]YTSX]bQRcRSRXSSIIQCPPWLG[MRJM??[?P5G?D>J7L1H::P585?:,?0C//C01G 1--/!/.,10 5!!1! "/"""1##" """''$#$     0 200 80 1 +```I`I`_HYY`AfHX^S\cTYZZH^QmHN\MTYIXf;_IJRX@@Q@R2>BB11B1887111-544(;/4(<0-11161=/444/(;(//(4/$*)(0+1!+***%)(4#:5((4//4#'#/### ## $$$$#`YhRf_Hf_hI_XH^Q@TNMLYTKRHH^@T[TTZ<;XXARAH@_7C7>>>>1C76617B)Q444/4(<-=66616=(///;))@((5*=$;)-*+*0 -$/($/4:#(//#4/# #'###$$ )_RRgXHX^f_HXqA_XqK[[TT\YZaTZ10505@:4;)<+66+1++=-0(0;/44:4--%%5/=+* -$/-%#44#:# #4 #4/# :##4### $) fRqX_YYRHHq^HY`RAZZaKMMCLNNTIfISSKZ;WIKI_HRRA_X@QQ@HBBL7D8716-=121=06>0@/4Q/(-=*666226)//4:#(**-*-4%1**+$'( $#4: '#/#'(: /4##/## # #/$$ 'fR_X`SYR`IRA_YRXHKMMMTZaZT[ZSIH_SCLHHSIX_<_@;;Q@;@_AI11L871=*>>172>111=554#:Q5*2+++122/4:'#:;$/(-*1,%/(0****$5 0('4:##/ ######## ' ## #''### ')$)RYYR`Y_fIYRf_R_XfaM\[\[LaZJBT[AAKTXXXX@AIAA_@W4@RAII_@W@RA;@HBA);LC72>6<<>3827B666B1*0;4:'Q<7>+1264'4(:5+*)4) 1,*#/%--+**%$/'#: ##G#'#' G' +9 +'' ' +' +' ' + +''' +999 + 9 9)YYR___X@fH_;HHQ^HIYB[CZLJXJaZMH:R@;@eW^@@_R_@@X;AIIH;@/;5H;X6A@;73871=A517B6116-B*<<6*;/5A+1111;9 +:4:#;+*00/5*1 4:5 +*%$/' + +''''' :''' #'''9 +##'9''' ' +99 +'' + 9#G ' +9 +#R`RH_XQqHqQX_``A_X^XRJ_IR4ZMTKXeeQWGGHS_@H_@@R_X_RA@HL>B15@5787>>B1>6;5-=--J22=<*=-66)(5*6+5#G''#:)%05%$()+ 05:(*-04 9F '9 +# ' ''# ' + +'## ' +' +#'999''' + 9 / (fXfg`IgR``AfISh<`RQ:xe_`K[TLKY@eQXG9QLBRAH@Q;A;_A5QQAI5^/@@@AH/4<6A@;(H=>C8L>>65;=>B61>8859:H6*6=6>,;4/-6/'#d 9';4)%*+*00$5$99)):FFFF 9 +'''' ##''9###''''' '9 + +' ' +99)$## (YRXRnR_AS`A_SYRRSSR^4HISTMTSSRGQfHQ;JBAH;@WWQ;ARIB7876;A=<<>8.B09W@5+7>66=-<*6160($0;#d9999/-*(#40-- $()5$(#9##/F F F99'#:'''' #'9 +'##'''' #'' + +'##'9 +(%) 'Y`__ARfHRRfRA__RYJg@mJZM[KYSIXHH@@HYAX;;Q@@@@X_5HARAXQ4/;AJBA/;IA@QQ@4/J>BBBCD8J5-56B77166@#@0>1=-<-0*B+=0-*6$:'9 +9'/*=%@#'4$-0)//$0$49 '#FFFFF9 + +## ##::''#####/#'#4 ' $ %%$$ %9RHfHq^qHq^ARR_^H__XQQ`L[ZSRA^<_W:HJHXH^WQ__ARIAHXHA@4(;_AIBAQXIAQ:4Q:WQ1=0<05-22B**61;#9 v 99$5;)(#:)))5$0%-)F 99F F 9 + 4#4// 4# ! $ #qXRI_XXR`AgYJYR`RX4WWAYARIJ^f_W'^IH^ARH/@A_AIBSAA;@4QHR00L8D7>6QW@>37>6*65@B+<5=*-=1>1-=>2)'9 FF 9G'/)55/::(00%0-05#9'999 9 +#4(//()(/#$%)$)4# " $)$+ $(^^I`R_`YY`IYYRYSIfQQ_XeWfY@f;:dmIR@XRHX@^;AIR<=;4@BC>*J6=<-6<00-==6-<-=6+/99 FF :#''/5$0-F $- --$)'##' +9'#(%$((()%$))4)':%+$)%% %% RRR_XXR`RHRR_H`RXQqJSH:d:QXXW:QRI_A_XQQ4QXHHQQHH/Q5;H;;HQ4AS<;@Q<7C71=B1-(@0==<-===-<<<<-0/#:)--49FFF4(;(G'#;$--('9Q0**%5G44//@()$(4$/#'  %$% %$) ^W^mWW^m4mX^WW4WGGfI@eGee::GGQHX@X^:#:e:@71<5=.-:'GQQ4/@550=*5#/51.,=)5(44#::#''##';$())5(/($$/ 4 (/4 ) %$ /$% )' +#%# cbKZk[bhZZSZSfQ_R__RX^HHq@IMTAQXQQ@X^QHKI@Q5I@QQQWQWQXL>>7876676-:'9d#4@;5//%1>2,04-2.,10(:#G##'#/())0$$$)//$% //) ##$ !! %  %%% hZic]ThaS`a`@Q_nRgX^^QX^qRKK_^XAHH@e:4RYXWXJHQX@QW::G#XIJJ=J>BIJ<<6==I6B6A(/A1B>>17>6=>2A:':::/(4/@:;222265-2+**5:4'' #G/()((5%$(/())/##(/#%% % !! $%))$  ' +Q`bcbhSYg_@QWRZYRRXmQ^@@RL[g4Q_RAHQW4HAQWQAH4QWW4^QW4:QH=IJLBIIJ6KBBJ==BB>=J280 +9G/4/A=-54::4*16-,10-226'9#d9'/)(/))());)$ ##/(#/) %%% ! $ +9yh[iYYYRS_eeRa`RRqQXH__YTbKBBL>JB2>5Q/;:<>71B28-:'9G/)*726)4:44)00*2,*,8,-(#d +#4:#4(/$ $))))0%#/(((4$ "" $$ !$%")%  + + HYoZa`^`Rmm`ZIXfXQQRg_RKTRXf5_X^4:4IJX4H<^::5_=>>CD7>H@4G#J61628<#G:::Q;->26<;)50:027+6.,=)G#9'4(45))--%--%)()(#))//(#% !! % "%(!!%% $%  + + X^fiZfR_WG`T`Xf@xW^X_ISaRQ^H__@:Gx^_@QX;Q:eAIJIJIIJBK=IDDCL1>>>DDBB=X'GW4#;6>A''://W#:(6=*=-00;:/-88.,*-0##://4$%)$%0%5 (($/'#44#(4)%   )% % + 9'#ed_Kf_fWdmY`HXX_HHfXH`YgX@^^;^WWQ_I;Q^@WeeRJSJJYIJBBJIJTLC8>SB>BS>B1B1<5@@GdG55#'d'4Q((H()=-=*1=@45-,&160) v 44#:/$)$0%0)($($(4: (//)! %$%!  !%%   ' ' 9e^f_q:xQnRWQ^Qg`_;gSY_;RRf^@W:QRB1J1=@W/W(444:445A6>=@)=*=>-44)-)-=0(04'd'#:4/)%)$%))4(4 ($)//#4))(/ %!$$%$9'9 #`g`_^eeHSYRfmWXXX__a\Yf_R;QQWWQfH@WQX4eeAYSJSJJ=KLLCMEML>BKLJ<L>>>B66B>A@#(60/W4::45-*66+0@A1.26))00-('(//:##GG'40$)$5)$0%%0$G(/)$4/)%%+ %% ' %  +' ' iR``m:Hhh_fX_gRfQqRZKf@XX^mWWQ@^4eQ@WWWAJJYJS=YBLCCN?MKLBKCNJ:QAJBL>BBBLC7C>;::>>DC>J0Q4;5;QW:/<66A*6-5445662.3116=@/#''G##//5)(5$$-!-0((0#)$4/#//(! !! %!!% %' ' +  ^^^XgY_X^^y@fHXqYZY^m^WQ@m:WQ^WWQ@W::RJYJSKKZKBYHXJJBJA@;:@;=BBBB2>6->6(@Q4Q(/;111;/0-/Q(4(1227,6%-(d''9')$)/)$)$--$(()#)4(/4:4)(%%* + % + + 9#XW^gRgXqRf__q^^AZYf@f^;^WeeWQW:WQQWWRSYJSKKKBRAGeHLJSBLMMLJYJ6IHGd:H8CL7B=<6D=QQ(Q/;<;06610@@:;;50=6,1-0;/:':/:455/(0$$- $($$/):;(4 +!%() % $%$# +# # ^^_hg^^Xg`f@q@X`If^fHf^:e:WQ4WWQ4WWgJSSKTMNTRAW4@RAHRRKLB6I6LLBX +9GA>D7BJJ=B<4#:55H<0@5=JJ<((4//=.861.2-(4G';/4(/($%-**-();(/4#///%!! #: %!! %%  + # #  +WX`_XHffXXq^XYSY^@f@^Q:ee4QmWmQW:W^JKLTTMUU>IX;RHXX^:HIJII6L>LBQ':@X5<6=677<#'G#;5<=0:/<61660/5=.320*2*0//:#Q://5-*-*-((0)4(4(/(% % !(/! "%$! + # +  ^grqXg__qQWQgZYffX^4Wee:W^QW4QWWmQQTM[TLMN\KHHAXQ@QGWQ<21#(23.25A0#:G#::##@))0-***-0(50(4##)//4$ - %% " $(  % %  " +# ' 9fgXXffHq^^mXYnHX@^mmWWeWQ^QmQQ:QJ`HB5H*71+5d#'d''##444((5- +*%$)5$/(/#//4(%%%"! "! $%$! +# #  _g_rfX^^Qf`ahf@^^m4W:e4QmQQQQ^XSaKYRKLBTNTIKNJGQB=1<(;;66*-6=521*@:99'#d#4()))5-$0 -$()-0/(/))(4$ "! !!! %)(% !   # +' ffrH@^Qm^`hY^WQQ^QWee4QmWQ^^^@KMMTKSS[\ONTLNOM<@HAAHXQ:G5S=I=LDDH#4:WH<@:G9G:/LMC>=Q#@H<5/Q:W;55-=B1>66J6B=;;*.7>26-;44'':(4:/4/$--6+*%- 54#/((//)$)4$!!!%""!,! !%%%9"  ' +  #' + +^qqqqHqfH^Q^^^mWeWWQ@Hf__ISYL\c[TKTK<'^ISTTLKBSLJ@W/H_AX@I>CDL>BXG;<5;@44@;<@4;>;#@;;Q;H;<=(#:Q(AIJ6>111160/;000##::G'44::()0-+--**$())#G5((44(($444%!! ! %%   $% +# + + # ^q^^^f_@m^^@mWWW^^____H_Ib`@AK[KK[UMZMTKS[UCLTMZI@H@W:W:ICEC66>IQe::W/A<1=B22>0;5/W444;())5500- %%)4/)/((44 /($%()%! %! %! !!% !   + +    ^^QQq_XWm^X^:x^^`I`YanRY[MUaAY[[TNMZSUUIHLMZLTLBYIHQ:Q@ICN?LBK6AGW^/4Q;5B1=BA;@@/A0>222>2781-44:9:4:4)@(@$0$$%0005$)(();/4///4/$4$$%$/(+"! !"! !!$! ( ###     #ymWq_^mW^Q^WxQXYYgH`YRgTU]cTY`YZTTKaZMTIXRZZLSYISLJQ:;KNNNLKB6S@GQ;A;;5I=I=<;Q4//:;1.C>1C71-A:'9G#:#/((/0))-*-$0 0/)(4$($)$%)$"+ "!$% % #  +# # # mQ^_fm4^^^^QqQX_R_fHXHaT\\TZZHHSLKIKMMZYf@RKKYBSKLKQQSNNLBJJJB>@G4@;@<>7JAHQQ/::#Q6L71)=+-;:#9FG4:G#Q//0-)-6+-)%0#///(;$0-)#/)$4% *%$%!' + + +  # + mQffQy^X^fHff___^XH`YZZ[\aSZK`GHaTT[NUNKSR;HJZ[TLLSRIMMCBB=IJ7<4:W/@;L7BJ65@'Q<5@4/=266;#@@#Q:G#Q(/44(45*+6*+-;);:4(G))((/ //)(/( $ $  % ' +9% + + + ^ffym^ffqX_HfniaR^RZk[\c\TZZT[_XIMN\U\ZSMZAXKLLBSJISC?CJBL7BBRW#G4QQ;<==6L>=;6B=A;;*821=:(:::#:/(/4455)$=-*-*%;)$(#(;(/)//4)(/- $4%)% % % ! " #  +  + + Xq^QX_Rf^X^Qfaa`__`bT[\c\[T[\MSXR[TMMKYLULRXILKJJIJCOULJLLLB5GGe:;AA;QQ1B<;;H077>6Q4#'::4/W;00%<- =%0(5;/(()/////(/($)/#4* %)$()!   !'#  '  qm^fnZnfH_X^XIRgH`ISb[bTTZZT\TaJYAK[KYSTTSI@HgJJBZCEN>=SLK>@G'd'^
>16J<@Q@@(6>-=66B=;440;;<;G:'GQ444/);)55)0*0)0-%/(4#4 #4)$/$%(/ %$$%$  ##%%#!   +  m`oY`ffqRanRrHX__R`Z[[\[KKZTKSMU[JfA[\TSSSSKIXHKMNCKI;9'Q@@;IA@4;+5$%@#44##4)/:$5$%()* %) :%/$$## () % ($ '' '   na`fff^qf_AfXYiY_RYga\[bT\kTTMk\\Y4^TTSYKKS>ZX^KNCKBLKKC777B;ReG#W4QAHQ:Q5A@:e@<>C2L6A6>*5454GG:4::4@;;/;5*+6*0);/##()/($(/(()$@4(%%:%%( $ '$ # # +   # + + + `qq_`gR`__q_nY__Y`^ffaaaKbZMT\c[JSMK_ISTMZSJJSKAJYKLLBX:'#e4Q>61B-;:44#G:/(@445$-A(-1+=5((/((////(//))) %%/(%$((( $% % '# #    + nR`s_gR_fRnhYff`gYR_XSZaaabZbU\bZk\Y^HZLZKJJZTTIHIKBSQ'dGGW5KCLJSI5;;Q@X5H)A5:4<7>6;/@4G:::Q(;(@(0555--0)($54;(4Q)-*5/)%$5))#$$ (4!!#   +  q_XqXrXmX`iabpZH^qX^QhTTjc]U[SK[TSSIYX_RYRZOOCSJA;_;e4@@@ABTBJIAHI<@@@4XRH5<5@4;;9'GG::)5/4/4#/)A$56> 55/@(44//$0)-):/$-!$4/)/)## !!   # + +  # mf_rggg`kpcl\kbi`Rf_^mgZb\TaSYTSS\\MLbI^RMNZYSKKZX:::QQQHBJ1C>H/@;@@@;/:#4Q/Q:4/A=0$B*=-5(((/((4#:/0)()(4$%)%++-)/ %//) # +     +# `o_^rgiijkkZibahii`__SIZbaaabZ_IbTLaYJaBRRYKTTLX::W:Q@IBRXI>MDLBBJ67CBX4Q(44/@4G:;)(@@//-0;5=*=(@/:/;(44((()//)%$((0++%4;)/#/) + +' + +    + + + + +  g_qfnZiik[ohbkbZaaYhaSggS[\\bZR_YaIIJMU\I^HBLTHGGGe:;KMT=QHB>>K6JB>T>=/:@AH;@/::Q(X//505;);5)0)//0$/4(/45)(///$+-(4($$ (#(($( +9 #'$ # +' + +   f^qYijkclkbbk\bbbZbTbhX@hU\bKZS^_KSIa]VTSAfRKAG'e:eQJMCJ;QQHJJ=R7DL7T>=4H05;;;/44/44(0;;;;(;A=54@-5((/44($(/(/(**(5$%%/#%*$)))) ( +#   +   sRnh`hkccjjbkbZabkk[kZXqa[Taa[a@HaZTcETSBSHdQwGGQ_HKTLJH4QQ/IA@0CBABL><H5;@505;(@Q4@;;(/5;5**A)5)(@44:////50+045- %$!$$)()/ ' +  `ohg_`httbbZiaaa[k\k[bZZbZha[\TY:gK\MZYBZTYGGd'GQABTKJY@HX;@;Q:B7R#=B6A:44Q/55@@;5;);@/45=*=-A)(Q44Q(//-!0/4 !+$$%/(() #  #  ohgg_fmYiaaZbiYiZ[bbb[[[biSZ[TZ`GHaMZSJaL[5W:WQ@XITLS>LS@4Qm#:KCBI;JJ>=W:44@A0A5@@;/4Q5-0A<)/4;@/4;(///(/;/)-*0/:$ -()$))$(/)()))   +'  + + +    F 72 90 1 +28*777/9//643+664/+33//+3/+*3.1(++*/./"+++ *3+ * *+(3!==!! 2 228*7374464+333.4/+74.1/+/4+3+4(/33 4$./+/(/3 * 3+3"/+2;==!3 <222228*37746/3 3/7++3/11//44/(.(+33 3,05)+++"+3+3 3* "/(" !=;==!* ! 2 888*:33+47339///3**/4(//(/4./7++.0,)./ *3+** **3+("*3 2;;!**!22 ***:3*33:*3///333 7.+*7/++((++//3.,,1.,(8* *** + ++"+* /+ ;===! 2228*:+3:3*8*:*3 3*3/..//++//+3++//#0,...,." 3***+++"""+ "+*!;=;;228*3333******88**3//+////4///++3/.,))),).+** +"++"(++((( !;= 8  !*333738**3:**88*3337+*+(/+("+**++()00,))+2+(+3/+ 3#(3**!;==;! 2!!:3333**33:***8*+ *3 *83/3 3 **++*+&-,).. 2*++ +"/ "("3 *2=;=!*+ !! 3:3*8**3***8**+3*3 88 *8***2+." 4,,)).#"++ ""((#( *** ;=;!2 233**8*:***88*+3*3+** 3**2**+ *3.).(.#..( +("+/(( 3 !;=!* 2247****888833* 3**33 **2"/(*8 ".).#.))" /#/""+*("+!===;  22 43333*8888+ 8*3*83+ **2".1#+3 **((#()). +(""((*3"+ +!;=;=!2* ! /7/.4/*8** 38**88 3 **8".,)4#)+*+/(().#" "+"(" * * ;;=; !!2+41547++7//+++*8 3***27.1)(.))#( +"(#(()"*+" *+""+ 2!=!2 /1.//33////..+3++ *82/#).(.))4((/"((("(.#2 + *"" * ;=; *22 1143 3(5)/10./..+ 822 (.(#)).##((((("()#*** * *+2===2  !!14733/50.10.(4)(/+*** 3+..((((/(#(/())#( ***++ !==;!* 2 /+33/1,4(../(4./* *+3+ *"/((("(#(($$#(#"2* !;=;=!* 23:*+..7/./++(.,.+31&0#+3 2* ""(#(())####*22  !==; *++(.14//+(1./)./ 1--&,,." * +)((/#)#(##(* 2 !;==!2/4.1..1((1,.(.+ /&--)&')(3+2+(((#("""" *2 !;!( + !/4446,4/,14"/3*/)0,))--&)"**+# .$)###("+ 22 !;==! !4/+/./+(6("7+ ".%-,.&&$,$)("#"*"+)#)(("""2*2!=  1(/.43/.(+3++.,--&0&--&),,$$) "" +"#)#"" 2!==!" 44.1.)1(.4"3 )0-0&&--%-,&&,#"("""*##&)#" !=;=;2(.4.,1(.)/ * .&$,&&&'-$),&))#()" #)####+ 2 2!===; 4/+4.(/(/ 3*/((,&0&&&$))%$.%'&$+  +$#$$ ;=;=;!!24".1/3+3*/((#/#-'-%&,)$&%))%'%$)" *!$$$$!>=== ! /,5)/""+(.$1/")---&,))&-&&%%&&$$( $$##""  ;=;!  (5)//(7)1&&(+#(&&&&)&&$$,%%&$$$%&$$$  ")# +"";== !! .4//+")),0,("/(&-)#&%'#"$%$%)$$$$+" #" "!=; !>! ./+ *(1,-&-',((,&$$''$#(((%&$$ $"!=== +>==!/(/3+)1,)0'-&#()))%%$,&# ")$$)##$"* " +" !;=; !;=!/.(3"0-,&---$( .&-,$%&#)$$$$$   + +!===; !==+(3 /0-&--&&,(8"%&&%,%) ""$$% + +  !=;! !=***3")&-&&,)))((#,&%&%#""$$$  +  "!=;==; !! * +3+&-&--&$%&)"$%%%&%$#"$$$$$  + !=== +! ../ (#,&'',,'&" )&$%%%%$$$$" !==; 10#3".)&&-,$&'$ #$$&&$)" +  +;=  ! &,.(.),&&,$&%$#"($%%&$&$$" "  + ===; !! ,1,).)..)),&$,%%)(&&$)$ +    +!== > ,0-&,#"+#'%,$''%$"#$$$)))$ 2  + + !;=!! !-'--0) *)'&$&%&$* #)$)#  + + !====  !>---&&,#($,$&%&%&$""&$"  + !==! !! &,&&,&-&#)$&%&$$%$"$$$%%2  +" +!===! + +!> -0)),'-,#&&&%&&"($  !=;= ! -&,)&%$)&'%%-%&&$$" ")   !==! ! &,)--,#$'%%&%&$"$$"   + ==== ,)&'-$,&&&%$$$)$$$" +"  ===; ()-%),-%%&)$$#$$#  + ;=;==> + ,&&),%%''&$&&$$$ +   +== + + '&)),$&%&$%$)$$$" $ +  +  + ;==;  +!!&)&%&&)#))$)$$$$$$* +  + + ==! ))-'-%("$###$# +  +   +;====! +  )&&%%$(*"(&$  "    +!=;==! +  $,&&,))+"##)%%$$$ +" +  + +  + +!====! &-%$)$(+)   +" + + +  +!  + ;==! + %-&$&$$)"2(#$ +" + +    === + &&$)$$$"* """ + +   + + ;=== +  ,.)))))("+ $       + +  >=; + $$))$))$* #  + +   + + + ;===  + ,))$$))%) **2 +  + + + !=== ).$$)#&$"  #    + +  + +  !===; + #).#)&$("       !=== + #)$#)%$##  # + + + +  + +;===! #$)$&))$$*  + +   + +====! +!/"#$&)$       +   + =;== + ? ()##)$2      +   !==== + 2 ")$$$2"##  +   !=== + ? +++#)   +   +  + ===! ?# +" 22 $  +2!  + +    ;==! 3 * *  "  + +  +  +  !>===  +  !  *"  +! + + + + ===! !!! !!! 2!  ! !=! !!!  !  ! !===> + ? ;;!;!;!;;==!!!! !!!!!!!==!!!!!>!=;=!====!>!!====?!!!>===>====!======;==;=!!!==!>!!==;==>;>=;========;====;>;>===;=!==;== ;=;=;==;=;=;==;!=!;>!;=;=;=====;=;=;=======;============ + ==;=;=;!=!;===;!=!=!>;>;=======!=>;===!!>==;=>;=======  ?=;;!!;;!!!!;==;!!!!!>!!!!=;=!!=;=;=!>!=;=!!!>!>;==!==;=;>;===  ? ; !  !=!!  =! !!! !>  ! >>! >;!   "+  +  +  +!  +  + + + + + +*") ++    + +  +  + + + + +? ?+ ($%# "   +  + +  +  +  +   + ! * #$$#"# +  ! + +   +    + +  +?+###"  +  +  + +  +   + + +   + + +#"+"$$ + *  +  + + +  + +   + ? ?""(""#$+   + + + + +   + + +  +  +  ? "" ##" +  + + +   + + + +    "+*(#""   +  +  + +  + +  + + ?3 72 85 1 +44#0022#2$1#25('('5'&$3$2//#3###$' 4$&&$0/..,,-#.--3$1#101$2#1$5''''''(53&2##0/1&3&$$$$1/2/.,7,$..3113&211114'''5'''''''5&&$$#.01$$2$3$2#&1#..-,7,,$/.002&$221001&')6''''&((&'((($0/#$$&$&''000.,7,,-/#..0#$21#22#1#$'6((''&3&'&4'!)('&/./&&&'&'&0/0./.,,,,.3$21021'&2$$4!(4&4&$&&&''(( '(&0..#&'&&&$.-,,7,--./&2$#0014'&$2$$''''('''&&'5''&( &0/2&&''$#$#.,,,-/$1$32#1&''5$0&&&&5 ''((!($&'&&$#$/#' $&#/.00,,,...212#1'5'()(1/0'(&4'''2#(!((' ('$$&'#0#&'$#-./0#.,7,7-0045())*($##''''&'&2$' &') &&&&&&#$&$.-/#.,,.-,-11#0#((())6' '(''''$/2$' '&&'&&&&$&$#$0---./#0#,,,,---2$23()))('''2$(( ((!'#&&&& & ' #.#&$#,,,#,#2#$())(''(!$./0''(())'13$&$&&&&&( ( &&...#$$$-,,,,7-#.-,,011&)(''(!5$1#' ( ( '$&$&&&'&'&' &$0-...1$$#-,,7,.7,#013&'(5)!'''$$$((' '&&#&&' ' ' $#--..#$&&-,,-.-32#$&3$(!)''&''3#&(!(( '&3&'' & &2&$..###$$,,,-/.-'''4$#))'''&'#2(!!((( ''' ''&2&' &-.#$&$##,7,.-5(!&0/#'''' (!(2&(( ('' !''#&#--#&&&.#$0.,,-.,!*)&1#&$&& )!6!!$$''&& '' ''##.#.----&&.$.,,,,**(((&'')!(()(& '&'&&&'$0...$$&11,77,/,-+)(()'1&( (( ) #& (('&''#$.-/#&$###,,,,--( (('&$#$((('' ''$0) ' !!&##/' $#&&,,,7-.--''(( ('$&(!!)!!! ## ' '!!'.-#/#&$.,,7, --,)('()!(('!(!"((('&#$&( ! 0#/&#&$$#-,,,--,*"(!)(((!( (((('' &&& !! '$&/#  # $$##,77-.---)(((( '(!((  (!($#'!)!!!$#$. $$#,,---(!'' ' ()!)!(( ( $""!!"' //$$ &##$.,,,,..-,'' ()!))!!('!(' $#&!!!!'/.$&&&$-,,,-,,!((("")( (('( ('! &#. # #&$-77,---))!))) ' (!  !"!''%!&.0& $##,,7,7,--()! ( #$ ('!"!! !!!!!  ..'##,7, ((!'#&!!)!( !)!!! #&-.# &##.-,,-,,)(!!")0$ (!! (!!!!!#--$$$ -,7,,,,!(!)!('$2$ !"!!!(-/$,7,.!!(!(' &#&("""!!/ $$####/,,,-!)!  !!$'# """!(!. #77--)!! '!""$$# !! -//# $# ,,,,-.-!('(!")'##0&$/-.! ##.,,7,,-'!"! !$##$#$&&# ,,,- ("!!!! !( ##$0.  .-,7,-"""!")"!". !# #   ,7--""!!""" $###     /0-,,--! !!)"""!$#/ !# .,7,7,- (!)!!!!! ### #,,7,7, --!%"!"! ### -7,,-& %%"/#!! $  -,,,-0 "!"!/./&&##/ ,7--#& .#    .#,, -$ &$#$! #  .,7,7,-$&##.# !/!   .  ,,--#$$#  #    ,7,,--##.# ,77,- ##.   #   ,,,-$&###   .  ,,.-$#   +  ,77##  #/  +,, +/ 0 $     + ,77- #0!       +,7,, -## ##  +  + + ,,  "#   +     + 77--" .  +     -,7,, # #      ,77--$     +  + +  ,,,,,-     +  ,7--       +  +   ,77-#$  +   +  +  7,,- #     +      ,77      +     ,7,7,   +  + + + ,,          + + + +  77-   +  +  + + ,,7, -      +   + ,7#      + +  +  + + + + 7,,,     +  + +  + +  + +,,    +  +  777   + +   +   + + +  + ,,,,-   +  +   +  + + ,77  +  +   +  + +   +  + +  ,7,    +  +   + + + + + +  ,77    + + + + +   + + + + +7,7,      + + + + + + + +  +  + +,7,    +    + +  + + +  + + + +  +,7,7   + +  + +  + + +,,       +  + + +   ,77,    +  + +  + +     + +,77, C 72 80 1 +                                                                                                                                                                                                                                                                                                                                                                                        +    +                    +  +      +                              +            + +         +  + +       + + + + +  + + + + +      + +   + + +        +     + +      + +  + + +         + + + + + + +      +   + + + +      + +  +       + +   + + +     PLAYBK1_P 124 + $  $ +( , 0 48 048< +$ ( , <048 ( ,< + $048,<  (48@ $08<  (,4@ + $08<@ (,048<@D $,4<@ (048< + $,08   (,048 $(4   ,  +PLAYBK2_P 56 +  $( , $0( 4 +8 , 0$ +4 8( , +0 4 8$ ( +, 0 4 8  $ +( ,PLAYBK3_P 128 +  +8 , 0$ +4 8( < , +0 4 8 <$ ( +, 0 4 8  $ +( , 0 48 048 +$ ( , 048 ( , + $048,  (48 $0  (,4 + $08 (,048 $,4 (048 + $,08   (,04 $(   $(,  +   PLAYBK4_P 128 + (4$,08( 4, $0( , 0$ +4 8( , +0 4 8$ ( +, 0 4  $ +( , +$ ( , 0 ( , + $,  ( $  (, + $ (, $, ( + $,   (, $(   $  +  $     +PLAYBK5_P 32 +  $ (  $ +( +$ (  PLAYBK6_P 64 +$ ,($4 0< ,8@4(0<8$,4< (084<$,08( 4, $0(  \ No newline at end of file diff --git a/BACKUP/XART100/STATSTXT.IMG b/BACKUP/XART100/STATSTXT.IMG new file mode 100644 index 0000000..04aaf9e Binary files /dev/null and b/BACKUP/XART100/STATSTXT.IMG differ diff --git a/BACKUP/XART100/STATTXT2.IMG b/BACKUP/XART100/STATTXT2.IMG new file mode 100644 index 0000000..408dcb2 Binary files /dev/null and b/BACKUP/XART100/STATTXT2.IMG differ diff --git a/BACKUP/XART100/SWEETSPT.IMG b/BACKUP/XART100/SWEETSPT.IMG new file mode 100644 index 0000000..23272fc Binary files /dev/null and b/BACKUP/XART100/SWEETSPT.IMG differ diff --git a/BACKUP/XART100/TEAMSEL4.BDB b/BACKUP/XART100/TEAMSEL4.BDB new file mode 100644 index 0000000..f670713 --- /dev/null +++ b/BACKUP/XART100/TEAMSEL4.BDB @@ -0,0 +1,125 @@ +TEAMSEL4 2000 1000 255 6 9 118 +ATRBKIT 366 815 678 803 +ATRIBUTE 834 1305 400 535 +TEAMSEL4 139 641 232 571 +HTIME 823 1290 52 308 +ATRBHTKT 997 1434 557 664 +ATRBHT 1010 1438 709 810 +A00 206 268 0 8 +A00 206 372 3 8 +F00 213 272 6 0 +F00 214 372 9 0 +F00 218 272 C 0 +F00 218 367 F 0 +F00 219 442 15 0 +F00 219 372 12 0 +F10 297 272 6 0 +A00 305 268 18 5 +6700 388 696 1B 8 +F10 396 372 9 0 +6900 396 696 1E 1 +6700 396 755 21 8 +6900 401 696 24 1 +6900 401 750 27 1 +A00 404 372 2A 8 +A00 406 268 2D 4 +F00 408 372 9 3 +F00 413 372 12 3 +F00 413 442 15 3 +6A00 464 752 30 1 +6900 491 696 24 1 +6900 491 750 27 1 +F00 506 272 6 3 +A00 506 268 33 8 +F00 511 367 F 3 +F00 511 272 C 3 +6900 563 757 36 2 +6910 578 696 1E 1 +6700 586 696 39 8 +F10 590 372 9 3 +F10 590 272 6 3 +6700 590 755 3C 8 +6900 590 696 1E 1 +6900 595 696 24 1 +6900 595 750 27 1 +A00 598 372 3F 8 +6A00 658 752 30 1 +6900 685 750 27 1 +6900 685 696 24 1 +6910 772 696 1E 1 +6700 780 696 42 8 +A00 867 93 45 6 +A00 867 197 3 8 +F00 875 197 9 0 +F00 880 267 15 0 +F00 880 197 12 0 +6800 884 430 1B 8 +6900 892 430 1E 1 +6700 892 489 48 8 +6900 897 430 24 1 +6900 897 484 27 1 +6A00 914 486 30 1 +6A00 981 430 4B 1 +6900 987 430 24 1 +6900 987 484 27 1 +6A00 1006 486 30 1 +6800 1016 573 1B 8 +6700 1023 632 4E 8 +6900 1024 573 1E 1 +6800 1025 720 1B 8 +6900 1029 627 27 1 +6900 1029 573 24 1 +6700 1032 779 4E 8 +6900 1033 720 1E 1 +6900 1038 774 27 1 +6900 1038 720 24 1 +F10 1057 197 9 0 +6900 1059 490 36 2 +A00 1065 197 2A 8 +A00 1067 93 51 7 +F00 1069 197 9 3 +F00 1074 267 15 3 +F00 1074 197 12 3 +6910 1074 430 1E 1 +6700 1081 430 39 8 +6900 1086 430 1E 1 +6700 1086 489 54 8 +6900 1091 430 24 1 +6900 1091 484 27 1 +6A00 1108 486 30 1 +6900 1119 627 27 1 +6900 1119 573 24 1 +6A00 1122 720 4B 1 +6900 1128 774 27 1 +6900 1128 720 24 1 +6A00 1175 430 4B 1 +6900 1181 430 24 1 +6900 1181 484 27 1 +6900 1191 634 36 2 +6500 1200 781 36 2 +6A00 1201 486 30 1 +6910 1206 573 1E 1 +6700 1214 573 39 8 +6910 1215 720 1E 1 +6700 1218 632 57 8 +6900 1218 573 1E 1 +6900 1223 573 24 1 +6900 1223 627 27 1 +6700 1223 720 39 8 +6700 1227 779 57 8 +6900 1227 720 1E 1 +6900 1232 774 27 1 +6900 1232 720 24 1 +F10 1251 197 9 3 +A00 1259 197 3F 8 +6910 1268 430 1E 1 +6700 1276 430 42 8 +6900 1313 573 24 1 +6900 1313 627 27 1 +6A00 1316 720 4B 1 +6900 1322 774 27 1 +6900 1322 720 24 1 +6910 1400 573 1E 1 +6700 1408 573 42 8 +6910 1409 720 1E 1 +6700 1417 720 42 8 diff --git a/BACKUP/XART100/TEAMSEL4.BDD b/BACKUP/XART100/TEAMSEL4.BDD new file mode 100644 index 0000000..8bd9c5f Binary files /dev/null and b/BACKUP/XART100/TEAMSEL4.BDD differ diff --git a/BACKUP/XART100/TEAMSEL4.IMG b/BACKUP/XART100/TEAMSEL4.IMG new file mode 100644 index 0000000..0c0c2f6 Binary files /dev/null and b/BACKUP/XART100/TEAMSEL4.IMG differ diff --git a/BACKUP/XART100/TEAMSTAT.BDB b/BACKUP/XART100/TEAMSTAT.BDB new file mode 100644 index 0000000..971effb --- /dev/null +++ b/BACKUP/XART100/TEAMSTAT.BDB @@ -0,0 +1,63 @@ +teamstat 2000 1000 255 2 23 60 +teamstat 710 1162 131 422 +finalres 109 565 128 425 +4000 138 161 0 5 +500 138 151 3 12 +500 139 288 6 16 +500 139 220 9 13 +500 140 357 C 11 +4000 145 250 F 20 +4000 145 349 12 18 +4000 150 319 15 19 +4000 150 255 18 17 +4000 156 319 15 19 +4000 238 349 1B 18 +4000 242 319 15 19 +4000 242 255 18 17 +4000 248 319 15 19 +4000 248 338 1E 22 +4000 272 349 1B 18 +4000 306 349 1B 18 +500 338 221 21 15 +500 338 151 24 14 +500 339 286 27 10 +500 340 354 2A 9 +4000 340 349 1B 18 +4000 341 250 F 20 +4000 342 161 2D 5 +4000 346 319 15 21 +4000 346 255 18 17 +4000 352 319 15 21 +4000 374 349 1B 18 +4000 408 349 1B 18 +4000 438 319 15 21 +4000 438 255 18 17 +4000 442 349 1B 18 +4000 445 319 15 21 +4000 460 338 33 22 +4000 476 349 36 18 +500 738 151 3 12 +4000 738 161 0 5 +500 739 220 9 13 +500 739 288 6 16 +500 740 357 C 11 +A00 752 258 39 6 +C00 771 249 3C 2 +C00 797 383 3F 0 +2800 803 250 42 7 +A00 842 258 45 6 +C00 893 273 48 1 +2800 914 384 4B 8 +2800 917 373 4E 8 +2800 921 250 51 7 +2800 922 263 54 4 +500 938 223 21 15 +500 938 151 24 14 +500 939 286 27 10 +500 940 354 2A 9 +4000 942 161 2D 5 +C00 943 249 57 2 +C00 944 383 5A 0 +A00 946 258 5D 3 +2800 995 250 42 7 +A00 1036 258 60 3 diff --git a/BACKUP/XART100/TEAMSTAT.BDD b/BACKUP/XART100/TEAMSTAT.BDD new file mode 100644 index 0000000..1a7c84e --- /dev/null +++ b/BACKUP/XART100/TEAMSTAT.BDD @@ -0,0 +1,4513 @@ +32 +0 204 23 1 +ÍåìÞåìÞ¶æß··ÖÒ¸¸ÎΛΥ¦¸¸tjkr)¨¹¨llqqppQQPPQPPŽŽŽŽQQQPPPOPŽSOOS/OSOS////7.6Ls7-///7s.66666666777777/////////77664455555555335555555544444/pppQQT6444446666666666666444666L455NNN,,,,,...........----.åìÞåìååÞæÖææ¤××ÂΦ×؛اÁtt¦¨lÅ2uuqqQPQPPŽPTŽQ>TTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<  """!!"$"&"&!!!!!!!!!!!&"&&""%""$%""$$%"&"%%$+%"&$+%)%)&((!!'''((''(!))),'''&),''''&),&,)-),004777::1::411:7411  ;;;1    !"""""$"& %!!!!!!!!(!!&&&&""&""%""$$"'"+$%%++&"%+%%++&!!!'&'(((!('&)),,)&&,''''&,)),',-)'3: :40:11444949< 1;;59  """"""$!!!!!!!!(!!!!!&"&&&""&&&""&&+2$"$%!(!&"%+22)'!&&''!((((''&&,&))))'''&&))&'',,'(30:77:447704:1::4: 5;;919  ""! ""$ $"&"$&!!!!!!!!!(((&%%&&"$$""%)!("22%&%)&(&''%+++%'!'''&&&&'''&&'&'&))''&&,,,&''-*'(3'07:7 7777741:4 0;;9999   " "" "$ &!&"!!!!!!!((!%""%$%%%$%%"'%$$$)%%+%%)&)++))))'('&)&'&))))&''&&''')),,&3')*,''&'004:77440:7441440 9199;919   "!# " """ ""$$&!(!!!!!!!!!&""%$%""%%"&"%%%%%$++%%$%)++%%+%&''&&&&&))),,,))'''&&,,&'',),'('''00777444041:7<919 1   !!#$$"""&" $&!!!!!!(!!!(!&""""""&&"&&%+$%%$%%%%++%&"++*'!'&&''&&&))'&%)&'&&,&&&'&)-&((((', + +::0047 99   "!"""""$"&$&!!!!!!!!!!!&&""&"""&&'&"%$+2+%%%+++%'&%)!((&&&&&&,&'''&)&'&),&,&3')*)'(((',,007 7:77 700 000999    """" """$""!!!!!!!!!!&"%%""""'!&"&)2$)%%)++%%'!)(((('&&&))))&'&)'''&,&,,,&,*)''''&-),00:7/ + 7774 0 041119   """ ""$$$&!&&!!!!!!&!!!&"""""&&"&'(&&&&)%&%%%%"'!((((!&&&)))&)))&''''''&,,)),'''(,))&'00/ 77::0111991    "  """"""$ &"""!!!!!!!&!!!&&&&""%"'!(((&%+))%+%)!((!'&&&&&&&&&))&'&,,))&'&))''(((')),''::7:0 0411419191   """"&"&&!!!!!!!&!!!&&&"""&"&'!&%22%%++%!((('&""&&&&&''&'''&))))''&,'''&3(&)'(''00: 7: + + +000441147:9   "# $$"$"""&&!!!!!&!!!(!&"""&&""&!%22+%+2%!((((&)"&&%))&&,&''&&,))''))'(','',),'(')007 + 7 + +04110::199 <  "!$" $""""&!!!$%""&!!!!!!((!&"&&&&&&&"$$%%%%!(((('&&&&)%)&&%)&,)),&&'')*)''''',))&'&,-000::77 011149991;;;       """"""$ """!!&"""""&!&!!!!!((!'&&&""&'&&&&))%(((('&))'!'&&&&))&&)),&,'''))''''3&,,&)&,,,00: + 0::4191;5;   "&"""&""&%$"""""&!!!!!!!!!!&""&&&"&&!&")'!(=(&""&")))'''&&&&&,,&,))%,''''',&'')***-'00 +0:77740:41;;;;   # "&!!"$%"""&&$%"!!!!!!!!((!'&&&"%)&&&&!((((!")&&%%)&&&&&''''&'',%),'(((')*,')***.*&0017::4 ::4 ;;;;;; ##" "&"""%"$"$&!!!!!!!((((!&&")""&&!(((!&&&''&))&&))&),'&))'',%)''''',*,')*+..*-)/0 :74744111:4;;<;;  $$"""""""&"$ $"&&"!(!!!!!((((!&&&&&"&'!(((&""&'&)"&&&&),&&&)*)&&)&'('&&))&')*...***)0000 0:7 + + :4:741;;;;<   !  ####"""""""""""""""%$""&&&&&!!!!!!!(((!!&'&&&''&&'!!&"&&%))&'''''&&&&))&&),'(('&,)&'3)*..*-*))//: + 77:: +7:19 <;;;<   # ""&!&&"""$$$"&%$"&&!!!!(((!!!!!!"%"&""&&""&&"%)&&&&&&&!'&)&'&,&&&&''&)&''&*++*)**)*/ +00/ 7:777 47:411;<    #"""&""&"""$ $""!22 &&&"&!!!((!!!!(!!&%)&&&&&&&'&"&&&&&&)))&&))''&&'&,''&,''',)*.*)-*-**7 + + +47741141   !!# """&"$$$""& 2 ""%"&!(((!!!((!!!&&''&&&&&"))&'&&&"%)&&*)&&))&''''&))''',)))***-***0/ + + :::40     " #### "!"""""$"&"$$2 "!!""""!(!!!!!!!!!!!'!'&&&&)%)"&))&&&&&&&)&&)%,'!'(',,)&&&,,',**--*-)0 :1     !###!!"""&&" 2 $$!!""&!!!!((!!!!!!(!!&))))))&&&)&&&&'!&&'',,&''!'&&''*,&,,'(&-)----)/ 7/7:7 + 70        !!""""$$""$ $$$%%2"!%%&!((!!!!!!((!")))"&&'&&&'&&&)&&&&&&''!(')*)')***)''',))--)**0/ + + + + +77 00    00    "    "$ $$"""%$$2 $2 %&!&%%"!(!!!!((((((!&""&&&'&&"&'&)%)&)%)&&&'',*)')****)&&'',*-)-**// + + + + + 7  0  9 "!(!" " $""" %"" 222 %"&""&&&!!!(((((!((!&&&&%"&))"&))"'&*)&'&&'&)&')**.+***&'(')****-0 + + + +  + + :000      !   """"$""&" $"22 $"&&"""!!&"&!((((!!!!!!'&&))&")&&&)&&'))&''''&),',%*..+***,''',****)// + + 07 70  #""  $$""$ "$ $ $"&&&%"&"""&!!((!!!!!!!!!&&&'&&&&""!!&)'((!(')),)%*+.****)))&',-**)-// + + +/ 7 // :0 0      #!(" $ $"""$$ $"!"$$ $%!%$%$$%"&!(((!!!!!!!!!!!''&'!&))&"%)&(!')),,&,)*+*)**))-*)'&)-))./ + +  + + / :0000  99  #!!! ###$$$$"$"&$ !&% 22$$%%%%"&&'!!!!!!!!!!!!((!&))")"&)%%&''&)*)&''&&))))*))****),,))*.// + + + + +0000 9   "## "$" $ 2 "$ 2 $$ $&&&&&""&!!!''!!!!((!!&)%"&&))"&&'')%)'''''&'',***+**-*-),**../6///6 /0 8 + 777 + 000001000     !!""" $$222 """"$ $%$2 "&!(!&"%"'!!!!(!!((((!(&"'&&"&'!(!&),&'&&)),&&)))*+*-**))*...*6 +///// +// 70  00    "!  $(("!  2 $2 %&!!%22$$ "!!(!"""&&&!(((!(((((((!&'))!!''(!),('&*+++*),,',)*)-*****2.** +/  +   000     "$ #2 $$$$!!"$ $%!!!(!&"%"&&&&!((!((((((!((!&%)&&"&&)),%)*+++**%))''&,))****..**-/// /  010      $ $" 2 $$$% $&"$%!!(5(!"%""%)%)"!!!(((((!!((!&)&'""&)%)%**+++%%%))*)'',**-**+.*))) + //  /0 0410 #"  $" 2 $ 22%!!&"!&&!!!&""""%%)&""!(((((!!((!'!!'!'&)&&**%*++%%*))*+*))'&&)**...*--/ / + + +0 0100  !!!!" "$$ 2 $ 22$(!&((&!!"%"&'"%%&&"&!!(((!!((!'((((!'&&!%***++))**%*+****,'3)+**+**-* +         !""" #$$ $%"""&!!!!&$$%""""&&&&'!!!!!!((!'!((((!%%!)*%%+++*******%***,''-+.***-*.F 192 86 1 +*'*,''''****(''''''#""##''''''')(''')))'''')****'********)')********----****'('''''''***''''''''''''''***'''''''('****----********)')********'****)'''')))'''()'''''''##""#''''''(****'''',*'**''''""""'''$"""""""""""""''%"'%'''''"%'''''''''''''''''')*)********''''''#"""#%'''''"'$$&&&&$$'"'''''%#"""#''''''********)*)''''''''''''''''''%"'''''%'"%''"""""""""""""$'''""""''''**"""""""""""''""""%%'''''''''''%"""""'''''''''###'"""!""""""""""!"""'###'''''''''"""""%'''''''''''%%""""''"""""""""""*.""""""""""'"""'''''''""""""""""""""""""""""""""""""""""'''''''"""'"""""""""".34444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333""3/**/////-33--/  /-*/  /**-  -*'-  -''*  *'"'  '""*'  '*""*-  -*""-/  /-"*-  -**-   -*'*   *'"* + +*"( (' '' '' '' '%%' '* *' '"'" + +"'""'" "'""'" "'""'' ''""'' ''"""*' '*""''*' '*'''*,*  *,*'**--  --**--////----////--//0//0///33--33//33--33//33**33//33**33//33''33//33''33//33''33//34##43//34""43//3443/3>44>33>44>334444334444334444334444334334334//4344."".4445-""""-5445*""""""*5445*""""""""*5445''''''''''5444'''9999'''4444'**8888**'4443'**7777**'3441*+-6666-+*144/---6666---/44/---7777---/45/--/8888/--/55////9999////54/1//:::://1/443333;;;;3333443333<<<<3333444333====3334443333""""""" !"""""""""""""""""""""""""""""""""" !""""""""""""""""""""""""""""""""""""""""""! """"""""""""""""""""""""""""""""""! """""""3333443333333/////////////////////////////////////3//0///0/////////////////////////////////////33//////33/////////////////////////////////////0///0//3/////////////////////////////////////3333333444333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444433333/33333333//3////33333333333333333333333333333333333333333//3////333333333333333333322333333223333333333333333333////3//33333333333333333333333333333333333333333////3//33333333/3333344433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333412 96 46 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6+ 66&*&66++++++6666666&&&66+ + + + + + + + + + + + + + + + + + + + + 66&*&&66666&&&***&&.--%%%%%%%%%!!!!%%%%!!!!!!!!!!!!!!!!!""""""""""""""""!!!!!!!""""""!!!!!!""""""!!!!""""""22.)))))))%%%%%%%%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!"""""""!!!!!!!!!!!!9=2''''''((((((((((((((())))))))))%%%%%%%%%%%%%%%%%%%%%%%%!!!%%%%%%%%%%%%!!!!!!!%%%%%%%%%%%=39'''''''''''(((((((((()))))))))))))))))))))))))))))))))))%%%)))))))))))))0<3''''''''''''''''((((((((()))))))))))))))%%%%))))))))))))))))))))%%%%%%))))%%%%%%% +*;<'((()))))))))))))%%%%%%%!!!!%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""" 43%%%%!!!!!!!!!!!!!"""""""""""""""""""""""""  ;?0]'VFG;; +E9#6RooQ Q QO{P{{{{€{OP\QQ{O{\\P{{{{\oKy7U:X99:FGFF[::WGW[:G>L>Z?>>Z?;;;F;-;F=,E#6K Q QQQQOO{{{{{{O{{QoQ}OOOP\P{OPPPQxt7cV=:9:FGF::V:'J;[]XG[FG;GF<?FF +:,E9#16 gK o QP{{P\OO{O{\QQP{{{Poo\{{PQK6SR7VH::9YME9VYY9GF::]M4M9=;F;GGG?>44444::::::   7<<$!$,<,$#"$,###  "?   + 6 - -- + + + + + + + + + + + + ---  + + + +  +  +      4444::::44::  !$<<,! $###,.,!! !5## 6   - -----  + + + + + + + -66 + + + +--  + +  +     44>:444::++ #,,# #,$5"&.,"  !##!!  + +-6 - + + + + + + + - 6----  -   + +    *  44:4:::4++$ ! $7#$$,,# !","#,$5 !#    + + + +  -- - + + + + + + +- + -- + + + + +       444:+:4::::!7<# $,,<,#!#$,,$"#! !!!! ! +    -  + + + + -- + +  +  + + +      4>44:4: ##!$77,$!!$,<<$ #,$$$$#!5 &&&! #  - + -  + + + + + +-6---  --- + + + + + + + +    :44:44 !7<$$"#,<<,"!,$$"#5 !55 !#! #    +-  + + + + --- + -66-  +-- + +        4444:+:::   !#7$$$#,,,,$"#!&5 !  ## #!!& +  6  + + +- -  + + + - +---- + -6--   + +       44444:::+: !#$$,.$!#,,$.#55 &! 5 #%%!&!!!&!66   + + + -- + + +-6- + +-- + --66   +  +       4444:+: # ,./<!"$$$!5!!!! !%"#! &#""      +-- 66-- + - +-6-- +       444:::::: $7$##,.<."!$$$ =5#"! !&&#&! !&!!#""     + +  + + -6 --- ---- -- +  +      44::44**  $7<, !$,.,,,"".,$ &"&55 !&&&5 #%%##"#  +  --- +   +-- + -- -- -6 +   * + +  + + +    444444:4   7<7""""$,,,,.,&!"# 5!&!!#"& !%%#&"#!    -   + + + 6- + + -- --- + + + + *  + +    + +     4444  $<,$#!"! "$"$$$# && 5!"%"#"&&&""#&&#&!       ---  - ---  +   + +      444::44  $$,7!55".$"#&5!& 5 &%"#&&!&(#&!&((#" 6   -  +---6 + + -----66 *  + + +  + 4>44:4::  77$#,<<," 5 ""%&&5 !&!(""##! !!&##(((""'%   + - - - --- - ----- + 6-66--   +  + + + 4444::+<4:  7<7##"$!,/.%& &""!!###&((&(#%&!&%%%%'%(&(&&   +   + - + + + + -66- *  + + +    ****44: ##$7$#$$# #,"!5 !!!!&("&&&!(""%%%%"%%"%"&!!!&  +   +   -  + 6-    + + +   +   +  * * 44$+$77$!$.<.#!!5#& 5 !&#%#&!&((('.%"(""!&&!!(%(6    + + + + + 6---- 6- - -   + +   + + + +    * +787<7$! #>>=>=>>= + +  + + +  + + + +     %--55577777789119999989  +  + + +  + +      "#...%%-55---5555555555     + +   + +      + !!##%%%&%,,,,,,,,,,,     + + + +  + +    !!(...**************     +  + + + +         !!!!!"!(!()(((((((((     + +  + + +      +  !'!(!(''(((((((((  +  +  + + +    + + +   + !'''!((((())((((     + + + +    + +   !##&5555677789111122222    +     +     !.&5566777891133444444444 + +      +        $$$$$$77:::>>=>=>>=   + +         "!%--55577777789119999989 +        + +  !...%%-55---5555555555   +     +     ##%%%&%,,,,,,,,,,,    + +    + +      ! !(...************** +   + +  + +        !!!!!"!(!()(((((((((  +   +          +  !'!(!(''(((((((((  +          + !!!!!(!((((()))((((  +    +  + +     +  !&67777777789111122222             +  +  #.&5566777891133444444444          + + + $$$$$77:::>>=>=>>=  +          +     #!#%--55577777789119999989  +          +  +    '#...%%-55---5555555555      +   + +   + +!!##%%%&%,,,,,,,,,,,            + +!(...**************           +  +  + !!!!!"!(!()(((((((((    + + + + +   +!'!(!(''(((((((((            +    +!!!!!(!(!((((())))((           #&667776777779111112222        +   *5566777891133444444444          +    $$$$$77:::>>=>=>>=      +     %--55577777789119999989          +...%%-55---5555555555      +    ##%%%&%,,,,,,,,,,,        +     !(...**************          +   !!!!!!"!(!()(((((((((       +  !'!(!(''(((((((((      !!!''''((((())()((     + + &%67776667789111112222          5566777891133444444444    +    + $$$$$$77:::>>=>=>>=        +"%--55577777789119999989    ....%%-55---5555555555  +    + + !!##%%%&%,,,,,,,,,,,    + + !!(...**************        +!!!!!"!(!()(((((((((   + +  +  !!'!(!(''(((((((((     + !!(!(!''(((())((((    + + +#.677777677789111122222      +.&%5566777891133444444444   +$$$$$77:::>>=>=>>= "#%--55577777789119999989!!    !""...%%-55---5555555555!     !##%%%&%,,,,,,,,,,,!   "!(...**************!!!      !!!!!"!(!()(((((((((     !'!(!(''(((((((((    "!!"!(((!((()))((((!  +  677757777889111122222   !"#&5566777891133444444444!   $$$$$77:::>>=>=>>= "".%--55577777789119999989!!    !!!#....%%-55---5555555555!    !'###%%%&%,,,,,,,,,,,! !!!!(...**************   !!!!!"!(!()((((((((( !'!(!(''(((((((((!   "''('!(((((())))((   #"#&77776777789111112222 .5566777891133444444444 $$$$$$77:::>>=>=>>="!"  !%--55577777789119999989!   ...%%-55---5555555555!  ###%%%&%,,,,,,,,,,,!   ! !""!(...**************""   !!!!!"!(!()(((((((((!!  !'!(!(''((((((((("     !'!!''(((((())()((  !#%%6777777789111112222 .%&%5566777891133444444444" $$$$77:::>>=>=>>=    %--55577777789119999989  "##...%%-55---5555555555! !!!"""##%%%&%,,,,,,,,,,,!! !!"!(...**************  !!! !!!!!!!!"!(!()(((((((((   ! !'!(!(''(((((((((   !!  !!""!!!((('((())(((("!! !!""%%667776777781111122222   !"! ""!#5566777891133444444444   " $$$$77:::>>=>=>>= # !!!"!#%--55577777789119999989  #"" !""...%%-55---5555555555 "!"##%%%&%,,,,,,,,,,,  !#!!!#!(...**************  #!!!!!!!!!"!(!()(((((((((  !"#!!!!'!(!(''(((((((((  ##"! "!''(((((((()))(((( !" !!!      !!#     #" !" "     ""7"""#" " "##"!#   !  !   "   #!!#  "  !!       !!    +   !   7  ! +  77  !    !"!!    7  #!""!!!  3C 176 24 1 +Š‡‡‡ŠŒˆˆ¢ŒŒŠ¢Š‡¢‡¢“£Ž•¦’–’¦¦’§–§¨±¨©¨  ÁÁÁªªÂÃÃÃÄÄÄĹ¹¹¹¹¹¹¬¼¬¼¬¼¹¬¹¹¬¼¬¼¬¬¼¹¹¹¹¹¹¹¹¹¹Ä¹ÄÄÄÄÃÃÃêªÁš©š©¯¨™±¨§’’’–’‹‹¤¢¢Œ“Œ‡¢Šˆˆˆ‚‚ˆ……ƒƒƒ_Q~~``LaMMbNuuvcccccccgcdcgcgcˆŒˆˆˆˆŒŒŒŽŒ¢‡¢‡¢“Ž••’¦–§’¦™¨±¨©š ÁšªªÃÂÃÃÃÄÄŬ¬ºº»º»º»º»»»»»»º»º»ºººººº¼¬¬ºººº¬º¼¬¼¬¼¹¹¹ÄÄÄÄÅÅꪠ© š¯¨™™™§–’’§’’‹Ž“¢ŒŽ“Š¢‚ˆE…Œ‚EƒFFF__KQP`eaObNjvvggcgwwwwwdwwddddgˆŒ‡ŠˆŒˆŒ^ŒŒŽ¢‡‡¢Œ‘‘‘—‘˜‘˜¸¸µŸ·´·žÑÑÑÑÏÏÏÏ̶ÎÎÒÀÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×Ö×ÖÖÀÀÕ¿Ô¿ÔÇÇÇÇÔÇÇÔÇÇÇÇÇÇÇÈ®®®®ÉÉ°°²²²³³œœ­µ±›™’—›‘‘’Ž¤ŽŽŽŽ¢Š‡Œˆ…ˆ…EƒA††DqqqrWpJV{|Xo[]zzzzYzYzYzYYYzznŒ‚ˆ‡‚ˆ^ˆ…‰‡‡¢ŒŽŽ‘‘‘‘˜˜˜˜¸ŸŸŸŸ·Ÿ··ÑÑÑÑÑÓÓÐ涶ÒÒÒ×××××××××××××××××××ÖÀÀÀÀ¿¿¿¿¿¿¿¿ÔÔÔÔÇ¿¿ÇÕÈÕÈÌÉÉÉÉÊ°²Í²³³³³±¯˜––—˜’ŽŽŽŽŽ“ˆŒˆŒŒˆˆˆ…………B†DqqrrZZV{||[]]]YY\\\\\\\\\\\\\YzŒ^ˆŒ<‡ŠŒˆˆ‡‰¢¢‡¤Ž¤’—’——”—¯±¯±±š­³­œœ³Â²²°°ÆÆ®®¾¾È¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾½¾¼½½½½½½½½½½½½½½½¼¼¼Æ¼Æ¼ÄÄÅÅÅÅÅÂœœªšš¯¯±±››––¦¤¤•¤Ž¤ŒŽˆˆŒ‚^ˆE…ˆ^…†xxkkDSUHRRVygifmfmhhhhhhhhhhhfffˆˆŒŒ‡ŠŠˆˆŠ‰‰‰‰“ŒŽŽ“¤¦’’–’–§’¦§–¨§¨¨¨©±©©©ÁÁªªªªÂ«Â«ªÂªÂªÂªªªªªªªÂªÂªª  Á©š¯©±¨¨™™™§§’’¦¦••••““¢ŒŒŒŒŽŒˆˆ^Š‡ˆEˆˆE^^@ƒF__}KK~s`ttLaaaMMMˆ^Œ^Œ‡‡ŠŒ¢‰‰¡¢ŠŽ“‡¢¢“Ž¤•ŽŽ•••¥¦•¦¦¦¦¦¦§§¨™¨¨¨±¨¨©¨©¨¨©¨¨©¨¨©¨±©¨¯¨¨±©¨©¨©±©±©¯©©©©©©©¨©©¨±¨¨§§§§§’¦’¦’••¤¤••Ž¤Œ¢¢¢¢¢ŠŒŒˆ^ŒŒ‡‚^^^ˆ…^ˆ………@ƒƒ}_KKK~~~~sssss`GGssssssss`ŒŒŒŠŠŠŠ‡‡;¡‰¡‰‡ŠŠ“‡‡‡“Œ“Œ¤Ž¤••¤¤¤•¤¤•¦¦’’¦’¦¦’§¦§¦¨¦§§§§§§§§§§§§§§§§§¨§¦§§§§§§¨¨§¨¨¨§¨§§¨¨¦§§¦¦’¦¦¦•¥¦•••••¤¤Ž¤Œ¢“Š¢‡‡‡‡ŠŒ^ŒŒ‚‚‚‡‡‚‚^E^^EEE……@ƒƒ}__KKKKKKKKKKKKKKKKKKKKKŠŒ^ŒŒŒŠ‰;‰¢‰‡‡¢ŠŒ‰‰¢¢Š“Œ“¢Ž¤¤Œ“¢“£¤¤••¤¤¤¤¥¥¥¤¥¤¥¥¤¥¤¥¤¥¥¤¥¤¥¥¤¥¤¥¤¥¤¥¥¥¥¥¥¦¦¦¥¦¥¥¥¥¦¥¥¥¥¥¥¤¥¥¤••¤•¤•“£“¢¢¢ŒŽŒ¢Š‡¢‡¢¢‡ŠŠŒŒ‚‡‚‡‚‚‡‡‚‚‚‚^^^ˆ‚^^^EE……ƒƒ}ƒ}}}ƒƒƒƒƒƒƒƒƒƒƒƒƒƒŒ^ˆˆˆˆ‡¡‰‡ŠŠŠŠŠ‡‰¡‰‡¢ŒŒ‡¢ŠŒ¢¢¢‡¢¢¢¢¢“¤¢““¢£££¢££££££££££££££££££££££££¤££££££¤£¤££¤£¤£££££“¤£¢“““““““¢Š¢Œ¤ŒŠ¢¢Š¢‡ŽˆˆˆˆŠ‡Œ…ˆˆ‡‡‚^Œ^‚Œ‚=‡‚‡‚^Œ^^^^^^^^^^^^^^^^^^^^^E^ŒŒˆ^^‰;‰‰‡Œ‚ŠŠŠ‡¢‰‰ŠŒŒŠŠŠŠ¢‰‡¢Š¢Š¢“¢¢“¢£“¢¢¢¢£¢£¢££¢£££££¢£¢££¢£££££££££¢£££¢£¢££¢£¢££¢£“£““¢¢“““¢“¢¢¢“ŒŠ¢¢‡ŠŒŠ¢‡Œˆˆˆˆ‡ŒˆˆŠ<‰‚Œ^‚‚‚‡<‡‚‚^‚‚‚‚^‚‚^^‚‚^^^^^^^^^^^^‚Œ^Œ;‰‰‰‰‚ŒŒ‡ŠŠ‚‡‰‡ŠŒŒŠ¢Š¢¢¢¢“Š¢¢““““““¢££££££££¤£¤¤¤¤£¤£¤££££££££££££££££££££££££££££££“£¢““““£Œ¢¢ŒŽŽ“¢‡‡‡““Š‡‡ŠŽˆˆˆŒŒˆŒ‚‰‚‚‡^‡‡‡‡‚‚‚‚^^^‚^^^^^^^^ˆEˆEEˆEEˆ^^^‡ŒŒ;¡‡‡‡‡Œ‡‰‡‚ŠŠ‡‰‰‰‡‡‚‡‡;;¡¡‰‚‡^ˆ‚‡‚‡‚‡‚‡ŠŒŒŠŠŠŒŒŠ‡‚‡‡ŽŒŒŒŠŠ‡ŒŠŠŠˆŒ‡ŠŠ‡‡‡‡ˆˆˆˆŠ‡Šˆ‹ˆŠ‡‡‡‚ˆ…Œ‡‡‡‡‡‡ŠŒˆŒŒ‚Œˆˆˆ…ˆˆ‚‰‰‰‰‰‡‡;‰=‡‡‡‡‡‡<‚<‡<7‰7‰‰<‰‰‰7‡<‰^‡;‰‡‚Œ‚‚‰‰‰‡Š‚‚Š‰‰‰‰‡;¡¡‰‚Š‡ŒˆŽŽŽ•’’§™¯š©œÂÂÅÃÅĹ¹¹¹¼¼¼¼¼¼¼¼¼¼¹¹¹¹¹¹¹ÄÅÄÃÂÂÁ©š š±›§¦–’‹Ž““ŒŒŽˆŒ‡‡‡ŠŒŠŠŒ^ˆ……Š‚Œˆ…ˆ^‚‚<‡‡‚‚E…@}_K~~`LLOMbuNuvuccccgcggdgdcgdg‡‡‰‰‰‡ŒŒ^Œ‡‰;;‰‡‚Œ‚‚‡‰;;;¡¡;‰ŠŠŠŒ‹ŽŽ•’–––¨±š ªÅÃÅĹ¼º»»»»»»»»»»ººººººººº¼¼¼¼ÄÄÄÅÃÂœª­šš™––›—’•Ž¤Œ‹‹ˆŒ‡‡ŒŠ‚ˆˆ…‹‹‹‚‡‚ˆˆˆˆ‚‰‰‰‚‚^ˆE…ƒ}K~QPeaRbNjvvggiwwfidifwfiwiwdd‡;‰‰‰‰‡‚Œ^ˆŒ‚‰‰;‰Š‚‚ŒŒ;‰‰‰¡;¡‰;‡‚Šˆ……‘‘‘—˜¸Ÿ··ÑÑÓÓÐÐÒÒ×××××××××××ÖÀÀ¿¿¿Ô¿ÔÔÇÇ¿È®ÉÉ°²²³œµ±””›’ŽŽŽŽ‹}ŽŠ‡‡‡ŠŠ‚Œˆ…ˆ…ˆ‡‰‡‚^‚^Œ‚<‡^…A…††xkqrWZp{{|X[]]]YYY\\\\\\\\\\\\Yz‰‰‰‰‰‰‚ˆŒˆˆˆŒŒ‡‰‰¡‡‚Œ^Œ‡‰‰‰;¡‰‰‡Šˆˆˆˆˆ…‘—˜¸´·žÑÑÓÓÐ˶ÎÖ×ÖÀÖÀÀÖÀÖÀ¿¿ÔÔÔÔÔÔÔÔÔÇÈÈÈÉ®°°²³­¯´”›’¤Š‡ŠˆŒ‚‡ˆˆ…ŽŒ‡;‡‡‡ˆˆˆˆ^Œ‚E……†††xDSrWZpVV||X[zz]\zzzzzzzzzzzzzn‰‰‰‡ˆ…ˆŒ^Œ^Œ‚‰‰‰‰‚ˆŒ‚‚‡‰‰‰‰‰‡‚Œ‚ŒˆŒŒŽŒ¤Ž•••’™™±šš ªªÂÃÃÄÄĹÄÄÄÄÄÄÄÄÅÄÄÅÄÄÄÄÄÄÃÅÃÃê ª šš±š±›–•¤Ž‹‹Ž‡‡‡ŠˆŒ‡Œˆ…ˆŒ^‡^Œ‚Œ‚Œ^^ˆˆ^‡‚^ˆ^EƒFƒ†QQ~Q`StaMbNuNvcvcccccccccccuuc‰‡‚ˆˆˆŒ‚‡‚ŒŒ‡‰‰;‚Œ‚‚‚‡‰;‰‰‰‡‚‡‚Œˆ‚‡ŒŒŒŒŽŽ““¤•••¦’’––™™¨±©©©©©©©©©©©©©©©ÁÁ©©Á©©ÁÁÁ©©¯¨±™™–’’––•¤ŽŽŽ‹‹Ž¢‡‡¢‚Š‡‰ˆ…‹…^Œˆ……ˆ…^‡‚ˆˆˆ^‡‚‚‡^ˆEˆ…ƒ}}„KKKQss`s````ttetLt``t```tLt‡‚ŠˆˆŒŒŠ‰‡Œ^Œ‚‡‰‚Š‡¡;;‰‰Š‚Š‡‡ŒŠ‡‚ŒŒŠŒŠ¢¢“ŽŽŽ•••¦¦’¦–§§§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨±¨±¨¯¨¨¨¨§§–§’’¦¦¦¤“ŽŽŽŽŒ‡‡Œˆˆ‚‡‰‡ˆ‹…ŒŒˆ…ˆˆˆˆˆ‡‚^‚‚‡‚‡‡^ˆ^^E………ƒ}„„KKKKKK~~~~~~~~~~~~~~~~~~‰‡‡‚Œ^ŒŒ‡‚ŒŒ^ŒŒ‡‰‰‡‡;;¡‰;‰‡Š‚‚Š‚Š‚ŠŠ‡‡‡¢ŒŽ¤Ž¤¤•••¤¥¥¥¥¥¦¥¦¦¦¦¦¦¦¦¦¦¦¦¦¦§¦§¦¦¦¦¦¦¦¦•¤¤••Ž•“¢Œ“ŽŽŽŠ‡‡ŒˆŠ‡‚Œ^Œˆˆˆ…ˆŒ^Œ‚‚‚Œ‡‡‡‡^ˆ^^ˆE……ˆ…………ƒƒƒ}„_F___FFFFFFFFFFFFF}‡‡‚‡‚Œ‚Œˆˆ‚ŒŒŒ^ŒŒ‡‰‰;‡;¡¡¡¡‰<‡‚Œ‚‚Œ‚‡‡‡‡‡‡‡¢ŠŠŠ“¢¢¢““£“££££££££££££££¤¤¤¤¤¤¤¤¤¤¤¤¤¤“£¤““¤Ž¢Š¢ŒŒŽŒŠ‡‡‡ŠŠŠ‡‰‚Œ^‚‡‚ˆˆˆŒ‡‡Œˆ^Œ‚‚<‡‚‚‚‚‚^Œ‚‚‚‚^‚^^^^ˆEˆ^^E^ˆˆ^ˆEˆˆEˆˆEˆE‡ŒŒˆˆŠ‚Œˆ^Œ‚‚‡‚Œˆ^‚‰‰‰¡‰¡;‰‰‰ŠˆŒ‚ŒŒŠ‡‡‡‰‰ŒŠ¢‡Š¢‡¢ŠŠ¢¢“¢¢£¢£¢££££££¢£¢£££££££¢£££££¢“¢¢¢““ŽŒ¢Š¢ŒŠŒŒ‡‡ŒŒŠ‚‰‡ˆˆ‚‰‡‚‚‡‚‚‰‚ˆˆˆ‚‰‰‰<‡‡‚‡‡‚‚=‡‡=‡‡‚‚‚‚‚‚‚^^^‚‚^^^^?^‚^‚^^^ˆˆˆ…ˆ‚‚ŒŒ‚Š‚‡ˆ^ŒŠ‡‰;;¡;‰‰‰‰‚ˆ‚‚‚‡‡‡‡ŠŠ‡‡Š¢‡‡Š¢¢¢Š¢¢“¢££££££¤¤£¤££££££££££££££££“¢““““Ž¢‡‡¢ŠŒŒŠ¢‡ŠŒŒ‡^Œ‚‡‰‚‚Œ‚ŒEˆ‚‡‰;‰‰‡‡=‡‡‚‚‚‚‚‚‚‚^^^^^^^^^^ˆEEˆEEEE^^ˆ3F 148 11 1 +›™˜˜‰‰¨’—››—–’–œ’œœžžœžž¬­ŸÄÄ®¤ÆÆÇÇȽ½½½¾¾¾¾¾½¾¾¾¾½½½½½½ÈÈÇÇÆÅŮ🭭žœ©›¨¨™™˜˜”‰‰‰‰‰‰‰‰‰‰^ŽŠ^ŠŠFˆˆˆF‰‰]]^K‹KK„„L_HHvv`RaSbcgcxfddyydyyyyeyyyy™™˜””˜“—››“•••–’œœ’žœž¬ŸŸŸ£¤¤ÈÈȾ¾¿ÁÁÁÁÁÁÁÁÁÁÀÀ¿¿¿¿¿¿¿¾¾¾¾½ÈÇǤ¤®ŸŸšš¬ž—–››‘™˜˜”‰‰‰‰‰‰]‰F‰‰‰]]ŠŠFˆˆˆ‰‰]]‰‰]Š^^K„L_PQQvNizhUkgf††{{{{{{{jj{{j{{e™˜™‘›—“‘›““’—“““—¹¶»¸·º¼¼¼¼ÍÍÐÐÐÐÐÐÐÐÐÐÐÐÏÏÂÂÂÎÂÎÂÂÂÊËÌÌ°°±±±¯¡¹¢¢’—•‘‘™˜”¦‰‰‰]]‰]‰F‰]]‰ˆˆF‰]]‰]Š^|^||}Vrr‡t‚‚€[ZZ\\\ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ”™“—“™‘Ž‘—’——————¹¶¶»»³ººµµ´²ÍÃÐÐÃÃÃÃÃÃÃÃÏÂÂÎÎÎÎÎÎÎÉÊËËÌÌ°°±± ¯¡šš¢¢—•‘™™˜˜”‰‰‰‰‰]Š]‰‰‰Fˆˆˆ]]‰‰^^|Š||M}VGrXtt‚€€[Ys\\\ƒ˜”‘——™›—•“’’—•–’œ›•œœž¬­š­££¤¤ÆÇÇÇÈÈȽÈÈÈÈÈÈÇÈÇÈÈÇÈÈÇÈÇÇÇÇÇƤŤ¯ŸŸ­š¬žœœ•›¨™˜˜‰ˆF‰‰]]]‰‰FˆFF‰]‰F‰‰ŠŠ]Š|K|„LVHHQ`izzhbUxgfffyyydydydydTdT˜™“›˜Ž—’’—“•‘‘œ—‘››››•–œ©œž­­Ÿ­ŸŸŸÄÄÄÄÄÄÄÄÄÄÄÄÄÄ®®Ä®®®ÅÅ®®ÄŸ­­­«žœžžœ–•›‘‘‘˜”‰”‰‰‰‰‰‰]‰‰Fˆˆˆ‰]]‰‰‰]]]]]Š^^KKu„____PHHQvv`v``wwRRRRR``w`w`wR™›•Ž™™›’—•“™˜››‘™‘¨‘¨››¨›©•œžž¬žž««¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬­­­­­­­­¬««œœ©©•©••›¨‘™˜™˜””‰‰‰ˆF‰‰‰‰‰‰‰‰‰F‰‰]‰‰Š]Š‰‰‰‰]]Š^^KMuu„„„„ŒPPPHH…QQQ…Q………QQQQQQQ…›“›’——“““›™›“›˜˜™˜™¨‘¨™¨¨¨¨•©•©©œ©©©©©©©©©©©©©©©©©ªªªªªª©©©©©•©••›››‘™™‘›™”‰‰FFFˆ]Š]‰]‰]‰‰]ŠŠ‰‰]‰‰Š]]]Š^^^KKuuMM„„„„Œ_„_L„„„„L„„„„„„„„›‘—Œ–—“›™˜‘Œ“™˜˜˜˜™™™˜‘›‘™¨™™§™™¨¨™§§§§§§§§§§§§¨¨¨¨¨¨¨¨¨¨¨§§§§™¨¨™™˜˜”™‘‹‘”˜‰ˆF‰FFŠ]‰]‰‰‰‰‰‰]‰‰‰‰‰]ŠŠ]]]ŠŠ]]Š^ŠŠ^^^^^K^^‹^‹‹^K^‹^K‹^K^KK››“œ—•›—‘‘“–™˜˜Ž™™™™˜‘››››‘˜¦¦˜§™§§§˜§§§§§§§§§§§§§˜§˜˜§˜§˜§˜§˜™™˜˜˜˜˜˜Ž‘‘]‰˜ŠŠ‰ˆF‰ˆFF‰F‰F‰‰‰]]]]‰‰‰‰‰]]]]‰ŠŠ]]ŠŠ]]]Š]ŠŠŠŠ^Š^^^^Š^^^^^^^^^^^››››››——“—•˜˜˜™‘™˜™››‘“›¨™™˜˜˜˜§˜§§§§¨¨¨§§§§§§§§§§§§§§§§§§™§˜˜˜˜˜™™‘‘‘”‰”‰FFFF‰F‰‰]]]Š]‰]]‰‰‰]‰]]Š]‰ŠŠ]]]]]ŠŠŠ^^^^^^^^^‹‹K‹K‹K^‹^^42 84 9 0 +45 92 138 1 +      + +       +   + +             +   +   + +  +  +   +    + +          +   + + + +       +      +   +  + + +         +       +   + +   + + +  + +           + +     +  +                 + +      +    + +            +   + +  + +   +     +        + +  +      +  + + + + + +   + +         +  + +   +     + + +       +    +   +  + +  +   +      + + +   + + +  + +  +   + + + + + + +    + + +    +  + + +  +  + +   + + + + + + +   +    + +    + + + + +             + + +    + + + +   + +   + +       2222211111119877776766%%%% +     + + +    +   3333333332221197777666-%%&#"    + + +    ;;======<==<<3:7:777666,&&&  + +     +      ===<<<<<<<<<<:::77776666,& +    +    8898998998887777776666,,%.#"! +       555655665666666666,,,,..#"""!!  +       ,,,,--,------,,++.*...##""!!       *****++++++*****#####""!!!         (())))))))))))!((!!!!        ((((('('(''('''''           ((((((((((((('('''           2122211111199877766666%        3333333332221197777666-%%"!       ;;======<==<<3:7:777666&$&!          ===<<<<<<<<<<:::7777666&&&$           8898998998887777776666,%"        555655665666666666,,,,..      ,,,,--,------,,++.*...##      +  *****++++++*****#####"""    +   (())))))))))))!((!!!! +   +   ((((('('(''(''''' + +  +  (((((((((((((('!(!  + + +    1222111111199877777666   3333333332221197777666-&.   ;;======<==<<3:7:777666$$&   ===<<<<<<<<<<:::7777666$&&  8898998998887777776666,.##   555655665666666666,,,,." ,,,,--,------,,++.*...##   *****++++++*****#####""   (())))))))))))!((!!!!     ((((('('(''('''''      ((((((((((('((!!!!     + 21221111111998777777666&.##"!   3333333332221197777666-%.."" +  ;;======<==<<3:7:777666&& +     ===<<<<<<<<<<:::7777666&& + + 8898998998887777776666,%..#"!    555655665666666666,,,,..#"!"   ,,,,--,------,,++.*...##""!! + +  *****++++++*****#####"""!  + +   (())))))))))))!((!!!!  +   ((((('('(''('''''       (((((((((((((('''' +    21222111111998777766666%.  3333333332221197777666-%%.    ;;======<==<<3:7:777666&&  +   ===<<<<<<<<<<:::7777666&&   8898998998887777776666,% +   + +555655665666666666,,,,..    ,,,,--,------,,++.*...#  *****++++++*****#####"""!   (())))))))))))!((!!!!   + +((((('('(''('''''     +  (((((((((((((('('!     + +2122211111199877767766#"!  3333333332221197777666-6%##    + +;;======<==<<3:7:777666&$&   ===<<<<<<<<<<:::7777666&&&  + + +  + 8898998998887777776666,&#"!   555655665666666666,,,,..#""!  + + + + +  ,,,,--,------,,++.*...#""!! + +  + *****++++++*****#####""(! + + (())))))))))))!((!!!! + + + +   ((((('('(''('''''   + + +  + +  (((((((((((((((!'!!  + + + + +  1222111111199877776566%%.## +  + +3333333332221197777666-%%.! +  +    ;;======<==<<3:7:777666&$  +    ===<<<<<<<<<<:::7777666&& +  8898998998887777776666,...  + + + + 555655665666666666,,,,..#" + +  + +  ,,,,--,------,,++.*...##  +  *****++++++*****#####"""! +  +  +   + +(())))))))))))!((!!!!  +  +  + + ((((('('(''(''''' + +   +  ((((((((((((((('''    +  212211111119987777777666%  + + + 3333333332221197777666-%#"   + +;;======<==<<3:7:777666&$ +    ===<<<<<<<<<<:::7777666&&&& + +   +8898998998887777776666,%   + 555655665666666666,,,,.#!"     + ,,,,--,------,,++.*...#!!!     *****++++++*****#####"""! + +    (())))))))))))!((!!!!! +     ((((('('(''('''''     (((((((((((((('''!!       21222111111998777677666%%#"  +     3333333332221197777666-6&&    ;;======<==<<3:7:777666&&&     ===<<<<<<<<<<:::7777666&&&!   8898998998887777776666,%.#   + 555655665666666666,,,,...    +    ,,,,--,------,,++.*...#"#!     +*****++++++*****#####""!!      (())))))))))))!((!!!!    ((((('('(''('''''   + + + + ((((((((((((('!('      + +   2122211111199877766566,%.#"""     + +  3333333332221197777666-%+.""" +    +  ;;======<==<<3:7:777666&&&#  + + + +  + + ===<<<<<<<<<<:::7777666&$ + + + + + +8898998998887777776666,+*###!!   + 555655665666666666,,,,.##""!!  + +   ,,,,--,------,,++.*...#"!(!!       *****++++++*****#####""!      (())))))))))))!((!!!!    ((((('('(''('''''      (((((((((((((('('         + + +   + +     +     +  +        +     + +       + + +   + +   +             +  +  +         + +   + +         + +               + +  +           + +                 + + +           +  +              + +             + + + +        48 100 110 1 +ÑÑÑÔlÑÒÕÇÇ×kÉÒɘ˜Ê˜Ë¹¹mºII™oJpKqqvrLussss|t|s|t|ssssu›vqKw7p/66%   +ÑÊÊÑÉÖÈÈÕÕÉÑÉÉИ4˜G¹mmzyy¾ xNžMvuuÀ|¡¡¡¡¡¡¡{{¡¡{¡¡t¡ttt¡tt¡|t||uu9vMMw=x(6&'    ÑÔÊÔÉÈÈÈÈÒÉÉÉÉ£ÍÍÏ©V_°ÄË’cŒ‘h“eÅ••””·fffff··fffff³¯¯‚¯Y‚‚‚‚¯Y‰ª„€\^ƒT1A+2!*"    +ÉÊÉk×ÒÈÕÈÒÈÒkÓUÊ£ÍCΦ°†b’´Œ²µ“¶e‰³³a³a³³a³³³³³¯‚YYYªªª„ªªªª„„€€BXX?F1A2>** + + +×ÈÈÕÕ#ÕÈÈÈÈÈÈÉllÓÊ͘¢¹m¿nI šŸwKžvvœuusssLs›sLs›sLLsLLsu›œvv8žKpJ/6&H5550U    +ÕÕÇÕÇÕÕÕÈÈÉÒkÉÑÑ$lÊÊ4ËG¹mºHnI™™™o™ooošoJšššoošošošššJšJppppp½ppJšJšoo6™&.nH5G--  + + ÈÕÕÇÕÈÈÈÈÒÈÈÒÉkkÒllÊlʘ˜GG¹mmºHnnn»I»II»IIIIII»I»II»I»™I™™™™™™™™».nnnHHº%5˜44$$## +  + + +È#ÕÕÕ#×ÈÒÈÈÒkÒÈÒkÉÉÉÉ$lÊ4˜˜˜GG¹¹5mm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmmºmmmmm5mm5m55¹G-˜4l$$kk# +  + + + È×ÕÈÈÕÈÈÈÈÈÈ#ÈÈÈÈÈkÒkkkÉ$l$lllllÊlÊllÊÊÊlÊÊlÊÊ4444˜44˜˜˜4Ê4Ê4Ê4ÊÊll$kkk## + +   ÈÈÒÈÕÈ#×#×È#Õ###ÈÈ#ÈÈkÒkkkkÉÉ$É$É$$lll$Éllllllllllllllllll$lllll$$$lll$Ékkk##  + + +  + + +ÈÒÈÈ##Õ#ÈÈÈÕÈÕÈÕ##ÈÈÈkkkÉkÉ$ÉÉlllllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllll$k$kkk  + + + + + + + ÈÈÈ#×ÈÕÈÈ##ÈÈÈkÉÉlʘG¹mºnI™oJpKKqrv›Lss|s|t|t|tttttts|uLvrMKŸo6I.H%5G- + + +ÈÈ#×###È#ÕÈÈÈkkkÉÆ4Í¢m;¿PO xŸwMvuu||¡¡¡¡¡¡¡{¡¡{¡¡t¡¡t|t¡t|tttt||uuœvMwNxOyPzH-   +  + + + + Õ#ÕÈ#×ÈÈÕ#ÈÈÈkkU)£Ï©V_Ä‹’cŒ‘¸““jj•”””fffff·f·fff·³¯‚‰‚Y¯Y¯Y‚Yªª`€\X[…AW¨!*@©,0   +   + ÕÈ##ÈÈÕ##È#ÈÈkkÆƱ±CV_†b’®F‘µh¶e‰¯³aa³³³a³³³³³³¯‚‚ªYªª~ªªªªª„„¬€BXÁ?®AW¨Z}"V +  + +ÈÈÈÈÒÈÈÈÈÈÈÈÈkÓll£˜¢¢mzny¾ xŸwqvvœuussssLsLsuLssLLLsLuL›rv8žKŸo6I.H55%-  + + + +ÈÈklÉÒkkÈÈÈ#ÈÉ$ÉlÊÊ4ËG¹¹mmHn™™o6oooošššJššoošooošššJšpšpJp½ppppššJoo™InHmm5G-$  +  + + + + #ÈÑÉÒÈÈÇÈÈkkÉl$lll444˜˜GG¹ºHHnnnII»II»IIII»III»II»I»I™™™™™™™™In.nnHHmm¹GG--G-$$ + +  + ÇÕÈkÈkkkÈkkÉkÉÉkÉÉllllÊ44˜-GG¹¹mmÌ5mm5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmmmÌ5¹GGG˜-˜44$  +   kkÈ#ÈkÉÉkÈkkkÈkÈk$lÉkkkÉlllll4Ê4l4lÊlÊ4Êl4ÊÊ4Ê4Ê444444˜44˜4Ê4Ê4ÊÊlll$$É$Ék$$# + +  ÈÈkÒÈÈk#ÈkÒÈ#ÈÈ#ÈÉkkkkkÉkkkkÉ$É$lÉlll$Éllllll$l$lllllllllllllll$É$$É$kkkkkkk + Ç##ÈÈÉkÈ#Õ#È##kkkkkkÈkÉkkÉkÉ$$llllllllllÊl4Ê4Ê4ÊÊlllllllllllllllllÉl$ÉÉÉ$$kk$ +#  +Ç#kÉkÈÈ#Õ#ÈÈÈklÊ4444G5mHnI6oppKqrv›Lss|s|s|t||t|ttttts|urv8ž7ŸJo6.Hm¹-G- ÇÇÇ#ÈÈÈÈ###ÈÈkkkkllll4Í¢¹zPy xNwMMMuu|||¡¡¡¡¡¡{{¡{t¡tt¡t|t¡tt||tt||uuvMMwNNxOPzQ5¢-$  Ç kkÈ#Ç#kkÈk$ÆÆ) C,VÄÄbgcŒ‘–¸“eÅ••”·ffffff··ffff··³¯‚¯‰Y‚‚¯Y‚ªª„¬€­Xƒƒ…1A2S}@,<±< ) Ç# ÈÈÕ#ÈkÈ#ÈÈkÓUÆ)£©©°†Zb]…´²^Ž“¶e‰³³a³³³a³³³³³³‚‚YªYªªª~ªªªª„„€\ˆƒ[T®§2¤}V© £ k#ÈÈÈÈ###È#È$$$lƘQmmHI™Oo ŸNž8vvvœuusssssLLssssLLLsLu›vvvqKKJJo6I.%G-4l$$$ Ç##ÈÈÈÈ###Èkkkkkk$4-GGmºHºn.I™™ooooooššJššššoošoooššpšJšJpp½pppJšJšoo™InnHH%5G˜Ê$$kk#ÇÇÇ#ÕÈÈ#ÈÈÈkkkÈÈkkl4Ê4-GG5¹5mHnnnnnIII»I»IIII»III»III»II™™™™™™™™™nnnnnHHm5¹5G--4$k###ÇÇ###ÈÈ##ÈkÈkÈ#È#È$ÊlÊ4˜4˜˜GG¹G¹5Ìm5mmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmmºmºmmmm5m5m55¹¹GG˜-444$$kkÈÇÇkÉÕ#ÈÈÈÈÈ####Èk$$$lll$l$llÊÊÊ4ÊllÊl4l4lÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4Ê4Ê4ll$É$$$$$kÇÇÇÇ##Çkk##ÈÈ###È#Ç#È$$$É$$llÉkkkÉÉÉ$É$$ll$ll$$llllllll$llllllllllllllll$l$$lÉ$k$Ék$$$ÇÇ##ÇÈ##ÒkkÈÈÈ#Èk$ÉÉ$É$$Ékkk$k$É$lllllllllÊÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$$kÇ##ÕÕ#kÈÈÈkÈÈÈ$Êl4-G¹5¹5mnI™6š7Kqrr›uss|s||tt|tttt|st|suœrv8wpJ/6I.H%54$$$ #ÇÇÇ##ÈÈÈÈ###È#Èll4GG¹5QQQzPyORNwM9uu|¡|¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuuvMwNxx &P;HGl$$k$ ##ÇÇÒkÈÈ####Ç#$l)<©©V"_°i×gcŒ‘–“eÅ••””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yªª„€\Xƒ«…AW¤@@VC< ) #ÈÈÈ##ÈÈÈkÈ$££<¢0,¦°††b]´Œ‘µŽ“e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[TD§2Z@¦C<< Æ)$##ÈÈÈ#ÈÈÈ#k$$Ékl44˜˜¢GmHHmHy  JNwqMvœuusssss›sLsssLsLLLLL›œvvqqKpo/6IH5G-4l$###È###È##ÉÉÉÉ$kkl444˜GG¹G¹¹mHn»I™™™oooošoJšJšoošoošoššJšJšpp½ppppJšJšo66™InHHmG44ll$$$k# ÈÈÈÈÈ#k$k$$$kÈkll4˜-G-G-GG¹5mºHnnn»™I»II»I»I»I»IIIII»II™™™™™™™™IInnnnHH%m55G44l$$$$ ## #È###kÉÉ$llÉkÈ#kll44Ê4˜˜˜˜4˜-GGG¹55m5m¹¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmmmmm¹5¹5¹GG-˜4l$É$$$$## Õ#Õ#ÈÉ$$Él$l$k#È$$l$llll$llllÊll4ÊlÊl4l4l4lÊ4l4Êl44Ê44˜˜44444Ê4Ê4ÊlÊllllkkkkkk###  #È#È#$Él$lÉ$lÉÈk$É$É$$$$ÉkÉ$É$ÉÉl$llll$lllllllllllllllllllllllll$$l$lÉ$$kkÈÈkk## ÈÈÉkÈÈÉl$ÉÉÉl$$Ékkl$$$lÉÉ$É$É$É$llllllllÊÊ4Ê4Ê4lÊllÊllllllllllllllll$$É$Ékkk$##### + ##ÉÉ$kÈÉÉÉ$llÊ444-¹mHnIIoooJpKqrv›Lss|s||tt|t|ttttu›vrž7Ÿo6I..H%5-#  kÉÉ$ÉÈÈk$lll$l4444*¦,C )  #lÉll$ÉkÇÉll44<¢Ï0CV¦†Z‹]®´²^d`¶¶‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ……®§WZ}";©<£UU$ +# #É$lÉl$lÈ#È$l4444-GG¢Q%n.I¾ xŸwwžrvœuussssLsLsLs›sLsLLLsu›œvMžKŸJJo6.HHm5-$$ #ÉÑÉÉ$Ñ$ÉÈÈklÉlÊ4˜GG˜˜GmmHHn.I™6ooooošoššJššoošoošoššššJppppppppJšJo¼™™I»nHH5¹Gl$$$### ll$$É$l$É$klll$$l4˜4Ê4-¹5¹5mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™™»nnnnºm%m5G˜-4l$$$ # ###lllÑ$lÉl$ÉÈkllÉll$4l$l˜Ë-GGGG¹¹mmm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmm55¹5¹GGG-˜44$$kkk # +##ÑllÉ$Ñ$$ÉkkÈk$l4lll$$Ék$$llÊ4Ê4Ê4ÊlÊll4l4l4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4lÊlÊl$$l$kÈk## + $É$ÉÉlÑll$k#È$lll$$ll$kkÉ$$$l$É$$l$lll$$lllll$l$llllllll$llllll$lÉ$l$lÉ$É$k$k  +###ÉÉÉÉlllllllk#k$ll$ÉlÉ$kkÉl$Ñ$lllllllllllÊÊ4Ê4Ê4ÊÊllÊllllllllllllllllll$É$$Ékkk  ÉllllllllÉllÉkl44˜G5mmmHHIoJp½Kqrv›œLss|t|t||t|ttts|uuœrvKw7Jo&nH55-l#Ç # lllllÉllÉ$ll$kl44˜¢5Q;¿yyOxNwMM99u||¡¡¡¡¡¡¡{¡¡{¡t¡tt¡t¡t¡tttt|tu9vMwŸx OPzmm0-4#  +ÉlllÉl$ÉÉ$ll$lÓ£±©V_°†3g’´‘–h“¶Åj•””·fffff·f·fff··³¯‚‰‚Y¯Y¯‚‰Yª„€€­XX[…AW2¤E*VQ± # + +ÉlÉÉlll$lÊl4ʣƣV¦}†¨‹]®´Œµd¸“¶‰¯³³a³³³a³³³³³‡¯‚YªYªªª~ªªªª„Š€€Bƒ[¥AW¨SS*V00< +ll$lllllÊlll$4l$l˜G5QHnIIOOšxpwqMvvuussssLsLsussLLLLsLœLvvžKwJoOIIH%5G--## + +llÊlÊlkÉl$l$ÑllÉk$4˜G¹5mHHnnI»™6™ooošošJšššoošooooššJšJppJp½pppJšššo6™I»HHm5G-˜44$  +##lÊlÉlÉkklÉÉ$$Êl$kkl˜˜GG¹¹55¹mHºHnnn™III»IIIIIIII»II»III™™™™™™™™™.nnnnºmm55G-˜4$È  ÉlÉ$É$kÈÉlÉ$ll$llÉ$l4˜˜-˜˜˜˜˜GG¹5m¹5m¹5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmm5m¹5¹GG˜G-˜44$k ##ÉÉlÊl$ÉkÉ$ll$É$l$kkl4llÉ$É$$llÊ4ÊÊl4ÊÊ4lÊ4ÊÊÊÊ4Ê44Ê444˜44˜44Ê4ÊÊÊlllll$$$l$kk##   #ÒklÊÊll$ÈÉÉÉkk$$Ékk$l$kkkÉ$$$$Élllll$lll$l$l$llllllllllllllll$$l$$lÉ$$kkk## + ÈÉlÊl$É$ÈÈk$kkÉ$ÉkkkÈkÈkkkkÉ$lllllllllllÊl4Ê4Ê4ÊllllllllllllllllllÑlÉ$$É$kk$ÈÈÈ##   +# Éll$Ñ$ÉÉÈÇÈ$ll4˜GGG5¹5mmnI™Jppqq8rv›uss|st|t|tttttttsœ9v8žKŸJo66.m5G-4$ $ +##lllÑkÉ$lkÇÈÉl4˜-G¢mmQm;¿P¾RxwMv9uu||¡¡¡¡{¡¡{¡{¡¡¡¡¡¡t|t¡tt||tt||uuvvMwNx::Oz;50-$k +#  lÊll$lllÉ#Èkl4Í¢Q©VV"_i‹’F‘–h“ej••”””fffff·f·ffff³¯‚¯‰Y‚‚¯Y‚ªY„¬€\XÁ[«A¨S@@VC )U lllÉÉllÉÉÈÈkU<<0¢C©V¦ib®´²‘Ž`¶e‰³a³³³³³³³³³³³‚‚YªYªªª~ªªªª„„€€­Xƒ[T]WZS@¦"<))$#  ÉlÉÉ$lÉ$kÉk##l˜˜Æ4£<¹mnny:oxpžMvvœœusssssLLssssLLLsLuLœvvqžKpo6InHm5˜44 ## Ñ$ÉÉ$ÉÉk$lÉ#Èl44Ñ$ll4˜5m%ºnH»I6¼ooooošoJššJšoošoooššpšJšJpp½ppppššoo™6IInHm5GG4l$ ### llllÑ$É$llk#È$lkk$Éll-GG¹5¹¹5ºHnnn»II»I»II»IIIII»III»II™™™™™™™I™nnnnnHHm5¹G-G-l$##  +  ÑllÉ$ÑllÑlkÈÉÈÈÈÉk$l44˜˜-G˜˜GG¹mm5mm5m¹¹¹¹¹¹¹¹¹¹¹¹¹mmmºmºmmmmmmm5555¹G˜-444$$$$#  +kÑlÉÉlÉl$lÑkÈkÈ#ÈÉÉll$ÊlllllllÊ4llÊÊÊÊÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4ÊÊÊllll$$$$Ékk$# ÒÈkÉ$lÉlÊlkkkÈÈÈkÉ$$kÉ$$Ñ$ÉkÉÉ$lllll$$llllllll$lllllllllllllll$$l$l$ÉkÉ$$kk$##  È##kÊlÉlÊ4É#ÈkkÈkÉ$$lÉ$ll$$$É$$llllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$##  #ÇÒÉlllllÉÈÈk$Ñ4G¹mHHºI™ošpKKq8v›uss|s|s||tt|tttt|st|suvrMqw7JoI...%54k    Õ#ÈkÒkllk##Èkkk$l4¢5;z¿zO xNwMMvuuÀ||¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuvMžwNx:¾y&y;5$  ##kÈÕÈÈllk##k$Æ£<ÏC@°†b’cŒ‘–h“eÅj•””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yª„¬€\XX[…W22>*@V )$ ###ÑÉÈÇÇÕlkÈÈÈkÆ£<¢CC©_†Z‹]D´ŒµŽ“¶e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[T]WWR!*@0) # llkkÈÈÈ##ÕÈÉ4Ê4˜-˜-mHnI¾O6šŸ7ž8vvvœusssss›sLsssLsLLLLLu›œvvqK7poo™&.H%5kk ##  lÑllkkÈÕ#Ç#kÉÉl4˜˜˜4˜¹mmHºHnI™oo¼™ooošoJšJšoošoošoššJšJšpp½pppppšJšo6™Inn%H555G--$  +ÑlÊÉkÈÈ#Ç#kll$Él444˜44GG¹m5mmnnHnn»II»II»I»I»I»IIIII»II™™™™™™™™™.nnnHºHmm5G-G-## +# ÉlkÈÈÈkkÈÈlll$kklll4lll˜-GËGGGGG¹55Ìmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmm5mmÌ5¹¹G¹G˜4444$# # lÉÈÇÈkkkÈ$lÉ$kÈk$lllÉkllÊllllllÊllÊÊ4ÊÊlÊ4l4Êl44Ê44˜˜44444Ê4Ê4Ê4444l$$kk$$$  ÉÈÈÈ##kÈÈ#kÉ$ÉÉÈ#k$l$l$É$$lÉ$kkÉÉlÉlllÉ$llllllllllllllllllllllll$É$l$l$$$$kk$$ # È#kÒÈÈkÈÕÕkkÉl$kkÉ$lllkÉlÉ$ÉÉ$l$llllllllÊ4Ê4Ê4lÊllÊlllllllllllllllllll$l$$l$$ ## ÇÈÈÈ#kÉÉkÈkklʘ˜4$˜5mHHHHIo6špKKrv›uLs|s||tt|t|ttttuu›vrMKwJ/o6.H%%-k #Õ###Ò$lÉÉlÉkl4˜˜4Í5mz¿P¿O x=wMv9u||¡¡¡¡¡¡¡{{¡¡¡¡¡tt¡|tt¡t|tt|t|uuvMMNŸ::OPz%-## #È#ÕÈÉllll$lkkl£<ÏC©V°!×gcŒ‘–“eÅ••””·fffff··fffff³¯¯¯¯Y‚Y¯‚YYª„„€\Xƒ…AW>!!@" $#  Õ#kllÉÉ$lÉl$ÈUÍ<¢Q¦V°†¨ÃbÂc´‘µ““e‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ?…1A2Z¤*@< # ##ÉÊÊlÉÈkÉ$lÉÈ$4-GGQ5mHzHny¾ šNKžvvœœussssLsLsLs›sLsLLLsu›œvMqwKxJo66I%%5 ####Õll$É$È#ÉlllkkÑl44˜GGG˜G5mmnII™o™6oošoššJššoošoošoššššJpppppppppšJoo™IIInHH%55-  ### ÈÈÉÉllÉÈÉll$kÈÉl4˜44lÊ4˜G¹mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™IInnnnHmm555G--- $ +# ÒÈkÉÉll$ÉllkÕ###klllkÉ$ll4˜GGGG¹5m5¹mm¹¹5¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmmmm55¹GG˜˜˜4l-#lkÒk$lÑ$ÉÉkÇ##Õ#ÈÉkÈkkkÉ$l$llÊl4Ê4Êll4lÊl4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4ÊÊlll$$Ék$$$ # #ÑlkÒllÉÉ$kÈÇÕ##ÈÈÈ##ÒÈÉÉÉ$Ék$É$É$lll$$lllll$l$llllllll$lllllll$$l$ll$Ékkkkkkk$ + +# llÈkÉllÉllÈ###ÈÈ###ÈÈkÉ$$$ÉlÉ$lllllllllÊÊ4Ê4Ê4ÊÊllÊlllllllllllllllllll$$$kkÈ#$ + +# Ñ#ÇÕkkÉlÊÊkÈÈkÉÉ$lÊ4˜G5H»IooJKKq8rœ›Lss|t|t||t|t|ttts|u›vrMKwJ/6IH5G˜---  +  kÈÇÈÈ#ÉlllÉ#k$$Ê4<¢¢mz¿yO xNžMv9u||¡¡¡¡¡¡¡{¡¡{¡t¡tttt¡tt|ttt|t|uuuvMwwNx:&z;5¢- # ÉlÉÉkÈkllkÉ$ÉkkÆ ÏC,_†bg’cŒ–¸“eÅ••””ffffff·f·fff··³¯‚‰‚Y¯Y‚‚‰Yª„„€\^ƒT…AW>}",0C   + +  ll$ÉlÉÉllÉlllUUÆ£?<<784/75917.3.1.00.''##%$  ôóòòòòòòòòòòòòõòõòòòòòîïïîîîîïîïîîîîîðððñí +!! **#'"'.-(1.3--3355555585<7<8=8<7;:zznnnnnnnnnnooom|€yVZRrqqkDxBAAE=<<77485555651..0..%$$öõõõõõõõõõõõõõõõõõõòòòòòïòïïïïïïïïïïîîððððñññ! ))**###.'.,1--.5.11359555842477872::fifffiiiiiiidwggvgNNOOSPCQQBB…E>^=‰<771777111,,,1-((( " " ! + + +íííñíììëðëìëìëìëìììììììééééééééìéìéééèèèèèèííí +ê + + !   " --,1315155155585877;::7¡:::bbMbbbbbbbbbMaLL``G~~K__Fƒ@E^^?7‰<<<74/4///1/,Ù,Ù,(((  ßààá áááááááááááááàáàáàáàáááááááááááááááàáààààßÞß  ---.---1/,1155188758<877;::2:::22ss````tttt``ssG~~~QKK__F@ƒ@@E^???<‰7<7777/775//7///&,,,,,((Ü(Ü ÜÜÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßÞÞßÞßÞßÞÞÞÞÝÝ (,---11351&715115785547474:24:::;22KKK~K~~~KK~KKKKK_____@ƒ@@@EE^^^??‡<;4‰2<8<47/44//&&,,/&,,,,(ÜÜÜÜÜÝÝÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÝÞÝÝÝÝÝÝÜÜÜÜÜÜ(( ((,,Ù,1,111111/4/5188555=844;:277;2222;}}_}_}FF}}}}}ƒƒƒ@…@……EEˆ^^^?‚??=‚<7;4;4<774744444/4//&&/&,,,1Ù,ÙÙÙÚÚÚÛÚÚÚÚÛÚÛÚÛÚÛÚÛÛÛÛÚÛÚÛÛÛÛÜÜÜÜÜÜÜÜÛÜÜÛÛÛÛÚÚÚ,((,,,,,,/,/,11111117271878799824;::;‰4;;;247ˆEˆEˆEˆEE^^^^^^^^^‚‚‚^????=?=?==9=7477877774/4/4///4//////,1,/&&&&&Ù&&ÙÙ&ÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØ&ØØÙ,Ù/Ù/,/,/1/1/171877877447787555574247444;;;4<8^^^‚‚^‚‚^^^^^‚^‚‚‚‚=‚==‚?‚======<=8<78774444774/444/////,11/&&&&&,Ù&&ÙÙ&ÙÙ&ØØØØÙØÙØÙØÙØÙØÙØÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØØØ&ÙØØ&&&,//,,//1///17177117157777759988724<74;;;27959^^^^^^^^^^^^^^^^^‚‚‚=‚‡‚==‚??======9877474477/4///////11111/&&&&/Ù&&ÙÙ&ÙÙ&ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙ&Ù&Ù&Ù&&,,//////71717177785577895959877774;;;2;<599‰7;‰7=‚=======9=8777;;7477<9===?9999<4;7887744778877775963657457177777778775777777/71745577<7‰777444565777477844;<88888<47<88<8888885=8=5=889888728999998<;;;;;;4887898dcgdccgcdccccvvuNbMaLG~KK_FB@@@>>???87;7<77447474777777966351-0-1,(((  ââêãääåååæååååäåååååäääääããâá ß ""(,--31175559=9=888=9888877<9999887;;22;48887<88dwdwwddwcwggggvvNNNOeSPQBFF@@@>>>>>6?=7477;;7777747799556355330-(((  âêäåææççççççççççæææææææææååäããâá *(---13555599888888888888<77988<87;2;74;78987778znnnnnnnlnloXXm|€VpHUUPD††BABA>6?>6974;;;7777777796658565.333.100''%$öõõõõõõõõõõõõòïòïïïïïïîîðñ!!)*#""1.-3-35698888<<8=8<8999886988<4::;4;;88859748nnlllolllloohmm€iVTIUUDDDBAAAA>>>9?=<7;247<77777966687763333111.'''%*$öòõòòòòòõòòòòïïïïïïïïïïîðñ !)))*'-(1.3.5555478888998899999==88842:2;44478898877uuvcvccucvcvuvjuNMMOL`GCQBB@@E>>>??988=877<777;4779669842133.311Ù--'   áââãããäããããããããããêããããããâãâââà  "' --,,115555847<899=8889998987877;::22;4788995887LaLLaaaaaaLaLLtG`GC~QQK_@ƒ@E‚?????6?==88‰7<<4;7<88=69997475553313---((((Ü ÞÞßßßßßßßßÞßÞßßàßßßßßàààßßÞÞ ---11/15555958;7<88898=898997;7;:::2;7;7778898888~~~sssGsssssK~KKKKK___F@F@@‚?^=<=6?9=9=74;74;486?9889969787155333131,,,(((ÜÝÝÝÝÝÝÝÞÝÞÝÞÞÝÞÝÝÝÞÞÞÞÞÞÞÞÝÜÜ ( ---1111151555558<7777888=969998842::::;7<77<<4488998___K__K_______F_F}ƒ@@@@@EEE^??<=]>]BBBB>A>>E?BCC?>?A8883&&.+++ + ÜÜÜÞßààààáááááàááááààààààßßÞ /(6/6166:::7;:398338225:{ee{e{ee†ey†yyffgggUhiINQQG__LMKC]>‰F@‰>B‰AB]BB]>@>>]?C?B>?9899&&.++""(  àááãäääääääääããâââââââááááàß((////6666676:::595988355n~nnn~ppZmYookJO‡rllVGM||E‰‰>CCEB>AABBB>>‰FA>CB>>?>A<>995:---0%$!ììíííëëíëííëééèæææææææååçç ###)((//66666776::::3335:652~~~~~~p~~~~ppmmmWooqJtNllGG|D]‰>]DDCB]>>@BCBBE>A@B]>BBB=8<<<9:-:-00,%!  êìééééééééééèèèæææææææææåçç #')(*+/*466776:;66:88967:93dTdydTdTdTTdfTxxgbbSaR`QHPLLK^^E]‰EDEBBCBF@]BBCCC>>AAAB?===2239555+1"" Û ÜÝÞßßàßßßßßßÞÞÞßßßßÞßÞÞÞÝÜ ((((".15667::7;;;32896:539wRRRRaaaaaaaRwRw`vvvQH_L„„MK^^EE]]BDEB>BE>‰AAABCCCE>A2A>@@=2=88<335..5++""ÖÖ××ÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÚÛÛÛÛÛÛÚÙÙ×((///1.&&&316:6:6;6<223:539.5QQ…Qvvvvvvvvv…HHHHPP_„„uKKK^ŠEŠ]]>EEE>F>]A>AAF>BCCB>@ˆ@ˆ2@22A><<3333.51+++""""ÖÖ×××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙØ×ÖÕ"Ö//"/611.&&&35:6;::9285::591::„__P___P____L_LŒ„L„„MuK^K^ŠŠE]‰>]]]ECEB‰>B>]C>‰>CB>B]=@=@¥¥@A‰>]>>EDB]?E]>CCBB>B>]B>AAA@2=AA8=A<><<993333&&&&&ÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÒÓÒÒ..+515155335533595<228993357447^^^^^^^^^^^^^^ŠŠ^^^]Š]]]]]>Š]‰]EC‰‰BBBBBEBBCECEA>BB>@@A@@A>>A==8A<<<88333&3&&&&Ñ&ÑÑÑÒÒÒÒÒÒÒÒÑÒÒÒÒÒÑÒÑÑÒÑÒÑÑ&&&&&3+55555.3353338232=355893:444:^^^^^^^^^^^^^^^^^Š^Š]ŠŠ]]]]]>]C^C]AF>]BBCCCBCCBFA]>@@@¥@@>AA=AAAA++++##r}~~~|~|~|~YYY[SYX\YUXXYUYUUUYUUTTUUUTOSQCRRRRUUUTUUPUPOSRHTUPPUPOLOH:B::99+++#rrrzzzzzzzzYYY[R[TYYYXUUYUUYTUUT[KSTTOSRRRRRKOPVPONKUPPUPSRNOOPPPLN3A770;,,)%%  +klmnoppooooonYX\T[SZYYUYYYYUXUUUUTCRSSTSRKRRKKTPVUPUTRTOPVPNSKSSUPUNKAAAABBB,,)))ghiiiiiiiii\XX\ZRYXYXXUUUXXUUYZC^RRRSRKRCRRTPVVPUPUNNUPPOUOSCRNONRKNNNHHB0700,;)))%deefffffffff\\XYZ[YXYXXU\UUUYTSQQR[RRRRRRRRSUXVPUUOTKSNUOUPUNKRSSCRNKKNNNAAH70B,0,))bbbcbccccccXYZYZRZYYU\UYUUYZSR^RQRRRRRQQRNUVPVTSOTTTSSSTUPPOSRKCRCRKSANAKAAAA77$77$__```````````X\YYXZ[SYYYYUXXTSRRRRRRRRRR^RTYUPXUTTOUNTUNTUPUTUSKSSSRRKSKNNNAKAAAK(A$$77$$___````````\YYXWY[ZYUXYUXYT^RRRRR[RSSSSTUTTXPUTUXUUOYOTTTOUTSSSSRRSSKKSNNKNNHA(A7(7$$_``_```aa```YY\XX\SZYXU\UYUTQ^QRRRSS[SSTVUZSOXUVUPVXUUPURKYTNQRRKKNOONHHB0051))-  lnoppppqqqqYYX\U\STYYYUYYTYSRRRRSSZK[TVUXOSSUVXUXUOTUUTRRTNR[KRRSNOH7H000,))%%  + +nqqsttttttttY\YYYYZZSYYXUXYYTZS[[SZSRSYUUVVTSTUTSTS[TUYTSSSRRRRSTTNNNN:::F>9++++#r}~~~|~|~~~X\Y\YYYS^ZYXXYUYUR[RSZSRZTTTXXXUYSSRRSSSTUOUZRRRSRRTOTNSN:H:FF>99+++#r{{zzzzzzzz\YY\Y\YY[ZTYXUYYSRRSSRRZUXTYUUUXUSQRSTUUTUTUSRRRQRSTTSKNAKABB0,:1)%%  +klmnpopooooon]YYYYYYYZSYYYT]K^Q^[SSZUUXUZZYUUTTTSUXUUYTYSRCRRRSSSRRSTSNNNA77B;)51))%eghiiiiiiiiiZZZYZYYYZRYYTZR^RRRKSZUXUXUTKYUYUYTZUUYTTTZC^QRSTTZSSSSNNSANAA770B,,)))deefffffffffTYYZYYT]Z[SYYSQRRRR[SZTYUUYTSTUUUYTTZTTTZSQRRR[TTSNZNSSSSSKNNNAH77700,)bbcbcccccc]Y]YYYZTT[RZRQQ^Q^RRS[STXUYYYRTYUYYTRRSTTRRS[RSTS[STZSRSKKSTNKNNHAA((7$00```````````Y]TYYZYYZZRR^QQQQQ[[S[RZTYUUYZ[TTYUTR^SRRQS[RSTSRRS[KR[SRRKSKANONAAA7(77$$$$____````````ZYY]YZYZYZR^QQQ^QSZSR[SR[YUXYO[RZUUYSRQ^RR^RSZZSRSS[RRSSSSSKKSNNAAAHH77($$$$````aaa```ZYYZYTYYT[QQQQ^Q[YUZRRRRRZTTYYSRSTTY[QQRQQR[SNZSZZTSSSNNNNAHBB;,,)-% + moppppqqqqQ[ZZYZYY[QQ^Q^Q[YUYT[RRRR[[TZTTZZZTZRQR^RKZTZSSSSSSS[SSNNNHII;,))%%  pprstttttttt^R[TYZT[QQ^Q^QRZYYYYZ[RS[QRZTTYTTTTSC^RR[ZTSS[SSS[RSRSSSKN:MFF>9++#rr}|~~~|~|~~Q^R[ZY[QQQQ^CR[SSYYTTS[[R^RRZYTZZZ[QQQ^RSSZSRSRRRRRRRSNSA:::::>9+++++#r}{zzzzzzzz^RRRZ[^Q^QQQ[[S[[T]YYYS^RRQ^SZZZSSQQ^QQ[SSRR[SSRR[SRSSSNTLL770,)))%%  npopoooooo[[ZR[RR[R^R[ZYYZR[ZZYYZ[^^RRRRS[[QQQQQRSS^RRR[RRSRR[SSKSTONAA7BB,)))%%hiiiiiiihiZYYZ[^^RRRZXXYYYZRSYYZTSR^RS^Q^RQQ^Q^RS[RRRRRRR^RRRSRRSTNNKKAOBB700,))))%eefffffffgf[]ZS[R[R^[XW\X\YZ[ZZZZZZ[RSZRQQQQQQ^RSS[RRR[R^RRRRRRRSSSKKKKNHAAA7000,)bcbcccccccRSZ[[ZZR[Y\YZYYYZRRSYYTTY[ZZSQQ^Q^QRSZ[RR[RR^RRRRRRRRSSRRRKKKKKKAAH77($0$_``````````[[^RZS[[ZX\Y[[TZRRZZZYYYYYTZ[Q^QQQRSS[RR[RR^RRRRR^RRSSRRCRRKKCK3KAAHA77(($$$__`````_``R[R[[[[[YXX\ZSYZRZ]TSTYYYYZSRRRR^RS[RRRR[RRRRRRRRRRSS[RRRRRRRR3KKAHBHB7$($_`````aaaa`^[ZZR[S[Y\YYY\YRSZUYZZYTTZS^R[R[SZZ[R^RRRR^R^R[RRRSS[RR3KAA(770,)1.-*'  kmopppppqqqRZS[ZYY[[YYYY\ZR[YYYYSZYYZQ^RRRSTYTS[S[R^RQRRRRRRSZ[RCKKKAAA$0,).-*'& moprsttttttttR[[[YW\Z[ZYYXYZQ[YYZYZRZS^S[S[[ZZZSSSSS[RRRRR^RR[SRRRRSSNAN::::%++#r}|~~~|~|~~[^RZX\YZ[[Z\XYYS[T\YYS^R^RSR[STYTZ[SZSZSS[S[RRRSSRRRRRKKKAA::FGE++++#r}{zzzzzzzzR[RZYY\ZR[T\YYYYZSYYY[QQ^^R[SZYYZTZSSS[[RSSZSSZTSR^CRRRKKKA77;>11..% & +kkmnopoooooooZY\YYYYYS[[ZYYYYYZTYT[^RQRRRZSZZSSSZS[RSR[TTZUTS[RRRRRRCCKKA7BBI55511.% gghiiiiiiiiiY\X\Y\YYYZR[ZYYYYYZZZRR[S[[ZTZSSSS[SR[SSZSSTTYTZSTZSSSSKRKAKKABBB,;)11)%%%%eefffffffffYY\\YY\\YZ[[[ZXYYZZS^^R[SSZUYZS[S[RR[RZTZSSYYT[NZSSZTSSSNOTN3KA7HBB;;,))))%bbbcbccccccZZYYYY\UY]S[SZT]YTZ^^RQRZTTYZSSZSRSSR[TSSRZTSRRSSSSSSKSTUUNKKK3N7HHH7000,,````````````SZY]Y\X\YYYYZ[[SZZRRRQR[ZZSS[S[SZS[S[SS[RZYT[RR[S[KS[SSUUTNTNNKKNOH77H7000$`_````````Z[SZ\XYYY\\YYZRR[RR^R[ZYYSZS[[SR[SS[SZSRSTUTSRSSRRSSTTTTTNSNTNKNHLLBHBB00$__````aa`a`[[R[T\Y]YYYYY]S^Q^^^[ZYTTZZSTZSS[RRSZSZTTYZSRSZTZSSZTTOONAHH70,,?.--*&& + +mnopppppqqq^^R^Z]YYZYYYYYZR^QQQSTYZZZZZZZ[R[R[[SSTTZSRR[STSSRSSTTTNNHHB7055)-4'/  + pprstttttttt[RR[[YY\YZ[ZZZRRRRRSZZSR[ZSS[SRRSYTSSZYTS[RRRS[SS[SZNTNNOOO::F>9++##r}~~~|~|~~~ZZZ[S]Y\Y[Q[Z^R^^ZZYYZS[ZSSRRRR[TYS[STS[SSSS[S[RRTTUTSTTN:::F>99+++#rr{zzzzzzzz\YZ[[[Y\YT^S^C^^QZYYZZZTTZ[R[[R[ZZSSTYSR[SSSSTS[STUTTUNNNAAH;;551)%- ' + + noppooooonYZ[[RRYYZ]RR^^Q^SZTZ[ZYTZ[RSZTZZSRSZYYS[SSS[TSSSTYTSTTSKKKNHHHB;,;))%- ghiiiiiiiiiZ[R^^[YYZZ^R^R[SYYZRRSZZSR[SZZSSRS[ZTZRSR[R[SSZTTTSS[SSRKOLHHHH70;0)%.%%eefffffffff[[RRZS]YSR^RR[Z]TZS[[ZS^RR[[SZSRZYUT[K[R[SSS[SSTTTSSSRCRNUONNHHHH00000)1))%%bbbcbcccccc[[[YYZZS^^R^[[ZTZZSZYYZRR[SSS[R[UXYSRRRRSTTSSSZTTTZTSRRSTSSNNNOLAA7(($00,,,```````````SZY\YZ[^^QRRZZTZSSZTYZR[ZSZZZRSTUYSRR[R[ZZSSTYUTZSNSRSUUTSNSKNOAKAKA(A770000__````````YZYYZ[R^RR[S]YZZZZZZS[RRZZZSSZT]ZRRR[TTTSSSSZUUZSS[RRSUTSNNSNNAKK(A(A$(000,,`````aa```\\YZ[R[R[[[YYZZTZZS[RRR[SSS[STYSSR^RSTZS[SSZTTSSSRRRSTSNHOHLIB0))%  + moppppqqqq\Y]ZR[[[[[ZTZZ[SSZ[[[RRSZ[R[ZTZSSSS[SZSS[STTUT[SRRSTOTSNNNLIB,)))%'  + +pprsttttttttYZT^R^R[[SZZ[[SZZR[SZSZYT[[TXY[[S[[SS[R[SYUUZSSRR[TUZSTON:L:::>++++#r}~~~|~|~~~Z[^R^^RR[ZYTZZYYZ[SS[SYYSSTXYSRR[SSZSSRSTUYSS[[K[TTSSNOOOP:::::9++++#rrzzzzzzzzS^^^^R[ZZ]YZZZYZRRS[Z[SS[ZYYSRR[RRSTZSTUUYSSRRRSTTSRSSNOOHH770,)))-%  + + mnpopooooon^RR^R[]YTYZZSZS[R[[[[S[RSTT[RR[SSZZSSSTUYS[SSRSZTSSTTSNTNKAN7BBB0511)%%%ghiiiiiiiii^^^R[YYZZZSZ[SR^[SZZS[ZTZZS[RRSZTZSSZZYYSRSSSSZTSSSUTTTNKSKNHH70B5;,))beeeffffffffR^R[ZZZZSS[[SZ[[SZTZSZYYYTZS[[STZRSSSTTS[SS[SSNSSSTTTTSSKKKNAHAHB700,bbcbccccccc[[[ZYZS[ZYZ[ZSZ[ZYZ[SYYYSSS[RSZS[[SZTYTSZSS[SN[[TTSSSSSKNSNNSNHOH7A7777$0_```````````SZZYZZSZ]YZSZ[[SS[[RZYTSR[[RSZS[RSTUUYSSTSRST[RTUTZTSSKRSSNSNNONANAA7777$$$$_____````````ZZZ]ZZZZYZR[[[S[Z[R[YTR^RRRRZTZSZTYYYS[SRR[TZSTYOZNSSR[SKNSKNNNANAA777($$$__`````aa```SZZS[SZZS[R[RR[ZZSZYXY[R[S[SZZSSYYYTS[KRR[SSSTTSSSSSSNSNNNAHBB0,)))%% + moppppqqqqZYZZZZZZ[^[SZZSZZZYXY[RSZZTTZSSSYOZR[RR[TTSSTUS[SRRSSTNNNHBI;;11)%  + oprtttttttttZYYZZZYS[[SZZZZSZYTZ[RRSZZZ[SSZTYZRZN[RNYZSZTS[TTTSRKSNNNLM:F>+9+++#r}}~~~|~|~~ZZZZZZZ[[SZZZ[RZZT[RRRR[TZKRS[ZYYS[ZS[STZSSTSRSTTZKSSSKSHP::FF>:9+++#r{zzzzzzzzz[ZS[[[R[[[ZZS[SYZ[R[[^[ZS[[STTYUSSSR[SSSRSTTSZSTNSRTTTNNNH7H000,))  + nopoooooooZ]YZ[[[RRSZ[^S\XT[ZSSSZYSR[YYUTZS[RRRSSSZZSZTTZSRR[NTSNTNNNA7BB,0,,%%% hiiiiiiiiiZYZ[[SZZZZZSZYXZR[S[[ZYZS[TTYZSR[RSZT[STUTSSTSSSRRRSSNNTOONAHHB700,,5)%%%efffgfffffZS[[[ZZZZZZZTYZ[R[RRSTTS[YYTZS[SRRTTSSTUZRSSSSSSSSSSSSSNTNKNAA7A70B;,,))%%bbcbcccccccZ[RR[[ZZ[SZYYZRRRR[ZZ[[[YUXSR[ZS[STZRSYZSSSTSRSSZSSTTSSSNSKSNKKKAAH7$0B000,_```````````Z[[[ZZ[[R[ZZZS[[[[YYZS[TXVXZRSS[SZSRSTSRRSTTSSSSSSTUTSSNRRKNNNKKAHA(A77$$0,0___`_``````S[[ZTZZRZYYS[[S[[TYZ[RYUXXXZR[[SSSRRZTZSSZTSS[SSSSTTSNSSRKKNNAKHHHA77B7$00,```a`aaa``[[S]ZZ[Z\XY[R[[[SZSR[YXXXXXSRRR[SZTYTZNZTTSS[RSSSZSKSSSNOHH777,?1)%-''  + mnopppppqqq[[[ZZR[XXZRR[RRZYT[RSXWWUYUZRRS[[TYT[TZSZS[RRSSZTTSSRKKHHN7H0051)%'& pprsttttttttZZZSR[ZYZR[[SZZTZZSZZWXXYYYS[SZSSTZK[SSZSKSRSSTOTSSTSSNTHN::F>99+++#r}|~~~|~|~~ZZSZ[YYZRR^SZTYZZZ[SYXXYYYZTSS[STZRRSSZKSZSSZTTZSSSZNSNSNNHF>>>9++++#r}{zzzzzzzzZZ[ZYXZS[[[S]YS[[RZZYYTYYYUXT^SZZSRSYTSSZSSZTTSRSKSSSNSAKAAI;B,?.--%' +klnppooooooo[R[YX][ZZ[[ZZSRR[RSTZYUZTUXXSRSSRSTYUZSSSSRNZSRSS[RK[KSNNNHH77B5D5)..%dehhiiiiiiiii[[ZYZ[RSS[SYS^RZYYTZ[TYYY\UYYS[R[SYUZRS[R[STSRSYNSSSSRSNNOHNN7BB00,5)fffffffffZYY][^R[RZYZ[[YXXXS[SZYYXYTYUT[SZTTSSR[SSSSZSSTTSRTTSNSNTNSOHLBHH000,)bcbcbccccccZY]ZS[[R[ZSZZYXWWY[SRRYUXYYU\SRSTTZRRRSTTTTSTSS[RSSSN[SNSKNOOHNHBHA7(($0,,_```````````YZSS[[R]YZRSY\XWYYYZR^ZUYUXXXZRZTSSS[SZTZSSZSSRKRRSR[KSTKKSHTNNLNAAAA($00$$___````````Z[[[R[ZXYS[YYXX\TZYYUTYYYUXXUTZS[[SZSSSTSRSSSRSSSSSSRSTTTNTNSANHAAA77770$$$_`_````aa`a`ZR[RR[YY[RYYXX\UXYTXXYYYXYXUUYTSRSSSSSZSRSSRRSTTSSTNTTONNHLL;;;,,%%%  + lnopppppqqq[[[[ZYZ[[[ZXWY\X\YYX\YYUUYYYXXTSSS[SSZSSSZTSSSSSSSTTNSNNHOBID;)))%%& + opqsttttttttR[[YY][RR[T\YYYUYYYYTTYXXUYUXUZS[R[ZTSSSTSSSSSSSSKSSSSNSOO:FFF>+++###rr}}~~|~|~~~^RZYY[RZZZYZ[[ZZYYXYYYXXYUXVXXY[RRSYTSSSSS[SSSSRKZSSSNTPP:L:::>9+++#rrzzzzzzzzzR[]Z[RYXX\ZRRC[[SYYUXXYXUXXXVXTSQ[STSSS[[RRRSTSSZTTSSNUMMJL770,))%%&  +kmnoopooooonZYY[^ZXWWY[R^Q^SZZTXXYYYUXXXUYYSSZTR[S[KSSSSTSSSUTSSNUPPMPAA7B0B,5)1.%%gghiiiiiiiiiYXZSY\\W\YYZ[R[[R[ZYYYYXXUYYYTYUUS[SSRRSYTSSTSSSTSSSUUUPOKKK7HB;;0,)5)%%defffffffff]Z[Y\XW\TY\YYS[S^RS[RZXWVYUUTTYXUSR[SSZSSSS[SSSSSRRTVPPUKRCKNHHB70;;5)bbbbcbcccccc[RYYWWX\YYTYYZ[R[RR[QTXXYXXXYXUUYS[RSZTSS[SKSSSSNTTUVVVONKKONNNN7LL7$770_````````````[]Y\WW\YY\YYYYTZS[RR[ZYSZYYYUVXUYSRRSTS[KSRZTZSZTUTOVPUOUOPUOH3KHL7A707$$$$___````````RYXX\YYYYX\XYYXWYSZSSSRQRSTUXVXYUUYSSRRSSSTTTSSSUPZSTUOUPPOOONKNHAA7H770$_``````aa```Z\WW\]Y]YU\YYXXYYYYYYR^Q^RTYYUYUYUXY[RR[SZTTSRSTUUOTRNTOPLMI;;515)%  lnoppppqqqq]X\\YYYYY\YYYXXYYYXUZ[[[RRZZTYTYTUVTS[SNSTTSRSUVUUUTSSOPPIIB0551.%  +nqqsttttttttY]TY\XY\XYZYXYZTYWXYYZSR[SSTYUYTYUYYTSZTTZSRRUUUPXPUSKOMMJMF>FG++++#rr~~~|~|~~~Z[ZYYY\YYYYXX\Y\WWWYYTSTZ[[STYUXXUYTUSSZTK[STUZNUUUUTRTPJMJJJ>+E++++#r{{zzzzzzzzS[^ZYYYYY\XYYYXWWXYYYYYYZRR[SSUXXUUUSRSS[RSUVUTSTUUUTCNOLP>GGD5?1%%  lnoopooooonZ[[T\\YY\XT[ZYXWXXYYUXXUYSSRR[YUUUYTRR[RRRUVVVUS[TOUOTOSAPJMIIDD0,)%%hhiiiiiiiiiZ[[Y\YY\XY]R[UW\YTTYXXXYUYYZRSYYYYSRRRRSSTUVXUUUOUUUUVTKKOPLIII7000))eefffffffffZR[ZYY\XXYYZS\XTYZYUXXYUXYUUYSSTURRRRRRSUUZTUUUUXTTPVPNSTOHLLH3A$($0,,))bbbcbcccccccZ[RRZYXYYYYXZ]S[TXXXUYYYYYYXYZSSTRS[R^SUVUTSRNYPPOTVUUUUNSNTNC3333777$$0,0``````````\]R[S\\YY\WWYR[[\XWXYTYUTYUYTYTS[S[RRRTXXUUTR[TUUYUUUPPORRNNKAK3CA7A(770$7___````````XY[RZXYY\WWXZRRTXVXYYXXXYUYYYYSRRSRRRTUUUUVYSNTUUUPUVVPTRKKKKKK3AHAA77007$``````aa```YY[ZZYYYXWW\SZ]YX\YTXXUYXXUUXT[RRRQRZUYUUUUUTZTTVPXMVPUUNRRRRRCRNSSKNUTNNOSNNNSKTHNNOOHOLLY]T[[ZYWW\YYYYXWXYZTYYYYYXYUZSRRRR^TYUSZTUUUUTKTTYPVPUOUTRNNRQRSSSSSONNNTOOOOKRKSSNNNOOOYXY[R[\WWXYZYXWXYYYXY[R[TUYSRR[RRSUVXUTSSUUUTTZSSOVUTTUTRSNSRKSNNSNOOTNSNOOONNNNNKNKSHOHYW\ZZYWX\YYYXXXYYXXYSR^SZYSQ^RQ^SXVXUUYNRUVUUVORRUUTUUORRSSRKTTNSTOONTONNTONSOONNTNSLNNNY\\XYZY\YYYXXXYZYUYZ^RRR[SQR[SRRYVXUUXU[[TYUVVXUO[SSUURRRCCRSNTNNNTNTONTONSKKNNNNNOLLONNYYYX\[ZY]YXWX\TYYY[RQR[[RRRSSR[TXUYTXPZTSSSUVVVVTSCSTKRRRRRSSKSSNSNNSNTOONKKNSSNSNLLTHOL\\\XYRSYY\XXYYYXYZQQQ^RRRR[S[SSYXXTSNYSTSSSTUVVUTRRRCRRQCSTTSSSSSTOONNHTNSOTNNNKKNNTHNNOYXWW\ZZZXXX\YYXYS^RQ^[RRR[[RRZTTXVXUTTXTUXTTTVUTUTRK[CQQRNTSKSONTOOOTTTNSNNNNNSSNLOKNNHN\WWW\Z[ZXXYT]YYZR^QRSZZSZZSRTYSTXVXUUUYTVVUUUUTUUTSSKRCRTSKSSOUTOTONSNNKKSSSNNNOPOONNNOK\W\\YYSZYYYYYXYZQ^R[ZSSSYZSYWXTSUUUUUXUUXVVUSTUUURRSRRZOTSKRSNOTNNSSNSNSNNSNSNNOLOONLONPW\\YYY]ZZYY\XX\UZRR[SSZSZSTXVXY[SZYXUVVVUUVUSSUT^CRRRRTTSKSNNSNNSSNNSNTNTNNNNNONONNNONLMX\Y]YXXZ[Y\XYYYYYSR[[[[[RSUXXUUTSSUZZUUZOVUYSSSRCRRQKSSKKSOTTTTSKNTOTNNNNNSTOONNSKKSKLPL\YYXWW\Z^TYYYYYYZR[STS[KYYZTXUYYYYTSRUUZTUUUTSQ^C^KSTNSRRSOTTNTNTOOTNSSSSSKNNNNNONKNPLOL60 92 138 1 +HHHHHAAAHLHHAANANNKKKCKKKOPPOTOOTOUOOOTOOUPOOOOTRSNTOTOPULKRCRSKRKRRRKOOSNOOOOOPOOOOONSNBILHAKKHLMLHNKANNAAKANKRSOOUTUPUOOUOTOOUOOOUOTOOTNTNOOPLUOTCSONKRRCRNPOPONKNOPPPOOOONONKLLHAKAHHLLHNNHNNNKKONNNTONSNOUUOOTOOOOUOOOTOOOUOPNSOPPPPPPNSSNKRRRCRNPPPLTSNOOOHSNOOOOKRHNAKNMIMHHANKOHNKKTOOTOOTKRTTOOOTOTOTOUOUUUOOOOOONROPPPPPOTRKRRRRNNONOPLOONNONQNNNNOOTKCHK3KBMLHNNKKNNNKCNPOOOUTKRNOUOTTTOOUOPUPOOOUUOOUONSNPPPPOONKRCCRKTOOSTOOOOPTRCSOPTNOHNTNHNNHOLONKNNNHNRCTOPPUPPNRSNNTOOOTOUPUOOOUOTOOOOOOOSNPOOOOSRQRSKRNLPLNNNOOPLHKKPLLOONTNNSNNHOONAKKNHNNKRSOPPUPUOTTSSKTOUUOULUOTOONOOPOOOPPPOOMPOOTKQCRKRKTOOOPNSOLPUOSNLUOONONSKCNHOOHNKKNONNKCKUPOUPPOTPPTK[KTOOUOOOSNOOOOULUOUPPPPPUOOOSCQCRKKKNOOPLOSNPLOOOONNHONONARRNNOHONNOTNSRRRSUOUPUTTUPUOTSKNOOOOUTKSTUUPPUOOPPPOPONONKCQQCCRKSOOPPOOOSNTOPPHKRKRNNSRKNLOHNNKNONKRRRKTSNUUOTOUOOTOOSTUOOULUTRNNOOOOOULULPPSRSRQQQCRSRSNNOOPOLLOKNPLOOSCRCSKKKKNLONNSSNSKRCRNTSSSTTOPPUOTOOOOOOOUOPOONNSNOOOPPPPUPLOKCCQQQRNONNOTKKOOPPONOLOOOKCKNNRCRKNTNSKKKSKRCRTTTSNTRROPUOTOOTOOUOUOOOOTTKQSTOOPPMPPPPTKRCRRCNOONNNKRCNPLOOLNKOONRKONKKSKSROONKKSSSSKRSOUOTUUOSNTTTTOUOUUOOUPOOTOOONCKOSOPPPPLPNRQRCRCSOLPOOSRKSOOLULPNNOONNKNSKSNHSKNKRKSNTNSRTUPOOUOPUPUNRSNOUUOUOPOUOOTOPPTNSSKNOPPOONRCQCRRRNOOLPONKNONTOLPONOOLONSRKNNNNKKTSSSTNTKRSOUUUPPUOPPOTSKSNOOPOOUOOTOPPPPONSKSKKTNTSRQQQCQCKNOPPPLNNONKKNOOOLOOLNKKKNKKKRKCqqqqqqppppppoon %-.1?55;;IILOLONNKKSTKSNNRQQRRKRNOOPPOOOONKRKRKOLPNNNSKRNNNSKRCRtsssrrrrrrrqqpp +  -..?DDIIIPLOOUOSSONRNNRCCRKNOPPOONLOOPLRCNNKKNOKNSKQCKSNNKKKRK~||zyxxxxwxxx"""" !!446+?GGJMMMPMPLONNSKKRCQCROOOLPPOKNOPMPNNNTHSCKSKNKKKSKKNKKRHHzyyxwxwwwwwuvvv  " #!!!.1IJMIMMPONKSKNRQQRCSOLLPPLNKNLPPLLONNLSCRKKKNNNNKKRKRKONonnononononnnnl + + '%)))5D;IIIIPPPPUNRSKRCKRQROOONLPONKNOOLPPONOONKNNRKNNKNSKKCKNSCiiiiijijjjjjiiihg  %..50;;ILILPLPPLONKNSKKSKRAPOOOOONRNOKNOLOOLOASOOKKNSNKSKKRKNNKRffffffggggggggee%%%%1115,077HBIMMMPLPPOSNKRKSKKKOPMPLNSCKTNNNOLOLPOHNHNKNNKRRKKCKLOKKKccccccddddddcccbb))))5;;;BA(ANBPMPPMPONKRCRRKKSSPPMPLNSKONNOLOOOLONNNKKNNONKKKCKTHKKKK```aaaaaaaaaa```__,,000BBLHA3KKNOLPLPUNRCQQRKKOOKOLPOONNNOLPPLNNOONNNKRKSHNAKKRNONKRKKO``````_`_`___`___$$000H0HBBHHNAANNNNOOKRCQRRKSLPLONOOOLPOKNPLLOKCKNKRCKHONNKSRKHONKRKKNO``````````````__$$$000BBBHLHANONANKNNRCQRRKRNPPPONKNLMMPNNOOOONQNNNRRNHNNKKKCNOHKRKHOLHqqpqqqppppppoonlk +j &&'*-<1,,DBHANHAKQQCRNKNOPMOSRKPMPOON3OLPARNOKKNNOKRKKRKNNKCKHLLOKtsssrrrrrrqqqponm + h&'*46),,;B7AAARCQCCKHOPLPLONKNLPOLLOKOMONNOKRKNNKKKKKKHNRRKKOLOKR~||zyxxxxwxxx """//!46:5;B7AHKCCRKTOOPPMPOLHONNNOLPLLLONKSKKANNSKRKKNHNKKNNHOHKKHzyyxxwwwwwuuvv """"#!8+6):5:7HA3CCKSHOPMMPLLPPONRKNOPPLONKKKCKNNHNKNKKHOKRNHHOHKCKOonnnonoononnnmmlk +j  '*--<100;BBHAKKKNKNHOPLPOOLLONNOHOLLONKKRKNNONNKNKKNNKRKNOHNNKNNAiiiijijijjjjjiige%--.<150$$HBHAANSNNKSNHONHOMMPNOLOSNHKSKNNKNHOHNKKKKNNKCKKNNNKKLLHKffffffgggggggged%%..115;03(7AAKNNAOONRSNNOOPMMLLPLOHKKKKKKKNNNNKKKRKNKANNNHLHNKHLNKKcccccdcddddccccb))%5555;I;A(AAK33KNOOPONNNNNHMMOOLPOLLNCNNKKSHNNKKKRKNHSKNNHLLNKATAKKK```aaaaaaaaaaa`,,;,;;BBBH(KKAKKKSHHLPOHSNRKNPOOOLPLONNSHNKKNNRKNNNKHONKKNNHOHKNNNKRKK```````_`_`_`__0,00B0HHBAK3KAAKNOLOOONKNKKSNOOOHNHLONNNKRKNNNAKNNKNOHKKNNNNNKKNNNNAKK`````````````_`0,00BBBBA33CKAKAOLMMOHRNNSKRKOMLLNRNNNNKRKANHNNNKKNNKKKAHHNKKKOANNAKKKqpqqqppppppopo +&'%077AIMMMLNKOLONRKOMPLOCKKHKCKNNNNNKKKSAKKKKNLLHAHLHKAKSKKAtssrrrrrrrrqqpp + +&),,077BMMLLOLOPLNAKNOLLOCRARRKNLONKKSKANNKNNNOLNKNLHKKKKRAKN~~zzyxxxxwxx""""!%%%))55;BBILLPMPPLNKKKKHOOHKNKCKKNONASAKANNNNNHHHNKANNKKKNAKKNNyyyxxwwwwwuuwvv  """ %%))::;BBHLLLPIOKKKRNNNHNNHNKNNOHNKKKNHONKANHHHNKKNNKKKNNNANHHnnnoonoononnmmm  ),00BBBHHLILMLOKNCNLOHNKNSKKOLONKKKKNONKKNASNHNNNNNNAKANKKNHHiiiiijiijjjjjii ,,00BB77HHNOLLOOHNOLPLNKNKCKNHLNKANANNAKKNHHHNNNHNHNAKNKKAANHNffffffgggggggf`000;;BHANAANLPLLPLLPLNSNK3RKNNNKANOHHNKKKNLLHNHHNKNAAKKKKKNLLHcccccddddddccccb)`_$000BLHHAHNKKKHPLLPMPLNKAKKNNNNHKKKKHHNKANHHLHKKNNKKKKKKNHNHLLHH```aaaaaaaaaa`a`_$$$(0BBBLHAANOHNKRRHPLLLONKNKKNNNLOHNKKNNNKKOLOHNKNANKKAHNKKHHHLLAKN_`````__`_`_``__$$$$$(7BBLIBL3KHHNNNNKKNLLOKKNKKKNNAOHNNHHHNKRAHOHNAKKNHAKNHNANNNHLNKAA````````````_`_$$$$(70B;BBLAKKANNANNNNNLLOKNKKKNNKNHNNKHONAKAHNNNKANHHNANHNNKANHHNKAHHqqpqqpppppppoonlkjh''--.1);,77AAHHNKKOLKKKKKANAKNKAKKHNAKHLOHAKKNHHNAKAKKKANNHHNANHHtssrrrrrrrqqqppnmkj &'%.1<1;B77ANNAKKNKKCRKKNNOHHNKKANKKNHOHNNNHHHNKANHNKKNLHHNHHNHA~~zzyxxxxwxxx ""#!!!=+!>ÞüûÛø÷Ø|›|š ך\{™ z™z[Õy˜yZµxµxYwXwv³WvuVu“ tUt‘TSS4r RqR3 QQ6T5TS4SR3Rp Q2QP1n 0Om/N.- M.M, LL-KK,* J+I*I)H)('&%FIN_PLYRP 63 +Œ1½wœs{oZk9ggc÷b÷^Ö^ÖZµV”RsNrNRJ1FBï=Î9­5Œ1k1k-j-J-J)I))))%(%(!%!!è ç èçæÆÆÅ¥¥¥„ƒƒ dc B!]_LH80  cTUBE_LR_P 127 +J)Õ~r~îyîu«}Íu¬yi}‹y‹u‹qjuIyHyHu(y'yqÅxmæpiælÅl‚tæ`æ\Å`bp‚lapƒhÅ\‚hApalƒdbh‚dahAlÅTbd‚`adAh¥Tb`¤Ta`Adb\A`a\bX¤LA\aXbTAXaTƒLbPATaP„DAPBLAL!PaHƒ@BHbDAH!LƒTTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<7<<7<<7<>==>>>>==@====@@@@@@?AA??A())*)CC?AAAAA??@@==@@????@@==@?ACCAA?@@@??AAAAA?AACC&BB&B&(())*****`**`++++ ,,, -.-,--.-.   + + +  + lllGGLKJKJJJJJJJJJKeJJJeLDKDKDKmLFLFLFLLLLLGGlljllljlB```)Illjljjlljjjllvlllllllll?CAhAlllllllllvll@ll@?AACCCB()))``*))```*`++,,,-,-.--.----....../0   + + + +pRTpRRQTUUUUUUUTTUUUUTTQRoPNoQPNNNPQQNNM999dddddddddd8HABCHndddEKFKFKnFnFnFKmDmFmFm_jG__FFDDDF\\D\\___jjjllkkCCCBB((())(:))``++,,,,---.---------.--..////4    + +SsrSOqsuuWWWWuuVuuWWutSSxxx9xxx999xxx99fadbabbbbbbbbbbmjHjj_bcccdd8JEJEJ8d8d8]]^w^wEE\]E^^^777DD<=>==>=<><>>>=%@?A???$??AACCAAA?$AC&B&'&&'&&&(()----,CBBBBBCB&&'&&&&&&CCC'&&(((&&&&&((()((&(&((&()))*+*+#,,++++#,, -..--..////.0214  + +**))(&B&'&'''''''''''CB((((((((()))))(((())**++++++++++,000//+*********++++**)))*++++++*****+,++,,,,,,,,,,,,,,.---......///////0//000000132     + + + -,,+,+++++++****+*****++,,,+,,,,,,-,,,,,,,--..../////../11212.............-,-,,-,.--.-------......./......//////0001111200011222221111233     + + +0/0000000/0/0000//././/0///00001010100000100111122211112344431111111111111010010100100100010111121212222222212122223333332333443554333334 4       + +3244444332322223233233223323333333333333334434444444343556665444444443434344434333434344434434455544444444444445556555555556666555 55 5 5 56  5    + + + + + 3333333333333433333333433333333333333333333434444443435566665444444433343444443333444444443344454555445454554544656565656666566655 5 5 5 5 5 6 6     + + + 333333322222222222222222233333333333333333333333333334555554333333333333334433333444444333334343333334444444454556565454555656556655 55 565 6      + + !!!!!!!!!!!!!! + + + + + + + +! + + +     + + + + +  +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + + + + + + + + + + + + + + + + +     +    + + +!" + + + + + + + +! + +" + + + + + + + + + + + + + + + + + + + + + + + + + + + +! + + + + + + + + + + + + + + + +!" + +! + + +" + + + + +  + + + + + +        + + +  + + + + + + +" +   +  +  + +  ! +! +"   +  +  + +        + +  +                  +   + +! +  +               + + + +   +                      + +   + + +              +       + + + +                   +   + + + + +                 +  +  + + + + +        +   +       +     + + + + +         +          + + + +  + + + +                         + + + +                   + +  +   +6 44 54 1 +  +           +            +  +   +  + +   +    +   +    +  +  +  +   +     +  +        +     +    +         +         +     +    +      9 44 54 1 + +   + +  +  +    + +  + +       +     +    +       +   + +   +  + +  +  +  +   + +   +           +  +  +  +  +  + + +  + + + + + +   +     + +   +    +  C 200 21 1 +]]ZYX[[X\YXXXTZYS]]SSSSMMOMOJHPNNPLFLF;HFIDDDCCCAAA@@@@s@><<<>E<><<<<<===889k99::999:::0&&&&&&!&&&&&&&&&&&&&&&&&&$$$&$$&&&9999$&&&$&&& ----w-w -w + + + + + ,+,- &-&YZTZZYX[[X\YSS]]R]]TYTZJUOTOOPPNHLFHFFIFDDCCCCACAEEE>>><<<<<<>><<>><<=====88k::i:::000 &&$$%%% + + + + + +n %% %% + + + + +w + -% +w +w + + ***  *********,4{444^T^YS]Y[X\TZZS]SSSZZZTMTYOOOOOLHJLLHHFFyDDDvCACA@A@@@>>>>>>>>ssussrsrrrrrrpr=^!~%ž)v›þTOPBAR2P 241 +   $ +($ 08.4 +$ (-0,,+( @ ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP +;DJT Start + CMPI HELP_MULT,A8 ; MULTIPLIER HELP + JRZ ADSDIP +;DJT End + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +;DJT Start + .if TRIVCON + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + + .endif ;TRIVCON +;DJT End + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP +;DJT Start + .if TRIVCON + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + .endif ;TRIVCON +;DJT End + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +;DJT Start + .if TRIVCON +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + .endif ;TRIVCON +;DJT End + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +;DJT Start +MH_0 .STRING "CUSTOMIZE THE INTERNAL" +;DJT End + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +;DJT Start + .if TRIVCON +LIST_TRIVIA + .endif ;TRIVCON +;DJT End + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/XCODE100L/ATTRACT.ASM b/BACKUP/XCODE100L/ATTRACT.ASM new file mode 100644 index 0000000..69de37a --- /dev/null +++ b/BACKUP/XCODE100L/ATTRACT.ASM @@ -0,0 +1,7355 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd +;DJT Start +; .ref QSNDRST +;DJT End + +;DJT ref moved down to reference + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii,bast8tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads +;DJT Start +;DJT .ref removed +;DJT End + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC +;DJT Start +;DJT .refs removed +;DJT End + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop +;DJT Start +; .ref set_volume_for_amode +;DJT End + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen +;DJT Start + + .if TRIVCON + .ref trivia_game + .endif ;TRIVCON + +;DJT End + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire +;DJT Start + .ref BASTC_W_P,B8TCYC_PER +;DJT End + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr +;DJT Start + .ref logos,name_sort + .ref BALLBAK1 +;DJT End + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + +;DJT Start +; .bss cycram ,16*2*16 ;Palette cycle mem +;DJT End +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + +;DJT Start + BSSX amodeloop ,16 ;Cntr for when to show design team +;DJT End + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + +;DJT Start +;BAD!! VERY BAD!! ;let the sound board reset finish up. +;BAD!! VERY BAD!! SLEEPK 8 + + .ref set_game_snd + move @SOUNDSUP,a0 + clr a14 + move a14,@SOUNDSUP + calla set_game_snd + move a0,@SOUNDSUP + +;DJT End + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;DJT Start +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp +;; +;; JSRP show_nba_plyrs +;; JSRP show_designteam +;; +;; .ref found_champ +;; JSRP found_champ +;; +;; .ref show_trophy +;; JSRP show_trophy +;; calla set_volume_for_amode + + JSRP show_title + +; .ref get_all_records +; calla get_all_records + + JSRP new_page + JSRP amode_design + JSRP show_nba_plyrs + JSRP show_hiscore + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + .if TRIVCON + .ref show_prizes + JSRP show_prizes + .endif ;TRIVCON + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP result_screen + JSRP show_nba_plyrs + JSRP new_page + JSRP show_title + JSRP show_copyright + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + move @amodeloop,a0 + inc a0 + move a0,@amodeloop + srl 1,a0 + jrnc #no_aama + JSRP show_aama +#no_aama + move @amodeloop,a0 + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + .if TRIVCON + move @amodeloop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + .endif ;TRIVCON +;DJT End + jruc #lp + + + .def pObj + .bss pObj,32 + + +;DJT Start +#**************************************************************** +* Attract design player screen + + .ref design_player_proc_amode,done_creating + .ref get_all_records,sort_wins + BSSX stick_amode_mkplr,16 + +amode_design + + calla WIPEOUT + movk 1,a0 + move a0,@dpageflip + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP + + movk 1,a0 + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc_amode + + movi 2*TSEC,a11 + movi #stick_t,a8 +#lp + move *a8+,a10 + jrn #xb + move *a8+,a0 +#lp1a + move a0,@stick_amode_mkplr +#lp1 + SLEEPK 1 + move a11,a11 + jrnz #nob + + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + subk 1,a11 +#nob1 + clr a0 + dsj a10,#lp1a + jruc #lp + +#xb + clr a0 + move a0,@stick_amode_mkplr + + movi CYCPID,A0 + calla KIL1C + calla pal_clean + + .asg 16,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 tuneend_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + calla WIPEOUT + RETP + +#stick_t + .word 110,0000000b + .word 8, 0000010b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0000010b + .word 25, 0010000b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000100b + .word 8, 0000100b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 70, 0010000b + + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 140,0010000b + + .word 50, 0010000b + .word 40, 0000010b + .word 70, 0010000b + + .word 30, 0000100b + .word 60, 0000100b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 60, 0001000b + .word 30, 0000100b + .word 30, 0000100b + .word 70, 0000100b + .word 40, 0010000b + + .word 20, 0000010b + .word 40, 0000010b + .word 70, 0010000b + + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 40, 0001000b + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 15, 0000010b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 20, 0001000b + .word 80, 0001000b + .word 40, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 50, 0000100b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 100,0000100b + .word 50, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 50, 0010000b + + .word 20, 0000001b + .word 20, 0000001b + .word 40, 0000001b + .word 60, 0010000b + + .word 15, 0000001b + .word 40, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 40, 0010000b + + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 80, 0000010b + + .word -1 + +;DJT End + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + +;DJT Start +; .bss junk,140*16 ;quick rndper loop for hotspot +; +; movi junk,a8,L +; movi 140,a9 +;#llpp +; SLEEPK 1 +; movk 20,a0 +; calla RNDRNG0 +; move a0,*a8+,W +; dsj a9,#llpp +; jruc $ +; +;DJT End + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;DJT Start + movi CYCPID,A0 + calla KIL1C + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + calla WIPEOUT + RETP + +title_scr_mod + .long maximBMOD + .word 0,0 + .long 0 +; .long hangtimeBMOD +; .word 0,0 +; .long 0 +;DJT End + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! +;DJT Start + .if OPERMES +;DJT End + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX +;DJT Start + .endif ;OPERMES +;DJT End + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,132,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",1 + .string "ALL NBA TEAM ROSTERS ACCURATE AS OF 11/1/96",0 + .even + +;DJT Start + +#**************************************************************** + + SUBRP show_aama + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 2 + + movk 31,a0 + move a0,@mess_line_spacing + + movi aama_title_setup,a2,L + calla setup_message + movi aama_title_str,a4,L + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi aama_rating_setup,a2,L + calla setup_message + movi aama_rating_str,a4,L + calla print_string_C2 + + .ref HTSTAT03 + movi [200-5-44-88,0],a0 + movi [78,0],a1 + movi HTSTAT03,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi [200-5-44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + movi [200-5+44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + +; clr a10 +; movk 8,a11 +; CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +aama_title_setup + PRINT_STR bast18_ascii,11,0,200,56,BSTGYG_P,0 + +aama_rating_setup + PRINT_STR bast10_ascii,6,0,200,110,BAST_W_P,0 + +aama_title_str + .string "AAMA Parental Advisory",1 + .string "K-A RATING",0 + +aama_rating_str + .string "Suitable for All Ages",1,1 + .string "The content of this game is",1 + .string "appropriate for players of",1 + .string "all ages.",0 + .even + + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + move *a13(PROCID),a0 + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #notocto + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + +;design team + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + move *a13(PROCID),a0 + cmpi GRANDCHAMP_PID,a0 + jrne #notgc + movk INAMODE,a0 + move a0,@GAMSTATE +#notgc + movi TSEC*6+12,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + +;additional design + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;sound & music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #snd_music_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30+11,a10 + JSRP time_delay ;SLEEP 30 + +;music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #music_str,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movk 17,a0 + move a0,@mess_line_spacing + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;actors + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;hardware support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #hardware_str_setup2,a2,L + calla setup_message + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;nba support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;sweepstakes + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #sweepstks_str,a4 + calla print_string_C2 + + movi #sponsor_str_setup,a2,L + calla setup_message + movi #sponsor_str,a4 + calla print_string_C2 + movi BSTGYO_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGWWOP,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGYG_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi #sponsor_str_setup2,a2,L + calla setup_message + addk 8,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;additional testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;special thanks + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi #thanks_str_setup2,a2,L + calla setup_message + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6+11,a10 + JSRP time_delay ;SLEEP 30 + +;executive producers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movk 25,a0 + move a0,@mess_line_spacing + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + + +#sclout + clr a0 + movi -1,a1 + calla obj_delc + + RETP + + +#title_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#sponsor_str_setup + PRINT_STR bast18_ascii,11,0,200,65,BST18T_P,0 + +#sponsor_str_setup2 + PRINT_STR bast10_ascii,11,0,284,152,BAST_Y_P,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + + +#design_tm_str + .string "DESIGN TEAM:",0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + +#snd_music_str + .string "SOUND AND MUSIC:",0 + +#music_str + .string "MUSIC:",0 + +#actors_str + .string "ACTORS:",0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + +#nba_help_str + .string "NBA SUPPORT:",0 + +#sweepstks_str + .string "MAXIMUM SWEEPSTAKES:",0 + +#gme_tester_str + .string "GAME TESTERS:",0 + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + +#thanks_str + .string "SPECIAL THANKS:",0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + + .even +;DJT End + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 +;DJT Start + + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + +#sponsor_str + .string "MAXIMUM",1,0 + .string "NBA HANGTIME",1,0 + .string "SWEEPSTAKES",1 + .string "IS CO-SPONSORED BY",1 + .string "AND",0 + .string "EGM EGM",0 + .string "2",0 + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + +#gme_tstrs_str2 + .string "KEVIN DAY",1 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 +; .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + + .even + +;DJT End +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + +;DJT Start + movi -1,a0 + .ref t1ispro,t2ispro + move a0,@t1ispro + move a0,@t2ispro +;DJT End + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team2 ;Team controlled by plyrs 3 & 4 + +;DJT Start + move @otdloop,a14 + move a14,a0 + addk 1,a0 + cmpi NUM_DEMOPUPS,a0 + jrlo #otd + clr a0 +#otd + move a0,@otdloop + sll 4,a14 + addi demopups,a14,L + move *a14,a14 + + movk 1,a0 + and a14,a0 + move a0,@pup_court + + srl 1,a14 + movk 1,a0 + and a14,a0 + move a14,@pup_aba + + movk 15,a0 +; calla RNDRNG0 + .ref pup_showhotspots + move a0,@pup_showhotspots + + movi player1_data,a2,L + callr demo_cp_rndper + movi player2_data,a2,L + callr demo_cp_rndper + movi player3_data,a2,L + callr demo_cp_rndper + movi player4_data,a2,L + callr demo_cp_rndper + + SOUND1 tuneend_snd + + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP +;DJT End + JRNZ NONO1 + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + +;DJT Start + .ref RNDPER + + SUBRP demo_cp_rndper + + clr a0 + movi PR_SIZE/16,a1 +#nhd + move a0,*a2+ + dsj a1,#nhd + subi PR_SIZE,a2 + + movi 140,a0 ;!!! + calla RNDPER + jrlo #ndh0 + + movk NUM_DEMOHEADS-1,a0 + calla RNDRNG0 + sll 4,a0 + addi demoheads,a0,L + move *a0,a0 + move a0,*a2(PR_HEAD_NBR) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_HEIGHT_PTS) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_WEIGHT_PTS) + + movk 1,a0 + move a0,*a2(PR_CREATED_PLYR) +#ndh0 + rets + + +;Bit order: 1-ABA 0-Outdoor +demopups + .word 01b,11b,01b,00b,11b,01b,10b +NUM_DEMOPUPS .equ ($-demopups)/16 + +demoheads + .word 0, 1, 3, 5, 6,10,11,13 + .word 16,18,20,22,24,25,26,28 + .word 30 +NUM_DEMOHEADS .equ ($-demoheads)/16 + .word 0,0,0,0 ;Just in case! +;DJT End + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 +;DJT Start + btst B_CHARGEN,a4 ;But don't change it if its a chargen name + jrnz #lp +;DJT End + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt3 + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + +;DJT Start + .asg 12,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 +;DJT End + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +;DJT Start +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .if TRIVCON + .long #str_h8 + .long #str_h8a + .endif ;TRIVCON + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME MAXIMIZED!",0 +; .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "1997",0 +; .string "150 NBA",0 +#str_h0a + .string "LINEUPS",0 +; .string "PLAYERS",0 + +#str_h1 + .string "COLLEGE",0 +; .string "CREATE",0 +#str_h1a + .string "ROOKIES",0 +; .string "PLAYER",0 + +#str_h2 + .string "HOT",0 +; .string "ALLEY",0 +#str_h2a + .string "SPOTS",0 +; .string "OOPS",0 + +#str_h3 + .string "TEAM",0 +; .string "DOUBLE",0 +#str_h3a + .string "FIRE",0 +; .string "DUNKS",0 + +#str_h4 + .string "SIZZLING",0 +; .string "ROOF TOP",0 +#str_h4a + .string "FINALE",0 +; .string "COURT",0 + +#str_h5 + .string "SMARTER",0 +; .string "SPIN",0 +#str_h5a + .string "DRONES",0 +; .string "MOVES",0 + +#str_h6 + .string "RADICAL",0 +; .string "DIGITAL",0 +#str_h6a + .string "DUNKS",0 +; .string "SOUND",0 + +#str_h7 + .string "BETTER",0 +; .string "M DOC",0 +#str_h7a + .string "GAMEPLAY",0 +; .string "RAPS",0 + + .if TRIVCON +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + .endif ;TRIVCON + +#str_h9 + .string "NEW",0 +; .string "MEGA",0 +#str_h9a + .string "POWERUPS",0 +; .string "SECRETS",0 + +#str_h10 + .string "AND NEW",0 +; .string "AND",0 +#str_h10a + .string "SECRETS!",0 +; .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBR flash_bigtxt3 +;DJT End + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 +;DJT Start + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #lpt ;Called from grand champion? +;DJT End + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;DJT Start + .if TRIVCON +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + .endif ;TRIVCON +;DJT End + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + +; movi CYCPID,a0 +; calla KIL1C + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD_X + .asg 75,HD_DX + .asg 190,HD_Y + +#***************************************************************************** +;DJT Start + +;ATLANTA + .ref BLY_ATL,ATLNBLA,MUT_DEN,DENNMUT,SMI_ATL,ATLNSMI + .ref LAE_ATL,ATLNLAE,NOR_ATL,ATLNNOR +;BOSTON + .ref BRO_BOS,BOSNBRO,HAM_COL, HAMER ,BAR_BOS,BOSNBAR + .ref RAD_BOS,BOSNRAD,FOX_BOS,BOSNFOX +;CHARLOTTE + .ref RCE_CHA,CHANRIC,MAS_NEY,NWYNMAS,DIV_LAK,LALNDIV + .ref ZID_CHA,CHANZID,CUR_CHA,CHANCUR +;CHICAGO + .ref PIP_CHI,CHINPIP,ROD_CHI,CHINROD,KUK_CHI,CHINKUK + .ref LON_CHI,CHINLON,KER_CHI,CHINKER +;CLEVLAND + .ref HIL_CLE,CLENHIL,MIL_CLE,CLENMIL,PHL_CLE,CLENPHI + .ref BRA_CLE,CLENBRA,FER_CLE,CLENFER +;DALLAS + .ref KID_DAL,DALNKID,HPR_NEY,NWYNHAR,JAC_DAL,DALNJAC + .ref MON_BOS,BOSNMON,MAS_DAL,DALNMAS +;DENVER + .ref MCD_DEN,DENNMcD,MAR_SAC,SACNMAR,JAC_IND,INDNJAC + .ref ELL_DEN,DENNELL +;DETROIT +; .ref HIL_DET,DETNHIL,RIL_COL, RILEY ,DUM_DET,DETNDUM + .ref HIL_DET,DETNHIL,DUM_DET,DETNDUM + .ref THR_DET,DETNTHO,AUG_ATL,ATLNAUG +;GOLDEN STATE + .ref SPR_GLD,GOLNSPR,KON_ORL,ORLNKON,SMI_GLD,GOLNSMI + .ref MUL_GLD,GOLNMUL +;HOUSTON + .ref OLA_HOU,HOUNOLA,HAR_COL, HRNGTON ,DRX_HOU,HOUNDRE + .ref WLS_GLD,GOLNWIL +;INDIANA + .ref MIL_IND,INDNMIL,DAM_COL, DAMPIER ,ROS_DEN,DENNROS + .ref SMI_IND,INDNSMI,DAV_IND,INDNDAV +;L.A. CLIPPERS + .ref VAU_CLP,LACNVAU,ROG_CLP,LACNROG,MUR_CLP,LACNMUR + .ref RCH_CLP,LACNRIC,BAR_CLP,LACNBAR +;L.A. LAKERS + .ref VAN_LAK,LALNEXE,CEB_LAK,LALNCEB,SCO_VAN,VANNSCO + .ref CAM_LAK,LALNCAM,JON_LAK,LALNJON +;MIAMI + .ref MOU_MIA,MIANMOU,HRD_MIA,MIANHAR,DAN_MIA,MIANDAN +;MILWAUKEE + .ref BAK_MLW,MILNBAK,ALL_COL, ALLEN ,LNG_MIN,MINNLAN + .ref ROB_MLW,MILNROB,RES_MLW,MILNRES +;MINNESOTA + .ref GUG_MIN,MINNGUG,MAR_COL, MARBURY ,GAR_MIN,MINNGAR +;NEW JERSEY + .ref GLL_NEJ, NWJNGIL ,KIT_COL, KITTLES ,PAC_WAS,WASNPAC + .ref BRA_NEJ,NWJNBRA,OBA_NEJ,NWJNOBA +;NEW YORK + .ref EWG_NEY,NWYNEWI,WAL_COL, WALLACE ,JON_CHA,CHANJOH + .ref STA_NEY,NWYNSTA,HOU_DET,DETNHOU +;ORLANDO + .ref HAR_ORL,ORLNHAR,SKL_GLD,GOLNSEI,GRT_ORL,ORLNGRA + .ref AND_ORL,ORLNAND,SCO_ORL,ORLNSCO +;PHILADELPHIA +; .ref IVE_COL, IVERSON ,MIN_COL, MINOR ,STA_PHL,PHINSTA + .ref IVE_COL, IVERSON ,STA_PHL,PHINSTA + .ref COL_PHL,PHINCOL,WEA_PHL,PHINWEA +;PHOENIX + .ref JOH_PHX,PHONJOH,TIS_PHX,PHONTIS,MAN_PHX,PHONMAN + .ref HOR_HOU,HOUNHOR,CAS_HOU,HOUNCAS +;PORTLAND + .ref ROB_PRT,PORNROB,RID_MIN,MINNRID,SAB_PRT,PORNSAB + .ref AND_CHA,CHANAND,CHI_PRT,PORNCHI +;SACRAMENTO + .ref OWE_SAC,SACNOWE,RAF_DEN,DENNRAU,RIC_SAC,SACNRIT + .ref GRA_SAC,SACNGRA,EDN_SAC,SACNEDN +;SAN ANTONIO + .ref ELL_SAN,SANNELL,ROB_SAN,SANNROB,MAX_PHL,PHINMAX + .ref JON_SAN,SANNJOH,DEL_SAN,SANNNEG +;SEATTLE + .ref KMP_SEA,SEANKEM,PAY_SEA,SEANPAY,SCH_SEA,SEANSCH + .ref HWK_SEA,SEANHAW,FOR_SEA,SEANFOR +;TORONTO + .ref ROG_TOR,TORNROG,CAM_COL, CAMBY ,STO_TOR,TORNSTO + .ref JON_DAL,DALNJON,WIL_MIA,MIANWIL +;UTAH + .ref STK_UTA,UTANSTO,MLN_UTA,UTANMAL,HRN_UTA,UTANHOR + .ref MOR_UTA,UTANMOR +;VANCOUVER + .ref ANT_VAN,VANNANT,EDW_VAN,VANNEDW,REV_VAN,VANNREE +;WASHINGTON + .ref STR_PRT,PORNSTR,WEB_WAS,WASNWEB,HWD_WAS,WASNHOW + .ref MUR_WAS,WASNMUR,CHE_WAS,WASNCHE + +K_GILL .equ WALLACE+1 + +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 78,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi BALLBAK1,a2 ;*img + movi 1900,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + clr a5 ;id + calla BEGINOBJ2 + + clr a0 ;x + clr a1 ;y + movi B8TCYC_PER,a2 ;*img + movi BASTC_G_P,b0,L ;*pal + calla BEGINOBJP2 + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 4,a0 ;# of passes+1 + move @tmnbr,a8 + jruc #botlp + +;top of loop + +#toplp + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L ;*img + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi 1901,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id + calla BEGINOBJ2 + + move @tmnbr,a11 ;get ptr & cnt + sll 5,a11 + addi #tm_plyr_idxcnt,a11,L + move *a11,a10,L + movx a10,a11 + zext a11 + addi #tm_plyr_headname,a11,L + + movi (HD_X+HD_DX)*2,a9 ;figure X (*2 for odd DX) + sra 16,a10 ;pull down cnt -=4 + jrn #x3 + jrz #x4 + subi HD_DX,a9 +#x4 + subi HD_DX,a9 +#x3 + sll 16-1,a9 + subk 2,a10 ;make cnt -=6 + +#hdlp + movk NAME_ID,a0 + calla obj_del1c + + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id - plate,head + clr a6 ;xvel + clr a7 ;yvel + + move a9,a0 ;x + movi [HD_Y,0],a1,L ;y + movi MUGPLAT,a2,L ;*img + movi 1900,a3 ;z + calla BEGINOBJ2 + + movi [26,0],a0,L + add a9,a0 ;x + movi [HD_Y+10,0],a1,L ;y + move *a11+,a2,L ;*img - head + addk 32,a3 ;z pos + calla BEGINOBJ2 + + move *a11+,a2,L ;*img - name + jrn #nl0 + + cmpi K_GILL,a2 + jrz #nork + movi rookie_setup,a2,L + calla setup_message + + move a9,a0 + srl 16,a0 + addi 59,a0 + move a0,@mess_cursx + + movi s_rookie,a4,L + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 +#nork + movi str_name_ptrs,a4,L ;is text string name + move *a11(-32),a2,L ;*img - name + sll 5,a2 + add a2,a4 + move *a4,a4,L ;*name + + movi str_name_setup,a2,L + calla setup_message + + movk NAME_ID,a0 + move a0,@mess_objid + calla print_string_C2 + jruc #nl1 +#nl0 + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 ;x + movi [222,0],a1,L ;y + movk NAME_ID,a5 ;id - name + calla BEGINOBJ2 +#nl1 + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + +; movi TSEC+10,a8 ;dbg + movi TSEC-10,a8 ;-20 +#wtlp1 + SLEEPK 1 + move a10,a10 + jrn #wtlp2 + calla get_all_buttons_cur2 +; jrnz #o2 ;dbg + jrnz #mksnd +#wtlp2 + dsj a8,#wtlp1 +#o2 + addi [HD_DX,0],a9,L + subk 1,a10 + jrz #done + jrnn #hdlp + addk 6,a10 + jruc #hdlp +#done + movk 15,a8 +#wtlp3 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #o3 ;dbg +; jrnz #mksnd + dsj a8,#wtlp3 +#o3 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk OBJID,a0 + calla obj_del1c + + move @tmloop,a0 + move @tmnbr,a8 + inc a8 +#botlp + cmpi NUM_TEAMS,a8 + jrlo #tmok + clr a8 +#tmok + move a8,@tmnbr + dec a0 + move a0,@tmloop +; jruc #toplp ;FOR DEBUGING + jrnz #toplp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + movi CYCPID,a0 + calla KIL1C +;; calla pal_clean + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "RO",1,-1,"ST",1,-1,"E",1,1,"RS F",1,-3,"OR '97!",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + +#tm_plyr_idxcnt + .long [5 -4, 000 *2*32] ;ATLANTA + .long [5 -4, 005 *2*32] ;BOSTON + .long [5 -4, 010 *2*32] ;CHARLOTTE + .long [5 -4, 015 *2*32] ;CHICAGO + .long [5 -4, 020 *2*32] ;CLEVLAND + .long [5 -4, 025 *2*32] ;DALLAS + .long [4 -4, 030 *2*32] ;DENVER + .long [4 -4, 034 *2*32] ;[5 -4, ;DETROIT + .long [4 -4, 038 *2*32] ;GOLDEN STATE + .long [4 -4, 042 *2*32] ;HOUSTON + .long [5 -4, 046 *2*32] ;INDIANA + .long [5 -4, 051 *2*32] ;L.A. CLIPPERS + .long [5 -4, 056 *2*32] ;L.A. LAKERS + .long [3 -4, 061 *2*32] ;MIAMI + .long [5 -4, 064 *2*32] ;MILWAUKEE + .long [3 -4, 069 *2*32] ;MINNESOTA + .long [5 -4, 072 *2*32] ;NEW JERSEY + .long [5 -4, 077 *2*32] ;NEW YORK + .long [5 -4, 082 *2*32] ;ORLANDO + .long [4 -4, 087 *2*32] ;[5 -4, ;PHILADELPHIA + .long [5 -4, 091 *2*32] ;PHOENIX + .long [5 -4, 096 *2*32] ;PORTLAND + .long [5 -4, 101 *2*32] ;SACRAMENTO + .long [5 -4, 106 *2*32] ;SAN ANTONIO + .long [5 -4, 111 *2*32] ;SEATTLE + .long [5 -4, 116 *2*32] ;TORONTO + .long [4 -4, 121 *2*32] ;UTAH + .long [3 -4, 125 *2*32] ;VANCOUVER + .long [5 -4, 128 *2*32] ;WASHINGTON + + +#tm_plyr_headname + ;ATLANTA + .long BLY_ATL,ATLNBLA + .long MUT_DEN,DENNMUT + .long SMI_ATL,ATLNSMI + .long LAE_ATL,ATLNLAE + .long NOR_ATL,ATLNNOR + ;BOSTON + .long BRO_BOS,BOSNBRO + .long HAM_COL, HAMER ;new + .long BAR_BOS,BOSNBAR + .long RAD_BOS,BOSNRAD + .long FOX_BOS,BOSNFOX + ;CHARLOTTE + .long RCE_CHA,CHANRIC + .long MAS_NEY,NWYNMAS + .long DIV_LAK,LALNDIV + .long ZID_CHA,CHANZID + .long CUR_CHA,CHANCUR + ;CHICAGO + .long PIP_CHI,CHINPIP + .long ROD_CHI,CHINROD + .long KUK_CHI,CHINKUK + .long LON_CHI,CHINLON + .long KER_CHI,CHINKER + ;CLEVLAND + .long HIL_CLE,CLENHIL + .long MIL_CLE,CLENMIL + .long PHL_CLE,CLENPHI + .long BRA_CLE,CLENBRA + .long FER_CLE,CLENFER + ;DALLAS + .long KID_DAL,DALNKID + .long HPR_NEY,NWYNHAR + .long JAC_DAL,DALNJAC + .long MON_BOS,BOSNMON + .long MAS_DAL,DALNMAS + ;DENVER + .long MCD_DEN,DENNMcD + .long MAR_SAC,SACNMAR + .long JAC_IND,INDNJAC + .long ELL_DEN,DENNELL + ;DETROIT + .long HIL_DET,DETNHIL +;; .long RIL_COL, RILEY ;new + .long DUM_DET,DETNDUM + .long THR_DET,DETNTHO + .long AUG_ATL,ATLNAUG + ;GOLDEN STATE + .long SPR_GLD,GOLNSPR + .long KON_ORL,ORLNKON + .long SMI_GLD,GOLNSMI + .long MUL_GLD,GOLNMUL + ;HOUSTON + .long OLA_HOU,HOUNOLA + .long HAR_COL, HRNGTON ;new + .long DRX_HOU,HOUNDRE + .long WLS_GLD,GOLNWIL + ;INDIANA + .long MIL_IND,INDNMIL + .long DAM_COL, DAMPIER ;new + .long ROS_DEN,DENNROS + .long SMI_IND,INDNSMI + .long DAV_IND,INDNDAV + ;L.A. CLIPPERS + .long VAU_CLP,LACNVAU + .long ROG_CLP,LACNROG + .long MUR_CLP,LACNMUR + .long RCH_CLP,LACNRIC + .long BAR_CLP,LACNBAR + ;L.A. LAKERS + .long VAN_LAK,LALNEXE + .long CEB_LAK,LALNCEB + .long SCO_VAN,VANNSCO + .long CAM_LAK,LALNCAM + .long JON_LAK,LALNJON + ;MIAMI + .long MOU_MIA,MIANMOU + .long HRD_MIA,MIANHAR + .long DAN_MIA,MIANDAN + ;MILWAUKEE + .long BAK_MLW,MILNBAK + .long ALL_COL, ALLEN ;new + .long LNG_MIN,MINNLAN + .long ROB_MLW,MILNROB + .long RES_MLW,MILNRES + ;MINNESOTA + .long GUG_MIN,MINNGUG + .long MAR_COL, MARBURY ;new + .long GAR_MIN,MINNGAR + ;NEW JERSEY + .long GLL_NEJ, K_GILL ;fix + .long KIT_COL, KITTLES ;new + .long PAC_WAS,WASNPAC + .long BRA_NEJ,NWJNBRA + .long OBA_NEJ,NWJNOBA + ;NEW YORK + .long EWG_NEY,NWYNEWI + .long WAL_COL, WALLACE ;new + .long JON_CHA,CHANJOH + .long STA_NEY,NWYNSTA + .long HOU_DET,DETNHOU + ;ORLANDO + .long HAR_ORL,ORLNHAR + .long SKL_GLD,GOLNSEI + .long GRT_ORL,ORLNGRA + .long AND_ORL,ORLNAND + .long SCO_ORL,ORLNSCO + ;PHILADELPHIA + .long IVE_COL, IVERSON ;new +;; .long MIN_COL, MINOR ;new + .long STA_PHL,PHINSTA + .long COL_PHL,PHINCOL + .long WEA_PHL,PHINWEA + ;PHOENIX + .long JOH_PHX,PHONJOH + .long TIS_PHX,PHONTIS + .long MAN_PHX,PHONMAN + .long HOR_HOU,HOUNHOR + .long CAS_HOU,HOUNCAS + ;PORTLAND + .long ROB_PRT,PORNROB + .long RID_MIN,MINNRID + .long SAB_PRT,PORNSAB + .long AND_CHA,CHANAND + .long CHI_PRT,PORNCHI + ;SACRAMENTO + .long OWE_SAC,SACNOWE + .long RAF_DEN,DENNRAU + .long RIC_SAC,SACNRIT + .long GRA_SAC,SACNGRA + .long EDN_SAC,SACNEDN + ;SAN ANTONIO + .long ELL_SAN,SANNELL + .long ROB_SAN,SANNROB + .long MAX_PHL,PHINMAX + .long JON_SAN,SANNJOH + .long DEL_SAN,SANNNEG + ;SEATTLE + .long KMP_SEA,SEANKEM + .long PAY_SEA,SEANPAY + .long SCH_SEA,SEANSCH + .long HWK_SEA,SEANHAW + .long FOR_SEA,SEANFOR + ;TORONTO + .long ROG_TOR,TORNROG + .long CAM_COL, CAMBY ;new + .long STO_TOR,TORNSTO + .long JON_DAL,DALNJON + .long WIL_MIA,MIANWIL + ;UTAH + .long STK_UTA,UTANSTO + .long MLN_UTA,UTANMAL + .long HRN_UTA,UTANHOR + .long MOR_UTA,UTANMOR + ;VANCOUVER + .long ANT_VAN,VANNANT + .long EDW_VAN,VANNEDW + .long REV_VAN,VANNREE + ;WASHINGTON + .long STR_PRT,PORNSTR + .long WEB_WAS,WASNWEB + .long HWD_WAS,WASNHOW + .long MUR_WAS,WASNMUR + .long CHE_WAS,WASNCHE + +; Removed +;DALNMcC,DETNMIL,HOUNSMI,INDNMcK,MIANCHA,MILNBEN,MILNDOU,MINNWEB +;NWJNGIL,NWJNEDW,NWYNOAK,PHINRUF,PHONPER,PHONFIN,PORNWIL,SANNPER +;TORNROB,TORNMIL,TORNMUR,UTANBEN,VANNSCO,VANNMUR + + +s_allen + .string "Ray Allen",0 +s_camby + .string "Marcus Camby",0 +s_dampier + .string "Eric Dampier",0 +s_hamer + .string "Steve Hamer",0 +s_harrington + .string "Othella Harrington",0 +s_iverson + .string "Allen Iverson",0 +s_kittles + .string "Kerry Kittles",0 +s_marbury + .string "Stephon Marbury",0 +s_minor + .string "Ryan Minor",0 +s_riley + .string "Ron Riley",0 +s_wallace + .string "John Wallace",0 + +s_gill + .string "Kendall Gill",0 + +s_rookie + .string "Rookie",0 + .even + +rookie_setup + PRINT_STR bast8tcyc_ascii,8,0,200,HD_Y+6,BASTC_G_P,0 + +str_name_setup + PRINT_STR bast18_ascii,8,0,200,213,BST18W_P,0 + +str_name_ptrs + .long 0 + .long s_allen,s_camby,s_dampier,s_hamer + .long s_harrington,s_iverson,s_kittles,s_marbury + .long s_minor,s_riley,s_wallace + .long s_gill + +;DJT End + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** +;DJT Start + .if TRIVCON + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + .endif ;TRIVCON +;DJT End + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/XCODE100L/AUDIT.ASM b/BACKUP/XCODE100L/AUDIT.ASM new file mode 100644 index 0000000..0576316 --- /dev/null +++ b/BACKUP/XCODE100L/AUDIT.ASM @@ -0,0 +1,3544 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + +;DJT Start + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + JSRP getcoin +; callr getcoin +;DJT End + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + +;DJT Start + JSRP getcoin +; callr getcoin +;DJT End + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .if OPERMES + .ref opmsg_clr + calla opmsg_clr + .endif ;OPERMES +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start +; .byte "MAX HANGTIME - VER M1.0 9/04/96",0 ;Last 8K CMOS v# + .byte "MAX HANGTIME - VER L1.0 11/08/96",0 ;Last dedicated v# +;DJT End + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrne gc1 + .ref tuneend_snd + SOUND1 tuneend_snd + SLEEPK 1 +; movi ACTIVE,a0,L +; move *a0(PROCID),a0 +; cmpi GRANDCHAMP_PID,a0 +; jrne gc1 +; .ref hangtime_snd +; SOUND1 hangtime_snd +gc1 + SOUND1 coin_snd + RETP +; movi coin_snd,a0 +; jauc snd_play1 +;DJT End + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/XCODE100L/AUDIT.EQU b/BACKUP/XCODE100L/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/XCODE100L/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/XCODE100L/BAKGND.ASM b/BACKUP/XCODE100L/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/XCODE100L/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/XCODE100L/BB.ASM b/BACKUP/XCODE100L/BB.ASM new file mode 100644 index 0000000..ad2c085 --- /dev/null +++ b/BACKUP/XCODE100L/BB.ASM @@ -0,0 +1,3576 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP +;DJT Start +; .ref QSNDRST +;DJT End + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H +;DJT Start +;.ref removed +;DJT End +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT +;DJT Start + .ref RD7FONT +;DJT End + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST +;DJT Start +;DJT .refs removed +;DJT End + .ref OBJOFF,OBJON,pal_getf +;DJT Start + .ref BGND_UD1 +;DJT End + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased +;DJT Start +;DJT .ref moved down +;DJT End + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 +;DJT Start + BSSX names ,32*NUMPLYRS ;plyr name *imgs -MUST PRECEED + BSSX original_names ,32*NUMPLYRS ;plyr name *imgs -MUST FOLLOW +;DJT End + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + +;DJT Start + .ref passfudge + .ref ballpnum + move @passfudge,a0 + jrle #fok + subk 1,a0 + move a0,@passfudge + jrnz #fok + move @ballpnum,a14 + jrnn #fok + move a0,@ballprcv_p,L + .if DEBUG + LOCKUP + .endif ;DEBUG +#fok +;DJT End + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + +;DJT Start + move @SOUNDSUP,a0 + PUSH a0 + clr a0 + move a0,@SOUNDSUP + .ref tuneend_snd + SOUND1 tuneend_snd + PULL a0 + move a0,@SOUNDSUP + +;DJT End + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + +;DJT Start + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + move @GAMSTATE,a1 + movi INPLYRINFO,a0 ;>START button lock-out + move a0,@GAMSTATE + subk INAMODE,a1 + jrne #notnew + + calla display_blank + calla WIPEOUT + clr a0 + move a0,@dtype ;2D + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + movk 1,a0 ;page flipping on + move a0,@dpageflip + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + .ref setup_message,print_string_C2,mess_objid + movi #maxstr_setup,a2,L + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #maxstr,a4,L + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + SLEEPK 5 + + .ref rim_fire_snd ;combo_lock1 + SOUND1 rim_fire_snd + .ref max_hngtm_sp + SOUND1 max_hngtm_sp + .ref tm_fire_tune + SOUND1 tm_fire_tune + + .ref flash_bigtxt3 + CREATE CYCPID,flash_bigtxt3 + + SLEEP 20 + movi ((31*32)+31)*32+31,a0 + move a0,@IRQSKYE + SLEEPK 4 + clr a0 + move a0,@IRQSKYE +#notnew + movk ININTRO,a0 + move a0,@GAMSTATE + +;DJT End + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay +;DJT Start + .ref ballnumscored,balltmshotcnt,hotspot_count + move a0,@ballnumscored + move a0,@balltmshotcnt + move a0,@hotspot_count+00,L + move a0,@hotspot_count+32,L +;DJT End + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;DJT Start +;;;; .ref security_chk +;DJT End +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names +;DJT Start +;DJT ops removed to set_names +;DJT End + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main +;DJT Start + .ref plyr_showhotspots + CREATE0 plyr_showhotspots +;DJT End + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;DJT Start +#maxstr_setup + .ref brush50_ascii,BRSH50R_P + PRINT_STR brush50_ascii,24,0,200,100,BRSH50R_P,0 +#maxstr + .string "MAXIMUM!",0 + .even + +;DJT End +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + +;DJT Start + .ref t1ispro,t2ispro + move @t1ispro,a14 + jrnn #smkn + move @t2ispro,a14 + jrn #notsmkn +#smkn + .ref do_smkn + CREATE0 do_smkn +;; .ref thr_smkn_sp +;; SOUND1 thr_smkn_sp + jruc #smksmk +#notsmkn + SLEEP 35 + SOUND1 heres_tip_sp +#smksmk +;DJT End + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) +;DJT Start + + .ref col_name_ptrs +;DJT End + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + +;DJT Start + clr a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + +;DJT Start + movk 1,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + +;DJT Start + movk 2,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + +;DJT Start + movk 3,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + +;DJT Start +;-------------------- +; A0=player # (0-3) +;Destroys A1-A4,A14 + + SUBR plyrname_fix + + sll 5,a0 + + movi #pnfix_t,a1,L + add a0,a1 + move *a1,a1,L ;Get *(name *obj) + move *a1,a1,L ;Get name *obj + move *a1(OFLAGS),a2 + andni M_CHARGEN+M_PIXSCAN,a2 ;Clear chargen flags + + .ref plyr_data_tbl + movi plyr_data_tbl,a3,L + add a0,a3 + move *a3,a3,L ;Get *playerN_data + + move *a3(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrz #tag1cp + + movi names,a3,L + add a0,a3 + move *a3,a14,L ;College player? + jrn #tag1a ; br=no + move *a3(32*NUMPLYRS),a3,L ;Get college *name + addi M_CHARGEN+M_PIXSCAN,a2,W ;Set char_gen flags + jruc #tag1b +#tag1cp + addi PR_NAME1,a3,W ;Yes. Chk validity of name + move *a3,a14 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a4 +#tag1lp + move *a3+,a14 + cmpi END_CHAR,a14,W ;In range? No if > + jrhi #tag1a + dsj a4,#tag1lp + subi NAME_LETTERS*16,a3,W ;Reset ptr + addi M_CHARGEN,a2,W ;Set char_gen flags +#tag1b + move a3,*a1(ODATA_p),L ;Save char_gen *name + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X +#tag1a + move a2,*a1(OFLAGS) + + srl 5,a0 + rets + +#pnfix_t + .long P1DATA+ply_meter_imgs + .long P2DATA+ply_meter_imgs + .long P3DATA+ply_meter_imgs + .long P4DATA+ply_meter_imgs + +;DJT End + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + +;DJT Start + movi player_names,a10 + move @team1,a2 + jrz #out +#lp + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads,a14 ;Do plyr 1 + jrn #not_spec1 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + move a1,a1 ;College player? + jrn #notcol1 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol1 + move a1,@original_names,L + + move @special_heads+16,a14 ;Do plyr 2 + jrn #not_spec2 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + move a2,a2 ;College player? + jrn #notcol2 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol2 + move a2,@original_names+32,L +; +;Team 2 +; + movi player_names,a10 + move @team2,a2 + jrz #out2 +#lp2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp2 +#out2 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads+32,a14 ;Do plyr 3 + jrn #not_spec3 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + move a1,a1 ;College player? + jrn #notcol3 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol3 + move a1,@original_names+64,L + + move @special_heads+48,a14 ;Do plyr 4 + jrn #not_spec4 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + move a2,a2 ;College player? + jrn #notcol4 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol4 + move a2,@original_names+96,L + + rets +;DJT End + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/XCODE100L/BB.CMD b/BACKUP/XCODE100L/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/XCODE100L/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/XCODE100L/BB2.ASM b/BACKUP/XCODE100L/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/XCODE100L/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/XCODE100L/BB3.ASM b/BACKUP/XCODE100L/BB3.ASM new file mode 100644 index 0000000..792a6e7 --- /dev/null +++ b/BACKUP/XCODE100L/BB3.ASM @@ -0,0 +1,3683 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR +;DJT Start + .def HOTblu,HOTgrn,HOTyel,HOTred +;DJT End + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t +;DJT Start + .ref setup_message,print_string_C2 + .ref bast8_ascii +;DJT End + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + +;DJT Start + .asg 0,MSG_ABABALL ;Flag bit# - ABA ball msg + .asg 1,MSG_OUTDOOR ;Flag bit# - outdoor court msg + .asg 2,MSG_SPECIAL ;Flag bit# - special msg + + BSSX pup_msgs,32 ;Matchup screen pup message flags + +;DJT End + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT Start + cmpi CHAN1F_01,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT End + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + +;DJT Start + move @P1CTRL,a0 + xor a0,a8 + sll 32-7,a8 + jrz #no1 + move a0,a8 + sll 32-7,a8 + srl 32-7,a8 +#no1 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a8 + move a8,*A13(STKREL_P1) + srl 8,a0 + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-7,a9 + jrz #no2 + move a0,a9 + sll 32-7,a9 + srl 32-7,a9 +#no2 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a9 + move a9,*A13(STKREL_P2) + srl 8,a0 + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-7,a10 + jrz #no3 + move a0,a10 + sll 32-7,a10 + srl 32-7,a10 +#no3 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a10 + move a10,*A13(STKREL_P3) + srl 8,a0 + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-7,a11 + jrz #no4 + move a0,a11 + sll 32-7,a11 + srl 32-7,a11 +#no4 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a11 + move a11,*A13(STKREL_P4) + srl 8,a0 + move a0,a11 +;DJT End + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper +;DJT Start + .long sp_showhotspot +;DJT End + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +;DJT andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + +;DJT Start + movi lock_cmbo_snds,a11 + jruc pupsnd +;DJT moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT flash_backdrop moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN,#lp,1 + WAITSWITCH_DWN JOY_DOWN_LEFT,#lp,1 + WAITSWITCH_DWN JOY_LEFT,#lp,1 + WAITSWITCH_DWN JOY_UP_LEFT,#lp,1 + +;a9=0-3 for player + movi pwrup_snds,a11 + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupflash +;DJT End + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + +;DJT Start + jruc pupflash + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_showhotspot + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_UP,#lp,1 + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + +;a9=0-3 for player + .ref pup_showhotspots + move @pup_showhotspots,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_showhotspots + + movi pwrup_snds,a11 + jruc pupflash + +;DJT End +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_LEFT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_DOWN,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,#lp,0 + WAITSWITCH_DWN BUT_SHOOT,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash + +;; clr a3 +;; movi msg_nodrift_setup,a2,L +;; movi msg_nodrift,a4,L +;; movi pwrup_snds,a11 +;; +;; jruc pupmsg +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + +;DJT Start + movk 1<"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/XCODE100L/BBSEC.EQU b/BACKUP/XCODE100L/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/XCODE100L/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/XCODE100L/CHANGES.DOC b/BACKUP/XCODE100L/CHANGES.DOC new file mode 100644 index 0000000..f3bcd69 --- /dev/null +++ b/BACKUP/XCODE100L/CHANGES.DOC @@ -0,0 +1,121 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.1 -> M1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + 4) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.2 -> L1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums + +M1.2 -> M1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums diff --git a/BACKUP/XCODE100L/COMBOS.DOC b/BACKUP/XCODE100L/COMBOS.DOC new file mode 100644 index 0000000..e103c2d --- /dev/null +++ b/BACKUP/XCODE100L/COMBOS.DOC @@ -0,0 +1,55 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + u+S,u+S - Show hotspots + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/XCODE100L/DIAG.ASM b/BACKUP/XCODE100L/DIAG.ASM new file mode 100644 index 0000000..bea3aa6 --- /dev/null +++ b/BACKUP/XCODE100L/DIAG.ASM @@ -0,0 +1,6041 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 470,a2 ; Real Game Number (Maximum Hangtime) + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >7b58 +CKSUM2 .equ >aff6 +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/XCODE100L/DIPSW.EQU b/BACKUP/XCODE100L/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/XCODE100L/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/XCODE100L/DISP.EQU b/BACKUP/XCODE100L/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/XCODE100L/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/XCODE100L/DRONE.ASM b/BACKUP/XCODE100L/DRONE.ASM new file mode 100644 index 0000000..56eaa88 --- /dev/null +++ b/BACKUP/XCODE100L/DRONE.ASM @@ -0,0 +1,2456 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + +;DJT Start + PUSH a3,a4,a7,a8,a9,a13 +;DJT End + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L +;DJT Start + move *a13(PA9),a9,L +;DJT End + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense +;DJT Start +; .if 0 + move @PSTATUS,a0 + move *a13(plyr_num),a8 + btst a8,a0 + jrnz #df + movk 1,a14 + xor a8,a14 + btst a14,a0 + jrnz #df + srl 1,a14 + sll 4,a14 + neg a14 + .ref t1ispro + addi t1ispro+16,a14,L + movi 8,a8 ;TSEC*2 ;!!! + move *a14,a14 + jrn #df + jrp #dd + movi 12,a8 ;TSEC*4 ;!!! +#dd + CREATE0 drone_mean + move a0,a8 + movi TSEC*3,a0,W ;!!! + callr rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a8(PTIME) +#df +; .endif ;0 +;DJT End + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + +;DJT Start + clr a0 + move a0,*a9(pld_d_nastycnt) + + movi 190,a0 + move a0,*a9(pld_d_grddist) +;DJT End + + movk 4,a0 + callr rndrng0 + addk 5,a0 +;DJT Start + move a0,*a9(pld_d_lowsecagr) ;5-9 +;DJT End + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + +;DJT Start + PULL a3,a4,a7,a8,a9,a13 + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + SUBR drone_mean + + move a8,*a9(pld_d_nastycnt) + DIE + + .asg CZMID,Z +#seek_t + .word -350,Z-220, -310,Z-220, -270,Z-150, -150,Z-150 + .word 0,Z + .word -350,Z+220, -310,Z+220, -270,Z+150, -150,Z+150 + +; .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 +; .word 0,Z +; .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 +;DJT End + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1, 0, 0 + .word 0 + .word 0, 1, 1, 2, 2 + .word 3, 3, 4, 4, 5 + .word 5, 6, 6, 6, 7 + +;DJT Start +#min_t .byte -13,-10,-8, -7,-7,-6, -6,-5,-5, -5,-5,-5 +;#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro +;DJT Start + .byte -6,-6,-5, -5,-4,-4, -4,-3,-3, -2,-2,-1 +; .byte -8,-7,-6, -6,-5,-5, -5,-4,-4, -4,-3,-4 +;DJT End +;; .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte 5, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 2 ;ATL 11 + TMDIFF ;BOS 21 + .byte 5,-3,-3, -3,-2,-2, -2,-1,-1, -1, 0,-1 ;CHA 16 + .byte 12, 9, 10, 12,10,11, 12,13,14, 16,16,16 ;CHI 1 + .byte 6, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 ;CLE 10 + TMDIFF ;DAL 25 + .byte 5,-5,-4, -4,-4,-3, -3,-3,-3, -2,-2,-2 ;DEN 20 + .byte 5,-1, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1 ;DET 12 + .byte 5,-4,-4, -4,-4,-3, -3,-3,-2, -2,-2,-1 ;GOL 19 + .byte 5, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 4 ;HOU 8 + .byte 5, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 5 ;IND 7 + TMDIFF ;LAC 23 + .byte 5, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 6 ;LAL 6 + .byte 5,-2,-2, -1,-1, 0, 0, 0, 1, 1, 1, 0 ;MI 14 + TMDIFF ;MIL 26 + TMDIFF ;MIN 24 + TMDIFF ;NJ 22 + .byte 5, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 3 ;NY 9 + .byte 8, 6, 6, 7, 7, 7, 8, 8, 9, 9,10, 9 ;ORL 3 + TMDIFF ;PHI 28 + .byte 5,-3,-2, -2,-1,-1, -1, 0, 0, 0, 1, 0 ;PHX 15 + .byte 5,-2,-1, -1, 0, 0, 0, 1, 1, 1, 2, 2 ;POR 13 + .byte 5,-4,-4, -4,-3,-3, -3,-2,-2, -2,-1,-1 ;SAC 18 + .byte 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 7 ;SAN 4 + .byte 7, 7, 8, 8, 8, 9, 9, 9,10, 10,11,10 ;SEA 2 + TMDIFF ;TOR 27 + .byte 8, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 6 ;UTA 5 + TMDIFF ;VAN 29 + .byte 4,-4,-3, -3,-3,-2, -2,-2,-1, -1,-1,-1 ;WAS 17 + +;; .byte 6,-3,-1, -3,-2,-3, -2,-2,-2, -1, 0,-1 ;ATL 11 +;; TMDIFF ;BOS 21 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA 16 +;; .byte 6, 7, 7, 8, 9, 9, 10,10,11, 11,13,12 ;CHI 1 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE 10 +;; TMDIFF ;DAL 25 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN 20 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET 12 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL 19 +;; .byte -1,-1, 0, 1, 1, 1, 2, 2, 2, 3, 4, 3 ;HOU 8 +;; .byte -4,-3,-3, -2,-1,-1, 0, 0, 0, 1, 2, 1 ;IND 7 +;; TMDIFF ;LAC 23 +;; .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0, 1, 0 ;LAL 6 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI 14 +;; TMDIFF ;MIL 26 +;; TMDIFF ;MIN 24 +;; TMDIFF ;NJ 22 +;; .byte -3,-2,-2, -1, 0, 0, 1, 1, 1, 2, 3, 2 ;NY 9 +;; .byte 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 8, 7 ;ORL 3 +;; TMDIFF ;PHI 28 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX 15 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR 13 +;; .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC 18 +;; .byte 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 4 ;SAN 4 +;; .byte 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 8 ;SEA 2 +;; TMDIFF ;TOR 27 +;; .byte 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 5 ;UTA 5 +;; TMDIFF ;VAN 29 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS 17 +;DJT End + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/XCODE100L/GAME.EQU b/BACKUP/XCODE100L/GAME.EQU new file mode 100644 index 0000000..8e02252 --- /dev/null +++ b/BACKUP/XCODE100L/GAME.EQU @@ -0,0 +1,815 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +;NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 + +;DJT Start +;DEFAULT_HIT_PTS equ 40 +DEFAULT_HIT_PTS equ 36 ;Initial attribute pts. +;DJT End + +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +;DJT Start +NUM_ISPRO equ 7 ;after 7 wins +NUM_ISCHAMP equ 24 ;after 24 wins +;DJT End +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire +;DJT Start + + .asg 2,HOTSPOT_MINCNT ;Min # hotspot shots before active + .asg 800,HOTSPOT_SHTPER ;Active hotspot shot % increase +;DJT End + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h +;DJT Start + +GRANDCHAMP_PID .equ 4500h ;Grand Champ PID +;DJT End + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/XCODE100L/GSP.EQU b/BACKUP/XCODE100L/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/XCODE100L/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/XCODE100L/HSTD.ASM b/BACKUP/XCODE100L/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/XCODE100L/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/XCODE100L/IMGFIND.CMD b/BACKUP/XCODE100L/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/XCODE100L/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/XCODE100L/LINK.EQU b/BACKUP/XCODE100L/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/XCODE100L/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/XCODE100L/MACROS.HDR b/BACKUP/XCODE100L/MACROS.HDR new file mode 100644 index 0000000..099afa7 --- /dev/null +++ b/BACKUP/XCODE100L/MACROS.HDR @@ -0,0 +1,765 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend +;DJT Start +;;not MOVE @ROLLING_COUNT,A1 +;;used! INC A1 +;; MOVE A1,@ROLLING_COUNT +;DJT End + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/XCODE100L/MAKE.INI b/BACKUP/XCODE100L/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/XCODE100L/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/XCODE100L/MAKEFILE b/BACKUP/XCODE100L/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/XCODE100L/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/XCODE100L/MAKEPLR.ASM b/BACKUP/XCODE100L/MAKEPLR.ASM new file mode 100644 index 0000000..aaa82cb --- /dev/null +++ b/BACKUP/XCODE100L/MAKEPLR.ASM @@ -0,0 +1,3488 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype +;DJT Start + + .ref get_but_val_cur_mkplr + .ref get_but_val_down_mkplr + .ref get_stick_val_cur_mkplr + .ref get_stick_val_down_mkplr + +;DJT End + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P +;DJT Start + .ref homeaway_cur +;DJT End + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + SUBR design_player_proc_amode + + jruc gpn_1 ;Procs always wake up with A0=0! + +;DJT End + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points +;DJT Start + movk 4,a0 ;6 +;DJT End + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 +;DJT Start + cmpi 60,a1 ;Smart drone minimum +;DJT End + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal +;DJT Start + SOUND1 homeaway_cur +;DJT End + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz loop0 +;DJT End + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr +;DJT End + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC +;DJT Start + calla get_but_val_cur_mkplr +;DJT End + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + +;DJT Start + movi player1_data,a6,L + move a6,*a13(PC_DATADDR),L ;start of player data + clr a10 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrnz #chkrecs + .ref gpr_no_match + calla gpr_no_match + jruc #nonewrec +#chkrecs + calla get_player_record +#nonewrec +;DJT End + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100L/MAKEPLR2.ASM b/BACKUP/XCODE100L/MAKEPLR2.ASM new file mode 100644 index 0000000..bf48a60 --- /dev/null +++ b/BACKUP/XCODE100L/MAKEPLR2.ASM @@ -0,0 +1,2972 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq cnl_1b ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne cnl_1a ; br=not AMODE CREATE PLAYER +cnl_1b +;DJT End + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/XCODE100L/MAKEVDA.BAT b/BACKUP/XCODE100L/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/XCODE100L/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/XCODE100L/MENU.ASM b/BACKUP/XCODE100L/MENU.ASM new file mode 100644 index 0000000..ac9cbc3 --- /dev/null +++ b/BACKUP/XCODE100L/MENU.ASM @@ -0,0 +1,8319 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM +;DJT Start +; .ref snd_reset + .ref QSNDRST +;DJT End + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 +;DJT Start +; .ref set_volume_amode_diag +;DJT End +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .if OPERMES + .ref opmsg_main + .LONG opmsg_s,opmsg_main,OPMSG_HELP + .endif ;OPERMES +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start + .if OPERMES + .WORD 6 ;# of ENTRIES + .else ;OPERMES + .WORD 5 ;# of ENTRIES + .endif ;OPERMES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start + .if OPERMES + .long opmsg_s + .endif ;OPERMES +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +;DJT Start + .if OPERMES +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + .endif ;OPERMES +;DJT End + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +;DJT Start + .if OPERMES +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + .endif ;OPERMES +;DJT End + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100L/MENU.EQU b/BACKUP/XCODE100L/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/XCODE100L/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/XCODE100L/MPROC.ASM b/BACKUP/XCODE100L/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/XCODE100L/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/XCODE100L/MPROC.EQU b/BACKUP/XCODE100L/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/XCODE100L/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/XCODE100L/NDSP1.ASM b/BACKUP/XCODE100L/NDSP1.ASM new file mode 100644 index 0000000..63e3ae6 --- /dev/null +++ b/BACKUP/XCODE100L/NDSP1.ASM @@ -0,0 +1,4041 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img +;DJT Start + .asg 12,NULL_MAXLEN +;DJT End + + SUBR char_gen + +;DJT Start + move *a0(ODATA_p),a11,L ;Get *plyrname +;DJT End + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L +;DJT Start + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +;DJT End +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS +;DJT Start + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz dma_objlst ;Done if there weren't any +;DJT End + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + +;DJT Start +#* + .align + + SUBR char_gen_2d + + move *a0(ODATA_p),a11,L ;Get *plyrname + movi >1000100,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz nxt_2dobj ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle nxt_2dobj + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc nxt_2dobj ;Reenter obj loop + +;DJT End + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS +;DJT Start + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen_2d + +;DJT End + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +;DJT Start + +nxt_2dobj +;DJT End +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets +;DJT Start + .endif +;DJT End + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + +;DJT Start + .endif +;DJT End + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 +;DJT Start + .endif +;DJT End + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 +;DJT Start + .endif +;DJT End + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets +;DJT Start + .endif +;DJT End + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/XCODE100L/NEWLUP.DOC b/BACKUP/XCODE100L/NEWLUP.DOC new file mode 100644 index 0000000..37e7fca --- /dev/null +++ b/BACKUP/XCODE100L/NEWLUP.DOC @@ -0,0 +1,97 @@ +( ALTANTA HAWKS ) ( DETROIT ) ( MILWAUKEE ) + +BLAYLOCK, mookie HILL, grant BAKER, vin +MUTUMBO, dekembe RILEY, ron ALLEN, ray +SMITH, steve DUMARS, joe LANG, andrew +LAETNER, christian THORPE, otis ROBINSON, glen +NORMAN, ken AUGMON, stacey RESPERT, shawn + + +( BOSTON ) ( GOLDEN STATE ) ( MINNESOTTA ) + +BROWN, dee SPREWELL, latrell GUGLIOTTA, tom +HAMER, steve SEIKALY, rony MARBURY, stephon +BARROS, dana SMITH, joe GARNETT, kevin +RADJA, dino MULLIN, chris +FOX, rick + + +( CHARLOTTE ) ( HOUSTON ) ( NEW JERSEY ) + +RICE, glen OLAJUWAN, hakeem GILL, kendall +MASON, anthony HARRINGTON, othella KITTLES, kerry +DIVAC, vlade DREXLER, clyde PACK, robert +ZIDEK, george WILLIS, kevin BRADLEY, shawn +CURRY, del O'BANNON, ed + + +( CHICAGO ) ( INDIANA ) ( NEW YORK ) + +PIPPEN, scottie MILLER, reggie EWING, patrick +RODMAN, dennis DAMPIER, erick WALLACE, john +KUKOC, toni ROSE, jalen JOHNSON, larry +LONGLEY, luke SMITS, rik STARKS, john +KERR, steve DAVIS, dale HOUSTON, allan + + +( CLEVELAND ) ( CLIPPERS ) ( ORLANDO ) + +HILL, tyrone VAUGHT, loy HARDAWAY, anfernee +MILLS, chris ROGERS, rodney GRANT, horace +PHILLS, bobby MURRAY, lamond ANDERSON, nick +BRANDON, terrell RICHARDSON, pooh SCOTT, dennis +FERRY, danny BARRY, brent KONCAK, jon + + +( DALLAS ) ( LAKERS ) ( PHILADELPHIA ) + +KIDD, jason VAN EXEL, nick IVERSON, allen +HARPER, derek CEBALLOS, cedric MINOR, ryan +JACKSON, jim SCOTT, byron STACKHOUSE, jerry +MONTROSS, eric CAMPBELL, elden COLEMAN, derrick +MASHBURN, jamal JONES, eddie WEATHERSPOON,clarence + + +( DENVER ) ( MIAMI ) ( PHOENIX ) + +McDYESS, antonio MOURNING, alonzo JOHNSON, kevin +MARCIULIONIS,sarunas HARDAWAY, tim TISDALE, wayman +JACKSON, mark DANILOVIC, sasha MANNING, danny +ELLIS, dale HORRY, robert + CASSELL, sam + +( PORTLAND ) ( TORONTO ) + +ROBINSON, cliff ROGERS, carlos +RIDER, isaiah CAMBY, marcus +SABONIS, arvydas STOUDAMIRE, damon +ANDERSON, kenny JONES, popeye +CHILDRESS, randolph WILLIAMS, walt + + +( SACRAMENTO ) ( UTAH ) + +OWENS, billy STOCKTON, john +ABDUL-RAUF, mahmoud MALONE, karl +RICHMOND, mitch HORNACEK, jeff +GRANT, brian MORRIS, chris +EDNEY, tyus + + +( SAN ANTONIO ) ( VANCOUVER ) + +ELLIOTT, sean ANTHONY, greg +ROBINSON, david EDWARDS, blue +MAXWELL, vernon REEVES, bryant +JOHNSON, avery +DEL NEGRO, vinny + + +( SEATTLE ) ( WASHINGTON ) + +KEMP, shawn STRICKLAND, rod +PAYTON, gary WEBBER, chris +SCHREMPF, detlef HOWARD, juwan +HAWKINS, hersey MURESAN, gheorge +FORD, sherell CHEANEY, calbert + diff --git a/BACKUP/XCODE100L/PAL.ASM b/BACKUP/XCODE100L/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/XCODE100L/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/XCODE100L/PATCH.ASM b/BACKUP/XCODE100L/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/XCODE100L/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/XCODE100L/PLYR.ASM b/BACKUP/XCODE100L/PLYR.ASM new file mode 100644 index 0000000..84fa788 --- /dev/null +++ b/BACKUP/XCODE100L/PLYR.ASM @@ -0,0 +1,12338 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +;DJT Start + .asg 15,HOTSPOTX_RNG + .asg 22,HOTSPOTZ_RNG + +;DJT End +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper +;DJT Start + move a0,@pup_showhotspots +;DJT End + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + +;DJT Start +;DJT made showhotspots work in tourney-mode +;DJT End + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal +;DJT Start +; move a0,@pup_strongmen ;Grand champion playing flag + +; movk 1,a2 + clr a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set1 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #ck1 +#set1 + addk 1,a3 +#ck1 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set2 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #easy0 +#set2 + addk 2,a3 +#easy0 + move a3,@pup_strongmen ;Grand champion playing flag + +; jruc #easy + +#nea +;DJT End + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) +;DJT Start + + move *a7(PAT_HOTSPOT),a0 ;Hotspot + sll 5,a0 + addi hotspot_xz_t,a0,L + move *a0+,a14 + cmpi NUMPLYRS/2,a11 + jrlt #hs_px + subi WRLDMID,a14 + neg a14 + addi WRLDMID,a14 +#hs_px + move a14,*a13(plyr_hotspotx) + move *a0,a14 + move a14,*a13(plyr_hotspotz) +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 + + movk 1100b,a2 ;Team2 wants to + movk 0011b,a3 ; chk team1 + cmpi 2,a11 + jrhs #chktm + movk 0011b,a2 ;Team1 wants to + movk 1100b,a3 ; chk team2 +#chktm + clr a0 ;Drone skill if human or human tm + and a1,a2 + jrnz #setskl ; br=is human or human tm + + move *a7(PAT_SKILL),a0 ;Drone skill if drone team + and a1,a3 + jrz #setskl ; br=other team is also all drones! + + clr a2 + clr a3 + clr a4 + + movk 2,a14 + xor a11,a14 + btst a14,a1 + jrz #noth1 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a5 ;- if no entry + or a5,a2 ;Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball +;DJT Start +; move @pup_strongmen,a1 +; jrz #notchamp ; br=no grand champs in game +;;A grand champion is playing! +; move *a13(plyr_num),a0 +; srl 1,a0 ; =team # (0,1) +; addk 1,a0 ; =team # (1,2) +; and a0,a1 +; jrz #notchamp ; br=plyr not on a grand champ team +; movi 900,a0 ;### +; calla RNDPER +; jrhi #keepball +; +;#notchamp +;DJT End + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 +;DJT Start +;; +;;show hotspot when plyr runs across +;;; move @pup_showhotspots,a0 ;Bit 0-3 on = show plyr 0-3 hotspots +;;; btst ,a0 +;;; jrz #hsnoshow +;; move *a13(plyr_hotspotx),a1 +;; sub a4,a1 +;; abs a1 +;; subk HOTSPOTX_RNG,a1 +;; jrnn #hsnoshow +;; move *a13(plyr_hotspotz),a1 +;; sub a5,a1 +;; abs a1 +;; subk HOTSPOTZ_RNG,a1 +;; jrnn #hsnoshow +;; PUSH a1,a7,a14 +;; .ref show_hotspot_plyr_coor +;; CREATE0 show_hotspot_plyr_coor +;; move a13,*a0(PA10),L +;; PULL a1,a7,a14 +;; +;;#hsnoshow +;DJT End + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + +;DJT Start + .def hotspot_xz_t,hotspot_xz_tend + +hotspot_xz_t + .word WRLDMID+>17c,CZMID->82 + .word WRLDMID+>148,CZMID->82 + .word WRLDMID+>0d8,CZMID->80 + .word WRLDMID+>110,CZMID->7c + .word WRLDMID+>084,CZMID->7a + .word WRLDMID+>0ac,CZMID->60 + .word WRLDMID+>088,CZMID->40 + .word WRLDMID+>0d4,CZMID->40 + .word WRLDMID+>07c,CZMID->14 + .word WRLDMID+>0a4,CZMID+>00 + .word WRLDMID+>082,CZMID+>26 + .word WRLDMID+>0d4,CZMID+>48 + .word WRLDMID+>098,CZMID+>56 + .word WRLDMID+>0b6,CZMID+>7c + .word WRLDMID+>090,CZMID+>90 + .word WRLDMID+>0dc,CZMID+>98 + .word WRLDMID+>11c,CZMID+>ae + .word WRLDMID+>0b0,CZMID+>b8 + .word WRLDMID+>148,CZMID+>ba + .word WRLDMID+>0f6,CZMID+>ca + .word WRLDMID+>17c,CZMID+>be +hotspot_xz_tend + +NUM_HOTSPOTS .equ (hotspot_xz_tend-hotspot_xz_t)/32 + .def NUM_HOTSPOTS + +;DJT End + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + +;DJT Start + clr a14 + move a14,*a13(plyr_hotspotf) ;Clr hotspot jump flag + move a14,*a13(plyr_hotspotp) ;Clr hotspot shot % +;DJT End + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + +;DJT Start + move *a8(OXPOS),a0 ;Chk hotspot X + move *a8(OXANI+16),a14 + add a14,a0 + move *a13(plyr_hotspotx),a14 + sub a14,a0 + abs a0 + subk HOTSPOTX_RNG,a0 + jrnn #hsnoshow + + move *a8(OZPOS),a0 ;Chk hotspot Z + move *a13(plyr_hotspotz),a14 + sub a14,a0 + abs a0 + subk HOTSPOTZ_RNG,a0 + jrnn #hsnoshow + +;Shooter is on his hotspot! +;Do ball smoke puff + movk 1,a14 + move a14,*a13(plyr_hotspotf) ;Set hotspot jump flag + +#hsnoshow +;DJT End + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + +;DJT Start + move @plyr_onfire,a14 ;Do on-fire shot snd? + btst a0,a14 + jrnz #fire ; br=on-fire + move *a13(plyr_hotspotp),a14 ;Do sound for hotspot shot? + jrz #cold ; br=no + move a0,a14 ;Chk hotspot shot cnt + sll 4,a14 + .ref hotspot_count + addi hotspot_count,a14 + move *a14,a14 + subk HOTSPOT_MINCNT,a14 + jrlt #cold ; br=hotspot not active yet +#fire + SOUND1 fball_snd +;DJT End +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor +;DJT Start + movk 15,a0 ;12 ;14 ;15 ;!!! ;% factor +;DJT End + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire +;DJT Start + move *a13(plyr_hotspotp),a14 ;Add any hotspot shot% bump + add a14,a9 +;DJT End + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly +;DJT Start + movi 800,a9 ;!!! ;Base shot % for layup +; movi 850,a9 ;!!! ;Base shot % for layup +;DJT End +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 +;DJT Start + subk 2,a1 +;DJT End + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk +;DJT Start + movi 600,a9 ;!!! ;Base shot % for hook +; movi 700,a9 ;!!! ;Base shot % for hook +;DJT End + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +;DJT Start + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 + jrz #hkck + +; jruc #hkck +; addk 2,a4 ;8 + + move @HCOUNT,a14 + btst 0,a14 + jrz #hko + subk 10,a4 + jruc #hko + +#hkck +;DJT End + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat +;DJT Start +;;Shouldn't need to do this here +;; move *a13(plyr_num),a14 +;; movk 1,a1 +;; sll a14,a1 +;; move @pup_showhotspots,a0 +;; andn a1,a0 +;; move a0,@pup_showhotspots +;DJT End + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + +;Don't reattach to my lobbed pass + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + +;DJT Start + .ref firstbskt,t1ispro,t2ispro + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + subk 7,a0 + jrn #qcap + clr a0 +#qcap + addk 7,a0 +;DJT End + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + +;DJT Start +; movi 6*TSEC+10-70+60-20,a11 +; CREATE0 scr1 +;DJT End + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob +;DJT Start + move @plyr_onfire,a0 + jrnz #nodrnfr + move @t1ispro,a0 + jrnz #chk2 ; br=tm1 not champ level + move @PSTATUS,a14 + andi >C,a14 + jrz #drnfr +#chk2 + move @t2ispro,a0 + jrnz #nodrnfr ; br=tm2 not champ level + move @PSTATUS,a14 + andi 3,a14 + jrnz #nodrnfr +#drnfr + subk 1,a0 + move a0,@firstbskt +;;not .ref do_smkn +;;here CREATE0 do_smkn +#nodrnfr +;DJT End + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + +;DJT Start + movi 3*TSEC+10+30,a11 + move @gmqrtr,a0 + subk 4,a0 + jrn #no_ot + movi 6*TSEC+10-70+60-20,a11 +#no_ot + CREATE0 scr1 +; CREATE0 score_showtvpanel2 +;DJT End + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/XCODE100L/PLYR.EQU b/BACKUP/XCODE100L/PLYR.EQU new file mode 100644 index 0000000..f8722dc --- /dev/null +++ b/BACKUP/XCODE100L/PLYR.EQU @@ -0,0 +1,377 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; +;DJT Start + STRUCTPD ;92 Words max +;DJT End + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X +;DJT Start + WORD plyr_hotspotp ;Plyrs hotspot shot % + WORD plyr_hotspotf ;Plyrs hotspot jump flag + WORD plyr_hotspotx ;Plyrs hotspot X + WORD plyr_hotspotz ;Plyrs hotspot z + APTR plyr_hotspot_p ;Plyrs hotspot *proc +;DJT End + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat +;DJT Start + WORD PAT_HOTSPOT ;Player hotspot # +;DJT End + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 diff --git a/BACKUP/XCODE100L/PLYR2.ASM b/BACKUP/XCODE100L/PLYR2.ASM new file mode 100644 index 0000000..3825d3b --- /dev/null +++ b/BACKUP/XCODE100L/PLYR2.ASM @@ -0,0 +1,6437 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + +;DJT Start + BSSX t1ispro ,16 ;= - regular, + pro, 0 champ + BSSX t2ispro ,16 + +;DJT End + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + +;DJT Start + BSSX hotspot_count ,16*NUMPLYRS ;Plyrs hotspot shot cnt +;DJT End + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + +;DJT original_names removed +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt +;DJT Start + move a0,@brick_count,L + move a0,@brick_count+20h,L +;DJT End + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored +;DJT Start + BSSX firstbskt ,16 + move a0,@firstbskt +;DJT End + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + +;DJT Start + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + + move *a8(OXVEL),a1,L + cmpi LFTCRT_X,a6 ;Chk left X limit + jrlt #xlow + cmpi RGTCRT_X,a6 ;Chk right X limit + jrle #xok + + move a1,a1 + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad +#xlow + move a1,a1 + jrp #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel +#xbad + .asg 5,PASSFUDGECNT + BSSX passfudge,16 + + move @ballprcv_p,a1,L + jrz #xnop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#xnop +;DJT End + move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + +;DJT removed + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +;DJT Start +#zbad + move @ballprcv_p,a1,L + jrz #znop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#znop +;DJT End + move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;DJT Start +;---------- +; Do hotspot count + + move @ballpnumshot,a0 + move a0,a1 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_hotspotf),a0 ;Chk hotspot jump flag + jrz #nohs ; br=not made from hotspot + sll 4,a1 + addi hotspot_count,a1 ;Inc hotspot shot cnt + move *a1,a0 + inc a0 + move a0,*a1 + subk HOTSPOT_MINCNT,a0 + jrne #nohs + .ref got_hspot_sp + SOUND1 got_hspot_sp +#nohs + +;DJT End +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored +;DJT Start + + move @firstbskt,a14 + move a0,@firstbskt + jrnn #nodrnfr + + move a0,a14 ;Get opposition tNispro value + srl 1,a14 + sll 4,a14 + neg a14 + addi t1ispro+16,a14 + move *a14,a14 ;Are they pro or champ? + jrn #nodrnfr ; br=no + + move a0,a1 ;Set last scoring plyr # + movk ONFIRE_MINCNT-1,a4 ;Set # times last plyr scored + move a0,a5 ;Set last team-shot scored (0=tm2,32=tm1) + srl 1,a5 + subk 1,a5 + jrz #drnfr + movk 32,a5 +#drnfr + movk TMFIRE_MINCNT-1,a7 ;Set # times last team-shot scored +#nodrnfr +;DJT End + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + + +;DJT Start + + addk 3,a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 + + cmpi BLOCKREJ_SEQ,a14 + jrz #higher_bally + cmpi FASTBLOCKREJ_SEQ,a14 + jrnz #reg_bally + +#higher_bally + addi 20,a0 + +#reg_bally + + +; move *a11(OPLINK),a14,L +; move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + +;DJT Start + .word 0,0,0,0,0,0,0,100,130,170 +tkdnk_t .word 200 + .word 300,400,600,800,800,999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1,a2 + + move *a14(plyr_num),a2 ;A2=Plyr# of guy dunking + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;A0=Power of guy dunking + move @pup_maxpower,a1 + btst a2,a1 + jrz #nochng ; br=not max power + movk 9,a0 ;Max power! Can't take ball! +#nochng + move *a11(OPLINK),a14,L + move *a14(plyr_num),a2 ;A2=Plyr# of guy taking ball + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;A14=Power of guy taking ball + cmpi 4,a14 + jrle #nxt0z ; br=power can't take ball! + +;If taker is a drone team & dunker is a pro player, +; allow more blocked dunks! + + srl 1,a2 ;Start with plyr# 0 or 2 + sll 1,a2 + move @PSTATUS,a1 + btst a2,a1 + jrnz #notdrns ; br=not a drone + addk 1,a2 ;Chk plyr# 1 or 3 + btst a2,a1 + jrnz #notdrns ; br=teammate not a drone + srl 1,a2 + sll 4,a2 + neg a2 + addi t1ispro+16,a2,L ;Chk dunker team ispro + move *a2,a2 + jrnn #dnkpro ; br=dunker is a pro/champ +#notdrns + move @HCOUNT,a1 ;Cut blocked dunks in half! + btst 0,a1 + jrz #nxt0z ; br=no block +#dnkpro + sub a14,a0 ;A0=Dunkpwr-Takepwr; -10...10 + sll 4,a0 + addi tkdnk_t,a0,L + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1,a2 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1,a2 +;DJT End +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + +;DJT Start + move @tvpanelon,a0 ;Kill bogus "stolen!" if just scored + .if DEBUG + jrz #dorej + LOCKUP +#dorej + .endif ;DEBUG + jrnz #giveball + +;DJT End + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +;DJT Start + .if DEBUG +; LOCKUP + .endif ;DEBUG +;DJT End +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 +;DJT Start + jrne #notrcvr ;The receiver has it? No if != + move *a3(plyr_seq),a0 + cmpi ALLEYOOP1_SEQ,a0 ;Is it an oop? + jrlo #rcvok + cmpi ALLEYOOP14_SEQ,a0 ;Is it an oop? + jrhi #rcvok + .ref aly_rcv_snd + movi aly_rcv_snd,a0,L + calla snd_play1 + jruc #rcvok + +#notrcvr +;DJT End + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... +;DJT Start + movi 600,a0 ;% for alley intercept + jruc #nxtck1 +; addi 75,a14 ;25 ;Alley oop steal power! +;DJT End +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 +;DJT Start +#nxtck1 +;DJT End + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej +;DJT removed + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +;DJT Start +; .if DEBUG +; move @ballpnum,a14 +; jrnn #nxt +; move *a8(OYPOS),a0 +; move *a8(OSIZEY),a1 +; addk 1,a1 +; add a1,a0 +; jrn #nxt +; LOCKUP +; .endif ;DEBUG + nop + nop +;DJT End +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; .ref show_hotspot_plyr_coor +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + .ref pup_showhotspots + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @tvpanelon,a1,L ;Get tvpanel status + + move @plyr_onfire,a0 ;Chk if on-fire + btst a14,a0 + jrz #notfire ; br=shooter not on fire + + move *a13(plyr_hotspotf),a0 ;On fire. Chk hotspot jump flag + jrnz #fchkhs ; br=from hotspot + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else forget it + jruc #nofire + +#fchkhs + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + jrz #fhoths ; br=1st hotspot shot + subk HOTSPOT_MINCNT,a0 + jrlt #fnohs ; br=hotspot not active yet +#fhoths + movi HOTSPOT_SHTPER,a0 ;Active hotspot! Bump shot% + move a0,*a13(plyr_hotspotp) +#fnohs + .ref hs_shot_snd + SOUND1 hs_shot_snd ;Do hotspot sound + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else do the disc +#dodisc + move *a13(plyr_hotspot_p),a0,L ;Plyr hotspot proc exist? + jrnz #disc + .ref show_hotspot_plyr_coor + CREATE0 show_hotspot_plyr_coor + move a13,*a0(PA10),L + jruc #nofire +#disc + .ref update_hotspot_plyr_coor + calla update_hotspot_plyr_coor + jruc #nofire + +#notfire + move *a13(plyr_hotspotf),a0 ;No fire. Chk hotspot jump flag + jrz #nofire ; br=not from hotspot + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + cmpi HOTSPOT_MINCNT,a0,W + jrge #fhoths ; br=hotspot hot shot! + movk 1,a1 ;Set to do disc only + move a0,a0 ;1st hotspot shot? + jrz #fhoths ; br=yes + jruc #fnohs ;Just do disc & sound + +#dofire + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + +;DJT Start +;If a swat sequence, allow greater y vel + + move *a13(plyr_seq),a3 + cmpi BLOCKREJ_SEQ,a3 + jrz #higher_vel + cmpi FASTBLOCKREJ_SEQ,a3 + jrnz #reg_vel +#higher_vel + movk 24,a4 +#reg_vel +;DJT End + + + + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time +;DJT Start +;Chk if ball has just hit rim +;Let player jump higher in this time if close to rim + move @in_cylinder,a14 + subk 5,a14 + jrlt #normin + + move *a13(plyr_hpdist),a0 + cmpi 100,a0 + jrge #normin + + cmpi ->3c000,a1 + jrlt #minok + .if DEBUG + LOCKUP + .endif ;DEBUG + movi ->3c000,a1 ;Min + jruc #minok +#normin +;DJT End + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 +;DJT Start + move *a13(plyr_seq),a6 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher + +;If a block rej seq, allow this higher jump +;Allow this for winning team also + + cmpi BLOCKREJ_SEQ,a6 + jrz #higher + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher + cmpi ->4b200,a1 ;Let him jump higher + jrgt #maxok + movi ->4b200,a1 + jruc #maxok +#higher + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#losing +; cmpi ->4b700,a1 ;Let him jump higher + +;If a block rej seq, allow this higher jump +;Do this for winning team also + cmpi BLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 + jruc #maxok +#higher_j + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 +;DJT End +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire ; br=shooter not on fire + + move @tvpanelon,a0,L + jrnz #nofire ; br=don't bog out + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 +;DJT Start + jrz #xz2n + move *a5(plyr_num),a14 + move @PSTATUS,a1 + btst a14,a1 ;Is pushee a human doing a layup? + jrz #xz2 ; br=no, do normal + move *a13(plyr_num),a14 + btst a14,a1 ;Is pusher a drone? + jrz #skpck ; br=yes, always succeed with push! + jruc #xz2 ;Do normal +#xz2n +;DJT End + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/XCODE100L/PLYR3.ASM b/BACKUP/XCODE100L/PLYR3.ASM new file mode 100644 index 0000000..1ba4aea --- /dev/null +++ b/BACKUP/XCODE100L/PLYR3.ASM @@ -0,0 +1,4167 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + +;DJT Start + .ref game_time +;DJT End + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +;DJT Start + .def CBANI_T +CBANI_T +;DJT End +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +;DJT Start +#******************************* +* Shot hotspots powerup + + .ref ballpnum,pup_showhotspots,amodeloop + + SUBR plyr_showhotspots + + SLEEPK 8 ;Wait for things to init + + movi pup_showhotspots,a11,L ;Ptr for checking the pup + +;;; move @GAMSTATE,a14 +;;; subk INAMODE,a14 +;;; jrnz #nam +;;; jrz amode_showhotspots ;!!! +;;; move @amodeloop,a14 +;;; andi 3,a14 +;;; subk 3,a14 +;;; jrz amode_showhotspots +;;;#nam + + .if HOTSPOT + move @plyrproc_t,a10,L + .ref hotspot_xz_t + movi hotspot_xz_t,a9,L +#s1 + move *a9(0),*a10(plyr_hotspotx) ;hotspot X + move *a9(16),*a10(plyr_hotspotz) ;hotspot Z + CREATE0 show_hotspot_proc_coor + SLEEPK 1 + addk 32,a9 + .ref hotspot_xz_tend + cmpi hotspot_xz_tend,a9,L + jrnz #s1 +#s99 + .endif + .if DEBUG + movk >f,a14 + move a14,*a11 + .endif + move *a11,a14 ;Any players have it enabled? + jaz SUCIDE ; br=no + +#lpclr + movi -1,a8 ;Plyr# thats showing hotspot +#lp + SLEEPK 4 + move @game_time,a14,L ;Die for sure at end of 1st qrtr + jrz #kill_showhotspot + + move @ballpnum,a6 ;Anyone have the ball? + jrnn #chkplyr ; br=yes + move a8,a8 ;Need to kill a show? + jrn #lp ; br=no show going +#kill + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) + jruc #lpclr + +#chkplyr + cmp a6,a8 ;Is a show going? + jrne #noshow ; br=not for this guy anyway + move *a11,a14 ;Is plyr pup still active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #kill ; br=this plyr isn't + movk 2,a14 ;Keep plyr hotspot active + move a14,*a9(PA11) + jruc #lp + +#noshow + move a8,a8 ;Need to kill a show? + jrn #newplyr ; br=no show going + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) +#newplyr + move *a11,a14 ;Is plyr pup active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #lpclr ; br=this plyr isn't + + move a6,a8 ;Set up a new show + sll 5,a6 + addi plyrproc_t,a6,L + move *a6,a10,L ;Get plyr *proc + .if DEBUG + .ref CLOCK_OFF + move @CLOCK_OFF,a14 + jrz #t99 + move *a10(plyr_hotspot_p),a14,L + move a14,a9 + jrnz #lp +#t99 + .endif + CREATE0 show_hotspot_proc_coor + move a0,a9 + jruc #lp + +#kill_showhotspot + + DIE + +;;;#* +;;; .asg CLSDEAD|555,CLSHSM +;;; +;;; SUBRP amode_showhotspots +;;; +;;; move *a11,a14 ;Any players have it enabled? +;;; jaz SUCIDE ; br=no +;;; +;;; movi #hsmes,a9,L +;;; clr a10 +;;; clr a3 +;;; movi >8000|M_NOCOLL|M_3D|M_NOSCALE,a4 +;;; movi CLSHSM,a5 +;;; clr a0 +;;; clr a6 +;;; clr a7 +;;;#mkhsm +;;; move *a9+,a2,L +;;; jrz #lpclr +;;; clr a1 +;;; PUSH a0 +;;; calla BEGINOBJ2 +;;; PULL a0 +;;; move *a8(OSIZEX),a14 +;;; sll 16,a14 +;;; add a14,a0 +;;; movi 50,a14 ;stupid K!!! +;;; move a14,*a8(OMISC) ;save Z offset +;;; move a10,*a8(ODATA_p),L ;Link the obj list +;;; move a8,a10 +;;; jruc #mkhsm +;;; +;;;#lpclr +;;; movi -1,a8 ;Plyr# thats showing hotspot +;;;#lp +;;; SLEEPK 4 +;;; move @game_time,a14,L ;Die for sure at end of 1st qrtr +;;; jrz #kill_showhotspot +;;; +;;; move @ballpnum,a6 ;Anyone have the ball? +;;; jrnn #chkplyr ; br=yes +;;; move a8,a8 ;Need to kill a show? +;;; jrn #lp ; br=no show going +;;;#kill +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#kill1 +;;; move a10,a0 +;;;#khsm +;;; move *a0(OCTRL),a14 ;Turn off hotspot msg +;;; andni 3,a14 +;;; move a14,*a0(OCTRL) +;;; move *a0(ODATA_p),a0,L +;;; jrnz #khsm +;;; jruc #lpclr +;;; +;;;#chkplyr +;;; move a8,a14 ;Is a hotspot showing? +;;; jrn #nohsm ; br=no +;;; sll 5,a14 +;;; addi plyrproc_t,a14,L ;Get plyr hotspot *obj +;;; move *a14,a14,L +;;; move *a14(plyr_hotspot_p),a14,L +;;; jrz #nohsm +;;; move *a14(PA8),a14,L +;;; +;;; move *a14(OXVAL),a0,L ;Get hotspot coords +;;; move *a14(OYVAL),a1,L +;;; move *a14(OZVAL),a2,L +;;; subk 10,a1 +;;; move a10,a3 +;;; move *a3(OXVAL),a5,L +;;;#mhsm +;;; move *a3(OXVAL),a4,L +;;; sub a5,a0 +;;; add a4,a0 +;;; move a4,a5 +;;; move a0,*a3(OXVAL),L ;Move hotspot msg +;;; move a1,*a3(OYVAL),L +;;; move a2,*a3(OZVAL),L +;;; move *a3(ODATA_p),a3,L +;;; jrnz #mhsm +;;;#nohsm +;;; cmp a6,a8 ;Is a show going? +;;; jrne #noshow ; br=not for this guy anyway +;;; move *a11,a14 ;Is plyr pup still active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill ; br=this plyr isn't +;;; movk 2,a14 ;Keep plyr hotspot active +;;; move a14,*a9(PA11) +;;; jruc #lp +;;; +;;;#noshow +;;; move a8,a8 ;Need to kill a show? +;;; jrn #newplyr ; br=no show going +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#newplyr +;;; move *a11,a14 ;Is plyr pup active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill1 ;lpclr ; br=this plyr isn't +;;; +;;; move a6,a8 ;Set up a new show +;;; sll 5,a6 +;;; addi plyrproc_t,a6,L +;;; move a10,a5 +;;; move *a6,a10,L ;Get plyr *proc +;;; CREATE0 show_hotspot_proc_coor +;;; move a0,a9 +;;; move a5,a10 +;;;#ahsm +;;; move *a5(OCTRL),a14 ;Turn on hotspot msg +;;; ori 2,a14 +;;; move a14,*a5(OCTRL) +;;; move *a5(ODATA_p),a5,L +;;; jrnz #ahsm +;;; jruc #lp +;;; +;;;#kill_showhotspot +;;; movi CLSHSM,a0 +;;; calla obj_del1c +;;; +;;; DIE +;;; +;;; .ref B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;;;#hsmes +;;; .long B8TCYC_H +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long B8TCYC_S +;;; .long B8TCYC_P +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long 0 + + +#******************************* +* Hotspot disc under feet +* A10=*Plyr process + + SUBR show_hotspot_proc_coor + + move *a10(plyr_hotspotx),a0 ;hotspot X + move *a10(plyr_hotspotz),a3 ;hotspot Z + jruc #dospot + + SUBR show_hotspot_plyr_coor + + move *a10(plyr_num),a8 ;Get plyr *obj + sll 5,a8 + addi plyrobj_t,a8,L + move *a8,a8,L + + move *a8(OZPOS),a3 ;hotspot Z + + move *a10(plyr_shadobj_p),a8,L + + move *a8(OXPOS),a0 ;hotspot X + move *a8(OXANI+16),a2 + add a2,a0 + +#dospot + sll 16,a0 + subi 50,a3 + + clr a1 ;hotspot Y + + move *a10(plyr_num),a11 + sll 5,a11 + addi #hotspot_t,a11,L + .ref TWOPLAYERS + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + addi #2p_t-#hotspot_t,a11 +#nkit + move *a11,a11,L ;Get hotspot pal ptr + movi #hotspot_ani,a9,L ;Starting *ani + + move a11,b0 + move *a9+,a2,L + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJP2 + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + move a13,*a10(plyr_hotspot_p),L ;give plyr proc access + + movk 3,a11 ;!!! timeout counter +#lp + SLEEPK 1 + + move @game_time,a14,L + jrz kill_hotspot + move *a9+,a0,L + jrnz #lp1 + movi #hotspot_ani,a9,L ;Starting *ani + move *a9+,a0,L + move @HALT,A14 + jrnz #lp1 + .if DEBUG + move @CLOCK_OFF,a14 + jrnz #lp1 + .endif + subk 1,a11 + jrz kill_hotspot +#lp1 + move *a0(IANIOFFX),*a8(OXANI+16) + move *a8(OCTRL),a1 + calla obj_aniq_cnoff + jruc #lp + +kill_hotspot + clr a14 + move a14,*a10(plyr_hotspot_p),L ;kill plyr proc access + jauc DELOBJDIE + +;-------------------- +* A13=*Plyr process +*Trashes A0,A14 + + SUBR update_hotspot_plyr_coor + + move *a13(plyr_hotspot_p),a0,L ;get plyr hotspot *proc + + movk 3,a14 ;!!! Reset timeout counter + move a14,*a0(PA11),L + + rets + + + .ref HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P +#hotspot_t + .long HOTC_B_P,HOTC_G_P + .long HOTC_Y_P,HOTC_R_P +#2p_t + .long HOTC_B_P,HOTC_B_P + .long HOTC_R_P,HOTC_R_P + +#hotspot_ani + .long HOTCRC01 + .long HOTCRC02 + .long HOTCRC03 + .long HOTCRC04 + .long HOTCRC05 + .long HOTCRC06 + .long HOTCRC07 + .long HOTCRC08 + .long HOTCRC09 + .long HOTCRC10 + .long HOTCRC11 + .long HOTCRC12 + .long HOTCRC13 + .long HOTCRC12 + .long HOTCRC11 + .long HOTCRC10 + .long HOTCRC09 + .long HOTCRC08 + .long HOTCRC07 + .long HOTCRC06 + .long HOTCRC05 + .long HOTCRC04 + .long HOTCRC03 + .long HOTCRC02 + .long 0 + +;; move *a10(plyr_shadobj_p),a8,L +;; +;; move *a8(OXANI+16),a1 ;X +;; move *a8(OXPOS),a0 +;; add a1,a0 +;; addi 14,a0 +;; sll 16,a0 +;; +;; clr a1 ;Y +;; +;; move *a8(OZPOS),a3 ;Z +;; addi 22h,a3 +;; +;; move *a10(plyr_num),a9 +;; sll 6,a9 +;; addi #hotspot_disc_t,a9,L +;; .ref TWOPLAYERS +;; move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players +;; jrz #nkit +;; addi 2p_hd_t-hotspot_disc_t,a9 +;;#nkit +;; move *a9+,a2,L ;Get hotspot img ptr +;; move *a9,a9,L ;Get cycle RAM ptr +;; move *a2(ICMAP),a11,L ;Get img *pal +;; +;; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +;; movi CLSDEAD,a5 +;; clr a6 +;; clr a7 +;; calla BEGINOBJ2 +;; move a8,*a13(PDATA),L ;Save *obj +;; +;; move a11,a8 ;Get obj *pal +;; movi [1,15],a10 ;1st,last color +;; movk 2,a11 ;Rate +;; CREATE CYCPID,COLCYC +;; move a0,a11 ;Save *proc +;; +;; movi 50,a0 ;!!! Stupid K +;;#lp +;; calla PRCSLP +;; movk 1,a0 +;; .ref game_time +;; move @game_time,a14,L +;; jrz kill_hotspot +;; move @HALT,A14 +;; jrnz #lp +;; +;;kill_hotspot +;; move a11,a0 ;Get *proc & kill it +;; calla KILL +;; +;; move *a13(PDATA),a8,L ;Get *obj & kill it +;; jauc DELOBJDIE +;; +;; +;; .bss spotcycram1,15*2*16 ;Palette cycle mem +;; .bss spotcycram2,15*2*16 +;; .bss spotcycram3,15*2*16 +;; .bss spotcycram4,15*2*16 +;; +;;#hotspot_disc_t +;; .ref HOTblu,HOTgrn,HOTyel,HOTred +;; .long HOTblu,spotcycram1,HOTgrn,spotcycram2 +;; .long HOTyel,spotcycram3,HOTred,spotcycram4 +;;#2p_hd_t +;; .long HOTblu,spotcycram1,HOTblu,spotcycram2 +;; .long HOTred,spotcycram3,HOTred,spotcycram4 + +;DJT End +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) +;DJT Start +#no + move @PSTATUS,a14 + btst a11,a14 + jrnz #conta +;Jumpball player is not in game +;Check teammate 0 or 3 + movk 1,a0 + xor a11,a0 + btst a0,a14 + jrnz #getbut +;drone + srl 1,a0 + sll 4,a0 + neg a0 + .ref t1ispro + addi t1ispro+16,a0,L + move *a0,a14 + movi 190,a0 ;!!! regular + move a14,a14 + jrn #drnchk + movi 260,a0 ;!!! pro + move a14,a14 + jrp #drnchk + movi 390,a0 ;!!! champ +#drnchk +;DJT End + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/XCODE100L/PLYRAT.ASM b/BACKUP/XCODE100L/PLYRAT.ASM new file mode 100644 index 0000000..cba4123 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRAT.ASM @@ -0,0 +1,2422 @@ +;DJT Start whole file changed!! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm +;DJT Start + .ref marbry_h + .ref allen_h + .ref camb_h + .ref damp_h + .ref dun_h + .ref ham_h + .ref harr_h + .ref iversn_h + .ref kit_h + .ref minr_h + .ref rily_h + .ref wal_h + +;DJT End + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h + .ref jon_h +;DJT Start + .ref heithb_h + .ref mattb_h + .ref madball_h + +;DJT End +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,512 + BSSX created_plyr3_attrib_tables,512 + BSSX created_plyr4_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ATL_t + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL5 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9,0 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +ATL_tend + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL5 + .long Mutumbo_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL5 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6,19 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL5 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8,11 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL5 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2,4 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +BOST_t + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL5 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2,18 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P +;new + LWWWWWW scale69f_t,BV6,SHT7,DNK5,DEF7,SDEF3,DSKL5 + .long HAM_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,ham_h + .word 6,7,1,14 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL5 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5,8 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL5 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL5 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7,9 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHAR_t + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL5 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,14 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL5 + .long MASON_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Mason_h + .word 4,9,6,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL5 + .long divac_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Divac_h + .word 6,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL5 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL5 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,6 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF5,DSKL5 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,12 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10,13 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2,18 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL5 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL5 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2,1 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL5 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL5 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8,11 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DAL_t + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL5 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DHARP_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,DHarper_h + .word 5,5,5,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL5 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL5 + .long MONTRO_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Montross_h + .word 3,8,3,14 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL5 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9,10 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEN_t + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL5 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7,20 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long MARCIU_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Marciulonis_h + .word 2,5,7,17 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL5 + .long MJACKS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,MJackson_h + .word 9,4,4,11 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,16 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P +;kill + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,4 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DET_t + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,15 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;new +;; LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF5,SDEF7,DSKL5 +;; .long RILY_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,rily_h +;; .word 6,3,2,19 +;; .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL5 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL5 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;kill + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +GOLD_t + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL5 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8,10 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL5 + .long KONCAK_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Koncak_h + .word 3,6,2,17 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL5 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL5 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8,11 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +;kill + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4,0 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL5 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,0 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;new + LWWWWWW scale610f_t,BV4,SHT4,DNK6,DEF8,SDEF2,DSKL5 + .long HARR_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,harr_h + .word 4,9,2,5 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL5 + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8,3 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Willis_h + .word 1,9,4,18 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;kill (MAYBE!!!) +;Kenny Smith + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL5 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9,6 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P +;new + LWWWWWW scale610f_t,BV4,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long DAMP_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,damp_h + .word 4,8,2,5 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL5 + .long ROSE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Rose_h + .word 8,4,9,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL5 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL5 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL5 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL5 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5,19 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL5 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL5 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT6,DNK9,DEF4,SDEF6,DSKL5 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,5,8,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL5 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL5 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8,0 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Scott_h + .word 4,4,9,14 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL5 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL5 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MIAMI_t + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL5 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,15 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6,5 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL5 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL5 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,2 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL5 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P +;new + LWWWWWW scale65t_t,BV9,SHT8,DNK6,DEF2,SDEF6,DSKL5 + .long ALLEN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,allen_h + .word 5,2,8,11 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL5 + .long Lang_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Lang_h + .word 2,8,4,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL5 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL5 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MINN_t + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3,1 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;new + LWWWWWW scale62t_t,BV8,SHT8,DNK5,DEF3,SDEF7,DSKL5 + .long MARBRY_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,marbry_h + .word 6,4,3,13 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL5 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3,18 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL5 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P +;new + LWWWWWW scale69t_t,BV6,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long KIT_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,kit_h + .word 5,6,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL5 + .long PACK_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Pack_h + .word 9,3,2,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL5 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4,19 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL5 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8,14 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL5 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8,20 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +;new + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF7,SDEF4,DSKL5 + .long WAL_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,wal_h + .word 5,7,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL5 + .long johnson_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,LJohnson_h + .word 7,8,8,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL5 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL5 + .long HOUSTO_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Houston_h + .word 5,1,7,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL5 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10,14 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL5 + .long shiek_f, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Seikaly_h + .word 4,8,4,0 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL5 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4,12 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL5 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4,7 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHIL_t +;new + LWWWWWW scale60t_t,BV9,SHT9,DNK0,DEF1,SDEF9,DSKL5 + .long IVER_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,iversn_h + .word 7,3,6,5 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;new +;; LWWWWWW scale65_t,BV6,SHT8,DNK6,DEF4,SDEF6,DSKL5 +;; .long MINR_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,minr_h +;; .word 7,5,2,12 +;; .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL5 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,8 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL5 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2,11 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;kill + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL5 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9,17 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL5 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL5 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6,5 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL5 + .long HORRY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Horry_h + .word 5,6,9,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL5 + .long CASSEL_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Cassel_h + .word 6,1,2,16 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PORT_t + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL5 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,1 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale65f_t,BV7,SHT5,DNK9,DEF1,SDEF4,DSKL5 + .long RIDER_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Rider_h + .word 2,4,6,10 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL5 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4,15 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL5 + .long K_AND_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,KAnderson_h + .word 9,3,6,3 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL5 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8,11 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL5 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6,11 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale61_t,BV8,SHT8,DNK0,DEF1,SDEF8,DSKL5 + .long RAUF_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rauf_h + .word 8,2,9,0 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL5 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL5 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL5 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL5 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL5 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL5 + .long VMAX_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,VMaxwell_h + .word 6,4,4,3 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL5 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2,13 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL5 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,5 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL5 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL5 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2,14 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL5 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7,0 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL5 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4,1 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL5 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1,0 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +;new + LWWWWWW scale610t_t,BV7,SHT8,DNK8,DEF9,SDEF4,DSKL5 + .long CAMB_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,camb_h + .word 5,7,7,9 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL5 + .long PJONES_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Pjones_h + .word 3,8,3,5 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wwilliams_h + .word 6,6,3,3 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL5 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,18 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL5 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL5 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2,9 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P +;kill + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL5 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,3 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL5 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL5 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7,11 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL5 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2,16 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL5 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL5 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,4 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +WASH_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL5 + .long STRICK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Strickland_h + .word 10,3,6,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL5 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8,9 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8,15 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8,0 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8,6 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8,11 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8,18 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8,14 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT9,DNK9,DEF8,SDEF9,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,9,9,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8,12 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8,13 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8,1 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7,17 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7,16 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + + LWWWWWW scale66f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jon_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ZIRIN + + LWWWWWW scale64t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long HEITH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,heithb_h + .word 6,6,6,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEITH BETTLEMAN + + LWWWWWW scale511t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MATT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mattb_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + + LWWWWWW scale511et_t,BV7,SHT8,DNK3,DEF6,SDEF7,DSKL5 + .long MADBAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,madball_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + +;FIXX!!! +;Superstar special guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,0 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8,5 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,3 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,5 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEM + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,12 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8,12 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,9 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4,3 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,0 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,14 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,15 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;New Superstar special guests removed from teams + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2,11 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;G. MCCLOUD + + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;T. MILLS + + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,19 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;K. SMITH + + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3,10 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;D. MCKEE + + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;R. CHAPMAN + + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1,13 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;B. BENJAMIN + + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3,18 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;S. DOUGLAS + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,9 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;S. WEBB + + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;A. GILLIAM + + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;K. EDWARDS + + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;C. OAKLEY + + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4,14 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;T. RUFFIN + + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9,20 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;W. PERSON + + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9,19 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;M. FINLEY + + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4,19 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;B. WILLIAMS + + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;C. PERSON + + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;A. ROBERTSON + + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2,14 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;O. MILLER + + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;T. MURRAY + + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,12 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;D. BENOIT + + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;B. SCOTT + + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,17 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;E. MURDOCK + + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5,0 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5,0 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7,0 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5,0 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4,0 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +**************************************************************** + + .end diff --git a/BACKUP/XCODE100L/PLYRAT2.ASM b/BACKUP/XCODE100L/PLYRAT2.ASM new file mode 100644 index 0000000..f793242 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRAT2.ASM @@ -0,0 +1,668 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;DJT Start +;hotspot + move *a0(PR_PIN_NBR1),a2 + move *a0(PR_PIN_NBR2),a14 + add a14,a2 + move *a0(PR_PIN_NBR3),a14 + add a14,a2 + move *a0(PR_PIN_NBR4),a14 + add a14,a2 + move *a0(PR_WON),a14 + add a14,a2 + movk 1010b,a14 + xor a14,a2 + .ref NUM_HOTSPOTS + movi NUM_HOTSPOTS,a14 + modu a14,a2 + move a2,*a1(PAT_HOTSPOT),W ;write data to array + +;DJT End +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end diff --git a/BACKUP/XCODE100L/PLYRAT3.ASM b/BACKUP/XCODE100L/PLYRAT3.ASM new file mode 100644 index 0000000..9e3e304 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRAT3.ASM @@ -0,0 +1,556 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h +;DJT Start + + .def marbry_h + .def allen_h + .def camb_h + .def damp_h + .def dun_h + .def ham_h + .def harr_h + .def iversn_h + .def kit_h + .def minr_h + .def rily_h + .def wal_h + +;DJT End + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def jon_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h +;DJT Start + .def heithb_h + .def mattb_h + .text + +heithb_h + HDMAC2 HEITH01 +mattb_h + HDMAC2 MATT01 +;DJT End +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/XCODE100L/PLYRDSEQ.ASM b/BACKUP/XCODE100L/PLYRDSEQ.ASM new file mode 100644 index 0000000..f9619b4 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRDSEQ.ASM @@ -0,0 +1,2956 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S1SETLA5,64-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F +;DJT Start + WLW 38-10,S1SETLA4,F +;DJT End + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S2HBHLA6,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F +;DJT Start + WLW 43-10,S2HBHLA4,F +;DJT End + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S3BETLA6,76-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F +;DJT Start + WLW 42-10,S3BETLA5,F +;DJT End + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S4SETLA5,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F +;DJT Start + WLW 43-10,S4SETLA3,F +;DJT End + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S5SETLA5,65-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F +;DJT Start + WLW 38-10,S5SETLA3,F +;DJT End + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT +;DJT Start + .ref goes_flyg_sp + .ref helicptr_snd + WLL -1,seq_snd,goes_flyg_sp + WLL -1,seq_snd,helicptr_snd +;DJT End + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/XCODE100L/PLYRDSQ2.ASM b/BACKUP/XCODE100L/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100L/PLYRLSEQ.ASM b/BACKUP/XCODE100L/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/XCODE100L/PLYRRSEQ.ASM b/BACKUP/XCODE100L/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/XCODE100L/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/XCODE100L/PLYRSEQ.ASM b/BACKUP/XCODE100L/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/XCODE100L/PLYRSEQ2.ASM b/BACKUP/XCODE100L/PLYRSEQ2.ASM new file mode 100644 index 0000000..13c6e45 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRSEQ2.ASM @@ -0,0 +1,1751 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movi 50,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + addk 1,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +;DJT Start + .asg 24000h,XVEL_15 ;24000h + .asg 58000h,ZVEL_15 ;50000h + .asg 5a400h,XVEL_37 ;52000h + .asg 22000h,ZVEL_37 ;22000h + .asg 47500h,XVEL_2468 ;40D00h + .asg 49f00h,ZVEL_2468 ;43300h + +;DJT End +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/XCODE100L/PLYRSTND.ASM b/BACKUP/XCODE100L/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/XCODE100L/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/XCODE100L/QUEST.DOC b/BACKUP/XCODE100L/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/XCODE100L/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/XCODE100L/RECORD.ASM b/BACKUP/XCODE100L/RECORD.ASM new file mode 100644 index 0000000..f8b93c9 --- /dev/null +++ b/BACKUP/XCODE100L/RECORD.ASM @@ -0,0 +1,5907 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +;DJT Start +;DJT .equs not needed + + .asg 8,HISCORE_TABLES + .if TRIVCON + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TRIVCON + .if TEAMPOP + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TEAMPOP +;DJT End + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 +;DJT Start +; cmpi 69,a14 ;too many ? + cmpi 62,a14 ;too many ? +;DJT End + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no +;DJT Start +; movk 2,a9 ;2 pts. + movk 1,a9 ;1 pt. +;DJT End +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records +;DJT Start + +;Top five teams +_UTA .equ 26 +_SAN .equ 23 +_ORL .equ 18 +_SEA .equ 24 +_CHI .equ 3 +;DJT End + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +;DJT Start + SUBR gpr_no_match +;DJT End +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) +;DJT Start + .if TRIVCON + .long #method8 ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #method3 ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +;DJT Start + .if TRIVCON +;DJT End +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +;DJT Start + .if TEAMPOP +;DJT End +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + +;DJT Start + .endif ;TEAMPOP +;DJT End + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) +;DJT Start + .if TRIVCON + .long #sort_trivia_pts ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #sort_teams ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TRIVCON +;DJT End +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TEAMPOP +;DJT End +#sort_teams + calla get_teams_pop + rets +;DJT Start + .endif ;TEAMPOP +;DJT End + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 +;DJT Start + .long #hd6,#hd7,#hd8 + .if TRIVCON + .long #hd9 + .endif ;TRIVCON + .if TEAMPOP + .long #hda + .endif ;TEAMPOP + .long #hd1 +;DJT End + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 +;DJT Start + .long #hd26,#hd27,#hd28 + .if TRIVCON + .long #hd29 + .endif ;TRIVCON + .if TEAMPOP + .long #hd30 + .endif ;TEAMPOP + .long #hd21 +;DJT End + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +;DJT Start + .if TRIVCON +#hd9 .string "TRIVIA MASTERS",0 + .endif ;TRIVCON + .if TEAMPOP +#hda .string "MOST POPULAR TEAMS",0 + .endif ;TEAMPOP +;DJT End + +;DJT Start +#hd20 .string "(all stats based on 5 games minimum)",0 +;DJT End +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +;DJT Start + .if TRIVCON +#hd29 .string "(best NBA knowledge)",0 + .endif ;TRIVCON + .if TEAMPOP +#hd30 .string "(at this location)",0 + .endif ;TEAMPOP +;DJT End + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100L/REVUP.DOC b/BACKUP/XCODE100L/REVUP.DOC new file mode 100644 index 0000000..6a5a78b --- /dev/null +++ b/BACKUP/XCODE100L/REVUP.DOC @@ -0,0 +1,21 @@ +9/3/96 + + +Here is the list of the changes from NBA Hangtime version L1.1 to +version M1.2: + + 1) Grand Champion leading-space initials crash bugfix + + 2) Watchdog failure during CPU board SRAM check bugfix + + 3) Watchdog & Process KO auditing bugfix + + 4) Points per Game world record bugfix + + 5) Hi-score decimal followed by a zero display problem bugfix + + 6) "DIPSWITCH TEST SELECT" message corrected + + 7) Ball-to-player detection improved + + 8) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/BACKUP/XCODE100L/ROBO.ASM b/BACKUP/XCODE100L/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/XCODE100L/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/XCODE100L/SCORE.ASM b/BACKUP/XCODE100L/SCORE.ASM new file mode 100644 index 0000000..e6ce46a --- /dev/null +++ b/BACKUP/XCODE100L/SCORE.ASM @@ -0,0 +1,4811 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd +;DJT Start + .ref tfire_tcksnd,tfire_outsnd +;DJT End + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON +;DJT Start + .ref CWINDOW,LOWZ +;DJT End + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp +;DJT Start + callr replenish_turbo +;Mike Vinikour wants 7! + movk 8,a1 ;!!! Regular replenish factor + move @PSTATUS,a14 + btst a11,a14 ;Drone or human? + jrnz #do_r ; br=human + movk 1,a2 + xor a11,a2 + btst a2,a14 ;Drone or human teammate? + jrnz #do_r ; br=human + srl 1,a2 + sll 4,a2 + neg a2 + .ref t1ispro + addi t1ispro+16,a2,L ;Chk other team win level + move *a2,a2 + jrn #do_r ; br=novice, not many wins + movk 4,a1 ;!!! Pro replenish factor + jrp #do_r ; br=pro, many wins but not champ yet + movk 1,a1 ;!!! Champ replenish factor +#do_r + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmp a1,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr +;DJT End + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L +;DJT Start + jrn #inhr1 ; br=not college player + move *a8(OIMG),a0,L ;Default college name *img +#inhr1 +;DJT End + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + +;DJT Start +;; movb *a10(3*8),a0 ;Get mins byte +;; cmpi 3,a0 ;Time to adjust drone skills? +;; jrhs #nodaj1 ;No if >= +;; calla drone_adjskill ;Yes. Pass A0 +;;#nodaj1 +;DJT End + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg +;DJT Start + movb *a10(3*8),a0 ;Get mins byte + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +;DJT End +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 +;DJT Start + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd + jruc #nodrnfr +#noplay + .ref firstbskt,thr_smkn_sp + move @firstbskt,a0 + jrnn #nodrnfr + CREATE0 do_smkn +#nodrnfr +;DJT End + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 +;DJT Start + jruc #noplay +;DJT End + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;DJT Start +;---------- +; + + SUBR do_smkn + + movi plyrobj_t,a10,L + movi plyrproc_t,a11,L + move @PSTATUS,a14 + andi 3,a14 + jrz #tmsmk + addi 64,a10 + addi 64,a11 +#tmsmk + movi TSEC*2,a8,W ;!!! + move *a11,a9,L + move *a9(PA9),a9,L + .ref drone_mean + CREATE0 drone_mean + move a0,a2 + move *a11(32),a9,L + move *a9(PA9),a9,L + CREATE0 drone_mean + move a0,a3 + movi TSEC,a0,W ;!!! + .ref rndrng0 + calla rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a2(PTIME) + move a0,*a3(PTIME) + move a10,a9 + + movk 5,a0 + move @gmqrtr,a14 + jrz #tmsmk1 + movk 20,a0 +#tmsmk1 + calla PRCSLP + callr #tmcircs + SLEEPK 30 + SOUND1 thr_smkn_sp + SLEEPK 6 + callr #tmcircs + SLEEP 36 + callr #tmcircs + SLEEP 36 + callr #tmcircs + + DIE + +#tmcircs + .ref fire_circle,netmush_snd + move *a9,a8,L + move *a11,a10,L + CREATE0 fire_circle + move *a9(32),a8,L + move *a11(32),a10,L + CREATE0 fire_circle + SOUND1 netmush_snd + rets + +;DJT End +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +;DJT Start + movi CLSDEAD|tvid,a0 + calla obj_del1c + +;DJT End +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + +;DJT Start + movi [-9,0],a0 + move @gmqrtr,a2 + sll 5,a2 + addi qrtrt,a2 + + move @game_time,a1,L + jrnz #skip + + addi tie_eqrtrt-qrtrt,a2 + move @scores,a1 + move @scores+16,a3 + cmp a1,a3 + jrz #skip + + addi eqrtrt-tie_eqrtrt,a2 + move @gmqrtr,a3 + subk 4,a3 + jrn #skip + clr a0 +#skip + move *a2,a2,L + movi [186+45,0],a1 + movi 5002,a3 + calla BEGINOBJ2 +;DJT End + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;DJT Start +;DJT ;FIX!!! Get different snd + SOUND1 tfire_tcksnd ;warn_snd;Warn players clock is running down +;DJT End + jruc #lptick + +#clean_up +;DJT Start + SOUND1 tfire_outsnd ;Team fire done sound +;DJT End + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/XCODE100L/SCORE2.ASM b/BACKUP/XCODE100L/SCORE2.ASM new file mode 100644 index 0000000..cc689c9 --- /dev/null +++ b/BACKUP/XCODE100L/SCORE2.ASM @@ -0,0 +1,2231 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L +;DJT Start + jrn #notcol1 + .ref AUGMON + movi AUGMON,a2,L ;Default college img +#notcol1 +;DJT End + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L +;DJT Start + + movi names,a0 ;Was it a college player? + add a11,a0 + move *a0,a0,L + jrn #notcol2 ; br=no + .ref original_names + movi original_names,a0 ;Get college *name + add a11,a0 + move *a0,a0,L + move a0,*a8(ODATA_p),L + move *a8(OFLAGS),a0 ;Set obj type + addi M_CHARGEN+M_PIXSCAN,a0,W ;Set chargen flags + move a0,*a8(OFLAGS) + clr a0 + move a0,*a8(OMISC) ;Clr so char_gen calcs new X +#notcol2 +;DJT End + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/XCODE100L/SCREEN.ASM b/BACKUP/XCODE100L/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/XCODE100L/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/XCODE100L/SELECT.ASM b/BACKUP/XCODE100L/SELECT.ASM new file mode 100644 index 0000000..900db47 --- /dev/null +++ b/BACKUP/XCODE100L/SELECT.ASM @@ -0,0 +1,6432 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech +;DJT Start + .ref set_names,plyrname_fix +;DJT End + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 +;DJT Start +;DJT refs moved down to references + .ref ask_yes_no,del_yes_no_buttons +;DJT End + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + +;DJT Start +;DJT Not needed here +;DJT End + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats +;DJT ref moved down to reference +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +;DJT Start +;DJT Not needed here +;DJT End + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram +;DJT Start + move @tm1_cur_pos,a2 +;DJT End + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd1 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_1 +#ju1 + subk 1,a2 + jrnn #jd1 + movk NUM_TEAMS-1,a2 +#jd1 + subk NUM_TEAMS,a2 + jrn #rj_1c + subk NUM_TEAMS,a2 +#rj_1c + addk NUM_TEAMS,a2 + move a2,@tm1_cur_pos + SOUND1 tm_sel_cur1 +;DJT End + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 +;DJT Start +;DJT stuff removed +;DJT End +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram +;DJT Start + move @tm2_cur_pos,a2 +;DJT End + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd2 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_2 +#ju2 + subk 1,a2 + jrnn #jd2 + movk NUM_TEAMS-1,a2 +#jd2 + subk NUM_TEAMS,a2 + jrn #rj_2c + subk NUM_TEAMS,a2 +#rj_2c + addk NUM_TEAMS,a2 + move a2,@tm2_cur_pos + SOUND1 tm_sel_cur2 +;DJT End + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +;DJT Start +;DJT stuff removed +;DJT End +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd +;DJT Start + SLEEP 80 ;65 +;DJT End + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + calla obj_off + move @head2_obj,a8,L + calla obj_off + jruc #do_team2 + +#valid_team1 +;DJT Start + movi player_heads,a10 + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;7 combinations * 3 heads +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + calla obj_off + move @head4_obj,a8,L + calla obj_off + jruc #x + +#valid_team2 +;DJT Start + movi player_heads,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;DJT End + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 +;DJT Start + movi player_names,a10 ;table in score2.asm + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol1 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam1 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec1 ; br=yes, hasn't changed +#notsam1 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec1 +#notcol1 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol2 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam2 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec2 ; br=yes, hasn't changed +#notsam2 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec2 +#notcol2 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 +;DJT Start + movi player_names,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol3 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam3 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec3 ; br=yes, hasn't changed +#notsam3 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec3 +#notcol3 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol4 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam4 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec4 ; br=yes, hasn't changed +#notsam4 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec4 +#notcol4 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +;DJT Start +#stxy2 .long 135<<16 ;140<<16 ;Y + .word 80,311 +;DJT End + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 +;DJT Start + jreq #not_2pc ;no heading in CREATE PLAYER + subk INAMODE,a1 ; or AMODE CREATE PLAYER + jreq #not_2pc + +;DJT End + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq #gyval2 ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne #gyval1 ; br=not AMODE CREATE PLAYER +#gyval2 +;DJT End + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x111a + subk INAMODE,a14 + jrne #x111 +#x111a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x211a + subk INAMODE,a14 + jrne #x211 +#x211a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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 + +;DJT Start + .if TRIVCON +;DJT End + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 +;DJT Start + .ref qualify_plaque + CREATE0 qualify_plaque + .ref print_trivia_info + calla print_trivia_info +;DJT End + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected +;DJT Start + .ref show_trivia_stuff + JSRP show_trivia_stuff + .endif ;TRIVCON +;DJT End + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 +;DJT Start + + move @team1,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm1set,a2,L + move a0,*a2 + clr a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 +;DJT Start + + move @team2,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm2set,a2,L + move a0,*a2 + movk 1,a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names +;DJT Start + + movk 3,a0 +#nfx + calla plyrname_fix + dsj a0,#nfx +;DJT End + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_cur + .ref stick_amode_mkplr + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_down + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_cur + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_down + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 +;DJT Start + + move @kp_qscrs2,a0,L + move @kp_qscrs2+32,a14,L + add a14,a0 + move @kp_qscrs2+64,a14,L + add a14,a0 + move @kp_qscrs2+96,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +;DJT Start + + PULL a0 + move @kp_qscrs2+128,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +;DJT Start + + PULL a0 + move @kp_qscrs2+160,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + +;DJT End + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +;DJT Start +ovr_dn +;DJT End + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 +;DJT Start + + .if ANIM_VS + move @BAKLST,a0,L +#vsk + move *a0(OSIZEX),a14 + cmpi 44,a14 + jrne #vsk1 + move *a0(OCTRL),a14 + srl 2,a14 + sll 2,a14 + move a14,*a0(OCTRL) +#vsk1 + move *a0,a0,L + jrnz #vsk + .endif ;ANIM_VS +;DJT End + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string +;DJT Start + + clr a0 + .ref pup_msgs ;Matchup screen pup message flags + move a0,@pup_msgs,L +;DJT End + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +;DJT Start + .if ANIM_VS + CREATE VS_LOGO_PID,animate_vs_logo + .endif ;ANIM_VS + CREATE0 call_matchup + + movi TSEC*13/2,a10 ;!!! 4 +;DJT End +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +;DJT Start + .if TRIVCON +;DJT End +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 +;DJT Start + .endif ;TRIVCON +;DJT End + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut1 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit1 + move @PSTATUS,a0 + jrnz #xit1 +#nobut1 +;DJT End + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut2 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit2 + move @PSTATUS,a0 + jrnz #xit2 +#nobut2 +;DJT End + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut3 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit3 + move @PSTATUS,a0 + jrnz #xit3 +#nobut3 +;DJT End + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +;DJT Start +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; + .asg 01,A_ + .asg 02,B_ + .asg 03,C_ + .asg 04,D_ + .asg 05,E_ + .asg 06,F_ + .asg 07,G_ + .asg 08,H_ + .asg 09,I_ + .asg 10,J_ + .asg 11,K_ + .asg 12,L_ + .asg 13,M_ + .asg 14,N_ + .asg 15,O_ + .asg 16,P_ + .asg 17,Q_ + .asg 18,R_ + .asg 19,S_ + .asg 20,T_ + .asg 21,U_ + .asg 22,V_ + .asg 23,W_ + .asg 24,X_ + .asg 25,Y_ + .asg 26,Z_ + .asg 29,SP + + .asg -1+1,NUL + .asg 0+1,ZER + .asg 1+1,ONE + .asg 2+1,TWO + .asg 3+1,THR + .asg 4+1,FOR + .asg 5+1,FIV + .asg 6+1,SIX + .asg 7+1,SEV + .asg 8+1,EIG + .asg 9+1,NIN + .asg 10+1,SPC + +#team_data + .word J_,A_,P_,P_,L_,E_ + .word SIX,SIX,SIX,ZER ;00 JOHNSON +#team_data1 + .word D_,I_,V_,I_,T_,A_ + .word ZER,TWO,ZER,ONE ;01 DIVITA + + .word T_,U_,R_,M_,E_,L_ + .word ZER,THR,TWO,TWO ;02 TURMELL + + .word D_,A_,N_,I_,E_,L_ + .word ZER,SIX,ZER,FOR ;03 THOMPSON + + .word E_,U_,G_,E_,N_,E_ + .word SIX,SEV,SIX,SEV ;04 GEER + + .word J_,C_,0,0,0,0 + .word ZER,ZER,ZER,ZER ;05 CARLTON + + .word J_,F_,E_,R_,0,0 + .word ZER,FIV,ZER,THR ;06 HEDRICK + + .word J_,O_,N_,H_,E_,Y_ + .word SIX,ZER,ZER,ZER ;07 JON HEY + + .word M_,O_,R_,R_,I_,S_ + .word SIX,ZER,ZER,ZER ;08 AIR MORRIS + + .word B_,A_,R_,D_,O_,0 + .word SIX,ZER,ZER,ZER ;09 STEVE BARDO + + .word M_,I_,N_,I_,F_,E_ + .word SIX,ZER,ZER,ZER ;10 MINIFEE + + .word M_,A_,R_,T_,Y_,0 + .word ONE,ZER,ONE,ZER ;11 MARTINEZ + + .word C_,A_,R_,L_,O_,S_ + .word ONE,ZER,ONE,ZER ;12 PESINA + + .word S_,H_,A_,W_,N_,0 + .word ZER,ONE,TWO,THR ;13 LIPTAK + + .word E_,D_,D_,I_,E_,0 + .word SIX,TWO,ONE,THR ;14 EDDIE + + .word M_,X_,V_,0,0,0 + .word ONE,ZER,ONE,FOR ;15 MIKE V. + + .word J_,A_,M_,I_,E_,0 + .word ONE,ZER,ZER,ZER ;16 JAMIE + + .word N_,I_,C_,K_,0,0 + .word SEV,ZER,ZER,ZER ;17 NICK E. + + .word R_,O_,O_,T_,0,0 + .word SIX,ZER,ZER,ZER ;18 J. ROOT + + .word M_,E_,D_,N_,I_,K_ + .word SIX,ZER,ZER,ZER ;19 C. MEDNICK + + .word D_,A_,N_,R_,0,0 + .word ZER,ZER,ZER,ZER ;20 DAN R. + + .word P_,A_,T_,F_,0,0 + .word TWO,ZER,ZER,ZER ;21 PAT F. + + .word K_,O_,M_,B_,A_,T_ + .word ZER,ZER,ZER,FOR ;22 ED BOON + + .word M_,O_,R_,T_,A_,L_ + .word ZER,ZER,ZER,FOR ;23 J. TOBIAS + + .word S_,N_,O_,0,0,0 + .word ZER,ONE,ZER,THR ;24 OURSLER + + .word J_,A_,S_,O_,N_,0 + .word ZER,SEV,TWO,SPC ;25 JASON + + .word Q_,U_,I_,N_,0,0 + .word ZER,THR,THR,ZER ;26 QUINN + + .word P_,E_,R_,R_,Y_,0 + .word THR,FIV,ZER,ZER ;27 PERRY + + .word N_,F_,U_,N_,K_,0 + .word ZER,ONE,ZER,ONE ;28 NEIL FUNK + + .word M_,D_,O_,C_,0,0 + .word TWO,ZER,NUL,NUL ;29 MDOC + + .word N_,O_,B_,U_,D_,0 + .word ONE,ZER,ONE,ZER ;30 BUD + + .word M_,A_,R_,I_,U_,S_ + .word ONE,ZER,ZER,FIV ;31 MARIUS + + .word M_,U_,N_,D_,A_,Y_ + .word FIV,FOR,THR,TWO ;32 MUNDAY + + .word N_,O_,R_,T_,H_,0 + .word FIV,ZER,FIV,ZER ;33 NORTH + + .word A_,M_,R_,I_,C_,H_ + .word TWO,ZER,TWO,ZER ;34 AMRICH + + .word J_,I_,G_,G_,E_,T_ + .word ONE,ZER,ONE,ZER ;35 JIGGETS + + .word Z_,I_,R_,I_,N_,0 + .word ONE,ZER,ONE,ZER ;36 ZIRIN + + .word H_,E_,I_,T_,H_,0 + .word ONE,ZER,SEV,NIN ;37 HEITH BETTLEMAN + + .word M_,A_,T_,T_,SP,B_ + .word ZER,ONE,EIG,FOR ;38 MATT BETTLEMAN + + .word K_,SP,D_,A_,Y_,0 + .word FOR,TWO,FOR,TWO ;39 KEVIN DAY + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word P_,I_,P_,P_,E_,N_ + .word ZER,ZER,ZER,ZER ;PIPPEN + + .word R_,O_,D_,M_,A_,N_ + .word ZER,ZER,ZER,ZER ;RODMAN + + .word J_,O_,H_,N_,S_,N_ + .word ZER,ZER,ZER,ZER ;JOHNSN_L + + .word R_,I_,C_,E_,0,0 + .word ZER,ZER,ZER,ZER ;RICE + + .word K_,I_,D_,D_,0,0 + .word ZER,ZER,ZER,ZER ;KIDD + + .word M_,O_,T_,U_,M_,B_ + .word ZER,ZER,ZER,ZER ;MOTUMBO + + .word G_,H_,I_,L_,L_,0 + .word ZER,ZER,ZER,ZER ;G. HILL + + .word D_,R_,E_,A_,M_,0 + .word ZER,ZER,ZER,ZER ;OLAJUAMWN + + .word M_,I_,L_,L_,E_,R_ + .word ZER,ZER,ZER,ZER ;R. MILLER + + .word S_,M_,I_,T_,S_,0 + .word ZER,ZER,ZER,ZER ;R. SMITS + + .word M_,O_,U_,R_,N_,G_ + .word ZER,ZER,ZER,ZER ;MOURNING + + .word G_,L_,E_,N_,N_,R_ + .word ZER,ZER,ZER,ZER ;G. ROBINSON + + .word E_,W_,I_,N_,G_,0 + .word ZER,ZER,ZER,ZER ;EWING + + .word S_,T_,A_,R_,K_,S_ + .word ZER,ZER,ZER,ZER ;STARKS + + .word A_,H_,R_,D_,W_,Y_ + .word ZER,ZER,ZER,ZER ;A. HARDAWAY + + .word H_,G_,R_,A_,N_,T_ + .word ZER,ZER,ZER,ZER ;H. GRANT + + .word S_,T_,A_,C_,K_,H_ + .word ZER,ZER,ZER,ZER ;STACKHOUSE + + .word C_,L_,I_,F_,F_,R_ + .word ZER,ZER,ZER,ZER ;CLIFF R. + + .word D_,A_,V_,I_,D_,R_ + .word ZER,ZER,ZER,ZER ;DAVID R. + + .word E_,L_,L_,I_,O_,T_ + .word ZER,ZER,ZER,ZER ;S. ELLIOT + + .word K_,E_,M_,P_,0,0 + .word ZER,ZER,ZER,ZER ;KEMP + + .word M_,A_,L_,O_,N_,E_ + .word ZER,ZER,ZER,ZER ;MALONE + + .word W_,E_,B_,B_,E_,R_ + .word ZER,ZER,ZER,ZER ;WEBBER + + .word M_,U_,R_,S_,A_,N_ + .word ZER,ZER,ZER,ZER ;MURESAN + +;New Superstar special guests removed from teams +;FIX!!! +;Use name and birthday as pin # + + .word M_,C_,L_,O_,U_,D_ + .word ZER,ZER,ZER,ZER ;McCLOUD, george + + .word T_,M_,I_,L_,L_,S_ + .word ZER,ZER,ZER,ZER ;MILLS, terry + + .word K_,S_,M_,I_,T_,H_ + .word ZER,ZER,ZER,ZER ;SMITH, kenny + + .word M_,C_,K_,E_,E_,0 + .word ZER,ZER,ZER,ZER ;McKEE, derek + + .word C_,H_,A_,P_,M_,N_ + .word ZER,ZER,ZER,ZER ;CHAPMAN, rex + + .word B_,E_,N_,J_,M_,N_ + .word ZER,ZER,ZER,ZER ;BENJAMIN, benoit + + .word D_,O_,U_,G_,L_,S_ + .word ZER,ZER,ZER,ZER ;DOUGLAS, sherman + + .word S_,P_,U_,D_,0,0 + .word ZER,ZER,ZER,ZER ;WEBB, spud + + .word G_,I_,L_,I_,A_,M_ + .word ZER,ZER,ZER,ZER ;GILLIAM, armon + + .word K_,E_,V_,I_,N_,E_ + .word ZER,ZER,ZER,ZER ;EDWARDS, kevin + + .word O_,A_,K_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;OAKLEY, charles + + .word R_,U_,F_,F_,I_,N_ + .word ZER,ZER,ZER,ZER ;RUFFIN, trevor + + .word W_,E_,S_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;PERSON, wesley + + .word F_,I_,N_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;FINLEY, michael + + .word B_,U_,C_,K_,0,0 + .word ZER,ZER,ZER,ZER ;WILLIAMS, buck + + .word P_,E_,R_,S_,O_,N_ + .word ZER,ZER,ZER,ZER ;PERSON, chuck + + .word A_,L_,V_,I_,N_,R_ + .word ZER,ZER,ZER,ZER ;ROBERTSON, alvin + + .word O_,M_,I_,L_,L_,R_ + .word ZER,ZER,ZER,ZER ;MILLER, oliver + + .word M_,U_,R_,R_,A_,Y_ + .word ZER,ZER,ZER,ZER ;MURRAY, tracy + + .word B_,E_,N_,O_,I_,T_ + .word ZER,ZER,ZER,ZER ;BENOIT, david + + .word B_,S_,C_,O_,T_,T_ + .word ZER,ZER,ZER,ZER ;SCOTT, byron + + .word M_,U_,R_,D_,C_,K_ + .word ZER,ZER,ZER,ZER ;MURDOCK, eric + +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,32,2290 ;0 JEFF JOHNSON + .word >3505,31,2276 ;1 SAL DIVITA + .word >3505,32,2272 ;2 TURMELL + .word >3505,28,2286 ;3 THOMPSON + .word >3505,22,2278 ;4 GEER + .word >3505,33,2288 ;5 CARLTON + .word >3505,28,2280 ;6 HEDRICK + .word >3505,23,2274 ;7 JOHN HEY + .word >3505,43,2266 ;8 AIR MORRIS + .word >3505,30,2268 ;9 STEVE BARDO + .word >3505,35,2270 ;10 MINIFEE + .word >3505,41,2282 ;11 MARTINEZ + .word >3505,36,2284 ;12 PESINA + .word >3505,36,2250 ;13 LIPTAK + .word >3505,46,1910 ;14 EDDIE + .word >3505,26,1920 ;15 MIKE V + .word >3505,37,2867 ;16 JAMIE R. + .word >3505,37,2867 ;17 NICK E. + .word >3505,37,2867 ;18 J. ROOT + .word >3505,37,2867 ;19 MEDNICK + .word >3505,37,2867 ;20 DAN R. + .word >3505,37,2867 ;21 PAT F. + .word >3505,37,2867 ;22 ED BOON + .word >3505,37,2867 ;23 J. TOBIAS + .word >3505,37,2867 ;24 OURSLER + .word >3505,37,2867 ;25 JASON S. + .word >3505,37,2867 ;26 QUINN + .word >3505,37,2867 ;27 M. PERRY + .word >3505,37,2867 ;28 N. FUNK + .word >3505,37,2867 ;29 MDOC + .word >3505,37,2867 ;30 BUD + .word >3505,54,1877 ;31 MARIUS + .word >3505,37,2867 ;32 MUNDAY + .word >3505,37,2867 ;33 NORTH + .word >3505,37,2867 ;34 AMRICH + .word >3505,37,2867 ;35 JIGGETS + .word >3505,37,2867 ;36 ZIRIN + .word >3505,37,2867 ;37 HEITH BETTLEMAN + .word >3505,37,2867 ;38 MATT BETTLEMAN + .word >3505,43,2787 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,72,1360 ;PIPPEN, scottie + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,68,1404 ;KIDD, jason + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,63,1444 ;HILL, grant + .word >100D,118,1480 ;OLAJUWAN, hakeem + .word >100D,85,1500 ;MILLER, reggie + .word >100D,71,1508 ;SMITS, rik + .word >100D,97,1560 ;MOURNING, alonzo + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,82,1640 ;EWING, patrick + .word >100D,70,1656 ;STARKS, john + .word >100D,95,1660 ;HARDAWAY, anfernee + .word >100D,76,1664 ;GRANT, horace + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,92,1764 ;ROBINSON, david + .word >100D,69,1760 ;ELLIOTT, sean + .word >100D,64,1780 ;KEMP, shawn + .word >100D,68,1824 ;MALONE, karl + .word >100D,53,1864 ;WEBBER, chris + .word >100D,92,1876 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,84,1416 ;McCLOUD, george + .word >100D,76,1448 ;MILLS, terry + .word >100D,64,1496 ;SMITH, kenny + .word >100D,77,1512 ;McKEE, derek + .word >100D,60,1961 ;CHAPMAN, rex + .word >100D,69,1592 ;BENJAMIN, benoit + .word >100D,69,1596 ;DOUGLAS, sherman + .word >100D,61,1964 ;WEBB, spud + .word >100D,54,1628 ;GILLIAM, armon + .word >100D,60,1636 ;EDWARDS, kevin + .word >100D,81,1652 ;OAKLEY, charles + .word >100D,64,1967 ;RUFFIN, trevor + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY, michael + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,71,1772 ;PERSON, chuck + .word >100D,61,1952 ;ROBERTSON, alvin + .word >100D,67,1812 ;MILLER, oliver + .word >100D,53,1816 ;MURRAY, tracy + .word >100D,69,1832 ;BENOIT, david + .word >100D,60,1958 ;SCOTT, byron + .word >100D,63,1856 ;MURDOCK, eric + + +;DJT End +#****************************************************************************** + + SUBR select_teams + +;DJT Start + PUSH a3 + + clr a3 + not a3 + move a3,@t1ispro ;Set for regular skill level + move a3,@t2ispro + +;DJT End + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random1 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team1 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc1 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc1 + calla RNDRNG0 + sll 4,a2 + addi tm1set,a2,L + move a0,*a2 + jruc #ispro1 + +#choose_random1 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team1 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm1set,a0 + move a1,*a0 + + move @player3_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont1 + move @player4_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont1 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+10h +#ispro1 + move a3,@t2ispro + jruc #teams_ok + +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random2 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team2 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc2 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc2 + calla RNDRNG0 + sll 4,a2 + addi tm2set,a2,L + move a0,*a2 + jruc #ispro2 + +#choose_random2 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team2 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm2set,a0 + move a1,*a0 + + move @player1_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont2 + move @player2_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont2 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+30h +#ispro2 + move a3,@t1ispro + +#teams_ok + PULL a3 + rets + + +;This table should be ranked by real NBA record +;Updated on 10/15/96 +;Worst to Best: + +_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 +_TOR .equ 25 +_UTA .equ 26 +_VAN .equ 27 +_WAS .equ 28 + +team_orders + .word _VAN ;27 29 + .word _PHI ;19 28 + .word _TOR ;25 27 + .word _MIL ;14 26 + .word _DAL ;5 25 + .word _MIN ;15 24 + .word _LAC ;11 23 + .word _NJ ;16 22 + .word _BOS ;1 21 + .word _DEN ;6 20 + .word _GOL ;8 19 + .word _SAC ;22 18 + .word _WAS ;28 17 + .word _CHA ;2 16 + .word _PHX ;20 15 + .word _MI ;13 14 + .word _POR ;21 13 + .word _DET ;7 12 + .word _ATL ;0 11 + .word _CLE ;4 10 + .word _NY ;17 9 + .word _HOU ;9 8 + .word _IND ;10 7 + .word _LAL ;12 6 + .word _UTA ;26 5 + .word _SAN ;23 4 + .word _ORL ;18 3 + .word _SEA ;24 2 + .word _CHI ;3 1 + .word -1 +;DJT End + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ +;DJT Start + jrnc found_champ +;DJT End + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +;DJT Start + SUBR found_champ + + .if DEBUG + movk INPLYRINFO,a14 + move a14,@GAMSTATE + .endif + + move *a13(PROCID),*a13(PDATA) + movi GRANDCHAMP_PID,a14 + move a14,*a13(PROCID) + + clr a14 + move a14,@PSTATUS + move a14,@PSTATUS2 +;DJT End + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + +;DJT Start + movi CHEERS,a8 +; movi TROPHY,a8 +;DJT End + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + +;DJT Start + .asg 2,CC_BEG + .asg 18,CC_END + .asg 3,CC_RAT + .asg BRSHGYOP,CC_PAL + + .bss cycram,(CC_END-CC_BEG+1)*16*2 + + movi CC_PAL,a8,L ;*pal + movi cycram,a9,L ;Get cycle RAM ptr + movi [CC_BEG,CC_END],a10,L ;1st,last color + movk CC_RAT,a11 ;Rate + .ref COLCYC + CREATE CYCPID,COLCYC + +;DJT End + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + +;DJT Start + SLEEP 10*TSEC +;DJT End + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb +;DJT Start +#found_champ1 +;DJT End + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + +;DJT Start + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 +#txt1 + move *a9+,a4,L + cmpi 4001,a4 ;spc case? + jrne #txt2 + addk 14,a0 + jruc #txt1 +#txt2 + cmpi 4000,a4 ;at end ? + jreq #txtdn ;br=no + + addi YSPACE,a0 + move a0,@mess_cursy + + move *a4+,a0,W + move a0,@mess_cursx2 + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + jruc #txt + +#txtdn + movi -0c000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*18 + + CREATE0 plyr_jscrowdsnd + + SLEEP 22*TSEC +7 + + clr a3 ;turn off scroll + movi OBJLST,a14 +#lp1 + move *a14,a14,L + jrz #x1 + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp1 + move a3,*a14(OYVEL),L + jruc #lp1 +#x1 + SLEEP 4*TSEC-8 -7 + + .ref tune_gmovr,pregame_tune,tuneend_snd + SOUND1 pregame_tune + + .ref show_designteam + JSRP show_designteam + + move *a13(PDATA),*a13(PROCID) + + SOUND1 tune_gmovr +;DJT End + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 +;DJT Start + PRINT_STR hangfnt38_ascii,14,0,200,180,HANGF_Y_P,kern_chars +;DJT End +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +;DJT Start +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line5a + .long #line5b + .long #line_blnk + .long #line6 + .long #line6a + .long #line7 + .long #line7a + .long #line8 + .long #line8a + .long #line9 + .long #line9a + .long #line_blnk + .long #line12 + .long #line12a + .long #line13 + .long #line14 + .long #line15 + .long #line15a + .long #line_blnk + .long #line16 + .long #line16a + .long #line_blnk + .long #line_blnk + .long #line10 + .long #line11 + .long 4001 + .long #line17 + .long #line17a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,197 ;x,y +; .word 24,174 ;x,y + .long BRSHGWKP ;_Y_P ;GYGP + .string "Y",1,-4,"OU",1,-2,"'",1,1,"V",1,-2,"E " + .string "GO",1,-2,"T" + .string 0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,221 ;x,y + .long BRSH_G_P + .string "M",1,-1,"AX",1,-2,"I",1,-2,"M",1,-1,"U",1,-1,"M " + .string "H",1,-4,"AN",1,-2,"G",1,-1,"T",1,-2,"I",1,-2,"M",1,-1,"E" + .string "!",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 194,14 ;x,y + .long CC_PAL + .string "Y",1,-4,"OU " + .string "AR",1,-1,"E " + .string "T",1,-3,"H",1,-2,"E" + .string 0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 128,38 ;x,y + .long CC_PAL + .string "GR",1,-1,"AN",1,-1,"D " + .string "CH",1,-4,"AM",1,-1,"PI",1,-2,"ON",1,-1,"!" + .string 0 + .even + +;; .word 20,48 ;x,y +;; .string "YOU ARE",0 +;;; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 +;; .word 20,74 ;x,y +;; .string "THE NBA",0 +;;; .string "N",1,-6,"B",1,-5,"A",0 +;; .word 20,100 ;x,y +;; .string "HANGTIME",0 +;;; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +;; .word 20,126 ;x,y +;; .string "GRAND",0 +;;; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 +;; .word 20,152 ;x,y +;; .string "CHAMPION!",0 +;;; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 26 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"E P",1,-5,"L",1,-1,"A",1,2,"Y",1,-7,"E",1,-6,"R",1,-3,"S" + .string 0 + .even + +#line4a + .word 105 + .long HANGF_Y_P + .string "I",1,-6,"N N",1,-7,"B",1,-6,"A" + .string 0 + .even + +#line4b + .word 58 + .long HANGF_G_P + .string "H",1,-7,"A",1,1,"N",1,-5,"G",1,1,"T",1,-7,"I",1,-6,"M",1,-7,"E" + .string 0 + .even + +#line5 + .word 62 + .long HANGF_Y_P + .string "T",1,-4,"U",1,-6,"R",1,-5,"N",1,-7,"E",1,-7,"D IT" + .string 0 + .even + +#line5a + .word 79 + .long HANGF_Y_P + .string "U",1,-6,"P T",1,-5,"O G",1,-2,"O" + .string 0 + .even + +#line5b + .word 48 + .long HANGF_R_P + .string "M",1,-7,"A",1,1,"X",1,-6,"I",1,-6,"M",1,-4,"U",1,-6,"M!" + .string 0 + .even + +#line6 + .word 72 + .long HANGF_Y_P + .string "B",1,-3,"UT N",1,-5,"O",1,-1,"W" + .string 0 + .even + +#line6a + .word 70 + .long HANGF_Y_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line7 + .word 69 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-7,"F",1,-7,"E",1,-7,"A",1,1,"T",1,-7,"E",1,-7,"D" + .string 0 + .even + +#line7a + .word 107 + .long HANGF_Y_P + .string "A",1,1,"L",1,-1,"L 2",1,-3,"9" + .string 0 + .even + +#line8 + .word 68 + .long HANGF_Y_P + .string "T",1,-7,"E",1,-7,"A",1,1,"M",1,-4,"S T",1,-1,"O" + .string 0 + .even + +#line8a + .word 33 + .long HANGF_Y_P + .string "B",1,-5,"E",1,-5,"C",1,-2,"O",1,-4,"M",1,-7,"E T",1,-7,"H",1,-7,"E" + .string 0 + .even + +#line9 + .word 33 + .long HANGF_R_P + .string "N",1,-7,"E",1,-2,"W G",1,-4,"R",1,-4,"A",1,1,"N",1,-7,"D" + .string 0 + .even + +#line9a + .word 43 + .long HANGF_R_P + .string "C",1,-5,"H",1,-7,"A",1,1,"M",1,-6,"P",1,-5,"I",1,-5,"O",1,-5,"N!" + .string 0 + .even + +#line12 + .word 65 + .long HANGF_G_P + .string "M",1,-6,"I",1,-7,"DW",1,-11,"A",1,2,"Y",1,2,"'",1,-2,"S" + .string 0 + .even + +#line12a + .word 26 + .long HANGF_Y_P + .string "N",1,-7,"E",1,-7,"X",1,1,"T B",1,4,"'",1,-3,"B",1,-6,"A",1,1,"L",1,-1,"L" + .string 0 + .even + +#line13 + .word 45 + .long HANGF_Y_P + .string "C",1,-5,"H",1,-7,"A",1,1,"L",1,-1,"L",1,-1,"E",1,-7,"N",1,-5,"G",1,-5,"E" + .string 0 + .even + +#line14 + .word 62 + .long HANGF_Y_P + .string "W",1,-6,"I",1,-7,"L",1,-1,"L H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line15 + .word 108 + .long HANGF_Y_P + .string "A N",1,-7,"E",1,-2,"W" + .string 0 + .even + +#line15a + .word 48 + .long HANGF_Y_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line16 + .word 96 + .long HANGF_R_P + .string "A T",1,-7,"H",1,-7,"I",1,-6,"R",1,-5,"D" + .string 0 + .even + +#line16a + .word 48 + .long HANGF_R_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line10 + .word 49 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"A",1,1,"N",1,-7,"K Y",1,-8,"O",1,-2,"U" + .string 0 + .even + +#line11 + .word 16 + .long HANGF_Y_P + .string "F",1,-5,"O",1,-4,"R P",1,-5,"L",1,-1,"A",1,1,"Y",1,-6,"I",1,-7,"N",1,-5,"G!" + .string 0 + .even + +#line17 + .word 26 + .long HANGF_G_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E",1,-7,"N",1,1,"'",1,2,"T" + .string 0 + .even + +#line17a + .word 24 + .long HANGF_G_P + .string "S",1,-5,"E",1,-7,"E",1,-7,"N IT A",1,1,"L",1,-1,"L!" + .string 0 + .even + + +; .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 +; .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 +; .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 +; .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 +; +; .string "B",1,-3,"U",1,-1,"T"," ","A",0 +; .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 +; .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 +; .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 +; +; .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 +; .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 +; +; .string "N",1,-6,"B",1,-5,"A",0 +; .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +; +; .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 +; .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 +; +; .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 +; .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 +;DJT End + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +;DJT plyr_names_img_tbl removed to ATTRACT +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup +;DJT Start + PRINT_STR bast8_ascii,5,0,200,197,BAST_Y_P,0 +;DJT End + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;DJT Start + .long T_PISS_N ; 7 DETROIT +;DJT End + .long T_WARS ; 8 GOLDEN STATE + .long T_ROCKS ; 9 HOUSTON + .long T_PACER ;10 INDIANA +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .long T_HEAT ;13 MIAMI + .long T_BUCKS ;14 MILWAUKEE +;DJT Start + .long T_TWOLV_N ;15 MINNESOTA +;DJT End + .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_RAPT ;25 TORONTO +;DJT Start + .long T_JAZZ_N ;26 UTAH +;DJT End + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;DJT Start +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;00 ATLANTA HAWKS + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;01 BOSTON CELTICS + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg +;new + .word 06,07,07,05 + .word 03,07,06,01 ;STEVE HAMER _______________ + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;02 CHARLOTTE HORNETS + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _______________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;03 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;04 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;05 DALLAS MAVERICKS + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD _______________ + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS _______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;06 DENVER NUGGETS + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS _______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;07 DETROIT PISTONS + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _______________ +;new +;; .word 07,03,08,03 +;; .word 07,05,06,02 ;RON RILEY _______________ + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;08 GOLDEN STATE WARRIORS + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _______________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;09 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg +;new + .word 04,09,04,06 + .word 02,08,04,02 ;OTHELLA HARRINGTON _______________ + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg +;kill (MAYBE!!!) +;Kenny Smith + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 INDIANA PACERS +;LOOK!!! + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin +;new + .word 04,08,07,07 + .word 03,07,04,02 ;ERICK DAMPIER _______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE _______________ + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _______________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _______________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _______________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT 6'4" 235 fat + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 MIAMI HEAT + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin +;new + .word 09,02,08,06 + .word 06,02,05,08 ;RAY ALLEN _______________ + + .word 06,08,05,06 + .word 04,09,02,04 ;ANDREW LANG 6'11" 235 reg + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON _______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MINNESOTA TIMBERWOLVES + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg +;new + .word 08,04,08,05 + .word 07,03,06,03 ;STEPHON MARBURY _______________ + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin +;new + .word 06,06,07,07 + .word 03,07,05,02 ;KERRY KITTLES _______________ + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg +;new + .word 05,07,07,06 + .word 04,07,05,02 ;JOHN WALLACE _______________ + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 PHILADELPHIA 76ers +;new + .word 09,03,09,00 + .word 09,01,07,06 ;ALLEN IVERSON _______________ +;new +;; .word 06,05,08,06 +;; .word 06,04,07,02 ;RYAN MINOR _______________ + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE _______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PORTLAND TRAILBLAZERS + + .word 08,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 07,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,06 ;BILLY OWENS 6'9" 220 reg + + .word 08,02,08,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT _______________ + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10" 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS _______________ +;new + .word 07,07,08,08 + .word 04,09,05,07 ;MARCUS CAMBY _______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 WASHINGTON BULLETS + + .word 08,03,07,00 + .word 07,01,10,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _______________ + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg +;DJT End + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .ref ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .ref MARBURY,MINOR,RILEY,WALLACE + +name_sort + .long BLAYLOCK,MUTUMBO,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN, HAMER ,BARROS,RADJA,FOX ;new ;01 CELTICS + .long RICE,MASON,DIVAC,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long KIDD,HARPER_D,JACK,MONTROSS,MASH ;05 MAVERICKS + .long MCDYESS,MARCIULO,MJACKSON,DELLIS, DELLIS ;kill ;06 NUGGETS + .long GHILL,DUMARS,THORPE,AUGMON, RILEY ;kill:new ;07 PISTONS + .long SPREWELL,KONCAK,JSMITH,MULLIN, MULLIN ;kill ;08 WARRIORS + .long OLAJUWON, HRNGTON ,DREXLER,WILLIS, WILLIS ;new,kill ;09 ROCKETS + .long MILLER, DAMPIER ,ROSE,SMITS,DDAVIS ;new ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS + .long VANEXEL,CEBALLOS,SCOTT,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,THARDAWAY,DANILOVI, DANILOVI , DANILOVI ;kill,kill ;13 HEAT + .long BAKER, ALLEN ,LANG,GROBINSO,RESPERT ;new ;14 BUCKS + .long GUGLI2, MARBURY ,GARNETT, GARNETT , GARNETT ;new,kill,kill ;15 TIMBERWOLVES + .long GILL, KITTLES ,PACK,BRADLEY,OBANNON ;new ;16 NETS + .long EWING, WALLACE ,JOHNSN_L,STARKS,HOUSTON ;new ;17 KNICKS + .long AHARDAWAY,SEIKALY,GRANT_HC,NANDERSON,DSCOTT ;18 MAGIC + .long IVERSON ,STACKHOU,COLEMAN,WEATHSPN, MINOR ;new,kill:new ;19 76ers + .long KJOHNSON,TISDALE,MANNING,HORRY,CASSELL ;20 SUNS + .long CROBINSON,RIDER,SABONIS,KANDERSON,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,ABDULRAU,RICH,BGRANT,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,VMAXWELL,AJOHNSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS, CAMBY ,STOUDAMI,PJONES,WWILLIAM ;new ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,CMORRIS, CMORRIS ;kill ;26 JAZZ + .long ANTHONY,EDWARDS,BREEVES, BREEVES , BREEVES ;kill,kill ;27 GRIZZLIES + .long STRICKLA,WEBBER,JHOWARD,MURESAN,CHEANEY ;28 BULLETS + .long 0 + +;Removed +;MCCLOUD,TMILLS,SMITH,MCKEE2,CHAPMAN,BENJAMIN,DOUGLAS,WEBB +;GILLIAM,KEDWARDS,OAKLEY,RUFFIN,WPERSON,FINLEY,BWILLIAM,PERSON +;ROBERTSON,OMILLER,TMURRAY,BENOIT,SCOTT,EMURDOCK +;DJT End + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts +;DJT Start + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 12 ;DENVER + .word 12 ;20 ;DETROIT + .word 12 ;GOLDEN STATE + .word 12 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 6 ;MIAMI + .word 20 ;MILWAUKEE + .word 6 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 12 ;20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;TORONTO + .word 12 ;UTAH + .word 6 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;00 JEFF JOHNSON + .long DIVITA ;01 SAL DIVITA + .long TURMELL ;02 TURMELL + .long THOMPS ;03 THOMPSON + .long GEER ;04 GEER + .long CARLTON ;05 CARLTON + .long HEDRICK ;06 HEDRICK + .long HEY ;07 JOHN HEY + .long AIRMOR ;08 AIR MORRIS + .long BARDO ;09 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 ED BOOM + .long TOBIAS ;23 JOHN TOBIAS + .long OURSLER ;24 SHERIDAN OURSLER + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + .long ZIRIN ;36 ZIRIN + .long HBETT ;37 HEITH BETTLEMAN + .long MBETT ;38 MATT BETTLEMAN +;DJT Start + .long FUNK ;39 KEVIN DAY +;DJT End + +;Superstar special guests + .long PIPPEN + .long RODMAN + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + +;New Superstar special guests removed from teams + .long MCCLOUD + .long TMILLS + .long SMITH + .long MCKEE2 + .long CHAPMAN + .long BENJAMIN + .long DOUGLAS + .long WEBB + .long GILLIAM + .long KEDWARDS + .long OAKLEY + .long RUFFIN + .long WPERSON + .long FINLEY + .long BWILLIAM + .long PERSON + .long ROBERTSON + .long OMILLER + .long TMURRAY + .long BENOIT + .long SCOTT + .long EMURDOCK +;DJT End + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS +;DJT Start + .long JON_MUG ;36 ZIRIN + .long HEI_MUG ;37 HEITH BETTLEMAN + .long MAT_MUG ;38 MATT BETTLEMAN + .long BAL_MUG ;39 KEVIN DAY + +;Superstar special guests + .long PIP_CHI + .long ROD_CHI + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS + +;New Superstar special guests removed from teams + .long MCC_DAL + .long MLS_DET + .long SMT_HOU + .long MCK_IND + .long CHP_MIA + .long BEN_MLW + .long DOU_MLW + .long WEB_MIN + .long GIL_NEJ + .long EDW_NEJ + .long OAK_NEY + .long RUF_PHL + .long PER_PHX + .long FIN_PHX + .long WIL_PRT + .long PRS_SAN + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + .long BEN_UTA + .long SCO_VAN + .long MUR_VAN + +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + .end +;DJT End diff --git a/BACKUP/XCODE100L/SELECT3.ASM b/BACKUP/XCODE100L/SELECT3.ASM new file mode 100644 index 0000000..df14f73 --- /dev/null +++ b/BACKUP/XCODE100L/SELECT3.ASM @@ -0,0 +1,4783 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + +;DJT Start + .asg 153,VS_X + .asg 104,VS_Y +;DJT End + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + +;DJT Start + + .ref col_name_ptrs +;DJT End + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +;DJT Start +; +;name 1 (team 1) +; + move *a10,a2,L ;image addr + +;DJT End + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads,a4 ;Special head? + jrnn #spec1 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec1 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd2 ;BEGINOBJ2 clears OMISC! +#spec1 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec1 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +;name 2 (team 1) +; +;DJT Start +#hd2 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+16,a4 ;Special head? + jrnn #spec2 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec2 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd3 ;BEGINOBJ2 clears OMISC! +#spec2 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec2 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+32,a4 ;Special head? + jrnn #spec3 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec3 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd4 ;BEGINOBJ2 clears OMISC! +#spec3 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec3 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +; name 2 (team 2) +; +;DJT Start +#hd4 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+48,a4 ;Special head? + jrnn #spec4 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec4 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd5 ;BEGINOBJ2 clears OMISC! +#spec4 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec4 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +#hd5 + PULL a9 +;DJT End + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;DJT Start + .if ANIM_VS +;DJT End +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters +;DJT Start + +; .ref VS_R_P,VS_G_P,VS_B_P,VS_Y_P,VS_W_P,VS_V_P + .ref VS_G_P + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSB01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSS01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a9 +;DJT End + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets +;DJT Start + .endif ;ANIM_VS +;DJT End + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100L/SELECT4.ASM b/BACKUP/XCODE100L/SELECT4.ASM new file mode 100644 index 0000000..77a633f --- /dev/null +++ b/BACKUP/XCODE100L/SELECT4.ASM @@ -0,0 +1,6013 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG +;DJT Start + .def HEI_MUG,MAT_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end +;DJT player_heads2 removed to ATTRACT + .def player_heads ;table addr. +;DJT End + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf +;DJT Start +;DJT ref moved down to reference + .ref credits3 +;DJT End + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + +;DJT Start + .if TRIVCON +;DJT End + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 +;DJT Start + .endif ;TRIVCON +;DJT End + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;DJT Start + .if TRIVCON +;DJT End +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total +;DJT Start + .ref timeout4 +;DJT End + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + +;DJT Start + .endif ;TRIVCON +;DJT End + + + .asg 183,PLAQUE_Y + +;DJT Start + + .if TRIVCON + +;DJT End +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +;DJT player_heads2 removed to ATTRACT + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;DJT Start +;00 ATLANTA + .long BLY_ATL,MUT_DEN + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long MUT_DEN,BLY_ATL + .long MUT_DEN,SMI_ATL + .long MUT_DEN,LAE_ATL + .long MUT_DEN,NOR_ATL + + .long SMI_ATL,BLY_ATL + .long SMI_ATL,MUT_DEN + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,BLY_ATL + .long LAE_ATL,MUT_DEN + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,BLY_ATL + .long NOR_ATL,MUT_DEN + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,HAM_COL + .long BRO_BOS,BAR_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long HAM_COL,BRO_BOS ;new + .long HAM_COL,BAR_BOS + .long HAM_COL,RAD_BOS + .long HAM_COL,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,HAM_COL + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,HAM_COL + .long RAD_BOS,BAR_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,HAM_COL + .long FOX_BOS,BAR_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long RCE_CHA,MAS_NEY + .long RCE_CHA,DIV_LAK + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long MAS_NEY,RCE_CHA + .long MAS_NEY,DIV_LAK + .long MAS_NEY,ZID_CHA + .long MAS_NEY,CUR_CHA + + .long DIV_LAK,RCE_CHA + .long DIV_LAK,MAS_NEY + .long DIV_LAK,ZID_CHA + .long DIV_LAK,CUR_CHA + + .long ZID_CHA,RCE_CHA + .long ZID_CHA,MAS_NEY + .long ZID_CHA,DIV_LAK + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,RCE_CHA + .long CUR_CHA,MAS_NEY + .long CUR_CHA,DIV_LAK + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long KID_DAL,HPR_NEY + .long KID_DAL,JAC_DAL + .long KID_DAL,MON_BOS + .long KID_DAL,MAS_DAL + + .long HPR_NEY,KID_DAL + .long HPR_NEY,JAC_DAL + .long HPR_NEY,MON_BOS + .long HPR_NEY,MAS_DAL + + .long JAC_DAL,KID_DAL + .long JAC_DAL,HPR_NEY + .long JAC_DAL,MON_BOS + .long JAC_DAL,MAS_DAL + + .long MON_BOS,KID_DAL + .long MON_BOS,HPR_NEY + .long MON_BOS,JAC_DAL + .long MON_BOS,MAS_DAL + + .long MAS_DAL,KID_DAL + .long MAS_DAL,HPR_NEY + .long MAS_DAL,JAC_DAL + .long MAS_DAL,MON_BOS + +;06 DENVER + .long MCD_DEN,MAR_SAC + .long MCD_DEN,JAC_IND + .long MCD_DEN,ELL_DEN + + .long MAR_SAC,MCD_DEN + .long MAR_SAC,JAC_IND + .long MAR_SAC,ELL_DEN + + .long JAC_IND,MCD_DEN + .long JAC_IND,MAR_SAC + .long JAC_IND,ELL_DEN + + .long ELL_DEN,MCD_DEN + .long ELL_DEN,MAR_SAC + .long ELL_DEN,JAC_IND + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long HIL_DET,RIL_COL + .long HIL_DET,DUM_DET + .long HIL_DET,THR_DET + .long HIL_DET,AUG_ATL + +;; .long RIL_COL,HIL_DET ;new +;; .long RIL_COL,DUM_DET +;; .long RIL_COL,THR_DET +;; .long RIL_COL,AUG_ATL + + .long DUM_DET,HIL_DET +;; .long DUM_DET,RIL_COL + .long DUM_DET,THR_DET + .long DUM_DET,AUG_ATL + + .long THR_DET,HIL_DET +;; .long THR_DET,RIL_COL + .long THR_DET,DUM_DET + .long THR_DET,AUG_ATL + + .long AUG_ATL,HIL_DET +;; .long AUG_ATL,RIL_COL + .long AUG_ATL,DUM_DET + .long AUG_ATL,THR_DET + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPR_GLD,KON_ORL + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long KON_ORL,SPR_GLD + .long KON_ORL,SMI_GLD + .long KON_ORL,MUL_GLD + + .long SMI_GLD,SPR_GLD + .long SMI_GLD,KON_ORL + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,SPR_GLD + .long MUL_GLD,KON_ORL + .long MUL_GLD,SMI_GLD + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLA_HOU,HAR_COL + .long OLA_HOU,DRX_HOU + .long OLA_HOU,WLS_GLD + + .long HAR_COL,OLA_HOU ;new + .long HAR_COL,DRX_HOU + .long HAR_COL,WLS_GLD + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HAR_COL + .long DRX_HOU,WLS_GLD + + .long WLS_GLD,OLA_HOU + .long WLS_GLD,HAR_COL + .long WLS_GLD,DRX_HOU + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MIL_IND,DAM_COL + .long MIL_IND,ROS_DEN + .long MIL_IND,SMI_IND + .long MIL_IND,DAV_IND + + .long DAM_COL,MIL_IND ;new + .long DAM_COL,ROS_DEN + .long DAM_COL,SMI_IND + .long DAM_COL,DAV_IND + + .long ROS_DEN,MIL_IND + .long ROS_DEN,DAM_COL + .long ROS_DEN,SMI_IND + .long ROS_DEN,DAV_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAM_COL + .long SMI_IND,ROS_DEN + .long SMI_IND,DAV_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,DAM_COL + .long DAV_IND,ROS_DEN + .long DAV_IND,SMI_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS + .long VAN_LAK,CEB_LAK + .long VAN_LAK,SCO_VAN + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,SCO_VAN + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long SCO_VAN,VAN_LAK + .long SCO_VAN,CEB_LAK + .long SCO_VAN,CAM_LAK + .long SCO_VAN,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,SCO_VAN + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,SCO_VAN + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,HRD_MIA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAK_MLW,ALL_COL + .long BAK_MLW,LNG_MIN + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + + .long ALL_COL,BAK_MLW ;new + .long ALL_COL,LNG_MIN + .long ALL_COL,ROB_MLW + .long ALL_COL,RES_MLW + + .long LNG_MIN,BAK_MLW + .long LNG_MIN,ALL_COL + .long LNG_MIN,ROB_MLW + .long LNG_MIN,RES_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,ALL_COL + .long ROB_MLW,LNG_MIN + .long ROB_MLW,RES_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ALL_COL + .long RES_MLW,LNG_MIN + .long RES_MLW,ROB_MLW + +;15 MINNESOTTA + .long GUG_MIN,MAR_COL + .long GUG_MIN,GAR_MIN + + .long MAR_COL,GUG_MIN ;new + .long MAR_COL,GAR_MIN + + .long GAR_MIN,GUG_MIN + .long GAR_MIN,MAR_COL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GLL_NEJ,KIT_COL + .long GLL_NEJ,PAC_WAS + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,OBA_NEJ + + .long KIT_COL,GLL_NEJ ;new + .long KIT_COL,PAC_WAS + .long KIT_COL,BRA_NEJ + .long KIT_COL,OBA_NEJ + + .long PAC_WAS,GLL_NEJ + .long PAC_WAS,KIT_COL + .long PAC_WAS,BRA_NEJ + .long PAC_WAS,OBA_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,KIT_COL + .long BRA_NEJ,PAC_WAS + .long BRA_NEJ,OBA_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,KIT_COL + .long OBA_NEJ,PAC_WAS + .long OBA_NEJ,BRA_NEJ + +;17 NEW YORK + .long EWG_NEY,WAL_COL + .long EWG_NEY,JON_CHA + .long EWG_NEY,STA_NEY + .long EWG_NEY,HOU_DET + + .long WAL_COL,EWG_NEY ;new + .long WAL_COL,JON_CHA + .long WAL_COL,STA_NEY + .long WAL_COL,HOU_DET + + .long JON_CHA,EWG_NEY + .long JON_CHA,WAL_COL + .long JON_CHA,STA_NEY + .long JON_CHA,HOU_DET + + .long STA_NEY,EWG_NEY + .long STA_NEY,WAL_COL + .long STA_NEY,JON_CHA + .long STA_NEY,HOU_DET + + .long HOU_DET,EWG_NEY + .long HOU_DET,WAL_COL + .long HOU_DET,JON_CHA + .long HOU_DET,STA_NEY + +;18 ORLANDO + .long HAR_ORL,SKL_GLD + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + + .long SKL_GLD,HAR_ORL + .long SKL_GLD,GRT_ORL + .long SKL_GLD,AND_ORL + .long SKL_GLD,SCO_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,SKL_GLD + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,SKL_GLD + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,SKL_GLD + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + +;19 PHILADELPHIA +;; .long IVE_COL,MIN_COL ;new + .long IVE_COL,STA_PHL + .long IVE_COL,COL_PHL + .long IVE_COL,WEA_PHL + +;; .long MIN_COL,IVE_COL ;new +;; .long MIN_COL,STA_PHL +;; .long MIN_COL,COL_PHL +;; .long MIN_COL,WEA_PHL + + .long STA_PHL,IVE_COL +;; .long STA_PHL,MIN_COL + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + + .long COL_PHL,IVE_COL +;; .long COL_PHL,MIN_COL + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + + .long WEA_PHL,IVE_COL +;; .long WEA_PHL,MIN_COL + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,HOR_HOU + .long JOH_PHX,CAS_HOU + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,HOR_HOU + .long TIS_PHX,CAS_HOU + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,HOR_HOU + .long MAN_PHX,CAS_HOU + + .long HOR_HOU,JOH_PHX + .long HOR_HOU,TIS_PHX + .long HOR_HOU,MAN_PHX + .long HOR_HOU,CAS_HOU + + .long CAS_HOU,JOH_PHX + .long CAS_HOU,TIS_PHX + .long CAS_HOU,MAN_PHX + .long CAS_HOU,HOR_HOU + +;21 PORTLAND + .long ROB_PRT,RID_MIN + .long ROB_PRT,SAB_PRT + .long ROB_PRT,AND_CHA + .long ROB_PRT,CHI_PRT + + .long RID_MIN,ROB_PRT + .long RID_MIN,SAB_PRT + .long RID_MIN,AND_CHA + .long RID_MIN,CHI_PRT + + .long SAB_PRT,ROB_PRT + .long SAB_PRT,RID_MIN + .long SAB_PRT,AND_CHA + .long SAB_PRT,CHI_PRT + + .long AND_CHA,ROB_PRT + .long AND_CHA,RID_MIN + .long AND_CHA,SAB_PRT + .long AND_CHA,CHI_PRT + + .long CHI_PRT,ROB_PRT + .long CHI_PRT,RID_MIN + .long CHI_PRT,SAB_PRT + .long CHI_PRT,AND_CHA + +;22 SACRAMENTO + .long OWE_SAC,RAF_DEN + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,EDN_SAC + + .long RAF_DEN,OWE_SAC + .long RAF_DEN,RIC_SAC + .long RAF_DEN,GRA_SAC + .long RAF_DEN,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,RAF_DEN + .long RIC_SAC,GRA_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RAF_DEN + .long GRA_SAC,RIC_SAC + .long GRA_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RAF_DEN + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,MAX_PHL + .long ELL_SAN,JON_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,MAX_PHL + .long ROB_SAN,JON_SAN + .long ROB_SAN,DEL_SAN + + .long MAX_PHL,ELL_SAN + .long MAX_PHL,ROB_SAN + .long MAX_PHL,JON_SAN + .long MAX_PHL,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,MAX_PHL + .long JON_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,MAX_PHL + .long DEL_SAN,JON_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO + .long ROG_TOR,CAM_COL + .long ROG_TOR,STO_TOR + .long ROG_TOR,JON_DAL + .long ROG_TOR,WIL_MIA + + .long CAM_COL,ROG_TOR ;new + .long CAM_COL,STO_TOR + .long CAM_COL,JON_DAL + .long CAM_COL,WIL_MIA + + .long STO_TOR,ROG_TOR + .long STO_TOR,CAM_COL + .long STO_TOR,JON_DAL + .long STO_TOR,WIL_MIA + + .long JON_DAL,ROG_TOR + .long JON_DAL,CAM_COL + .long JON_DAL,STO_TOR + .long JON_DAL,WIL_MIA + + .long WIL_MIA,ROG_TOR + .long WIL_MIA,CAM_COL + .long WIL_MIA,STO_TOR + .long WIL_MIA,JON_DAL + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,REV_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,REV_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STR_PRT,WEB_WAS + .long STR_PRT,HWD_WAS + .long STR_PRT,MUR_WAS + .long STR_PRT,CHE_WAS + + .long WEB_WAS,STR_PRT + .long WEB_WAS,HWD_WAS + .long WEB_WAS,MUR_WAS + .long WEB_WAS,CHE_WAS + + .long HWD_WAS,STR_PRT + .long HWD_WAS,WEB_WAS + .long HWD_WAS,MUR_WAS + .long HWD_WAS,CHE_WAS + + .long MUR_WAS,STR_PRT + .long MUR_WAS,WEB_WAS + .long MUR_WAS,HWD_WAS + .long MUR_WAS,CHE_WAS + + .long CHE_WAS,STR_PRT + .long CHE_WAS,WEB_WAS + .long CHE_WAS,HWD_WAS + .long CHE_WAS,MUR_WAS +;DJT End + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;DJT Start +ALLEN .equ 1 +CAMBY .equ 2 +DAMPIER .equ 3 +HAMER .equ 4 +HRNGTON .equ 5 +IVERSON .equ 6 +KITTLES .equ 7 +MARBURY .equ 8 +MINOR .equ 9 +RILEY .equ 10 +WALLACE .equ 11 + + .def ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .def MARBURY,MINOR,RILEY,WALLACE + +;00 ATLANTA + .long BLAYLOCK,MUTUMBO + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long MUTUMBO,BLAYLOCK + .long MUTUMBO,SSMITH + .long MUTUMBO,LAETTNER + .long MUTUMBO,KNORMAN + + .long SSMITH,BLAYLOCK + .long SSMITH,MUTUMBO + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,BLAYLOCK + .long LAETTNER,MUTUMBO + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,BLAYLOCK + .long KNORMAN,MUTUMBO + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,HAMER + .long BROWN,BARROS + .long BROWN,RADJA + .long BROWN,FOX + + .long HAMER,BROWN ;new + .long HAMER,BARROS + .long HAMER,RADJA + .long HAMER,FOX + + .long BARROS,BROWN + .long BARROS,HAMER + .long BARROS,RADJA + .long BARROS,FOX + + .long RADJA,BROWN + .long RADJA,HAMER + .long RADJA,BARROS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,HAMER + .long FOX,BARROS + .long FOX,RADJA + +;02 CHARLOTTE + .long RICE,MASON + .long RICE,DIVAC + .long RICE,ZIDEK + .long RICE,CURRY + + .long MASON,RICE + .long MASON,DIVAC + .long MASON,ZIDEK + .long MASON,CURRY + + .long DIVAC,RICE + .long DIVAC,MASON + .long DIVAC,ZIDEK + .long DIVAC,CURRY + + .long ZIDEK,RICE + .long ZIDEK,MASON + .long ZIDEK,DIVAC + .long ZIDEK,CURRY + + .long CURRY,RICE + .long CURRY,MASON + .long CURRY,DIVAC + .long CURRY,ZIDEK + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + +;05 DALLAS + .long KIDD,HARPER_D + .long KIDD,JACK + .long KIDD,MONTROSS + .long KIDD,MASH + + .long HARPER_D,KIDD + .long HARPER_D,JACK + .long HARPER_D,MONTROSS + .long HARPER_D,MASH + + .long JACK,KIDD + .long JACK,HARPER_D + .long JACK,MONTROSS + .long JACK,MASH + + .long MONTROSS,KIDD + .long MONTROSS,HARPER_D + .long MONTROSS,JACK + .long MONTROSS,MASH + + .long MASH,KIDD + .long MASH,HARPER_D + .long MASH,JACK + .long MASH,MONTROSS + +;06 DENVER + .long MCDYESS,MARCIULO + .long MCDYESS,MJACKSON + .long MCDYESS,DELLIS + + .long MARCIULO,MCDYESS + .long MARCIULO,MJACKSON + .long MARCIULO,DELLIS + + .long MJACKSON,MCDYESS + .long MJACKSON,MARCIULO + .long MJACKSON,DELLIS + + .long DELLIS,MCDYESS + .long DELLIS,MARCIULO + .long DELLIS,MJACKSON + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long GHILL,RILEY + .long GHILL,DUMARS + .long GHILL,THORPE + .long GHILL,AUGMON + +;; .long RILEY,GHILL ;new +;; .long RILEY,DUMARS +;; .long RILEY,THORPE +;; .long RILEY,AUGMON + + .long DUMARS,GHILL +;; .long DUMARS,RILEY + .long DUMARS,THORPE + .long DUMARS,AUGMON + + .long THORPE,GHILL +;; .long THORPE,RILEY + .long THORPE,DUMARS + .long THORPE,AUGMON + + .long AUGMON,GHILL +;; .long AUGMON,RILEY + .long AUGMON,DUMARS + .long AUGMON,THORPE + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPREWELL,KONCAK + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long KONCAK,SPREWELL + .long KONCAK,JSMITH + .long KONCAK,MULLIN + + .long JSMITH,SPREWELL + .long JSMITH,KONCAK + .long JSMITH,MULLIN + + .long MULLIN,SPREWELL + .long MULLIN,KONCAK + .long MULLIN,JSMITH + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLAJUWON,HRNGTON + .long OLAJUWON,DREXLER + .long OLAJUWON,WILLIS + + .long HRNGTON,OLAJUWON ;new + .long HRNGTON,DREXLER + .long HRNGTON,WILLIS + + .long DREXLER,OLAJUWON + .long DREXLER,HRNGTON + .long DREXLER,WILLIS + + .long WILLIS,OLAJUWON + .long WILLIS,HRNGTON + .long WILLIS,DREXLER + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MILLER,DAMPIER + .long MILLER,ROSE + .long MILLER,SMITS + .long MILLER,DDAVIS + + .long DAMPIER,MILLER ;new + .long DAMPIER,ROSE + .long DAMPIER,SMITS + .long DAMPIER,DDAVIS + + .long ROSE,MILLER + .long ROSE,DAMPIER + .long ROSE,SMITS + .long ROSE,DDAVIS + + .long SMITS,MILLER + .long SMITS,DAMPIER + .long SMITS,ROSE + .long SMITS,DDAVIS + + .long DDAVIS,MILLER + .long DDAVIS,DAMPIER + .long DDAVIS,ROSE + .long DDAVIS,SMITS + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS + .long VANEXEL,CEBALLOS + .long VANEXEL,SCOTT + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,SCOTT + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long SCOTT,VANEXEL + .long SCOTT,CEBALLOS + .long SCOTT,CAMPBELL + .long SCOTT,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,CEBALLOS + .long CAMPBELL,SCOTT + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,CEBALLOS + .long EJONES,SCOTT + .long EJONES,CAMPBELL + +;13 MIAMI + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,THARDAWAY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAKER,ALLEN + .long BAKER,LANG + .long BAKER,GROBINSO + .long BAKER,RESPERT + + .long ALLEN,BAKER ;new + .long ALLEN,LANG + .long ALLEN,GROBINSO + .long ALLEN,RESPERT + + .long LANG,BAKER + .long LANG,ALLEN + .long LANG,GROBINSO + .long LANG,RESPERT + + .long GROBINSO,BAKER + .long GROBINSO,ALLEN + .long GROBINSO,LANG + .long GROBINSO,RESPERT + + .long RESPERT,BAKER + .long RESPERT,ALLEN + .long RESPERT,LANG + .long RESPERT,GROBINSO + +;15 MINNESOTTA + .long GUGLI2,MARBURY + .long GUGLI2,GARNETT + + .long MARBURY,GUGLI2 ;new + .long MARBURY,GARNETT + + .long GARNETT,GUGLI2 + .long GARNETT,MARBURY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GILL,KITTLES + .long GILL,PACK + .long GILL,BRADLEY + .long GILL,OBANNON + + .long KITTLES,GILL ;new + .long KITTLES,PACK + .long KITTLES,BRADLEY + .long KITTLES,OBANNON + + .long PACK,GILL + .long PACK,KITTLES + .long PACK,BRADLEY + .long PACK,OBANNON + + .long BRADLEY,GILL + .long BRADLEY,KITTLES + .long BRADLEY,PACK + .long BRADLEY,OBANNON + + .long OBANNON,GILL + .long OBANNON,KITTLES + .long OBANNON,PACK + .long OBANNON,BRADLEY + +;17 NEW YORK + .long EWING,WALLACE + .long EWING,JOHNSN_L + .long EWING,STARKS + .long EWING,HOUSTON + + .long WALLACE,EWING ;new + .long WALLACE,JOHNSN_L + .long WALLACE,STARKS + .long WALLACE,HOUSTON + + .long JOHNSN_L,EWING + .long JOHNSN_L,WALLACE + .long JOHNSN_L,STARKS + .long JOHNSN_L,HOUSTON + + .long STARKS,EWING + .long STARKS,WALLACE + .long STARKS,JOHNSN_L + .long STARKS,HOUSTON + + .long HOUSTON,EWING + .long HOUSTON,WALLACE + .long HOUSTON,JOHNSN_L + .long HOUSTON,STARKS + +;18 ORLANDO + .long AHARDAWAY,SEIKALY + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + + .long SEIKALY,AHARDAWAY + .long SEIKALY,GRANT_HC + .long SEIKALY,NANDERSON + .long SEIKALY,DSCOTT + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,SEIKALY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + + .long NANDERSON,AHARDAWAY + .long NANDERSON,SEIKALY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + + .long DSCOTT,AHARDAWAY + .long DSCOTT,SEIKALY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + +;19 PHILADELPHIA +;; .long IVERSON,MINOR ;new + .long IVERSON,STACKHOU + .long IVERSON,COLEMAN + .long IVERSON,WEATHSPN + +;; .long MINOR,IVERSON ;new +;; .long MINOR,STACKHOU +;; .long MINOR,COLEMAN +;; .long MINOR,WEATHSPN + + .long STACKHOU,IVERSON +;; .long STACKHOU,MINOR + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + + .long COLEMAN,IVERSON +;; .long COLEMAN,MINOR + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + + .long WEATHSPN,IVERSON +;; .long WEATHSPN,MINOR + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,HORRY + .long KJOHNSON,CASSELL + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,HORRY + .long TISDALE,CASSELL + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,HORRY + .long MANNING,CASSELL + + .long HORRY,KJOHNSON + .long HORRY,TISDALE + .long HORRY,MANNING + .long HORRY,CASSELL + + .long CASSELL,KJOHNSON + .long CASSELL,TISDALE + .long CASSELL,MANNING + .long CASSELL,HORRY + +;21 PORTLAND + .long CROBINSON,RIDER + .long CROBINSON,SABONIS + .long CROBINSON,KANDERSON + .long CROBINSON,CHILDRES + + .long RIDER,CROBINSON + .long RIDER,SABONIS + .long RIDER,KANDERSON + .long RIDER,CHILDRES + + .long SABONIS,CROBINSON + .long SABONIS,RIDER + .long SABONIS,KANDERSON + .long SABONIS,CHILDRES + + .long KANDERSON,CROBINSON + .long KANDERSON,RIDER + .long KANDERSON,SABONIS + .long KANDERSON,CHILDRES + + .long CHILDRES,CROBINSON + .long CHILDRES,RIDER + .long CHILDRES,SABONIS + .long CHILDRES,KANDERSON + +;22 SACRAMENTO + .long BOWENS,ABDULRAU + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,EDNEY + + .long ABDULRAU,BOWENS + .long ABDULRAU,RICH + .long ABDULRAU,BGRANT + .long ABDULRAU,EDNEY + + .long RICH,BOWENS + .long RICH,ABDULRAU + .long RICH,BGRANT + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,ABDULRAU + .long BGRANT,RICH + .long BGRANT,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,ABDULRAU + .long EDNEY,RICH + .long EDNEY,BGRANT + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,VMAXWELL + .long ELLIOT2,AJOHNSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,VMAXWELL + .long DROBINSON,AJOHNSON + .long DROBINSON,DELNEGRO + + .long VMAXWELL,ELLIOT2 + .long VMAXWELL,DROBINSON + .long VMAXWELL,AJOHNSON + .long VMAXWELL,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,VMAXWELL + .long AJOHNSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,VMAXWELL + .long DELNEGRO,AJOHNSON + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + +;25 TORONTO + .long CROGERS,CAMBY + .long CROGERS,STOUDAMI + .long CROGERS,PJONES + .long CROGERS,WWILLIAM + + .long CAMBY,CROGERS ;new + .long CAMBY,STOUDAMI + .long CAMBY,PJONES + .long CAMBY,WWILLIAM + + .long STOUDAMI,CROGERS + .long STOUDAMI,CAMBY + .long STOUDAMI,PJONES + .long STOUDAMI,WWILLIAM + + .long PJONES,CROGERS + .long PJONES,CAMBY + .long PJONES,STOUDAMI + .long PJONES,WWILLIAM + + .long WWILLIAM,CROGERS + .long WWILLIAM,CAMBY + .long WWILLIAM,STOUDAMI + .long WWILLIAM,PJONES + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,BREEVES + + .long EDWARDS,ANTHONY + .long EDWARDS,BREEVES + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STRICKLA,WEBBER + .long STRICKLA,JHOWARD + .long STRICKLA,MURESAN + .long STRICKLA,CHEANEY + + .long WEBBER,STRICKLA + .long WEBBER,JHOWARD + .long WEBBER,MURESAN + .long WEBBER,CHEANEY + + .long JHOWARD,STRICKLA + .long JHOWARD,WEBBER + .long JHOWARD,MURESAN + .long JHOWARD,CHEANEY + + .long MURESAN,STRICKLA + .long MURESAN,WEBBER + .long MURESAN,JHOWARD + .long MURESAN,CHEANEY + + .long CHEANEY,STRICKLA + .long CHEANEY,WEBBER + .long CHEANEY,JHOWARD + .long CHEANEY,MURESAN +;DJT End + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end diff --git a/BACKUP/XCODE100L/SOUNDS.ASM b/BACKUP/XCODE100L/SOUNDS.ASM new file mode 100644 index 0000000..a63f0dc --- /dev/null +++ b/BACKUP/XCODE100L/SOUNDS.ASM @@ -0,0 +1,1287 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 +;DJT Start + SX homeaway_cur,>0101,20, >27c + SX bx_slide_snd,>0001,28, >1f6 + + SX diag_cursor, >0501,20, >27c + SX diag_select, >0501,20, >280 + SX update_adj, >0501,18, >278 + SX adj_menu_ext,>0501,20, >280 +; SX adj_menu_ent,>0501,27, >280 + SX error_found, >0501,20, >260 ;367 ? + +;DJT End + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd +;DJT Start + SX warn_snd, >1504,25, >283 ;1fd + SX tfire_tcksnd,>1504,35, >176 ;27f + SX tfire_outsnd,>1504,70, >400 +;DJT End + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc +;DJT Start + SX netmush_snd, >3503,80, >ce + SX aly_pass_snd,>1903,104,>2e2 + SX aly_rcv_snd, >200C,20, >9b +;DJT End + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white +;DJT Start + SX hs_shot_snd, >1803,50, >b92 ;take a hotspot shot +; SX hs_shot_snd, >1803,50, >b92 ;alternate? for hot hotspot +;DJT End + +;dunk sounds +;DJT Start + SX helicptr_snd,>1603,90, >a6 +;DJT End + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +;DJT Start + .if 0 ;Not called! +;DJT End +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 +;DJT Start + clr a14 + move a14,@doing_dcs_reset + +;DJT End + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + +;DJT Start +;DJT moved doing_dcs_reset up a few lines +;DJT End + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + +;DJT Start + JSRP QSNDRST + DIE +;DJT End + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 +;DJT Start +; move @doing_dcs_reset,a0 ;Still in a reset? +; jrnz sendx ; br=yes, don't do anything yet +;DJT End + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + +;DJT Start + .if 0 ;not called! +;DJT End + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100L/SPEECH.ASM b/BACKUP/XCODE100L/SPEECH.ASM new file mode 100644 index 0000000..ae3fc4b --- /dev/null +++ b/BACKUP/XCODE100L/SPEECH.ASM @@ -0,0 +1,4704 @@ +;DJT Start whole file changed!! +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 +;DJT Start + SX max_hngtm_sp,>200D,93, >b8f +; SX nba_hngtm_sp,>200D,99, >b02 +;DJT End + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 +;DJT Start + SX with_sp, >100D,16, >aef + SX leadng_by_sp,>100D,56, >84e + SX leads_by_sp, >100D,51, >84b + SX lead_by_sp, >100D,41, >849 + SX out_front_sp,>100D,48, >850 + SX by_sp, >100D,18, >851 +;DJT End + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + +;DJT Start + SX longway_sp, >100D,73, >86e + SX downby_sp, >100D,36, >845 + SX behind_by_sp,>100D,49, >853 + SX catchg_up_sp,>100D,41, >873 + + SX tiegm_sp, >100D,44, >864 + SX tiethegm_sp, >100D,51, >869 + SX tied_at_sp, >100D,69, >866 +;DJT End + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 +;DJT Start + SX tp_circle_sp,>100D,63, >b1c + SX fm_3pline_sp,>100D,80, >7e5 +;DJT End + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb +;DJT Start + SX lfts_wild_sp,>100D,87, >9bb +;DJT End + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b +;DJT Start + SX the_scoop_sp,>120D,51, >b3c +;DJT End + SX lev_tmate_sp,>120D,83, >b3d +;DJT Start + SX is_legal_sp ,>0F0D,65, >b21 +;DJT End + + SX tm_onfire_sp,>140D,76, >b3e +;DJT Start + SX got_hspot_sp,>140D,76, >b40 +;DJT End + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 +;DJT Start + SX look_out_sp, >100D,41, >a6f +;DJT End + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 +;DJT Start + SX what_was_sp, >100D,66, >b2b +;DJT End + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 +;DJT Start + SX lch_atbkt_sp,>110D,100,>b03 +;DJT End + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 +;DJT Start + SX luky_bskt_sp,>100D,82, >948 +;DJT End + +;DJT Start + SX kakaboom_sp, >100D,69, >91b + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,34, >91a +;DJT End + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 +;DJT Start + SX throws_it_sp,>100D,66, >963 + SX pounds_it_sp,>100D,62, >964 + SX incredble_sp,>100D,49, >970 + SX incrd_sht_sp,>100D,75, >90e +; SX supr_dnk_sp, >100D,61, >971 ;** +; SX mnstr_jam_sp,>100D,70, >971 + SX outstndng_sp,>100D,67, >aaa +;DJT End + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de +;DJT Start + SX scores2_sp, >100D,52, >7df +;DJT End + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c +;DJT Start + SX and_drops_sp,>100D,56, >943 +;DJT End + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + +;DJT Start + SX chalk_it_sp, >100D,38, >b48 +;DJT End + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 +;DJT Start + SX swish2_sp, >100D,43, >b29 +;DJT End + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 +;DJT Start + SX greatshot_sp,>100D,47, >90f +;DJT End + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is +;DJT Start + SX debacle_sp, >100D,66, >a92 + SX its_hstry_sp,>100D,47, >85f + SX strike_up_sp,>100D,122,>b4d +;DJT End + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 +;DJT Start + SX just_secs_sp,>100D,84, >ab3 +;DJT End + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a +;DJT Start + SX downcrt2_sp, >070D,39, >a1e + SX lngpss_dc_sp,>070D,84, >a0b +;DJT End + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f +;DJT Start + SX tks_rbnd3_sp,>100D,96, >a5b +;DJT End + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c +;DJT look_out_sp line moved + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 +;DJT Start +; SX shvd_asde_sp,>090D,67, >aca +;DJT End + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +;DJT Start +welcome_sc LWLW midway_sp,67,max_hngtm_sp,-1 +;welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;DJT End +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,83,1304 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER, christian + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,57,2912 ;HAMER, steve + .word >100D,66,1324 ;BARROS, dana + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,65,1348 ;RICE, glen ( CHARLOTTE ) + .word >100D,80,1644 ;MASON, anthony + .word >100D,78,1544 ;DIVAC, vlade + .word >100D,70,1352 ;ZIDEK, george + .word >100D,58,1356 ;CURRY, del + + .word >100D,72,1360 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, toni + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,68,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,68,1404 ;KIDD, jason ( DALLAS ) + .word >100D,71,1648 ;HARPER, derek + .word >100D,84,1400 ;JACKSON, jim + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,88,1408 ;MASHBURN, jamal + + .word >100D,96,1428 ;McDYESS, antonio ( DENVER ) + .word >100D,100,1752 ;MARCIULIONIS,sarunas + .word >100D,78,1516 ;JACKSON, mark + .word >100D,64,1436 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,63,1444 ;HILL, grant ( DETROIT ) +;; .word >100D,54,2954 ;RILEY, ron + .word >100D,74,1440 ;DUMARS, joe + .word >100D,56,1452 ;THORPE, otis + .word >100D,77,1300 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,76,1464 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,72,1676 ;KONCAK, jon + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,118,1480 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,66,2909 ;HARRINGTON, othella + .word >100D,80,1484 ;DREXLER, clyde + .word >100D,61,1568 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,85,1500 ;MILLER, reggie ( INDIANA ) + .word >100D,66,2936 ;DAMPIER, erick + .word >100D,70,1432 ;ROSE, jalen + .word >100D,71,1508 ;SMITS, rik + .word >100D,71,1504 ;DAVIS, dale + + .word >100D,45,1520 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDSON, pooh + .word >100D,72,1536 ;BARRY, brent + + .word >100D,76,1540 ;VAN EXEL, nick ( LAKERS ) + .word >100D,83,1548 ;CEBALLOS, cedric + .word >100D,56,1958 ;SCOTT, byron + .word >100D,62,1552 ;CAMPBELL, elden + .word >100D,68,1556 ;JONES, eddie + + .word >100D,97,1560 ;MOURNING, alonzo ( MIAMI ) + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,70,1580 ;BAKER, vin ( MILWAUKEE ) + .word >100D,60,2930 ;ALLEN, ray + .word >100D,72,1955 ;LANG, andrew + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,77,1588 ;RESPERT, shawn + + .word >100D,73,1612 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,75,2951 ;MARBURY, stephon + .word >100D,72,1616 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,52,2903 ;KITTLES, kerry + .word >100D,70,1872 ;PACK, robert + .word >100D,81,1624 ;BRADLEY, shawn + .word >100D,61,1632 ;O'BANNON, ed + + .word >100D,82,1640 ;EWING, patrick ( NEW YORK ) + .word >100D,65,2906 ;WALLACE, john + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,70,1656 ;STARKS, john + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,84,1468 ;SEIKALY, rony + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + + .word >100D,72,2942 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,56,2915 ;MINOR, ryan + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,113,1688 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE, wayman + .word >100D,66,1708 ;MANNING, danny + .word >100D,80,1488 ;HORRY, robert + .word >100D,70,1492 ;CASSELL, sam + + .word >100D,94,1724 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,94,1600 ;RIDER, isaiah + .word >100D,93,1728 ;SABONIS, arvydas + .word >100D,64,1620 ;ANDERSON, kenny + .word >100D,76,1736 ;CHILDRESS, randolph + + .word >100D,74,1564 ;OWENS, billy ( SACRAMENTO ) + .word >100D,89,1420 ;ABDUL-RAUF, mahmoud + .word >100D,82,1744 ;RICHMOND, mitch + .word >100D,85,1748 ;GRANT, brian + .word >100D,50,1756 ;EDNEY, tyus + + .word >100D,69,1760 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,92,1764 ;ROBINSON, david + .word >100D,90,1696 ;MAXWELL, vernon + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,82,1776 ;DEL NEGRO, vinny + + .word >100D,64,1780 ;KEMP, shawn ( SEATTLE ) + .word >100D,74,1784 ;PAYTON, gary + .word >100D,57,1788 ;SCHREMPF, detlef + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD, sherell + + .word >100D,59,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,72,2927 ;CAMBY, marcus + .word >100D,92,1804 ;STOUDAMIRE, damon + .word >100D,74,1412 ;JONES, popeye + .word >100D,78,1740 ;WILLIAMS, walt + + .word >100D,79,1820 ;STOCKTON, john ( UTAH ) + .word >100D,68,1824 ;MALONE, karl + .word >100D,70,1828 ;HORNACEK, jeff + .word >100D,64,1836 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,78,1840 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,66,1844 ;EDWARDS, blue + .word >100D,74,1852 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,77,1720 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,53,1864 ;WEBBER, chris + .word >100D,74,1860 ;HOWARD, juwan + .word >100D,92,1876 ;MURESAN, gheorge + .word >100D,69,1868 ;CHEANEY, calbert + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,54,1307 ;to BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,43,1311 ;to SMITH, steve + .word >100D,43,1607 ;to LAETNER, christian + .word >100D,43,1319 ;to NORMAN, ken + + .word >100D,42,1323 ;to BROWN, dee ( BOSTON ) + .word >100D,35,2914 ;to HAMER, steve + .word >100D,40,1327 ;to BARROS, dana + .word >100D,44,1335 ;to RADJA, dino + .word >100D,43,1339 ;to FOX, rick + + .word >100D,42,1351 ;to RICE, glen ( CHARLOTTE ) + .word >100D,60,1647 ;to MASON, anthony + .word >100D,49,1547 ;to DIVAC, vlade + .word >100D,41,1355 ;to ZIDEK, george + .word >100D,36,1359 ;to CURRY, del + + .word >100D,41,1363 ;to PIPPEN, scottie ( CHICAGO ) + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,47,1371 ;to KUKOC, toni + .word >100D,56,1375 ;to LONGLEY, luke + .word >100D,44,1379 ;to KERR, steve + + .word >100D,42,1383 ;to HILL, tyrone ( CLEVELAND ) + .word >100D,51,1387 ;to MILLS, chris + .word >100D,44,1391 ;to PHILLS, bobby + .word >100D,39,1395 ;to BRANDON, terrell + .word >100D,38,1399 ;to FERRY, danny + + .word >100D,41,1407 ;to KIDD, jason ( DALLAS ) + .word >100D,46,1651 ;to HARPER, derek + .word >100D,57,1403 ;to JACKSON, jim + .word >100D,62,1331 ;to MONTROSS, eric + .word >100D,59,1411 ;to MASHBURN, jamal + + .word >100D,58,1431 ;to McDYESS, antonio ( DENVER ) + .word >100D,58,1755 ;to MARCIULIONIS,sarunas + .word >100D,57,1519 ;to JACKSON, mark + .word >100D,38,1439 ;to ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,42,1447 ;to HILL, grant ( DETROIT ) +;; .word >100D,41,2956 ;to RILEY, ron + .word >100D,61,1443 ;to DUMARS, joe + .word >100D,34,1455 ;to THORPE, otis + .word >100D,44,1303 ;to AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,52,1467 ;to SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,46,1679 ;to KONCAK, jon + .word >100D,43,1475 ;to SMITH, joe + .word >100D,52,1479 ;to MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,64,1483 ;to OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,45,2911 ;to HARRINGTON, othella + .word >100D,51,1487 ;to DREXLER, clyde + .word >100D,40,1571 ;to WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1503 ;to MILLER, reggie ( INDIANA ) + .word >100D,48,2938 ;to DAMPIER, erick + .word >100D,38,1435 ;to ROSE, jalen + .word >100D,55,1511 ;to SMITS, rik + .word >100D,43,1507 ;to DAVIS, dale + + .word >100D,36,1523 ;to VAUGHT, loy ( CLIPPERS ) + .word >100D,43,1527 ;to ROGERS, rodney + .word >100D,39,1531 ;to MURRAY, lamond + .word >100D,54,1535 ;to RICHARDSON, pooh + .word >100D,43,1539 ;to BARRY, brent + + .word >100D,54,1543 ;to VAN EXEL, nick ( LAKERS ) + .word >100D,54,1551 ;to CEBALLOS, cedric + .word >100D,40,1960 ;to SCOTT, byron + .word >100D,46,1555 ;to CAMPBELL, elden + .word >100D,49,1559 ;to JONES, eddie + + .word >100D,44,1563 ;to MOURNING, alonzo ( MIAMI ) + .word >100D,56,1463 ;to HARDAWAY, tim + .word >100D,58,1575 ;to DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,49,1583 ;to BAKER, vin ( MILWAUKEE ) + .word >100D,44,2932 ;to ALLEN, ray + .word >100D,45,1957 ;to LANG, andrew + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,51,1591 ;to RESPERT, shawn + + .word >100D,52,1615 ;to GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,40,2953 ;to MARBURY, stephon + .word >100D,50,1619 ;to GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,40,1343 ;to GILL, kendall ( NEW JERSEY ) + .word >100D,41,2905 ;to KITTLES, kerry + .word >100D,41,1875 ;to PACK, robert + .word >100D,53,1627 ;to BRADLEY, shawn + .word >100D,45,1635 ;to O'BANNON, ed + + .word >100D,43,1643 ;to EWING, patrick ( NEW YORK ) + .word >100D,39,2908 ;to WALLACE, john + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,45,1659 ;to STARKS, john + .word >100D,54,1459 ;to HOUSTON, allan + + .word >100D,56,1663 ;to HARDAWAY, anfernee ( ORLANDO ) + .word >100D,55,1471 ;to SEIKALY, rony + .word >100D,43,1667 ;to GRANT, horace + .word >100D,43,1671 ;to ANDERSON, nick + .word >100D,45,1675 ;to SCOTT, dennis + + .word >100D,53,2944 ;to IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,38,2917 ;to MINOR, ryan + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,46,1687 ;to COLEMAN, derrick + .word >100D,75,1691 ;to WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1703 ;to JOHNSON, kevin ( PHOENIX ) + .word >100D,61,1707 ;to TISDALE, wayman + .word >100D,38,1711 ;to MANNING, danny + .word >100D,51,1491 ;to HORRY, robert + .word >100D,48,1495 ;to CASSELL, sam + + .word >100D,70,1727 ;to ROBINSON, cliff ( PORTLAND ) + .word >100D,53,1603 ;to RIDER, isaiah + .word >100D,49,1731 ;to SABONIS, arvydas + .word >100D,43,1623 ;to ANDERSON, kenny + .word >100D,48,1739 ;to CHILDRESS, randolph + + .word >100D,51,1567 ;to OWENS, billy ( SACRAMENTO ) + .word >100D,61,1423 ;to ABDUL-RAUF, mahmoud + .word >100D,51,1747 ;to RICHMOND, mitch + .word >100D,43,1751 ;to GRANT, brian + .word >100D,36,1759 ;to EDNEY, tyus + + .word >100D,41,1763 ;to ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,65,1699 ;to MAXWELL, vernon + .word >100D,48,1771 ;to JOHNSON, avery + .word >100D,54,1779 ;to DEL NEGRO, vinny + + .word >100D,37,1783 ;to KEMP, shawn ( SEATTLE ) + .word >100D,43,1787 ;to PAYTON, gary + .word >100D,41,1791 ;to SCHREMPF, detlef + .word >100D,44,1795 ;to HAWKINS, hersey + .word >100D,40,1799 ;to FORD, sherell + + .word >100D,43,1803 ;to ROGERS, carlos ( TORONTO ) + .word >100D,45,2929 ;to CAMBY, marcus + .word >100D,63,1807 ;to STOUDAMIRE, damon + .word >100D,49,1415 ;to JONES, popeye + .word >100D,45,1743 ;to WILLIAMS, walt + + .word >100D,53,1823 ;to STOCKTON, john ( UTAH ) + .word >100D,51,1827 ;to MALONE, karl + .word >100D,49,1831 ;to HORNACEK, jeff + .word >100D,39,1839 ;to MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,40,1843 ;to ANTHONY, greg ( VANCOUVER ) + .word >100D,38,1847 ;to EDWARDS, blue + .word >100D,48,1855 ;to REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,51,1723 ;to STRICKLAND, rod ( WASHINGTON ) + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,43,1863 ;to HOWARD, juwan + .word >100D,63,1879 ;to MURESAN, gheorge + .word >100D,43,1871 ;to CHEANEY, calbert + + +*********** +*********** +name_speech ;(last name only, excited) + + .word >100D,44,1305 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1309 ;SMITH, steve + .word >100D,33,1605 ;LAETNER, christian + .word >100D,34,1317 ;NORMAN, ken + + .word >100D,36,1321 ;BROWN, dee ( BOSTON ) + .word >100D,26,2913 ;HAMER, steve + .word >100D,31,1325 ;BARROS, dana + .word >100D,35,1333 ;RADJA, dino + .word >100D,33,1337 ;FOX, rick + + .word >100D,33,1349 ;RICE, glen ( CHARLOTTE ) + .word >100D,51,1645 ;MASON, anthony + .word >100D,39,1545 ;DIVAC, vlade + .word >100D,32,1353 ;ZIDEK, george + .word >100D,27,1357 ;CURRY, del + + .word >100D,31,1361 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1369 ;KUKOC, toni + .word >100D,47,1373 ;LONGLEY, luke + .word >100D,35,1377 ;KERR, steve + + .word >100D,33,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,42,1385 ;MILLS, chris + .word >100D,35,1389 ;PHILLS, bobby + .word >100D,30,1393 ;BRANDON, terrell + .word >100D,28,1397 ;FERRY, danny + + .word >100D,32,1405 ;KIDD, jason ( DALLAS ) + .word >100D,37,1649 ;HARPER, derek + .word >100D,48,1401 ;JACKSON, jim + .word >100D,53,1329 ;MONTROSS, eric + .word >100D,50,1409 ;MASHBURN, jamal + + .word >100D,49,1429 ;McDYESS, antonio ( DENVER ) + .word >100D,49,1753 ;MARCIULIONIS,sarunas + .word >100D,48,1517 ;JACKSON, mark + .word >100D,28,1437 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,33,1445 ;HILL, grant ( DETROIT ) +;; .word >100D,31,2955 ;RILEY, ron + .word >100D,46,1441 ;DUMARS, joe + .word >100D,25,1453 ;THORPE, otis + .word >100D,34,1301 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,43,1465 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,37,1677 ;KONCAK, jon + .word >100D,33,1473 ;SMITH, joe + .word >100D,43,1477 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,55,1482 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,36,2910 ;HARRINGTON, othella + .word >100D,41,1485 ;DREXLER, clyde + .word >100D,31,1569 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,39,1501 ;MILLER, reggie ( INDIANA ) + .word >100D,39,2937 ;DAMPIER, erick + .word >100D,29,1433 ;ROSE, jalen + .word >100D,46,1509 ;SMITS, rik + .word >100D,34,1505 ;DAVIS, dale + + .word >100D,27,1521 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,34,1525 ;ROGERS, rodney + .word >100D,30,1529 ;MURRAY, lamond + .word >100D,44,1533 ;RICHARDSON, pooh + .word >100D,33,1537 ;BARRY, brent + + .word >100D,44,1541 ;VAN EXEL, nick ( LAKERS ) + .word >100D,44,1549 ;CEBALLOS, cedric + .word >100D,32,1959 ;SCOTT, byron + .word >100D,37,1553 ;CAMPBELL, elden + .word >100D,40,1557 ;JONES, eddie + + .word >100D,35,1561 ;MOURNING, alonzo ( MIAMI ) + .word >100D,47,1461 ;HARDAWAY, tim + .word >100D,49,1573 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,39,1581 ;BAKER, vin ( MILWAUKEE ) + .word >100D,35,2931 ;ALLEN, ray + .word >100D,36,1956 ;LANG, andrew + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,41,1589 ;RESPERT, shawn + + .word >100D,43,1613 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,31,2952 ;MARBURY, stephon + .word >100D,41,1617 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,31,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,32,2904 ;KITTLES, kerry + .word >100D,32,1873 ;PACK, robert + .word >100D,43,1625 ;BRADLEY, shawn + .word >100D,36,1633 ;O'BANNON, ed + + .word >100D,42,1641 ;EWING, patrick ( NEW YORK ) + .word >100D,30,2907 ;WALLACE, john + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,36,1657 ;STARKS, john + .word >100D,44,1457 ;HOUSTON, allan + + .word >100D,47,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,46,1469 ;SEIKALY, rony + .word >100D,34,1665 ;GRANT, horace + .word >100D,33,1669 ;ANDERSON, nick + .word >100D,36,1673 ;SCOTT, dennis + + .word >100D,44,2943 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,28,2916 ;MINOR, ryan + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,37,1685 ;COLEMAN, derrick + .word >100D,66,1689 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,38,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,51,1705 ;TISDALE, wayman + .word >100D,28,1709 ;MANNING, danny + .word >100D,42,1489 ;HORRY, robert + .word >100D,38,1493 ;CASSELL, sam + + .word >100D,61,1725 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,43,1601 ;RIDER, isaiah + .word >100D,40,1729 ;SABONIS, arvydas + .word >100D,33,1621 ;ANDERSON, kenny + .word >100D,38,1737 ;CHILDRESS, randolph + + .word >100D,41,1565 ;OWENS, billy ( SACRAMENTO ) + .word >100D,51,1421 ;ABDUL-RAUF, mahmoud + .word >100D,41,1745 ;RICHMOND, mitch + .word >100D,34,1749 ;GRANT, brian + .word >100D,27,1757 ;EDNEY, tyus + + .word >100D,32,1761 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,61,1765 ;ROBINSON, david + .word >100D,56,1697 ;MAXWELL, vernon + .word >100D,38,1769 ;JOHNSON, avery + .word >100D,45,1777 ;DEL NEGRO, vinny + + .word >100D,28,1781 ;KEMP, shawn ( SEATTLE ) + .word >100D,33,1785 ;PAYTON, gary + .word >100D,32,1789 ;SCHREMPF, detlef + .word >100D,35,1793 ;HAWKINS, hersey + .word >100D,31,1797 ;FORD, sherell + + .word >100D,34,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,36,2928 ;CAMBY, marcus + .word >100D,54,1805 ;STOUDAMIRE, damon + .word >100D,40,1413 ;JONES, popeye + .word >100D,36,1741 ;WILLIAMS, walt + + .word >100D,44,1821 ;STOCKTON, john ( UTAH ) + .word >100D,42,1825 ;MALONE, karl + .word >100D,40,1829 ;HORNACEK, jeff + .word >100D,30,1837 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,31,1841 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,39,1853 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,42,1721 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,18,1865 ;WEBBER, chris + .word >100D,34,1861 ;HOWARD, juwan + .word >100D,54,1877 ;MURESAN, gheorge + .word >100D,34,1869 ;CHEANEY, calbert + + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... +*********** +*********** +special_name_speech + .word >100D,32,2290 ;0 JEFF JOHNSON + .word >100D,31,2276 ;1 SAL DIVITA + .word >100D,32,2272 ;2 TURMELL + .word >100D,28,2286 ;3 THOMPSON + .word >100D,22,2278 ;4 GEER + .word >100D,33,2288 ;5 CARLTON + .word >100D,28,2280 ;6 HEDRICK + .word >100D,23,2274 ;7 JOHN HEY + .word >100D,43,2266 ;8 AIR MORRIS + .word >100D,30,2268 ;9 STEVE BARDO + .word >100D,35,2270 ;10 MINIFEE + .word >100D,41,2282 ;11 MARTINEZ + .word >100D,36,2284 ;12 PESINA + .word >0105,36,2250 ;13 LIPTAK + .word >0105,46,1910 ;14 EDDIE + .word >0105,26,1920 ;15 MIKE V. + .word >0105,26,1888 ;16 JAMIE R. + .word >0105,26,1888 ;17 NICK E. + .word >0105,26,1888 ;18 J. ROOT + .word >0105,26,1888 ;19 MEDNICK + .word >0105,26,1888 ;20 DAN R. + .word >0105,26,1888 ;21 PAT F. + .word >0105,26,1888 ;22 ED BOON + .word >0105,26,1888 ;23 J. TOBIAS + .word >0105,26,1888 ;24 OURSLER + .word >0105,26,1888 ;25 JASON S. + .word >0105,26,1888 ;26 QUINN + .word >0105,26,1888 ;27 M. PERRY + .word >0105,26,1888 ;28 N. FUNK + .word >0105,26,1888 ;29 MDOC + .word >0105,26,1888 ;30 BUD + .word >0105,54,1877 ;31 MARIUS + .word >0105,26,1888 ;32 MUNDAY + .word >0105,26,1888 ;33 NORTH + .word >0105,26,1888 ;34 AMRICH + .word >0105,26,1888 ;35 JIGGETS + .word >0105,26,1888 ;36 ZIRIN + .word >0105,26,1888 ;37 HEITH BETTLEMAN + .word >0105,30,1928 ;38 MATT BETTLEMAN + .word >0105,36,2250 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,31,1361 ;PIPPEN, scottie + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,33,1349 ;RICE, glen + .word >100D,32,1405 ;KIDD, jason + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1445 ;HILL, grant + .word >100D,55,1482 ;OLAJUWAN, hakeem + .word >100D,39,1501 ;MILLER, reggie + .word >100D,46,1509 ;SMITS, rik + .word >100D,35,1561 ;MOURNING, alonzo + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,42,1641 ;EWING, patrick + .word >100D,36,1657 ;STARKS, john + .word >100D,47,1661 ;HARDAWAY, anfernee + .word >100D,34,1665 ;GRANT, horace + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,61,1725 ;ROBINSON, cliff + .word >100D,61,1765 ;ROBINSON, david + .word >100D,32,1761 ;ELLIOTT, sean + .word >100D,28,1781 ;KEMP, shawn + .word >100D,42,1825 ;MALONE, karl + .word >100D,18,1865 ;WEBBER, chris + .word >100D,54,1877 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,46,1417 ;McCLOUD, george + .word >100D,42,1449 ;MILLS, terry + .word >100D,33,1497 ;SMITH, kenny + .word >100D,43,1513 ;McKEE, derek + .word >100D,36,1962 ;CHAPMAN, rex + .word >100D,34,1593 ;BENJAMIN, benoit + .word >100D,29,1597 ;DOUGLAS, sherman + .word >100D,31,1965 ;WEBB, spud + .word >100D,30,1629 ;GILLIAM, armon + .word >100D,29,1637 ;EDWARDS, kevin + .word >100D,36,1653 ;OAKLEY, charles + .word >100D,31,1968 ;RUFFIN, trevor + .word >100D,36,1713 ;PERSON, wesley + .word >100D,42,1717 ;FINLEY, michael + .word >100D,36,1733 ;WILLIAMS, buck + .word >100D,36,1773 ;PERSON, chuck + .word >100D,36,1953 ;ROBERTSON, alvin + .word >100D,39,1813 ;MILLER, oliver + .word >100D,30,1817 ;MURRAY, tracy + .word >100D,38,1833 ;BENOIT, david + .word >100D,36,1959 ;SCOTT, byron + .word >100D,37,1857 ;MURDOCK, eric + + +*********** +*********** +special_pass_speech + .word >100D,41,2291 ;0 JEFF JOHNSON + .word >100D,41,2277 ;1 SAL DIVITA + .word >100D,41,2273 ;2 TURMELL + .word >100D,38,2287 ;3 THOMPSON + .word >100D,31,2279 ;4 GEER + .word >100D,42,2289 ;5 CARLTON + .word >100D,37,2281 ;6 HEDRICK + .word >100D,32,2275 ;7 JOHN HEY + .word >100D,52,2267 ;8 AIR MORRIS + .word >100D,39,2269 ;9 STEVE BARDO + .word >100D,44,2271 ;10 MINIFEE + .word >100D,51,2283 ;11 MARTINEZ + .word >100D,45,2285 ;12 PESINA + .word >0105,45,2251 ;13 LIPTAK + .word >0105,55,1911 ;14 EDDIE + .word >0105,35,1921 ;15 MIKE V. + .word >0105,35,1889 ;16 JAMIE R. + .word >0105,35,1889 ;17 NICK E. + .word >0105,35,1889 ;18 J. ROOT + .word >0105,35,1889 ;19 MEDNICK + .word >0105,35,1889 ;20 DAN R. + .word >0105,35,1889 ;21 PAT F. + .word >0105,35,1889 ;22 ED BOON + .word >0105,35,1889 ;23 J. TOBIAS + .word >0105,35,1889 ;24 OURSLER + .word >0105,35,1889 ;25 JASON S. + .word >0105,35,1889 ;26 QUINN + .word >0105,35,1889 ;27 M. PERRY + .word >0105,35,1889 ;28 N. FUNK + .word >0105,35,1889 ;29 MDOC + .word >0105,35,1889 ;30 BUD + .word >0105,63,1879 ;31 MARIUS + .word >0105,35,1889 ;32 MUNDAY + .word >0105,35,1889 ;33 NORTH + .word >0105,35,1889 ;34 AMRICH + .word >0105,35,1889 ;35 JIGGETS + .word >0105,35,1889 ;36 ZIRIN + .word >0105,35,1889 ;37 HEITH BETTLEMAN + .word >0105,39,1929 ;38 MATT BETTLEMAN + .word >0105,45,2251 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,41,1363 ;to PIPPEN, scottie + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,42,1351 ;to RICE, glen + .word >100D,41,1407 ;to KIDD, jason + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,42,1447 ;to HILL, grant + .word >100D,64,1483 ;to OLAJUWAN, hakeem + .word >100D,48,1503 ;to MILLER, reggie + .word >100D,55,1511 ;to SMITS, rik + .word >100D,44,1563 ;to MOURNING, alonzo + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,43,1643 ;to EWING, patrick + .word >100D,45,1659 ;to STARKS, john + .word >100D,56,1663 ;to HARDAWAY, anfernee + .word >100D,43,1667 ;to GRANT, horace + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,70,1727 ;to ROBINSON, cliff + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,41,1763 ;to ELLIOTT, sean + .word >100D,37,1783 ;to KEMP, shawn + .word >100D,51,1827 ;to MALONE, karl + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,63,1879 ;to MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,56,1419 ;to McCLOUD, george + .word >100D,51,1451 ;to MILLS, terry + .word >100D,43,1499 ;to SMITH, kenny + .word >100D,52,1515 ;to McKEE, derek + .word >100D,45,1963 ;to CHAPMAN, rex + .word >100D,43,1595 ;to BENJAMIN, benoit + .word >100D,38,1599 ;to DOUGLAS, sherman + .word >100D,41,1966 ;to WEBB, spud + .word >100D,39,1631 ;to GILLIAM, armon + .word >100D,38,1639 ;to EDWARDS, kevin + .word >100D,45,1655 ;to OAKLEY, charles + .word >100D,40,1969 ;to RUFFIN, trevor + .word >100D,45,1715 ;to PERSON, wesley + .word >100D,51,1719 ;to FINLEY, michael + .word >100D,45,1735 ;to WILLIAMS, buck + .word >100D,45,1775 ;to PERSON, chuck + .word >100D,45,1954 ;to ROBERTSON, alvin + .word >100D,48,1815 ;to MILLER, oliver + .word >100D,39,1819 ;to MURRAY, tracy + .word >100D,48,1835 ;to BENOIT, david + .word >100D,45,1960 ;to SCOTT, byron + .word >100D,46,1859 ;to MURDOCK, eric + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,25,>4b2 ;00 ATLANTA "Hawks" + .word >100D,33,>4b5 ;01 BOSTON "Celtics" + .word >100D,22,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,25,>4bb ;03 CHICAGO "Bulls" + .word >100D,41,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,29,>4c1 ;05 DALLAS "Maverick" + .word >100D,24,>4c4 ;06 DENVER "Nuggets" + .word >100D,37,>4c7 ;07 DETROIT "Pistons" + .word >100D,39,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,28,>4cd ;09 HOUSTON "Rockets" + .word >100D,37,>4d0 ;10 INDIANA "Pacers" + .word >100D,28,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,36,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,20,>4d9 ;13 MIAMI "Heat" + .word >100D,24,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,45,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,22,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,27,>4e5 ;17 NEW YORK "Knicks" + .word >100D,28,>4e8 ;18 ORLANDO "Magic" + .word >100D,64,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,31,>4ee ;20 PHOENIX "Suns" + .word >100D,52,>4f1 ;21 PORTLAND "Blazers" + .word >100D,36,>4f4 ;22 SACRAMENTO "Kings" + .word >100D,40,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,52,>4fa ;24 SEATTLE "Supersonics" + .word >100D,39,>4fd ;26 TORONTO "Raptors" + .word >100D,33,>500 ;26 UTAH "Jazz" + .word >100D,39,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,22,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,39,>4b1 ;00 ATLANTA + .word >100D,30,>4b4 ;01 BOSTON + .word >100D,31,>4b7 ;02 CHARLOTTE + .word >100D,41,>4ba ;03 CHICAGO + .word >100D,28,>4bd ;04 CLEVELAND + .word >100D,27,>4c0 ;05 DALLAS + .word >100D,25,>4c3 ;06 DENVER + .word >100D,36,>4c6 ;07 DETROIT + .word >100D,51,>4c9 ;08 GOLDEN STATE + .word >100D,32,>4cc ;09 HOUSTON + .word >100D,39,>4cf ;10 INDIANA + .word >100D,49,>4d2 ;11 L.A. CLIPPERS + .word >100D,49,>4d5 ;12 L.A. LAKERS + .word >100D,37,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,39,>4de ;15 MINNESOTTA + .word >100D,38,>4e1 ;16 NEW JERSEY + .word >100D,37,>4e4 ;17 NEW YORK + .word >100D,41,>4e7 ;18 ORLANDO + .word >100D,44,>4ea ;19 PHILADELPHIA + .word >100D,31,>4ed ;20 PHOENIX + .word >100D,29,>4f0 ;21 PORTLAND + .word >100D,48,>4f3 ;22 SACRAMENTO + .word >100D,57,>4f6 ;23 SAN ANTONIO + .word >100D,34,>4f9 ;24 SEATTLE + .word >100D,40,>4fc ;26 TORONTO + .word >100D,32,>4ff ;26 UTAH + .word >100D,38,>502 ;27 VANCOUVER + .word >100D,44,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + +;DJT Start + movk 9,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp +;DJT Start + .long the_scoop_sp +;DJT End + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + +;DJT Start + movk 11,a0 + move @game_time,a14 + cmpi >700,a14 + jrge #fulltab + movk 3,a0 +#fulltab +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab +;DJT Start + .long hail_mary_sp + .long unlod_one_sp + .long wild_shot_sp + .long lfts_wild_sp + + .long whyyyy_sp + .long whyyyy_sp + .long ill_shot_sp + .long ill_shot_sp + .long outof_rng_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +;DJT End +**************** +#long_range + +;DJT Start + movk 7,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp +;DJT Start + .long outof_rng_sp +;DJT End + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 +;DJT Start + movk 15,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp +;DJT Start + .long fm_3pline_sp +;DJT End + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp +;DJT Start + .long kakaboom_sp + .long unbelieve_sp + .long luky_bskt_sp +;DJT End + +**************** +#long_range + + callr itsgood + jrnc #xlong + +;DJT Start + movk 10,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp + .long incrd_sht_sp +;DJT End + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp +;DJT Start + .long scores2_sp +;DJT End + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + +;DJT Start + movk 5,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + +;DJT Start + movk 19,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp +;DJT Start + .long scores2_sp +;DJT End + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp +;DJT End + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp +;DJT Start + .long and_drops_sp + .long scores2_sp +;DJT End + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + +;DJT Start + movk 20,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp +;DJT Start + .long outstndng_sp + .long scores2_sp +;DJT End + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + +;DJT Start + movk 8,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp +;DJT Start + .long kaboom2_sp +;DJT End + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + +;DJT Start + movk 11,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp +;DJT Start + .long kaboom2_sp + .long throws_it_sp +;DJT End + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + +;DJT Start + movk 17,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp +;DJT Start + .long kaboom2_sp + .long pounds_it_sp +;DJT End + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp +;DJT Start + .long outstndng_sp +;DJT End + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + +;DJT Start + movk 16,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp +;DJT Start + .long outstndng_sp + .long learn_tht_sp + .long didnt_knw_sp + .long kaboom2_sp +;DJT End + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp +;DJT Start + .long kakaboom_sp +;DJT End + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl +;DJT Start + .long cros_crt_sp + .long downcourt_sp + .long downcrt2_sp + .long hev_dncrt_sp + .long lngpss_dc_sp + .long pas_outsd_sp + .long he_passes_sp + .long hev_dncrt_sp +;DJT End + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot +;DJT Start + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi just_secs_sp,a0 + btst 2,a14 + jrnz #playit + movi run_out_sp,a0 +;DJT End +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow +;DJT Start + cmpi 9,a1 + jrlt #notblow + movi blowout_sp,a0 ;it's a blowout + move @HCOUNT,a14 + btst 1,a14 + jrnz #blowout + movi debacle_sp,a0 + jruc #blowout +#notblow +;DJT End + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp +;DJT Start + .long strike_up_sp +;DJT End + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit +;DJT Start + movk 3,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab +;DJT Start + .long look_out_sp +;DJT End + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 +;DJT Start + .long hamerd_hm_sp +;DJT End + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp +;DJT Start + .long swish2_sp +;DJT End + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + +;DJT Start + .if DEBUG +; jruc #anc_scr + .endif ;DEBUG + + movi 99,a0 + calla rndrng0 + cmpi 30,a0 ;45 + jrls #no_call ; br=nothing + cmpi 60,a0 + jrls #anc_scr ; br=annouce scores + cmpi 80,a0 + jrls #crwd_fx ; br=crowd/outdoor sounds + + move @pup_court,a14 ;No br=organ sounds if indoor + jrnz #die ; br=outdoor court +;DJT End + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + +;DJT Start + move @scores,a4 + move @scores+10h,a0 + sub a0,a4 + + move @team1,a2 + move a11,a11 + jrnz #cnt + move @team2,a2 + neg a4 +#cnt + move a4,a0 + jrz #tied + abs a0 + cmpi 59,a0 + jrhi #no_call ;br=if score diff > 59, ignore + + movi #anc_scr_lose_tbl,a3 + neg a4 ;make positive + jrn #neg + move a4,a0 + subk 12,a0 + jrlt #pos + srl 5,a0 ;3.2% per pt down + addi 500,a0 ; plus base % + cmpi 900,a0 ;Max % + jrls #valp + movi 900,a0 ;Max % +#valp + calla RNDPER + jrls #pos + movi #anc_scr_lngw_tbl,a3 + jruc #pos +#neg + neg a4 ;make positive + movi #anc_scr_take_tbl,a3 + cmpi 3,a4 + jrlt #pos + movi #anc_scr_win_tbl,a3 +#pos +;DJT End + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 +;DJT Start +#doscscr +;DJT End + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst +;DJT Start + move a3,*a4+,W ;store it + jrz #saysc + movi longway_sp,a1,L + jruc #saysc1 +#saysc + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 +#saysc1 +;DJT End + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; + - say "long way..." +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + +;DJT Start +#anc_scr_take_tbl + WLW 1,taks_lead_sp,-1 + WLW 0,take_lead_sp,-1 + WLW 1,taks_lead_sp,-1 + WLW 0,out_front_sp,-1 + WLW 1,out_front_sp,-1 + WLW 0,have_lead_sp,-1 + +;DJT End +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 +;DJT Start + +#anc_scr_lngw_tbl + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + +#anc_scr_tied_tbl + WLW -1,tied_at_sp,0 + WLW -1,tiegm_sp,-1 + WLW 0,tiethegm_sp,-1 +;DJT End + + + +****************************************************************************** +#tied +;DJT Start + movi #anc_scr_tied_tbl,a3 + movi 99,a0 + calla rndrng0 + + cmpi 30,a0 ;% + jrhi #tied1 + + move @scores,a4 + cmpi 60,a4 + jrlo #doscscr ; br=OK, score not too high +#tied1 + addi 64,a3 + cmpi 65,a0 ;% + jrls #doscscr + addi 64,a3 + jruc #doscscr +;DJT End + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp +;DJT Start + .long what_was_sp +;DJT End + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + +;DJT Start +; SOUND1 error_found +;DJT End + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/XCODE100L/STRING.ASM b/BACKUP/XCODE100L/STRING.ASM new file mode 100644 index 0000000..dec1322 --- /dev/null +++ b/BACKUP/XCODE100L/STRING.ASM @@ -0,0 +1,2097 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + +;DJT Start + .def HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P + +;DJT End + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers +;DJT Line moved down to table def + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(32),L ;null terminate + +;DJT Start + movi 6*8,a5 +#lp + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + addi init_convert_table,a0,L + movb *a0,*a3 ;get ascii LETTER from table + addk 8,a3 + subk 8,a5 + jrnz #lp + +#no_more + subi 48,a3 + add a5,a3 + rets +;DJT End + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +;DJT Start + .if TRIVCON +;DJT End +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +;DJT Start + .endif ;TRIVCON +;DJT End + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +;DJT Start + .if TRIVCON +;DJT End + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy +;DJT Start + .endif ;TRIVCON +;DJT End + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu +;DJT Start + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) + andi ALL_TMS_DEFEATD,a1 + cmpi ALL_TMS_DEFEATD,a1,L ;Beat them all? + jreq #nonxt ; br=yes + +;DJT End + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; +;DJT Start +#nonxt +;DJT End + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + +;DJT Start + .def SENDTO_P +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + + .if TRIVCON +;DJT End + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + +;DJT SENDTO_P moved above TRIVCON conditional @ show_trivia_stuff + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +;DJT Start + .def B8TCYC_PER + .def B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;DJT End +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +;DJT Start + .if TRIVCON +;DJT End +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;DJT Start + .endif ;TRIVCON +;DJT End +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100L/SYS.EQU b/BACKUP/XCODE100L/SYS.EQU new file mode 100644 index 0000000..8952670 --- /dev/null +++ b/BACKUP/XCODE100L/SYS.EQU @@ -0,0 +1,363 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +;DJT Start +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +HOTSPOT .equ 0 ;0 or 1 Show hotspots off/on + +OPERMES .equ 0 ;0 or 1 Operator message off/on +TRIVCON .equ 0 ;0 or 1 Trivia contest off/on +TEAMPOP .equ 0 ;0 or 1 Team popularity off/on +ANIM_VS .equ 1 ;0 or 1 Versus scrn anim off/on +;DJT End + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/XCODE100L/TEST.ASM b/BACKUP/XCODE100L/TEST.ASM new file mode 100644 index 0000000..3cb6c14 --- /dev/null +++ b/BACKUP/XCODE100L/TEST.ASM @@ -0,0 +1,3646 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET +;DJT Start +; .REF QSNDRST + .ref qsndrst_proc +;DJT End + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM MULTIPLIERS" + JRZ MBABORT +;DJT Start + CMPI 4,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 5,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +;DJT End +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +;DJT Start + .if OPERMES +;DJT End +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP +;DJT Start + + .endif ;OPERMES +;DJT End + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/XCODE100L/TEXT.ASM b/BACKUP/XCODE100L/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/XCODE100L/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/XCODE100L/TODO.DOC b/BACKUP/XCODE100L/TODO.DOC new file mode 100644 index 0000000..bb9d510 --- /dev/null +++ b/BACKUP/XCODE100L/TODO.DOC @@ -0,0 +1,73 @@ +;done: EGM screen +;done: Results screen shows blanks in 0-0 OT quarters +;done: Add kid players +;done: winningteam free credit bug fixed - sound reset still OK +;done: Add Jon Zirin +;done: Put Byron Scott into Lakers lineup +;done: Don't forget to finish #team_data (select2) +;done: Re-order teams +;done: Hot spots +;done: College heads +;done: New team line-ups +;done: What to do about created player hotspots +;done: Fix lineups for attract Starring screen +;done: Show hotspots powerup +;done: Update Grand Champ screen text (more?) +;MAX: Show hidden stats +;MAX: New dunks +;done: Shouldn't say "Next Opponent" when Grand Champ +;done: New logos for Detroit,Minnesota,Utah +;done: Fix repeatative outdoor court net_ani calls in BB3 +;MAX: Put hotspots into drone logic + +;MAX: Slap-off rim in 1 tick bug +;MAX: Better rejection/goal tending code +;MAX: No double dunk attach on potential on-fire shot +;MAX: Don't grab final seconds shots for a dunk +;done: Speed up spin move + +;done: New audio selections +;done: Helicopter dunk sound +;done: Says "stolen" when possession changes after a bucket +;done: Needs to say "Maximum Hangtime" +;done: Game/Shot/Fire clocks need different sounds +;done: Ball-grab sound on alley-oop + +;done: AAMA screen +;done: Drone difficulty - on-fires @ start of game after X player wins +;MAX: Flash Maximum word on title +;done: Use created players in attract demo +;MAX: Attract mode flash hype +;done: Court select easier +;MAX: Double dunk world record +;MAX: World record achieved message +;MAX: Player score bar +;MAX: Use basketball anim in attract +;MAX: Different create plyr heads/rules +;MAX: Some special heads aren't all in - Ehrlich,Funk, etc +;MAX: Paper/debris stuff +;done: Fix "4 games minimum" +;done: Don't allow quick tap out of OT buyin screen +;done: KI type pup display + + +Pre 4/5/96 +========== +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/XCODE100L/UNZIP.ASM b/BACKUP/XCODE100L/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/XCODE100L/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/XCODE100L/UTIL.ASM b/BACKUP/XCODE100L/UTIL.ASM new file mode 100644 index 0000000..d99768d --- /dev/null +++ b/BACKUP/XCODE100L/UTIL.ASM @@ -0,0 +1,2517 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA +;DJT Start + .def FRANIMQ +;DJT End + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + +;DJT Start + .def STRNGRAM,HEXTOASC,WRLD + .def COLCYC,CYCLE_TABLE +;DJT End + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +;DJT Start + .if 0 +;DJT End +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +;DJT Start + SUBR FLASHME +;DJT End + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE +;DJT Start + .endif +;DJT End + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +;DJT Start + .if 0 +;DJT End +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +;DJT Start + SUBR GETANIX +;DJT End + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +;DJT Start + .if 0 +;DJT End +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +;DJT Start + SUBR FRANIM +;DJT End + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd +;DJT Start + .endif +;DJT End + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +;DJT Start + .if 0 +;DJT End +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend +;DJT Start + .endif +;DJT End + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end diff --git a/BACKUP/XCODE100L/WORLD.EQU b/BACKUP/XCODE100L/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/XCODE100L/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/XCODE100L/_DARKER_ b/BACKUP/XCODE100L/_DARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100L/_DARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XCODE100L/_MARKER_ b/BACKUP/XCODE100L/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100L/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XCODE100L/_ZARKER_ b/BACKUP/XCODE100L/_ZARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100L/_ZARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XCODE100M/ADJUST.ASM b/BACKUP/XCODE100M/ADJUST.ASM new file mode 100644 index 0000000..2adaa17 --- /dev/null +++ b/BACKUP/XCODE100M/ADJUST.ASM @@ -0,0 +1,3745 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP +;DJT Start + CMPI HELP_MULT,A8 ; MULTIPLIER HELP + JRZ ADSDIP +;DJT End + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +;DJT Start + .if TRIVCON + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + + .endif ;TRIVCON +;DJT End + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP +;DJT Start + .if TRIVCON + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + .endif ;TRIVCON +;DJT End + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +;DJT Start + .if TRIVCON +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + .endif ;TRIVCON +;DJT End + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +;DJT Start +MH_0 .STRING "CUSTOMIZE THE INTERNAL" +;DJT End + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +;DJT Start + .if TRIVCON +LIST_TRIVIA + .endif ;TRIVCON +;DJT End + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/BACKUP/XCODE100M/ATTRACT.ASM b/BACKUP/XCODE100M/ATTRACT.ASM new file mode 100644 index 0000000..69de37a --- /dev/null +++ b/BACKUP/XCODE100M/ATTRACT.ASM @@ -0,0 +1,7355 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd +;DJT Start +; .ref QSNDRST +;DJT End + +;DJT ref moved down to reference + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii,bast8tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads +;DJT Start +;DJT .ref removed +;DJT End + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC +;DJT Start +;DJT .refs removed +;DJT End + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop +;DJT Start +; .ref set_volume_for_amode +;DJT End + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen +;DJT Start + + .if TRIVCON + .ref trivia_game + .endif ;TRIVCON + +;DJT End + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire +;DJT Start + .ref BASTC_W_P,B8TCYC_PER +;DJT End + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr +;DJT Start + .ref logos,name_sort + .ref BALLBAK1 +;DJT End + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + +;DJT Start +; .bss cycram ,16*2*16 ;Palette cycle mem +;DJT End +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + +;DJT Start + BSSX amodeloop ,16 ;Cntr for when to show design team +;DJT End + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + +;DJT Start +;BAD!! VERY BAD!! ;let the sound board reset finish up. +;BAD!! VERY BAD!! SLEEPK 8 + + .ref set_game_snd + move @SOUNDSUP,a0 + clr a14 + move a14,@SOUNDSUP + calla set_game_snd + move a0,@SOUNDSUP + +;DJT End + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;DJT Start +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp +;; +;; JSRP show_nba_plyrs +;; JSRP show_designteam +;; +;; .ref found_champ +;; JSRP found_champ +;; +;; .ref show_trophy +;; JSRP show_trophy +;; calla set_volume_for_amode + + JSRP show_title + +; .ref get_all_records +; calla get_all_records + + JSRP new_page + JSRP amode_design + JSRP show_nba_plyrs + JSRP show_hiscore + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + .if TRIVCON + .ref show_prizes + JSRP show_prizes + .endif ;TRIVCON + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP result_screen + JSRP show_nba_plyrs + JSRP new_page + JSRP show_title + JSRP show_copyright + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + move @amodeloop,a0 + inc a0 + move a0,@amodeloop + srl 1,a0 + jrnc #no_aama + JSRP show_aama +#no_aama + move @amodeloop,a0 + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + .if TRIVCON + move @amodeloop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + .endif ;TRIVCON +;DJT End + jruc #lp + + + .def pObj + .bss pObj,32 + + +;DJT Start +#**************************************************************** +* Attract design player screen + + .ref design_player_proc_amode,done_creating + .ref get_all_records,sort_wins + BSSX stick_amode_mkplr,16 + +amode_design + + calla WIPEOUT + movk 1,a0 + move a0,@dpageflip + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP + + movk 1,a0 + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc_amode + + movi 2*TSEC,a11 + movi #stick_t,a8 +#lp + move *a8+,a10 + jrn #xb + move *a8+,a0 +#lp1a + move a0,@stick_amode_mkplr +#lp1 + SLEEPK 1 + move a11,a11 + jrnz #nob + + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + subk 1,a11 +#nob1 + clr a0 + dsj a10,#lp1a + jruc #lp + +#xb + clr a0 + move a0,@stick_amode_mkplr + + movi CYCPID,A0 + calla KIL1C + calla pal_clean + + .asg 16,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 tuneend_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + calla WIPEOUT + RETP + +#stick_t + .word 110,0000000b + .word 8, 0000010b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0000010b + .word 25, 0010000b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000100b + .word 8, 0000100b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 70, 0010000b + + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 140,0010000b + + .word 50, 0010000b + .word 40, 0000010b + .word 70, 0010000b + + .word 30, 0000100b + .word 60, 0000100b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 60, 0001000b + .word 30, 0000100b + .word 30, 0000100b + .word 70, 0000100b + .word 40, 0010000b + + .word 20, 0000010b + .word 40, 0000010b + .word 70, 0010000b + + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 40, 0001000b + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 15, 0000010b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 20, 0001000b + .word 80, 0001000b + .word 40, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 50, 0000100b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 100,0000100b + .word 50, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 50, 0010000b + + .word 20, 0000001b + .word 20, 0000001b + .word 40, 0000001b + .word 60, 0010000b + + .word 15, 0000001b + .word 40, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 40, 0010000b + + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 80, 0000010b + + .word -1 + +;DJT End + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + +;DJT Start +; .bss junk,140*16 ;quick rndper loop for hotspot +; +; movi junk,a8,L +; movi 140,a9 +;#llpp +; SLEEPK 1 +; movk 20,a0 +; calla RNDRNG0 +; move a0,*a8+,W +; dsj a9,#llpp +; jruc $ +; +;DJT End + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;DJT Start + movi CYCPID,A0 + calla KIL1C + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + calla WIPEOUT + RETP + +title_scr_mod + .long maximBMOD + .word 0,0 + .long 0 +; .long hangtimeBMOD +; .word 0,0 +; .long 0 +;DJT End + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! +;DJT Start + .if OPERMES +;DJT End + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX +;DJT Start + .endif ;OPERMES +;DJT End + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,132,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",1 + .string "ALL NBA TEAM ROSTERS ACCURATE AS OF 11/1/96",0 + .even + +;DJT Start + +#**************************************************************** + + SUBRP show_aama + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 2 + + movk 31,a0 + move a0,@mess_line_spacing + + movi aama_title_setup,a2,L + calla setup_message + movi aama_title_str,a4,L + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi aama_rating_setup,a2,L + calla setup_message + movi aama_rating_str,a4,L + calla print_string_C2 + + .ref HTSTAT03 + movi [200-5-44-88,0],a0 + movi [78,0],a1 + movi HTSTAT03,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi [200-5-44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + movi [200-5+44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + +; clr a10 +; movk 8,a11 +; CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +aama_title_setup + PRINT_STR bast18_ascii,11,0,200,56,BSTGYG_P,0 + +aama_rating_setup + PRINT_STR bast10_ascii,6,0,200,110,BAST_W_P,0 + +aama_title_str + .string "AAMA Parental Advisory",1 + .string "K-A RATING",0 + +aama_rating_str + .string "Suitable for All Ages",1,1 + .string "The content of this game is",1 + .string "appropriate for players of",1 + .string "all ages.",0 + .even + + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + move *a13(PROCID),a0 + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #notocto + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + +;design team + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + move *a13(PROCID),a0 + cmpi GRANDCHAMP_PID,a0 + jrne #notgc + movk INAMODE,a0 + move a0,@GAMSTATE +#notgc + movi TSEC*6+12,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + +;additional design + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;sound & music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #snd_music_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30+11,a10 + JSRP time_delay ;SLEEP 30 + +;music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #music_str,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movk 17,a0 + move a0,@mess_line_spacing + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;actors + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;hardware support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #hardware_str_setup2,a2,L + calla setup_message + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;nba support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;sweepstakes + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #sweepstks_str,a4 + calla print_string_C2 + + movi #sponsor_str_setup,a2,L + calla setup_message + movi #sponsor_str,a4 + calla print_string_C2 + movi BSTGYO_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGWWOP,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGYG_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi #sponsor_str_setup2,a2,L + calla setup_message + addk 8,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;additional testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;special thanks + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi #thanks_str_setup2,a2,L + calla setup_message + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6+11,a10 + JSRP time_delay ;SLEEP 30 + +;executive producers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movk 25,a0 + move a0,@mess_line_spacing + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + + +#sclout + clr a0 + movi -1,a1 + calla obj_delc + + RETP + + +#title_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#sponsor_str_setup + PRINT_STR bast18_ascii,11,0,200,65,BST18T_P,0 + +#sponsor_str_setup2 + PRINT_STR bast10_ascii,11,0,284,152,BAST_Y_P,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + + +#design_tm_str + .string "DESIGN TEAM:",0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + +#snd_music_str + .string "SOUND AND MUSIC:",0 + +#music_str + .string "MUSIC:",0 + +#actors_str + .string "ACTORS:",0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + +#nba_help_str + .string "NBA SUPPORT:",0 + +#sweepstks_str + .string "MAXIMUM SWEEPSTAKES:",0 + +#gme_tester_str + .string "GAME TESTERS:",0 + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + +#thanks_str + .string "SPECIAL THANKS:",0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + + .even +;DJT End + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 +;DJT Start + + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + +#sponsor_str + .string "MAXIMUM",1,0 + .string "NBA HANGTIME",1,0 + .string "SWEEPSTAKES",1 + .string "IS CO-SPONSORED BY",1 + .string "AND",0 + .string "EGM EGM",0 + .string "2",0 + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + +#gme_tstrs_str2 + .string "KEVIN DAY",1 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 +; .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + + .even + +;DJT End +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + +;DJT Start + movi -1,a0 + .ref t1ispro,t2ispro + move a0,@t1ispro + move a0,@t2ispro +;DJT End + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team2 ;Team controlled by plyrs 3 & 4 + +;DJT Start + move @otdloop,a14 + move a14,a0 + addk 1,a0 + cmpi NUM_DEMOPUPS,a0 + jrlo #otd + clr a0 +#otd + move a0,@otdloop + sll 4,a14 + addi demopups,a14,L + move *a14,a14 + + movk 1,a0 + and a14,a0 + move a0,@pup_court + + srl 1,a14 + movk 1,a0 + and a14,a0 + move a14,@pup_aba + + movk 15,a0 +; calla RNDRNG0 + .ref pup_showhotspots + move a0,@pup_showhotspots + + movi player1_data,a2,L + callr demo_cp_rndper + movi player2_data,a2,L + callr demo_cp_rndper + movi player3_data,a2,L + callr demo_cp_rndper + movi player4_data,a2,L + callr demo_cp_rndper + + SOUND1 tuneend_snd + + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP +;DJT End + JRNZ NONO1 + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + +;DJT Start + .ref RNDPER + + SUBRP demo_cp_rndper + + clr a0 + movi PR_SIZE/16,a1 +#nhd + move a0,*a2+ + dsj a1,#nhd + subi PR_SIZE,a2 + + movi 140,a0 ;!!! + calla RNDPER + jrlo #ndh0 + + movk NUM_DEMOHEADS-1,a0 + calla RNDRNG0 + sll 4,a0 + addi demoheads,a0,L + move *a0,a0 + move a0,*a2(PR_HEAD_NBR) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_HEIGHT_PTS) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_WEIGHT_PTS) + + movk 1,a0 + move a0,*a2(PR_CREATED_PLYR) +#ndh0 + rets + + +;Bit order: 1-ABA 0-Outdoor +demopups + .word 01b,11b,01b,00b,11b,01b,10b +NUM_DEMOPUPS .equ ($-demopups)/16 + +demoheads + .word 0, 1, 3, 5, 6,10,11,13 + .word 16,18,20,22,24,25,26,28 + .word 30 +NUM_DEMOHEADS .equ ($-demoheads)/16 + .word 0,0,0,0 ;Just in case! +;DJT End + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 +;DJT Start + btst B_CHARGEN,a4 ;But don't change it if its a chargen name + jrnz #lp +;DJT End + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt3 + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + +;DJT Start + .asg 12,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 +;DJT End + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +;DJT Start +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .if TRIVCON + .long #str_h8 + .long #str_h8a + .endif ;TRIVCON + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME MAXIMIZED!",0 +; .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "1997",0 +; .string "150 NBA",0 +#str_h0a + .string "LINEUPS",0 +; .string "PLAYERS",0 + +#str_h1 + .string "COLLEGE",0 +; .string "CREATE",0 +#str_h1a + .string "ROOKIES",0 +; .string "PLAYER",0 + +#str_h2 + .string "HOT",0 +; .string "ALLEY",0 +#str_h2a + .string "SPOTS",0 +; .string "OOPS",0 + +#str_h3 + .string "TEAM",0 +; .string "DOUBLE",0 +#str_h3a + .string "FIRE",0 +; .string "DUNKS",0 + +#str_h4 + .string "SIZZLING",0 +; .string "ROOF TOP",0 +#str_h4a + .string "FINALE",0 +; .string "COURT",0 + +#str_h5 + .string "SMARTER",0 +; .string "SPIN",0 +#str_h5a + .string "DRONES",0 +; .string "MOVES",0 + +#str_h6 + .string "RADICAL",0 +; .string "DIGITAL",0 +#str_h6a + .string "DUNKS",0 +; .string "SOUND",0 + +#str_h7 + .string "BETTER",0 +; .string "M DOC",0 +#str_h7a + .string "GAMEPLAY",0 +; .string "RAPS",0 + + .if TRIVCON +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + .endif ;TRIVCON + +#str_h9 + .string "NEW",0 +; .string "MEGA",0 +#str_h9a + .string "POWERUPS",0 +; .string "SECRETS",0 + +#str_h10 + .string "AND NEW",0 +; .string "AND",0 +#str_h10a + .string "SECRETS!",0 +; .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBR flash_bigtxt3 +;DJT End + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 +;DJT Start + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #lpt ;Called from grand champion? +;DJT End + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;DJT Start + .if TRIVCON +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + .endif ;TRIVCON +;DJT End + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + +; movi CYCPID,a0 +; calla KIL1C + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD_X + .asg 75,HD_DX + .asg 190,HD_Y + +#***************************************************************************** +;DJT Start + +;ATLANTA + .ref BLY_ATL,ATLNBLA,MUT_DEN,DENNMUT,SMI_ATL,ATLNSMI + .ref LAE_ATL,ATLNLAE,NOR_ATL,ATLNNOR +;BOSTON + .ref BRO_BOS,BOSNBRO,HAM_COL, HAMER ,BAR_BOS,BOSNBAR + .ref RAD_BOS,BOSNRAD,FOX_BOS,BOSNFOX +;CHARLOTTE + .ref RCE_CHA,CHANRIC,MAS_NEY,NWYNMAS,DIV_LAK,LALNDIV + .ref ZID_CHA,CHANZID,CUR_CHA,CHANCUR +;CHICAGO + .ref PIP_CHI,CHINPIP,ROD_CHI,CHINROD,KUK_CHI,CHINKUK + .ref LON_CHI,CHINLON,KER_CHI,CHINKER +;CLEVLAND + .ref HIL_CLE,CLENHIL,MIL_CLE,CLENMIL,PHL_CLE,CLENPHI + .ref BRA_CLE,CLENBRA,FER_CLE,CLENFER +;DALLAS + .ref KID_DAL,DALNKID,HPR_NEY,NWYNHAR,JAC_DAL,DALNJAC + .ref MON_BOS,BOSNMON,MAS_DAL,DALNMAS +;DENVER + .ref MCD_DEN,DENNMcD,MAR_SAC,SACNMAR,JAC_IND,INDNJAC + .ref ELL_DEN,DENNELL +;DETROIT +; .ref HIL_DET,DETNHIL,RIL_COL, RILEY ,DUM_DET,DETNDUM + .ref HIL_DET,DETNHIL,DUM_DET,DETNDUM + .ref THR_DET,DETNTHO,AUG_ATL,ATLNAUG +;GOLDEN STATE + .ref SPR_GLD,GOLNSPR,KON_ORL,ORLNKON,SMI_GLD,GOLNSMI + .ref MUL_GLD,GOLNMUL +;HOUSTON + .ref OLA_HOU,HOUNOLA,HAR_COL, HRNGTON ,DRX_HOU,HOUNDRE + .ref WLS_GLD,GOLNWIL +;INDIANA + .ref MIL_IND,INDNMIL,DAM_COL, DAMPIER ,ROS_DEN,DENNROS + .ref SMI_IND,INDNSMI,DAV_IND,INDNDAV +;L.A. CLIPPERS + .ref VAU_CLP,LACNVAU,ROG_CLP,LACNROG,MUR_CLP,LACNMUR + .ref RCH_CLP,LACNRIC,BAR_CLP,LACNBAR +;L.A. LAKERS + .ref VAN_LAK,LALNEXE,CEB_LAK,LALNCEB,SCO_VAN,VANNSCO + .ref CAM_LAK,LALNCAM,JON_LAK,LALNJON +;MIAMI + .ref MOU_MIA,MIANMOU,HRD_MIA,MIANHAR,DAN_MIA,MIANDAN +;MILWAUKEE + .ref BAK_MLW,MILNBAK,ALL_COL, ALLEN ,LNG_MIN,MINNLAN + .ref ROB_MLW,MILNROB,RES_MLW,MILNRES +;MINNESOTA + .ref GUG_MIN,MINNGUG,MAR_COL, MARBURY ,GAR_MIN,MINNGAR +;NEW JERSEY + .ref GLL_NEJ, NWJNGIL ,KIT_COL, KITTLES ,PAC_WAS,WASNPAC + .ref BRA_NEJ,NWJNBRA,OBA_NEJ,NWJNOBA +;NEW YORK + .ref EWG_NEY,NWYNEWI,WAL_COL, WALLACE ,JON_CHA,CHANJOH + .ref STA_NEY,NWYNSTA,HOU_DET,DETNHOU +;ORLANDO + .ref HAR_ORL,ORLNHAR,SKL_GLD,GOLNSEI,GRT_ORL,ORLNGRA + .ref AND_ORL,ORLNAND,SCO_ORL,ORLNSCO +;PHILADELPHIA +; .ref IVE_COL, IVERSON ,MIN_COL, MINOR ,STA_PHL,PHINSTA + .ref IVE_COL, IVERSON ,STA_PHL,PHINSTA + .ref COL_PHL,PHINCOL,WEA_PHL,PHINWEA +;PHOENIX + .ref JOH_PHX,PHONJOH,TIS_PHX,PHONTIS,MAN_PHX,PHONMAN + .ref HOR_HOU,HOUNHOR,CAS_HOU,HOUNCAS +;PORTLAND + .ref ROB_PRT,PORNROB,RID_MIN,MINNRID,SAB_PRT,PORNSAB + .ref AND_CHA,CHANAND,CHI_PRT,PORNCHI +;SACRAMENTO + .ref OWE_SAC,SACNOWE,RAF_DEN,DENNRAU,RIC_SAC,SACNRIT + .ref GRA_SAC,SACNGRA,EDN_SAC,SACNEDN +;SAN ANTONIO + .ref ELL_SAN,SANNELL,ROB_SAN,SANNROB,MAX_PHL,PHINMAX + .ref JON_SAN,SANNJOH,DEL_SAN,SANNNEG +;SEATTLE + .ref KMP_SEA,SEANKEM,PAY_SEA,SEANPAY,SCH_SEA,SEANSCH + .ref HWK_SEA,SEANHAW,FOR_SEA,SEANFOR +;TORONTO + .ref ROG_TOR,TORNROG,CAM_COL, CAMBY ,STO_TOR,TORNSTO + .ref JON_DAL,DALNJON,WIL_MIA,MIANWIL +;UTAH + .ref STK_UTA,UTANSTO,MLN_UTA,UTANMAL,HRN_UTA,UTANHOR + .ref MOR_UTA,UTANMOR +;VANCOUVER + .ref ANT_VAN,VANNANT,EDW_VAN,VANNEDW,REV_VAN,VANNREE +;WASHINGTON + .ref STR_PRT,PORNSTR,WEB_WAS,WASNWEB,HWD_WAS,WASNHOW + .ref MUR_WAS,WASNMUR,CHE_WAS,WASNCHE + +K_GILL .equ WALLACE+1 + +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 78,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi BALLBAK1,a2 ;*img + movi 1900,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + clr a5 ;id + calla BEGINOBJ2 + + clr a0 ;x + clr a1 ;y + movi B8TCYC_PER,a2 ;*img + movi BASTC_G_P,b0,L ;*pal + calla BEGINOBJP2 + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 4,a0 ;# of passes+1 + move @tmnbr,a8 + jruc #botlp + +;top of loop + +#toplp + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L ;*img + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi 1901,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id + calla BEGINOBJ2 + + move @tmnbr,a11 ;get ptr & cnt + sll 5,a11 + addi #tm_plyr_idxcnt,a11,L + move *a11,a10,L + movx a10,a11 + zext a11 + addi #tm_plyr_headname,a11,L + + movi (HD_X+HD_DX)*2,a9 ;figure X (*2 for odd DX) + sra 16,a10 ;pull down cnt -=4 + jrn #x3 + jrz #x4 + subi HD_DX,a9 +#x4 + subi HD_DX,a9 +#x3 + sll 16-1,a9 + subk 2,a10 ;make cnt -=6 + +#hdlp + movk NAME_ID,a0 + calla obj_del1c + + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id - plate,head + clr a6 ;xvel + clr a7 ;yvel + + move a9,a0 ;x + movi [HD_Y,0],a1,L ;y + movi MUGPLAT,a2,L ;*img + movi 1900,a3 ;z + calla BEGINOBJ2 + + movi [26,0],a0,L + add a9,a0 ;x + movi [HD_Y+10,0],a1,L ;y + move *a11+,a2,L ;*img - head + addk 32,a3 ;z pos + calla BEGINOBJ2 + + move *a11+,a2,L ;*img - name + jrn #nl0 + + cmpi K_GILL,a2 + jrz #nork + movi rookie_setup,a2,L + calla setup_message + + move a9,a0 + srl 16,a0 + addi 59,a0 + move a0,@mess_cursx + + movi s_rookie,a4,L + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 +#nork + movi str_name_ptrs,a4,L ;is text string name + move *a11(-32),a2,L ;*img - name + sll 5,a2 + add a2,a4 + move *a4,a4,L ;*name + + movi str_name_setup,a2,L + calla setup_message + + movk NAME_ID,a0 + move a0,@mess_objid + calla print_string_C2 + jruc #nl1 +#nl0 + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 ;x + movi [222,0],a1,L ;y + movk NAME_ID,a5 ;id - name + calla BEGINOBJ2 +#nl1 + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + +; movi TSEC+10,a8 ;dbg + movi TSEC-10,a8 ;-20 +#wtlp1 + SLEEPK 1 + move a10,a10 + jrn #wtlp2 + calla get_all_buttons_cur2 +; jrnz #o2 ;dbg + jrnz #mksnd +#wtlp2 + dsj a8,#wtlp1 +#o2 + addi [HD_DX,0],a9,L + subk 1,a10 + jrz #done + jrnn #hdlp + addk 6,a10 + jruc #hdlp +#done + movk 15,a8 +#wtlp3 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #o3 ;dbg +; jrnz #mksnd + dsj a8,#wtlp3 +#o3 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk OBJID,a0 + calla obj_del1c + + move @tmloop,a0 + move @tmnbr,a8 + inc a8 +#botlp + cmpi NUM_TEAMS,a8 + jrlo #tmok + clr a8 +#tmok + move a8,@tmnbr + dec a0 + move a0,@tmloop +; jruc #toplp ;FOR DEBUGING + jrnz #toplp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + movi CYCPID,a0 + calla KIL1C +;; calla pal_clean + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "RO",1,-1,"ST",1,-1,"E",1,1,"RS F",1,-3,"OR '97!",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + +#tm_plyr_idxcnt + .long [5 -4, 000 *2*32] ;ATLANTA + .long [5 -4, 005 *2*32] ;BOSTON + .long [5 -4, 010 *2*32] ;CHARLOTTE + .long [5 -4, 015 *2*32] ;CHICAGO + .long [5 -4, 020 *2*32] ;CLEVLAND + .long [5 -4, 025 *2*32] ;DALLAS + .long [4 -4, 030 *2*32] ;DENVER + .long [4 -4, 034 *2*32] ;[5 -4, ;DETROIT + .long [4 -4, 038 *2*32] ;GOLDEN STATE + .long [4 -4, 042 *2*32] ;HOUSTON + .long [5 -4, 046 *2*32] ;INDIANA + .long [5 -4, 051 *2*32] ;L.A. CLIPPERS + .long [5 -4, 056 *2*32] ;L.A. LAKERS + .long [3 -4, 061 *2*32] ;MIAMI + .long [5 -4, 064 *2*32] ;MILWAUKEE + .long [3 -4, 069 *2*32] ;MINNESOTA + .long [5 -4, 072 *2*32] ;NEW JERSEY + .long [5 -4, 077 *2*32] ;NEW YORK + .long [5 -4, 082 *2*32] ;ORLANDO + .long [4 -4, 087 *2*32] ;[5 -4, ;PHILADELPHIA + .long [5 -4, 091 *2*32] ;PHOENIX + .long [5 -4, 096 *2*32] ;PORTLAND + .long [5 -4, 101 *2*32] ;SACRAMENTO + .long [5 -4, 106 *2*32] ;SAN ANTONIO + .long [5 -4, 111 *2*32] ;SEATTLE + .long [5 -4, 116 *2*32] ;TORONTO + .long [4 -4, 121 *2*32] ;UTAH + .long [3 -4, 125 *2*32] ;VANCOUVER + .long [5 -4, 128 *2*32] ;WASHINGTON + + +#tm_plyr_headname + ;ATLANTA + .long BLY_ATL,ATLNBLA + .long MUT_DEN,DENNMUT + .long SMI_ATL,ATLNSMI + .long LAE_ATL,ATLNLAE + .long NOR_ATL,ATLNNOR + ;BOSTON + .long BRO_BOS,BOSNBRO + .long HAM_COL, HAMER ;new + .long BAR_BOS,BOSNBAR + .long RAD_BOS,BOSNRAD + .long FOX_BOS,BOSNFOX + ;CHARLOTTE + .long RCE_CHA,CHANRIC + .long MAS_NEY,NWYNMAS + .long DIV_LAK,LALNDIV + .long ZID_CHA,CHANZID + .long CUR_CHA,CHANCUR + ;CHICAGO + .long PIP_CHI,CHINPIP + .long ROD_CHI,CHINROD + .long KUK_CHI,CHINKUK + .long LON_CHI,CHINLON + .long KER_CHI,CHINKER + ;CLEVLAND + .long HIL_CLE,CLENHIL + .long MIL_CLE,CLENMIL + .long PHL_CLE,CLENPHI + .long BRA_CLE,CLENBRA + .long FER_CLE,CLENFER + ;DALLAS + .long KID_DAL,DALNKID + .long HPR_NEY,NWYNHAR + .long JAC_DAL,DALNJAC + .long MON_BOS,BOSNMON + .long MAS_DAL,DALNMAS + ;DENVER + .long MCD_DEN,DENNMcD + .long MAR_SAC,SACNMAR + .long JAC_IND,INDNJAC + .long ELL_DEN,DENNELL + ;DETROIT + .long HIL_DET,DETNHIL +;; .long RIL_COL, RILEY ;new + .long DUM_DET,DETNDUM + .long THR_DET,DETNTHO + .long AUG_ATL,ATLNAUG + ;GOLDEN STATE + .long SPR_GLD,GOLNSPR + .long KON_ORL,ORLNKON + .long SMI_GLD,GOLNSMI + .long MUL_GLD,GOLNMUL + ;HOUSTON + .long OLA_HOU,HOUNOLA + .long HAR_COL, HRNGTON ;new + .long DRX_HOU,HOUNDRE + .long WLS_GLD,GOLNWIL + ;INDIANA + .long MIL_IND,INDNMIL + .long DAM_COL, DAMPIER ;new + .long ROS_DEN,DENNROS + .long SMI_IND,INDNSMI + .long DAV_IND,INDNDAV + ;L.A. CLIPPERS + .long VAU_CLP,LACNVAU + .long ROG_CLP,LACNROG + .long MUR_CLP,LACNMUR + .long RCH_CLP,LACNRIC + .long BAR_CLP,LACNBAR + ;L.A. LAKERS + .long VAN_LAK,LALNEXE + .long CEB_LAK,LALNCEB + .long SCO_VAN,VANNSCO + .long CAM_LAK,LALNCAM + .long JON_LAK,LALNJON + ;MIAMI + .long MOU_MIA,MIANMOU + .long HRD_MIA,MIANHAR + .long DAN_MIA,MIANDAN + ;MILWAUKEE + .long BAK_MLW,MILNBAK + .long ALL_COL, ALLEN ;new + .long LNG_MIN,MINNLAN + .long ROB_MLW,MILNROB + .long RES_MLW,MILNRES + ;MINNESOTA + .long GUG_MIN,MINNGUG + .long MAR_COL, MARBURY ;new + .long GAR_MIN,MINNGAR + ;NEW JERSEY + .long GLL_NEJ, K_GILL ;fix + .long KIT_COL, KITTLES ;new + .long PAC_WAS,WASNPAC + .long BRA_NEJ,NWJNBRA + .long OBA_NEJ,NWJNOBA + ;NEW YORK + .long EWG_NEY,NWYNEWI + .long WAL_COL, WALLACE ;new + .long JON_CHA,CHANJOH + .long STA_NEY,NWYNSTA + .long HOU_DET,DETNHOU + ;ORLANDO + .long HAR_ORL,ORLNHAR + .long SKL_GLD,GOLNSEI + .long GRT_ORL,ORLNGRA + .long AND_ORL,ORLNAND + .long SCO_ORL,ORLNSCO + ;PHILADELPHIA + .long IVE_COL, IVERSON ;new +;; .long MIN_COL, MINOR ;new + .long STA_PHL,PHINSTA + .long COL_PHL,PHINCOL + .long WEA_PHL,PHINWEA + ;PHOENIX + .long JOH_PHX,PHONJOH + .long TIS_PHX,PHONTIS + .long MAN_PHX,PHONMAN + .long HOR_HOU,HOUNHOR + .long CAS_HOU,HOUNCAS + ;PORTLAND + .long ROB_PRT,PORNROB + .long RID_MIN,MINNRID + .long SAB_PRT,PORNSAB + .long AND_CHA,CHANAND + .long CHI_PRT,PORNCHI + ;SACRAMENTO + .long OWE_SAC,SACNOWE + .long RAF_DEN,DENNRAU + .long RIC_SAC,SACNRIT + .long GRA_SAC,SACNGRA + .long EDN_SAC,SACNEDN + ;SAN ANTONIO + .long ELL_SAN,SANNELL + .long ROB_SAN,SANNROB + .long MAX_PHL,PHINMAX + .long JON_SAN,SANNJOH + .long DEL_SAN,SANNNEG + ;SEATTLE + .long KMP_SEA,SEANKEM + .long PAY_SEA,SEANPAY + .long SCH_SEA,SEANSCH + .long HWK_SEA,SEANHAW + .long FOR_SEA,SEANFOR + ;TORONTO + .long ROG_TOR,TORNROG + .long CAM_COL, CAMBY ;new + .long STO_TOR,TORNSTO + .long JON_DAL,DALNJON + .long WIL_MIA,MIANWIL + ;UTAH + .long STK_UTA,UTANSTO + .long MLN_UTA,UTANMAL + .long HRN_UTA,UTANHOR + .long MOR_UTA,UTANMOR + ;VANCOUVER + .long ANT_VAN,VANNANT + .long EDW_VAN,VANNEDW + .long REV_VAN,VANNREE + ;WASHINGTON + .long STR_PRT,PORNSTR + .long WEB_WAS,WASNWEB + .long HWD_WAS,WASNHOW + .long MUR_WAS,WASNMUR + .long CHE_WAS,WASNCHE + +; Removed +;DALNMcC,DETNMIL,HOUNSMI,INDNMcK,MIANCHA,MILNBEN,MILNDOU,MINNWEB +;NWJNGIL,NWJNEDW,NWYNOAK,PHINRUF,PHONPER,PHONFIN,PORNWIL,SANNPER +;TORNROB,TORNMIL,TORNMUR,UTANBEN,VANNSCO,VANNMUR + + +s_allen + .string "Ray Allen",0 +s_camby + .string "Marcus Camby",0 +s_dampier + .string "Eric Dampier",0 +s_hamer + .string "Steve Hamer",0 +s_harrington + .string "Othella Harrington",0 +s_iverson + .string "Allen Iverson",0 +s_kittles + .string "Kerry Kittles",0 +s_marbury + .string "Stephon Marbury",0 +s_minor + .string "Ryan Minor",0 +s_riley + .string "Ron Riley",0 +s_wallace + .string "John Wallace",0 + +s_gill + .string "Kendall Gill",0 + +s_rookie + .string "Rookie",0 + .even + +rookie_setup + PRINT_STR bast8tcyc_ascii,8,0,200,HD_Y+6,BASTC_G_P,0 + +str_name_setup + PRINT_STR bast18_ascii,8,0,200,213,BST18W_P,0 + +str_name_ptrs + .long 0 + .long s_allen,s_camby,s_dampier,s_hamer + .long s_harrington,s_iverson,s_kittles,s_marbury + .long s_minor,s_riley,s_wallace + .long s_gill + +;DJT End + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** +;DJT Start + .if TRIVCON + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + .endif ;TRIVCON +;DJT End + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/BACKUP/XCODE100M/AUDIT.ASM b/BACKUP/XCODE100M/AUDIT.ASM new file mode 100644 index 0000000..86e2a60 --- /dev/null +++ b/BACKUP/XCODE100M/AUDIT.ASM @@ -0,0 +1,3544 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + +;DJT Start + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + JSRP getcoin +; callr getcoin +;DJT End + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + +;DJT Start + JSRP getcoin +; callr getcoin +;DJT End + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .if OPERMES + .ref opmsg_clr + calla opmsg_clr + .endif ;OPERMES +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start + .byte "MAX HANGTIME - VER M1.0 11/08/96",0 ;Last 8K CMOS v# +; .byte "MAX HANGTIME - VER L1.0 11/08/96",0 ;Last dedicated v# +;DJT End + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrne gc1 + .ref tuneend_snd + SOUND1 tuneend_snd + SLEEPK 1 +; movi ACTIVE,a0,L +; move *a0(PROCID),a0 +; cmpi GRANDCHAMP_PID,a0 +; jrne gc1 +; .ref hangtime_snd +; SOUND1 hangtime_snd +gc1 + SOUND1 coin_snd + RETP +; movi coin_snd,a0 +; jauc snd_play1 +;DJT End + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/BACKUP/XCODE100M/AUDIT.EQU b/BACKUP/XCODE100M/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/BACKUP/XCODE100M/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/BACKUP/XCODE100M/BAKGND.ASM b/BACKUP/XCODE100M/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/BACKUP/XCODE100M/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/BACKUP/XCODE100M/BB.ASM b/BACKUP/XCODE100M/BB.ASM new file mode 100644 index 0000000..ad2c085 --- /dev/null +++ b/BACKUP/XCODE100M/BB.ASM @@ -0,0 +1,3576 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP +;DJT Start +; .ref QSNDRST +;DJT End + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H +;DJT Start +;.ref removed +;DJT End +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT +;DJT Start + .ref RD7FONT +;DJT End + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST +;DJT Start +;DJT .refs removed +;DJT End + .ref OBJOFF,OBJON,pal_getf +;DJT Start + .ref BGND_UD1 +;DJT End + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased +;DJT Start +;DJT .ref moved down +;DJT End + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 +;DJT Start + BSSX names ,32*NUMPLYRS ;plyr name *imgs -MUST PRECEED + BSSX original_names ,32*NUMPLYRS ;plyr name *imgs -MUST FOLLOW +;DJT End + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + +;DJT Start + .ref passfudge + .ref ballpnum + move @passfudge,a0 + jrle #fok + subk 1,a0 + move a0,@passfudge + jrnz #fok + move @ballpnum,a14 + jrnn #fok + move a0,@ballprcv_p,L + .if DEBUG + LOCKUP + .endif ;DEBUG +#fok +;DJT End + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + +;DJT Start + move @SOUNDSUP,a0 + PUSH a0 + clr a0 + move a0,@SOUNDSUP + .ref tuneend_snd + SOUND1 tuneend_snd + PULL a0 + move a0,@SOUNDSUP + +;DJT End + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + +;DJT Start + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + move @GAMSTATE,a1 + movi INPLYRINFO,a0 ;>START button lock-out + move a0,@GAMSTATE + subk INAMODE,a1 + jrne #notnew + + calla display_blank + calla WIPEOUT + clr a0 + move a0,@dtype ;2D + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + movk 1,a0 ;page flipping on + move a0,@dpageflip + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + .ref setup_message,print_string_C2,mess_objid + movi #maxstr_setup,a2,L + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #maxstr,a4,L + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + SLEEPK 5 + + .ref rim_fire_snd ;combo_lock1 + SOUND1 rim_fire_snd + .ref max_hngtm_sp + SOUND1 max_hngtm_sp + .ref tm_fire_tune + SOUND1 tm_fire_tune + + .ref flash_bigtxt3 + CREATE CYCPID,flash_bigtxt3 + + SLEEP 20 + movi ((31*32)+31)*32+31,a0 + move a0,@IRQSKYE + SLEEPK 4 + clr a0 + move a0,@IRQSKYE +#notnew + movk ININTRO,a0 + move a0,@GAMSTATE + +;DJT End + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay +;DJT Start + .ref ballnumscored,balltmshotcnt,hotspot_count + move a0,@ballnumscored + move a0,@balltmshotcnt + move a0,@hotspot_count+00,L + move a0,@hotspot_count+32,L +;DJT End + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;DJT Start +;;;; .ref security_chk +;DJT End +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names +;DJT Start +;DJT ops removed to set_names +;DJT End + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main +;DJT Start + .ref plyr_showhotspots + CREATE0 plyr_showhotspots +;DJT End + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;DJT Start +#maxstr_setup + .ref brush50_ascii,BRSH50R_P + PRINT_STR brush50_ascii,24,0,200,100,BRSH50R_P,0 +#maxstr + .string "MAXIMUM!",0 + .even + +;DJT End +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + +;DJT Start + .ref t1ispro,t2ispro + move @t1ispro,a14 + jrnn #smkn + move @t2ispro,a14 + jrn #notsmkn +#smkn + .ref do_smkn + CREATE0 do_smkn +;; .ref thr_smkn_sp +;; SOUND1 thr_smkn_sp + jruc #smksmk +#notsmkn + SLEEP 35 + SOUND1 heres_tip_sp +#smksmk +;DJT End + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) +;DJT Start + + .ref col_name_ptrs +;DJT End + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + +;DJT Start + clr a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + +;DJT Start + movk 1,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + +;DJT Start + movk 2,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + +;DJT Start + movk 3,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + +;DJT Start +;-------------------- +; A0=player # (0-3) +;Destroys A1-A4,A14 + + SUBR plyrname_fix + + sll 5,a0 + + movi #pnfix_t,a1,L + add a0,a1 + move *a1,a1,L ;Get *(name *obj) + move *a1,a1,L ;Get name *obj + move *a1(OFLAGS),a2 + andni M_CHARGEN+M_PIXSCAN,a2 ;Clear chargen flags + + .ref plyr_data_tbl + movi plyr_data_tbl,a3,L + add a0,a3 + move *a3,a3,L ;Get *playerN_data + + move *a3(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrz #tag1cp + + movi names,a3,L + add a0,a3 + move *a3,a14,L ;College player? + jrn #tag1a ; br=no + move *a3(32*NUMPLYRS),a3,L ;Get college *name + addi M_CHARGEN+M_PIXSCAN,a2,W ;Set char_gen flags + jruc #tag1b +#tag1cp + addi PR_NAME1,a3,W ;Yes. Chk validity of name + move *a3,a14 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a4 +#tag1lp + move *a3+,a14 + cmpi END_CHAR,a14,W ;In range? No if > + jrhi #tag1a + dsj a4,#tag1lp + subi NAME_LETTERS*16,a3,W ;Reset ptr + addi M_CHARGEN,a2,W ;Set char_gen flags +#tag1b + move a3,*a1(ODATA_p),L ;Save char_gen *name + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X +#tag1a + move a2,*a1(OFLAGS) + + srl 5,a0 + rets + +#pnfix_t + .long P1DATA+ply_meter_imgs + .long P2DATA+ply_meter_imgs + .long P3DATA+ply_meter_imgs + .long P4DATA+ply_meter_imgs + +;DJT End + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + +;DJT Start + movi player_names,a10 + move @team1,a2 + jrz #out +#lp + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads,a14 ;Do plyr 1 + jrn #not_spec1 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + move a1,a1 ;College player? + jrn #notcol1 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol1 + move a1,@original_names,L + + move @special_heads+16,a14 ;Do plyr 2 + jrn #not_spec2 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + move a2,a2 ;College player? + jrn #notcol2 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol2 + move a2,@original_names+32,L +; +;Team 2 +; + movi player_names,a10 + move @team2,a2 + jrz #out2 +#lp2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp2 +#out2 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads+32,a14 ;Do plyr 3 + jrn #not_spec3 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + move a1,a1 ;College player? + jrn #notcol3 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol3 + move a1,@original_names+64,L + + move @special_heads+48,a14 ;Do plyr 4 + jrn #not_spec4 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + move a2,a2 ;College player? + jrn #notcol4 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol4 + move a2,@original_names+96,L + + rets +;DJT End + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/BACKUP/XCODE100M/BB.CMD b/BACKUP/XCODE100M/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/BACKUP/XCODE100M/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/BACKUP/XCODE100M/BB2.ASM b/BACKUP/XCODE100M/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/BACKUP/XCODE100M/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/BACKUP/XCODE100M/BB3.ASM b/BACKUP/XCODE100M/BB3.ASM new file mode 100644 index 0000000..792a6e7 --- /dev/null +++ b/BACKUP/XCODE100M/BB3.ASM @@ -0,0 +1,3683 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR +;DJT Start + .def HOTblu,HOTgrn,HOTyel,HOTred +;DJT End + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t +;DJT Start + .ref setup_message,print_string_C2 + .ref bast8_ascii +;DJT End + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + +;DJT Start + .asg 0,MSG_ABABALL ;Flag bit# - ABA ball msg + .asg 1,MSG_OUTDOOR ;Flag bit# - outdoor court msg + .asg 2,MSG_SPECIAL ;Flag bit# - special msg + + BSSX pup_msgs,32 ;Matchup screen pup message flags + +;DJT End + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT Start + cmpi CHAN1F_01,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT End + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + +;DJT Start + move @P1CTRL,a0 + xor a0,a8 + sll 32-7,a8 + jrz #no1 + move a0,a8 + sll 32-7,a8 + srl 32-7,a8 +#no1 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a8 + move a8,*A13(STKREL_P1) + srl 8,a0 + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-7,a9 + jrz #no2 + move a0,a9 + sll 32-7,a9 + srl 32-7,a9 +#no2 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a9 + move a9,*A13(STKREL_P2) + srl 8,a0 + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-7,a10 + jrz #no3 + move a0,a10 + sll 32-7,a10 + srl 32-7,a10 +#no3 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a10 + move a10,*A13(STKREL_P3) + srl 8,a0 + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-7,a11 + jrz #no4 + move a0,a11 + sll 32-7,a11 + srl 32-7,a11 +#no4 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a11 + move a11,*A13(STKREL_P4) + srl 8,a0 + move a0,a11 +;DJT End + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper +;DJT Start + .long sp_showhotspot +;DJT End + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +;DJT andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + +;DJT Start + movi lock_cmbo_snds,a11 + jruc pupsnd +;DJT moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT flash_backdrop moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN,#lp,1 + WAITSWITCH_DWN JOY_DOWN_LEFT,#lp,1 + WAITSWITCH_DWN JOY_LEFT,#lp,1 + WAITSWITCH_DWN JOY_UP_LEFT,#lp,1 + +;a9=0-3 for player + movi pwrup_snds,a11 + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupflash +;DJT End + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + +;DJT Start + jruc pupflash + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_showhotspot + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_UP,#lp,1 + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + +;a9=0-3 for player + .ref pup_showhotspots + move @pup_showhotspots,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_showhotspots + + movi pwrup_snds,a11 + jruc pupflash + +;DJT End +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_LEFT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_DOWN,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,#lp,0 + WAITSWITCH_DWN BUT_SHOOT,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash + +;; clr a3 +;; movi msg_nodrift_setup,a2,L +;; movi msg_nodrift,a4,L +;; movi pwrup_snds,a11 +;; +;; jruc pupmsg +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + +;DJT Start + movk 1<"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%1 +type BB2.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%2 +type BB3.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%3 +type BB4.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%4 +type BB5.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%5 +type BB6.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%6 +type BB7.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%7 +type BB8.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%8 +type BBMUG.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%9 +type BBPAL.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%0 +type MISC.LOD |find "***>"|find ",0"|if not errorlevel 1 set ~bbl=%~bbl%M + +cd .. + + +:TOP +echo. +echo ***** NBA HANGTIME Image Loader ***** +echo. +if "%~bbl%"=="" echo L -- Load all .IRWs +if not "%~bbl%"=="" echo L -- Load all NON-LOCKED .IRWs + echo B -- Build all .LODs + echo. +echo %~bbl%|find >nul "1" +if errorlevel 1 echo 1 -- build BB.LOD +if not errorlevel 1 echo 1 -- build BB.LOD -- LOCKED +echo %~bbl%|find >nul "2" +if errorlevel 1 echo 2 -- build BB2.LOD +if not errorlevel 1 echo 2 -- build BB2.LOD -- LOCKED +echo %~bbl%|find >nul "3" +if errorlevel 1 echo 3 -- build BB3.LOD +if not errorlevel 1 echo 3 -- build BB3.LOD -- LOCKED +echo %~bbl%|find >nul "4" +if errorlevel 1 echo 4 -- build BB4.LOD +if not errorlevel 1 echo 4 -- build BB4.LOD -- LOCKED +echo %~bbl%|find >nul "5" +if errorlevel 1 echo 5 -- build BB5.LOD +if not errorlevel 1 echo 5 -- build BB5.LOD -- LOCKED +echo %~bbl%|find >nul "6" +if errorlevel 1 echo 6 -- build BB6.LOD +if not errorlevel 1 echo 6 -- build BB6.LOD -- LOCKED +echo %~bbl%|find >nul "7" +if errorlevel 1 echo 7 -- build BB7.LOD +if not errorlevel 1 echo 7 -- build BB7.LOD -- LOCKED +echo %~bbl%|find >nul "8" +if errorlevel 1 echo 8 -- build BB8.LOD +if not errorlevel 1 echo 8 -- build BB8.LOD -- LOCKED +echo %~bbl%|find >nul "9" +if errorlevel 1 echo 9 -- build BBMUG.LOD +if not errorlevel 1 echo 9 -- build BBMUG.LOD -- LOCKED +echo %~bbl%|find >nul "0" +if errorlevel 1 echo 0 -- build BBPAL.LOD +if not errorlevel 1 echo 0 -- build BBPAL.LOD -- LOCKED +echo %~bbl%|find >nul "M" +if errorlevel 1 echo M -- build MISC.LOD +if not errorlevel 1 echo M -- build MISC.LOD -- LOCKED + echo. + echo Q -- Quit (or Ctrl-C,Y) + echo. +choice /C:LB1234567890MQ /T:Q,30 "Choose wisely! " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo Aborting -- can not process ERRORLEVEL +goto EXIT + + +:CHKOPT +if errorlevel 14 goto EXIT + +if not exist ~bbltmp md ~bbltmp + +if errorlevel 13 goto DOMISC +if errorlevel 12 goto DOBBPAL +if errorlevel 11 goto DOBBMUG +if errorlevel 10 goto DOBB8 +if errorlevel 9 goto DOBB7 +if errorlevel 8 goto DOBB6 +if errorlevel 7 goto DOBB5 +if errorlevel 6 goto DOBB4 +if errorlevel 5 goto DOBB3 +if errorlevel 4 goto DOBB2 +if errorlevel 3 goto DOBB +if errorlevel 2 goto DOALL + + +:LOADALL +echo %~bbl%|find "1"|if errorlevel 1 load2 BB /e /ri +echo %~bbl%|find "2"|if errorlevel 1 load2 BB2 /e /ri +echo %~bbl%|find "3"|if errorlevel 1 load2 BB3 /e /ri +echo %~bbl%|find "4"|if errorlevel 1 load2 BB4 /e /ri +echo %~bbl%|find "5"|if errorlevel 1 load2 BB5 /e /ri +echo %~bbl%|find "6"|if errorlevel 1 load2 BB6 /e /ri +echo %~bbl%|find "7"|if errorlevel 1 load2 BB7 /e /ri +echo %~bbl%|find "8"|if errorlevel 1 load2 BB8 /e /ri +echo %~bbl%|find "9"|if errorlevel 1 load2 BBMUG /e /ri +echo %~bbl%|find "M"|if errorlevel 1 load2 MISC /e /ri +goto END + + +:DOALL +set ~bblall=1 + + +:DOBB +set ~bblopx=%1 +echo %~bbl%|find "1"|if not errorlevel 1 set ~bblopx=/x +load2 BB /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl1.glo +ren >nul ~bbltmp\imgpal.asm imgpal1.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB2 +set ~bblopx=%1 +echo %~bbl%|find "2"|if not errorlevel 1 set ~bblopx=/x +load2 BB2 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtbl2.glo +ren >nul ~bbltmp\imgpal.asm imgpal2.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB3 +set ~bblopx=%1 +echo %~bbl%|find "3"|if not errorlevel 1 set ~bblopx=/x +load2 BB3 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal3.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB4 +set ~bblopx=%1 +echo %~bbl%|find "4"|if not errorlevel 1 set ~bblopx=/x +load2 BB4 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal4.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB5 +set ~bblopx=%1 +echo %~bbl%|find "5"|if not errorlevel 1 set ~bblopx=/x +load2 BB5 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal5.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB6 +set ~bblopx=%1 +echo %~bbl%|find "6"|if not errorlevel 1 set ~bblopx=/x +load2 BB6 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal6.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB7 +set ~bblopx=%1 +echo %~bbl%|find "7"|if not errorlevel 1 set ~bblopx=/x +load2 BB7 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\bgndpal.asm bgndpal7.asm +ren >nul ~bbltmp\bgndtbl.asm bgndtbl7.asm +ren >nul ~bbltmp\bgndtbl.glo bgndtbl7.glo +ren >nul ~bbltmp\bgndequ.h bgndequ7.h +ren >nul ~bbltmp\imgtbl.glo imgtbl7.glo +ren >nul ~bbltmp\imgpal.asm imgpal7.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBB8 +set ~bblopx=%1 +echo %~bbl%|find "8"|if not errorlevel 1 set ~bblopx=/x +load2 BB8 /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +del >nul ~bbltmp\imgtbl.glo +ren >nul ~bbltmp\imgpal.asm imgpal8.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBMUG +set ~bblopx=%1 +echo %~bbl%|find "9"|if not errorlevel 1 set ~bblopx=/x +load2 BBMUG /e /di /fi /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblm.glo +ren >nul ~bbltmp\imgpal.asm imgpalm.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOBBPAL +set ~bblopx=%1 +echo %~bbl%|find "0"|if not errorlevel 1 set ~bblopx=/x +load2 BBPAL /e /di /t=~bbltmp %~bblopx% +del >nul ~bbltmp\imgtbl.asm +ren >nul ~bbltmp\imgtbl.glo imgtblp.glo +ren >nul ~bbltmp\imgpal.asm imgpalp.asm +move >nul /Y ~bbltmp\*.* . +if "%~bblall%"=="0" goto END + + +:DOMISC +set ~bblopx=%1 +echo %~bbl%|find "M"|if not errorlevel 1 set ~bblopx=/x +load2 MISC /e /di /fi /tc %~bblopx% +if "%~bblall%"=="0" goto END + + +goto END + + +:ENVERR +echo ERROR -- insufficient DOS environment space +goto EXIT + + +:END +rd ~bbltmp +if exist junkxxxx.* del junkxxxx.* +if exist l2temp del l2temp +if exist *.~sm del *.~sm +if exist *.~bl del *.~bl +echo. +echo Done. + + +:EXIT +set ~bblall= +set ~bblopx= +set ~bbl= + +echo. diff --git a/BACKUP/XCODE100M/BBSEC.EQU b/BACKUP/XCODE100M/BBSEC.EQU new file mode 100644 index 0000000..2ffc8eb --- /dev/null +++ b/BACKUP/XCODE100M/BBSEC.EQU @@ -0,0 +1,37 @@ +COINS_M1 .equ 01860090h +SWITCH_M1 .equ 01860040h +SWITCH2_M1 .equ 01860080h +WATCHDOG_M1 .equ 01860090h +DIPSWITCH_M1 .equ 01860010h +SOUND_M1 .equ 01680000h +SOUNDIRQ_M1 .equ 01860020h +COIN_COUNTERS_M1 .equ 01860080h + +COINS_M2 .equ 01860060h +SWITCH_M2 .equ 01860080h +SWITCH2_M2 .equ 01860020h +WATCHDOG_M2 .equ 01860060h +DIPSWITCH_M2 .equ 01860040h +SOUND_M2 .equ 01680000h +SOUNDIRQ_M2 .equ 01860010h +COIN_COUNTERS_M2 .equ 01860020h + +COINS_M3 .equ 018600a0h +SWITCH_M3 .equ 01860010h +SWITCH2_M3 .equ 01860080h +WATCHDOG_M3 .equ 018600a0h +DIPSWITCH_M3 .equ 01860020h +SOUND_M3 .equ 01680000h +SOUNDIRQ_M3 .equ 01860050h +COIN_COUNTERS_M3 .equ 01860080h + +COINS_M4 .equ 01860070h +SWITCH_M4 .equ 01860020h +SWITCH2_M4 .equ 01860040h +WATCHDOG_M4 .equ 01860070h +DIPSWITCH_M4 .equ 01860010h +SOUND_M4 .equ 01680000h +SOUNDIRQ_M4 .equ 01860080h +COIN_COUNTERS_M4 .equ 01860040h + + \ No newline at end of file diff --git a/BACKUP/XCODE100M/CHANGES.DOC b/BACKUP/XCODE100M/CHANGES.DOC new file mode 100644 index 0000000..f3bcd69 --- /dev/null +++ b/BACKUP/XCODE100M/CHANGES.DOC @@ -0,0 +1,121 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.1 -> M1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + 4) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.2 -> L1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums + +M1.2 -> M1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums diff --git a/BACKUP/XCODE100M/COMBOS.DOC b/BACKUP/XCODE100M/COMBOS.DOC new file mode 100644 index 0000000..e103c2d --- /dev/null +++ b/BACKUP/XCODE100M/COMBOS.DOC @@ -0,0 +1,55 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + u+S,u+S - Show hotspots + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/BACKUP/XCODE100M/DIAG.ASM b/BACKUP/XCODE100M/DIAG.ASM new file mode 100644 index 0000000..15ff2de --- /dev/null +++ b/BACKUP/XCODE100M/DIAG.ASM @@ -0,0 +1,6041 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 470,a2 ; Real Game Number (Maximum Hangtime) + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >a42e +CKSUM2 .equ >953a +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/BACKUP/XCODE100M/DIPSW.EQU b/BACKUP/XCODE100M/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/BACKUP/XCODE100M/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/BACKUP/XCODE100M/DISP.EQU b/BACKUP/XCODE100M/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/BACKUP/XCODE100M/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/BACKUP/XCODE100M/DRONE.ASM b/BACKUP/XCODE100M/DRONE.ASM new file mode 100644 index 0000000..56eaa88 --- /dev/null +++ b/BACKUP/XCODE100M/DRONE.ASM @@ -0,0 +1,2456 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + +;DJT Start + PUSH a3,a4,a7,a8,a9,a13 +;DJT End + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L +;DJT Start + move *a13(PA9),a9,L +;DJT End + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense +;DJT Start +; .if 0 + move @PSTATUS,a0 + move *a13(plyr_num),a8 + btst a8,a0 + jrnz #df + movk 1,a14 + xor a8,a14 + btst a14,a0 + jrnz #df + srl 1,a14 + sll 4,a14 + neg a14 + .ref t1ispro + addi t1ispro+16,a14,L + movi 8,a8 ;TSEC*2 ;!!! + move *a14,a14 + jrn #df + jrp #dd + movi 12,a8 ;TSEC*4 ;!!! +#dd + CREATE0 drone_mean + move a0,a8 + movi TSEC*3,a0,W ;!!! + callr rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a8(PTIME) +#df +; .endif ;0 +;DJT End + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + +;DJT Start + clr a0 + move a0,*a9(pld_d_nastycnt) + + movi 190,a0 + move a0,*a9(pld_d_grddist) +;DJT End + + movk 4,a0 + callr rndrng0 + addk 5,a0 +;DJT Start + move a0,*a9(pld_d_lowsecagr) ;5-9 +;DJT End + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + +;DJT Start + PULL a3,a4,a7,a8,a9,a13 + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + SUBR drone_mean + + move a8,*a9(pld_d_nastycnt) + DIE + + .asg CZMID,Z +#seek_t + .word -350,Z-220, -310,Z-220, -270,Z-150, -150,Z-150 + .word 0,Z + .word -350,Z+220, -310,Z+220, -270,Z+150, -150,Z+150 + +; .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 +; .word 0,Z +; .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 +;DJT End + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1, 0, 0 + .word 0 + .word 0, 1, 1, 2, 2 + .word 3, 3, 4, 4, 5 + .word 5, 6, 6, 6, 7 + +;DJT Start +#min_t .byte -13,-10,-8, -7,-7,-6, -6,-5,-5, -5,-5,-5 +;#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro +;DJT Start + .byte -6,-6,-5, -5,-4,-4, -4,-3,-3, -2,-2,-1 +; .byte -8,-7,-6, -6,-5,-5, -5,-4,-4, -4,-3,-4 +;DJT End +;; .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte 5, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 2 ;ATL 11 + TMDIFF ;BOS 21 + .byte 5,-3,-3, -3,-2,-2, -2,-1,-1, -1, 0,-1 ;CHA 16 + .byte 12, 9, 10, 12,10,11, 12,13,14, 16,16,16 ;CHI 1 + .byte 6, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 ;CLE 10 + TMDIFF ;DAL 25 + .byte 5,-5,-4, -4,-4,-3, -3,-3,-3, -2,-2,-2 ;DEN 20 + .byte 5,-1, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1 ;DET 12 + .byte 5,-4,-4, -4,-4,-3, -3,-3,-2, -2,-2,-1 ;GOL 19 + .byte 5, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 4 ;HOU 8 + .byte 5, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 5 ;IND 7 + TMDIFF ;LAC 23 + .byte 5, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 6 ;LAL 6 + .byte 5,-2,-2, -1,-1, 0, 0, 0, 1, 1, 1, 0 ;MI 14 + TMDIFF ;MIL 26 + TMDIFF ;MIN 24 + TMDIFF ;NJ 22 + .byte 5, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 3 ;NY 9 + .byte 8, 6, 6, 7, 7, 7, 8, 8, 9, 9,10, 9 ;ORL 3 + TMDIFF ;PHI 28 + .byte 5,-3,-2, -2,-1,-1, -1, 0, 0, 0, 1, 0 ;PHX 15 + .byte 5,-2,-1, -1, 0, 0, 0, 1, 1, 1, 2, 2 ;POR 13 + .byte 5,-4,-4, -4,-3,-3, -3,-2,-2, -2,-1,-1 ;SAC 18 + .byte 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 7 ;SAN 4 + .byte 7, 7, 8, 8, 8, 9, 9, 9,10, 10,11,10 ;SEA 2 + TMDIFF ;TOR 27 + .byte 8, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 6 ;UTA 5 + TMDIFF ;VAN 29 + .byte 4,-4,-3, -3,-3,-2, -2,-2,-1, -1,-1,-1 ;WAS 17 + +;; .byte 6,-3,-1, -3,-2,-3, -2,-2,-2, -1, 0,-1 ;ATL 11 +;; TMDIFF ;BOS 21 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA 16 +;; .byte 6, 7, 7, 8, 9, 9, 10,10,11, 11,13,12 ;CHI 1 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE 10 +;; TMDIFF ;DAL 25 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN 20 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET 12 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL 19 +;; .byte -1,-1, 0, 1, 1, 1, 2, 2, 2, 3, 4, 3 ;HOU 8 +;; .byte -4,-3,-3, -2,-1,-1, 0, 0, 0, 1, 2, 1 ;IND 7 +;; TMDIFF ;LAC 23 +;; .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0, 1, 0 ;LAL 6 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI 14 +;; TMDIFF ;MIL 26 +;; TMDIFF ;MIN 24 +;; TMDIFF ;NJ 22 +;; .byte -3,-2,-2, -1, 0, 0, 1, 1, 1, 2, 3, 2 ;NY 9 +;; .byte 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 8, 7 ;ORL 3 +;; TMDIFF ;PHI 28 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX 15 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR 13 +;; .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC 18 +;; .byte 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 4 ;SAN 4 +;; .byte 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 8 ;SEA 2 +;; TMDIFF ;TOR 27 +;; .byte 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 5 ;UTA 5 +;; TMDIFF ;VAN 29 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS 17 +;DJT End + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/BACKUP/XCODE100M/GAME.EQU b/BACKUP/XCODE100M/GAME.EQU new file mode 100644 index 0000000..ccaae88 --- /dev/null +++ b/BACKUP/XCODE100M/GAME.EQU @@ -0,0 +1,815 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 + +;DJT Start +;DEFAULT_HIT_PTS equ 40 +DEFAULT_HIT_PTS equ 36 ;Initial attribute pts. +;DJT End + +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +;DJT Start +NUM_ISPRO equ 7 ;after 7 wins +NUM_ISCHAMP equ 24 ;after 24 wins +;DJT End +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire +;DJT Start + + .asg 2,HOTSPOT_MINCNT ;Min # hotspot shots before active + .asg 800,HOTSPOT_SHTPER ;Active hotspot shot % increase +;DJT End + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h +;DJT Start + +GRANDCHAMP_PID .equ 4500h ;Grand Champ PID +;DJT End + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/BACKUP/XCODE100M/GSP.EQU b/BACKUP/XCODE100M/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/BACKUP/XCODE100M/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/BACKUP/XCODE100M/HSTD.ASM b/BACKUP/XCODE100M/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/BACKUP/XCODE100M/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/BACKUP/XCODE100M/IMGFIND.CMD b/BACKUP/XCODE100M/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/BACKUP/XCODE100M/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/BACKUP/XCODE100M/LINK.EQU b/BACKUP/XCODE100M/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/BACKUP/XCODE100M/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/BACKUP/XCODE100M/MACROS.HDR b/BACKUP/XCODE100M/MACROS.HDR new file mode 100644 index 0000000..099afa7 --- /dev/null +++ b/BACKUP/XCODE100M/MACROS.HDR @@ -0,0 +1,765 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend +;DJT Start +;;not MOVE @ROLLING_COUNT,A1 +;;used! INC A1 +;; MOVE A1,@ROLLING_COUNT +;DJT End + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/BACKUP/XCODE100M/MAKE.INI b/BACKUP/XCODE100M/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/BACKUP/XCODE100M/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/BACKUP/XCODE100M/MAKEFILE b/BACKUP/XCODE100M/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/BACKUP/XCODE100M/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/BACKUP/XCODE100M/MAKEPLR.ASM b/BACKUP/XCODE100M/MAKEPLR.ASM new file mode 100644 index 0000000..aaa82cb --- /dev/null +++ b/BACKUP/XCODE100M/MAKEPLR.ASM @@ -0,0 +1,3488 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype +;DJT Start + + .ref get_but_val_cur_mkplr + .ref get_but_val_down_mkplr + .ref get_stick_val_cur_mkplr + .ref get_stick_val_down_mkplr + +;DJT End + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P +;DJT Start + .ref homeaway_cur +;DJT End + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + SUBR design_player_proc_amode + + jruc gpn_1 ;Procs always wake up with A0=0! + +;DJT End + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points +;DJT Start + movk 4,a0 ;6 +;DJT End + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 +;DJT Start + cmpi 60,a1 ;Smart drone minimum +;DJT End + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal +;DJT Start + SOUND1 homeaway_cur +;DJT End + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz loop0 +;DJT End + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr +;DJT End + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC +;DJT Start + calla get_but_val_cur_mkplr +;DJT End + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + +;DJT Start + movi player1_data,a6,L + move a6,*a13(PC_DATADDR),L ;start of player data + clr a10 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrnz #chkrecs + .ref gpr_no_match + calla gpr_no_match + jruc #nonewrec +#chkrecs + calla get_player_record +#nonewrec +;DJT End + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100M/MAKEPLR2.ASM b/BACKUP/XCODE100M/MAKEPLR2.ASM new file mode 100644 index 0000000..bf48a60 --- /dev/null +++ b/BACKUP/XCODE100M/MAKEPLR2.ASM @@ -0,0 +1,2972 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq cnl_1b ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne cnl_1a ; br=not AMODE CREATE PLAYER +cnl_1b +;DJT End + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/BACKUP/XCODE100M/MAKEVDA.BAT b/BACKUP/XCODE100M/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/BACKUP/XCODE100M/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/BACKUP/XCODE100M/MENU.ASM b/BACKUP/XCODE100M/MENU.ASM new file mode 100644 index 0000000..ac9cbc3 --- /dev/null +++ b/BACKUP/XCODE100M/MENU.ASM @@ -0,0 +1,8319 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM +;DJT Start +; .ref snd_reset + .ref QSNDRST +;DJT End + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 +;DJT Start +; .ref set_volume_amode_diag +;DJT End +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .if OPERMES + .ref opmsg_main + .LONG opmsg_s,opmsg_main,OPMSG_HELP + .endif ;OPERMES +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start + .if OPERMES + .WORD 6 ;# of ENTRIES + .else ;OPERMES + .WORD 5 ;# of ENTRIES + .endif ;OPERMES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start + .if OPERMES + .long opmsg_s + .endif ;OPERMES +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +;DJT Start + .if OPERMES +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + .endif ;OPERMES +;DJT End + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +;DJT Start + .if OPERMES +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + .endif ;OPERMES +;DJT End + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100M/MENU.EQU b/BACKUP/XCODE100M/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/BACKUP/XCODE100M/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/BACKUP/XCODE100M/MPROC.ASM b/BACKUP/XCODE100M/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/BACKUP/XCODE100M/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/BACKUP/XCODE100M/MPROC.EQU b/BACKUP/XCODE100M/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/BACKUP/XCODE100M/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/BACKUP/XCODE100M/NDSP1.ASM b/BACKUP/XCODE100M/NDSP1.ASM new file mode 100644 index 0000000..63e3ae6 --- /dev/null +++ b/BACKUP/XCODE100M/NDSP1.ASM @@ -0,0 +1,4041 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img +;DJT Start + .asg 12,NULL_MAXLEN +;DJT End + + SUBR char_gen + +;DJT Start + move *a0(ODATA_p),a11,L ;Get *plyrname +;DJT End + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L +;DJT Start + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +;DJT End +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS +;DJT Start + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz dma_objlst ;Done if there weren't any +;DJT End + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + +;DJT Start +#* + .align + + SUBR char_gen_2d + + move *a0(ODATA_p),a11,L ;Get *plyrname + movi >1000100,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz nxt_2dobj ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle nxt_2dobj + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc nxt_2dobj ;Reenter obj loop + +;DJT End + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS +;DJT Start + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen_2d + +;DJT End + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +;DJT Start + +nxt_2dobj +;DJT End +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets +;DJT Start + .endif +;DJT End + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + +;DJT Start + .endif +;DJT End + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 +;DJT Start + .endif +;DJT End + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 +;DJT Start + .endif +;DJT End + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets +;DJT Start + .endif +;DJT End + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/BACKUP/XCODE100M/NEWLUP.DOC b/BACKUP/XCODE100M/NEWLUP.DOC new file mode 100644 index 0000000..37e7fca --- /dev/null +++ b/BACKUP/XCODE100M/NEWLUP.DOC @@ -0,0 +1,97 @@ +( ALTANTA HAWKS ) ( DETROIT ) ( MILWAUKEE ) + +BLAYLOCK, mookie HILL, grant BAKER, vin +MUTUMBO, dekembe RILEY, ron ALLEN, ray +SMITH, steve DUMARS, joe LANG, andrew +LAETNER, christian THORPE, otis ROBINSON, glen +NORMAN, ken AUGMON, stacey RESPERT, shawn + + +( BOSTON ) ( GOLDEN STATE ) ( MINNESOTTA ) + +BROWN, dee SPREWELL, latrell GUGLIOTTA, tom +HAMER, steve SEIKALY, rony MARBURY, stephon +BARROS, dana SMITH, joe GARNETT, kevin +RADJA, dino MULLIN, chris +FOX, rick + + +( CHARLOTTE ) ( HOUSTON ) ( NEW JERSEY ) + +RICE, glen OLAJUWAN, hakeem GILL, kendall +MASON, anthony HARRINGTON, othella KITTLES, kerry +DIVAC, vlade DREXLER, clyde PACK, robert +ZIDEK, george WILLIS, kevin BRADLEY, shawn +CURRY, del O'BANNON, ed + + +( CHICAGO ) ( INDIANA ) ( NEW YORK ) + +PIPPEN, scottie MILLER, reggie EWING, patrick +RODMAN, dennis DAMPIER, erick WALLACE, john +KUKOC, toni ROSE, jalen JOHNSON, larry +LONGLEY, luke SMITS, rik STARKS, john +KERR, steve DAVIS, dale HOUSTON, allan + + +( CLEVELAND ) ( CLIPPERS ) ( ORLANDO ) + +HILL, tyrone VAUGHT, loy HARDAWAY, anfernee +MILLS, chris ROGERS, rodney GRANT, horace +PHILLS, bobby MURRAY, lamond ANDERSON, nick +BRANDON, terrell RICHARDSON, pooh SCOTT, dennis +FERRY, danny BARRY, brent KONCAK, jon + + +( DALLAS ) ( LAKERS ) ( PHILADELPHIA ) + +KIDD, jason VAN EXEL, nick IVERSON, allen +HARPER, derek CEBALLOS, cedric MINOR, ryan +JACKSON, jim SCOTT, byron STACKHOUSE, jerry +MONTROSS, eric CAMPBELL, elden COLEMAN, derrick +MASHBURN, jamal JONES, eddie WEATHERSPOON,clarence + + +( DENVER ) ( MIAMI ) ( PHOENIX ) + +McDYESS, antonio MOURNING, alonzo JOHNSON, kevin +MARCIULIONIS,sarunas HARDAWAY, tim TISDALE, wayman +JACKSON, mark DANILOVIC, sasha MANNING, danny +ELLIS, dale HORRY, robert + CASSELL, sam + +( PORTLAND ) ( TORONTO ) + +ROBINSON, cliff ROGERS, carlos +RIDER, isaiah CAMBY, marcus +SABONIS, arvydas STOUDAMIRE, damon +ANDERSON, kenny JONES, popeye +CHILDRESS, randolph WILLIAMS, walt + + +( SACRAMENTO ) ( UTAH ) + +OWENS, billy STOCKTON, john +ABDUL-RAUF, mahmoud MALONE, karl +RICHMOND, mitch HORNACEK, jeff +GRANT, brian MORRIS, chris +EDNEY, tyus + + +( SAN ANTONIO ) ( VANCOUVER ) + +ELLIOTT, sean ANTHONY, greg +ROBINSON, david EDWARDS, blue +MAXWELL, vernon REEVES, bryant +JOHNSON, avery +DEL NEGRO, vinny + + +( SEATTLE ) ( WASHINGTON ) + +KEMP, shawn STRICKLAND, rod +PAYTON, gary WEBBER, chris +SCHREMPF, detlef HOWARD, juwan +HAWKINS, hersey MURESAN, gheorge +FORD, sherell CHEANEY, calbert + diff --git a/BACKUP/XCODE100M/PAL.ASM b/BACKUP/XCODE100M/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/BACKUP/XCODE100M/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/BACKUP/XCODE100M/PATCH.ASM b/BACKUP/XCODE100M/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/BACKUP/XCODE100M/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/BACKUP/XCODE100M/PLYR.ASM b/BACKUP/XCODE100M/PLYR.ASM new file mode 100644 index 0000000..84fa788 --- /dev/null +++ b/BACKUP/XCODE100M/PLYR.ASM @@ -0,0 +1,12338 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +;DJT Start + .asg 15,HOTSPOTX_RNG + .asg 22,HOTSPOTZ_RNG + +;DJT End +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper +;DJT Start + move a0,@pup_showhotspots +;DJT End + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + +;DJT Start +;DJT made showhotspots work in tourney-mode +;DJT End + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal +;DJT Start +; move a0,@pup_strongmen ;Grand champion playing flag + +; movk 1,a2 + clr a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set1 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #ck1 +#set1 + addk 1,a3 +#ck1 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set2 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #easy0 +#set2 + addk 2,a3 +#easy0 + move a3,@pup_strongmen ;Grand champion playing flag + +; jruc #easy + +#nea +;DJT End + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) +;DJT Start + + move *a7(PAT_HOTSPOT),a0 ;Hotspot + sll 5,a0 + addi hotspot_xz_t,a0,L + move *a0+,a14 + cmpi NUMPLYRS/2,a11 + jrlt #hs_px + subi WRLDMID,a14 + neg a14 + addi WRLDMID,a14 +#hs_px + move a14,*a13(plyr_hotspotx) + move *a0,a14 + move a14,*a13(plyr_hotspotz) +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 + + movk 1100b,a2 ;Team2 wants to + movk 0011b,a3 ; chk team1 + cmpi 2,a11 + jrhs #chktm + movk 0011b,a2 ;Team1 wants to + movk 1100b,a3 ; chk team2 +#chktm + clr a0 ;Drone skill if human or human tm + and a1,a2 + jrnz #setskl ; br=is human or human tm + + move *a7(PAT_SKILL),a0 ;Drone skill if drone team + and a1,a3 + jrz #setskl ; br=other team is also all drones! + + clr a2 + clr a3 + clr a4 + + movk 2,a14 + xor a11,a14 + btst a14,a1 + jrz #noth1 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a5 ;- if no entry + or a5,a2 ;Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball +;DJT Start +; move @pup_strongmen,a1 +; jrz #notchamp ; br=no grand champs in game +;;A grand champion is playing! +; move *a13(plyr_num),a0 +; srl 1,a0 ; =team # (0,1) +; addk 1,a0 ; =team # (1,2) +; and a0,a1 +; jrz #notchamp ; br=plyr not on a grand champ team +; movi 900,a0 ;### +; calla RNDPER +; jrhi #keepball +; +;#notchamp +;DJT End + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 +;DJT Start +;; +;;show hotspot when plyr runs across +;;; move @pup_showhotspots,a0 ;Bit 0-3 on = show plyr 0-3 hotspots +;;; btst ,a0 +;;; jrz #hsnoshow +;; move *a13(plyr_hotspotx),a1 +;; sub a4,a1 +;; abs a1 +;; subk HOTSPOTX_RNG,a1 +;; jrnn #hsnoshow +;; move *a13(plyr_hotspotz),a1 +;; sub a5,a1 +;; abs a1 +;; subk HOTSPOTZ_RNG,a1 +;; jrnn #hsnoshow +;; PUSH a1,a7,a14 +;; .ref show_hotspot_plyr_coor +;; CREATE0 show_hotspot_plyr_coor +;; move a13,*a0(PA10),L +;; PULL a1,a7,a14 +;; +;;#hsnoshow +;DJT End + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + +;DJT Start + .def hotspot_xz_t,hotspot_xz_tend + +hotspot_xz_t + .word WRLDMID+>17c,CZMID->82 + .word WRLDMID+>148,CZMID->82 + .word WRLDMID+>0d8,CZMID->80 + .word WRLDMID+>110,CZMID->7c + .word WRLDMID+>084,CZMID->7a + .word WRLDMID+>0ac,CZMID->60 + .word WRLDMID+>088,CZMID->40 + .word WRLDMID+>0d4,CZMID->40 + .word WRLDMID+>07c,CZMID->14 + .word WRLDMID+>0a4,CZMID+>00 + .word WRLDMID+>082,CZMID+>26 + .word WRLDMID+>0d4,CZMID+>48 + .word WRLDMID+>098,CZMID+>56 + .word WRLDMID+>0b6,CZMID+>7c + .word WRLDMID+>090,CZMID+>90 + .word WRLDMID+>0dc,CZMID+>98 + .word WRLDMID+>11c,CZMID+>ae + .word WRLDMID+>0b0,CZMID+>b8 + .word WRLDMID+>148,CZMID+>ba + .word WRLDMID+>0f6,CZMID+>ca + .word WRLDMID+>17c,CZMID+>be +hotspot_xz_tend + +NUM_HOTSPOTS .equ (hotspot_xz_tend-hotspot_xz_t)/32 + .def NUM_HOTSPOTS + +;DJT End + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + +;DJT Start + clr a14 + move a14,*a13(plyr_hotspotf) ;Clr hotspot jump flag + move a14,*a13(plyr_hotspotp) ;Clr hotspot shot % +;DJT End + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + +;DJT Start + move *a8(OXPOS),a0 ;Chk hotspot X + move *a8(OXANI+16),a14 + add a14,a0 + move *a13(plyr_hotspotx),a14 + sub a14,a0 + abs a0 + subk HOTSPOTX_RNG,a0 + jrnn #hsnoshow + + move *a8(OZPOS),a0 ;Chk hotspot Z + move *a13(plyr_hotspotz),a14 + sub a14,a0 + abs a0 + subk HOTSPOTZ_RNG,a0 + jrnn #hsnoshow + +;Shooter is on his hotspot! +;Do ball smoke puff + movk 1,a14 + move a14,*a13(plyr_hotspotf) ;Set hotspot jump flag + +#hsnoshow +;DJT End + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + +;DJT Start + move @plyr_onfire,a14 ;Do on-fire shot snd? + btst a0,a14 + jrnz #fire ; br=on-fire + move *a13(plyr_hotspotp),a14 ;Do sound for hotspot shot? + jrz #cold ; br=no + move a0,a14 ;Chk hotspot shot cnt + sll 4,a14 + .ref hotspot_count + addi hotspot_count,a14 + move *a14,a14 + subk HOTSPOT_MINCNT,a14 + jrlt #cold ; br=hotspot not active yet +#fire + SOUND1 fball_snd +;DJT End +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor +;DJT Start + movk 15,a0 ;12 ;14 ;15 ;!!! ;% factor +;DJT End + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire +;DJT Start + move *a13(plyr_hotspotp),a14 ;Add any hotspot shot% bump + add a14,a9 +;DJT End + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly +;DJT Start + movi 800,a9 ;!!! ;Base shot % for layup +; movi 850,a9 ;!!! ;Base shot % for layup +;DJT End +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 +;DJT Start + subk 2,a1 +;DJT End + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk +;DJT Start + movi 600,a9 ;!!! ;Base shot % for hook +; movi 700,a9 ;!!! ;Base shot % for hook +;DJT End + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +;DJT Start + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 + jrz #hkck + +; jruc #hkck +; addk 2,a4 ;8 + + move @HCOUNT,a14 + btst 0,a14 + jrz #hko + subk 10,a4 + jruc #hko + +#hkck +;DJT End + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat +;DJT Start +;;Shouldn't need to do this here +;; move *a13(plyr_num),a14 +;; movk 1,a1 +;; sll a14,a1 +;; move @pup_showhotspots,a0 +;; andn a1,a0 +;; move a0,@pup_showhotspots +;DJT End + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + +;Don't reattach to my lobbed pass + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + +;DJT Start + .ref firstbskt,t1ispro,t2ispro + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + subk 7,a0 + jrn #qcap + clr a0 +#qcap + addk 7,a0 +;DJT End + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + +;DJT Start +; movi 6*TSEC+10-70+60-20,a11 +; CREATE0 scr1 +;DJT End + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob +;DJT Start + move @plyr_onfire,a0 + jrnz #nodrnfr + move @t1ispro,a0 + jrnz #chk2 ; br=tm1 not champ level + move @PSTATUS,a14 + andi >C,a14 + jrz #drnfr +#chk2 + move @t2ispro,a0 + jrnz #nodrnfr ; br=tm2 not champ level + move @PSTATUS,a14 + andi 3,a14 + jrnz #nodrnfr +#drnfr + subk 1,a0 + move a0,@firstbskt +;;not .ref do_smkn +;;here CREATE0 do_smkn +#nodrnfr +;DJT End + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + +;DJT Start + movi 3*TSEC+10+30,a11 + move @gmqrtr,a0 + subk 4,a0 + jrn #no_ot + movi 6*TSEC+10-70+60-20,a11 +#no_ot + CREATE0 scr1 +; CREATE0 score_showtvpanel2 +;DJT End + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/BACKUP/XCODE100M/PLYR.EQU b/BACKUP/XCODE100M/PLYR.EQU new file mode 100644 index 0000000..f8722dc --- /dev/null +++ b/BACKUP/XCODE100M/PLYR.EQU @@ -0,0 +1,377 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; +;DJT Start + STRUCTPD ;92 Words max +;DJT End + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X +;DJT Start + WORD plyr_hotspotp ;Plyrs hotspot shot % + WORD plyr_hotspotf ;Plyrs hotspot jump flag + WORD plyr_hotspotx ;Plyrs hotspot X + WORD plyr_hotspotz ;Plyrs hotspot z + APTR plyr_hotspot_p ;Plyrs hotspot *proc +;DJT End + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat +;DJT Start + WORD PAT_HOTSPOT ;Player hotspot # +;DJT End + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 diff --git a/BACKUP/XCODE100M/PLYR2.ASM b/BACKUP/XCODE100M/PLYR2.ASM new file mode 100644 index 0000000..3825d3b --- /dev/null +++ b/BACKUP/XCODE100M/PLYR2.ASM @@ -0,0 +1,6437 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + +;DJT Start + BSSX t1ispro ,16 ;= - regular, + pro, 0 champ + BSSX t2ispro ,16 + +;DJT End + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + +;DJT Start + BSSX hotspot_count ,16*NUMPLYRS ;Plyrs hotspot shot cnt +;DJT End + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + +;DJT original_names removed +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt +;DJT Start + move a0,@brick_count,L + move a0,@brick_count+20h,L +;DJT End + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored +;DJT Start + BSSX firstbskt ,16 + move a0,@firstbskt +;DJT End + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + +;DJT Start + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + + move *a8(OXVEL),a1,L + cmpi LFTCRT_X,a6 ;Chk left X limit + jrlt #xlow + cmpi RGTCRT_X,a6 ;Chk right X limit + jrle #xok + + move a1,a1 + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad +#xlow + move a1,a1 + jrp #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel +#xbad + .asg 5,PASSFUDGECNT + BSSX passfudge,16 + + move @ballprcv_p,a1,L + jrz #xnop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#xnop +;DJT End + move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + +;DJT removed + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +;DJT Start +#zbad + move @ballprcv_p,a1,L + jrz #znop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#znop +;DJT End + move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;DJT Start +;---------- +; Do hotspot count + + move @ballpnumshot,a0 + move a0,a1 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_hotspotf),a0 ;Chk hotspot jump flag + jrz #nohs ; br=not made from hotspot + sll 4,a1 + addi hotspot_count,a1 ;Inc hotspot shot cnt + move *a1,a0 + inc a0 + move a0,*a1 + subk HOTSPOT_MINCNT,a0 + jrne #nohs + .ref got_hspot_sp + SOUND1 got_hspot_sp +#nohs + +;DJT End +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored +;DJT Start + + move @firstbskt,a14 + move a0,@firstbskt + jrnn #nodrnfr + + move a0,a14 ;Get opposition tNispro value + srl 1,a14 + sll 4,a14 + neg a14 + addi t1ispro+16,a14 + move *a14,a14 ;Are they pro or champ? + jrn #nodrnfr ; br=no + + move a0,a1 ;Set last scoring plyr # + movk ONFIRE_MINCNT-1,a4 ;Set # times last plyr scored + move a0,a5 ;Set last team-shot scored (0=tm2,32=tm1) + srl 1,a5 + subk 1,a5 + jrz #drnfr + movk 32,a5 +#drnfr + movk TMFIRE_MINCNT-1,a7 ;Set # times last team-shot scored +#nodrnfr +;DJT End + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + + +;DJT Start + + addk 3,a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 + + cmpi BLOCKREJ_SEQ,a14 + jrz #higher_bally + cmpi FASTBLOCKREJ_SEQ,a14 + jrnz #reg_bally + +#higher_bally + addi 20,a0 + +#reg_bally + + +; move *a11(OPLINK),a14,L +; move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + +;DJT Start + .word 0,0,0,0,0,0,0,100,130,170 +tkdnk_t .word 200 + .word 300,400,600,800,800,999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1,a2 + + move *a14(plyr_num),a2 ;A2=Plyr# of guy dunking + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;A0=Power of guy dunking + move @pup_maxpower,a1 + btst a2,a1 + jrz #nochng ; br=not max power + movk 9,a0 ;Max power! Can't take ball! +#nochng + move *a11(OPLINK),a14,L + move *a14(plyr_num),a2 ;A2=Plyr# of guy taking ball + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;A14=Power of guy taking ball + cmpi 4,a14 + jrle #nxt0z ; br=power can't take ball! + +;If taker is a drone team & dunker is a pro player, +; allow more blocked dunks! + + srl 1,a2 ;Start with plyr# 0 or 2 + sll 1,a2 + move @PSTATUS,a1 + btst a2,a1 + jrnz #notdrns ; br=not a drone + addk 1,a2 ;Chk plyr# 1 or 3 + btst a2,a1 + jrnz #notdrns ; br=teammate not a drone + srl 1,a2 + sll 4,a2 + neg a2 + addi t1ispro+16,a2,L ;Chk dunker team ispro + move *a2,a2 + jrnn #dnkpro ; br=dunker is a pro/champ +#notdrns + move @HCOUNT,a1 ;Cut blocked dunks in half! + btst 0,a1 + jrz #nxt0z ; br=no block +#dnkpro + sub a14,a0 ;A0=Dunkpwr-Takepwr; -10...10 + sll 4,a0 + addi tkdnk_t,a0,L + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1,a2 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1,a2 +;DJT End +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + +;DJT Start + move @tvpanelon,a0 ;Kill bogus "stolen!" if just scored + .if DEBUG + jrz #dorej + LOCKUP +#dorej + .endif ;DEBUG + jrnz #giveball + +;DJT End + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +;DJT Start + .if DEBUG +; LOCKUP + .endif ;DEBUG +;DJT End +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 +;DJT Start + jrne #notrcvr ;The receiver has it? No if != + move *a3(plyr_seq),a0 + cmpi ALLEYOOP1_SEQ,a0 ;Is it an oop? + jrlo #rcvok + cmpi ALLEYOOP14_SEQ,a0 ;Is it an oop? + jrhi #rcvok + .ref aly_rcv_snd + movi aly_rcv_snd,a0,L + calla snd_play1 + jruc #rcvok + +#notrcvr +;DJT End + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... +;DJT Start + movi 600,a0 ;% for alley intercept + jruc #nxtck1 +; addi 75,a14 ;25 ;Alley oop steal power! +;DJT End +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 +;DJT Start +#nxtck1 +;DJT End + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej +;DJT removed + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +;DJT Start +; .if DEBUG +; move @ballpnum,a14 +; jrnn #nxt +; move *a8(OYPOS),a0 +; move *a8(OSIZEY),a1 +; addk 1,a1 +; add a1,a0 +; jrn #nxt +; LOCKUP +; .endif ;DEBUG + nop + nop +;DJT End +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; .ref show_hotspot_plyr_coor +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + .ref pup_showhotspots + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @tvpanelon,a1,L ;Get tvpanel status + + move @plyr_onfire,a0 ;Chk if on-fire + btst a14,a0 + jrz #notfire ; br=shooter not on fire + + move *a13(plyr_hotspotf),a0 ;On fire. Chk hotspot jump flag + jrnz #fchkhs ; br=from hotspot + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else forget it + jruc #nofire + +#fchkhs + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + jrz #fhoths ; br=1st hotspot shot + subk HOTSPOT_MINCNT,a0 + jrlt #fnohs ; br=hotspot not active yet +#fhoths + movi HOTSPOT_SHTPER,a0 ;Active hotspot! Bump shot% + move a0,*a13(plyr_hotspotp) +#fnohs + .ref hs_shot_snd + SOUND1 hs_shot_snd ;Do hotspot sound + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else do the disc +#dodisc + move *a13(plyr_hotspot_p),a0,L ;Plyr hotspot proc exist? + jrnz #disc + .ref show_hotspot_plyr_coor + CREATE0 show_hotspot_plyr_coor + move a13,*a0(PA10),L + jruc #nofire +#disc + .ref update_hotspot_plyr_coor + calla update_hotspot_plyr_coor + jruc #nofire + +#notfire + move *a13(plyr_hotspotf),a0 ;No fire. Chk hotspot jump flag + jrz #nofire ; br=not from hotspot + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + cmpi HOTSPOT_MINCNT,a0,W + jrge #fhoths ; br=hotspot hot shot! + movk 1,a1 ;Set to do disc only + move a0,a0 ;1st hotspot shot? + jrz #fhoths ; br=yes + jruc #fnohs ;Just do disc & sound + +#dofire + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + +;DJT Start +;If a swat sequence, allow greater y vel + + move *a13(plyr_seq),a3 + cmpi BLOCKREJ_SEQ,a3 + jrz #higher_vel + cmpi FASTBLOCKREJ_SEQ,a3 + jrnz #reg_vel +#higher_vel + movk 24,a4 +#reg_vel +;DJT End + + + + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time +;DJT Start +;Chk if ball has just hit rim +;Let player jump higher in this time if close to rim + move @in_cylinder,a14 + subk 5,a14 + jrlt #normin + + move *a13(plyr_hpdist),a0 + cmpi 100,a0 + jrge #normin + + cmpi ->3c000,a1 + jrlt #minok + .if DEBUG + LOCKUP + .endif ;DEBUG + movi ->3c000,a1 ;Min + jruc #minok +#normin +;DJT End + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 +;DJT Start + move *a13(plyr_seq),a6 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher + +;If a block rej seq, allow this higher jump +;Allow this for winning team also + + cmpi BLOCKREJ_SEQ,a6 + jrz #higher + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher + cmpi ->4b200,a1 ;Let him jump higher + jrgt #maxok + movi ->4b200,a1 + jruc #maxok +#higher + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#losing +; cmpi ->4b700,a1 ;Let him jump higher + +;If a block rej seq, allow this higher jump +;Do this for winning team also + cmpi BLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 + jruc #maxok +#higher_j + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 +;DJT End +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire ; br=shooter not on fire + + move @tvpanelon,a0,L + jrnz #nofire ; br=don't bog out + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 +;DJT Start + jrz #xz2n + move *a5(plyr_num),a14 + move @PSTATUS,a1 + btst a14,a1 ;Is pushee a human doing a layup? + jrz #xz2 ; br=no, do normal + move *a13(plyr_num),a14 + btst a14,a1 ;Is pusher a drone? + jrz #skpck ; br=yes, always succeed with push! + jruc #xz2 ;Do normal +#xz2n +;DJT End + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/BACKUP/XCODE100M/PLYR3.ASM b/BACKUP/XCODE100M/PLYR3.ASM new file mode 100644 index 0000000..1ba4aea --- /dev/null +++ b/BACKUP/XCODE100M/PLYR3.ASM @@ -0,0 +1,4167 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + +;DJT Start + .ref game_time +;DJT End + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +;DJT Start + .def CBANI_T +CBANI_T +;DJT End +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +;DJT Start +#******************************* +* Shot hotspots powerup + + .ref ballpnum,pup_showhotspots,amodeloop + + SUBR plyr_showhotspots + + SLEEPK 8 ;Wait for things to init + + movi pup_showhotspots,a11,L ;Ptr for checking the pup + +;;; move @GAMSTATE,a14 +;;; subk INAMODE,a14 +;;; jrnz #nam +;;; jrz amode_showhotspots ;!!! +;;; move @amodeloop,a14 +;;; andi 3,a14 +;;; subk 3,a14 +;;; jrz amode_showhotspots +;;;#nam + + .if HOTSPOT + move @plyrproc_t,a10,L + .ref hotspot_xz_t + movi hotspot_xz_t,a9,L +#s1 + move *a9(0),*a10(plyr_hotspotx) ;hotspot X + move *a9(16),*a10(plyr_hotspotz) ;hotspot Z + CREATE0 show_hotspot_proc_coor + SLEEPK 1 + addk 32,a9 + .ref hotspot_xz_tend + cmpi hotspot_xz_tend,a9,L + jrnz #s1 +#s99 + .endif + .if DEBUG + movk >f,a14 + move a14,*a11 + .endif + move *a11,a14 ;Any players have it enabled? + jaz SUCIDE ; br=no + +#lpclr + movi -1,a8 ;Plyr# thats showing hotspot +#lp + SLEEPK 4 + move @game_time,a14,L ;Die for sure at end of 1st qrtr + jrz #kill_showhotspot + + move @ballpnum,a6 ;Anyone have the ball? + jrnn #chkplyr ; br=yes + move a8,a8 ;Need to kill a show? + jrn #lp ; br=no show going +#kill + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) + jruc #lpclr + +#chkplyr + cmp a6,a8 ;Is a show going? + jrne #noshow ; br=not for this guy anyway + move *a11,a14 ;Is plyr pup still active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #kill ; br=this plyr isn't + movk 2,a14 ;Keep plyr hotspot active + move a14,*a9(PA11) + jruc #lp + +#noshow + move a8,a8 ;Need to kill a show? + jrn #newplyr ; br=no show going + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) +#newplyr + move *a11,a14 ;Is plyr pup active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #lpclr ; br=this plyr isn't + + move a6,a8 ;Set up a new show + sll 5,a6 + addi plyrproc_t,a6,L + move *a6,a10,L ;Get plyr *proc + .if DEBUG + .ref CLOCK_OFF + move @CLOCK_OFF,a14 + jrz #t99 + move *a10(plyr_hotspot_p),a14,L + move a14,a9 + jrnz #lp +#t99 + .endif + CREATE0 show_hotspot_proc_coor + move a0,a9 + jruc #lp + +#kill_showhotspot + + DIE + +;;;#* +;;; .asg CLSDEAD|555,CLSHSM +;;; +;;; SUBRP amode_showhotspots +;;; +;;; move *a11,a14 ;Any players have it enabled? +;;; jaz SUCIDE ; br=no +;;; +;;; movi #hsmes,a9,L +;;; clr a10 +;;; clr a3 +;;; movi >8000|M_NOCOLL|M_3D|M_NOSCALE,a4 +;;; movi CLSHSM,a5 +;;; clr a0 +;;; clr a6 +;;; clr a7 +;;;#mkhsm +;;; move *a9+,a2,L +;;; jrz #lpclr +;;; clr a1 +;;; PUSH a0 +;;; calla BEGINOBJ2 +;;; PULL a0 +;;; move *a8(OSIZEX),a14 +;;; sll 16,a14 +;;; add a14,a0 +;;; movi 50,a14 ;stupid K!!! +;;; move a14,*a8(OMISC) ;save Z offset +;;; move a10,*a8(ODATA_p),L ;Link the obj list +;;; move a8,a10 +;;; jruc #mkhsm +;;; +;;;#lpclr +;;; movi -1,a8 ;Plyr# thats showing hotspot +;;;#lp +;;; SLEEPK 4 +;;; move @game_time,a14,L ;Die for sure at end of 1st qrtr +;;; jrz #kill_showhotspot +;;; +;;; move @ballpnum,a6 ;Anyone have the ball? +;;; jrnn #chkplyr ; br=yes +;;; move a8,a8 ;Need to kill a show? +;;; jrn #lp ; br=no show going +;;;#kill +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#kill1 +;;; move a10,a0 +;;;#khsm +;;; move *a0(OCTRL),a14 ;Turn off hotspot msg +;;; andni 3,a14 +;;; move a14,*a0(OCTRL) +;;; move *a0(ODATA_p),a0,L +;;; jrnz #khsm +;;; jruc #lpclr +;;; +;;;#chkplyr +;;; move a8,a14 ;Is a hotspot showing? +;;; jrn #nohsm ; br=no +;;; sll 5,a14 +;;; addi plyrproc_t,a14,L ;Get plyr hotspot *obj +;;; move *a14,a14,L +;;; move *a14(plyr_hotspot_p),a14,L +;;; jrz #nohsm +;;; move *a14(PA8),a14,L +;;; +;;; move *a14(OXVAL),a0,L ;Get hotspot coords +;;; move *a14(OYVAL),a1,L +;;; move *a14(OZVAL),a2,L +;;; subk 10,a1 +;;; move a10,a3 +;;; move *a3(OXVAL),a5,L +;;;#mhsm +;;; move *a3(OXVAL),a4,L +;;; sub a5,a0 +;;; add a4,a0 +;;; move a4,a5 +;;; move a0,*a3(OXVAL),L ;Move hotspot msg +;;; move a1,*a3(OYVAL),L +;;; move a2,*a3(OZVAL),L +;;; move *a3(ODATA_p),a3,L +;;; jrnz #mhsm +;;;#nohsm +;;; cmp a6,a8 ;Is a show going? +;;; jrne #noshow ; br=not for this guy anyway +;;; move *a11,a14 ;Is plyr pup still active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill ; br=this plyr isn't +;;; movk 2,a14 ;Keep plyr hotspot active +;;; move a14,*a9(PA11) +;;; jruc #lp +;;; +;;;#noshow +;;; move a8,a8 ;Need to kill a show? +;;; jrn #newplyr ; br=no show going +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#newplyr +;;; move *a11,a14 ;Is plyr pup active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill1 ;lpclr ; br=this plyr isn't +;;; +;;; move a6,a8 ;Set up a new show +;;; sll 5,a6 +;;; addi plyrproc_t,a6,L +;;; move a10,a5 +;;; move *a6,a10,L ;Get plyr *proc +;;; CREATE0 show_hotspot_proc_coor +;;; move a0,a9 +;;; move a5,a10 +;;;#ahsm +;;; move *a5(OCTRL),a14 ;Turn on hotspot msg +;;; ori 2,a14 +;;; move a14,*a5(OCTRL) +;;; move *a5(ODATA_p),a5,L +;;; jrnz #ahsm +;;; jruc #lp +;;; +;;;#kill_showhotspot +;;; movi CLSHSM,a0 +;;; calla obj_del1c +;;; +;;; DIE +;;; +;;; .ref B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;;;#hsmes +;;; .long B8TCYC_H +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long B8TCYC_S +;;; .long B8TCYC_P +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long 0 + + +#******************************* +* Hotspot disc under feet +* A10=*Plyr process + + SUBR show_hotspot_proc_coor + + move *a10(plyr_hotspotx),a0 ;hotspot X + move *a10(plyr_hotspotz),a3 ;hotspot Z + jruc #dospot + + SUBR show_hotspot_plyr_coor + + move *a10(plyr_num),a8 ;Get plyr *obj + sll 5,a8 + addi plyrobj_t,a8,L + move *a8,a8,L + + move *a8(OZPOS),a3 ;hotspot Z + + move *a10(plyr_shadobj_p),a8,L + + move *a8(OXPOS),a0 ;hotspot X + move *a8(OXANI+16),a2 + add a2,a0 + +#dospot + sll 16,a0 + subi 50,a3 + + clr a1 ;hotspot Y + + move *a10(plyr_num),a11 + sll 5,a11 + addi #hotspot_t,a11,L + .ref TWOPLAYERS + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + addi #2p_t-#hotspot_t,a11 +#nkit + move *a11,a11,L ;Get hotspot pal ptr + movi #hotspot_ani,a9,L ;Starting *ani + + move a11,b0 + move *a9+,a2,L + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJP2 + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + move a13,*a10(plyr_hotspot_p),L ;give plyr proc access + + movk 3,a11 ;!!! timeout counter +#lp + SLEEPK 1 + + move @game_time,a14,L + jrz kill_hotspot + move *a9+,a0,L + jrnz #lp1 + movi #hotspot_ani,a9,L ;Starting *ani + move *a9+,a0,L + move @HALT,A14 + jrnz #lp1 + .if DEBUG + move @CLOCK_OFF,a14 + jrnz #lp1 + .endif + subk 1,a11 + jrz kill_hotspot +#lp1 + move *a0(IANIOFFX),*a8(OXANI+16) + move *a8(OCTRL),a1 + calla obj_aniq_cnoff + jruc #lp + +kill_hotspot + clr a14 + move a14,*a10(plyr_hotspot_p),L ;kill plyr proc access + jauc DELOBJDIE + +;-------------------- +* A13=*Plyr process +*Trashes A0,A14 + + SUBR update_hotspot_plyr_coor + + move *a13(plyr_hotspot_p),a0,L ;get plyr hotspot *proc + + movk 3,a14 ;!!! Reset timeout counter + move a14,*a0(PA11),L + + rets + + + .ref HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P +#hotspot_t + .long HOTC_B_P,HOTC_G_P + .long HOTC_Y_P,HOTC_R_P +#2p_t + .long HOTC_B_P,HOTC_B_P + .long HOTC_R_P,HOTC_R_P + +#hotspot_ani + .long HOTCRC01 + .long HOTCRC02 + .long HOTCRC03 + .long HOTCRC04 + .long HOTCRC05 + .long HOTCRC06 + .long HOTCRC07 + .long HOTCRC08 + .long HOTCRC09 + .long HOTCRC10 + .long HOTCRC11 + .long HOTCRC12 + .long HOTCRC13 + .long HOTCRC12 + .long HOTCRC11 + .long HOTCRC10 + .long HOTCRC09 + .long HOTCRC08 + .long HOTCRC07 + .long HOTCRC06 + .long HOTCRC05 + .long HOTCRC04 + .long HOTCRC03 + .long HOTCRC02 + .long 0 + +;; move *a10(plyr_shadobj_p),a8,L +;; +;; move *a8(OXANI+16),a1 ;X +;; move *a8(OXPOS),a0 +;; add a1,a0 +;; addi 14,a0 +;; sll 16,a0 +;; +;; clr a1 ;Y +;; +;; move *a8(OZPOS),a3 ;Z +;; addi 22h,a3 +;; +;; move *a10(plyr_num),a9 +;; sll 6,a9 +;; addi #hotspot_disc_t,a9,L +;; .ref TWOPLAYERS +;; move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players +;; jrz #nkit +;; addi 2p_hd_t-hotspot_disc_t,a9 +;;#nkit +;; move *a9+,a2,L ;Get hotspot img ptr +;; move *a9,a9,L ;Get cycle RAM ptr +;; move *a2(ICMAP),a11,L ;Get img *pal +;; +;; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +;; movi CLSDEAD,a5 +;; clr a6 +;; clr a7 +;; calla BEGINOBJ2 +;; move a8,*a13(PDATA),L ;Save *obj +;; +;; move a11,a8 ;Get obj *pal +;; movi [1,15],a10 ;1st,last color +;; movk 2,a11 ;Rate +;; CREATE CYCPID,COLCYC +;; move a0,a11 ;Save *proc +;; +;; movi 50,a0 ;!!! Stupid K +;;#lp +;; calla PRCSLP +;; movk 1,a0 +;; .ref game_time +;; move @game_time,a14,L +;; jrz kill_hotspot +;; move @HALT,A14 +;; jrnz #lp +;; +;;kill_hotspot +;; move a11,a0 ;Get *proc & kill it +;; calla KILL +;; +;; move *a13(PDATA),a8,L ;Get *obj & kill it +;; jauc DELOBJDIE +;; +;; +;; .bss spotcycram1,15*2*16 ;Palette cycle mem +;; .bss spotcycram2,15*2*16 +;; .bss spotcycram3,15*2*16 +;; .bss spotcycram4,15*2*16 +;; +;;#hotspot_disc_t +;; .ref HOTblu,HOTgrn,HOTyel,HOTred +;; .long HOTblu,spotcycram1,HOTgrn,spotcycram2 +;; .long HOTyel,spotcycram3,HOTred,spotcycram4 +;;#2p_hd_t +;; .long HOTblu,spotcycram1,HOTblu,spotcycram2 +;; .long HOTred,spotcycram3,HOTred,spotcycram4 + +;DJT End +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) +;DJT Start +#no + move @PSTATUS,a14 + btst a11,a14 + jrnz #conta +;Jumpball player is not in game +;Check teammate 0 or 3 + movk 1,a0 + xor a11,a0 + btst a0,a14 + jrnz #getbut +;drone + srl 1,a0 + sll 4,a0 + neg a0 + .ref t1ispro + addi t1ispro+16,a0,L + move *a0,a14 + movi 190,a0 ;!!! regular + move a14,a14 + jrn #drnchk + movi 260,a0 ;!!! pro + move a14,a14 + jrp #drnchk + movi 390,a0 ;!!! champ +#drnchk +;DJT End + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/BACKUP/XCODE100M/PLYRAT.ASM b/BACKUP/XCODE100M/PLYRAT.ASM new file mode 100644 index 0000000..cba4123 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRAT.ASM @@ -0,0 +1,2422 @@ +;DJT Start whole file changed!! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm +;DJT Start + .ref marbry_h + .ref allen_h + .ref camb_h + .ref damp_h + .ref dun_h + .ref ham_h + .ref harr_h + .ref iversn_h + .ref kit_h + .ref minr_h + .ref rily_h + .ref wal_h + +;DJT End + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h + .ref jon_h +;DJT Start + .ref heithb_h + .ref mattb_h + .ref madball_h + +;DJT End +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,512 + BSSX created_plyr3_attrib_tables,512 + BSSX created_plyr4_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ATL_t + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL5 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9,0 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +ATL_tend + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL5 + .long Mutumbo_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL5 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6,19 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL5 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8,11 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL5 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2,4 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +BOST_t + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL5 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2,18 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P +;new + LWWWWWW scale69f_t,BV6,SHT7,DNK5,DEF7,SDEF3,DSKL5 + .long HAM_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,ham_h + .word 6,7,1,14 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL5 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5,8 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL5 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL5 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7,9 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHAR_t + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL5 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,14 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL5 + .long MASON_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Mason_h + .word 4,9,6,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL5 + .long divac_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Divac_h + .word 6,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL5 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL5 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,6 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF5,DSKL5 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,12 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10,13 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2,18 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL5 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL5 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2,1 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL5 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL5 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8,11 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DAL_t + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL5 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DHARP_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,DHarper_h + .word 5,5,5,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL5 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL5 + .long MONTRO_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Montross_h + .word 3,8,3,14 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL5 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9,10 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEN_t + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL5 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7,20 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long MARCIU_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Marciulonis_h + .word 2,5,7,17 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL5 + .long MJACKS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,MJackson_h + .word 9,4,4,11 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,16 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P +;kill + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,4 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DET_t + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,15 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;new +;; LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF5,SDEF7,DSKL5 +;; .long RILY_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,rily_h +;; .word 6,3,2,19 +;; .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL5 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL5 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;kill + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +GOLD_t + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL5 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8,10 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL5 + .long KONCAK_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Koncak_h + .word 3,6,2,17 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL5 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL5 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8,11 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +;kill + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4,0 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL5 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,0 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;new + LWWWWWW scale610f_t,BV4,SHT4,DNK6,DEF8,SDEF2,DSKL5 + .long HARR_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,harr_h + .word 4,9,2,5 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL5 + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8,3 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Willis_h + .word 1,9,4,18 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;kill (MAYBE!!!) +;Kenny Smith + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL5 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9,6 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P +;new + LWWWWWW scale610f_t,BV4,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long DAMP_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,damp_h + .word 4,8,2,5 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL5 + .long ROSE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Rose_h + .word 8,4,9,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL5 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL5 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL5 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL5 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5,19 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL5 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL5 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT6,DNK9,DEF4,SDEF6,DSKL5 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,5,8,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL5 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL5 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8,0 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Scott_h + .word 4,4,9,14 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL5 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL5 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MIAMI_t + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL5 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,15 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6,5 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL5 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL5 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,2 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL5 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P +;new + LWWWWWW scale65t_t,BV9,SHT8,DNK6,DEF2,SDEF6,DSKL5 + .long ALLEN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,allen_h + .word 5,2,8,11 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL5 + .long Lang_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Lang_h + .word 2,8,4,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL5 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL5 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MINN_t + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3,1 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;new + LWWWWWW scale62t_t,BV8,SHT8,DNK5,DEF3,SDEF7,DSKL5 + .long MARBRY_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,marbry_h + .word 6,4,3,13 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL5 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3,18 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL5 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P +;new + LWWWWWW scale69t_t,BV6,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long KIT_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,kit_h + .word 5,6,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL5 + .long PACK_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Pack_h + .word 9,3,2,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL5 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4,19 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL5 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8,14 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL5 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8,20 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +;new + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF7,SDEF4,DSKL5 + .long WAL_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,wal_h + .word 5,7,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL5 + .long johnson_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,LJohnson_h + .word 7,8,8,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL5 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL5 + .long HOUSTO_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Houston_h + .word 5,1,7,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL5 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10,14 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL5 + .long shiek_f, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Seikaly_h + .word 4,8,4,0 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL5 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4,12 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL5 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4,7 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHIL_t +;new + LWWWWWW scale60t_t,BV9,SHT9,DNK0,DEF1,SDEF9,DSKL5 + .long IVER_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,iversn_h + .word 7,3,6,5 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;new +;; LWWWWWW scale65_t,BV6,SHT8,DNK6,DEF4,SDEF6,DSKL5 +;; .long MINR_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,minr_h +;; .word 7,5,2,12 +;; .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL5 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,8 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL5 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2,11 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;kill + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL5 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9,17 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL5 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL5 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6,5 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL5 + .long HORRY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Horry_h + .word 5,6,9,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL5 + .long CASSEL_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Cassel_h + .word 6,1,2,16 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PORT_t + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL5 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,1 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale65f_t,BV7,SHT5,DNK9,DEF1,SDEF4,DSKL5 + .long RIDER_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Rider_h + .word 2,4,6,10 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL5 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4,15 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL5 + .long K_AND_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,KAnderson_h + .word 9,3,6,3 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL5 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8,11 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL5 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6,11 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale61_t,BV8,SHT8,DNK0,DEF1,SDEF8,DSKL5 + .long RAUF_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rauf_h + .word 8,2,9,0 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL5 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL5 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL5 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL5 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL5 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL5 + .long VMAX_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,VMaxwell_h + .word 6,4,4,3 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL5 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2,13 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL5 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,5 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL5 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL5 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2,14 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL5 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7,0 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL5 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4,1 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL5 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1,0 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +;new + LWWWWWW scale610t_t,BV7,SHT8,DNK8,DEF9,SDEF4,DSKL5 + .long CAMB_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,camb_h + .word 5,7,7,9 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL5 + .long PJONES_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Pjones_h + .word 3,8,3,5 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wwilliams_h + .word 6,6,3,3 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL5 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,18 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL5 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL5 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2,9 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P +;kill + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL5 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,3 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL5 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL5 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7,11 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL5 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2,16 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL5 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL5 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,4 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +WASH_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL5 + .long STRICK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Strickland_h + .word 10,3,6,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL5 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8,9 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8,15 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8,0 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8,6 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8,11 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8,18 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8,14 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT9,DNK9,DEF8,SDEF9,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,9,9,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8,12 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8,13 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8,1 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7,17 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7,16 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + + LWWWWWW scale66f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jon_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ZIRIN + + LWWWWWW scale64t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long HEITH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,heithb_h + .word 6,6,6,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEITH BETTLEMAN + + LWWWWWW scale511t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MATT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mattb_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + + LWWWWWW scale511et_t,BV7,SHT8,DNK3,DEF6,SDEF7,DSKL5 + .long MADBAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,madball_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + +;FIXX!!! +;Superstar special guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,0 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8,5 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,3 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,5 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEM + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,12 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8,12 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,9 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4,3 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,0 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,14 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,15 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;New Superstar special guests removed from teams + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2,11 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;G. MCCLOUD + + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;T. MILLS + + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,19 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;K. SMITH + + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3,10 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;D. MCKEE + + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;R. CHAPMAN + + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1,13 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;B. BENJAMIN + + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3,18 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;S. DOUGLAS + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,9 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;S. WEBB + + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;A. GILLIAM + + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;K. EDWARDS + + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;C. OAKLEY + + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4,14 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;T. RUFFIN + + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9,20 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;W. PERSON + + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9,19 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;M. FINLEY + + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4,19 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;B. WILLIAMS + + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;C. PERSON + + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;A. ROBERTSON + + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2,14 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;O. MILLER + + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;T. MURRAY + + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,12 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;D. BENOIT + + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;B. SCOTT + + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,17 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;E. MURDOCK + + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5,0 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5,0 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7,0 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5,0 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4,0 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +**************************************************************** + + .end diff --git a/BACKUP/XCODE100M/PLYRAT2.ASM b/BACKUP/XCODE100M/PLYRAT2.ASM new file mode 100644 index 0000000..f793242 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRAT2.ASM @@ -0,0 +1,668 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;DJT Start +;hotspot + move *a0(PR_PIN_NBR1),a2 + move *a0(PR_PIN_NBR2),a14 + add a14,a2 + move *a0(PR_PIN_NBR3),a14 + add a14,a2 + move *a0(PR_PIN_NBR4),a14 + add a14,a2 + move *a0(PR_WON),a14 + add a14,a2 + movk 1010b,a14 + xor a14,a2 + .ref NUM_HOTSPOTS + movi NUM_HOTSPOTS,a14 + modu a14,a2 + move a2,*a1(PAT_HOTSPOT),W ;write data to array + +;DJT End +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end diff --git a/BACKUP/XCODE100M/PLYRAT3.ASM b/BACKUP/XCODE100M/PLYRAT3.ASM new file mode 100644 index 0000000..9e3e304 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRAT3.ASM @@ -0,0 +1,556 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h +;DJT Start + + .def marbry_h + .def allen_h + .def camb_h + .def damp_h + .def dun_h + .def ham_h + .def harr_h + .def iversn_h + .def kit_h + .def minr_h + .def rily_h + .def wal_h + +;DJT End + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def jon_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h +;DJT Start + .def heithb_h + .def mattb_h + .text + +heithb_h + HDMAC2 HEITH01 +mattb_h + HDMAC2 MATT01 +;DJT End +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/BACKUP/XCODE100M/PLYRDSEQ.ASM b/BACKUP/XCODE100M/PLYRDSEQ.ASM new file mode 100644 index 0000000..f9619b4 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRDSEQ.ASM @@ -0,0 +1,2956 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S1SETLA5,64-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F +;DJT Start + WLW 38-10,S1SETLA4,F +;DJT End + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S2HBHLA6,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F +;DJT Start + WLW 43-10,S2HBHLA4,F +;DJT End + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S3BETLA6,76-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F +;DJT Start + WLW 42-10,S3BETLA5,F +;DJT End + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S4SETLA5,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F +;DJT Start + WLW 43-10,S4SETLA3,F +;DJT End + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S5SETLA5,65-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F +;DJT Start + WLW 38-10,S5SETLA3,F +;DJT End + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT +;DJT Start + .ref goes_flyg_sp + .ref helicptr_snd + WLL -1,seq_snd,goes_flyg_sp + WLL -1,seq_snd,helicptr_snd +;DJT End + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/BACKUP/XCODE100M/PLYRDSQ2.ASM b/BACKUP/XCODE100M/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100M/PLYRLSEQ.ASM b/BACKUP/XCODE100M/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/BACKUP/XCODE100M/PLYRRSEQ.ASM b/BACKUP/XCODE100M/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/BACKUP/XCODE100M/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/BACKUP/XCODE100M/PLYRSEQ.ASM b/BACKUP/XCODE100M/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/BACKUP/XCODE100M/PLYRSEQ2.ASM b/BACKUP/XCODE100M/PLYRSEQ2.ASM new file mode 100644 index 0000000..13c6e45 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRSEQ2.ASM @@ -0,0 +1,1751 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movi 50,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + addk 1,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +;DJT Start + .asg 24000h,XVEL_15 ;24000h + .asg 58000h,ZVEL_15 ;50000h + .asg 5a400h,XVEL_37 ;52000h + .asg 22000h,ZVEL_37 ;22000h + .asg 47500h,XVEL_2468 ;40D00h + .asg 49f00h,ZVEL_2468 ;43300h + +;DJT End +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/BACKUP/XCODE100M/PLYRSTND.ASM b/BACKUP/XCODE100M/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/BACKUP/XCODE100M/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/BACKUP/XCODE100M/QUEST.DOC b/BACKUP/XCODE100M/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/BACKUP/XCODE100M/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/BACKUP/XCODE100M/RECORD.ASM b/BACKUP/XCODE100M/RECORD.ASM new file mode 100644 index 0000000..f8b93c9 --- /dev/null +++ b/BACKUP/XCODE100M/RECORD.ASM @@ -0,0 +1,5907 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +;DJT Start +;DJT .equs not needed + + .asg 8,HISCORE_TABLES + .if TRIVCON + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TRIVCON + .if TEAMPOP + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TEAMPOP +;DJT End + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 +;DJT Start +; cmpi 69,a14 ;too many ? + cmpi 62,a14 ;too many ? +;DJT End + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no +;DJT Start +; movk 2,a9 ;2 pts. + movk 1,a9 ;1 pt. +;DJT End +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records +;DJT Start + +;Top five teams +_UTA .equ 26 +_SAN .equ 23 +_ORL .equ 18 +_SEA .equ 24 +_CHI .equ 3 +;DJT End + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +;DJT Start + SUBR gpr_no_match +;DJT End +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +; RECMAC "JAPPLE", "1111", 28,28,28,001111111111111111111111111111b + RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) +;DJT Start + .if TRIVCON + .long #method8 ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #method3 ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +;DJT Start + .if TRIVCON +;DJT End +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +;DJT Start + .if TEAMPOP +;DJT End +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + +;DJT Start + .endif ;TEAMPOP +;DJT End + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) +;DJT Start + .if TRIVCON + .long #sort_trivia_pts ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #sort_teams ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TRIVCON +;DJT End +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TEAMPOP +;DJT End +#sort_teams + calla get_teams_pop + rets +;DJT Start + .endif ;TEAMPOP +;DJT End + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 +;DJT Start + .long #hd6,#hd7,#hd8 + .if TRIVCON + .long #hd9 + .endif ;TRIVCON + .if TEAMPOP + .long #hda + .endif ;TEAMPOP + .long #hd1 +;DJT End + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 +;DJT Start + .long #hd26,#hd27,#hd28 + .if TRIVCON + .long #hd29 + .endif ;TRIVCON + .if TEAMPOP + .long #hd30 + .endif ;TEAMPOP + .long #hd21 +;DJT End + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +;DJT Start + .if TRIVCON +#hd9 .string "TRIVIA MASTERS",0 + .endif ;TRIVCON + .if TEAMPOP +#hda .string "MOST POPULAR TEAMS",0 + .endif ;TEAMPOP +;DJT End + +;DJT Start +#hd20 .string "(all stats based on 5 games minimum)",0 +;DJT End +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +;DJT Start + .if TRIVCON +#hd29 .string "(best NBA knowledge)",0 + .endif ;TRIVCON + .if TEAMPOP +#hd30 .string "(at this location)",0 + .endif ;TEAMPOP +;DJT End + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100M/REVUP.DOC b/BACKUP/XCODE100M/REVUP.DOC new file mode 100644 index 0000000..6a5a78b --- /dev/null +++ b/BACKUP/XCODE100M/REVUP.DOC @@ -0,0 +1,21 @@ +9/3/96 + + +Here is the list of the changes from NBA Hangtime version L1.1 to +version M1.2: + + 1) Grand Champion leading-space initials crash bugfix + + 2) Watchdog failure during CPU board SRAM check bugfix + + 3) Watchdog & Process KO auditing bugfix + + 4) Points per Game world record bugfix + + 5) Hi-score decimal followed by a zero display problem bugfix + + 6) "DIPSWITCH TEST SELECT" message corrected + + 7) Ball-to-player detection improved + + 8) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/BACKUP/XCODE100M/ROBO.ASM b/BACKUP/XCODE100M/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/BACKUP/XCODE100M/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/BACKUP/XCODE100M/SCORE.ASM b/BACKUP/XCODE100M/SCORE.ASM new file mode 100644 index 0000000..e6ce46a --- /dev/null +++ b/BACKUP/XCODE100M/SCORE.ASM @@ -0,0 +1,4811 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd +;DJT Start + .ref tfire_tcksnd,tfire_outsnd +;DJT End + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON +;DJT Start + .ref CWINDOW,LOWZ +;DJT End + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp +;DJT Start + callr replenish_turbo +;Mike Vinikour wants 7! + movk 8,a1 ;!!! Regular replenish factor + move @PSTATUS,a14 + btst a11,a14 ;Drone or human? + jrnz #do_r ; br=human + movk 1,a2 + xor a11,a2 + btst a2,a14 ;Drone or human teammate? + jrnz #do_r ; br=human + srl 1,a2 + sll 4,a2 + neg a2 + .ref t1ispro + addi t1ispro+16,a2,L ;Chk other team win level + move *a2,a2 + jrn #do_r ; br=novice, not many wins + movk 4,a1 ;!!! Pro replenish factor + jrp #do_r ; br=pro, many wins but not champ yet + movk 1,a1 ;!!! Champ replenish factor +#do_r + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmp a1,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr +;DJT End + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L +;DJT Start + jrn #inhr1 ; br=not college player + move *a8(OIMG),a0,L ;Default college name *img +#inhr1 +;DJT End + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + +;DJT Start +;; movb *a10(3*8),a0 ;Get mins byte +;; cmpi 3,a0 ;Time to adjust drone skills? +;; jrhs #nodaj1 ;No if >= +;; calla drone_adjskill ;Yes. Pass A0 +;;#nodaj1 +;DJT End + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg +;DJT Start + movb *a10(3*8),a0 ;Get mins byte + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +;DJT End +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 +;DJT Start + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd + jruc #nodrnfr +#noplay + .ref firstbskt,thr_smkn_sp + move @firstbskt,a0 + jrnn #nodrnfr + CREATE0 do_smkn +#nodrnfr +;DJT End + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 +;DJT Start + jruc #noplay +;DJT End + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;DJT Start +;---------- +; + + SUBR do_smkn + + movi plyrobj_t,a10,L + movi plyrproc_t,a11,L + move @PSTATUS,a14 + andi 3,a14 + jrz #tmsmk + addi 64,a10 + addi 64,a11 +#tmsmk + movi TSEC*2,a8,W ;!!! + move *a11,a9,L + move *a9(PA9),a9,L + .ref drone_mean + CREATE0 drone_mean + move a0,a2 + move *a11(32),a9,L + move *a9(PA9),a9,L + CREATE0 drone_mean + move a0,a3 + movi TSEC,a0,W ;!!! + .ref rndrng0 + calla rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a2(PTIME) + move a0,*a3(PTIME) + move a10,a9 + + movk 5,a0 + move @gmqrtr,a14 + jrz #tmsmk1 + movk 20,a0 +#tmsmk1 + calla PRCSLP + callr #tmcircs + SLEEPK 30 + SOUND1 thr_smkn_sp + SLEEPK 6 + callr #tmcircs + SLEEP 36 + callr #tmcircs + SLEEP 36 + callr #tmcircs + + DIE + +#tmcircs + .ref fire_circle,netmush_snd + move *a9,a8,L + move *a11,a10,L + CREATE0 fire_circle + move *a9(32),a8,L + move *a11(32),a10,L + CREATE0 fire_circle + SOUND1 netmush_snd + rets + +;DJT End +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +;DJT Start + movi CLSDEAD|tvid,a0 + calla obj_del1c + +;DJT End +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + +;DJT Start + movi [-9,0],a0 + move @gmqrtr,a2 + sll 5,a2 + addi qrtrt,a2 + + move @game_time,a1,L + jrnz #skip + + addi tie_eqrtrt-qrtrt,a2 + move @scores,a1 + move @scores+16,a3 + cmp a1,a3 + jrz #skip + + addi eqrtrt-tie_eqrtrt,a2 + move @gmqrtr,a3 + subk 4,a3 + jrn #skip + clr a0 +#skip + move *a2,a2,L + movi [186+45,0],a1 + movi 5002,a3 + calla BEGINOBJ2 +;DJT End + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;DJT Start +;DJT ;FIX!!! Get different snd + SOUND1 tfire_tcksnd ;warn_snd;Warn players clock is running down +;DJT End + jruc #lptick + +#clean_up +;DJT Start + SOUND1 tfire_outsnd ;Team fire done sound +;DJT End + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/BACKUP/XCODE100M/SCORE2.ASM b/BACKUP/XCODE100M/SCORE2.ASM new file mode 100644 index 0000000..cc689c9 --- /dev/null +++ b/BACKUP/XCODE100M/SCORE2.ASM @@ -0,0 +1,2231 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L +;DJT Start + jrn #notcol1 + .ref AUGMON + movi AUGMON,a2,L ;Default college img +#notcol1 +;DJT End + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L +;DJT Start + + movi names,a0 ;Was it a college player? + add a11,a0 + move *a0,a0,L + jrn #notcol2 ; br=no + .ref original_names + movi original_names,a0 ;Get college *name + add a11,a0 + move *a0,a0,L + move a0,*a8(ODATA_p),L + move *a8(OFLAGS),a0 ;Set obj type + addi M_CHARGEN+M_PIXSCAN,a0,W ;Set chargen flags + move a0,*a8(OFLAGS) + clr a0 + move a0,*a8(OMISC) ;Clr so char_gen calcs new X +#notcol2 +;DJT End + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/BACKUP/XCODE100M/SCREEN.ASM b/BACKUP/XCODE100M/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/BACKUP/XCODE100M/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/BACKUP/XCODE100M/SELECT.ASM b/BACKUP/XCODE100M/SELECT.ASM new file mode 100644 index 0000000..900db47 --- /dev/null +++ b/BACKUP/XCODE100M/SELECT.ASM @@ -0,0 +1,6432 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech +;DJT Start + .ref set_names,plyrname_fix +;DJT End + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 +;DJT Start +;DJT refs moved down to references + .ref ask_yes_no,del_yes_no_buttons +;DJT End + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + +;DJT Start +;DJT Not needed here +;DJT End + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats +;DJT ref moved down to reference +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +;DJT Start +;DJT Not needed here +;DJT End + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram +;DJT Start + move @tm1_cur_pos,a2 +;DJT End + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd1 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_1 +#ju1 + subk 1,a2 + jrnn #jd1 + movk NUM_TEAMS-1,a2 +#jd1 + subk NUM_TEAMS,a2 + jrn #rj_1c + subk NUM_TEAMS,a2 +#rj_1c + addk NUM_TEAMS,a2 + move a2,@tm1_cur_pos + SOUND1 tm_sel_cur1 +;DJT End + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 +;DJT Start +;DJT stuff removed +;DJT End +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram +;DJT Start + move @tm2_cur_pos,a2 +;DJT End + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd2 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_2 +#ju2 + subk 1,a2 + jrnn #jd2 + movk NUM_TEAMS-1,a2 +#jd2 + subk NUM_TEAMS,a2 + jrn #rj_2c + subk NUM_TEAMS,a2 +#rj_2c + addk NUM_TEAMS,a2 + move a2,@tm2_cur_pos + SOUND1 tm_sel_cur2 +;DJT End + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +;DJT Start +;DJT stuff removed +;DJT End +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd +;DJT Start + SLEEP 80 ;65 +;DJT End + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + calla obj_off + move @head2_obj,a8,L + calla obj_off + jruc #do_team2 + +#valid_team1 +;DJT Start + movi player_heads,a10 + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;7 combinations * 3 heads +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + calla obj_off + move @head4_obj,a8,L + calla obj_off + jruc #x + +#valid_team2 +;DJT Start + movi player_heads,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;DJT End + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 +;DJT Start + movi player_names,a10 ;table in score2.asm + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol1 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam1 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec1 ; br=yes, hasn't changed +#notsam1 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec1 +#notcol1 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol2 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam2 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec2 ; br=yes, hasn't changed +#notsam2 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec2 +#notcol2 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 +;DJT Start + movi player_names,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol3 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam3 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec3 ; br=yes, hasn't changed +#notsam3 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec3 +#notcol3 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol4 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam4 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec4 ; br=yes, hasn't changed +#notsam4 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec4 +#notcol4 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +;DJT Start +#stxy2 .long 135<<16 ;140<<16 ;Y + .word 80,311 +;DJT End + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 +;DJT Start + jreq #not_2pc ;no heading in CREATE PLAYER + subk INAMODE,a1 ; or AMODE CREATE PLAYER + jreq #not_2pc + +;DJT End + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq #gyval2 ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne #gyval1 ; br=not AMODE CREATE PLAYER +#gyval2 +;DJT End + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x111a + subk INAMODE,a14 + jrne #x111 +#x111a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x211a + subk INAMODE,a14 + jrne #x211 +#x211a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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 + +;DJT Start + .if TRIVCON +;DJT End + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 +;DJT Start + .ref qualify_plaque + CREATE0 qualify_plaque + .ref print_trivia_info + calla print_trivia_info +;DJT End + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected +;DJT Start + .ref show_trivia_stuff + JSRP show_trivia_stuff + .endif ;TRIVCON +;DJT End + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 +;DJT Start + + move @team1,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm1set,a2,L + move a0,*a2 + clr a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 +;DJT Start + + move @team2,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm2set,a2,L + move a0,*a2 + movk 1,a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names +;DJT Start + + movk 3,a0 +#nfx + calla plyrname_fix + dsj a0,#nfx +;DJT End + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_cur + .ref stick_amode_mkplr + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_down + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_cur + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_down + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 +;DJT Start + + move @kp_qscrs2,a0,L + move @kp_qscrs2+32,a14,L + add a14,a0 + move @kp_qscrs2+64,a14,L + add a14,a0 + move @kp_qscrs2+96,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +;DJT Start + + PULL a0 + move @kp_qscrs2+128,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +;DJT Start + + PULL a0 + move @kp_qscrs2+160,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + +;DJT End + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +;DJT Start +ovr_dn +;DJT End + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 +;DJT Start + + .if ANIM_VS + move @BAKLST,a0,L +#vsk + move *a0(OSIZEX),a14 + cmpi 44,a14 + jrne #vsk1 + move *a0(OCTRL),a14 + srl 2,a14 + sll 2,a14 + move a14,*a0(OCTRL) +#vsk1 + move *a0,a0,L + jrnz #vsk + .endif ;ANIM_VS +;DJT End + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string +;DJT Start + + clr a0 + .ref pup_msgs ;Matchup screen pup message flags + move a0,@pup_msgs,L +;DJT End + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +;DJT Start + .if ANIM_VS + CREATE VS_LOGO_PID,animate_vs_logo + .endif ;ANIM_VS + CREATE0 call_matchup + + movi TSEC*13/2,a10 ;!!! 4 +;DJT End +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +;DJT Start + .if TRIVCON +;DJT End +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 +;DJT Start + .endif ;TRIVCON +;DJT End + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut1 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit1 + move @PSTATUS,a0 + jrnz #xit1 +#nobut1 +;DJT End + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut2 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit2 + move @PSTATUS,a0 + jrnz #xit2 +#nobut2 +;DJT End + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut3 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit3 + move @PSTATUS,a0 + jrnz #xit3 +#nobut3 +;DJT End + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +;DJT Start +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; + .asg 01,A_ + .asg 02,B_ + .asg 03,C_ + .asg 04,D_ + .asg 05,E_ + .asg 06,F_ + .asg 07,G_ + .asg 08,H_ + .asg 09,I_ + .asg 10,J_ + .asg 11,K_ + .asg 12,L_ + .asg 13,M_ + .asg 14,N_ + .asg 15,O_ + .asg 16,P_ + .asg 17,Q_ + .asg 18,R_ + .asg 19,S_ + .asg 20,T_ + .asg 21,U_ + .asg 22,V_ + .asg 23,W_ + .asg 24,X_ + .asg 25,Y_ + .asg 26,Z_ + .asg 29,SP + + .asg -1+1,NUL + .asg 0+1,ZER + .asg 1+1,ONE + .asg 2+1,TWO + .asg 3+1,THR + .asg 4+1,FOR + .asg 5+1,FIV + .asg 6+1,SIX + .asg 7+1,SEV + .asg 8+1,EIG + .asg 9+1,NIN + .asg 10+1,SPC + +#team_data + .word J_,A_,P_,P_,L_,E_ + .word SIX,SIX,SIX,ZER ;00 JOHNSON +#team_data1 + .word D_,I_,V_,I_,T_,A_ + .word ZER,TWO,ZER,ONE ;01 DIVITA + + .word T_,U_,R_,M_,E_,L_ + .word ZER,THR,TWO,TWO ;02 TURMELL + + .word D_,A_,N_,I_,E_,L_ + .word ZER,SIX,ZER,FOR ;03 THOMPSON + + .word E_,U_,G_,E_,N_,E_ + .word SIX,SEV,SIX,SEV ;04 GEER + + .word J_,C_,0,0,0,0 + .word ZER,ZER,ZER,ZER ;05 CARLTON + + .word J_,F_,E_,R_,0,0 + .word ZER,FIV,ZER,THR ;06 HEDRICK + + .word J_,O_,N_,H_,E_,Y_ + .word SIX,ZER,ZER,ZER ;07 JON HEY + + .word M_,O_,R_,R_,I_,S_ + .word SIX,ZER,ZER,ZER ;08 AIR MORRIS + + .word B_,A_,R_,D_,O_,0 + .word SIX,ZER,ZER,ZER ;09 STEVE BARDO + + .word M_,I_,N_,I_,F_,E_ + .word SIX,ZER,ZER,ZER ;10 MINIFEE + + .word M_,A_,R_,T_,Y_,0 + .word ONE,ZER,ONE,ZER ;11 MARTINEZ + + .word C_,A_,R_,L_,O_,S_ + .word ONE,ZER,ONE,ZER ;12 PESINA + + .word S_,H_,A_,W_,N_,0 + .word ZER,ONE,TWO,THR ;13 LIPTAK + + .word E_,D_,D_,I_,E_,0 + .word SIX,TWO,ONE,THR ;14 EDDIE + + .word M_,X_,V_,0,0,0 + .word ONE,ZER,ONE,FOR ;15 MIKE V. + + .word J_,A_,M_,I_,E_,0 + .word ONE,ZER,ZER,ZER ;16 JAMIE + + .word N_,I_,C_,K_,0,0 + .word SEV,ZER,ZER,ZER ;17 NICK E. + + .word R_,O_,O_,T_,0,0 + .word SIX,ZER,ZER,ZER ;18 J. ROOT + + .word M_,E_,D_,N_,I_,K_ + .word SIX,ZER,ZER,ZER ;19 C. MEDNICK + + .word D_,A_,N_,R_,0,0 + .word ZER,ZER,ZER,ZER ;20 DAN R. + + .word P_,A_,T_,F_,0,0 + .word TWO,ZER,ZER,ZER ;21 PAT F. + + .word K_,O_,M_,B_,A_,T_ + .word ZER,ZER,ZER,FOR ;22 ED BOON + + .word M_,O_,R_,T_,A_,L_ + .word ZER,ZER,ZER,FOR ;23 J. TOBIAS + + .word S_,N_,O_,0,0,0 + .word ZER,ONE,ZER,THR ;24 OURSLER + + .word J_,A_,S_,O_,N_,0 + .word ZER,SEV,TWO,SPC ;25 JASON + + .word Q_,U_,I_,N_,0,0 + .word ZER,THR,THR,ZER ;26 QUINN + + .word P_,E_,R_,R_,Y_,0 + .word THR,FIV,ZER,ZER ;27 PERRY + + .word N_,F_,U_,N_,K_,0 + .word ZER,ONE,ZER,ONE ;28 NEIL FUNK + + .word M_,D_,O_,C_,0,0 + .word TWO,ZER,NUL,NUL ;29 MDOC + + .word N_,O_,B_,U_,D_,0 + .word ONE,ZER,ONE,ZER ;30 BUD + + .word M_,A_,R_,I_,U_,S_ + .word ONE,ZER,ZER,FIV ;31 MARIUS + + .word M_,U_,N_,D_,A_,Y_ + .word FIV,FOR,THR,TWO ;32 MUNDAY + + .word N_,O_,R_,T_,H_,0 + .word FIV,ZER,FIV,ZER ;33 NORTH + + .word A_,M_,R_,I_,C_,H_ + .word TWO,ZER,TWO,ZER ;34 AMRICH + + .word J_,I_,G_,G_,E_,T_ + .word ONE,ZER,ONE,ZER ;35 JIGGETS + + .word Z_,I_,R_,I_,N_,0 + .word ONE,ZER,ONE,ZER ;36 ZIRIN + + .word H_,E_,I_,T_,H_,0 + .word ONE,ZER,SEV,NIN ;37 HEITH BETTLEMAN + + .word M_,A_,T_,T_,SP,B_ + .word ZER,ONE,EIG,FOR ;38 MATT BETTLEMAN + + .word K_,SP,D_,A_,Y_,0 + .word FOR,TWO,FOR,TWO ;39 KEVIN DAY + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word P_,I_,P_,P_,E_,N_ + .word ZER,ZER,ZER,ZER ;PIPPEN + + .word R_,O_,D_,M_,A_,N_ + .word ZER,ZER,ZER,ZER ;RODMAN + + .word J_,O_,H_,N_,S_,N_ + .word ZER,ZER,ZER,ZER ;JOHNSN_L + + .word R_,I_,C_,E_,0,0 + .word ZER,ZER,ZER,ZER ;RICE + + .word K_,I_,D_,D_,0,0 + .word ZER,ZER,ZER,ZER ;KIDD + + .word M_,O_,T_,U_,M_,B_ + .word ZER,ZER,ZER,ZER ;MOTUMBO + + .word G_,H_,I_,L_,L_,0 + .word ZER,ZER,ZER,ZER ;G. HILL + + .word D_,R_,E_,A_,M_,0 + .word ZER,ZER,ZER,ZER ;OLAJUAMWN + + .word M_,I_,L_,L_,E_,R_ + .word ZER,ZER,ZER,ZER ;R. MILLER + + .word S_,M_,I_,T_,S_,0 + .word ZER,ZER,ZER,ZER ;R. SMITS + + .word M_,O_,U_,R_,N_,G_ + .word ZER,ZER,ZER,ZER ;MOURNING + + .word G_,L_,E_,N_,N_,R_ + .word ZER,ZER,ZER,ZER ;G. ROBINSON + + .word E_,W_,I_,N_,G_,0 + .word ZER,ZER,ZER,ZER ;EWING + + .word S_,T_,A_,R_,K_,S_ + .word ZER,ZER,ZER,ZER ;STARKS + + .word A_,H_,R_,D_,W_,Y_ + .word ZER,ZER,ZER,ZER ;A. HARDAWAY + + .word H_,G_,R_,A_,N_,T_ + .word ZER,ZER,ZER,ZER ;H. GRANT + + .word S_,T_,A_,C_,K_,H_ + .word ZER,ZER,ZER,ZER ;STACKHOUSE + + .word C_,L_,I_,F_,F_,R_ + .word ZER,ZER,ZER,ZER ;CLIFF R. + + .word D_,A_,V_,I_,D_,R_ + .word ZER,ZER,ZER,ZER ;DAVID R. + + .word E_,L_,L_,I_,O_,T_ + .word ZER,ZER,ZER,ZER ;S. ELLIOT + + .word K_,E_,M_,P_,0,0 + .word ZER,ZER,ZER,ZER ;KEMP + + .word M_,A_,L_,O_,N_,E_ + .word ZER,ZER,ZER,ZER ;MALONE + + .word W_,E_,B_,B_,E_,R_ + .word ZER,ZER,ZER,ZER ;WEBBER + + .word M_,U_,R_,S_,A_,N_ + .word ZER,ZER,ZER,ZER ;MURESAN + +;New Superstar special guests removed from teams +;FIX!!! +;Use name and birthday as pin # + + .word M_,C_,L_,O_,U_,D_ + .word ZER,ZER,ZER,ZER ;McCLOUD, george + + .word T_,M_,I_,L_,L_,S_ + .word ZER,ZER,ZER,ZER ;MILLS, terry + + .word K_,S_,M_,I_,T_,H_ + .word ZER,ZER,ZER,ZER ;SMITH, kenny + + .word M_,C_,K_,E_,E_,0 + .word ZER,ZER,ZER,ZER ;McKEE, derek + + .word C_,H_,A_,P_,M_,N_ + .word ZER,ZER,ZER,ZER ;CHAPMAN, rex + + .word B_,E_,N_,J_,M_,N_ + .word ZER,ZER,ZER,ZER ;BENJAMIN, benoit + + .word D_,O_,U_,G_,L_,S_ + .word ZER,ZER,ZER,ZER ;DOUGLAS, sherman + + .word S_,P_,U_,D_,0,0 + .word ZER,ZER,ZER,ZER ;WEBB, spud + + .word G_,I_,L_,I_,A_,M_ + .word ZER,ZER,ZER,ZER ;GILLIAM, armon + + .word K_,E_,V_,I_,N_,E_ + .word ZER,ZER,ZER,ZER ;EDWARDS, kevin + + .word O_,A_,K_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;OAKLEY, charles + + .word R_,U_,F_,F_,I_,N_ + .word ZER,ZER,ZER,ZER ;RUFFIN, trevor + + .word W_,E_,S_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;PERSON, wesley + + .word F_,I_,N_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;FINLEY, michael + + .word B_,U_,C_,K_,0,0 + .word ZER,ZER,ZER,ZER ;WILLIAMS, buck + + .word P_,E_,R_,S_,O_,N_ + .word ZER,ZER,ZER,ZER ;PERSON, chuck + + .word A_,L_,V_,I_,N_,R_ + .word ZER,ZER,ZER,ZER ;ROBERTSON, alvin + + .word O_,M_,I_,L_,L_,R_ + .word ZER,ZER,ZER,ZER ;MILLER, oliver + + .word M_,U_,R_,R_,A_,Y_ + .word ZER,ZER,ZER,ZER ;MURRAY, tracy + + .word B_,E_,N_,O_,I_,T_ + .word ZER,ZER,ZER,ZER ;BENOIT, david + + .word B_,S_,C_,O_,T_,T_ + .word ZER,ZER,ZER,ZER ;SCOTT, byron + + .word M_,U_,R_,D_,C_,K_ + .word ZER,ZER,ZER,ZER ;MURDOCK, eric + +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,32,2290 ;0 JEFF JOHNSON + .word >3505,31,2276 ;1 SAL DIVITA + .word >3505,32,2272 ;2 TURMELL + .word >3505,28,2286 ;3 THOMPSON + .word >3505,22,2278 ;4 GEER + .word >3505,33,2288 ;5 CARLTON + .word >3505,28,2280 ;6 HEDRICK + .word >3505,23,2274 ;7 JOHN HEY + .word >3505,43,2266 ;8 AIR MORRIS + .word >3505,30,2268 ;9 STEVE BARDO + .word >3505,35,2270 ;10 MINIFEE + .word >3505,41,2282 ;11 MARTINEZ + .word >3505,36,2284 ;12 PESINA + .word >3505,36,2250 ;13 LIPTAK + .word >3505,46,1910 ;14 EDDIE + .word >3505,26,1920 ;15 MIKE V + .word >3505,37,2867 ;16 JAMIE R. + .word >3505,37,2867 ;17 NICK E. + .word >3505,37,2867 ;18 J. ROOT + .word >3505,37,2867 ;19 MEDNICK + .word >3505,37,2867 ;20 DAN R. + .word >3505,37,2867 ;21 PAT F. + .word >3505,37,2867 ;22 ED BOON + .word >3505,37,2867 ;23 J. TOBIAS + .word >3505,37,2867 ;24 OURSLER + .word >3505,37,2867 ;25 JASON S. + .word >3505,37,2867 ;26 QUINN + .word >3505,37,2867 ;27 M. PERRY + .word >3505,37,2867 ;28 N. FUNK + .word >3505,37,2867 ;29 MDOC + .word >3505,37,2867 ;30 BUD + .word >3505,54,1877 ;31 MARIUS + .word >3505,37,2867 ;32 MUNDAY + .word >3505,37,2867 ;33 NORTH + .word >3505,37,2867 ;34 AMRICH + .word >3505,37,2867 ;35 JIGGETS + .word >3505,37,2867 ;36 ZIRIN + .word >3505,37,2867 ;37 HEITH BETTLEMAN + .word >3505,37,2867 ;38 MATT BETTLEMAN + .word >3505,43,2787 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,72,1360 ;PIPPEN, scottie + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,68,1404 ;KIDD, jason + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,63,1444 ;HILL, grant + .word >100D,118,1480 ;OLAJUWAN, hakeem + .word >100D,85,1500 ;MILLER, reggie + .word >100D,71,1508 ;SMITS, rik + .word >100D,97,1560 ;MOURNING, alonzo + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,82,1640 ;EWING, patrick + .word >100D,70,1656 ;STARKS, john + .word >100D,95,1660 ;HARDAWAY, anfernee + .word >100D,76,1664 ;GRANT, horace + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,92,1764 ;ROBINSON, david + .word >100D,69,1760 ;ELLIOTT, sean + .word >100D,64,1780 ;KEMP, shawn + .word >100D,68,1824 ;MALONE, karl + .word >100D,53,1864 ;WEBBER, chris + .word >100D,92,1876 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,84,1416 ;McCLOUD, george + .word >100D,76,1448 ;MILLS, terry + .word >100D,64,1496 ;SMITH, kenny + .word >100D,77,1512 ;McKEE, derek + .word >100D,60,1961 ;CHAPMAN, rex + .word >100D,69,1592 ;BENJAMIN, benoit + .word >100D,69,1596 ;DOUGLAS, sherman + .word >100D,61,1964 ;WEBB, spud + .word >100D,54,1628 ;GILLIAM, armon + .word >100D,60,1636 ;EDWARDS, kevin + .word >100D,81,1652 ;OAKLEY, charles + .word >100D,64,1967 ;RUFFIN, trevor + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY, michael + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,71,1772 ;PERSON, chuck + .word >100D,61,1952 ;ROBERTSON, alvin + .word >100D,67,1812 ;MILLER, oliver + .word >100D,53,1816 ;MURRAY, tracy + .word >100D,69,1832 ;BENOIT, david + .word >100D,60,1958 ;SCOTT, byron + .word >100D,63,1856 ;MURDOCK, eric + + +;DJT End +#****************************************************************************** + + SUBR select_teams + +;DJT Start + PUSH a3 + + clr a3 + not a3 + move a3,@t1ispro ;Set for regular skill level + move a3,@t2ispro + +;DJT End + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random1 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team1 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc1 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc1 + calla RNDRNG0 + sll 4,a2 + addi tm1set,a2,L + move a0,*a2 + jruc #ispro1 + +#choose_random1 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team1 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm1set,a0 + move a1,*a0 + + move @player3_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont1 + move @player4_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont1 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+10h +#ispro1 + move a3,@t2ispro + jruc #teams_ok + +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random2 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team2 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc2 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc2 + calla RNDRNG0 + sll 4,a2 + addi tm2set,a2,L + move a0,*a2 + jruc #ispro2 + +#choose_random2 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team2 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm2set,a0 + move a1,*a0 + + move @player1_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont2 + move @player2_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont2 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+30h +#ispro2 + move a3,@t1ispro + +#teams_ok + PULL a3 + rets + + +;This table should be ranked by real NBA record +;Updated on 10/15/96 +;Worst to Best: + +_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 +_TOR .equ 25 +_UTA .equ 26 +_VAN .equ 27 +_WAS .equ 28 + +team_orders + .word _VAN ;27 29 + .word _PHI ;19 28 + .word _TOR ;25 27 + .word _MIL ;14 26 + .word _DAL ;5 25 + .word _MIN ;15 24 + .word _LAC ;11 23 + .word _NJ ;16 22 + .word _BOS ;1 21 + .word _DEN ;6 20 + .word _GOL ;8 19 + .word _SAC ;22 18 + .word _WAS ;28 17 + .word _CHA ;2 16 + .word _PHX ;20 15 + .word _MI ;13 14 + .word _POR ;21 13 + .word _DET ;7 12 + .word _ATL ;0 11 + .word _CLE ;4 10 + .word _NY ;17 9 + .word _HOU ;9 8 + .word _IND ;10 7 + .word _LAL ;12 6 + .word _UTA ;26 5 + .word _SAN ;23 4 + .word _ORL ;18 3 + .word _SEA ;24 2 + .word _CHI ;3 1 + .word -1 +;DJT End + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ +;DJT Start + jrnc found_champ +;DJT End + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +;DJT Start + SUBR found_champ + + .if DEBUG + movk INPLYRINFO,a14 + move a14,@GAMSTATE + .endif + + move *a13(PROCID),*a13(PDATA) + movi GRANDCHAMP_PID,a14 + move a14,*a13(PROCID) + + clr a14 + move a14,@PSTATUS + move a14,@PSTATUS2 +;DJT End + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + +;DJT Start + movi CHEERS,a8 +; movi TROPHY,a8 +;DJT End + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + +;DJT Start + .asg 2,CC_BEG + .asg 18,CC_END + .asg 3,CC_RAT + .asg BRSHGYOP,CC_PAL + + .bss cycram,(CC_END-CC_BEG+1)*16*2 + + movi CC_PAL,a8,L ;*pal + movi cycram,a9,L ;Get cycle RAM ptr + movi [CC_BEG,CC_END],a10,L ;1st,last color + movk CC_RAT,a11 ;Rate + .ref COLCYC + CREATE CYCPID,COLCYC + +;DJT End + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + +;DJT Start + SLEEP 10*TSEC +;DJT End + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb +;DJT Start +#found_champ1 +;DJT End + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + +;DJT Start + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 +#txt1 + move *a9+,a4,L + cmpi 4001,a4 ;spc case? + jrne #txt2 + addk 14,a0 + jruc #txt1 +#txt2 + cmpi 4000,a4 ;at end ? + jreq #txtdn ;br=no + + addi YSPACE,a0 + move a0,@mess_cursy + + move *a4+,a0,W + move a0,@mess_cursx2 + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + jruc #txt + +#txtdn + movi -0c000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*18 + + CREATE0 plyr_jscrowdsnd + + SLEEP 22*TSEC +7 + + clr a3 ;turn off scroll + movi OBJLST,a14 +#lp1 + move *a14,a14,L + jrz #x1 + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp1 + move a3,*a14(OYVEL),L + jruc #lp1 +#x1 + SLEEP 4*TSEC-8 -7 + + .ref tune_gmovr,pregame_tune,tuneend_snd + SOUND1 pregame_tune + + .ref show_designteam + JSRP show_designteam + + move *a13(PDATA),*a13(PROCID) + + SOUND1 tune_gmovr +;DJT End + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 +;DJT Start + PRINT_STR hangfnt38_ascii,14,0,200,180,HANGF_Y_P,kern_chars +;DJT End +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +;DJT Start +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line5a + .long #line5b + .long #line_blnk + .long #line6 + .long #line6a + .long #line7 + .long #line7a + .long #line8 + .long #line8a + .long #line9 + .long #line9a + .long #line_blnk + .long #line12 + .long #line12a + .long #line13 + .long #line14 + .long #line15 + .long #line15a + .long #line_blnk + .long #line16 + .long #line16a + .long #line_blnk + .long #line_blnk + .long #line10 + .long #line11 + .long 4001 + .long #line17 + .long #line17a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,197 ;x,y +; .word 24,174 ;x,y + .long BRSHGWKP ;_Y_P ;GYGP + .string "Y",1,-4,"OU",1,-2,"'",1,1,"V",1,-2,"E " + .string "GO",1,-2,"T" + .string 0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,221 ;x,y + .long BRSH_G_P + .string "M",1,-1,"AX",1,-2,"I",1,-2,"M",1,-1,"U",1,-1,"M " + .string "H",1,-4,"AN",1,-2,"G",1,-1,"T",1,-2,"I",1,-2,"M",1,-1,"E" + .string "!",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 194,14 ;x,y + .long CC_PAL + .string "Y",1,-4,"OU " + .string "AR",1,-1,"E " + .string "T",1,-3,"H",1,-2,"E" + .string 0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 128,38 ;x,y + .long CC_PAL + .string "GR",1,-1,"AN",1,-1,"D " + .string "CH",1,-4,"AM",1,-1,"PI",1,-2,"ON",1,-1,"!" + .string 0 + .even + +;; .word 20,48 ;x,y +;; .string "YOU ARE",0 +;;; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 +;; .word 20,74 ;x,y +;; .string "THE NBA",0 +;;; .string "N",1,-6,"B",1,-5,"A",0 +;; .word 20,100 ;x,y +;; .string "HANGTIME",0 +;;; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +;; .word 20,126 ;x,y +;; .string "GRAND",0 +;;; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 +;; .word 20,152 ;x,y +;; .string "CHAMPION!",0 +;;; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 26 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"E P",1,-5,"L",1,-1,"A",1,2,"Y",1,-7,"E",1,-6,"R",1,-3,"S" + .string 0 + .even + +#line4a + .word 105 + .long HANGF_Y_P + .string "I",1,-6,"N N",1,-7,"B",1,-6,"A" + .string 0 + .even + +#line4b + .word 58 + .long HANGF_G_P + .string "H",1,-7,"A",1,1,"N",1,-5,"G",1,1,"T",1,-7,"I",1,-6,"M",1,-7,"E" + .string 0 + .even + +#line5 + .word 62 + .long HANGF_Y_P + .string "T",1,-4,"U",1,-6,"R",1,-5,"N",1,-7,"E",1,-7,"D IT" + .string 0 + .even + +#line5a + .word 79 + .long HANGF_Y_P + .string "U",1,-6,"P T",1,-5,"O G",1,-2,"O" + .string 0 + .even + +#line5b + .word 48 + .long HANGF_R_P + .string "M",1,-7,"A",1,1,"X",1,-6,"I",1,-6,"M",1,-4,"U",1,-6,"M!" + .string 0 + .even + +#line6 + .word 72 + .long HANGF_Y_P + .string "B",1,-3,"UT N",1,-5,"O",1,-1,"W" + .string 0 + .even + +#line6a + .word 70 + .long HANGF_Y_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line7 + .word 69 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-7,"F",1,-7,"E",1,-7,"A",1,1,"T",1,-7,"E",1,-7,"D" + .string 0 + .even + +#line7a + .word 107 + .long HANGF_Y_P + .string "A",1,1,"L",1,-1,"L 2",1,-3,"9" + .string 0 + .even + +#line8 + .word 68 + .long HANGF_Y_P + .string "T",1,-7,"E",1,-7,"A",1,1,"M",1,-4,"S T",1,-1,"O" + .string 0 + .even + +#line8a + .word 33 + .long HANGF_Y_P + .string "B",1,-5,"E",1,-5,"C",1,-2,"O",1,-4,"M",1,-7,"E T",1,-7,"H",1,-7,"E" + .string 0 + .even + +#line9 + .word 33 + .long HANGF_R_P + .string "N",1,-7,"E",1,-2,"W G",1,-4,"R",1,-4,"A",1,1,"N",1,-7,"D" + .string 0 + .even + +#line9a + .word 43 + .long HANGF_R_P + .string "C",1,-5,"H",1,-7,"A",1,1,"M",1,-6,"P",1,-5,"I",1,-5,"O",1,-5,"N!" + .string 0 + .even + +#line12 + .word 65 + .long HANGF_G_P + .string "M",1,-6,"I",1,-7,"DW",1,-11,"A",1,2,"Y",1,2,"'",1,-2,"S" + .string 0 + .even + +#line12a + .word 26 + .long HANGF_Y_P + .string "N",1,-7,"E",1,-7,"X",1,1,"T B",1,4,"'",1,-3,"B",1,-6,"A",1,1,"L",1,-1,"L" + .string 0 + .even + +#line13 + .word 45 + .long HANGF_Y_P + .string "C",1,-5,"H",1,-7,"A",1,1,"L",1,-1,"L",1,-1,"E",1,-7,"N",1,-5,"G",1,-5,"E" + .string 0 + .even + +#line14 + .word 62 + .long HANGF_Y_P + .string "W",1,-6,"I",1,-7,"L",1,-1,"L H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line15 + .word 108 + .long HANGF_Y_P + .string "A N",1,-7,"E",1,-2,"W" + .string 0 + .even + +#line15a + .word 48 + .long HANGF_Y_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line16 + .word 96 + .long HANGF_R_P + .string "A T",1,-7,"H",1,-7,"I",1,-6,"R",1,-5,"D" + .string 0 + .even + +#line16a + .word 48 + .long HANGF_R_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line10 + .word 49 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"A",1,1,"N",1,-7,"K Y",1,-8,"O",1,-2,"U" + .string 0 + .even + +#line11 + .word 16 + .long HANGF_Y_P + .string "F",1,-5,"O",1,-4,"R P",1,-5,"L",1,-1,"A",1,1,"Y",1,-6,"I",1,-7,"N",1,-5,"G!" + .string 0 + .even + +#line17 + .word 26 + .long HANGF_G_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E",1,-7,"N",1,1,"'",1,2,"T" + .string 0 + .even + +#line17a + .word 24 + .long HANGF_G_P + .string "S",1,-5,"E",1,-7,"E",1,-7,"N IT A",1,1,"L",1,-1,"L!" + .string 0 + .even + + +; .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 +; .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 +; .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 +; .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 +; +; .string "B",1,-3,"U",1,-1,"T"," ","A",0 +; .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 +; .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 +; .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 +; +; .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 +; .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 +; +; .string "N",1,-6,"B",1,-5,"A",0 +; .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +; +; .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 +; .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 +; +; .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 +; .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 +;DJT End + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +;DJT plyr_names_img_tbl removed to ATTRACT +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup +;DJT Start + PRINT_STR bast8_ascii,5,0,200,197,BAST_Y_P,0 +;DJT End + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;DJT Start + .long T_PISS_N ; 7 DETROIT +;DJT End + .long T_WARS ; 8 GOLDEN STATE + .long T_ROCKS ; 9 HOUSTON + .long T_PACER ;10 INDIANA +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .long T_HEAT ;13 MIAMI + .long T_BUCKS ;14 MILWAUKEE +;DJT Start + .long T_TWOLV_N ;15 MINNESOTA +;DJT End + .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_RAPT ;25 TORONTO +;DJT Start + .long T_JAZZ_N ;26 UTAH +;DJT End + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;DJT Start +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;00 ATLANTA HAWKS + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;01 BOSTON CELTICS + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg +;new + .word 06,07,07,05 + .word 03,07,06,01 ;STEVE HAMER _______________ + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;02 CHARLOTTE HORNETS + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _______________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;03 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;04 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;05 DALLAS MAVERICKS + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD _______________ + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS _______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;06 DENVER NUGGETS + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS _______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;07 DETROIT PISTONS + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _______________ +;new +;; .word 07,03,08,03 +;; .word 07,05,06,02 ;RON RILEY _______________ + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;08 GOLDEN STATE WARRIORS + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _______________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;09 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg +;new + .word 04,09,04,06 + .word 02,08,04,02 ;OTHELLA HARRINGTON _______________ + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg +;kill (MAYBE!!!) +;Kenny Smith + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 INDIANA PACERS +;LOOK!!! + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin +;new + .word 04,08,07,07 + .word 03,07,04,02 ;ERICK DAMPIER _______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE _______________ + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _______________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _______________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _______________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT 6'4" 235 fat + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 MIAMI HEAT + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin +;new + .word 09,02,08,06 + .word 06,02,05,08 ;RAY ALLEN _______________ + + .word 06,08,05,06 + .word 04,09,02,04 ;ANDREW LANG 6'11" 235 reg + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON _______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MINNESOTA TIMBERWOLVES + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg +;new + .word 08,04,08,05 + .word 07,03,06,03 ;STEPHON MARBURY _______________ + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin +;new + .word 06,06,07,07 + .word 03,07,05,02 ;KERRY KITTLES _______________ + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg +;new + .word 05,07,07,06 + .word 04,07,05,02 ;JOHN WALLACE _______________ + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 PHILADELPHIA 76ers +;new + .word 09,03,09,00 + .word 09,01,07,06 ;ALLEN IVERSON _______________ +;new +;; .word 06,05,08,06 +;; .word 06,04,07,02 ;RYAN MINOR _______________ + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE _______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PORTLAND TRAILBLAZERS + + .word 08,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 07,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,06 ;BILLY OWENS 6'9" 220 reg + + .word 08,02,08,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT _______________ + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10" 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS _______________ +;new + .word 07,07,08,08 + .word 04,09,05,07 ;MARCUS CAMBY _______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 WASHINGTON BULLETS + + .word 08,03,07,00 + .word 07,01,10,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _______________ + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg +;DJT End + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .ref ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .ref MARBURY,MINOR,RILEY,WALLACE + +name_sort + .long BLAYLOCK,MUTUMBO,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN, HAMER ,BARROS,RADJA,FOX ;new ;01 CELTICS + .long RICE,MASON,DIVAC,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long KIDD,HARPER_D,JACK,MONTROSS,MASH ;05 MAVERICKS + .long MCDYESS,MARCIULO,MJACKSON,DELLIS, DELLIS ;kill ;06 NUGGETS + .long GHILL,DUMARS,THORPE,AUGMON, RILEY ;kill:new ;07 PISTONS + .long SPREWELL,KONCAK,JSMITH,MULLIN, MULLIN ;kill ;08 WARRIORS + .long OLAJUWON, HRNGTON ,DREXLER,WILLIS, WILLIS ;new,kill ;09 ROCKETS + .long MILLER, DAMPIER ,ROSE,SMITS,DDAVIS ;new ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS + .long VANEXEL,CEBALLOS,SCOTT,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,THARDAWAY,DANILOVI, DANILOVI , DANILOVI ;kill,kill ;13 HEAT + .long BAKER, ALLEN ,LANG,GROBINSO,RESPERT ;new ;14 BUCKS + .long GUGLI2, MARBURY ,GARNETT, GARNETT , GARNETT ;new,kill,kill ;15 TIMBERWOLVES + .long GILL, KITTLES ,PACK,BRADLEY,OBANNON ;new ;16 NETS + .long EWING, WALLACE ,JOHNSN_L,STARKS,HOUSTON ;new ;17 KNICKS + .long AHARDAWAY,SEIKALY,GRANT_HC,NANDERSON,DSCOTT ;18 MAGIC + .long IVERSON ,STACKHOU,COLEMAN,WEATHSPN, MINOR ;new,kill:new ;19 76ers + .long KJOHNSON,TISDALE,MANNING,HORRY,CASSELL ;20 SUNS + .long CROBINSON,RIDER,SABONIS,KANDERSON,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,ABDULRAU,RICH,BGRANT,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,VMAXWELL,AJOHNSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS, CAMBY ,STOUDAMI,PJONES,WWILLIAM ;new ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,CMORRIS, CMORRIS ;kill ;26 JAZZ + .long ANTHONY,EDWARDS,BREEVES, BREEVES , BREEVES ;kill,kill ;27 GRIZZLIES + .long STRICKLA,WEBBER,JHOWARD,MURESAN,CHEANEY ;28 BULLETS + .long 0 + +;Removed +;MCCLOUD,TMILLS,SMITH,MCKEE2,CHAPMAN,BENJAMIN,DOUGLAS,WEBB +;GILLIAM,KEDWARDS,OAKLEY,RUFFIN,WPERSON,FINLEY,BWILLIAM,PERSON +;ROBERTSON,OMILLER,TMURRAY,BENOIT,SCOTT,EMURDOCK +;DJT End + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts +;DJT Start + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 12 ;DENVER + .word 12 ;20 ;DETROIT + .word 12 ;GOLDEN STATE + .word 12 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 6 ;MIAMI + .word 20 ;MILWAUKEE + .word 6 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 12 ;20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;TORONTO + .word 12 ;UTAH + .word 6 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;00 JEFF JOHNSON + .long DIVITA ;01 SAL DIVITA + .long TURMELL ;02 TURMELL + .long THOMPS ;03 THOMPSON + .long GEER ;04 GEER + .long CARLTON ;05 CARLTON + .long HEDRICK ;06 HEDRICK + .long HEY ;07 JOHN HEY + .long AIRMOR ;08 AIR MORRIS + .long BARDO ;09 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 ED BOOM + .long TOBIAS ;23 JOHN TOBIAS + .long OURSLER ;24 SHERIDAN OURSLER + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + .long ZIRIN ;36 ZIRIN + .long HBETT ;37 HEITH BETTLEMAN + .long MBETT ;38 MATT BETTLEMAN +;DJT Start + .long FUNK ;39 KEVIN DAY +;DJT End + +;Superstar special guests + .long PIPPEN + .long RODMAN + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + +;New Superstar special guests removed from teams + .long MCCLOUD + .long TMILLS + .long SMITH + .long MCKEE2 + .long CHAPMAN + .long BENJAMIN + .long DOUGLAS + .long WEBB + .long GILLIAM + .long KEDWARDS + .long OAKLEY + .long RUFFIN + .long WPERSON + .long FINLEY + .long BWILLIAM + .long PERSON + .long ROBERTSON + .long OMILLER + .long TMURRAY + .long BENOIT + .long SCOTT + .long EMURDOCK +;DJT End + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS +;DJT Start + .long JON_MUG ;36 ZIRIN + .long HEI_MUG ;37 HEITH BETTLEMAN + .long MAT_MUG ;38 MATT BETTLEMAN + .long BAL_MUG ;39 KEVIN DAY + +;Superstar special guests + .long PIP_CHI + .long ROD_CHI + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS + +;New Superstar special guests removed from teams + .long MCC_DAL + .long MLS_DET + .long SMT_HOU + .long MCK_IND + .long CHP_MIA + .long BEN_MLW + .long DOU_MLW + .long WEB_MIN + .long GIL_NEJ + .long EDW_NEJ + .long OAK_NEY + .long RUF_PHL + .long PER_PHX + .long FIN_PHX + .long WIL_PRT + .long PRS_SAN + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + .long BEN_UTA + .long SCO_VAN + .long MUR_VAN + +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + .end +;DJT End diff --git a/BACKUP/XCODE100M/SELECT3.ASM b/BACKUP/XCODE100M/SELECT3.ASM new file mode 100644 index 0000000..df14f73 --- /dev/null +++ b/BACKUP/XCODE100M/SELECT3.ASM @@ -0,0 +1,4783 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + +;DJT Start + .asg 153,VS_X + .asg 104,VS_Y +;DJT End + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + +;DJT Start + + .ref col_name_ptrs +;DJT End + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +;DJT Start +; +;name 1 (team 1) +; + move *a10,a2,L ;image addr + +;DJT End + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads,a4 ;Special head? + jrnn #spec1 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec1 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd2 ;BEGINOBJ2 clears OMISC! +#spec1 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec1 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +;name 2 (team 1) +; +;DJT Start +#hd2 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+16,a4 ;Special head? + jrnn #spec2 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec2 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd3 ;BEGINOBJ2 clears OMISC! +#spec2 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec2 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+32,a4 ;Special head? + jrnn #spec3 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec3 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd4 ;BEGINOBJ2 clears OMISC! +#spec3 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec3 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +; name 2 (team 2) +; +;DJT Start +#hd4 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+48,a4 ;Special head? + jrnn #spec4 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec4 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd5 ;BEGINOBJ2 clears OMISC! +#spec4 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec4 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +#hd5 + PULL a9 +;DJT End + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;DJT Start + .if ANIM_VS +;DJT End +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters +;DJT Start + +; .ref VS_R_P,VS_G_P,VS_B_P,VS_Y_P,VS_W_P,VS_V_P + .ref VS_G_P + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSB01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSS01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a9 +;DJT End + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets +;DJT Start + .endif ;ANIM_VS +;DJT End + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100M/SELECT4.ASM b/BACKUP/XCODE100M/SELECT4.ASM new file mode 100644 index 0000000..77a633f --- /dev/null +++ b/BACKUP/XCODE100M/SELECT4.ASM @@ -0,0 +1,6013 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG +;DJT Start + .def HEI_MUG,MAT_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end +;DJT player_heads2 removed to ATTRACT + .def player_heads ;table addr. +;DJT End + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf +;DJT Start +;DJT ref moved down to reference + .ref credits3 +;DJT End + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + +;DJT Start + .if TRIVCON +;DJT End + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 +;DJT Start + .endif ;TRIVCON +;DJT End + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;DJT Start + .if TRIVCON +;DJT End +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total +;DJT Start + .ref timeout4 +;DJT End + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + +;DJT Start + .endif ;TRIVCON +;DJT End + + + .asg 183,PLAQUE_Y + +;DJT Start + + .if TRIVCON + +;DJT End +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +;DJT player_heads2 removed to ATTRACT + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;DJT Start +;00 ATLANTA + .long BLY_ATL,MUT_DEN + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long MUT_DEN,BLY_ATL + .long MUT_DEN,SMI_ATL + .long MUT_DEN,LAE_ATL + .long MUT_DEN,NOR_ATL + + .long SMI_ATL,BLY_ATL + .long SMI_ATL,MUT_DEN + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,BLY_ATL + .long LAE_ATL,MUT_DEN + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,BLY_ATL + .long NOR_ATL,MUT_DEN + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,HAM_COL + .long BRO_BOS,BAR_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long HAM_COL,BRO_BOS ;new + .long HAM_COL,BAR_BOS + .long HAM_COL,RAD_BOS + .long HAM_COL,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,HAM_COL + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,HAM_COL + .long RAD_BOS,BAR_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,HAM_COL + .long FOX_BOS,BAR_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long RCE_CHA,MAS_NEY + .long RCE_CHA,DIV_LAK + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long MAS_NEY,RCE_CHA + .long MAS_NEY,DIV_LAK + .long MAS_NEY,ZID_CHA + .long MAS_NEY,CUR_CHA + + .long DIV_LAK,RCE_CHA + .long DIV_LAK,MAS_NEY + .long DIV_LAK,ZID_CHA + .long DIV_LAK,CUR_CHA + + .long ZID_CHA,RCE_CHA + .long ZID_CHA,MAS_NEY + .long ZID_CHA,DIV_LAK + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,RCE_CHA + .long CUR_CHA,MAS_NEY + .long CUR_CHA,DIV_LAK + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long KID_DAL,HPR_NEY + .long KID_DAL,JAC_DAL + .long KID_DAL,MON_BOS + .long KID_DAL,MAS_DAL + + .long HPR_NEY,KID_DAL + .long HPR_NEY,JAC_DAL + .long HPR_NEY,MON_BOS + .long HPR_NEY,MAS_DAL + + .long JAC_DAL,KID_DAL + .long JAC_DAL,HPR_NEY + .long JAC_DAL,MON_BOS + .long JAC_DAL,MAS_DAL + + .long MON_BOS,KID_DAL + .long MON_BOS,HPR_NEY + .long MON_BOS,JAC_DAL + .long MON_BOS,MAS_DAL + + .long MAS_DAL,KID_DAL + .long MAS_DAL,HPR_NEY + .long MAS_DAL,JAC_DAL + .long MAS_DAL,MON_BOS + +;06 DENVER + .long MCD_DEN,MAR_SAC + .long MCD_DEN,JAC_IND + .long MCD_DEN,ELL_DEN + + .long MAR_SAC,MCD_DEN + .long MAR_SAC,JAC_IND + .long MAR_SAC,ELL_DEN + + .long JAC_IND,MCD_DEN + .long JAC_IND,MAR_SAC + .long JAC_IND,ELL_DEN + + .long ELL_DEN,MCD_DEN + .long ELL_DEN,MAR_SAC + .long ELL_DEN,JAC_IND + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long HIL_DET,RIL_COL + .long HIL_DET,DUM_DET + .long HIL_DET,THR_DET + .long HIL_DET,AUG_ATL + +;; .long RIL_COL,HIL_DET ;new +;; .long RIL_COL,DUM_DET +;; .long RIL_COL,THR_DET +;; .long RIL_COL,AUG_ATL + + .long DUM_DET,HIL_DET +;; .long DUM_DET,RIL_COL + .long DUM_DET,THR_DET + .long DUM_DET,AUG_ATL + + .long THR_DET,HIL_DET +;; .long THR_DET,RIL_COL + .long THR_DET,DUM_DET + .long THR_DET,AUG_ATL + + .long AUG_ATL,HIL_DET +;; .long AUG_ATL,RIL_COL + .long AUG_ATL,DUM_DET + .long AUG_ATL,THR_DET + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPR_GLD,KON_ORL + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long KON_ORL,SPR_GLD + .long KON_ORL,SMI_GLD + .long KON_ORL,MUL_GLD + + .long SMI_GLD,SPR_GLD + .long SMI_GLD,KON_ORL + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,SPR_GLD + .long MUL_GLD,KON_ORL + .long MUL_GLD,SMI_GLD + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLA_HOU,HAR_COL + .long OLA_HOU,DRX_HOU + .long OLA_HOU,WLS_GLD + + .long HAR_COL,OLA_HOU ;new + .long HAR_COL,DRX_HOU + .long HAR_COL,WLS_GLD + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HAR_COL + .long DRX_HOU,WLS_GLD + + .long WLS_GLD,OLA_HOU + .long WLS_GLD,HAR_COL + .long WLS_GLD,DRX_HOU + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MIL_IND,DAM_COL + .long MIL_IND,ROS_DEN + .long MIL_IND,SMI_IND + .long MIL_IND,DAV_IND + + .long DAM_COL,MIL_IND ;new + .long DAM_COL,ROS_DEN + .long DAM_COL,SMI_IND + .long DAM_COL,DAV_IND + + .long ROS_DEN,MIL_IND + .long ROS_DEN,DAM_COL + .long ROS_DEN,SMI_IND + .long ROS_DEN,DAV_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAM_COL + .long SMI_IND,ROS_DEN + .long SMI_IND,DAV_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,DAM_COL + .long DAV_IND,ROS_DEN + .long DAV_IND,SMI_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS + .long VAN_LAK,CEB_LAK + .long VAN_LAK,SCO_VAN + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,SCO_VAN + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long SCO_VAN,VAN_LAK + .long SCO_VAN,CEB_LAK + .long SCO_VAN,CAM_LAK + .long SCO_VAN,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,SCO_VAN + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,SCO_VAN + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,HRD_MIA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAK_MLW,ALL_COL + .long BAK_MLW,LNG_MIN + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + + .long ALL_COL,BAK_MLW ;new + .long ALL_COL,LNG_MIN + .long ALL_COL,ROB_MLW + .long ALL_COL,RES_MLW + + .long LNG_MIN,BAK_MLW + .long LNG_MIN,ALL_COL + .long LNG_MIN,ROB_MLW + .long LNG_MIN,RES_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,ALL_COL + .long ROB_MLW,LNG_MIN + .long ROB_MLW,RES_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ALL_COL + .long RES_MLW,LNG_MIN + .long RES_MLW,ROB_MLW + +;15 MINNESOTTA + .long GUG_MIN,MAR_COL + .long GUG_MIN,GAR_MIN + + .long MAR_COL,GUG_MIN ;new + .long MAR_COL,GAR_MIN + + .long GAR_MIN,GUG_MIN + .long GAR_MIN,MAR_COL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GLL_NEJ,KIT_COL + .long GLL_NEJ,PAC_WAS + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,OBA_NEJ + + .long KIT_COL,GLL_NEJ ;new + .long KIT_COL,PAC_WAS + .long KIT_COL,BRA_NEJ + .long KIT_COL,OBA_NEJ + + .long PAC_WAS,GLL_NEJ + .long PAC_WAS,KIT_COL + .long PAC_WAS,BRA_NEJ + .long PAC_WAS,OBA_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,KIT_COL + .long BRA_NEJ,PAC_WAS + .long BRA_NEJ,OBA_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,KIT_COL + .long OBA_NEJ,PAC_WAS + .long OBA_NEJ,BRA_NEJ + +;17 NEW YORK + .long EWG_NEY,WAL_COL + .long EWG_NEY,JON_CHA + .long EWG_NEY,STA_NEY + .long EWG_NEY,HOU_DET + + .long WAL_COL,EWG_NEY ;new + .long WAL_COL,JON_CHA + .long WAL_COL,STA_NEY + .long WAL_COL,HOU_DET + + .long JON_CHA,EWG_NEY + .long JON_CHA,WAL_COL + .long JON_CHA,STA_NEY + .long JON_CHA,HOU_DET + + .long STA_NEY,EWG_NEY + .long STA_NEY,WAL_COL + .long STA_NEY,JON_CHA + .long STA_NEY,HOU_DET + + .long HOU_DET,EWG_NEY + .long HOU_DET,WAL_COL + .long HOU_DET,JON_CHA + .long HOU_DET,STA_NEY + +;18 ORLANDO + .long HAR_ORL,SKL_GLD + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + + .long SKL_GLD,HAR_ORL + .long SKL_GLD,GRT_ORL + .long SKL_GLD,AND_ORL + .long SKL_GLD,SCO_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,SKL_GLD + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,SKL_GLD + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,SKL_GLD + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + +;19 PHILADELPHIA +;; .long IVE_COL,MIN_COL ;new + .long IVE_COL,STA_PHL + .long IVE_COL,COL_PHL + .long IVE_COL,WEA_PHL + +;; .long MIN_COL,IVE_COL ;new +;; .long MIN_COL,STA_PHL +;; .long MIN_COL,COL_PHL +;; .long MIN_COL,WEA_PHL + + .long STA_PHL,IVE_COL +;; .long STA_PHL,MIN_COL + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + + .long COL_PHL,IVE_COL +;; .long COL_PHL,MIN_COL + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + + .long WEA_PHL,IVE_COL +;; .long WEA_PHL,MIN_COL + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,HOR_HOU + .long JOH_PHX,CAS_HOU + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,HOR_HOU + .long TIS_PHX,CAS_HOU + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,HOR_HOU + .long MAN_PHX,CAS_HOU + + .long HOR_HOU,JOH_PHX + .long HOR_HOU,TIS_PHX + .long HOR_HOU,MAN_PHX + .long HOR_HOU,CAS_HOU + + .long CAS_HOU,JOH_PHX + .long CAS_HOU,TIS_PHX + .long CAS_HOU,MAN_PHX + .long CAS_HOU,HOR_HOU + +;21 PORTLAND + .long ROB_PRT,RID_MIN + .long ROB_PRT,SAB_PRT + .long ROB_PRT,AND_CHA + .long ROB_PRT,CHI_PRT + + .long RID_MIN,ROB_PRT + .long RID_MIN,SAB_PRT + .long RID_MIN,AND_CHA + .long RID_MIN,CHI_PRT + + .long SAB_PRT,ROB_PRT + .long SAB_PRT,RID_MIN + .long SAB_PRT,AND_CHA + .long SAB_PRT,CHI_PRT + + .long AND_CHA,ROB_PRT + .long AND_CHA,RID_MIN + .long AND_CHA,SAB_PRT + .long AND_CHA,CHI_PRT + + .long CHI_PRT,ROB_PRT + .long CHI_PRT,RID_MIN + .long CHI_PRT,SAB_PRT + .long CHI_PRT,AND_CHA + +;22 SACRAMENTO + .long OWE_SAC,RAF_DEN + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,EDN_SAC + + .long RAF_DEN,OWE_SAC + .long RAF_DEN,RIC_SAC + .long RAF_DEN,GRA_SAC + .long RAF_DEN,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,RAF_DEN + .long RIC_SAC,GRA_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RAF_DEN + .long GRA_SAC,RIC_SAC + .long GRA_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RAF_DEN + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,MAX_PHL + .long ELL_SAN,JON_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,MAX_PHL + .long ROB_SAN,JON_SAN + .long ROB_SAN,DEL_SAN + + .long MAX_PHL,ELL_SAN + .long MAX_PHL,ROB_SAN + .long MAX_PHL,JON_SAN + .long MAX_PHL,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,MAX_PHL + .long JON_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,MAX_PHL + .long DEL_SAN,JON_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO + .long ROG_TOR,CAM_COL + .long ROG_TOR,STO_TOR + .long ROG_TOR,JON_DAL + .long ROG_TOR,WIL_MIA + + .long CAM_COL,ROG_TOR ;new + .long CAM_COL,STO_TOR + .long CAM_COL,JON_DAL + .long CAM_COL,WIL_MIA + + .long STO_TOR,ROG_TOR + .long STO_TOR,CAM_COL + .long STO_TOR,JON_DAL + .long STO_TOR,WIL_MIA + + .long JON_DAL,ROG_TOR + .long JON_DAL,CAM_COL + .long JON_DAL,STO_TOR + .long JON_DAL,WIL_MIA + + .long WIL_MIA,ROG_TOR + .long WIL_MIA,CAM_COL + .long WIL_MIA,STO_TOR + .long WIL_MIA,JON_DAL + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,REV_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,REV_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STR_PRT,WEB_WAS + .long STR_PRT,HWD_WAS + .long STR_PRT,MUR_WAS + .long STR_PRT,CHE_WAS + + .long WEB_WAS,STR_PRT + .long WEB_WAS,HWD_WAS + .long WEB_WAS,MUR_WAS + .long WEB_WAS,CHE_WAS + + .long HWD_WAS,STR_PRT + .long HWD_WAS,WEB_WAS + .long HWD_WAS,MUR_WAS + .long HWD_WAS,CHE_WAS + + .long MUR_WAS,STR_PRT + .long MUR_WAS,WEB_WAS + .long MUR_WAS,HWD_WAS + .long MUR_WAS,CHE_WAS + + .long CHE_WAS,STR_PRT + .long CHE_WAS,WEB_WAS + .long CHE_WAS,HWD_WAS + .long CHE_WAS,MUR_WAS +;DJT End + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;DJT Start +ALLEN .equ 1 +CAMBY .equ 2 +DAMPIER .equ 3 +HAMER .equ 4 +HRNGTON .equ 5 +IVERSON .equ 6 +KITTLES .equ 7 +MARBURY .equ 8 +MINOR .equ 9 +RILEY .equ 10 +WALLACE .equ 11 + + .def ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .def MARBURY,MINOR,RILEY,WALLACE + +;00 ATLANTA + .long BLAYLOCK,MUTUMBO + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long MUTUMBO,BLAYLOCK + .long MUTUMBO,SSMITH + .long MUTUMBO,LAETTNER + .long MUTUMBO,KNORMAN + + .long SSMITH,BLAYLOCK + .long SSMITH,MUTUMBO + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,BLAYLOCK + .long LAETTNER,MUTUMBO + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,BLAYLOCK + .long KNORMAN,MUTUMBO + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,HAMER + .long BROWN,BARROS + .long BROWN,RADJA + .long BROWN,FOX + + .long HAMER,BROWN ;new + .long HAMER,BARROS + .long HAMER,RADJA + .long HAMER,FOX + + .long BARROS,BROWN + .long BARROS,HAMER + .long BARROS,RADJA + .long BARROS,FOX + + .long RADJA,BROWN + .long RADJA,HAMER + .long RADJA,BARROS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,HAMER + .long FOX,BARROS + .long FOX,RADJA + +;02 CHARLOTTE + .long RICE,MASON + .long RICE,DIVAC + .long RICE,ZIDEK + .long RICE,CURRY + + .long MASON,RICE + .long MASON,DIVAC + .long MASON,ZIDEK + .long MASON,CURRY + + .long DIVAC,RICE + .long DIVAC,MASON + .long DIVAC,ZIDEK + .long DIVAC,CURRY + + .long ZIDEK,RICE + .long ZIDEK,MASON + .long ZIDEK,DIVAC + .long ZIDEK,CURRY + + .long CURRY,RICE + .long CURRY,MASON + .long CURRY,DIVAC + .long CURRY,ZIDEK + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + +;05 DALLAS + .long KIDD,HARPER_D + .long KIDD,JACK + .long KIDD,MONTROSS + .long KIDD,MASH + + .long HARPER_D,KIDD + .long HARPER_D,JACK + .long HARPER_D,MONTROSS + .long HARPER_D,MASH + + .long JACK,KIDD + .long JACK,HARPER_D + .long JACK,MONTROSS + .long JACK,MASH + + .long MONTROSS,KIDD + .long MONTROSS,HARPER_D + .long MONTROSS,JACK + .long MONTROSS,MASH + + .long MASH,KIDD + .long MASH,HARPER_D + .long MASH,JACK + .long MASH,MONTROSS + +;06 DENVER + .long MCDYESS,MARCIULO + .long MCDYESS,MJACKSON + .long MCDYESS,DELLIS + + .long MARCIULO,MCDYESS + .long MARCIULO,MJACKSON + .long MARCIULO,DELLIS + + .long MJACKSON,MCDYESS + .long MJACKSON,MARCIULO + .long MJACKSON,DELLIS + + .long DELLIS,MCDYESS + .long DELLIS,MARCIULO + .long DELLIS,MJACKSON + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long GHILL,RILEY + .long GHILL,DUMARS + .long GHILL,THORPE + .long GHILL,AUGMON + +;; .long RILEY,GHILL ;new +;; .long RILEY,DUMARS +;; .long RILEY,THORPE +;; .long RILEY,AUGMON + + .long DUMARS,GHILL +;; .long DUMARS,RILEY + .long DUMARS,THORPE + .long DUMARS,AUGMON + + .long THORPE,GHILL +;; .long THORPE,RILEY + .long THORPE,DUMARS + .long THORPE,AUGMON + + .long AUGMON,GHILL +;; .long AUGMON,RILEY + .long AUGMON,DUMARS + .long AUGMON,THORPE + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPREWELL,KONCAK + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long KONCAK,SPREWELL + .long KONCAK,JSMITH + .long KONCAK,MULLIN + + .long JSMITH,SPREWELL + .long JSMITH,KONCAK + .long JSMITH,MULLIN + + .long MULLIN,SPREWELL + .long MULLIN,KONCAK + .long MULLIN,JSMITH + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLAJUWON,HRNGTON + .long OLAJUWON,DREXLER + .long OLAJUWON,WILLIS + + .long HRNGTON,OLAJUWON ;new + .long HRNGTON,DREXLER + .long HRNGTON,WILLIS + + .long DREXLER,OLAJUWON + .long DREXLER,HRNGTON + .long DREXLER,WILLIS + + .long WILLIS,OLAJUWON + .long WILLIS,HRNGTON + .long WILLIS,DREXLER + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MILLER,DAMPIER + .long MILLER,ROSE + .long MILLER,SMITS + .long MILLER,DDAVIS + + .long DAMPIER,MILLER ;new + .long DAMPIER,ROSE + .long DAMPIER,SMITS + .long DAMPIER,DDAVIS + + .long ROSE,MILLER + .long ROSE,DAMPIER + .long ROSE,SMITS + .long ROSE,DDAVIS + + .long SMITS,MILLER + .long SMITS,DAMPIER + .long SMITS,ROSE + .long SMITS,DDAVIS + + .long DDAVIS,MILLER + .long DDAVIS,DAMPIER + .long DDAVIS,ROSE + .long DDAVIS,SMITS + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS + .long VANEXEL,CEBALLOS + .long VANEXEL,SCOTT + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,SCOTT + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long SCOTT,VANEXEL + .long SCOTT,CEBALLOS + .long SCOTT,CAMPBELL + .long SCOTT,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,CEBALLOS + .long CAMPBELL,SCOTT + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,CEBALLOS + .long EJONES,SCOTT + .long EJONES,CAMPBELL + +;13 MIAMI + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,THARDAWAY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAKER,ALLEN + .long BAKER,LANG + .long BAKER,GROBINSO + .long BAKER,RESPERT + + .long ALLEN,BAKER ;new + .long ALLEN,LANG + .long ALLEN,GROBINSO + .long ALLEN,RESPERT + + .long LANG,BAKER + .long LANG,ALLEN + .long LANG,GROBINSO + .long LANG,RESPERT + + .long GROBINSO,BAKER + .long GROBINSO,ALLEN + .long GROBINSO,LANG + .long GROBINSO,RESPERT + + .long RESPERT,BAKER + .long RESPERT,ALLEN + .long RESPERT,LANG + .long RESPERT,GROBINSO + +;15 MINNESOTTA + .long GUGLI2,MARBURY + .long GUGLI2,GARNETT + + .long MARBURY,GUGLI2 ;new + .long MARBURY,GARNETT + + .long GARNETT,GUGLI2 + .long GARNETT,MARBURY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GILL,KITTLES + .long GILL,PACK + .long GILL,BRADLEY + .long GILL,OBANNON + + .long KITTLES,GILL ;new + .long KITTLES,PACK + .long KITTLES,BRADLEY + .long KITTLES,OBANNON + + .long PACK,GILL + .long PACK,KITTLES + .long PACK,BRADLEY + .long PACK,OBANNON + + .long BRADLEY,GILL + .long BRADLEY,KITTLES + .long BRADLEY,PACK + .long BRADLEY,OBANNON + + .long OBANNON,GILL + .long OBANNON,KITTLES + .long OBANNON,PACK + .long OBANNON,BRADLEY + +;17 NEW YORK + .long EWING,WALLACE + .long EWING,JOHNSN_L + .long EWING,STARKS + .long EWING,HOUSTON + + .long WALLACE,EWING ;new + .long WALLACE,JOHNSN_L + .long WALLACE,STARKS + .long WALLACE,HOUSTON + + .long JOHNSN_L,EWING + .long JOHNSN_L,WALLACE + .long JOHNSN_L,STARKS + .long JOHNSN_L,HOUSTON + + .long STARKS,EWING + .long STARKS,WALLACE + .long STARKS,JOHNSN_L + .long STARKS,HOUSTON + + .long HOUSTON,EWING + .long HOUSTON,WALLACE + .long HOUSTON,JOHNSN_L + .long HOUSTON,STARKS + +;18 ORLANDO + .long AHARDAWAY,SEIKALY + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + + .long SEIKALY,AHARDAWAY + .long SEIKALY,GRANT_HC + .long SEIKALY,NANDERSON + .long SEIKALY,DSCOTT + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,SEIKALY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + + .long NANDERSON,AHARDAWAY + .long NANDERSON,SEIKALY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + + .long DSCOTT,AHARDAWAY + .long DSCOTT,SEIKALY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + +;19 PHILADELPHIA +;; .long IVERSON,MINOR ;new + .long IVERSON,STACKHOU + .long IVERSON,COLEMAN + .long IVERSON,WEATHSPN + +;; .long MINOR,IVERSON ;new +;; .long MINOR,STACKHOU +;; .long MINOR,COLEMAN +;; .long MINOR,WEATHSPN + + .long STACKHOU,IVERSON +;; .long STACKHOU,MINOR + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + + .long COLEMAN,IVERSON +;; .long COLEMAN,MINOR + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + + .long WEATHSPN,IVERSON +;; .long WEATHSPN,MINOR + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,HORRY + .long KJOHNSON,CASSELL + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,HORRY + .long TISDALE,CASSELL + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,HORRY + .long MANNING,CASSELL + + .long HORRY,KJOHNSON + .long HORRY,TISDALE + .long HORRY,MANNING + .long HORRY,CASSELL + + .long CASSELL,KJOHNSON + .long CASSELL,TISDALE + .long CASSELL,MANNING + .long CASSELL,HORRY + +;21 PORTLAND + .long CROBINSON,RIDER + .long CROBINSON,SABONIS + .long CROBINSON,KANDERSON + .long CROBINSON,CHILDRES + + .long RIDER,CROBINSON + .long RIDER,SABONIS + .long RIDER,KANDERSON + .long RIDER,CHILDRES + + .long SABONIS,CROBINSON + .long SABONIS,RIDER + .long SABONIS,KANDERSON + .long SABONIS,CHILDRES + + .long KANDERSON,CROBINSON + .long KANDERSON,RIDER + .long KANDERSON,SABONIS + .long KANDERSON,CHILDRES + + .long CHILDRES,CROBINSON + .long CHILDRES,RIDER + .long CHILDRES,SABONIS + .long CHILDRES,KANDERSON + +;22 SACRAMENTO + .long BOWENS,ABDULRAU + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,EDNEY + + .long ABDULRAU,BOWENS + .long ABDULRAU,RICH + .long ABDULRAU,BGRANT + .long ABDULRAU,EDNEY + + .long RICH,BOWENS + .long RICH,ABDULRAU + .long RICH,BGRANT + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,ABDULRAU + .long BGRANT,RICH + .long BGRANT,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,ABDULRAU + .long EDNEY,RICH + .long EDNEY,BGRANT + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,VMAXWELL + .long ELLIOT2,AJOHNSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,VMAXWELL + .long DROBINSON,AJOHNSON + .long DROBINSON,DELNEGRO + + .long VMAXWELL,ELLIOT2 + .long VMAXWELL,DROBINSON + .long VMAXWELL,AJOHNSON + .long VMAXWELL,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,VMAXWELL + .long AJOHNSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,VMAXWELL + .long DELNEGRO,AJOHNSON + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + +;25 TORONTO + .long CROGERS,CAMBY + .long CROGERS,STOUDAMI + .long CROGERS,PJONES + .long CROGERS,WWILLIAM + + .long CAMBY,CROGERS ;new + .long CAMBY,STOUDAMI + .long CAMBY,PJONES + .long CAMBY,WWILLIAM + + .long STOUDAMI,CROGERS + .long STOUDAMI,CAMBY + .long STOUDAMI,PJONES + .long STOUDAMI,WWILLIAM + + .long PJONES,CROGERS + .long PJONES,CAMBY + .long PJONES,STOUDAMI + .long PJONES,WWILLIAM + + .long WWILLIAM,CROGERS + .long WWILLIAM,CAMBY + .long WWILLIAM,STOUDAMI + .long WWILLIAM,PJONES + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,BREEVES + + .long EDWARDS,ANTHONY + .long EDWARDS,BREEVES + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STRICKLA,WEBBER + .long STRICKLA,JHOWARD + .long STRICKLA,MURESAN + .long STRICKLA,CHEANEY + + .long WEBBER,STRICKLA + .long WEBBER,JHOWARD + .long WEBBER,MURESAN + .long WEBBER,CHEANEY + + .long JHOWARD,STRICKLA + .long JHOWARD,WEBBER + .long JHOWARD,MURESAN + .long JHOWARD,CHEANEY + + .long MURESAN,STRICKLA + .long MURESAN,WEBBER + .long MURESAN,JHOWARD + .long MURESAN,CHEANEY + + .long CHEANEY,STRICKLA + .long CHEANEY,WEBBER + .long CHEANEY,JHOWARD + .long CHEANEY,MURESAN +;DJT End + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end diff --git a/BACKUP/XCODE100M/SOUNDS.ASM b/BACKUP/XCODE100M/SOUNDS.ASM new file mode 100644 index 0000000..a63f0dc --- /dev/null +++ b/BACKUP/XCODE100M/SOUNDS.ASM @@ -0,0 +1,1287 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 +;DJT Start + SX homeaway_cur,>0101,20, >27c + SX bx_slide_snd,>0001,28, >1f6 + + SX diag_cursor, >0501,20, >27c + SX diag_select, >0501,20, >280 + SX update_adj, >0501,18, >278 + SX adj_menu_ext,>0501,20, >280 +; SX adj_menu_ent,>0501,27, >280 + SX error_found, >0501,20, >260 ;367 ? + +;DJT End + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd +;DJT Start + SX warn_snd, >1504,25, >283 ;1fd + SX tfire_tcksnd,>1504,35, >176 ;27f + SX tfire_outsnd,>1504,70, >400 +;DJT End + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc +;DJT Start + SX netmush_snd, >3503,80, >ce + SX aly_pass_snd,>1903,104,>2e2 + SX aly_rcv_snd, >200C,20, >9b +;DJT End + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white +;DJT Start + SX hs_shot_snd, >1803,50, >b92 ;take a hotspot shot +; SX hs_shot_snd, >1803,50, >b92 ;alternate? for hot hotspot +;DJT End + +;dunk sounds +;DJT Start + SX helicptr_snd,>1603,90, >a6 +;DJT End + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +;DJT Start + .if 0 ;Not called! +;DJT End +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 +;DJT Start + clr a14 + move a14,@doing_dcs_reset + +;DJT End + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + +;DJT Start +;DJT moved doing_dcs_reset up a few lines +;DJT End + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + +;DJT Start + JSRP QSNDRST + DIE +;DJT End + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 +;DJT Start +; move @doing_dcs_reset,a0 ;Still in a reset? +; jrnz sendx ; br=yes, don't do anything yet +;DJT End + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + +;DJT Start + .if 0 ;not called! +;DJT End + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end diff --git a/BACKUP/XCODE100M/SPEECH.ASM b/BACKUP/XCODE100M/SPEECH.ASM new file mode 100644 index 0000000..ae3fc4b --- /dev/null +++ b/BACKUP/XCODE100M/SPEECH.ASM @@ -0,0 +1,4704 @@ +;DJT Start whole file changed!! +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 +;DJT Start + SX max_hngtm_sp,>200D,93, >b8f +; SX nba_hngtm_sp,>200D,99, >b02 +;DJT End + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 +;DJT Start + SX with_sp, >100D,16, >aef + SX leadng_by_sp,>100D,56, >84e + SX leads_by_sp, >100D,51, >84b + SX lead_by_sp, >100D,41, >849 + SX out_front_sp,>100D,48, >850 + SX by_sp, >100D,18, >851 +;DJT End + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + +;DJT Start + SX longway_sp, >100D,73, >86e + SX downby_sp, >100D,36, >845 + SX behind_by_sp,>100D,49, >853 + SX catchg_up_sp,>100D,41, >873 + + SX tiegm_sp, >100D,44, >864 + SX tiethegm_sp, >100D,51, >869 + SX tied_at_sp, >100D,69, >866 +;DJT End + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 +;DJT Start + SX tp_circle_sp,>100D,63, >b1c + SX fm_3pline_sp,>100D,80, >7e5 +;DJT End + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb +;DJT Start + SX lfts_wild_sp,>100D,87, >9bb +;DJT End + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b +;DJT Start + SX the_scoop_sp,>120D,51, >b3c +;DJT End + SX lev_tmate_sp,>120D,83, >b3d +;DJT Start + SX is_legal_sp ,>0F0D,65, >b21 +;DJT End + + SX tm_onfire_sp,>140D,76, >b3e +;DJT Start + SX got_hspot_sp,>140D,76, >b40 +;DJT End + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 +;DJT Start + SX look_out_sp, >100D,41, >a6f +;DJT End + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 +;DJT Start + SX what_was_sp, >100D,66, >b2b +;DJT End + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 +;DJT Start + SX lch_atbkt_sp,>110D,100,>b03 +;DJT End + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 +;DJT Start + SX luky_bskt_sp,>100D,82, >948 +;DJT End + +;DJT Start + SX kakaboom_sp, >100D,69, >91b + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,34, >91a +;DJT End + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 +;DJT Start + SX throws_it_sp,>100D,66, >963 + SX pounds_it_sp,>100D,62, >964 + SX incredble_sp,>100D,49, >970 + SX incrd_sht_sp,>100D,75, >90e +; SX supr_dnk_sp, >100D,61, >971 ;** +; SX mnstr_jam_sp,>100D,70, >971 + SX outstndng_sp,>100D,67, >aaa +;DJT End + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de +;DJT Start + SX scores2_sp, >100D,52, >7df +;DJT End + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c +;DJT Start + SX and_drops_sp,>100D,56, >943 +;DJT End + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + +;DJT Start + SX chalk_it_sp, >100D,38, >b48 +;DJT End + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 +;DJT Start + SX swish2_sp, >100D,43, >b29 +;DJT End + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 +;DJT Start + SX greatshot_sp,>100D,47, >90f +;DJT End + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is +;DJT Start + SX debacle_sp, >100D,66, >a92 + SX its_hstry_sp,>100D,47, >85f + SX strike_up_sp,>100D,122,>b4d +;DJT End + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 +;DJT Start + SX just_secs_sp,>100D,84, >ab3 +;DJT End + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a +;DJT Start + SX downcrt2_sp, >070D,39, >a1e + SX lngpss_dc_sp,>070D,84, >a0b +;DJT End + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f +;DJT Start + SX tks_rbnd3_sp,>100D,96, >a5b +;DJT End + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c +;DJT look_out_sp line moved + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 +;DJT Start +; SX shvd_asde_sp,>090D,67, >aca +;DJT End + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +;DJT Start +welcome_sc LWLW midway_sp,67,max_hngtm_sp,-1 +;welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;DJT End +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,83,1304 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER, christian + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,57,2912 ;HAMER, steve + .word >100D,66,1324 ;BARROS, dana + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,65,1348 ;RICE, glen ( CHARLOTTE ) + .word >100D,80,1644 ;MASON, anthony + .word >100D,78,1544 ;DIVAC, vlade + .word >100D,70,1352 ;ZIDEK, george + .word >100D,58,1356 ;CURRY, del + + .word >100D,72,1360 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, toni + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,68,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,68,1404 ;KIDD, jason ( DALLAS ) + .word >100D,71,1648 ;HARPER, derek + .word >100D,84,1400 ;JACKSON, jim + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,88,1408 ;MASHBURN, jamal + + .word >100D,96,1428 ;McDYESS, antonio ( DENVER ) + .word >100D,100,1752 ;MARCIULIONIS,sarunas + .word >100D,78,1516 ;JACKSON, mark + .word >100D,64,1436 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,63,1444 ;HILL, grant ( DETROIT ) +;; .word >100D,54,2954 ;RILEY, ron + .word >100D,74,1440 ;DUMARS, joe + .word >100D,56,1452 ;THORPE, otis + .word >100D,77,1300 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,76,1464 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,72,1676 ;KONCAK, jon + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,118,1480 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,66,2909 ;HARRINGTON, othella + .word >100D,80,1484 ;DREXLER, clyde + .word >100D,61,1568 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,85,1500 ;MILLER, reggie ( INDIANA ) + .word >100D,66,2936 ;DAMPIER, erick + .word >100D,70,1432 ;ROSE, jalen + .word >100D,71,1508 ;SMITS, rik + .word >100D,71,1504 ;DAVIS, dale + + .word >100D,45,1520 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDSON, pooh + .word >100D,72,1536 ;BARRY, brent + + .word >100D,76,1540 ;VAN EXEL, nick ( LAKERS ) + .word >100D,83,1548 ;CEBALLOS, cedric + .word >100D,56,1958 ;SCOTT, byron + .word >100D,62,1552 ;CAMPBELL, elden + .word >100D,68,1556 ;JONES, eddie + + .word >100D,97,1560 ;MOURNING, alonzo ( MIAMI ) + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,70,1580 ;BAKER, vin ( MILWAUKEE ) + .word >100D,60,2930 ;ALLEN, ray + .word >100D,72,1955 ;LANG, andrew + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,77,1588 ;RESPERT, shawn + + .word >100D,73,1612 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,75,2951 ;MARBURY, stephon + .word >100D,72,1616 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,52,2903 ;KITTLES, kerry + .word >100D,70,1872 ;PACK, robert + .word >100D,81,1624 ;BRADLEY, shawn + .word >100D,61,1632 ;O'BANNON, ed + + .word >100D,82,1640 ;EWING, patrick ( NEW YORK ) + .word >100D,65,2906 ;WALLACE, john + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,70,1656 ;STARKS, john + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,84,1468 ;SEIKALY, rony + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + + .word >100D,72,2942 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,56,2915 ;MINOR, ryan + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,113,1688 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE, wayman + .word >100D,66,1708 ;MANNING, danny + .word >100D,80,1488 ;HORRY, robert + .word >100D,70,1492 ;CASSELL, sam + + .word >100D,94,1724 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,94,1600 ;RIDER, isaiah + .word >100D,93,1728 ;SABONIS, arvydas + .word >100D,64,1620 ;ANDERSON, kenny + .word >100D,76,1736 ;CHILDRESS, randolph + + .word >100D,74,1564 ;OWENS, billy ( SACRAMENTO ) + .word >100D,89,1420 ;ABDUL-RAUF, mahmoud + .word >100D,82,1744 ;RICHMOND, mitch + .word >100D,85,1748 ;GRANT, brian + .word >100D,50,1756 ;EDNEY, tyus + + .word >100D,69,1760 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,92,1764 ;ROBINSON, david + .word >100D,90,1696 ;MAXWELL, vernon + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,82,1776 ;DEL NEGRO, vinny + + .word >100D,64,1780 ;KEMP, shawn ( SEATTLE ) + .word >100D,74,1784 ;PAYTON, gary + .word >100D,57,1788 ;SCHREMPF, detlef + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD, sherell + + .word >100D,59,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,72,2927 ;CAMBY, marcus + .word >100D,92,1804 ;STOUDAMIRE, damon + .word >100D,74,1412 ;JONES, popeye + .word >100D,78,1740 ;WILLIAMS, walt + + .word >100D,79,1820 ;STOCKTON, john ( UTAH ) + .word >100D,68,1824 ;MALONE, karl + .word >100D,70,1828 ;HORNACEK, jeff + .word >100D,64,1836 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,78,1840 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,66,1844 ;EDWARDS, blue + .word >100D,74,1852 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,77,1720 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,53,1864 ;WEBBER, chris + .word >100D,74,1860 ;HOWARD, juwan + .word >100D,92,1876 ;MURESAN, gheorge + .word >100D,69,1868 ;CHEANEY, calbert + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,54,1307 ;to BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,43,1311 ;to SMITH, steve + .word >100D,43,1607 ;to LAETNER, christian + .word >100D,43,1319 ;to NORMAN, ken + + .word >100D,42,1323 ;to BROWN, dee ( BOSTON ) + .word >100D,35,2914 ;to HAMER, steve + .word >100D,40,1327 ;to BARROS, dana + .word >100D,44,1335 ;to RADJA, dino + .word >100D,43,1339 ;to FOX, rick + + .word >100D,42,1351 ;to RICE, glen ( CHARLOTTE ) + .word >100D,60,1647 ;to MASON, anthony + .word >100D,49,1547 ;to DIVAC, vlade + .word >100D,41,1355 ;to ZIDEK, george + .word >100D,36,1359 ;to CURRY, del + + .word >100D,41,1363 ;to PIPPEN, scottie ( CHICAGO ) + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,47,1371 ;to KUKOC, toni + .word >100D,56,1375 ;to LONGLEY, luke + .word >100D,44,1379 ;to KERR, steve + + .word >100D,42,1383 ;to HILL, tyrone ( CLEVELAND ) + .word >100D,51,1387 ;to MILLS, chris + .word >100D,44,1391 ;to PHILLS, bobby + .word >100D,39,1395 ;to BRANDON, terrell + .word >100D,38,1399 ;to FERRY, danny + + .word >100D,41,1407 ;to KIDD, jason ( DALLAS ) + .word >100D,46,1651 ;to HARPER, derek + .word >100D,57,1403 ;to JACKSON, jim + .word >100D,62,1331 ;to MONTROSS, eric + .word >100D,59,1411 ;to MASHBURN, jamal + + .word >100D,58,1431 ;to McDYESS, antonio ( DENVER ) + .word >100D,58,1755 ;to MARCIULIONIS,sarunas + .word >100D,57,1519 ;to JACKSON, mark + .word >100D,38,1439 ;to ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,42,1447 ;to HILL, grant ( DETROIT ) +;; .word >100D,41,2956 ;to RILEY, ron + .word >100D,61,1443 ;to DUMARS, joe + .word >100D,34,1455 ;to THORPE, otis + .word >100D,44,1303 ;to AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,52,1467 ;to SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,46,1679 ;to KONCAK, jon + .word >100D,43,1475 ;to SMITH, joe + .word >100D,52,1479 ;to MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,64,1483 ;to OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,45,2911 ;to HARRINGTON, othella + .word >100D,51,1487 ;to DREXLER, clyde + .word >100D,40,1571 ;to WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1503 ;to MILLER, reggie ( INDIANA ) + .word >100D,48,2938 ;to DAMPIER, erick + .word >100D,38,1435 ;to ROSE, jalen + .word >100D,55,1511 ;to SMITS, rik + .word >100D,43,1507 ;to DAVIS, dale + + .word >100D,36,1523 ;to VAUGHT, loy ( CLIPPERS ) + .word >100D,43,1527 ;to ROGERS, rodney + .word >100D,39,1531 ;to MURRAY, lamond + .word >100D,54,1535 ;to RICHARDSON, pooh + .word >100D,43,1539 ;to BARRY, brent + + .word >100D,54,1543 ;to VAN EXEL, nick ( LAKERS ) + .word >100D,54,1551 ;to CEBALLOS, cedric + .word >100D,40,1960 ;to SCOTT, byron + .word >100D,46,1555 ;to CAMPBELL, elden + .word >100D,49,1559 ;to JONES, eddie + + .word >100D,44,1563 ;to MOURNING, alonzo ( MIAMI ) + .word >100D,56,1463 ;to HARDAWAY, tim + .word >100D,58,1575 ;to DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,49,1583 ;to BAKER, vin ( MILWAUKEE ) + .word >100D,44,2932 ;to ALLEN, ray + .word >100D,45,1957 ;to LANG, andrew + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,51,1591 ;to RESPERT, shawn + + .word >100D,52,1615 ;to GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,40,2953 ;to MARBURY, stephon + .word >100D,50,1619 ;to GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,40,1343 ;to GILL, kendall ( NEW JERSEY ) + .word >100D,41,2905 ;to KITTLES, kerry + .word >100D,41,1875 ;to PACK, robert + .word >100D,53,1627 ;to BRADLEY, shawn + .word >100D,45,1635 ;to O'BANNON, ed + + .word >100D,43,1643 ;to EWING, patrick ( NEW YORK ) + .word >100D,39,2908 ;to WALLACE, john + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,45,1659 ;to STARKS, john + .word >100D,54,1459 ;to HOUSTON, allan + + .word >100D,56,1663 ;to HARDAWAY, anfernee ( ORLANDO ) + .word >100D,55,1471 ;to SEIKALY, rony + .word >100D,43,1667 ;to GRANT, horace + .word >100D,43,1671 ;to ANDERSON, nick + .word >100D,45,1675 ;to SCOTT, dennis + + .word >100D,53,2944 ;to IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,38,2917 ;to MINOR, ryan + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,46,1687 ;to COLEMAN, derrick + .word >100D,75,1691 ;to WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1703 ;to JOHNSON, kevin ( PHOENIX ) + .word >100D,61,1707 ;to TISDALE, wayman + .word >100D,38,1711 ;to MANNING, danny + .word >100D,51,1491 ;to HORRY, robert + .word >100D,48,1495 ;to CASSELL, sam + + .word >100D,70,1727 ;to ROBINSON, cliff ( PORTLAND ) + .word >100D,53,1603 ;to RIDER, isaiah + .word >100D,49,1731 ;to SABONIS, arvydas + .word >100D,43,1623 ;to ANDERSON, kenny + .word >100D,48,1739 ;to CHILDRESS, randolph + + .word >100D,51,1567 ;to OWENS, billy ( SACRAMENTO ) + .word >100D,61,1423 ;to ABDUL-RAUF, mahmoud + .word >100D,51,1747 ;to RICHMOND, mitch + .word >100D,43,1751 ;to GRANT, brian + .word >100D,36,1759 ;to EDNEY, tyus + + .word >100D,41,1763 ;to ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,65,1699 ;to MAXWELL, vernon + .word >100D,48,1771 ;to JOHNSON, avery + .word >100D,54,1779 ;to DEL NEGRO, vinny + + .word >100D,37,1783 ;to KEMP, shawn ( SEATTLE ) + .word >100D,43,1787 ;to PAYTON, gary + .word >100D,41,1791 ;to SCHREMPF, detlef + .word >100D,44,1795 ;to HAWKINS, hersey + .word >100D,40,1799 ;to FORD, sherell + + .word >100D,43,1803 ;to ROGERS, carlos ( TORONTO ) + .word >100D,45,2929 ;to CAMBY, marcus + .word >100D,63,1807 ;to STOUDAMIRE, damon + .word >100D,49,1415 ;to JONES, popeye + .word >100D,45,1743 ;to WILLIAMS, walt + + .word >100D,53,1823 ;to STOCKTON, john ( UTAH ) + .word >100D,51,1827 ;to MALONE, karl + .word >100D,49,1831 ;to HORNACEK, jeff + .word >100D,39,1839 ;to MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,40,1843 ;to ANTHONY, greg ( VANCOUVER ) + .word >100D,38,1847 ;to EDWARDS, blue + .word >100D,48,1855 ;to REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,51,1723 ;to STRICKLAND, rod ( WASHINGTON ) + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,43,1863 ;to HOWARD, juwan + .word >100D,63,1879 ;to MURESAN, gheorge + .word >100D,43,1871 ;to CHEANEY, calbert + + +*********** +*********** +name_speech ;(last name only, excited) + + .word >100D,44,1305 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1309 ;SMITH, steve + .word >100D,33,1605 ;LAETNER, christian + .word >100D,34,1317 ;NORMAN, ken + + .word >100D,36,1321 ;BROWN, dee ( BOSTON ) + .word >100D,26,2913 ;HAMER, steve + .word >100D,31,1325 ;BARROS, dana + .word >100D,35,1333 ;RADJA, dino + .word >100D,33,1337 ;FOX, rick + + .word >100D,33,1349 ;RICE, glen ( CHARLOTTE ) + .word >100D,51,1645 ;MASON, anthony + .word >100D,39,1545 ;DIVAC, vlade + .word >100D,32,1353 ;ZIDEK, george + .word >100D,27,1357 ;CURRY, del + + .word >100D,31,1361 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1369 ;KUKOC, toni + .word >100D,47,1373 ;LONGLEY, luke + .word >100D,35,1377 ;KERR, steve + + .word >100D,33,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,42,1385 ;MILLS, chris + .word >100D,35,1389 ;PHILLS, bobby + .word >100D,30,1393 ;BRANDON, terrell + .word >100D,28,1397 ;FERRY, danny + + .word >100D,32,1405 ;KIDD, jason ( DALLAS ) + .word >100D,37,1649 ;HARPER, derek + .word >100D,48,1401 ;JACKSON, jim + .word >100D,53,1329 ;MONTROSS, eric + .word >100D,50,1409 ;MASHBURN, jamal + + .word >100D,49,1429 ;McDYESS, antonio ( DENVER ) + .word >100D,49,1753 ;MARCIULIONIS,sarunas + .word >100D,48,1517 ;JACKSON, mark + .word >100D,28,1437 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,33,1445 ;HILL, grant ( DETROIT ) +;; .word >100D,31,2955 ;RILEY, ron + .word >100D,46,1441 ;DUMARS, joe + .word >100D,25,1453 ;THORPE, otis + .word >100D,34,1301 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,43,1465 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,37,1677 ;KONCAK, jon + .word >100D,33,1473 ;SMITH, joe + .word >100D,43,1477 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,55,1482 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,36,2910 ;HARRINGTON, othella + .word >100D,41,1485 ;DREXLER, clyde + .word >100D,31,1569 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,39,1501 ;MILLER, reggie ( INDIANA ) + .word >100D,39,2937 ;DAMPIER, erick + .word >100D,29,1433 ;ROSE, jalen + .word >100D,46,1509 ;SMITS, rik + .word >100D,34,1505 ;DAVIS, dale + + .word >100D,27,1521 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,34,1525 ;ROGERS, rodney + .word >100D,30,1529 ;MURRAY, lamond + .word >100D,44,1533 ;RICHARDSON, pooh + .word >100D,33,1537 ;BARRY, brent + + .word >100D,44,1541 ;VAN EXEL, nick ( LAKERS ) + .word >100D,44,1549 ;CEBALLOS, cedric + .word >100D,32,1959 ;SCOTT, byron + .word >100D,37,1553 ;CAMPBELL, elden + .word >100D,40,1557 ;JONES, eddie + + .word >100D,35,1561 ;MOURNING, alonzo ( MIAMI ) + .word >100D,47,1461 ;HARDAWAY, tim + .word >100D,49,1573 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,39,1581 ;BAKER, vin ( MILWAUKEE ) + .word >100D,35,2931 ;ALLEN, ray + .word >100D,36,1956 ;LANG, andrew + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,41,1589 ;RESPERT, shawn + + .word >100D,43,1613 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,31,2952 ;MARBURY, stephon + .word >100D,41,1617 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,31,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,32,2904 ;KITTLES, kerry + .word >100D,32,1873 ;PACK, robert + .word >100D,43,1625 ;BRADLEY, shawn + .word >100D,36,1633 ;O'BANNON, ed + + .word >100D,42,1641 ;EWING, patrick ( NEW YORK ) + .word >100D,30,2907 ;WALLACE, john + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,36,1657 ;STARKS, john + .word >100D,44,1457 ;HOUSTON, allan + + .word >100D,47,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,46,1469 ;SEIKALY, rony + .word >100D,34,1665 ;GRANT, horace + .word >100D,33,1669 ;ANDERSON, nick + .word >100D,36,1673 ;SCOTT, dennis + + .word >100D,44,2943 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,28,2916 ;MINOR, ryan + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,37,1685 ;COLEMAN, derrick + .word >100D,66,1689 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,38,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,51,1705 ;TISDALE, wayman + .word >100D,28,1709 ;MANNING, danny + .word >100D,42,1489 ;HORRY, robert + .word >100D,38,1493 ;CASSELL, sam + + .word >100D,61,1725 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,43,1601 ;RIDER, isaiah + .word >100D,40,1729 ;SABONIS, arvydas + .word >100D,33,1621 ;ANDERSON, kenny + .word >100D,38,1737 ;CHILDRESS, randolph + + .word >100D,41,1565 ;OWENS, billy ( SACRAMENTO ) + .word >100D,51,1421 ;ABDUL-RAUF, mahmoud + .word >100D,41,1745 ;RICHMOND, mitch + .word >100D,34,1749 ;GRANT, brian + .word >100D,27,1757 ;EDNEY, tyus + + .word >100D,32,1761 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,61,1765 ;ROBINSON, david + .word >100D,56,1697 ;MAXWELL, vernon + .word >100D,38,1769 ;JOHNSON, avery + .word >100D,45,1777 ;DEL NEGRO, vinny + + .word >100D,28,1781 ;KEMP, shawn ( SEATTLE ) + .word >100D,33,1785 ;PAYTON, gary + .word >100D,32,1789 ;SCHREMPF, detlef + .word >100D,35,1793 ;HAWKINS, hersey + .word >100D,31,1797 ;FORD, sherell + + .word >100D,34,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,36,2928 ;CAMBY, marcus + .word >100D,54,1805 ;STOUDAMIRE, damon + .word >100D,40,1413 ;JONES, popeye + .word >100D,36,1741 ;WILLIAMS, walt + + .word >100D,44,1821 ;STOCKTON, john ( UTAH ) + .word >100D,42,1825 ;MALONE, karl + .word >100D,40,1829 ;HORNACEK, jeff + .word >100D,30,1837 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,31,1841 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,39,1853 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,42,1721 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,18,1865 ;WEBBER, chris + .word >100D,34,1861 ;HOWARD, juwan + .word >100D,54,1877 ;MURESAN, gheorge + .word >100D,34,1869 ;CHEANEY, calbert + + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... +*********** +*********** +special_name_speech + .word >100D,32,2290 ;0 JEFF JOHNSON + .word >100D,31,2276 ;1 SAL DIVITA + .word >100D,32,2272 ;2 TURMELL + .word >100D,28,2286 ;3 THOMPSON + .word >100D,22,2278 ;4 GEER + .word >100D,33,2288 ;5 CARLTON + .word >100D,28,2280 ;6 HEDRICK + .word >100D,23,2274 ;7 JOHN HEY + .word >100D,43,2266 ;8 AIR MORRIS + .word >100D,30,2268 ;9 STEVE BARDO + .word >100D,35,2270 ;10 MINIFEE + .word >100D,41,2282 ;11 MARTINEZ + .word >100D,36,2284 ;12 PESINA + .word >0105,36,2250 ;13 LIPTAK + .word >0105,46,1910 ;14 EDDIE + .word >0105,26,1920 ;15 MIKE V. + .word >0105,26,1888 ;16 JAMIE R. + .word >0105,26,1888 ;17 NICK E. + .word >0105,26,1888 ;18 J. ROOT + .word >0105,26,1888 ;19 MEDNICK + .word >0105,26,1888 ;20 DAN R. + .word >0105,26,1888 ;21 PAT F. + .word >0105,26,1888 ;22 ED BOON + .word >0105,26,1888 ;23 J. TOBIAS + .word >0105,26,1888 ;24 OURSLER + .word >0105,26,1888 ;25 JASON S. + .word >0105,26,1888 ;26 QUINN + .word >0105,26,1888 ;27 M. PERRY + .word >0105,26,1888 ;28 N. FUNK + .word >0105,26,1888 ;29 MDOC + .word >0105,26,1888 ;30 BUD + .word >0105,54,1877 ;31 MARIUS + .word >0105,26,1888 ;32 MUNDAY + .word >0105,26,1888 ;33 NORTH + .word >0105,26,1888 ;34 AMRICH + .word >0105,26,1888 ;35 JIGGETS + .word >0105,26,1888 ;36 ZIRIN + .word >0105,26,1888 ;37 HEITH BETTLEMAN + .word >0105,30,1928 ;38 MATT BETTLEMAN + .word >0105,36,2250 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,31,1361 ;PIPPEN, scottie + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,33,1349 ;RICE, glen + .word >100D,32,1405 ;KIDD, jason + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1445 ;HILL, grant + .word >100D,55,1482 ;OLAJUWAN, hakeem + .word >100D,39,1501 ;MILLER, reggie + .word >100D,46,1509 ;SMITS, rik + .word >100D,35,1561 ;MOURNING, alonzo + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,42,1641 ;EWING, patrick + .word >100D,36,1657 ;STARKS, john + .word >100D,47,1661 ;HARDAWAY, anfernee + .word >100D,34,1665 ;GRANT, horace + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,61,1725 ;ROBINSON, cliff + .word >100D,61,1765 ;ROBINSON, david + .word >100D,32,1761 ;ELLIOTT, sean + .word >100D,28,1781 ;KEMP, shawn + .word >100D,42,1825 ;MALONE, karl + .word >100D,18,1865 ;WEBBER, chris + .word >100D,54,1877 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,46,1417 ;McCLOUD, george + .word >100D,42,1449 ;MILLS, terry + .word >100D,33,1497 ;SMITH, kenny + .word >100D,43,1513 ;McKEE, derek + .word >100D,36,1962 ;CHAPMAN, rex + .word >100D,34,1593 ;BENJAMIN, benoit + .word >100D,29,1597 ;DOUGLAS, sherman + .word >100D,31,1965 ;WEBB, spud + .word >100D,30,1629 ;GILLIAM, armon + .word >100D,29,1637 ;EDWARDS, kevin + .word >100D,36,1653 ;OAKLEY, charles + .word >100D,31,1968 ;RUFFIN, trevor + .word >100D,36,1713 ;PERSON, wesley + .word >100D,42,1717 ;FINLEY, michael + .word >100D,36,1733 ;WILLIAMS, buck + .word >100D,36,1773 ;PERSON, chuck + .word >100D,36,1953 ;ROBERTSON, alvin + .word >100D,39,1813 ;MILLER, oliver + .word >100D,30,1817 ;MURRAY, tracy + .word >100D,38,1833 ;BENOIT, david + .word >100D,36,1959 ;SCOTT, byron + .word >100D,37,1857 ;MURDOCK, eric + + +*********** +*********** +special_pass_speech + .word >100D,41,2291 ;0 JEFF JOHNSON + .word >100D,41,2277 ;1 SAL DIVITA + .word >100D,41,2273 ;2 TURMELL + .word >100D,38,2287 ;3 THOMPSON + .word >100D,31,2279 ;4 GEER + .word >100D,42,2289 ;5 CARLTON + .word >100D,37,2281 ;6 HEDRICK + .word >100D,32,2275 ;7 JOHN HEY + .word >100D,52,2267 ;8 AIR MORRIS + .word >100D,39,2269 ;9 STEVE BARDO + .word >100D,44,2271 ;10 MINIFEE + .word >100D,51,2283 ;11 MARTINEZ + .word >100D,45,2285 ;12 PESINA + .word >0105,45,2251 ;13 LIPTAK + .word >0105,55,1911 ;14 EDDIE + .word >0105,35,1921 ;15 MIKE V. + .word >0105,35,1889 ;16 JAMIE R. + .word >0105,35,1889 ;17 NICK E. + .word >0105,35,1889 ;18 J. ROOT + .word >0105,35,1889 ;19 MEDNICK + .word >0105,35,1889 ;20 DAN R. + .word >0105,35,1889 ;21 PAT F. + .word >0105,35,1889 ;22 ED BOON + .word >0105,35,1889 ;23 J. TOBIAS + .word >0105,35,1889 ;24 OURSLER + .word >0105,35,1889 ;25 JASON S. + .word >0105,35,1889 ;26 QUINN + .word >0105,35,1889 ;27 M. PERRY + .word >0105,35,1889 ;28 N. FUNK + .word >0105,35,1889 ;29 MDOC + .word >0105,35,1889 ;30 BUD + .word >0105,63,1879 ;31 MARIUS + .word >0105,35,1889 ;32 MUNDAY + .word >0105,35,1889 ;33 NORTH + .word >0105,35,1889 ;34 AMRICH + .word >0105,35,1889 ;35 JIGGETS + .word >0105,35,1889 ;36 ZIRIN + .word >0105,35,1889 ;37 HEITH BETTLEMAN + .word >0105,39,1929 ;38 MATT BETTLEMAN + .word >0105,45,2251 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,41,1363 ;to PIPPEN, scottie + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,42,1351 ;to RICE, glen + .word >100D,41,1407 ;to KIDD, jason + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,42,1447 ;to HILL, grant + .word >100D,64,1483 ;to OLAJUWAN, hakeem + .word >100D,48,1503 ;to MILLER, reggie + .word >100D,55,1511 ;to SMITS, rik + .word >100D,44,1563 ;to MOURNING, alonzo + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,43,1643 ;to EWING, patrick + .word >100D,45,1659 ;to STARKS, john + .word >100D,56,1663 ;to HARDAWAY, anfernee + .word >100D,43,1667 ;to GRANT, horace + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,70,1727 ;to ROBINSON, cliff + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,41,1763 ;to ELLIOTT, sean + .word >100D,37,1783 ;to KEMP, shawn + .word >100D,51,1827 ;to MALONE, karl + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,63,1879 ;to MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,56,1419 ;to McCLOUD, george + .word >100D,51,1451 ;to MILLS, terry + .word >100D,43,1499 ;to SMITH, kenny + .word >100D,52,1515 ;to McKEE, derek + .word >100D,45,1963 ;to CHAPMAN, rex + .word >100D,43,1595 ;to BENJAMIN, benoit + .word >100D,38,1599 ;to DOUGLAS, sherman + .word >100D,41,1966 ;to WEBB, spud + .word >100D,39,1631 ;to GILLIAM, armon + .word >100D,38,1639 ;to EDWARDS, kevin + .word >100D,45,1655 ;to OAKLEY, charles + .word >100D,40,1969 ;to RUFFIN, trevor + .word >100D,45,1715 ;to PERSON, wesley + .word >100D,51,1719 ;to FINLEY, michael + .word >100D,45,1735 ;to WILLIAMS, buck + .word >100D,45,1775 ;to PERSON, chuck + .word >100D,45,1954 ;to ROBERTSON, alvin + .word >100D,48,1815 ;to MILLER, oliver + .word >100D,39,1819 ;to MURRAY, tracy + .word >100D,48,1835 ;to BENOIT, david + .word >100D,45,1960 ;to SCOTT, byron + .word >100D,46,1859 ;to MURDOCK, eric + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,25,>4b2 ;00 ATLANTA "Hawks" + .word >100D,33,>4b5 ;01 BOSTON "Celtics" + .word >100D,22,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,25,>4bb ;03 CHICAGO "Bulls" + .word >100D,41,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,29,>4c1 ;05 DALLAS "Maverick" + .word >100D,24,>4c4 ;06 DENVER "Nuggets" + .word >100D,37,>4c7 ;07 DETROIT "Pistons" + .word >100D,39,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,28,>4cd ;09 HOUSTON "Rockets" + .word >100D,37,>4d0 ;10 INDIANA "Pacers" + .word >100D,28,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,36,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,20,>4d9 ;13 MIAMI "Heat" + .word >100D,24,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,45,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,22,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,27,>4e5 ;17 NEW YORK "Knicks" + .word >100D,28,>4e8 ;18 ORLANDO "Magic" + .word >100D,64,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,31,>4ee ;20 PHOENIX "Suns" + .word >100D,52,>4f1 ;21 PORTLAND "Blazers" + .word >100D,36,>4f4 ;22 SACRAMENTO "Kings" + .word >100D,40,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,52,>4fa ;24 SEATTLE "Supersonics" + .word >100D,39,>4fd ;26 TORONTO "Raptors" + .word >100D,33,>500 ;26 UTAH "Jazz" + .word >100D,39,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,22,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,39,>4b1 ;00 ATLANTA + .word >100D,30,>4b4 ;01 BOSTON + .word >100D,31,>4b7 ;02 CHARLOTTE + .word >100D,41,>4ba ;03 CHICAGO + .word >100D,28,>4bd ;04 CLEVELAND + .word >100D,27,>4c0 ;05 DALLAS + .word >100D,25,>4c3 ;06 DENVER + .word >100D,36,>4c6 ;07 DETROIT + .word >100D,51,>4c9 ;08 GOLDEN STATE + .word >100D,32,>4cc ;09 HOUSTON + .word >100D,39,>4cf ;10 INDIANA + .word >100D,49,>4d2 ;11 L.A. CLIPPERS + .word >100D,49,>4d5 ;12 L.A. LAKERS + .word >100D,37,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,39,>4de ;15 MINNESOTTA + .word >100D,38,>4e1 ;16 NEW JERSEY + .word >100D,37,>4e4 ;17 NEW YORK + .word >100D,41,>4e7 ;18 ORLANDO + .word >100D,44,>4ea ;19 PHILADELPHIA + .word >100D,31,>4ed ;20 PHOENIX + .word >100D,29,>4f0 ;21 PORTLAND + .word >100D,48,>4f3 ;22 SACRAMENTO + .word >100D,57,>4f6 ;23 SAN ANTONIO + .word >100D,34,>4f9 ;24 SEATTLE + .word >100D,40,>4fc ;26 TORONTO + .word >100D,32,>4ff ;26 UTAH + .word >100D,38,>502 ;27 VANCOUVER + .word >100D,44,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + +;DJT Start + movk 9,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp +;DJT Start + .long the_scoop_sp +;DJT End + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + +;DJT Start + movk 11,a0 + move @game_time,a14 + cmpi >700,a14 + jrge #fulltab + movk 3,a0 +#fulltab +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab +;DJT Start + .long hail_mary_sp + .long unlod_one_sp + .long wild_shot_sp + .long lfts_wild_sp + + .long whyyyy_sp + .long whyyyy_sp + .long ill_shot_sp + .long ill_shot_sp + .long outof_rng_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +;DJT End +**************** +#long_range + +;DJT Start + movk 7,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp +;DJT Start + .long outof_rng_sp +;DJT End + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 +;DJT Start + movk 15,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp +;DJT Start + .long fm_3pline_sp +;DJT End + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp +;DJT Start + .long kakaboom_sp + .long unbelieve_sp + .long luky_bskt_sp +;DJT End + +**************** +#long_range + + callr itsgood + jrnc #xlong + +;DJT Start + movk 10,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp + .long incrd_sht_sp +;DJT End + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp +;DJT Start + .long scores2_sp +;DJT End + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + +;DJT Start + movk 5,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + +;DJT Start + movk 19,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp +;DJT Start + .long scores2_sp +;DJT End + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp +;DJT End + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp +;DJT Start + .long and_drops_sp + .long scores2_sp +;DJT End + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + +;DJT Start + movk 20,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp +;DJT Start + .long outstndng_sp + .long scores2_sp +;DJT End + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + +;DJT Start + movk 8,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp +;DJT Start + .long kaboom2_sp +;DJT End + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + +;DJT Start + movk 11,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp +;DJT Start + .long kaboom2_sp + .long throws_it_sp +;DJT End + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + +;DJT Start + movk 17,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp +;DJT Start + .long kaboom2_sp + .long pounds_it_sp +;DJT End + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp +;DJT Start + .long outstndng_sp +;DJT End + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + +;DJT Start + movk 16,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp +;DJT Start + .long outstndng_sp + .long learn_tht_sp + .long didnt_knw_sp + .long kaboom2_sp +;DJT End + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp +;DJT Start + .long kakaboom_sp +;DJT End + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl +;DJT Start + .long cros_crt_sp + .long downcourt_sp + .long downcrt2_sp + .long hev_dncrt_sp + .long lngpss_dc_sp + .long pas_outsd_sp + .long he_passes_sp + .long hev_dncrt_sp +;DJT End + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot +;DJT Start + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi just_secs_sp,a0 + btst 2,a14 + jrnz #playit + movi run_out_sp,a0 +;DJT End +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow +;DJT Start + cmpi 9,a1 + jrlt #notblow + movi blowout_sp,a0 ;it's a blowout + move @HCOUNT,a14 + btst 1,a14 + jrnz #blowout + movi debacle_sp,a0 + jruc #blowout +#notblow +;DJT End + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp +;DJT Start + .long strike_up_sp +;DJT End + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit +;DJT Start + movk 3,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab +;DJT Start + .long look_out_sp +;DJT End + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 +;DJT Start + .long hamerd_hm_sp +;DJT End + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp +;DJT Start + .long swish2_sp +;DJT End + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + +;DJT Start + .if DEBUG +; jruc #anc_scr + .endif ;DEBUG + + movi 99,a0 + calla rndrng0 + cmpi 30,a0 ;45 + jrls #no_call ; br=nothing + cmpi 60,a0 + jrls #anc_scr ; br=annouce scores + cmpi 80,a0 + jrls #crwd_fx ; br=crowd/outdoor sounds + + move @pup_court,a14 ;No br=organ sounds if indoor + jrnz #die ; br=outdoor court +;DJT End + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + +;DJT Start + move @scores,a4 + move @scores+10h,a0 + sub a0,a4 + + move @team1,a2 + move a11,a11 + jrnz #cnt + move @team2,a2 + neg a4 +#cnt + move a4,a0 + jrz #tied + abs a0 + cmpi 59,a0 + jrhi #no_call ;br=if score diff > 59, ignore + + movi #anc_scr_lose_tbl,a3 + neg a4 ;make positive + jrn #neg + move a4,a0 + subk 12,a0 + jrlt #pos + srl 5,a0 ;3.2% per pt down + addi 500,a0 ; plus base % + cmpi 900,a0 ;Max % + jrls #valp + movi 900,a0 ;Max % +#valp + calla RNDPER + jrls #pos + movi #anc_scr_lngw_tbl,a3 + jruc #pos +#neg + neg a4 ;make positive + movi #anc_scr_take_tbl,a3 + cmpi 3,a4 + jrlt #pos + movi #anc_scr_win_tbl,a3 +#pos +;DJT End + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 +;DJT Start +#doscscr +;DJT End + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst +;DJT Start + move a3,*a4+,W ;store it + jrz #saysc + movi longway_sp,a1,L + jruc #saysc1 +#saysc + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 +#saysc1 +;DJT End + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; + - say "long way..." +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + +;DJT Start +#anc_scr_take_tbl + WLW 1,taks_lead_sp,-1 + WLW 0,take_lead_sp,-1 + WLW 1,taks_lead_sp,-1 + WLW 0,out_front_sp,-1 + WLW 1,out_front_sp,-1 + WLW 0,have_lead_sp,-1 + +;DJT End +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 +;DJT Start + +#anc_scr_lngw_tbl + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + +#anc_scr_tied_tbl + WLW -1,tied_at_sp,0 + WLW -1,tiegm_sp,-1 + WLW 0,tiethegm_sp,-1 +;DJT End + + + +****************************************************************************** +#tied +;DJT Start + movi #anc_scr_tied_tbl,a3 + movi 99,a0 + calla rndrng0 + + cmpi 30,a0 ;% + jrhi #tied1 + + move @scores,a4 + cmpi 60,a4 + jrlo #doscscr ; br=OK, score not too high +#tied1 + addi 64,a3 + cmpi 65,a0 ;% + jrls #doscscr + addi 64,a3 + jruc #doscscr +;DJT End + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp +;DJT Start + .long what_was_sp +;DJT End + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + +;DJT Start +; SOUND1 error_found +;DJT End + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/BACKUP/XCODE100M/STRING.ASM b/BACKUP/XCODE100M/STRING.ASM new file mode 100644 index 0000000..dec1322 --- /dev/null +++ b/BACKUP/XCODE100M/STRING.ASM @@ -0,0 +1,2097 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + +;DJT Start + .def HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P + +;DJT End + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers +;DJT Line moved down to table def + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(32),L ;null terminate + +;DJT Start + movi 6*8,a5 +#lp + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + addi init_convert_table,a0,L + movb *a0,*a3 ;get ascii LETTER from table + addk 8,a3 + subk 8,a5 + jrnz #lp + +#no_more + subi 48,a3 + add a5,a3 + rets +;DJT End + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +;DJT Start + .if TRIVCON +;DJT End +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +;DJT Start + .endif ;TRIVCON +;DJT End + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +;DJT Start + .if TRIVCON +;DJT End + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy +;DJT Start + .endif ;TRIVCON +;DJT End + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu +;DJT Start + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) + andi ALL_TMS_DEFEATD,a1 + cmpi ALL_TMS_DEFEATD,a1,L ;Beat them all? + jreq #nonxt ; br=yes + +;DJT End + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; +;DJT Start +#nonxt +;DJT End + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + +;DJT Start + .def SENDTO_P +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + + .if TRIVCON +;DJT End + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + +;DJT SENDTO_P moved above TRIVCON conditional @ show_trivia_stuff + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +;DJT Start + .def B8TCYC_PER + .def B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;DJT End +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +;DJT Start + .if TRIVCON +;DJT End +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;DJT Start + .endif ;TRIVCON +;DJT End +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end diff --git a/BACKUP/XCODE100M/SYS.EQU b/BACKUP/XCODE100M/SYS.EQU new file mode 100644 index 0000000..8952670 --- /dev/null +++ b/BACKUP/XCODE100M/SYS.EQU @@ -0,0 +1,363 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +;DJT Start +DEBUG .equ 0 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +HOTSPOT .equ 0 ;0 or 1 Show hotspots off/on + +OPERMES .equ 0 ;0 or 1 Operator message off/on +TRIVCON .equ 0 ;0 or 1 Trivia contest off/on +TEAMPOP .equ 0 ;0 or 1 Team popularity off/on +ANIM_VS .equ 1 ;0 or 1 Versus scrn anim off/on +;DJT End + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/BACKUP/XCODE100M/TEST.ASM b/BACKUP/XCODE100M/TEST.ASM new file mode 100644 index 0000000..3cb6c14 --- /dev/null +++ b/BACKUP/XCODE100M/TEST.ASM @@ -0,0 +1,3646 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET +;DJT Start +; .REF QSNDRST + .ref qsndrst_proc +;DJT End + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM MULTIPLIERS" + JRZ MBABORT +;DJT Start + CMPI 4,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 5,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +;DJT End +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +;DJT Start + .if OPERMES +;DJT End +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP +;DJT Start + + .endif ;OPERMES +;DJT End + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/BACKUP/XCODE100M/TEXT.ASM b/BACKUP/XCODE100M/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/BACKUP/XCODE100M/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/BACKUP/XCODE100M/TODO.DOC b/BACKUP/XCODE100M/TODO.DOC new file mode 100644 index 0000000..bb9d510 --- /dev/null +++ b/BACKUP/XCODE100M/TODO.DOC @@ -0,0 +1,73 @@ +;done: EGM screen +;done: Results screen shows blanks in 0-0 OT quarters +;done: Add kid players +;done: winningteam free credit bug fixed - sound reset still OK +;done: Add Jon Zirin +;done: Put Byron Scott into Lakers lineup +;done: Don't forget to finish #team_data (select2) +;done: Re-order teams +;done: Hot spots +;done: College heads +;done: New team line-ups +;done: What to do about created player hotspots +;done: Fix lineups for attract Starring screen +;done: Show hotspots powerup +;done: Update Grand Champ screen text (more?) +;MAX: Show hidden stats +;MAX: New dunks +;done: Shouldn't say "Next Opponent" when Grand Champ +;done: New logos for Detroit,Minnesota,Utah +;done: Fix repeatative outdoor court net_ani calls in BB3 +;MAX: Put hotspots into drone logic + +;MAX: Slap-off rim in 1 tick bug +;MAX: Better rejection/goal tending code +;MAX: No double dunk attach on potential on-fire shot +;MAX: Don't grab final seconds shots for a dunk +;done: Speed up spin move + +;done: New audio selections +;done: Helicopter dunk sound +;done: Says "stolen" when possession changes after a bucket +;done: Needs to say "Maximum Hangtime" +;done: Game/Shot/Fire clocks need different sounds +;done: Ball-grab sound on alley-oop + +;done: AAMA screen +;done: Drone difficulty - on-fires @ start of game after X player wins +;MAX: Flash Maximum word on title +;done: Use created players in attract demo +;MAX: Attract mode flash hype +;done: Court select easier +;MAX: Double dunk world record +;MAX: World record achieved message +;MAX: Player score bar +;MAX: Use basketball anim in attract +;MAX: Different create plyr heads/rules +;MAX: Some special heads aren't all in - Ehrlich,Funk, etc +;MAX: Paper/debris stuff +;done: Fix "4 games minimum" +;done: Don't allow quick tap out of OT buyin screen +;done: KI type pup display + + +Pre 4/5/96 +========== +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/BACKUP/XCODE100M/UNZIP.ASM b/BACKUP/XCODE100M/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/BACKUP/XCODE100M/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/BACKUP/XCODE100M/UTIL.ASM b/BACKUP/XCODE100M/UTIL.ASM new file mode 100644 index 0000000..d99768d --- /dev/null +++ b/BACKUP/XCODE100M/UTIL.ASM @@ -0,0 +1,2517 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA +;DJT Start + .def FRANIMQ +;DJT End + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + +;DJT Start + .def STRNGRAM,HEXTOASC,WRLD + .def COLCYC,CYCLE_TABLE +;DJT End + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +;DJT Start + .if 0 +;DJT End +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +;DJT Start + SUBR FLASHME +;DJT End + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE +;DJT Start + .endif +;DJT End + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +;DJT Start + .if 0 +;DJT End +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +;DJT Start + SUBR GETANIX +;DJT End + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +;DJT Start + .if 0 +;DJT End +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +;DJT Start + SUBR FRANIM +;DJT End + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd +;DJT Start + .endif +;DJT End + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +;DJT Start + .if 0 +;DJT End +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend +;DJT Start + .endif +;DJT End + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end diff --git a/BACKUP/XCODE100M/WORLD.EQU b/BACKUP/XCODE100M/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/BACKUP/XCODE100M/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/BACKUP/XCODE100M/_DARKER_ b/BACKUP/XCODE100M/_DARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100M/_DARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XCODE100M/_MARKER_ b/BACKUP/XCODE100M/_MARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100M/_MARKER_ @@ -0,0 +1 @@ +Marker diff --git a/BACKUP/XCODE100M/_ZARKER_ b/BACKUP/XCODE100M/_ZARKER_ new file mode 100644 index 0000000..1d9f9a5 --- /dev/null +++ b/BACKUP/XCODE100M/_ZARKER_ @@ -0,0 +1 @@ +Marker diff --git a/DOC/BASKET.BAL b/DOC/BASKET.BAL new file mode 100644 index 0000000..e921405 --- /dev/null +++ b/DOC/BASKET.BAL @@ -0,0 +1,689 @@ + +Basketball Game Controls & Moves - 3/24/92 + +***************************************************************************** + +Layout for Controls on Offense: + +* STICK * PASS * SHOOT/REBOUND + * TURBO/FAKE + +The 8-way stick will always control the on screen player you have chosen. +The buttons however will affect the drone player. (Assuming another human is +not controlling him) + +SHOOT/REBOUND Button: +- If your team has possession (Holding onto it) of the ball then: + - Elevates player who has possession of ball. + - The computer decides if the ball carrier will take a JUMP SHOT or + DRIVE TO THE HOOP (Player would at least have to be moving in the + direction of the hoop for this to occur) for a slam dunk. (Or + similar signature move, like a spin move into a finger roll) + - If a JUMP SHOT then: + - Letting go of the button will release the ball. + - Letting go of the button at the peak of jump will increase + chances of making the shot. + - If someone just tapped the button, the computer will shoot + the ball after a moment or so. (So it will look correct) + - If the button is held until jump is almost over, the + computer will shoot the ball automatically at that time. + - If a DRIVE TO HOOP then: + - Letting go of button as player reaches hoop will increase + chances of making the shot. (Pretty high to begin with!) + +- Hitting PASS button while shooting will: + - If in a JUMP SHOT then: + - If it isn't to late, player will spin entire body toward + teamate and pass the ball. + - If in a DRIVE TO HOOP: + - If it isn't to late, and the ball can be easily passed, + (Ex. The teamate is vertically aligned with ball carrier + allowing an easy swing pass) then pass the ball. + - If jamming in an ALLEY-OOP pass then: + - Do nothing. + +- If ball is in the air around hoop, then neither team has possession: + - Player you control (not drone) will squat down (box out type look) + and leap up for the ball, or push away opposing player. + +PASS Button: + - If player with ball is running (Dribbling) or standing: + - Holding button down will cause player to stop dribbling + and hold the ball above his head. + - Pushing joystick will cause that player to spin to the + chosen direction. + - Releasing the button will cause the player to spin to the + direction of his teamate and then pass the ball. + - The computer will decide if the pass will be a chest pass, + chest bounce pass, or arcing lob type pass. + - If teamate is racing toward the hoop then: + (Computer will decide if this will occur. Based on player + positions and directions) + - ALLEY-OOP may occur. Computer will take total control of + offensive team. Player with ball will toss a pass toward + the hoop and the player who was driving toward the hoop + will elevate, catch ball and slam it home. Computer + decides if the jam is successful. (Pretty high!) + +When PASS is caught: + - When Pass is caught and stick of receiving player is not pushed: + - Player holds onto the ball. Possibly going through some + kind of a 'look for my teamate' type list for the torso. + Don't start dribbling right away because we want to allow + the player to use the FAKE button. + - When player pushes stick: + - Start dribbling. Run in selected direction. + +TURBO/FAKE Button: +- I assume this button will be used sparingly, and never whacked upon + repeatedly in quick succession. +- Each player will have a TURBO button meter displayed in his status box. + + - If running: + - Speed up player you are controlling. + - If standing and holding onto ball: + - Fake a shot or hot dog in the face of defender. Once + defender bites on the fake, the player can push stick, + which causes him to run around the defender. + + +Layout for Controls on Defense: + +* STICK * STEAL * BLOCK/REBOUND + * TURBO + + +BLOCK/REBOUND Button: + - If ball has reached rim, or is bounding off the rim, then: + - Player you control (not drone) will face the hoop and squat + down (box out type look) and maybe leap up for the ball, + or push away opposing player. + - If ball is generally above his head, then player + will jump up and attempt to rebound the ball. He + will even grab the ball and bring it down. + + - If ball has not reached the rim, then we assume a block attempt: + - Elevate player you are controlling in the direction he + is facing. If ball is nearby, computer will automatically + swat the ball away. Otherwise, player arm is extended high + for a block. + +STEAL Button: +- I assume this button will be whacked upon repeatedly when defending the + opponent face to face. + - Player being controlled will swipe at the ball. + - If successful, opponent will fall down and you will be + in control of the ball with a dribble. + +TURBO Button: + - Causes player you are controlling to speed up his motion. + - Will not affect jumping, reaching in for a steal, etc. + +STEAL & TURBO Button at same time: + - May cause player you are controlling to execute special defensive + move. Computer will select the appropriate move: + - Drop down and undercut offensive player as he is gliding + toward hoop. + - Punch player in the face and steal ball. + - Push player away from hoop. + - (INSERT MORE HERE) + + +****************************************************************************** + +ANIMATIONS NEEDED + +DIRECTIONS of movement for artwork (Flip to get 6,7,8) + +1 + 2 + 3 + 4 +5 + +MOVEMENT for the HEAD + +Each players head will be needed in all 5 directions. The head will be +pasted onto the torso and will animate independently of all other animations. +When appropriate, the head will turn and look, etc. + +MOVEMENT for LEGS only + +Standing in directions 2,3,4. (2 types) + - Straight up type stand. + - Lower to the ground, butt stuck out, ready to drive. + Probably used in conjunction with torso fakes or when the + torso is dribbling low to the ground. + +Jumping straight up in 1,2,3,4,5. + - Standard jump shot look. (Toes pointing down type) + +Running in 1.5,2,3,4 & 4.5 + - Directions 1 and 5 could possibly use 2 and 4. + +Spinning run with ball in 2,4. + - Spin around defender and keep dribbling. Could happen in the + back court or in the lane. + +Gliding toward hoop for a dunk in 2,3,4. + - Probably 2 or 3 looks, and 1 signature look. + - Legs separated, knee forward like Jordan. + - Legs together like a jump shot. (torso would have + arm extended). + - Spinning 360 degree slam. + - Two handed slam and hang/swing from hoop. + - (INSERT MORE HERE) + +Hook shot in 2,4. + - One leg bent the other leg straight. Torso will twist toward hoop. + +Knocked to ground in 2 and 4. + - Probably 2 looks: + - Face first toward ground + - Butt first toward ground + +Defensive posture in 1,2,3,4,5. + - Legs spread apart, back to the hoop. + - Shuffle side to side with back always facing the hoop. + +Prepare for rebound legs in 2,3,4. + - When ball goes up, the players can crouch down and prepare to + jump for the rebound. + + +****************************************************************************** + + +MOVEMENT for TORSO only + +SHOTS: + +Jumping straight up in 1,2,3,4,5. + - Standard jump shot look. + - Arms up over head, shoot ball sequence. + +Gliding toward hoop for a dunk in 1,2,3,4. + - Probably 2 or 3 looks, and 1 signature look. + - One arm extended toward hoop like Jordan. + - Both arms gripping ball as player flys to hoop. + - Spinning 360 degree slam. + - 2 handed ball behind head monster dunk. + - (Include others here) + +Hook shot in 2,4. + - Outside arm hooks the ball toward hoop. + +Gliding in for a finger roll in 3. + - Arm extended out with ball resting on finger tips. Gently launch + ball up into hoop. + +Desperation half court shot in 3. + - Chest type launch. Computer will do this if beyond half court. + + +NON-SHOOTING: + +Fake out move in 1,2,3,4,5. + - Triggered by the fake out button (See above) + - Jordan type palm of ball with arm sweep. + - Two handed ball/head fake. + - Ball held low, body/head shifts back and forth. + +Running in 1,2,3,4,5. + - Not as many animations on torso as on legs. + - Dribbling ball sequence. + +Spinning run with ball in 2,4. + - Spin around defender and keep dribbling. Could happen in the + back court are or in the lane. + +Standing in directions 1,2,3,4,5. + - Straight up type stand. + - Straight up type stand while dribbling. + - Signature dribble between legs while standing and not moving. + +Knocked to ground in 2 and 4. + - Probably 2 looks: + - Face first toward ground + - Butt first toward ground + +Defensive posture in 1,2,3,4,5. + - Arms up and apart, back to the hoop. + +Prepare for rebound - torso in 2,3,4. + - When ball goes up, the players can crouch down and prepare to + jump for the rebound. + +Calling for a pass in 2,3,4 + - Arm held out high away from body + - Can be used when legs are running + +Set Pick in 2 and 4. + - Player stands and keeps arms in front of his body like a block. + +Swipe at ball in 1,2,3,4,5. + - Player reaches outward for a steal + +Chest pass in 1,2,3,4,5. + - Push ball away from chest with both hands. Ball speeds toward + teamate. + - Also use for bounce pass + - Push ball away from chest with both hands. Ball bounces + halfway between passer and teamate. + +Overhead pass in 1,2,3,4,5. + - Ball is held above head with both hands. + - Can be a bullet type pass + - Or a lob type pass to a closer teamate. + +One handed speed pass in 3. + - One handed horizontal pass from top of key area to under hoop. + Kind of a push pass. Computer will decide to use this pass. + +Dish off while taking a gliding toward hoop in 2,3,4. + - One handed launch of ball if teamate is located off to the side. + Computer can allow this move. + +NOTE: While in the middle of a JUMP SHOT, pass off artwork will be the + standard overhead two handed pass. + + + +FILMING SEQUENCE + +Questions: + Using a dolly a problem? Length? + Need monitor hooked up so we can see what is being taped! + Markers before any sequences? + High speed shutter. + Copy tape after filming. How many? Format 8mm? Betamax? + Swing from rim dunk? + Floor mats? + Chroma key backdrop? + Time estimate to film? + Trampoline? + Will monitor show what is actually being recorded on tape? + Scal Torso/Legs/Body same each time! + Towels + Spray bottle/makeup + +DIRECTIONS of movement for artwork (Flip to get 6,7,8) + +1 + 2 + 3 + 4 +5 + +Running sequences requiring dolly: + +We need to get "clean" legs in all 5 directions. + + +1. Running with arms raised above waist in 1.5 - Legs only +2. Running with arms raised above waist in 2 - Legs only +3. Running with arms raised above waist in 3 - Legs only +4. Running with arms raised above waist in 4 - Legs only +5. Running with arms raised above waist in 4.5 - Legs only + +6. Running without ball in 1.5 - Torso only +7. Running without ball in 2 - Torso only +8. Running without ball in 3 - Torso only +9. Running without ball in 4 - Torso only +10. Running without ball in 4.5 - Torso only + +11. Running with fake ball dribble in 1.5 - Torso only +12. Running with fake ball dribble in 2 - Torso only +13. Running with fake ball dribble in 3 - Torso only +14. Running with fake ball dribble in 4 - Torso only +15. Running with fake ball dribble in 4.5 - Torso only + +16. Running backwards with arms raised above waist in 3 - Legs only +17. Running backwards with normal arms in 3 - Torso only + +18. Running/dribbling in 2, spin 360, keep running in 2 - Whole body +19. Running/dribbling in 4, spin 360, keep running in 4 - Whole body +20. One dribble behind back in 3. Start run down court after rebound. + +21. Knocked backward flailing to regain balance in 2. +22. Knocked backward flailing to regain balance in 4. + +23. Calling for a pass in 2 - Arm held out high away from body. Will be + used when legs are running +24. Calling for a pass in 3 - Arm held out high away from body. Will be + used when legs are running +25. Calling for a pass in 4 - Arm held out high away from body. Will be + used when legs are running + +Stationary sequences with camera locked down: + +30. Standing in 1 - arms up & away from waist - Legs only +31. Standing in 2 - arms up & away from waist - Legs only +32. Standing in 3 - arms up & away from waist - Legs only +33. Standing in 4 - arms up & away from waist - Legs only +34. Standing in 5 - arms up & away from waist - Legs only + +35. Standing in 1 - dribbling - Torso only +36. Standing in 2 - dribbling - Torso only +37. Standing in 3 - dribbling - Torso only +38. Standing in 4 - dribbling - Torso only +39. Standing in 5 - dribbling - Torso only + +40. Squating lower to ground dribbling (Ready for a drive) in 1 - Whole +41. Squating lower to ground dribbling (Ready for a drive) in 2 - Whole +42. Squating lower to ground dribbling (Ready for a drive) in 3 - Whole +43. Squating lower to ground dribbling (Ready for a drive) in 4 - Whole +44. Squating lower to ground dribbling (Ready for a drive) in 5 - Whole + +45. Standing in 1 - chest pass (Can use for bounce pass also) - Torso +46. Standing in 2 - chest pass (Can use for bounce pass also) - Torso +47. Standing in 3 - chest pass (Can use for bounce pass also) - Torso +48. Standing in 4 - chest pass (Can use for bounce pass also) - Torso +49. Standing in 5 - chest pass (Can use for bounce pass also) - Torso + +50. Standing in 1 - ball over head pass - Torso +51. Standing in 2 - ball over head pass - Torso +52. Standing in 3 - ball over head pass - Torso +53. Standing in 4 - ball over head pass - Torso +54. Standing in 5 - ball over head pass - Torso + +54. Standing with ball in 1 - body swaying, ball held mid body - Whole +54. Standing with ball in 2 - body swaying, ball held mid body - Whole +54. Standing with ball in 3 - body swaying, ball held mid body - Whole +54. Standing with ball in 4 - body swaying, ball held mid body - Whole +54. Standing with ball in 5 - body swaying, ball held mid body - Whole + +;Fake moves will link to standing sway (above) + +55. Fake a shot in 1 (Head up/toes don't leave ground) - Whole +56. Fake a shot in 2 (Head up/toes don't leave ground) - Whole +57. Fake a shot in 3 (Head up/toes don't leave ground) - Whole +58. Fake a shot in 4 (Head up/toes don't leave ground) - Whole +59. Fake a shot in 5 (Head up/toes don't leave ground) - Whole + +60. Fake a move in 1 (Jordan type palm of ball with arm sweep) - Whole +61. Fake a move in 2 (Jordan type palm of ball with arm sweep) - Whole +62. Fake a move in 3 (Jordan type palm of ball with arm sweep) - Whole +63. Fake a move in 4 (Jordan type palm of ball with arm sweep) - Whole +64. Fake a move in 5 (Jordan type palm of ball with arm sweep) - Whole + +65. Fake a move in 1 (Ball held low, body/head shifts back and forth) +66. Fake a move in 2 (Ball held low, body/head shifts back and forth) +67. Fake a move in 3 (Ball held low, body/head shifts back and forth) +68. Fake a move in 4 (Ball held low, body/head shifts back and forth) +69. Fake a move in 5 (Ball held low, body/head shifts back and forth) + + +80. Defensive posture in 1 with shuffle back and forth (Legs spread out, + arms spread out and animating - back is to hoop). +81. Defensive posture in 2 with shuffle back and forth (Legs spread out, + arms spread out and animating - back is to hoop). +82. Defensive posture in 3 with shuffle back and forth (Legs spread out, + arms spread out and animating - back is to hoop). +83. Defensive posture in 4 with shuffle back and forth (Legs spread out, + arms spread out and animating - back is to hoop). +84. Defensive posture in 5 with shuffle back and forth (Legs spread out, + arms spread out and animating - back is to hoop). + +85. Jump up to block a shot and swat it away in 1 (Swat can be filmed + without jumping) - Torso only +86. Jump up to block a shot and swat it away in 2 (Swat can be filmed + without jumping) - Torso only +87. Jump up to block a shot and swat it away in 3 (Swat can be filmed + without jumping) - Torso only +88. Jump up to block a shot and swat it away in 4 (Swat can be filmed + without jumping) - Torso only +89. Jump up to block a shot and swat it away in 5 (Swat can be filmed + without jumping) - Torso only + +85. Jump up to block a shot and swat it away in 1 (Swat can be filmed + without jumping) - Legs only +86. Jump up to block a shot and swat it away in 2 (Swat can be filmed + without jumping) - Legs only +87. Jump up to block a shot and swat it away in 3 (Swat can be filmed + without jumping) - Legs only +88. Jump up to block a shot and swat it away in 4 (Swat can be filmed + without jumping) - Legs only +89. Jump up to block a shot and swat it away in 5 (Swat can be filmed + without jumping) - Legs only + +90. Squat low and jump up to grab a rebound in 1 (Two hands up can be + filmed without jumping high) - Whole body +91. Squat low and jump up to grab a rebound in 2 (Two hands up can be + filmed without jumping high) - Whole body +92. Squat low and jump up to grab a rebound in 3 (Two hands up can be + filmed without jumping high) - Whole body +93. Squat low and jump up to grab a rebound in 4 (Two hands up can be + filmed without jumping high) - Whole body +94. Squat low and jump up to grab a rebound in 5 (Two hands up can be + filmed without jumping high) - Whole body + +95. One handed push pass in 1 (Right hand). From standing position. +96. One handed push pass in 2 (Right hand). +97. One handed push pass in 3 (Right hand). +98. One handed push pass in 4 (Right hand). +99. One handed push pass in 5 (Right hand). + +100. Running no look pass in 3. Pass up screen. Player moving. +101. Running no look pass in 3. Pass down screen. + +102. Prepare for and jump up for a jump ball in 3. Whole body. + + +;Act different looks when falling. +112. Knocked to ground and get back up in 2. (Face first toward ground) +113. Knocked to ground and get back up in 2. (Butt first toward ground) +114. Knocked to ground and get back up in 3. (Face first toward ground) +114. Knocked to ground and get back up in 3. (Butt first toward ground) +115. Knocked to ground and get back up in 4. (Face first toward ground) +116. Knocked to ground and get back up in 4. (Butt first toward ground) + + +120. Set Pick in 2 - Player stands and keeps arms in front of his body + like a block. Whole body - elbows out +121. Set Pick in 3 - Player stands and keeps arms in front of his body + like a block. +122. Set Pick in 4 - Player stands and keeps arms in front of his body + like a block. + +123. Swipe at ball in 1 - Player reaches outward for a steal. Sturdy, + feet planted type look. +124. Swipe at ball in 2 - Player reaches outward for a steal. Sturdy, + feet planted type look. +125. Swipe at ball in 3 - Player reaches outward for a steal. Sturdy, + feet planted type look. +126. Swipe at ball in 4 - Player reaches outward for a steal. Sturdy, + feet planted type look. +127. Swipe at ball in 5 - Player reaches outward for a steal. Sturdy, + feet planted type look. + + +128. Dish off while gliding toward hoop in 2 - One handed launch of ball + if teamate is located off to the side. +129. Dish off while gliding toward hoop in 3 - One handed launch of ball + if teamate is located off to the side. +130. Dish off while gliding toward hoop in 4 - One handed launch of ball + if teamate is located off to the side. + + +140. Behind the back pass in 2. With left hand. +141. Behind the back pass in 2. With right hand. +142. Behind the back pass in 4. With left hand. +143. Behind the back pass in 4. With right hand. + +;Clearout type +144. Have rebound, grip ball with both hands and fling elbows in 2. +144. Have rebound, grip ball with both hands and fling elbows in 3. +145. Have rebound, grip ball with both hands and fling elbows in 4. + +146. Push player away with both hands in 2. Hard! +146. Push player away with both hands in 3. Hard! +147. Push player away with both hands in 4. Hard! + +146. Push player away with arm - clearout in 2. Hard! +146. Push player away with arm - clearout in 3. Hard! +146. Push player away with arm - clearout in 4. Hard! + +148. Undercut player who is in flight in 3. Lean over close to ground. + +149. Punch player with fist in 1. +149. Punch player with fist in 2. +149. Punch player with fist in 3. +149. Punch player with fist in 4. +150. Punch player with fist in 5. + +149. Elbow player with fist in 1. +149. Elbow player with fist in 2. +149. Elbow player with fist in 3. +149. Elbow player with fist in 4. +150. Elbow player with fist in 5. + +Celebration Stuff: + +161. Pump fist into the air in 3 - Can be used when running back down court. + +162. Hold both arms into air signaling a 3 pointer in 3 - Can be used + when back-pedaling down court. +162. Hold both arms into air signaling a 3 pointer in 5 - Can be used + when back-pedaling down court. + +163. Point at other player in 1. +164. Point at other player in 2. +165. Point at other player in 3. +166. Point at other player in 4. +167. Point at other player in 5. + +168. One knee bent toward ground arm cocked back repeatedly in 5. + +Shoot the ball: + +169. Jump shot in 1 (Standard jump shot, toes pointing down). Legs only +170. Jump shot in 2 (Standard jump shot, toes pointing down). Legs only +171. Jump shot in 3 (Standard jump shot, toes pointing down). Legs only +172. Jump shot in 4 (Standard jump shot, toes pointing down). Legs only +173. Jump shot in 5 (Standard jump shot, toes pointing down). Legs only + +169. Jump shot in 1 (Standard jump shot, toes pointing down). Torso only +170. Jump shot in 2 (Standard jump shot, toes pointing down). Torso only +171. Jump shot in 3 (Standard jump shot, toes pointing down). Torso only +172. Jump shot in 4 (Standard jump shot, toes pointing down). Torso only +173. Jump shot in 5 (Standard jump shot, toes pointing down). Torso only + +174. Glide toward hoop for a dunk in 2. + - Legs separated, knee forward like Jordan. One handed. +175. Glide toward hoop for a dunk in 3. + - Legs separated, knee forward like Jordan. One handed. +176. Glide toward hoop for a dunk in 4. + - Legs separated, knee forward like Jordan. One handed. + +177. Glide toward hoop for a dunk in 2. One handed + - Legs together like a jump shot. (torso would have + arm extended). +178. Glide toward hoop for a dunk in 3. + - Legs together like a jump shot. (torso would have + arm extended). +179. Glide toward hoop for a dunk in 4. + - Legs together like a jump shot. (torso would have + arm extended). + +;Finish of dunk needed - just one 360 spin! +;Could use same spin for dunk! + +180. Glide toward hoop for a dunk in 2. + - Spinning 360 degree slam. Two handed. +181. Glide toward hoop for a dunk in 3. + - Spinning 360 degree slam. Two handed. +182. Glide toward hoop for a dunk in 4. + - Spinning 360 degree slam. Two handed. + +;Different leg looks + +183. Glide toward hoop for a dunk in 2. + - Two handed slam and hang/swing from hoop. +184. Glide toward hoop for a dunk in 3. + - Two handed slam and hang/swing from hoop. +185. Glide toward hoop for a dunk in 4. + - Two handed slam and hang/swing from hoop. + +;Use a trampoline here? + +186. Glide toward hoop for a dunk in 2. + - Two handed, legs tucked back, ball behind head monster jam. +187. Glide toward hoop for a dunk in 3. + - Two handed, legs tucked back, ball behind head monster jam. +188. Glide toward hoop for a dunk in 4. + - Two handed, legs tucked back, ball behind head monster jam. + +189. Hook shot in 1 - One leg bent the other leg straight, torso will + twist toward hoop. +189. Hook shot in 2 - One leg bent the other leg straight, torso will + twist toward hoop. +189. Hook shot in 3 - One leg bent the other leg straight, torso will + twist toward hoop. +189. Hook shot in 2 - One leg bent the other leg straight, torso will + twist toward hoop. +190. Hook shot in 5 - One leg bent the other leg straight, torso will + twist toward hoop. + +191. Gliding in for a finger roll in 3 - Arm extended out with ball + resting on finger tips. Gently launch ball up into hoop. Defender + could possibly block this shot. + +192. Desperation half court shot in 3 - Chest type launch. Computer + will do this if beyond half court. +193. Desperation half court shot in 3 - One arm bomb type launch. Computer + will do this if beyond half court. + +194. Leaning one hander in 3. Chest out, legs back, launch short shot. + +194. Layup in 2. +194. Layup in 4. +194. Reverse layup in 2. +194. Reverse layup in 4. + +195. Body above the rim throw down dunk in 3. Waist at hoop level. + +196. Stationary dribble between legs like Isiah in 3. Low to ground. +196. Stationary dribble between legs like Isiah in 2. + +197. One handed float up screen dunk in 3, body floating in 1. + +198. Somersault dunk in 3. +198. Somersault dunk in 3. Leaving tuck position 1 +198. Somersault dunk in 3. Leaving tuck position 2 + +199. Behind the back dunk, two hands in 1. +200. Behind the back dunk, two hands in 3. +201. Behind the back dunk, two hands in 5. + +202. Head shots in 1-5 smooth 180 degrees. Closeup. + +203. Back in to hoop while dribbling in 1 +203. Back in to hoop while dribbling in 2 +203. Back in to hoop while dribbling in 3 +203. Back in to hoop while dribbling in 4 +203. Back in to hoop while dribbling in 5 + +250. Jordan sitch hands layup in 3. +251. Cower under slamming player in 4. Arm protecting face. + +252. Hip check in 1. +253. Hip check in 5. + +254. Turnaround Fallaway jumper in 2 +255. Turnaround Fallaway jumper in 3 +256. Turnaround Fallaway jumper in 4 + +257. Laimbeer tantrum in 4. Bounce ball with two hands. + +258. Shocked look #1 in 4. +259. Shocked look #1 in 4. + +260. Kick ball in 4. + +261 Tomahawk slam in 3. Body facing 5 and ball in right hand. + +262 Dive in 3 - one handed toss back in bounds. + +(INSERT MORE SHOTS/DUNKS HERE) + \ No newline at end of file diff --git a/DOC/CREDITS.TXT b/DOC/CREDITS.TXT new file mode 100644 index 0000000..5bd49e3 --- /dev/null +++ b/DOC/CREDITS.TXT @@ -0,0 +1,122 @@ +DESIGN TEAM: + MARK TURMELL - Lead Programmer + DAN THOMPSON - Programmer + JEFF JOHNSON - Programmer + + SAL DIVITA - Lead Artist + EUGENE GEER - Artist + JOHN CARLTON - Artist + JENNIFER HEDRICK - Artist + + JON HEY - Lead Sound/Music + + +ADDITIONAL DESIGN: + SHAWN LIPTAK + JAMIE RIVETT + PAT FITZGERALD + JOHN ROOT + MARTY MARTINEZ + CARLOS PESINA + NICK ERHLICH + + +SOUND AND MUSIC: + JON HEY - Lead Sound/Music + KEVIN QUINN - Music + NEIL FUNK - Announcer + + +MUSIC: + 'GET UP GET UP' + 'HANGTIME - WHATCHA GONNA DO' + + MUSIC PRODUCED BY: M.DOC OF INDASOUL PRODUCTIONS + SONGS WRITTEN BY: RHYME + RAP BY: RHYME + BACKGROUNDS BY: M.DOC AND BELOW ZERO + VOX ON DANCE TRACK BY: M.DOC + MIX ENGINEER: JOEY 'THE DON' DONATELLO + INDASOUL CONTACT: JABBAR STEVENSON + + +ACTORS: + WILLIE MORRIS JR. + STEVE BARDO + MARCUS MINIFEE + + KIM KELLER + MARY JANE LEE + + +HARDWARE SUPPORT: + MARK LOFFREDO + SHERIDAN OURSLER + PAT COX + AL LASKO + JEFF PETERS + CARY MEDNICK + RAY GAY + STEVE CORREL + JOHN LOWES + + +NBA SUPPORT: + GREG LASSEN + JOE AMATI + + UNITED CENTER + JONATHAN ZIRIN + + +GAME TESTERS: + MIKE VINIKOUR + EDDIE FERRIER + + +ADDITIONAL TESTERS: + BUD FLETCHER + ERIC C. WARD + MIKE MALLARD + SEAN JENNINGS + ROB GORSKI + DIMITRI + ALFRED MONTEGUE + QUIANA LAHORI + MARIUS MATEESCU + + +SPECIAL THANKS: + EUGENE JARVIS + ED BOON + GEORGE PETRO + TONY GOSKIE + JOHN TOBIAS + STEVE BERAN + TODD ALLEN + WARREN DAVIS + RAY KIRKLAND + BETTY PURCELL + DR. AUSMAN + DR. ABOOD + JOSH TSUI + MIKE LYNCH + JASON SKILES + L.E.D. + JIM GREENE + ART TIANIS + JIM TIANIS + ANDY LYCKE + JOAN FAUX + CHRISTA WOSS + CLAUDIA RIEDENER + FELECIA TURMELL + LAURIE THOMPSON + CHRISTINE JOHNSON + + +EXECUTIVE PRODUCERS: + NEIL NICASTRO + KEN FEDESNA + PAUL DUSSAULT + ROGER SHARPE diff --git a/DOC/DISPLAY.DOC b/DOC/DISPLAY.DOC new file mode 100644 index 0000000..05f6b28 Binary files /dev/null and b/DOC/DISPLAY.DOC differ diff --git a/DOC/DMA.DOC b/DOC/DMA.DOC new file mode 100644 index 0000000..62d509a --- /dev/null +++ b/DOC/DMA.DOC @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Hardware System + ------------------------------------------------- + + + Revision 1 DMA - Description and Use + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + George N. Petro + + General Description + ------------------- + + The Z-UNIT DMA is used to do very rapid serial to block + data conversions, from image RAM/ROM to the video bitmap. The + DMA has its own 32-bit wide bus for the transfer. Once it is + given the GO signal the GSP is no longer required. However image + RAM/ROM and the video bitmap are "locked-out" for the duration + of the DMA operation. The DMA is also equipped with the ability + to flip and clip the block image, along with constant color + substitution etc. + + DMA Registers + ------------- + + The DMA has ten 16-bit registers to control a serial + to block transfer. Below they are listed with their physical + address and mnemonic. Put these mnemonics in your SYSINC.ASM file. + + Mnemonic Physical Addr. Description + -------- ------------- ----------- + DMACTL >01A80000 Control Register + DMAOFS >01A80010 Offset Register + DMASLO >01A80020 Source Data address, LSW + DMASHI >01A80030 Source Data address, MSW + DMAHOR >01A80040 Horizontal Destination Address (X) + DMAVRT >01A80050 Vertical Destination Address (Y) + DMAHSZ >01A80060 Horizontal Size (0 - >1FF) + DMAVSZ >01A80070 Vertical Size (0 - >FF) + DMAPAL >01A80080 Palette Select + DMACON >01A80090 Constant Color Register + + Control Register + ---------------- + + The DMA performs any given operation based on the + control register. Currently the control register uses 7 of its + 16 bits to define the operation, they are as follows: + + CONTROL REGISTER + ----------------- + 15 5 0 + ____ ____ ____ ____ ____ ____ ____ + | | ... | | | | | | --+--> Write Zero Data + -+-- -+-- -+-- -+-- -+-- -+-- ---- + | | | | | |----------> Write Non-Zero Data + | | | | | + | | | | |---------------> Write Constant on Zero Data + | | | | + | | | |--------------------> Write Constant on Non-Zero Data + | | | + | | |-------------------------> Flip about Y-axis + | | + | |------------------------------> Flip about X-axis + | + |------------------------------------------> DMA GO bit + + Write Zero Data - Bit 0 + ----------------------- + If Bit 0 of the control register is set then any source + data that is zero will be written, otherwise it will not. + + Write Non-Zero Data - Bit 1 + --------------------------- + If Bit 1 is set then all non-zero source data will be + written. + + Note: To write all source data, Bits 0 and 1 should be set + simultaneously. + + + Write Constant on Zero Data - Bit 2 + ----------------------------------- + This will cause the constant byte, at DMACON, to be written + in place of any zeros in the source data. + + Write Constant on Non-Zero Data - Bit 3 + ---------------------------------------- + In this case the constant byte will be written in place + of any Non-zero source data. + + + Note: Setting Bits 2 & 0 or Bits 3 & 1, simultaneously, will + cause results for which the hardware department cannot + be held responsible. + + + Flipping about Y (left to right) - Bit 4 + ---------------------------------------- + Setting this bit will cause the DMA to flip the source + data about the Y-axis, described below. + + Flipping about X (up and down) - Bit 5 + -------------------------------------- + Setting this bit will cause the DMA to flip the source + data about the X-axis, also described below. + + DMA GO bit - Bit 15 + ------------------- + When this bit is set it will initiate the DMA operation. + This bit is also used as a DMA Ready flag. Reading a 1 from this + bit indicates that the DMA is busy, a 0 indicates DMA ready. + + + + Clipping and Flipping + --------------------- + + These operations use the offset register, a shortened + Horizontal size and a modified source data starting address. + There are a few equations to help calculate these parameters. + + They make use of the following mnemonics: + + HS - Horizontal Size, this is the Horizontal size of + the data displayed on the screen. + + LC - Left Clip, this is the number of pixels that are + to be clipped off of the left side of the block + + OF - Offset, this is the value that is stored at DMAOFS. + + RC - Right Clip, this is the number of pixels that are + to be clipped off of the right side of the block. + + SA - Starting address, this is the starting memory address + of the source data. + + TS - Total Size, this is the total horizontal size of the + source data. This includes the padded zeros at the + end of each row, so TS mod 4 is always 0. + + + + Offset Register + --------------- + The offset is not difficult to comprehend but it can + cause a little confusion, so it shall be discussed here. + The Horizontal Size register tells the DMA how many pixels(bytes) + make up a row. Once the DMA has reached the end of the row it + adds the offset to the current source data address to gain access + to the beginning of the next row. So if an image is actually 20 + pixels wide and you wish only to display the first 15 per row, + then a 15 is stored in the Horizontal Size register(DMAHSZ) and + 5 is stored in the offset reg. + + Now for the confusing part. Every image is stored so that + the number of pixels per row is evenly divisible by 4. However + the visible horizontal size of an image doesn't necessarily abide + by this rule. To compensate, images are "padded" with zeros at the + end of a row to make them conform. This is the Total Size(TS). + The total size is always the number of bytes per row including the + padded zeros. If DMAOFS is zero, and DMAHSZ is the number of bytes + of actual image data in the row, then the DMA will figure its way + to the next row of source data, regardless of padded zeros + (see below). + + + image_data + .byte >05,>05,>07,>FF,>07,>07,0,0 + |____________________| |_| + | |______ zeros for padding. + | + |____________________ actual image data. + + Above shows one row of image data, HS = 6 and TS = 8. + If this were to be displayed normally(no clipping), a 0 would + go in DMAOFS and a 6 in DMAHSZ. But, if you were to clip the last + pixel of image data, you would set up like this: DMAHSZ = 5, + DMAOFS = 3. + + The general idea is then: + + if not clipping --> OF = 0 + if clipping --> OF = TS - HS + + + Right Clipping (decreased HS) + ---------------------------- + + HS = HS - RC + OF = TS - HS + + Left Clipping (decreased HS, increased SA) + ------------------------------------------- + + HS = HS - LC + OF = TS - HS + SA = SA + (LC*8) + + Right and Left Clipping + ----------------------- + + HS = HS - (RC + LC) + OF = TS - HS + SA = SA + (LC*8) + + Flipping about Y + ---------------- + + (DMACTL)Bit 4 = 1 + (DMACTL)Bit 5 = 0 + + HS = HS - (RC + LC) + OF = HS + TS - 1 + SA = SA + ((HS+LC) * 8) + + + Flipping about X + ---------------- + + (DMACTL)Bit 4 = 0 + (DMACTL)Bit 5 = 1 + + HS = HS - (RC + LC) + OF = -(HS + TS - 1) + SA = SA + LC*8 + ((TS*8)(VS-1)) + + + Flipping about X & Y + -------------------- + + (DMACTL)Bit 4 = 1 + (DMACTL)Bit 5 = 1 + + HS = HS - (RC + LC) + OF = (HS - TS) - 1 + SA = SA + ((TS*8)(VS-1) + (HS+LC)*8) + + \ No newline at end of file diff --git a/DOC/DMA2.DOC b/DOC/DMA2.DOC new file mode 100644 index 0000000..981052d --- /dev/null +++ b/DOC/DMA2.DOC @@ -0,0 +1,657 @@ + + + + + + + + + + + + + + + + + + + + + THE BRAND SPANKING NEW DMA (#2) + + KEEP ENTERPRISES, INC. + + JANUARY 1, 1992 + + DOCUMENT REV. 1.5 + + + + + + + + + + + + + + + + + + + + + + + DMA # 2 - GENERAL INFORMATION + + - THE NEW DMA WILL INCORPORATE BACKWARD COMPATIBILITY TO THE OLD DMA + IN BOTH PINOUT AND FUNCTIONALITY. + + - THE NEW FEATURES IN ADDITION TO THE OLD ARE AS FOLLOWS: + + 1) VARIABLE PIXEL SIZE PROCESSING. THE NEW DMA CAN PROCESS + 1 TO 8 BIT PIXELS THAT ARE STORED IN IMAGE MEMORY IN A + SERIAL FASHION. + + EXAMPLE: 5 BIT PIXELS STORED INTO 8 BIT EPROM + +---+---+---+---+---+---+---+---+ + |P1 |P1 |P1 |P1 |P1 |P2 |P2 |P2 | + +---+---+---+---+---+---+---+---+ + |P2 |P2 |P3 |P3 |P3 |P3 |P3 |P4 | + +---+---+---+---+---+---+---+---+ + |P4 |P4 |P4 |P4 |P5 |P5 |P5 |P5 | + +---+---+---+---+---+---+---+---+ + |P5 |P6 |P6 |P6 |P6 |P6 |P7 |P7 | + +---+---+---+---+---+---+---+---+ + + 2) THE NEW DMA CAN BE HALTED IN THE MIDDLE OF A TRANSFER + AND THEN BE RESTARTED TO RESUME THE TRANSFER. THIS IS + ACCOMPLISHED BY WRITING A ZERO TO THE DMA GO BIT (BIT 15) + IN THE CONTROL REGISTER. IN THE OLD DMA, THIS WOULD KILL + THE TRANSFER SO THAT IT COULD NOT BE RESTARTED. TO KILL + A TRANSFER IN THE NEW DMA, WRITE A ZERO TO THE DMA GO BIT 2 + TIMES IN A ROW. TO RESTART A TRANSFER AFTER HALTING, + WRITE A ONE TO THE DMA GO BIT IN THE CONTROL REGISTER. + + 3) IN ADDITION TO THE CLIPPING ACHIEVED BY MANIPULATING THE + OFFSET REGISTER, IN THE NEW DMA, A METHOD OF CLIPPING + USING REGISTERED CLIP VALUES IS AVAILABLE. THE HOST CAN + SPECIFY CLIP AMOUNTS TO THE DMA AND THE MATH NEEDED TO + IMPLEMENT A TRANSFER IS DONE INTERNAL TO THE DMA. + + 4) THE NEW DMA CAN DO A TRANSFER FROM THE IMAGE MEMORY TO THE + BIT MAP WITH A SCALING EFFECT, I.E. THE IMAGE CAN BE + SHRUNK OR ENLARGED. + + 5) THE NEW DMA IMPLEMENTS A COMPRESSION MODE IN WHICH LEADING + AND TRAILING ZERO DATA PIXELS CAN BE ENCODED IN A RUN LENGTH + FASHION TO SAVE ON IMAGE MEMORY. + + 6) OFF SCREEN CLIPPING CAN BE AUTOMATIC. THERE ARE FOUR + REGISTERS THAT SPECIFY THE WINDOW TO WHICH THE DMA CAN + TRANSFER DATA. ACCESS TO THESE REGISTERS IS TRICKY AND + IS EXPLAINED BELOW. + + 7) NOTE THAT THE CONTROL REGISTER AND THE OFFSET REGISTER + HAVE BEEN SWAPPED SO THAT THE MOVE MULTIPLE INSTRUCTION + CAN BE USED TO DOWNLOAD THE REGISTERS AND SET DMA GO + EFFICIENTLY. + + DMA # 2 - INTERNAL REGISTERS R5-R0 + + REGISTER # 7 - SOURCE VERTICAL SIZE REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | VERTICAL SIZE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 6 - SOURCE HORIZONTAL SIZE REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | HORIZONTAL SIZE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 5 - DESTINATION ADDRESS - Y + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | DESTINATION Y COORDINATE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 4 - DESTINATION ADDRESS - X + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | DESTINATION X COORDINATE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 3 - SOURCE ADDRESS - HIGH ORDER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | SOURCE ADDRESS UPPER 16 BITS | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 2 - SOURCE ADDRESS - LOW ORDER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | SOURCE ADDRESS LOWER 16 BITS | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 1 - CONTROL REGISTER ** SEE NOTE 1 BELOW + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + |DGO| PIX SIZE |TM1|TM0|LM1|LM0|CMP|CLP|VFL|HFL| PIXEL OPS | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 0 - OFFSET REGISTER / RCLIP-LCLIP VALUES + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | OFFSET VALUE FOR OLD STYLE CLIPPING | + | LEFT CLIP PIXELS VALUE | RIGHT CLIP PIXELS VALUE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + ** NOTE 1: + DGO - BIT 15 - DMA GO / DMA HALT + PIX - BITS 14-12 - PIXEL SIZE (0 = 8 BITS) + TM1 - BIT 11 - DMA COMPRESS TRAIL PIX MULTIPLIER BIT 1 + TM2 - BIT 10 - DMA COMPRESS TRAIL PIX MULTIPLIER BIT 0 + LM1 - BIT 9 - DMA COMPRESS LEAD PIX MULTIPLIER BIT 1 + LM0 - BIT 8 - DMA COMPRESS LEAD PIX MULTIPLIER BIT 0 + CMP - BIT 7 - DMA COMPRESS MODE + CLP - BIT 6 - DMA CLIP ON = 1 (USING U,D,L,R METHOD) + VFL - BIT 5 - VERTICAL FLIP (FLIP ABOUT X AXIS) + HFL - BIT 4 - HORIZONTAL FLIP (FLIP ABOUT Y AXIS) + OPS - BITS 3-0 - PIXEL CONSTANT/SUBSTITUTION OPS + + ** NOTE 2: IN COMPRESSION MODE, SCALING IS INHIBITED AND + CLIPPING IS INHIBITED. + + + + DMA # 2 - INTERNAL REGISTERS R15-R6 + + REGISTER # 15 - CONFIG REGISTER ** SEE NOTE 3 BELOW + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | "ZERO" DETECT BYTE |XPG|DSZ|WIN|CF4|CF3|CF2|CF1|CF0| + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 14 - RESERVED - TEST REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 13 - R/B WINDOW BORDER REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | | | | | | | RIGHT / BOTTOM WINDOW BORDER | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 12 - L/T WINDOW BORDER REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | | | | | | | LEFT / TOP WINDOW BORDER | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 11 - SCALE REGISTER - Y + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | Y SCALE INTEGER | Y SCALE FRACTION | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 10 - SCALE REGISTER - X + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | X SCALE INTEGER | X SCALE FRACTION | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 9 - CONSTANT REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | ODD PIXEL CONSTANT | EVEN PIXEL CONSTANT | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + REGISTER # 8 - PALETTE REGISTER + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | ODD PALETTE VALUE | EVEN PALETTE VALUE | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + + ** NOTE 3: + XPG - BIT 7 - EXTRA PAGE BIT + DSZ - BIT 6 - DESTINATION SIZE + WIN - BIT 5 - TOP/BOT - RIGHT/LEFT WINDOWING BIT + CF4 - BIT 4 - CONFIG TIMING 4 + CF3 - BIT 3 - CONFIG TIMING 3 + CF2 - BIT 2 - CONFIG TIMING 2 + CF1 - BIT 1 - CONFIG TIMING 1 + CF0 - BIT 0 - CONFIG TIMING 0 + + + + DMA # 2 - CLIPPING AN IMAGE + + OVERVIEW: + - AN IMAGE THAT IS STORED IN IMAGE MEMORY CAN BE + TRANSFERRED TO THE BIT MAP BY THE DMA IN ITS ENTIRETY + OR WE CAN DMA A PORTION OF THIS IMAGE OUT TO THE BIT + MAP. IT IS POSSIBLE TO "CLIP" AN IMAGE BY TRANSFERRING + ONLY THE PORTION OF THE IMAGE DESIRED. + + IMPLEMENTATION: + - THERE ARE TWO WAYS TO IMPLEMENT THIS: + 1) THE OFFSET METHOD (OLD STYLE). + 2) THE REGISTER CLIP METHOD (NEW FEATURE). + - THE OFFSET REGISTER CAN BE CLIPPING PURPOSES: + REGISTER #0 - CLIP REGISTER - X + - THIS REGISTER CONTAINS THE AMOUNTS TO WHICH THE IMAGE + WILL BE CLIPPED IN THE HORIZONTAL OR X DIRECTION. + - IN REGISTER #0 THE UPPER BYTE IS THE CLIP AMOUNT OFF THE + LEFT AND THE LOWER BYTE IS THE CLIP AMOUNT OFF OF THE RIGHT + - TO TURN THE REGISTER CLIPPING CAPABILITY ON, SET THE + CONTROL REGISTER BIT CLP (BIT 6) TO A ONE. + + EXAMPLES: + + UNCLIPPED IMAGE: + +---+---+---+---+---+---+---+---+ + | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | + +---+---+---+---+---+---+---+---+ + |11 |12 |13 |14 |15 |16 |17 |18 | + +---+---+---+---+---+---+---+---+ + |21 |22 |23 |24 |25 |26 |27 |28 | + +---+---+---+---+---+---+---+---+ + + EXAMPLE 1: + REGISTER 0 = 0201 X + CLIPPED IMAGE: + +---+---+---+---+---+ + | 3 | 4 | 5 | 6 | 7 | + +---+---+---+---+---+ + |13 |14 |15 |16 |17 | + +---+---+---+---+---+ + |23 |24 |25 |26 |27 | + +---+---+---+---+---+ + + EXAMPLE 2: + REGISTER 12 = 0004 X + CLIPPED IMAGE: + +---+---+---+---+ + | 1 | 2 | 3 | 4 | + +---+---+---+---+ + |11 |12 |13 |14 | + +---+---+---+---+ + |21 |22 |23 |24 | + +---+---+---+---+ + + + + + DMA # 2 - TRANSFERRING A SCALED IMAGE + + OVERVIEW: + - A SINGLE IMAGE THAT IS STORED IN IMAGE MEMORY CAN BE + TRANSFERRED TO THE BIT MAP BY THE DMA AT ITS NOMINAL + SIZE (1:1) OR AT A "SCALED" SIZE. THIS SCALING CAN + TRANSFER AN IMAGE TO THE BIT MAP AT A LARGER OR SMALLER + RATIO IN THE X OR Y DIRECTION OR BOTH. + - TO SCALE AN IMAGE, I.E. ENLARGE OR SHRINK, THE IMAGE TO + BE TRANSFERRED TO THE BIT MAP IS "SAMPLED" BY TRAVERSING + EACH LINE WITH THE INTENTION OF SELECTING PIXELS FROM THAT + LINE AT A PREDETERMINED RATE. THIS RATE CAN BE ONE PIXEL + PER SAMPLE FOR A 1:1 TRANSFER. THE VARIANCE OF THIS RATE + WILL CAUSE THE IMAGE TO BE SCALED TO OTHER THAN 1:1. + - IF THE RATE IS, FOR EXAMPLE, ONE SAMPLE PER EVERY TWO + PIXELS, THE IMAGE WILL BE TRANSFERRED TO THE BIT MAP SKIPPING + EVERY OTHER PIXEL THUS SHRINKING IT AT A RATIO OF 1:2. + - IF THE RATE IS ONE SAMPLE PER EVERY ONE HALF PIXELS, THE + IMAGE WILL BE TRANSFERRED TO THE BIT MAP DUPLICATING EVERY + PIXEL THUS ENLARGING IT AT A RATIO OF 1:1/2 OR 2:1. + + IMPLEMENTATION: + - TWO 16 BIT REGISTERS EXIST FOR SCALING PURPOSES: + REGISTER # 11 - SCALE REGISTER - Y + REGISTER # 10 - SCALE REGISTER - X + - THESE REGISTERS CONTAIN THE RATIOS TO WHICH THE IMAGE + WILL BE SCALED (1:FACTOR). + - IN REGISTER #11 THE UPPER BYTE IS THE FACTOR INTEGER AND + THE LOWER BYTE IS THE FACTOR FRACTION IN THE Y DIRECTION. + - IN REGISTER #10 THE UPPER BYTE IS THE FACTOR INTEGER AND + THE LOWER BYTE IS THE FACTOR FRACTION IN THE X DIRECTION. + - THE RATIO IS 1:(INT + FRAC/256). + - TO TURN THE SCALING CAPABILITY ON, LOAD AT LEAST ONE SCALE + REGISTER WITH SOMETHING OTHER THAN 0100 (1:1) SCALING. + + EXAMPLES: + + UNSCALED IMAGE: + +---+---+---+---+---+---+---+---+ + | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | + +---+---+---+---+---+---+---+---+ + |11 |12 |13 |14 |15 |16 |17 |18 | + +---+---+---+---+---+---+---+---+ + + EXAMPLE 1: + REGISTER 11 = 0100 VERT + REGISTER 10 = 0080 HORZ + SCALED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + |11 |11 |12 |12 |13 |13 |14 |14 |15 |15 |16 |16 |17 |17 |18 |18 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + SEE NEXT PAGE FOR MORE EXAMPLES. + + + DMA # 2 - TRANSFERRING A SCALED IMAGE (CONTINUED) + + IMPLEMENTATION (CONTINUED): + + EXAMPLE 2: + REGISTER 11 = 0080 VERT + REGISTER 10 = 0100 HORZ + SCALED IMAGE: + +---+---+---+---+---+---+---+---+ + | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | + +---+---+---+---+---+---+---+---+ + | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | + +---+---+---+---+---+---+---+---+ + |11 |12 |13 |14 |15 |16 |17 |18 | + +---+---+---+---+---+---+---+---+ + |11 |12 |13 |14 |15 |16 |17 |18 | + +---+---+---+---+---+---+---+---+ + + EXAMPLE 3: + REGISTER 11 = 0080 VERT + REGISTER 10 = 0080 HORZ + SCALED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + |11 |11 |12 |12 |13 |13 |14 |14 |15 |15 |16 |16 |17 |17 |18 |18 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + |11 |11 |12 |12 |13 |13 |14 |14 |15 |15 |16 |16 |17 |17 |18 |18 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + EXAMPLE 4: + REGISTER 11 = 0080 VERT + REGISTER 10 = 0200 HORZ + SCALED IMAGE: + +---+---+---+---+ + | 1 | 3 | 5 | 7 | + +---+---+---+---+ + | 1 | 3 | 5 | 7 | + +---+---+---+---+ + |11 |13 |15 |17 | + +---+---+---+---+ + |11 |13 |15 |17 | + +---+---+---+---+ + + EXAMPLE 5: + REGISTER 11 = 00C0 VERT + REGISTER 10 = 00C0 HORZ + SCALED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | 1 | 2 | 3 | 3 | 4 | 5 | 5 | 6 | 7 | 7 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | 1 | 2 | 3 | 3 | 4 | 5 | 5 | 6 | 7 | 7 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + |11 |11 |12 |13 |13 |14 |15 |15 |16 |17 |17 |18 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + + + + DMA # 2 - COMPRESSION OF LEADING AND TRAILING ZEROS + + OVERVIEW: + - TO SAVE IMAGE SPACE, IT MAY BE USEFUL TO DO SOME DATA + COMPRESSION ON IMAGES. THAT IS WHAT WE WILL TRY TO DO. + - IN THEORY, SINCE ALL IMAGES ARE STORED AS RECTANGLES, + THERE SHOULD BE A SAVINGS IN COMPRESSING THE TRANSPARENT + PIXELS (I.E. THE ZERO PIXEL DATA). + - ON A LINE BY LINE BASIS, IF WE HAD INFORMATION PERTAINING + TO THE NUMBER OF LEADING AND TRAILING ZERO DATA PIXELS, WE + COULD DO A SIMPLE RUN LENGTH ENCODING OF THESE USELESS PIXELS. + - FURTHERMORE, IF WE ADDED THIS INFORMATION TO THE ACTUAL + IMAGE DATA, WE COULD DO AN "ON THE FLY" DECODE OF THIS + INFORMATION AND ACHIEVE A DECOMPRESSION OF AN ENCODED + (COMPRESSED) IMAGE, THUS SAVING IMAGE MEMORY AND MONEY. + + IMPLEMENTATION: + ON SELECTED IMAGES, THE FIRST BYTE WILL BE ALLOCATED + PER LINE OF THE IMAGE TO INDICATE NUMBER OF LEADING AND + TRAILING ZERO PIXELS THAT HAVE BEEN COMPRESSED. + SEE EXAMPLE BELOW: + + UNCOMPRESSED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 |18 |18 | 0 | 4 |44 |45 |66 |67 |65 | 0 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 9 |13 |13 |11 | 8 | 0 | 0 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + |19 |18 |18 | 0 | 0 | 0 |45 |66 |67 |65 |68 |69 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + + COMPRESSED IMAGE: + +---+---+---+---+---+---+---+---+---+---+ + |21 |18 |18 | 0 | 4 |44 |45 |66 |67 |65 | + +---+---+---+---+---+---+---+---+---+---+ + |34 | 9 |13 |13 |11 | 8 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+ + |00 |19 |18 |18 | 0 | 0 | 0 |45 |66 |67 |65 |68 |69 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+ + + IN THE TOP LINE OF THE COMPRESSED IMAGE, + THE FIRST BYTE IS A 12: + 1 LEADING ZERO PIXEL, 2 TRAILING ZERO PIXELS + + IN THE CENTER LINE OF THE COMPESSED IMAGE, + THE FIRST BYTE IS A 43: + 4 LEADING ZERO PIXELS, 3 TRAILING ZERO PIXELS + + IN THE BOTTOM LINE OF THE COMPESSED IMAGE, + THE FIRST BYTE IS A 00: + 0 LEADING ZERO PIXELS, 0 TRAILING ZERO PIXELS + + THE DMA WILL DECODE THIS PROPERLY IF THE PROPER BITS ARE + SET IN THE CONTROL REGISTER: + TM2 - BIT 11 = 0 + TM2 - BIT 10 = 0 + LM1 - BIT 9 = 0 + LM0 - BIT 8 = 0 + CMP - BIT 7 = 1 + + + DMA # 2 - COMPRESSION OF LEADING AND TRAILING ZEROS (CONTINUED) + + OBSERVATIONS: + 1) THE TOP NIBBLE (4 BITS) OF THE FIRST BYTE IN EACH + COMPRESSED LINE REPRESENTS THE NUMBER OF TRAILING + ZERO PIXELS. + + 2) THE BOTTOM NIBBLE (4 BITS) OF THE FIRST BYTE IN EACH + COMPRESSED LINE REPRESENTS THE NUMBER OF LEADING + ZERO PIXELS. + + 3) THE OVERALL SAVINGS OF BYTES IN THE ABOVE EXAMPLE + IS 7 BYTES. + + 4) NOTE THAT IN THE BOTTOM LINE WE ACTUALLY USED ONE + MORE BYTE THAN BEFORE. BE CAREFUL OF WHAT IMAGES + YOU TRY TO COMPRESS. + + 5) THE ABOVE EXAMPLE USES 8 BIT PIXELS. THE NEW DMA + WILL BE ABLE TO MANIPULATE IMAGES OF N BITS PER PIXEL + (N = 1 TO 8). IN THE COMPRESSION MODE, THE ABOVE + SCENARIO DOES NOT CHANGE. EACH LINE WILL START WITH + AN 8 BIT VALUE FOR THE COMPRESSION INFORMATION AND + THERE FOLLOWS THE PIXELS IN SERIAL FASHION. THE + SAVINGS IN COMPRESSION ARE THEN REALIZED IN PIXELS + AND NOT BYTES. + + BIT SAVINGS = (PIXELS COMPRESSED * BITS PER PIXEL) - + (NUMBER OF LINES * 8 BITS). + + 6) THE TMx,LMx BITS IN THE CONTROL REGISTER (BITS 8-11, + THE COMPRESS MULTIPLIER BITS) CONTROL THE FACTORS WHICH + IS MULTIPLIED BY THE NIBBLE DATA TO OBTAIN THE NUMBER + OF LEADING/TRAILING ZERO PIXELS. + + TM1 TM0 LM1 LM0 MULTIPLIER + --- --- --- --- ----------------------- + X X 0 0 X 1 TO LEADING PIXELS + X X 0 1 X 2 TO LEADING PIXELS + X X 1 0 X 4 TO LEADING PIXELS + X X 1 1 X 8 TO LEADING PIXELS + 0 0 X X X 1 TO TRAILING PIXELS + 0 1 X X X 2 TO TRAILING PIXELS + 1 0 X X X 4 TO TRAILING PIXELS + 1 1 X X X 8 TO TRAILING PIXELS + + SEE EXAMPLES ON NEXT PAGE. + + + + DMA # 2 - COMPRESSION OF LEADING AND TRAILING ZEROS (CONTINUED) + + OBSERVATIONS (CONTINUED): + + EXAMPLE 1: + IF IN THE CONTROL REGISTER: + TM1 - BIT 11 = 0 + TM0 - BIT 10 = 0 + LM1 - BIT 9 = 0 + LM0 - BIT 8 = 0 + AND THE FIRST BYTE IN A COMPRESSED LINE IS 62 + THEN THERE ARE 2 LEADING ZERO PIXELS AND + THERE ARE 6 TRAILING ZERO PIXELS. + EXAMPLE 2: + IF IN THE CONTROL REGISTER: + TM1 - BIT 11 = 0 + TM0 - BIT 10 = 1 + LM1 - BIT 9 = 0 + LM0 - BIT 8 = 1 + AND THE FIRST BYTE IN A COMPRESSED LINE IS 62 + THEN THERE ARE 4 LEADING ZERO PIXELS AND + THERE ARE 12 TRAILING ZERO PIXELS. + EXAMPLE 3: + IF IN THE CONTROL REGISTER: + TM1 - BIT 11 = 1 + TM0 - BIT 10 = 1 + LM1 - BIT 9 = 1 + LM0 - BIT 8 = 0 + AND THE FIRST BYTE IN A COMPRESSED LINE IS 62 + THEN THERE ARE 8 LEADING ZERO PIXELS AND + THERE ARE 48 TRAILING ZERO PIXELS. + EXAMPLE 4: + IF IN THE CONTROL REGISTER: + TM1 - BIT 11 = 0 + TM0 - BIT 10 = 1 + LM1 - BIT 9 = 0 + LM0 - BIT 8 = 1 + + UNCOMPRESSED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 |18 |18 | 0 | 4 |44 |45 |66 |67 |65 | 0 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 9 |13 |13 |11 | 8 | 0 | 0 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + |19 |18 |18 | 0 | 0 | 0 |45 |66 |67 |65 |68 |69 | + +---+---+---+---+---+---+---+---+---+---+---+---+ + + COMPRESSED IMAGE: + +---+---+---+---+---+---+---+---+---+---+---+ + |01 | 0 |18 |18 | 0 | 4 |44 |45 |66 |67 |65 | + +---+---+---+---+---+---+---+---+---+---+---+ + |21 | 9 |13 |13 |11 | 8 | 0 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+ + |00 |19 |18 |18 | 0 | 0 | 0 |45 |66 |67 |65 |68 |69 | + +---+---+---+---+---+---+---+---+---+---+---+---+---+ + + SAVINGS ARE ONLY 5 PIXELS. + + + DMA # 2 - OFF SCREEN CLIPPING (WINDOWING) + + OVERVIEW: + - THE OVERHEAD OF CLIPPING IMAGES FOR THE SAKE OF OFF SCREEN + MANAGEMENT CAN BE REDUCED BY THE WINDOWING FEATURE OF THE + NEW DMA. + + IMPLEMENTATION: + - THERE ARE 4 REGISTERS IN THE NEW DMA WHICH SPECIFY + THE WINDOW BOUNDARIES TO WHICH AN IMAGE CAN BE TRANSFERRED. + THESE ARE: + + WINDOW REGISTER # 13 - DESTINATION ADDRESS UPPER LIMIT (WIN = 1) + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | UPPER LIMIT | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + WINDOW REGISTER # 12 - DESTINATION ADDRESS UPPER LIMIT (WIN = 1) + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | LOWER LIMIT | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + WINDOW REGISTER # 13 - DESTINATION ADDRESS LEFT LIMIT (WIN = 0) + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | LEFT LIMIT | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + WINDOW REGISTER # 12 - DESTINATION ADDRESS RIGHT LIMIT (WIN = 0) + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 | 0 | 0 | 0 | RIGHT LIMIT | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + - THE VALUES THAT CAN BE PUT INTO THESE REGISTERS ARE + 0 TO 511. + + - ACCESS TO THESE REGISTERS IS AS FOLLOWS: + 1) SET BIT 5 OF THE CONFIG REGISTER TO A 0 FOR LEFT/RIGHT. + 2) SET BIT 5 OF THE CONFIG REGISTER TO A 1 FOR UPPER/LOWER. + + + + + + DMA # 2 - LIMITATIONS + + OVERVIEW: + - THERE ARE A FEW LIMITAIONS TO THE FEATURES DESCRIBED + ABOVE. THESE LIMITAIONS ARE OUTLINED BELOW. + + SCALING LIMITATIONS: + - IN GROWING AND SHRINKING OF IMAGES, THERE IS A LIMIT TO + WHICH AN IMAGE CAN BE SCALED IN THE X DIRECTION (I.E. + HORIZONTALLY). THE LIMIT OF SHRINKING AN IMAGE DEPENDS + ON THE NUMBER OF BITS PER PIXEL IN THE IMAGE. THE TABLE + BELOW SHOWS THE MAXIMUM SCALE FACTOR THAT CAN BE USED + FOR WHAT TYPE OF IMAGES. + + + MAXIMUM SCALE FACTOR FOR SHRINK IN X DIRECTION + ---------------------------------------------- + + #BITS/PIXEL INT FRACTION + ----------- ---- -------- + 1 1F FF + 2 10 00 + 3 0A AA + 4 08 00 + 5 06 66 + 6 05 55 + 7 04 92 + 8 04 00 + + + + MINIMUM SCALE FACTOR FOR GROW IN X DIRECTION + -------------------------------------------- + + #BITS/PIXEL INT FRACTION + ----------- ---- -------- + 1 00 01 + 2 ?? ?? + 3 ?? ?? + 4 ?? ?? + 5 ?? ?? + 6 ?? ?? + 7 ?? ?? + 8 00 40 + + + COMPRESSION LIMITATIONS: + - IN COMPRESS MODE, CLIPPING OR SCALING ARE NOT ALLOWED + \ No newline at end of file diff --git a/DOC/FAX.DOC b/DOC/FAX.DOC new file mode 100644 index 0000000..a40a419 --- /dev/null +++ b/DOC/FAX.DOC @@ -0,0 +1,434 @@ +Jamie, + + We chaned the ball boundary check so that it brings the ball back + inbounds when it finds itself out of bounds. This solves the bug + where the ball can somehow glitch off of the rim into a wild x + range, sometimes off screen! + + We also put in a passfudgecnt variable that solves the problem + of players not being able to pick up a loose ball. The players all + thought the ball was a pass still enroute to a receiver, however + the receiver was impeeded and could not get into position to receive + the pass. Now, as soon as the ball hits a boundary, it clears the + pass receive process pointer after 5 ticks. This tick countdown + happens in the main loop like all the others... + + +;---------- +; check ball X coor limits + +;DJT Start + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + + move *a8(OXVEL),a1,L + cmpi LFTCRT_X,a6 ;Chk left X limit + jrlt #xlow + cmpi RGTCRT_X,a6 ;Chk right X limit + jrle #xok + + move a1,a1 + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad +#xlow + move a1,a1 + jrp #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel +#xbad + .asg 5,PASSFUDGECNT + BSSX passfudge,16 + + move @ballprcv_p,a1,L + jrz #xnop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#xnop +;DJT End + move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + +;DJT removed + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +;DJT Start +#zbad + move @ballprcv_p,a1,L + jrz #znop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#znop +;DJT End + move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + + + + + +Jamie, + + This is the fudegecnt tick counter... + + + +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + +;DJT Start + .ref passfudge + .ref ballpnum + move @passfudge,a0 + jrle #fok + subk 1,a0 + move a0,@passfudge + jrnz #fok + move @ballpnum,a14 + jrnn #fok + move a0,@ballprcv_p,L + .if DEBUG + LOCKUP + .endif ;DEBUG +#fok +;DJT End + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +;DJT Start + + + + + + + + + +Jamie, + + These are the new values for a spin move... + + +See-ya......... Hit a few balls for us... + + + + + + + + + + + + + + + .asg 24000h,XVEL_15 ;24000h + .asg 58000h,ZVEL_15 ;50000h + .asg 5a400h,XVEL_37 ;52000h + .asg 22000h,ZVEL_37 ;22000h + .asg 47500h,XVEL_2468 ;40D00h + .asg 49f00h,ZVEL_2468 ;43300h + +;DJT End +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end +#ok diff --git a/DOC/FUCKUP3.TXT b/DOC/FUCKUP3.TXT new file mode 100644 index 0000000..f55b404 --- /dev/null +++ b/DOC/FUCKUP3.TXT @@ -0,0 +1,14 @@ +This is a fairly consistent problem anytime I try to use conditional breakpoints, +esp. when disabling & re-enabling one! Course I'm still using v1.0. Fixed? - DJT + +PSY_WIN caused an invalid page fault in +module KERNEL32.DLL at 0137:bff79249. +Registers: +EAX=f00003c6 CS=0137 EIP=bff79249 EFLGS=00010202 +EBX=000003e5 SS=013f ESP=006ef7f4 EBP=006ef850 +ECX=000003c4 DS=013f ESI=00000000 FS=0df7 +EDX=00000000 ES=013f EDI=00810000 GS=0000 +Bytes at CS:EIP: +8b 02 25 fc ff ff 0f 8d 5a 08 03 c8 8d 42 04 8b +Stack dump: +006ef850 00000047 041ab530 000003e5 00000000 0043d078 00810000 00000000 041ab530 00964620 00000001 0000004a 0043c7ba 041ab530 00418183 041ab530 \ No newline at end of file diff --git a/DOC/JSCAN.DOC b/DOC/JSCAN.DOC new file mode 100644 index 0000000..d69d6da --- /dev/null +++ b/DOC/JSCAN.DOC @@ -0,0 +1,6 @@ +jscan is just a dummy checker that scans .asm files for CALLR's to functions +not defined in that module. It's fast. Just put it in your make.ini file, +after preasm but before GSPA, and have it run on the .axx output of preasm. +I've put a modified make.ini file in here as an example. + + \ No newline at end of file diff --git a/DOC/LOADBG.DOC b/DOC/LOADBG.DOC new file mode 100644 index 0000000..c359eca --- /dev/null +++ b/DOC/LOADBG.DOC @@ -0,0 +1,61 @@ + + +This document is an addendum to the FAX document describing the layout +of the background files, *.bdb and *.bdd. + +The primary concern of this addendum is to clear up an error in the +original document. + +========================================================================= + + +The .BDB (Block) file layout is as described originally... + + +First line... + + (ASCII) NAME xlength ylength zlength numMods numPals numBlocks + + +Module Definitions follow of the form... + + (ASCII) NAME upper_lft_x lower_rt_x upper_lft_y lower_rt_y + (There are numMods of these) + + +Block Definitions follow of the form... + + (ASCII) univ_Z univ_X univ_Y Hdr Palette + (There are numBlocks of these) + + + +The .BDD (Data) file begins with an ASCII line + + (ASCII) number_of_images + +For each image there is a header + + (ASCII) old_hdr width height big_pal + + +Image data and palette information follow. + +======================================================================== + + +There has been some confusion about the Hdr field in the +Block Definition. Also the original document stated that the +old_hdr field of the image header could be ignored. This is not so. + +The Hdr field of the block definition will match the old_hdr field of +one of the image headers. + +To find which image is associated with a block, you must scan +through the image headers until you find one whose old_hdr +field matches the Hdr field of the block you are working on. + +The index of that header is the image index. + + + \ No newline at end of file diff --git a/DOC/LOADIMG.DOC b/DOC/LOADIMG.DOC new file mode 100644 index 0000000..66f6530 --- /dev/null +++ b/DOC/LOADIMG.DOC @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Software System + ------------------------------------------------- + + + Loadimg image loading facility + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + Warren B. Davis + + + +Some questions people ask about LOADIMG... + + +1) WHAT IS IT? + + LOADIMG is a program which takes image data out of any number of + WIMP image libraries (.img files) and downloads them to good old + system Z image memory EXACTLY WHERE YOUR PROGRAM EXPECTS IT TO BE!!! + It can also generate source tables which you can link into your + program so it knows where to find each image. With the proper flag + settings, you can have LOADIMG perform either or both of these + functions. + + +2) SOUNDS PRETTY FUCKIN' AMAZING. HOW DO YOU DO IT? + + Well, frankly, it's magic. + + +3) HOW DO I GET IT TO WORK FOR ME? + + Follow these simple instructions. It's as easy as 1,2,3! + + First, you must generate a .lod file for your game. + This is simply a text file which contains names of WIMP image libraries + and the images within them which you wish to download. You can + create this file with a text editor or have WIMP generate it for you. + (See Note 1 for more details on this) + + Second, invoke LOADIMG with the /t option. This creates six files + imgtbl.asm, imgpal.asm, imgtbl.glo, bgndtbl.asm, bgndpal.asm and + bgndtbl.glo. All of the .asm files should be assembled and linked + with your program. The .glo files should be included in any source + module which references these images. + + Third, before you load your executable, you can invoke LOADIMG with + no flags. This actually goes into the WIMP .img files specified in your + .lod file and transfers the data to image RAM. + + +3) WHAT ABOUT WHEN MY IMAGES CHANGE? + + If the sizes of the images remain the same and no images are + added or deleted, you need only redo step 3. If the sizes change, + but no images are added or deleted, you must redo steps 2 and 3. + To add or delete images, the .lod file must be edited and then + steps 2 and 3 repeated. + + + +4) IT ALL SEEMS SO EASY! WHAT'S THE CATCH? + + No catch! But if you want to risk getting confused, you can read on + to find out all the nasty details... + + + The .lod file can have any filename. It can be in any directory. + However, you must set an environment variable SRCDIR to be the + directory where your .lod file can be found. When WIMP generates + a .lod file for you, it automatically places it in SRCDIR. + If SRCDIR is not defined, the directory you are currently in is + used. The .lod file created by WIMP is always called imgtbl.lod. + You can rename it if you like. You must manually edit a .lod file + to combine images from different WIMP .img files. + + + The format for the .lod file is... + A fully qualified .img filename starting in column 1. + A series of lines starting with "---> " followed by as many + image names as will fit on a line separated by commas. + A line that starts with "BBB> " expects a list of Blimp + background files. + + + The files imgtbl.asm, imgpal.asm, imgtbl.glo, bgndtbl.asm, + bgndpal.asm and bgndtbl.glo are always created in the directory + which you are in when you invoke LOADIMG. + + + The invocation for LOADIMG is as follows... + + LOADIMG filename flags + + where filename is the name of your .lod file (minus + a directory and extension) + and flag can be /t - generate tables only + /b - generate tables and download images + /n - do not detect duplicate data + /v - verbose mode, report lots of stuff + + if omitted, images are downloaded only. + + \ No newline at end of file diff --git a/DOC/MPROC.DOC b/DOC/MPROC.DOC new file mode 100644 index 0000000..cf39c07 --- /dev/null +++ b/DOC/MPROC.DOC @@ -0,0 +1,290 @@ +KILL KILL + +Description: Kill one process + +------------------------------------------------------------------------------ + +Input: A0 --> process structure to kill + +Returns: none + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*KILL PROCESS +*A0 POINTS TO PROCESS TO KILL +*IF PROCESS NOT PRESENT, CAUSES ERROR +*TO KILL YOURSELF SUCIDE MUST BE USED, +*IF YOU ATTEMPT TO KILL YOURSELF IT WILL JUST RETURN +* +KILL: + CMP A0,A13 ;KILLING YOURSELF? + JREQ KILLXXX ;BR = YES, JUST ESCAPE + MMTM SP,A1,A2 + MOVI ACTIVE,A1,L +KILLP: + MOVE A1,A2 ;SAVE PREVIOUS + MOVE *A1,A1,L + JRNZ KILLCHK + + LOCKUP + +* CALLERR 2 ;LOG THE ERROR +* JRUC KILLX +KILLCHK + CMP A1,A0 + JRNE KILLP ;NOT FOUND KEEP LOOKING + MOVE *A0,*A2,L ;LINK AROUND IN ACTIVE LIST + MOVE @FREE,A1,L ;LINK INTO FREE LIST AT START + MOVE A1,*A0,L + MOVE A0,@FREE,L +KILLX + MMFM SP,A1,A2 +KILLXXX + RETS + +GETPRC GETPRC + +Description: Create a process + +------------------------------------------------------------------------------ + +Input: A1 = ID + A7 = starting PC address + A8-A11 passed to new process + +Returns: A0 --> created process + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*CREATE A PROCESS +*A1=ID,A7=PC,A8,A9,A10,A11 PASSED PARAMETERS +*A13=CURRENT PROCESS +*A0 IS RETURNED POINTING TO CREATED PROCESS +* +GETPRC: + MMTM SP,A2,A12 + MOVE @FREE,A0,L + JREQ GETPX ;NONE AVAILABLE + MOVE *A0,A2,L + MOVE A2,@FREE,L ;REMOVE FROM FREE LIST + MOVE *A13,*A0,L ;LINK INTO ACTIVE LIST AFTER CURRENT PROCESS + MOVE A0,*A13,L ;CRPROC>>NEW PROC + JRUC XFERPRC0 + +XFERPROC XFERPROC + +Description: Transfer control of an existing process + +------------------------------------------------------------------------------ + +Input: A0 --> process to be transfered + A1 = new i.d. + A7 = wake up address + A8-A11 = passed to process + +Returns: none + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: + +* XFERPROC - TRANSFER CONTROL OF AN EXISTING PROCESS +* A0 = PTR OF PROCESS TO BE XFER'D +* A1 = NEW I.D. +* A7 = WAKE UP +* A8 - A11 = PASSED TO THE XFER'D PROC + +XFERPROC + mmtm SP,A2,A12 +XFERPRC0 + MOVE A0,A2 + ADDI PDATA,A2 + move A0,A12 ;RESET PROCESS STACK POINTER + addi PRCSIZ,A12 + MMTM A2,A7,A8,A9,A10,A11,A12 ;STUFF wake, regs, p stack ptr + movk 1,A12 + move A12,-*A2,W ;WAKE UP AS SOON AS POSSIBLE + move A1,-*A2,W ;ID +GETPX + mmfm SP,A2,A12 + RETS + +KILALL KILALL + +Description: Kill a class of processes + +------------------------------------------------------------------------------ + +Input: A0 = I.D. to kill + A1 = mask bits (zeros are "don't care" bits) + +Returns: none + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*KILL A CLASS OF PROCESSES +*A0=PROCID (16 BITS) ,A1=MASK (16 BITS) +*MASK BITS OF ZERO ARE DONT CARES +*WILL NOT KILL CALLING PROCESS (A13) +* +KILALL: + MMTM SP,A0,A1,A2,A3,A4,A5 + AND A1,A0 ;FORM MATCH + MOVI ACTIVE,A2,L + +KILALP: + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT + JREQ KILALX ;ALL DONE + MOVE *A2(PROCID),A4 + AND A1,A4 ;CAN DONT CARE BITS + CMP A0,A4 ;MATCH? + JRNE KILALP ;NO + + CMP A2,A13 ;CURRENT PROCESS? + JREQ KILALP ;YES DONT KILL + + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @FREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@FREE,L ;POINT FREE TO CELL + MOVE A3,A2 + JRUC KILALP ;KILL THE REST +KILALX: + MMFM SP,A0,A1,A2,A3,A4,A5 + RETS + +EXISTP EXISTP + +Description: Find at least one process other than calling process + +------------------------------------------------------------------------------ + +Input: A0 = I.D. to kill + A1 = mask bits (zeros are "don't care" bits) + +Returns: A0 = pointer to process (Zero bit clear) + or + A0 = 0 (no match) Zero bit set + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: +* +*FIND IF AT LEAST ONE PROCESS, OTHER THAN CALLING PROCESS, +*EXISTS. +*A0=PROCID (16 BITS) ,A1=MASK (16 BITS) +*MASK BITS OF ZERO ARE DONT CARES +*RETURNS: +* Z BIT SET = NO MATCH, A0 = 0 +* Z BIT CLR = MATCH, A0 = PTR TO PROCESS +* +EXISTP: + MMTM SP,A1,A2,A4 + SEXT A0,W + AND A1,A0 ;FORM MATCH + MOVI ACTIVE,A2,L + +EXNXT: + MOVE *A2,A2,L ;GET NEXT + JREQ EXSC ;ALL DONE + MOVE *A2(PROCID),A4 + AND A1,A4 ;CAN DONT CARE BITS + CMP A0,A4 ;MATCH? + JRNE EXNXT ;NO + + CMP A2,A13 ;CURRENT PROCESS? + JREQ EXNXT ;YES, THEN WE DON'T CARE +EXSC + MOVE A2,A0 + MMFM SP,A1,A2,A4 + RETS + +GET8 GET8 +GET9 +GET10 +GET11 + +Description: Get a preserved register from a sleeping process + +------------------------------------------------------------------------------ + +Input: A0 --> sleeping process + +Returns: A8,A9,A10, or A11 = preserved value + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: +*GET A PRESERVED REGISTER FROM A SLEEPING PROCESS +*A0 = PTR TO SLEEPER + +GETA11 move *A0(PA11),A11,L + RETS +GETA10 move *A0(PA10),A10,L + RETS +GETA9 move *A0(PA9),A9,L + RETS +GETREGS + move *A0(PA11),A11,L + move *A0(PA10),A10,L + move *A0(PA9),A9,L +GETA8 move *A0(PA8),A8,L + RETS + +PUT8 PUT8 +PUT9 +PUT10 +PUT11 + +Description: Store a value into a sleeping process' register store area + +------------------------------------------------------------------------------ + +Input: A0 --> sleeping process + +Returns: none + +Found in: MPROC.ASM + +------------------------------------------------------------------------------ + +Comments: + +PUTA11 move A11,*A0(PA11),L + RETS +PUTA10 move A10,*A0(PA10),L + RETS +PUTA9 move A9,*A0(PA9),L + RETS +PUTREGS + move A11,*A0(PA11),L + move A10,*A0(PA10),L + move A9,*A0(PA9),L +PUTA8 move A8,*A0(PA8),L + RETS +PUTA7 +PUTWAKE move A7,*A0(PWAKE),L + RETS + \ No newline at end of file diff --git a/DOC/NDSP1.DOC b/DOC/NDSP1.DOC new file mode 100644 index 0000000..953bd78 --- /dev/null +++ b/DOC/NDSP1.DOC @@ -0,0 +1,777 @@ +STOPOBJS STOPOBJS + +Description: Zero velocities of all objects on OBJLST + +------------------------------------------------------------------------------ + +Input: none + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +STOPOBJS + MMTM SP,A0,A1 + CLR A0 + MOVI OBJLST,A1 +SOBJS1 + MOVE *A1,A1,L + JREQ SOBJSX + MOVE A0,*A1(OXVEL),L + MOVE A0,*A1(OYVEL),L + MOVE A0,*A1(OZVEL),L + JRUC SOBJS1 +SOBJSX + MMFM SP,A0,A1 + RETS + +SHADST SHADST + +Description: Start a shadow + +------------------------------------------------------------------------------ + +Input: A8 --> object to shadow + +Returns: A0 --> shadow obj (zero if no shadow was created) + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +*START A SHADOW +*INPUTS +*A8=OBJECT TO SHADOW +*RETURNS: +*A0=PTR TO SHADOW, OR 0 IF NO SHADOW WAS CREATED +* +SHADST: + MMTM SP,A1 + CALLR GETOBJ + JREQ SHADSTX ;NONE AVAIL + CALLR SHADCPY +SHADSTG + MOVI DUMCOLL,A1 + MOVE A1,*A0(OCVECT),L ;DUMMY COLLISION + CALLR INSOBJ + MOVI OID_SHAD,A1,W + MOVE A1,*A0(OID),W ;SET ID + MOVI >FDFD0000,A1 + MOVE A1,*A0(OPAL),L ;SET PALLETTE,COLOR + MOVE A8,*A0(OSHAD),L ;LINK TO SHADOWED OBJECT + MOVE A0,*A8(OSHAD),L ;LINK TO SHADOW +SHADSTX: + MMFM SP,A1 + RETS + +DFRMGRND DFRMGRND + +Description: Calculate an objects distance from the ground + +------------------------------------------------------------------------------ + +Input: A8 --> object + +Returns: A1 = distance from the ground + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*CALC DISTANCE FROM GROUND +*A8=OBJECT +*A1 RET WITH HT ABOVE GROUND +* +DFRMGRND + PUSH A2 + MOVE *A8(OSIZEY),A2,W + MOVE *A8(OYPOS),A1,W + ADD A2,A1 + NEG A1 + MMFM SP,A2 + RETS + +GETOBJ GETOBJ + +Description: Get a free object block for use + +------------------------------------------------------------------------------ + +Input: none + +Returns: A0 --> object block + Z bit set if no blocks were available + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* GETOBJ - GET A FREE OBJECT BLOCK FOR USE * +* RETURNS * +* A0 = PTR TO OBJECT BLOCK * +* IF NO BLOCKS WERE AVAILABLE THEN THE Z FLAG IS SET * +* * +************************************************************************** +GETOBJ: + MMTM SP,A1,A2 + MOVE @OFREE,A0,L ; pointer to next available obj block + jreq getox + move *A0,A2,L + move A2,@OFREE,L ; adjust pointer to free list + CLR A2 ; CLEAR OUT THE SHIT + MOVI (OBSIZ/16)-2,A1 + ADDK 32,A0 + SRL 1,A1 + JRNC GETOBJ1 + MOVE A2,*A0+,W +GETOBJ1 + MOVE A2,*A0+,L + DSJS A1,GETOBJ1 + SUBI OBSIZ,A0 ;RESTORE A0, SET NON ZERO FLAG +getox: + MMFM SP,A1,A2 ;DONT SCREW UP Z-FLAG + RETS + +FREEOBJ FREEOBJ + +Description: Put an object block back on the FREE list + +------------------------------------------------------------------------------ + +Input: A0 --> object block + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +FREEOBJ + PUSH A2 + MOVE @OFREE,A2,L + MOVE A2,*A0,L + MOVE A0,@OFREE,L ;BLOCK IS ON FREE LIST NOW + PULL A2 + RETS + +INSOBJ INSOBJ + +Description: Insert an object block onto the OBJECT LIST + +------------------------------------------------------------------------------ + +Input: A0 --> object block + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +*INSERT FOREGROUND OBJECT +INSOBJ: + mmtm sp,a1,a2,a3,a4,a5 + movi OBJLST,a4 +INSOBJ0: + move *A0(OZVAL),A1,L ; GET Z POSITION + MOVE *A0(OYVAL),A5,L ; GET Y POSITION +ins_loop: + move a4,a2 ; ptr to PREV in a2 + move *a2,a4,L ; ptr to NEXT in a4 + jreq INS_AT_END ; bra if at end of list + MOVE *A4(OZVAL),A3,L ; ZPOS in A3 + CMP A3,A1 + jrgt ins_loop + JRLT INS_AT_END + + MOVE *A4(OYVAL),A3,L ;TEST Y POSITION + CMP A3,A5 + JRGT ins_loop +INS_AT_END: + move a4,*a0,L ; put NEXT link in new block + move a0,*a2,L ; put link to new in PREV block + mmfm sp,a1,a2,a3,a4,a5 + rets + +DELOBJ DELOBJ + +Description: Delete an object block from the object list + +------------------------------------------------------------------------------ + +Input: A0 --> object block to delete + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +*DELETE FOREGROUND OBJECT +DELOBJ: + MMTM SP,A0,A2,A3,A4,A8 + MOVI OBJLST,A4 +del_loop: + move a4,a2 ; ptr to PREV in a2 + move *a2,a4,L ; ptr to NEXT in a4 + JRNZ DEL_CHK + LOCKUP +* CALLERR 5 ;REPORT THE PROBLEM + JRUC DELOBJX +***no_del: +*** jreq no_del ; ERROR if at end of list (HANG UP) +DEL_CHK + cmp a4,a0 + jrne del_loop + + move *a0,*a2,L ; put NEXT link in PREV block + move @OFREE,a2,L + move a2,*a0,L + move a0,@OFREE,L ; Return deleted block to free stack + +DELOBJX + MMFM SP,A0,A2,A3,A4,A8 + RETS + +KILOBJ KILOBJ + +Description: Kill a class from the object list + +------------------------------------------------------------------------------ + +Input: A0 = object id (16 bits) + A1 = mask (16 bits) + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +*KILL A CLASS FROM THE OBJECT LIST +KILOBJ: + MMTM SP,A0,A2,A3,A4,A5 + MOVI OBJLST,A2,L + +KILGEN + AND A1,A0 ;FORM MATCH + +KILOBP: + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT + JREQ KILOBX ;ALL DONE + MOVE *A2(OID),A4 + AND A1,A4 ;CAN DONT CARE BITS + CMP A0,A4 ;MATCH? + JRNE KILOBP ;NO + + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;POINT FREE TO CELL + MOVE A3,A2 + JRUC KILOBP ;KILL THE REST +KILOBX: + MMFM SP,A0,A2,A3,A4,A5 + RETS + +EXISTOBJ EXISTOBJ + +Description: Does an object from a certain class exist ? + +------------------------------------------------------------------------------ + +Input: A0 = object ID (16 bits) + A1 = mask bits (16 bits, where 0 = DONT CARE) + +Returns: A0 --> object (Z bit clear) + A0 = 0 means there is no object (Z bit set) + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +EXISTOBJ: + MMTM SP,A2,A3 + SEXT A0 + MOVI OBJLST,A2,L + AND A1,A0 ;FORM MATCH +EXISTOBP: + MOVE *A2,A2,L ;GET NEXT + JREQ EXISTOBX ;ALL DONE + MOVE *A2(OID),A3,W + AND A1,A3 ;CAN DONT CARE BITS + CMP A0,A3 ;MATCH? + JRNE EXISTOBP ;NO +EXISTOBX: + MOVE A2,A0 + MMFM SP,A2,A3 + RETS + +MAKOBJ MAKOBJ + +Description: Handy way to create an object + +------------------------------------------------------------------------------ + +Input: a14 --> initialization table + +Returns: Z bit clear = success !! + Z bit set = failure + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*MAKE AN OBJECT +*RETURN(S) +*A0 = OBJECT BLOCK PTR +*A14 = POINTS TO THE INITIALIZATION TABLE +* +MAKOBJ CALLA GETOBJ + JRZ MAKOBX ;NONE LEFT + CALLR STFOBJ + CALLR INSOBJ + MOVE A0,A0 ;RETURN NON-ZERO +MAKOBX RETS + +GETSCRNREL GETSCRNREL + +Description: Get screen relative X,Y coordinates of an object + +------------------------------------------------------------------------------ + +Input: A0 --> object block + +Returns: A1 = x relative value (32 bits) + A2 = y relative value (32 bits) + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * +* * +************************************************************************** +GSCRNREL + PUSH A5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL A5 + RETS + +SCRNRELV SCRNRELV + +Description: Make X and Y velocities of an object releative to the screen + +------------------------------------------------------------------------------ + +Input: A0 --> object + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** +SCRNRELV + MMTM SP,A1,A5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + MMFM SP,A1,A5 + RETS + +GANISAG GANISAG + +Description: Adjust current object image with respect to its animation + point and flip flags. + +------------------------------------------------------------------------------ + +Input: A0 --> object block + A2 = new OYVAL + A3 = new OXVAL + A4 = new flags + +Returns: A2 = adjusted OYVAL + A3 = adjusted OXVAL + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* GANISAG - ADJUST CURRENT OBJECT IMAGE WITH RESPECT TO IT'S * +* ANIMATION PNT. AND FLIP FLAGS * +* NOTE: CALL ONLY AFTER INITIALIZING WITH STFOBJ, OR SOMETHING. * +* A0 = PTR TO OBJECT BLOCK * +* A2 = NEW OYVAL * +* A3 = NEW OXVAL * +* A4 = NEW FLAGS * +* RETURNS * +* A2 = ADJUSTED OYVAL * +* A3 = ADJUSTED OXVAL * +* * +************************************************************************** +GANISAG + MMTM SP,A1,A4,A6,A7 + MMTM SP,A2,A3 + MOVE *A0(OIMG),A1,L + CALLR GSAGOF + MOVE A3,*A0(OSAG),L + MOVE A2,*A0(OSIZE),L + MOVE A4,*A0(OFLAGS),L + CALLR GANIOF + MMFM SP,A2,A3 + SUB A6,A3 + SUB A7,A2 ;ADJUST UPPER LEFT CORNER + MOVE A3,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L + MMFM SP,A1,A4,A6,A7 + RETS + +STRTOBJ STRTOBJ + +Description: Create an object using an initialization table + +------------------------------------------------------------------------------ + +Input: A0 ---> object block + A14 --> initialization table + +Returns: A14 --> end of the initialization table + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* STRTOBJ - START AN OBJECT USING AN INITIALIZATION TABLE * +* A0 = PTR TO THE IMAGE * +* A14 = PTR TO INIT. TABLE * +* * +* START OBJECT INIT. TABLE FORMAT * +* .WORD X,Y,Z * +* .LONG OIMG,OZSIZ,OCVECT * +* .WORD OFLAGS,OID * +* * +* RETURNS A14 = POINTING TO WORD AFTER INIT TAB * +* * +************************************************************************** +STRTOBJ + MMTM SP,A1,A2,A3,A4,A6,A7,A9,A10 + MOVE *A14+,A9,W ;GET OXPOS + SLL 16,A9 ;CONVERT TO OXVAL + MOVE *A14+,A10,W ;GET OYPOS + SLL 16,A10 ;CONVERT TO OYVAL + MOVE *A14+,A1,W + MOVE A1,*A0(OZPOS),W + JRUC STFOBJ0 + +GSAGOF GSAGOF + +Description: Get SAG for an object + +------------------------------------------------------------------------------ + +Input: A1 --> OIMG + A4 = flags + +Returns: A2 = new OSIZE + A3 = new SAG + A4 = new offset:flags + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +GSAGOF: + MMTM SP,A5,A6,A7 + ZEXT A4,W ;ZERO OFFSET IN A4 + MOVE *A1(ISAG),A3,L ;GET TOP LEFT SAG + MOVE *A1(ISIZE),A2,L + CLR A5 + MOVX A2,A5 + ADDK 3,A5 ;ADJUST HOR SIZE FOR MORSEL + SRL 2,A5 + SLL 2,A5 + MOVX A5,A2 + SLL 3,A5 ;ADJUST FOR BYTE ADDRESS + +*HORIZONTAL FLIP CASE +GSAGH: + BTST B_FLIPH,A4 + JREQ GSAGV ;NO H FLIP, TRY VERT FLIP + MOVE A5,A6 + SUBK 8,A6 + ADD A6,A3 ;ADD THS-1 TO SAG + + MOVX A2,A6 + SLL 1,A6 + DEC A6 ;2*THS-1 TO OFFSET + SLL 16,A6 ;ADJUST FOR B16-31 + ADDXY A6,A4 + +*VERTICAL FLIP CASE +GSAGV: + BTST B_FLIPV,A4 + JREQ GSAGX ;NO VERT FLIP + MOVY A2,A6 ;GET HEIGHT + SRL 16,A6 + DEC A6 ;FIRST ENTRY LAST ROW + MOVE A5,A7 ;GET THS + MPYS A6,A7 ;THS*(TVS-1) + ADD A7,A3 ;ADD TO SAG + + MOVX A2,A6 + SLL 1,A6 + NEG A6 ;-2*THS + SLL 16,A6 ;ADJUST FOR B16-31 + ADDXY A6,A4 ;ADD TO OFFSET +GSAGX: + MMFM SP,A5,A6,A7 + RETS + +ANI ANI + +Description: Animation Subroutine + +------------------------------------------------------------------------------ + +Input: A1 = new image pointer + A4 = new flags + A8 = object structure to be updated + +Returns: none + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +ANI0: ;ENTRY FOR NO REPEAT CHECK + MMTM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11 + CLR A11 + MOVE *A8(OFLAGS),A5,W + MOVE *A8(OIMG),A2,L + JRUC ANIG1 +ANI: + MMTM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11 + CLR A11 +ANIG + MOVE *A8(OFLAGS),A5,W + MOVE *A8(OIMG),A3,L + CMP A1,A3 + JRNE ANIG1 ; BR = NOT THE SAME IMAGE AS LAST TIME + + ZEXT A4 + ZEXT A5 + CMP A4,A5 + JREQ ANIG2 ;BR = EVERY THING IS THE SAME +ANIG1 + SWAP A4,A5 + SWAP A1,A3 + MOVE *A8(OSIZE),A2,L + CALLR GANIOF ;GET OLD ANIMATION OFFSET + MMTM SP,A6,A7 + MOVE A5,A4 ;NEW OFLAGS + MOVE A3,A1 ;NEW OIMG + + CALLR GSAGOF ;GET SAG, OFFSET, HW + CALLR GANIOF ;GET NEW ANIMATION OFFSET + MMFM SP,A0,A5 ;BRING BACK OLD ANIMATION DELTA + SUB A6,A0 ;SUBTRACT NEW FROM OLD + SUB A7,A5 + + MOVE A8,A9 ;GET PUSH ADDRESS OF OFLAGS,OSAG,OSIZE + ADDI OFLAGS+>60,A9 + CLR A7 + MOVE A7,*A8(OXCLIP),W ;CLEAR PRECLIP + MMTM A9,A2,A3,A4 ;BLOW THIS STUFF OUT + MOVE A1,*A8(OIMG),L + + MOVE *A8(OYVAL),A6,L + ADD A5,A6 ;ADJUST OYVAL, OXVAL FOR DELTA X + MOVE A6,*A8(OYVAL),L + MOVE *A8(OXVAL),A7,L + ADD A0,A7 + MOVE A7,*A8(OXVAL),L + + MOVE *A8(OSHAD),A0,L + JREQ ANINSHD ;BR = NO SHADOWS HERE + + MOVE A11,A11 ;CHECK A11 + JREQ ANISHAD + CALLR SHADCPY2 ;SHADOW FOR PART 2 + JRUC ANINSHD +ANISHAD + CALLR SHADCPY ;SHADOW FOR PART 1 +ANINSHD +ANIGX + MMFM SP,A0,A2,A3,A4,A5,A6,A7,A9,A11 + RETS + +ANIG2 + MOVE *A8(OSHAD),A0,L + JREQ ANINSHD ;BR = NO SHADOWS HERE + +* MOVE *A8(OZVEL),*A0(OYVEL),L + MOVE *A8(OZVEL),*A0(OZVEL),L + MOVE *A8(OXVEL),*A0(OXVEL),L ;COPY JUST THE VELOCITIES + + JRUC ANIGX + +GETANIXY GETANIXY + +Description: Get the X and Y positions of an objects animation point + +------------------------------------------------------------------------------ + +Input: A8 --> object block + +Returns: A2 = animation point X value + A3 = animation point Y value + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +************************************************************************** +* * +* GETANIXY - GET THE X AND Y POSITIONS OF AN OBJECTS ANIMATION * +* POINT. * +* A8 = OBLOCK PTR. * +* RETURNS * +* A2 = APOINT OYVAL, 32 BITS * +* A3 = APOINT OXVAL, 32 BITS * +* * +************************************************************************** +GETANIXY + MMTM SP,A1,A4,A6,A7 + MOVE *A8(OIMG),A1,L + MOVE *A8(OSIZE),A2,L + MOVE *A8(OFLAGS),A4,W + CALLR GANIOF + MOVE *A8(OXVAL),A3,L + MOVE *A8(OYVAL),A2,L + ADD A6,A3 + ADD A7,A2 + MMFM SP,A1,A4,A6,A7 + RETS + +GANIOF GANIOF + +Description: Get animation offset + +------------------------------------------------------------------------------ + +Input: A1 = OIMG + A2 = H:W + A4 = OFLAGS + +Returns: A6 = X animation offset*64k + A7 = Y animation offset*64k + +Found in: NDSP1.ASM + +------------------------------------------------------------------------------ + +Comments: + +* +*GET ANIMATION OFFSET +*A1=OIMG, A2=H:W, A4=OFLAGS +* +*OUTPUT: +*A6=X ANIMATION OFFSET X 64K +*A7=Y ANIMATION OFFSET X 64K +GANIOF: + MMTM SP,A2,A3 + MOVE *A1(IANIOFF),A6,L + CLR A7 ;MAKE SURE A7 IS 0 + MOVY A6,A7 + SLL 16,A6 ;MOVE TO UPPER WORD + SUBI >00010001,A2 ;ADJUST FOR -1 + CLR A3 + MOVY A2,A3 + SLL 16,A2 ;MOVE TO UPPER WORD + BTST B_FLIPH,A4 + JRZ GANI1 + NEG A6 + ADD A2,A6 ;SUB THS-1 FOR H-FLIP +GANI1: + BTST B_FLIPV,A4 + JRZ GANI2 + NEG A7 + ADD A3,A7 ;SUB TVS-1 FOR V-FLIP +GANI2: + MMFM SP,A2,A3 + RETS + \ No newline at end of file diff --git a/DOC/NEWWIMP.DOC b/DOC/NEWWIMP.DOC new file mode 100644 index 0000000..91e0fc6 --- /dev/null +++ b/DOC/NEWWIMP.DOC @@ -0,0 +1,225 @@ +NOTES ON THE NEW WIMP (Remember, this is only the BEGINNING!) + + +General Rule... + Right Click OR ESCAPE to exit a mode or cancel what + you're doing + Left Click OR ENTER to take action or select something + +Also... + In old WIMP, you usually clicked on an image or palette and + then on the function you wanted to perform. In new WIMP, you + click on the function first, and then select as many images + or palettes as you want until you ESCAPE from that mode. + +Notable Exception... + When you are in a color selection mode (Modify Colors, Color + Cycle, Pixel Replace, etc.) Left Click selects + the first or source color, Right Click selects the + destination or last color. + +Key things... + Cursor keys move the cursor just as the mouse would. + Shift-Arrow keys moves the cursor in greater chunks + + ENTER is same as left click + ESCAPE is same as right click + + Home, End, Delete, and Page Down move the DRAW COLOR box + around the color block. This works even if the color + block is not displayed. + + Grey Plus increments the source color + EXCEPT in Modify Color Range when it adjusts + R,G and B simultaneously + Grey Minus decrements the source color + EXCEPT in Modify Color Range when it adjusts + R,G and B simultaneously + +On the target screen only... + CTRL-Left Click selects the pixel you are pointing at as the + DRAW color + CTRL-Right Click selects the pixel you are pointing at as the + ERASE color + +When you are changing animation points... + SHIFT-RIGHT CLICK restores the animation point to where it was + originally. NOTE: Once you leave the target + screen, the animation point becomes fixed and can + not be restored to an earlier state! + +When loading images... + SHIFT-Left Click allows you to drop multiple copies and even + paint with the image. + + +SOME COOL NEW FEATURES... + Stronger communication with GSP. + Checking for disk space before writing to disk. + Clean entering and exiting target screen without crashes. + (See note below) + New command lets you restart GSP art program from within WIMP. + Mouse sensitivity range for being on target screen. + Can have your background and cursor colors automatically set + when you start WIMP. + New function: ADD COLORS TO A PALETTE! (increases the number + of colors in the palette so you can set up color animations + or just put in some additional colors. This does not set + the new colors, just increases the number of colors + associated with the palette) + Extract feature automates the creation of many images from one + large one. (and sets animation points for you) + Messages on console telling you what mode you're in. + For the Img/Palette Directory, Sequence/Script Directory, and + Draw Mode, you get new Menu Bars so more commands + are at your reach easily. + While you make a box, the endpoints and size are constantly + displayed and updated. + Copy Work area commands work the way you think they should. + In ZOOM mode, you can now pan by scrolling the box around instead + of pressing directional buttons. + Bulletproof and transparent handling of "out of memory" + conditions. + Pixel Swap on images added to the pixel replace option. + Can create any number of scripts (formerly buffers). Still can + only see 4 at a time, though (for now). + Read Multiple VDA Files at once using only one palette and + create a script automatically. + Range modify acts like a real tint. You can always go back to + the original state. + Animations get reloaded automatically when something relevant + changes. You should never need a "RELOAD FRAMES" command. + File windows give you a better way to create and select files. + Images, Palettes, Sequences and Scripts can all be "marked" for + Range operations. + Marking can be by name, position, or (for images) by palette. + You can mark unused palettes. + Search and replace on image, palette, script or sequence names. + Delete a Sequence or Delete a Script without having to delete all + the frames inside. + Palette List shows which palettes are in the color map and which + colors they occupy. + When you change colors in the color map, WIMP now detects if those + colors are part of a palette and gives you the option of + changing the palette or not. + Animation point values are displayed with the directory for each + image. You can now click on them and type in values if + you wish. + You can change the animation points on a RANGE of images by + either setting them to a specific value or offsetting + them by a constant value. + Sequence and script editing is easier. + Condense now gives you the option of stopping after identical + and unused colors are removed. + True Tinting (and brightness control when R,G, and B are all + adjusted together. + Anim pts are now transferred with .VDA files between Wimp and Wtarg + Merge Function merges any number of palettes into one. + Can load images larger than screen size. (Wimp breaks them up into + smaller images) + Can load .VDA files containing 24-bit color maps. + Can place as many images on screen as will fit with one click. + Can place all parts of multi part images on screen at once. + Modify Colors now has an UNDO function which lets you to go + back to the state you were in when you selected the + current range or color. + Shadow options allow you to create a new separate shadow image. + +***************************************************** +* IF YOUR SYSTEM SEEMS TO BE HUNG UP... * +***************************************************** + + ...wait a few seconds. You should get a flashing message that + says "GSP timed out on..." Make a note of the seemingly cryptic + numbers at the end of the message, then hit ESCAPE or Right click + to remove it. + + WIMP NOW TRIES TO RESEND A TIMED OUT COMMAND! + + If you get another of the same message, repeat the procedure. + + If you keep getting the same message, PRESS and HOLD BOTH + MOUSE BUTTONS AT THE SAME TIME after you clear the flashing + message. At this point... + 1) You may be alive again. Try to do something. (don't be scared) + 2) You may time out again. + 3) you may get an "I'M CONFUSED" message when you try to go to + the target screen. + + At any point, you should be able to save your work and exit + WIMP. If you find you are still alive, just keep going. + Before you give up, there is a last resort that may get you + going without a problem. It is the "RESTART GSP" Command in the + first menu (at the left of the menu bar). If that doesn't work, + you may have to save your work and restart WIMP. It is extremely + unlikely that you will crash so severely that you lose work! + + + +EDITING KEYS... + + When editing a field, the following keys may be used... + + HOME gets you to beginning of field + END gets you to end of field + DEL deletes char at cursor without moving cursor + BKSPC deletes char before cursor and moves cursor left 1 space + SHFT_LFTARR moves cursor left on space + SHFT_RTARR moves cursor right on space + INS toggles between Overwrite (default) and + Insert (Cursor flashes) modes + TAB clears field from current position to end + ESC exits and restores original field + ENTER exits and accepts changes to field + +IGNORE When more than one field are present... +IGNORE +IGNORE LFTARR moves to next field +IGNORE RTARR moves to prev field +IGNORE UPARR moves to field above +IGNORE DNARR moves to field below +IGNORE SHFT_UPARR,PGUP increments field +IGNORE SHFT_DNARR,PGDN decrements field + + +STRING MATCHING... + +For search strings... + * matches any number of any characters + ? matches any one character + @ matches any number (>0) of the previous character + < or % anchors the search string to the beginning of + the scanned strings + > or $ anchors the search string to the end of + the scanned strings + [...] encloses a set. A set is a set of characters + to match or a range of chars to match. + EXAMPLES: [1a2b] will match a single occurance + of 1, a, 2, or b + [a-e] will match a single occurance of + a, b, c, d, or e + [*?] will match an asterisk or question mark + since they normally would be reinterpreted + as wildcards. + + +For translation strings... + ^ will be replaced with the source string. + + i.e. if the source string was [1-9] and the + replacement string is :^: then the following translations + take place... + FUCK1 becomes FUCK:1: + FUCK2 becomes FUCK:2: + B7TMP becomes B:7:TMP + + + + + +ENVIRONMENTAL VARIABLES... + +IMGDIR=directory where .img files are +VDADIR= " " .vda files are +TMP=directory where you want temp. files to be created (RAM disk if you have one); + \ No newline at end of file diff --git a/DOC/NWIMP.TXT b/DOC/NWIMP.TXT new file mode 100644 index 0000000..8eab19a --- /dev/null +++ b/DOC/NWIMP.TXT @@ -0,0 +1,29 @@ +Hi Bill, + + + Some of the programs enclosed on this disk replace existing + utilities -- namely... wlib.exe, loadimg.exe, sdbl.exe, and + blimp.exe. If you already have these utilities, you should + save them somewhere in case you have a problem with the new + ones. The difference in these new versions is simply the + support of a slight change in the structures used by WIMP. + The new versions detect and support both old and new WIMP + files. + + The file newwimp.exe goes in your BIN directory and is used + just like the old WIMP. I've also included a batch file called + nwimp.bat which demonstrates the way in which newwimp can + set your background and cursor colors on invocation. + + The format is... newwimp /COL=bgcolr,cursrcolr + + where bgcolr and cursrcolr are 16-bit hex + numbers in which bits 0-4 = blue component + bits 5-9 = green component + bits 10-14 = red component + & bit 15 = 0. + + Have fun! + + Warren + \ No newline at end of file diff --git a/DOC/POSTSC.DOC b/DOC/POSTSC.DOC new file mode 100644 index 0000000..bd22bf4 --- /dev/null +++ b/DOC/POSTSC.DOC @@ -0,0 +1,26 @@ + PPS Command Syntax: + PPS [flags] filepattern ... Defaults + + Flags: -Hx Print page headers. x toggles options: + - - enables/disables printing of headers yes + F - print Filename yes + P - print file Path (directory) no + N - print page Number yes + B - draw a Border around the header yes + Gx - set background Gray level to x (0.0-1.0) 1.0 + T"x" - set header Title string to x - + -M# Set all margins to # inches 0.5 + -Mx# Set margin x (T-top,B-bottom,L-left,R-right) to # inches + -MI# Set margin between page images to # inches 0.25 + -W# Set line width to # characters + -L# Set page length to # lines 66 + -Ox Select page orientation (OP-Portrait or OL-Landscape) OP + -I# Page Images per printed sheet (reduced size) 1 + -IA# Page Images Across printed sheet (reduced size) 1 + -ID# Page Images Down printed sheet (reduced size) 1 + -B Draw a border around (N-None,P-Page image,S-Sheet) P + -Fx Select print font (C-Courier,H-Helvetica,T-Times-Roman) C + -Tx Set tab expansion to every x spaces 8 + -Xx Process environment string PPS_DEFx - + -? Show selected print options no + -Ddev Send output to device (or file) (to screen if -D only) PRN diff --git a/DOC/PROCESS.DOC b/DOC/PROCESS.DOC new file mode 100644 index 0000000..2da7966 --- /dev/null +++ b/DOC/PROCESS.DOC @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Software System + ------------------------------------------------- + + + Multi-Tasking System Description + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + George N. Petro + + + + Description + ----------- + + The Z-Unit software system is designed to allow the + programmer maximum flexibility in game program design while + adhering to the stringent time requirements of real time + execution. The game program consists of many small routines which + may or may not be active at any one time. These routines are + called processes. + + Two singly linked lists are maintained by the process + system. A FREE list which ties together all processes available + for allocation. And an ACTIVE list which holds all of the + currently active processes. The ACTIVE list is traversed once + every 16 msec under normal conditions by the main loop. During + this traversal each process is checked to see if it is ready + to activate or wakeup. If it is, then it is called upon to + execute until it gives control back to the main loop by sleeping + or dying. Once the list has been traversed, the main loop + waits the remainder of the 16 msec then starts over. + + The process data structure is defined as follows: + + mnem. description size + ----- ----------- ---- + + PLINK - link to the next process in the list. (32) + PROCID - process I.D. (16) + PTIME - time until next dispatch. (16) + PSPTR - process local stack pointer. (32) + PDATA - process local data storage. (18x32) + PSDATA - process local stack area. (24x32) + + + + + Creating a process + ------------------ + + Before a process can be dispatched, it must first be + created. All of the routines for creation and destruction of + processes are contained in a file called xPROC.ASM where x is + usually the name of the game or non-existant. Usually a process + is created by another process, in this case it will be the + next process to be dispatched. + + GETPRC is the routine which creates the process, it + takes the process I.D. in A1 and the process address in + A7. It is used like this: + + MOVI NEW_PROCESS_ID,A1 + MOVI NEW_PROCESS_ADDR,A7 + CALLA GETPRC + + The macro call for this is: + + CREATE NEW_PROCESS_ID,NEW_PROCESS_ADDR + + If process creation was successful then GETPRC + returns, in A0, the pointer to the new process and the Z bit + clear. If there are no more processes available then the + Z bit is set and no process is created. + + + + + Sleeping and Dying + ------------------ + + A process must voluntarily give up control of the + processor so that other process are allowed to execute. The + process may give up control in one of two ways, by sleeping, or + by dying. Going to sleep means that the process will pause for + a specified amount of time and begin executing where it left off. + Dying means that the process is finished and wishes to be taken + off of the ACTIVE list. + + Go to sleep as follows: + + MOVI SLEEP_TIME,A0 ;# of 16 msec "ticks" to sleep + CALLA PRCSLP ;sleep + . ;continue executing + . + . + + The macro calls for this are: + + SLEEP SLEEP_TIME ;sleep constant + SLEEPR Ax ;sleep register + SLEEPM @MEM_LOC,FIELD ;sleep memory + + When a process goes to sleep its wakeup address and + registers A8 - A11 are pushed onto the process stack and the + process stack pointer (A12) is stored at PSPTR. All other + registers are not guaranteed during any sleep. + + Upon wakeup, the process stack pointer is restored to + A12 and registers A8 - A11 are pulled off of the process stack + along with the wakeup address. Control is then transferred to + the process. + + Die as follows: + + JAUC SUCIDE ;Jump never to return + + The macro call for this is: + + DIE + + + + Calling a subroutine which sleeps + --------------------------------- + + First of all, a subroutine that sleeps may be called + only by an active process. If the process wishes to call one + of these subroutines it must first push the return address + onto the process stack then jump to the routine. JSRP is the + macro which will handle this action. A subroutine which is + called with JSRP must use the macro RETP to return, or pull + the return address from the process stack and jump there. + + Example: + + PROCESS_1: + MOVK 1,A0 + SLL 16,A0 + MOVY A1,A0 + JSRP SLEEP_SUB + DIE + + SLEEP_SUB: + ADD A1,A0 + SLEEP 1 + RETP + + + Note: Only calls to subroutines that sleep, require JSRP and + RETP. All other calls may be made normally. + + + + The Process I.D. (PROCID) + ------------------------- + + The Process I.D. is a 16 bit value used to distinguish + processes from one another. For the most part these values + are left at the discretion of the programmer. However, there + are some conventions which the system software follows. + + + PROCID format: + + Bit 15 Bit 0 + NEWI IIII IIII IIII + + N = NON-DESTRUCTIBLE process! No routine shall kill + a process with this bit set. + + E = Wave end wait process. Any wave end routines shall + wait until the system is clear of these processes. + + W = Process not to be killed by wave end routines. + + I = These bits are free, to be defined by the game. + + + + + Accessing process variables + --------------------------- + + As mentioned above, each process has a block of RAM + which is used to hold information pertinent to the process. + This known as the process block. While any given process is + executing, A13 will hold the pointer to its process block. + A13 shall remain as the pointer when calling any routines, + unless otherwise stated by that routine. + + Through this pointer, the process may access any of + its internal variables by using the mnemonic offsets previously + described. + + Examples: + + 1. The process wishes to load its current I.D. + into register A0. + + MOVE *A13(PROCID),A0,W + + 2. The process wishes to access the fourth long + word in its data area to register A4. + + MOVE *A13(PDATA+60H),A4,L + + Since the process stack pointer is kept in A12 while + the process is executing. The process may push registers + on to its local stack by the following: + + MMTM A12, + + And remove them by: + + MMFM A12, + + Note: It is of utmost importance that the process keep registers + A13 and A12 intact while calling any routines. It is + therefore recommended that the programmer refrain from + using these registers unless it is absolutely necessary. + + + + + Summary of Routines contained in xPROC.ASM + ------------------------------------------ + + EXISTP - Find an active process of a certain class. + GETA8 - Get register A8 from a sleeping process. + GETA9 - Get register A9 from a sleeping process. + GETA10 - Get register A10 from a sleeping process. + GETA11 - Get register A11 from a sleeping process. + GETPRC - Create a process and add it to the ACTIVE list. + KILL - Kill any active process but yourself. + KILALL - Kill a class of processes. + OBJPROC_KILL - Kill a process controlling a given object. + OBJPROC_XFER - Transer a process controlling a given object. + PINIT - Initialize the FREE and ACTIVE process lists. + PRCLSP - Sleep and wakeup at given address + PRCSLP - Process sleep function. + PUTA8 - Put register A8 into a sleeping process. + PUTA9 - Put register A9 into a sleeping process. + PUTA10 - Put register A10 into a sleeping process. + PUTA11 - Put register A11 into a sleeping process. + SUCIDE - Process die function. + XFERPROC - Transer control of a process to a new routine. + + + Macro Routine + ----- ------- + + CREATE GETPRC + DIE SUCIDE + JSRP - + MATCHP EXISTP + NOMATCHP EXISTP + PULLP - + PUSHP - + RETP - + SLEEP PRCSLP + SLEEPM PRCSLP + SLEEPR PRCSLP + SLOOP PRCLSP + SLOOPR PRCLSP + + + All equates and definitions pertinant to the Multi-tasking + system can be found in MPROCEQU.ASM. + + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Software System + ------------------------------------------------- + + + Multi-Tasking System Routine Reference + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + + EXISTP EXISTP + + Description: + + Scan the Active process list for a process with + the given Process I.D. other than the calling process. + +----------------------------------------------------------------------------- + +Input: + A0 = 16 bit Process I.D. to scan + A1 = Mask +Returns: + Z = Not found (A0 = 0) + NZ = Found (A0 = ptr to process) +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- +Notes: + - Mask - A bit for bit mask of the Process I.D. + 0 = Don't care + 1 = Must match + + - See macros MATCHP and NOMATCHP + + + GET8 GETA8 + GET9 GETA9 + GET10 GETA10 + GET11 GETA11 + + Description: + + Get a preserved register from a sleeping process + +------------------------------------------------------------------------------ + +Input: + A0 --> sleeping process + +Returns: + A8,A9,A10, or A11 = preserved value + +Found in: + xPROC.ASM + +------------------------------------------------------------------------------ + + + GETPRC GETPRC + + Description: + + Create a process and add it to the ACTIVE list. + +------------------------------------------------------------------------------ + +Input: + A1 = PROCID + A7 = starting PC address + A8-A11 passed to new process + +Returns: + Z = No more processes available (A0 = 0) + NZ = Process created successfully (A0 = ptr to process) + +Found in: + xPROC.ASM + +------------------------------------------------------------------------------ +Notes: + - See macro CREATE + + + KILL KILL + + Description: + + Kill a process, remove it from the ACTIVE list. + +------------------------------------------------------------------------------ + +Input: + A0 = pointer to process structure to kill + +Returns: + nothing + +Found in: + xPROC.ASM + +------------------------------------------------------------------------------ + + + KILALL KILALL + + Description: + + Kill a class of processes. + +------------------------------------------------------------------------------ + +Input: + A0 = I.D. to kill + A1 = mask bits (zeros are "don't care" bits) + +Returns: + nothing + +Found in: + xPROC.ASM + +------------------------------------------------------------------------------ +Notes: + - Mask - A bit for bit mask of the Process I.D. + 0 = Don't care + 1 = Must match + + - See macro KILLIT + + + OBJPROC_KILL OBJPROC_KILL + + Description: + + Kill a process controlling an object. + +----------------------------------------------------------------------------- + +Input: + A8 = pointer to object block + +Returns: + nothing + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- +Notes: + - If no process is associated, then nothing is done. + + - SUCIDE must be used if the caller is the controlling process. + + + OBJPROC_XFER OBJPROC_XFER + + Description: + + Transfer process controlling an object to a new + routine. + +----------------------------------------------------------------------------- + +Input: + A1 = New Process I.D. + A7 = Address of new routine + A8 = pointer to object block + +Returns: + nothing + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- + + + PINIT PINIT + + Description: + + Initialize the process systems FREE and ACTIVE lists. + All processes are destroyed. + +----------------------------------------------------------------------------- + +Input: + nothing + +Returns: + A13 = pointer to the head of the ACTIVE list + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- + + + PRCLSP PRCLSP + + Description: + + Make a process sleep and then wake up at a given + address. + +----------------------------------------------------------------------------- + +Input: + A0 = sleep time + A7 = wakeup address + A13 = pointer to the calling processes process block + +Returns: + nothing + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- +Notes: + - See macros SLOOP and SLOOPR + + + PRCSLP PRCSLP + + Description: + + Make a process sleep and then continue executing. + +----------------------------------------------------------------------------- + +Input: + A0 = sleep time + A13 = pointer to the calling processes process block + +Returns: + nothing + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- +Notes: + - See macros SLEEP, SLEEPR and SLEEPM + + + PUT8 PUTA8 + PUT9 PUTA9 + PUT10 PUTA10 + PUT11 PUTA11 + + Description: + + Change a preserved register in a sleeping process. + +------------------------------------------------------------------------------ + +Input: + A0 --> sleeping process + +Returns: + A8,A9,A10, or A11 = preserved value + +Found in: + xPROC.ASM + +------------------------------------------------------------------------------ + + SUCIDE SUCIDE + + Description: + + Cause a process to permanently give up control + of the processor. + +----------------------------------------------------------------------------- + +Inputs: + A13 = pointer to the calling processes process block + +Returns: + never + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- +Notes: + - Call with JAUC. + + - See macro DIE. + + + XFERPROC XFERPROC + + Description: + + Transfer an existing process to a new routine. + +----------------------------------------------------------------------------- + +Inputs: + A0 = pointer to process to be transferred + A1 = New process I.D. + A7 = New wakeup address + A8 - A11 passed to process + +Returns: + nothing + +Found in: + xPROC.ASM + +----------------------------------------------------------------------------- + + + \ No newline at end of file diff --git a/DOC/TV.DOC b/DOC/TV.DOC new file mode 100644 index 0000000..042bc63 --- /dev/null +++ b/DOC/TV.DOC @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Software System + ------------------------------------------------- + + + ToddView source level debugger + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + Todd R. Allen + + + + Description + ----------- + + The ToddView debbuger is a source level debugger, that + actually lets you debug a TMS34010 assembly language program + using your own source code. It is aimed at aiding in the + development of video games and has many functions that follow + the programming design here at Williams. + + Invoking ToddView + ----------------- + + TV + + ENVIRONMENT VARIABLES + --------------------------------------------------------------------- + + MWPATH....path to find GDBG.OUT, TV.HLP, and font files. + MWCARD....Graphics card used by system. + 8 -> Hercules 720x348 mono + MWMOUSE...Mouse used by system. + 32 -> MicroSoft Mouse (bus) + 16 -> MicroSoft Mouse (serial) + MWFONT....Name of font file to be used. + system08.fnt + MWEXIT....If set to the name of a command, this command will be + executed each time TV puts the graphics card into text mode, + DOS escape, HELP, BLST, and when TV exits. This variable + is optional, and only useful if you need to specially reset + your graphics card before entering text mode. + + + +KEYBOARD COMMANDS when GSP is halted and REGISTERS and code are being viewed. +------------------------------------------------------------------------------ +ALT_X.....Halt GSP, Clear all BreakPoints and EXIT. +CTL-C.....EXIT (doesn't clear break points, leaves GSP running). + +'?','H','h',ALT_H +...........HELP, opens up this file in VIEW mode. + +PageUp, PageDown keys +{up, down, left, right, CTL-left, CTL-right} Arrow keys +...........SCROLL text. CTL key makes arrow keys go faster. +HOME, END..Go to top and bottom of file. +ALT_G......When looking at a .lst file - GO to LINE #. + ......When looking at disassembled code - GO to ADDRESS. +ALT_E......Open and or change to another source file. +ALT_N......Go to next file that is already open. +'m','M'....Toggle the MODE of a file between listing and disassembled. +ALT_P......Display text at current Program counter. +ALT_F......FIND a Label. +ALT_S, F5..SEARCH for a string in a .lst file. '%' matches start of line. +CTL-A, ^F5.SEARCH again for same string as last search. + +'g','G'...Start GSP running from current PC. +'s','S', +..........Single Step one instruction, following flow of control. +'l','L', ALT_L +..........Single Step one line, skip over call statements. +'t','T'...Set Temporary Break Point at Cursor Line, starts GSP. +CTL-PgUp, CTL-PgDown +'u','U','d','D' +...........Move CURSOR LINE up or down 1 line. +'p', 'P'...Make a PATCH at Cursor Line. (see "MAKING PATCHES" for details) +'b', 'B'...Toggle a BREAK POINT at Cursor Line (none->temp->perm->none). +ALT_B......Display next Break Point. +ALT_C......CLEAR all Break Points. + +ALT_A......Run AGAIN, Resets PC, SP (use ALT_P to update display). +ALT_D......DISPLAY Memory. +ALT_K......KILL (reset) the sound board. +ALT_M......Leave BookMARK by scroll bar. +ALT_V......VIEW an ascii file. +ALT_Z......Start a DOS command.com, type 'exit' to return. +CTL-B......Enter George's BLIST program to display NARC data structures. +CTL-D......DUMP Registers, Ram, Palette Ram to a disk file. +CTL-L......LOAD Registers, Ram, Palette Ram from a disk file. +CTL-R......Enter A REGISTER command. Command has following format: + ---display memory at contents of . + *--display memory at dereferenced contents of . + { | *} = + { | * | >hex# | hex#H | dec# | SYMBOL} + where is + {A0-A15 | B0-B15 | SP | PC | ST | ADD | NCZV | V2-V20} + +KEYBOARD COMMANDS in file VIEW mode +------------------------------------------------------------------------------ +ESC, ALT_V, 'q', 'Q' +...........EXIT File View Mode. +U_ARROW, D_ARROW, PGUP, PGDN +...........SCROLL text up and down. +HOME, CTL-PGUP +...........Go to TOP of file. +END, CTL-PGDN +...........Go to BOTTOM of file. +ALT-G......GO to a line #. (Not Yet) +ALT_S, F5..Search for a string. '%' matches start of line. (Not Yet) +ALT_A, ^F5.Search again for same string as last search. (Not Yet) + + +KEYBOARD COMMANDS when editing a string in a response box. +------------------------------------------------------------------------------ +ESC........ESCAPE, abort command. +HOME.......Go to start of string. +END........Go to End of string. +INSERT.....Toggle between TypeOver and Insert modes. +DEL........Delete character at cursor. +BackSpace..Delete character before cursor. +L_ARROW....move cursor 1 left. +R_ARROW....move cursor 1 right. +U_ARROW....Loads Previous Responses. +D_ARROW....Loads Next Responses. +ALT_U......Load original contents of response box. +(note - any other first keystroke but the above will delete initial string) + + +KEYBOARD COMMANDS in DISPLAY MEMORY Mode +------------------------------------------------------------------------------ +ESC, 'q', 'Q', ALT_X +...........EXIT display memory mode. +'?','H','h',ALT_H +...........HELP, opens up this file in VIEW mode. +HOME,END...Select Previous,Next memory TYPE. + Memory types are three charachters, + char1 = U|S -> Unsigned|Signed + char2 = H|D -> Hex|Decimal + char3 = L|W|B -> Long|Word|Byte +ARROWS.....Move Memory Word Cursor. +PGUP, PGDN.Page up, down through address space. +CTL-PGUP, CTL-PGDN +...........Line up, down through address space. +CTL-L_ARROW.Move back through memory by size of TYPE selected. +CTL-R_ARROW.Move forward through memory by size of TYPE selected. +'m','M', +............Modify the memory word at the cursor. +'i','I'....Indirect through memory. Word at cursor is least significant. + +ALT_V......VIEW an ascii file. +ALT_Z......Start a DOS command.com, type 'exit' to return. +CTL-B......Enter George's BLIST program to display NARC data structures. +CTL-D......DUMP Registers, Ram, Palette Ram to a disk file. +CTL-L......LOAD Registers, Ram, Palette Ram from a disk file. +CTL-R......Enter A REGISTER command. Command has following format: + +KEYBOARD COMMANDS in DISPLAY STRUCTURE Mode +------------------------------------------------------------------------------ +ESC, 'q', 'Q', ALT_X +...........EXIT display structure mode. +'?','H','h',ALT_H +...........HELP, opens up this file in VIEW mode. +HOME,END...Go to TOP/BOTTOM of structure. +ARROWS.....Move structure field cursor. +CTL-L_ARROW.Go to first field of current element. +CTL-R_ARROW.Go to last field of current element. +CTL-PGUP, CTL-PGDN +PGUP, PGDN.Page up, down through structure elements. +'m','M', +............Modify the field at the cursor. +ALT_C.......Search for a Column (offset name) +ALT_S.......Search for a value in a column. + Starts at highlighted value and searches down. + + +KEYBOARD COMMANDS while GSP is RUNNING +------------------------------------------------------------------------------ +ALT_P......Stops GSP and displays text at PC. +ANY other key stops the GSP without changing the text display. + +MOUSE COMMANDS when GSP is halted and REGISTERS and code are being viewed. +------------------------------------------------------------------------------ +The following buttons are encased in rectangles on the screen. + Clicking on them has the following effects. +SS.........Single Step one line, skip over call statements. +P..........Display text at current Program counter. +UP, DN.....Scroll text. +LIST/DASM..Toggle the MODE of a file between listing and disassembled. +(SCROLL BAR).Go to corresponding position in File. +F..........Select a source File to change to. +DM.........Display Memory. +S..........Search for a string of text in the source code. +RST........Resets PC and SP to allow program to be run Again. +SND........Kill (reset) the SOUND board. +BLST.......Enter George's BLIST program to display NARC data structures. +M..........Leave a bookMark in the file. Click on bookmark to remove it. +AUTO.......Starts GSP running in automatic interrupt mode. +DOS........Escape to DOS command interpreter. 'exit' to return to TV. +HALT.......Exits debugger and stops GSP. +QUIT.......Exits with GSP running. +HELP.......HELP enter VIEW mode on this stuff here. +DMSG.......Print TV self debug messages. Should be of no interest to the user. +Clicking on a LINE of CODE moves the cursor bar to that line. + Using the left button toggles a break point, while the right does not. + Use both buttons to make a patch at that line. +Click on a register to modify it. +Click on the '*' by a register to indirect through it to the memory display. +The boxes to the right of the code are virtual registers. + Click on the 1st box to enter an address or symbol. + Click on the 2nd box to change value of what's at the address or symbol. + The third box toggles the symbol size (Long, Word, Byte) + The fourth box toggles the symbol mode (Hex, Decimal, Address) + + +MOUSE COMMANDS in memory display mode +------------------------------------------------------------------------------ +Click and hold both buttons down to EXIT. +Click Left button on any word to modify it. +Click Right button on any word to indirect through it. + The word pointed at is the most significant of the address. +Click on any memory TYPE to set that type. +Visible buttons have same actions as listed above. + +MAKING PATCHES +------------------------------------------------------------------------------ +'P' will start a patch at the cursor bar. +Clicking both mouse buttons together on any line will start a patch at + that line. + - will ABORT the patch. +A patch can be any of the following: + A GSP assembly instruction. + Operands can be decimal #s, hex #s with leading '>' or trailing 'H', + any global symbol or a local label. + A LABEL local to the current file. + The label must have a trailing ':' to be recognized. + .byte #, .word #, .long # + "INSERT", "APPEND" + Enter INSERT or APPEND mode. Instead of the patch overwriting the + code at the same address, it is placed in the address space defined + by the symbols TVPATCH, TVPATCHX. This code is transparently made + to execute as if it were inserted or appended to the line that + was originally being patched. TRAP 28 is used to transfer control + to the patch. TRAP 27 is used to transfer control from the patch. + PATCHING a TRAP 27 or TRAP 28 once placed may cause unpredictable + results, although the line before or after the TRAP may be patched. + INSERT/APPEND is terminated by entering "Q" for the next instruction. + + (if a patch line is not understood, it won't be entered and it remains on + the edit line to be modified.) + +INSERT and APPEND patches require an entry in a statically allocated table, +there is currently only 100 entries in this table all though this may be +increased in the future if it seems insufficient. + +START UP FILE +------------------------------------------------------------------------------ + Each time TV is invoked on a file "blah", it checks for a file named +"blah.tvs" in the current directory and if it is not found it checks +again for "blah.tvs" in the directory specified by the environmental +variable "MWPATH". + +The start up file can contain the following commands: + +.tab N + Set Tab expansion of text to N columns per tab. + +.struct filename + Open file "filename" and scan for structure definitions of the + following format: + *struct structname (this must start in column 1) + fieldname1 .set ;[] + fieldname2 .set ;[] + . + . + *endstruct + : []... + a is either a hex or decimal 16 bit or less value, or + it can be the name of a previously defined offset. + If it is an offset name, it can be in the same structure + or a different one, but it must have already been defined. + an is either '+' or '-'. + Don't put white space in between terms and operands. + + Memory types are three charachters, + char1 = U|S -> Unsigned|Signed + char2 = H|D -> Hex|Decimal + char3 = L|W|B -> Long|Word|Byte + Structures can be displayed from the display memory command. + The fields can also be referenced when making patches. + If a field type is unspecified it will not be displayed in the + structure display. The field will still be known to the assembler. + + +.bp + Sets a breakpoint at address or symbol. + +.wp ,[L|W|B],[H|D|A] + Sets up a watch point to always display the value of the symbol. + [L|W|B] optionally specifies symbol to be + L -> long word (32 bits) + W -> word + B -> byte + [H|D|A] optionally specifies symbol be displayed as a + H -> Hex Value + D -> Decimal Value + A -> Address of a Symbol + +.km + Defines a keymap of KEY to KEY-SEQUENCE. + KEY is any single keystroke which is to be interpreted as + the sequence of keys in KEY-SEQUENCE. + **NOTE** Bindings to AlphaNumeric Keys are not expanded when + in editing a string mode. + The keys of KEY-SEQUENCE are not reinterpreted through any keymaps. + The following characters are meta-chars: + '^' -> control, i.e. '^C' = control C + '@' -> alternate, i.e. '@C' = alt C + '!' -> function, i.e. '!F1' = shifted function key 1 + i.e. '!f1' = unshifted function key 1 + '\' -> literal, key following this key is accepted literally + i.e. '\^' = '^' + i.e. '\\' = '\' + '"' -> named-key, i.e. "PGUP" = key with code of 0x8000|73 + following keys are known by name: + "CR" = Carriage Return, + "BS" = BackSpace, + "ESC" = Escape + "PU" = Page Up, + "PD" = Page Down + "^PU" = Control Page Up + "^PD" = Control Page Down + "HOME" = Home + "END" = End + "^HOME" = Control Home + "^END" = Control End + "DEL" = Delete + "INS" = Insert + "R->" = Right Arrow + "L->" = Left Arrow + "D->" = Down Arrow + "U->" = Up Arrow + "^R->" = Control Right Arrow + "^L->" = Control Left Arrow + *** SAMPLE KEYBINDING TO DISPLAY STRUCT OBJ WITH f1 Key *** + .km !f1 @D*OBJLIST\ OBJ\ OLINK"CR" + + +';', '*', '/' Appearing as the first character of a line, + marks the line as a comment to be ignored. + +NOTES +------------------------------------------------------------------------------ + If system appears hung, try CTL-Q which will cause any attempts +to communicate with a crashed GSP to be aborted. This can cause +the state of the system to get screwed up if communications weren't +hung. + + To use debugger with incrementally linked files, the file type +of partially linked relocatable objects must be ".rlo" so that +the debugger knows to open up the corresponding ".map" file to get +information on files, sections and symbols for the members of those +objects. + +TV loads a GSP resident piece of code "GDBG.OUT" that requires +address space from >FFFF0000 through >FFFFFC00 + +TV uses the following INTERRUPT VECTORS and redefines them if +the users program loads with them initialized. + TRAP 8 - NMI used to stop/start the GSP + TRAP 30 - Illegal Opcode + TRAP 29 - BreakPoint + TRAP 28 - Go to Patch Code + TRAP 27 - Exit Patch Code + +TV gets control from the GSP using traps and interrupts. These push +the status word and program counter on the stack. If the stack pointer +(SP) points at unreadable or unwriteable memory the debugger will lose +these values and can even lose control of the GSP entirely... + +When TV gets control from the GSP, it first disables interrupts +then if the users program has a global label TVBP defined, it +will call that routine. Before TV returns control to the users +program, if a global label TVBPX is defined TV will call that +routine also. + +The program "crnchlst.exe" can be run on listing files to crunch +them into a more compact format. This will roughly halve the +size of your listing files, and double the speed of TV when it is +operating on those files. To crunch all files in a directory, enter +"crnchlst *.lst". Files already crunched will be ignored. + +These are statically allocated structures in TV.EXE, here +are their sizes and purposes. +MAX_FILES 80 maximum # of listing files. +MAX_VIEWS 50 max # opened view files (ALT-V). +MAX_GLOBALS 2500 maximum # of global symbols. +GBLS_CHARS 16000 maximum # characters of global symbol names. +MAX_LOCALS 500 max # of local symbols per file. +LOCALS_CHARS 6000 max # chars of local symbol names per file. +MAX_LINES 2048 MAX_LINES*SKIP_LINES is roughly the maximum +SKIP_LINES 25 number of lines of opened listings. +PATCHTBLLEN 100 max # of (insert/append) patches per session. +MAX_STRUCTMEM 500 max # of members per structure definition +MAXSTRUCTNAME 4096 max # chars of member names per struct def. +MAX_STRUCTS 50 max # of structure definitions. +MAX_KEYMAPS 100 max # of keymap definitions +MAX_KEYCHARS 1000 max # of characters in keymap key sequences. + + + + + \ No newline at end of file diff --git a/DOC/UTIL.DOC b/DOC/UTIL.DOC new file mode 100644 index 0000000..1089a5e --- /dev/null +++ b/DOC/UTIL.DOC @@ -0,0 +1,436 @@ +* +*P R O C E S S R O U T I N E S +* + + E X I S T P FIND IF A PROCESS EXISTS,(OTHER THAN CALLING PROCESS) + A0 = PROCID (16 BITS) + A1 = MASK (16 BITS) MASK BITS OF ZERO ARE DONT CARES + RETURNS: Z BIT SET = NO MATCH, A0 = 0 + Z BIT CLR = MATCH, A0 = PTR TO PROCESS + + USAGE: MOVI PROCID,A0 + MOVI MASK,A1 + CALLA EXISTP + G E T A 8 - 1 1 GET A PRESERVED REGISTER FROM A SLEEPING PROCESS + GETA8,GETA9,GETA10,GETA11 + A0 = PTR TO SLEEPING PROCESS + + USAGE: MOVE SLEEPING PROCESS,A0 + CALLA GETA8 + G E T P R C CREATE A PROCESS + A1 = ID,A7=PC,A8,A9,A10,A11 PASSED PARAMETERS + A13 = CURRENT PROCESS + A0 IS RETURNED POINTING TO CREATED PROCESS + + USAGE: MOVI PROCESS ID,A1 + MOVI STARTING ADDRESS,A7 + CALLA GETPRC + + K I L L KILL PROCESS + A0 = POINTS TO PROCESS TO KILL, A13= CURRENT PROCESS + IF PROCESS NOT PRESENT, CAUSES ERROR + TO KILL YOURSELF SUCIDE MUST BE USED, + IF YOU ATTEMPT TO KILL YOURSELF IT WILL JUST RETURN + + USAGE: MOVE PROCESS POINTER,A0 + CALLA KILL + + K I L A L L KILL A CLASS OF PROCESSES + A0 = PROCID (16 BITS) + A1 = MASK (16 BITS) + MASK BITS OF ZERO ARE DONT CARES + WILL NOT KILL CALLING PROCESS (A13) + + USAGE: MOVI PROCID,A0 + MOVI MASK,A1 + CALLA KILALL + + P R C S L P PROCESS SLEEP + A0 = SLEEP TIME + TOS IS WAKEUP ADDR + + USAGE: MOVI SLEEPTIME X 16 MSEC.,A0 + CALLA PRCSLP + + S U C I D E PROCESS SUICIDE + A13 = PROCESS + + USAGE: CALLA SUCIDE + + P I N I T PROCESS LIST INITIALIZE + A13 RETURNED POINTING TO ACTIVE LIST (CRPROC) + + USAGE: CALLA PINIT + + X F E R P R O C TRANSFER CONTROL OF AN EXISTING PROCESS + A0 = PTR OF PROCESS TO BE XFER'D + A1 = NEW I.D. + A7 = WAKE UP + A8 - A11 = PASSED TO THE XFER'D PROC + + USAGE: MOVE PROCESS PTR,A0 + MOVI NEW PROCESS ID,A1 + MOVI STARTING ADDR,A7 + CALLA XFERPROC + + P U T A 8 - 1 1 PUT A REGISTER(A8-A11) INTO A SLEEPING PROCESS + PUTA8,PUTA9,PUTA10,PUTA11 + A0 = PTR TO SLEEPING PROCESS + + USAGE: MOVE SLEEPING PROCESS,A0 + CALLA PUTA8 + + G P A L O B J - GET A PALETTE AND AN OBJECT BLOCK + A14 = PTR TO PLAYER INITIALIZATION TABLE. + RETURNS: + A0 = PTR TO OBJECT + Z BIT SET = FAILURE,A0 = 0 + + S H V E L C P Y - COPY X, Z VELOCITIES TO SHADOW (IF ANY) + A8=OBJECT + A8(OSHAD)=SHADOW OR ZERO IF NONE + + S H V E L F L P - COPY SHADOW VELOCITY AND FLIP HIM ACCORDING TO X VEL + A8 = OBJECT + A3 = OXVEL + + F L P - FLIP OBJECT + A8 = OBJECT, N = SIGN OF XVEL + + X Z C H K - CHECK X-Z SEEK RANGE + A8 = OBJECT SEEKING + A0 = OBJECT SEEKED + A5 = X RANGE + A6 = Z RANGE + + RETURNS: CARRY SET IF HE IS CLOSE ENOUGH + A1 = DELTA X + A2 = DELTA Z + A3 = ABS DELTA X + A4 = ABS DELTA Z + + G E T B O T Y - GET BOTTOM Y OF AN OBJECT + A8 = OBJECT BLOCK PTR + RETURN(S) + A1 = 16 BIT BOTTOM Y IN LSW (STATUS SET ACCORDINGLY) + + S E T Y P O S - SETUP OBJECTS Y POSITION SO HES ON THE GROUND + A0 = OBJECT BLOCK + + A D D S U P P - ADD OBJECT TO A SUPPLEMENTAL LIST + A0 = PTR TO OBJECT + A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER + + D E L S U P P - DELETE OBJECT FROM THE SUPPLEMENTAL LIST + A0 = PTR TO OBJECT + A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER + + I S S U P P - IS AN OBJECT ON A SUPPLEMENTAL LIST + A0 = PTR TO OBJECT + A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER + RETURNS: + Z BIT SET = NOT ON + Z BIT CLR = IS ON + + I S S U P P I D - IS AN OBJECT ON A SUPPLEMENTAL LIST(SEARCH BY OBJECT I.D.) + A0 = OBJECT I.D. + A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER + RETURNS: + Z BIT SET, A1 = ZERO OBJECT NOT FOUND + Z BIT CLR, A1 = PTR TO OBJECT FOUND + + R A N D O M - GET A RANDOM NUMBER + RETURNS: A0 = 32 BIT RANDOM # + + R A N D U - GET A UNIFORMLY DISTRIBUTED RANDOM # BETWEEN 1 AND [A0] + A0 = RANGE INPUT + RETURNS: A0 = RANDOM # + + S R A N D - GET SIGNED RANDOM # IN RANGE +/- A0 + CALLING PARAMETERS: A0 + RETURNS: A0 = RANDOM # + + R A N G R A N D - GENERATE A RANDOM NUMBER IN A GIVEN RANGE. + B0 = LOWER BOUND + B1 = UPPER BOUND + RETURNS: A0 = RANDOM # + + R A N D P E R - RANDOM % ROUTINE + A0=PROBABILITY OF EVENT (0-1000) P(A0=1000) = 1; P(A0=1) = 1/1000. + RETURNS: CS IF PROBABILITY IS TRUE, CC FOR FALSE + A0 = RANDOM # 0-999 + + F I L L A R E A - FILL A AREA WITH A COLOR + A1 = [COLOR,PALETTE] + A3 = DAG OF AREA [YPOS,XPOS] + A4 = [Y,X] SIZE OF AREA + + + B L N K A R E A - BLANK A GIVEN SQUARE AREA ON THE SCREEN + A3 = DAG OF AREA [YPOS,XPOS] + A4 = [Y,X] SIZE OF AREA + + D E L E T E _ O B J E C T _ P A L L E T E - DELETE OBJECT AND PALETTE + A8 = OBJECT TO DELETE + + P S T O P - STOP ALL PLAYER AND SHADOW VELOCITIES + A8 = OBJECT TO STOP + + Y F L P - SET OBJECT Y-FLIP, + A8 = OBJECT BLOCK PTR + + N O Y F L P - CLEAR OBJECT Y-FLIP + A8 = OBJECT BLOCK PTR + + D T I M E - DMA AN IMAGE + A1 = [CONSTANT COLOR,PALETTE(STUFFED IN DTIME)] + A3 = DAG [Y,X] + A5 = [OFFSET,CONTROL] + A14 = ADDRESS OF IMAGE HEADER + + D M A W A I T - WAIT ON THE DMA BUSY BIT TO CLEAR + + D M A Q W A I T - WAIT FOR DMA QUEUES TO EMPTY, DMA TO FINISH + + D M A H A L T - HALT THE DMA + + S C R C L R - CLEAR THE SCREEN SLOW + ONLY CALL WITH INTERRUPTS DISABLED AND THE DMA SHUT DOWN + OTHERWISE USE CLR_SCRN + + C L R _ S C R N - CLEAR THE SCREEN SLOW WAITING FOR DMA + + + F R A N I M - ANIMATION SCRIPT PROCESSOR + A1 = COMMAND: 00 = PROCESS CURRENT FRAME. + 01 = PROCESS TO END OF LIST. + 02 = PROCESS X # OF FRAMES OR TO END. A1 = [# FRMS,CMD] + 03 = INFINITELY LOOP ON THE LIST. + 04 = PROCESS CURRENT FRAME, NO SLEEP(TIME RETRN'D IN A0) + A8 = PTR TO OBJECT BLOCK + A9 = PTR TO CURRENT FRAME + RETURNS CARRY SET IF END OF ANIMATION LIST WAS HIT + A9 = POINTING TO NEXT FRAME, IF NOT AT END OF LIST + SETS EPARENT OF THE SPAWNED CHILD POINTING TO THIS PROCESS + NOTE: CALL WITH JSRP, IT SLEEPS + + ANIMATION SCRIPT FORMAT + .LONG IMAGE_HEADER<-- IF = 0 END OF SCRIPT + .WORD SLEEP_TIME <-- BITS 0 - 7 ARE THE SLEEP TIME. + <-- BITS 8 -15 ARE THE FLAGS: + BIT # FLAG + ----- ---- + 8 UNUSED + 9 UNUSED + 10 UNUSED + 11 DELTA Y WORD IS PRESENT + 12 PACKED DELTAS FOR X&Z PRESENT + 13 NEW PALETTE ADDRESS IS SPECIFIED + 14 NEW FLIP BITS ARE SPECIFIED + 15 SPAWN PROCESS W/OFFSETS + .WORD XOFF,YOFF,PROCID + .LONG PROCADDR + FLAG HIERARCHY: 15 --> 8 + OPTIONS SHOULD FOLLOW IN THIS ORDER. + + + F R A M S K I P - SKIP TO THE NEXT FRAME OF AN ANIMATION SCRIPT + A9 = SCRIPT PTR + RETURNS: CARRY CLR = A9 IS POINTING TO NEXT FRAME + CARRY SET = SCRIPT END WAS HIT, A9 POINTS TO NEXT WORD + + A U T O E O F F - TURN OFF AUTO ERASE + + A U T O E O N - TURN ON AUTO ERASE + + C O P Y O B J - COPIES THE CONTENTS OF ONE OBJECT BLOCK TO THE OTHER. + A0 = PTR TO DESTINATION BLOCK + A8 = PTR TO SOURCE BLOCK +* +* P A L E T T E S T U F F +* + D E L P A L - DELETE AN OBJECTS PALETTE + A0 = PTR TO OBJECT + + F I N D P A L - FIND THE COLOR MAP # TO WHICH THE GIVEN PALETTE IS ASSIGNED. + A0 = 32 BIT PALETTE ADDRESS + RETURNS: Z BIT SET = PALETTE NOT FOUND ---> A0 = 0 + Z BIT CLR = PALETTE FOUND ---> A0 = PALETTE #(CORRECT FORMAT FOR DMA) + + C L R P A L - CLEAR OUT PALETTE ALLOCATION RAM + + C L R F P A L - CLEAR ONLY FOREGROUND PALETTES + + C L R B P A L - CLEAR ONLY BACKGROUND PALETTES + + G E T F P A L - GET A FOREGROUND PALETTE + A0 = PALETTE ID (ADDRESS OF DATA) + RETURNS: A0 = COLOR MAP ALLOCATED (0000-0F0F) + RETURNS: EQ IF NO PALETTE FREE + + G E T B P A L - GET A BACKGROUND PALETTE + A0 = PALETTE ID (ADDRESS OF DATA) + RETURNS: A0 = COLOR MAP ALLOCATED (0000-0F0F) + RETURNS: EQ IF NO PALETTE FREE + + F R E E P A L - FREE A PALETTE + A0=PALETTE # (0-NUMPAL) TO FREE + + U N G E T P A L - Clears out a palettes allocation count + A0=PALETTE # (0-NUMPAL) TO UNALLOCATE + + P A L T R A N S - TRANSFER PALETTE DATA + CALLED DURING VBLNK + LOOKS THROUGH PTRRAM FOR TRANSFERS + BOMBS A0-A13 + Bit 13 of PLDCNT checked first, if set bits 14,15 ignored + BIT 13 PLDCNT = repeat colors to fill full palette - lsbits address colors + BIT 14 PLDCNT = 16 COLOR PALETTE + BIT 15 PLDCNT = PALETTE B4-B7 + + P A L S E T - SETUP PALETTE TRANSFER + A0= PALSRC = 32 BIT SOURCE ADDRESS OF PALETTE COLOR DATA + A1= PALDEST = BIT 8-15 DESTINATION PALETTE | BIT 0-7 START COLOR + A2= PLDCNT = 16 BIT COLOR COUNT + RETURNS: EQ IF UNABLE TO SETUP TRANSFER, NE IF TRANSFER O.K. +* +*O B J E C T S T U F F +* + S H A D S T - START A SHADOW + A8 = OBJECT TO SHADOW + RETURNS: A0 = PTR TO SHADOW, OR 0 IF NO SHADOW WAS CREATED + + S H A D U P D - SHADOW UPDATE CALLS SHADCPY IF SHADOW EXISTS + A8 = OBJECT + + S H A D C P Y - COPIES OSAG,OIMG,OXVEL,OYVEL,OXVAL + ADJUSTS OSIZE,OFSET,OYVAL,OXCLIP + A0 = PTR TO SHADOW OBJECT + A8 = PTR TO OBJECT BEING SHADOWED + + D F R M G R N D - CALC DISTANCE FROM GROUND + A8=OBJECT + A1 RET WITH HT ABOVE GROUND + + Y Z S O R T - SORT OBJECT LIST IN Z:Y PRIORITY + + S C R T S T - TEST IF OBJECT ON SCREEN + A8 = OBJECT + RETURNS EQ IF ON SCREEN + + C L I P O B J - CLIP AN OBJECT + A2 = BOTTOM:RIGHT CLIP (RELATIVE TO CURRENT SIZE) + A3 = TOP:LEFT CLIP (RELATIVE TO CURRENT SIZE) + A8 = OBJECT BLOCK + RETURNS: NEW SAG,H,W,OFFSET,XCLIP IN OBJECT STRUCTURE + ALL REGISTERS PRESERVED + + O I N I T - INITIALIZE OBJECT LISTS + + G E T O B J - GET A FREE OBJECT BLOCK FOR USE + RETURNS: A0 = PTR TO OBJECT BLOCK + IF NO BLOCKS WERE AVAILABLE THEN THE Z FLAG IS SET + + F R E E O B J - PUT AN OBJECT BLOCK BACK ON THE FREE LIST + A0 = POINTER TO OBJECT BLOCK + + F R E E S O B J - FREE OBJECT AND SHADOW (IF ANY) + A0= POINTER TO OBJECT + + I N S B 2 O B J - INSERT BACKGROUND 2 OBJECT (INTO SORTED LIST) + A0 = OBJECT TO BE INSERTED + + I N S B O B J - INSERT BACKGROUND 1 OBJECT (INTO SORTED LIST) + A0 = OBJECT TO BE INSERTED + + I N S S O B J - INSERT SHADOWED OBJECT (INTO SORTED OBJECT LIST) + A0 = OBJECT TO BE INSERTED + + I N S O B J - INSERT OBJECT (INTO SORTED OBJECT LIST) + A0 = OBJECT TO BE INSERTED + + K I L B 2 O B J - KILL OBJECT CLASS ON BAK2LST + K I L B O B J - KILL OBJECT CLASS ON BAKLST + K I L O B J - KILL OBJECT CLASS ON OBJLST + A0 = OID (16 BITS) + A1 = MASK (16 BITS) MASK BITS OF ZERO ARE DONT CARES + + E X I S T O B J - DOES AN OBJECT FROM A CERTAIN CLASS EXIST? + A0 = OID + A1 = MASK(0'S DON'T CARE) + RETURNS: + Z BIT SET = NO OBJECT, A0 = 0 + Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT + + I S O B J - IS AN OBJECT ON THE OBJECT LIST? + A0 = PTR TO OBJECT + RETURNS: + Z BIT SET = NO OBJECT, A0 = 0 + Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT + + I S F R E E - IS AN OBJECT ON THE FREE LIST? + A0 = PTR TO OBJECT + RETURNS: + Z BIT SET = NO OBJECT, A0 = 0 + Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT + + M A K O B J - MAKE AN OBJECT CALLS GETOBJ,STFOBJ,INSOBJ + A14 = POINTS TO THE INITIALIZATION TABLE + RETURN(S) + A0 = OBJECT BLOCK PTR + + G A N I S A G - ADJUST OBJECT FOR IMAGE ANI PNT. AND FLIP + A0 = PTR TO OBJECT BLOCK + A2 = NEW OYVAL + A3 = NEW OXVAL + A4 = NEW FLAGS + RETURNS + A2 = ADJUSTED OYVAL + A3 = ADJUSTED OXVAL + + S T R T O B J - START AN OBJECT USING AN INITIALIZATION TABLE + A0 = PTR TO THE IMAGE + A14 = PTR TO INIT. TABLE + START OBJECT INIT. TABLE FORMAT + .WORD X,Y,Z + .LONG OIMG,OZSIZ,OCVECT + .WORD OFLAGS,OID + RETURNS A14 = POINTING TO WORD AFTER INIT TAB + + S T F O B J - START AN OBJECT USING AN INITIALIZATION TABLE + A0 = PTR TO THE IMAGE + A14 = PTR TO INIT. TABLE + INIT. TABLE FORMAT: + .LONG OXVEL,OYVEL,OXVAL,XYVAL + .WORD OZVEL,OZPOS + .LONG OIMG,OZSIZ,OCVECT + .WORD OFLAGS,OID + .LONG OBLIPIMG + RETURNS + A14 = POINTING TO WORD AFTER INIT TAB + + G S A G O F - GET SAG FOR OBJECT - ADJUSTS SAG FOR FLIP + A1=PTR TO IMAGE HEADER (OIMG) + A4=OBJECT FLAGS + RETURNS: + A2=RETURNED WITH NEW OSIZE + A3=RETURNED WITH NEW SAG + A4=RETURNED WITH NEW OFFSET:OFLAGS + + A N I - ANIMATION SUBROUTINE + A1=NEW IMAGE POINTER + A4=NEW OFLAGS + A8=OBJECT STRUCTURE POINTER TO BE UPDATED + + G E T A N I X Y - GET X,Y POSITIONS OF AN OBJECTS ANIMATION PT. + A8 = OBLOCK PTR. + RETURNS + A2 = APOINT OYVAL, 32 BITS + A3 = APOINT OXVAL, 32 BITS + + G A N I O F - GET ANIMATION OFFSET + A1=OIMG, A2=H:W, A4=OFLAGS + OUTPUT: + A6=X ANIMATION OFFSET X 64K + A7=Y ANIMATION OFFSET X 64K + \ No newline at end of file diff --git a/DOC/WIMP.DOC b/DOC/WIMP.DOC new file mode 100644 index 0000000..1db307f --- /dev/null +++ b/DOC/WIMP.DOC @@ -0,0 +1,689 @@ + + + + + + + + + + + W i l l i a m s + I m a g e + M a n a g e m e n t + P r o g r a m + + + A User's Manual + + + + Copyright (c) 1987 Williams Electronics Games, Inc. + All Rights Reserved + + Warren B. Davis + George N. Petro + +I. Before starting WIMP + +A> MOUSE + + Is your mouse connected and working? Has the mouse driver been + installed? (If not, type "mouse" followed by ENTER while in your + root directory (C:\)) + WIMP requires a mouse. + + If you start WIMP and your mouse is not installed, you can use keys + to exit so you can install your mouse. First press ESC to get into + the menu bar at the top of the screen. Next press the left and right + arrow/cursor keys to get to the menu labelled GENERAL. Finally press + the down arrow key to get to "Exit from WIMP" and press ENTER. + +B> ENVIRONMENT VARIABLES, IMGDIR and VDADIR + + These variables are optional. + + IMGDIR represents a directory where all WIMP image libraries are + stored and can be found. + + VDADIR represents a directory where all .vda images (that is, images + generated by the AT&T Image Capture Board, then translated to .vda + format) can be found and will be stored. + + If not defined, both of these are assumed to be the current directory. + (i.e. the directory you were in when you invoked WIMP). + + To define either/both of these, include a line/lines as follows + in your AUTOEXEC.BAT file. + + SET IMGDIR=c:\some directory + and/or + SET VDADIR=c:\the same or another directory + + It is recommended that you set up separate directories for both + of these. + +C> GSP ART PROGRAM + + WIMP runs on the PC. It communicates with the target system + through a program called ART which must be running on the target + system. You don't have to do anything to get this program running. + WIMP will automatically invoke it. + + HOWEVER, you DO have to make sure this program exists in the + directory where WIMP expects to find it. That directory is one + of two places... + + IF you have NOT defined the environment variable IMGDIR, WIMP expects + the ART program to be in the current directory. + + IF you HAVE defined the environment variable IMGDIR, WIMP expects + the ART program to be in that directory. + + ALSO, you have to make sure that the program sdbl2.exe is somewhere + in your PATH. (Seek help if you are unsure what this means). + +II. Starting WIMP + +A> Invoking wimp + + Type "wimp" followed by ENTER. You must be in the directory that + contains the WIMP program unless that directory is part of your PATH. + The screen will clear, there will be a menu bar across the top, and + some status information on bottom. + + WIMP Command Line Options + + /out= + = The art program that is to be downloaded to the + GSP. This can be either a full path name or just + the filename if it exists in the current + directory. + Note: This option overrides the variable IMGDIR. + + /r= + = A number denoting the desired resolution + 0 = 400x512 25Khz non-interlaced + 1 = 256x395 16Khz non-interlaced + 2 = 400x512 16Khz interlaced + example: wimp /r=1 + this would invoke wimp with 256x395 16Khz res. + +B> Using the mouse + + The mouse cursor appears as a solid block and should move smoothly + around the PC screen. If you move the mouse cursor to the left, + right or bottom edges and beyond, the cursor scrolls onto the target + system screen. If you move the cursor to the top, it sticks to the + menu bar. You will remain stuck to the menu bar until you CLICK the + left mouse button. + + While stuck at the top, moving left or right will select different + menus. You can move down and up through the selected menu or left + and right to and from any submenus. + + To select an item from the menu, click the left mouse button. + + 1) Using the Keyboard + + Whenever the cursor is on the target system's screen certain keyboard + keys will duplicate mouse functions. These keys help with finite + cursor movements such as moving 1 pixel while in Zoom 4X mode. + + = Mouse left button + = Mouse right button + Arrow Keys = Move the Cursor in the respective direction. + F1 - F8 = Select draw colors 0-7 respectively. + Shift F1 - Shift F8 = Select draw colors 8-15 respectively. + + Move the DRAW color select highlite with the following keys: + Grey Home = up (current color - 16) + Grey End = down (current color + 16) + Grey Delete = left (current color - 1) + Grey Page Down = right (current color + 1) + + +C> Status information + + At the bottom left of the PC screen, the following information + is displayed... + + - Current image library (i.e. last one loaded), Number of images + currently defined, amount of available memory. + + - At bottom right, the following is displayed... + DR: n1 (r1, g1, b1) ER: n2 (r2, g2, b2) + + DR: stands for DRAW COLOR, n1 is the color number, and r1,g1,b1 + represents the color value. ER: stands for ERASE COLOR. + + - WIMP verion is the version number of the PC side program. + ART version is the version number of the GSP side program. + + - When the cursor is scrolled onto the target system screen, another + display appears above the draw and erase color information. This is + the cursor position (X, Y) followed by the color number of the pixel + pointed to by the cursor and the R, G, and B values of that color. + +III. Some Basic WIMP Concepts + + An Image Library (.IMG) file is a workfile containing up to 256 + images. + + Each image has a palette associated with it. Many images can share a + single palette, or each can have a separate palette. A palette + contains only the colors used in the images which are associated + with it. The target system has a 256 color capacity. A palette may + contain UP TO 256 colors. It should be clear that two images using + separate 256 color palettes can not appear on the target system + screen simultaneously. However two images using the SAME 256 + color palette can. + + Images are created by importing them from another source (Amiga or + AT&T VDA format) or by saving an area of the target system screen. + + An image consists of pixel numbers. These numbers are pointers to + colors in the associated palette. When an image is downloaded to + the target system, its palette is loaded as well. WIMP determines + where in color ram to put the palette. It will pack as many + palettes as it can contiguously and adjust the pixel data as it + loads the image. + K E E P T H I S I N M I N D ! ! ! + + There are two ways images exist... + + 1) on the PC (either on disk or in the PC memory) + + 3) in target system Image Ram (these are called frames) + + Images which have been previously saved are taken from the hard disk + until they are modified. Then they remain in PC memory until + the image library is saved. Modifying happens by... + - changing an image with a directory range command + (i.e. flip), + - saving an area of the screen as an image, or + - uploading an edited frame upon exiting animation mode + + Once an image is put on the screen, it is no longer an "image" but is + just a part of the screen. + + Images which are part of animation sequences used in an animation + buffer are downloaded to the target system Image Ram when animation + mode is entered. + They are now considered "frames" and can be edited independently of + the way they are stored on the PC. + Changes to frames occur in the target system only. They must be + uploaded to the PC upon leaving animation mode or they will + be lost. + + Changes to images occur on the PC only. They must be saved to disk + with the Image Library before leaving WIMP or they will be lost. + +IV. Menu 1 - GENERAL + +A> Clear Screen + + This clears the target system screen to color 0. + +B> Load Image File + + A window appears listing all valid Image Library files (.IMG) in the + default directory (IMGDIR). + + To change directory, left click on the directory name and retype. + + To select an image library, left click on the name. The selected + image library is loaded. + + To cancel, left click on CANCEL. + + An asterisk next to a name means that library has already been loaded. + The last one to be loaded has two asterisks next to the name. + + Up to 8 libraries can be loaded at one time. HOWEVER, once more than + one library is loaded, WIMP sees the combination of the two as ONE + library. If you save an image file (.IMG) before you leave wimp, + ALL images are saved into a single file regardless of the library + they came from originally. + +C> Save Image File + + A window appears listing all LOADED image library files in the + default directory (IMGDIR). + + To change directory, left click on the directory name and retype. + + To select an image library, left click on the name. The fully defined + image library filename appears beneath the window. Click on this name + to save the current state of WIMP (images, palettes and animation + setup). + + To give the saved library a new name, left click on "Name:" and type + one in. The fully defined library filename appears beneath the window. + Click on this name to save. + + To cancel, left click on CANCEL. + +D> Make mouse SLOW (or FAST) + + Click on this to change mouse sensitivity. There are two possible + states, SLOW and FAST. The menu will show the one which is NOT + in effect. The sensitivity affects mouse motion on the target + screen only! + + +E> Do Some DOS + + Create a DOS shell. Allows you to do DOS commands without altering + the state of WIMP. Beware of memory contraints! Don't do this unless + you have at least 100K of memory left. (Available memory appears on + the bottom of the PC screen during WIMP operation.) + + When you complete your DOS stuff, type EXIT and you will miraculously + return to the land of WIMP. + + +F> EXIT WIMP + + Exits from WIMP. All changes are lost, so if you want to save + something, use SAVE IMAGE FILE before you exit! + +V. Menu 2 - IMAGES + + +A> Import Image + + Gets an image from a place outside of wimp (i.e amiga or vda), and adds + it to the images currently defined. + + AMIGA - The parallel connector coming out of the target system + interface card should be connected to the AMIGA's + parallel port. The appropriate AMIGA program should + be used to initiate the transfer. + Initially, you will get the message... + "Waiting for Sync" + + To CANCEL at this point, press capital C. You will + then get the option of Retrying or Forgetting it. + Use the mouse and click on your choice. + + Otherwise, when the transfer is done, give the image + a name. The palette name will be amigaxxx where + xxx is the number of colors transferred. + + vda - Enter a name for the vda image. This name must correspond to + an existing vda image file residing in the VDADIR + directory. An extension of ".vda" is assumed so + you only need to enter the filename part. The name + given the image will be "ffffffff.vda" and the + palette will be named "ffffffff" where ffffffff + is the filename. + + +B> Directory + + This command will put you in directory mode, which has many facets. + The screen is taken up by a list of images on the right, a list of + palettes on the left, and some function boxes in the middle. + Upon entering directory mode, one image is always highlighted. It + is the highlighted (or selected) image which is affected by a + function. + + To execute a function, left click inside the function box. + + To scroll within the image list, left click on HOME, PGUP, PGDN or END + + To scroll within the palette list, left click on the U (for up) or + D (for down) which appears on either side of the word PALETTE at the + top of the palette list. + + To select an image, left click on its name. + + To select a palette, left click on its name. + +|=========================================================================== +| MAIN DIRECTORY FUNCTIONS... +| (unless otherwise specified, click means left click) +| (any images or palettes required by the command +| should be selected FIRST) +|=========================================================================== +| +| LOAD IMAGE +| Click on this, then bring the cursor to the target system +| screen, and left click. The image is placed on the screen. +| The cursor must be positioned so that the entire image +| fits on the screen. +| To cancel, bring the cursor to the target system screen and +| right click. +| When an image is loaded, its palette is also loaded +| This can be done with transparency on or off. See Menu 3, +| Turn Transparency ON or OFF. +| +| RENAME IMAGE +| The selected images name becomes blank. Type in a new one. +| +| COPY IMAGE +| The selected image is duplicated. The new image is added to +| the bottom of the image list. It will have the same name +| as the original and will be associated with the same +| palette. +| +| CHANGE PALETTE +| The selected palette becomes associated with the selected +| image. +| +| DELETE IMAGE +| The selected image is deleted from the image list. +| YOU CAN NOT GET IT BACK WITHOUT RELOADING THE IMAGE +| LIBRARY. +| +| TO VDA FMT +| The selected image is converted to .vda format and +| a file written to VDADIR. The name of the file is the +| name of the image (up to 8 chars and ignoring a period +| or anything following a period) followed by .vda +| +| RANGE OPTIONS 1 +| Enter Range Mode +| +| RANGE OPTIONS 2 +| Enter Range Mode with a different set of functions +| +| PALETTE OPTIONS +| Enter Palette Mode +| +|============================================================================ + +|============================================================================ +| RANGE MODE FUNCTIONS... +| (These functions operate on more than one image at a +| time. Specifically, those which are MARKED) +| (The image list now highlights all MARKED images) +| (To MARK an image, click on its name, or use one of +| the first 3 Range functions) +|============================================================================ +| +| MARK ALL +| All images are MARKED +| +| UNMARK ALL +| NO images are MARKED +| +| MARK CURRENT PALETTE ONLY +| images which use the selected palette are MARKED +| +| COPY RANGE +| All MARKED images are duplicated. The duplicated are added +| to the end of the image list. +| +| CHANGE PALETTE +| All MARKED images become associated with the selected +| palette. +| +| SORT RANGE +| All MARKED images are alphabetized and placed at the top +| of the image list. This is a purely visual change and does +| not affect image or palette data in any way. However it +| can be used to keep images together visually. +| +| FLIP HORZ +| All MARKED images are flipped horizontally +| +| FLIP VERT +| All MARKED images are flipped vertically +| +| ROTATE CW +| All MARKED images are rotated 90 degrees clockwise +| +| ROTATE CCW +| All MARKED images are rotated 90 degrees counterclockwise +| +| PIXEL REPLACE +| You are prompted for a source and destination color. +| To choose a source color, move onto the target screen and +| left click on the pixel you wish to replace. +| Right click to the pixel you wish to replace it with. +| Click on OK to perform the replacement or CANCEL to cancel. +| NOTE: The marked images should all use the same palette. +| If the source or destination color are not part of +| the palette of a marked image, no change will be +| made to that image. +| TO SRC FILE +| All marked images are written to a file called IMAGES.ASM +| in the current directory. They are in source file format +| ready to be assembled by the GSP assembler. +|============================================================================ + +|============================================================================ +| PALETTE FUNCTIONS... +| +| These functions operate on palettes. +| +|============================================================================ +| +| SHOW IMAGES +| All images in the image list using the selected palette +| are highlighted. +| +| SUB-MERGE +| The selected palette will be merged into a master palette. +| This means that the master palette and images using it will +| not change. Colors in the original palette will be mapped +| into the CLOSEST color of the master palette. +| You are prompted to click on the name of the master +| palette. The original palette is deleted, and all images +| using it are made to use the master. NOTE: The data +| on all images using the original palette is changed to +| fit the master palette! Duplicate those images and the +| original palette first if you are experimenting. +| +| MERGE +| The selected palette is merged with another palette. +| You are prompted to click on the name of a second +| palette. The original is deleted, and all images using it +| are made to use the second. +| The second palette is modified to include colors from the +| first. +| NOTE: The data on all images using the first palette +| is changed to fit the second. +| Duplicate those images and the first palette +| if you are experimenting. +| +| CONDENSE +| Colors are deleted from the selected palette based +| on a threshhold which you set. The threshhold represents +| the number of pixels which must exist of any color in order +| for that color to remain in the palette. If the number of +| pixels of a color is less than the threshhold, those pixels +| are mapped into a similar color. If no similar color can +| be found, then the color is allowed to remain. +| To change the threshhold, click on U to increase a digit +| or D to decrease a digit. OK accepts the displayed number. +| +| DELETE +| The selected palette is deleted IF AND ONLY IF there +| are no images currently defined which use it. +| +| COPY +| The selected palette is duplicated and placed at the end +| of the palette list. You must give it a name. +| +| RENAME +| The selected palette's name is removed. Type in a new one. +| +|============================================================================ + +C> Save Work Area as Image + + This item is valid only when a "Work Area" is defined on the screen. + (see Menu 2 - GRAPHICS). The Work Area appears as a box on the + screen, and with this item, you can save what's inside as an image. + + First you must decide how you wish to save the contents of the + Work Area. + + The choices are... 1) Create a new image + 2) Replace an existing image + 3) Replace the last image loaded. + + Choice 3 is actually a subset of choice 2 and is included for + convenience. + + To make a choice, click on the choice, then click OK. + If you choose (1), you must give the image a name. + If you choose (2), the image list appears and you must click on an + image then click on OK. That image will be replaced by the + contents of the Work Area. + + Next, you must decide how you wish to save the color information. + The choices are... 1) Create a new palette + 2) Merge into an existing palette + 3) Use the palette which was + originally downloaded. + (...if one exists for the + contents of the Work Area) + + Choice 3 exists only if you downloaded an existing image, modified + it, and now want to save the changes. It will not be + available if the new image uses more colors than the original. + + Choice 2 is the same as a SUB-MERGE palette command. The contents + of the Work Area are modified to fit as closely as possible + into an existing palette. + + To make a choice, click on the choice, then click OK. + If you choose (1), you must give the palette a name. + If you choose (2), the palette list appears and you must click on a + palette then click on OK. The threshhold box appears. + You can change the threshhold if you like or not. + + Saving the Work Area can be done with Transparency ON or OFF. + (see Menu 3 - Turn Transparency ON/OFF) + When transparency is ON, the Least Square around the Work Area + is computed and saved. That is, the size of the area saved is + modified so that any padding of color 0 around the edges is not + included. + +VI. Menu 3 - GRAPHICS + + +A> Define/Undefine Work Area + + To define a Work Area, scroll onto the target system screen. + A left click fixes a corner of a box. You can now scroll around + changing the size and shape of the box. + A right click removes the box, letting you start again. + Another left click sets the diagonal corner. + + When you select the Undefine Work Area item, the box disappears and + all Work Area items become unavailable. + + To change the Work Area once it has been used, you don't need to + undefine it. Select Define Work Area again. The first left click + will start the box again. + + +B> Fill Work Area + + These items are pretty self-explanatory. You fill either the + inside or the outside of the box with either the Draw color, the + Erase color or Zeros. (see Menu 4 - COLORS for an explanation of the + Draw and Erase Colors) + + +C> Edit Work Area + + Pixel Replace - You are prompted for a source and destination color + which are selected as follows... + + Scroll onto the target system screen. + A LEFT click on a pixel sets the color under + that pixel as the source color. A RIGHT click + on a pixel sets the destination color. + You can choose one of 4 types of replacements. + Left click on the one you want, then on OK. + + Flip Vertically - The inside of the box is flipped around the + horizontal axis. + + Flip Horizontally - The inside of the box is flipped around the + vertical axis. + + +D> Copy Work Area + + For all of these commands, you must scroll onto the target system + screen and left click at the place where you want to place the + copy. If you hold down the left button, you can effectively use + the Work Area as a brush and paint with it. The copying can be + done with Transparency ON or OFF. + + NOTE: If you overwrite the original Work Area, funky results will + occur! (Try it. You might like it) + +E> Turn Transparency ON or OFF + + Color 0 is considered a transparent color when Transparency is ON. + If you Load an Image with transparency, 0 pixels will not be written. + The same is true for Copying the Work Area. When Saving the Work Area + as an Image, Transparency ON causes a least square function to happen + to the contents of the Work Area. + + When Transparency is ON, the item will read... Turn Transparency OFF + and vice versa. + +F> Draw Mode + + See Section II.B.1 -- Using the Keyboard. + + This is a general purpose mode to allow you to modify what is on the + screen. From here you can go into Zoom mode and back, or you can + draw circles and lines, or you can do some of the previously + mentioned work area commands. + Also available are such commands as Display/Remove Color Block, Turn + Transparency On/Off, and Make Mouse Fast/Slow + + Some DRAW MODE commands are... + + Freehand Dots - Draw dots with the mouse by holding down the left + (for the Draw Color) or right (for the Erase + Color) mouse button. + + Freehand Lines - Same as above, only you draw a line as you move + the mouse. + + Define/Undefine Work Area - As described under A> above. + + Display Color Block - Move mouse onto target system and click where + you want the color block to be. The color block shows you + color ram as it is currently defined. The current draw and + erase colors are shown underneath the color block. + The HIGHLITED color also denotes the current draw color. + You may select a DRAW color by moving this highlite around + the color block using the following keys: + + Grey Home = up (current color - 16) + Grey End = down (current color + 16) + Grey Delete = left (current color - 1) + Grey Page Down = right (current color + 1) + + Filled Circ/Unfilled Circ/Rubber Line - Move onto the target screen + and left click to set the first point. Then move the mouse + and left click again to complete the line/circle. This + also resets the first point. A right click will cancel the + first point. You should make sure the first point is + cancelled before you leave the target screen to do + something else. The line/circle is always drawn in + the DRAW Color. + + ZOOM - When you click on this, the Filled Circ/Unfilled Circ/Rubber + Line commands are disabled. You must move the zoomer + (a box) onto the target screen and left click over the + area you wish to zoom. Once this happens, you can zoom + in or out, or scroll the zoomer. You will probably want + to change the mouse sensitivity to SLOW. One note of + caution. If you define a work area, then zoom such that + the work area is off screen, the work area will undefine + itself. + + \ No newline at end of file diff --git a/DOC/Y-UNIT.DOC b/DOC/Y-UNIT.DOC new file mode 100644 index 0000000..67b6231 --- /dev/null +++ b/DOC/Y-UNIT.DOC @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + Williams Electronics Y-Unit Video Hardware System + ------------------------------------------------- + + + System Description + + + Copyright (c) 1989 Williams Electronics Games, Inc. + All Rights Reserved + + + + The Y-Unit video system is the successor to the Z-Unit + system that was used in NARC (1989). The system is designed + with cost reduction in mind, without taking away the tremendous + horsepower of the Z-Unit. Based on the Texas Instruments + TMS34010 Graphics System Processor, and a custom DMA, Williams + has created the most powerful coin-operated video game hardware + for the money. With its single board layout and JAMMA compatible + edge connector, it is also competitive in the kit market. + + The major changes are as follows: + + 1) Reduced image ROM storage from 8 Mb to 2 Mb. + 2) Reduced program ROM storage from 512K to 256K. + 3) Jumpers to accomodate contiguous storage of images + at n bits/pixel. + + As an added cost savings measure, most games currently + under development are using a resolution of 256x395x8 rather + than 400x512x16. This drastically reduces the storage space + required for images from ROM to Video RAM. + + The Y-Unit is theoretically the same as the previous + system. The Z-Unit Theory and Maintenance Manual is a very + comprehensive explanation of the ideas behind the hardware + operation. Please refer to this if you wish to explore these + ideas in depth. Included with this document is a system memory + map and a description of the revision 1 DMA. For operation + and programming of the TMS34010 refer to the TMS34010 + user's guide. + \ No newline at end of file diff --git a/DOC/Z-UNIT.DOC b/DOC/Z-UNIT.DOC new file mode 100644 index 0000000..2cf821e --- /dev/null +++ b/DOC/Z-UNIT.DOC @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + Williams Electronics Z-Unit Video Hardware System + ------------------------------------------------- + + + System Specifications + + + Copyright (c) 1988 Williams Electronics Games, Inc. + All Rights Reserved + + + + Z-UNIT SPECIFICATIONS + --------------------- + + Address Description + (in hex) + --------- ------------------------------------------------- + + FFFF FFFF + FFC0 0000 PROGRAM MEMORY + + 03FF FFFF + 0200 0000 IMAGE MEMORY + + 01F0 0000 SYSTEM CONTROL REGISTER (see below) + + 01E0 0000 SOUND INTERFACE + + 01D0 0000 reserved for future use + + 01C0 0020 COIN DOOR INPUTS + 01C0 0010 JOYSTICK INPUTS #2 + 01C0 0000 JOYSTICK INPUTS #1 + + 01B0 0000 reserved for future use + + 01A0 0090 DMA CONSTANT REGISTER + 01A0 0080 OBJECT PALETTE REGISTER + 01A0 0070 DMA VERTICAL SIZE REGISTER + 01A0 0060 DMA HORIZONTAL SIZE REGISTER + 01A0 0050 DMA DESTINATION ADDRESS REGISTER (Y-COORDINATE) + 01A0 0040 DMA DESTINATION ADDRESS REGISTER (X-COORDINATE) + 01A0 0030 DMA SOURCE ADDRESS REGISTER (MSW) + 01A0 0020 DMA SOURCE ADDRESS REGISTER (LSW) + 01A0 0010 DMA OFFSET REGISTER + 01A0 0000 DMA CONTROL REGISTER (see below) + + 0180 FFFF + 0180 0000 COLOR RAM + + 0140 3FFF + 0140 0000 CMOS BACKED UP MEMORY + + 010F FFFF + 0100 0000 SCRATCH PAD RAM + + 001F FFFF + 0000 0000 VIDEO RAM (BIT MAP) [Object Palette when enabled] + + + + + DMA CONTROL REGISTER + -------------------- + + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + | \__________ ____________/ | | | | | | | | + | \/ | | | | | | | | + | For Software Use. | | | | | | | | + | | | | | | | | | + |----> DMA GO (READ / WRITE) | | | | | | | | + | | | | | | | | + / Enable X Cycle <-| | | | | | | | + | Enable Internal ROM <-----| | | | | | | + | Flip About X Axis <---------| | | | | | + WRITE| Flip About Y Axis <-------------| | | | | + ONLY | Write Constant Non-Zero<-----------------| | | | + | Write Constant on Zero <---------------------| | | + | Write Non-Zero Data <-------------------------| | + \ Write Zero Data <-----------------------------| + + + SYSTEM CONTROL REGISTER + ----------------------- + + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + | | | | | | | | | | | | | | | | + a b c d e f g dp | | | | | | | | + \____________ _____________/ | | | | | | | | + \/ | | | | | | | | + LED SEGMENTS | | | | | | | | + (active low) | | | | | | | | + / Must Always =1 <---------| | | | | | | | + | Must Always =1 <-------------| | | | | | | + | Obj Pal EN=0 <-----------------| | | | | | + WRITE| AutoErase EN=0 <---------------------| | | | | + ONLY | Must Always =1 <-------------------------| | | | + | Must Always =1 <-----------------------------| | | + | Watch Dog Data <---------------------------------| | + \ Watch Dog Clk <-------------------------------------| + + + + + + + + \ No newline at end of file diff --git a/IMG/ABALL.IMG b/IMG/ABALL.IMG new file mode 100644 index 0000000..ce92589 Binary files /dev/null and b/IMG/ABALL.IMG differ diff --git a/IMG/ANEWP.IMG b/IMG/ANEWP.IMG new file mode 100644 index 0000000..e18fbc6 Binary files /dev/null and b/IMG/ANEWP.IMG differ diff --git a/IMG/ARC/ADS.IMG b/IMG/ARC/ADS.IMG new file mode 100644 index 0000000..7318f2f Binary files /dev/null and b/IMG/ARC/ADS.IMG differ diff --git a/IMG/ARC/ATTBAR.IMG b/IMG/ARC/ATTBAR.IMG new file mode 100644 index 0000000..816e197 Binary files /dev/null and b/IMG/ARC/ATTBAR.IMG differ diff --git a/IMG/ARC/BALLFNT2.IMG b/IMG/ARC/BALLFNT2.IMG new file mode 100644 index 0000000..0e60c6c Binary files /dev/null and b/IMG/ARC/BALLFNT2.IMG differ diff --git a/IMG/ARC/BALLTIME.IMG b/IMG/ARC/BALLTIME.IMG new file mode 100644 index 0000000..bff8c0d Binary files /dev/null and b/IMG/ARC/BALLTIME.IMG differ diff --git a/IMG/ARC/BAST7.IMG b/IMG/ARC/BAST7.IMG new file mode 100644 index 0000000..f9a8d9f Binary files /dev/null and b/IMG/ARC/BAST7.IMG differ diff --git a/IMG/ARC/BASTEST.IMG b/IMG/ARC/BASTEST.IMG new file mode 100644 index 0000000..e2df1f1 Binary files /dev/null and b/IMG/ARC/BASTEST.IMG differ diff --git a/IMG/ARC/BBALFNT2.IMG b/IMG/ARC/BBALFNT2.IMG new file mode 100644 index 0000000..bd4354f Binary files /dev/null and b/IMG/ARC/BBALFNT2.IMG differ diff --git a/IMG/ARC/BBALL.IMG b/IMG/ARC/BBALL.IMG new file mode 100644 index 0000000..b4043a8 Binary files /dev/null and b/IMG/ARC/BBALL.IMG differ diff --git a/IMG/ARC/BBALLFNT.IMG b/IMG/ARC/BBALLFNT.IMG new file mode 100644 index 0000000..407d23a Binary files /dev/null and b/IMG/ARC/BBALLFNT.IMG differ diff --git a/IMG/ARC/BBTEST.LOD b/IMG/ARC/BBTEST.LOD new file mode 100644 index 0000000..9a3eefb --- /dev/null +++ b/IMG/ARC/BBTEST.LOD @@ -0,0 +1,14 @@ +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +***> 2000000 +PON> +CON> +firefall.img +ASM> plyrseq2.tbl +---> F4FALL01,F4FALL02,F4FALL03,F4FALL04,F4FALL05,F4FALL06,F4FALL07,F4FALL08 +---> F4FALL09,F4FALL10,F4FALL11,F4FALL12,F4FALL13,F4FALL14,F4FALL15,F4FALL16 +---> F4FALL17,F4FALL18,F4FALL19,F4FALL20,F4FALL21,F4FALL22,F4FALL23,F4FALL24 +---> F4FALL25,F4FALL26,F2FALL01,F2FALL02,F2FALL03,F2FALL04,F2FALL05,F2FALL06 +---> F2FALL07,F2FALL08,F2FALL09,F2FALL10,F2FALL11,F2FALL12,F2FALL13,F2FALL14 +---> F2FALL15,F2FALL16,F2FALL17,F2FALL18,F2FALL19,F2FALL20,F2FALL21,F2FALL22 +---> F2FALL23,F2FALL24 + \ No newline at end of file diff --git a/IMG/ARC/BBTST.LOD b/IMG/ARC/BBTST.LOD new file mode 100644 index 0000000..08e2ddd --- /dev/null +++ b/IMG/ARC/BBTST.LOD @@ -0,0 +1,18 @@ +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +***> 474c000 +GLO> IMGTBL.GLO +PON> +ASM> plyrhd.tbl +XON> +hds1.img +---> ewing1,ewing2,ewing3 +---> ewing4,ewing5,ewing6,ewing7,ewing8,ewing9,ewing10,ewing11,ewing12 +---> ewing13,ewing14,ewing15,ewing16,stock1,stock2,stock3,stock4,stock5 +---> stock6,stock7,stock8,stock9,stock10,stock11,stock12,stock13,stock14 +---> stock15,stock16,shiek1,shiek2,shiek3,shiek4,shiek5,shiek6,shiek7,shiek8 +---> shiek9,shiek10,shiek11,shiek12,shiek13,shiek14,shiek15,shiek16,rharp1 +---> rharp2,rharp3,rharp4,rharp5,rharp6,rharp7,rharp8,rharp9,rharp10,rharp11 +---> rharp12,rharp13,rharp14,rharp15,rharp16,kmalone1,kmalone2,kmalone3 +---> kmalone4,kmalone5,kmalone6,kmalone7,kmalone8,kmalone9,kmalone10 +---> kmalone11,kmalone12,kmalone13,kmalone14,kmalone15,kmalone16 + \ No newline at end of file diff --git a/IMG/ARC/BB_MAN.IMG b/IMG/ARC/BB_MAN.IMG new file mode 100644 index 0000000..e0721b8 Binary files /dev/null and b/IMG/ARC/BB_MAN.IMG differ diff --git a/IMG/ARC/BENCHTST.IMG b/IMG/ARC/BENCHTST.IMG new file mode 100644 index 0000000..5ba7155 Binary files /dev/null and b/IMG/ARC/BENCHTST.IMG differ diff --git a/IMG/ARC/BIGBULL.IMG b/IMG/ARC/BIGBULL.IMG new file mode 100644 index 0000000..dbf96bf Binary files /dev/null and b/IMG/ARC/BIGBULL.IMG differ diff --git a/IMG/ARC/BLUEGUY.IMG b/IMG/ARC/BLUEGUY.IMG new file mode 100644 index 0000000..3b983c4 Binary files /dev/null and b/IMG/ARC/BLUEGUY.IMG differ diff --git a/IMG/ARC/BRUSH20.IMG b/IMG/ARC/BRUSH20.IMG new file mode 100644 index 0000000..667e3ea Binary files /dev/null and b/IMG/ARC/BRUSH20.IMG differ diff --git a/IMG/ARC/BRUSH24.IMG b/IMG/ARC/BRUSH24.IMG new file mode 100644 index 0000000..3643282 Binary files /dev/null and b/IMG/ARC/BRUSH24.IMG differ diff --git a/IMG/ARC/BSKT2C.IMG b/IMG/ARC/BSKT2C.IMG new file mode 100644 index 0000000..68c627f Binary files /dev/null and b/IMG/ARC/BSKT2C.IMG differ diff --git a/IMG/ARC/BSKT2E.IMG b/IMG/ARC/BSKT2E.IMG new file mode 100644 index 0000000..20efd57 Binary files /dev/null and b/IMG/ARC/BSKT2E.IMG differ diff --git a/IMG/ARC/BUTTFONT.IMG b/IMG/ARC/BUTTFONT.IMG new file mode 100644 index 0000000..de9bbc0 Binary files /dev/null and b/IMG/ARC/BUTTFONT.IMG differ diff --git a/IMG/ARC/CARDSTUF.IMG b/IMG/ARC/CARDSTUF.IMG new file mode 100644 index 0000000..9547ed3 Binary files /dev/null and b/IMG/ARC/CARDSTUF.IMG differ diff --git a/IMG/ARC/CHARAC01.IMG b/IMG/ARC/CHARAC01.IMG new file mode 100644 index 0000000..6c9e765 Binary files /dev/null and b/IMG/ARC/CHARAC01.IMG differ diff --git a/IMG/ARC/CHARAC02.IMG b/IMG/ARC/CHARAC02.IMG new file mode 100644 index 0000000..1c44c2b Binary files /dev/null and b/IMG/ARC/CHARAC02.IMG differ diff --git a/IMG/ARC/CHARAC03.IMG b/IMG/ARC/CHARAC03.IMG new file mode 100644 index 0000000..5e0bc05 Binary files /dev/null and b/IMG/ARC/CHARAC03.IMG differ diff --git a/IMG/ARC/CHEERS.IMG b/IMG/ARC/CHEERS.IMG new file mode 100644 index 0000000..fd9d958 Binary files /dev/null and b/IMG/ARC/CHEERS.IMG differ diff --git a/IMG/ARC/CHEERS1.VDA b/IMG/ARC/CHEERS1.VDA new file mode 100644 index 0000000..e6333c2 Binary files /dev/null and b/IMG/ARC/CHEERS1.VDA differ diff --git a/IMG/ARC/CHICKS1.BDB b/IMG/ARC/CHICKS1.BDB new file mode 100644 index 0000000..65c330a --- /dev/null +++ b/IMG/ARC/CHICKS1.BDB @@ -0,0 +1,45 @@ +chicks1 2000 1000 255 1 23 43 +chksa 422 844 266 554 +4000 434 495 0 0 +4000 434 414 3 8 +4000 434 408 6 0 +4000 434 282 9 0 +4000 453 341 C 17 +4000 455 282 F 19 +4000 461 326 12 19 +4000 483 514 15 7 +4000 485 466 18 22 +4000 487 306 1B 17 +4000 509 447 1E 22 +4000 513 432 21 12 +4000 515 398 24 12 +4000 520 379 27 20 +4000 525 363 2A 20 +4000 527 330 2D 5 +4000 529 351 30 6 +4000 539 417 33 4 +4000 558 462 36 13 +4000 559 375 39 17 +4000 561 304 3C 3 +4000 573 510 3F 13 +4000 597 450 42 2 +4000 643 299 45 18 +4000 680 282 48 18 +4000 682 448 4B 16 +4000 688 409 4E 22 +4000 689 414 51 15 +4000 697 493 54 22 +4000 697 313 57 9 +4000 698 355 5A 10 +4000 702 298 5D 21 +4000 705 478 60 16 +4000 707 400 63 14 +4000 714 446 66 22 +4000 715 390 69 22 +4000 720 345 6C 11 +4000 729 407 6F 14 +4000 736 297 72 21 +4000 754 414 75 22 +4000 766 282 78 18 +4000 768 480 7B 1 +4000 769 401 7E 15 diff --git a/IMG/ARC/CHICKS1.BDD b/IMG/ARC/CHICKS1.BDD new file mode 100644 index 0000000..58b1ed6 Binary files /dev/null and b/IMG/ARC/CHICKS1.BDD differ diff --git a/IMG/ARC/CHRVIC.BDB b/IMG/ARC/CHRVIC.BDB new file mode 100644 index 0000000..cc4750d --- /dev/null +++ b/IMG/ARC/CHRVIC.BDB @@ -0,0 +1,80 @@ +chrvic 2000 1000 255 1 26 78 +chrvic1 280 727 140 420 +4000 302 155 0 8 +4000 302 213 3 7 +4000 383 289 6 16 +4000 406 167 9 11 +4000 406 205 C 11 +4000 408 155 F 8 +4000 409 259 12 16 +4000 411 222 15 0 +4000 415 318 18 9 +4000 416 351 1B 10 +4000 427 259 1E 2 +4000 428 348 21 3 +4000 434 196 24 10 +4000 436 354 27 9 +4000 438 155 2A 8 +4000 441 292 2D 6 +4000 445 289 30 15 +4000 465 259 33 15 +4000 475 241 36 10 +4000 483 279 39 14 +4000 491 280 3C 10 +4000 498 326 3F 14 +4000 500 346 42 12 +4000 511 225 45 12 +4000 530 299 48 12 +4000 537 204 4B 8 +4000 557 272 4E 9 +4000 560 155 51 8 +4000 582 320 54 9 +4000 586 209 57 13 +4000 586 239 5A 13 +4000 590 313 5D 12 +4000 595 237 60 4 +4000 597 268 63 5 +4000 610 321 66 9 +4000 616 282 69 1 +4000 617 205 6C 8 +4000 622 258 6F 7 +4000 634 238 72 13 +4000 901 386 0 8 +0 901 444 3 7 +4000 951 466 75 17 +4000 979 553 78 19 +4000 1003 528 7B 20 +0 1005 398 9 11 +4000 1005 434 7E 25 +0 1005 436 C 11 +4000 1007 386 F 8 +0 1015 582 1B 10 +4000 1022 559 81 19 +4000 1035 593 84 20 +4000 1037 386 2A 8 +4000 1041 386 87 23 +4000 1042 506 8A 19 +4000 1043 508 8D 20 +4000 1055 495 90 19 +4000 1081 534 93 19 +4000 1087 515 96 25 +4000 1097 538 99 24 +4000 1105 465 9C 24 +4000 1124 524 9F 21 +4000 1136 435 4B 8 +4000 1136 511 A2 20 +4000 1137 436 A5 23 +4000 1144 577 A8 21 +4000 1159 386 51 8 +4000 1159 505 AB 21 +4000 1173 482 AE 23 +4000 1183 473 B1 22 +4000 1183 514 B4 21 +4000 1187 531 B7 20 +4000 1203 512 BA 23 +4000 1205 537 BD 21 +4000 1206 489 C0 18 +0 1216 436 6C 8 +0 1221 489 6F 7 +4000 1233 501 C3 22 +4000 1237 474 C6 22 diff --git a/IMG/ARC/CHRVIC.BDD b/IMG/ARC/CHRVIC.BDD new file mode 100644 index 0000000..10830fa Binary files /dev/null and b/IMG/ARC/CHRVIC.BDD differ diff --git a/IMG/ARC/CITIES.IMG b/IMG/ARC/CITIES.IMG new file mode 100644 index 0000000..2989e40 Binary files /dev/null and b/IMG/ARC/CITIES.IMG differ diff --git a/IMG/ARC/CITY.IMG b/IMG/ARC/CITY.IMG new file mode 100644 index 0000000..a719a70 Binary files /dev/null and b/IMG/ARC/CITY.IMG differ diff --git a/IMG/ARC/CITYLTS.IMG b/IMG/ARC/CITYLTS.IMG new file mode 100644 index 0000000..5e9661a Binary files /dev/null and b/IMG/ARC/CITYLTS.IMG differ diff --git a/IMG/ARC/CONGRATS.BDB b/IMG/ARC/CONGRATS.BDB new file mode 100644 index 0000000..8ab7066 --- /dev/null +++ b/IMG/ARC/CONGRATS.BDB @@ -0,0 +1,117 @@ +congrats 2000 1000 255 1 6 115 +congratb 448 1041 251 639 +100 461 261 0 0 +200 461 511 3 0 +200 461 265 6 0 +200 461 389 6 0 +200 461 368 6 0 +220 461 515 3 0 +200 467 511 9 0 +100 467 261 9 0 +200 467 389 C 1 +200 467 265 F 1 +200 467 265 12 1 +220 467 515 9 0 +200 467 269 C 1 +200 467 265 C 1 +200 471 265 15 1 +0 471 268 18 5 +0 471 388 18 5 +0 471 508 18 5 +100 561 261 9 0 +200 561 511 9 0 +220 561 515 9 0 +200 565 265 15 1 +0 651 268 18 5 +0 651 388 18 5 +0 651 508 18 5 +220 654 515 9 0 +100 655 261 9 0 +200 655 511 9 0 +300 657 265 1B 0 +300 657 389 1B 0 +300 657 352 1E 0 +4000 657 511 21 0 +4000 657 261 24 0 +200 660 265 15 1 +400 661 265 C 1 +400 661 389 C 1 +400 661 335 C 1 +100 747 261 9 0 +220 748 515 9 0 +200 749 511 9 0 +200 754 265 15 1 +200 757 511 9 0 +200 757 261 9 0 +220 763 515 9 0 +0 831 268 18 5 +0 831 388 18 5 +0 831 508 18 5 +100 851 261 27 0 +100 851 382 6 0 +200 851 389 6 0 +200 851 511 2A 0 +200 851 265 6 0 +210 855 265 6 0 +210 855 387 6 0 +210 855 389 6 0 +210 855 511 2A 0 +110 855 261 27 0 +220 857 515 2A 0 +220 1082 505 3 0 +200 1082 358 6 0 +200 1082 379 6 0 +200 1082 255 6 0 +200 1082 501 3 0 +100 1082 251 0 0 +220 1088 505 9 0 +200 1088 255 12 2 +200 1088 255 F 1 +200 1088 379 C 2 +100 1088 251 9 0 +200 1088 501 9 0 +200 1088 258 C 2 +0 1092 498 18 4 +0 1092 378 18 4 +0 1092 258 18 4 +200 1092 255 15 2 +220 1182 505 9 0 +200 1182 501 9 0 +100 1182 251 9 0 +200 1186 255 15 2 +0 1272 498 18 4 +0 1272 378 18 4 +0 1272 258 18 4 +220 1275 505 9 0 +200 1276 501 9 0 +100 1276 251 9 0 +300 1278 255 1B 0 +300 1278 379 1B 0 +300 1278 325 1B 0 +4000 1278 251 24 0 +4000 1278 501 21 0 +200 1281 255 15 2 +400 1282 379 C 2 +400 1282 255 C 2 +400 1282 355 C 2 +100 1368 251 9 0 +220 1369 505 9 0 +200 1370 501 9 0 +200 1375 255 15 2 +200 1378 251 9 0 +200 1378 501 9 0 +220 1384 505 9 0 +0 1452 498 18 4 +0 1452 378 18 4 +0 1452 258 18 4 +200 1472 255 6 0 +200 1472 501 2A 0 +200 1472 379 6 0 +100 1472 372 6 0 +100 1472 251 27 0 +110 1476 251 27 0 +210 1476 501 2A 0 +210 1476 379 6 0 +210 1476 377 6 0 +210 1476 255 6 0 +220 1478 505 2A 0 diff --git a/IMG/ARC/CONGRATS.BDD b/IMG/ARC/CONGRATS.BDD new file mode 100644 index 0000000..088073b Binary files /dev/null and b/IMG/ARC/CONGRATS.BDD differ diff --git a/IMG/ARC/CORTPALS.IMG b/IMG/ARC/CORTPALS.IMG new file mode 100644 index 0000000..515465f Binary files /dev/null and b/IMG/ARC/CORTPALS.IMG differ diff --git a/IMG/ARC/COUR01.BIN b/IMG/ARC/COUR01.BIN new file mode 100644 index 0000000..c418dad Binary files /dev/null and b/IMG/ARC/COUR01.BIN differ diff --git a/IMG/ARC/COUR02.BIN b/IMG/ARC/COUR02.BIN new file mode 100644 index 0000000..0a1b985 Binary files /dev/null and b/IMG/ARC/COUR02.BIN differ diff --git a/IMG/ARC/COUR03.BIN b/IMG/ARC/COUR03.BIN new file mode 100644 index 0000000..b02a0b8 --- /dev/null +++ b/IMG/ARC/COUR03.BIN @@ -0,0 +1,3 @@ +- ! ! ! ! ! ! ! ! ! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!]ô````‹``›```›```‹‹`‹‹``›`›```h``````›h`h`h`›``›`›`›``›`›h›`h`h`h`›`›h`h`›```››h`›`h`››h`›`›h›``h›``›`›hh›h`‰`‰`›h›hhh›`›``››`›h›`››‰hh‰hh›hh‰huhh›h‰`›››h‰‰h‰‰h‰`h`››```‰h›hhuhh‰›h‰`›h›h‰`›hu‰uuuv¢uuhd‰žhvhuvvh‰hhhuh›u‰h‰a÷bu‰žuuhhv›hh–u‰vd›hdhv›h–dž®nuu‰h›hhh‰u‰duhhu›uh›‰žuhuh–hhhh›‰hh›h›‰h‰‰uh‰dh›‰‰‰‰`‰`›u‰u›uhdhhhh›‰huu‰ž‰ž‰u‰`›`›u›uh›h‰uuvhh‰hhh›–vd‰dh›uu‰hu¢žuuhhhhhžu››hžuhžhhhhh›hžh‰h›hu›hu›hv‰uhuh‰vuu¢dhdu‰v´´‰d‰h›‰hu‰hdvuh‰›`›`›››‰h›hhhuhd‰vh‰‰h–¢ud‰h‰h›u‰vhu›‰hhhhh‰›uu›uhž‰udhhh›žhuh››‰‰uuh›‰hhh›h–vdd‰hhvudhvdvuuhhh›huuhhdvuhu›`›`›››u›‰hhžvh‰vuud‰žvudv‰uuu‰‰uuu¢u‰ž‰‰‰ždžucøauhuhžuuhuuuuuuu›uuuhuuhvu©÷cuuuhu›uhuuuuuuuuuuuu‰uuvuhžuuuu–u›huhuuuvhžuuuuuuuž‰hhhuhuuhuuuu›h›h›žu–u–u–uuuuuuuu›uuuuu–u–u›–huu›h›uhuuuuuuuuuužuuuu–h–u`u–u–u–u–––h–‹–`u–––––u–h–––––––––h–––h––h–––h–`–`–`–‹–`–^h–`–––h`–^`––`–``–‹–```–``^–``–```^`–``ó9!!!!!!!!!!!!!!!!!!!!!!!! !! ! ! ! ! ! ! ! ! ! ! -ðD $ $ $ $ $ $ $ $ $ $ $ $!$!$!$!$!$ $!$ $ $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$[![![[ô¸˜‹›˜‹˜‹‹›‹‹‹›‹›˜‹†‹†›‹‹‹‹›››‹›››‹›‹‹›››‹›`››‹›››››››››`›h›››››››››`››››››‰››››`››‹››`››››`›››››‹››‹››››››››‰››››››››h‰›‰›››‰›››‰››hh›h›h››››››‰›h‰›‰›h‰‰‰h‰›‰h‰‰›‰‰‰¢‰‰‰‰‰‰‰›‰‰›h‰‰‰‰‰‰››‰››‰›‰››‰h‰‰‰h‰‰››‰p†‰‰‰‰‰‰‰‰›‰‰‰‰aø‰‰‰p‰p‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰›‰‰‰‰ø¸‰‰‰‰‰‰‰¢‰‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰h›‰›‰‰‰‰‰‰h‰‰‰‰‰‰›››‰‰‰‰‰‰‰‰‰‰‰‰‰‰p‰‰p‰‰‰‰‰‰‰‰›‰‰›‰‰‰‰‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰dp‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰›››‰›‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰n­‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰h‰‰›‰‰‰‰‰‰‰›‰‰‰›‰h‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰›h‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰›››‰››‰‰‰›‰‰‰‰¢d‰‰›‰‰‰‰‰‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰›‰‰‰‰‰‰‰›‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰a÷a‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰†››†‰›†‰‰ë©‰‰‰›‰›››†›†‰‰‰‰‰‰p‰‰›‰p›‰‰‰‰†›†p›‰›‰››†‰›‰‰‰›‰››†›‰›‰››‰››†›‰‰‰›‰›hh‰›h‰›‰‰›››››†›†›››››››‰›h›†›†˜›››››h›hhh››››››››››†h›†›††›††›››†›››†›†››††††››››››†›f†`†`›†`›`†‹›f››`››››››`›››››‹›˜f˜‹`›˜›†‹›`››‹˜˜‹‹‹˜‹›‹†`›‹›`›‹†‹˜‹‹–ó[$[!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$ $!$!$ $!$!$!$!$!$!$ $ $ $ $ $ $ $ $ $ $ D77 2EM<22- $ $ ! ! ! ! ! ! ! !! !!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!![![![[!![!!$]ôh`›`›`›››`›››››f›››››˜˜††›˜f‹†˜‹˜†‹††‹`›h››››†›`›hhhhhhh››››hh››†››†››†`†›†›f›†›†›p›†››†››p›†›†›‰†›††›†‰hh›†††›†›h‰dd‰‰‰‰‰‰h‰›‰››h‰›‰‰››‰››d‰d‰‰‰‰‰‰‰‰‰‰dd‰‰d‰ud‰d¢d‰‰‰‰›‰‰‰‰p‰‰‰‰‰‰‰p›‰‰p‰p‰p‰p‰p‰›‰‰‰‰†‰pp›†‰†‰›‰›††††p†›‰·÷‰‰‰›‰›‰‰‰‰‰‰‰‰‰‰‰‰›‰p‰‰‰‰‰aøv‰p‰p‰‰‰‰‰‰‰‰p›‰‰‰‰‰‰‰‘‰‰p‰p‰‰‰‰‰‰p‰‰p‰‰‰‰‰‰‰¢‰‰‰‰›‰‰‰‰‰‰p‰†›p›¢‰‰‰‰†p‰p‰‰‰ddd¢‰¢‰‰‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰d¢‰¢‰‰d‰‰‰‰‰d¢¢¢¢d¢d¢d¢d¢¢‰‰¢‰p‰‰‰‰‰‰‰‰p‰‰‰‰p‰p‰p‰p‰p‰‰‰‰‰‰†‰†›‰p›†p­´‰‰‰‰††p‰p‰‰¢¢‰d‰‰‰‰‰‰‰‰‰›‰‰‰‰‰‰‰‰p‰‰d¢¢‰d¢‰‰‰‰‰‰‰d¢d¢d‰ud¢‰¢¢‰‰‰‰p‰‰‰‰‰‰p‰p‰‰‰p‰‰p‰p‰p‰‰‰‰‰‰‰‰‰‰‰†p‰‰†›††‰¢‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰p‰†‰‰‰†‰‰‰p›†‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰dd¢d‰d¢‰‰ø·‰¢p›p‰‰p›‰p‰p‰‰‰‰›p‰‰‰‰‰‰‰´­p‰†‰›p‰p›p‰†‰‰p›p›††p‰p‰dd‰‰‰‰‰‰‰‰‰‰‰‰›‰‰›‰›p›p‰‰d‰d‰d‰‰‰‰‰‰‰‰‰‰d‰‰ddd‰‰d‰‰‰‰p›p›‰›p‰p†‰p†›p††›†›‰†h†›››†››††††˜›†††˜†››†›††›††›†hhhhh››h›››››`›f›f››†›`†›‰‰‰h›‰h››h›››h›hh›hhh›h›h›†›†‹†`†›˜›˜‹†˜†‹††`‹†˜†‹˜˜†‹˜˜‹˜‹˜˜‹˜˜˜˜‹ô9!![![[![[![!!!!!!!!!!!!!!!!!!!!!!!!! ! !!! ! !!! ! ! ! ! ! ! ! ! $ $ $ $ $ $ -ñ2 7 $ $ -òòòóóóQE<<2-$ $ $ $ $ $ $ $ $ $ $!$!$!$ $!$!$ $!$ $!$!$!$!$!$!$!$!$!$!$!$![![![[[![![!!![!![[Jb‹‹‹`››`›`››`›``›h`hh›`†‹‹†‹›˜›`›››†››h‰hhh›h›h›‰hh›‰h‰h‰‰hh‰›h†hh‰h‰hh›‰›h››‰h‰‰‰‰‰‰‰d‰h‰‰›h›‰h‰‰‰‰‰¢d‰d‰dd‰‰‰›‰‰‰‰‰‰›‰‰‰‰h‰›‰†›‰‰‰‰‰›†‰p‰p‰‰‰‰‰d‰‰‰‰‰¢‰d¢¢¢d¢‰¢d¢‰d¢d¢¢¢d¢d¢¢‰‰‰p‰‰p‰†‰†›p›p‰†›†‰‰‰‰†‰‰‰‰‰‰‰‰‰¢‰¢¢‰¢¢¢‰‰‰¢‰´­p‰‰p‰‰‰p‰‰‰‰¢‰¢‰‰‰‰‰‰‰p‰p¢·÷p¢‰¢‰‰¢‰‰p‰‰‰‰‰p‰p‰‰¢‰‰‰‰‰‰‰‰p›p‰†‰††›†ppp‰p‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢d”¢”¢¢‰‰‰‰‰d¢¢‰‰dd¢d‰‰‰p‰‰‰¢‰‰‰p‰‰p‰‰‰‰‰¢¢¢‰¢‰¢¢¢d”d”¢d”¢¢¢¢dg¢¢d¢¢¢¢¢¢¢¢‰¢‰‰p‰†‰p‰†p‰p‰p‰p‰‰‰‰‰p‰¢‰‰‰¢‰ªë”¢”¢¢¢¢‰‰‰¢dd¢‰¢¢¢¢‰‰‰‰p‰‰‰¢‰‰p‰p‰‰p‰‰‰¢¢¢d‰¢¢¢¢¢¢d”¢d”¢¢¢¢dg¢¢¢¢¢‰”¢¢¢¢‰‰‰‰p‰›†p›p‰p‰‰‰†pp‰‰‰‰‰p‰‰‰‰‰¢¢¢d‰‰‰‰‰d¢d¢‰¢¢d¢¢d¢¢d¢¢¢‰p‰‰‰p‰‰‰p‰‰¢p‰¢‰¢d¢¢¢‰‰¢‰¢¢¢d”¢¢d¢¢d”¢¢ëe¢d¢¢¢¢¢‰¢¢‰‰‰‰¢¢d¢¢¢¢¢¢d¢de´‰‰‰p¢‰¢¢¢¢¢¢¢d”¢¢¢‰¢‰‰‰‰¢‰¢‰‰¢d‰‰‰‰‰p‰‰p‰‰‰p›‰›p‰‰‰‰‰‰¢‰‰‰‰‰‰‰d¢d¢d¢‰‰d‰d¢‰d‰d¢d¢ddd‰‰‰‰‰›‰†›†›†›†›p›††››‰†‰›†›h‰›‰h‰‰ddd‰‰‰‰››‰h‰‰‰‰›‰h‰hh†›†‰›››h›†`›†›†›››››h››†›h›h›h‰hhh‰h›h›hhhhh‰›‰hhhh›››`›†‹˜˜†‹˜‹†`˜‹˜›`f›‹†‹˜›‹‹›`–ô[[!!!![!!![![![![!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$ $!$!$!$!$!$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 7 Añ $ $ $ ]QóóòòòóóóóóóQE<]2$$ ! ! !! ! !!! ! !! !!!! !!!!!!!!!!!!!!!!!!!!!!!!![![![[![![!!!!!!!!"[![[!9ô˜˜›†›†`›†›†`†›†›˜`†›`›hh‰‰h‰hhh‰‰hhh›hh‰›h‰hhh›††›†›h››››hh‰›†‰‰‰‰›‰››†›†›p›p‰‰‰‰‰h‰‰‰‰‰‰‰p‰‰p‰h‰‰‰d‰d‰‰‰‰‰‰‰‰‰†‰†‰››‰‰‰h‰‰‰‰‰‰d‰‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰p‰‰p‰p‰‰‰dd‰‰‰d‰‰¢‰¢‰d¢d¢d¢dd‰¢‰¢‰‘‰¢‰¢¢¢‰¢¢‰¢¢¢¢‘¢¢¢¢‰¢¢¢¢¢¢¢¢¢¢d¢‰¢‰p¢‰p¢ùc¢‰¢‰¢‰¢‰¢¢¢¢¢¢d‰¢‰‰¢‰‰‰¢‰‰e®›‰‰‰¢‰‰pp‰¢¢¢‰‘¢¢¢¢¢¢¢¢¢¢¢‘¢¢‰p¢¢‰‰¢¢¢¢‰¢¢¢¢¢‰¢¢¢¢¢‘¢¢p‰‰p¢¢¢¢¢¢d¢dd¢¢‰‰¢p‰‰‰¢‰¢¢‰¢¢¢¢¢¢¢¢¢¢¢¢‰‰p¢¢¢¢¢d‰d‰p‰p¢‰‰¢›‰dd¢‰d¢d¢¢d¢¢¢gd¢¢¢gd‰¢¢¢‘¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢¢¢¢¢¢¢”¢´¤d¢dd¢¢d‰¢¢‰‰‰‰‰¢d‰d¢¢¢d¢‰¢¢d¢‰¢‰‰‰¢‰¢‰‰d‰‰‰p‰‰‰‰‰‰‰‰¢¢‰d¢¢d¢¢dd¢gd¢‰d¢d‰¢¢‰¢¢p¢¢¢¢¢¢¢¢¢¢¢¢¢‰¢‘‰¢¢‰¢¢¢¢¢”d‰‰‰‰¢¢¢¢¢‰¢¢d¢‰‰‰¢‰‰‰dd¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢d¢d¢”d¢¢‰‰‰‰¢‰d¢‰¢d¢dd‰e뢢¢¢¢d¢‰‰‰¢¢‰¢‰‰¢¢¢¢dd¢¢¢¢bø¢¢¢‰‰¢¢d¢”d”d¢dd¢d¢d‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰¢‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰p‰p‰‰‰‰‰‰‰¢d‰‰‰‰‰‰‰‰‰‰¢d‰‰‰‰‰‰‰†‰p‰›‰‰‰‰‰‰‰‰p‰¢‰p‰‰‰p‰‰‰‰‰‰d‰‰d‰‰‰‰‰h‰†››†›†›†›››p››h‰›h‰‰›†›‰†›››››h›h›†›†›††›†›››‰›››†›†›†›››h››››››f›††››†››`†›››››››f››˜†››`›†›››hô9![[![!![!![![![![[![![!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ! ! !!!!! !! ! ! ! ! ! ! $ $ $ $ $ $ $ Dñ- $ $ $ $ $ $22MIòóóóóóóóóóóóóóóQE]2]$ $!$!$ $!$!$!$!$!$!$!$!$!$!$!$!$!$!$!$[![[[![!![!!!![![![[!"[[!!"!"'­¸`›h››`†‹``›››f›››‰›››››››`›››››`››››hh›››››››†f›†˜›††›‰‰p›‰p‰p›††›†›‰p‰›h‰›‰››‰‰‰‰‰‰‰‰‰‰‰d‰‰‰‰p‰‰‰‰‰¢dd¢dd¢‰‰d‰d¢d‰¢‰†‰p›†›p‰‰‰‰‰‰‰›p‰›‰‰‰‰›‰‰‰›p‰‰pp‰p‰p‰p‰‰‰‘¢¢¢p¢d‘¢¢¢d‰‰¢‰¢‰¢‰‰‰¢‰¢‰¢¢¢¢d¢¢¢gd¢”‰‘d¢‘¢¢d¢g”d¢¢¢¢d¢d¢‰‰¢¢uª¢¢¢¢d¢¢g¢””d”d¢¢¢¢¢¢¢¢¢¢¢”døep‰pp‰‘¢‰¢‰‘‰¢¢¢¢p¢‘¢‘¢‘¢¢p‰‰p¢‰p‰pp‰p‰‰¢‰p‰‰‰p‰¢‰¢d‰p¢¢‘‰¢‰‰¢¢””¢”¢¢”d¢¢g¢”¢¢p‰‰‰pp‰p‰¢d¢d‰‰p‰‰¢‰‰‰‰‰‰¢‰‰p¢p‰p‰p‘p‰‘‰‰¢¢¢¢p¢‘d‘¢¢¢d‰d¢¢¢¢d¢¢¢d¢d¢¢¢d¢¢d¢¢¢g¢¢¢¢¢¢¢¢gd¢g´¤””¢”d¢g¢¢”¢g¢‰‰‰pp‰p‰¢¢¢¢d‰‰‰p‰‰p‰‰‰‰¢¢‰‰p‰‰pp‰p‘¢‰pd‰‘¢¢¢¢‘¢¢¢p‰¢‰‰¢‰¢‰¢‰¢p¢¢‰¢¢¢¢d¢¢dd¢¢¢¢”d¢‘¢¢¢‘¢gd¢¢¢¢¢¢¢gd¢‰‰‰d¢‰¢‘‰¢‰¢¢¢¢¢¢gd¢d¢d¢ddd¢”ddd¢¢dd‰¢ddp‰‘‰p‰p‰¢¢¢¢¢‘¢·®”d¢d‰¢¢¢¢¢dp¢‰¢¢d¢gd¢¢d¢¢¢v§v¢‘¢¢¢¢¢dd¢d¢”¢¢”d¢¢¢¢¢¢¢¢¢‰pp‰pp‰‰‰‰‰‰‰‰p‰‰p‰‰‰‰‰p‰‰‰p›‰p‰pp‰p‰p‰‰‰‰¢p‰p‰‘‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰‰‰‰‰p‰‰‰‰d‰d‰d‰d‰‰‰‰‰‰d‰d‰›†††›†‰†›‰›†›†›†›†›†h†››†››††›†›††›†††›†f›h†›†›†›f†›†˜`†›››`›f›`›†›››`†`†››`››h`†›†`†`†`›–F[!"[!"[!"[!!![!!!999999E99999E9E9E9E99E9]]EEEE99999]9]9]9]E]]]]]]]]]]]]]]]]]]]M]]<]]]TKùùùùùùùùùùúøYXW&WXWX&XWXWXWX:ù“‘¢¢¢¢¢“¢‘¢‘¢‘‘‘‘“‘“‘¢‘¢“““““ggg”g”””gg£”££££££££””””””mm””ššš£š£š£š££££££š£š£š££š££¦£££££š¦£££££££¦¦££££££š££ššššsšssšœœšssˆšssŠssissššˆˆššœˆšœšˆˆˆšššššššššššššˆˆœˆˆˆˆšš£tz¯¶{tssŠŠŠssšššˆššˆšˆššššššššššˆšššššššˆsˆˆssˆŠssœssŠsŠˆssŠsŠŠsŠŠsœˆœššˆœˆœˆœˆšˆˆsssssssjssœšsœššˆˆœssˆœœˆœˆœšˆˆšˆˆˆœˆsˆšššššššššˆˆššš£ššššššššššššˆˆˆsˆsŠsŠsssˆssŠsssŠssŠŠŠŠŠœˆˆššˆššššˆššššˆˆˆˆˆˆˆšˆˆˆššˆˆšˆˆˆˆˆšˆˆšššŠŠjsŠŠsŠŠs}s¬¯šššššˆšˆšˆššššššššššššššššœšˆˆsˆsŠŠsŠsssŠss}sŠŠsŠiŠŠtsˆsˆˆˆœˆœˆˆœœšˆˆˆˆˆˆˆšššˆššššˆˆšˆœœˆˆšˆšˆššsjŠsŠŠsŠsŠŠssˆššššššˆšˆˆššššššššššššššššˆˆˆˆŠs}ssŠsˆœsŠsŠssŠsŠŠŠsiŠŠsŠssssstŠsŠˆšˆˆŠsˆˆˆˆˆ}ˆˆˆ}ˆˆˆˆˆˆˆˆˆˆˆˆsŠtŠŠŠsŠsŠsŠŠŠsˆšššššššy¯¶”š£šš£šššššššššˆšsˆsˆssssssˆsˆsŠssˆsssŠsŠsˆššššššššššššššššˆšššššššš£ššššššššššš£££sssssˆssssss¦££¦££££š£££££¦“g£¦££££g£££šš££šš£šš£šš££££££““““£“g““““£“£g££““£“““‘“““““““¢“““‘¢””””£”g”g£””®:XWXWX&XXWXWXW&XW5ùùùùùùùùùùùùùùùùùøùøùøøùøøøøøøøøøøøøøøøø÷ø÷÷ø÷÷÷÷÷÷÷÷÷÷÷T÷÷T÷÷öT÷÷ö÷TëöööööööTõ'"["""![["[[[[""[![[![!![Mñ[!!!["!["!["!["["""!"["""=FôFJ=;84,,',######[#######'##'#'#'#'##&W#W&#WW#&WWWWWWWWWWWWWWWWWWWW&Y456HFFøúù5WW&XX&XWX&X&XXW%R“gg““ggg££g”“”“““““““g£”£g””””£”££gg“””£g”££gg£££š£g££”£££££g£££””£””£££££££££££š£££š£šš£š££££¦££¦££šššˆšˆšššššššˆšsšš£šššššššsšsssssssšˆšˆš£ssssˆššˆššˆˆˆsššˆsssššššœssœsssssˆšˆšˆˆšˆšˆˆˆššˆˆsššˆšššœŸûý{jššˆˆˆ}Šˆˆˆˆˆˆˆˆ}sŠsˆšššššššˆšˆˆˆˆsŠsŠœsˆˆˆˆœŠsŠssˆˆˆšˆˆˆˆˆˆˆˆœˆœœœœsˆssœœˆˆœˆœˆˆšˆˆˆšˆšˆšˆˆšˆˆsˆˆˆœˆˆœˆœˆšššˆˆˆsˆ}ˆˆˆˆˆˆˆ}ˆˆŠsˆˆšššš¦šššˆˆˆˆsssŠˆsˆˆˆˆˆŠsˆsˆˆˆˆšˆˆˆˆˆˆˆˆœšœˆˆˆšššššˆœœœssˆˆšˆšˆˆšˆššˆˆœšˆˆsˆˆsŠœsŠˆsˆsˆŠŠŠs—¯}ˆˆˆˆšˆˆˆˆssŠˆsœœšˆšˆˆˆssŠssŠssssˆˆˆˆˆœŠˆsˆšˆˆššˆœˆsˆˆˆˆœssssšššœœjœssssˆˆˆˆšˆˆˆššˆˆššˆšˆˆsˆšˆˆˆššššš£šˆšˆˆˆsˆˆˆˆšˆˆˆˆˆsŠšˆšššš¦ššššˆˆˆˆsssˆsˆˆœˆˆšŠŠsˆsˆˆˆšˆsˆˆsˆˆˆššœˆˆššššššœsœšˆssˆœšˆˆˆšˆšˆšˆšššˆsˆˆŠssˆsˆˆsˆˆˆssŠssˆˆˆsŽý¶{šˆˆsˆˆššš£š£ššˆššˆˆšsssˆˆšˆšˆsssˆˆšˆššˆšˆˆˆšššššššššššššššššš£šššš£š£ššš£š£šššš£š£££££šššš£ššš£š££ššššš££££g¦gg££££££š”š”£££££g£””££g££gg£££££g£gg£g££gg“g£““““£ggg““““““““““““““““““gg¢g¢gg¢“¢¢g¢¢ VYXWX&XW&X&XW&XWW&&&'&YY'''Y&Y&''&Y''&'Y'''''&''&'&.,&.,&,&,&&,'.,.,&,',,',,,'[',,,,,[,',,',,,,",[""""["""["!"![[!["!!["![[D9!"""[!"[!""[""["["["""""9ööTëTëëöë÷÷÷TöõFF;J;484,''###'###'#W#W###W##WW#WWW#W&WW&WWWWWWWWWWWWWWWWWWWWXX&+WXXWXWXWX&XXXWXX:씓¢“‘““““““““g“g““““““££gg£“g£ggg£g“£gg“g££g£g££££££££££££”£££š££££šš££££££££š£š££££š££””š”££££šš££ššššššššššššššˆššššššˆsšššššššššsššššššˆˆšˆšššˆšsˆššˆsˆˆšˆšˆˆˆšˆˆˆˆšˆšˆˆˆˆššˆˆsŠˆˆššˆœšssˆœœœsœsœˆƒ°ztššˆsˆ}ˆˆˆˆˆˆˆˆˆˆˆsˆˆˆˆˆˆˆˆˆ}ˆˆŠˆs}ˆˆˆˆˆˆšˆˆˆˆˆ}ˆˆˆˆˆˆˆŠˆˆˆˆssˆˆ}sŠŠˆ}ˆˆˆˆˆˆˆˆˆˆˆœˆsŠˆœšššˆššˆšˆššˆšˆœˆšššˆššššˆˆŠˆˆˆˆˆˆˆˆˆˆœˆˆŠ}ˆˆˆˆˆˆ}ˆˆˆˆˆ™sˆsˆˆsˆˆœˆˆœˆˆˆˆˆˆˆˆˆŠ}ˆˆˆssˆsœˆˆ}ˆˆˆs™ˆˆˆˆˆˆˆˆˆssˆŠŠsˆššˆšˆˆˆˆšsŠŠŠŠŠsˆˆˆˆœˆs¬¯ˆŠˆˆˆˆˆˆˆˆˆˆˆsŠˆˆˆˆˆˆsˆŠˆˆˆœs}ˆ™ˆˆsˆšˆsˆœˆ}sˆˆˆˆˆˆˆ}ˆˆˆsˆˆˆˆˆs}ˆˆˆˆˆˆˆˆˆˆˆˆœˆšsˆsŠŠšˆšˆˆœˆsŠˆœsœœœœsœˆššˆšˆššˆˆŠˆˆˆˆˆˆˆˆˆŠˆsˆŠˆˆˆˆˆˆˆ}ˆˆˆœsŠˆs}ˆsˆššsˆˆˆˆˆˆˆˆˆˆˆˆŠˆˆˆssŠˆsœˆsˆsˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠsˆšššˆšˆˆšˆŠsŠŠŠŠˆˆˆœœˆsˆœ}sˆŽý°ƒsˆˆˆˆˆˆœŠˆˆˆˆˆˆˆˆˆˆˆœˆssˆsˆsˆšˆˆˆšˆˆsˆšˆˆšˆˆˆsˆˆˆsssˆssssˆsšˆššššššˆššššsˆšš££š£ššššš£š£ššššš£££££¦ššššššššš£ššššššš£š£ššššš£šššššš£š£££š£š£š££££££££š££££”£££”£”£££g££“£££g““g£££“¢‘“‘“““““¢“““““g““‘¢‘¢“ù5WXXXWXXWXWXXWXXWXWXWWWWWWWWWWWWWWWWWWWWWWWWWWWW#&WWW#WWWWW##W##W#W#'W################""#"""""""""""[""["!"""""!"!"["![[![9ð2!"[[[!"[""[["["["["""""['Föëö÷öT÷TTëTë÷÷÷÷ë÷÷÷÷÷ø÷ø®T÷FF;?;.61.'&&#&WW#&WWW&WWWWWWW&W&WW&WW&WW&XWWXWXW&WXWW&X&X&XXXXWXXX&XV®¢¢“‘¢‘‘‘‘‘”£”g”£g£g££g”g£g££g£££gg££££££££š£££š££££££££££££££££š£š£££šš£ššššš£šš£šššššššššššššššš£ššššššššššš£šš¦£š¦šššsssssssšsˆˆˆˆˆsˆšššˆˆˆˆˆˆˆˆˆsˆˆ}ˆˆˆˆšˆˆššššˆˆœsˆsˆsˆšˆˆˆˆššˆˆˆ}ˆˆˆˆˆˆsˆˆˆ}ˆs}ˆˆˆˆˆˆˆˆˆˆ¦z¶°€ˆŠŠŠsssˆsŠˆˆssœˆˆs}ˆˆˆŠ}ˆŠˆŠ™}ˆˆˆˆˆˆˆˆˆˆˆˆˆŠŒŠŠŠŠŠŠŠllltltlllttŠŠŠqŠŠ~}}Š}}}Š}™q}}}}Š}}}}™}}}}s}ˆ}}Šˆˆˆˆˆˆˆˆ™ˆˆˆˆˆšˆššˆˆšˆˆŠŠŠŠsŠˆˆŠˆssŠsœsˆsˆŠˆˆsˆˆŠltŠŠŠlsŠŠŠŠŠlllttŒllltt~ŠŠŠ}Šˆˆˆˆˆˆˆˆ™ˆˆ}™}ˆˆ}}ˆˆˆ™ˆˆˆ}ˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆ¬¡ˆˆˆššˆšˆˆˆˆŠŠŠŠŠsŠˆŠs}ssˆss}œsˆsˆˆˆˆ}Šˆ}}}œ}}}}}}ˆŠˆˆˆˆˆˆˆˆœˆˆœˆŠˆ}ˆˆˆ™ˆˆˆ™ˆˆ}}ˆ™ˆˆˆ}sˆˆˆˆˆˆŠˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆšššˆˆšˆšŠŠŠŠs}s™ssœssœˆˆˆˆsˆœˆˆˆˆŠlŠt~ŠŠŠŠˆŠ}sitŠŠŠtŒtltt~ŠŠŠˆŠˆˆˆˆˆˆˆˆˆˆˆ™ˆ™ˆ™}ˆ}ˆˆˆˆˆ}ˆˆˆˆšˆˆˆˆˆˆšˆˆˆˆˆˆ¯ýztˆœˆˆsssˆˆˆˆ}ˆˆˆ}ŠŠŠ}œ}™ˆ™ˆˆˆšˆˆšˆˆˆˆsŠŠsˆs}sstŠŠŠjŠjtjŠsŠˆsˆŠˆŠˆˆsˆˆˆˆˆˆˆˆˆˆˆšˆššˆššˆˆšˆšˆšˆššš£šš¦ššššššsššššššššš£šššššššššˆššššššš£££££š££š£ššššš£mm””££š£š£š£££££££££££££g£“g£g£g“£g“““g“““¢“‘“““ V%&XXX&XX&X&X&WX&XW&X&XWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW###W'W#&##'####'#'##'##'"'"#[#"'"""[#"[#""["""""""""[[["""[[!"[!"[![MD[[[!!"["![["!"["""""""[""["''[,9489;?õTT÷÷÷÷÷÷÷ø÷ø÷÷øøøøø®øøøøøøøø÷TTT???;;11&&W&WWWWWWWWWWWXWXWW&XW&XWXX&XXXWXXX&X&XXX&XX5짧§§§§§§ £gg“““““““gg“g““g££““g“£££g£g££š££££££££££g£g££££££££”££££££££££££££¦“££g£££”££££”£šš£š££šššššššˆˆšˆˆˆšˆšššššššššššššššˆšˆšsššššˆšˆšˆˆˆssˆšˆœˆšœˆˆšˆšˆšššššˆœˆšˆšœœˆœˆˆˆˆššˆ¦£ˆššˆœˆšœˆœššsœœœˆˆˆˆ€¯U¬€ˆˆœˆœŠŠŠsŠŠŠŠtŠŠttlttlˆˆˆˆšˆˆˆˆˆˆˆˆŠˆˆœltitiŠŠŠŠŠŠŠŠ~tŠltl€lltiŠŠ}Š}ŠlŠtt~ŠŠŠŠŠŠŠŠiŠŒttlt€llŠŠŠsˆŠˆˆŠˆ}ˆ™™ˆˆsŠŠŠŠˆ™ˆŠ}}œŠtŠŠŠtŠŠŠŠŠˆˆˆˆˆˆ™Šˆˆˆˆˆ™ˆˆˆŠ}ŠŠŠŠ}ˆ}}Š}sŠlŠŠtŠŠŠŠŠŠŠŠŠŠŠŠŠtŠlŒŠŠŠŠˆs™ˆšššššššššššššššˆšššššˆ¦šˆš¯¯}Š}Š}ˆ™ˆ™ˆˆˆˆˆˆˆˆˆˆ}Šˆˆˆˆˆ™ˆ}ˆˆˆˆˆˆ™œˆ™ˆˆ™ŠŠŠœˆŠ}ˆˆˆœˆˆˆˆœˆšˆˆšœˆˆœˆšˆœœŠœˆˆˆššˆšššššˆˆˆˆˆœšˆšˆšœsœˆœœˆˆˆˆœˆˆsŠŠŠŠŠ}}ˆ™ŠœiŠŠŠŠŠtŠŠ}s}ˆˆˆ™œ™Šˆˆˆˆˆ}™ˆˆˆˆsŠŠŠ}ŠŠŠ}œ}lttitŠŠŠŠŠŠŠŠŠŠŠŠŠŠŒlttŠŠŠŠˆ}ˆšš£š¦ššššššššˆšššššššˆ¦šˆšˆ{¥¯€ˆœŠsŠŠŠŠŠtŠŠtttlttttšˆˆšššˆˆššˆˆˆˆœˆtttitŠŠŠŠsŠsŠtttttt€ltttŠŠsˆˆsŠŠŠŠjiŠssŠssssstjsst€ttjsssšsššššˆšˆˆšˆšššsssssjjjjjj££££££££££š£šš£šjsšmjmmmmš”š££”””£”š”£””””””mm””£”££”§§§§§ì5XX&XX&XXXXWXXWX&XWXWXW&XX&XWX&XWW&WW&WW&WW&WW&WWWW#&WW&W#W#W##W#W'#'###'##'####'##'#"#[##["#"["""["[""["""""[[["""[""[!"[,ñ][![""["[""["""""""""["""""""""###"#""###"'&,8168;?FFTø÷øøøøøøøøøøøùøøùøùøùùùùùùøHHF::?5/+Y%W&W&XWX&XX&XWXWX&XXXWXXXXXXXXWú®¢““““g“£g£“£“”£””””g£“£“£“g£“£g£££g£££š££££££š££š£š£ššššššš£££š£š£š£šš£ššššˆšˆšššššššš£šššššššsšsssšˆššššššˆšššššˆšˆˆssssˆˆšššœššššššˆˆˆšˆšˆœˆˆˆšˆ}Šˆœˆˆˆ}ˆ}ˆˆ}Šˆˆˆˆˆˆˆˆšššˆˆˆˆˆˆˆ}ˆ}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆœˆŠˆ°¶Žsˆˆˆ}Š}Š}}}s}ˆˆˆˆˆˆ}s}Š}ŠŠŠ~ŠŠŠ™ŠŠ~ŠŠ™}ŠŠˆŠŠŠŠŠˆˆ}ˆˆˆ}Š™ˆ}}ˆ}}}}ˆ}Šˆ}}}}ˆˆˆs}ˆ}ˆˆœs}}}ˆ}}ˆŠ}ˆˆ}}ˆ}}ŠŠŠŠtŠtŠŒtŠtŠ~s}ššˆˆˆˆˆˆšˆˆˆˆšˆˆsˆŠˆœˆˆˆšˆšˆšˆˆšˆˆˆ}ˆˆˆˆœˆˆˆ™ˆˆˆŠ}ˆ}}ˆ}}}}}}Š}Š}™sˆˆˆ}}ˆ™}ˆ™}ˆ}ˆˆ}ˆ™}’ˆ}ˆ}ˆˆ’ˆŠŠŠiŠŠŠ|°ŠŠŠŠ™Šˆˆˆˆˆ™ˆˆˆˆˆ}œˆˆˆœŠŠŠŠŠŠˆœˆœˆˆœˆˆšœˆœˆˆˆˆˆˆœˆŠˆˆˆˆŠ}™ˆ}™ˆ}}™ˆ™Š™ˆˆˆˆˆˆˆˆˆˆˆˆˆšˆšˆ™™šˆšˆ™}ˆˆˆšˆš™šˆœˆŠˆˆœŠŠttŠˆsŠšˆšˆšˆˆˆšˆˆˆˆˆˆˆˆœˆsŠˆˆˆˆšˆšˆˆˆˆˆˆ}}ˆˆˆˆˆˆ}ˆ™ˆˆ}s}s}}}ˆ}}}}ˆ}ŠˆŠ}œˆˆˆˆˆˆˆsˆ™ˆˆ}}ˆ™}ˆˆ™}}ˆˆ}™}ˆˆŠŠŠ~ŠŽ³Ÿšˆˆˆs}ˆŠ}Š}ˆˆˆ}šˆˆˆˆˆŠˆˆŠ}}}ˆŠŠŠ™ˆŠŠœˆˆˆˆœˆˆŠˆsˆˆˆˆšˆˆˆˆˆsˆsˆˆˆˆˆˆsˆˆsˆsˆššˆˆˆˆˆšœˆšˆˆˆˆˆˆˆšsššˆšˆˆˆsssŠssjšššššššˆšˆššššššš£š££šššššššššˆššš£š£ššš£šš££š£š£££££”š£££££££š££££££££££g££g££g£££££g£££ggg•m€§§§m®ù%XXXXXX&X&XX&XWXXWX&X&XW&WX&WWW&WXWWWWWWWWWWWWWWW&WWWWWWWW&#W&#W##WW##'#'##'#'#####""'##"###[##[""""""""[""[""""[["![[""![ED[!""[["["["""""""["["""[#[#"[#"'""'#[######'#W######W#&&'4[666FJFTK÷øùøùùùøùùùùùùùùùùùúùµùùúùúRK>:::/:/+%&XXXXX&XXXXX&XXXX:û”ggg““““““““£££££”£””””””””””””””””””””””£gg£gg£g£££££š£ššššššššššš££££££££££££££šš£££šš£ššššššššš£šššˆšˆšœššššššššˆššsssssssjsststsssjœsssssssssššššššššššˆˆˆˆˆ}Šˆ}™Š}ˆ}ˆ}ŠˆˆšššˆšˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆœˆˆŠˆˆˆˆˆˆšˆˆˆˆŠ{—ŠŠŠˆs}ˆœˆŠ}ˆˆˆˆˆœ}}ŠŠŠŠ~ŠttŠŠŠŠtŠŠŠŠtŠŠŠŠitŠ}ˆˆˆˆ™ˆˆˆ}ŠŠ}™}ŠŠ}Š}}™œˆˆ™ˆŠˆ™ˆˆœˆ}™}Š}}Š}ŠŠ}ŠŠŠ}Š™}ˆ}ˆ}ˆ}Š}ŠŠŠŠŠŠˆŠ}Š}Š}œŠˆˆˆˆˆˆˆˆˆˆˆœˆˆ™ˆŠŠ™ˆ™ŠŠˆŠŠœˆŠˆˆˆˆˆˆˆˆˆˆˆ}Š}ˆŠŠŠ}}}}Š}Š}Š}ˆˆˆˆ™ˆˆˆœ}ˆˆˆ™Š}Š}}Š}ŠŠŠŠŠ}ˆ}ˆ}}ˆˆ}}Š}¯°ˆŠs}ˆˆ}ˆœ}œˆœŠˆŠŠŠŠŠtŠŠttŠtŠtŠtŠttœtŠŠŠsŠsœˆšˆˆˆˆˆˆˆˆˆŠˆˆŠŠ~Š}ŠŠ’Š}}Š™ˆˆˆšˆˆˆˆˆˆˆˆˆˆ™Šˆˆˆ™sˆˆœˆŠ™sˆ™ˆˆˆˆˆˆˆ™}ŠŠŠŠŠŠ}}Šˆ}}ŠŠŠŠˆˆˆˆˆˆšˆœˆœˆˆˆ™ˆŠ}ˆŠˆŠsŠŠsœœˆˆˆˆˆˆˆˆˆˆˆ}Šˆ™ŠŠŠ}}Š}~}Š~}ˆˆˆˆˆˆ™ˆ}ˆ™™ˆˆˆŠŠ}s}Š}ŠŠŠŠŠ}ˆ}ˆŠˆ}ˆ€«ï{€}}ŠŠŠ}ŠŠ}sˆ}™ŠŠˆ™ˆˆˆŠ™Š}ŠŠŠtŠttŠŠŠŠttŠŠŠslŠsŠŠtŠŠšˆšˆˆˆˆˆˆ™Šˆ}ˆŠ}Š}}ˆsˆˆšˆšˆˆššˆšˆˆšˆsˆsˆˆˆssˆˆssˆˆˆšˆˆššˆsˆˆšsšssˆssššsššˆsššššššššssssjjssjs£££££š££š£ššš£ššššš£š£££gg£££g£££g£££££g£££££££”g“£ggg£ggg•µ+XXXXXXXXXX&XXX&XX&XWXWXXWXWX&XWXWWXWW&WW&WW&WW&WWWWW&WW&#WWW#W#&W##&#W##'####'#'#'###"'#[#"#"[##"[#["["""""""[[""[""!"[["[Mð'["[["!"["[""["[""""""[#"#"###"#"######'#'#'##'#'#&#'W##'WWWWWWWWWW#W&Y,'66;6JFFTøùùúùùùúùúùúúúúúúìììúúúù>XWX&XXXXXXXXXXXX&S “““““g“£g£g““¢gggg£g£”””””£””””””š£š””£”ššššš£šš£££££šš£ššššššššˆˆšššššššš£ššššˆšˆššššˆœšsššššˆšˆˆœsŠsŠssssœŠsjtjŠjŠtttsŠsŠœsŠssŠsœŠtŠsŠŠŠŠŠssŠŠœˆˆˆœœœœœˆœˆšˆˆšˆˆˆˆˆŠˆˆœ™sŠ™œˆˆˆˆ™ˆˆšˆˆˆˆ™ŠŠ‚¶ï„ltŠœŠŠŠŠˆŠˆŠ}Š~~Š~ŠŠ~ŠŠŠˆŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ~ŠiŠŠˆˆˆˆˆ™ˆˆ™ˆ™ˆ}ˆˆˆˆ™ˆŠŠŒtŠŠŠtŠŠŒ~tŠtŒŠtŠŠŠŠŠŠŠŠŠˆˆŠŠ~Š}Š}Š}}sŠŠ}Š}sˆŠŠŠŠŠŠŠsˆˆˆˆˆˆˆ™ŠŠŠŠŠŠsˆŠŠŠŠŠŠs}ŠŠŠŠŠŠŠŠŠ~œ™ˆˆˆˆˆˆ™ˆ}ˆ™ˆŠˆ™ˆˆ™ˆˆˆˆ™œˆŠˆœ}ŠŠ}Š}}Š}Š}}ŠŠŠ~ŠŠŠ}Š}}™}ˆ}Š}ˆ—°ˆˆ™œˆœˆŠˆœ™s™ˆˆˆˆˆ}ŠŠŠŠŠŠtŠŠŠŠŠŠtŠŠŠŠtttŒŠŠŠŠŠŠŠŠŠŠœŠŠŠŠŠŠŠŠŠŠ~ŠŠ}Šˆˆˆœœœœœˆœˆšˆˆˆˆˆˆˆˆˆ™ˆˆˆ™ŠŠˆˆ™ˆˆˆˆˆššˆˆˆˆ}ŠŠŠ}Šsœ}ŠŠŠŠŠŠˆˆšˆˆˆˆˆ™Š}ŠŠŠsœŠŠŠŠŠŠŠˆŠ™ŠŠ}ŠŠŠŠŠŠŠˆˆˆˆˆˆˆˆˆ™ˆˆ™}ˆˆ™ˆˆˆˆˆˆˆœˆœˆˆs}Š}Š}}}}}Š}œ}ŠŠŠ}s}™}}ˆˆ{ï¶js}sŠs}ŠŠtŠsœŠsŠˆˆsˆŠˆˆœŠŠsŠ}ŠŠˆˆˆsˆsˆŠˆssˆsŠssŠŠŠtŠŠˆˆˆˆšˆˆšˆˆˆˆˆˆˆšˆšˆˆšsŠsŠssssssssssŠjsssssœsssˆšsssˆˆšššsˆssˆsssššššššššsˆsšsšššššš£šš£šš£ššs££££££££££££š£££££££g”£””””””””””””””””””g”£g“g”££gggg““S+XXXXXXXXXXXXXX&XXXX&X&X&X&XWX&WX&WXWXWWWWWWWWWWW&WWWWWWWW#WWWW#WW#W##&##'#'####'##'#####'"'##"[#""""#"["["""""[""[""["!"[,ð9"!["["""[""[""""["[#["#"#[#["'#[#'"'#'##'###'###W##WW#&W#W#W#WWWWWWWWWWWWWWWWWWWWW&1??FúùúúúùúúúúúúúúúúúVYXXXXXXXXXXXXXXXX5û“““““““‘“““““‘“‘“‘““g££££££g£g£g££g££g£££££££££££šš£š”š”šššššššš£££££š£šššššššš£šššˆš£š£šš£šˆšˆšššššššˆššššššš£š£££šššœˆˆœˆœˆššœššˆˆˆˆšˆˆˆœœˆˆˆˆŠœˆˆŠsŠœs™sssŠˆ™}ˆŠŠŠˆŠŠˆœˆˆœœœˆœˆŠŠœœœŠˆˆˆˆœˆŠs™ŠŠˆˆšˆšˆˆ™ˆŠˆssœˆz°€ˆˆˆˆˆˆˆˆˆˆˆœŠsŠŠŠŠŠ}ˆˆŠˆ}ŠˆŠˆŠˆˆˆ}}ˆŠ}ˆŠŠˆˆˆ™ˆˆˆ™ˆ™ˆˆˆˆˆˆˆ™ˆˆˆŠŠsŠŠŠŠŠŠŠsŠŠŠŠŠŠŠŠ}ŠŠ}}}ˆˆ}œ}s}Š}ˆˆ}ˆ™™ˆˆˆˆˆ™ˆˆšˆˆˆˆˆˆˆˆˆˆˆˆ}ŠŠŠ~~ŠŠŠŠŠŠŠŠŠ~ŠŠŠŠŠŠŠˆˆ}ŠŠˆˆ™™™ˆ™™ˆ™ˆ™™™™ˆ™}Š}ˆ™™šˆˆˆˆ™ˆ™ŠŠŠ~ŠŠ~Š~~Š~~ltlŒlŒŒ}Šˆˆˆˆˆ}ˆ——ˆˆˆˆ™ˆˆˆˆˆˆˆššˆšˆˆšˆˆŠŠ}Š™ŠŠˆœˆŠˆs™ŠŠˆ™ˆŠˆŠˆ™ˆ}ŠŠˆ™ŠŠŠŠŠŠ}ŠŠ}Š}™}Š~ŠŠŠŠˆœˆœŠœœ™œœŠŠœŠŠŠŠœ™™ŠˆŠ™ŠŠŠŠŠˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ}Š}Š~ŠŠ~}ŠˆŠ}ŠŠ~ŠŠŠŠŠ~Šs}™}Šˆˆˆ™ˆ™™ˆˆˆˆ™™Š™ˆ™}~}™ˆ™ˆˆˆˆˆˆˆœŠŠŠ~ŠtŠ~t~~Š~llltŒlŒŠˆt°ï{£Š™}ŠœˆsˆŠœŠœˆˆˆˆˆ™ˆˆˆˆˆŠŠŠŠŠŠsŠˆœœ™ˆŠŠs}Šˆœ™ˆ™ŠˆsˆˆŠˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆˆssŠssŠsœŠœssŠssssŠssˆˆsˆˆˆšˆššˆšˆsˆˆˆˆššsššœšššššššššššššssssššššššššš£ššššš¦£š£š££š££££££££££££š””££š”£”£”£”£”£££££g££“”g£g££££““”µ/XXXXXXXXXXXX&XXWX&XXXXWXXWX&XWXWWXW&W&XWXWW&WW&WWWWW&WWW&W&#&WW#W&#&W#&#WW#'#'###'##'#'###"#[##[##[#["#"""["""""["["["""![ED[["""!"["""""""["#"#""##["####"########'##'#'#&#&#&#W##WWWWW&WW&WWWWWW&Y6/6:::HHKRRúúVµúúúúúúúúúúúúúúúûúì5XXXXXXXXXXXXXXXX%S”“““£g£”””””g£“g£££g£g£g£££££££šsššssšššššššššš£šsššššš£šššssjttjtttttsœŠsŠˆŠiŠŠsœˆˆššsˆˆsstsssššˆˆˆˆˆˆšˆšˆˆˆˆˆ}™}ŠŠttŠŠŠŠt~Š}ŠŠŠŠ~Š~ŠŠˆŠ}ŠŠ™™ˆŠœŠŠŠˆˆŠs}ŠˆœœsŠˆœšš™Šˆ™ŠŠŠŒŒllllŒlllŒŠŠ~~Š~i~lŠˆ™ˆˆˆƒ¥îƒˆ™}ˆ™ˆ™™ˆ™}}}™}}}}ˆˆˆ™}ˆˆ}}Š’}Š}ŠŠ}q™}}™}’™™’~™}’Š}Š™ŠŠ}}ˆŠŒlllllil~~~}Š~}~Š}}Š}ŠŠ}}s}}}ˆˆˆ™ˆˆˆ}}™Šˆˆˆ™™ˆˆˆˆ™™}ˆ}}™ˆˆˆˆ™™™ˆˆ™}}ˆ’q’}~q~~llil~lrlli~~~~i~~iŠ~ŠŠ}}™ˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆœˆˆ}ŠŠ~Šll‚l‚‚‚‚‚‚‚‚‚lŒllŒ~rlr°¶ŠŠ™}œ}ŠŠ~Š~ŒŠŠˆˆˆŠˆ}Šˆˆs™ˆ}}™}}’Š~~t~Œ~~lŒ~~Š~~~~~~~~ŠŠ~}ŠŠ}Š™Š}ŠŠ™ˆ™}ŠŠŠŠs™ŠŠœˆˆˆ}Šˆ™ŠŠŠ~tŒlllŒlŒlŒŠŠ~ŠŠ~~lilŠˆ™ˆˆˆˆˆˆ}}’s™ˆˆˆˆ™™™™ˆˆˆ™Š}~}}~}~~iŒlrlilll~~Š~~~~~~Œ~ŠŠ’}™ˆˆˆˆˆ™ˆˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠŠ~Šilll‚‚‚‚l‚‚‚‚l‚ýï‚}~iiŒŠˆ™ˆˆˆˆˆ™™ˆ™ˆˆˆˆ™ˆˆˆˆˆˆ}ˆ}}™ˆˆˆsˆˆˆˆˆœ}}Šˆ}ˆ™}ˆˆ}}ˆ™™ˆ™ˆˆˆ™ˆˆˆˆŠˆ™™ˆœttt~tŠŒŠŠ}s}ˆŠsŠˆœˆˆˆsˆšœˆšˆˆšššššššˆššˆšššˆšššššœššššššššššššššššššššš£ššš£šššššššššššš£šš£šš£šš££šš£š£š£šš££š££š£”££££££g£gg£gg¦“g““““““g“TXXXXXXXXXXXXXXXXVVúVìVVVìVVúVìVVVVRRRúùúùRøRøRøøøøøHøøøKø÷øK÷øø÷÷÷÷÷÷T÷÷÷÷T÷TT÷TTT÷TTTTTTTTTTTTõ.##"#""["""["""""""["[[""[Ið9""["["""""""""[#"[""[#[###[#[#'#'#'#'#'##'#W#W##W#WW#&WW#.611;???÷HøøùùùùùùùùùVùúùùúúúVúúµVøHH>H:55,/++%XWXXXXXXXXXXXXX%XX>û•“g“£““g“ggg““““““g“““g£g“ggg“g“gg““£g£“£”£££”£”š”””””š”££šššššššššššsˆšš££££š£ššššššššš££££ˆœœˆœšššˆšœˆšššššššœššššššš£š£šˆššššœšœˆˆœˆssssssŠŠœŠsŠsœsœœŠˆœšŠˆˆœ™sŠˆˆˆˆˆ™™Š™ŠŠŠŠˆˆššˆœˆœœˆœˆˆˆˆˆšˆˆššˆ}}Š}}}tíï{}Š™}Š}}™}~ˆ™}}ˆŠˆœ}Š™Š}}Š}ˆ}~}}~lŠŒtŒŠŠŠŠŠŠttŠŠŠŠŠŠŠŠ~ŠŠ~Š~ŠŒlŒ~Œl~~~Š~~Š}ˆŠŠ}~Š™™ŠŠŠŠ™Š™™Š}~~ŠŠ~Š~ŠŒŠŠŠŠŠŠŠŠŠŠŠŠŠˆˆ¦ˆˆšˆˆˆšˆˆˆšˆˆˆššššˆˆˆˆˆˆslŒŠltlŠtŒ~tŒtŠŠŠŠŠtŠŠŠŠsŠŠŠˆ™™}}~ŠŠŒŒlŠŠŒ~l~t~ŠŠiŠiiiil}}}iŠ~ŠŒlŒ‚i¡³sŠŠœ}ŠˆŠœŠŠsŠšˆˆˆˆˆˆˆˆˆˆˆœ™œˆˆœššˆˆˆˆœˆˆˆˆŠsˆsŠœsŠœsŠŠŠŠŠŠŠŠŠœœœœˆœšœˆˆˆœˆŠˆˆˆˆˆŠ™ˆ™Šˆss}ˆˆˆšˆœŠˆŠˆ™ˆˆˆˆˆš™ššˆŠ~ŠŠŠŠŠŠŠŠŠŠŠŠŠˆšˆššˆš™ˆˆˆˆˆˆšˆšˆšˆšˆˆˆˆˆ™ŠtlllltitŠ~tt~Šœœ~tŠŠŠŠŠŠŠŠˆˆ™™™ŠŠ~ŠŒŒŒŠ~~iŒŠlŠŠlŠ}iilll}}Žï¥‚tlll‚~~}}Š}Š}}ŠŠ}Š™}™}™}™}}}™}~ˆˆ}Š}}ˆŠ}ˆ™Š™}Š™}}tlŠŒŠtŠtŠŠŠtŠŠœœtŠtœœsˆœsœˆŠŠtŠtŠŠŠtŠŠŠŠ}ˆˆˆœŠŠŠˆŠˆˆs™sˆˆˆˆˆŠŠsŠˆsŠˆˆšˆˆˆˆˆšsˆˆsšˆšˆˆˆšˆˆšˆˆššˆ£ššššššššššššššsssjss£”££”£””š”££££”£”š££š££š££££££”š£”š•ì)XXXXXXXXXXXXXXXX:úúìúúìúúúúúúúúúúúùúúùúùùúVùúùùVVùùùùùùøùùøøùøøøùøøøøøøøøøøøøøøøøø÷ø÷÷®÷÷÷÷÷÷÷÷÷J#[#[#[#"[#""["""""""["[["9ðA"["[""""["["[""""#######[#############'##'W#&.116??FTTTùøùøùùùùùùùùùùùùùùùùúùµVTHH>:;5;/,+&%WXWXXWXWXXXWXXXXXXXXXXXXXX%XX%WSg£££££££££££££££££”š”š£”š”£££”£”£££££££š””šsssss”dddddd¢d”sssssssssœšˆšˆšˆšššššˆˆšˆšššˆˆˆˆˆˆˆˆˆˆˆˆˆšˆˆˆ}ˆˆˆŠssŠsŠsŠŠœŠœŠŠœŠœœœˆˆˆˆˆœœœŠŠŠŠŒtŠŠlŠtŠtŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠtŠŠ~ŒŒ}ŠŠ™œ™™}Š™œ™ˆˆŠ™ˆ™ˆ™ˆ™}Š}™™™™}Š—_„t}Š}Š}™ŠŠŠŠŠ~Š™™ˆ™Š}}ˆŠ™Š}}}}}™}’™}}}}Š™}~~ŒiŒ~~Š~ŠŠ}~ŠŠŒ~ŒŠ~ŒlŒŒŠ~~Š}ŠŠŠœˆŠŠ™Šˆ}}™™ˆœˆˆˆˆœ™ˆˆˆ™ˆ™ˆ}}}’}}}}}~}~Š}™}’ˆ’}™Š}Š}Š~™}ˆˆ™}™}™Š™Š~ŠŒ~ŠŠŒ~ll~lŒiiŒiœ™œˆ™œŠŠŠŠœˆŠŠŠtŠŒŠŠŠŠŠ~~Š~Šœs}ŠŠ}Š}Šˆ™™ˆ}ˆ}ˆ}ˆŠ}ˆ™ˆˆ—°™}™}}™}™}™™}}™}™™}~~Š~ŠŠŠ~Š}ŠŠŠœŠŠŠŠŠ™ŠˆŠ™™ŠŠŠŠŠ~ŠlŒ~ŠlŒŠŒŒŠŠ~~Š~ŠŠŠŠŠtŠŠŠŠŠŠŠ~ŠŠt~ŒŠŒŒŒŠˆŠ™ˆˆˆˆ™Šˆœˆˆˆ™™™ˆ™ˆˆˆ}}}}}}}}}}}Šqˆ™}™™}ˆ}ŠŠ}Š}Š}ˆˆˆ™ˆŠ™ˆ™Šˆ~ŠŠŒ~ŠŒŠll~lli~Œ~ˆŠˆœŠˆŠŠŠsŠˆŠœŠtŠŠŠŠŠŠŠŠŠ~ŠŠœsˆŠŠ}ŠŠ}œˆˆˆˆ«_¬€}ˆŠˆˆˆ}šˆ™}}}™Š}™ˆ}œ}ˆˆˆŠˆˆŠŠŠŠŠŠœˆˆˆŠˆ}œ}ˆˆŠˆ}Š}ˆ}Šˆ}}}ˆˆˆˆ™ŠŒ~ŒŠŠŠŠŠ}ŠŠŠŠŠŠŠŠŠttttŠŠsssˆœˆšˆœšˆœˆˆœššˆˆšššˆˆššˆˆššˆšˆšˆˆˆˆˆˆšˆššššššššsšsšsš£šššššg‰hg¢d¢dh¢ššššššššššssssšššsm””š££££gg£g£g£”g£g“g““g“ggg£g““¤K%%X%XXXXXXXXXXXX%RúúûúúúúúúúúúúúúúúúúúùúùùúùVùVùùùùùùùùùùùùùùùùøøùøøùøøøøøøøøøø÷ø÷ø÷ø÷ø÷®÷÷÷÷÷÷÷÷,###"#"#""[#""["["""""""["Eñ'"[""""[""""""#[#["[#[#[##"'#'#,.466J?;FFTTøøøøøøøøøøøøùøøùøùøùøùù÷F>F>;5;/1Y&&#WWWWWXWWXWXWWXXXWXXXXXXXXXXXXXXXXXX%X%XX%%X5ü•”££££g£”£££”£££g£££”££”£””•šsmmssssˆšššš£ðgœœšsœjssœssšˆœˆšššššššššššˆˆšˆˆŠsssˆˆˆˆsœsœsœœsˆˆœˆˆœˆsˆsŠŠŠttŠŠŠsŠŠŠŠŠŠŠ~ŒtŠŠŒŠŒŠ~ŠŠŠŠŠŠŠŠŠŠ}}Š}s}}Š}ŠŠŠŠ~ŠŠŠŠŠŠŠŒŒŠ}ŠŠ}Š}Š}ˆœˆsˆˆˆˆˆˆˆˆ™™ˆŠ~Š’Šˆ}}™}t„U—lŠ~~Š}™~}Š}Š}œŠŠŠŠŠŠŠŠs™œœ™œ™Š~~ŠŠ~~~~~~Š~’~qŠ~~}’’™}’}}Š}~Š~ŠŒ~ŠŠŠ~Š~Œ~~ŠŠ}}’Š™Š™}ˆˆs™œ™ˆˆ™™ˆ™ˆ}~}~Š}™™}™~Š~Š~ŠŠ~~}Š}}ŠŠ™Š™ŠŠŠŠŠŠŠsŠœˆœœŒŒŒl‚llŒŒrlliŒ~~Œ~ll~l~~}~}~Š}Š~ŠŠ~~~Œ~~ŠŠ~lŒ~~ŠŠ’~}™}}}ˆœˆŠˆŠˆˆˆ™ˆ}™ˆ°¶~ŠŠ~}Š}ŠŠŠŠŠŠŠ}Š™œ™Š™ŠŠ}}™ŠŒŠŒŒŠ~Š~ŠŠ~~Š}Œ~~Œ~ŒŒŒl~Š~~Š~iŠ~~~Š}Š}ŠŠ}Š~~Š~Š~ŒŠŠŠ~Š~ŒŒ~ŠŠŠ~~ŠŠ™Š™Šˆˆœˆˆˆˆˆˆ™ˆ™™™ŠŠ~Š}Š™}™~Š~~ŠŠŠ~Š}}™}}ŠŠˆŠˆŠŠŠŠŠŠŠœŠœœœtŒŒll‚ll~llllŒ~~~Œlli~~~~}’ŠŠ}~Š~Š~Š~lŠ~~Št~Œ~~~Š}Š}}™™™ˆj¬ï²sˆˆˆ™ˆ™™ˆŠŠŠŠŠˆ}™}}t~ŠŠ~ŠŠ}ŠŠ}™}ˆˆŠˆˆœŠŠŠŠŠœŠœœœˆˆŠˆˆŠŠŠŠŠŠ~~~Š~ŠŠ}~}Š}}}}ˆ™}}}ŠŠ™sŠsŠŠŠŠŠŠŠŠtŠŠœŠˆŠˆˆˆˆˆˆšššššššˆšˆˆšsssˆsšˆšˆœsŠssssˆsˆˆˆˆˆšššššs£ñ¢šˆsssššˆšˆššššššš£ššš£”£”š£££££g£££““““““““g“£“”ì5%XX%%X%XXXXXXXXX5ûûûúûûúûú>%+&&&&&&&&Y&&&&Y'&Y&&Y&&YY&Y&Y&&.&.YY&YY&.&.&.&&&,&.&,&,.,&,1÷ø÷÷÷÷÷÷T''"'#[#["#"["""""[""""["[,Dð,!["""[""""[#[#["####"###'FTFFT®ø÷÷®÷øø®øøøøøøøøøøøøùøTFFF;6;6,,Y&WWWWWWWWWWWWXWXWXXXXWXXXXXXXX&XXXXXXXXXXXXXXXXXX%XX%XX%X%W””£gg””””£””££££££££”””””“£”£”£££££ššš£š£šš£š£££££š£ooššššššššššššˆˆšˆššœˆˆsˆˆšˆššˆššššˆssˆœˆœˆtŠ™Šœ}œ}œˆˆˆˆœsŠŠŠtttttŠœœœœšœšˆˆsœŠsŠsŠs}ssˆŠˆ}œˆˆˆšˆˆˆˆˆˆœˆˆˆˆˆˆˆŠˆˆ™}ˆ™Šˆˆˆ}}}}™ˆˆŠ}™~ŠŠ™™™™ˆ™ˆ™ˆ™Š}ˆ}™ˆ™ŠŠŠŠŽ¥îŠ}™™}™œŠŠŠŠ~Š~ŠŠŠœˆŠˆœˆˆ™ˆ™ŠŠŠŠŠŠŠŠŠŠ}Š}Š™Š™ˆˆ™ˆˆŠ™™ˆ™}Šˆˆˆ™Šˆ}™™}™ˆ™ˆˆˆˆ™}Š}™™ˆ}Š}Š~}}™™ˆˆ™™™™™™™ˆˆˆˆˆˆŠŠ}™Š}}Š™Šˆ™ŠˆŠŠŠŠŠŠŒŠŠŠˆœ™ˆˆˆ™ˆˆœŠ’Š~ŠŠŠ~ŠŠ}ŠŠ™}Š}™ˆˆˆ™ˆ}™ˆŠ™™™ˆ™ˆŠˆ}Š™}Šˆ™ˆˆˆ™}™}™ˆ™ˆ}}Š}Š™™™ˆˆ™™™ˆ—³ŠŠ~}ŠŠ}Œ~Š’ŠŠ}ŠŠ™™}™ŠŠŠŠttŒtŒtŠŠœŠœœœœŠˆˆœŠŠŠsŠŠ}ŠŠŠsŠŠŠˆŠˆˆšˆˆˆˆ™ˆˆŠˆˆˆˆˆ™ˆŠˆ™™™ˆˆˆ}™ˆˆ™™}}™™ˆ}}Š}~Š™™™ˆˆ™™™ˆ™™ˆ™ˆˆˆˆˆŠŠŠ™™}}Š}™Š™}œˆŠŠŠŠŠ~ŠŠŠœˆˆˆˆ™ˆˆˆˆŠŠŠ}ŠŠŠ’~Š}ŠŠŠ}Š™ˆˆˆˆˆˆ}™™Š™™ˆˆˆŠ™Šˆˆ™}™ˆˆˆˆˆˆ™}™}ˆˆˆ€¶_wŠ}™™ˆˆˆ™™™ˆ™}}}ˆ™ˆ}™}Š™™™Š}Š™ˆ™ˆŠˆŠœŠŠŠŠŠŠŠœˆˆˆˆˆˆˆˆˆŠŠŠŠŠŠŠŠsŠŠŠˆ}ˆŠˆˆˆšˆšˆˆˆˆˆˆˆˆˆˆˆˆœˆˆˆˆˆˆšˆˆˆššˆˆˆˆˆšˆˆˆˆsˆˆˆˆˆššˆˆˆˆˆˆˆˆšššˆšˆœˆššˆœˆšššššœssœšš˜`sššššššššš£££££££££££££££££££££££g£“£““g£££££¦“g£££££££“£‘“¦“®L%X%XX%XXX%XXXXXX%KûúûûúúûúVYXWXWXXWXWXWXWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW#W&##WWW#W'#'F÷÷ø÷÷÷÷÷J""#"####["##[#["""["""""[9I["""""""["[#"#"##[#[#'#[#J÷÷÷®÷÷÷øøøøø÷TöFF;;66611.'WWWWWWWWWWWWWWWWWWWWWXWXX&WX&X&WX&X&X&X&XXXXXXXXXXXXXXXXXX%XX%X%%X%%%XXZüÜÚÜÁÜÁÜÁÚÚyÚÁÁyÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÛÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ¿ÁÁ¿Á¿¿ß¿ÃÁßÁßÁßÁßÃÃÿÃÃÃÃÃÀÃÃÀÃÃÿÃÀÃÃÃÀÃÀÃÀÃÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ¿ÀÀÀÀÞÀÞÀÀÞÀÀÀÀÂÀÀÀÀÈÀÈÞÞÈ»ÈÞÈÂÈÂÞÈÂÂÀÂÞÈ»ÂÀÂÂÞÂÞÂâîŽ~ŠŠ}™™ˆ™}ˆ}™Š}}}™ˆ™™Š}}’}}Š}}’}}}™}™}}’~~Œ~ŒŠŠŠ}Š~ŠŠ‚鹿}Š™™™}Š~~ŠŠ~~~~Š}’~™’}’}~Š}}~}~~Š’~q~~’}}ˆˆ™™™™}™ŠˆŠŠ~~Œ~Š}}}™}}}}}~}’~™}}’}}}’Š}’’}}}}}}’™’}’Šq}’™™™™~~~~~}~Š’Š™}Š™}™Š~Š~~~~~Š}’}Š’Š’Š’’}~}Š~~Š’~’~~}}Šˆˆ™™™Š}~™ˆŠ’~~~~Šq}™}’’}}™~™’’}™}Š’~}~’}’}q}’}~™}™’}³°}}™™ˆˆ™Š™™™™™Š™™œˆŠˆˆˆŠ~~Š}~~~~Š’Š’}’’™™~™}Š}~~}Š’’~’’ˆ™™ˆˆ™™ˆ™™™ˆ™Š~~~~~~Š™}™™}Š’™~}}’’’}}™}qŠ’Š}’}qŠ’~}’}}’}}~}’’™™™™~~~~~Š~}~™}ŠŠ™}Š~~~~Œ~~~’Š~}’Š’~’Š}’Š~~~~Š}’~~’}}™™ˆ™}™}ŠŠ™ˆŠŠ~~~~~}}}’}}’}’}~’’}™™}’~Š¥ïz}~~}’~’}}}’’~Œ~~~~ŠŠŠŠŠŠŠŠ}~Š~}ŠŠ™™Š}Š~~Š~~~~ŠŠ~™™Š’âÈÂÂÈ»ÈÂÈ»¿Ç»Â»À»À»¿»À»À¿¿»¿Á»ÀÁÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÁÀÀÀÀÀÀÀÀÀÀÀÃÀÃÀÀÃÀÃÀÃÃÃÃÀÃÀÃÀÃÃÃÃÀÃÃÃÃÃÃÃÃÃÃÃÃßÃÃÃÃßÃßÁÁÛÁÁÁÁÁÁßÃÁ¿ßÃÁßÁßÁßÁÁyÁÁÁÁÁyÁÁÁyÁyÁÁyÁÁÁyÁyÁÁÁŸÁÚyÛÚŸyÁÚÚŸÛÜyÁÜܾÜÚÚܧÚÜø1%X%%X%%XXX%XXXXX:ûûúûûûúûú5WXXXXWXXX&XWXX&WX&XWX&XWWWWWWWWWWWWWWWWWWWWW#W#&W#WW###W##W#&÷÷÷÷ø÷÷÷T&'#[#[#"##["#"""["""[""""'Iñ'"""["[""#"#"[#[#####"###'÷÷ø÷÷øø÷÷÷ø÷øøøTFFF?;?11.&&WWWWWWWWWWWWWWWWX&X&W&X&WXWXWXXX&XXXXXXXX&XXXXXXXXXXXXXX%XX%XX%X%XXXX%XûäºÐºÐºÐºÐººÐºÐºÐºÐÐÐккккºÐºººÐºººÐººººººÐºÒºÒºÒºÒºÒºÒºÒºÒºÒºÒ¼ÒºÒÒÐÒÒÒÒ¼Ò¼ÒÒÒÒÒÒ¼Ò¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÝ_Š™}}Š}}™ˆŠ~Š~Š~™ŠŠ}Š™~Š~ŠŠŠŠŠŠŠŠ~Š~~ŒrŒl}}Š}™’}™}’™™™ŠŽ_³Š™™ˆ™’’™}’™~Šll~~Š~~Š}Šllrr~~~’~q~q~’’Š~~~~~~}Š}Š}}™}™™ˆ~}~Š~~Š~~’Š~~Š~~~Š~~~~i~l~Š’~’~’~~~i~rr~~~q~’qq‡’’lr~~’}}™™™™’™™’}~~Œi~Œ~~’Š}œrllr~~iqqq’Šq’}~~~~~~~}}Š}Š™}Š™ˆ}}}Š™ˆ™ˆ™Š™Š}ŠŠ}Š}Š’Š~~™lllllrllrrlllr¡³~~r’’’}qqq~ll~~~’™™™™’’™’}~’Œllil~~ŠŠ}sllrr~~~~’q~Š’~}Š~~Š~~~}Š}Š™ˆ}™ŠŠ}}}Š}™}™Š~ŠŠ~Š~ŠŠŠ}Š~~}~ŠŠŠ~~~ŠŠŠŠŠ~~llr~r~i~’qqqqq’lr~~}}™™™™™’™’™}’~ll~~~~Š’}ˆllr~i}~’’’~’’qŠ}~~~~~~Š}}}}™}Š™œ™™}Š}™ˆ™™Š™Š™™Š}Š}Š™~}¥_«irri~~iŒr~lllrŠ}Š}™™™™™}™™™}~Š}™ˆ™ˆ™™™™™}}~Š~Œ~~Š~}}œt¥âÔ¼ÔÒÔÒÔÒ¼ÔÔ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼Ò¼Ò¼Ò¼ÒÒ¼Ò¼ÒºÒºÒÒÒºÒºÐÒºÒÒºÒº¼Òº¼ºÒºÒºÒºÒººÒºÐººÐÐÐкÐкººÐºÐºÐºÐººÐºÐÐкººÐººÐкºººººººººÐßS%%XX%X%%%XX%X%XX%RûûúûûûûûV)XX&XX&XWXX&XWX&XWX&WXW&XWX&WW&WW&W&WW&WW&WW&WWWWW#&WW'#&##'#;øø÷÷ø÷÷÷F######'"##"[#[#""["""["[!,ñ9["[""""""["[#####[#[#'#'#8FFõTø÷÷øøøøøøøøøùøøøùøøùøùùùø÷H???5?/YY%&X&WWWXWXWWX&X&X&XWXX&X&X&XXXXXXXXXXXXXXX%XXX%X%%X%XX%%X%3üÊкººÐºººÐºÐкÐÐÐкººÐºÐºÐºÐкÐккÐкÐÐÒÐÒºÒкҺкҺҺҺҺҺÒÒºÒºÒÐÒºÒÒÐÒºÒÒÒкҼÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔÒÔÒÔѼÔѼÔÒÔÑÒÒÒÔÑÒÒÑÒÒÑÑÒÑÒ°¥™ˆˆ™ˆ™™™ˆ™ˆ™™ˆˆˆˆŠŠŠŠŠŠŠŠtŠ~ŠŠŠŒŠŠŠŠŠŠŠˆ™™™™ˆˆˆ™ˆˆˆˆˆˆ}«_—~ˆ™™™}™™™™}™™’™}™}™™}™’}™}’™}™’™}~~~}}™}Š}}™}’~~’}’’Š’™}’™’}’™™™}’}}~}Š}}™™}™Š}™™}Š™Š™}Š}ŠŠ}œ’}~™™}™’’ˆ™™™™™™Š™}™}™}™}™™™™}™™’ˆˆ™™™}}™™’}~™™™’’Š~~~’}™}Š}Š}Š’’’’}’}’~}’}™’’}™}}}’™ˆˆˆˆˆ™ˆ™ˆˆˆŠ~~~}Œ~~Š~}~~ˆ³³Š}Š~~Š~~~~~™™™™™ˆˆˆˆ™™ˆ™ˆ™ˆˆ™’™™™ˆŠ~Š~Šr~~rlr~~~~illl~~~l~~Š~~Š™’}™™’}™™™™™™}™™™ˆ™}™ˆˆ™™ŠŠŠŠŠŠŠŠŠŒŠŠŠŠŒ~ŠŠŠ~Š~™™}~’™ˆ™}™’™™™™™}~™™™}™}™’}}™}™™}™ˆ}}™ˆ™}’™™™~’}ˆ~}}Š~~}~}}ŠŠ}Š}~~rŠ’}’’’}}}™}’™}™}}’~ˆˆˆˆˆˆ™ˆ«_¯ŠŠŠ~ŠŠŒ~ŠŠ~~’Š™ˆŠ™™™™™ˆˆˆ™ˆˆ™}’~}™™™™}’}}™™™™}ˆ}}}}ˆ™ˆ™—¶ÒÒÒѼҼÒÑÒ¼ÔѼÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÔÒÔÒÒÒÔÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒºÒÐÒÐÒÒºÒºÒ¼ºÒÒºÒÒÒºÒºÒÐҺҺкÐÒºÒºÒºÒÊкÐккккÐккººÐºÐºÐÐкÐкккÐÐкÄûZXX%X%XXX%%XXX%XX/ûûûûûúûìû>XXXXXXXX&XX&XXX&XWXX&WXW&WXWXWXWWWWWWWWWWWWWWW#&WW#W#WW#&#W#&F÷øø÷÷ø÷÷4'##'"#[#[####"'""#[""""""QA'"""""#[#[###""#["############W![&1[616FFF÷õøùøøùøùøùøùùùùùùùùùùùùùøHHH:::::/+Y%XWXX&XXWXXXXXXXXXXXXXXXX%XX%X%X%%X%X%XX%XXX%úåкÐÐкÐÐккккºÐºÐÐÐкккккккҺÒккÐкÒÐÐÒÐÐÒÐÐÐÒÐÒÐÒÐÒÐÒ×ÆÆǾÚÆÇÚÆÒºÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÍÆÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒËÙÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼Ò¼ÒÒÒÒÒÒÒÒØÍÒÒÑÒ¼ÔÑÒÒÑÒÒÑÒË_{Š~~Š}™}~’™~}™}Š}~}~’~}}’}~™~Š’™}}™™}™™™’’~q’~l~~Œrr~~~iŠ°þ„~~~~~Š~Š~Š~’ŠŠ~}Š}™™ˆ™™™™™ˆ™}}™ˆ™™Š~ŠŠŠŠ}Š™Š}}™~}Š~~~~’Š~’~’}’’}’™~}’’’}~}}’}Š™~}™™™™™™’™™™™~~’}~}™™Š}’~lllirllrr~~~~~}Š}Š~~ŠŠ’}}}™ˆ™ˆ™™ˆ™™™™}™ˆ™Š~ŠŠ}ŠŠ}}™}}Š’Š~Š~~~Š~~q’}’}’’}™’}’’’’}q’}’}}™}™ˆ’’™™™™™™°³}Š’}™™™}}™™™™}}}™’™’’}~’Š’’}™~}}™™’}}™}™ˆˆˆˆ™ˆˆ™ˆˆˆˆˆŠœœˆœsŠŠ™}’}Š’ŠŠ~Š~~Š}’~’}}’~}™’~}}qŠ’’~}’}~}Š~}™}™’}’™™™ˆ}~}Š}™™™Š}™}~lll~~ii~~~~ŠŠ~ŠŠŠ~~~}~Š’}}™™ˆ™™ˆˆ™™™Š™ˆˆ™Š™ŠŠ}™Š}™™™™}™Š}ŠŠ~~~™~}’}’™’™™™~™’’’’„_³}}}}™}™™™’ˆ™™™™ˆ}’}}qŠŒrŒ~~~~~Š~Š~~Š~~Š~Š~Š}ŠŠŠ~ŠŠ™Š™}™ˆz_ËÑÒÒÒÑÒÑÒÒÑÒÒѼÎÏÓÒÔÒÑÒÒÔÒÒÔÑÒÔÒÔÒÒÒÒ¼ÒÒÒ¼ÒÒÎÎÒÒÒ¼ÔÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒ¼ÒÒÒÒÒÆÆÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒºÒÒºÒÒÒÒÒÍÆÆÆÆÆÆÆÆÄÒÒºÐҺкÐÒкºÒкÒÐҺккÐÐÒºÒººÒºÐºÐºÐºÐºÐºÐкÐккккккÐкºÐÐåL%%XXX%X%%XX%%XX%WLûûûûûûûûV/XXXXXXXXXWX&XWXX&XWWXW&XWWW&WW&WWWW&WW&WW&WW&WWWWWW&W#W#W#øø÷÷ø÷ø÷T##########"#["""'"""""[""'Eð,"""[#["#"#"[#'#[##'##'#'#'#'###W###W##W#W#WW#&..[;66FHFTFùùùùùùùùúùúúúúúúúìúúúúììKRH>>>5/5+%%XXXXXXXXXXXX%XX%X%XX%XXX%X%X%%5üʺкккккккÐккººÐºÐºÐÊÒÐÊÒºÒÐҺкºÒºÒºÒºÐÒÒºÒÒºÒÉÒºÒºÒºÒºÒÒ²ý¥¥àº¼Òº¼ÒºÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¶çÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒ¶æ¼ÒÒÔÒÑÔ¼ÑÔÒÑÒÑÒÑÒÑÑÔÒÑÒÑÔÑÎ_ÝÔÑÔÒÑÒÔÒÑÔÒÑÔÒÈ_ƒ~ŠŠŠŠ™Š™}™}™™}™™}~}ŠŠ™Š™Š~ŠŠ}Š}Š~}~~~~~~~’’’’’’’q’~’~’’qŒ¥_w’’q’’q’~’~~’’~~’r’~’~’~~~’~~r’~~rllrlrrrrrrrr~rŒrllll‚rl~~~~’Š’™™ˆ™™™}™™}’}Š’~}’}}™’}’}~}~~llllr~’Š~~l~rŒrŒ~lŒ~~~~’}™~’~~~’’’~~~’’~~’~~r’~~~~~~~lrllrrrrr~rrrrlrlrlllllr~~~’}Š™}™ˆ™’}}’™™’Š~~}~’’™Š’Š~}’~—³~’~~’}r’™}’}™’™™’™™’™™’™™™~’~’~~™~~~~’~’’~~r~~~~~’~~~~~~~’~™~~~~~~~Š~Š~~ŠŠŠŠ™Š’Š™Š’™Š™}}}~ŠŠ’Š}ŠŠ~~Š~}™™~}Š~~~~~llllr~}~~~~Œr~~ŒlŒ~~~~’’’™’~’~~™~™’~~~’~~’~rr~~~q~~’llllrrr~r~~rrr~lllrlllllr~~~’’}™™™ˆ™™}wþï}~Š~}}}’ˆ™™™™Š}Š’~’~}}’}’q’’~’q}}’}}}’}~’}~™}~’~’™}’Š~~’€_ÂÒÑÑÔÒÑÔÒÑÔÒÑÔÑÙ_ÎÔ¼ÑÔÔ¼ÑÔÒÒÔÔ¼ÑÔÔÒÔÒÑÔÒÒÒÒÒ—¶ÕÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒà¶ÕÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒºÒºÞýçÒºÒÒºÒÒÒÒºÒÒÒºÒҺҺҺҺҺɺкÐÉкҺккÐккÐккккÐккÐкÐкÐÅìZ%X%XX%XX%%X%X%X%X5SûûûûûûûV>WXXX&XXXXXWXX&XWXX&XXWX&XWXWXWX&WWWWWWWWWWWWWW&W#WWWW#W#W#÷ø®øø÷ø÷øT#'#'#'#[#[#[##[#""'"["""["9ñ]""""""#"[#[##""############'#'#'#W&#WW#WWWWWWWWWWWWWWWWWW""&Y115;;:HFHøúúúµVúúúúúúúúúìúìûììûìêúVKS>>>>5))X%X%X%X%X%%XX%X%X%åºÐºÐºÐºÐºÐÐкккÐÊÐÐккÐÊÒкÐÒÐкºÐÐÒÐÐÐкÐÐÒººÐÒºÐÒºÒºÒÐÒÒÒºÒºÉýýýýÄÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÇÎÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÔÍï¿ÒÑÒ¼Ò¼ÑÒ¼ÒÒÒÒÒÒÒÒÒÒÒ¼ÑÒÒ¼ÒÈ_ËÒÒ¼ÑÔѼÑÔ¼ÑÔ¼Ñã±’™™™ˆ™ˆ™™™}Š™}Š}’Š™™}}™}™™™™ˆ™}™~~~~~~~~~™}~~’’}~}~~}}™™™™î_w’Š™™}™}~~~~~~~~~’}~’Šq~~~rr~Œr~~‡’~‡’’’™}’’}’™}’’’’’’}’}’}™’}™’’™’~}’~’’™’™}™}}’’Š~~~~~~~~~ŒlrŠ}~}’}™™™™™™™™™™’~’~™}™}’’}’Š}}}’Š}’’Š}’}}’’q’’’™’’~‡~’™’’’’’}’}r’~’’’’’~’’’}’}’™’’~q~’~~}’}™’}™}}}~ir~r~~³¥ˆŠ™}Š}’}™™™™}™’™™™}~~’}’}™}~’}™™™™™™™™™™™™™™™ˆ™’™’™™™™™~~’’’}’’’}’}’™™™™™™™™™™™’™’™}}™’’’™’}}™’™™™™™™’~~~rr~r~rŠrŒr~™}~™’™}™}™’™™™™~’}~}}’™}}’’}’~’’’’}’~™’}™™’’’’’’’’’qr~~’’’q’’}~’‡’’‡’~’’™’’}’}’}q’rq~‚ïïl}’’’}’~’}}~i~r~~~~~’’’~q’~~Š~~~™™™™™™™~~}}’™}}}Š~~~~~’~’}’¶æÒÔ¼ÑÔ¼ÑÔ¼ÑÔ¼ÑÔÔîà¼ÑÒ¼ÑÔ¼ÒѼ¼ÑÒÒ¼Ò¼ÑÒÒ¼ÑÔÒÒÒÙïÎÒÒÒÒÒÔ¼ÒÒÒÒÒÔ¼ÒÒÔÒÒÒÒÒÒÒÒÒ¼Æî¿ÒÒÒÒÒºÒÒ¼ÒÒ¼ÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒÒÒɶýýýýýýÄÒºÒÒºÒºÒÒºÒºÒºÐÒºÐÒÐÒÐÐÒÐÒºÒкÒÐкÐÉÐÐÊÐкÐʺÐÊккÐÊÐккÐʺкºÐäK%%X%XX%XXX%X%X%X%X%RûûûûúûûûV)XXXXX&XXXX&XXX&X&XW&XWX&W&WW&WWXW&WW&WW&WW&WWWWWW'W&W#&#&øøø÷øø÷ø÷;############"##"'""#"[#""""QðD'""[#[#["####"'#[#'#'#'#'#'####W#W##W'#W'W#WWWWWWWWWWWWWWWWWWWWWWXWWWXW##&+1555;H>TFùúûúûúûûìûûûûûêûûûûûû¯S%X%X%X%XXXXX%X%XX3ûÁÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßÛÛÛÛÛÛÛßÛÁÛßÛßÛßßßÃßÃÿÃÃÛÿÃÛÃÃÃÛÿÃÿ߿ÿÀÃỻûûÃÞÀÃÃÃÃÃÃÃÃÃÃÃÀÃÃÀÀÃÀÀÃÀÀÀÀÀÀÀÂÀÀÈÀÀÀÀÈÀÀÈÀÈÈÀÈÈÂÈÂÈÈÈÂÈÂÈÈÂÂÂÈÂÈÂÂÂÈÂÂÈÂÈÂÈÂÈÂÂÂÂÂÂÂÂÂÙÙÚÚÝÝãççêêïPü¬¯««¨w‚lŒ’’~~~r~~ir’rr’q’’’~~~r~’~’~q~~r~r~’r’~’rq’zþ±Œr~~r~~~rll~~~~~~}~~~~~~~~~~l~r~~~’’q~~q~’qr‡’q’’’}’’’’~’~’~~’~’~~~~’~~~~~~r~’~~’q’’~’r~r~lrŒr~r~~rrrrli~q’}’}}Š~~~~~~Š~~~~’~~~~Š~Š~Š™™™}™}™}}’}}’’™’rr~q~’rr’‡’’™’}~’™~™~~~’~’~~~~’~~’~‚ww„««|—¬„ãç¨ãã㶱ãããàã««—«|«„¨w‚‚Œ}’}}~ŠŠ~~™Š™Š™™™ˆ™ˆ™ˆ™ˆˆˆˆˆ™¦ˆˆˆˆˆˆ™ˆˆ™™™’~~’}’’™’}’’‡™™~’}’’Š}~}~’~’~~~’~~’~’~~rrqq’’’’™}~’~~~ŒrŒr~~~~~rr~r~~’’~}™~}~~~Š~~~~Š~~Š~Š~Š~ŠŠŠŠ™}™}™}™}™}’’Š’™’~~’~’~q’’}}~™™’’~}Š’Š~~}~’~’~’¥_„Š~~}~~~’’~’}’}’~q~Œ~~}}’~~q’~q~}~}Š’~’™™}™~~ww„„|——¯üûNP_êççããÝÂ׿ÙÙÂÂÂÈÈÂÂÀÂÂÈÂÈÂÈÂÀ»ÈÞÀÈÀÈÂáâàÀÂÈÂÈÈÂÞÈÀÀÀÀÈÈÀÀÈÃÀÃÈÀÃÃÀÀÀâÂÃÃÀÀÀÃÃÃÃÃÃÃÃßÃÃÃÃÃßÃÃßÃÃÃÃß»ååàåàáåàáÿ߿ÃÁßÁßÁßÁÛÃÃÛÃßÁÃÁßÃÁßÛÁÛßÛÛßÛÃÁÛßÁÛÁäÛÁÚÚÛßÛßÛßßÚäÛÛÛßÛßÛÛßÜÚÚø)X%X%%X%X%XXX%XXX%X%BVûûûûûûûì5XXXXXX&XXX&XXXWXXWX&XWXX&XWXW&WXWWWWWWWWWW&WW&WWW#WWWW?øøøøøøøø®1'#'#'#'#'#'#'#[#""#[##"#["#[Ið,"["""#"###[#["###########'##'WW'#W#&#WWWWWW&WW&WWW&WW&WWW&WWWXWXWWWXWXWXWXWXWWWXXW%+.55HKûûúûûûûûûûûûûüûûû\X%XXX%XX%%XXXX%SùºÐºÐºÐººÐºÐººÐºÐºÐººÐºÐºÐºÐºÐºÒккÒÐÒÐÒÐÒÐÒÐÒÐÒÐÒÐÒÒÐÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÔÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒѼÒÒÒÒÒÒÒÒÒÒÒÑÒÓÒ *(0_(**CGNí—„wwl~~~’’’~’}’’qqq~’™’}™’™}’~’r~~~~}™™’~¥_¨}’’’~’’~}™™~}~}™}™}™}™}™™™’’ˆ™™ˆ™™™Š’™~™~™™™’~}Š™~~ŒllŒ~rlrri~r~~’~~’~’~’~~~~q’~~~~~l~r~~’~~~™}Š~~~~~~~™™™}™’~’~rrlŒr~~~~~~~~~~~~~~~~~r~rl~™™™™™™}™™™™’~’~™’’’™’™Š™™™Š’™}’’~q~~lww|—¨ãæÂÈØØÖ½ÓÑÑÑÑÑÑÑÑÑæ³ÑÑÔÑÑÒÑÑÑÑËÎØØÈÝæâ«««¨wt~Š™Š™™™™™Š™Š™™Š™Š™™™~’Š™™Š~~~~~~~ŒŒrŒŒlŒ~~~~Œ~Œr~ŒŒlŒ~~r~~~’~~~q~~’~~rrr~~’~’~’q’~’i~q~~~~™Š’}~~~~~~~Šˆ™™™’™’~rlrŒ~~~~~~~~i~~~~~r~~~~rlŒrŠ™™™™™™™™’™~’~’’’}’™™™’™Š™’’™™}’~’~’~’wþ¥~~rrl~~~’}’~’’’~q~~q’™™’}™™™~’r~~~~’~w„—¯NCB0*(0_*Z ÒÒÒÒÒÒÒÒÒÒÑÒÒÒÔÒÔÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒÒÒÒÒ¼Ò¼ÒÒÒ¼ºÒ¼Ò¼ÒÒ¼ÒÒÒÒÒÒÐÒÒÒÐÒÒ¼ÒÒÐÒÐÒºÒÐҺкºÒÐÒººÒºººÒººÒººÐººÐºÐºÐºÐºÐºÐºÐºÐºåXXXX%X%XX%%XX%%X%XX5LûûûûûûûûV>:5XXXXXXXXX&XX&X&XWX&WXWX&WXWWWXWW&WW&WWWWWWWWWWW&;?÷øøøøøøø÷ø'###'#######"#"##"'"##["[""""9ð<""""'"[#[#"####'#'#'#'#'#'##&###WW#WWWW#&WWWWWWWW&WWWWWW&WXWX&W&WX&X&+///:>>>HKRVìûìúûììûûúûûûûûûûûûûûûûûüú%X%X%XX%%XX%X%XX%ZíÊкккÐккÐкккÐкºÐÒºÐÒºÐÒººÒºÒÐÒººÒºÒкҺҺҺҺÒÒºÒÐÒºÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒ¼ÒÔÒÒÔÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÑÒÑÒÑÒÑÒÒÒÒÑÑÒÑÑÒÑÑÒØÂãçN(((((Cþ((((0CN—„w‚Œ~~Š}~~~~~™™}™’}™’™™™™’™}™™}}}’wþîlr~~~’Š’’~~’~~’’~~~~~™’™’’™™™™Š~~ŒŒ~llŒ~Š™~Š™™™™™Š~~~~~~Œ~~~~~Š~~Š}Š}™}™Š~Š™™™~}™™™™™}™™™™™™™™™’™™™}’}~}™~}’}’~~~~rr~~Š~~~~~~r~’~~r~~}™~™~™™™’™}’™™™’}’’’™’’’’’Š’™™ˆ™™™™~lw„«¬æÂÂÏÍÑÓÑÑÑÑÑÑÑÑÑÑÔÑÔÑÔÔÑѶèÒÑÑÔÑÑÑÒÑÑÑÑÑÑÑѼÑÑÓÍÏÂÝæ—«„w€~~~~~’~~’~~r~~™™™’Š™™~~Š~~~Š’Š~~~~~~~~~~~~ŠŠ~Š~~Š~Š~~~~~~~~~~~~~~Œ~~~~~~Š~~Š}}~’~™™™™™’™™™™™™}™}’}™}}™’Š~’~r~~~~}~~~~r~~}~~~r~Š}’’~™™™™}™}™™™™™}’’}}~’’’}~™™ˆ™ˆŠ™™~Š~~Œi~l±_„~r~lllll‚lr™™™™™™}’}™™™™™}™™™ˆ™Š‚„°C@0((((((UC(((CããÙØÓÒÑÔÒÒÑÔ¼ÑÒÔÒÔ¼ÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÐҺкÒÒºÒºÒººÒººÒºÒºÐÒºÐÐÒºÒººÐºÒÐÐÒкÐкÐкÐккккккккÐůZ%XXX%X%XXX%XXX%X%%X%HSûûûûûûûûûûVú>:/%&X&XXWXXWXX&XWX&XWWX&WX&W&WWWWWW&WW&WW&6?øøøøøøøøøøøøøTW#'###'#'#'#'#'#[##"[##"#"[#"'MD'"[#""##"#[#[#'########'###&##&#&#W'#W#&WWW&WW&WWWWWW&WW%Y6/::::>HHKVúúúìúúúúúúúúúúûûúûûûûûûûûûûûSHB>>:\:))%X%X%X%XX%XX%XXX¹ºÐºÐºÐºÐºÐÊÐÊкÐкÐÊÒкºÐººÐÒºÐкÒÐÒººÒºÒºÒÒÐÒÐÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔÒÔÒÔÒÒÔÒÒÒÒÒÒ¼ÒÑÔÒÔÒæãÒÒÒÑÒÒÒÒÒÔÒÒÒÑÔÑÒÒÒÑÔÎÝãC@3()((()(((UP((((((((((0Gü—{‚‚rrlll’™™™™™™™}’~~}~Š™™™’™’’¥þ«™~’q~q~rrrlllllrllllrrrr~~‡~r‡r~q~~rr’rr’qrqr~‡r’’’r’~rqr’qr‡’™’’™™™}’’’}™}~~llrrr~r’r‡™™’™™™™™}’~~~’Š™™™™}’}™™}’~’’‡‡r‡rrllllllllllrrrrrrrrllr~~r~~~~~~’~~~~~~~Š~~~‚«—³ãÈؽÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑæèÑÑÔÑÑÑÑÑÑÑÑÔÑÑÔÑÑÑÑÑÑÑÑÑÑÑÔØÈæ——¨‚ŒlrrŒrrŒrrr~r~‡rr~~r~~’r’r™~’’~~~Š}~~~r~~~~~~~~Š~~~Š~~~™~~~Œ~Œ~ŒlŒllr~llrlrlll’™™™™™™’}q~~~~}™™™’’}’}™}~’~‡’r‡~rrlllllrllllrrrrrrrlrlr~r~~~~~~~~’~~~~~~~~~~~~~~~~~~~~wþ¥~rŒlllllrllŒr~~rlrlrll’™™™™™Šw—±G0*((((((((NU((((()))(()ZýâÂÏÔ¼ÑÔÒÒѼÑÑÔ¼ÑÒÒ¼ÑÒÒҼݗÔÒÔÒÔÒÔÒÔÒÔÒÒÒ¼ÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒºÒÒÒÒºÒÒºÒÐÒºÒºÒºÒÐÐÒÐÒкºººÒкÒкккккккккккÐåBXXXXXXX%X%%XX%XX%X%%)5HKûûûûûûûûûûìûK>>:5///+YX%WXWXWX&WX&WXWWXW%Y1/;;??øùøùøùøùøøøøøøTF6&#W#'#'#######"###"'##"[#[#"[""4I9"""#[#["'######"#'#'#'###'###W#W#W#WW&WWW&.11???:F>HøúùùúúùùùúúùúúúúúúúúúúúúûúûúûöRKHH;555Y&+%%XXXX%X%X%X%X%XXX%X%%X%XXXX%5üÄккккккÐÊкÊкҺÊÐÒºÒºÒºÐɺҺÉкÒÐÒºÒºÒºÒÒºÒÒÒºÒÒÒºÒºÒºÒºÒÒÒÒÒÒÒÒÒºÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÔ¼Ô¼ÔÒÔÔÒÒÒÒÒÒÒÑÒÒÒ¼Ò˯ÇÔÑÒÔÔÑÔÔÑÒÔÑÒÔÒÔÑ*3*(((()((((((*þB(((((((((O¥¡„‚lrlllr~~~~™}™™}’}’}}™}}}wþ±€}™™™™™™™™’™’’’’’’‡’‡~’~’q~‡’Š’’’™™’’™’’}’’’’™Šlr~~~}q’’™~’™’Š’~Š~~~ŠŠŠ}’’™’’™’™}™™™™™™lrl~rr~~lr~r~l}™}™’}™}’’™}™™}™ˆ™™™™™™’’’’‡rl‚lllllllrlllŒ~~Œ~~~~~~~~~~~’’Œz—±ÝÙÎÑÑÑÑÒÑÑÑÑÑÑÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑæ¶ÑÑÑÑÑÔÑÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÖØâ¡¡«‚ŒŒŒlllŒrŒ~Œ~~~ŒlŒŒŒŠ~Š~~ŒŠ~~~~~~’™™’ŠŠ~~~Œ~’Š~~~~~~~~~Š~~~~rlrr~Œrlllll‚lllrlrr~~rl~r~ri~’}™}™}}}’™}™™}}™™™™™™™™’’™rrlllllllllrlŒŒrŒ~~~Œ~~~~~~~~~’’™™™Š™ŠŠ~™’™’™’±þƒŠ~~’~’r~~rr~~rlllll‚lllllw|ýG*(((_0()((((*ÑÔÒÑÔÒÒÑÔÒÔÑÒÔÒÑÒÇ¥ÏÒ¼Ò¼Ò¼Ò¼Ò¼¼ÒÒÔÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒ¼ºÒÒÒºÒÐÒÒÐÒÒºÒÐÒÐÒºÒºÒººÒºÒÐÒкҺккÒÊкÐÊккÐкÐкÐÐкׯ*XX%XX%X%X%XXX%X%XX%XX%X%X%55HKûûúìûúûìûúûìûììúììììVVRHKKH>KHHVRùùùùVùùVùùùùùùøùøùøøùø÷;1&#W#&#W#W##'#'#'#'##'#"#[#####"#"""9ðA""#["####""#[#'"'######'#'W#&.11;???FT÷÷øøøùøùùùùùùùùùVùùùùùùúùúùúúúú÷RHH>5551/&&%#XXXXXXXXXXXXXX%X%%X%X%X%X%X%X%X%XXXXXXXåÐÊккÐÊккккÒÐҺкÐÒкÐкÐÒÐÒÐÐÒºÒºÒºÒÐÒºÒÒºÒºÒºÒÒÒºÒÐÒÒÒÒÒÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔÒÒ¼ÔÒÒÒÒÒ¼Ò¼Ò¼ÔÑÒÒÔÒÒÒÑÒÑÒÑÒѼÔѼÔÒ¼ÔѼÔÒÕ )(((((((þ(((((((((((((/C¡‚Œ‡’rqq’’’‡qq’’’’~’~rr’~¡þ|~~}~~Š’~~~~~~Š~’~’~~’’’’~’}™’™’’}’’’’}’’~’™’}™’’’™’’’’~’’~r~’~}~’}}}’’r’}~’’~’’’’}’’’~’~’‡q’’q’q~~’r}’~}’~~~~~~~~~Š~~~Š~~~~~~~~~Œrr‡ŒrlrrllrrŒr~Š~~Š~~ŠŠ~ŠŠŠ‚«°èÈÖÑÑÑÑÑÑÑÑÑÑÔÑÑÑÑÔÑÑÑÑÑÑÔÑÑÑÔÑÑÑÑÑÑÑÔè³ÑÑÑÔÑÑÑÔÑÑÑÑÑÑÑÑÑÑÔÑÑÔÑÑÑÔÑÑÑÑÑÑÑÑÑË¿æé|‚llŒ~~~~rŒrŒrrrrŠ™Š™ŠŠ™~Š™Šˆœ™ŠŠ~~~ŠŠŠŠŠ™~~~~ŠŠŠŠ~Š~~~’~™™~™™~}~rr’’‡’’r’’’~’’~’’’~}~’Š}}’}~~~~~~~~~~Š~Š}~~~~~~~~~rŒrrŒrrrlllllrlŠ~Š~Š~Š~Š~~ŠŠŠ~~Œll~Œ~~~~~~~rzþ¶’~~}~™Š™’™™™~Š~’~’’rq‡‡w—±C(((((((((((((*U@()()())) ×¼ÒÑҼѼÔѼÒÒÒÒÒÒÒÑÒÑÒÑÒÑÒÒÑÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÐÒÒºÒ¼ºÒÒÒÒÒÐÒÐÒºÒºÒºÒÐÒºÒºÐÐÒºÐÒкÐҺкккҺÐÐÒÊÐÒÊÐкÐÊкÊÐÐÊкйL%XXXXX%X%X%%X%XX%XX%X%X%XXX%%+5?LøûûúûúûúúûúúúúúúúúúìúúúùúùúùùúùùùùùùùùùùùùøùùùøùF6'"WWW&#W###W'#'###'#######'####["#[#[""'Mñ'"[###[#"'#'#######'#'#'#&T÷øøøøøøøøøøùøùøùùùùùùùùùùùùùøTHK?H5;54/,&&%WXWXWWWXWXXWXXXXXXXXXXXX%XX%X%XXXX%XXX%XXX%X%XXX%XXXXZíźкккккÐÊÒккÐÐÒÐÒºÐÒÐÉÒÐÊÒººÉÐÒÐÒºÒÐÉÒÒÐÒÒÒÒÒÒÒºÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒ¼ÒÒÒÒÑÒÑÒÑÒ¼ÔÒ¼ÑÔÒÒÔÒÒÒÑÒÑÒ¼ÑÒÑÑÒÒÓ ())((((((((GP((((((((((((Pî«‚qrrr~~~rŒrlrllrrrr’‡wþ±~r~~~r~~’’’~’~r~rŒrrllrrr~’~’’’’’~’~~’’~’~’~™’’™}™’~’}~~}~~~~~~r~~~’’’’~~~~rrlrlrr~’q’~r~~’~q’~rrr~~r~~r’’’r’Š~Š’~~~Œ~~Š~ŠŠŠ™Š~Š’~r~~~r~rrr’~’™™™™’™™’™’’Œ«³æÙÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÔÑÑÑÑÑÑÑÑÑÑæ³ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÔÑÑÑÑÔÑÑÑÑѽ±¯„rŒrŒ~rŒŒlŒr~~~~r~~~~’rr~’rr~~~~~Œr~~r~~lŒr~~~’r’~’Š’’ŠŠ~Œ~Š~Š}~’’’’’~~r’~’q}’~rr~~rr~~’’’’~~™Š™}~~~Œ~~ŠŠŠŠ™Š™ŠŠ’~Œr~~~rrr‡’’’™™™™’™}™}™~’’~~r~~~~r~~~~~~Œléþw~’~’’’’™~ŠŠŠ~ŠŠŠ}~’™~„ïP(((((((((((((PP((((())))( +½ÒÑÔÒÒÒÑÒÑÒÑÒÒÒÒÔÒÔÒÔÒÒÒÒÔÒÒÔÒ¼ÔÒÔ¼ÔÒÒÒÔÒÒÔÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒº¼ÒÒÒÒÒÒÐÒÐÒÐÒºÒÐÒÒÒºÒÐÒºÒºÐÒºÒÐÒºÒÐÐÊҺкÐкÊкккººÐºÐºÄüZ%XXX%XXX%XX%XX%X%X%XX%X%X%XXXXXX%55555=>HHKKTVøúúúúúúúúúúúùúúùùúùµùùùHHT>F?6661&WWWWWW#WW#&W&#W#W#'###'#'#'"##[#'##[####["4D9"#""[##"#"###'##'#'###'W#6øøøøøøøøøøùøøùøùFTFF?66;1Y.YWYWWWWWWWWWXWXWWXWXXXXXXXXXXXXXXXXXXXXXXX%XX%X%X%XX%X%X%%X%XXXXXXXVçкÐкÐкÐкккккÉÐʺкººÒÐÊÒÒÐÒÐÒºÒºÒÐÒÒºÒºÒºÒºÒºÒºÒÒºÒÒÒÒÒºÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÔÒÒ¼ÒÒÑÒÒÒÒÒÒÒÔÒÒÒÒÑÒÒ¼ÑÒ¼ÑÒÒÔ¼ÑÒÑÒÒÒÔÙæO((((((((((((þC(((((((((((((*U|‚’~~lllrlllllrrrr~’lþþ‚lllr~~~~~~~’~~~~~rŒlŒlŒ~~r~~~~~~’r’’~’’’‡~’‡~™rrrr~rr‡~r‡llrrrrrrrr~rlrrrrŒrllllrrrr~’}’}™’’’™™™™’’’~’’™~’™Š~~~~~~Œ~~~™™’™™™™™™~~Œr~~rr~’~™~~~~’}Š™}™™‚—_ÂËÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÔÑÑÑÑÑÑÑÑÑÔÑÑÑÑÑæéÑÑÑÑÑÑÑÑÑÑÔÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽÂé¡wŒr~~rr~~Š~~~~Š~™Š}Š™Š’Š™~~~Š~~~~~~~~~’~~~~~~~~~~~~Š~l~Œ~r~~~~™}’}™}’}~}™’’™™™™™™’’~~’~’~™Š~~~Œ~~Œ~~Š™~’™™™Š’™~rr~~~r~r~~~~~~~}}Š™™™}™™™’™™™}™™~~Š’Š’™~’Šþþ™}’~’Š}™™}~~~’q’~™€«þ*(((((((((((((((Cþ*(((((((()))))(*G³ÙÔÑÑÔÔÔÒÑÔÒÑÑÔ¼ÑÒÑÔÒÔÔ¼ÑÔ¼ÒÑÔ¼ÒÒÒÒÔÒÔ¼ÔÒÒÔÒÒÔ¼ÔÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒºÒºÒºÒÒÒÒÒÒÒÐÒÒººÒкҺÒÐÒºÒкҺÐÊÒºÒºÐÒººÒÐÒºÐÊÐÊÐÐʺÐÊк²XXXXXXXX%X%X%XX%X%XX%X%X%X%XXXXXXXXXXXXXXXXXWX'&++&5;5;55;51Y.Y&&#WWWWWWWWWWWWWWWWW&W#WW###W#W#W#'#'######'###"###"[#"#""EðI'"#[##""'#[#'"#'####'#'##'øø÷÷FFJF6664&Y&#"WWWWWWWWWWWWWWWWWXWXWXXWXWXX&XX&X&XX&XXXXXXXXXXX%X%X%X%%X%XX%X%X%X%XXXXXXXXXXX\üźÐÐÊкÐÊÐÊккÐÒÐÉÐÐÒÐÒÐÒÒкÒÒкҺÒÐÒÐÒºÒºÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒºÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÔÑÒÒÔÒÒѼÔѼÒÒÒÑÒÒÒÒÑÒÒÑÒÑÒÒÑÒÑÒÒÏãî@())(()((((((þ*((((((((((((*þ—€}rrr’r‡‡‡’’’’~‡~’¥þwrr~~qr‡~’’’’™™™’’’’’’’’’’~~’’’’’’’’’’~rrŒrrrlŒ~rr~’~’r‡rrrr~~’’™’’™™’’’™’™’™’‡’’™’’™’~r~~’~™™™’’™~~~~~~~’Š~’Š~r~~Œr~~~~~™™’~’’’™™’™’’~’’’’~’~’’™™™™™w±èÙÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑééÑÑÑÑÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÙ鱨Œ~’~’’r™™™™™™™™™~~™™Š~ŒŒ~~~~ŠŠ~~’~~~~~ŠŠ~Š~’Š’}~’~’}’~’}’’™’}’’’~~~’~’™’}’™™™~Š~™~™~™™}’~~~~~rŒr~’Š’~™™’™’~™™™’™’~’’™’’’~™™’™ˆ™™’™’™™™~~~~’~’™’™’}’™’‚þ_’’~}}’™’}q’’’’q}’Œ—_C*((((((((((((0þ(((((()(0@ýãÍѼÒѼѼÔÒÒÒÒÒÒ¼Ò¼ÑÒÒ¼ÒÔÒÒÑÒÒÒÒ¼ÒÒÒ¼ÔÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒºÒÒºÒÒºÒÒÐÒºÒºÒкÒкÒҺккÐккÐкÒккÐÐкÐÐÅü*XXXX%XXXX%X%X%XX%XX%XXX%X%XX%XXXXXXXXXXXXXWXXWXXWXWWXWXWWWWWWWWXWWWWWWWWWWWWWWWWW&WWWW'WWW&#W'#'#W##'#'#'####'#[#[###[#["'Ið.#["##"'#####"####'#'##W#&#'"[WWWWWWWWWWWWWWWWWWWWWWWWWWXWX&X&X&XW&X&XXWXX&XXXXXXXXXXXXXXXX%XXX%X%XX%XX%X%XXX%X%XXX%XXXXXXçкÐÊкккÒÉкҺººÐºÉкºÒºÐºÒкºÒºÒºÒºÒÒÒºÒÒºÒÒºÒ¼ÒºÒÐÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔÒÒÔÒÒÒÒÔÒ¼ÔÒ¼ÔÒÔÑÒÒÔÑÑÒÔÒÒÔÑÒÔÑÔÑÒÔÑÒÔÒÌN((()))(((((((((((CU((((((((((((((((((((0±¨r™’’’™~’’’~’~r~’³þ¨’’’™’’~’’’’’~q‡’’’’’‡’~’’‡‡~’~rllrr~~~r~~r~~’rl‚llllllllllŒŒrŒ~r~~~~~~~~’~r~rrrrllllrrrrr‡‡‡‡‡rrrrrr’r’™’™’’’’’’‡rrlrrrrrr~’~llrrrrr’’’‡r‡‡r’’~r~~‚¥éÙÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѳéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÙééw‡‡r‡r’rŒrŒr~~~~™~~~~~~~~~~~~~~llrŒŒŒrrŒr’~~’~~’rlrrrrrr~rrrlllrrrrr~‡q‡‡‡rrrrrr’’™’™™’’’‡‡’rrrlrrrrrr’~rlrrrrr~’’’‡‡rr’’~~~~r~}’™}™}’’’™~q~~’~’’~~’„þ¥~~’’llrrlrrrrrlrw_U*(((((((((((((((((N(((((((((((()()))(P ÑÔÑÒÒÑÒѼÔÑÒÔÑÑÒÒÔÑÔѼÔÒÔÑÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒ¼ÒÒÒÒÒ¼ÒºÒ¼ÒÒÐÒÒÒÒÒÒºÒÒºÒÒºÒÒºÒºÒºÒºÒÒºÒÉкºÒÒºÒººÒººÐººÐºÐººÐºÊÐÊкåK%XXXXX%XXXX%XX%XX%X%X%X%XX%XX%XXXXXXXXXXXXXXXX&XWXXXWXWXXXWX&XWWX&XWW&WW&WW&WW&WWWWWWWW&#W#W#W#&##&#'###'#'#######["####"4ñ]""##[#[#"'"'#'#'#'###'##'#W#WW#W#WWWWWWW&WW&WW&WW&WX&XW&W&WXWWWX&XXWX&XXX&XX&XX&XXXXXXXXXXXXX%XX%X%XX%X%XX%%XX%XXXXXXXXXZźккккÐÐкÐÐÐÒÐÒкÒÐÒкÒÒºÒÒÒºÒºÒºÒºÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒº¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔ¼ÒÒÔÔÒÒÔÒÒÔÒ¼ÑÒÔÒÔ¼ÒԼѼÑҼѼҼÑÔ¼ÑÔ¼))((((((((((((UG((((((((((((((þ—Œ’~~’’~r’’~~Œrl|þ¥r~~~’rrrrrŒrlll‚rlrr~~’’’‡’’~’rrr~~~’~~r~r~~rllrllllllllrrrr~rrrr~rr’~~’~r’~’~~rrrrr‡~q‡’™’’q’’’’’~’~’’’’’’’’’~™’’~‡r’~’’’’’~’’’’’’™’’’’’~‡’’’~~Œ¡_ÙÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑèéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÓÈ_|rŒr’~q~~’~}~’’™™™’™™™’™™™’™™’~~rrrŠŠ~~Œr~Œr~~ŒllllllŒr~~rrrrr~‡r’’’’’’’’’~’’~r’’™’’’’~’Š’’’~r’~~’q’}’~’’’’’’’’’’’~~’’’qrr’~’~qrr’’’~’}’’’’q’~}’’’¡þ„™™}~rrr~r~~Œllr|þC*((((((((((((((CU*((((((((((((((((ÉÒÑÔÒÔ¼ÑÒÔ¼ÑÒÔÔÒ¼ÒÒÔҼѼÒÒ¼ÑÒÒÒÒÒÒÔÒÒÔÒÒÔ¼ÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒÒºÒÐÒÐÒºÒºÒºÒºÒººÒºÒÒºÒккÐÒкÒÐÊÒкÐÊÒºÐкÐÊоý*XXXXXXXXXXX%%X%X%XX%XXX%%X%XXXXXXXXXXXXXXX&XXXXXX&XX&X&W&X&XW&XWWW&XWWWWWWWW&WWWW&WWW#WWW#&W#W#'W###'#'####'#'##'##"[#"[#<D'""[#############'#'##W'W#W#&#W#&WW#&WW&WWWWWWWWWWWWWWWWXWXW&XX&XW&XXWX&XXXWXXXXXXXXXXXXXX%X%X%X%XXX%XX%X%XXXXX%XXXXXXXXXûµºÐºÐºÐºÐÊÒºººÐɺºÐºÐÒкººÒкÐÒºÐÐÒÐÒÒÐÒÒÐÒºÒÒºÒºÒºÒÒÒÒºÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔÒÔ¼ÒÒÒ¼ÒÔ¼ÒÒÒ¼ÑÒÒҼѼÑÔ¼ÑÒÑÒÑÔÒÑÑÔ¼ÑÑÒÕ()()(((((((((((þ((((((((((((((((þ°lr’’‡’’~‡’rrrr‚þþlrr‡r‡r~~rrrrrr‡rrrrr‡~r~~~~’Š~’Š’™’™’’™’™rll‚l‚lllllllrr‡rrŒlŒllrr’rrr’’’’’’’’’~~’~’’~™™’™™~rrrrlrrrr~~’~~~~~~~~~’~’~’~~’}™™’’’™™’™’~’}~’~’~’™‚þ±ÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÖÖÏééÏÖÖÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽèþwllŒŒŒŒlŒ~~qr~r~’~~r~’~’’’~rr’r’‡’~~r~~’~r~’’’‡~rr‡’’’™’’’’’’’~’™™™™™~lrrrlrrr~~r~~~~~~~~~~’~’’q~~’’’™’™™™™™™’~’}’’’~}~™™~™™™’’™’}’™’’’’™™’’’’~’’_þw’~’’™’’’’™’’’Œ³þ(((((((((((((((((þ((((((((((((()(((×ÒѼÑÑÔ¼ÑÒÒÒ¼ÑÒÑÔ¼ÒÑÒÒÒÒÒÑÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒÔÒÒÔÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒºÒÒÒÒÒÒÒÒº¼ÒÒÒ¼ÒÒÒÐÒÒÒÒºÒÐÒÐÒÒÒºÒºÒÒºÒººÒºÒºÒÒººÒкÒкºÐÒÐккккйBXXXXXXXXX%XXX%X%X%XX%%XXX%X%%X%XXXXXXXXXXXXX&X&XXX&XXWXXWXWXWX&WXWWWWX&WW&WWWWW&WWW&WWW'WW#W##W##&#W###'#'###"#"#"'##"##"'Mð9""##'"#[#[#'#'#'#####'###W#W#W#W#W&WWWWWWW&WW&WW&WWXWWXWW&XWX&WXWXXX&XXXX&XXXXXXXXXXXXXXXXXXXX%X%X%X%X%XXXX%XXXXXXXXXXX3ÅкÐÊкÐÒºÐÐÐÒºÐÐÒºÒºººÒÐÒºÒÒºÒºÒÒºÒÒºÒÒºÒÒÒºÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒ¼ÔÒ¼ÔÒÒÔÒÔÒÔÒÔÑÒÔÑÒÒÔÑÒÒÑÒÒÑÒÒÒÔÒÑÒÒÔÒÑÒÕ(((((((((((((((þ*(((((((((((((((((((((((þ³Œ™’}’’’~’’’rr‚þþ‚r‡~‡r‡r‡r‡rrr‡r‡’’’’’‡’™™™ŠŠ’~~~~~™™Š’Š~’~rrrlrlrlllrlrrrrrrrrrr’’’~’~~~~~~~~~~~~~’lrrrrrrrrllll‚lllr‚lllrrrr‡~~rrrr’rr‡rr‡r’’rrrrrrrrrrrllll„þæÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÈÂæçNLUUCNãÂÈÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑæþ„rr~~rrr~~~™~’~~~~~~~Œ~rŒr~™’~r~rrrrrlllllrlllŒllllrrr~~~rr~rrlrrrrrrlr‚ll‚lll‚lllrrrr‡~rrrrr~rr’rr~’r’~rrr~rrrr~rlllllllrrrrrrllllllll‚‚llrrrrlþþ’™™’’~’’}’}~’—þ(((((((((((((((*UC((((()((((((()(ÑÔÒÒÑÔÑÔÑÒÔÑÒÒÑÒÒÔÑÒÔÒÔ¼ÔÒÔÒÑÒÒÒÒÒÒÒÒÒ¼¼Ô¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒºÒÒÒºÒÒÒÐÒºÒÒÒºÒÒкÒÒÒÒºÒºÒÐÒкÒкÒкºÐººÐºÐººÒÊÐÊккоí*XXXXXXXXXXXX%XX%XX%X%X%XXXXX%XXXXXXXXXXXXXXX&XWX&XX&X&X&XWXW&XWX&WWWWWWWWWWWWWWWW&WW#WW#W&#&##'#'#'###'#'#'#'##"#[#[""=ð]"##["""##########'#'#&#W#&#&#W#W&WWWWWW&WWWWWWWWWWW&W&XW&WX&XWXWX&XW&XX&X&XXXX&XXXXXXXXXX%X%X%%X%X%X%X%X%X%XX%XX%XXXXXXXXX¹ÐºÐºÐÒÊкÐÐÊкÐÒººÐÐÐÐÒÐÒºÐÒºÐÒÐÒºÒºÒÐÒºÒºÒÐÒÐÒºÒºÒºÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÔÒÒÒѼÒÒÒѼÒÒ¼ÒÒѼÔÔѼÔÑÒÒÔÑÒÒÔѼÒÒÔѼÑÒÈ_((((((((((((U((((((((((((((((Gþ¨~~Š™ˆ™ˆ™™™™’lþþl’’’™’‡’’™’™’’’’’~~’rr’r~’’‡r~’’‡‡’’~’Š™™Š’Š’™‡‡‡r‡‡‡’’’™Š™Š™’™’™™™™’™™‡’‡‡’~’’~’’’‡llll~~’™™™’’‡‡’’’’’’’’™™™™™™’’’’™™™™™™™™™’’r’’’’’’‡’r’r‡r„þãÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÙãC0((U(((*G ãȽÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑãþ„’’r’’’’’’’’’~’rrrrrr‡~’‡’‡r’r’’rr~’r‡‡‡rrrr‡r‡rr‡‡‚llllr~rllllrrr’™’™’’’’’’’’’’’™™™™™’™’r’™™™™™™™’’™’’r’‡’’‡’’’‡r‡rr‡r‡r‡r‡r’‡‡‡rrrrr‡‡‡r‡r’‡rïþw’’‡~’‡~q’’~’wþG(((((((((((((PU(((((((((((BUÈÒ¼ÑÒѼÒÒÒѼÔÒÒÔѼÒѼҼÑÒÒ¼ÒÒÔÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒºÒºÒÒºÐÒºÒºÒккÐÒкÒкÒÐÊÐкÒÐÉÐÐÒкÐккҺÐÊкйLXXXXXXX%XX%X%XX%XX%XX%X%XXX%X%X%XXXXXXXXXX&XXXXXXXXXXX&XWXWXWX&WXW&WWXW&XWWW&W&WWW&WWWWWW&W&#W#W#&#W#&###'######"#"'######[ED'"[###'#'#'#'#'#'####'##'W#W#WW&W#W&WW&WWW&WWW&WW&XWXWWW&XXWWWX&X&XX&XXWXXXX&XXXXXXXXXXXXXXXX%XX%XXX%XXX%X%X%%XXXXXXXXXXX0źÐÊкÐкÐÊÒÐҺкÐÒºÒÊÒººÐÒºÐÒÒºÒºÒÐÒºÒºÒÒÒÐÒÒÒÒÒÐÒÒ¼ÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÔÒÒÔÒÒÒÔÒÑÔÒÒÔÒÒ¼ÒÑÒÔÒѼÒÒÑÒÒÑÑÒÑÒÑÒÝ_)))((((((((((((((*þC((((((((((((((*þ_l’’’’’’’’’’’ƒþþrrr’q’~~’rrr~~~Š™’’’’’~’‡~r’’rr~Š~’~~~‡r‡’r‡r’rr’‡~’~‡r’r‡’’’™™™~™}™™™™~~r~r~r~’‡r~rr‡rrr’~r’r‡’~’‡’™’’’~’’~’~r~r~’~rq’~r’~~r~~Š™Š™™}~’’™™’~wþéÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÖè0((((((0CîãÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑæ_¨‡’’~rrr’~‡r‡’’‡’‡™’™’’~™’’’’~’’’~‡’~~’’rr’~‡’’~‡~‡‡r‡‡rr‡rrrrr~™’r}’’’’’’’’’‡r’’’~~r~rr~’’~’’~r~~~~~~’™™™}’Š™™™™’rrr’’’~‡’’r‡’r‡‡r‡‡’‡’’~’’’’_þ‚rrr’q~’r~’}Œ_þ(((((((((((((((((þ*((((((((((()))))@îÝÓÒÔÒÑÑÔÒÔÒ¼ÑÒÒÒÒÑÒÒÑÒÒÒÑÒÒÔ¼ÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒºÒº¼ÒÒÒÒÒºÒÒÒÒºÒÒÒÒÒÒÒºÒÒºÒºÐÒÒºÒÐкÐÒºÐÊÒÐÊкÒкккÐÅ(XXXXXXXXXX%XXX%X%X%XXX%%X%X%X%XXXXXXXXXXXXXX&XX&X&XWXWX&X&X&XW&WXWWWWXW&WWWWWW&WWW&WW&W#W#W#W#W#W####'##'##'#'#'#""[#[#"#,D9###[#"#"#"#######'#'W#&#W#W#W'W#WWWWWWWWWWWW&WWWWWWWWWXWWW&XX&XWXWXWXX&XX&XXXXXXXXXXXXXX%X%X%X%XX%%XX%X%XX%XXXXX%XXXXXXXX¹ºÐºÐºÐÊÒºÐкºÐÐÉккÐÒºÒÐÉÐÒººÒÐÒÐÒÒºÒÐÒÐÒºÒºÒºÒÒÒÒÒÒºÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÔ¼ÔÒÔÔ¼ÒÒÒÒÔÒÔ¼ÑÒ¼ÑÒ¼ÑÒÑÔÒÔ¼ÑÔÑÔ¼ÑÔ¼ÑÔÒÒÑÔÝ_%))(((((((((þ0((((((((((((((((((((Gþw’™’™™’rllllwþ±rrrrrrrllrŒl‚llllrrr~r~’~’’’’’’’’’’’’’™™’™~rr~r’~’’’’’’~’’’~~~rr~’~’q’’’’™™™™™’™™™™~rŒrr~r~’r~~rrl~’’™™™’™’’~’~~’~~’~~~’~~’’~r~’qrrrr’r~’’™r__½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽã_*((((U(((((Uè½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓ±±~’’‡’’’r‡r’‡~’~™™~~~~~~~Š~~~~~rr’~r’~~r~rrrr~‡’’q’’’’~’~~rrr~r~r~~r~rrrŒ’™™™™™™™’~’~~~’~’~r~rr~’™’~’~~qrrr~‡~’’’’’’’’’r’’’r’’’’’’’™™Š™’™~’~Š~±þw’~~~’~‡~~rrwþ((((((((((((((((((0þC((((((((((()))@_ã¼ÑÒÒҼѼÑÑÒÒÒÑÒÒÒÔÒÒÑÒÒÒÒ¼ÑÒÔ¼ÒÒÒÒÒÒÒÔÒÔÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒºÒ¼ÒÒÒÒºÒÒÐÒÒÐÒºÒÒºÒººÒºÐÒºÐÒÐÒººÐÒºÉÒººÐÊÒкÐÒºÐккккеûXXXXXXXXXX%X%XX%X%%XXX%X%X%X%X%XXXXXXXXXXXXXXXXX&XXX&XWXWXWXXW&XWX&WWWW&WWWWWWWWWWWWWWWW&WW'W##&#&#W'##'######'#####"'""EðA#[""##[#'#'#'##'#'######W#W#&#WWWW'WW&WWWW&WWWWW&XWW&X&W&XWX&WXWX&X&X&XX&XXXXX&XXXXXXXXXXXXX%XX%X%XXX%X%XX%XXXXXXXXXXXX3üÅкккÐÐÒÊÒºÐÒººÒºÒÒºÐÒкҺÒÐÒºÒºÒºÐÒÒÒÒÒºÒÒÒÒÒ¼ºÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼Ò¼Ò¼ÒÒѼÔÒ¼Ò¼ÒÔÒÒÔÑÒÒÒÒѼÒÑÒÒ¼ÒÑÒÒÑÔÒÑÔÔÎG@(()((((((((((((((((OU(((((((((((((((((((þ«r’r~’’‡rrr‡„þ_‡~’~’~~‡’‡r‡‡r‡rrllllŒllllllrrrrr‡~~‡r‡r‡r‡~‡’rr’’rr’rrr‡~’’~’r’™rrr~’’r’‡r‡’’’’‡‡r’™’™™™™™™™’’~’’™™™’’’’~rlrrrrr~rrrrrrrrrrrrrrrrrrlŒ’™™’’wþãÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓé*((((((((((*éÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑâþ«~Œ~~rŒr~~rr~rr~~~~’~~’’’‡’’‡’’’~‡’r‡‡rrrr’~’~’r’~’’’’‡’‡’™™’™™™™’™’’~’’™™™}’’q~rrrrrr~~r~rr~rrrlrrrrrŒ~rrŒr~~™’™’™’’’’’’’’’™’’’’’’’’™™’™™™’’¥þ¨’’’‡~r~’rr‡«þC((((((((((((((((((((U(((((((((()(((()(CO¾ÒÑÔÑÑÒÑÒÒÒѼÔѼÔѼÔÒÔÒÔÑÒÒÒÒÑÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒºÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒºÒÐÒÒºÒÒÐÒÒºÒÐҺҺкÐÒÒºÒкÒÊÐкºÒÊккÐоý(XXXXXXXXXXX%XX%%XXXX%X%XXX%X%XXXXXXXXXXXXXXXX&X&XXX&XX&XWX&XW&WXW&WXWWWXWWW&WWW&WW&WWWW&W#W#W#&#W##'##'##'#'#'####'"'"#[#'Mñ'"###[####"####'####&#&#&#W'W#WW#&WWWWWWW&WWW&WWWWW&XWWWWX&XWWX&XWXWXXXXWXXX&XXXXXXXXXXXXX%X%XX%X%XX%%X%XX%%XX%X%XXXXXXXXXX纺ÐÐÊккºÐºÐººÐÒºÐкÐÒººÒÐÒºÒÐÒºÒºÒÒÒººÒºÒÒÐÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÑÒѼÒÒÒÒÒÒѼÔÒÑÔÒÒÑÑÒÔÑÒ¼ÔѼÔ))))(((((((((((((*þC(((((((((((((((þ|}’’’~’~’r‡r„þé’’‡~rrrrŒrrrlrlllr‚l‚ll‚l‚l‚lllrlllllll~rr~r~rrrrrrrr~’’™’™~’’~’~’’’rlŒrŒr~’~~~rrrrr™’™’’™™’’’~‡~~’’}’’~’r’’‡r~rr’’’r~rrrlŒrrllrr~‡~‡‡r‡rrr³þÙÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑæþ((((((((U((((((*UèÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽþ采~rrrr’rrlrrrrrr~~rrrrrrr’rrrr‡r~r~rrŒrŒrŒ~rr~~’™’}’~r~r™’™™’™™’}’~’’~’’’‡’~’r’’~rr~rr’’’~rrrŒrrrlrrrrr’‡r’‡rrrrr~~’’r~r’’‡‡rr’’r’™’’’’’’’’¡þ„’’’’r‡’‡’’‡„þ(((((((((((((((þ*(((((((((((((((((((())) ÒÔÒÒÔÑÒÔÑÒÔѼÔÑҼѼҼҼÒÒÔÒÒÔÒ¼ÔÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒÒÒÒÒºÒºÒºÒÒºÒÒÒÒÐÒºÒºÒºÒºÒºÒÐÐÒÐÒºÐккÐÐÒÉкмÊккÊÐçBXXXXXXXXXXX%XX%X%X%XX%%X%X%X%X%XXXXXXXX&XXXXXXX&XXWXXX&XW&XXW&XWW&XW&WWWWW&WWWWWWW&W#WWW&#WW#&#WW#'##'######'"'"###"##".ñ=""[#"##[##'#'#'##'#'###'#W#W#WW'WWWWW&WW&WWWWWW&WWWWWWX&XWWWXX&XWX&XX&X&XX&XXXXXXXXXXXXX%XX%XX%XXX%XXX%XXXX%XXXXXXXXXXXX0ÆÐкÐÒÐÊÒÐкÐÐÐкÐÐÉÒÐÒºÐÒÐÒºÒºÒºÒÐÒºÒºÒÒºÒÒºÒÒÒÒÒÒÒÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÑÒÒÒÒÑÒÒÒÑÒÒÑÒÑÔ¼ÑÒÒԼѼÑÑÒÒÑ)((((((((((((((þ(((((((((((((((((Cþ„™ˆ’™™’™™™™’«þ¡qr~r~rrrr~~rrrrrrr‡rrrlrlrrrrrrll‚l‚rlrrr~rrrrrrr‡r’‡‡r’’’’’~’’’’’’’ŒllŒr~r~~rrrr~r™’™™™™’’’}’™™™™™ˆ™™™™’™™™™™’™’’~~rr~rŒrrr~rrr~r~rrrrrrrr_þÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑþP(((((((((((þÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑþ_q’’™~’~~’~r’~~r~~r~~~Œ~Œ~~~r~™™™’’~~~~~r~~~’~~’™™~Š’~’’~’™’™’™’’’’’’}™™™ˆ™ˆ™’™™™™™™’’’’~~r~rrrrrrrrrrŒr~rrrrrrrrrr’~’™’’’’~’~’™’~’~~~~’~’~’}|þ«™’’’~’~r~‡’¨þC((((((((((((((((((þ((((((((((((((()))))¼ÑÔ¼ÔÒÒÔ¼ÑÔÒѼÒÑÒÒÑÒÑÒÒҼҼҼѼÒÒ¼ÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒºÒÒÒºÒÒÒÒÒÒºÒÒºÒºÒÒÒºÒºÒÐÒºÒÐÒººÒºÐÉÒÐÒºÐʺÐÊÒºÐÐÒÐÊкÐÅüZXXXXXXXXXXX%XX%XX%XX%XXXX%X%XXXXXXXXXXXXXXXXX&XXWXX&WXWX&XW&XWW&XWW&WX&WWWWWW&WWW&WWW&W#WW##W#&##W#W###'#'######[#[#'"""=ðI#"##[#'###"#####'##'#'W#W##&#W&WWW#&WWWWWWWW&WWWWWXWWX&WWWXX&&WXWXXX&XXWXXXXXXXXXXXXXXXXXX%XX%X%X%XX%%XX%XX%XX%XXXXXXXXXXûººÐʺккºÒºÉÒÊÒкÒккҺҺÒÐÒºÒÒºÒÒÐÒÒºÒÒºÒÒÒºÒºÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÔÒÒ¼ÒÒÒÒÔÔÒÔÒÔÔÒÑÔÔÒÔÔÔÔ¼ÑÔ¼ÑÒÑÔÒÔÒÑÔÒ))((((((((((((Cþ(((((((((((((((((((((((þþ’~’}’~’~rr‡_þƒrrr~r’~’’’rrrrr‡‡’‡’‡‡r‡‡r‡rrrrr‡‡‡‡‡r~ŒŒrŒŒŒŒr~~~’~~~’’~’~~’~~‡r’~™’‡’’™™™’™™™™’~~r~‡~q’’’~’r‡~rr™’™™™™ˆ™™’’~’’~~rr~~~’~‡~~rŒrr~’’’~’’~r‡réþ½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑéU*((((((((U(((((((UéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÖþ±’~Š~~~™™™™™Š~~~~~~~~~~’~’~’™’’’’~~’’’~‡’’™rr’~rr~r’r~rrr~r~’q~’}’~’~rr~~’~™™™™™™™’’’™~~~r~r~~~’~~~r~~r’~’’™’~’r~‡~™’Š~Š~~Š~~™Š~~~~™~’~~~}’~’wþ_r™’~’~’’’~~l_þ(((((((((((((((((þG((((((((((())ÑÒÑҼѼÑÒÒÒÒÒÑÔÒÒÒÒÒÒÒÑÒÑÒÑÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒÒÐÒÒºÒººÒÐÒÒºÒÐÒººÐÒÐÐҺкºÐÒºÒÐҺкÐʺºÐºÐººçBXXXXXXXXXXX%XX%X%XX%XX%X%XX%X%X%XXXXXXXXXXX&XXX&XX&XXX&XWXWXWWXXWWXWXWWWW&WW&WWW&WWWWWWWW#&WW#W#&##'#'#'###'##'"####""#[#'Ið."#[##"#"'#'#'#'##'##W##&#&#W#W#W#WWWWWW&WWWWWWW&WW&W&WWX&X&WWXX&X&XWX&XX&XX&XX&XXXXXXXXX%XXX%X%XX%X%XXX%X%X%XXXXXXXXXXXXX3üźкÐкҺÐкÐкҺÉÐкҺÒÐÒÐÒºÒºÒºÒÐÒºÒºÒÒºÒÒÒ¼ÒÒ¼ÒÒÒÒºÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒ¼ÒÒ¼ÔÒÒ¼¼ÒÒÑÒÒÒ¼Ò¼ÔÑÒ¼ÔÒ¼¼Ñ¼Ñ¼ÒѼÔÑÒÔѼÑÒѼÔÑC0)())(((((((((((((((þ(((((((((((((((((þ¡rr’’r’‡‡rrrwþþlrrrrr~’’~~rrr‡r~‡r‡’‡‡rr‡‡‡rrrrrr~rrr’‡‡’’’’‡’’‡’’’~’’rr~’’’’~~rr~~Œ~~~~r~Š’™™’™’’’~rrr‡~’q‡‡‡‡rrrrrr’’‡‡’‡’r’’’rrrrrrrq~’’™rr~’r‡~‡’’’‡r’‡³þÙÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽïG(((((((U(((((((Cþ½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÏþ³~rr‡~’~rrr’‡’’’’’’q’‡’~’~’~rr~~}™™’™’’~’~rlŒrrrrq~~’~~~~~’rrrq’’’‡’‡’‡rrr‡r’’’’‡’’‡r’’‡rrr~rr’~’’’rr’~r’rr’’’‡’r’’’rrrr’~rrrrrr’’’’’’’q’~’’~Œîþ‚r}™™™™™’’’~«þ(((((((((((((((((((þ*(((((((((((((())(@àÔÒÒÑÑÒÑÒÑÒÒÑÒÒ¼ÔÑÒÔÑÒÔÒÒÔÒÒÔÒÔÑÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒ¼ÒÒºÒºÒÒÒÒÒÒÒºÒÒÐÒÒÒºÒÐÒºÒÐÒÐÒºÒÉÐÐÒÐÒкÐкºÐºÒºÒÐккÐÐÅ(XXXXXXX%XXXXX%X%X%X%X%XX%X%X%XXX%XXXXXXXXXXXXXXX&XXX&XWXX&X&XXW&XW&WW&WWXWWWWWWWWWWW&W#W&WWW#&#W#&#W#W###'##'##'#'"'#[##"#9ñ]"#[##[#'#########'##'##&##W#W#&WW&W&WW&WWW&W&WWWWWXWWXWXWWWWXXWWXWX&XXXX&XXXXXXXXXXXXXXXXXXX%X%XX%X%XX%%X%XX%X%X%XXXXXXXXXçºÐºÐкÐÐÐкҺÉкÐÐÒºÒÐÒкºÒкÐÒÐÒÐÒºÒºÒÒºÒÒÒºÒÒÒÒÒÒºÒÒÒÒÒÒºÒºÒºÒºÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒ¼ÒÒÒÑÒÒÔÒÔÒÑÒѼÒÒѼÒÒÑÒѼÒÑÒÔÑÒѼ¼ÑÒÑÒÑѼ—_))((((((((((((((((((*þ(((((((((((((((*þþŒrr~~’~’~~’’«þ—’~™~’™’~’~‡~’’‡’’~’’~’~r’~’~’’’™’™’r’~‡’r’r‡q~’’’’q’’’’’’’~~’~’’r~’’’~’~r’~’’’’™’’’’’r’’’™™’™™’™’r~rrrr~~’~~~’~’~’’~’~™’~’’rlŒrrrrrrrrrrrlll„þèÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽ±0((((U((((*Oî½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑãþ«lll‚llrrrrr‡r’~’q’~’’’’‡‡’’’‡~~’’’’’’~’’’~’’’~’’’’™’’’’™’r~‡~’~q~~’~’~’™’’’r~’r’‡rr’~’~’’’’’™’’’’~’’’rrrrrrrrrllllllll‚llrlrrrrrrrrrr‡~‡’r’‡‡|þ|r’r’’’’q~~’€_U*(((((((((((((þ0(((((((((((())((3_æÒÒÑÔÒÒÒÒÒÒÑÒÒÒѼÔÒÒÒ¼Ò¼Ò¼Ò¼ÒÒ¼Ô¼ÔÒÒÒÒÒÒÔÒÒÒ¼ÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒÒÒÒÒÒÒÒºÒÒºÒÒÒºÒºÒºÒºÒºÒºÒºÒºÒкÒÉкººÒºÉÐÒкÐкÐÊкккìKXXXXXXXX%XXXXX%XX%XX%X%X%XX%XXXXXXXXXXXXXX&XXXXX&XWXX&XWX&W&XW&WXWXWW&WW&WWW&WW&WWW&WWW#W#WW#W#W#'#'#'##'###########"'"#QI'""##"##"#[##'#'#'##&##&##&#&#WW#WW#WWWWWWWWWWW&WWW&WXW&W&XX&W&XX&XWXWX&XXX&XXXXXXXXXXXXX%X%X%XX%X%XX%XXX%X%%XXXXXXXXXXXX3ý׺кººÐÊÒºÊÒºÐÒºÒºÒººÐÊÒºÒкÒÒÒºÒºÒºÒÒÒºÒÒÒºÒÒÒºÒÒºÒÒÒºÒºÒºÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÔÒÒÒÔÒ¼ÒÒÒÒÒÒÒÒÒ¼¼¼ÒÒÒÒÒÔ¼ÒÑÒÑÒÒÒÒÑÔÒÑÔÒÔÑÑÔÒÔÔÑÔÑÂï(((((()(((((((((((((þ*((((((((((((((((Uþ‚’~’’‡~‡r’~’r_þr‡~’~’r’r~r’rrrrrrrr‡~‡~’’’™™~’~™™Š™™™~~™™™’~~~™~’’™™™’ˆ™~’’~rqr~~’~~~~~r~~~~’’’~~’~rrrr~~‡’~‡rrl‚rlll‚llrlrr~‡~~r~~~’’~‡r’lrrrrllrlrrrrrlrll±_ÖÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÙ¥G(((((U((((((Gþ½ÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÖþ±lllllrlrlrrlllrŒrll‚rlrr~~’q‡™™™’™™’’’’}™™™™’~’~’™’™™’™’’’’~~~rrŒlllllllrrrrlrlll‚l’’’’™’’’’~’r’~‡’~rŒllllrlrrrlrll‚l‚ll‚l‚llrrrr‡‡rrlrrrrrrrr‚þï‚rlllll‚lllrwþ(((((((((((((((((((*_((((((())))(@_âÒÑÔ¼ÑÑÔÑÔ¼ÒÑÔ¼ÑÒÑÔ¼ÑÔÑÒÑÒÑÔÒÑÔÒÔÒÔÔÒÔÒÔ¼ÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒºÒºÒÒÒÒÒÒºÒÒºÒÒÒÒºÒÒÒºÒºÒºÒÐÒºÐÒкÒÐÒÐÐÐкÐÊÒÐÊкÒÐкко(XXXXXXXXXX%XXXX%XX%XX%X%XX%X%XXX%XXXXXXXXXXXXXX&X&XXXX&XWX&XWXWX&XWW&WWXWWWWW&WWWWWWWWWWW'W&W##&#W##W####'###'#'"#'"[#[#""['Ið9#"[#[##'"##'####'#'##'W#&#W#WW#W&#WWW&WW&WWWWWWWW&XWW&WXWW&WXXW&XWXX&XXXWXXXX&XXXXXXXXXXXXXX%X%XX%X%XX%%XX%XXXXX%XXXXXXXXXXN¹ºÐÊÐÐÊÒкÐккккÐÒÐÒºÐÒºÒкºÒÐÒÐÒÐÒÐÒÐÒºÒ¼ÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÔÒÒÒÒÒÒÒÒÒÒÑÒÒÒÔÒÒÒÑÒÔÒÔÔÑÔÔÔÔÔÔ¼ÑÒÔ¼ÑÒ¼ÑÒÒÒËïU))((((((((((((((((((((((((((((((((((*þ€~}~’~~’’’Š~~‚þþrr~~’’’’~’’’’’’r‡’’’’’‡’‡~’rrr‡~‡r‡’r‡~’r‡~~’~’~’™’Š’™’’™™™™™™™™™™’™™™’™’™’’™~’Š’’rr~‚l‚llrr’™’Š’’‡’’r‡‡‡’r’™™’~’~‡~’’™’™™’’’’’’~‡‡‡‡’‡’‡‡‡rrr‚þéÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽãG*((((((U((((*GPãÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑéþ‚rrrrrr‡rr‡r‡rrrrrrr‡rrrrrr’~~’’’’}’™}}’’’’}~’’~’’’~~r~rŒllr™’’~~rrrrrrrrrr~rrŒrrrr’’~’~’r~rr‡r’~’~‡~rrrrrrrrrrrrrrr‡rrrrrrrrrrr‡rrrrrrrrr~rr~rr_þwrrrrrrrlrrrrwþG*((((((((((((((((((((P((((((((((()))P_ÏÒÒÑÒÔÒ¼ÒÑÒÒÒÑÒÒÔÔÒÑÔÒÒÔÒÔÒÒÒÒÒÒ¼Ò¼ÒÒ¼ÒÒÒÒÔÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒºÒÒºÒÒÒÐÒºÒºÒÒºÒºÒÐÒºÒºÒÐÒºÐÒккÐɺÒккÒккººÐÊкºêLXXXXXXXXX%X%X%X%XX%X%XX%X%%XX%XXXXXXXXXXXXXXXXWX&XX&XWXWX&XWWWXWXW&WW&WWWWWW&WW&WWW&WWW#W&W#W'W#'#&#'#'######"#####[###"=ð<#"####[#"#'##'##'###'######W#W#&#WWW&WWWWWWW&WW&WWWWWWXWW&XWXW&XWX&XWX&X&XX&XXXXXXXXXXXXXXX%XXX%X%X%XX%XXX%XX%%XXXXXXXXXXXZÚккҺкÐÉкÒкҺÒкºÒºÒÐÒºÒÒÒºÒºÒºÒºÒºÒÐÒºÒºÒÒ¼ÒÒ¼ºÒÒÒÒÒÒÒÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÔÒ¼Ò¼ÒÒÒÔÒ¼ÔÑÔÒÔÒÔѼÔѼÔѼÔҼԼѼѼÒѼÔÑÒÔÑѼÔÑÑÒ×Z)())((()((((((((((*UG((((((((((((((((((((*U_~‡rrr’rrrrrll¡þ«r~~r™~~~~~~~~~~~™~’~’~~~~’~’r~’’rr~r‡r‡‡r‡‡‡‡’‡‡’‡‡‡’‡‡~‡‡‡‡r‡‡r‡‡rr‡r‡r‡rr‡r‡rrrrrrr‡‡‡r‡rrr’r‡’’’‡rr‡’rr~rrrŒrrrrrrrr‡~r~r~rr~~~~’’’~‡~r’‡r‡‡‚þè½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑËÈãæNCC0*UU*GããÙ½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ¡þw‡rr‡‡‡rr‡r’‡r‡r‡‡r‡‡r‡’’‡’’r‡’‡~~‡r‡r‡r‡~‡r’‡‡r‡rr‡rr‡rrr‡rr}’~’r‡‡’‡‡’‡‡’‡r’’‡’’‡‡rrrrrllllllllr‚llrŒlllrllllŒr’‡‡‡r‡‡‡‡‡r‡r‡r‡~‡‡‡‡rr‡r’’’’’‡’«þ³‡‡‡r‡‡‡‡‡r‡’‡‚_U(((((((((((((((((((_*(((((((())))))*ÒѼÔÑÒÑѼÔÑѼÔÑÒѼÔÒÔ¼ÔÒÒ¼ÒÒÒÔÒÒÒÑÒÒÒÒÒ¼ÔÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒºÒÒÒºÒÒÒ¼ÒÒÒÐÒÒÐÒÒÐÒÐÒºÒÐÒºÒºÒºÒºÒкÉÐҺкÒÊÐÐккÐо*XXXXXXXX%XXXX%XXXX%XX%XX%X%XX%XXXXXXXXXXXXX&XX&XXXXXWXXX&XWX&X&XW&WWXWWXW&WW&WWWWWW&WWWWWW#W#W#W#W#W#'###'#'#'#'#'#[###["#'MI'"#[#[###'######'##'#W#W'W&#&#&#WWWWWWWWW&WWWWWWWW&WWW&WWWXWXW&XX&XWX&XXWXX&XX&XXXXXXXXXXXX%XX%%X%X%XX%X%XXX%%XX%XX%XXXXXXêºÊкºÐºÐºÐºÒÊкÐÐÐкÒÐÐÒººÐÒкÐÒÐÒºÒÐÒºÒÒÒÐÒÒ¼ÒºÒÒºÒÒÒÒºÒÒ¼ÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÔÒÒÒҼѼÒÒÒÒѼÔÒÒÒѼÔÑÒÔÑÒÔÔÑÔÔÑÒѼÔÔÔÑÔÒÑÒ((((((((þ(((((((((((((((þ—€~r™r~r~~rlŒllwþþl~ŒrŒŒlŒŒlŒŒlll~’’’™™™’’’’™’‡’’‡r‡‡’‡r’‡r‡rr’’™™™’Š™™™™™™’™™’™’™™’™~’~~~’™’’’™™™’’r’‡llllrrr~~rrrrll~™’™™™™’’’’~’~~~™™’™™’™’™™™~~’™’’™’™™’’’™™’’‡‚_æÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÏØØÂÂÝéþÝÝÈÈØÖÓÓÓÓÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓè_w’’’’’‡r‡’‡’‡~‡’’rr’’~~’~r~~~’~r~rr~rrrr~~rrrlll~r‡‡r‡’r‡rrrrrrlrrrrrr™Š~~~~~’rrrrr~rrrrrrr‡’’’r‡’’’‡r’r‡r‡‡rrr‡‡’’’’’’’’’‡r‡‡‡‡‡r‡’’r~’’~’rrrr~’~l±þwrrrrrrrrrrlrll¯þ(((((((((((((((((((((þ(((((((((((()ÑÒÑÒÑÒ¼ÒÔÒѼÔÑÒ¼ÔÔÑÒѼÔѼÔÑÒÔѼÒÔÒÒÒÒÒÒÒÒ¼ÒÒÒÒ¼ÒÒÒÒÒ¼ÒÒ¼ÒÒ¼ÒÒºÒÒ¼ÒÒÒÒÒÒÒ¼ÒºÒÒÒ¼ÒÒÒ¼ÒÒºÒºÒºÒÒºÒºÒºÒºÒкҺҺÒÐÒккÒÐÒÊÐÉккÒÊккººµBXXXXXXXX%XXX%XX%X%X%XX%X%XX%XX%XXXXXXXXXXXXXXXXX&X&XX&WX&XWXWWX&WX&WW&WWWWWWWWW&WWWWW#&W#&WW#&#W#&##W##'#'##########["##"".D9""[####[#"#[#'###'##'#'####W#W#WW'W'WWW&WWW&WW&WWWWX&XWX&XW&WXWX&XWXXWX&XX&XXXXXX&XXXXXXXXXXX%XXXX%XX%XXX%XX%XXX%XXXXXXXXXX0¾ÐкÐккÐÊÐÐккҺÐÊÐÉÒºÒÒººÒºÒºÒºÒºÒÒÒºÒºÒÒºÒÒÒÒºÒÒº¼ÒÒ¼ÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒ¼ÒÒÒÒÒÒÔÒÔ¼ÒÔÒÒÒÒÒÒÒÒ¼Ò¼ÒÒ¼¼Ò¼ÒÒÒÒÑҼѼҼÒÑÒ))((()(((((((((((((((GU(((((((((((((0_Ÿ}~™™ˆ™™™™™~’rrl_þwrŒrrrrrrrrrrrlrrr~rrrŒ~~~~~ŒŒllŒrŒ~r~~~rŒ~~~~~Œ~~~~~’’’’’~’~’‡~r‡~rrr~’’~’’‡’’’’’’’’’’’’’™™™™™’Š™Š’’ˆ™™™™™’™~rrrrrrrlrllrlrlrrrrrrlrrllll’™’™~’}Š’€³±ÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑè±ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÖ_±’’™’™~™™’™™’™™™~r’’™™™™™™’’™™’’’’’’’’‡’~‡r~rrrr‡’’’~’’’™™’’r’’Œ~~~Š~ŒlŒr~Œ‡~~’™’’’~rrrŒrrrrŒrrlrrŒlrrŒrrrrrŒrŒlllr™Š’Š™™}™’™™™™’’™™™}’’ŒlllŒlŒrŒlllwþ_lllllŒŒŒrŒrrr~~„_0(((((((((((UG(((((((((()(()))ÔÔ¼ÑÔÒÒÑÑÒÑÒÒÒ¼ÑÔ¼¼ÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÔÒÔÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒ¼ÒºÒÒºÒÐÒºÒÒ¼ÒÐÒºÒÐÒÐÒÐÒкҺÐÐÒкººÒºÐºººÐҺкккÐÊÐÐÐо)XXXXXXXXXX%X%X%XX%X%X%XX%XX%XXXXXXXXXXXX&XX&X&XXWXX&XXWXWX&WX&WXWWXWWW&WW&WW&WWW&WW&WWWWW#&#W#'##'##'#####'#'"'"[####[#[#"EðM""##"[####'#####'##'####&#&#&#WW'WWWWW&WWWWWWWWWW&WWWWWWWWWXWX&XWWX&WXX&X&XXX&XXXXXXXXXXXXXX%XX%X%XX%X%X%XX%XXXX%XXXXXXXX캺ÐÐÊÐкÐÊÒººÒÐÊÒкÒҺккÐÒкÒÐÒºÒÐÒººÒÒºÒºÒÒºÒºÒÒÐÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÔÒÔÒÔÒÔÒÔÔÔÒÔÔÔÔÔÔÒÒÒÒÒÒÒÑÒÑÑÒÑÑÒÑÒÑÒÑÒÔÑÒÒÑÑÑÒÒÑÔ ()(((((_G((((((((((((((((((0Gþ«~’}™™™™™’’’’~~‡r¨þ³Š’™™™™Š’~~’’~~’~~™’~~~‡~rr~r‡r’‡’’’’’’’’’‡’’’~™ŠŠ™ŠŠŠŠŠŠ~~~~~~~~~Š~~Š~rŒŒ~lŠ™’’™™™’’~’’’’’~~’~™’™’’}™’™’~’’~~r~~~r~~™’~‡~~’~r~~~~r~~™™’’’’’’’’’’~’’™~„þã½ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÓÑÑÓÑÑÑÑÑÑÑÑÑÑÑèéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽã_|~’’’’’’™’™’’’™’’’’’’’’’™ˆˆ™ˆ™™~~~~rŒŒrlŒrllŒŒllll‚‚l‚’’’™™’’’™~’~~~~’~™’™™™™™™™}™™™ˆ™Š~~’™™Š~™™™’™’~’Š~™™™™™’™™’’’’™’’}’’~’~™’’™’Š’’’~’’’~‡r’r‡’~’’’’~¡þ„~‡’’’’’™’~™™’™’~{ïC*(((((((((((((Cþ(((((((((()( +Ô¼ÑÔÒÒÑÔÔÒÒÒÒÑÒÒÒÒÑÒÒÒÔÒÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÐÒÒÒÒÒÐÒÒÒÒÒÐÒºÒÒºÒÐҺкҺÒÐÐÒºÒºÒºÒкҺÒÐÒººÐɺÉккҺÐÊкµBXXXXXXX%XX%X%X%X%XX%X%X%XX%XX%XXXXXXXXXXXXXXXXX&XX&XXWX&X&WX&XWW&XW&XWWWWWWWWWWWWWWWWWW'WWW#W#WWW#W#'W#'#'########"'"##"#[#'Mð'#[#[##""'"#'##'##'##'#&##W#W#W#W#W#W#WWWWW&WW&WWWWW&WW&XWX&W&WWX&XWX&XWXXXX&XXX&XXXXXXXXXXXXXXX%X%X%X%XX%X%X%XX%X%XXXX%XXXXXXZüÚÐкÊкÊÐкÐÐÐкÐкккÐҺҺкҺҺҺҺÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒ¼Ô¼Ô¼Ô¼Ô¼ÔÒÔÔ¼ÔÒÔ¼ÔÒÔѼÔÔÔÔÔÔÒÒÔÒÒÒÒÒÒѼÔÑÒÒÒÒÒÑÒÒÒÇ¥U\())((((((((((((((((((0þ((((((((((((((((((((((((*Gþ„l~ŒŒŒŒ~Š’}’~~~~™’€_ï’~’’~r~~rŒŒr~rrrrrrrrrrrrrrŒ~~r~r~rr~~rr~~’~’rr’~~r~~’’™ˆ’r~~’~~rlŒŒllŒllŒŒr~~~~rrrrŒŠŠ’Š’™™~}}’~~~~Š™™™™}}’™™™™™™’’~~’r~rlŒlrrŒrllllrlrrrlllllr~~‡~~~Œ±þÈÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѽÑÓÑÑÑÓÓÑÓÑÑÑÑÑÑÑÑÑÑééÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÑÑÑÓѽÈ_¥rlllllŒ~r~~~Š’’™’~’™™™™™™™’~’~’Š’Š™rllrrllr‚l‚‚‚‚l‚l‚l‚lllrllllll’™’™™™Š’~’’’’’’~’}’’’’™’’’’’’’}™™~’}™’’’~‡~’r’’r’r’~’’~’Š’™’~~~r~~~~~’~ŒlllllŒlŒrlrŒr‡‚ïþ‚’~~~~qŠ’~’’’™™™™€¬ïG0((((((((((((((þ(((((((())()))ZO_ÈÔ¼ÑÔÒÑÔÔÒÒÑÔÑÒÒÒÔÒÑÒÔÑÒÒÒÒÒÒÒÒ¼ÔÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒÒÒÒºÒÒÒºÒÒºÒºÒºÒÐÒºÐÒÐÒÐÒÐҺкҺÒккÒкҺкʺºÒºÉкÒÊкккºÐÚüXXXXXXXX%XX%XX%X%XXX%XX%X%XX%XXXXXXXXXXXX&XXXX&XXX&XWXWXWXW&XXWWWWW&XW&WW&WWW&WW&WWWW.11;???FTT÷,&####'#'#'#'##'###["'"#"",ñ9""#"##[#'"##"#'#####'#'##W'##W#W&#W&WW&WW&WWWWWWW&WWWXWWW&WWWXW%Y+//++/%X&XWXX&XXX&XXXXXXXXXXXX%X%X%X%XX%X%XX%X%XX%X%XXXXXXXS꺺ÊÐÒкÐÒʺÒʺÊÐкÐÒкÐÒºÐÐкÒÐÐÐÒÐÐÒÐҺкÒÒºÒÒºÒºÒºÒÒºÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼Ò¼ÔÒ¼ÒѼԼÔÔÑÒ¼ÔÒ¼ÒÔѼÔÑÔÑÒÔÑÒÒÔѼÔÑÒÑÒÑÒÔàéC3)(((((((((Cþ((((((((((((((((*O¶„lŠ~~’~q~Š’’}™™~}Š~}éþ¬~Š™œŠ™™Š’Š™’~™~Š~~~Š~ŠrŒŒŒŒŒrŒr~~ŒŒ~~~~~~~ŠŠŠ~Š’~~~~™™Š’~~™~’~~~~™~’™’’’’r’’’’™™’™™’ˆ™™llrlrr~rrrrrrl~}’}’™’}~’}’}’™™™™’™™™™™™’™’’rllllllllllllllŒ~Œ~Œ~r~”¬±ÝÖÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓÑÑÓÑÑÑÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÓÑÑèéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓãﯕlllllllllŒ~~~Œ~~Œ~Œ~~~~~’rrrrrlrl‚llllllllrlrrrrrrrlll‡r‡rrlllr‚lll~‡~’rq‡’~’’~’~’’’qr~’r~rr~’~r~’~’’r~’~’’‡’’rlllllŒrlŒŒrlŒlŒŒrŒŒ~r~r~r~~~rrlllllllrrrr~‡„þ¶Œrrrr~’~’~’rr’’’‡rlŽ_*(((((((((((((_C(((((((()())(C_ã˼ÔÒÑÒÒҼѼÔÒÒ¼ÔÒѼÒÒ¼Ò¼ÔÑÒÔÒÔÒÔÑÒ¼ÔÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒÒºÒÒÒºÒÒÒºÒÒÒÒÒÒºÒºÒºÒÒÐÒÒºÒºÒºÒÒкÉкҺÒÒÊкÐÒÊкÒÐÊкºÐººêKXXXXXXXX%X%XXXX%X%X%X%XX%X%XXXXXXXXXXXXX&XXXXX&XX&XWX&X&X&X&WXW&WX&XWWWWWWYY5;??F?TøøøøøøøøøøøøøøT&#'#'#######"##"'"##"#"#[#=I'"[#[#"##"#[#'###'#'###W#'##&W#&##WW#WWWWWWWWWY6Y65::?::HKHKVùúùìùúìúúúùìVKRHH>>>>55//+XXXXX%XXX%XXX%X%XX%XX%X%X%XXXXXXXX*ÆÐÐкккºÐкÐÒÐÒºÒººÐÒººÐÒÊÒÒкҺºÒÒºÒºÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒºÒºÒÒÒºÒºÒÒÒÒÒÒÒÒÒºÒÒºÒÒÒÒÒÒÒÔÒÒÒÒÔ¼ÒÒÒÒÒÒÒÒÒÔÒÒÒ¼ÒÒÔ¼ÒÒÑÔ¼ÒÑÒÔ¼ÒÔ¼ÔÒѼÔÑÒÔ¼ÑÔÒÑÔÒ½ã))))(((((((((((((O((((((((((((GU—‚~’r’’’~’’’‡‡~’’r~rrrwþ±lr~~~~~~~Œ~r~~’~’~~~~~~Œ~rrŒrŒllŒlŒrŒrŒrŒ~~~~r~~~~~~~ŒŒrŒrŒlŒŒlŒr~~~’~’~’~~’~~~~~’~’’’’’‡‡r‡r’‡’~rrrr‡r‡r‡qrr~r~~~rrr~’~}~’~’~’~~ŒrŒllrlllllllllllrŠ’Š’ŠŠ~Š~€|¥ãϽÑÑÑÑÑÑÑÓÑÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑééÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÖãî|‚rlllllllllll’Š~™Š~~~~Š~~ŠŠ~Œ~ŒŒŒrŒr‡rrrlrrr~~’~r~’qrr‡r‡q~~~~‡r‡r‡‡‡‡’~‡’’‡~‡’rrrr~~r’r~‡r~rr~~~’’’}’~’’’’’~~~qr’’r‡‡‡‡’’‡’’’llrllrrr~~~r~r~rrŒrŒlllllrŒr~~~l±þ¨™~™’~™’~’~~™~Š~~’~’}‚¬UG0*(((((((((((((((O((((((((((()())0PæÏÒÑÑÒÑÔ¼ÑÔÑÒÑÒ¼ÑÔ¼ÑÔÒÑÒÑÒÒÒÒÔ¼Ò¼ÒÒÒÒÒÒÒÔ¼ÒÒÔÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒºÒÒºÒÒÒÒÒÒÒÒÒÒÒºÒÒкººÒºÒÐÒºÒººÒººÒºÐºÒººÒºÒкккÐҺкккºÐºÐÐÊÐоü*%XXXXXXXX%X%%XXXX%X%X%X%XX%X%XXXXXXXXXXXXXXX&XXWXX&XXWXWXWXX+/5;:::HHVøVùùù¹øùùùùùøùøùøøøøøøøøøøø6#W###'#'#'#'#'#"#[#[#[#"",Ið,"#""#"'"'######'##'#'#'##W#W##W#&W#WW'WW&.??÷ùùùùùùùùùùùùùùùùVùúùúúùúúúúúúúúúSìúìììûìûûìûûû>5%XX%XX%X%X%X%XX%XX%XXX%XXXXXXXLµºººÐºÐºÐºÐʺкººÐºÐÐÒºÐÒкҺкҺÐÒкÐÒÐÒººÒÒºÒºÒÒºÒºÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒ¼ÒÑÒÒÔ¼ÑÔÒ¼ÒÑÒÒÑÒÔÒÑÒÔ¼ÑÒÒÑÔ¼ÑÒÒÒÉ((((((((((((((*þC((((((((((GU«Ÿ}~~~’~’~Š~~~~Š~’~™’’Š~‚__r~ŒŒŒŒ~~~~Œ~r~~~rrlŒŒŒlrrŒrrrrrrrrrr~~’~’~~~~~~r~~rŒŒrr~~ŒrŒlrrrrr’~~’~’™ŠŠŠ}}™™™’™™’™’~~r~’’~’’’Œrr~r~r~~~’’r}~~™ŠŠ~~Œ~~~ŒŠŠŠŠ™ŠŒŒll‚l‚rlllllrrrrrllllrrrr~~~l„ê¥ÂÖÑÑÑÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѳéÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÓãé°„l‚‚lllllllrlrrrllllrrr~r~’~~r~~r~rrŒr~r~rrŒŒŒrr~~~~’’~’’’™ŠŠ™}’™™™’™’’’~’~rr~’’~’~~rrr~r~r’~’’‡Š~~}ŠŠ~~~~Œ~t~ŠŠŠ™™’™~~~~~~rrrrrrr‡rr‡‡rr’‡’’’’~’~rrrrrrrŒr~~~~Œl€±þ‚rr’’~}’’™Š™Š}™™™™}’™’~w—G(((((((((((_0(((((((()(((ÉÒÒÑÔÔÔ¼ÑÒÒÒÒÒÒÑÔ¼ÑÒÒÒÒÒÒÒÒÒÒÒ¼ÑÔÒÒÒÒÔÒÔ¼ÒÔÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒºÒºÒºÒºÒºÒÒºÒÒÒÒÒÐÒºÒºÒÐÒÐÒºÒÐÒºÒÐÒккÒÐÒºÐкÐкккÐкÐÊÐкÐÊçBXXXXXXXXXXXX%X%XXX%X%X%XXXX%XXXXXXXXXXX&XXXXX%Y///:::RHVHµVµùùúùùùùùùVùùùùùùùøùøùøøøøøø÷õõJF;864'##'#'#######"#"'####"#"'""9ñ]""[#"'""#"##[#'"#########'#'##&#W#W'W&1?Tøøøùøùøùùùùùùùùùùùùúùúùúúùúúúùúúúúúúìúúúúûúúûúûûûìûìûûú>5)X%X%X%XXX%X%X%X%XXX%XXXXX%X)üÚÐÐкÐкÐÊÐÒкÐÐкÐÒÊÐкÐÉкÐÒºÐÒÊÐÒºÒкÐÒÒººÒºÒÒºÒÒÒÒÒºÒºÒºÒºÒºÒ¼ÒÒÒ¼ºÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒѼÒÒÒ¼ÒÑÒÒ¼ÔÒÒÓǽÒÒѼÔѼÒÑÒÔÑÒÒÒÌ ))(((_((((((((î{‚ˆ’~i~~~~rll~~’~~’~~’’~’~‚_îwlŒŒllŒ~ŠŒ~~~ŠŠ~™Š~Œrr~rr~r~~ŠŠ~~~™Š™™™™™™™™™’’’™™™~Š’}’Š’™’™’’’™™™™’~}’™}Š’~~r~’}™™™™™’™™™™™™™™™’~’™’™™’~r’’™’~™Š~~~~~~Œ~~Š™™~™™Š’Š’rrrrrrrrrrrrrrr~~’’’™™™™™}Š’}}€„¥é«ØÓÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑèéÑÑÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÔÑÑÑÑÑÑÑÑÑÔÑÙãé¡{’™rrrrrrrrrrrrrrr~~’’™™™™™™}ˆ’}’}™™Š’Š~™Š™™’’’’™™™™™’}’™™™}~~~~~’’Š™™™™™™™~’’™’}’}’’~’™’’~’~’’~’~™™Š~~~~~Œ~Š~™™~™™Š™Š™~rŒr~~~~r~r~~~~’~Š’™™™}™™’™™™’™~™™~~’Š™Š™’’™™€±_™™Š’}}™}~~~~~’Š}™™™™™™ˆ~Ž«ýG*((((((((((þ(((()))) ÕÒÒÑÔÒ¼¼ÒÒÒÑÒѼÔÔØÎÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒ¼ÒÒÒ¼¼ÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÐÒÒºÒкÒÐÒÐÒкҺÐÒкÒÐкÐÊÐÒккÐÒÊкºÐºÐÊÐÊÐÊкккоü(XXX%XX%XX%XX%X%X%XX%XX%XXX%X%XXXXXXX//5:>>>RRúVììììúúìúúúúúùVùúúùùúùùùùùùùùùøôõF?F4;6,,'&WWWW#WW####'####'#'#'##'#"'"#[#[""#"'MD'["#""""'#[#[##"##'#'#'#'#W#W#&#W#1?F÷øøøøùùøùøùùøùø÷THHFFH?8/;54.1Y&+,//;5558>FH>TRVVúúûúúûûûûûûûûSL>)%%XX%%XXX%XXX%XXX%XXXXXûºÐºÊÐÐÊккккÊÐÊккÒÊкҺÒÊÐÒºÒÒÐÒкҺÒÐÐÒÒÐÒºÒÒººÒºÒºÒÒÒÒÒ¼ÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÔÒÒÒÔÒÒѼÒÒÒÒÑÒÑÒÒÒÒÔÑÒѼãîÔÒÑÒÒѼÔÑÒѼÔÒÔÑÒÔÔÔÕN@())(((((((((Nþ((((((((((Oû|{Œ}™~~~~~Š’™™Š~~~™™Š™Š~Š™Š™™€_U‚’~rrŒr~r~’Šˆ™™’™™’™’’~~~~~~~’~’™™™™™™™™}™}Š}}Š~~~~}™’™™’™™’’’~~~’~’~’™}’’~’}’’’’~q~q’’’}’’q~’’’’™’~~~~~~~~’~~~~™~’Š~~~rŒr~~’~~}™™’™’~™’r’~~rrrrrr’~™’’Š™}™}’}~’™Š~~~~~l‚|¥éãÎÓÑÑÑÑÑÔÑÑÑÑÑÔÑÑÔÑÑÔÑÑÑÑÑÔÑÑÔÑÔÑè¶ÑÑÔÑÑÑÔÑÑÑÑÑÑÑÔÑÑÔÑÑÑÔÑÑÑÔÑÑÑÑÑÙ㯶„Ž€}’’}’™’’~~rrrrrrr’~™’™™™™~}’~~’™Š~~~~~™’}™’™’™™’~~’~’}’’~’}}’}’’™}’~}’~’’’}™’’~l~~~™~Š~~~~~Š’~’~Š™™™~~~~~~~~Œ~~~™~™™™’’™’™™’~~~~~~~~~’~’~™™Š™}}Š’~~}™Š~~’~~™’™’™’}’}’~’w_ï’’’™™’}’™™™’}}’~}’}’™’™~Š’w—üG0(((((((((UP((((()))0:ÌÒÔÒÒÒÑÒÒÒÑÑÒѼÔÒÒÒÒÔîã¼ÔÑÒÒÒÒÑÒÒÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒºÒºÒºÒºÐÒºÒºÒººÒºÒºÐÒººÒкÒÐÒÐҺккккÐкккккÐÊкÐкµBXXX%XX%%X%X%XXX%X%X%X%)555>>BKSSúûûìûìûììúúúúúúúúúúúúúùúùúVµVùùHF?H;/;4&YY&WWWWWWWWWW#W#W#W#W##W'#W#'#'#####"##"#"#"#"#"#["#[M9"#"[#[##""####'#'####'###'##'#&?F÷øøøøùøøùøøùøùF61&"WWWWWWWWWWWWWWXWWWXWWXWWWWXWXXWXXWW/5KûûúûûûûûûûûûûL>Z%XX%%XX%%XX%XX%XXXXX0ÚººÐкºÐºÐʺºÐÊÒкÒкÐкÐÒкÐҺҺкºÒºÒÒºÒºÒÒºÒºÒÐÒºÒ¼ÒÒ¼ÒÒºÒºÒÒºÒº¼ÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔÒÔÒÒÔ¼Ô¼ÒÔÒÔÒÔÔÒÔÒÔÒÒÒÒÒÔ¼ÔÔÙÇÒÔÒÔ¼ÒÒÒÒÔÒÑÒÑÒÔԼѼÑÔ¼ËÙâ¯C0*))((þC((((((GO¥„ƒŒ~irrrllrrq‡‡’’’’’’‡‡Œrr~~’™™™Š_þŽ’r’r~rlrr~~r’q~Šrlrr~~’’’’‡‡r‡‡r’~~~~~~}~™’™™~~~~~~rr~r~’’r~l~~~~~~~~~rrr~~~~~~~~~r~r~rlrlrrrrrq’qq‡‡‡rrr~’’™™™™™’’’’‡~~rrŒrr~~~rq~Šr~r~~’’’’’’‡‡’~’’~~~~~~~}’™™}~’’~}~r~~’tw{¶¡ãÈÖÓÑÑÔÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑѶéÑÑÑÑÑÑÑÑÔÑÑÑÔÑÑÑÑÑÔÑÔÑÔÑÔÑÏÈ«¯é|w‚‡~qqq}~lrr~~’’’’’‡‡‡’r’’~~~~~~}}™™™}’~Š’Š’~~’’}’’~~’}}Š}’~’Š’’~rr~rlrrrrrrr~rrrlll~’~’’}™™™’™’™™~’~’™™™™™™™’’~’~qrr~r~~~q~}~lrr~~’’’’’’‡’r‡’}~~Š~~~’}™™™Š’~~Š’~~~~~~qr~~’~~~w_±l~~~rrrrrr~r~‡~’’~’q~r~‡~’’}’ˆ€Ž«³C0((((((((C_((()())))Z@NâÙÎÒÑÒÒÑÔÒÑÔÒÑÔÒÔÒÔÒÒÔÒÑÔ¼ÂÂÒÒÔ¼ÑÔÒÔÒÔÒÔÔÔÒÔÒÔÒÒÒÒÔÒÔÒÔÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒºÒÒÒÒÒºÒºÒºÒÒÒÒÒº¼ÒÒºÒÒºÒÐÒÐÒкÒÐÒººÒкºÒÐʺººÐÉÐÉÐÊÒкÐÊÒккºÐÊккÐʺоüXXXXXX%XX%XX%%XXBBLûûüûûûûûûûûûìûìûûúûúúûúûúúúúúúúúTHH>85;1/Y&WWWWWWWWWWWWWWWWWWWWWWWWWWW'W#&##&##'#'###'#'#'#'"'#'"'"'"[#""[#=ð2"""##"#[#"'"'"#"###'###'#'#'##&÷øøøøøøøøøøTF66.&WWWWWWWWWWWWWWXWWXWWX&XWXWXXXXX&XWXXWXXXXXX+1HSìûûûûûûûûûûL%%XXX%XXX%XX%X%XX%XXXLêºÐкÐкÐкÐÐÐÊкÐккҺкºÐҺкÐÒºÒккÐÒÐÒºÒºÒÐÒºÒÒºÒºÒÒºÒÒº¼ÒÒÒÒÒÒÒºÒÒº¼ÒÒÒÒÒÒÒÒÒ¼ÒºÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÔ¼ÒÔ¼ÒÒ¼ÒÒÔ¼Ò¼Ò¼ÒÒ¼ÑÒҼѼÒÒÒÒ¼ÑÒÑÒÑÒÒ¼ÑÔÒÒѼÑÔÒÑÔ¼ÑÒÔ¼ÑËÏÈ—æ)())()((_(((**CCOý¡„Ž‚rillr~~~Œrrr~~r~~~~’~r~~~~™~’’™™™~ï_Ÿ’’™™~~rr~~~~lllrŒllrllllrrr~llllrŒlllrlrŒ~~’’™™’™’™™™™™™’}Š™™™~~™}™’~~r~~ŒrŒŒŒllrllŒ~ŒŒŒlllrrqr’~’’’q’’’’’~rr’’’’’’’~’’’’r~r~~~~’}~™~~~’’~‡~’’’’~~‡’’’’~~q~}~~~r’’’’’™’™’™’’}~™}Šlw|¯——ÝÈÏÎÓÑÔÑÑÑÑÑÑÑÔÑÑÑÔÑÑÑÑèéÑÑÑÑÑÔÑÑÑÑÔÑÑÔÑÑÔÑÑÓÏÙÝ欫¬wŒrqq~~q~’~}~~~’q~‡~’’™’~~r’’~’~~~’’~~~r’~’’’™™’}}}}~™}™}™~~’Šˆ™™}™’’Š’ŠŒllllrŒl~~~~Œrrr~’’}~’™’’™™’™™~r~‡’’™’’’’~‡’’’r~r~~~qq™’Š~~~’’~’q~™’’~’’’’~’~~~’Š~~~~’’’}’™’’’’~q~~’’’~q~r~Žï¥l~~~’™Š~~’’’~q~~~r~~r~~~~~~~~’q}~ljŸ{¬ûO(((((((_((()((((()ãÝÇÔÒÒÒÒÒÒÒÒÒ¼ÑÒÒÒÔ¼Ò¼ÑÒÑÒÒÔ¼ÑÒÒÒÔÒÒÔÒÒÔ¼ÒÒÒ¼Ò¼Ô¼Ò¼ÒÒÒ¼Ò¼¼Ò¼ÒÒÒÒÒÒÒ¼ÒÒÒÒºÒ¼ÒÒÒÒÒºÒÒÒÒÒÒ¼ÒÒºÒÒÒÒ¼ÒÒÐÒºÒÐÒÒºÒÒºÒÒºÒºÒºÒÐÒºÐÒкÒÐкÒÐÒÐкккÐкккÐÊкÐÊÒºÐÊкккêB%X%XX%%XXXX%XXX%%Hüûûûûûûûûûûûûûûûúûìûú÷KH:;556/+&WWWXWWWWXWWWXWWXWWWWWWW&WWWW&WW&WW&W#&#WW#W#&##&####'##########""#"#""#""'"#"'MD'#["[#["#[#"#"#"'#[####'####W#6øøøøøøøøø÷6&WWWWWWWWWWWWW&WW&XWW&XW&W&XWWX&XW&W&WXXX&XXX&X&XXX%XX&>ûûûûûûûûûû5XX%X%X%X%X%X%XX%XXXYüÚкккÐÐÊÐкºÐºÐʺÐÊÐÐÐÊÐÒÊкÐÒººÐкҺÒккÐÐÒºÒÐÒºÐÒÐÒºÐÒÐÒÒÒÒºÒÐÒºÒÒ¼ÒÒÒÒ¼ºÒÒ¼ÒÒÒÒÒ¼ÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÔÒÒÒÒÒÑÒÒÒÔÒÔÑÒÔÒÒÒÔÒÑÔÒÒѼÔÑÒ¼ÔÒÒÑÔÒÒÑÒÒ¼ÒÒ¼ÔÔ(Z*(())_((*Z00@CN¡«„wŒ™ˆ}}}™}’’’Š’’}™™™™~~~~Š’}Š™™~’™™™™Š}~’~¶_«’™™™™’™™™™™™™’’~’’~’~’’r’}™™™~~~Œ~~~~~Š~Š}’’’~’’’~~~’’™™}™}’’™™’’’~’~~’~’~}}~~}’~’~~’’’’™’’š’~~}~™™}™’’™’Œ~~~~~~}’Š’Š’Š™Š™™™}Š’}~’}™’™™™’}™}’™™~}™~~~~~~Š’~’~™’’~’~’’~~q~’}™}’}’™’~’}’™Š‚Ž„|¡¡«ããÝÙÙÎνÓÑÔÑÔÑÔѳ¥ÑÔÑÔÔÑÑÔ½ÖÙÙÈÂãææ²——„Žjš~}}~™’}}~}™~}}™’™’’™}’™™™’~}™’~~~~~~~}~Š™’’’’’’’~~~’’’™™™’’’™’’’’’}’™’’Š’’™}’~’’’’’}’}’’’™’™}’’~’~r~~r~~~’~~~~~~’’~}~’Š}Š}ŠŠ}’}}’Š’}™™’™’’}’}™’}’Š~~~~~~~~’Š~}’’q’~’’~~~’~’™}’’’’}’’}’~~„þ递}™}™’}}~™’}™™~}}™™}’~Š~~Š}}Š}~~™™™™™~‚„«—êNC@0*Z(UN)(***) ÉѼҼÔÑÒ¼ÔÑÒÑÒÒÑÒÑÒÒѼÒÒÑÒÒÒÔѼÒÒÔÒÒÒÒÒÒ¼ÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÐÒÒºÒÒºÒÒÒÐÒºÒºÒÒºÒºÒÒÐÒºÐÒºÐÒÐÒºÒºÒкҺºÒкÒÐккÒÐҺкккккÐÐÊкÐккккоüXX%XX%XXX%X%X%XX)úûüûûûûûûûûûûûúûûKH>>5/+++XWXWXWXWXWX&XWX&XWW&WW&XWWW&WWWW&WWWWWW#WWWWW##&#W#&###&#'##'#'#'#"'"'#'"'"'"'""[""".ñ9["""#""#"##"'"'######'##'#'#'Tø÷ø÷øøøø÷6WWWWWWWWWWW&WW&WWWWWW&WWWWXWXWWX&WX&XXXX&X&XXX&XXXXXXXXXXXKìûûûûûûûû>X%X%XX%XX%X%XXX%XX%LûäßÛäääßßßÛÛäßÛÁäßáÛÛááäå¿ÛßßÃáåáäÃáßÃßÁáÃÃáÃäÃååßáàåÃÃÁàÃáÃÃááÃáÃÃáçççççççççåàûåàáàÀ»à»Ãà»»»»àà»â»ÂâààâÂçãÂâÂÈâÈÂàÂÂÈÂàÂâÈÂÈÈãÂàÂÝàÈààÈà—ãÈâÝãâãÈãÝããÂãÈÝàÝÝÝÝÝÂÈÝàÝÝÂÂÎÅ×ØÈÂÝÝãæçê°çç°U_üíí¯¯¬—|„«wŸŽ•lœˆˆ}ˆ™™™}™™™Š}}~}™ˆ™™™™™™™™’Š’}’~’’’’™™}’’}’™’Œ¶_«’’’~’~~~’~}’™~’~’~’™™™~~™~Š~~~™ŠŠŠŠŠŠŠŠŠ~Š™’}Š~Š~~~~~~~Š~~~~~}’q}~~}~’’~~~}’™Š~~~~Š~™}™}}’’™’l~~r~~~’’~~rlllllll‚llrli~’’~~~r~’}~’~’~’’’™~~r~~}~’~’}~ŒŒ~~~~~~~’’~~~~rŒlrllll~r~~~’}’™™}™™™}’}™}ˆœl‚ƒŽ„z¬——«¬¬²„ã±ï——¬«â—|—{|„ƒ„wl‚ir‚lllri~~’~~~~~~’~’~‡~}’™™~~~~~~~~’~~~~Œ~~~~~~’~’~~~~Œ~Œrrl‚l~r~i~~’’}}™™™™™}}’}}™™ˆ~™~}Š™}™™™™™™™™’’~q’~~rr~rr~rr~~~q~~~~r~~~r~~~r~~~’~~’~’}™’}~~~~’~~~™’ŠŒ~Œ~~~~~’~}’~~~~l~rlllllrri~~’’}™™™™™{_¡€’}™™~™~™~}’™™™™™™™™™~’}~’’™’’’™}’}}’}’Š}}}}q}€twƒ{„{««¬¯ìûüü¥Uçìê—ç«âÝݾ×ÅÂÀÀàà»àÝàÝ»áÝ»àÀàÀ»ààààáàÃàÝÝÂæçàÀÃÀÂáÀÀ»Þ»»Âà¿»ÂàûÂÀ»ÃÂàÂÀâã»»»Âá»»ÀÀ»á»Ãáá»áÃáỿá¿áÃáááåççâ²â²â²çåÛáÃßÁ¿ÛßÁÁßÁÛááÁßÁÁäáßÛßááÁÛÛßÛáÃäÁÛßÛßÁßßßÃßßßßßßßßßßßßßßßßßßßßßßßÁüKXXXXX%X%X%X%X%X%>SVûûûûûûûûûúûûúûìúûìúúúûúVVKKR>:>///+Y%WWW&XWXWWWW&WWWWWWWWWW&WW&WW'W#&WW#&##&#'####'#####"#####"#"#"""""#"""[=M"""[#"[#[#[#"#"#"[#'#'####'#1Tø÷øøøøøøT&WWW#&#W&WW&WWW&WWWW&WWWXW&XW&W&X&XXWXW&WXXWXX&XXXXX&XXXXXXX:ûûûûûûûûûS%%XX%XX%XX%X%XX%X%%)üÚºººÐºÐºÐººÐºÐºÐºÐººÐººÐÒкºÐºÐºÐÒºÐÒºÒкҺ¼ÐÒÐÒÒ¼Ò¼Òº¼ÒÒÒºÒÒÐÒÒ¼ÒÒÒ¼ÃýÕÒÒÒÒÒºÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒËï»ÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÔ¼Ô¼ÒãîÒÒÔ¼¼Ò¼ÒÒÔ¼¼ÒÒÒÔ¼ÒÔ¼ÒÒ¼ÑÔÔÔÔã±ÒÒÓÒÒÒÑÔÔ¼ÑÑÒÒÓÎ_„~~~Š~Š}}~}’~}™Šˆ}™™™}}}}}~Š}’Š™’}~~}~~~lr~~ŠŠŠ™ˆ™Š}™™}’™}™™™€¥_{’}™}™™’™™™™’}’}Š’™™™}~~’’’’~’’’~’~™’~~’’’’’~~’’~’’™™™™Š™™™™™™™™Š™™™™™™™™ˆ™™’Š™Š™™}’’}~~~~rŒ~~Šl‚llr™}Š’~}Š’~~’~~’’’~~’’}™Š’’’’™~}’Š’~’}Š’~}’™’™~’~’~’~’~rrr~~’’~~’~~~~rrrrrlr~~~’~’~~™}}™}™™}}’}™~Š}q}}’}}ŠŠq~~Œl³¥lllr}}}’~}}}’~~’Š~’q~r~™’™}’’’}’™}’’}~’™}~’™~’’™’’’~’Š’~~rrr~r~q~~q’~~rrrr~l‡~r~~~’~q~}}}}™}}’™}™’}~’Š}™’’’Š~Š’~~~~~Œ~q~q’’}™q~~r~~’’}™™’’~’’™’’™’’’}’™~™}~’}~™~Š’~’’Š’~’’~~q~~rrr~q~qr~’~~~rrrrrŒr~~~~~’~~’™}™}}’w_±}}Š’Š}}’~}~Š’~~~~~~~ŠŠ™™Š™}}Š™™™™™™™™™™™’}™™™}™’}™}™}}™}™’™}w_ÏÒÒÒÒÒÑÒÑÔÔ¼ÑÒÒÒé°ÒÒÔ¼ÒÔ¼Ô¼ÒÒÒÒÒÒÒÒ¼ÒÒ¼Ô¼ÒÒÒÒÔýã¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÂïÍÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒ¼Ò¼ÒÌýýýýý»ÒÒÒÒ¼ÒÒ¼ÒÒºÒÒÒÒºÒ¼ÒÒ¼ÒºÒº¼ÒºÒºººÐÒººÐºººÐºÐºÐººÐºÐºÐººÐºÐºÐºÐºÐºÐкÐÛû)XX%%XXX%XXX%XXX%XX%X%+&5155>>KKKSúûûúúûúûúúúúúúúøúúúìµúùµVRK>?::?56/YYWW&WWW&WWWWWWW#WW#W##W#W###W#'#'#'#'#'#'"[#[#[#[#[#[#["[""'Mñ'""""""#"#"#[#[#[####"##'#''Fø÷ø÷ø÷ø÷T4W#W#&WWWWWWWWWWWWWW&WWWWW&WWWWXWXWWW&X&XX&WXX&XX&X&XXXX&XXXXX)ûûûûûûûûûû5X%XX%XX%XX%X%XX%XXKêÐÐкÐккÐккккÐккºÐºÐºÒкҺкºÐººÒººÒºÒºÒкҺҺÒкҺÒÐÒÒºÒºÒºÒÉýýýýýýç¼ÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÀËÒÒÒÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÑÔ¥çÒÒÒÑÒÑÔÒ¼ÑÒÑÔÑÔ¼ÑÒÒÑÒÑÒÒ¼¼¼ÑïãÔÒÒÑÔÑÔ¼ÑÑÒÒÑÒÒÈ_€’}’’}’’}}}}}}}’~‡q’q~’~~’}’~™q~~’~~~~~~~™~’’~’’}’q’}’}~™’~’wï_~~~~~~’~~~™™™™™™™}™™™™ˆˆˆˆšˆ™ˆ™ˆˆˆ™™™~}~’~~’q’~’}~’’~’™’™~’’~™}~’~’’Š‡~q}’’’~’’™q’~~~~~~’~~~~~r‡’’~™}~q~’’™™}’’’’’~’’}~~~~’Š~}~~’~’’~~~r~~~ŠŠ™™™™Š’}™™™’~~~}’’~~’~qq’’}’~~’’’™’™’Š}’’’~’~r’~}~’~~’’’~~’~q~q~~~~r~q¥éqr’~}’~}’~™}}’}}’’Š’’~}~~}~Š~~~’~~q~~’~r~~~Š}Š™}Š}Š™}™™™~~~}}’~~qq~’’’’~’~~’~}’’’}~™Š’’’~~’~~’}r’~~}}~~’Š~~q~~~~~~~~~~’’~’’’~’’~’’~™~’~’Š’}~~~ŠŠ}ŠŠ~ŒlŒr~~~~~~’~~~l~llŒll‚rlrr~~}’’’}~’q~’™}’}~™’}~’™}™’}}™}~’~’Š™~w°ïw~}}’’’Š’}}~Š}~~~~~’}’Š}}’~}~’}Š}™™}}’}Š}Š~~}~Š}~~}ˆˆ™ˆˆˆˆˆˆ€ïàÑÒÑÒÒÒÒÒ¼ÑÒÒÒÑÒãïÓÒ¼ÑÒÒÑÒÑÒÑÒÒÒÒÒÒÑÒÒÒÒÑÒÒÒÒÒãïÔÒÒÒÒÔÒÒÒÒÒÒÒÒÒÒÒÔÒÒÒÔÒÒÒÒÒÒÒÍ¥»ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒº¼àýýýýýýÄÒÐÒººÒºÐÒкºÒº¼ºÐººÒºÐºÒккÒÐÒºÐÐÒºÐÐкккккºÐºÐºÐºÐºÐºÐºÐккÐÊìB%XXX%X%X%%XX%X%X%X%XXX%XXXXXXXXXW%&++155;?FHKR÷úúúúµVVµVùùùùùúùùùùùùùùøHHF>??;;Y6.&&WW'W#&#W#'W#'###'###############"##"#""#"#"""9ñ9""["[#["[#["#####'#"'#'###'T÷ø÷øø÷øø÷&##W#W#W#&#W&WWW&WWWWWWWW&WWWX&WW&WX&XWWXWWXX&XWXWXXXX&XXXXXXXXXKûúûûûûûûû>%XX%X%X%X%XX%X%X%)üÛºººÐººÐºÐÊкºÐºÐкÐÊкÐккккÐккÒÐÐÐÒкÐÐкÒÐÐҺкÒÒмºÒºÒ¼ºÒÐÒÒÍÇÇÇÇÇ¿ÇÇÇÄÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒºÒÒÒÒÒÒÒÒÒÇ¿ÒÒÒÒÒÔÒÒÒÒÔÒÔÒÔÔÒÔÒÔÒÒÔÒÒÒÒÔÒÔ¿ÎÒÒÒÒÔÒÒÑÒÒÔÒÒ¼ÒÒÒÔÒÒÒÒÑÒÑÑÒομÑÔÒѼÑÔѼÔÑÒÑÒèî™™’Š}Š}~~~~~~~~~~~~~~~~~~l~l~’~’qq’’}~q~r~’~’’~}~Š’Š~™Š’}Š}„þ±€™Š™ˆŠ™ŠŠˆ™™ˆˆˆˆ™œ™ˆˆˆˆšˆˆˆ™ˆˆˆˆ™™ˆ™ˆˆ™™™™’’™™’™’’’’q~’™Š’Š’Š~Š~~’~~~~~~~~Š~~~~~il~~’’q’’’~q~~~r~lrllr~ri~ilrlll™™Š}}™Š~Š~Š~~~~Š}Š}ŠŠŠŠ~}ˆŠ}Š}}}}}}™™}’}’™’™™}’~q’q‡~’‡~‡~’™Š’Š’Š’~’~~~’~~~~~~~~~’~Š~~r~’q’qqq’’’~r~—¥llli~r~i~~llll~™}~}}™™~Š~~~~~Š}ŠŠ}ŠŠŠ~Š™Š™}Š™}}™™™™’}}’}™’™}’~q’’qq~q‡’’}’™}}’Š}~Š~’~~~~’~~~~~~Š~~~~~r~~qq’q}’}q’~~r~’}~’~Šq~~}’}’}~’}~’’}~}™’’™Š’}~Š~~ŠŠ~~~Š}Š}’Š’~’’’~’q~~}~’}’}’~~’}’q’’’’’’™™™™™~’~Š~~~~’~~~~~’~l¶_„lrl~~q’~q’}}’’~~~~’~’~™’Š’}’~™Š}™~}Š}™~}ˆˆŠ™ŠˆŠˆˆˆˆˆˆˆˆœˆˆš¶æÒÒÒÑÒÑÒÑÒÒÒÑÒÒ¼ËÂËÔÑÒѼÔÒÒ¼Ô¼ÔÑÒÒÒÒÑÒÒÒÒÔÒÒÔ¼ËÀËÔÒÔÒ¼ÒÒÒÔÒÔÒ¼ÔÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÇÇÒÒÒÒÒÒÒÒºÒÒÒ¼ÒÒÒÒÒÒÒºÒÒºÒÒÒÒÒÄ¿¿Ã¿¿¿¿Ã¿ÍºÒÐÒÒÐÒÒºÒÒÒÐÒÐÒºÒÒºÒÒкҺÒÐкÐÒÊккÒÊкÒÊккÐкккккккккк¾üX%X%XXXXX%X%XXX%X%X%XXXXXXXXXXXXXXXXXWXXWXWX&'&,/1;5??HHõøùùùùùùùùùùùùùùùøùùùøøøøøøTFF????111'&'#'##'#'#'#[#'#[#[#[#[#[""["["[""=I'""""""""#""##[#["#"#"#"###;ø÷÷ø÷÷÷ø®&##&#W'W#WWWWWW&WWW&W&WW&WWWWWWWXWXWWWW&X&X&X&XWX&XX&X&XX&XX&XXX+ìûûúûûûûûû%XX%XXX%X%XX%X%X%XLùºÐÐкÐÐккÐÊÐÐÐккккÊкÒÊкºÒÊÐÉкÒʺºÒºÒɺҺºÒºÐÐÒкÒÐÒÐÒкÒÒÒºÒºÒºÒÒÒ¼ÒÒÒÒÒÐÒÒºÒÒÒÒÒºÒÒºÒÒºÒÒÒÒÒºÒÒ¼ÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒ¼ÒÒ¼Ò¼ÒÒ¼Ò¼Ò¼¼ÒÒÒ¼ÒÔÒÒÒÔÒÔ¼ÔÒÔÔѼÔÒÔÑÒÔѼÔÑÒÔÔÒÒÒÒÒÒÒѼÒÒÒѼÒÒÑÒÑÒË_¬ˆ™ˆˆˆ™™ˆˆ}™™™}}}’~}~’’~~~qŠ~q’}’Š}’}}’~’’~}Š}}’}~’~™’™}™ŠŠ—_²Š’’™~Š’ŠŠŠŠ~ŠŠ~Š~Š’ŠŠ™Š~~ŠŠ™Š™~~Š™Œ~Œ~Œ~ŒŒ~ŒŒllllŒŒ~~ŒŒtŒŒŒ~ŒŒŒ~Š~ŠŠ’}}}qq’qq~~~r~~~’’~qŠ’’’Š’q’™™™}™™ˆ™™Š}Š’Š~Š™™ˆ™™™}}’Œr~~Œ~iŒ~rŒ~rlriŒ~rlrl~ŒrŒll~Šˆ™™™™}™™™™™}Š~}™™™™™™™™™™ˆ™™™ˆ}}™}’}}’q~’’~~~r~~~~~}~~}’~™}’}}³³™’™™™ˆ™™Š}~’~Š™ˆ™™™™}}~r~~l~ŒrŒirŒrlri~r~ll~rll~rllŠ™™ˆ™™ˆ™™™™™™™~Š™™™™™™™™™™ˆˆ™™™ˆ}’™}}}}}’q’’’’~~~~~Š~~’~’}’}™}}}’}™™™™™™™™™’Š}Š~Š}™™™™’™™™~}~q~’’~q’q~’~’’’’’}™}™™}™’}’™ˆˆˆˆˆœ™Š}™Š™ŠˆŠ™}ˆ™œ™Š~~l~Œ~~~~~~~Š~Š~}Š}ŠŠ—_«ŒŠŠŠ}~~~Š~Š~~Š~~ŠŠ’}}}Š~Š™Š}™}™™ˆˆˆˆ™™™™~™™ŠŠ™ŠŠŠŠŠŠ~Š™™Š™{_ËÑÒÒÑÒÒÒÒÒÑÒÒÔÑÒÒÒ¼ÔÒÔÑÒÒÔÑÒѼÔÒÔÒÔÒÔÒÔÒÒ¼ÒÒÒÒÒÒÒ¼ÒÒÒÒ¼ÔÒ¼ÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÐÒÒºÒÒÒÒÒÒÒºÒÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒÒºÒººÒÐккҺÐÐÐÐкÐÒºÐÐÒÊÐккÐкÐккÐкÐÊÐÊÐÊÐÊÐÊккккккÐʵBX%X%XX%X%%X%XX%%XXXXXXXXXXXXXXXXXXWXXWXXWXWXWXWXWXWXWWWWWWWW&.156;?F>FF÷ùøøùøøùøùøøøøùøøø÷®øø®øøTTFT;;;,#####""#####"#""#"#""""""'Mð,["["[#[#["[#["#"##[#'#'#'#'®T÷ø÷÷øø÷JW#&#W#W#&W#W&#WWWWWWWWWWWWW&W&WWW&WWX&XXWWXWXWX&XXWXXWXX&XXXXXXXVúûûûûûûûûHXX%X%%XX%XX%XXX%X)üÚкккÐÊкккºÐÊккÐÊккÐкÐÐкҺккÒкÐкÐÐÐÒÐÐÒÒººÒÐÒººÒºÒкÒÐÒºÒÒººÐÒººÒºÒÒÒÒÒÒºÒÒÒÒºÒÒÒºÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒÒÒÒ¼ÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÔ¼ÒÒÔ¼Ò¼ÒÒ¼Ò¼ÒÔ¼ÑÒÔ¼ÒÒÒÒÔ¼Ò¼ÑÒÒÑÒÒÑÒÒÑÔÒÒÑÑÔÒÔ¼ÑÙ_‚™ˆˆˆœˆŠŠŠ~~ŒlŒŒŒllllllll‚l‚l‚‚~~™™™™’Š’~}™™’}’Š}™}™}™’}}¥_{}}}’~~~~~’~~™}™}’~Š~~~~’~~~~™™™™™™}’~}~~™~}~}~~~~~~~~~~~}~™ŠŠŠŠŠŠ~~~Œl~~~Œ~Œ~~~~l~Œ~~Œ~Š~ŠŠŠ}Š~~~~™™’™}’™™™™™}’™}}}™}}’}~~~~~~~~~}Š}~}~~’~~~~~~~~™™™’’}™’}}}’™’™™™}~’™’’~q’}~}™ˆˆˆˆŠ™ŠŠ~~ŒlŒŒlŒlllrllll‚ll‚l~™™™™}}~’~³¶™™™’}}™}™™™}™}}™™}}}’~~~~~~~~~}Š~}Š~~~~~~’~~~Š™™Š’’™™™’™™’™}™™™}~™’}’~’}~}™Šˆœ™ˆŠ™ŠŠŠ~ŒŒlŒŒŒllllilll‚ll‚l‚™}™™™}Š’~~}™™}™}™™™™ˆ™}}™}}™}}}}}~}’~~’~Š}™™™}™Š}Š~™Š~~~~ˆ™™™ˆ™™ˆ™™™Š~~ŒŠŒlŒŠ~Š™ŠˆˆŠ™™™ŠŠŠŠŠŠ~Š~Š~ŠŠ}~Š~ŠŠ™Š™¬ï¶€’™ˆ™}™™ˆˆ™ˆ™ˆˆ™}}™}’}™™™ˆ™™}™}™™™}}}}~Š~Š~’~Š™™™Š™ŠŠ~Š~™‚UÙÔÒÒÒÒÑÒÑÒÔÒÔ¼ÒÒÒÑÒÒÒÒÔÒÔ¼ÒÔÒÔ¼ÒÒ¼ÒÒÒÒÒÒÒÔÒÔÒÔÒÔÒÒÔÒÔÒÒÒÒÔÒÒÔÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒ¼ÒÒ¼ÒÒÒÒÒ¼ÒÒÐÒÒºÒÒÒÒÒÒÒºÒÒÒÒºÒÒÒÒºÒºÒºÒºÒººººÒÐÒÐÐÒºÒºÒÐÐҺҺҺккººÐÒÊÐÐÐÊкÐÊҺкºÐÊҺккºÐººÐʺÐÊÐкÐÐкоû)X%XX%X%XXXX%XXXX%XXXXXXXXXXXX&X&XXX&XX&XXX&X&XWXWXWWXWWXWWWWWWWWWWWWWWW&&.&1668FFTTH÷øøøøø÷ø÷ø÷øøø÷÷®÷F#"'"'#'"'"[#[#[#["["["["["=7E"""""""""#"#"#"'""##"#"##"'T÷÷÷÷ø÷÷øT&####W#WW#W&#WWWW&WWWWW&WW&WWWWWXWWX&WWW&XW&X&XWX&X&X&X&XXX&XX&X/ûûúûúûúûûû%XXX%XX%XX%X%X%XX%ûÄ××××××××××ÊÊÄ××××××××××ÄÉÅÄ×××ÄÅ×××××ÄÄ×Ä×××ÄÍÄÍÅ×Å×ÄÅÌ××Ä×Í××Í×Í××ÄÍÉ××ÍÌ×ÍÍÍ×Í×ÄÍ×ÍÍÌ×ÄÍÍÌÍÍÍÍÌÅÍÍÍÎÌÍÍÍÍÍÎÍÍÌÍÌÍÍÌÍÍÍÍÍËÍÍÍÍÍÍÍËÍËÎÍÎËÍËÎËËͽÍÎÎÎÎÎÎÎËÎÍÎÎÎÎÎÎÎÍÖ½ËËÎÎÎÎÎËÎÎ˽ÎÎËͽÎÍÖË—ŠŠŠŠŠŠŠŠ™ŠŠ}Š}}™~~~~~~~Œ~~~ir~r~~~~l~rrrll}~~ŠŠ}ŠŠŠ~~Œ~ŒŽ±ïƒ™}Š}Š™ˆŠ™Š}’’~’}~}~~~Œ~~~~rr~~~~q~~~~~~~Š~Š~~’™Š}Š~~ŠŠ™™~~ŠŒ~Š~Š~ŠŠŠ™™~ŠŠŠ}œŠ~ŠtŠŒŠŒŒlŒll~Œri~rrrll™™™ˆ™ˆˆ™}}~’Š}Š™ˆˆ™™™™ˆ™ˆ™’Š™}’’q~~~lrlllrŒrlllrir~rrilrllŠ~~~ŠŠ}Š}~Š}Š’Š~Š~ŠŠ~tŒŠŠ’ŠŠŠ’}~}~~~~~Œ~lr~iŒr~l~~~~~lrrll³¶™™ˆ™ˆ™™™}~~Š}Š™ˆˆ™™}™™™ˆ™™~™’~’’~~r~Œlllrlllllr~r~irrlrll~~~~ŠŠŠ}ŠŠŠ}ŠŠ~}~ŠŠŠŠŠŒŠŠ}~Š~}}}}}~~~~Œ~Œlr~lr~li~~~~Œr~rrll™™™™ˆˆˆ™}Šq~~™Š™ˆˆ™™™™}™ˆˆ™Š’’~q~~~~rllllrlllllr~r~~’~’Š~~}Š’~’~~’Š’’~’~’}~’’}’’’~~’~’’’q~}™™™™ˆ™™™‚îŠ~~l~~r~~~’’’™~~ŠŠŠŠŠ~~~ŒŒtŒŠ}s™Š}Š}™Š™}Š™~q~}}’Š~~~~ŒŠ¥ãËÓ½½ÔÔÔËԽ˽˽˽ͽ˽ËËÔÔ½ÔËË˽˽ËÔÔËËËËÔËÔËËÕËÕÔÔÌËËËÔÔÕÔÕËÕÕÔÕÕÕÕÕÌÕÕÕÕÕÌÉÌÕÕÉÌÕÉÉÉÉÌÌÉÉÌÉÕÕÄÕÉÉÉÉÉÉÉÉÄÉÉÉÉÄÉÉÉÉÉÉÉÌÉÉÉÌÉÉÄÉÉÉÉÉÉÉÊÉÉÊÉÊÉÄÉÉÊÉÉÉÊÉÊÉÉÄÉÉÊÉÉÄÊÊÉÊÊÉÊÄÄÊÊÊÊÊÊÄÊÊÄÊÊÊÄÊÊÊÊÊÊÊ×üB%X%X%XX%X%XX%X%XXXXXXXXXXXXXXXXXX&XX&XX&WXWXWX&WX&X&WX&WX&WXWWWWWWWWW&WWWWWWWWWWWY.1;FF÷øøø÷ø÷ø÷÷÷ø÷÷÷÷6###"#"#"##"#"#"#"#"#""""""MðI'""""["["["["#[""'#[#[#[#[#.÷÷÷ø÷÷÷ø÷6##'#&#&#'W##WWW'WWWWW&WWWWWWWWWW&WWWWXWXW&XWWX&XWXWXWXXXX&XX&XXXVúúûúûûûúûHXXXXX%X%X%X%XX%X%Yü¹  y§eeeee§e § §x§ x§xx § § xxxxxŽyxyyxxŸyyyyyyyyyyyyyyyyyóóóóóóóQó­ŸyyyŸyyŸŸyyyyyyyyyyyŸyŽyŽzŽ{zzz{{{Ž{{Ž{Ž{zŽzŽ{{w{{yŽyyŸŸyyŽŽyŽyyyyŸyŸyŸŸŸyyŽŸŽyŽ{{Ž{wz{{{{Ž{{{{zz{zzzŽzŽ{Ž{zzƒˆ™ˆ™™ŠŠ™Šœ™™™™™™Š™Š™ŠŠŠŠ}ŠŠŠŠ~Š~~lllll‚‚llŠˆŠ™ˆŠ™ˆ™™ˆ™Š«_³~tŒtŒttttŒŒtttŠtŒŒtŒŒtŒŒŠtŒtŒŒ~Š~~~ŠŠ~ŒlŒ~Œ~Š~tŒŠ~~Š~~Š~Š™™™}ŠŠŠ~ŠŒŠŠŠŠŠ~~Š~~ŠŠ~~Š~Š~Œr~~~rlll‚l‚‚lllliŒ~~~~~~~l~lŒˆ™™ˆˆˆˆ™}}™}™ˆ}™ˆˆ™ˆˆˆˆˆˆ™™ˆŠ~llllllŒŒŒŒlllŒŒt~Œ~Œ~ŒŠ~Š~Š~Š’}™™™™™™Š™Š}™Š™™™Š}Š}Š~Š™ŠŠŠŠ~~~~~lllll‚‚l³¥ill~~Š~i~~~~Œiˆ™™ˆ™ˆ™ˆ™™ˆ™™™ˆˆˆˆˆˆˆˆˆˆˆ™ˆ™~~lllllllllŒlllŒŒŠ~Œ~ŒŠ~~~~~ŠŠ~}™™™™™™Š™ŠŠ™}™™Š™Š}ŠŠ}}ŠŠ™Š~ŠŠ~~~~~llr‚l‚‚llŒl~l~~~~™™ˆˆˆ™ˆ}™™ˆˆˆ™ˆ}™ˆ}™ˆ™ˆˆˆˆˆˆˆˆˆˆ™ˆ™}™’~~~}~~~}’~’}r’}}’}™}™}}}™™Š™Šlll~liq~Š}~}~~’™}~ŠŠ~~~}}š°_{€Š™™ˆˆˆˆˆˆˆˆˆŠŠ™Šˆ™ˆ™™™ˆ™™}ˆtŠŒtŒtŒtŒttttŒtttŒttŠŠttttŠŽ{{{{{{„{„{{{{„{{{{{{{{{{{{{{{{z{z{{z{{{{{{{zz{z{{z{zzz{{{z{{{{z{{{{{{{„{{{{{{z{zzz{zz{{z{zzzyyyyyzyyzyyzyyyyyeôôôôôôôôôzzzzzzzzzzzzyyyyyyyyyyyyxyxxyü)XX%XX%X%X%X%XXXXXXXXXXXXXX&XXX&XX&XXXWXX&X&XWXXWWWX&WWWWWWWW&WW&WW&WY11;???TT÷÷øøøøøøøøø÷øø÷ø÷÷ø÷÷ø÷÷÷T'"'#[#[#[#["["["["["["[""['Dð,[["["""""#"#"""#"""#######'T÷÷÷÷÷ø÷øT##&#&####W#&W#&#WWWW&WWWWW&WW&W&WWWW&WWW&WXW&XWWX&X&X&X&XWXXWXX&/ûúûúûúûúûû%XXXXXXXX%X%XX%X%XVìg££g£££g££££££££š¦££££££š££££££££££££ššssœsssjssssss££š£š£š£š˜gsˆˆsˆŠšššššššˆšˆˆˆˆˆˆˆˆˆˆˆˆˆ}š}ˆšˆˆˆ}ˆˆ}}ˆˆˆˆˆ}ˆ™ˆŠ}}ŠŠ}sˆŠ}ŠŠ™ˆœ™ˆŠˆŠˆ™ŠŠŠŠ~ŠŠ~Š~tŒi~i~Œii~™ˆŠˆœˆŠœœˆˆŠˆŠŠŠ~tŒŒtŒŠŠŠŠ~Š~ŠˆœˆsˆŠˆ™ˆ}Š™}~~}~Š}~~’Š’™}’}’Š}Š}™}}}}}ƒ¥ïŸ}}}Š}~ŠŠ~~~Š~Š~ŠŠŠ™ŠŠŠŠ~ŠŠ~Š~ŒŒŠ~ŒŠ~Œl~Œ~lllŠˆˆœˆˆœˆœˆœšˆœˆœŠŠŠŠŠŠˆŠˆ™}™~~ˆˆŠœ™Šˆ}™ŠŠ}ŠŠ~q~~Š’~’’’}}r’’}~’}~}~Š}~}~’}}~’’}~~Š~ŠŠ~ŠŠ~ˆŠ™}™Š™Š~Š~~~~ŒlrŒlŒrllrlllll~™ŠœŠœŠœŠœŠŠŠŠŠŠŒŒlllŠŒŠ~~~~~~œœˆŠ™Š}™™}Š}}’}’~~}~q~}q’}q³¶’~’~}~~Š}Š’}~~’}q}}~’Š~Š~Š~Š~Š™™Š™™Š™™~~~~~~llŒrlŒrŒlrllll~œŠœŠŠŠŠŠœŠœŠŠŠt~Œlllt~~Š~~~~~~ŠˆœŠˆŠŠ}™}Š™™’Š’~~~}~’}}’’qqq~’}~qŠ}}}’™}’}’}~}~’~~Š~Š~Š~Š}Š™Š}™Š™Š’Š}™}}}™™™}™™}}™}}™™™}™™™™™ˆ™™™}}™’}™ˆ’}™™™™™™™}}Š~}Š}Š}}™sˆŠ}q„¥¥Ž’~’™™}™’}’™}}Š}~}Š}}}Š}}}’}’~}}~~ŠŠŠ~Š~ŠŠŠ™ŠŠŠŠœŠŠŠŠŠŠttttŠŠŠŠŠŠ~ŠŒtŒlŒœššœšˆšššššššššŠˆŠsˆˆœˆˆˆˆˆ™qššˆœˆœˆˆ}ˆŠ}Š}}Š}ˆ}ˆˆsˆsŠ}Š}ˆ}ˆˆˆˆˆˆŠˆˆ}ˆˆˆˆˆˆˆŠˆœˆœœœˆœššššœš”‹ssssjssŠjssts££š””š££££””šššš£““££££££££££š£š££š££££g•¹BX%XX%XXX%X%XXXXXXXXXXXXXXXXXX&XXWXXW&XX&XWX&XW&X&XWWX&XWY+65;:?>H÷Kùøùùùùøøùøøøøøøøøøøø÷øø÷÷ööFJ=9446,,#"#"######"##"#"#"""""""["[9ðM"["[""[""["["[#[#[#[#[#[#[#J÷÷÷÷÷÷÷÷÷F;?;;;;?????;??;?;F;?;??????:?::::::::::::::::::::::::::::>::>>>Vìúûúûúûûû>XXXXXXXX%XXX%X%XX)üx££££g£g””””””££££££££”££”££”””””£”£££”££££££££”šš£££š£££££££££££gððššjjsœœssˆsˆššššš”ˆˆššˆšˆsŠŠsˆsˆˆˆstŠŠsŠsŠsŠœsˆˆsŠˆœœˆsŠttstœsœœœˆšœœœœˆsˆsˆˆœsˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆœˆˆ™ˆˆˆˆŠˆŠsœsŠ™sŠŒlŠŠŠŠŠ}Š}œ™ˆ}œœˆsŠsŠsˆˆˆ™}ˆ}}Š’}’~’Š’~t—ï«s’’Š™™™™}™™™}}šˆœˆœœœœˆœœœœœtŠŠŠŠŠŠŠœŠ~ŠŠŠŠ~Š~ŠtŠŠŠŠŠ™ŠŠ~™ˆŠ}ŠˆŠŠŠŠŠŠŠŠŠŠtŒŒtŠ~Š}ŠŠˆ}™™sˆœsŠsŠŠŠˆˆˆ™™ˆ}~~~ŠŠ’Š}™lŒŒŠ~Œ~ŠŠŠ~Š}ŠŠŠŠŠ}ŠŠŒŒtŒtŠŠŠŠŠˆœœˆŠ™œ™Š™Šˆ™Š™Š™™™ˆˆˆˆˆˆˆˆˆˆˆŠˆ}ŠŠˆ™ˆŠŠŠŠsŠŠˆŠtŒŒŠŠ~Š}ŠŠ}Š™}ŠœœsŠŠŠŠŠ™ˆ™™}™°¶~ŠŠ}’}}}~lŒ~~ŠŠ~Š~ŠŠ}ŠŠ~}ŠŠ}ŠŠŒtŒttŠŠŠœˆˆœœŠ™Š™Šˆ™ˆ}™œ™™™™}ˆˆˆˆˆˆˆˆˆˆ}Šˆ™ŠŠˆˆŠœ™ŠœŠŠˆŠŠŠŒŒŠ~Š~}™ŠˆŠ™}ŠsˆssŠsŠœs™™}}™}Š~Š~Š}}}}™}}}~Š}~’~’~Š}~}~™}™}œ™Š™™Š™Š™Š™Š}Š~ŠŠŠ~Š~}~~Š}Š}™}Š™™™}ˆ™™™™}™™ˆˆ™ˆ™ˆˆˆˆˆˆˆŠˆˆˆˆŠ™™ˆ™œ}ˆˆˆ™ˆˆ•¬ï«ˆ’Š}ˆˆ™™}}Š’Š}}’Š}}}™}~™}Š™ˆ™™ˆ™™™™}™ˆšœœœœˆœˆœœœœŠŠŠŠssŠŠœŠŠŠŠŠœœˆŠŠŠŠœœsŠsˆŠsˆœ™™ˆœˆœœŠsœœŠœsttŠŠŠŠŠˆsˆœˆˆˆˆssœˆˆˆˆššˆssssˆˆˆˆˆstŠssŠssssˆœˆˆšsˆœššœsjsœœñ“š£šš£š££š£££££££££g££££š”££££”££££”m”£££££g£££gg”g”g”gggg¦gxú)X%X%X%XXXXXXXXXXXXXXXXYX&XX&XX&XX&XXW&XWXWXY//;:::H>HøúùùùùùùùùøùùøùøøøøøùøøøøøTTôF?;86,1,&'##&#######"'#[#[#[#[#["[#["["["["""""'Mñ'[""""""""""""""""#"#"#####'÷÷÷÷÷÷÷÷ø÷÷®÷®ø®ø®÷®÷øø®øøøøøøøøøøùøùøùùøùùøùùùùùùùùùùùúùúùìúúúúúúìúìììúúúúúúúúûúûúúV+XXXXXXXXX%X%X%X%XKì‘ggg“gg£gg“““gg££££££gggggg”££”££g££g££g£“£ssššš£š£š£š£ššš£g““š£££œšššš£š££££š£šššš££ššššššššš£šššššššˆšššˆˆˆˆšš¦ššˆˆˆˆˆˆˆšššššˆšœšœˆœšˆˆˆˆššœˆˆœŠtŠtŠŠ~Š~ŠŠsŠ}ŠˆˆˆˆˆˆˆˆˆˆˆˆŠœ}ŠŠœŠssŠ™sŠ}ˆœˆˆˆˆšˆˆˆˆˆˆˆˆˆˆˆœˆ™ˆˆˆˆˆˆˆˆˆˆˆ™™™ˆˆˆ}™{ˆˆ}™™ˆˆ™™šœŠŠttŠŠŒtŠtœtŠtŠŠtœœˆŠt~ŠŠŠ~~~Œ~tŠŠŠŠ}ŠŠŠ}ŠŠŠ}ŠˆŠŠŠŠŠŠŠŠŠŠŠŠŠˆŠŠˆˆŠœ™ŠŠŠŠŠœŠsˆŠttŠŠŠŠs™ˆˆˆˆˆˆˆ™ˆ}ˆˆˆ™™}}ˆˆˆˆˆˆ}™™ˆˆ™ˆšˆˆˆœˆŠŠˆŠˆˆœˆˆˆœˆˆŠ™ŠŒl~~Š~Œ~~~ŠŠ}}ŠŠ™Šˆ™ˆ™ˆˆ™ˆŠŠ}ŠŠŠŠœŠŠ™ŠŠŠ™Šˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆœsœˆˆˆˆˆˆˆˆˆˆ¡¶ˆ}}™ˆ™ˆ}™™šˆˆˆˆ}Š™ˆ™™™ššˆˆœˆœ™œ}ˆˆˆœˆœ™œˆˆ™œŠŒ~Œ~~Œ~~~~ŠŠ}Š™™Š™ˆˆˆˆˆ™ˆˆŠŠ}ŠŠŠŠŠŠŠˆŠŠ™sœœˆˆˆˆˆˆˆˆˆˆˆˆšˆˆœœŠˆˆˆˆˆˆˆˆˆˆˆˆii~~~~~~Šlllllll‚lll~~Š~}Š}l~lŒiŒŠ~Š~Š~Š~ŠlŠŒllll‚l~Œ~~ŠŠ}Šˆ™ŠŠ~~~Š}Š}~~~™™™™~~~~~~~~~}~lllll~iŒŠ~ŠŠ~~~ŠŽ¶îw‚llll~~ŠŠ™}}™™ˆ™}~}™ˆ™ˆˆˆ™™ˆ™™™ˆšœœŠŠtŠttŠtœ•ŠtŠtœtŠœŠŠŠœŠŠŠŠŠlŠŠsŠŠœŠsŠˆœˆˆs}œœŠsssœsssŠœsœˆˆœˆšœœšssœsœœšœssœœsœˆsšššˆšššˆˆˆššˆšˆˆˆššššššœšˆššš££££ššš£““¢¢‰¢¢““”ssœssœsšš£š£££££££££££š£š£”£”£”££££”£“““““g£gg““““““““ggg““““““‘”ùF%X%X%XXXXXXXXXXXXXXXXXXXX&XXWXX&+/:5:::RHVùVùúúùùùùùùùùùùùùùùùùùùøùøù÷FF?6691&'#WW#####'####'###'#'##'#"####"#"""#"""""""""""["[[!,Dð9["[["["["["[#[#[#[#[#["#[#"T÷÷÷÷÷÷÷÷÷ø÷ø÷ø÷ø÷øøøøøøøøøøøøøøøùøùøùùøùùøùùùùùùùùùùùúùùùúùúùùùúúúúúúúúúúúúúúûúúúúûì>XXXXXXXXXXXXXXX%X)ûxg““‘““‘“‘“¢££g£g”gggg£””””””””£££££g££££g££££££££““£££££”££££££¦££££šššššš£š£ššš£š£ššˆˆššššššˆšššˆˆˆˆˆˆˆˆššˆšˆšššššššš£šššššœˆsœœˆœœœœssŠjsŠjŠœsšœœššœˆˆšˆšˆˆˆšˆˆˆššššˆšœˆœˆšˆˆššˆˆˆˆšˆ}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ™ˆ™ˆ™™ˆ™™™™ˆ}ˆ}}Šˆ}™™ˆ™ˆˆ™ˆˆŠssœŠˆœ€³ï{ˆˆˆ™™}Š}}’Š}}qŠ™~}™Š}™™™™ˆ™™™™™™Šœœœˆœœˆœˆˆˆœˆˆˆœˆœˆˆˆˆšˆˆˆˆˆˆ}ŠŠ~Št~ŠŠŠŠŠŠŠŠŠŒ~ŠŠ}ŠŠ}Š}}}}~}}~Š™}}Šˆ™ˆ™™ˆˆsŠœˆˆšˆˆˆˆˆˆœŠŠŠŠŠŠŠŠŠŠŠŠtŠŒŠŒttŠŠˆŠŠœˆˆˆˆˆˆˆˆˆœˆˆˆˆˆˆšˆˆˆœˆˆˆˆˆˆˆˆˆˆˆˆˆ™™}ˆ™ˆ™ˆˆˆ™ˆˆˆˆˆŠ}™™ˆ™™™™™™™™}}}}}}™™}ˆ™™™ˆˆ°¶ŠˆœˆˆˆˆˆˆˆˆˆŠŠŠŠŠŠŠssŠŠŠŠt~ttŒttŠŠˆŠŠˆˆˆˆœˆˆˆˆˆˆˆœˆˆˆˆšˆˆœœœˆˆˆˆˆˆˆˆˆˆˆˆˆ™}™ˆ™ˆˆ™ˆˆˆˆ™ˆˆˆ™Š™ˆ™™ˆ™}™™™ˆ™}™}}™™}}ˆˆ™ˆ™ˆˆœœsˆˆˆˆˆœŠŒ~Š~~}}}}™}}}™}}}ŠtŠŠŠŠ}s}ˆˆˆ}ˆˆˆˆˆˆˆˆˆˆˆœˆˆˆˆ™œœ™œˆˆˆˆˆˆ™ˆˆˆˆˆ}Š}™ˆˆ™ˆ™ˆˆˆ™ˆˆ™~Š™ˆˆ™}}}}}}}}ˆ}Š«³Š™ˆ™™ˆˆœŠtŠŠŠœˆˆŠœˆˆˆˆˆ}ŠŠ}}Š}}’Š}Š™™™}™ˆ™™ˆ™™ˆ™ˆˆœˆœœˆˆšœˆœšššššˆšœšˆšˆššššššˆšˆŠŠŠŠœtsŠœsœˆœœœŠsŠsŠsˆˆˆˆˆsˆœˆˆˆˆˆˆˆˆˆšˆšˆšššœššššš££šš£œsœœœssœs•jššš£š££š£š££££££££££¦“£££££££££¦g¦£££g£££š££££££££g£“£££££“££££¦““g££“£££“g£“‘““£§ü%%XXXXXXXXXXXXXXXXX&//:>>>RHRVúúúúµúúúúúùúùúùùùúùùùùùùùùõHFF8661&.&&WWW#WWWW'####&#W'##'#'###'###"'""##[#[#[#[#[#["[#["[""["""""""EM[""!"[""""""""""""""#""#"##8õõöõööööTööõööööTTöTööTööTöT÷÷÷÷T÷÷÷T÷÷÷ö÷÷÷÷÷öö÷öø÷øøøøøøøøø÷øøø÷÷øøøø÷ù÷÷øùøøøù÷ùR÷%&XXXXXXXXXXXXX%XXK씣““g£g££££££gg££“£g££g££££££££££££”££££££š£š£š££šššššššš££¦£g££¦££££££ššsššsššššˆˆˆšššœšˆššˆšˆˆˆˆˆššˆˆšˆšˆˆšˆšˆˆˆˆˆsšˆˆˆˆˆˆˆˆˆˆššˆšˆˆšˆˆˆˆˆˆˆˆ™ˆsˆ}sˆˆŠˆˆˆˆˆŠˆŠ}sˆŠˆŠ}Š}}ŠˆšˆšššˆšˆšˆššˆœŠŠŠŠ~ŠŠ™Š™}™Š™}Š™Š}Š}ˆŠ}Š}}Š™™Š}}}}Š}}™™™}™™ˆ™ˆ™ˆˆœ{ï퀙ˆ™™ˆˆˆ™ˆˆˆˆŠ™ˆ™ˆ™ˆ}™™Š}Š}}Š}Š}Š}™}}}~}}~}Š}~}’ŠˆˆŠˆˆœˆœˆˆœˆˆœœœœsŠsŠœœˆˆˆ}Š’’ŠŠŠ}ŠŠ™}™™™Š™ˆˆ™ˆ™™ˆ™™ˆ™ˆ™™ˆ’™~}Š’Š}~™™}™™}™™ˆ™ˆˆ™™ˆ™}™™Š}}}}}}ŠŠ}}}Š}™Š}Š}Š’Š}~Š~}~’}’ŠˆˆˆˆšˆˆˆˆˆˆˆˆˆsŠŠŠ~~}Š~}}’Š}’™}ŠŠŠ~}}}Š}}~}Š’}™~}}Š’Š}}™ˆ™¡¶Š}}ŠŠ’ŠŠ™}™™}}}™}™ˆ™™ˆ™™Š™}™}}}}ŠŠ}Š}}™~}}~}~}~}Š}~}~}’’~™ˆˆˆšˆˆˆˆˆˆˆˆˆˆŠŠŠŠ~Š~}Š™}}~}}}~ŠŠ}}ŠŠŠ’Š™Š}}}}™}}Š™}Š™}™™™™}~}}ŠŠ}Š™}™ˆˆ™ˆ™ˆˆ™™ˆ™}Š}Š™™}}}Š}ˆŠ}~ŠŠ}Š}™}™™}™™}™™}}}Š}~qˆˆˆ™’}}Š’Š~ŒŒŒŒl~llŒil~~~~~~~~liŠŠŠŠ}Š™™ˆˆˆ™™™ˆˆš”íî{Š™ˆˆ™ˆ™™ˆˆˆˆˆˆ™ˆ™™ˆ™™ˆˆ™™ˆˆˆ™ˆˆˆ™™}Š}ˆŠ}}Š}™Š}}}}}Š}}Š}Š}Š}}’Š}~}ˆˆœˆšœˆˆˆœˆˆšœœœœsœsˆœšˆˆˆsŠ}ssœšˆˆˆˆœˆˆˆˆšˆˆššˆšššššššˆšˆˆˆˆˆˆsˆˆˆˆˆˆˆˆˆšššˆššˆššššššˆˆšˆšˆœˆšˆššˆšššššˆšššsšˆššˆˆšš£££““g£“£g¦g££””š£š££££š£££££š£££££££££££££££££“££££“g¢¹KX%XXXXXXXXXXXXXX&X>úìììúúúúúúúúúúúVúùúùúùúùùVTHH:;5;YY&&WWWWWWWWWWWWWWWWWW#W#W&#W#'##'##'##'####'#"##'"###"#"#"#"""#""""""""[[[[[['AD["[!""["["["["["["[#["[#[#[#"####"##"################W#W#""##"W#W"#WWW"W"W"#WWW##WWWW#W##WWWWWWWW#WW#WWW##WWXWXWWWXXXXXXXXXXXXXXXXX)ûegg££“£g£g£”gg££gg“““‘g£“g£g££””””££££gg”š”££££££££š££ššš££šš££££££¦££££££££££ššš£šššjssjssssssssssssŠstŠsssˆšˆsˆˆšˆˆˆsœœšˆšš£šššššˆšˆˆsssœsœsˆˆšštsssˆˆsˆˆˆˆˆˆˆˆˆˆˆŠŠŠŠŠˆˆˆˆˆˆˆˆˆˆššˆšˆˆšššˆˆˆœˆ}œˆˆœœlŠŠlŠŠŠiŠŒŠŠ~Š~ŠttlŒll~ŠŠ}Š‚¶î{ˆˆ}™ŠŠŠŠŠŠŠˆœ™}ŠŠ}Š}ŠŠŠtttŠŠŠŠŠœˆŠlltŠŠŠŠŠŠ™Š™Š}Š}™ŠŠŠŠ~ŠˆŠˆˆŠœˆˆˆˆˆœ™ˆˆˆs™stŠttŠŠtŠŠsœŠˆŠˆˆˆllŒl~il~Š~lilŒlŒ~Š}~s}™ˆ}}}}ŠŠssŠŠˆˆˆšˆˆˆˆˆ™ˆ™ŠŠtŠŠŠŠŠŠˆˆˆœŠŠŠŠŠ}Š}ˆˆ™ˆˆ™ˆˆ™ŠŠŠŠ~Šˆˆ™ˆˆˆˆ™ˆšˆˆˆˆˆˆˆšˆˆˆœˆŠ™ˆˆˆˆŒlŒlŒ~Š~~lŒŠ~Š~Š~~Œl~Œ°³}~}}}}™}}™}Št~Šs™ˆˆˆˆˆˆˆ™ˆ™ˆ}ŠtŠŠŠŠŠŠŠˆˆšŠt~ŠŠŠ}ˆ}™ˆˆ}ŠˆˆˆˆŠŠŠŠŠŠˆˆˆˆˆˆˆ™ˆšˆˆˆˆˆˆˆˆˆˆœˆˆˆŠ™œˆˆˆŒlŒlŒ~Œ~Œ~Œl~ŠŒ~~lŒlŒlŒŠ~Š}}Š}}ˆˆˆˆšˆšˆˆˆˆˆˆšˆˆˆœˆˆˆœˆˆˆˆˆˆˆˆˆˆˆˆ™™}ˆˆˆ™}ˆ™™ˆ™™ˆˆ™ˆŠŠŠŠŠŠsˆˆ}ˆˆˆˆˆˆˆŒllllltltlŠŒtŠ~ŠŠŠtŠŠŠŠŠŠŠŠsŠŠŠs„ýýwŒlll~ŠŠŠ}}™}™}}™™tŠŠŠŠŠsŠœs™ŠŠŠŠŠsŠŠtttttŠssœœœtttŠŠŠsŠˆs}sŠˆsˆœssŠŠssˆœššššœšœššˆšˆœœssjŠjŠjjsœœˆœššˆsttttŠŠsŠŠŠŠttttŠsssˆsˆˆšˆˆšˆsssˆš£š£ššššš£ššssšš££”sššš£££š£š£££š”š£££££££££g“g£ggggg“g£g£££££gg”””””””””£””””xû)XXXXXXXXXXXXXX&XX%RúûúúúúúúúúúúúùúµV÷HH;1&#"WWWWWWWWWWWWWWWWWWWWWWW#&#W'#W#W##'####'##'##'##'#[#"'"""#[#"[#["["[#["["["["[""""""![,ñ][!"""["""[""""""""""#"#"#"#"'"""##"##"####'#'#'#'#&#&###&#WW#WWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWWXWXWXWWXWWXWXWXWXWXWXX&XXYXXXXXXXXXXXFµ““““““““““““““g“£“‘“¦£“£££“£g£g£g¦g££g£¦““¦£££¦£££¦££šš£š££££££££ššššššššš£ššš¦ššššššššš£££g£££š£££££šš£š££šššššššššˆššššššššššˆšššššˆˆˆšˆšˆšˆˆˆˆˆˆšˆššˆš¦šˆˆˆšˆˆˆˆˆšˆˆˆˆˆˆˆˆˆˆšˆšŠ™Šˆˆˆˆˆˆˆˆ™ˆˆˆ™™ˆˆˆ™™}ˆššššššˆˆšˆšœœsŠsŠœšššˆššˆššˆˆ™—ï{tˆˆˆˆˆˆˆˆ™ˆˆˆˆˆˆ™ˆˆ™ˆˆˆˆˆ™ˆ™ˆsŠˆˆˆŠˆˆˆ}}}ˆŠ}}}}Št~ŠŠˆ}}ˆŠˆˆŠŠŠ™ˆˆˆˆˆˆˆˆˆšˆ™ˆˆˆˆœ™Š}šˆšœŠˆssŠœˆœœŠŠŠŠŠœˆˆšˆˆˆˆˆšˆ™ˆˆˆˆ™ˆˆ™ˆˆˆˆˆˆ™}™ˆˆ™ˆ™ˆ™™ˆˆˆˆˆ™ˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆˆˆ™ˆˆ™Šq}™ˆ™ˆ}ˆˆˆ™ŠŠ’™}}ˆ}ˆˆˆ™ˆ™™ˆ™}Š}™}ˆˆšššˆˆˆˆˆˆšˆšsœ}sŠœˆšˆšššˆš°°ˆˆˆˆ™ˆˆˆˆˆˆˆˆˆ™ˆ}ˆˆˆˆˆˆˆˆ™ˆˆˆˆ™}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆ™}}™™ˆ™ˆ}ˆˆˆ™Š~™}™Š™}™ˆˆ™ˆ™™™ˆ}™ˆ™™ˆˆˆšššˆššˆšˆšššssˆŠsˆššššššˆˆˆˆˆ™ˆˆˆ™ˆ™™ˆ™}Š~}ŠŠ~~Š}ŠŒlŒŒt~~ŠŠŠ~Š~}~ŒŒŒŒllllll~~ŠŠŠ}}ˆ™}ˆˆˆŠsˆŠˆŠˆŠœŠŠŠŠŠŠŠt~ŒŒŠl~l~lŒˆ}sŠŠ}Š}Š}Š~Š}Š}™™}}ˆˆœ{¬ˆˆ™ˆ}™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆˆ™ˆˆˆˆŠˆˆŠˆ}ˆ}ˆŠˆˆˆŠˆˆ}ŠtŠŠŠˆˆœˆˆššˆŠŠŠœˆˆšˆˆˆššššˆšˆˆˆˆœˆšššššssšœsˆsššš£šššššššˆššššššššššš£ššššš£ššššššššš£šššš£š£š££šš££š¦šš££šš££šššš£š£š££££šššš££š£š¦££££££š£££££££g¢““g“gg“ggggg”gg£g¢g‘¢“‘¢®H%XXXXXXXXXXYXXXX&W5úúúúúúúúúúúúúúVùúVúùúùøøKHH:?:616YYWW&WW&WW&W&#WWW#WW#&#W#&#&#&##'##'##########'#[##"#""#"#""""""""""""[[[!"["[!QI["["[["[[["[""["["["["["["#["""'#["'"'#'#'####'###'###W'W#W#W#&#W#W#W&WWW&WW&WW&WW&WWWW&WWWW&XW&W&W&XX&XX&X&XX&XXXX&XXXXX&XXXXXXXXX/ûª“‘“‘‘‘g£””£””£”š”£”££££g£££££££££££££g““gg“g£g£££ggg££££££££££££££££¦££šš£šš£ššššššš£šššˆšššššˆšššššššššššššššˆ¦šššššš¦¦¦ŠsŠŠsŠssŠsssˆˆœsˆœˆˆˆšˆœššˆˆˆˆˆšššš¦š¦š¦ššˆšššššˆœšˆšˆˆˆšˆšššˆˆššˆˆˆˆˆˆˆ™ˆˆˆ™ˆˆˆˆ™ˆ}™ˆ™ˆ}ˆˆˆˆˆˆˆˆˆˆˆ™ˆˆˆ™ˆˆˆ™œ‚°ï²•ˆˆœˆ™™™Š}Š}~}’Š’ŠŠ}Šˆ™ˆ™ˆ™ˆ}ˆ™ˆ™ˆ™ˆšˆˆˆššˆšˆŠtœsssœstŠsŠtsŠœŠ™ˆ™œˆˆˆˆœ™ˆœ™ˆŠŠŠŠŠ}Š}}ŠŠ~ŠŠŠ}ŠŠˆˆˆˆˆˆˆˆˆ™ˆˆˆˆˆ™ˆˆˆ™ˆˆˆˆˆ¦ˆˆŠŠ~Š~Š~ŠŠŠŠŠ}Š}Šss}œˆ™ˆœ™ˆˆ™ˆˆ™ˆˆ¦ˆššˆššˆˆˆˆˆˆšœˆœˆœˆœˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆˆˆˆˆ™ˆˆˆ™ˆˆˆ™}}™ˆˆˆ}™ˆ™ˆˆˆˆˆˆˆˆˆ™ˆˆ™ˆˆˆ°³ˆˆˆˆˆ¦ˆˆ~Š~Š~Š~Š~ŠŠ}Š}ŠŠŠsŠˆ™œˆŠˆ™ˆ™™ˆˆˆˆššˆˆš¦ˆšˆˆˆˆˆššœˆˆˆˆœˆˆˆˆˆˆˆˆˆššˆˆ™ˆˆ™ˆˆ™™ˆ™™ˆˆ™ˆˆ™}}™}™}}ˆ™ˆ}}ˆˆˆˆˆ™ˆˆ™™ˆˆ™ˆˆˆˆˆˆ¦ˆ¦ˆš™ˆˆˆˆˆˆ™ˆˆˆ™™}™ˆ}ŠŠŠ}}}}}}}ˆ™}Š}Š~ŠŠŠœˆ™}ˆ™}Šˆˆˆœšˆˆˆˆˆˆšˆˆˆˆˆ¦ˆˆ€ŒttltttlŠlŠlŠŠ}Š~ttŠlŠŠŠŠŠ}œˆsˆœˆˆˆŠt¬«€ˆŠŠsŠˆˆˆˆˆˆˆ™ˆ}Š}}Š™™}’Š}Š™}ˆ™ˆˆˆˆˆˆˆˆˆˆˆˆššˆˆšššˆšssssœœssjœssœjssœˆˆˆˆšˆššˆœˆˆˆˆsœˆœˆœˆˆˆŠŠŠsŠŠssˆˆˆˆˆššššššˆˆšˆššššššš£š¦š¦šssssssssssšsšššššššššš£šššš£££¦££¦g¦££££££g££££££££££g“gg£¦““g££££¦£¦££££g££g££££££££££¦“£gg£g“““““““¢“ û/XXXXXXXYXXX&X&XXXY55>HHTRøúùúùúùúùVµùùùúVùùùùùùùVùùùùùøHFF???6;&.&&#&#W#W##'#####'##'####'#'#'"'""###[#[#["[#["["["[""["[""""["[""'Iñ,[[["!["!"""""[""""""#""#"#["#"'""##"##"#"###'####'#'#'#####W'W#W#&W&WWW&WWWWWWWWWWWWW&WWX&XWXW&WXWXXW&WX&WXWX&XX&X&XX&X&XXXYXXXXXXXHµ””£”££££”£”””””””””£”£”£gg£g£££££g££££££££££šš£šššššššssššsssssjjjssšššš£¦£££¦š£££££¦£š£ššš¦££¦š¦š££šŠsŠˆsŠsŠˆssssŠssŠsjŠsssœˆˆšˆˆœšˆˆˆšœˆˆˆˆˆˆˆˆŠŠ}Šˆ™ˆŠ}ŠŠttŠŠtŠŠŠŠŠŠŠŠ~ŠŠŠŠttŒltŒtŠŠŠŠ}œ}šššššššˆˆˆˆšššˆˆˆˆˆˆššˆšˆ¦ˆ¦¦t°ï¬€ˆˆœˆˆˆŠˆŠˆˆˆˆˆŠœˆˆˆˆœˆ™ˆœŠŠŠŠŠˆŠŠŠŠŠ™™™™ˆ™~}Š™Š}Š~}ŠŠŠˆœœœ™œ}sˆˆˆˆˆŠŠˆœˆœœœœœŠœˆˆˆˆœˆœˆŠsŠŠŠŠŠŠŠstŠttttŠsŠŠŠs™ŠŠŠŠŠ~Š~}Š~}Š~iŠt~ŠtŠŠtŠŠŠŠŠŠˆ™ˆˆŠ}Š™ˆˆ™œ™™Š™™™ˆˆ}~}™™™™Š}Š}ŒlŠlŠ~ŠŠŠŠŠŠŠŠŠ~ŠŒŠŒŒlllt~~ŠŠ}Š}™šššššˆšˆˆššˆššˆˆˆˆˆˆššš¦ˆ¦ˆ¦—¶ŠŠ~ŠŠŠ~ŠŠŠŒŠ~tŠŠttttŠ~Šˆ}ˆ™ˆœ™}™œ™ˆœ™ˆŠ™™™™ˆ™™~Š™Š™Š}}ŠŠllŠtŠŠŠŠŠŠŠ}ŠŠt~~ŠŒlllllŠiŠŠŠŠ}}}¦šššššššˆˆšššœšˆˆˆˆˆšššˆ¦ˆ¦ˆ¦œ~Š~Š~Š~ŠŠŠsœˆˆšˆšˆˆˆˆˆšˆˆŠŠˆˆˆˆ}Š}}Š}}}ˆ™}™™ˆˆˆˆˆ™ˆ™ˆ™ššššˆˆˆœšœšˆšˆšˆœˆˆšˆˆŠtŠŠŠŠŠŠŠŠŠŠœ}sˆˆˆˆˆˆˆˆˆˆšˆˆˆšœˆœˆœˆ€²¥¯‚œŠ}œœˆœœˆœŠˆŠˆˆˆˆˆsœœˆˆˆšœˆˆˆŠŠŠŠŠœŠsŠŠŠ™ˆˆˆˆŠ~ˆ™ŠˆŠŠˆŠsœˆˆœšœˆœˆšœšššœšœšˆœœœœˆœšššˆsˆsšsssssœjsjssjsssssššsš£šsˆsssˆˆssssŠjssssjjsssšššš£šššššššššššš£££sšššššš£jš”šššmmmm”£££££““‘“‘““““g¢““¢““““““‘‘‘‘‘‘““øHXXXXXXXXX&XXXXXXWXWWWXWXW%&Y+1;5;?J>Høøùùùùùùùùùùùùøùøùøùùùøøøøùøøø÷÷TF???66...''##'###'#"#"""##"'#["#"#"#"#"""""""""["["["[["["![!9ñJTH÷÷ùøùøùøøøùøøøøøøøøøøø®÷ø®ø÷÷øøTFF;J;8444,'#[#"""#"[#"["["["["["["""""["["!"[!"[!'MI["["[![!"[["[""["""""""""#"[#"#[#"#####""""###'####'#'#'###'#W#'W'W#W#&WW#&WWWWWWWWWWWWWW&WWWWWWWWXWXW&WXWWX&XWXWXWX&XXWX&XX&XXXX&XXHù¢v”””¢”¢k”g£g““g£“g“““g£g”£g£££££££g££££££££ggg“£g£g£g£g££š££££šš£šššš£š££šš££š£££££š£šššššššššššššššššššššššˆˆššˆœššššššˆššˆšššˆšššššˆšˆˆššˆsšœœˆˆœˆˆˆsˆˆœœœˆšššššššššššššˆsššˆˆs}ˆˆˆ}}ˆsˆˆˆˆˆˆˆˆˆšˆˆˆšˆˆˆˆs}Šˆœˆ}ˆ}ˆœˆˆˆŠ™Šˆ}ˆ™Šˆ€°®tˆˆˆˆ}ˆˆœˆœˆˆˆˆˆˆˆˆˆˆˆœˆˆˆœŠsœŠˆ™ˆŠ}ˆœ}sœŠŠsœœˆšˆšˆšˆˆˆšššˆŠˆˆˆˆˆ}ˆ™}™ˆˆ}™™ˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ}Šˆˆˆˆˆ}œˆœˆˆˆˆ}ˆ}}ˆ}}}}ˆ}ˆ™ˆˆ}ˆœ}™ˆˆ™ˆˆ™ˆ}ˆˆˆˆ}ˆ}}ŠˆŠœ}ˆŠˆŠ}ˆˆŠˆŠ}sŠŠœˆššˆšˆˆˆšˆšˆˆˆŠˆˆˆˆs}™ˆ}}ˆœ}™ˆ}}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ}}™™ˆ}ˆŠ™ˆˆˆˆ™ˆ}ˆˆ}ˆˆ}Š}}¯°}ˆ}ˆˆˆˆ}ˆ}}ˆˆˆˆ™ˆˆˆ™}ˆ}ˆˆˆœŠsŠˆ}ˆŠ}ˆ™ŠŠœ}œŠœˆššššˆˆˆˆˆšˆˆˆˆˆˆˆˆˆ™ˆˆ}ˆ}™ˆˆˆ}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ŠˆŠˆˆ}ˆˆˆˆˆˆˆˆˆ™ˆ™Š}ˆˆŠ™ˆ}Šˆ™ˆˆˆˆ™ˆˆˆˆˆˆˆˆˆ¦ˆˆˆˆˆˆˆšˆˆšˆˆˆ}ˆŠ}ˆsˆŠsŠŠsœœˆšššˆˆŠˆˆŠˆsˆs™ˆœˆˆŠˆˆ™ˆŠˆˆœˆœˆˆˆˆsˆŠˆˆˆ}ˆ}}ŠˆšˆššššˆˆˆšššššsœœŠŠŠŠŠ}ˆœˆ‚¬ý¬}ˆ™Šˆˆ}ˆˆˆˆˆˆ™ˆˆ™ˆœˆŠˆsŠsŠsˆˆˆsˆˆsˆœsœœœœššššššˆšˆššššœœššššˆšˆˆˆˆˆˆˆˆˆˆˆˆššššˆššššššˆšˆˆˆˆˆˆššœššˆšššˆˆˆˆˆšˆˆšˆššššššˆ£ššššššššš£šššššššššššššššš££š”šš”š££££g££g£g£g££££££££££££££££££££££g£g£g£gggg¦g£££g££g££g“£g“”””””””®HX&XXXXXXWXXWXWXXWW&X&X&WX&WXWWWXWWWWWWWWWWWWWWWWWWW&''1666;FFF÷õøøøøøø÷øø÷ø÷ø÷÷÷ø®÷÷÷÷÷÷÷÷÷÷TFõFJJ;;.=4,'""#""""""[["["["!""[!"["[![D,[[![!["""!"["[["["["["[""["""["#"#["[#[#'#'#[#"##'####'##'#W#'#W##W#&#W#&WW#WW&WW&WW&WWWWWW&WWWW&WWWWWXWW&XWWWX&X&XWXW&XWXWXX&X&XXX.ì ”g¢”ggg“g””g”g‘“‘“‘‘““““£g““g“ggggg£g£ggg££g££££g£££g£££££g££š££££££š£££š£“g££gš££š£š£š£ššššššsšššššššššsššsssssššssss£š£šš££ššššššššššššššššššššššˆššˆšˆššˆšššˆšššˆšˆˆˆšˆˆˆˆˆˆˆˆˆ£ššššššˆšœˆˆœˆœˆˆsˆsˆˆœsœŠŠsŠˆˆˆˆˆˆˆˆt¬{mˆŠŠ}Š}ŠŠˆ™ˆˆˆˆˆˆˆˆœˆˆˆˆˆšˆœˆˆˆˆˆˆšˆˆˆœsœˆˆššˆˆˆˆˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆŠ™œˆˆˆˆ™ˆˆˆsˆššˆšˆœœˆœˆˆŠˆœˆŠˆs}ˆ}sŠssŠŠsŠs™ˆˆ}ˆˆˆˆˆs}sŠŠstŠsŠŠssŠssŠsŠšššˆšššššˆˆˆˆˆšˆšˆšˆˆˆˆˆˆšˆšˆˆˆˆˆˆˆˆšˆˆšˆšˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆššˆˆˆšœˆœˆˆœˆœ™sˆˆssˆsŠsŠsŠŠŠˆˆ™ˆˆ}ˆˆˆs}s}°¶ŠtsŠŠsŠŠssŠŠŠŠŠš¦ššššššˆˆˆˆˆˆšˆšˆšˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆšˆˆˆˆšˆšˆšˆˆœˆˆˆˆˆˆˆˆˆˆˆˆšˆššˆˆˆˆˆˆˆˆˆˆŠˆsˆsˆsˆsŠsŠŠsŠŠœ™ˆ}ˆˆˆsˆ}ˆŠŠˆšššˆšˆšššššššˆˆˆˆšššššˆŒt~tŠŠŠŠŠŠŠŠŠŠŠlŠtttltllŠŠŠsŠŠˆˆˆˆˆˆˆˆˆˆšˆˆšˆˆˆˆˆšˆsŠŠœˆšˆsˆˆˆœˆšˆˆˆˆœŠssœˆšˆˆˆšˆˆˆšššššššššššˆƒ²ý¬€ˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆšˆˆˆšˆšˆšˆšˆˆˆšššššˆššˆˆšššššššššˆšššˆˆˆšˆˆˆšˆššˆš£ššˆšœšššˆšˆšsšœššsˆsssšˆšˆšššššsšsšœsssssšss£¦££££¦££££š££££££££££££££g££££££¦£££¦£g££g££gg£££££££££¦g££ggggggg£gg£££g£g£gg£gg£ggg£g£”g““g““““gg£ û/X&X&X&XXX&XXXW&XXXWXWX&WX&W&XW&WW&XWWW&WWWWWWWWWWWWW#WWWWWWWWWW#'&.6662FJFFö÷ø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷TöëëööTë,""["["["""["["[""!["[![!["EðM[!!["!"[[[["["!""[""""""""""[""""["#"#"##""""###'"###'###'#'######W'#W#W#W##W&#WWWWWWWW&W&WWWWW&WWW&X&WW&WX&W&X&WXWX&XWX&XXXXWXXXXXWHµ‘‘‘¢p¢¢¢¢““¢“¢‘¢‘¢““““£”£”””£”””””£”£”””š”””£”£”£g““g“gg¦“ggg££££g¦£¦£“““¦““£“££g£££££š£š£šš£šššš£ššššš£š£££š£š£¦££¦£¦£¦£££šš£š££¦¦š£šššsssssœssssssssŠssssssssssssstšššššššššššššššššššš¦šš¦šš£šššššˆˆˆˆˆˆˆˆˆˆˆˆˆšˆŠsšˆšˆˆˆššˆ€ê¶²šˆšššššššˆœsœŠsssœsˆˆœssœœœœˆˆœˆœšˆœˆœˆœˆˆœˆˆˆˆˆœˆˆˆˆˆˆšššœœšœœœˆœsœsœœˆˆˆœœˆœsœœœˆˆˆšˆˆˆˆˆˆˆˆˆˆŠˆˆˆsŠŠˆˆˆˆˆˆˆšˆˆˆšˆˆˆˆšššš¦šš¦šˆšˆˆˆˆšš¦¦ššˆšˆŠsŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠœššˆšˆššššššˆšˆšššš¦ˆššššššššˆšššˆˆˆˆˆˆˆˆ}ˆˆ™š}}sŠššˆˆˆšˆˆˆˆˆšˆšš—¯š¦šš¦š¦ššˆˆšˆšš¦šššˆšˆˆsŠŠŠŠŠŠŠŠŠŠŠŠŠsŠŠŠŠŠŠtŠŠsŠŠtŠˆššššˆšˆšššˆšˆˆšššˆ¦šššššššššššššˆˆˆˆšˆˆˆˆ™ˆ™ˆˆˆŠŠˆˆšˆˆˆˆšˆˆˆˆšˆˆšššˆ}ˆˆ}}ˆˆˆˆˆœˆœˆˆšˆˆˆˆˆˆ}Šˆ}s}ˆˆŠˆˆˆˆˆˆˆˆšˆˆˆˆˆˆsˆsˆššˆšœˆˆˆˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆšˆˆˆššs}sˆˆˆˆˆˆšˆˆˆˆˆˆšˆˆššš€¬ý¬ƒjsœtsœjsœˆœssœšœœœšœˆšˆœˆœšœˆšˆˆˆˆˆœˆˆššˆšˆšššššššššœœœœššššœšœšššššˆššˆššššˆššˆšˆssšššššššššš££ššš££££¦“¦“¦£££š£££g¦“g¦£££ššmg££““£gg¦“gggg“ggg““““““‘“‘“‘“‘““““““g“g£g“““g£””gg¢““““““““¢¢¢”¤:XXXXXXXW&XX&W&XX&W%&XWWXWWWXWWWWXWWW&WWW&WW&WWWW&WWWWWW#W##W###W#'########'"#',.9864J?JõF÷÷ö÷TöTëTëTö÷ööö,""""""["["["["[[["!["!"![[Mñ[[!"![[!!"!"[!""[["["["["["["""[#[#"[#"[#[#'#'"'"##'####'####'#'W'##W##W'W#W&#WWW#&WW&WWWWWW&WW&WWWWWWWXWXWWWXWWWX&WWXWX&XW&&X&X&X&X.û ¢¢“¢“¢‘““““““¢““““““£ggggg£gg“““g££g££££”£££”ggg“£g£¦£¦£££££££¦£££¦££££££¦š¦£££¦š¦££££š£š£¦£šššš£ššš£££šššš£š£šššššš££šš£££££šš£ššššš£ššššˆˆšššˆšššššššsœšˆœˆœœššššˆšššˆˆšˆššˆššˆˆˆˆššˆˆˆˆˆˆˆššˆššššˆššˆˆšˆšˆˆˆˆˆšˆˆšˆˆˆˆˆsˆœz¶ýzšˆˆˆšˆˆˆœˆˆˆˆšˆšˆˆœˆˆˆˆˆˆˆˆˆˆsœˆœˆˆšššœˆˆœˆœœœŠœsœšˆšˆšˆˆˆ™ˆˆˆˆˆˆˆœˆˆ™ˆˆˆœŠˆ}™ˆˆšˆˆˆsˆˆˆˆ™ˆ}ˆˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆœˆˆˆˆšˆšˆˆ™ˆˆˆˆšˆˆšˆˆšˆˆˆˆšˆˆˆsˆˆˆˆˆˆœˆˆsœœˆšššˆˆœœˆˆœssœsššˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆšˆšˆˆˆˆˆˆˆˆˆˆœ}ˆˆˆˆˆˆˆˆˆˆšˆˆšˆˆˆšˆˆ™¯¯ˆˆˆšˆˆˆˆˆˆˆˆˆšˆˆšˆˆˆˆˆœˆˆˆˆsœˆššˆšœˆœˆœˆsœsˆœšššˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆˆˆˆššˆˆˆšˆšˆˆˆˆˆˆˆˆˆšˆˆˆˆˆˆšˆˆˆšˆˆˆšˆšˆššˆˆˆˆˆˆˆšˆˆˆšˆˆˆšˆˆˆšˆˆˆˆœˆˆœˆsˆœsˆsšššˆœˆœˆšˆˆssŠsŠŠtt€l€€€€tl€€tlttŠssŠsssŠsŠŠœŠŠsŠŠssœŠœŠœˆššˆšˆˆˆˆˆˆˆˆˆšššˆˆ™ˆˆššššˆˆˆˆšˆˆšsz°°yœšˆšˆšˆššsšˆˆˆˆˆˆœˆsœšššššˆˆœšœšˆœššššˆˆˆšˆˆˆˆšœˆˆšˆšˆššˆˆsœˆšššššššˆššššˆšˆššˆˆšššššššš£ššššš£šš£££š£šššš£š£š£š£š£š£šš££££š££šš£ššššššš£££££££££”££££š£gg£gg¦£££¦£££££g¦££££¦£“¦£¦£“¦“£“££“£““¦g¦g““‘“£g£g“£g““““““““¢‘¢‘¢“‘¢§ú+WX&WX&XXW&XXXW&WX8úHH:::/+YW&XW&WW&WWWWWWWWW&WWWW&#W'W#&W#&#W'###'#'#'#'############"###"',,-48];=JóJööö,"[""[""["[!"!"!"!"["[[[!![,ð9!!"[!"!"[["["[[["!"[""[""""FFFFFFFFõFõFFõFõFõFõFFõFõFöFTFFTFTFTFFFTTTTTTFTTTFTTTTTTTTTTTHTHHHHHHHHHHHHHHHHHHHHKKH:WX&WX&XWXXWXWXWXWXFù“‰‘p‘¢‘¢¢‘¢¢¢¢‘¢‘¢“‘“‘¢¢““““““£g£g£””m”””””””š£”££”””£g£££££££g£££gg“££££££££££££££g“¦£££š£££š££££gsjmjssšssss£¦£“““¦££££š££££g£¦£££££££££šššššˆˆsjsjsssssssssˆsœsˆsssssˆˆšššššššššˆš£¦šššššššˆšššššš£š¦šššˆˆˆšˆšˆšš£€tƒ«¹ŸŠŠŠiŠtŠššššššššššššsššš£šššˆˆššˆˆˆssœˆˆŠsˆsŠttŠsŠŠŠŠŠssŠŠŠsŠŠŠjtœsœˆœˆœˆœœˆœsˆššˆœœsssŠjtjsœsœššˆœˆœjttŠjœŠjœsœœšˆšˆˆŠˆstš¦šš£¦šššššššššš£š¦šššššš¦šššˆšˆsˆssˆsststŠŠsŠŠŠsŠsssŠŠsŠŠtœœˆšˆˆšˆšˆšˆššš¦ˆššššˆˆˆšˆššššš¦š¦ˆˆˆˆˆˆˆˆšˆššt€ltŠtsŠŠ~ŠsŠ°¯š¦š£¦šššššššˆššš¦šššššˆ¦ššššˆšˆˆsŠsssstŠŠŠsŠtŠtŠŠsŠsŠsŠŠssœˆˆˆšˆššššˆˆššš¦šˆšˆššˆšˆššššššš¦š¦ˆˆˆšˆˆˆššššš€tttŠŠŠŠŠŠŠŠŠsššš£££ššššˆššššš£¦šššššš£ššššˆˆˆˆsˆssŠjttŠŠŠŠtstsŠsjŠsistttŠtŠtttŒtlllltšˆˆˆsˆˆsˆŠˆ}Šˆs}ˆˆˆˆˆšˆˆˆˆˆˆˆšˆl€t€tŠttŠssŠŠŠtsšššššš£ƒê¶¬€œššššššsšššššœšsssˆœsssssjtŠŠsŠstssssssssssjssœˆœšššsœššššsœssjjšš££šššjssjssšššš£šššš££¦£g“¦g££££££££g£g££g£££gg£g£££š££ššš”š”””£££g££g“““¦gg““‘“““£““““““““¢“‘‘“‘““““““““¢“‘”m•”””””g”””më?WXXX&X&XWXW&WXXW&YùúùùùùùùùùøH:?:1/YYWWW&WWWWWWW#WWW#WW#W#W##W#&#W####'##'#'##'#"[#"#"#[#"#""""""""""'',,""[""["["""["["[[![!!!"[![!9ðA[[[![![[["![!["![""["[["["[,´´´´ö´ööööTöëT÷TöT÷T÷÷÷÷÷÷÷÷÷÷÷÷÷÷ø÷®øøø÷÷ø÷øøøøøøøøøøøøøøøøùøùøøøøùøùùùùùùùùùùùùùùùùù%WWX&WWWX&WX&X&X&XYû g““““g“g£g“g““““¢“““““g“““““g£g£g£g£gg££g£££g£££££££š£š££“g£g‘““g“““gg£”£””šš£š£££šš£š£š££š£š£šššš£šš£ššššššššššššššššˆššššššššššššššššššššššˆšššsšˆˆˆsˆšˆˆˆšˆšššˆˆˆˆˆˆˆs}ˆsˆ£šš££¦š£šš£šššœsœsŠsssˆˆˆˆˆˆˆˆˆˆsˆˆˆˆšœˆˆˆˆˆˆˆy—{ˆˆˆˆššˆˆšˆˆˆˆˆsˆˆˆˆ}ˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆˆšˆˆˆˆˆˆ}ˆŠˆˆˆˆˆˆsˆˆŠ}ˆˆs}ˆ}Š}}}šššš¦ššššššššssssŠsŠŠˆˆˆ™sˆ}ˆ™ˆœˆœˆˆœˆˆˆˆˆˆ}œˆˆ}ˆˆŠˆœˆšˆˆˆˆˆŠˆˆ}ˆˆˆˆˆ}ˆˆˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆˆ}s}s}}sˆ}ˆ}ˆˆˆˆˆsˆ}ˆ}ˆ}ˆ}}Š}}šˆšš¦ššššššššˆœœœsŠŠŠˆœˆˆˆ}ˆ™ˆˆˆŠˆˆœˆˆˆœˆˆˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¯°}ˆˆ}sˆ}ˆˆˆ}ˆˆˆšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠˆ}ˆ}ˆˆˆˆˆsˆˆˆˆŠˆˆˆ}ˆˆ}ˆŠŠŠŠššˆˆššˆˆˆˆˆˆœjtŠjŠttsœˆˆˆˆœˆˆˆˆˆˆˆˆˆœšœˆˆˆˆˆˆˆšˆˆˆšˆsˆˆˆˆˆˆœ}ˆˆˆˆˆˆˆˆˆsˆˆˆsšˆˆˆšˆˆšˆˆšˆˆˆˆˆsˆ}s}ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ}ˆˆˆŠˆ}}}ššˆšš¦ššššššššssŠsŠŠsˆˆˆˆˆˆˆŠˆˆˆˆˆœˆˆšˆˆˆˆˆˆˆˆˆsˆˆˆˆˆšˆšˆˆˆ}sˆˆˆˆˆˆš€¶¬€sˆšˆšššˆˆššˆˆˆˆˆˆšˆˆˆˆˆˆˆˆˆˆˆˆsˆˆˆˆˆˆˆˆˆˆˆˆ}ˆššš¦£¦££šš££¦šœsˆššˆšˆššššššššššššššššššššš£š£š£šššššššššššš£ššš£ššš¦š£¦£££¦£££š££š£££š££š£££š££££š£££š££š£š££šggg“‘‘““““““‘“g£g££”££g£g£g£££“£“““g““g““£gg“g““ggg“g““g¢¢§ì/X&WXWXWX&XWXW&XWWHùúùùùùùùùùùùùùùøùøùH????..&#&WW'#W'##&##'W#'###'#'##'####[#"'##"'#["##["#["""["["""[""["""["["![[["![!""!["[!["![[Iñ[[!!!["!!!["!"![""[[["!"["['õöööööööëööëëöTëö÷÷ö÷ëT÷÷÷÷÷÷÷÷÷÷÷÷÷÷ø÷÷÷÷øø÷øøøøøøøøøøøøøøøøøøùøùøùùøùøùøùùùùùùùùøùùùHW&XWWX&X&WXWWXWXWXFù¢“g“g““““““””g“g¢“¢‘¢‘“““““““g”””””£ggg¢g””””£g£gg£g£g£g£g£££”””£”£££””g££ggggg£g£g£g£££££££££g£g£££££££”£”£”££££££šsššššššššššš£££££š£šš£ššsšš£jsssššššššššˆšššsssssšššššššššš£šššššššššœšˆšššššššššš€{°ýŸjsssŠŠtŠtŠttsŠŠssˆˆˆˆˆˆˆssssˆœššššššššˆšˆˆssttsssˆssššjŠsssˆsˆˆšˆšššˆšˆˆssssœsssœsœssšššššššššššššœšˆšˆššššˆššššššœšœšˆˆššššŠsŠsˆsˆˆˆˆˆˆŠtssˆsšššššššœšˆˆšˆœjsssssssššjŠssssˆœˆšˆsššˆššˆsssœsˆšššššššœššššššššššššsˆšˆššˆššššˆšœttŠŠŠsŠsŠsŠŠtŠj¡¯sŠsˆˆˆˆˆˆˆˆˆtsssssšœšˆˆssŠsssstjssssssšˆjŠsˆsŠsšˆˆˆˆšˆˆˆšœœssŠsšššššˆšššššššššššœœšœˆˆˆˆšœˆšššš£š£š£šššššˆˆssŠˆsˆˆsˆˆˆˆˆŠsssˆššššššššˆˆššˆsŠjssssœˆšstssssˆˆˆšˆˆˆšššˆsssssˆšššššˆšœššššššˆšššššˆššˆšššššššstŠsŠŠssssŠŠttttssŠssˆsšˆˆœŽ¯z€sˆšˆšššššššššˆsjjssssšsš£jsssssššššššššššˆsˆ£šššššššš££š£šš£££š”ššššš£š£š£š££jssssssssjsšš£ššš£š££££££££££££££š””££gg”””£££££g££gg££”””£££”£””””“g“¢¢g¢“g¢“¢¢g¢g“g““““““‘¢¢¢¢““¢¢¢“¢¢¢¢¢¢¢¢”®>WWX&WX&WXW&W&XWWWYF>Høùùùùùùùùùùùùùøùøøùøøøøù÷TF;;;11.&##&####'#'########'###"##"'""##["#"""#["#""""[""[""[["["["""!["!"[[["!["!![!!9ð]$![[!![["[![[["![!"!"["["[",=J;JJ;JJ=JJJJJJJJJJJJJFJFFJ?Fõ?Q?JFJFJFFF=FJFFF?FFJFFFFFJ?FFFFFFJTFFFFJFFTFJFF>FHTFFHJ&WWW&WWWWWX&X&WX&X.ú ¢¢¢¢¢‘¢“‘‘¢‘‘¢¢““‘““““““““‘“““¢g¢‘g¢g“““¢“‘ggg£gg£gg£££££g££g£g£££££££££££££££££££££££££gggggg¦£££gggg££g£g£““““¦g“£š££££££š££¦£š£ššš£š£¦š£š£šš£š£ššššš£šš£š£šš£š£ššˆšššššsšsšššššššššsˆsˆšˆˆšˆˆšˆššˆˆššˆšˆˆš£££šš£šššƒ¬¶¹ƒššššš££¦¦š££¦ššššššššššššššššššˆššššššˆšˆššššššššššššššššš£ššˆˆšˆˆššˆsŠˆˆšˆˆšˆššˆsˆˆˆˆˆˆˆˆˆˆˆšˆˆˆˆˆšˆˆˆˆšš£££š£ššššššššššššš£¦££¦šššššˆšˆššˆššˆšššššššˆšššššˆššˆšššššˆšˆššššššˆˆššššˆˆšššˆšˆˆsˆˆˆœšˆšˆšˆs}sˆˆˆˆˆˆˆˆˆˆˆsˆˆœˆˆˆˆˆš£ššššššˆššššššššššš£££šš¦ê¯ššˆššššˆˆˆššššˆšˆˆšššššˆšˆˆššˆššˆššššššššˆš£ššššˆššššššˆššššššššššˆs}œˆˆˆˆˆˆˆˆšˆˆsˆšˆˆˆˆˆˆšš£ššššœœšœœsœšsšššš£šššš£ˆšˆššššššˆššˆšššˆššššˆšˆššˆšˆššššˆšššˆ£šššššššˆˆˆˆšˆšššsˆˆˆˆššˆššš}sˆˆˆˆˆˆˆˆšˆˆšˆsˆˆˆˆˆˆˆˆš£££šššˆšššššsšššššš££ššš£šššˆˆšššššššššƒ{z€ššššššššˆšššššššššššš£šššššššššššˆšššœˆššššššššš£šsššššššˆšššššššˆšššššš£££¦££££š££££££š££££“£“££££¦£š££££¦££££¦££¦£££g¦£££££££g££££££g££ggg££g“gg¦££g£gg££££££gg£ggggg£££g£g£g£g£g““£g£g“““£g“¢‘‘¢‘¢““‘¢¢¢¢¢¢¢¢g¢‘p‘p‘‰§V+X&XW&XW&WXWWWW&XWWWWW&YY,;?JF÷Føøøùøùøøøøøøøøøøøøøøøø÷÷TF??61,&#'#'#'#'""#[#'"[#"#[#"#"["[""""["[""""[""[""[!"[![["[!"[!!![[![[[![!!ED[!!!!"[!![![!!!"[!"["[!"["!"["[[""["""""""""""#""#""#""#""#"#"#################WW#W#W#WWW##WWWWW#WWWWWWWWWWWWWWWWWWWWWWXWWX&WWWWX&WXWTø”gg“g“g“gg¢g”¢¢“¢g““““““““““““““‘“““““‘“““g“£”””££”££”””m”m€mm”””£šššš£££££££š££š£££š£š£š££š£šš£šššš££š£š£š£š£š£š££££££¦£¦£¦£££sšššš£ššššššššššjjssssssˆšssjsssjjt€€jssssˆššššššˆššššššˆššˆššˆˆˆˆššˆj{¯û•šššššššššˆššššššssˆsˆˆsssˆsˆššššˆšˆˆˆˆˆˆšˆšˆšˆššššššššˆšˆšˆsŠsssssssŠsstjtst€€tjŠsssŠŠˆŠˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆsˆˆˆšˆˆššˆšˆšˆˆššˆššˆšššš¦£ššššš¦ŠssssssˆsœssˆˆˆšœšˆšˆšˆˆtŠsŠŠssssŠssssŠŠjtsst€€tjsŠssˆˆœšššˆšˆšššˆšˆššˆˆššˆsˆˆšˆˆˆˆˆˆššˆšˆšˆšššˆˆšššˆ¯¯ˆššššš¦£š¦š¦sssssœˆsˆsœsœœšˆšˆˆššˆššˆˆˆˆˆˆˆˆˆˆˆˆˆšˆšˆšˆššˆšˆšˆšššˆˆššššššˆšššššˆˆššˆššˆˆˆšˆšˆˆˆˆšˆšˆššˆššššššˆšššššˆššššš¦šššš¦šssssssˆœˆˆsšˆšˆšˆšˆššˆšsŠŠssŠsssssˆssˆtsjjtstj€tjsssssšˆšššˆˆšˆšššššˆšˆšˆššˆˆˆšˆššˆˆšˆšššššššššššššššššššš£š¦šššš¦šœ€{üê{€šˆšššššššššššššsŠjsssssssšsšsšjsjssjjjjjsssšsšššš£šššš££š££šš£ššš£ššš£šššššš£££££š££¦£¦£š¦¦£¦š£š£š£”££š£”££££££š££££š£š£š£££££££££££££££g¦£”””£££££”””””m•m•”””£g”š£££££g£““g£g££g£g£g£g“““““ggg“g“gg£¢“¢¢¢¢“¢‘¢®:WWXWWWXWWWXWWXWWWWWWWWWWWWWWWWW''1666JFTTøøøøøøøøøø÷ø÷ø÷ø÷®÷øø÷TTFF;44,.'##"###"'"#["""#"#"["""""["[""["[[!""[""[!"!"[!"[!!![!!![![![Dð,![![[![![!"!["[["![[![""!["["["""["["[""""""""""#["#["#[#"##[##[##'###'##'#'#'###'#######W#W#W#WWWWWWWWWWWWWWWWWWWWWW&WWW&WWX&XWWXWWYV¢¢¢¢”¢””¢”””””””””m”•”•”‘“¢‘‘¢‘““““““££“£””””””””””g££”””””””””mmm””””££££””š””££”””mmmm”£š£££gš£šššššššsššššssjssjjjšš£££šsšš£šššššˆššssssšsˆsšsœjjjssssssssssjssssj€tjsssssˆšš£¦££¦£zêí§¦££ššššššššš£¦ššššššœsssssjsŠssŠjtjtttt€jššš£ššššˆššˆˆˆˆˆˆœjŠstsŠssssssssstsjtttt€ttŠssˆˆšˆsjjsjsŠsssœssssstsstsjtjjjsssˆˆššˆˆsˆˆ}ˆˆˆŠssssssˆˆsˆsstttsttttjsssˆˆšˆššˆœsˆˆšˆšœˆšœœšsŠŠŠsˆsˆŠˆsststtsŠssssssssstsssst€tttssˆsˆšˆš¦š¦¦¦ššš££££ššššššššššš¦šššš¯¯šˆˆššˆˆšˆˆšˆˆšššˆšššˆšˆšššˆšsˆˆsˆsšœˆšˆœˆšˆœšsssœˆœˆœˆœššššššššššš£šš£ššššššœšššš£šššš‘£šš£šssšššššœšsšœššššˆššœsŠsssˆsˆœˆŠŠttŠtŠttjssssssˆˆšœˆsœˆšˆšˆsˆsœsˆsŠs}ssŠˆsssŠtstsŠsŠsssˆsŠstssssjjtjtŠsˆsˆšˆš¦š£¦¦š¦š£££££ššššššš£š¦š¦ššššˆsœsˆssˆšsssjŠjmssŸ¹¯êŽˆsššˆšssˆššsˆˆˆšˆššsssˆsˆsœsˆjsjjsssssssjsssjjjjssšššš£¦£¦“g¦¦£££g¦g£š££££££££““£££££”£”””mmmmjmmj”£g£g£gg£££g££££££””””””””£”””””””mmm”””””g£gg””£””£”gggg”gg”””””””””k”””gg“g““‘““¢““gg§ù+&W&XW&XWW&W&WWWW&W&WW&WWWWWWWWWWWWWWWWWW&&,Jø÷øø÷øø÷ø÷ø÷÷ø÷÷÷÷÷÷÷÷÷÷÷÷ë÷TTõ;J84',""#[#["["""["[""""["["!""["![!["![[["!["["!"![![![[9ðù¢‰g¢g¢¢g¢¢g¢g¢g¢g¢g¢¢¢g¢¢“““““gg“““““£““““gggggggggg£gg£gg££”££g££££££££££££££££££££šš££š££š£££ššš££šš£šššš”sjjmjš£g£g“g¦“££“££££££££”£š£”š£££¦“££¦£££££ššš££ššššššˆššˆšœsššššˆšˆšššˆssˆsˆššˆšˆˆššˆˆšˆšjzê{ƒšˆšˆšˆšˆšˆšsssssssjs£šššššˆˆšˆšœšˆsœššsšššššššˆˆšˆšˆššˆššˆšššˆšˆššˆˆˆˆšˆˆˆˆˆˆsŠˆˆˆssˆˆˆˆˆˆsŠsŠˆŠŠˆsˆˆˆˆˆˆˆˆˆsˆˆsˆsˆŠsˆsˆˆˆˆˆˆˆ}ssssstttjtjtssˆsš¦š¦š£š¦š£¦š£šššš££šššššš££š£££ššššˆššˆššššˆšˆšˆˆsˆsˆˆˆˆˆˆˆˆˆˆˆˆsŠsˆˆˆsˆˆˆˆˆˆˆ}sˆˆˆšˆˆˆššˆšˆˆˆˆšˆˆˆˆˆšsssssss°ístssˆˆˆšššššššššššššššššœœœsšˆšššššššššˆšˆˆšššššˆšˆˆššˆssˆˆˆˆsˆˆˆšˆˆsˆœˆˆšˆˆšššˆˆššˆšˆššššˆšššššˆšˆššˆššˆššššššššsttjŠssˆš¦£££¦££¦£šššššš¦š£ššššˆššš£šš£š£š¦ššššššššˆšsˆšˆˆˆsˆssˆˆˆˆˆˆˆˆšˆˆŠŠsˆŠœˆˆˆˆsˆˆˆˆšˆˆˆšsˆššˆšˆˆˆšˆˆšˆˆˆšsssssssjsttjtˆœšš£¦š£š¦š££ššgyüµŸmšššššš£šš£¦££££¦£šššˆšš£šššššššˆšˆœsššˆˆšˆˆššššˆssšsšˆšššˆˆšššššššššš£££ššššš£ššššš£šš££££££££££££££££”££”££££”££££££££££g££g££gg£g”££gg£g££g££££££””£g££££££gg£££”£”£££g££££g££gg£ggggg£ggg“g““g“g“ggggg””k®>WWXWWWW&WWWWWW&WWWWWWWW&WW&WW&WW#WW#W#W##'#&T÷ø÷øø÷ø÷øJ;JFT÷÷÷÷÷÷÷÷÷÷÷÷÷ë÷TëTTöëTöFJJ=;4,''[""""["["["["""![["["[["!![[!![![[[!!![!![MI$$!!![!![![!!!"![[!"[!"[!!"[!"""["""[["["""""""""#"["["[#["'##[#[#[#'##"'#'###'#'##'####'##W#W#W##W#WW#WWWWWWWWWWWWWWWWWWWWW&WWWWXWWW&ùe¢¢¢g¢g“g¢gg“gg“¢g¢¢‘“g¢gg”””””••”””””mm””””•”””••”“““‘g£ggggg££gg£££g££££££££££££££ggg£££££££š£££š£££££š£££š££š£š£š£š££££šš£šš££š£ššš£š£š£šššššš£š£š££”š£££££££š££££šš££šššˆššššˆˆšššššššˆšššš£ššššƒí{Ÿ£šsšˆˆšˆˆˆšsˆˆšššˆˆˆœˆˆššššˆsˆœˆsˆˆsˆˆˆˆˆˆˆˆšššˆssssjtt€tttŠjt€tttsjttsjt€jtsš££ššš£šššsˆˆššsˆšˆˆšˆˆˆˆˆšˆššššššššˆšˆœšˆˆœšˆˆˆšssˆˆsšˆššˆˆˆˆˆˆˆšˆšˆšˆˆšˆsššˆšˆˆˆššˆššsˆsssšsœˆšˆšššˆœššš£££ššš£šššššššššˆœššˆˆˆšˆˆšˆˆššˆšššššššššššˆsšˆšˆšˆsˆˆšsˆˆˆˆˆšˆˆˆsˆsŠ¯¯ˆšˆˆˆœˆˆšˆˆˆšˆˆˆˆsˆšˆˆšsssŠsˆsšššš£š”šš£”š£££ššš£šš£ššššššˆšˆšˆšˆœššššˆˆˆˆššˆššššššššˆˆˆšˆšˆˆšˆˆˆˆˆšˆˆˆššˆˆsšˆsˆˆˆššˆššˆˆšˆˆšˆˆˆšˆˆšššˆsssssˆssšššˆšššššœsšš£š£ššššššš£ˆšœššššˆššˆšˆšsˆšˆˆššˆššššššššššššsˆšˆˆˆšˆˆˆšsˆšˆˆˆššˆššsˆšˆˆsˆššššˆˆššˆˆššššˆˆššššjƒ¬¹ƒmsššššššššš”££££££š£šš££šš££ššššššššššššššššš££š£££š££££šššš£ššš£š£ššš£šš££šš£šš£š£g££££š£šš£šš£š£š£š£££££££”mmmmmm”””mmm”£gggggg“gggggggggg“ggggggggg“¢g““¢g¢““¢“g“““g“¢“““¢g““““¢¢““¢¢¢‘eøYWW&WWWWWWWW&WWWWWW&WWWWWWWWW#W'W#'W#&#WW#W#Fø÷ø÷÷ø÷ø÷;####[''448?JFó÷T÷TëT÷öë÷ööTëTTëöööööõFô;=,9,'!"["[["[!"![!![!"!!"[![!!![[!!![![D]!!$[!![!![![[[![!"[!!"[!"[!"[[[!"[[""[""["["["["[""#"#"#"#"""##"###"""'#"##'#####'##'#'##&##'##&#W'W#&#W'W#&WW&WW&WW&WW&WW&WWW&WWW&WWFù”¢gg¢g“¢‰¢¢¢¢¢¢¢“““gg““gg“gg¢¢¢p¢¢g¢¢g¢¢¢¢g“¢¢g“g¢‘g“““““‘““““g£g££gg£g£g£gggggggggg££££££g££££££”£”£”””££££££££š”””š”£g“¦g“g£££££££g£g££g££££££g£££££££¦£££££š¦£££¦£ššššš£ššš££ššš£ššššššššššŸ{¹ƒššššsssšˆšˆššššsšssssssœsˆš££££šššššˆšˆsˆˆsˆsˆsš££££šš££šš££š£ššššš£¦šššš££šššššˆššššššˆš£ššššššššˆššššsšššsššššssssšˆšˆšˆˆˆssssmsjsjsssssssj£ššš£¦£šš£šš£š£££££££ššš£££š£š£šššš£¦ššššš£ššš£šˆššˆšššššššššššššššššœšššššˆšˆsšsssšˆsšˆˆšˆˆsˆs¯íššššššššsssjjjsjsmsjsmjjjššš£££šššš£šššššˆˆššššššˆššˆššš£££££¦£££££££££š££££š£££šš££š£££¦šš£šˆjsjssssssssš££š££££š£š£££š££££££š£šš££££š£ššš£¦£šššš£ššš£ššˆˆšˆšššššššˆš£šššššššššššššššsssšššˆšššˆšsssssjsssssss££š£¦££££mŸ¬úz§•£££££š£š£££££š£££š¦££££š¦š££š£ššššššššššš£šš£££££š££ššš££š£”š££££”££šš££š££”š”š”šgg££”££££££££££££”££££ggggggg“g“““ggg”ggg£g“g£g“““““““““££gg££g££g“£¢¢““““““¢“““g“g““gg““¢g“¢gg”¢”¢¢“g¢¢¢¢gg¢”®FXWWW&WW&W&WWWW&WWWWW&WW&WW'WWW#WW#W#W#'##'#&Tø÷ø÷÷÷÷ø÷.#'###"##""###'[,484;JôõTëööööööööööööö´ööö´ööJ=J==["[[!""[![[![![!![[!!![![!$!]ð2!![!![!![!![!!![!![![[[![[![["!"[["!["!["["""""""""["["["["[#["[#[#[#'#"##[""#'#'###'###'###'##W#W#W#W#W#W#W#W#WWWWWWWWWWWWWWWWWW&WWWYùe¢¢¢¢¢””¢”¢g¢g¢¢‘¢¢¢¢”g”””“”ggg””g”g”g”g”£g”g”g”g””””¢‘“¢“¢“““‘“¢“““““‘“gggg””m”””””””””””m””””””””£££””£££££ggg““ggg£g£g££g““‘““g¦££”šss££££££££££££££š£££ššš£££š£££££“ƒ{®x£ššššˆššsssššˆššššššššššššššš£jjsˆš£ššššssssssssssssssssssssssssssss££š£š£š£š£š£šššš££££šššjjjjjjsssjssœjsjjssjsssssššssssssšššššš£š£££š££š£ššš££¦“¦££š£šsssssssssssssssssssssssjs££š£š££ššš£š£šššš£šššš££š£š£šš£šššššššššˆššˆšˆssšššˆˆšˆšššššššššê¯š£š£££š£ššššš£££¦£¦£šš£sœœšœœœˆœšˆsššjjsmssššsšš£šš£ššššššˆššššˆsšššššššššš£šššššš£££££££šš£šš£££¦¦£¦š£ššssssssssssssssssssssssss££š££££šš£š£š£šššššš£š£££š£šš£šššššššššˆššššˆssššššššššššš£šššš££££š£££šš££š££¦“¦££š£šš•µêmsssssss£££££££££££££££££££š”££££££££££g££££££££š£š£š£š£££š£££££££££££££g”g”££””m”””£££gg£gg£g””””””””£””””””””£”””””£”””””””“¢‘“‘“‘““¢“‘“““““¢‘¢‘“¢”””””””””””””””””””””””””¢gg¢¢¢g””ggg¢¢¢¢ªøWWWWWWWWWWWWWWW&WWWWW#W#WWW'#W'W#&##W#&####]÷ø÷÷ø÷÷÷÷F###"##["##["""""""""""#[,4,=2JJFõööööööõöõöõõ´öõõõJ[!![[!["!![![!![!!![!!!!!!$$Añ$!$!!!!![!![!![[!![![!!!["!["!![[!"!["[""!["[[["["["""""""""#"""#"#"##"""'"##'"#"##'####'#'#'###'##'#W'#W'W#&W#&WW'WW&WW&WW&WWW&WWWWWW?÷v¢¢¢d‰‰‰‰p‰¢‰¢¢‘¢‰p¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢“¢¢¢¢¢¢“¢¢¢¢¢““¢““““““““‘“““““““““g“£“g”£g”g£g£g”gg£g£g”£££g£g£g££g££g£gggg£g£g££¦££¦£££¦g££££££¦£££££££££š£š£££££££££££šš££šš££££££££££££š£š£££š£š££š£šš££££“““g•{í®xkssjssssssjjj€jš£š££££šššš£š”šš££££££š£šš££g££££šš££š£££š££šš£š£££££š££š£ššš££ššššš£šš£š£££š£ššššššœššššššššššššššš£šš££šš£ššš£ššššššš££š¦šš£š£££š££š£š£š££ššššˆššššš££š£ššššššššššš££š£š££š££ššš££££ššš£šššššš£š££££££££šssssssjsssjsjjjjjjsš£š£š£ššˆêí¦š£šš£š££££££££g£¦£££££š£š£ššš££££££š££££££šš££š£šš££ššššš£šššššš£šššššš££”£££””£££šššš£ššs£££££š£šššš£¦š£šš£š££££££š££££££šššššššššš£ššš£šššššš££š££££££š¦£š£££š££šš££ššššššš£“£££££££šsssjsssjsjjjjj€šš££££££ššš¦£šš£š££££££££££££££££šššššššš£kµú{ƒmššš££šš£££££££g£££££££¦£££££££££££££g£g““gggg£££”mmmmm”££ggggg£g£££”£gg”£g“““gggg£g“““gg£g£g£gggg“““g“g“ggg“‘““g““¢‘“““¢‘“““¢““‘“‘¢¢¢¢‘¢¢“““g¢ggg¢¢¢¢¢¢¢¢d¢d¢¢¢¢d¢dp¢‰d¢¢d¢‘¢¢‰p¢¢‰¢¢p¢¢¤:WW&WW&WWWW&W&WWWWW&#W&W#&###W#W####'###'#'#'F÷÷÷÷÷÷÷÷÷,#["'"##["##["#[#["[""""""""["""!,,,=Jõöööõöõöõõõõõ[""!![![["![!![![![![![![$!!9ñ]!$!!$!$[!![!![!![[!!!"[!![!![""[!"[""[!"[""[""""""""[""["["["[#[#["["[#[#"#'"##[##[##'#'#####'#'##'###W###W#W#W###WW#WWWWWWWW&WWW&WW&&ù§pp‰‰¢¢¢‰¢‰‘‰‘p¢d‘‰¢‘‰¢¢¢‘¢¢¢¢‘¢¢¢‘¢¢¢g¢g“g¢g¢““““g“““““‘““‘““£“““““““g““””””””””””£”£g£”£”g£gg£ggggg£gg£ggg“g“““g£ggg£gg““g““g££g£ggg“““g£¦g£g£g££££šššššmjsjsšššsssš£š£š£££¦£¦£££“¦£¦£¦êú§”££“šssmj€€€€€€j€€jjssss££££££££££š£££££££¦££š££££££šš£££šš££££š£ššššššššš£šššššš£šš£ššššššššššš£ssjjsssssœšššššššš££š”š££š££££££££š££šš£££š£££££££šš£šš£££££¦š££££££ššššˆšssssjjjsssjsjssˆˆsˆsssssssšššššš¦££¦£š££¦£££££¦££££š££££ssj€€€€€€€€€€€ssssssꯣš££š£šsš£££ššššš££šš£šˆšššššssssœsssssšˆˆssssssššššššššššššššš£š£š££“šš££šjmjjjmjjjsššš£sssšš£££££££š£ššš£££££¦š££££££”š£šššššssssjsjssjsssssˆsˆsssssssšššššš££¦š££££“¦£¦£¦£££££££££šssjj€€€€€€€€€mssˆssš£££££££££š£š£££££££š££££££££ššš£”Ÿ{ìµyƒmssssjsššššss££š££££¦£¦£££g“¦g£“¦“££“£g££g££”£”mmm€€€€€€m€€””š”š””gg““““g“£g“““““““““““ggggggg“““““““““““““gg“““““g““““““““‘“““¢““““““““g““¢¢””””””ggggg¢“¢“¢g¢¢¢¢¢¢g¢¢¢¢¢¢¢¢p¢¢p‰‘¢p¢¢¢ªùYWWWWWW&WWWWWW&W#W#W##W#W#&W#'#W'W#W#'####'#6®÷÷÷÷÷÷÷÷T'##"#[##"[##"[#"""""["[""[,,===FJõööööõõõõöõõõõöõõõ[[[!![!![[![![!!!!!!!!!!!!!!]ðI!!!!!!!!!!!![!![!!![[[![![!'=JQJ=JJJ=JJ=JJô=J=JJôJFôFJJFJJJJFFJFFFFJ?J?FJFõJFõFFFJF?FõFFFFFFFTFFFFFFFTFTTTTFTTFFTFT.W#W'W#&WWWWWWWWWWW?ù¢¢¢¢‘‰¢¢¢¢¢¢¢¢¢¢¢““¢g“‘g¢g¢gg¢¢g¢gg¢g“¢g““¢g”””””””””gg”””””¢””””g“g““g“¢g””””””””””””””£”£gg”£”££g“£££g£“££“£££££££££””””££”£”””””g““¦“g£gg£gggggggggggggg““£gg££mmjmsmmm””””””š£££”mxìµxj”jmmsssssmmmjj€ssjsjjjjjjš£ššš£š£ššššš£ššššššššˆšššššššššššššššššššššššjjsjsssssssš”š££ssssssš£ššššš£šššššššššˆššššššsšššss££¦¦£££¦££££££¦££g£¦g¦££“£££££jjjjjsmsssjmsšš£”š£ššššssjjjmsssjsssmjjjjj€sssssjjjjjꯚ”£š”š££££”£¦£££££££££££”££££££££££££££££”££”£££”š”£””””£””””””££££g££££š££££££££££££££££š”££££££š£££££££££££££”šššs£¦¦£¦££¦£££££££££££g“£££“£££££mjjsjsmssjm”£”šš£š£ššššsjjmjssjsmmmjjjšsjjjjjjjšššš£¦¦¦¦g¦££££g££g£¦g£g“£k¹ú¹x•££mjjmm””””£””£”£”££££££££££”mmm””””m”mmmmm””””””mmmm”££g£¦g£g££££g““££g¦g££g£££g“£g£““£““g£g“£££gg£”””””””g”gg”””g”““”“”¢¢g¢“¢¢”¢g¢”””””””””gggg¢g¢g¢g¢¢¢¢¢¢¢¢¢¢d¢¢¢¢¢¢¢¢¢¢”®?WW&WWWWWWWWW#WW&#W&W#&#W###W#####'###'#'###'F÷÷÷÷÷÷÷÷÷."[###"[#""[#""[#,4,8;JFôõöööö´ööõöõõööõöõõõõõõôôó=[[!"[![!!![!!![![![![!$!$!$!$Iñ$$!$!$!$!$![!![!![![!!![![![ôõõõõõõõõ´õõõõöõö´öõõöõöö´ööööTTööööööëöTëöëö÷T÷T÷TTë÷÷÷ë÷÷÷÷÷÷÷÷÷÷®÷÷ø÷ø÷ø÷÷÷÷÷øøøøøøø?W#&#W#W#W'WWW&WWWW&ùe¢¢¢¢¢¢¢¢¢¢¢¢‘¢‘¢¢¢¢¢¢g¢g¢¢¢¢‘¢g¢‘¢¢¢¢¢¢“¢¢g¢¢¢g¢¢g¢¢¢“¢¢¢””””g””g””“g”””””””””mm””””£ggggg¢¢““gggg““g¢“g££g“gg££££g££g££££”££££££££££g¦£g££££££££££££““£“££“£g££££££”””mmg£g£g£”£””””§{¹Vxmšš”£””£”š££š£££££šš£šš”šššššššššššš£ššš£šš££ššššššš£š£££š££š££šššššš£š££££š£jjmsšsjjjjjjmsšššš£££££”šš”£££££šš££š£ššššššššššššššššššš£££š££šššš£š££££££££££££š£££š£jmssj££££££”£”£”””£sms£”£”””šš£š£”šššššššsˆµ¯ššššššššššššššš£š””””g””£”£”g£”££££££”£”””jss”šsj”£š£££££££££š£š£š££š£££šššš£ššššššššš££š££šš££š££££š£££££££££££££££šmjmss££££££”£”£”””£”msš££”££”šš££££”šššš£šš£šššš£šššššš££££š£££££££££££g£g££££g•§{êûƒmmmg£££g”g””£”£”””£”””£”££”£”g”gg£gg”ggggg”g££££”£”£££”£šg”££££g£ggg£££££g£££g££ggg£££““““g““““““ggg““gg”gggg¢“““¢g¢””””””””””g””g”””””””””v””g””¢g¢¢‰‰¢¢¢¢¢¢¢¢¢g¢g¢¢¢¢¢¢¢g¢¢¢ddªøYWWW&WWWW&#&W###W###W###W'##'#'#'##'#####'##4÷÷÷÷÷÷ëTëö'#["["#"4=;=;FFõöööööööTööööööõööõööõöõôJQ99,$[!![[![[![!![[!![!!!!!!!!!!!!!!$!]ñ<$!!!$!!!!!!!!!!![!!![![![![,õõõõõõõõõõõõöõõõöõõööõööõöõööööööööööööööööö÷öëö÷ö÷ëëTTëT÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øø÷øø÷÷÷øøø&##W#W#&W#WW&#WWW&WFø¢d¢p¢‘¢¢dg¢gdg¢g¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢g¢g¢g¢¢¢¢¢¢¢g¢¢g¢¢gg““gggg¢g¢g¢¢“¢¢““¢g¢g¢¢¢g¢”gggg”g””””g”g“g“g““““g¢“g¢““““gggg£g££”£££g£g££””””g£”£££g£g££”££g£g£””£”£”£g£“g””mmm””””””£”mƒ®¯ìk££“g”””””£”””””£š££££££££g£g£”£g££££££££š£££££šš£š£š££š£££š££££££””£””££££££££š£££££šššššššššš££š£š££š££š££££”””£””š””m”””š££š££š££gg£g£££££££££š£šš”š£š££šš£š£š££££”£££££”””£””££££”mmmmmmssm”£š”£££££££££””£””£š”jš”šš£££££££££g£g££££££š£££ì¯”š££šš£š£”£££££££££££££š££š£š££””š”£ššš£šš”£””š”£”£”””””””š””š””££”£”££”£”£””””£”m”š£££”š£££££g££££££££££££šš££šš£š”šš£š£££š£š”š£”££””š£””£££££mmmmmms”m”££”££££££”£££”””£š”£”£”š££££££££££g£g£££££££££££š£££££££”£££š£££££££££”£££”£””g££gg”§µù{€”””””””£”££ggg“gg”£ggg”£”””££”””g””””££gg£“g¢ggggggggggg“ggg£g”gg““g££”””£g£g”£ggg“““ggg““““““““g““““¢““““‘“““¢““““““¢”g¢g¢g¢dg¢¢¢¢¢¢d¢¢ddddd¢¢d‰dd¢¢¢””¢¢¢g¢dg¢d¢‰dp‰‰‰‰d‰d‰‰d‰p‰¢´?&WWW#W'W#WW#W&W#&#W#&#'###'#'####'##'#'###""F÷÷÷÷ö÷÷÷TJ8;JFFöëëööëö´ööööööööö´öööõöõöõ=Q992[[!["[![[[![!![!![!![!!![!![![!$!$!$!$!$!!!<D$!!$!!!$!$!$!$!$!!![!!!!!![[ôõõõõõõõõõõõõõõJ=Q=Q=Q=ô=QJ=ôJQ=J=QJF=JFJJJFJQFJJJFFJJQJFõ=JJQ?QJJ?J?J?FF?FFFFFF?JJFFFJ=##&#W'W##W###WW'W#&ùe‰‰‰p‰‰pd‰‰d‰‰‰¢¢d‰p¢¢d‰‰‰d‰‰¢d¢¢¢d‰‰¢d‰¢d‘¢¢g”g¢g¢gg“g“g“¢¢g¢¢“¢¢¢¢‘¢“¢“¢“¢ggg¢”¢”¢¢¢¢¢g¢¢¢¢¢“““¢““¢“¢“¢¢¢g““¢“‘¢““““ggggggg“gggggg““g££gg“g£gg¢g“““”gg“”““g“““““””””m”””£”£££”£”££”µù¤•gš£”££”£”£££”££gg£g£g££g££g£g£g£”g£££g“gg£££££g£££££££££££££g£££š£££££g£gg£g£””££££££££ggg£££””šš£”£š££š£š£££££££££š££”££”£££”£££g£££££££££g£g£gg£££££ggg£g¦£££g£££££g£££££g££££š££££££g£££g£”£”££”g£g££gg££ms££š£”š””££££££££££”£££”££””£££”£££g£g££££££g££g£g£”££gggg““£¦£¬û££££££”££”££”££££££££””£””””””””””””””£££££š£££££g£“£££££££££”£”££££££”£££££££££££££££gggg£££ggg£g¦££££££££££££££££g££££”££££šg”ggg££””£”£”g£”££gg”š”msmss£š££””££££££££££”££g””£”££”££”£”g£g££££££g£gggg£g££gggg¦£g££££££££££££££££££££”££££££ggggg£””””£g“£”“£““£””meû®{ƒ€””£££”£””£”ggg£££g££gg““”g”gggggg”g“““““g“g““““““““““g““““¢‘““““gggg“““““ggg¢g““ggg“““““¢¢¢“¢¢¢“”¢”¢¢¢¢¢¢¢¢‘¢¢¢g”gggg””ggg¢g¢g¢¢g“¢¢¢¢¢‘¢¢¢¢¢¢¢¢¢¢”d¢¢¢¢¢¢d‰d¢‰‰‰¢p‰¢p‰p‰‰‰‰‰p‰‰p‰p‰p‰p­÷&W'WW'W#W##&###W##'####'#'####'####'##""[#''8÷ö÷ö÷öööëT÷ö÷öëöTöööööööööööööööôJE99,[!!"["!"[[!"!!"[!![![!![!![!!![!!![!!!!!!!!!!!!!!$!$Ið2!$ !$!$!!!!!!!$!!$!![![![!!9õôôõõõõõõõõõõõõôõJJJ==,,''[""""[""""[""[""""""""""""""#""#"##""###"#"#"#""#############'#'#####W'W&W#'W#WWJ÷¢‰‰‰‰¢‰¢¢¢¢¢¢¢‰d¢¢¢d‰¢‰¢¢¢¢¢”¢””d¢‰¢¢‰‰‰‰¢‰¢¢‰‰¢¢¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢¢¢¢“‘¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢““¢‘¢‘“¢‘“¢“‘““““““¢‘“““‘“‘““““““‘¢‘‘‘”g£g££”gg”g“““““””””””””””“““““““““““gg“g””””g”££gg”g£§xµù§m“£g“gg£gg““g£gg“gg“££g£““g££g£g“g“£g“£gg££££¦g¦££¦£££££g£££”££š”££”£££££££””””””””g”gg“£££gg£££££””£”£”£”££££££g£g£g££££gg£g£g“££££gg£g£g££g““g£g£g£g¦££££££gg££“¦£g£¦£¢£££gg“g££££”£”£”££££££””””””££££g“£“£g££”£”£””””££””£”££££££g£££”££g££g£gg£g£££g££££££“£“££££££g¦g££££££££££¦££££µµ”š”£££”£””££”££££”£”mm””g££“““£g£gg£”g£”£g££££g”£”£g£g“““““g£gg£gggg“g£££g£gg££g££gg££g££g£gg£££££££g££g¦£££¦£££££gg“g¦££”££”£š££££££”””m””£g”£gg£“£“£££””£”£””££”£”£££££g£ggg££££g££g£g“££g£ggg£g“£££““£g£g££g¦g£“££££g££“g¦£¦££g££ggg“g££££££”££”££££g”£””””””””£“”“““““£g“££g•• µ¹£g£g£ggg“““ggg£““““““““““““““““¢““““‘“““““““‘““¢““g“““““‘““““‘““g““““““““g“““““““““““““““”””””””¢”¢¢“¢¢¢¢¢¢¢¢¢¢“¢“¢¢¢“¢”¢¢¢¢g¢¢¢¢p¢d‘¢¢¢¢d¢d¢‰‰‰‰¢‰¢‰‰‰‰‰¢‰‰pp‰‘‰¢‰‰p‰p‰¢‰¢‰p‰‰p‰p‰p‰¢ëFW##W#W#&###W#'#'##'#'#####'###'#'#'44;;FõF÷ë÷TëT÷÷÷TëöööööööööööööööJJ=9,$,!""""[![!"[!"[!!"[[![!![!![![!![!![![![!$!!$!$!$!$!$!$!$ !$2ðA! ![ ! !!$!$!$!!!!!$!!!!!![!9EQJôôôõõõõõõõõõõõõõõõõ´õ´õôJ===99['["[""["""""""""""["#[""[""'"#["#[#"'"#'###'##'###'#'####'#W'#####WW#W#&øed¢¢‰‰‰‰‰d‰‰‰‰‰‰¢‰‰p¢‰p¢dd¢¢¢d¢‰d¢¢¢¢¢¢‘¢‘¢¢¢‘¢¢g¢g¢¢¢g¢g¢g¢¢¢‘¢‘¢¢¢¢g¢¢¢¢ggg”g¢g‘¢¢‘“““““¢g““““¢““““““““““g£gg“g““““““g“g““““““g£g£gg““““““““““““g“gg£g£g£“g£““£“£g£“£g£g£g£££”£š®µù·”“g£ggg“g£”””££££“g¦g££££g£££££g£££££££££££££££££££££££”””””££g£g£”£££££££g£g£gg£££££”š”££££££££££££££”££££££šš£š££g£gg£g£g££££g£”£””š£££g££££££££££££¦£££££££££g££š££££££££££gš£££££¦£££££££££££££££gg£££££££”£š£££££££££££££££”š£š£££ššg££gggg£gg£££gg££””š£££g£££g£££££££££g£g££££££££££££££££££££µê£g££“ggg£“g£g££g££gg£g“g“g££g£”££š£££g£££££££££££££”£££££š£gg£““““£“£“£g“g”££”££££gg£g££££££g£££££g£££££££g£££££££££g£££££££££¦£££££š££”£££££g££gg£g£££”£”š££££££££££££££££££”£££££š££££g““g££g££ggg£”£”£££££g£££££££££££££g££££££££g££££££££g£££££££££££¦g£”££££££££gg£g“£gg£”££””£££g££“£££g£££g££g£gg”eyµµ •““““““““£g¢“g££”££gg““““““g£“““g¦“““““““““g“““£g““g“““““““””gg”““““““““““““““¢“¢¢¢“¢¢¢¢¢¢¢”g¢g¢g¢¢¢“¢¢“g¢¢“¢¢”g¢g¢¢¢gg¢¢¢¢p‰¢¢¢d¢¢¢p¢¢¢¢g¢¢¢¢¢p¢‘¢‘¢‘¢¢¢¢‰¢‰p‰‘¢‰¢‰¢p‰¢‰¢¢¢‰‰‰‰‰pe÷.W&#W###W&#'####'##'##'#',,.J;JFõ÷÷÷÷ë÷T÷÷÷öTëTëööööö÷ö÷öööõFJ=99,,"""""[[["[[![""["[![[!"[[!![![[!![![![!![!![!!!!!!!!!!!!!!!!!! !!$ $Iñ$ $! $!$!$!!!!!!$!$!!$!$![!![!![!![[-99Q=Qôõõõõõõõõõõõõõöõõ´ööõö´õJF===,['["["["[""#["#"#"""""##"##"#"#""#["#####'####'#'#####'##W'##'WQø‰‰‰‰‰pp‰pp‰p‰¢‰¢‰‰p‰pp‰‰p¢¢¢d¢d””¢gdg¢¢d¢‰g”gg¢g¢¢d¢¢g¢¢“¢¢¢¢g¢g¢g¢¢¢¢‘¢¢¢¢¢¢¢¢g¢“ggggg“g“g““gg“gg“ggggg”gg“g“““““““g££££“gg“““£“g“g””gg““‘“‘“‘“““““““”””””g”g£gg¢”””£”£g£ggg£§¹ú¹e”ggg”g“““£““£gg¢“gggg“£“““ggg£“ggg“g£g££££”£”£££££££”””£££££ggg£“ggggg”££g£g“““£g££££££””£”££££g”””££££££££££££££”£”£”£g£gggg£££gg£££££££££££££££££££££££””š”££££££££££š££”£££££££££££””£££ggg“g££££££££””””””£££g”””£££££££££££££g£”££”££g££ggg£”£gggg£g£gggg£g£gg£g£gg£££££££”££££££šš”®µ££££££££££££””£”g£““““££££££££”””££££g””£””£££££££££££££££££££“g“£“£g£££g££££££££gg£”£”£££g£g££££££££££g££g££££££”£”££££££££££š”£££ggg““£g££££££š”””£”£££££”££££££££š££££g££££££g£gg£g£”£gg££gg£g¦““gg£gggg£gg£££££££””£”£”£££££””£”££££g££££££””””££g£g“““££g££g££””””£”£££gg”””£”££g£“g¦£g”eƒ®¹®•£““““““g“gg“¢g““““““““““““““g“““““£g“g£”g£gg“gg“g£g£””g““g“¢¢‘¢“¢¢¢‘¢“g““¢“¢‘¢‘¢“g““¢g¢“g”ggggg“g¢g”gg”gg¢¢¢¢¢“g¢¢¢¢¢¢¢¢g¢¢¢¢pd¢¢¢¢¢‰‰d‘‰d¢¢¢d¢¢d¢d¢‰¢d¢‰¢‰‰¢d¢d¢¢d¢p‰p‰p‰p‰‰¢÷;##W'#&######'#'#'#&J?FT÷÷ø÷÷÷÷÷÷÷÷ëT÷÷ö÷öëö÷ö÷öTö÷öFE4=,',![""""["[[[[["!"["!""![![!["!![!!["!"!!![!!![!![!![!!!$!$!$!$!$!$!$!$ $!$ !!$D]!!! !!! ! !$!$!$!!!!!!!!!!!!!![!![!$!!!![!!,$99]=QJôõõõöõõöõõõöõõõöõ´öööö´JFô;=4,,,"""["[#[#[#["["[#[#[#'"##'"[#'##'#'####'#'##'#####W'ø­‰‰p‰p‰†p›pp›p‰¢¢dp‰‰‰‰‘‰¢‰p‰‘¢¢‰‰d‰¢‰d¢p¢‰‰‰‰‰¢‰¢¢‘¢‘¢¢g¢¢‘¢g¢¢¢¢d¢g¢g¢¢¢‘¢¢¢¢¢¢¢g“¢“¢¢¢“¢“¢g¢“¢““¢¢¢¢“¢¢“““““““““g“”ggggg““‘““g“‘“““““£g“““““““““““““gggggg“g“““gg“gg“g“• ¹û •g“gg££gg“£g£g£““£“£“£““£““““““£££““‘‘£““ggggg””””””””£””£”£g£g£gg¦“““¦¦£““££££££££££££££gg£££££££££g£gg££g££££g£g¦££££££££££££g££££££££g£££££g£££££££££££”£”£££”g£g£g££g£££££££££””££££££££g¦££££g££££”£££¦£££££££g£££££££££g£g£g£g£g£££g£g¦££££££££££££g£££££££g££“££g£££¦££g“£££““““¦“g£g£g””””””””£””£¹µ£”££££££££š£g“£££££“¦£“£g£gg“£££££££”£””””””£££”m”””m”””””£££g“£“gg“ggggg““g““ggg££ggg£”””£””””””””””””””””””””££££££££¦£££££££££££££¦££££££g£££££££££££ggg££g££££££g¦£££££g££”£”££g££££g£g£££gg£“¦£gg£“£g££““““““gggg£g””””””””££””£”£££££££g££££¦££g£££g£¦££££££gg££££££££g£g““££ggggg£g“¦gg££g“g¢” ¤¹®m”““““““““““““““““““““““¢‘¢‘“‘“““““”””””””””g”g”””g““““¢““¢“‘¢‘“¢‘“““g“¢‘“““g¢“¢‘¢¢g““¢“““¢“¢‘¢¢¢¢¢¢¢¢¢‘¢‘¢‘¢g“‘¢g¢g¢¢¢¢d¢¢¢¢¢p¢d¢‘¢¢‰¢¢¢d¢‰d¢‰¢¢¢¢d¢d¢¢¢‰‰‰‰‰d‰‰‰‰‰¢‰‰¢‰¢de÷&#####'#'#'#######8÷÷÷÷÷÷÷÷÷÷÷÷T÷T÷öëTëTëTõJJ4=9,[""""""["""["[""[""""!""[!"[[[!"["!"[["[!"[![[[![![![!99QJ[$!$!!!!$!!!!!!! ! !!!! !$ $<ð- !$ $!$ [!$ ! !!!!$!$!$!$!$!$!!!!![!![![!![!![!!![!"[[$299==QJõõööõööõöõöööööööööööööFJ8;=.,'""#"##"#"##"#'"#"##"#"#####'#####'##'#'#'#;¤d‰‰‰‰‰‰¢‰‰‰‰‰‰‰dd‰¢‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰‰p¢p¢p¢p¢p¢p‰¢¢d¢¢¢g¢”d¢¢gd¢¢¢‘¢¢¢‘g¢g¢g“‘¢‘‰¢‘¢‘¢‘¢“¢g¢g¢¢¢¢“¢‘“¢“¢¢¢¢¢¢“¢¢“¢¢¢¢¢¢“¢“¢“‘“‘““““g“g““g“““““““““““““““¢““““““““““” ¹® ”¢gg”gg£g“gg“““g£g““£g££££g£““““¦£¦g“gg“££“““¦£“£“g£ggg££g£g£g£g£g£g£gg££”£££”££££££”££ggggggg£g£ggg£gggggggg£“gg“ggg£g¦£gg££”£”£££”g£gg£g£££g££££££g£g£g£££g£££££££g££g£g£g£gg£gg£gggg£ggg£g£££ggggggg£gg£££”£££gg£gggggg£ggg£gggg£ggg£“g£g£gg£¦g£gg£”£”£”g£”g£gg££££g£££££££g“g£g£££££g£g£g““£££g£g££ggg££g£g£g££g¦µì££”£gggg£g££“““ggg“£g£“““““““ggggggggg£g££g£g£gg££££ggg”””£””g”g£”gg£££“¦“££££££““¦“““¦¦£“£g£g£££g££££g£g”£g£££”£gg£££g££g£gggggggggggg”£”£”£g£g£gg£ggggggg£gggggg£g“g£gggggg¦g£g£”££”£”g£gg”“g££££££g£££££gg“¦“££¦££££g£“““£££g£g£g£gg£££gggg£g£gg£gggggg“g£gggg££”g££gggggggg““gggggggggg““g“g“£“““““£g““gg£g£gg““g§§®®®”“£g£g£““““““““““““““““¢“““““‘¢g¢¢¢“¢“¢“¢¢‘¢¢“‘¢¢“““‘gg“g““““¢g¢g“g“¢¢¢¢¢¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢¢‘¢p¢‘¢¢¢¢¢¢¢¢g¢¢¢d¢d¢d¢¢¢¢¢¢¢¢‘¢¢¢¢‘‰p‰‘‰‘¢‘¢p¢d¢¢¢‰pd‰p¢pp‰‰p‰p‰‰p‰†‰‰‰‰‰÷?#'#'####'##'#'##''F÷÷÷÷÷÷÷T÷ö÷ëöëóJ8449,!""""#""""[""[""["["["[!"[![!"[["[!"!"[!![[!!![![!![!!![[,99ôôõôôôô$!!$!$!!!$!$!-!$!$!$ $!$!! $Iñ$$ !! $ !! !$![ $ $!!!$!!!!!!!!$![!![!![!![!![!![![![!![!"!["![[[[999=Jôö´õöõöööööööööööööööööööJJ=;4,'[#[""#[#[#[#[#[#["##'#'#####'###'ø­‰p‰‰‰d¢d¢¢¢¢d¢¢¢¢¢‰‰¢¢¢¢¢¢¢‰¢¢d¢¢¢‰¢¢¢¢¢‰‰¢‰‰¢¢¢¢¢¢¢¢¢‰d”¢d¢¢g¢¢¢¢¢¢¢¢gg”¢”g”””””g“g¢““¢¢‘‘¢¢¢¢““gg¢‘¢¢¢¢g¢““¢¢‘¢‘¢‘‘“‘¢gggg“““““g“”••””•”•””g”ggg““g“g“g“““g“““§®¤®x¢g“gg““gg”””g”““gg£“g£££””””””””£££££g“g¦‘“““g¦g£g£““““gg££gggg“““““““g£££££g”””£”£”£”££”££££££”££”££££££££££££££££“££££gg”£££gg””””””£g££g££££””””””””££££g£ggggggg£g££g¦““g£g£££g£““£g“¦“g£””£”££££££”š”mmmm”m””£”££g£££”£££££££££“£““££££gg££££gg”””£”£g£g££g£££”””””””£££££££¦“g£“¦¦£g£g¦g“gg£££gg£g““g““ggµì££g££g££g£gg£“£££££g££g££££££££££££““£g£g££g“g£g£ggg”£“g¢g”g“““”ggg“ggg£”££”£”£”££g£££££££g£g££g££”£”££g£gg”£”£ggg£ggg£gg£”££££g£g£££””””m””£”£££g££”£££g£££££££¦“““££££g£££ggg”””£””££g£g£g£££”””””””£”££g£¦g“g¦““¦¦g£g£g“g£g££ggg““£“““¦“g£”££££g££g£££”m”””m””£”£g£g£g£g£“g“£g£g££““““£“£““““£“““g””“”gg“gg““k e¹¤®§””££g£“g““““‘‘““‘““““““““¢g“g¢““‘¢‘“¢‘¢‘¢‘“¢““g“”””g”ggg¢”¢g¢¢“ggggg¢¢g¢¢g¢g¢¢¢¢g¢¢¢¢‘¢¢¢¢g¢¢¢¢g¢¢¢¢d”dg¢¢¢¢¢dp¢d¢¢dg¢dgg”¢”¢¢d¢¢p‰‰pp‰p‰p‰p‰p‰‰p‰p‰‰‰‰‰p‰†‰†p†›†ªT.###'#'#######'"#"4÷÷÷÷÷TóJ949,['#""[""#["#[""""["""[""["[""![""!["""["!!["![[!["!!![[!![![!99=óôôôõôôôôõôô,$!!!!$!$!!!!!!!!! !! ! ! $ 2ñ< $ $!!!$ $! ! !!!! $!!!$!$!$!$!!!!!!![!![!![!![![![!["!![[!["![[[["![["!',999=JóöööööööööööööööTTöëö÷ö÷õF;;84,,#########'""###'#'###'#;÷¢‰‰‰p‰‰‰‰‰dd¢‰‰‰d‰‰p‰¢‰d‰‰¢d¢¢d¢¢‰d‘¢d¢¢‰‘¢¢p¢¢¢¢d¢‘¢¢¢¢¢¢d””g”¢gggggggg¢d”g¢¢d”d”¢¢¢g¢¢g‘¢¢‰‘¢‘¢‘¢¢‘¢¢g¢g¢‘¢¢‘g¢““g“”“g””k”“¢g¢¢““”¢g¢”g¢”g¢g”g““““““£“£“““§ù¹®§ ”““““““g““£g£“””£””££”£”££££””£”£””””””£gggg““““““‘“““““““““g£g“““““£“g£g£££££g££££g£gg££££££g£££gg££££££££££££g£g£££££g£g£g£g££££g£g£££”£”£”£”£”£”££”£££”””””””£”g£g£g£‘““““““ggg““““g£““gg““g£gg£”££””m””ggggg£g£”gg”£”£”££££££g£££££££g££g££g£££“g££g££££g££””£””£”””£”£”££”£”£”””””””£”££gggg“‘““““g“g“g“““g£ggg£“g£“£££££¹ìgg£gg““g“““£g£“g“““““g££gg““g£££££g£££g££g£££“g”££££££g£g£g“£”££“£££££££g”ggg“g“g““““g““g“““““g““gggggg“““g“ggg““££g££”££”””””g“gg£g”g”””£””g”££”£gg£g££££££g£g££££gg£££££g£££g£g££”£””£”£”££££££””£”£”””””””g£gggg“‘“¢‘““g““““‘“““ggg“““‘g““£ggg£””””””““ggg”g”g”g”g”””£g£g£““““£g£££“g£g££““£““g£g“£g£g“£“””g”””££g£g£g£g””dv§e®®® •g“““‘‘¢‘¢‘¢¢‘‘¢‘¢‘¢¢“¢“¢¢‘¢¢¢¢¢¢g“““gg““¢¢¢‘¢¢¢¢¢““¢¢¢“¢¢¢¢¢¢¢¢¢¢¢g¢“¢g¢¢g¢¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢d¢”¢gg¢¢¢¢g¢¢g¢¢d”¢¢h”dd¢¢‰d‰‰p‰‰†‰†††‰p‰‰p›†›‰‰p‰‰‰›†‰›‰›‰‰dë;#'#####'#'#[""##"#=44['"##""""#""[""#["""""""[""""[""["["![""[[""![[[!["![[!!![![["!![!9=óJôôõôô­õôôôôôôôôó2$!$!!!!!$ $! $ $!$ $!$ $ !!<D !! ! $ $ !!$!$!$!$!$!!$!!!!!!!!!$!$!$!!![!![!![![!!![![[!!!"[![!!!!["!"[![!""["["![,999EFóõööööööööööööTöööëöT÷÷÷öJ4"[#"'"#'"[#"###'##'®­‰‰‰p‰‰p‰‰‰‰‰‰›pp›pp‰‰‰‰p‰p›p‰p‰‰dd¢‰d‰¢dp‰‰¢‰¢¢gd¢¢”d”d¢g¢d‰d‰‰¢d‰‰¢‰‰‰‰‰¢‰‰¢¢d‰‰‰‰¢¢¢¢¢¢¢¢¢“¢¢¢¢¢¢‘¢¢¢p¢¢‘¢¢‘¢¢g¢g¢”d¢¢g”¢g¢¢“¢¢¢¢‘¢¢¢¢¢‘¢¢¢¢¢¢“¢“‘¢¢“ ®µ¤e”†¢g¢¢¢“¢“¢“““g“¢“¢““gg““gg“gggg““gggggg¢g¢‘gg“““£“““g£g£“g“g“g““““““““£“g£££g£”g”gg£gg£gg£ggggggggggg““gggg¢ggggg”g”g£ggggg“gg“£g£g”g”£”””££g£g£g£gggggggggg£g£gggg“gggggg““g£“£g£g£““““““““““““““£g££gg”g”””g”g““£“““¢g“““gg¢gggggggg““ggggggggg“gg““gg“ggg““ggg£gg“ggg£ggggg£g£gggg££gg£gg“gggggg£g“£““£gg“£g““£“““““““£g£”££g””g¹µg““g“““£““““““““““““““g“““““““gg“‘““¢“‘“¢‘¢¢‘“““¢¢¢g¢g“““¢“¢“gg“g“gggggg““£“““““¢“¢“““““““““““““g“““““““““““¢““£“”g£”£”g”g””””gg“£““““““‘gg“g““ggggg““““ggggg“g“gggg““g“ggg“gggggg“ggggg£ggggggggg£ggggg£gg“g“gg“£““““£“£g“g“£“““£“““““““£g”£££”£”g”””””g“g“““¢““¢““““¢‘¢ggg“““““““““¢g““¢“g““““¢“““¢““““““““‘¢““g“¢g“““““g““‘“““““¢žªù®k”““¢““““““““¢g“¢¢“‘¢g¢gggggg”¢”¢¢¢‘¢g“‘¢g¢g¢g¢¢¢¢¢¢‘¢¢¢¢¢¢¢¢‘¢¢¢¢gd¢g¢¢¢¢¢¢¢¢‘d¢g¢gg¢g¢ggg¢¢¢ddd‰dd¢d‰d‘d‰‰¢‰‰d‰‰‰‰‰‰‰p¢p‰‰p‰‰‰¢¢‰‰‰p‰‰‰‰p›‰†›p‰‰‰‰‰‰‰‰‰­T,##'##[#"#"##'"[#""""""""""[#"[""#"["""["["[""["[["[[!"[""[![!"[[[!!!"[![!!"[[![!!9=9JõôôôõôõôôôôôôôôôôôôôQ9!!!$!$ $ [! $!! ! !! !! !$ -Dð-!$ $ ! ! !$ ! ! ! !! $ !$!$!$!$!!!!$!!$!!![![!!!![![![!!"[[!![!"["[!"[!"[!"[!"[!"["["""[!"'[,,=9JJJFõöööTëöTëööëö÷T'"#"""""###"'"[#"##Jö‰›†‰›‰››†‰†›p‰p›‰‰››‰†‰‰‰‰‰‰‰‰‰¢d¢d¢d¢dd‰‰‰d¢¢dd‰¢dd‰¢d¢¢¢¢¢¢¢¢‘¢¢¢‘¢¢‘¢¢‘¢¢‘d¢‘¢p¢p¢‰‘‰‘¢¢¢‘¢g‘¢g¢¢¢g¢g¢¢g¢¢g¢¢¢¢¢¢¢¢g¢”gg¢g¢g¢ggg¢¢gg¢¢g¢¢‘¢g¢“k®ù¤euv“““¢gg““¢g¢¢‘¢‘‘¢¢‘“‘¢““““¢“g“““““g“g““““¢““““““¢“““““““““g““““g“g“£g£g“g““g““ggggggg£g“ggg“g“g“gg“g““““““““““““g““““””””””””£g£g£g£”£”g””g”””””££g£g££££g£g£££££g£g““““““‘““““““““g£g“““£g££g“££gg£g“g““gg£g£gg”ggg£ggggg£gg£g“““g“““““g““g“g“g“£g£g“g£g£g“““““¢“‘¢“““¢“‘“£ggg“£££gg£££££gg£g“““““““““““““““g£££gg£g£££££g”£g“gg“g“ggg£¹µg““““““g£““““““““““““£““““““““““““¢“‘“¢““““¢¢¢¢‘‘‘‘‘‘‘‘¢‘‘¢‘“““““£“““£££g“g££“““““““‘“““““““““g££g“£g£“££g£££gg“g“ggggg££”£”gg£ggg“gg£gg£gg““““““““g£g£g““gg£g£g“ggg”ggg““¢“‘“¢“‘““‘““££g“g£££g£££££££££g““““““““““““£g“£££“gg££g£gg£££gg““ggggg“g£g”ggggg“£g“£gggggg“g“““““gggg”“”ggg“gg“g“gg“gg“¢“¢¢‘¢‘¢¢¢¢¢‘“““¢g“ggg“““gg£g“g““¢g¢¢¢‘kž§´¤®®§g“¢ggg“g¢ggg¢g“¢¢“¢¢¢¢g¢gg“g¢¢¢g¢g¢¢g¢g¢¢‘¢g¢¢¢g¢g¢g¢gd¢¢¢”””d”gggdg¢g¢g”d¢d¢¢d”d¢”d¢g¢¢‰¢‘‰¢¢¢p¢¢¢¢¢¢¢¢‰‰p‰‰p‰‰‰‰p‰‰‰p‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰‰†‰›ph‰‰‰dë;##""###[#'""###"[#"""[#[#""""#["""""[""""""["[""["!""[![["["[!!!"""[[!"[![!!,=9ôõôõõôõõõôõôôôõôôôôôôE9]2[!!!$! !!!!! !$! $!$!$ $ $ $ !!]ð2 $ ! $ $ $ $ $!$!$!$!$!!$ ! !!!!$!$!!!$!!$!!!![![!![!!!![[!![[![[![![[![[!"[![[!"[!["![["""!,9,=8=;JõõöööööööööTöTöJ"#["'"'#[#[####"'"'ön›‰h‰†›p‰‰‰‰‰‰›‰‰†›p‰†‰‰†‰‰p‰‰‰‰‰‰›‰‰›‰‰‰p‰p‰h‰‰‰‰‰‰‰‰‰‰‰‰hp‰p‰pd¢‰‰‰‰¢‰¢p‰‰‰‰¢d¢¢“¢¢¢g¢¢”¢g¢g¢¢¢¢‰g¢g¢¢¢gg¢g¢¢g¢g¢ggggg¢¢¢¢g¢¢¢¢¢¢¢g”g¢¢¢‘¢ke ¤®´e§a¢g¢“““¢g¢”¢¢¢g¢g¢ggg““g“¢¢“‘¢‘¢“¢‘“““““““““““‘“¢‘¢¢¢¢“““¢““g“gg““gg““““g”g”g”g““g““““““£g£“¢““““““““£g££g£g““““““““““““““““g¢g¢g¢¢g¢“¢¢¢“¢g¢““¢“¢g¢¢‘¢g¢g¢g¢gg““““““g¢““g“““g“”£”“”£g£££ggg£g£“gggg£gg”g£“g£g£g£”g””””g”””g“““”g”g”””‘““““““““g”g””””””””g”gg”“g“ggg““ggg£g“‘“““‘““““““g“g£gggg““““‘¢““¢““““““g£gg£gg£g“£“gg””g”£gg£g£““““g££gùµ£“g£“g£““£“““““““““““g“““““¢““““¢¢““¢“““¢¢‘“‘¢¢¢¢¢¢“¢¢¢¢““¢““¢““ggg“““g““““gg““g“““g”“gg£g££gg£gg££g“ggg””g”g£““g““““g££gg”g””g”““gg”g””””¢““““““““g””””””””g”g“g”““““““g“g£g“£g“““““‘“““‘“g“g“£ggg“g“g“¢“““““““““g“ggggggg£““gggg””g”g£“g£“““““g£g”g””””gg“g”g”g”””¢‘“““¢““““”“”g”““”““”““”“¢““¢gg“gg“g“gg¢‘“¢¢¢‘“¢¢“““““““¢¢‘“¢‘¢‘¢¢¢¢““¢¢“¢¢kve¤®®¤e·””g”¢g¢“¢“g‘¢¢¢g¢gg¢¢¢¢¢¢¢¢¢g¢¢¢¢¢g¢¢¢¢‘¢‘¢¢p¢¢¢¢¢¢‰‰‰‰‰‰‰‰‰‰‰‰p‰‰‰‰‰‰d‰‰‰‰‰›‰‰›p‰pp‰‰‰p‰‰‰‰p‰ph‰†‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰p‰‰‰‰‰‰‰‰‰dªT,[#'#[##""##["[##[#[#"""[#["["""["[""""["[["["["![""![""!["![""[[[[!![[!,E=JôõõôõõôôõôôõôôôõôôôQ]]$$$!$!$!!! $!$!$ $!$ !! ! ! ! ! $ MD$$ $! ! ! $! !! ! ! ! ! $!!$!$ $!!!!$!$!!!!$!$!!!!![!![![!!![!![!![![!!"!!["!["!"[[,,9=8=JJõöööööööööööööööööööööëôô'"""#""""#"##"#[#"#=÷h††††›†›››†›†››††›‰p›‰‰†‰‰‰‰‰p‰‰‰‰‰‰‰p‰‰‰‰‰‰‰p‰†p‰p‰p‰p››†‰‰‰‰‰‰‰‰‰‰‰p‰‰‰‰‰p‰¢‰d¢”¢¢dg¢¢dg¢d¢d¢¢d¢‰p‰‰‰‰d‰‰‰¢¢¢d¢‰d¢‰¢‰¢¢p¢‰p‰d¢¢¢¢“ua§eeùù¤n§‹dk¢”¢“““g¢”¢”¢”g”ggg”“g”g”¢“¢””¢¢¢‘¢¢¢‘¢‘¢¢‘¢““¢“‘¢‘¢““‘¢¢‘“¢¢¢¢¢“g““g““gg”££g££”£”“g”£“““““‘“““““¢“‘“‘‘“¢‘“¢““““¢“‘‘““““““““““g£““““g“““gg£g“g“““““¢“‘““‘“¢¢¢¢¢“¢““““““¢¢¢“¢““¢¢“““””””““g”g””g”““““g““¢““¢¢“¢““g“““¢“g¢““¢“‘¢¢‘¢‘¢¢“¢¢““¢¢¢“¢‘““¢“““”g”g“g““g“g”““”g””””£”””“”“””““¢‘“¢“‘‘“‘‘¢“““““‘““““““‘¢‘“¢“¢¢“g“g£“”g£”g”££”£”£”g”£”£“““““““g“g®µ¢““““g““g‘“““““‘‘‘“““““““““““¢“¢““““¢““““““““““““““““““””””””””””””••”•””””””“”““””””“““g”gg““g”£g”££”£””ggg£g““““““‘“gg“g‘¢¢‘¢‘¢“¢“¢“¢¢¢¢¢‘‘“““¢““”g“g”“g“““g“””£g””g””””g””“”””¢‘¢‘“¢¢‘“‘“‘¢““““¢““¢““‘¢‘¢¢‘¢¢¢¢“““£“““g£g£”£”£””£ggg“g“‘“““‘““g““¢‘¢‘‘¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢‘“¢¢”g“g“g¢”¢”“g¢”“g”g”g”“”g¢”““”g¢¢¢‘¢‘¢¢‘¢‘¢‘¢¢¢¢‘¢¢‘¢“¢¢‘¢‘¢¢‰¢‘¢“¢““‘¢¢“de¸®÷¤e§k”g¢¢¢¢‘¢‘¢¢¢¢¢p¢p‘pp‰p‰¢‘d¢‰d‰pp‰d‰¢‰‰¢‘¢¢g¢¢¢¢¢¢¢¢‰¢¢¢¢‰‘‰‰p¢¢‰¢‰p‰‰†‰†‰›‰‰‰‰‰‰‰‰‰p››‰›‰‰‰‰›‰‰d¢¢‰‰‰¢‰¢‰‰‰‰‰‰h‰›‰››†›››h››h‰›‰h››hh›h´;##""##"#["[#"#""#""""[""""""""["""""[[""[""["![""[[["[["!["![[!!![,==Jõõõõ­õõôõõôôõôôôôôõE92$$[!!!$!!!!!$ $!!! ! !!! !$ $ $!$ $ $ $! $ $Dð- $ $ $ ! $!$ $ $ $!$!$! $ !!!!$ $!!!!!$!!!!!$!$![!![!!![![![!![!![![![[,,E===Jôõõõõ´õõ´õöõöõöõöõööööööõQFJ94=2,['"""["["[#["[#["[##['÷­†›››††›†‰†‰‰hhp››p››‰p‰‰‰‰‰‰‰‰›p‰p‰‰‰‰‰‰‰‰¢d‰‰‰‰‰p‰p‰p‰‰‰‰¢‰¢¢‰¢¢¢d‰‰‰‰p‰p‰‰p‰‰‰‰‰‰d¢¢d¢d‰‰d¢‰‰d‰‰‰¢‰p¢¢¢¢p¢¢¢d¢‰p¢¢‰¢‰¢¢¢‘¢¢a§e¤¤ëeª§v¢‘‘“¢¢¢“¢g¢¢¢g¢¢¢¢¢gg¢¢¢”¢””¢”¢¢¢¢¢¢‘¢“‘“g““¢“¢““““¢¢“¢g“g“““¢¢¢¢¢¢g¢¢g“¢”“”“””””””””””””k”•kg“““‘““““g““‘“¢““¢‘“¢“¢““¢g¢“¢“‘“““g““““g““g“¢g““g“g“g“g”gg““““““‘““““ggg””””””¢g“¢“¢“¢‘¢“¢“¢¢¢g¢g”“““¢g¢“““¢“¢¢¢“¢¢g“““¢¢““¢¢“¢¢““¢“‘¢“‘“““““‘““““g“g“¢“¢““g“““““““““¢¢““¢g”“““¢g””g“¢“““¢“¢““““““““““““““““““g“g“g“““¢¢“¢g““““”””g”””””””””””m”mm•”g“““““‘““£¹ù““““““¢“¢“““““¢““““¢““““““g“g“g“¢““¢g“““g““””g”g¢“““““¢“¢¢¢“¢¢“¢¢“¢¢¢g¢gg“¢g¢g“¢¢¢¢¢¢¢“““¢““””“g”gg”g¢”g”””“”¢”“““¢““““g”““““¢““¢‘¢‘“¢“ggg¢“¢“‘““g“““““““““¢“““““”“g“”g”g““¢¢“¢“‘““““““““““¢““g““““g“g““g““¢“““”g““g“””””“””””””””””m••••“““¢‘“¢“““g“¢‘¢““¢“‘¢¢“““g“¢“¢“““¢g“““““¢““¢¢¢¢““g¢”¢¢““””¢”¢¢¢¢¢¢‘¢‘“¢“¢¢“¢¢¢¢g“¢“¢ggg“¢g¢¢¢¢¢¢¢¢¢g¢g¢g””g¢””g””dkkve¤®ø¤ee·v¢¢¢¢¢¢p¢‰¢‰¢¢¢p‰¢¢¢‘¢¢¢¢¢‘¢p¢¢¢dd¢d¢dpdp‰¢p¢¢d¢d¢‰¢¢¢¢‰‰pp‰p‰‰p‰‰¢‰‰‰‰¢¢d¢‰‰‰‰p›p›p›p‰‰‰‰‰‰‰‰‰‰‰‰‰h‰›h‰›†›†‰‰†h‰‰p›†›†‰†›†›†››¸T,"[#["[#"#""["["["[""""["["["[""[[[[""[[!"[!"["[[!"![!![[![!![9=Jõôõõ­ôõôõôôõôôôõôôôQ9,$ !$[!$!!$!!!$!$ !!!$ $!$!$ $!$ ! ! ! ! ! $ $ 2ðD $ $ !$ !$ ! ! ! ! ! ! !!!$ $ !!!$ $!$!$!$!!!!!!!!!!![!!!!![[,,E==JJõõõõõõõõõõõõõõõõõõõöõöõôóJ==99,,,["[!""["""[""["""""""#"""#"#""#;ëh›f†›››†››››†›†›††›††››†˜›†›†‰›ph‰h‰‰‰‰d‰d‰d¢¢¢¢d¢‰¢‰‰‰‰‰p‰‰‰‰‰‰‰¢d¢¢‰‰p¢‰¢¢‰¢‰¢‰¢‰‰¢d‰¢¢‰¢¢¢‰‰p‰p‰p¢‰‰‰p‰p‰d¢¢¢¢¢¢d¢‘k”ªee´ë´¤eªa¢uh¢¢‰‰‰p¢dp‰¢‰p‰¢¢¢¢¢¢g¢g¢¢””””¢”d”””””g”g””””””””¢g¢g¢¢g¢g¢g¢¢“¢“¢¢“¢“¢g¢¢g“¢“¢¢¢¢¢g¢g¢gg¢g”g””g”ggg”g”””g””””g¢¢‘¢‘¢¢¢‘“¢¢¢¢¢¢‘¢¢¢¢‘¢¢¢¢¢“¢““¢g“““g”””””””g”””gg£g£g¢““““““¢¢g¢“g““gg“g“g£g“g“““““““¢¢gg“ggg¢¢¢¢¢‘¢“¢¢¢¢‘¢“g“”gg“gg“¢“““‘¢¢‘¢¢‘¢¢“¢“¢“¢¢¢‘¢‘¢‘¢¢¢¢¢¢“¢¢g“g“gg“””””””g”””””g”g”””””””g““““g“““““““““““““¢““¢““¢¢““¢¢¢“¢¢ggggg”g”gg¢””””gg”gg””””””®µ¢g¢¢¢““g““”g””g¢g¢“¢“¢“¢“¢““¢““g“““g“”””“””¢””g”gg““ggggg””g”ggg”“gg““““““g““““””g”””””””¢”¢g¢”¢¢¢¢¢”””¢”¢”””””””g””””””””g¢‘‘¢‘¢¢¢¢“g¢“¢“¢‘¢‘¢¢‘¢¢¢‘¢¢¢¢g“g¢g“g”””””“”””””””g£g”g”””””““““““““““““““““““¢“¢¢¢¢¢¢¢“¢¢¢¢¢¢g”ggg”g”g”g¢”g”””g”g””g”””””‘¢¢‘‰‘¢¢¢¢¢¢¢¢¢¢‘¢p¢‘¢¢‘¢‰¢¢¢¢g¢g¢g¢g“”””””””g””””ggg”g”””””g¢¢g“¢“¢¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢g‰¢¢¢¢‰d‰¢”d¢¢d¢”¢¢¢¢¢¢””kv§c¤´¤®eª·¢‰pp›p‰‰p‰d‰‰‰pph‰p‰‰p‰p‰‰‰p‰¢¢‰d¢¢d¢¢”d¢”d”d¢¢¢¢¢¢¢‰‰¢‰¢‰¢‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰h‰‰‰‰›‰‰‰‰‰‰†›†›†›†››†›†›†h‰hh‰hh‰››†‰ö;"#"#"""["[#"""""""["[""""""""[""""[[!"!"[!"[![!"[[!"[!!!,==õõõõõõõôõôõôõôõôôõó99$$[!! $!!!!!!!$!!$ ! !$!$ !! ! ! ! ! $ $!$ $ $ $ $ $ DD$ $ $ $!$ $ $!$ $ $!$ $!!!$!$ !!!!!!!!!$!$!$!$$]9999JQôõô­­ôõôõôõôõõõõõõõõõõõõõQJ=]99[[[["["!["!["!["""["""""[""""["["["[#["["["'ö­h‰‰‰hh†›††††›†›†›†›†››†››†‰†›†††›†††›››‰‰†›‰h‰‰‰‰‰‰‰‰‰‰p¢‰¢‰p‰p‰p‰‰p‰p‰‰p‰p›d¢¢¢‰‰‰p‰‰p‰‰p‰‰p‰¢‰¢‰¢¢‰‰p¢‰‰‰‰¢vaa­e¤¤ø¤e­ªbuugg¢¢g¢g”¢””‰‘‘¢p‘¢‰‘¢¢¢‘¢p¢‘ppd‰p‰††hpd‰¢dd””””””””g””””””¢¢”¢”¢¢¢”¢¢g¢¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢‰¢d¢¢¢““g¢”g”””k”””””””g”gg“¢‘‘‘“‘g¢“¢‘¢‘¢¢“¢‘¢¢‘‘¢‘¢‘¢‘¢¢pp‰¢p¢¢¢¢¢“g“g¢“g‘g“““‘““¢‘¢¢‘¢¢‘“¢“¢¢‰¢””¢g¢g¢¢“¢¢“¢““¢“g¢gg”g¢g¢‘¢¢¢¢¢¢p‰‘¢¢‘¢‘‘‘¢””””gggg”gg””””¢‘“‘¢‘¢“¢“‘¢¢‘¢‘¢‘¢‘¢‘¢‘pp¢‘¢¢d”k””””””””””””””“““¢”¢”¢”¢”¢g¢g¢“¢¢“¢¢“¢“¢¢““¢¢““¢¢¢¢¢¢¢¢¢¢¢¢‰g¢g“g””””””””®®“¢““¢¢¢¢¢¢¢¢¢p”¢””””””””””””””””””””””d”””””¢””””””””“”””””””“““¢¢“¢”¢”¢”¢¢”¢¢¢¢¢¢¢¢¢¢dd””¢¢“g¢””“g”¢¢¢”¢”¢”gg¢gg”””””km””””””””ggg”gg”g””¢¢‘‘‘‘¢¢‘¢¢¢¢‘¢‘‘‘¢¢‘¢pp‰p¢¢p¢¢”m””””””””g””””””¢””¢”¢¢“g¢¢g¢g¢“¢¢“¢“¢“¢“¢“¢“¢¢¢¢¢¢¢¢¢‰¢d¢¢¢¢¢g¢”g””””km”””””””g”ggg”g”g””g¢‘‘‘‘¢‘¢¢‘¢¢¢¢p‘p‘‘¢‘‰pp‰p‰†‰¢d””””””””g”””””””¢”¢”¢”¢¢g¢”¢g¢g¢¢¢¢d¢‰¢¢¢¢¢¢¢¢¢‰‰¢d¢¢‰‰d¢d¢¢‰d¢¢¢g¢dg”daaaeª¤øe¤´e·kv¢¢‰pp‰‰pp‰pp‰p‰p‰p‰ppppp‰p‰†›†‰†›†›‰d‰d‰d‰‰‰¢‰p‰‰p‰‰‰‰‰‰‰p‰p‰p‰p‰p‰›d‰‰‰‰h‰†›‰†‰›†‰†›‰‰h‰h‰h››››†››››†‹†˜†f†›f¸ö,""[#["#""""["["[""Jõõõõõöõõöõõõ´õFõõôöõõFõõFõôõJJôôJôFõõõõõõõõôõôõôõõôõME9$[!!!$!!!![!$!$!$!$!! !$![ ! !$ $!$!$ $!$ $ ! ! ! $ $ $D2 $ $ $ $ ! ! ! ! ! $ !! $! ! $!$ $!2$]]E9EQóôôôôôôôôôôôôôôôõôôõôõôõôôJE99992$[![![!!![[[[[![["[""![""[[["[[[["""["""""""""""""#"Jëh››››h››†›››†›†›†›‰h‰‰‰h‰‰h››‰››››‰›‰›‰‰‰›‰‰›‰†‰›‰‰†‰pp‰‰p›p›‰p‰p‰‰p›p‰p›‰p‰p‰‰‰‰p‰p‰pp‰‰¢¢¢¢‰‰‰¢vvaa­eeëeeëe¤n©bav¢‘¢‰¢‘¢¢¢‰d¢¢¢¢‰p‰‰‰p¢‰¢¢¢¢¢¢¢¢¢¢¢¢¢¢‰¢¢¢¢¢¢¢¢¢¢¢¢¢””d”d”d”d””d”d”¢d¢‰d‰d¢¢d¢¢¢d”¢¢g””””””g”¢ggggg¢¢¢¢¢g¢g¢¢¢¢¢¢¢g¢g¢¢g¢¢¢¢g‘¢¢¢¢¢¢“¢“¢“‘“g¢¢¢¢‘g¢“ggg“g“g“g¢g¢¢¢¢¢¢¢¢¢“““““¢“¢g¢¢¢¢¢“¢““¢¢¢¢¢‘“¢¢‘¢¢‘¢¢‘¢‘“‘“¢‘¢“¢¢““¢‘““gg“““¢“g¢¢¢¢¢“ggg“g““““““¢¢““¢¢¢¢¢g¢“¢““¢¢¢¢‘¢¢‘¢“¢“gg“gg“gg¢““¢¢¢¢¢¢¢¢¢“g¢“g“”gg”””””””””””””¢¢¢¢¢¢¢¢d¢¢¢¢”¢¢”””””””””gggggg‰¢¢¢¢g¢g¢¢g¢“¢g¢¢g¢“¢g¢g¢g¢g®®¢¢“¢¢““““‘“¢‘“¢¢¢¢d¢¢g¢g”¢¢d”¢¢d¢d¢¢¢d¢”¢¢¢d””””¢”¢”¢”””¢””””¢‰‰¢¢‰¢‰‰‰‰‰‰¢‰‰¢g¢g¢g¢g¢¢¢¢d¢“g¢¢‰d¢¢¢¢¢g¢¢d¢¢¢¢¢g¢¢g¢g¢g¢¢g¢¢¢¢g¢¢““¢¢“¢¢¢¢‘““““gggggggg“g¢¢¢¢¢¢¢¢“¢““g“”g””””””””””””””””¢¢¢d¢¢¢¢¢¢¢¢¢¢¢¢g””””””””gggggg¢¢d¢¢¢¢g¢¢“¢¢¢¢g¢¢g¢¢g¢g‘¢d¢g¢¢¢¢“¢¢““¢¢¢¢¢g¢¢¢g“¢g¢g¢gg¢g¢”¢¢¢¢¢¢¢¢¢¢¢¢“g¢”””d”””d””””d”d””‰‰d‰d‰d¢‰dd¢d¢¢d”g””¢g”¢g¢gg¢g¢‰‰‰‰¢‰d¢¢¢‰¢d¢d¢¢¢d¢¢d‰d¢¢¢¢‘‰p‘u¢aa·b­¤ë®ë¤eªeeaaku¢‰¢‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰‰p‰p‰‰‰p‰pp‰p‰p‰‰pp›p†‰†‰††›†›††›†‰‰hp›p‰‰†p›†‰‰‰‰‰p›››h››h†h‰h›†‰†›‰p›››››h‰´4[""""""["["""""""",õöööööööõöõöõõõõöõõõõõõõõõõõõõõõõõõ­õõõôõôôôõô­J<],$![!!!$!$!!$!$!!!!!!!!! !$! ! $!$! !! ! ! ! $ $ $ $ $! ! $ $ AðI $ $ $ $ $ $!$ $ $ $ ! !$ $-$]]]]]EQóôôôôóôôôôôôôôôôôôôôôôôõôQQE=]9-,2 [![!!!!"[![!![!"[!!!!"[!"[![["[![!"!"["!"[[[""[""["["["["[",ö¸hhh†h†›†››†hhh‰h‰hp›‰›‰‰‰››h†››‰›†›‰›‰‰››‰›h‰‰‰‰‰‰‰‰‰‰‰‰‰›p‰‰p›‰‰›p‰p‰‰‰‰p‰†›p†p‰uuaaa··­ªe­´´®­­­e©··žu‰u›p‰p‰¢¢‰‰‘‰‰‰‘¢g¢¢d¢¢‘d¢”d¢¢¢g¢¢¢¢¢¢¢gd¢¢¢dd¢¢”¢¢”d¢d¢dd‰‰¢¢d‰‰‰‰‰‰‰‰d‰‰‰‰‰‰‰‰‰‰¢‰¢‰‰‰¢¢¢¢‰¢¢d‰‰d‰d‰‰‰¢¢¢””¢””d”g¢¢¢¢¢¢‘¢d¢d¢¢¢gd¢¢‘¢‘¢¢gggggg¢g¢‘¢g¢ggg““g“““““¢““¢¢¢¢¢¢¢¢¢¢¢g¢“¢¢¢¢¢g¢g““g“g““¢“¢“‘g““¢¢‘¢““¢¢¢“¢¢“‘¢‘¢¢‘‰‘¢‘¢¢¢¢‘¢¢¢¢¢¢¢¢¢¢¢¢‘¢‘¢‘¢‘¢‘¢¢“‘‘¢‘¢‘gggg¢g¢“¢¢“””””g”ggg¢g¢“¢¢¢¢¢¢¢¢¢””””””¢”¢¢¢‰¢¢¢‰¢¢d‰d‰dd¢dd‰p‰‰‰¢‰¢d¢d¢¢¢¢g¢d¢gd‰‰dd¢d¢d¢¢¢“”””¢”gg“g¢¢¢¢¢g‰¢¢”¢¢g¢¢¢¢¢‘¢‘®ù“g¢gg“¢¢g¢¢g“¢¢g¢‘¢¢¢¢¢¢‰¢¢¢‰›¢¢¢¢¢‰‰¢‰‰‰d¢”dddd¢¢¢¢¢¢¢¢gd‰d¢¢”¢”¢”¢¢g¢g“¢¢¢“¢¢¢¢¢¢¢”d¢¢“¢¢””””¢”g¢gg¢¢¢¢‘¢d¢¢g¢¢gd¢¢‘¢‘¢¢gggg“gg“¢“g”g”gg”g¢g¢“¢“¢“¢¢¢¢¢¢””””””¢¢¢¢¢‰‰‰‰‰‰‰ddd‰dd¢dd‰p‰p‰¢‰¢‰¢d¢¢‰¢¢g¢¢g¢‰‰‰¢d‰¢d¢¢¢“¢”””g“gg¢¢¢¢¢¢¢gd‰¢”d¢gd¢¢¢“¢¢‘ggggg¢g¢¢‘”g”gg¢”g¢¢g¢¢¢g¢¢¢¢¢d¢”””””¢¢”d¢¢d‰‰d‰h‰‰h‰‰‰h‰hd‰‰‰hp‰‰‰‰‰‰‰‰‰‰¢d¢d¢‰‰h‰d‰‰d‰¢d‰¢¢””d¢¢g¢¢¢‰‰¢‰‘‰‰‰dd‰d‰‰‰¢p¢p‰‰¢¢¢¢¢¢¢¢‘p‰‰‰‰¢u–u·ª^´­e¤´ëë­ª­ª·a·auvuu¢‰›‰‰‰‰‰‰p‰‰‰‰‰‰‰‰›‰p›‰‰‰†‰›p›‰p‰‰‰›p›†††›†›††›†›h›††›†››†››†›†›††††›†††›››†††††›nõ,"["[""""""["["["["JöõöõõõõöõõõõõõöõõõõõõõõõõõõõõõõõõõôôõôõôõõõôõôôQE9],$$!$!!!$!!!!!$!$ $ $ [! $!$!! !$ $ $!$!$ $ $ $ ! ! $ $ $Iñ- $ $ $ $ ! ! ! ! !$2]QQQQôóóóôóôôóôóóóôôóôóôôôôôóQE]E922[2[[![!!![![!!!![![![![!"[![!!"["[!!"[!"![!""["["[!""["!"[""["""""""""""=ö¸žžžžžžababaaaabaaažvužžužvaaaavavaavauuaaavaavaa·caaaaaa©vaa©ªªªªªnªªªªª´­´´´ó÷´´­­­ª····bakk–¢d¢¢d¢dd¢¢¢¢¢¢¢¢”d”v“”d¢g¢d‰d¢‰‰p‰p‰‰¢‰‰p‰‰¢d‰p¢d‰›‰‰‰‰‰‰‰dd‰‰‰‰‰‰¢‰‰¢¢d¢¢”¢¢¢g¢g¢g¢¢¢¢¢¢¢¢¢¢p¢‘¢¢¢¢d¢¢¢g¢¢¢¢¢¢¢¢¢¢”d‰‰‰†‰‰‰‰¢¢pd‘‰¢¢¢¢¢gd¢‰¢‰p‰‘¢¢‘¢””¢”¢g¢g””””¢”””k”””””gg¢¢g¢””””””ggg“g”g””””””””””k”””ggg¢g¢¢‘¢¢g“¢¢“¢“¢“¢““¢¢¢¢¢g““¢gg“¢g¢””””””gggg¢g¢gg””””””””k”””gg“‰¢“¢‘¢‘¢‘¢¢‘p¢pp¢¢¢¢¢¢¢¢‰‰‰¢¢¢¢¢d¢‰‰‰‰¢d¢¢¢¢¢¢¢g””“““g“gg““¢¢¢“¢¢g¢¢¢‘¢¢¢¢¢¢“¢“¢¢¢“¢¢¢¢¢¢¢”d‰‰‰‰p‰¢¢¢¢‘¢‘‰¢¢¢d¢¢¢¢¢¢¢p¢¢¢¢¤¤¢g“‘¢‘“‘¢g“‘“‘‘¢““‘¢‘¢¢‰¢¢”¢¢¢”¢”¢¢¢¢v“¢¢u¢¢¢¢¢“”¢”d”¢””¢”“¢”¢”¢”¢d¢g¢¢¢”¢g¢”g¢¢”””d¢¢””¢g¢d‰‰¢¢d¢”d¢gg¢¢g¢””d””d¢¢gd¢¢¢¢¢‰¢¢¢¢¢‘‰‘‘¢¢¢p¢¢‰¢¢¢¢¢¢¢¢‰‰¢¢d¢¢‰d¢‰‰‰‰¢¢d¢¢¢¢¢¢g”“““g““”¢g“¢g¢¢¢¢¢¢¢‘¢¢¢¢¢¢g¢¢g¢¢¢¢¢¢”¢¢¢¢”d‰‰‰‰‰¢¢¢¢‘¢pp‰¢¢¢dd¢¢‰¢¢p‘‰‘¢¢‰¢¢¢¢¢p¢‘¢p¢‰p¢p‰¢¢¢¢¢¢¢¢‰‰‰‰‰¢‰‰‰‰h‰d‰‰¢‰¢¢¢¢¢¢¢””¢¢gg¢g“g¢¢¢¢¢¢¢¢¢‘¢p‘¢¢‰¢‰¢¢¢¢‰‰¢¢¢¢d¢¢d¢‰h›‰‰‰‰p‰p‰ppp‰‰‰‰‰¢‰‰‰‰‰p›p‰p‰p”d”d¢¢d¢¢”d¢”d“”¢””¢”¢dd`pdh·aªªª^ªeneõë­÷­´´­­ª­ª­­ª­ªa·a©·važauuaauuuuuuuvuu‰žuuvu‰ž‰‰žuhhžudužuudu‰uuužužžu‰ždžžžžžuubö8""""["["[""["[[!"[[JJJJJJóJJJJJJJJJJJJJJJJó=ó=óJó=ó=óJQJôôõôôõôôôõôõôôô­QE9]]$!$!$!$ !!!!!!! $! ! $ $ !! ! ! ! ! !$ $ $ $ $ $ $ 2ñA $ $ $ $ $ $ $ $ $ $ $Qóóóóóóóóóóóóóôóóôôò]E]D]22$-!!!!!!!$$!!!!!!$!!!![![!![!!![!![![![[[![![[[![["![[[![![![["![""![[[[["["["["['õ­nnnnnnnnnªnnn¸nn©n©­nn­nnn­ªª­n­­nªnªn­nªªnnnªnn¸nnª©©^b©©©©©©©©©©…–b–ua`›`›‰›††›†pp‰p‰p‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰d‰‰d‰‰‰‰‰‰‰‰‰¢‰‰‰‰‰‰‰‰p‰‰‰‰p‰‰¢¢d¢d¢‰¢‰‰‰¢d¢¢¢¢¢”¢¢¢‰‰¢‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢‰¢‰p‰p‰pp‰p‰‘‰d¢‰‰‰‰‰‰‰‰‰¢‰‰‰p‰¢‰¢p¢‘‘‰p¢‘‰p¢‘‰d¢‰‘¢¢¢p¢¢¢¢‘d¢dg¢d¢¢¢¢dd”””¢gg¢g¢d¢¢¢¢¢¢¢gg””d”g¢¢¢¢¢‰‰p‰p†php‰‰‰p‰‰‰¢‰¢¢¢¢¢¢¢¢‰¢¢‘‰‘¢‘¢p¢¢¢¢‘¢¢¢¢¢¢¢‰¢¢¢¢¢¢¢‰d‰¢¢¢¢¢¢¢¢¢‰d¢pd‰dg¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢‰¢¢¢”¢¢g¢¢¢g¢¢g¢””””””””¢¢‰¢¢‰¢‰¢¢d¢‰‰‰¢‰¢¢¢‰¢‰‰¢¢¢¢¢¢¢¢pp‰p‰‘‰‘‰¢¢¢¢¢p‰¢¢¢d¢¢‰p¢¢¢‘¢¢‘¢p¢p¢p‰p¢‘¢¢¢¢¢d¢¢¢‘¢‘¢‘¤ùg¢”¢¢¢¢¢¢¢¢¢‰¢¢¢¢¢¢“¢g¢¢¢¢¢¢¢¢d”¢d”¢¢¢¢¢¢“¢¢¢¢¢¢‰d‰¢¢d‰d¢‰d¢d‰‰‰‰‰¢‰‰‰‰‰p‰‰¢‰d”¢d‰‰”¢¢dd¢¢¢¢¢d”¢¢¢¢¢¢d¢¢¢d¢‰d¢d¢¢¢¢¢¢‘¢‘¢‘p¢¢g¢¢¢¢‰¢¢¢p¢¢¢¢g¢g¢¢¢¢¢¢¢”¢”¢”¢”””¢¢d¢¢¢‰‰¢¢¢¢‰‰‰¢‰¢¢¢‰¢¢‰‰¢¢¢¢¢¢‰p‰pp‰p¢p‰¢¢‰¢¢d¢¢‰p‰¢¢‰‰¢¢¢¢‘‰‘‰‘¢d‘¢‘¢‘¢¢¢¢¢‘¢¢¢¢‰¢‘¢p‘d¢g¢¢¢¢‰¢‰¢‰¢‰¢¢¢”g¢¢¢¢d¢¢¢¢”¢¢”¢”¢¢¢‰¢‰‰‰‰‰‰‰‰‰‰‰¢‰‰‰¢‰‰‰‰‰‰d¢¢‰‰p‰p‰p‰p‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‘‰‰p‰p‰p‰p‰‰‰p‰‰p‰‰‰p‰p‰‰p‰p‰p›hdd‰d‰‰‰hh”dd¢dddhd‰‰d¢¢¢‰‰‰‰d¢d¢¢‰‰›‰p‰pp›‰``uuvžaa©a©c©©©©b©©¸ª­¸òn¸ª­nn­ªn­­nª­nnn­ônnn­nnnônnnnônnnnnnc¸ônnôn¸cnnnn¸n­õ,"[""["["[["[""["!["!["!["!![![![!![![![!!![[[!!![![!![![$99MQóôôôôôôôôôôôôôôôóQE]]2$$!$ $ $! $!$! ! $ $ $!$!$ $ $ $ $ $ $ $ AD $ $ $ $ MóóóóóóóóóóóóóóEQQ]E]E]]]]]9]9]E]E]E9]99E]9E9999E99999E99=99=E999=999=9=9=9===E==9======89!["[[""!"!"[[["["["Eöh`››‹††`››`›››˜›†›˜††››†›››†››†›††‰h‰››†‰›››††›››ph››h›‰‰‰‰†›††‰‰p‰‰‰‰‰‰‰¢¢¢¢d”¢¢¢¢¢‰¢‰d‰dd¢¢‰‰‰‰p‰p‰pp†p‰p‰p›p‰p‰‰p‰‰‰p‰p‰‰¢¢p‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰d¢d¢dd¢d¢‰¢¢p¢¢‘¢¢¢‘‰¢‰¢¢¢¢¢‰‘¢‘¢‰p‰p‰p‰p‰‰p‰pp‰¢¢¢¢g¢¢¢‘¢‘¢‘¢‘¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢g¢“¢“¢¢¢¢¢¢‘¢‘¢“¢¢¢¢¢¢¢¢¢‰¢‰‰pd¢‰¢p‰‘¢¢g¢¢‘¢¢‰d‰d‰d¢g¢g¢¢¢¢¢¢¢¢kek‘¢¢¢¢¢¢¢¢g¢‰¢p¢‘“¢g¢““g””””g”g”””g¢ggg“gggg””g¢¢‘¢¢¢‘‘¢‘¢¢‘¢p¢¢‘¢¢‘¢¢¢¢‘¢g¢¢¢g¢‘¢¢¢¢‘¢¢¢‰d¢¢‰¢¢¢‰¢‰¢‰‰d‰dddd¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢¢¢¢¢¢¢‘¢¢g¢‰p‰ppp‰¢p¢‘‰pp‰¢¢g¢g¢g¢¢¢‘¢‘¢¢¢¢¢g¢¢¢¢¢¢¢“¢““¢g¢‘gg¢““g¢“¢¢¢¢®¤‘‰‰‰¢‰¢‰¢¢‘¢p¢p‰p¢‘‰‘¢pp¢p¢¢g¢¢¢¢¢¢d¢¢¢¢¢¢¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢“¢‰¢d¢p‰‰¢p¢¢¢¢¢‰d¢¢dd¢¢¢‰d¢¢¢¢g¢g¢¢¢d¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢‘¢¢p¢‰‘¢¢¢¢¢g¢¢¢¢¢¢¢‘¢¢¢¢¢¢¢¢¢d¢¢¢¢d¢‰¢¢dg¢¢‰dg¢¢¢¢¢¢¢¢‘¢¢¢¢“¢¢¢¢¢¢‘¢¢“¢¢¢¢ppp¢¢p‰‘‘kea¢g¢¢gg¢g¢¢¢‘¢‘¢¢‘¢¢¢“¢¢¢¢“¢¢“¢g¢‘¢¢g¢g¢g¢‘¢¢¢¢¢¢¢d¢¢¢¢‘¢¢‘¢¢¢¢¢d‰‰‰d¢‰¢‰¢¢¢‰d¢d¢ddg¢¢¢¢¢p¢¢‘¢¢¢p¢¢¢¢¢¢‰¢‘¢¢¢‘‰‰pp›p‰p‰p‰pp‰d¢¢¢¢¢d¢‰p¢‘‰‘‰p‰¢‰¢¢‰¢‰‰‰‰‘¢‰‰¢¢‰¢¢¢‰¢‰‰‰‰‰¢‰p‰‰‰‰‰‰p‰p‰hh‰h‰‰‰‰‰‰ppp‰‰‰‰p‰‰‰‰‰‰h‰‰‰‰‰‰›‰‰‰‰‰p›‰›p‰››p›p‰‰‰›†›†››p››h‰‰‰‰‰‰‰‰‰‰‰‰‰›‰p‰h‰h‰‰‰‰‰h››†››››˜›‹††˜˜†˜f˜›`›`›‹`õ9[""[["["["["!["!["!["!["!["!!!!!["!!!!![![!!![![![!![!!$!!!![$$99EQóôôôôôôôôôôôôôôóóQE]]]$! !! $!$! ! ! ! $ $ $ $ $ $ $Dñ- $ $ $ $ $ $ $ $ $ $óóóóóóóóóóóóóóóóôóóóóóóôóôôóôôôôôôôôôôôôôôôôôôôôôôôôôôôô­ô­ôôõõôõôõõõôõõõõõõõõõõõõõõõõõõõ9"[!!"[[[""[!"!"["['´ô››†`†››†˜˜˜†˜f›˜››››`†›››†`†˜f›f‹†›†›†›†˜›†›†›†††›††p›†p†‰†›‰‰‰‰h‰‰h››‰hhhh‰›››dvdddddd‰d‰dddd‰‰‰‰‰‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰¢d‰¢d‰¢¢d‰‰p‰p¢‰¢¢d¢‰¢‰‰ppppp‰p‰¢¢‰‰¢”d¢¢d¢dd¢‰‰‰¢d¢¢¢d¢pd‰‘¢¢‰¢¢d‰¢¢‰‰¢¢‰‰‰‰p‰‰‰¢‰‰‰‰¢d‰¢‰‰‰¢d‰‰‰¢d¢dp¢g”gg”g¢g¢g¢g¢¢g¢ggg”g””d¢g¢g¢p¢‘¢ppp‰ppp¢‰¢¢¢dp‰¢¢¢dp‰pp‰p¢p¢‰¢p¢p¢‘¢¢‘§ù·‘‰‘¢‘¢‘¢‘¢¢‘¢g””dg¢¢¢d¢d‰d‰‰‰pd”””””¢”””¢¢”d¢”d¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢gg”d””g¢gg¢d¢¢¢‘¢g¢¢g”¢¢¢¢¢p‰pp¢‘¢¢¢‘¢¢¢”¢”¢g¢g¢¢d¢g”g¢g¢g¢¢¢‘¢¢¢¢¢¢‘¢¢¢¢¢¢¢‰¢‰¢¢‰¢d¢‰‰¢¢d¢p¢d¢d¢¢d¢¢¢¢¢¢p¢”g¢gg¢g¢g”¢g¢g¢¢gg¢g””¤ø¢¢¢¢‘¢‘¢¢‘¢¢¢¢¢¢“¢¢¢¢‰¢¢¢¢¢g¢¢g”d””¢gggg¢¢d¢””d”¢g¢¢¢¢‘¢¢g¢¢¢¢¢¢”¢¢¢¢¢d¢‰‰¢¢¢¢¢¢¢”d¢¢¢¢¢”d”¢””¢¢””d¢¢¢¢‘¢¢¢gg¢g¢g¢g¢¢g¢g”g”¢¢¢g¢¢p¢¢¢¢g¢gg¢¢¢d¢‰pppp¢‘¢¢¢¢d¢g¢¢”g¢g¢¢¢¢g”g¢g¢g¢¢¢‘¢¢¢¢¢¢d‘¢¢¢¢¢¢¢‰‰‰vù ‰‰¢d‰‰¢‰p¢‰¢d¢¢d¢¢¢¢¢d‘¢gg¢gg¢¢g¢g¢g¢¢¢¢¢¢g¢”g”¢g¢¢gdd¢¢‘¢¢¢¢g¢¢¢¢‰p‰ppp‰p‰¢¢‰¢¢¢”d¢gd¢¢¢d‰d¢”d¢gd¢d¢p¢¢‰¢¢¢‰‰‘‰‰¢‰¢‰‰‰‰‰‰p‰‰p‰‰‰‰‰p‰‰‰‰‰‰‰‰‰‰‰‰‰p‰¢¢¢d¢¢¢dd¢d¢d‰d‰‰p¢‰¢d¢¢‰‰‰‰‰‰‰‰p‰p†‰††††›p‰››h‰†‰›‰††››††›†›p›†p›†›p›‰†††›††‰††›††‰†›p›‰‰‰‰‰›››››h›h›`››d‰dh‰d‰h‰hhhhh›››››››`›`›››››`›››››››hh‰nF[[["!"[!"[![!"[["[["[[![[![[!"[!![[!"[!![![![!!!!!![!!!!!!!!!!!!!!! $29EóôôóôóôóóôôóôóôóóóQE]]2$ $ $ $ $ $!$ $ $ $ $ $ $ $ Að2 $ $ $ ! $QóQóóóóóóóóóóóóóóóóóóóôóóóóôóóóóóóôóôóôôôôôôôôôôôôôôôôõôôôôôôôôõôõôôôõôôõôôôôõõõõõõõõõõõõô![!"[!!!"[[!"["[!"!Eö››f›†›˜›‹›†››››`››†›†››hhhh‰›hh›‰››››h›hh‰h‰‰‰dh‰h‰›h›†›†›†›†›hhhhh››‰h‰‰‰‰›h›hdddddd‰ddd¢d‰‰‰‰‰‰‰‰‰‰‰‰‰‰›‰›‰‰‰‰‰‰‰‰d‰‰d‰¢‰d‰‰‰p‰p‰ppp‰‰‰‰¢‰p‰‰‰‰‰‰‰‰p‰p‰‰‰‰d¢‰‰¢‰p‰p‰‰‰‰d‰‘‰‰pp‰‰‘¢d‰p¢d¢¢d‰‰¢¢¢¢‰‘‰p‰p‰pp‰p‰p¢p‰p‰p¢¢‰pp‰‰¢‰d‰d‰dd¢”d¢¢”d‰d‰‰‰‰‰d‰¢¢¢¢d¢¢‘d‘¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢”g”¢¢“¢¢¢¢¢¢¢¢¢¢g¢”¢”g”뮢g¢g¢¢¢¢p¢¢p¢¢dd‰¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢d”d”d”dd””d¢”d‰¢¢d¢”d¢¢¢¢d¢d¢¢¢¢¢gd¢d¢¢dd¢¢d¢¢¢¢‘¢¢‘¢‘‰‰‰¢¢g¢¢¢¢¢¢¢¢¢¢‘‰¢¢¢¢gd¢¢¢¢d¢‘d‰‰‰d‰¢d‘dp¢p¢g¢‘¢d¢g¢¢¢¢d¢¢¢¢¢‘¢‘‰‘‰p¢p¢¢¢‘‰¢p¢p¢¢dp‰p¢”d¢”‰¢¢¢”d”d¢¢d¢d¢¢¢ddd¤ù¢g¢g¢¢¢‘¢¢‘‘¢¢¢g¢g¢d¢¢¢¢g¢¢¢¢¢d¢”d¢”d¢”dg¢”dd¢gd¢g¢g¢¢¢g¢¢gd¢g¢¢d¢¢d‰¢¢‰¢‰‰‰‰‰‰‰h†‰‰‰‰‰‰‰‰h‰‰d¢dhd¢”dggd¢¢”d”””d”d¢¢¢¢¢d¢¢d¢gd¢¢¢¢‘¢‘¢‘‘‰¢d¢¢¢¢¢¢¢¢¢¢¢¢¢‘‰¢¢¢g¢d¢¢¢gd‘‰‰‰‰¢d‰¢d‘d‰‘‘¢¢‘¢¢¢¢¢”d¢d¢¢¢¢“ø®¢‘‰‘¢p¢¢‰‘‰‘‰¢p¢‰¢¢dp‰‰‰¢¢”d¢¢d¢”d”dg¢gd¢d‰¢d‰d‰¢¢¢¢¢‘‰‘d¢‘‘‰¢d¢¢¢¢¢‰¢¢¢¢¢¢¢dp‰¢d¢¢d¢¢¢d¢p‰¢d‰‰‰‰‰d‘‰pp‰‘d¢p‰p¢¢¢d¢‰‰‰‰¢‰‰‰p‰‰pp‰p‰‰‰p‰p‰‰p‰p‰p‰†‰pd¢d¢dd‰‰d¢d¢d¢‰‰‰‰‰‰‰‰d‰‰‰¢d‰p‰p‰p‰‰‰‰‰‰‰‰›‰‰‰p‰‰‰d‰‰‰‰‰‰‰‰‰›h‰‰‰‰‰‰‰‰‰d¢‰‰‰‰‰‰‰†›†››†›‰hh›››h›hh›››››‰››h‰h‰hh‰h‰‰‰h››h›››hh››››†`›f›†`›`›†`››`›h­=!"["[!"[!"!"[!![!![!!"!![!!"[![!!![$![!![!!![![![!!!$!$!$!$!$!!!$!$$!!!!$$]]EQôóóóôóóóóóóóóóóôóQE]]2-$ ! ! $ $ $ $ $ $ ID $ $ $ $ $ $ $ òMòEòòQòQQQQ^EEòQQQóMòEQóóóQóóóóóòóEóóòòME^EóòòóòóóòEóóòMMóQQóóòQòòQóóôMQòóMóóQQóôóQMôóQô,!![[!["[[!!["!["!['õnf˜˜˜˜˜˜˜˜†`›`›†›†`›†›†›hhhhh‰›hhhhph›hh‰‰hhhhh‰hh›h›‰hh›››h››†›››››†›††›†›››‰d‰‰‰‰‰‰u‰d¢ud‰‰h‰‰‰‰‰‰‰‰‰‰‰‰‰‰p›p‰p›†›‰›‰‰‰‰‰‰‰†‰†††‰‰‰‰‰‰‰‰d‰‰‰‰‰p‰‰p‰‰‰p‰‰‰‰‰‰h‰‰‰p‰p‰‰‰p‰p‰‰p‰¢‰p‰‰¢‰¢‰‰p‰‰‰‰p‰‰p¢‰‰‰p¢¢¢¢‰¢‰p¢‰‰¢¢¢‘‰‘¢‰‰¢p‰‰¢‰¢‰‰‰‰‰¢dd‰¢p‰p‰¢p¢‰‘pd‰p‰pp‰p¢‰p‰¢¢¢¢‘¢¢¢¢¢¢¢ddd”””g”g¢gg¢g¢”¢gd”dd”ù뢢¢dg¢¢¢¢¢¢¢p‰¢‰‰‰‰‰‰‰‰‰¢‰‰‰”d””vd¢d”d””d”¢dd¢¢”¢”¢d¢¢dg¢¢¢¢d‘¢‰‰‰¢‰‰¢‰¢¢d¢¢‰p‰ppp‰g¢¢¢¢¢g¢d¢¢¢¢p¢‰ddd‰¢pddd‰p‰dd‰¢p‰¢p‰‘¢p‰‘‰¢¢¢¢‰d¢¢‘¢‰p‰‰‰‰p‰d‘¢¢‰p¢¢¢¢¢‘‰‘p¢‰‘¢¢‘¢¢‘¢¢¢‰‰p¢d‰¢‰d‰‰‰‰¢¢¢¢p¢p‰‰¢¢‘뮢¢¢d¢p‰d¢‰‰¢d¢‰¢¢d¢‰‘‰p‰‰dp‰‰p‰p‰‰‰‰‰‰‰‰d‰‰¢¢d‰¢d¢dd”d”d””¢¢¢d¢d¢d¢‰d¢¢¢¢¢‘‰‘¢p¢‘¢p¢p¢pp‰¢¢¢¢¢¢¢¢¢d‰¢dd”¢d‰‰‰h‰¢d¢d‰p‰‰¢‰‰¢p‰¢p‰pp‰pdgd¢¢¢¢d¢g¢¢¢¢‰¢d‰dd‰¢p‰d‰‰¢d‰dp¢‰p¢p‰p¢p‰‘‰¢¢d‰g¢¢¢‘d‰‰p‰‰p‰p¢¢¢¤ø¢¢p¢¢¢¢p¢¢‘‰¢‘¢¢‘¢‘¢‰¢p‰‰‰‰¢d‰‰d‰‰‰¢d¢‰p‰‰p‰‰¢‰ppdp‰p‰p‰p‰g¢d¢¢d¢d¢‰¢‰‰p‰dp‰‰‰‰‰‰‰‰‰‰‰p‰p‰‰p‰p‰‘‰pp‰‰¢¢‰‰‰‰¢‰‰‰p‰‰‰p‰p‰p¢p‰‰pp‰‰p‰p‰p‰p‰‰p‰¢‰‰‰p‰‰‰†‰‰‰‰‰‰‰‰‰‰‰‰‰‰p‰p›†‰‰‰p‰†‰p†›††††›††›‰‰‰‰p‰p‰›‰‰‰‰‰dddd‰‰‰‰‰‰‰‰‰‰h‰‰‰‰‰d‰h‰h›››h†››†›†›†››f›f†›†››†›˜›hhhhhhhhhhhhhh››››hh›h›h›››†››`›†›†˜‹†˜˜›‹`¸ô'[!["[["![[[!["!![!![![[!![[![![![!!!![!!![!!!!!!!$!!!!!!!!!!$!$!!!! $ ! $! ! -$]]]QóóóóóóóóóóóóóóóóóQEM]<2$ $ $ $ $ $ $ $ Dð2 $ $ $ $ $ ! $ $ ! ! !!! ! ! !! $$!! !!!!!!! !!!! !!!!!!!!$!![!!![!!!![![!![!!![![["!![![!!["!["!["!9ö`›`›‹`›`›`›`†`†‹f›†››`f›f››››››†›†››†›††››››››››››››†›†‰›†`†›†`››†›˜›˜†›†‹›†›hh‰dudud‰d‰dd‰‰h‰‰‰d‰‰d‰‰‰h‰›p››‰‰›‰›‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰d¢d¢d”¢¢¢d¢¢‰‰‰‰‰‰‰‰‰‰p‰‰‰‰p‰‰‰‰‰‰‰†‰p‰‰‰p‰‰‰‰‰‰‰ddd‰‰‰‰‰‰‰‰‰p‰‰¢‰¢¢d¢¢¢¢¢‰¢¢d¢p‰p‰pp‰p‰p‰p‰p‰pp‰p‰‰‰‰‰pp‰p‰‰p‰pp‰¢¢¢¢¢‰‰‰¢‰‰¢‰¢a¤a‰dd¢¢dp‰‰¢¢d†‰‰‰‰d¢‰‰dp‰‰‰‰‰‰¢žùed‰d¢‰d¢dp‰‰‰‰‰‰‰‰‰‰pp‰p‰p‰p‰‰dddd””v¢d”d”d”¢¢¢¢ddd”¢dg¢‰‰ddp¢‰d¢‰‰‰d¢¢¢d¢¢¢¢¢¢¢‰‰‰g¢d”g””d”””d”g¢¢¢¢¢¢‰¢‰¢¢¢‰¢‰¢¢‘‰¢¢‰‰p‰‰‰¢‰p‰‰dpd¢¢d¢d¢¢¢¢¢¢‰¢‘¢d¢d¢¢¢¢d”¢¢d¢¢¢d¢p‰¢p‰p‰pp‘‰p‰‘‰ppp¢‰‰¢p‰p‰p‰‰pppp¤ë¢dd¢‰‰¢‰‰d¢d¢¢‘‰d¢¢¢d¢¢¢‰‘‰‰‘‰¢‰¢¢‰‘‰¢‰¢¢¢p‰‰‰‰¢‰¢‰‰d¢‰d‰dd¢d¢d‰¢d¢‰‰‰p‰‰p‰‰‰‰‰‰‰‰‰‰‰¢‰‰¢‰p‰d‰dg¢¢¢¢d¢¢‰‰‰‰‰‰d¢d¢‰¢‰¢d¢p‰‘‰d¢¢‰¢¢‰‰‰¢d”¢”d”””d”d”g¢¢¢¢¢¢¢‰d¢¢¢¢p‰‰¢¢‰p¢‰‰p‰p‰‰¢‰p‰‘‰‰‰dd¢d¢¢‰¢¢¢‰‰‰pd·økd¢¢¢¢d¢¢d¢¢‘d‰pdppp‰p‰‘‰pp‰ppp›¤a¢‰‰‰pp‰p‰pppp‰‰¢¢‰¢‰‰p‰¢dg¢d”¢”¢g”d”¢¢¢¢‰¢‰p‰‰‰¢p‰‰‰‰‰‰¢p‰‰‰p‰‰‰‰‰p‰‰‰p‰‰‰d‰‰‰‰‰‰‰‰‰p‰p‰‰‰‰‰‰‰¢‰‰‰‰‰‰‰‰‰†pppp†›p†‰†‰p‰††††‰‰›‰‰†›†›†‰††††›‰‰‰‰p›‰›‰†‰‰‰‰†›†›†››‰†››››‰‰››h››phph†h››‰›hh››››†››†›†››†››`›‹›f››‹›˜‹˜†`˜†`›h›hu‰u‰hh‰h‰hhh›`›h›h›h›h›`†`›†‹`›`›‹`›`››hõ9!"![!!!["!![![["!["![!!![!![!!![!![![!![$!!$!$!$!!$!$!$!$!$!! ! $ $!!$!$! $!$!!$ $ $2]]EQóóóóóóóóóóóóóóóóQóQE $ AD $ $ $ $ $ $ $ $ $ $ $ $! !$!$!$ !$ ! !!! $!$!! !$!!$ $!$!$!$!$!$!$!$!$!!!!!!$!!!$[!!!![!![![!!!![[!![![![![![[![[öô†`››†›f››‹›f›‹†˜‹˜˜˜˜˜›˜`›`†`†››†`†››†››†››†›†`†‹††›†›†‹†›†››››†›››››‹›‹†›†‹›››››››››‰›h››››h›h››››`›˜›†›†›†‰›†‰›†››h‰›››‰ddd¢d‰‰‰›‰‰‰‰‰›hddd‰d‰‰‰‰hp‰‰›‰‰‰‰†›‰†‰p‰†p‰‰p‰‰‰‰‰‰‰p‰‰‰¢¢¢¢¢”d¢d¢¢¢¢¢¢¢¢¢¢d¢”d”d”d¢d¢‰‰‰‰‰p‰›p‰p‰‰‰‰p‰‰p‰‰‰‰p‰‰‰‰‰‰¢‰‰‰‰‰dd¢d¢d¢¢‰¢d‰¢deø‰‰pp†‰p‰‰p‰‰‰¢d¢¢¢‘‰¢‘¢¢¢¢¢¢‰‰paøª‰p‰p‰p‰‰‰‰p‰¢¢¢‰¢‘‰¢‰‰‰‰‰‰‰‰‰‰‰¢‰‰h‰¢¢d‰‰‰h‰dd‰¢‰‰h†‰†‰‰p‰p‰‰‰‰p‰‰‰¢‰‰d‰‰¢””d”¢g¢¢‰‰¢d‰‰hd‰hddddd¢dd‰p¢‰‰¢¢‰¢‰p‰‰‰‘‰p‰p¢¢¢¢¢¢¢¢¢¢¢¢¢”¢”¢”dgd¢¢¢¢g¢¢¢¢”d”d”d””d¢”d¢d¢¢dp‰p‰‰‰‰‰‰p‰p‰‰‰‰‰‘‰‰‰p¢‰‰¢¢‰‰‰¤®d¢¢‰‰‰p‰‰p‰‰‰p‰‰‰‰‰d‰‰p‰‰‰‰¢‰¢¢¢”d¢‰‰¢¢¢¢‰¢¢p‰¢¢¢‰¢¢¢¢d¢¢¢‰¢‰¢‰¢‰‰‰¢‰¢‰‰p‰‰¢‰¢‰¢‰‰‰‰¢‰‰‰‰p‰‰¢p‰‰dd¢g¢¢”d¢¢¢”d¢”d¢”d”d¢¢¢gd¢¢””””g¢¢¢d¢‰dddd‰‰d‰dd‰ddddd‰p‰‰¢¢‰‰‰‰p‰p‰¢‰‘¢‰‘¢¢¢¢‰¢¢¢¢¢¢¢”””¢”g¢¢¢g¢¢g¢aùe¢”d”d””d¢”dd¢¢¢¢‰‰‰p‰p‰‰‰¢‰‰‰‰¢÷e‰¢‰p‰‰‰‰‰‰‰‰‰‰¢”””d¢¢¢¢d‰‰d¢dd‰dd‰dddddd‰‰‰‰‰¢‰¢‰‰p‰p‰‰p‰‰p‰p‰¢¢¢‰‰¢‰¢‰‰¢d¢¢”d¢¢¢d‰‰¢¢d¢¢d¢¢¢¢d¢”d¢d¢‰‰‰‰‰‰››‰p››‰‰†›‰›‰‰›‰†‰p›‰†‰‰›‰›‰››p‰‰‰‰‰‰‰‰‰‰‰››h›››†›††›††›†›h›†›p›d‰››p‰‰‰‰†h‰››†›†›†››†›†›`›˜›†››››†›†›››`››‹†›‹››››`››››››››`›››`›`‹˜˜o˜˜‹˜˜‹†›˜›f›†‹›˜``…ô,![!"[[![[!![!![[![[![[!![!!![!!![!!!!$!!!$!!!!!$!!!!!!!! !$ [!$!!!$ ! ! $! !$ $ $ ! $ $2ddQVQµµµµ¥¥Šµ¥¥µµµQVQQdd$Ì$%$&&---&••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––Ž••----¼y4v}}}z‚‚‚‚rrrr‹‹‹zŠy‹‹r‹rrrr‚‚‚‚zv88888PPPtŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ì‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v”†Š†ŠŠŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠŠŠŠ†‡”wyvv}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹rrrr‚vvy‡Š††ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrr‚‚‚‚‚‚‚‚‚y†ŠŠŠŠŠ††ŠŠ†Š†ŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š††Š†Š†Š†ŠŠŠŠ†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥µQ$3c8888888888888888888888888888‚Š}888888888888888888888‹‹rrz}v4¼--&•Ž–––––––––––––––––––––––––––––––––––––––Ž‡Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••---$Ú$ddµ§§§§§§§§§§§§§§§§§§§§§§dŠd§§§§§§§§§§§§§§§§§§§§§¥¥VQd)Ú--&-&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†††––––––––––––––––––––––––––––––––––––––––Ž•--‘xy}}zrr‹8888888888888888888888y†r8888888888888888888888888888c3)dd¥¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}vv”†Š††Š†Š†Š†Š†Š†Š††Š†Š†ŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†††ŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v}}vvvvvvvvywywywww””””””‡‡‡††ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†Š††ŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-)§§§§§§§§§§§§§§§§§§§§§§§§§§¥Qd)33yz‚r‹8888888888888888888888888888888‡‡88888888888888888888888888888888r‚}yy--&•Ž––––––––––––––––––––––––––––––––––•†Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••-‘-Ì$dV¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Qd$Ì---••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠŽ––––––––––––––––––––––––––––––––––Ž•&-‡”vzr‹8888888888888888888888888888888‹†‡‹888888888888888888888888888888‹r‚}x33$d¥¥§§§§§§§§§§§§§§§§§§§§§§§§§§$Ú¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}vy”ŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†††Š†ŠŠŠŠ††Š†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Šy‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†ŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†Š†Š††Š††Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ††ŠŠŠŠ†ŠŠŠ†ŠŠŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§)-¥§§§§§§§§§§§§§§§§§§§§ŸœPI88‹rr88888888888888888888888888888888888888yŠ‚88888888888888888888888888888888888888‹‚}v‡‘&•–––––––––––––––––––––––––––––––‡††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡&dQµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†)§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µQd$---•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††‘–––––––––––––––––––––––––––––––•-‘‡y}r‹88888888888888888888888888888888888888zŠv8888888888888888888888888888888888888‹‹‚‹855Pœ§§§§§§§§§§§§§§§§§§§§§µ‡$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}}vy”†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†ŠŠŠ†Š††Š†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠŠŠ”v‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†Š††Š†Š†ŠŠ†Š††Š†Š†ŠŠ††ŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠ††Š†Š†ŠŠ††Š†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š††ŠŠ††ŠŠ†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†Ú§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸœP888888888888888888888888888888888888888888888888rŠy88888888888888888888888888888888888888888888r}y-‘&•–––––––––––––––––––––––––––Ž†Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‘‡-dQ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Q$Ú‘-&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†Ž–––––––––––––––––––––––––––Ž-‘‡yz‹88888888888888888888888888888888888888888888”†‹8888888888888888888888888888888888888888888888885œ §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}}vyy””‡††ŠŠ††ŠŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†Š‡”y}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠ††Š†ŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠŠŠ††Š††‡‡‡”””””””yywyyyyyyv‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Ú]888888888888888888888888888888888888888888888888888”†8888888888888888888888888888888888888888888888888rv‡‡-•–––––––––––––––––––––––––‡††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘‡-d¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µÚ‡-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š‡–––––––––––––––––––––––––Ž-‡‡}r888888888888888888888888888888888888888888888888‹†y888888888888888888888888888888888888888888888888888c)d¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ì†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚‚}v}yyyy”””””””””””””””yv}v}‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ†Š†‡‡‡‡”””””””””yyyyyyvyvvv}}}}}}}‚‚}‚‚‚‚rrr‚rrrrrrrr‹rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†d§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥dÚ-zr8888888888888888888888888888888888888888888888888888v†‚8888888888888888888888888888888888888888888888888888rv‡†&Ž––––––––––––––––––––––-Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡‡)Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q̇‡&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†-––––––––––––––––––––––Ž-†Š}‹8888888888888888888888888888888888888888888888888888zŠz888888888888888888888888888888888888888888888888888‹‚v-Úd¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y‡&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚rrrrrrrrr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸV$‡v‚‹888888888888888888888888888888888888888888888888888888r†”8888888888888888888888888888888888888888888888888888888‹z”†&•––––––––––––––––––––&ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡‡d¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µd‡†&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š&––––––––––––––––––––Ž-†”‚88888888888888888888888888888888888888888888888888888888y†‹888888888888888888888888888888888888888888888888888888‹‚y-QŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†‡Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§œ58rr8888888888888888888888888888888888888888888888888888888888‡†88888888888888888888888888888888888888888888888888888888888z‡†-Ž––––––––––––––––––3Š†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†ÚQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&ŠŠ•––––––––––––––––––Ž-†‡‚8888888888888888888888888888888888888888888888888888888888‹†y8888888888888888888888888888888888888888888888888888888888rr85œŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§P888888888888888888888888888888888888888888888888888888888888888zŠz888888888888888888888888888888888888888888888888888888888888‹y†‡•–––––––––––––––––ŽŠŠ‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-ŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ-†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†Š2–––––––––––––––––Ž††y8888888888888888888888888888888888888888888888888888888888888}Š‚888888888888888888888888888888888888888888888888888888888888888tž§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ88888888888888888888888888888888888888888888888888888888888888888‹Šy888888888888888888888888888888888888888888888888888888888888888}Š†3––––––––––––––––Ž†Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š&Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µQdddc33c33-Š-333333$ddQµ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-Š‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š†–––––––––––––––––Ž†Š‚888888888888888888888888888888888888888888888888888888888888888‡†‹88888888888888888888888888888888888888888888888888888888888888885œŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ì†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‘‚88888888888888888888888888888888888888888888888888888888888888888yŠ‹8888888888888888888888888888888888888888888888888888888888888888}††Ž–––––––––––––––ŽŠ†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥dÌ3xz‚r‹88888888zŠ}88888888‹r‚zx&$dµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†Š•–––––––––––––––Ž†Š}8888888888888888888888888888888888888888888888888888888888888888‚†y88888888888888888888888888888888888888888888888888888888888888888}‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv‡-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”‡µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ†‡‚88888888888888888888888888888888888888888888888888888888888888888zŠ}888888888888888888888888888888888888888888888888888888888888888888‡Š-–––––––––––––––-†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§QÚ‘}r‹88888888888888zŠ}888888888888888‚}”)d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡†-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠ&–––––––––––––––-Š‡888888888888888888888888888888888888888888888888888888888888888888yŠ‚88888888888888888888888888888888888888888888888888888888888888888‚‡†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡-¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡}888888888888888888888888888888888888888888888888888888888888888888‹Š‡8888888888888888888888888888888888888888888888888888888888888888888v††–––––––––––––––-Š†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†}‹888888888888888888zŠ}888888888888888888r}‡)¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††-––––––––––––––Ž††}8888888888888888888888888888888888888888888888888888888888888888888‡‡‹888888888888888888888888888888888888888888888888888888888888888888}†-µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡-•––––––––––––––––––––––––––––––––––––––––––––––––––––––-†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§yy‹8888888888888888888888888888888888888888888888888888888888888888888”Šr8888888888888888888888888888888888888888888888888888888888888888888‚Š†–––––––––––––––†Š†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠy888888888888888888888}Š}88888888888888888888‹yŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‡––––––––––––––ŽŠŠr8888888888888888888888888888888888888888888888888888888888888888888‚Šy8888888888888888888888888888888888888888888888888888888888888888888‹yx§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ú†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†3–––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Šd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§P8888888888888888888888888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888888888888888888v††––––––––––––––3†Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š&§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠy8888888888888888888888zŠ}8888888888888888888888xŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÚŠ‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š†Ž––––––––––––––†Šv88888888888888888888888888888888888888888888888888888888888888888888}Š‚8888888888888888888888888888888888888888888888888888888888888888888888t§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§P88888888888888888888888888888888888888888888888888888888888888888888888††888888888888888888888888888888888888888888888888888888888888888888888†Š-––––––––––––––-ŠŠ3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š)§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Š‚8888888888888888888888}†}8888888888888888888888‚Š-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†-––––––––––––––-†‡‹88888888888888888888888888888888888888888888888888888888888888888888‡†‹8888888888888888888888888888888888888888888888888888888888888888888888œ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y‡-Ž––––––––––––––––––––––––––––––––––––––––––––Ž†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ‹8888888888888888888888888888888888888888888888888888888888888888888888yŠr88888888888888888888888888888888888888888888888888888888888888888888yŠ†––––––––––––––Ž††‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†y8888888888888888888888zŠ}8888888888888888888888y†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠŠ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š†3–––––––––––––Ž‡Š}88888888888888888888888888888888888888888888888888888888888888888888‚Š}88888888888888888888888888888888888888888888888888888888888888888888888§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‡•–––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡-¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†‡88888888888888888888888888888888888888888888888888888888888888888888‚†y88888888888888888888888888888888888888888888888888888888888888888888vŠ†Ž––––––––––––––†Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d‡”r88888888888888888888zŠ}88888888888888888888‹”†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‘––––––––––––––Ž‡Šz88888888888888888888888888888888888888888888888888888888888888888888y†r88888888888888888888888888888888888888888888888888888888888888888888‡†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†-•––––––––––––––––––––––––––––––––––––––•†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚ŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Šy88888888888888888888888888888888888888888888888888888888888888888888††‹8888888888888888888888888888888888888888888888888888888888888888888yŠ†Ž––––––––––––––•Š†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Šµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿd‡”‚‹88888888888888888}†v888888888888888888ry‡d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•––––––––––––––Ž‡Š}8888888888888888888888888888888888888888888888888888888888888888888‹†‡‹8888888888888888888888888888888888888888888888888888888888888888888”Š-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†•–––––––––––––––––––––––––––––––––––Ž‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÚŠ‡8888888888888888888888888888888888888888888888888888888888888888888yŠz888888888888888888888888888888888888888888888888888888888888888888‹‡Š&–––––––––––––––Ž†††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ$‘y}‚‹8888888888888zŠ}88888888888888rz”‘µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†Ž––––––––––––––Ž‘†”‹888888888888888888888888888888888888888888888888888888888888888888zŠz8888888888888888888888888888888888888888888888888888888888888888888ŠŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§)Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•–––––––––––––––––––––––––––––––Ž-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q}‚888888888888888888888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888888888888888‹vŠ‡Ž––––––––––––––––-ŠŠ3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µd)&4v}rr‹888888zŠ}888888‹r‚}vy-ÌdQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†-––––––––––––––––•‡Š}‹88888888888888888888888888888888888888888888888888888888888888888‡†‹888888888888888888888888888888888888888888888888888888888888888888‚}V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry‡&Ž––––––––––––––––––––––––––––Ž†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§I8888888888888888888888888888888888888888888888888888888888888888888††‹888888888888888888888888888888888888888888888888888888888888888‹vŠ‘Ž–––––––––––––––––•††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥µdd)$333-†‘333$)$dQQ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ††-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•––––––––––––––––2•‡†}‹888888888888888888888888888888888888888888888888888888888888888‹†‡8888888888888888888888888888888888888888888888888888888888888888888t§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”†•–––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸI88888888888888888888888888888888888888888888888888888888888888888}Šz88888888888888888888888888888888888888888888888888888888888888‚yŠ‘Ž––––––––––––––––––&ŠŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘ŠÚ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2-†Š•––––––––––––––––––Ž‡‡yr88888888888888888888888888888888888888888888888888888888888888zŠ}88888888888888888888888888888888888888888888888888888888888888888mŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†-Ž––––––––––––––––––––––•†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸP‹r‹888888888888888888888888888888888888888888888888888888888888rŠy888888888888888888888888888888888888888888888888888888888888‹z”†-Ž–––––––––––––––––––•Š†&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ú††•2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š†•–––––––––––––––––––Ž-†y}‹888888888888888888888888888888888888888888888888888888888888‡Š‹888888888888888888888888888888888888888888888888888888888888‹r‹I§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ú†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•–––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d††z‹8888888888888888888888888888888888888888888888888888888888‡†‹888888888888888888888888888888888888888888888888888888888‹v”†&Ž–––––––––––––––––––––&Š†&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†ÚQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§QÚŠ‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•–––––––––––––––––––––Ž-‡y‚‹888888888888888888888888888888888888888888888888888888888r†”88888888888888888888888888888888888888888888888888888888888yŠ†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrr‚‚r‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§††}‹8888888888888888888888888888888888888888888888888888888}Š}8888888888888888888888888888888888888888888888888888888rv”‡&Ž–––––––––––––––––––––––•Š†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†dV§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥$††&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†3–––––––––––––––––––––––•-†y}‹8888888888888888888888888888888888888888888888888888888vŠz8888888888888888888888888888888888888888888888888888888‹v††d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrr‚‚‚‚‚‚‚‚‚‚‚v}vvvvvvvvvywywwwww”””””‡‡‡†††Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†•Ž––––––––––––Ž†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‚‚}vvvywwwywwwwywwwwyvvvv}‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d‘‡r88888888888888888888888888888888888888888888888888888‹Š‡8888888888888888888888888888888888888888888888888888rzy‡-•Ž–––––––––––––––––––––––––•†Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†‘ÌQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µd‡†‘Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘††•–––––––––––––––––––––––––3•-‡v‚‹888888888888888888888888888888888888888888888888888‹‡†‹88888888888888888888888888888888888888888888888888888‚‡-Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rvvvvvvvvvvywwwwy”””””””‡”‡‡††ŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠ”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‡•–––––––––Ž‘†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vyy‡††ŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠ†””yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§P88888888888888888888888888888888888888888888888888888‡Š‹888888888888888888888888888888888888888888888888r}y‡-••–––––––––––––––––––––––––––Ž‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘‡-dµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µd&‡†•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š-Ž–––––––––––––––––––––––––––•&‡‡y}r888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888P §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠŠŠŠ†Š†ŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ††Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†Š††Š†Š†Š††Š†Š††ŠŠ†Š††Š†Š†Š†Š†Š†Š†Š†ŠŠ†ŠŠvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž––––––•†w‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}vw”†ŠŠŠŠŠ†ŠŠŠŠŠ†Š†Š†Š†ŠŠ††Š†Š†Š†Š††Š†Š†Š††Š†Š†Š†Š††Š†ŠŠŠŠŠŠŠŠŠ†”y}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}ŠÌ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ>Q§§§§§§§§§§§§§§§§§§§§§œP5888888888888888888888888888888888888888888888888vŠy88888888888888888888888888888888888888888888‚vyy‘-•Ž––––––––––––––––––––––––––––––Ž†Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡‘dQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‘†‡-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‘•––––––––––––––––––––––––––––––••--yyzr88888888888888888888888888888888888888888888}Š‚8888888888888888888888888888888888888888888888885Pž§§§§§§§§§§§§§§§§§§§§§µd¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ú†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ†Š††Š†Š††Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠ††ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†Š”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•–––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}vw‡ŠŠ†ŠŠŠŠ†Š†Š†Š†Š††ŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠ†Š††Š†Š†Š†ŠŠŠŠŠŠŠŠyvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†‡§§§§§§§§§§§§§§§§§§§§§§§§§§tI3yvr‹88888888888888888888888888888888888888‹Š”88888888888888888888888888888888888888‹‚zvy‡--•Ž––––––––––––––––––––––––––––––––––-Š†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--‡‡-dQ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µQdÚ†‡-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Š†•––––––––––––––––––––––––––––––––––Ž•--yyvzr‹88888888888888888888888888888888888888‡†‹88888888888888888888888888888888888888‹‚v”yItž§§§§§§§§§§§§§§§§§§§§§§§§§µ‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryŠ†Š†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š††ŠŠ††ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ††Š†ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•–†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚}w†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠy‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‡‡V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Vd¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥QdÚ‡”y}‚r‹8888888888888888888888888888888”†r8888888888888888888888888888888r‚z}yy‡-&•Ž––2–––––––––––––––––––––––––––––––––––Ž‘††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–••-‘‡‘Ú$Qµ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VdÌ-‘‡--••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š‘•–––––––––––––––––––––––––––––––––––––ŽŽ•--‡yyv‚r‹8888888888888888888888888888888‚Šy88888888888888888888888888888888r‚zy-‡-dV¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µdQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ††ŠŠ††ŠŠ††ŠŠ††ŠŠŠŠŠ†ŠŠ†‡‡‡””””””yyyyyyyyvvvv}}}}}‚‚‚‚‚‚r‚r‚rrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚}”‡ŠŠŠŠ†Š†ŠŠŠ†ŠŠ†Š†ŠŠ††ŠŠ††ŠŠ††ŠŠ††‡‡””””y””””””‡††Š††ŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠ†y‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Qd)]88‹888888888888888888888888888‚Šy888888888888888888888‹rr‚zvyyy----•3––––––––––––––––––––––––––––––––––––––––––––Ž†Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••--‡‘-)$dQV¥¥§§§§§§§§§§§§§§§§§§§§§Š$§§§§§§§§§§§§§§§§§§§§§§¥QQddÚ&‘‘--••–––––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•––––––––––––––––––––––––––––––––––––––––––––••--‘-‡yyv‚‚r‹‹888888888888888888888”Š‚888888888888888888888888888‹88cÌdQ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†Š††ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ††ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”†ŠŠ†Š†Š†ŠŠ†Š††ŠŠ†Š†ŠŠ†ŠŠŠ††”y}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚‚}vv”‡Š††ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§žœtPP58888r}}z‚‚‚‚rrr‹‹‹‹‹r†Šr‹‹r‹rrrr‚‚‚zv}vyyy‡y‡---••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––-†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•••---‘‘&Ú&Ú$dQQ>QVµ¥µ¥¥¥ÌŠ)¥¥¥µ¥µQQQQ>dd$Ì-Ú&-‘---•••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††•Ž–––––––––––––––––––––––––––––––––––––––––––––2–––––3••--&-yyyyyv}}z‚‚‚‚rrr‹r‹‹‚Š†‹‹‹‹‹‹rrr‚‚‚}}vz‹88885PPtœŸŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‘†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyy”‡Š†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠŠ‡‡”yvv‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv‡ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š‡}‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}”†Š†Š††Š†Š†ŠŠ††ŠŠ††ŠŠŠŠ†Š†Š†Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ)$$$$)$$)$)$$)d))d$$$))$$)$$$$d$)$$)$$d$$d$)ddd$)d$$$$ÌŠ†ŠŠ†Š†Š†Š†Š$$dd)$$)d$$$$$$d$dd$d$$$ŠŠÚdd$$$d$$$d$)d$$d)$$)$d$$)-ŠÚ$$$d$d$d$$$)$$$$dd)$)d$‘-µ§§§§¥µµVVQQdddddŠ†‘--------•••••Ž––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––•†††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––––––33Ž••••----&---‘†‡---&----•••••Ž3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š‡3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3Ž••••--------‘Š†dddddQQµµµŸ¥§§§§§Ì-d)$d)$$)$d$d$$d$$$$$‘Š-d$$)d$d$$$d$ddd$$$$$d-†‡$$d$$$)d$$)$d$$)$)$$$$†Š†ŠŠŠ†Š†ŠŠ†Ú$$)$)$)$$)$d$$$$$$$$$d$$d$$))d$d$$)$$)$$$$$)d$d$d$d$Ú†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr}}}yy”‡†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š††Š†Š†ŠŠŠŠŠŠŠŠŠ†‡”yvv‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv†Š†Š††ŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}”†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†Š††ŠŠŠŠŠŠŠ†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§††Š††Š†ŠŠ†ŠŠV§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§)ŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‘Šµ§§§§§§§§§§§§§§§§§§§QŠ‡–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––&Š-2–––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2•‡Š‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–‡ŠQ§§§§§§§§§§§§§§§§§§§QŠÚŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ‡†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÚŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†Š†Š†Š†ŠŠ†Š‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}vyy”‡Š††ŠŠ††ŠŠ††ŠŠ††Š†ŠŠ†Š†ŠŠ††Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠ‡””yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†Š†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠŠ†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†ŠŠ†Š†ŠŠ††ŠŠ†Š†ŠŠŠ†††Š††Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ†ŠŠ†ŠŠ†ŠŠ†ŠŠV§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§>Š)§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥††§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠ§§§§§§§§§§§§§§§§§§§§††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††§§§§§§§§§§§§§§§§§§§§)Šd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥††¥§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§ÌŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†Š†Š†ŠŠ†ŠŠ††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyy”‡††ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ††Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠ‡”wvv‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†Š†ŠŠŠ†Š†Š†ŠŠŠŠŠ†ŠŠ††y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†ŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠŠ†ŠŠ‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‘§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}yyw”†Š†ŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠŠ””wyv}‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠ†Š††ŠŠ†ŠŠŠ††Š†ŠŠ†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†Š††r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†Ú§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§VŠ†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}v”Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†Š†Š††ŠŠ†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠŠ††”yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†ŠŠ†ŠŠŠŠŠ†ŠŠ††ŠŠŠ†Š†Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†Š†ŠŠ†ŠŠ†Š†Š††ŠŠŠ†ŠŠŠ‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ$§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†††3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§)Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrrr‚‚‚‚‚‚‚‚‚‚}}}}vvvvvvvvvywywyw”‡†ŠŠ†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š†ŠŠŠŠ‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠ†ŠŠ†Š††ŠŠ†ŠŠ†Š†Š†Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ††ŠŠ†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‘))$))))))))))$)))$)))))$)))))))))))))))))))))))))$)$)))))$)))$))))))$))))))))))))))))))$)$$$$$$$$$$$$))))))))$))))))$)))$))))))$))))))))))))$)))))$)))))))))))))))))$)))$)))$)))))))$)))))))))$))))))))))$))))))$))))$))))))))))))))))))))))))))))&†&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†%))))))))))))))))$))))))))))))$)))$))))))$)))$)))$)))))$))))))))))))$))))))))))))))))))))))))))))))$)))))))))$)))$)))$)))))$))))))))))))))))))$$$$$$$$$$$$$))$)))$)))$)))))))$)))$))))))))$))))))))$)$))))))))$))))))))))))))))))$)))$))$))))))))))‘†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”””‡‡†‡†††ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠŠ††ŠŠ†††Š†ŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†Š†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠŠ†ŠŠŠŠ†‡‡””wwwvvvvv‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†Š†ŠŠ†Š†Š†Š††ŠŠ†Š†ŠŠ††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2çn–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‘†‡•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Mçn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠ†ŠŠŠŠŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š††Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠŠ†††ŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š††Š†ŠŠ†ŠŠŠŠ†Š†ŠŠ††ŠŠ††ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ††ŠŠ††Š†Š†ŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†Š†‡‡”””wwvvvv}}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹}††ŠŠ†Š†ŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†Š‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2çn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘††••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Mçn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ††Š†Š†ŠŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠŠ†††ŠŠŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ††Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”†Š†ŠŠ†ŠŠŠŠŠŠ††ŠŠ†ŠŠ††ŠŠŠ†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠ††‡”””www‡†ŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––nMMMMMMMMMMMn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––nMMMMMMMMMMMn–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†ŠŠ†Š†ŠŠ††ŠŠŠ††ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ††ŠŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š††ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ††Š†Š†Š†Š†Š†Š††Š††Š†Š†ŠŠ†Š†Š†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†ŠŠ†ŠŠ††Š††ŠŠŠ†ŠŠ†ŠŠŠ††ŠŠ†ŠŠŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠ††ŠŠ†Š†ŠŠ††Š†Š†Š†ŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†&3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Švr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†ŠŠ†ŠŠŠ††ŠŠŠ†ŠŠ††ŠŠ††ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠ†‡‡‡‡””””y”yyyyyyyyvvvvvv}}}}‚}‚}‚‚‚‚r‚‚rrrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vyyyy””‡†‡†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠ††Š†Š†ŠŠŠ†Š†ŠŠ†Š†Š†ŠŠŠ††ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†Š††ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠŠŠ†ŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ††Š†Š†ŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†ŠŠ††Š†Š††Š†Š†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š}rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚}}}}vyyyy””‡‡†Š†ŠŠŠ††ŠŠ†Š†ŠŠŠŠ†Š††ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†††ŠŠ†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š‘Ž–2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--Š‡&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}}vyy”†Š†ŠŠŠ††ŠŠ††ŠŠ†ŠŠŠ†ŠŠŠŠ†Š†Š†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠŠ‡”yyvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚r‚}}vvvvyyy””‡†Š†Š†Š†ŠŠ†ŠŠ††ŠŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†Šw‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-Š†&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr}vvyy”‡Š†Š†Š†ŠŠ†Š†ŠŠŠŠŠŠ†Š†Š†Š†Š††Š††ŠŠ†Š††Š†ŠŠŠŠŠŠŠŠŠ‡””yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚r‚‚}}vvvvwy”‡‡‡†Š†ŠŠŠŠ††ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š†Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‘Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}vyy”†††††Š†Š†ŠŠŠ†ŠŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š††Š†ŠŠŠŠŠŠŠŠŠ‡”wwvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr‚‚‚}}}vywy”””†‡†ŠŠ††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š‡•3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‘‘‘4z?q|qrq|rqrqrqr|qz&‘‘‘‘‘Ìdgjjjjjgg>Ú-‘‘-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}}v””†††Š†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠ†ŠŠŠŠŠŠ‡‡”yvv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vwwyvvvv‚‚‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š•ŽŽŽŽŽŽŽŽŽŽŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡††•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&‘3‹89989999999999989|-‡‘‡‘‡‘‡‘dÊÊÊÊÊÊÊÊÊÊÊÊg-‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽŽŽŽŽŽŽŽŽŽ•Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vyy””††ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š†Š†Š†ŠŠŠŠ†ŠŠŠŠŠŠ‡”wvvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ†Š†‡‡”wywvvvvv‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††&&-----------•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘|998999898989898999z-‘‘‘‘‘‘‘&ÊÊÊÊÊÊÊÊÊÊÊÊÊÊ‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-††-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-----------&&‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v””wyvv‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}vy””‡ŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠŠŠŠ†‡”wv‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†Š†ŠŠ†Š†Š††Š†Š†ŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠŠŠ†ŠŠŠ†‡‡””wyvvvvv‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž–––2––2–2–2–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘q9899999999‹‹||r|qq3-‡‘‡‘-ÐÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ‘-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–2–2–2–2–––Ž‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡ŠŠŠŠŠŠŠŠ†”yyv‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}vy””†Š††Š†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š††Š†Š†Š†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡Š†Š†Š†Š†ŠŠ†Š†ŠŠ†Š†Š††Š††ŠŠ†Š†ŠŠ†Š†Š††Š†ŠŠ†Š†ŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ††‡‡””wyyvvvv}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š‡•3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-z9999999|3-‘‘‘‘‘‡‘‘‘‘‘‘‘‘‘&Ìg£ÐÊÊÊÊÊÊÊÊÊÊÊÊ-‘3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡††&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†‡”vv}‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}}yy”‡†Š††Š†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠ†Š††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ††Š†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†‡‡””wyyvvvv‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††‘•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-499998|4‘‘‘‡‘‡‘‘‘‡‘‡‘‡‘‡‘‡‡‘‡‡‘‘-)ÊÊÊÊÊÊÊÊÊ)‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•‡†‘-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Švr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†Š†Š†Š†Š†Š††Š†ŠŠŠ†ŠŠŠŠŠŠ†”yyv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}vy”‡†Š†Š†Š†ŠŠ†ŠŠ†Š††ŠŠ†ŠŠŠyr‹‹‹‹‹‹‹‹‹‹r”†Š†Š†ŠŠ††ŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠ†Š†Š††Š††Š†Š†Š†Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠ†ŠŠŠŠw‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘††&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‹999z-‘‘‡‘‘‘‘‘‡‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‡‘>ÊÊÊÊÊÊÊÊ‘-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†Š†ŠŠŠ†Š†Š†ŠŠŠŠ†Š†Š††Š†Š†ŠŠŠŠŠŠŠŠŠŠ†‡wvv}‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}yy”‡†ŠŠŠŠŠ†Š†Š†Š‡v‹‹‹‹‹‹‹‹‹rr‚r‚‚‚}}vvyyyy””‡‡†ŠŠ†Š†ŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠŠ†ŠŠ††ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š†Š†Š†Š††Š†ŠŠ†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‡-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘r9|-‘‘‘‡‘‘‘‡‘‡‘‘‡‘‡‘‡‘‡‘‡->g£g-‡‘‘‘kÊÊÊÊÊÊÊÊ-‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-‡†‘&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‡†††Š†ŠŠŠ†Š††Š†ŠŠŠŠ†Š†ŠŠ†Š††Š†Š†Š†ŠŠ†Š†ŠŠŠŠ†”wyv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vyy””††Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚r‚‚}}}vvyy””‡‡†Š†ŠŠ†Š†Š†Š††ŠŠ†ŠŠ††ŠŠ††ŠŠ††ŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†Š‘-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘??-‘‡‘‡‘‘‡‘‘‘‘‘‡‘‘‘‘‘‘‘‘)ÏÊÊÊÊ&‘‡‘-gÊÊÊÊÊÊÊ)‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†‘-3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}vy”††ŠŠŠ††Š†ŠŠŠ†Š†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠŠ”yyvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‚‚}}}}yyyy””‡††Š†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š††ŠŠ††ŠŠŠŠ†ŠŠ†ŠŠ††Š†Š†ŠŠŠŠ‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‘††-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-x8|q??-‘‘‘‡‘‡‘‘‘‡‘‡‘‡‘‡‘>jÊÊÊÊʹ)-‘‡‘jÊÊÊÊÊg‡-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23•-††-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‡ŠŠ†Š††ŠŠ†Š††ŠŠ†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠ†‡”yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚}}}vyyy”””‡†††ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠŠ†Š†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘Š†&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&-‹98|-‘‘‡‘‘‘‘‘‡‘‘‘‘‘‘‘‘‘‡‘̹ÊÊÊÊʹ>-‘‡‘ÊÊÊÊÐ-‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ-‡†‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†ŠŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š††Š††Š†ŠŠŠŠŠŠŠŠŠŠ†”wwv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚‚}}}}yywy””‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&‘††-&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘|983‘‘‡‘‘‘‡‘‡‘‘‘‡‘‡‘‡‘‡‘‘‘-gÊÊÊ>Ú‘‘‘‘&)>Ê)‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2•--††-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†††Š†Š†Š†ŠŠŠŠŠ†ŠŠŠŠ†‡”wvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‡‡”””ywyvvv}}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‡†‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘q999?-‘‘‡‘‘‘‘‘‡‘‘‘‘‘‘‘‘‘‡‘‘%£>‘‘‡‡‘‡‘‡‘‡‘‘‡‘‘‘-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ-‡††-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†ŠŠŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†Švr}}vy”‡†Š†Š†Š†ŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠŠŠŠŠŠ†‡”wvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹Š†ŠŠŠŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠ†‡‡””wwyvvvv‚‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-††‘&ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••••••••Ž–––––––––•••••••••––––Ž•••••3––––Ž••••••••••••••3––––––––••••••–––––––3••••••Ž––––––3•••••Ž––––––•••••••Ž–––––3••••••––––––––3•••••––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-398998|x-‘‡‘‡‘‘‡‘‡‘‡‘‡‘‘‘‡‡‡Ì%-‘‘‘‘‘‘‘‘‘‡‘‘‘-‘‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––•&‡‡‡-3Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”ŠŠ†††ŠŠ†Š††ŠŠŠŠ†Š†Š†Š†‡‚‹‹‹‹‹‹‹rr‚}}yy”††ŠŠ††Š†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠ””wv}‚‚rr‹†ŠŠ†Š†Š††ŠŠ††Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†””””ywvvvv}‚}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-††&&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&-&---&--3––––––3•--&--&&-•––––3--&--•––––3--&--&•&•&•&-----•3Ž––––-&&---–––––3&--&-&&&•––––Ž&-&-&•Ž––––Ž•&-&-&---•––––––Ž&&&--•––––3•&---33–––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&¼9989998|q?3-‘‘‘‘‘‘‘‘‘‘‡‘‘‘‘‡&££>Ú------ÚgÊÚ‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3-‘‡‡-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†ŠŠŠŠ†ŠŠŠŠŠ††ŠŠ†ŠŠŠ†ŠŠŠ‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}y””‡ŠŠŠŠŠ†Š†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ††Š†Š†Š†ŠŠ††Š†Š†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ††””””wyvvvv}‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-††‘&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&-&-&&&-&&•––––3&&-&&&-&&-•––––•-&&-&•––––•-&&-&•––––––––•&&&--&Ž–––&&--&&Ž––3&--&&&-&--•––Ž•&-&&&3–––––•&--&&&&-&&-3––––––3&-&&-•3•&--&•32–––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‹9999999998‹?4-‘‘‡‘‡‘‡‘‘‡‘‡‘‡&jÊÊÊÊÊÊÊÊÊÊÊÊÊg‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&‡‡‡-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š††ŠŠ†Š††ŠŠŠ†ŠŠ††ŠŠ††Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚‚vy”‡†Š††Š†Š†ŠŠŠ†ŠŠ††Š†Š†Š†Š†ŠŠ††ŠŠ†Š†Š††Š†ŠŠ†Š†Š†Š†ŠŠ††ŠŠ†ŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š††ŠŠ††Š†ŠŠ†Š††Š†Š††Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ††‡””wwyvvv}}‚‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†Š‡&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--&-&---&--•––•&-&-&---&--•––––•&---&•––––•&&--&•–––––––––Ž---&&&––––--&&--33&-&&&••-&-&&•3&-&-&&3––––3&-&-&&3–3-&--&•–––––––Ž&--&-&-&•3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘|9999999899998‹qx-‘‘‘‘‘‡‘‘‘‘‘‘‘%>ÊÊÊÊÊÊÊÊÊÊÊ£‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&‘†‡-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠŠŠ†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrryŠŠŠ††ŠŠ†ŠŠŠŠŠ†ŠŠŠ†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†Š††Š†Š††Š†Š†Š†Š††Š†Š†Š†ŠŠŠŠ†ŠŠŠŠŠŠŠŠ†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--†Š‘&ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&&-&-••&-&&-••-&-&&3•&&&-&•––––•&-&&&Ž––––•--&&-•–––––––––•&&&--&–––––&&-&&&--&--&Ž–•-&---&-&&-&3––––3&&-&-&32––Ž•-&&--Ž–––––––3&&-&-&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘z99999999989899999|3x--‘‘‡‘‡‘‘‡‡‘-kÊÊÊÊÊÊÊÊÊÊÚ‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&‘‡†--•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ†Š††ŠŠ†ŠŠŠ††ŠŠ††Š†Š††v‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚v}vvvyyy””””‡†Š††ŠŠŠ†ŠŠ††Š†ŠŠ†Š†ŠŠŠ††ŠŠ†ŠŠ†Š††ŠŠŠ†Š††ŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠ††ŠŠ††ŠŠŠŠ†Š†Š†Š†ŠŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š††Š†Šw‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••-‘†‘&•32––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-&-&Ž–3-&--&-&-&&3–•&--&-•––––•&-&--Ž––––•&&&-&•333333•••-----•3–––––2&-&---&-&•3–––3&-&&&-&-&Ž––––3•&-&-&&&&&&&&-&--&-•––––––Ž--&-&&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2-Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-4989989999999989899998|qz4--‡‘‘‘‘‘-ÊÊÊÊÊÊÊÊÊ>‡-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&-‘†‘-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠŠ†ŠŠ††ŠŠŠ†ŠŠ†ŠŠŠ†Š‡”yww””‡‡††ŠŠŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠŠŠŠŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠ†Š†Š†ŠŠ††ŠŠŠ†Š††ŠŠŠŠŠ††Š†ŠŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†††ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠŠ†ŠŠŠŠ††Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&-‘†‡-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&---&-Ž––3-&-&&-&•3––•&-&&-•––––•--&-&Ž––––•&---&--&-&-&--&-••33–––––––––&&&-&&&&Ž–––––3--&--&&3––––3&&---•33•3•3•333&&&-&-Ž–––––&&&-&&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--89999999999999999898999988|qzx-‘‘‘‘>ÐÊÊÊÊÊÊʹ‘‘Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&‘‡‡‘-3•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚‚‚‚vvv††ŠŠ††ŠŠ†ŠŠŠ††ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†Š†Š††Š†Š†ŠŠ†Š†Š††Š††Š†ŠŠ††Š†Š†ŠŠ††Š†Š†ŠŠ†ŠŠŠ††Š†ŠŠŠ†††ŠŠŠ†Š†Š†Š†ŠŠŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠŠŠ††Š†Š†Š†Š†Š†Š†ŠŠ††Š†‡‡††ŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†Š††ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‘‡†‘-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3Ž3Ž3––––Ž3Ž33ŽŽ–––––3ŽŽ3ŽŽ–––––3ŽŽŽŽ–––––Ž33ŽŽŽ33Ž3ŽŽŽŽŽŽ––2––––––––––––Ž333Ž3Ž–––––––ŽŽŽŽŽŽŽ––––––ŽŽ33Ž––––––––––––Ž3Ž333–––––Ž333Ž3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘|99999‹‹‹89‹‹99‹‹‹‹‹‹‹89999‹‹98?-‘‘‘‘ÊÊÊÊÊÊÊ&‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‘‡†--•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠ††Š†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†ŠŠŠŠ†Š†ŠŠŠ††ŠŠŠŠ†ŠŠŠ†Š††ŠŠ†ŠŠ†Š†ŠŠŠŠ††Š†ŠŠŠŠ†Š†Š†Š†Š†Š†ŠŠŠ‚r‹‹‹‹‹rrr‚‚‚‚}}vvyyy””‡‡†ŠŠ†Š†ŠŠŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘‡†‘-&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘q9999a-‘-?a-‘3a&‘x?z&-z9‹x‘&-x|9|3-‘‘ÌÊÊÊÊÊÊÊ>‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ•-‘‡†-••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†Š†Š††Š†ŠŠ††ŠŠŠ†Š†Š†ŠŠ†ŠŠ††ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ††Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†Š†Švw‡†Š††ŠŠ††Š†ŠŠŠ†ŠŠ†ŠŠŠ†Š††ŠŠŠŠŠ††ŠŠ†ŠŠŠŠŠŠŠŠŠ†Š†ŠŠ†””v}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚}}vvvyy”””††Š†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡†‡--3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-x9989‹&‘-4x-‘&‹x‘-zz4&?‹z‘-|?--|89|x-&ÊÊÊÊÊÊ£‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡‡‘-&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠŠŠ†Š†Š†ŠŠŠ†Š††Š†ŠŠ†Š†Š†Š†ŠŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†‡”””yyyv}}‹‹‹‹r‚‚v”‡Š†ŠŠ††ŠŠ†ŠŠ††Š†ŠŠŠ††Š†ŠŠŠ†ŠŠ†Š†††Š††Š†ŠŠ†ŠŠ†ŠŠŠŠ†”yv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‘††‘-&•Ž–2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--99999•‘4‹z---a3--?q&‘-]-‘xqq3--|99|&‘‘gÊÊÊÊÊÊ‘‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡‡‡‘-••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡††ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š††Š†Š†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠ†Š†ŠŠ†††ŠŠ†Š†Š†ŠŠ†ŠŠ†††‡””yyyyv}v}}‚r‚‚rr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}y”‡†Š†ŠŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠŠ†ŠŠŠŠ†Š†Š†Š†Š††ŠŠŠŠŠŠŠ†”yv}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&--††‘--•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘x|9998‹989‹‹‹88‹‹‹‹‹‹89‹‹9899‹9989‹-‘‘‘ÌÐÊÊÊ>‘‘-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–3•--‘‡‡--••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryŠ†ŠŠ††Š†ŠŠŠŠ†Š†ŠŠŠŠŠŠŠ†ŠŠ†ŠŠ†Š††Š†Š†‡‡””yyyyvv}}}‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}y”†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†††Š†Š†ŠŠŠŠŠŠŠ†”yv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡†‡‘-•ŽŽ––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘‘‘-xzq||‹‹8‹‹‹‹‹8‹‹‹‹8‹‹‹8‹‹‹‹‹‹‹‹‹?&‡‘g>)‘‘‘‘-3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•&‘††‡-••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠŠ†Š††Š†Š‡‡”yyyyvvv}}}‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}vy”†ŠŠŠ††ŠŠ†Š†ŠŠ†Š†Š††ŠŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠ†”yv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‘†Š‘--3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•3•3333333••••333•3••33333•3333•••••3•33333•33333–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡‡‡‘-••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}‚r‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}v”‡†Š†ŠŠ†ŠŠŠ†ŠŠŠ††Š†ŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ‡”v}}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‘‡Š‘&-•3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•--‘‡†---3•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}yŠ††ŠŠ†Š†ŠŠŠŠ†Š†ŠŠ†ŠŠŠ††ŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†Š†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‘‡†‡‘--••2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––Ž•&&-‡‡‡--••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr‚‚‚‚‚}}}vvvyŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ††ŠŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†Š†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&--‡†‡‡-&•ŽŽ–––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–Ž•&-‘‡‡‡--••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‚‚}}}vvvvvyww””””‡‡††ŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†Š†Š†ŠŠ††ŠŠy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••&-‡†‡‘-&•Ž–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2Ž•&&‡††‡-&••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†Š†ŠŠ†††Š††Š†Š†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†ŠŠ††ŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3---‘††‘--•3Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3&--‡‡†‘-&•••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚v}}v‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚vvvw”‡†ŠŠŠŠ†Š†ŠŠ†ŠŠ†Š††Š†Š††ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠŠŠ†ŠŠ†ŠŠ††Š†Š††ŠŠ†Š†Š†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••---‡‡†‘-&&-ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–Ž••--‘‘‡†‘--&•3Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠ†ŠŠŠŠŠŠŠŠŠŠ†‡”””wyvvvvv}‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vvw”‡†ŠŠŠŠŠŠŠŠŠŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠ‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•••--‡†‡‡‘-&&•3Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––Ž•&--‘‘‡‡‘--••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠ†‡””””wyyvvvv}vvw””‡ŠŠŠŠŠ†Š†ŠŠŠŠŠ†Š†Š†Š†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†Š†Š†Š†ŠŠ††ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†Š††ŠŠ†ŠŠŠŠ†Š†ŠŠ†Š†Š††‡”‡”””yyv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&--‘‡††‡‘-&•332––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3••&--‘‡‡‡---•••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šw‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡Š†Š†Š†Š†Š††Š†Š†Š†ŠŠ†Š††Š†ŠŠ†Š†Š†ŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š††ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ††ŠŠŠ†ŠŠ††Š†ŠŠŠ†ŠŠ†ŠŠŠ†††‡‡”””””yyvyvvvv}}v‚‚‚‚rrrrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••••---‡‡‡‡‡‘-&••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•&&-‘‡‡†‡‡---••3•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠŠ†ŠŠŠŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†Š†ŠŠŠ†ŠŠ††Š††ŠŠ†Š†Š†Š††Š†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ††ŠŠ††Š†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠŠ††ŠŠ†ŠŠŠ†Š†Š†vrrr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••---‘‡‡†‡‘‘--&••ŽŽ–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3••&-‘‡‘‡‡†‘‘--••••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†ŠŠ††Š††ŠŠ†ŠŠŠ†Š†ŠŠ†Š†ŠŠŠ††ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ†Š†Š†Š†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠŠŠŠ†ŠŠ††ŠŠŠ†Š†ŠŠŠ†ŠŠ††ŠŠŠ†ŠŠ††ŠŠŠŠ†ŠŠ‡”””yyvvv}}‚‚‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ•••---‡†††‘‘-&&-3Ž––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–Ž••&&--‘‡‡‡‡‘---••••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†ŠŠŠ†ŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†Š††ŠŠŠ†ŠŠ††ŠŠ†ŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ††Š†ŠŠ†ŠŠŠ††ŠŠ†ŠŠ††Š††ŠŠŠ†Š†Š†ŠŠ†Š††ŠŠ††Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†”””wwyvvv}}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•3••••---‘‡‡‡†‡‡‘‡‘--&•3•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–ŽŽŽ••&-‘-‘‡‡‡†‡‡‘----&••3•ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Švr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚r‚‚‚}}vvywyy”‡‡†††ŠŠŠŠ†Š†Š††ŠŠŠ†ŠŠ†Š††ŠŠŠ†ŠŠ†Š†ŠŠŠŠ††Š†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ††Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†Š†Š†††Š†Š†Š†Š†ŠŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠ††‡””y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ••••&••&---‘‘‡††‡‡‘‘-&-&&•••3Ž32––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––Ž3••3-&---‡‘‘†‡††‘‘----&•••3•3•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚}}}}}vyy””””‡‡ŠŠ†Š†ŠŠ†††ŠŠ†ŠŠ†ŠŠ†ŠŠ†††ŠŠ††Š†ŠŠŠ†Š†Š†Š†Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠŠ††Š†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽŽ•3•Ž••3•3•••••&-----‘‘‡‡‡‡‡††‘‡‡‡‘‘‘---&-&•3Ž•Ž–––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––––Ž–Ž•3•&&-----‘‘‡‡‡‡‡††‡‡‘‘‘------&•&••••3•3•Ž•Ž•ŽŽŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚}v””†Š†Š†ŠŠŠŠ†ŠŠŠ†ŠŠ††ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†Š††Š†Š†ŠŠ††Š†Š†ŠŠŠ††ŠŠ††ŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†Š†Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†Š††‡††‡‡‡‡‡‡‡†‡†‡‡‡‡††‡††‡‡‡‡†‡‡†‡†‡‡††‡‡††‡‡‡‡‡†‡‡†‡‡‡‡‡‡‡†‡‡†††‡‡‡‡‡††‡‡††††††‡†‡‡‡‡†‡‡‡‡‘‡‡‘‘‘‡‘-----&-&-3••Ž3ŽŽŽ––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––ŽŽŽ33••••&-&&-----‘‘‘‘‘‡‘‡‡‡‡††‡‡‡‡††‡††††‡‡‡†‡‡‘†‡‡‡‡‡‡††‡‡‡††‡‡‡††‡‡‡‡‡‡‡‡‡†‡‡†‡†‡‡†‡†‡‡‡‡‡††‡‡‡‡‡†‡‡‡†‡‡‡‡††‡‡‡††Š†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}}y”†ŠŠ††ŠŠ†ŠŠŠ†Š†ŠŠ††ŠŠ††ŠŠŠ†ŠŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ††ŠŠŠ†ŠŠŠ†Š†ŠŠ††ŠŠ††ŠŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‡•Ž3•Ž•Ž3ŽŽ•Ž3Ž•ŽŽŽŽŽŽ•Ž•ŽŽŽŽŽŽŽ•ŽŽŽŽŽ•ŽŽ3Ž•3ŽŽŽŽŽŽŽŽ3ŽŽ3ŽŽ•ŽŽŽŽ•ŽŽŽŽŽŽŽŽŽŽŽŽ––––2–––2–––2–––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––––––2–––––––––––2–2––––2–––––––ŽŽŽŽŽŽŽŽŽŽ3ŽŽŽ•Ž•ŽŽŽ3Ž•ŽŽŽŽŽŽŽ••ŽŽŽ3••ŽŽ•3Ž•ŽŽ3Ž•3ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ3Ž3ŽŽ•ŽŽ••Ž3‡†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚vy”††Š†Š†‹‹‹rr‚‚‚}‚}}vyv””‡‡‡††Š††ŠŠ†ŠŠŠ††ŠŠ††Š†ŠŠ†ŠŠŠ†ŠŠŠ††ŠŠ†ŠŠ††Š†ŠŠŠ†Š†Š†Š††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}vy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚r‚‚}}vvyyyw””†‡Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†ŠŠŠ†‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚}}}vyyy”””‡††ŠŠŠ††Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠ3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††‘––––––––––––––––––––––––––––––––––––––––––3†Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†Ž––––––––––––––––––––––––––––––––––––––––––-†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†ŠŽ––––––––––––––––––––––––––––––––––––––––––&Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•––––––––––––––––––––––––––––––––––––––––––•†Š3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†Š3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‡–––––––––––––––––––––––––––––––––––––––––––‘Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‘–––––––––––––––––––––––––––––––––––––––––––‡†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†ŠŽ––––––––––––––––––––––––––––––––––––––––––ŽŠ†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†Ž––––––––––––––––––––––––––––––––––––––––––•Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†–––––––––––––––––––––––––––––––––––––––––––-††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š•––––––––––––––––––––––––––––––––––––––––––Ž‡†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†Ž––––––––––––––––––––––––––––––––––––––––––Ž†Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡–––––––––––––––––––––––––––––––––––––––––––•Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††–––––––––––––––––––––––––––––––––––––––––––•†ŠŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•–––––––––––––––––––––––––––––––––––––––––––‡Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ•–––––––––––––––––––––––––––––––––––––––––––‡Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š-–––––––––––––––––––––––––––––––––––––––––––&††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvŠŠ‘---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------‡Š†--------------------------------------------†Š‡--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------†Š‡--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------‡††-------------------------------------------‘ŠŠ‘---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------‡Š†vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv•3••••••••3••••3•••3•••••••••••3•3••3••3•••3••3•••3•••••••3••••3••3••••••••••33••3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3••3••3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•••3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•†Š-3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3-†Š•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•••3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3••3••3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3••33•3••••••3••3••3•••••••3••••••3••••3•••••••3••••••3••••••3•••••••3•••3•••••3••• \ No newline at end of file diff --git a/IMG/ARC/COUR09.BIN b/IMG/ARC/COUR09.BIN new file mode 100644 index 0000000..fe5d02a --- /dev/null +++ b/IMG/ARC/COUR09.BIN @@ -0,0 +1 @@ +–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•••••••••ŽŽ3••Ž•Ž•••Ž•••ŽŽ••••Ž•Ž•Ž••••••••••••••Ž•••Ž•••ŽŽ•ŽŽ3•Ž•••Ž•••Ž•••••Ž•••••••Ž•Ž•••••••Ž••Ž•Ž•••••••••ŽŽ•Ž••••••••Ž•Ž••Ž••Ž•Ž•••ŽŽ••••Ž•Ž•••Ž•••••ŽŽ3••••Ž••••Ž•••••••••••••••••••Ž•••••ŽŽ3Ž••••Ž•••Ž•••••••••••Ž••Ž•Ž•••Ž•••Ž•••••••••••••••••••••Ž•••••••••Ž••Ž••••ŽŽ3•••ŽŽ••••ŽŽ3••Ž•Ž••••Ž••Ž••••Ž•••ŽŽ••ŽŽ•••••••ŽŽ3Ž••••••Ž•••Ž•Ž••••••••••••••Ž••••Ž•Ž•Ž•••••Ž•Ž•Ž•••Ž••••••••••••••ŽŽ•Ž•••Ž••••••••••••••Ž•••••Ž•••••••••Ž••••••Ž•••ŽŽ•Ž•••••••Ž••••Ž•••ŽŽ••••••••Ž••ŽŽ••••••••••••••••Ž•Ž•Ž••••••••ŽŽ3•••••ŽŽ3••Ž••••••••Ž•••Ž•••••••••••••Ž••••Ž•Ž•••••••••••ŽŽ••••••••••Ž•••••Ž•••Ž•Ž••ŽŽ•••Ž•Ž••Ž••••••Ž••••••••••Ž••Ž••ŽŽ••••••Ž••••••ŽŽ•••••••Ž••Ž••••••ŽŽ3•••••Ž•Ž•ŽŽ••Ž•••••Ž••••ŽŽ••••Ž•Ž••Ž•••••••Ž•••Ž••••••••Ž•••Ž••Ž••Ž••••••Ž•••Ž••Ž••••••••••••Ž••Ž•••••ŽŽ3••ŽŽ••Ž•••Ž•••••••••••••ŽŽ•ŽŽ3••••••••Ž••ŽŽ•Ž••Ž•Ž•••••Ž•••••••Ž••••••••Ž•••Ž••ŽŽ•••••Ž•••Ž••••ŽŽ•Ž•••Ž••••••ŽŽ3••••••••Ž•••••ŽŽ3••••••••ŽŽ•Ž•Ž•Ž•••••Ž•ŽŽ•ŽŽ3••Ž•••••ŽŽ3•ŽŽ3•Ž••••••••Ž•••ŽŽ••Ž•••••••Ž•••••Ž••Ž•••••Ž•••Ž••••ŽŽ••••Ž••Ž•••••••Ž•••••••ŽŽ3•••Ž••Ž•ŽŽ•••••Ž••Ž••Ž•Ž•ŽŽ3ŽŽ••Ž••••••••Ž••Ž•ŽŽ•••Ž••Ž•Ž••••Ž••••Ž•ŽŽ•Ž••Ž••••••••••••Ž••••Ž••••Ž•••Ž•Ž••Ž•••Ž••••••Ž•Ž•Ž•ŽŽ3••Ž•Ž••Ž•ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrŠ†••••••••••3••••••3•3•••••••••3•3••3••••••••3•3•••3•3•••••3•3••3•••3••••3•3•3••••••••3•••••••••3•3•••••••3••3•3•••3•3•3•••••3••••••••••••••••••••3•••••••••••••••••••••••••••••3•3••••••3••••••3••••••••3•••••3••3•••3•••••••3••3••••••3•••3•••3••3•••3••••••••••3•3••3•3•••3••••••3••3•3••••3••3•3•3••3••••••3•3•3•••3•3•••3••••••3••••••••••••••••••3•3•••••••••3•3•3•••••3•••3•••3••••••••3•••••••3•3•3•••3•••••3•3••••••••••3•3•••••3•3•3•3••••††•••3•••••3•••••••••3••3••3•••3•••••••3••3••3••••3•3•••••3•3••••3•3•3•••••••3••••••3•••••••••••••3•3•••3••••••3••••••••••3••3••••••3••3•3•••3•••••••••3•••3••3••••••••3•3•••3•3••••••3•••••3•••••••3•••3••3•3•3•3•3•••••••3••3•3•••3••••••••••3•••••••••3••••3•3•3••••3••3••••3•3••3•••3•3•••••••••••3••••••3•3•••3•••3•3•••3•3•3•3••••••••••3•3•••••••••3••••3•3•••3•••3••3••3•••••3•••••••••3••••••3•3••3••3•3••••3••••••••••••••••3•3•3•••3•3•3-‡w‚rr‚rrr‚rrr‚r‚rr‚‚rrrrrrrrrrr‚‚rrrrr‚‚‚r‚rrrrrr‚‚rrrrrrrrrrrrrr‚rrr‚rr‚rrrrr‚rrr‚‚rrrrrrrrrrrrrrr‚r‚rr‚r‚‚r‚rrrrrrrrrrrr‚rrrrrr‚rrrrrrrrrv‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Ž–––––––2–––––––––––––2––––––––––––––––2–––––––––––––––––––––––––––––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––2––––––2–––––––––––––––––––––2–––––––––2–––––––––––––––––––––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––––2––––––––––––––––––––––––––––2–––––––––––––––––––––––2––––––––––2–––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†ŠŠ†‡wv}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠŠ†Š†ŠŠŠŠŠ†wyv‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠŠŠ”yv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚vy”‡†ŠŠ†Š†Š†ŠŠ†Š†Š††ŠŠ†ŠŠŠ†‡yv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y††‡‡””””wwyvvvv}}v‚‚‚‚‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}vy‡†ŠŠ†Š†Š†ŠŠŠ†ŠŠ†Š†ŠŠŠŠŠ†‡wv}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠ†ŠŠŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠ††‡‡””””wywyvvv}}}‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚vy”†Š†Š†Š†ŠŠ†Š†Š†Š†ŠŠŠŠŠŠŠ†”wv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†-----&-&-&--&-&-&------&----&--&-&--&--&-&-&-&---&--&•-•&••-•&-&-&--------&-••••••••ŽŽ•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ•••••••&•&----------&-&-&-•••-&•-&-&-&--&-&-&--&---&-&-&--&--&-&--&-&-&--&-&--&-&-&--‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†††††Š†ŠŠ†Š†ŠŠ†Š††Š†Š†Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†Š†‡‡””””wwyvvvvv}v‚‚‚‚‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}y”††ŠŠ†Š†Š†Š††Š†Š†Š†ŠŠŠŠŠŠ‡”””wwyvvvvv}‚‚‚‚‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š•–––––––––––––––––––2–––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ–Ž•3•••••••&--&-&-•&-&-&-&----&•••••3Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•••••-&----&---&--•-&---&&-3••••••3–ŽŽŽ––2–––––––––––––––––––––––––––––––2–––––––––––––––––––––––––––––––––––Ž‘†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry”‡‡†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š††ŠŠ††Š†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠ†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚‚‚vwŠ†ŠŠŠŠŠ†ŠŠ†Š†Š†ŠŠ††Š†Š†ŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‡‡””””wwyv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––––2––––––––––––––ŽŽ3••••-&---&-&-----&•••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•••&---‘-----&-&&••••ŽŽŽ––––––––––––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚rr‚‚‚}}}}}vvyywyw”””‡‡†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†Š††Š†Š†Š†Š†Š†ŠŠ††Š†Š†Š††Š†Š†Š†Š††ŠŠ”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚vvvwy””‡‡†ŠŠŠŠŠŠŠŠŠ†ŠŠ†Š††ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠ†Š†††Š†Š†Š†Š†Š†Š††Š†Š†Š†Š†Š†ŠŠ†ŠŠŠŠ†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––ŽŽ••-&------&--••••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••-&----&---&-•••ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚r‚‚‚}}v†ŠŠ††Š†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠŠ†Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚vvyw””‡†ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š††Š†††Š†ŠŠ†Š†ŠŠŠ†ŠŠŠŠ††Š†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ†††‡r‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––ŽŽ••-&----&---•ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•3•----&--&•3•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚vvvvyywww”””””‡‡‡†Š†ŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠ†ŠŠ†ŠŠŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š††ŠŠ††ŠŠ†Š†Š†Š††ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rvŠ†ŠŠŠŠŠŠŠ†Š†Š†Š†Š†ŠŠ††Š†ŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ††””yyyv}}}‚‚rrr‹rrr‚‚‚‚‚}}}}vyyyyw”w”‡†ŠŠŠ†Š††ŠŠ†ŠŠŠy‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––•3•--------&••3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••&--‘---&-3•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†ŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠ††Š†Š†Š††Š†Š††Š†Š†Š†ŠŠ††Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠŠŠ†ŠŠ†ŠŠ††ŠŠŠŠ†Š†ŠŠ†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†ŠŠ††††Š†Š†Š†Š†Š†Š†Š†‡”wwyy}}}}‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr‚r‚‚‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––Ž••-&--‘--&••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••--‘---&••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†Š†Š†ŠŠ††ŠŠ††ŠŠŠŠ†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†Š†Š†Š††Š†Š†Š†Š†Š†Š†‡‡”w”wwwyyyyyv}}v}}‚‚‚‚‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠ‡”””yyyv}‚}‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––••-&‘----••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&--‘&---••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡Š†Š†ŠŠ†ŠŠŠ†ŠŠ†Š††Š†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†yv}v}}‚‚}‚‚‚‚rrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•&------•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--‡--&-3Ž––––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryy”††Š†Š†Š†Š†ŠŠŠŠŠŠ†ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠ†Š†”ywvv‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚‚‚‚‚‚v}vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•-‘-‘-••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--†---&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}}vyw”‡††ŠŠ†ŠŠ†Š††Š†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠ†‡”wwvv‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚‚}}v}vvvvyywww””””‡††ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ-&‡‡‘--•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••-‘-‡&•3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}ywy‡‡ŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š††Š†ŠŠŠŠŠŠŠŠŠŠŠŠ‡”wyvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚‚‚‚}}vvvvvywww””””‡††ŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠŠŠ†Š†Š†Š†Š†Š††Š††r‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‘‡--3•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘‡‘&-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‚‚‚‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vwyw‡†ŠŠ†Š†ŠŠ†ŠŠ†Š††Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠ”‡wyvv‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rvvywww””””‡‡†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠŠŠŠŠŠ†Š†Š†Š†ŠŠ††Š††ŠŠ††ŠŠ†Š†Š††Š†Š†††Š†ŠŠ†Š†Š†Š†ŠŠ†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡‡-&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--†--••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠŠŠŠŠŠŠŠŠ†††””””wyyvvvv}}}‚‚‚‚‚r‚‚‚‚}y†Š†Š†ŠŠŠ†Š†Š†Š†Š†Š†Š†Š†Š††Š†ŠŠŠŠŠŠŠŠŠŠ†‡”wyvv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠŠŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š†Š††ŠŠ†ŠŠ††Š††Š†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠ†Š†ŠŠŠ†Š†Š‡””wyyyyv}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23•-‘-‘-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘†‘&•Ž2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†Š†Š††Š††Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠ†Š†Š†Š†Š††ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠ†‡”wv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†Š††Š††Š††Š†ŠŠ†ŠŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ‡‡””‡w”yyyyy‡Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠ†Š†Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž2–––ŽŽ&--‘-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--‡‡-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†ŠŠ†ŠŠ†ŠŠ††ŠŠ†ŠŠ†Š††Š†Š†Š†Š†ŠŠ††ŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ†Š†Š†Š†Š†ŠŠ††Š††Š†Š†ŠŠ†ŠŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠŠ†ŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠ††Š†ŠŠŠ†ŠŠŠ†ŠŠŠv}}}‚‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ††Š†Šw‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‘‡‘-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†-&•Ž–2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚w””””‡‡†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠŠ††ŠŠ†ŠŠ††ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ††Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠ††ŠŠ††ŠŠ††Š‡”wyv}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23•-‡‡-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡†&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‹rrr‚r‚r‚‚‚}}}vvyyywyww””‡††Š†Š†Š†ŠŠ†Š†Š†Š††Š†ŠŠ†ŠŠ†ŠŠŠ††ŠŠ††ŠŠ††Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vy‡†Š†Š†ŠŠŠ†Š†Š†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ††”wyv‚‚r‹‹‹‹‹‹‹‹‹‹‚†Š†Š††ŠŠ†Š†ŠŠŠŠŠ††Š‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘‡‘-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†‘•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚‚}}}vvvyyyywy””‡‡††ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}vyy”†ŠŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†”wvv‚‚‚vŠŠ†ŠŠ††Š†ŠŠŠ‡†Š††ŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡‡-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&-‡‘&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‹rrr‚r‚‚‚}}}vvyyyyyw”w”‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vyw‡†Š†ŠŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†Š††Š†ŠŠŠŠ†ŠŠŠŠ†Š†Š†Š†ŠŠ††ŠŠ†ŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡‡‘-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†Š‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††‡‡”‡wwwwyyvvv}v‚‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vvw‡‡†Š††ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š††ŠŠ††ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&-†‡&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠŠŠŠŠŠ††‡””””wywyvvvv}‚}‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vyy‡†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠŠ††ŠŠ†ŠŠ†Š”””vv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&‡†-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†Š†Š††Š†ŠŠ†ŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†‡‡‡””wwwyvvvv}v‚‚‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†ŠŠŠŠŠ‡”yv}}‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚vyy‡†ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠ††ŠŠ†Š†Š†ŠŠ†ŠŠŠ†ŠŠ‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3-†‡&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡w‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}††ŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š††Š††Š†Š††ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠ††‡‡””wwwwvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠŠ†Š†Š††ŠŠŠŠŠŠŠŠŠ†‡”yvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vv””††Š†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠ††Š‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‚‚‚}}}vvyyywww””‡†††ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ††Š†Š†Š†Š†Š†Š†ŠŠ††Š†Š†Š†Š††Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š††ŠŠ†Š†ŠŠ†Š††Š†Š†Š†ŠŠŠŠŠŠŠŠŠ‡”wyvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}y””†ŠŠŠ†ŠŠ†Š†ŠŠŠ”‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrr‚}‚}}vvvvyyw””””‡‡†ŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠ†††Š†Š‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†Š††Š††Š†Š†ŠŠŠŠŠŠŠŠŠŠ†‡”yvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}yw”†††v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†‘••••3•••••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡†-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••••••••••Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‹rrr‚r‚‚‚}}}}vvvyyyww””‡†††ŠŠ†Š†Š†Š†ŠŠŠŠ†Š†ŠŠvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}vy”††Š†ŠŠ†ŠŠ††ŠŠŠŠ†ŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠ‡”wvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†••3•3•••3•3•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––33•3•3•3•3•3-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚rr‚‚‚}}}vvyyv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}yy”†Š†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠ††Š†Š†Š†Š†Š†ŠŠŠŠŠŠ””wvv}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡ŠŠ†ŠŠ†‡‡”””y”wyvvvv}v‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vy”‡†Š†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ††‡”wvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡Š‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†Š†‡‡”””wwwyvvvv}}‚‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚‚}yyw‡†ŠŠ††ŠŠ†ŠŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠ††ŠŠ†ŠŠ†Š†ŠŠŠŠŠŠŠŠ‡””v}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&‡Š-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠ††ŠŠ†Š††ŠŠ††Š†Š††Š††Š†Š†Š†Š†Š†Š†Š†ŠŠ†ŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ†ŠŠ†‡‡”””wwyvvvvv}‚}‚‚‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrr‚‚†ŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†ŠŠ††ŠŠŠ†Š†ŠŠ†ŠŠ††Š†Š†Š†ŠŠ†ŠŠŠŠ‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††‘Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†ŠŠŠ†Š†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ†Š††Š†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠ†Š††‡””””wwyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}v}vvvvvvvvvwyywwww””w”””””‡”‡‡‡‡†††Š†ŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ†ŠŠ†Š†ŠŠ††ŠŠŠŠ†ŠŠ†ŠŠŠ††Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ††r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‡†‘Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡††Š†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠ††ŠŠ†Š†Š††Š†ŠŠ†Š†Š†Š†ŠŠŠŠŠŠ†ŠŠŠŠvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠŠŠŠŠŠŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š†ŠŠŠŠŠŠ†Š†ŠŠ††Š††Š††Š†ŠŠ†ŠŠ†Š†ŠŠŠ††Š†Š†Š†Š†ŠŠŠŠŠ†ŠŠ†Š†Š†ŠŠŠ†Š†Š†Š†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2çççççççççN––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Kççççççççn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†yrrr‚r‚‚}‚}}v}vyyyyyw””‡‡††ŠŠŠ†Š†Š†Š†ŠŠ†Š††ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ††Š††Š†Š†ŠŠ†Š†Š††Š†††Š†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠŠ††ŠŠŠ†ŠŠŠ†Š†Š††Š†ŠŠ†ŠŠ†ŠŠŠ††ŠŠŠŠ†Š†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2çN–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––KOn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†ŠŠ†ŠŠ†Š††ŠŠ†ŠŠ†††ŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚‚}}}vvvyyywww””††ŠŠ†ŠŠ†Š††ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠ††Š†ŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š††ŠŠ†Š†Š††ŠŠ†ŠŠŠŠ‡†‡‡‡‡‡”””w””wyyywy}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡QddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddQdQQddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd‡†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†-dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddQddQQddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd$‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡Š†Š†ŠŠŠŠ†Š†Š†ŠŠŠ†Š†Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”ŠŠŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ††ŠŠ†Š†Š†ŠŠ††Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠv}}}‚‚‚}‚‚‚r‚‚‚‚rrrrrrrrrrr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§VŠ‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv††ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠ†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡Š††ŠŠ††Š†ŠŠ†ŠŠ†ŠŠ†Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rvvyy”††Š†ŠŠŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠŠŠŠ†Š†Š†ŠŠ†Š†ŠŠ†††wwvv}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rwŠ†Š†ŠŠŠŠŠŠŠ†ŠŠŠ††Š†Š†v‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡ŠŠ†ŠŠŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}yw”†Š†Š†ŠŠ†††ŠŠ†Š†Š††ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠŠŠŠ†ŠŠ†ŠŠŠŠ†”yv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%Ì%Ì%%Ì%%̵§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V%µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§̧§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q%§§§§§§§§§§§§§§§§§§§%Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šd§§§§§§§§§§§§§§§§§§¥%e§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥%e§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ%Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ%Ì%Ì%Ì%Ì%Ì%¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚w†Š††Š†††ŠŠ††ŠŠŠ†Š†Š†ŠŠ”}r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‡†Š†Š††ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vwy‡††ŠŠŠ†ŠŠŠ†ŠŠ††ŠŠ†ŠŠŠŠ†Š††ŠŠ†ŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠ‡””vv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡ŠŠŠŠŠŠŠŠŠŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§QŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§eŠ%§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§QŠÚ§§§§§§§§§§§§§§§§§§VŠ†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†µ§§§§§§§§§§§§§§§§§§-Šµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÚŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÌŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§&ŠŠŠŠŠŠŠŠŠŠ‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‘”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚w††ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠ†”v}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Š†ŠŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠ†Š”‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr}vyww†Š†ŠŠŠ†Š†Š††Š†ŠŠŠ†ŠŠ†Š†Š†Š††Š†Š††Š†ŠŠ†ŠŠŠŠŠ†‡wyv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‘†ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd‡†Š†Š†Š†Š†Š†dddddddddddddddddddddddddddÌŠŠdddddddddddddddddddddddddd>†ŠddddddddddddddddddddddddVÚ-¥¥§§¥¥¥µµgQeQQeeddd‡†‘&--•&-•••••••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ••••&•&-&-&-ŠŠ-----&-&•••••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ••••••-&-&-‡Š‘ddeeeeQgQVgµ¥¥¥§§¥µ--VeddddddddddddddddddddddddŠ†ddddddddddddddddddddddddddŠ†ddddddddddddddddddddddddddŠ†Š†Š†Š†Š†Š-dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddŠ&‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚v†††ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†Š†Š†ŠŠŠ†”y}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚v†ŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†††ŠŠ†Š†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚‚vyy‡†Š†Š†Š†Š†Š†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†‡wvvv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠd§§§§§§Ÿ§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§žœœPP588888‚z‚‚‚rrrrr‹‹‹‹‹}Š}‹‹‹r‹rrrrr‚‚z}}y4yy----&-••Ž–––––––––––––––––––––––––––––––––––––––––––––––Ž††‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•••---&%%%dddQVµµµµ¥¥¥¥¥††¥¥¥¥¥¥µVVVQddd))$%%‘---&••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––••-&--‘-xy}}}z‚‚‚‚rrr‹r‹‹‹‹}Š}‹‹‹r‹rrqr‚‚‚zzq888855PPœœŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ§§§§§§§§§§§§§d†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚}w†Š†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†Š††Š†ŠŠŠŠ†ŠŠ‡‡”wv}v‚‚‚‚rrr‹‹‹‹‹‹‹‹‹‹rrrr‚‚vvw†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠ‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrr‚r‚‚‚‚‚}yŠŠŠ†ŠŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†Š††Š†Š†Š†Š†ŠŠ†ŠŠŠv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VÌ&388888888888888888888888888888‹†”88888888888888888888888‹rq‚v}----&••–––––––––––––––––––––––––––––––––––––––––-Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••--‘-&ÚddVµ¥§§§§§§§§§§§§§§§§§§§§§§§†Š§§§§§§§§§§§§§§§§§§§§§§§¥µVd%%----••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†-–––––––––––––––––––––––––––––––––––––––––Ž•--‡yyv}zrr‹88888888888888888888888‡†‹8888888888888888888888888888|&&dVµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d‡v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}y‡†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ††Š†Š†ŠŠ†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}v}vvvvvvvvvwywyww”w”””””””‡‡‡†††ŠŠ†ŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠ†Š††ŠŠ††ŠŠŠ†Š††ŠŠ†ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠ†Š†Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÚÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VQ-34v‚r‹88888888888888888888888888888888”†r88888888888888888888888888888888rr}}y-‘-•Ž–––––––––––––––––––––––––––––––––––Ž‡Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‘&ÚddV¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Vdd)----3•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š†––––––––––––––––––––––––––––––––––––Ž•--‡yv‚rr88888888888888888888888888888888r†y88888888888888888888888888888888‹r‚}4&&Qµ¥§§§§§§§§§§§§§§§§§§§§§§§§§§¥%%§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V‡wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚vv‡††Š†ŠŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†Š††ŠŠ†Š†ŠŠ†Š†Š††Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†Š††ŠŠ†ŠŠŠ†‡}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†ŠŠŠŠŠŠ†Š†Š†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠ††Š†Š†ŠŠ†††Š†Š†Š†Š†ŠŠŠ†ŠŠŠ††Š†ŠŠŠ†ŠŠ†††ŠŠ†Š†Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠ†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%†Q§§§§§§§§§§§§§§§§§§§§§§œPP88‹zr‹88888888888888888888888888888888888888zŠ}888888888888888888888888888888888888888‹‚}}‡‘&•Ž–––––––––––––––––––––––––––––––•Š†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--‡-ÚV¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VdÌ-‘--Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•––––––––––––––––––––––––––––––––•-‘†yzr‹888888888888888888888888888888888888888vŠ‚88888888888888888888888888888888888888‹r‚‹88PPœŸ§§§§§§§§§§§§§§§§§§§§§d†>§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}yy”‡Š††ŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†y}r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†Š†Š†Š††Š†ŠŠŠ†Š†Š†Š†Š†Š††Š††Š††Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠ†Š†Š†Š†ŠŠŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ††Š†ŠŠ†Š†Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§tP8888888888888888888888888888888888888888888888888‹Š‡888888888888888888888888888888888888888888888rzy‡‡-•–––––––––––––––––––––––––––––‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡&Ìdµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µdÚ‘‘-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††‘–––––––––––––––––––––––––––––•-†‡y‚r888888888888888888888888888888888888888888888‡†‹8888888888888888888888888888888888888888888888885PœŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vyyw”‡†ŠŠ†ŠŠ†ŠŠŠ†Š†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†Š†Š†Š††Š†Š††Š††Š‡yv‚}r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠ†ŠŠŠ†ŠŠ†Š††ŠŠ†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠŠ††Š†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠ†Š†ŠŠŠŠ†ŠŠŠ††Š†Š†ŠŠ†††‡†‡‡”””””ww”ywv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠe§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ>|8888888888888888888888888888888888888888888888888888”†r8888888888888888888888888888888888888888888888888r}”†-•Ž–––––––––––––––––––––––––&Š†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡-ÌQŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Q-‘&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠ•––––––––––––––––––––––––––•-†y‚r8888888888888888888888888888888888888888888888888‚Šy8888888888888888888888888888888888888888888888888888|e¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}‚}v}vyyyyw””‡††‡††‡††††††‡w””yyvv}‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†ŠŠ†ŠŠ††ŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠ†Š††††‡‡””””””wwywyyyyyyvvvv}v}}}}}}‚‚‚}‚‚‚‚‚‚‚rrrrrrrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µÚ-}‚‹8888888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888‹}”†-•–––––––––––––––––––––––•†Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†-e§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥d-‡‘••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•–––––––––––––––––––––––Ž-†‡‚888888888888888888888888888888888888888888888888888888yŠr8888888888888888888888888888888888888888888888888888‹‚v‡Úeµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‚‚‚‚r‚‚r‚‚rrrrrr‹‹rr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VÚ‡v‚‹8888888888888888888888888888888888888888888888888888888‹†‡888888888888888888888888888888888888888888888888888888888q”†‘•–––––––––––––––––––––ŽŠŠ‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†&d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥e‡†‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†Š––––––––––––––––––––––Ž‡†yr88888888888888888888888888888888888888888888888888888888‹‡”‹8888888888888888888888888888888888888888888888888888888‹‚y‘%Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§t8‚‚‹88888888888888888888888888888888888888888888888888888888888yŠ‚88888888888888888888888888888888888888888888888888888888888‹y†‘•––––––––––––––––––––†††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††d¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥d‘†-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ‡––––––––––––––––––––Ž†Š”r88888888888888888888888888888888888888888888888888888888888‚Š}88888888888888888888888888888888888888888888888888888888888rzqPt§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ-‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§œ58888888888888888888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888888888888‚††-Ž––––––––––––––––––‘Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‡µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V%†-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š‘––––––––––––––––––Ž-Š†q88888888888888888888888888888888888888888888888888888888888888”Šr8888888888888888888888888888888888888888888888888888888888888888PœŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŸP‹888888888888888888888888888888888888888888888888888888888888888888††‹888888888888888888888888888888888888888888888888888888888888888‹”†‡Ž–––––––––––––––––‘†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥µQed>%d$d†Š$$ddeQVµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ-†‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†-–––––––––––––––––Ž‡Š”‹888888888888888888888888888888888888888888888888888888888888888‹‡”8888888888888888888888888888888888888888888888888888888888888888888PŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”‡µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥d}8888888888888888888888888888888888888888888888888888888888888888888yŠz88888888888888888888888888888888888888888888888888888888888888888‹‡Š‘Ž––––––––––––––––‡ŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§VÚ34z‚rr‹‹88888ŠŠ88888‹‹rr‚z3&ÌQ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š-––––––––––––––––Ž‡Š”888888888888888888888888888888888888888888888888888888888888888888}Šz8888888888888888888888888888888888888888888888888888888888888888888q%¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V‡yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥ÚŠv8888888888888888888888888888888888888888888888888888888888888888888rŠy8888888888888888888888888888888888888888888888888888888888888888888rŠ†•–––––––––––––––Ž†Š‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§eÚ‡}‚‹88888888888888Š†88888888888888‹‚v-Úe¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‘Š-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š†––––––––––––––––-Š†‹8888888888888888888888888888888888888888888888888888888888888888888”Šr888888888888888888888888888888888888888888888888888888888888888888‹v†%¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š&§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%Š”‹88888888888888888888888888888888888888888888888888888888888888888888‡†‹88888888888888888888888888888888888888888888888888888888888888888888yŠ‡–––––––––––––––ŽŠ†‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§e-‡}‹888888888888888888ŠŠ888888888888888888‹z‡-Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥&Š‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡ŠŠŽ–––––––––––––––††y88888888888888888888888888888888888888888888888888888888888888888888r†w88888888888888888888888888888888888888888888888888888888888888888888‹‡†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥&†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ††z888888888888888888888888888888888888888888888888888888888888888888888yŠz888888888888888888888888888888888888888888888888888888888888888888888}††–––––––––––––––-†Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡q888888888888888888888†Š888888888888888888888q”‡g§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†•––––––––––––––ŽŠŠz888888888888888888888888888888888888888888888888888888888888888888888}Šv888888888888888888888888888888888888888888888888888888888888888888888v††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‹88888888888888888888888888888888888888888888888888888888888888888888888rŠw8888888888888888888888888888888888888888888888888888888888888888888888yŠ†–––––––––––––––-ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Šd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§QŠy88888888888888888888888ŠŠ88888888888888888888888wŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š-––––––––––––––Ž††v8888888888888888888888888888888888888888888888888888888888888888888888‡†‹88888888888888888888888888888888888888888888888888888888888888888888888‹œ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry‡•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––Ž†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§t8888888888888888888888888888888888888888888888888888888888888888888888888‡†‹8888888888888888888888888888888888888888888888888888888888888888888888†Š-–––––––––––––––†††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Šr88888888888888888888888Š†88888888888888888888888rŠ†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§††-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š†Ž––––––––––––––‘Šw8888888888888888888888888888888888888888888888888888888888888888888888r†‡8888888888888888888888888888888888888888888888888888888888888888888888888t§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†•––––––––––––––––––––––––––––––––––––––––––––––––Ž-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§8888888888888888888888888888888888888888888888888888888888888888888888888vŠ}8888888888888888888888888888888888888888888888888888888888888888888888zŠ‡Ž––––––––––––––&ŠŠ&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&††§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡Š‚88888888888888888888888ŠŠ‹8888888888888888888888‚Š‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†-––––––––––––––Ž†Š‚8888888888888888888888888888888888888888888888888888888888888888888888vŠ‚8888888888888888888888888888888888888888888888888888888888888888888888888§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-•–––––––––––––––––––––––––––––––––––––––––––––•†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}ŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§$}‚8888888888888888888888888888888888888888888888888888888888888888888888‹†‡8888888888888888888888888888888888888888888888888888888888888888888888r†Š•––––––––––––––Ž†††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡‚8888888888888888888888†Š8888888888888888888888r††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š†Ž––––––––––––––&†‡‹8888888888888888888888888888888888888888888888888888888888888888888888‡†‹8888888888888888888888888888888888888888888888888888888888888888888888z}d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠd§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡Šy8888888888888888888888888888888888888888888888888888888888888888888888‡Š‹888888888888888888888888888888888888888888888888888888888888888888888r†Š3–––––––––––––––‡Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†y‹88888888888888888888ŠŠ88888888888888888888‹y†%¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†ŠŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†-–––––––––––––––•††‹888888888888888888888888888888888888888888888888888888888888888888888‚Šy8888888888888888888888888888888888888888888888888888888888888888888888wŠ-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ÌŠv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‡•–––––––––––––––––––––––––––––––––––––––-†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Šy888888888888888888888888888888888888888888888888888888888888888888888zŠ}888888888888888888888888888888888888888888888888888888888888888888888v††3–––––––––––––––•†Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥d‡‡zr88888888888888888Š†88888888888888888‹z”‡d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘ŠŠ3–––––––––––––––•‡†‚888888888888888888888888888888888888888888888888888888888888888888888v†‚888888888888888888888888888888888888888888888888888888888888888888888yŠ‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†&Ž–––––––––––––––––––––––––––––––––––Ž†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Šw88888888888888888888888888888888888888888888888888888888888888888888rŠ†88888888888888888888888888888888888888888888888888888888888888888888‹”Š-Ž–––––––––––––––Ž†Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2‘Š‘¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Q&-}‚‹888888888888ŠŠ‹88888888888r‚vy&Q¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††‘Ž–––––––––––––––Ž-†y‹8888888888888888888888888888888888888888888888888888888888888888888‹‡‡‹88888888888888888888888888888888888888888888888888888888888888888888‡†Ú§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡‡•––––––––––––––––––––––––––––––––Ž‘†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‹888888888888888888888888888888888888888888888888888888888888888888888”Š‚888888888888888888888888888888888888888888888888888888888888888888‹yŠ-Ž–––––––––––––––––-Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Š‡µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Vd%33}}}‚‚rrrr†Šrr‚‚‚‚}v}&&&Q¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‡†‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠ-–––––––––––––––––Ž‡Šv‹888888888888888888888888888888888888888888888888888888888888888888‚Šy888888888888888888888888888888888888888888888888888888888888888888888|¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v‡-Ž–––––––––––––––––––––––––––––-†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}ŠÌ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§m‹8888888888888888888888888888888888888888888888888888888888888888888‚Š}88888888888888888888888888888888888888888888888888888888888888888ry†‡32–––––––––––––––––-Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥µVVVVŠŠdVµVV¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†-––––––––––––––––––•‡†}‹88888888888888888888888888888888888888888888888888888888888888888yŠ‚88888888888888888888888888888888888888888888888888888888888888888888m§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§&†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†•––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠQ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§m‹88888888888888888888888888888888888888888888888888888888888888888‹Š‡‹888888888888888888888888888888888888888888888888888888888888888zy†-Ž–––––––––––––––––––‘†Š-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††e§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡Š-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&ŠŠ&–––––––––––––––––––3-†y‚888888888888888888888888888888888888888888888888888888888888888‹†‡‹888888888888888888888888888888888888888888888888888888888888888888Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡‘•–––––––––––––––––––––––-†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§m}v‚88888888888888888888888888888888888888888888888888888888888888yŠ‚8888888888888888888888888888888888888888888888888888888888888ry‡-•Ž––––––––––––––––––––-ŠŠ&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡‡e¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§e‘Š-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘†Š•––––––––––––––––––––3-‘†}r8888888888888888888888888888888888888888888888888888888888888zŠ}88888888888888888888888888888888888888888888888888888888888888}vzœ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rw†&Ž–––––––––––––––––––Ž†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥%Š‡‚88888888888888888888888888888888888888888888888888888888888‚Šy88888888888888888888888888888888888888888888888888888888888‚v‡‡•Ž––––––––––––––––––––––&Š†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥>‡†&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š•–––––––––––––––––––2––Ž-‡‡zr88888888888888888888888888888888888888888888888888888888888wŠ‹88888888888888888888888888888888888888888888888888888888888‚†ŠÌ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrrr‚‚‚‚‚‚‚‚‚‚}v}vvvvvvv‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”‘•––––––––––––––––Ž‘†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µÌ†‡‚88888888888888888888888888888888888888888888888888888888‹†‡‹8888888888888888888888888888888888888888888888888888888‹}y‡-•Ž––––––––––––––––––––––––•Š†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-†-e¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§>-Š-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†•––––––––––––––––––––––––Ž-‘†y‚‹8888888888888888888888888888888888888888888888888888888r†‡‹88888888888888888888888888888888888888888888888888888888}‡†Ì¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥‘‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrr‚‚‚‚‚‚‚‚‚‚‚}v}vvvvvvvvyyywwwww”””””‡‡‡†‡††ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†-Ž–––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‚vvvvww”””†††Š††Š††††Š††‡”””wyvvvv‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥d-}8888888888888888888888888888888888888888888888888888888yŠz8888888888888888888888888888888888888888888888888888r‚y‡‡-Ž–––––––––––––––––––––––––––-†Š-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘‡-µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‡Š-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘ŠŠ•–––––––––––––––––––––––––––Ž-‡‡v‚‹8888888888888888888888888888888888888888888888888888vŠ}8888888888888888888888888888888888888888888888888888888}-d¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ú†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚w”””””””‡‡‡††Š††ŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠ†Š†ŠŠŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠ†ŠŠ†Š†Š††Š†Š†Š†Š††Š†Š†Š†ŠŠ†Š††Š†Š†Š†Š†Š‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•––––––––––Ž‘†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚vvy”‡ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠ†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠ†””yvv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§œ588888888888888888888888888888888888888888888888888888‚Šy8888888888888888888888888888888888888888888888888‚vy‡--Ž–––––––––––––––––––––––––––––Ž‡Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-‡‡Ì>µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥%‡†-3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š‡•––––––––––––––––––––––––––––Ž•-‘‡yz‚‹888888888888888888888888888888888888888888888888wŠr888888888888888888888888888888888888888888888888888885 §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ì†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š††Š†Š†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠ††ŠŠ†Š††Š†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡‡•–––––––&Švr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}v”†ŠŠŠŠŠŠŠŠ†Š†Š††Š†Š†ŠŠ††Š†Š††Š††ŠŠ†Š††Š†ŠŠŠ†Š†Š†Š††Š†Š†Š†ŠŠŠŠŠŠŠŠ‡”v}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ì%§§§§§§§§§§§§§§§§§§§§§§§œP88888888888888888888888888888888888888888888888888††‹8888888888888888888888888888888888888888888rrzyw‡-3Ž––––––––––––––––––––––––––––––––•††‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘‡‘>Q¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†Š¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q-†--•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š†•––––––––––––––––––––––––––––––––••-‡”yzr‹8888888888888888888888888888888888888888888r†‡‹88888888888888888888888888888888888888888888888‹8Pž§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡††Š†Š†Š†Š†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠ†Š†ŠŠ††Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†ŠŠ†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†•Ž–––•†”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚vw‡†ŠŠŠŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ††Š†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠŠ”vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡‡¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Šg§§§§§§§§§§§§§§§§§§§§§§§§§§§ Pc‡‡v‚‹888888888888888888888888888888888888888vŠ}88888888888888888888888888888888888888rr}vy---••–––––––––––––––––––––––––––––––––––Ž‡Š†-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--‡‡Úe¥¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ŠŠ¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µQ-‡‡-&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-Ž–––––––––––––––––––––––––––––––––––Ž•-‘‡wvzr‹88888888888888888888888888888888888888}Šz888888888888888888888888888888888888888rzy”‘cž§§§§§§§§§§§§§§§§§§§§§§§§§§§eŠÚŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µ‘”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ††ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠ††Š†ŠŠ†ŠŠŠŠ†ŠŠ†ŠŠ††Š†ŠŠ†ŠŠ††ŠŠ†ŠŠ†ŠŠ††ŠŠ††ŠŠ†ŠŠ††ŠŠ††Š†ŠŠŠ†Š†ŠŠ†††‡‡‡”v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”†•–‘†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv”ŠŠŠŠŠŠŠŠ†Š†ŠŠ†Š†Š†Š†Š††ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†Š†ŠŠŠŠŠ††ŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠŠ‡vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‘§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Vµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Vḋ-y}‚r‹8888888888888888888888888888888rŠ‡8888888888888888888888888888888‹r‚zvy-‡--•Ž––––––––––––––––––––––––––––––––––––––––Ž†Š†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23•--‡‘->Qµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Š†¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µV>%--‡-&•3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š‡•––––––––––––––––––––––––––––––––––––––––Ž•----yvz‚‹‹8888888888888888888888888888888‡Š‹8888888888888888888888888888888‹‚zv”‡-%eVŸ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§µµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥-†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†ŠŠ††ŠŠ††ŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†Š†Š†‡””””w”wyywyvvyvvv}v}}}}‚‚‚‚‚‚‚r‚rrrrrr‹r‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†-”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚vwŠŠŠ†Š†Š††Š†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š‡”””wwyyyyywywyw””‡†ŠŠŠ††Š†ŠŠŠ†ŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š††Š†ŠŠŠ”‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥VdP088‹888888888888888888888888888†Š‹88888888888888888888‹‹r‚zvvy--‘&-••Ž––––––––––––––––––––––––––––––––––––––––––––––-††‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••-&‘‡-&%>dQgµ¥§§§§§§§§§§§§§§§§§§§§§ŠŠ¥§§§§§§§§§§§§§§§§§§§§§µgQed%-&‘‘--•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†•––––––––––––––––––––––––––––––––––––––––––––––Ž•-----yyv}‚‚rr‹88888888888888888888r†”8888888888888888888888888888‹88mdQµ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§%Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}††ŠŠ†ŠŠ†Š†ŠŠ†††ŠŠ††ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠ††Š†ŠŠ†Š†Š†ŠŠŠ†Š†y‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”†ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†Š†ŠŠ††Š”y}}‚r‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}}vy”‡Š†Š†Š†ŠŠŠ†Š†ŠŠ†ŠŠ††ŠŠŠ†ŠŠ†Š†Š†ŠŠ†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ§¥¥¥¥¥¥§¥¥§§¥¥¥¥¥¥¥§¥§¥¥¥¥Ÿ§¥¥¥¥§¥¥¥§¥¥¥§¥¥§¥¥Ÿ¥§¥¥¥§§¥§¥§§¥¥¥§¥¥¥¥§¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥§§¥¥¥¥¥¥§§§¥¥¥Ÿ¥§¥§¥¥§¥¥¥¥¥¥¥¥¥§¥¥§¥§¥§¥¥¥¥¥¥§¥§¥¥¥¥¥¥¥¥¥¥¥¥¥¥§¥§¥¥¥¥¥¥¥§§¥¥¥¥§¥¥¥¥¥¥¥¥¥¥¥§¥¥¥§¥¥§¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥§¥¥¥¥§¥¥¥§¥¥§¥¥¥¥ŸtPPP8888‹yvvvzz‚‚‚rrrrrrry†yrrrrr‚‚‚‚zzzv}vyyw-‡----•••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•••---‘-‘---%deeQQQVgµVVV†ŠVµµVVVgQQeed>%%Ú-&-‘‘----•••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&‡Š‘•––––––––––––––––––––––––––––––––––––––––––––––––––––3Ž•••------yyyvvvzzz‚‚‚rrrrrr”Šzrrrrrrr‚‚zz}}vvv‹8885PPP¥§§¥§§¥¥¥¥¥¥¥§¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥§¥§§§¥¥¥¥¥§¥¥§¥§§§¥§¥§§¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥§¥¥¥¥¥¥¥¥¥§§¥¥¥¥§¥¥¥§§¥¥¥¥¥¥¥¥¥¥¥¥§¥¥§¥Ÿ¥¥§§¥¥¥¥¥¥§¥¥¥¥¥§¥§¥¥¥¥§¥¥¥§¥¥¥§¥¥¥§¥¥¥¥¥§¥¥¥§¥¥§§¥¥¥¥¥¥¥¥§¥§§¥Ÿ§¥¥§¥¥¥¥¥¥¥Ÿ¥§¥¥¥¥¥¥§§§¥¥§¥¥¥¥§¥¥¥Ÿ¥¥§¥§¥¥§%Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚}vy””‡ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ†Š†ŠŠ†ŠŠŠŠ††ŠŠŠŠŠŠ†ŠŠ†””wyvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rv‡Š†ŠŠ††Š†Š†Š†ŠŠ††Š†ŠŠ†Š†Šy}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚y††ŠŠ††ŠŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÌŠŠŠŠŠŠŠŠŠŠŠŠ-ddddddddddddddddddddddddÚŠ‡ddddddddddddddddddddddddddŠŠ%dddddddddddddddddddddddddÚ‡&¥§§§§§¥¥¥µµVQedddddÌŠ†&-----&•••3•••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ•••••&•------ŠŠ‘-----•••••••3Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡††•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––ŽŽ••••••------&‡Š-ddddQQVVµµµ§§§§§§¥¥Ú‡ÚddddddddddddddddddddddddÚŠ‡dddddddddddddddddddddddddd†Š%dddddddddddddddddddddddd‡ŠŠŠŠŠŠŠŠŠŠŠŠ%ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}}vyy””††Š†Š†Š†Š†ŠŠ†Š†ŠŠ†Š†Š††ŠŠŠ††Š††Š†Š†Š†ŠŠŠŠŠŠŠŠŠ†‡wwvv‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†ŠŠŠŠ†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠ†ŠŠ††v‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚y†ŠŠ††Š†Š†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠ††r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†‡Ÿ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥††Š†Š†Š†Š†Š†Ú§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥††µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§†-§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥††¥§§§§§§§§§§§§§§§§§§§§‡ŠŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––––•†-§§§§§§§§§§§§§§§§§§§§V†-¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†‘§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‘†Š†Š†††Š†Š†-¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§V†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vvy””‡ŠŠŠ†ŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠŠŠŠŠ‡”wyvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ††Š†Š††ŠŠ††Š†ŠŠ††ŠŠ†‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rwŠŠŠ†ŠŠŠ†ŠŠŠŠŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š&§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥†ŠŠ†Š†Š†Š†Š†‘§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Ÿ‡†Q§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§VŠ‡§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§-Šd§§§§§§§§§§§§§§§§§§§§†‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Šd§§§§§§§§§§§§§§§§§§§§ÌŠÌ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†µ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†Š†ŠŠŠ†Š†ŠŠ-¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥&Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyy”‡††Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Š††Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠŠŠŠŠŠ†‡”wyvv‚‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠŠ†Š†ŠŠ†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š†ŠŠ††ŠŠ†††Š††Š††ŠŠ††Š††‡‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§¥Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š†&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†ŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††¥§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§dŠv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚‚}yyww†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†Š††Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠ†‡”wyvv‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†Š†ŠŠ†ŠŠ†Š††ŠŠ††Š†Š†Š”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†V§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§‡†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†Š-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&ŠÚ§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§d†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚v}y‡Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†Š†Š†ŠŠ††Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠ‡”yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†ŠŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠŠŠŠŠŠ}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rŠŠ††Š†Š†Š†Š†Š†ŠŠŠ†Š†Š†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§eŠ‡–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡††•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†d§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§Q‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrrrrrrrr‚‚‚‚‚‚‚}‚v}}}vvvvvvvvvyyw†ŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠ†ŠŠŠ†ŠŠŠ†Š†ŠŠŠ††ŠŠ†Š††Š†Š†ŠŠŠ‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠ†††ŠŠ†ŠŠ†Š††ŠŠ††Š†††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††ŠŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†Š†Š†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠÌdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddŠ†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†‡ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd%Š†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry””””””””‡‡‡‡††Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†Š††Š†ŠŠ†Š†Š††ŠŠ†Š††ŠŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†ŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†”””wwyvvvvv‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†Š†ŠŠŠŠ††ŠŠ††Š†Š†ŠŠŠ†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š‡Ž–3–ŽŽŽ––3–Ž––Ž3Ž–Ž3Ž3–Ž3Ž3Ž3ŽŽ3ŽŽ3Ž3Ž––Ž3Ž3Ž3–––Ž3Ž–3–3–Ž3–ŽŽ3Ž3ŽŽ3Ž–3Ž–3–Ž–3Ž3ŽŽ3–3–Ž3Ž3ŽŽKOOOOOOOçOçOK–ŽŽ3Ž––ŽŽ3Ž–Ž3Ž3Ž3Ž3ŽŽ3–Ž3Ž–Ž3–Ž3Ž3ŽŽŽ3Ž3ŽŽŽ3Ž3ŽŽ–3Ž3Ž–Ž3Ž–3Ž3–ŽŽ3Ž–3Ž3ŽŽ3Ž3–Ž––3ŽŽ3Ž3Ž–Ž3Ž3–3Ž–3Ž3Ž–Ž–3–ŽŽ3Ž–3Ž3Ž–––––Ž3––Ž–3Ž–Ž3–Ž–Ž3ŽŽ3–Ž3–Ž3–ŽŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††‡•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3‡Š†-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Ž3Ž3–Ž3–Ž–––3–Ž––Ž3ŽŽ3Ž3ŽŽŽ3Ž3ŽŽ3Ž3Ž–3Ž3Ž3Ž3Ž3––Ž3Ž3–Ž3Ž––Ž3Ž3ŽŽŽ3Ž3Ž3–Ž3–Ž–3Ž––Ž3ŽŽŽ3–Ž3Ž3Ž–3–ŽŽ3Ž–Ž3Ž–Ž3Ž–Ž3Ž–3Ž3Ž3–Ž3Ž–3Ž––3Ž3ŽŽŽ3Ž–3––Ž––Ž3KOOOOOOOçOçOK–ŽŽ3–––ŽŽ–3Ž3Ž–3Ž3–ŽŽ–3–3Ž–3Ž3Ž3–3Ž–––3Ž3–Ž3–Ž––3Ž3Ž3Ž3Ž3Ž3Ž–Ž3Ž3ŽŽ3Ž3Ž–Ž3Ž3Ž3Ž3Ž3–3ŽŽ–Ž3ŽŽ3‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†Š††Š†Š†Š†Š†Š†Š†Š††Š†ŠŠ†††Š††Š†Š†ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠ††ŠŠŠ†ŠŠŠŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠ†Š‡‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠ†ŠŠ†Š†Š††ŠŠ†Š†ŠŠ††ŠŠ†ŠŠ†Š†ŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ††‡‡””wyvvvvvv‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†Š†Š†Š†Š††ŠŠŠ†ŠŠ†ŠŠŠŠ†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2çç2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††‘3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2Oçn––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹y††Š†ŠŠ††ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠ††ŠŠ††Š†Š†ŠŠ††ŠŠ††ŠŠ††Š†Š†Š†ŠŠ†ŠŠ††Š†ŠŠ†Š†ŠŠwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†††Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠŠŠŠ†‡”””wwyvvvvvŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ†Š†Š†ŠŠ†Š†Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––NKKKKKKKKKKKK2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘††-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2KKKKKKKKKKKKM––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†Š†Š†ŠŠ†Š†Š†ŠŠŠ†ŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†ŠŠ††Š†Š†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠŠŠŠ†Š†ŠŠ†Š†‡}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†Š†††††ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†ŠŠŠŠŠ†ŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠ††ŠŠ††Š†Š†ŠŠŠ†ŠŠ†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡Š†-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––†Š3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†Š†Š†ŠŠ†Š†Š††ŠŠ†ŠŠŠŠ†Š††ŠŠ††ŠŠ†ŠŠŠ†Š†ŠŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†Š†Š†Š††ŠŠ††‡‡‡”‡””ww”yyyyyvyyvvvv}}}}}}}‚}‚‚‚‚‚r‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹w‡††Š††Š†Š†ŠŠ†ŠŠ†Š†Š††ŠŠ†Š†Š†Š††ŠŠŠ†Š†ŠŠŠŠ†Š†ŠŠŠ†ŠŠŠŠŠ†ŠŠŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†Š†Š††Š††ŠŠ†Š†Š†Š†ŠŠ†Š††ŠŠŠ†ŠŠ†ŠŠŠŠ††ŠŠ†Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•‡†‘•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡ŠŠŠŠ†ŠŠŠŠŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ††ŠŠ†ŠŠ†Š††Š†Š‚‚rrrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚‚}}}vyvy”””‡†‡Š†Š†ŠŠŠ††Š†ŠŠ†††ŠŠŠŠ††ŠŠ†Š††ŠŠ†Š†Š†Š†Š††Š†ŠŠ†Š†ŠŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†Š†ŠŠŠ††ŠŠ†Š†Š††ŠŠŠ†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‘Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚}}vy”†††Š†Š†Š†Š†ŠŠŠŠ††ŠŠ††ŠŠŠ†ŠŠ††Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠ†‡wyvv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚}}}}yyyyw””‡†Š†Š†ŠŠ†ŠŠ†Š†Š†ŠŠŠŠŠŠ†ŠŠŠŠ††Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ†Š†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘††&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyy”†‡†ŠŠŠ†ŠŠŠ††ŠŠ†ŠŠŠŠŠ††Š†Š†Š†Š†Š†Š†Š††Š†ŠŠŠ†ŠŠ†ŠŠŠŠ‡”wyvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚}}}vvvyy””‡‡††ŠŠŠ†ŠŠŠ†ŠŠŠ††ŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†‡&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}}vy””††Š†Š††ŠŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠŠ†Š†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠ†ŠŠŠŠ†””yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‹rr‚r‚}‚}}vvyyy””‡†††ŠŠŠ†Š†Š†ŠŠ†Š†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-&&&&•332?2z2zz2z??22?zŽ&•-&&$dddddddd$$$$&&&&••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡†‡-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚r‚}yyy”†ŠŠ††ŠŠŠ†ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†Š††ŠŠ†Š†ŠŠŠŠ†ŠŠŠŠŠŠ‡””wvv‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚r}‚}}}r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&†Š†&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘‘3|8999ï9ïïïï9ïïïïïï‹&‘‡‘‘‘‘‘->ÊÊÊÊÊÊÊÊÊÊÊje-‘-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡Š‘•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}}vy””††ŠŠŠ†ŠŠ††ŠŠ†Š†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†Š†Š†Š††Š††ŠŠ†Š†ŠŠŠŠŠ†‡”wvvv‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠŠŠŠŠŠ†‡‡”””ywyvvvv‚‚‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†---&-&-&-&-&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‘††-3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘z9ï99999999999999998x‘‘‘‡‘‡‘‘‘gÊÊÊÊÊÊÊÊÊÊÊÊÊ£‘-Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-††-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-&-&-&-&-&-&-†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}v‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}vyw”‡Š†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠŠŠ†ŠŠŠ†‡””vvv‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠŠ†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠ†Š†ŠŠŠŠŠŠŠ††‡”””ywyvvvv‚‚‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠ•––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-††‡•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘}999ï999ï9ï99ï999999[-‡‘‘‘‘‘ÌjÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ&‘•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--††-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚†ŠŠŠŠŠ””wvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyyw††ŠŠŠ†Š††Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š††Š†Š†Š†ŠŠ†Š†ŠŠŠŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ†Š†Š†Š†Š†ŠŠ†††Š††Š†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†‡”””wwyvvvv‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-†Š‡&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--8ï99999ï9[z3xxx44--‘‘‘‡‘‡->jÐÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ>‘&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡††&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†Š†Š†ŠŠŠŠŠŠŠŠ†‡”wvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚‚}yww‡†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ††Š†Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ††Š†Š†Š†ŠŠŠ†Š†ŠŠ†Š††Š†Š††Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†””””wyyvvv}}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡Š‘-Ž2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‹99ï999z-‘‡‘‘‘‘‘‘‘‘‘‘‡‘‘‘‘‘‡‘‘&gjÊÊÊÊÊÊÊÊÊÊ£‘‘Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-‡†‡-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ry†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠŠŠŠ””wvv‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}vyyw”†ŠŠ†ŠŠ†Š†ŠŠ††ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š†Š†Š††ŠŠ††ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠŠŠ†ŠŠŠ††ŠŠ†Š††Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠ†Š††Š†Š†Š†Š†Š††Š†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠ†‡‡””wwyvvr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-††‡•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡[ï999[-‘‘‡‘‘‡‘‡‘‡‘‡‘‡‘‘‡‘‡‘‘‘‘‘‡‘‡-gÊÊÊÊÊÊÊÊÊ-‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‘††-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†ŠŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†Š††ŠŠŠŠŠŠŠŠŠ†””yvv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚r‚vvy”‡†Š†Š†ŠŠ†Š†Š†Š†ŠŠ†Š‡}‹‹‹‹‹‹‹‹‹‹‹‚yw””‡†ŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ††Š†ŠŠ††ŠŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ††ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š††Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠ†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--††-•3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘z99|x‘‘‡‘‘‘‘‘‘‘‘‘‘‘‘‘‡‘‘‘‘‡‘‘&%‘‘‘‘‘gÊÊÊÊÊÊÊÊ>‡-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‡†-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†ŠŠ†ŠŠŠ†Š††ŠŠ†Š†Š†ŠŠ†††Š†Š††Š†ŠŠŠŠŠŠŠŠŠ†‡”wv}‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚}vyy”‡ŠŠ†ŠŠ†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚}}}vyvyy””‡‡‡ŠŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š††ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†Š††ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ††ŠŠ††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘††-3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-48?-‘‘‘‘‘‡‘‡‘‡‘‡‘‡‘‡‘‘‡‘‡‘£ÊÊÊ‘‘‡‘&£ÊÊÊÊÊÊÊj‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ&‡†‘-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†vr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}}yww†‡ŠŠŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†ŠŠŠŠŠŠ†‡”wv}}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}vyy”‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚}}vvvyww”‡”‡†Š††ŠŠ†Š†ŠŠ††ŠŠŠŠ†ŠŠ††ŠŠ††Š†ŠŠŠ††ŠŠ†ŠŠ††ŠŠ††ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†Š‘&32––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&-|3-‘-‘‘‡‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘eÊÊÊÊÊÊe-‘‘‘&jÊÊÊÊÊÊÊ-‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†‡-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}}yy”†ŠŠ†Š†Š†Š†ŠŠ†ŠŠŠ†Š†Š†Š†Š†Š†Š†Š†Š††Š†ŠŠŠŠ†ŠŠŠŠ‡”wyv‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚‚‚‚‚}vvvyyww”‡†††ŠŠŠŠ†Š†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†ŠŠ††ŠŠ††ŠŠ†Š†Š†Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&‘††-&Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘|ï9‹|3‘‘‘‡‘‡‘‡‘‡‘‡‘‡‘‡‘‘&£ÊÊÊÊÊ£‘‘‘‘&gÊÊÊÊÊ‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&‡††-3•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠŠ†ŠŠŠ†ŠŠ††ŠŠŠŠŠŠ†ŠŠŠŠŠŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠŠŠŠ†‡”wv}‚‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚r‚‚}}vvyyyw”‡‡†Š†ŠŠŠ†ŠŠŠ†ŠŠ†Š†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-†††-ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‘z9984‘‡‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‡‘‡‘eÊÊÊÊÊÊÐ>‘‘‘‘>ÊÊÊÊj‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‡†‘-•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Š†Š††ŠŠ†ŠŠŠ†††Š†ŠŠ††Š†††ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠ†”wyv‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr‚‚}}vvv‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&‘††-&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-x9ï84‘‘‡‘‡‘‡‘‡‘‡‘‡‘‡‘‡‘‘‘‘‡‘ÐÊ£>%-‘‘‡‘‡‘‘-Ì>j‘‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––3-‘‡†‘&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†ŠŠŠŠŠ†Š†Š†ŠŠŠŠ†Š†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ††ŠŠ†Š††Š†ŠŠŠŠŠŠŠŠŠ‡”yv}v‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ŠŠŠŠŠŠŠ†‡”””wwyvvvv}‚‚‚‚‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘†Š‘•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--89ï9[x‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‡‘‡‘‘‘ge‘‡‘‘‘‘‘‘‘‘‘‘‡‘‡‘‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3-‘‡†-&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†yr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryŠ†Š††ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†‚‹‹rr‚vyy”‡ŠŠ†ŠŠ††ŠŠŠŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠŠŠŠŠ†‡wyv}‚rr‹‹‹‹‹‹‹‹‹†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†‡”””wwyvvvv}‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘††‘-3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&&&-&&&&•–––––––––•&&&&&&&•Ž––––•&&&&&Ž––––3&&&&&&-&&&&&••••3––––––Ž&&&&&-–––––––•&&&&-&•–––––––•-&&&•––––––3&&&&-&&•––––––•-&&&&3–––––––3&&&&••3––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‹ï9ïï9|3-‘‡‘‡‘‡‘‡‘‡‘‡‘‘‘‘‘‡‘‘$%&‘‘‡‘‡‘‡‘‡‘‘‘‘%‘‘Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†‡‘-3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡ŠŠŠ††ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ}‹‹‹‹‹‹‹‹‹‹rr‚}}yy”‡†ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠ††Š†Š†ŠŠŠŠŠŠŠŠŠŠ‡‡yyv‚‚‚Š†Š†Š†Š††Š††Š†Š†ŠŠ†Š††Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†Š‡‡”””wwvvvvv‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--††‘-ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-&-&&-&&•––––––3•--&-&-&-&Ž––––&-&-&-3––––3-&-&-&•••••••&-&--&•Ž–––Ž--&-&&Ž––––•&-&-&-&&&–––––&--&&&3–––––3&-&--&&-&-Ž––––––•&-&-&•–––Ž•&-&-•3Ž––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘[ï999ïï9‹||z&‘‘‘‘‘‘‘‘‡‘‡‘‘‘‘‘‘gÊ£geÌ%%Ì%ggÊÊ-‘•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‡‡†-•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}vvy‡††ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†ŠŠŠ†Š†Š††Š†Š††Š†Š†ŠŠŠŠŠŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š†Š†Š†Š†Š†Š†Š†Š††Š†Š†Š†Š†ŠŠ†ŠŠ†ŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠŠŠ†‡”””wwyvvvv‚‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-‘†Š‘&Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-&-&--&--•––––3&--&-&-&-&&––––Ž&&-&-&3––––•&-&-&&–––––––––•-&&&-&––––&&-&--3––•&--&-&-&---–––•--&&-•–––––•&-&-&&•--&-&•–––––––•&-&--••&--&&•––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡z99ï9999ïïïï9[}-‘‡‘‡‘‘‘‘‘‡‘‡‘‡‘£ÊÊÊÊÊÊÊÊÊÊÊÊÊÌ‘&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–Ž-‘†‡-&•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†Š†Š††Š††ŠŠŠ†Š††Š†Š†Š†Š‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚}vyy‡†ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š††ŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠ††Š††Š†Š†Š†Š†Š†Š††ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†‡‡”””wyvvv‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠ-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘‡†‡-ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-&-&-&&-&&•––•&--&&-&-&-&&Ž––––&&-&-&Ž––––•&--&-•––––––––––•-&---•––––---&-&•3&--&&••-&-&&&3•--&&&•–––––•&&-&-•–––-&&-&-Ž–––––––•&-&&&-&&3Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-48ï999ï999999ï99|z4-‘‘‡‘‡‘‘‘‘‘‘‘‘ÌgÊÊÊÊÊÊÊÊÊÊÊg‘-Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‘†‡-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†ŠŠŠŠ†ŠŠŠ††Š†ŠŠŠŠ†Š†Š†Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚yŠ†ŠŠ††Š†ŠŠŠŠ†Š†Š†ŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠŠ††ŠŠ††ŠŠ††ŠŠ†ŠŠŠ†ŠŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ††Š†††Š††Š††Š††Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠ†w‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•-‘†‡‘&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&--&-&33--&--&•--&&&•3&-&-&&–––––&--&-&Ž––––•--&&-•–––––––––•&-&-&&•––––Ž&&&-&---&&&•Ž–3&&-&----&&&•–––––•&-&-&&3ŽŽ–Ž&&-&-&•––––––––-&---&3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--‹999ï9999ï999ï9ï99|?}4-‘‘‡‘‡‘‡‘‘‡‘ÌÊÊÊÊÊÊÊÊÊÊÊ-‘3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡†‘-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†wr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Š†ŠŠ†ŠŠŠ†Š†Š†ŠŠŠŠ†Š†ŠŠyr‹‹‹‹‹‹‹‹rrrrr‚‚‚‚v}vvvyww”””‡†Š†ŠŠŠ†Š†ŠŠŠŠŠ††Š†Š†ŠŠŠ†ŠŠ††Š††ŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š††Š†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ††ŠŠ†Š†ŠŠ††ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†Š††ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š††Š†††††Š†v‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘†Š‘-•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž&&&-&&Ž–3&&-&&-&&&&3––&-&-&&––––Ž&&&-&&Ž––––•-&&-&-333•••••&-&-&-&•–––––––--&-&&&--•Ž–––Ž-&--&&&&-•–––––•--&--&-&-&---&-&-&-&Ž––––––•-&&&-•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘|9ï99ï9999ï999ï9ï9ï999‹|z3--‘‘‡‘‘‘‘ÌÐÊÊÊÊÊÊÊÊÊÌ‘&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23•&‘‡†--•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠ†Š†Š†ŠŠŠŠ†Š††Š†ŠŠŠ†ŠŠŠ””””‡‡†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†Š††ŠŠ†Š†ŠŠŠ††Š†ŠŠŠ†ŠŠŠ††ŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠŠ†Š†ŠŠ†Š†Š†Š†Š†ŠŠŠ†ŠŠŠŠ†Š†Š†Š†Š†Š†Š†ŠŠŠ†ŠŠ†Š†ŠŠŠ†Š†ŠŠ†ŠŠŠŠ†Š†Š††ŠŠŠŠŠ†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠŠ†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹z††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--††‘-••–2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&&--&&Ž––3--&--&-•3––Ž-&&-&&–––––&&--&&–––––•&&--&-&---&-&-&&••33––––––––––&&-&--&&––––––Ž&-&&---•––––Ž•&--&-33333333333•-&-&-•–––––•-&--&&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡z99ï99ï99ï999ï99999ï99ï9ïï9‹|qzx-‘‡‘&jÊÊÊÊÊÊÊÊg‘-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2•&-‡‡‡-&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚‚‚‚}vvv†††ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ††Š†Š†Š†Š†ŠŠŠ†Š†Š†Š†Š†††Š†Š†Š†Š†Š†ŠŠŠ†Š†ŠŠ††ŠŠ†Š†Š†ŠŠ††ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†Š†ŠŠ††Š†Š††ŠŠŠ†Š†Š†Š†Š†ŠŠ††ŠŠ†Š†ŠŠ††ŠŠ†Š””††††ŠŠŠ†ŠŠŠ†Š††ŠŠ††Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--††‡-&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ33Ž3–––––3ŽŽŽŽŽ–––––ŽŽŽŽŽŽ–––––ŽŽŽ3ŽŽ–––––ŽŽŽŽŽ3ŽŽŽ3Ž3ŽŽŽ–––––––––––––––––ŽŽŽŽŽŽŽ––––––––ŽŽŽŽŽŽ––––––ŽŽŽŽŽŽ–––––––––––––ŽŽŽŽ3Ž–––––Ž3Ž3Ž3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-x9ï9999||999‹‹898‹8|‹‹899988‹‹‹9‹x‘‘‘‘-gÊÊÊÊÊÊÐ-‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2•-‘‡†‡-••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠŠŠŠŠŠŠŠŠ†ŠŠŠŠ††ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠŠŠ†Š†ŠŠŠ†Š†ŠŠŠ†Š†Š†ŠŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ††ŠŠŠ†ŠŠ†Š†ŠŠ††Š†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†ŠŠ††ŠŠŠŠŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†Š}‚‹‹‹‹‹rrrr‚‚‚‚‚}vvyy””””‡‡†ŠŠ†Š†ŠŠ††Š†ŠŠŠ†Š†ŠŠ†ŠŠ†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•-‘†Š‡&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––--89ï993‘‘4[[‘‘2|-‘x[?&-3993‘-&-?99?4-‘‘kÊÊÊÊÊÊÊÚ‘&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••&‘††--••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}‡Š†Š†Š†ŠŠ†Š†ŠŠŠ†Š†ŠŠ††Š†Š†Š†Š†Š†ŠŠŠ††ŠŠ†Š†Š†ŠŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ†Š†Š†ŠŠ††ŠŠ††Š†Š†ŠŠ††ŠŠ†ŠŠ†ŠŠ†ŠŠ†‚}y”††ŠŠ†Š†Š†Š†ŠŠ†Š†ŠŠ†ŠŠŠ††Š†††Š†Š†ŠŠ†ŠŠ†ŠŠŠŠ††ŠŠ†ŠŠŠ‡”w}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚r‚}}}vvyyy””‡‡Š†Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--‘†Š‘-••2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘‹ï999[‘‘4&x-‘38x‡&zz--z‹[‘‘?[4‘?9ï9?-‘ÐÊÊÊÊÊÊg‘-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••-‘†‡‘-••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚”Š†Š†Š†ŠŠ†Š††ŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†Š†Š††ŠŠŠ†ŠŠ†Š†Š††ŠŠŠŠ†Š††ŠŠ††ŠŠ†ŠŠŠ††ŠŠ†Š†Š†ŠŠŠ†ŠŠŠ†Š†Š†ŠŠŠ††‡”wwyyvv}}‹‹‹‹‹r‚‚y”‡ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†ŠŠŠŠŠ†ŠŠ†ŠŠ†Š†Š††ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†wvv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--‘†‡‘&•Ž–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‘q99ïï0-‘3|3-‘-03--?[x‘-24‘-qqz-‘3999z‘‡&ÐÊÊÊÊÊ£‘‘3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––3-&‘‡†‡-••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†Š††ŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†Š††ŠŠŠŠŠ†ŠŠŠ†ŠŠ††ŠŠ‡”‡w”yyyvv}}‚}‚‚‚rr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}yw‡†Š†ŠŠŠ†ŠŠ†ŠŠ†Š††ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ††ŠŠ†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ‡wy}‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--‘††‘&&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡-q‹9998‹‹998‹‹99|‹|‹|‹99‹‹‹999‹‹89993‘‘‘-gÊÊÊÊÌ‘‘&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–•&-‡‡†‘-&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v††ŠŠ†ŠŠŠŠ††ŠŠ††Š†ŠŠŠŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠ†ŠŠ‡”””wyyvv}}}}‚rrrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚}y”††ŠŠ†ŠŠ†ŠŠ†Š†Š†Š††ŠŠ†Š†ŠŠ†ŠŠ†Š†Š†Š†Š†Š†ŠŠ†Š†Š†ŠŠŠŠŠ”yvv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡†‘-&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-‘‘-xzq||‹‹98899899999989899989999888|3-‘-ejgÌ‘‘‘‘-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‡‡‡-&•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†Š†Š††Š†ŠŠ†ŠŠŠŠ‡””wwyyvv}}}‚‚‚‚rrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚vv”††ŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠŠ†Š†ŠŠŠŠŠ†ŠŠ†ŠŠŠ†Š††Š†ŠŠŠŠŠ†‡wv}‚rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡†‡--••3–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3•••••••••333•3•3•3••3•3333•33•33•3•3•3••••••••••••–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23&-‘‡‡‘--3Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r}}}}‚r‚rrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}vy‡‡†Š†Š††ŠŠŠŠ†Š†Š††ŠŠŠ†Š††Š†Š†ŠŠ††Š†ŠŠŠŠ†Š††Š†Š†ŠŠŠŠ†‡wvv‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••&-‡†Š‡--3–––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&&‡‡†--•••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}y”†Š†††ŠŠŠ†ŠŠŠ††Š†ŠŠ†Š†ŠŠ†ŠŠŠŠ†Š††Š†ŠŠ†Š†ŠŠ†Š†Š†ŠŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•&-‡‡†‡‘-•3Ž–2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&-‘‘‡‡‘--••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡†r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr‚‚‚‚v††ŠŠŠ††ŠŠ†Š†ŠŠŠŠ†ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--‘‡†‡‘-&•Ž–2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•--‡‘‡‡‘-&•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚‚‚v}vvvvvyww””””‡‡†††ŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠ†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••--‡†‡‘&-3•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––Ž3•--‘†‡‡--•••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠŠŠ†Š†Š††Š†ŠŠ†Š††Š†ŠŠ†Š††ŠŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--‘†††‘-&•3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ•&-‘††‘--••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‘Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚‚rrr‹r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚‚vvyw”‡†ŠŠ†Š††Š†Š†Š††Š††Š†ŠŠ†Š†Š†ŠŠ†ŠŠ†Š†Š†Š†ŠŠŠ†Š†Š†ŠŠ†ŠŠ†Š†ŠŠŠ††ŠŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ††ŠŠ††Š‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••---‘††‡--&••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-&-‘‡‡‡‘---••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹v†ŠŠŠŠŠŠ†‡‡”””wyyvv}v‚‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‚}vvy”‡†ŠŠŠŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠŠ†Š†ŠŠŠ†Š†ŠŠŠ†ŠŠŠ†Š†ŠŠ††ŠŠ†ŠŠ††Š†Š†ŠŠŠ†Š†Š†Š†ŠŠŠ†ŠŠŠy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•&--‡‡†‡‘-&-•ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23••&&-‡†‡‡‘--••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Š††Š†Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‡‡”””wwyvvvv‚‚‚‚‚rrrrrr‚}vvw”‡†Š†ŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š††ŠŠ†ŠŠ†Š†ŠŠ††ŠŠ†Š††ŠŠŠŠ†Š†Š††ŠŠ†Š†ŠŠŠ†ŠŠ†ŠŠŠ†Š†Š††ŠŠ†Š†ŠŠŠ††ŠŠ††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••--‘‡††‡‘-&•3•2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2––Ž••--‡‡‡‡‘--••••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”ŠŠŠ†ŠŠŠ††Š†Š††Š†Š†Š††Š†Š†Š†Š†ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠ†Š††ŠŠŠ†Š†Š††ŠŠŠŠ†ŠŠ†ŠŠ†ŠŠŠŠ†Š†Š†Š†ŠŠ†ŠŠŠ†ŠŠŠŠ†Š††Š†Š†ŠŠŠ††‡”””wwyyyyvv}vv}}}‚‚‚‚‚rrrrr‹rr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠ‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•••---‡‡†‡‘-&-•3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––2Ž••&-‘‘‡‡‡‡---•••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†ŠŠ††ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Š†ŠŠŠ†Š††Š†Š†Š†Š†Š††Š†Š†Š†Š†ŠŠ†Š†ŠŠ††ŠŠ†Š†Š†ŠŠ†ŠŠŠŠ†Š†Š†ŠŠ†Š†ŠŠŠ†ŠŠŠ†††ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠŠwv}v}}}‚‚‚‚r‚rrrrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••••---‘‡††‡‘‘--&•3Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽ••-&-‘‘‡‡†‡‡---••••––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}†Š†ŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠ††Š†ŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š†Š†ŠŠ†ŠŠŠŠ†ŠŠŠ†Š†ŠŠŠŠ†ŠŠ†Š†Š†ŠŠŠŠ†Š†Š††ŠŠ†Š†ŠŠŠ†Š†Š†Š†Š†ŠŠŠŠ†Š†Š†vv}‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•••----‡‡†‡‡‘‘-&-••ŽŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––23Ž••&&-‘‘‡‡†‡‡---&••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚‡†Š†ŠŠŠŠ†ŠŠ††ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š††Š†Š†Š†ŠŠ††Š†Š†Š†ŠŠ†ŠŠ††ŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†Š†Š†ŠŠŠ†Š††Š†ŠŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠŠŠ‡”””wywvvv}‚‚‚‚rrrr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––••••&----‘‘‡††‘‡‘-&-•3•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž3••---‘‡‡‡‡‡‡----&••••Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹ryw”‡‡‡†Š†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ††ŠŠ††ŠŠ†ŠŠ††ŠŠ††ŠŠ†Š†ŠŠ†Š†Š†Š†ŠŠŠ†ŠŠŠ†Š†ŠŠ†ŠŠŠ†ŠŠŠ†Š†Š††ŠŠŠ†ŠŠŠŠŠŠ†ŠŠ†ŠŠ†ŠŠ††Š†ŠŠ††Š††Š†Š††Š†ŠŠŠŠŠ†Š†ŠŠŠŠŠŠŠŠŠŠŠ†‡‡‡”wwyvvv}‚‚‚‚r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3••-&----‘‡‡‡†‡†‡‘‘-&-&•••ŽŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––2Ž•3••-&---‘‘‘‡‡‡‡‘‘-----&•••Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrr‚r‚‚}}}}vyyyy”w”‡†Š†ŠŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠŠŠŠ†Š†Š†Š†Š†ŠŠ†ŠŠ†Š†Š††Š†Š†ŠŠŠ††Š†Š†††Š†Š†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†ŠŠ††Š†Š†ŠŠ††Š††Š††Š†ŠŠ†Š†ŠŠŠŠ†ŠŠŠŠŠ‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž••••••••&-------‡‡‡‡‡†‡‡‘‡‘-&-&••••ŽŽ––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2ŽŽŽ••-&-&--‘‘‡‡Š‡‡‡‡‘--------••••••Ž•Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrr‚‚‚‚}}vvvyywy””‡†Š†Š††Š†ŠŠŠ†ŠŠŠŠ†ŠŠ†Š†Š†ŠŠ†ŠŠŠ†Š†ŠŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†Š†Š†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š†Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r†Š‘•••-&-••••-&••-&••••••••&-•-•••••-•&••-&•••••-•-&••••-•••••-•-•••••••&•-••-•-•------------------‘‡‡‡‘‡‡‡‡†††‡‡‡‘‘-‘---&-&-•••33ŽŽ––2––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–ŽŽ•Ž••••&&&&&--‘‘‘‘‘‘‡†‡††‡‡‡‡‡‡‘-------------------&-•&-&••••••••&•••-&•••••••&•-••&•••&••-&•••-•-•&-&•-••••••&-•&••-••••-&•-••••†Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚}vy‡††ŠŠ††Š†Š†Š†ŠŠ†ŠŠŠŠ†Š†Š†Š†Š†ŠŠ†Š†Š††ŠŠ†ŠŠ†ŠŠŠ†ŠŠ†Š†ŠŠ†ŠŠ†ŠŠŠŠ††ŠŠ††ŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†ŠŠ†Š†Š†ŠŠ†Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††--‘‘‘--‘--‘‘--‘-‘‘‘‘‘‘-‘-‘‘‘-‘-‘‘-‘‘‘‡‘‘-‘--‘‘--‘--‘‘---‘‘-‘‘‘‘‘‘--‘‘-‘-‘-‘‘--&&&-&&-&-&&-&&-&••3••3•••3Ž–Ž–––2–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŽŽŽ••3•••••&•&-&-&-&-&&-&-&&----‘-‘‘‘‘-‘‡‘‘‘‘‘-‘‘‘‘‘-‘-----‘‘‘‡-‘-‘‘---‘-‘‘‘----‘‘‘‘‘‘‘-‘---‘‘‘‘-‘---‘‘‘-‘††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr‚vy”‡ŠŠ†Š†ŠŠ†Š}vyyyw”‡‡††Š†Š†ŠŠŠŠ†Š†Š†ŠŠ††Š†ŠŠ†ŠŠ†ŠŠ†Š†Š††ŠŠŠ†ŠŠŠ†ŠŠŠ†ŠŠ†ŠŠ†ŠŠ†Š†ŠŠŠ†Š†Š†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†32–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž--•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•--Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––2–––––––2––––––––––––––––––––––––––––Ž‡†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rr}vy”†Š†‹‹‹‹‹‹‹‹‹‹‹‹rrr‚r‚}}}vyyyy””‡‡Š†ŠŠ†ŠŠ†ŠŠŠ†ŠŠŠ††ŠŠ††ŠŠ††ŠŠ†ŠŠ†ŠŠ†Š†Š†Š†ŠŠŠwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹yŠ‡Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Š}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrrrrr}‚}}vvyy”””‡†Š†ŠŠŠ†Š†Š†Š†ŠŠ†ŠŠŠ†Š††y‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‡Š&–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––††-–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š‘––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹rrr‚‚‚}}}vyyyw”‡††‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠŠŽ–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†”r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž•Ž––––––––––––––––––––––––––––––––––––––––––––-††––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†-––––––––––––––––––––––––––––––––––––––––––––Ž•Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹}Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3†Š-–––––––––––––––––––––––––––––––––––––––––––ŽŠŠ-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†Ž–––––––––––––––––––––––––––––––––––––––––––&Š†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹wŠ‡Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†2–––––––––––––––––––––––––––––––––––––––––––•†ŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š&–––––––––––––––––––––––––––––––––––––––––––Ž‡†-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Šv‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r”Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š-––––––––––––––––––––––––––––––––––––––––––––‘Š‘–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡†‘––––––––––––––––––––––––––––––––––––––––––––-Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‘Šyr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r††3––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š†Ž–––––––––––––––––––––––––––––––––––––––––––3†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-ŠŠŽ–––––––––––––––––––––––––––––––––––––––––––Ž†Š&––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-†‡r‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‚††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––ŽŠ†&––––––––––––––––––––––––––––––––––––––––––––-Š†––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž††-––––––––––––––––––––––––––––––––––––––––––––-††Ž––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•‡‡‚‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vŠ†Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-††Ž––––––––––––––––––––––––––––––––––––––––––––††-––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•Š†•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-Š‡––––––––––––––––––––––––––––––––––––––––––––Ž†Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡†}‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹”†‡––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž†Š-––––––––––––––––––––––––––––––––––––––––––––&ŠŠŽ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3ŠŠ•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––•†Š3––––––––––––––––––––––––––––––––––––––––––––-††Ž–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž‡Šy‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹r‡Š•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––&Š†Ž––––––––––––––––––––––––––––––––––––––––––––‘††–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––3Š†•–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––‡Š-––––––––––––––––––––––––––––––––––––––––––––Ž†Š•––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Ž-Šwr‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹‹vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv†Š‡--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------††‡---------------------------------------------ŠŠ‡-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------‘††‘-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------†††---------------------------------------------Š††--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------†Š‡vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv••••••3ŽŽ•Ž•Ž•Ž••••••3Ž•3•••Ž•3•Ž•Ž•3•3•••3•••Ž••••3•3•3•••3•Ž•3••Ž•ŽŽ•3•Ž•Ž••3••3•3•3•Ž•3•3•3•3•3•3Ž•ŽŽ•3•Ž•3•3•3•Ž•3•3•3•3•3Ž•3•Ž•3ŽŽŽ•3•3•3•3ŽŽ•3Ž•3•3•3Ž•3•3•3•3•Ž•3•3•3Ž•3•Ž•3•3ŽŽ•3•ŽŽŽŽ•3•3•3•Ž•3Ž•3Ž•3Ž•3•3Ž•3•3•3•3•3ŽŽ•3•Ž•3•3ŽŽ•3•3•3•3•3Ž•3•3•3•3•3ŽŽ•Ž3•3•3Ž•3Ž•3ŽŽŽŽŽ•3•3•3•ŽŽ•3•Ž•3•3ŽŽ•Ž3•3Ž•3•Ž•3Ž•3Ž•3•Ž•3•3•3•ŽŽ3•Ž•3Ž•Ž•ŽŽŽ•3Ž•3•3•3•ŽŽŽŽ•3•3•Ž•3•3Ž•Ž3•3Ž•3•3•3•3•3•3•Ž•3Ž•3•3•3•ŽŽ•3•Ž3•3•3Ž•ŽŽ•3•Ž•3•3•3•3•3•3•Ž•3•3•3•3•3•3•Ž•Ž•Ž•3•3•3•3•3Ž•3•Ž••••ŽŽ•3Ž•ŽŽŽŽ•3•3•ŽŽ•3Ž•Ž3•3•3Ž•3•Ž•3•Ž3•3•3•3•Ž33•3•Ž3•3•3Ž•3•Ž•ŽŽ•ŽŽ•3•Ž3•3•3Ž•Ž•3•3•3•3Ž•3•3•3•3•3•3Ž•3•3•3•Ž•Ž•Ž3•3•3••†Š-3•3•3•3ŽŽŽ•3•3Ž•3ŽŽ•3Ž•3ŽŽ•ŽŽ•3•3•ŽŽ•3•3•3•3•3•3•3•Ž•3Ž•3Ž•3•3•Ž•3•3•3•ŽŽŽ•Ž3•Ž3•3•3•ŽŽ•ŽŽŽ•3•Ž3•Ž•3•3•3•3•3•3•3Ž•Ž•3••••••3•3•3•3•3Ž•Ž•3Ž•Ž3Ž•3•3•Ž3Ž•3Ž•ŽŽŽ•3•3ŽŽ•Ž3•3•3•3Ž•Ž3Ž•3Ž•3Ž•Ž•3•Ž•Ž•3•ŽŽ•3Ž•Ž3•3•Ž3•3Ž•3•ŽŽŽ3•3Ž•3•3•Ž3Ž•3•ŽŽ3Ž•Ž•3Ž‡††Ž•3Ž•3•3Ž•Ž3Ž•3•3Ž•3Ž•Ž•ŽŽ•3•3ŽŽ•3•3•3ŽŽ•3Ž•Ž•3•3•3•Ž3•Ž•3•3•3•3•3Ž•3•3••••3•3Ž•3•ŽŽ•3•ŽŽ•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•3•Ž•3•3•Ž•ŽŽŽŽŽŽŽ•3•3•3•3•3•3•Ž•3•Ž•3•3•3Ž•3ŽŽ•3•3•3•3Ž•Ž•3•3•3•3•3•3•3•Ž•3•3Ž•3ŽŽ•Ž•Ž•3•3Ž•3•ŽŽ•3•3•3Ž•3Ž•3•3•3•3Ž•3Ž•Ž3•ŽŽ•Ž•3ŽŽ•3•3ŽŽŽ•3ŽŽ•3•3•3•3•Ž•3•ŽŽ•3•Ž3•3•3Ž•3•3•3•3•3•ŽŽ•3•3•3•3•3•3•3ŽŽ•3•3•3•3•Ž3Ž•3•3•3ŽŽ•Ž3•3•3•3Ž•Ž•3Ž•3Ž•ŽŽ3•Ž•3•3Ž•3•3•3•3•Ž•3•3•3•3•Ž•3ŽŽ•3•Ž3•3Ž•3•Ž3•3•3•3•3•3•ŽŽ3•3•ŽŽŽ•3Ž•3•3•3•3•Ž•3•3•3•3Ž•3•3ŽŽ•3•3Ž•ŽŽ•3•3Ž•3•3•Ž•3•3•3•Ž•3Ž•Ž•3•3Ž•3Ž•3•Ž•ŽŽŽ•Ž3Ž••ŽŽ•••3Ž•••3•3Ž•3•3••3Ž••Ž•Ž•3•3•3ŽŽ•ŽŽŽ•••ŽŽ•••3••••3•Ž••Ž••3Ž••3ŽŽ•ŽŽ••••Ž•• \ No newline at end of file diff --git a/IMG/ARC/COUR10.BIN b/IMG/ARC/COUR10.BIN new file mode 100644 index 0000000..37355d9 --- /dev/null +++ b/IMG/ARC/COUR10.BIN @@ -0,0 +1 @@ +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q|||||||?[?[|||?||||[|||?[||?[?||[||||?|||[|?|||[|||?|||[||?|[||?||||[|?||||[|||||||||||||||||||||?||||[?||[|||?[?||[?[||?|||||[||||?|[?||||||||q•2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222••222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222–•3[?|||[|?[?[|?|[?[|?[|?||[|?[?[||||?|||[|?[|?|[|||?|[?|[|?[||||||||||||?|[||?||[?|[|?[|?[|?[?[?[|||?[?|[?|||[|?[?[?|[?||||[?||[||?[?[?[?|[|?|[?|q32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•388888888888888888888888888888888888|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3|888888888888888888888888888888888883••33qq?|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q88888888888888888888888888888888888q••••••••••••zq?|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|88888888888888888888888888888888888•••••••••••••••••••3zqq||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q888888888888888888888888888888888888q33•••••••••••••••••••••••••zq||88888888888888888888888888888888888888888888888888888888888888888888888888888|32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33[88888888888888888[qqq?qqq[[[[|[[||||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233888888888888888888888888888888888888888888|[zz3••••••••••••••••••••••••33z[[[888888888888888888888888888888888888888888888888888888888888888888888z•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•[888888888888888883••••••••••••••••••••••3•333333qqqzqqz[q[[[|[||||8888888888888888888888888888888888888888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3|8888888888888888888888888888888888888888888888888|[?z33•••••••••••••••••••••••333q|[88888888888888888888888888888888888888888888888888888888888888••–22222222222222222222222222222222222222222222222222222222222222222222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222222222222222222222222222222222222222222222222222222222222222222222222–•z88888888888888888z•••••••••••••••••••••••••••••••••••••••••••••••••••3•33333zz2qzq2qz[[[[|[[[||888888888888888888888888888888888888888888888888888[3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•z888888888888888888888888888888888888888888888888888888888||[qz3••••••••••••••••••••••••3zq[[[[||||8|88888888888888888888888888888888888888888888888•32222222222222222222222222222222222222222222222222222222222222222222222222222222Ž–22222–Ž2222–Ž–Ž–Ž22222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222–Ž–Ž–Ž–22–Ž–2222–Ž22222222222222222222222222222222222222222222222222222222222222222222222222222222–3|8888888888888888[3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•3333z3zqqzqq|8888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|88888888888888888888888888888888888888888888888888888888888888888|?z•••••••••••••••••••••••••••••••••••3•33333z33qqq?qq[q[q|||||||8888888888888888|•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2nnn2222222222–Ž22–222–Ž–2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–Ž–Ž–2–22–Ž22222222222nn2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|8888888888888888||?[?[?[qqzzzz3333333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••[888888888888888888888888888888888|3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3q8888888888888888888888888888888888888888888888888888888[||[?qqqqz3333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••888888888888888q•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222Ž222–2Ž–222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž–Ž–22–Ž2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23[88888888888888888888888888888888888888888|||||||?[[?[?[qqq33•••••••••••••••••••••••••••••••••••••••••••••••••••••|888888888888888888888888888888888z32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3888888888888888888888888888888888888888|||[[[qqqqzz333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••[8888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2n222222ŽŽ–2Ž–Ž–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž–Ž–2222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23q88888888888888888888888888|||||[|||||??|?qqqqqqqqqqzzz3z333•••••••••••••••••••••••••••••••••••••••••••••••••••••3[888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3|888888888888888888888888888888888888•3•••••••••••••••••••••••••••••••••••••••••••••••••••333zz3333••••••••••••••••••••••••••••••••••|888888888888888•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222–Ž–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž–32–Ž22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888[3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|888888888888888888888888888888888[322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3z888888888888888888888888888888888888q••••••••••••••••••••••••••••••••••••33zzzz[[?[||||88888888888888888||||||[?[?[[qqqzzzz33333••••38888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222–Ž–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–Ž322–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888|3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3[88888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888••••••••••••••••••••33zzqq?[?[?|||888888888888888888888888888888888888888888888888888888888888888888888888888888|3Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–2Ž–Ž–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–332–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•[888888888888888883•••••••••••••••••••••••••••••••••••••••••••••••••••••••••3333z3zzz?qqq[[[?[?[[[[||||||||8|8888888888888888888888888888888888888888|3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q888888888888888888888888888888888888q••333zqqz[?[?||||88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž–Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–32–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3[88888888888888888z•••••••••••••••••••••••••••••••••••••••zq|||||||88888888888888888888888888888888888888888888888888888888888888888888888888888888888z32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn338888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222Ž33–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–33–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•z88888888888888888|[qz333•••••••••••••••••••••••••••••••••••33zzqq?|||88888888888888888888888888888888888888888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3[88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||8||[[[q[[qqqqzq2zq8888888888888888••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–3–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|88888888888888888888888|||?[[zz333••••••••••••••••••••••••••••••••••••33qqq[?[|8888888888888888888888888888888888888888888888888888888888888888888888q3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•z88888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[[[[|[[qqqqqq?zz333333•3••••••••••••••••••••••38888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222233Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–3•3222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•|8888888888888888888888888888888888|||[?[zz333•••••••••••••••••••••••••••••••••••333zqq[[[|888888888888888888888888888888888888888888888888888888888888z•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888888|8|[||||q[q[qq?qqqqz33z3333••••••••••••••••••••••••••••••••••••••••••••••••••••••••z888888888888888|33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–3Ž–Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–33Ž–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3|888888888888888888q[?[|[|[|||8888888888888888|||?[?qz33•••••••••••••••••••••••••••••••••••••33zqq|[[|8888888888888888888888888888888888888888888888888?3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q8888888888888888888888888888888888888qzzz3zz3333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|888888888888888q•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–Ž3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•[88888888888888888[3••••••••••••33•3333zz3qqqqqqq?[||||[|[?qqz•••••••••••••••••••••••••••••••••••••••••333qqq[[[8888888888888888888888888888888888888888q32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3|888888888888888888888888888888888888q••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333z3zzzzq888888888888888|33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•388888888888888888|3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333[|888888888888888888888888888888888|3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3|8888888888888888888888888888888888888•••••••••••••••••••••••••••••••••••••••••••••••••••••••••333333zzz3••••••••••••••••••••388888888888888888888888888833nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–33Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|88888888888888888z•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888888888888888888888q322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•z8888888888888888888888888888888888888z••••••••••••••••••••••••••••••••••3qzq[?[?[?[|||||||8|888888888888?••••••••••••••••••••?88888888888888888888888888|33nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn223•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ–3–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•|88888888888888888q333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••q888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3|8888888888888888888888888888888888888••••••••••••••••••••••••••••••••••••3zqq?||888888888888888888888888••••••••••••••••••••3|88888888888888888888888888q•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3[88888888888888888888888888|||||?[?[[[?qq?zzzz333333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888888888888888888888|3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•[88888888888888888888888888888888888888|[[qz333•••••••••••••••••••••••••••••••••••••••3zq??|88888888888888••••••••••••••••••••3888888888888888888888888888z•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22ŽŽ–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–3Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•[|88888888888888888888888888888888888888888888888888888|||||||[?[?[??[qzzzzzz33333•••••••••••••••••••••••••••••••••••3q88888888888888888888888888888888888z•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•38888888888888888888888888888888888888888888888888||[[qz33•••••••••••••••••••••••••••••••••••••3•zzq[[|88|z••••••••••••••••••••38888888888888888888888888883•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3|88888888888888888888888888888888888888888888888888888888888888888888888888888888888||||||||[[[[?[??zqzz3333333•••••••|8888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•[8888888888888888888888888888888888888888888888888888888888|||?[zz33•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|888888888888888888888888888••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2333Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•|88888888888888888[zzzqqqqqqq[?[|[||8|88888888888888888888888888888888888888888888888888888888888888888888888888888|||888888888888888888888888888888888888q322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•38888888888888888888888888888888888888888888888888888888888888888888888||?[q333••••••••••••••••••••••••••••••••••••••••••••••••3|88888888888888888888888888|•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–3322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233•22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|88888888888888888[3•••••••••••••••••••••••••3333qqqqqqqq[[[[[|[|||88888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|8888888888888888888888888888888888888|88888888888888888888888888888888888888888|||?qq333•••••••••••••••••••••••••••••••••••••••3qq[[|888888888888888888888o•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33[8888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••33z333z?qqqqq[[[?[[||||888888888888888888888888888888888888888888888888888888888888?3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q88888888888888888888888888888888888888•••33zqq|[|88888888888888888888888888888888888888888|||?qzz33•••••••••••••••••••••••••••••••••••••3•q8888888888888888z•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•3–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q888888888888888888z•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3••33333zzqqqzqq[[[[[[||88888888888888888888888888888888888q32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•388888888888888888888888888888888888888q•••••••••••••••3zqqq[||8888888888888888888888888888888888888888||[?z333•••••••••••••••••••••••••••••q88888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|88888888888888888?zzz33333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••q88888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•[88888888888888888888888888888888888888••••••••••••••••••••••••••33zqqq[|8888888888888888888888888888888888888888||[qz333•••••••••••••••••••|8888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3|888888888888888888888888888888||||||[[[?[?[qqqzzzz3333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|88888888888888888888888888888888888?322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23z88888888888888888888888888888888888888q••••••••••••••••••••••••••••••••••••••33qqq|[|88888888888888888888888888888888888888||?[qz33••••••••38888888888888888[•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3|888888888888888888888888888888888888888888888888888888888|||||||?[?[?[qzqzz3z33333•••••••••••••••••••••••••••••••••••••q88888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3|88888888888888888888888888888888888888[[z333••••••••••••••••••••••••••••••••••••••••••3••zqqq[[|8888888888888888888888888888888888888||?[qzq8888888888888888q•–222222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222222223•[88888888888888888888888888888888888888888888888888888888888888888888888888888888888888||||||[[?[?[?zqzzz333333••••••••••|88888888888888888888888888888888888[3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•z88888888888888888888888888888888888888888888888||?[qzz33••••••••••••••••••••••••••••••••••••••••••••3zqqq[[||8888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|88888888888888888|[qzq?[[[[||[||88888888888888888888888888888888888888888888888888888888888888888888888888888888|8|||||88888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33888888888888888888888888888888888888888888888888888888888888|[[qq333•••••••••••••••••••••••••••••••••••••••••••33zqqq[|[|8888888888888888888888888888888888888••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–33–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|88888888888888888|3•••••••••••••••333333zz3q2qzq2q[[[|[|[|8|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3[88888888888888888888888888888888888888888888888888888888888888888888888|?[qz33•••••••••••••••••••••••••••••••••••••••••••••33zqq[[||88888888888888888888888888•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888883••••••••••••••••••••••••••••••••••••••••••333333zz3zqqqqqz[[[[[[||8||888888888888888888888888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2338888888888888888888888888888888888888888888888888888888888888888888888888888888888||[?zzz3••••••••••••••••••••••••••••••••••••••••••••3•3zzq[|8888888888888888|•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•[888888888888888888z•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•33333zzqqqqqz[|[[[[|[||888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888888888888888888888888888888888888888888888888888||||||||[|[|||???|?|qz•••••••••••••••••••••••••••••••••••••••••••••••••[8888888888888888Ž•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•[888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••33••z888888888888888888888888888888888888[3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q888888888888888888888888888888888888888qqqqqzz3z3zz3333333••3•33•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMMMMMnMnMMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMMnnnMMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23z888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|88888888888888888888888888888888888888q••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnOOçOçOçOçOOKnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnKçOçOOçOçOOOMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3|8888888888888888883••••••••••••••••••••••q888|||||||[?[[[?qzqqz3z33333•••••••••••••••••••••••••••••••••••••••••••••••••••q|88888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q888888888888888888888888888888888888888•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••38888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMOOOOOOOOOOOOnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnKOOOOOOOOOOOMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|888888888888888888z••••••••••••••••••••••?88888888888888888888888888888888||||||[?[?[qqzqzzz33333•••••••••••••••••••••••••|888888888888888888888888888888888888q322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3888888888888888888888888888888888888888q•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3333333333zzzzzzzz?8888888888888888q•mmmmmmmmmUmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGGGGGGGGGGGGmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmUmmmmmmmmmmmmmUmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmUmmmmmmmmmm2•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmUmmmmmmmmmmmmmmmmmmmmmmmmmUmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmGGGGGGGGGGGGmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmUmmmmmmmmmmmmmUmmmmmmmmmmmmmmmmUmmmmmmmmmmmQm3[888888888888888888|3•••••••••••••••••••••3|88888888888888888888888888888888888888888888888888888888z3•••••••••••••••••••••q8888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888••••••••••••••••••••••••••••••••••••••••••••••••3q[?[[[?[?[?|||||||||||||8|8|888888888888888888888888888888888888888888883•G                                                                                                                                                                                                                                         ž••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•G                                                                                                                                                                                                                                         A•[|888888888888888888q3••••••••••••••••••••3q|8888888888888888888888888888888888888888888888888888888|3•••••••••••••••••••••3|888888888888888888888888888888888888?3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•q8888888888888888888888888888888888888888[zzz3•••••••••••••••••••••••••••••••••••••••••••••33qqq|||8888888888888888888888888888888888888888888888888888888888888883• ž        ¡                                                                              ¡ ž ¡                                                                         ¡             ¡                                          ¡        ž••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•A                                                 ¡                         ¡                                                          ¡ ž ž ž ž                                             ¡             ¡                ¡           ¡  U$3|88888888888888888883•••••••••••••••••••••3q[8888888888888888888888888888888888888888888888888888888z••••••••••••••••••••••z|8888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888|[??qz33••••••••••••••••••••••••••••••••••••••••••••333zqq|[888888888888888888888888888888888888888888888888888883•ž    ¡ ¡ ¡ ž  ž ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ GQ2AQAQ2QAQ2Q ¡ ž ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ QA¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ž  ž ¡ ž2Q¡ ¡ ž  ž ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ U2U¡ ¡ ¡ ¡ ¡  ž ¡ ¡ ¡ U•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•G ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ U2U¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ž ¡ ¡ ¡ U2G ¡ ¡ ¡ ¡ ¡ ¡ ž  ž ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ G2U ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ž   U2Q2Q2Q2AQA2G¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ž ¡ ¡ ¡ ¡ ¡ ž  ž ¡ ¡ ¡ ¡ ¡ ¡ ž  ž ¡ ¡ ¡ ¡  ž  G$•|8888888888888888888|3•••••••••••••••••••••••zq|8888888888888888888888888888888888888888888888888888[3••••••••••••••••••••••|888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ3?88888888888888888888888888888888888888888888888888888888888||?[[z33•••••••••••••••••••••••••••••••••••••••••••••333qq[[|88888888888888888888888888888888888888888[•$ž  ¡ ž        ¡                                                                       G••••••••••••ž  ž                                 Q•$                                ¡   ž••ž      ¡                           ž••ž         ž        ž••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•G                  ž$•G                        ž         G••ž              ¡                     A•Q                                  ž ž$•••••••••••G                                    ž               ¡                ¡         ž     ž$3|88888888888888888888|[33•••••••••••••••••••••••3q[|888888888888888888888888888888888888888888888888z•••••••••••••••••••••••[8888888888888888888888888888888888888z322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2338888888888888888888888888888888888888888888888888888888888888888888888|||?qzzz3•••••••••••••••••••••••••••••••••••••••••••••333qq[[||88888888888888888888888888888|•$UUUUUUUGGUUUUUUUUGGUUUUGGUUUGUGUUUUUGUGUUGUUGGUUUGUUUUGUUUGGUUUUUUUUUUUUGUGUUUUUUUGUUGQ••••••••••••QUUUUUUUUUGUUGUUUUUUUUUUUUUUUGUUUUUGUA••GUUUUUUUUGGGGUGGUUUUUUGUUUUUUUUGGGUUG$•QUGUUGUUUGGUUUUGUUGGUUUGUUGUUUUUUUUU••Gž ž ž ¡ ž žžGGGGGUU$•–222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222••2222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222223•$GUGGUžGGžžž ž ž ¡žžU•$UUUGGUUGUGUGUUUUGUGUUUUUUGUUUUUUUUG$•AGGUUUUUUUUUGGUGUUUUUUUUUUUUUUGUUUUUUQ••QGUUUUUUUUUUUUGGUUUUUUUUGUUUUUUUGGUUUU••••••••••••UGUUUUGUGUGUGUUUGGUGUGGGUUUGUUUUUUUUGGGUGUUUUUUUUUUUGUGGUUUUUGUUUGGUUUUGUUUUUUUUUUUGGUU•3888888888888888888888888[z3•••••••••••••••••••••••••3zq[||8888888888888888888888888888888888888888?••••••••••••••••••••••••3|88888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3|888888888888888888888888888888888888888888888888888888888888888888888888888888888||[[qz33•••••••••••••••••••••••••••••••••••••••••••••••3zq?[[|88888888888888888883–UGGGUUGUGUUGUGUUUUGUGGUGUUGGGGUUUGUUUUUUUGUGUUUGUGGGGUUUUUGUUGGUUUUGUUGUGGUGGUGGGUUUGUUGGGUUGUGUGUUGUUUGGUUGUUGUGGUUGUGGUUGUUGUUGGGUGGGGUUGGUUUUUGUUUUUGGUUUGUUUGUUUUGGGGUUUUGUUUUGGGGUGUGUUUGGGGUUGGGGUGUGUUUGUGGGGQGIPT7776;22oo??]]]]]]]][2•3[\\]\]]]\2\?22222Ž–Ž–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž–––22Q2QQQQQQQQQQQQQ••QQQQQQQQQQQQQAQQ2–2Ž–Ž22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž––22o2?o?]]\]\]]\]\3•2]]]]]]]][]?22In67776PPImmGUUGUGGGUUUGGGGGGGGGGGGUUGGGUGUUGGUUGUGUGUUUUGGGUUUGGGGGUGUGUGGUGUUUUGGUGGUGGGGGGUGGGGGGUGGGGGUGGGGUUUGGUUUUGGUGUGGGGGUUGUUUUGGGUUUUGUUGUGUUGUGGGUUUGUUGGGGGGUGGUUUGGUGGGGUGGUUUGGUGUGGUUGGGGUUGGUUGGUGUUUUUUGGUUUGG2q8888888888888888888888888|q3••••••••••••••••••••••••••••••z3qz[[[[||8888888888888888888888[|[q3•••••••••••••••••••••••••••z888888888888888888888888888888888888888?3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•z88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||q••••••••••••••••••••••••••••••••••••••••••••••••••z88888888888888888••ž                                                                                                                                                                                                         žGQQI7655999999999999999999999999999339999999999999999999988aa\]?Ž22––2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž–322QQQQUGG             ž     ž••ž              ž   žžGUQQQQ222–Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–Ž2222]\aa8899999999999999999998338999999999999999999999999999677mQUUž                                                                                                                                                                                                         U$3|88888888888888888888888888||?q33••••••••••••••••••••••••••••••••••••3•333zz33z3z3z333••••••••••••••••••••••••••••••••••3888888888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888888888888888888888|||8||[|||[[[[[[[?[[[zqqq2qzq2qzzqz33333z33333•3•3•33••••••••••••••••••••••••••••••••••••••••••••••••••••|8888888888888888|3•ž  ž ž      ž ž     ž ž ž ž ž ž ž  ž    ž ž ž ž ž ž ž ž   ž ž ž ž       ž ž ž ž ž ž    ž ž    ž ž ž ž ž  ž     ž ž ž  ž ž  ž     ž ž ž ž ž              ž ž ž ž   žQG ž ž ž    ž    ž ž  ž ž    ž ž GQQAAŽ]]]a889999999999999999999999999999993•[999999999999999999999999999999888]?ŽŽ3–Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–ŽA2QQUžž            ž ¡ ž ¡ ¡        ž••ž ¡  ¡  ž ¡ ž ¡  ž   ž         GGQQA2–Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–322?\a88999999999999999999999999999999?•?99999999999999999999999999999988a]2I2–QAUUž ž ž   ž ž   ž ž ž  ž     ž ž GQžž ž ž   ž ž ž    ž    ž ž ž ž ž ž ž ž ž ž ž ž ž   ž ž   ž   ž ž ž        ž ž  ž ž ž ž ž ž ž ž  ž ž ž ž ž ž ž ž ž ž ž ž ž   ž ž ž ž ž ž ž ž ž   ž ž       ž  ž ž  ž$•|88888888888888888888888888888888[?z33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••388888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q88888888888888888888888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888[•$ž  ž   ¡ ž ¡    ¡ ž ¡             ¡  ¡ ž                ¡         ¡ ž ¡ ž           ¡ ž    ¡ ž           ¡  ¡ ž      ¡     ¡  ¡ ž          ¡ ¡ ž ¡ ž ¡ ž        ¡ ž$•G      ¡ ž  ¡ ž    ¡    ¡žPT7;I?]\8899999999999999999999999999999999999998•39999999999999999999999999999999999999988\?323–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–Ž2QQQžž        ž ž ¡ ž ž ¡          ž ¡ ¡ ž  ••ž  ž  ž         ž  ž   ž ž ž ž         žQQAA–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–Ž32\]88999999999999999999999999999999999999983•8999999999999999999999999999999999999988[]?2;7TPžž   ¡ ž     ¡  ¡ ž ¡    Q•$ž    ¡ ž     ¡ ž  ¡ ž                          ¡ ž   ¡ ž  ¡      ¡ ž ¡ ž    ¡                ¡                          ¡ ž                 ¡ ž   ¡ ž ¡ ž  ¡      ž$3|8888888888888888888888888888888888888?[z33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3z[888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•38888888888888888888888888888888888888888q•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••388888888888888888q•Q      ¡    ž  ¡        ¡ ¡ ¡ ¡ ¡ ¡  ž    ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡  ž ¡ ¡ ¡       ž  ¡ ¡ ¡ ¡ ¡    ¡ ¡    ¡ ¡ ¡ ¡ ¡ ž  ž   ¡ ¡ ¡  ž ¡ ž  ž   ¡ ¡ ¡ ¡ ¡      ž   ž   ¡ ¡ ¡ ¡   žQž  ¡ ¡     ¡    ¡ ¡  TT779999999999999999999999999999999999999999999999998339999999999999999999999999999999999999999999998a233–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–32QQG       ž ¡ ž ž            ž ¡ ž ¡ ž        ¡ž••ž   ¡  ¡ ¡ ž ¡ ž  ¡  ¡        ¡ ž ž ž       žUQQ2––22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–32?a989999999999999999999999999999999999999999999833899999999999999999999999999999999999999999999999977TT   ¡ ¡  ž    ž  ¡ ž mU  ¡      ¡ ¡    ¡    ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡     ¡     ž  ¡ ¡         ¡ ¡  ž ¡ ¡ ¡ ¡ ¡ ¡ ¡  ž ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡     ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡     ¡         ž  ¡ ¡ ž žQ•q888888888888888888888888888888888888888888||?[?z33•••••••••••••••••••••••••••••••••••••••••••••••••••••••••3z[88888888888888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|8888888888888888888888888888888888888888••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888883•U ž ¡ ž  ž ¡   ž  ¡ ž ¡ ž           ž  ¡ ž                ž         ¡ ž ¡             ž ž    ž ž                ž      ž          ž          ž ž ¡   ¡   ž        ž ž    ž    ¡ ž  ž ž  T7599999999999999999999999999999999999999999999999999999?•]99999999999999999999999999999999999999999999999998a?33–2nnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23–$QGž      ¡ ž ž       ¡ ž ¡ ž ¡ ¡          ¡ ž ¡ ž  ž••G ž  ž                ž ¡ ¡ ¡         ž ¡ ž      žUQ$3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•]]899999999999999999999999999999999999999999999999992•]9999999999999999999999999999999999999999999999999999967Tž ž  ž ¡           ž  ž ¡ ž   ž ž  ž ž                           ž ¡  ž ¡ ¡  ž    ¡ ž ¡ ž    ž                ž                          ž ¡ ž                ž ¡  ž ¡ ž ¡ ¡      ž    U•z|88888888888888888888888888888888888888888888888888|||[?[qqz33333••••••••••••••••••••••••••••••••333z[?|888888888888888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•z8888888888888888888888888888888888888888q••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••33333333333zzzzqzzzqqqqq[[?[[?[?[?[?[?|||||||888888888888888883•G       ž    ž ¡  ž        ¡ ž ¡ ž ¡       ž ¡ ž ¡ ž ¡ ž ¡  ž ¡ ž ¡ ž      ¡ ¡ ž ¡ ž ¡    ž ¡    ž ¡ ž ¡ ž ¡ ž ¡  ¡ ž ¡  ¡ ž ¡ ž ¡  ¡ ž ¡ ž ¡      ž ž  ¡  ž ¡ ž ¡     ž ¡  ¡ ž     žQA•?a9999999999999999999999999999999999999999999999999999998•3999999999999999999999999999999999999999999999999999998a]33Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnŽ••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•$QGž     ¡ ž ž      ¡ ž ¡            ž ž ¡ ž ¡           ••žž    ¡ ž ¡ ž ¡ ¡ ž ¡        ž ¡ ¡ ¡ ¡     ž ž ž     žGQA–Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnn–•328999999999999999999999999999999999999999999999999999999338999999999999999999999999999999999999999999999999999999a32QQž   ž ¡ ž ¡ ž ¡  ¡      ¡         ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡   ž       ¡  ¡ ž       ž ¡  ž ¡ ž ¡ ž ¡ ž ¡  ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡       ž ¡ ž ¡ ž ¡ ž ¡   ž            ž ¡    ¡  U$3|8888888888888888888888888888888888888888888888888888888888888888888|||||?[?[?[?[?[[[?[[[|||8|888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3|8888888888888888888888888888888888888888•••3333333333zzzzzzqzqqzqq[?[?[?[[?[?[[[?||||||||||||||888888888888888888888888888888888888888888888888888888888888888888888|••ž  ž ¡ ž  ¡ ž     ž  ¡ ž ¡ ž         ž ¡ ž                             ¡ ž ž           ž ¡    ž ¡                ž                 ž          ž ¡ ž     ž          ž ¡ ž    ž    ¡Q232]8999999999999999999999999999999999999999999999999999999998338999999999999999999999999999999999999999999999999999999999]333–2nnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•$Qž     ž ž       ¡ ¡ ž     ž ¡ ž ¡ ž ¡          ž ¡ ¡ ž ¡ ž••G  ¡               ¡  ¡ ž ž            ž ¡      ¡ ž ž    žQQ3Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnn–••2a8999999999999999999999999999999999999999999999999999999998•38999999999999999999999999999999999999999999999999999999988]3Ž2Už           ž  ž ¡ ž  ¡ ¡ ¡ ¡                             ž  ¡ ž ¡ ž  ž    ¡ ž ¡                                                ž ¡ ž ¡                ž  ¡ ž ¡ ¡ ž ¡    ž ¡     ž$•|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[•$ž        ¡    ¡ ¡ ž           ¡ ž ¡ ž    ž  ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡       ¡ ž ¡ ž ¡    ž ¡    ž ¡ ž ¡ ž ¡ ž ¡  ¡ ž ¡ ž ¡ ž ¡ ¡   ¡ ž ¡ ž ¡      ¡ ¡ ž  ¡ ¡ ž ¡        ¡ ž  žmA3?89999999999999999999999999999999999999999999999999999999999992•?9999999999999999999999999999999999999999999999999999999999998?3322nnnnnnnnnnnnnnnnnnnnn2••Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•$Qž    ž ž    ž ¡ ¡ ž      ¡ ¡            ž ¡ ¡ ž ¡          ž ••ž   ž ¡ ž ¡ ž ¡ ž    ž     ¡ ¡ ž ž ž ¡    ž ¡ ¡      ž      žQ$•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnn–33\8999999999999999999999999999999999999999999999999999999999999?•]999999999999999999999999999999999999999999999999999999999998a?Ž$ATž ¡ ž ž          ž       ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž              ¡ ž     ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡         ¡ ž ¡ ž ¡ ž ¡ ž              ž ¡    ž ž   ž$3[888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q•22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888z•2    ¡ ž ¡  ž ž        ž ¡ ž ¡ ž       ¡ ¡   ž                 ž         ž ž ¡ ž         ž ¡    ž ¡                ž        ž        ž          ž ¡ ž         ž      ¡ ž ¡ ž  žP5989999999999999999999999999999999999999999999999999999999999999998•38999999999999999999999999999999999999999999999999999999999999998?332nnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•Qž    ž ¡   ¡ ¡         ž ¡ ž   ž ¡ ž ¡ ž ¡          ¡ ž ¡ ž ¡  ž••G ¡               ž ¡  ¡ ¡            ž ¡      ž ž ¡   ž ¡ ž   žQ$3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••nnnnnnnnnnnnnnnnnnnnn23•?8999999999999999999999999999999999999999999999999999999999999998338999999999999999999999999999999999999999999999999999999999999998996PT     ¡ ¡ ¡ ž ¡  ¡ ž ¡                               ¡ ž ¡ ž ¡ ¡ ž    ž ¡      ž                                         ¡ ž ¡ ¡ ž                 ž ¡ ž ¡ ž ¡    ž ¡    ¡ ž  Q•q888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•?88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•G  ž ž           ¡ ž ¡ ¡          ¡ ž ¡    ž ¡  ž ¡ ž ¡ ž ¡ ž ¡   ¡ ž ¡ ¡         ¡ ž ¡ ¡    ž ¡    ž ž ¡ ž ¡ ž ¡ ¡  ž ¡ ž ¡    ¡ ž ¡  ž ¡ ž ¡ ¡       ¡ ž ¡ ¡   ¡ ¡ ž      žP:999999999999999999999999999999999999999999999999999999999999999999993•999999999999999999999999999999999999999999999999999999999999999999a3•Ž2nnnnnnnnnnnnnnnnnnn3••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••Qž   ž ¡    ¡    ž ¡ ž ¡ ¡      ¡            ž ¡ ž ¡ ž             ••G  ž ž ¡ ž ¡ ž ¡ ¡    ž   ž ž ¡ ¡ ¡ ¡    ž ž ¡      ž ¡   ž  ž   žQ$•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•••nnnnnnnnnnnnnnnnnnn23•3899999999999999999999999999999999999999999999999999999999999999999a•3899999999999999999999999999999999999999999999999999999999999999999997Tž¡  ž        ž     ž ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž         ž    ¡ ¡   ž ž ¡   ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž            ¡ ž ¡ ž ¡ ž ¡ ¡           ž ¡     ¡ ž      U•z8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888••ž       ¡ ž ¡ ¡ ž         ž ¡ ž ¡ ž     ž ž     ¡               ž ¡       ž ¡ ž ¡ ž       ž ¡    ž ¡                         ž ¡      ž          ž ¡ ž ¡       ž ¡      ¡ ¡T79999999999999999999999999999999999999999999999999999999999999999999999?•2999999999999999999999999999999999999999999999999999999999999999999983•32nnnnnnnnnnnnnnnnnn3••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•Qž   ž     ž ž  ž            ž ¡ ž  ¡ ž ¡ ž ¡           žGQQ2Q22IF]]?••Ž2]I2m2mQ2QUG      ž ¡  ž            ž ¡      ž ¡ ž     ž   ¡  ž   žQ••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnn23•3999999999999999999999999999999999999999999999999999999999999999999992•\999999999999999999999999999999999999999999999999999999999999999999999:PT   ¡ ž ¡ ž  ¡ ž                                 ¡ ž ¡ ž   ¡ ž    ž      ž ¡                                       ¡ ž ¡ ž ¡ ž              ž  ¡ ž ¡ ž ¡    ž ¡ ž    ¡ ž   G$•|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|••ž  ž ¡ ¡      ž   ¡ ž ¡ ž ¡          ¡ ¡    ¡ ¡ ž  ¡ ž ¡ ž ¡ ž ¡     ž ¡ ž           ¡ ¡ ž    ž ¡    ž ¡ ¡ ž ¡ ž ¡ ž ¡ ¡ ž ¡     ž ¡ ¡  ¡ ¡ ž ¡ ž         ž ¡ ž     ž ž ž žA289999999999999999999999999999999999999999999999999999999999999999999998•389999999999999999999999999999999999999999999999999999999999999999999983•32nnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••ž      ¡ ž ¡    ¡  ¡ ¡ ž ¡ ž ¡      ž         ž ¡ ž G2A22][88999999998••89999999988a[22m2Gž      ¡ ¡ ¡ ž ¡ ž    ž ¡ ¡      ¡ ¡ ž  ¡   ¡ ž ž  ž$•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnn23•38999999999999999999999999999999999999999999999999999999999999999999999338999999999999999999999999999999999999999999999999999999999999999999999a2AG             ¡ ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ž       ¡ ž    ¡ ž  ¡ ¡      ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž            ¡ ž ¡ ž ¡ ž ¡             ž ¡       ¡ ž   ¡   ž$3|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888?3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•q88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q•$ž  ž     ž ž ¡   ž           ž ¡ ž ¡ ž   ž ¡                     ¡ ž ¡     ¡ ž ¡ ž ¡ ž     ž ¡    ž ¡                  ž      ž ¡      ž          ¡ ž ¡ ž ¡     ¡ ž ¡    žA•3999999999999999999999999999999999999999999999999999999999999999999999983•89999999999999999999999999999999999999999999999999999999999999999999999a••2nnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•$ž   ž ž       ¡ ž  ž            ¡ ž ¡  ž ¡ ž ¡   GQ–2]88999999999999998••89999999999999988]33AUž¡            ž ¡      ž ¡ ž         ž ž     ž   Q••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnn2••89999999999999999999999999999999999999999999999999999999999999999999999[•2999999999999999999999999999999999999999999999999999999999999999999999983•AG ¡ ž ¡ ¡ ž                                   ž ¡ ž     ¡ ž    ž    ¡ ž ¡                                     ¡ ž ¡ ž ¡ ž               ¡ ž ¡ ¡ ž ¡    ¡ ž ¡ ž    ž   ž  žc•|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•Q   ž  ž ¡       ¡  ž ¡ ž ¡ ž ¡          ¡     ž ž ¡ ž ¡ ž ¡ ž ¡ ž       ž ¡             ž ¡    ž ¡    ž ¡ ž ¡ ž ¡ ž ¡ ¡   ¡ ž ¡   ž ž ¡  ¡ ž ¡ ž ¡           ž ¡       ¡ 2•3899999999999999999999999999999999999999999999999999999999999999999999999\•39999999999999999999999999999999999999999999999999999999999999999999999993•3nnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•Q    ¡   ž ¡ ¡ ž    ¡  ž ¡ ž ¡ ¡ ž      ¡       ž2•?a89999999999999999999••89999999999999999998a3ŽQG ¡ ž ¡ ž ¡    ž ž ¡       ¡ ž ¡ ¡     ¡ ¡   ¡  Q••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnn3•39999999999999999999999999999999999999999999999999999999999999999999999993•a99999999999999999999999999999999999999999999999999999999999999999999999a3•Qž    ž   ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡ ¡     ž ¡ ž    ž ¡  ¡ ž      ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡             ¡ ž ¡ ž ¡ ž ¡  ž         ž ž          ¡  ž ¡  ž  Q•z88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•[8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•G ž ž  ¡   ž ¡ ž ž               ž ¡ ¡ ž ž  ¡ ž      ž             ¡ ž ¡ ž   ž ¡ ¡ ž ¡ ž ¡   ž ¡    ž ¡                  ž ¡      ž                 ž ¡ ¡ ž ¡ ž   ž ¡ ž žžŽ3?89999999999999999999999999999999999999999999999999999999999999999999999983389999999999999999999999999999999999999999999999999999999999999999999999992••nnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••$  ž ž  ¡         ¡ ž  ¡            ¡ ž ž  ž ¡ žQ•389999999999999999999998••899999999999999999999983•Až        ž ¡      ž ¡ ž ¡     ž  ¡ ž    ž ¡  ž $••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnn••?99999999999999999999999999999999999999999999999999999999999999999999999983389999999999999999999999999999999999999999999999999999999999999999999999983•2Gž    ¡                                     ž ¡       ¡ ¡    ž    ¡ ž ¡                                   ž ž ¡ ž ¡ ž ¡             ž   ¡ ž ¡ ž    ¡ ž ¡ ž ¡  ž     ž  ž U•3888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•38888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888••ž         ¡         ¡ ¡ ž ¡ ž ¡ ž           ž   ¡ ¡ ¡   ¡ ž ¡ ž ¡ ž         ¡               ¡    ž ¡    ž ¡ ž ¡ ž ¡ ž ¡ ž     ž ¡ ž  ¡ ¡ ž ¡ ž ¡ ž ¡             ¡       T59999999999999999999999999999999999999999999999999999999999999999999999999993•\99999999999999999999999999999999999999999999999999999999999999999999999992•3nnnnnnnnnnnnnnnn•••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••ž        ž ¡ ž ¡ ž       ¡ ž ¡ ž ¡ ž           Q•3999999999999999999999998••8999999999999999999999992•$ ž ¡ ž     ž ¡ ¡         ž ¡   ž   ¡ ž        ž••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnn–•29999999999999999999999999999999999999999999999999999999999999999999999999\•39999999999999999999999999999999999999999999999999999999999999999999999999995T ¡ ž  ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž    ž ¡ ž ž    ¡ ž  ¡ ž      ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡               ž ¡ ž ¡ ž ¡  ¡ ž       ¡ ¡          ž  ¡ ¡ ž  ¡   G$•|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|••ž ž ž ¡ ¡ ž  ¡ ž ¡ ¡  ž           ¡ ¡ ž ¡ ¡ ¡  ž      ¡ ž           ž ¡ ž ¡ ž  ¡ ž ž ¡ ž ¡ ž  ž ¡    ž ¡                  ¡ ž ¡      ž               ž ¡ ž ¡ ž ¡ ž  ¡ ž ¡¡9999999999999999999999999999999999999999999999999999999999999999999999999999\•399999999999999999999999999999999999999999999999999999999999999999999999999••–nnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•• ž ¡ ¡ ¡            ¡ ž ž             ¡ ¡ ¡ ž ž••8999999999999999999999999••8999999999999999999999998••U      ¡ ¡      ¡ ž ¡ ž ¡   ž ¡  ž     ¡ ž ¡ ž A•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnŽ••899999999999999999999999999999999999999999999999999999999999999999999999983•a9999999999999999999999999999999999999999999999999999999999999999999999999999T    ž                                   ¡ ¡         ž ž         ¡ ž ž                                 ž ¡ ž ¡ ž ¡ ž ¡           ž     ž ¡ ž    ž ž ¡ ž ¡  ¡          ž  ž$•|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[•c        ž    ž       ž   ¡ ž ¡ ž ¡               ž ¡ ž     ¡ ž ¡ ž ¡           ž             ¡    ž ¡    ž ž ¡ ž ¡ ž ¡ ž ¡       ž ¡ ¡  ž ¡ ž ¡ ž ¡ ¡               ž    ž9999999999999999999999999999999999999999999999999999999999999999999999999999833899999999999999999999999999999999999999999999999999999999999999999999999992••nnnnnnnnnnnnnnnn•••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•$        ž ž ¡ ž ¡ ¡  ž     ¡ ž ¡ ž ¡ ž   ž    ž••a999999999999999999999998••8999999999999999999999999••ž ž ¡ ž   ž ¡ ž           ¡       ž ¡ ž   ž    Q••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnn23•2999999999999999999999999999999999999999999999999999999999999999999999999983389999999999999999999999999999999999999999999999999999999999999999999999999995ž¡ ¡  ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡    ž ž ¡ ¡ ¡     ¡ ž ¡ ž      ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡                 ž ¡ ž ¡ ¡  ž ¡ ¡     ž ¡              ¡ ž ¡ ž ¡    ž$•[8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888z•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•Q  ž ¡ ¡    ¡ ž  ¡ ž ¡  ¡ ž         ž ž ¡ ž ¡ ž ¡       ¡ ž ¡         ž ¡ ž ¡ ž ¡  ¡ ¡ ž ¡ ž ¡  ž ¡    ž ¡                  ž ¡ ž ¡      ¡             ž ¡ ž ¡ ž ¡ ž ¡  ž ¡G]2999999999999999999999999999999999999999999999999999999999999999999999999993•?9999999999999999999999999999999999999999999999999999999999999999999999999a••2nnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•A ¡ ž ž             ž   ¡ ž             ¡   ¡ ž U•3899999999999999999999998••8999999999999999999999983•G        ¡      ¡ ž ¡ ž ¡ ž  ¡ ž ¡       ¡   ¡ ¡$••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ••2nnnnnnnnnnnnnnn23•a9999999999999999999999999999999999999999999999999999999999999999999999999?•2999999999999999999999999999999999999999999999999999999999999999999999999992oG    ž                                 ž ž           ¡ ž  ž      ¡ ¡ ž                               ž ¡ ž ¡ ž ¡ ž ¡ ž                 ž ¡    ž ¡ ž ¡ ž ¡ ž      ž    ž ž žc•38888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•[88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888••G        ž ¡           ž     ¡ ¡ ž ¡              ž ¡ ž        ž ¡ ž ¡                         ž    ž ¡    ž ¡ ¡ ž ¡ ž ¡ ž ¡         ¡ ž ž  ¡ ž ¡ ž ¡ ž                     $•39999999999999999999999999999999999999999999999999999999999999999999999999a•39999999999999999999999999999999999999999999999999999999999999999999999999a••2nnnnnnnnnnnnnnn2•••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••G     ¡ ¡ ¡ ž ¡ ž   ¡ ž   ¡ ž ¡ ž ¡ ž ž  ž      G$328999999999999999999999••899999999999999999999823•ž  ¡ ¡ ž ž  ž ¡              ž     ž ¡ ž ž  ¡   ž••Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•32nnnnnnnnnnnnnnn233a99999999999999999999999999999999999999999999999999999999999999999999999983•a99999999999999999999999999999999999999999999999999999999999999999999999993•A ž ¡  ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡    ¡ ¡ ¡ ž ¡ ž   ¡   ¡ ž ž      ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž                   ¡ ž ¡ ž ¡ ¡ ž ¡    ž ¡            ž  ž ¡    ¡ ž   ž  Q•3|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888z3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•38888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•ž ž ¡ ž ¡     ž ¡ ¡ ž ¡  ž ¡ ž       ž ¡ ¡ ž ¡ ž ¡  ž    ž ¡ ž ¡        ¡ ž ¡ ž ¡ ¡ ž ¡ ž ¡ ž ¡  ž ¡    ž ¡                  ¡ ž ¡ ž ž                   ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž $•399999999999999999999999999999999999999999999999999999999999999999999999983•89999999999999999999999999999999999999999999999999999999999999999999999993••2nnnnnnnnnnnnnnnnŽ••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•$žž ¡             ž     ž                 ž ¡ ž   žQŽ388999999999999999998••8999999999999999999]?3Qž            ¡    ž ¡ ž ¡ ¡ ž ¡  ž ¡         ž  ž $•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••Žnnnnnnnnnnnnnnnn2–3]89999999999999999999999999999999999999999999999999999999999999999999999983389999999999999999999999999999999999999999999999999999999999999999999999993•$                                     ž ¡             ž  ¡ ž      ž ¡ ž                             ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž         ž     ž ¡    ž ¡ ž ¡ ž ¡   ¡    ¡ ž    ¡  ž  ž$•|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3[88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|••ž         ž ž ¡   ž             ž ¡ ¡                  ¡ ¡        ž ¡ ¡ ž           ž                ž ¡    ž ¡ ž ¡ ž ¡ ž ¡ ž            ¡ ¡ ž ¡ ž ¡ ž ¡ ž               ž    $••899999999999999999999999999999999999999999999999999999999999999999999999?•?9999999999999999999999999999999999999999999999999999999999999999999999983•Ž2nnnnnnnnnnnnnnnnn••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•A    ž ¡ ž ¡ ž ¡  ž ¡ ¡  ž ¡ ž ¡ ž ¡ ¡ ¡        ž   žQ$2??889999999999999••899999999999998]22$QUž   ž ¡ ž ¡ ¡ ž  ž ¡              ¡   ž ž ¡ ¡ ¡    U••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnn23•3899999999999999999999999999999999999999999999999999999999999999999999999?•2999999999999999999999999999999999999999999999999999999999999999999999998••A ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡    ž ¡ ž ¡ ž ¡ ¡       ¡ ¡ ¡      ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡                     ¡ ž ¡ ¡   ¡ ¡    ž ¡            ž ž  ¡ ž    ¡ ž       ž$•|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•q8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•$   ž ¡ ž ¡       ž   ¡ ž ¡ ¡ ž ¡      ž ¡ ž ¡ ž ¡ ž ¡ ¡     ž ¡ ž ¡        ¡ ž ¡ ž ¡   ¡ ž ¡ ž ¡ ž ¡     ž ¡                  ¡ ž ¡ ž ¡ ž    ž              ¡ ž ¡ ž ¡ ž ¡   ¡ ¡mF8899999999999999999999999999999999999999999999999999999999999999999999998•3999999999999999999999999999999999999999999999999999999999999999999999983••2nnnnnnnnnnnnnnnnnn3•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•Ažž            ž       ¡             ž  ¡ ž ¡ ¡  ¡     GUQm22?2aa8889999••89998888??2222QQžž    ž ¡            ¡    ž ¡ ¡ ž ¡ ž ž  ž           ž 2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnn2–•?899999999999999999999999999999999999999999999999999999999999999999999983•8999999999999999999999999999999999999999999999999999999999999999999999988FG    ¡                               ž ¡               ž ž ¡       ž ¡ ž                           ž ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡       ž ¡   ž ¡    ž ¡ ž ¡ ž ¡     ž    ¡ ž    ¡ ¡ ž  žc3[8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•3|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•G  ž        ž ¡ ž ¡  ¡      ž     ž ¡ ž                ž  ž ¡         ¡ ž ¡ ž         ž ž           ž  ¡ ¡    ž ¡ ž ¡ ž ¡ ž ¡ ž            ¡ ž   ¡ ž ¡ ž ¡ ž ž             ž ž    I9999999999999999999999999999999999999999999999999999999999999999999999983•99999999999999999999999999999999999999999999999999999999999999999999983332nnnnnnnnnnnnnnnnnnn•••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••G ¡ ž ¡ ž ¡   ¡ ¡ ž ž  ¡ ž ¡ ž ¡ ž   ž        ž  ž ¡        žGUQQQ2m2Q••A2QmQQQUUGž        ž      ¡ ž ¡ ž ¡ ž  ¡ ž                ¡ ¡ ¡ ž ¡ žž•••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnn23•28999999999999999999999999999999999999999999999999999999999999999999998•3899999999999999999999999999999999999999999999999999999999999999999999999P ž ¡   ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž    ž ¡ ž ¡ ž ¡ ž ¡     ž ¡ ž ¡      ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡                       ž ¡ ž     ž    ž ¡            ž ¡ ž  ¡ ž    ¡ ž     ¡   Q•z888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|332nnnnnnnnnnnnnnnnnnnnnnnnnnn2–•q8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888••G ž  ¡ ž ¡ ¡           ž ž ¡   ž ¡      ž ¡ ž ¡ ž ¡ ž ¡   ¡   ¡ ž ¡ ž ž        ž ¡ ž ¡     ¡ ž ¡ ž ¡   ž   ž ¡                  ž ¡ ž ¡ ¡ ž    ¡ ž              ž ¡ ž ¡ ž ¡     ž žžM9999999999999999999999999999999999999999999999999999999999999999999999?•29999999999999999999999999999999999999999999999999999999999999999999a3•–2nnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•Až         ¡                     ¡ ¡  ž ¡ ž ¡  ¡    ž ¡  ž          ž••G           ¡ ž ž ¡  ¡ ž ž                  ¡ ž ¡ ž ¡ ¡ ¡           Q••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•Ž2nnnnnnnnnnnnnnnnnn22Ž32a99999999999999999999999999999999999999999999999999999999999999999992•29999999999999999999999999999999999999999999999999999999999999999999999Iž    ž ¡                             ž ¡                 ¡ ¡         ž ¡ ž                         ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡      ¡ ž  ž ¡    ¡ ž ¡ ž ¡ ¡            ¡ ž    ¡ ž   ž  G••|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q3Ž2nnnnnnnnnnnnnnnnnnnnnnnn–338888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|3•ž             ¡ ž ¡ ž ¡      ž ¡   ž ž ¡                ž ž  ž           ¡ ž ¡ ¡       ž ¡ ž         ž ¡  ¡    ž ž ¡ ž ¡ ž ¡ ž ¡            ž ¡     ¡ ž ¡ ž ¡ ¡ ¡           ž ¡ ¡   žž688899999999999999999999999999999999999999999999999999999999999999999a•3899999999999999999999999999999999999999999999999999999999999999998?332nnnnnnnnnnnnnnnnnnnnnn•••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•QGž ¡ ¡ ž  ¡ ž ¡ ¡ ž ¡ ž ¡ ž ¡     ¡        ž  ¡ ž      ž ž ž ž   ž••G ¡ ¡    ž ž        ž      ¡ ž ¡ ž ¡ ¡ ž ¡ ž             ž ¡ ž ¡ žA••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnn2233?89999999999999999999999999999999999999999999999999999999999999999833899999999999999999999999999999999999999999999999999999999999999999a89Pž   ž     ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡    ž ž ¡ ž ¡ ž ¡ ¡ ž   ž ž ¡ ž ¡      ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡                         ž ¡ ž   ¡    ž ž             ¡ ž ¡ ž ¡ ž    ¡ ž   ¡ ž  ž $3|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnn33|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q•$ž  ž ¡ ž ¡ ž ž        ¡  ¡ ¡      ž      ž ¡ ž ¡ ž ¡ ž ¡     ¡  ž ¡ ž ¡ ¡         ž ¡ ž       ¡ ¡ ž ¡     ž  ¡                   ž ¡ ž ¡ ž ¡    ž ¡ ž              ž ¡ ž ¡ ž       ž  žžQ$•389999999999999999999999999999999999999999999999999999999999999993•999999999999999999999999999999999999999999999999999999999999999823•–nnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•QG      ž       ž           ž ž ž  ž ¡ ž ¡  ž    ¡ ž         ¡ žž••G    ž ¡     ¡ ¡ ž ¡  ¡ ¡ ž                  ¡ ž ¡ ž ¡ ž       žA••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••32nnnnnnnnnnnnnnnnnnnnnnn–322899999999999999999999999999999999999999999999999999999999999999a•389999999999999999999999999999999999999999999999999999999999999983••G   ¡  ¡ ž ¡                           ž ¡                   ¡           ž ¡ ž                       ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž      ¡  ž ¡    ¡ ž ¡ ž ¡ ž ž     ž      ¡ ž    ¡     ¡   ž$3|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|8|8888888888888888888888888888888888888888?332nnnnnnnnnnnnnnnnnn–•q888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•Qž      ž       ¡ ž ¡ ž   ž   ž ¡ ž  ¡ ¡ ¡                ž ¡ ž  ¡         ž ¡ ¡ ž ¡     ¡ ¡ ž ž       ž ¡ ž  ž  ¡ ¡ ¡ ž ¡ ž ¡ ž ¡            ž ¡       ¡ ¡ ž ¡ ž ¡ ž         ¡ ¡ ž ¡      žQ•3?89999999999999999999999999999999999999999999999999999999999992•2999999999999999999999999999999999999999999999999999999999999823•22nnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•$2žž ¡  ž ¡ ž   ¡ ž ¡ ž ¡                   ¡ ž   ¡ ¡ ¡ ¡     ž••ž ž     ž ¡ ž               ¡ ¡ ž ¡ ž ¡ ¡ ž ž           ¡ ¡ GA$•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–2nnnnnnnnnnnnnnnnnnnnnnnn22Ž3?88999999999999999999999999999999999999999999999999999999999992•\99999999999999999999999999999999999999999999999999999999999983••Už     ž       ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡    ž ¡ ¡ ž ¡ ž ¡ ž ¡ ž  ¡ ¡ ž ¡ ž       ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž                           ¡ ž ž      ž ¡               ¡ ¡   ¡ ž ž    ¡ ž  ž ¡   ¡  žA•q888888888888888888888888888888888888888888888888888888888888888888888888888||||[|[[[|[|||[[qqqqqqzq?qzq?zz3zz333333333••3•••••••••••z|88888888888888888888888888888888888888833–2nnnnnnnnnnnnnn2•3|888888888888888888888888888888888888888888888888888888888888888888888888888888||||qzqqqzqqzqqzqz[[[[|8|88888888888888888888888888888888888888888888888888888888888888888888883•U  ž ž ¡   ¡ ž ¡        ž ¡  ¡      ¡      ¡ ž ¡ ž ¡ ¡ ž ¡          ž ¡ ž ¡           ¡ ž         ž ¡ ¡          ž                 ¡ ž ¡ ¡ ž ¡    ¡ ž ¡ ž              ¡ ž ¡ ž         ¡ ž ž  žm$•289999999999999999999999999999999999999999999999999999999998•3899999999999999999999999999999999999999999999999999999999a223Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnn3••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•$QG       ¡ ž         ž ¡ ¡ ¡ ¡ ž ¡ ž ¡ ž    ¡  ž      ¡ ž ž••ž   ž ¡        ž ¡ ž ¡ ž ¡ ž                  ž ¡ ž ¡ ž  žQ$•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••32nnnnnnnnnnnnnnnnnnnnnnnnnn22332a899999999999999999999999999999999999999999999999999999999833899999999999999999999999999999999999999999999999999999999983••Už   ž ¡  ž ¡ ž ž                         ž ¡                     ž         ¡ ž ¡ ž                     ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž       ¡ ¡    ž ¡ ž ¡ ¡ ž ¡ ž   ¡ ž      ¡ ž    ¡   ž ž  ž  Q3z8888888888888888888888[|[[|[[[[[[[[qqq?zqqqzqqqzzzzz3zz333333333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••[888888888888888888888888888888888888888|332nnnnnnnnnnnnŽ3q888888888888888888888888888888888888888888888888888888888888888888|[[qqzz33•••••••••••••••••••••••••••••••••3•33z2qq[[|8888888888888888888888888888888888888888888888888888888••G    ¡   ž ž     ž ¡ ž ¡       ž ž ¡  ž ¡ ž                 ¡ ž ¡ ž ¡       ž ¡ ž ¡ ¡ ž   ¡ ž ¡ ¡ ¡      ¡ ž ¡ ¡ ¡  ¡ ž ¡ ž ¡ ž ¡ ž            ž ž         ž ¡ ž ¡ ž ¡ ž       ¡ ž ¡ ¡ ž         žžP99999999999999999999999999999999999999999999999999999999993•]999999999999999999999999999999999999999999999999999998?33Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–••2GG ¡     ¡ ž ¡ ¡                ž    ¡ ž     ž ¡ ž    ž••Gž ¡    ¡ ž ¡ ¡     ž        ž ¡ ž ¡ ¡ ž ¡ ¡ ¡        GA$•Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž32]889999999999999999999999999999999999999999999999999999\•28999999999999999999999999999999999999999999999999999999999IG¡   ž  ž           ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡    ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡  ž ¡ ž ¡         ž ¡ ž ¡ ž ¡ ž ¡ ž ¡                              ¡ ¡ ž   ž ¡                 ž     ¡ ¡ ž    ¡ ž  ¡       ž  U$•|8888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z|888888888888888888888888888888888888888z322nnnnnnnn2•388888888888888888888888888888888888888888888888888888888888|[qqz3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••33qz|8888888888888888888888888888888888888888888888|••ž  ž    ž     ¡ ž        ž ¡ ž              ¡ ž ¡ ž ¡ ž ¡ ž ž     ž    ž ¡ ¡             ¡           ž ¡ ž     ž    ž               ¡ ž ¡ ž ¡ ž    ¡ ž ¡ ž ¡              ¡ ž ¡           ¡ ¡ ž ž    žT76999999999999999999999999999999999999999999999999999992•399999999999999999999999999999999999999999999999998??3ŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–AQUžž ¡       ž ¡ ž ¡ ž ¡ ž ¡   ¡ ž    ¡ ¡       ¡ ž ••G    ž ž        ž ¡   ¡ ž ¡ ž                  ž ¡UA$•Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž32?]889999999999999999999999999999999999999999999999993•]99999999999999999999999999999999999999999999999999999:7¡ž     ¡     ¡ ¡ ž ¡ ¡                        ž ¡                       ¡       ž ¡ ¡ ž ¡                   ž ¡ ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡    ž  ¡    ž ¡ ž ¡ ž ¡ ž ¡ ž  ž ¡       ¡ ž    ž  ¡ ¡ ž  ¡  ž$3|888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|888888888888888888888888888888888888888|332nnnnn233|888888888888888888888888888888888888888888888888888888[[qz•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3zq|888888888888888888888888888888888888888z•$ž    ¡ ž  ¡ ¡ ž   ¡ ¡ ž ¡      ¡ ¡ ¡ ž ¡ ¡ ž                   ¡ ¡   ¡ ž     ž ¡ ž ¡ ž ¡ ž  ž ¡ ž ¡ ž       ¡ ¡   ¡ ž  ¡ ¡ ž ¡ ž ¡ ž            ¡ ¡           ¡ ž ¡ ž ¡ ž ž   $•2 ž ¡ ž ¡ ž       ž ž     TP7698a8899999999999999999999999999999999999999999998•3899999999999999999999999999999999999999999998a?233–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž33QAUž ¡ ž                ž ž    ¡ ž   ž ¡ ž ž   ž••G  ¡     ¡ ¡ ž ¡   ž ž        ¡ ž ¡ ž ¡ ¡ ž ¡GAQ•––22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222ŽŽ32[889999999999999999999999999999999999999999999833899999999999999999999999999999999999999999999a]8957Tž  ž ž ž ž  ¡ ¡  ž       žA•2 ž ¡ ž ¡ ž ¡ ž ¡ ž     ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ž  ¡ ž ¡           ¡ ž ¡ ž ¡ ž ¡ ž ¡                              ž ¡     ž ¡                   ¡   ž ¡ ž ž    ¡ ž  ž     ¡  ž  ž$•[88888888888888888888z••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z|888888888888888888888888888888888888888q332nn–3388888888888888888888888888888888888888888888888888|[q3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••q|88888888888888888888888888888888888z•Q  ž ž    ¡       ž        ž ¡ ž  ž           ž ¡ ž ¡ ¡ ž ¡ ž ¡ ž   ¡ ž    ž ¡               ¡         ¡ ž ¡ ž   ¡ ž                  ¡ ž ¡ ž ¡ ž    ž ¡ ž ¡ ¡ ž               2•A            ž ¡ ¡     ¡ ž     žQQA$22288999999999999999999999999999999999999993•?99999999999999999999999999999999999998a]2?3ŽŽ222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22ŽŽ3AQQUž¡ ž ¡ ž ¡ ž ¡     ¡ ž    ¡         ž ž••Gž  ž ¡ ž        ¡     ¡ ž ¡ ž         GUAA•3Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–ŽŽ22]889999999999999999999999999999999999999?•3999999999999999999999999999999999999998a?233$QUž  ž ¡  ¡          ž   ž ¡ ž  ž$•U                  ž ¡                               ž ¡ ž ¡ ¡ ž                 ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡     ž ¡    ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž  ¡         ¡ ž       ¡ ž  ž   ž žQ•z88888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333333z3zzzzzzzqzzqq[888888888888888888888888888888888888888883•2•3|88888888888888888888888888888888888888888888888[qz•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3[|8888888888888888888888888888888••G ¡    ž ¡   ¡ ž ¡  ¡ ž ¡ ¡          ž ¡ ¡ ž ¡                     ž     ¡ ¡   ž ž ¡ ž ¡ ž ¡ ž  ž ¡ ž ¡         ž      ¡ ¡ ž ¡ ž ¡ ž ¡            ž ¡             ¡ ž ¡ ž ¡ ¡ ¡     ¡ ž ¡ ž ¡ ¡     ž ¡ ž     ž ¡     žUQQ$–3??999999999999999999999999999999999]•39999999999999999999999999999998aa?223–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222ŽŽ–A2QQUGž     ž ¡ ž     ž  ž ž ¡ ¡ ¡  ž••G ¡        ž ¡ ž  ž ¡ ž        UUQA2•––222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–2Ž2??aa88999999999999999999999999999983•a999999999999999999999999999999999[233AQQGGž     ž   ž    ¡ ¡ ž ¡  ž ¡      ž     ž ¡ ž ¡ ž ¡ ž ¡ ¡    ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ¡ ž ¡ ¡             ¡ ž ¡ ž ¡ ž ¡ ¡                              ž ž ¡   ž ž                       ž ž ¡ ¡ ž     ¡ ¡ ž      ¡ ž    Q•3|8888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••3qqqq?[[?[??[?[?[|||||||||8|888888888888888888888888888888888888888888888888888888888888888888888888|3q888888888888888888888888888888888888888888888|q3•••••••••••••••••••••••••••••••••3zzqq?[?[?[[?[[[?[[qzz3333••••••••••••••••••••••••••••••••••••••••q|888888888888888888888888888••ž   ž ¡    ž ž     ž        ž ¡ ž ¡ ¡          ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž  ž ¡     ¡                 ¡       ž ¡ ž ¡ ž  ž ¡ ž               ž ž ¡ ž ¡ ž    ž ¡ ž ¡ ž ¡ ž             ž ¡ ž            ž ¡       ¡ ¡    ž ¡       žGGTP7775:999999999999999999999999998••899999999999999999988aaa22?332Ž2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž3––$2Q2QUGGžž ¡  ¡           žž••ž   ¡ ž ¡ ¡     ¡   GGUUA22A•–Ž22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–232?2?]a88899999999999999999983389999999999999999999999999995577PPžG         ž ž  ¡  ž ¡    ž         ž ¡ ž  ¡ ž                   ¡ ž                       ž     ž ¡ ž ¡ ž ¡ ž               ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž       ž    ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡            ¡ ž  ž    ¡ ¡      ž ž G••|88888888888888888888z333•••••••••••••••••••••••••3•••••••••••••••••••••••33qq[|||888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q••••••••••••••••••••••••••••3z?[||888888888888888888888888888888||?qq3••••••••••••••••••••••••••••••••••q8888888888888888888888888[3•QUUGUUUUUUUGUGUUUUUUGUGUGUUGUGUGGUGUUGGUUGUUUUGGUGUUUUGGGUUUUUGUGUUUUUUUUGUGUUGGUUGUUUUUUUGUUUUUGUUUUGGGUUUGUUGUUUUGUUUUUUUUUUGGUUUGUUGUUUGUGUGGGGUGUGGGUUUGUUGUGUUUUUUUGUUUUUUGGUUUGGUGUGGUGUUGGUUUUUGUUUUUUUUUGUUUUUGUGUGGGUGUUUGUUUGmGPPTT776AŽ223??2?2?2?]]]a3•2]a2]]?2?22?232Ž–ŽŽ2–2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222ŽŽ––A–2$A22Q2A2Q2QUUQ••QUUQQ2Q2QAQ2AA$–A––3–222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222–––ŽŽ22322?2?2?2?]][3•3a?\2]?2?2?2222–23777TTPTPGmUUUUUUUUUUUUUGUUUUUUUUUUUGGUGUUUUUUUUGUUGUGGUGUUUUUGUUUGUUGUUUUUUGUUUUUUUUUUUUUUUGUUUUUUGUUUGGGUUGUGUUGUUGGGUUUUUGUUUUUGUUGUUGUGUUUUUUUUUGUUGGUGUGGGUUUGUUGUUUGUUUUUUGUUUUUUGUUUGUUGGUGUUGUUGUUUUGUUUUUUUUGUUUUUUUGGGUGUUUUUUUGUGGUUUQ•3|888888888888888888888888||?[?qzz33••••••••••••••••••••••••••••••••••••••••••••••••33zqqq?[||88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••••••••••••••••••••••••••z?888888888888888888888888888888888888888888888|[3•••••••••••••••••••••••••••••••|88888888888888888888888q•$UUUUUUUUGUUUUUUUUUUUUUUUGGUUUGGGUUGUUUUUUGUUUUUUUGUUUUUUUUUUUUUUUGUUUUUGUUUUUUUGUUUUUUUGUGUUUUQ•••••••••••••GGGUGUUUGUGUUUUUUUUUUUUGUUUUGUGGUGUUUUGUQ••QUUUUUUGGUUUUUUUUGGUUUUGGUUUGUGUUUUUGUGUU••AGGUUUGUUUUGUUUGGUUUUUUUUUUUUGUGUUUUUUUA•$  ž       žžžGGGUGUGGQ••22222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22n2222222222••22222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222222222223•mUGGGGGGGGGžž        GA•QUUUUUUUUUUGUUUUUUUUUUUGGGUGUUGUUUGUUGUA••GGGUUGUGGUUUGUUGUUGUUUUUUUUUGUUUUUGUUUUUQ••QGUGUGUUUUGUGUUUUUUGUUUUUUUUGGUUGGUUUUUUU$••••••••••••QUUUUUUGUUUUUUUGGUGUUUUUUUUUUUUGGUUUUUUUUGUUUUUUUGGUUUGGUUUUUUUUGUUUGUUUUGUGUGUGUUUGGUGUGGGUUUG$•[8888888888888888888888888888888888|||?[?zz33•••••••••••••••••••••••••••••••••••••••••••••••••333qqq[|||888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|[3••••••••••••••••••••••••3|8888888888888888888888888888888888888888888888888888|?3••••••••••••••••••••••••••••z88888888888888888888883•Q                                                                                              G•••••••••••••ž                                       ž••G                                        Q•$                                      ž••ž ž   ¡              ž••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••ž            ¡ ž ž ž ž••G                                     ž$•Q                                        Q•$ž                                       ž$••••••••••••G                                                                                             žA•q888888888888888888888888888888888888888888888|||[[zz333•••••••••••••••••••••••••••••••••••••••••••••••3333zqq[[||88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••••••••••••••••••••••••3|888888888888888888888888888888888888888888888888888888888?••••••••••••••••••••••••••••888888888888888888888••G                         ž ž  ž ž ž  ž     ž        ž                            ž        ž   G•••••••••••••ž  ž ž                ž  ž   ž   ž       $•A  ž      ž        ž ž   ž ž   ž    ž ž žG•3ž  ž   ž        ž       ž  ž          ž••G    ¡  ž ¡ ž ž ž ž ž $•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•Q ž ž ž ž ž ž   ¡     Q••ž                     ž   ž  ž        ž$•G ž  ž         ž ž         ž             A•Až ž   ž ž ž      ž         ž   ž        ž•••••••••••••G             ž               ž                 ž    ž         ž        ž ž ž    ž ž ž ž       Q•3|888888888888888888888888888888888888888888888888888888|||[[[zz33•••••••••••••••••••••••••••••••••••••••••••••••••33zqqq[[||88888888888888888888888888888888888888888888888888888888888888888888888888888888888q••••••••••••••••••••••••3|888888888888888888888888888888888888888888888888888888888888z••••••••••••••••••••••••••q88888888888888888888••ž ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž   ¡      ¡  ¡ ž ¡  ¡ ž ¡ ž  ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž ¡ ž  ¡ ž ¡ ž  ¡     ž  ž ž  ž       ¡ ž ¡ ž ¡ ž ¡ ž  ¡  ¡ ž  ¡  ¡ ž ¡ ž    ¡  ¡ ž ¡  ¡ ž ¡     ¡ ž   ¡   ¡ ž          ž  ¡   ¡ ž ¡ ž  ¡ ž ¡ ž    ¡ ž ¡ ž ¡     ž ž  ž              U•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•G            ¡   ¡ ž  žž ž ¡ ž ¡ ž ¡ ž ¡ ž ¡   ¡ ž    ¡ ž ¡ ž   žž  ¡  ¡ ž ¡ ž ¡   ¡ ž ¡ ž ¡  ¡ ž ¡ ž ¡ ¡       ¡ ž     ¡ ž ¡  ¡ ž ¡ ž   ¡   ¡ ž ¡ ž    žž  žžžž žž  ž ¡ ž ¡ ž ¡  ¡ ž ¡ ž ¡ ž ¡ ž  ¡ ž ¡ ž ¡ ž ¡ ž  ¡ ž  ¡ ž ¡ ž ¡  ¡ ž ¡ ž     ¡ ž        ¡ ž ž   G$•|88888888888888888888888888888888888888888888888888888888888888888||[?[zz333••••••••••••••••••••••••••••••••••••••••••••••••33zz2q[[||888888888888888888888888888888888888888888888888888888888888888888888883••••••••••••••••••••••••z88888888888888888888888888888888888888888888888888888888888888|•••••••••••••••••••••••••38888888888888888888|••ž     ¡           ¡          ¡  ž ¡ ¡  ž         ¡   ¡  ž               ž     ¡        ¡   ¡  ž  ¡             ž ž ¡        ž       ¡  ž       ž      ¡   ž   ž      ž      ž ¡     ¡   ž    ¡ ¡ ¡ ¡    ž   ž        ¡          ¡      ¡    ž  ž   ¡  ¡ ž ¡ ž ¡ ¡ žž••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••G ¡ ¡ ¡ ¡ ž  ž ž   ž                   ¡    ž      ¡    ž    ž   ž  ž    ž   ž  ž    ž      ž            ž ž ž     ¡ ¡      ž      ¡  ¡   ž        ¡ ž             ¡   ¡   ¡   ž    ž         ¡  ž           ž   ¡    ¡      ¡    ž   ž    ¡ ¡    ¡ ¡ ¡ ¡       ž  ž$•[888888888888888888888888888888888888888888888888888888888888888888888888888|||[?qq3••••••••••••••••••••••••••••••••••••••••••••••••••3•3[8888888888888888888888888888888888888888888888888888888888888888q••••••••••••••••••••••••3|8888888888888888888888888888888888888888888888888888888888888883••••••••••••••••••••••••388888888888888888883•A   ž ž   ž ¡ ž ¡ ž   ž ¡ ž ¡ ž            ¡ ž ¡ ž   ž   ¡  ¡ ž ¡ ž ¡ ž ¡   ¡ ž    ž ¡ ž   ž   ¡  ž   ¡ ž ¡ ž ž ¡     ž ¡ ž ¡   ¡ ž ¡      ž ¡ ¡  ž ¡ ž   ¡  ž ¡  ¡ ž ¡  ¡ ž ¡   ž ¡ ž  ¡  ž ¡        ž ¡   ¡  ž ¡ ž ¡   ž ¡ ž ¡ ž ž ¡ ž   ¡ ž  ¡  ¡                 A•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn223•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•Qž         ¡     ¡   ž ž ž ¡ ž ¡ ž ¡ ž   ž ¡  ž ¡ ž ž ¡   ¡ ¡   ž    ž ¡   ¡     ž ¡   ¡ ž ¡  ¡ ž ¡ ¡ ž ¡     ž ¡ ž   ž ¡ ¡  ž ¡ ž   ž  ¡  ž ¡ ž ¡    ž ž ž ž ž ž ž  ž   ž   ¡  ž ¡   ¡ ž ¡ ž   ¡  ¡ ž ¡ ž ¡   ¡  ž ¡  ž ¡ ž   ž ¡  ¡   ¡ ž   ž ¡        ž ¡ ¡ ¡  ž žc•[888888888888888888888888888888888888888888888888888|||||||[|[||[[[[[?[?qqqqqqqqqq3••••••••••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888888888888888888888888888888888888888888888888•••••••••••••••••••••••••38888888888888888888888888888888888888888888888888888888888888888•••••••••••••••••••••••••388888888888888888883•cQUQQQQUQUUQUQUQQQQQUUQUQQQQUUQQQQQUQQUUUQUUQUQQUUQQQUUUQUQQUQQUQUUUUUUUUUUUUQQUUUQQQUUQUQQQUQQUQUQQQUUUQUQQQQUQUQQQUQQUQUUQUQQQQUUUUQUUUQUQQUQUQUUUQUQQUQUQQUUUUUUUUUUUUQUQUUQUUQQUQUQQUQQUQQQQQQUUUQQQUQQUUUQUQQQQQUQQUUUUQQUUQUUQQQQQQQUQUQUQQUUQQUQUQQUQUQQQQQUQQQ••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233QUQUQQQUQQUUQQQUQQQQQUUUQUQQUUUQQQUQUQUQUUQUUUUUQUQQQQQUUUUUUUQQUUUQQUQQQQUQQQUUQUUUQUUQQUQUUUQUUUUUQUUQUQUUQQQQQUQQQUQUUUQQUUUQUQUUQQUQQQQQQQUQUQUQQUQQUQQUQUUQQQUQUUUQUUQQUQUQQUUUUUQUQUQQQUUQQQQQQQQUQQQUUUUQQUQUQUQUUUUQUQQQUQUQUUUUQQUUUUQQQUQUQUUUUQQQQUQQQQUUQ••3888888888888888888888[qqzqz3333z33333•3•333•3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3[8888888888888888888888888888888888888888888888888888888888q••••••••••••••••••••••••••33zq2qqqq[[[[[|8888888888888888888888888888888888888888888888888•••••••••••••••••••••••••38888888888888888888•3222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222nNNNNKMKNNNNMN2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222MNNNKMNMKNNNNn222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222•3|88888888888888888888q•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z|88888888888888888888888888888888888888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••33•33z3qqqqq[[||[[|||8888888888888888888888[•••••••••••••••••••••••••3888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMOOOOOOOOOOOOOnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMOOOOçOOOOOOOOMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888[3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3[8888888888888888888888888888888888888888888888888888q•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••33333?qqqq[[[[|[[3•••••••••••••••••••••••••|8888888888888888882•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMOOOçOOOçOOOOOMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnNOOOOOçOOOOOOOMnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33[88888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|888888888888888888888888888888888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••38888888888888888888z•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•q888888888888888888888z••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333333zz3zzzzzzzzqq?q[88888888888888888888888888888888888888888888888?••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••388888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|88888888888888888888q3••••••••••••••••••••••••••••••••••••••••••••••••••••••••3qq?[[?[[[?[[?[[|||||||||||888888888888888888888888888888888888888888888888888888888888888888888888888888||||[?[[qqzzz3333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z8888888888888888888332nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888|z33•••••••••••••••••••••••••••••••••••••••••••••••••••••3zqq||||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[[[?qqqzz33333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3?888888888888888888|••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888|||?[qz333•••••••••••••••••••••••••••••••••••••••••••••••••••3•33qq??||888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[[?[?zqzzz3333•••••••••••••••••••••••••••••••••••••••••••••••••••3|888888888888888888z•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[88888888888888888888888888888888888||[[qqz33••••••••••••••••••••••••••••••••••••••••••••••••••••333qqq[[|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||||[?[?[qzzzz3333••••••••••••••••••••••••••••388888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2n2n2222nn2n222222nnn222n2n2n2222nn2222n22n2nnn22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž••–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•[888888888888888888888888888888888888888888888||[[qzz33••••••••••••••••••••••••••••••••••••••••••••••••••••3•3qz[[[||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||||??[[[?zqzzz3333••••388888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22•••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–ŽŽŽ2nF000;;;“:“;:“;;;;02–ŽŽŽŽ–cQUUUUUUQQAŽŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|88888888888888888888888888888888888888888888888888888|||[[[qz333••••••••••••••••••••••••••••••••••••••••••••••••••••3zqqq|||88888888888888888888888888888888888888888888q3z2qzqq[|[[||||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|8888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn223••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž2:99¨9¨99¨9¨99¨9999¨:oŽŽŽŽŽŽŽŽŽcŸŸŸŸŸ§ŸŸŸŸ§ŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|8888888888888888888888888888888888888888888888888888888888888888|||?[qz333•••••••••••••••••••••••••••••••••••••••••••••••••••33zqqq[[|88888888888888888888888888888888•••••••••••••••••••••••3z3qqqqqq[[||[|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888[•3Ž–Ž–Ž––3–3–3–Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž;¨9¨999¨99999¨99¨9¨9;2ŽŽŽŽŽŽŽŽ–GŸŸ§ŸŸŸŸŸ§ŸŸŸŸŸUŽŽnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233•–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–3–Ž2–2–Ž–323–3[888888888888888888888z333qq[[||8888888888888888888888888888888888888888888|||[[qq333••••••••••••••••••••••••••••••••••••••••••••••••••••33qz[8888888888888888888888[•••••••••••••••••••••••••••••••••••••••••••3•33zzz?qqq[[[[|||88888888888888888888888888888888888888888888888888888888888888888888888888888q•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2ŽF9999¨99¨9¨999999;::02ŽŽŽŽŽ–AŸŸŸŸŸŸŸŸ§ŸŸŸŸŸŸŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•[888888888888888888888q•••••••••333qq||||888888888888888888888888888888888888888888888||?[?qz33••••••••••••••••••••••••••••••••••••••••••••••3|8888888888888888888•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•33z3zqzqq[[[[[|||888888888888888888888888888888888888888888888888888883•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–o99¨99¨99“]2ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽAQQQŸŸŸ§ŸŸŸŸŸ§ŸŸ§ŸŸQŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3888888888888888888888|3••••••••••••••••••zzqq|[|88888888888888888888888888888888888888888888888||[?[zz33••••••••••••••••••••••••••••••••••••3[8888888888888888q••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3333zqqqqqq[[||||888888888888888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–29¨9999:2–ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽAQQUŸŸŸŸŸŸŸŸŸ§UŽŽnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|8888888888888888888883••••••••••••••••••••••••••3•3qq[[||88888888888888888888888888888888888888888888888||[?qz3333••••••••••••••••••••••••••3|8888888888888••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•33zq8888888888888888888|•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž“99¨9FŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽc§§ŸŸ§ŸŸŸŸ–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888z•••••••••••••••••••••••••••••••••••••zqq[[[8888888888888888888888888888888888888888888888888||[?[qz333•••••••••••••••••[88888888888[zzzzz333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••8888888888888888888[•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–Ž33222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2ŽF9902ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ–cQQ–ŽŽŽŽ2ŸŸŸŸŸŸŸŸŸQŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33|888888888888888888888?3•••••••••••••••••••••••••••••••••••••••••••333qq[[||8888888888888888888888888888888888888888888888888|||[?qz333•••••••3|8888888888888888888888||||?[[?[qzzz33333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z8888888888888888888z•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3••22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Žo92ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ3QŸŸŸŸU–ŽŽŽŽQŸŸŸŸŸ§ŸŸUŽŽnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3•3Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•[8888888888888888888888|[[qz33•••••••••••••••••••••••••••••••••••••••••••••••3zzq|[||88888888888888888888888888888888888888888888888888|||?[[zq|888888888888888888888888888888888888888888|||||[[?[?qzzz33333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|88888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–2;2–Ž3ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ3UŸŸŸŸŸŸGAŽŽŽŽ2ŸŸŸŸŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–•3Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•388888888888888888888888888888||[[?zz•••••••••••••••••••••••••••••••••••••••••••••••••3zqqq|[|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[?[?[qqzz33333••••••••••••••••••••••••••••••••••••••••3|8888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2333Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–Ž999:;2ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽAQŸŸŸŸŸŸQA–ŽŽAQŸŸŸ§ŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•3|8888888888888888888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••33qq[[[|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||?[?[qqzzzz333••••••••••••••••••38888888888888888888|3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–••3–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž0¨992ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ–QŸŸŸŸŸ§ŸUAŽŽŽ2ŸŸŸŸUŽ–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž•|888888888888888888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3zqqq[|8888888888888888888888888888888|||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[[?[?qzzz[8888888888888888888q•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–••–2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2ŽF99:2ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ2ŸŸŸU2AA3ŽŽŽŽŽAAQUU–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[88888888888888888888888888888888888z••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•zzqq[||88888888888888888888•••••3••33zzzq?qq[|[[|||8||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888z•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3••–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ29¨95F2ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽQAŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2n2Ž33322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[88888888888888888888888888888888888|3••••••••••••••••••••••••3|||?[[zz33•••••••••••••••••••••••••••••••••••••••••••••••333?qq|[|8888888888••••••••••••••••••••••••••••3•333zzz?qqq[[[[[|||8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2333Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222nnnnnnnnnn2222222222nnnnn2222222nnnn2222222222222222222nnnnnnn2222222nnnnnnn22222222nnnnnnn2222222nnnnnnn222222222nnnnnn2222222nnnnnnnn2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22:99¨9902–ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ–22AŽŽŽŽŽŽŽŽŽŽŽŽŽŽAŽ–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–3•–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•z|8888888888888888888888888888888888|3••••••••••••••••••••••••3|8888888888||[?zz33••••••••••••••••••••••••••••••••••••••••••••••••3zzq[[[|••••••••••••••••••••••••••••••••••••••••••••••••••3333333zq?qqq[[[[[||88888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn223••Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–22–222nnnnnnnn22222–222–2nnnnn22–2–22nnnn2222–222222222222–2222nnnnn2–22–22nnnnn2222–22–22nnnnn2222–222nnnnnn22–2–2–2222nnnnnn222–2222nnnn22–22–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23“999¨999;FFo2ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽQGQQAAA2A–AQQU–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888883••••••••••••••••••••••••3|88888888888888888|||?[q333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333333?qqqq[[[[[|||888888888888888888888888888888888888888888|•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–2–22–2–2–nnnnn22–22––22––22nnnnn2–22–22nnnn22–2–222nnnnnnn2222–22–2nnnn–22–222nnn222–2–2–22––nnn2222–222nnnnnn2–2–222–2–2–2nnnnnnn2222–222222–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž09¨99¨9999¨99F2–ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ3QŸŸ§ŸŸŸ§ŸŸ§Ÿ§ŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888888888888888888z3••••••••••••••••••••••••z888888888888888888888888888||[[zz33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•333zzqqqzq[[[[||888888888888888888888?•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3•–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–2–222–22nn22–222–222–222nnnn22–22–22nnnn2222–222nnnnnnnnnn2–22–22nnnn22–22–2n222––222–22–22n22222–22nnnnn22–22–22n22–22–22nnnnnnnn2–2–2–222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ299¨999¨9¨9¨9999022ŽŽŽŽŽŽŽŽŽŽŽŽŽŽ–QŸŸŸŸŸ§ŸŸŸŸŸŸUŽ–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž33–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[88888888888888888888888888888888888|3•••••••••••••••••••••••••|88888888888888888888888888888888888||[3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|888888888888888888|3•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–333222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222––2222–2–2–222222–222–2–2–2nnnnn222–222nnnn22–2–222nnnnnnnnnn222–222nnnnn222–2222–2–222n22–22–2–22–222nnnnn22222–22nnnn22–22–2nnnnnnnnn2–22–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–29¨99¨9999999¨999¨9;n223ŽŽŽŽŽŽŽŽŽŽŽ32ŸŸŸŸŸŸŸŸ§Ÿ–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž3•–Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•z8888888888888888888888888888888888883••••••••••••••••••••••••3|8888888888888888888|||[|[[?[qqqqq33z33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–•3––2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–22–2n22–22–222––222n22–22–2nnnn222–2222nnnn22–2222nnnnnnn22222––2–222nnnnn22–2–2–22–22nnn2–2–2–22–2222nnnn22–2–2–222222222–2–2–2nnnnnnn222–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž:99¨99¨9¨9¨999¨9999¨99;F22–ŽŽŽŽŽŽŽŽŽAŸŸŸ§ŸŸŸŸŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–33–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|88888888888888888888888888888888888z•••••••••••••••••••••••••zq[[qqqqqzz333•3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3••Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–22–2nnn–2–22–2–22nnn22–2–22nnnn222–2–2nnnnnn–22––2–222222–2–2–22222nnnnnnnn2–22–22–22nnnnn2222–22–22nnnnn22–222222222222222–22–22nnnnnn22–22–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž0¨999¨999999¨99¨9¨9999¨99990F22–3ŽŽŽ32ŸŸŸŸ§ŸŸŸŸQŽ–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–333–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888888888888888|||3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|8888888888888888888|•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3••–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222nnn222222222nnnn2222222nnnnn222222nnnnn222222222222222222222nnnnnnnnnnnn22222222nnnnnnn22222222nnnnn22222222nnnnnnnnnnn2222222nnnnnn2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2ŽF999¨999¨99¨9999999¨9999¨999¨999:12ŽŽŽ–2UŸŸŸŸŸ§Ÿ–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž333–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|8888888888888888888888[3z33•3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3[[[[?[?qzzzz333••••••••••••••••••••••••••••••••••••••3888888888888888888883•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–Ž••322nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ299¨99;22n:5n2n:0oonFFo]09¨;oooo:9:o–ŽŽŽAŸŸ§ŸŸŸŸAŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22333–Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–3[8888888888888888888888z••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3••••••••••••••••••••••••••••••••••••••••••••••••••••33qq[|88888888888888||||[[[?[qzzz3333••••••••••••••••3888888888888888888883•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–Ž3•3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–Ž:99¨9;3ŽŽ212Ž–;FŽŽn0F––F992Ž2I2209¨:2–Ž2§ŸŸŸŸŸŸQŽ–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–3•3–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•z8888888888888888888888?3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••8||?q33•••••••••••••••••••••••••••••••••••••••••••••••••••••33q[[|888888888888888888888888888|||||?[?[?z?q888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–3•3–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž;¨999:2Ž2o2–ŽŽF;2Ž2F02Ž2;nŽŽ2o2Ž–0999F232ŸŸŸ§ŸŸ–Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–333–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|88888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3333zqqq[?[[[|||||888888888||?zz3•••••••••••••••••••••••••••••••••••••••••••••••••••••3zq[[8888888888888888888888888888888888888888888888888888|•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž–33•–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Žo:9¨99o229:o22I:222on222;222:9:n22;9992ŽŽcŸŸŸŸŸŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–Ž333––22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333zzzqzq?[[?|||||888888888888888888888888888888888888888|?[zz3••••••••••••••••••••••••••••••••••••••••••••••••••••33zq[[88888888888888888888888888888888888888888888q•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33•––222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽŽ20:9999¨99999999¨99¨99¨99¨9999¨99¨99:2ŽŽŽ–QŸŸŸU–ŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22ŽŽ3•–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž3|8888888888888888888888q••••••••••••••••••••••••••••••••••3333zqq[[?[[[|||||88888888888888888888888888888888888888888888888888888888888888888888||?[q33•••••••••••••••••••••••••••••••••••••••••••••••••••••3zzq[|888888888888888888888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2––••3Ž22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽŽŽŽŽ22oFFF0000000;;000;0000;000;;00;00F2ŽŽcQQA–ŽŽŽŽŽ2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–3•3–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233[8888888888888888888888|3••••••••333zzzqzz[[?[[||||888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||?qz33•••••••••••••••••••••••••••••••••••••••••••••••••••••3zq[||8888888888888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–333Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222222222222222222222222222222222222222222222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž3•3–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•z|888888888888888888888||||||88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|[qz3••••••••••••••••••••••••••••••••••••••••••••••••••••••3qq|888888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–3••2–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž33•3Ž–22nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|[?q3•••••••••••••••••••••••••••••••••••••••••••••••••••|8888888888888888888|••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–3••Ž–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž3333–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||[[||[||qqq3•••••••••••••••••••••••••••••••••••••••••••••••••388888888888888888888q••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–3333–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž3•3–Ž222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn33[888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||||[|[[[[[qzq?qqz3zzz333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••z888888888888888888883•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22Ž–3•3–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22–33•3Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•z8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3|88888888888888888888••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–333•–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž–333Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|8888888888888888888888|[|||8|8888888888888888888888888888888888888888888888888888888888888888888888888||[|qqz33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222––3••3Ž–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž3333––2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–33|8888888888888888888888q3••••••3•333zzqqqqqqq[[[||||88888888888888888888888888888888888888||[[qqqzz3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••388888888888888888888|•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž33••–Ž2222n2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž33•33–Ž2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|8888888888888888888888|3••••••••••••••••••••••••••••••3333z3zqzq2q[[[[|||8888|[[[qqq33•3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••q88888888888888888888q••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222Ž–3•3–Ž22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–ŽŽ333–Ž–222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[888888888888888888888883•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••333333zzzqzzqq[?[?[[?|||||8888888888888888888883•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž–33•3Ž–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222Ž–3333Ž–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•z888888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••zzzqzqq[?[[?[[[?|||||||||88888888888888888888888888888888888888888888888888|3•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2222–Ž–333•3ŽŽ–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–Ž33••3–Ž–22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|8888888888888888888888q3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••?||||88888888888888888888888888888888888888888888888888888888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222–Ž–333•3–ŽŽ222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222–Ž–33333–Ž–2222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–33|8888888888888888888888|3•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3•33zzqqqqqq|[|||||888888888888888888888888888888888888888888888888]3•nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222–Ž–33••3Ž–Ž22222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn22222Ž–Ž33333–Ž–2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233[888888888888888888888883••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••33333q2qzq|q[[|[8|888888888888888888888888882•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222Ž–Ž–333••33Ž–Ž–222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2n22222–Ž–3ŽŽ••333––Ž–222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233[888888888888888888888888||||||[?[?[qqqzzz3333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••338888888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222––Ž––3333••33–Ž–2222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222–Ž–33–33333–Ž––Ž222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•q|888888888888888888888888888888888888888888888888||||[[??[[qzqzz33333•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888888888••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222222222222–Ž–Ž–Ž–333333••••3–3Ž–Ž––2222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222––Ž–Ž3Ž3Ž3••333333––Ž–Ž–Ž–2222222222222222222nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•3|888888888888888888888888888888888888888888888888888888888888888888888888|||[[?q33••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••q88888888888888888888|3••333333333333333333333333333333333333333333333333333333333333333333333333333333•••••••33••333333Ž3333–Ž–Ž–Ž–222222222222n2n2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn222222222222–Ž–Ž–Ž–3333333333333•••3••••3•333333333333333333333333333333333333333333333333333333333333333333333333333333•••|888888888888888888888888888888888888888888888888888888888888888888888888888888888|?[zz3••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••|88888888888888888888[••222222222222222222222222222222222222222222222222222222222222222222222222222222nnn2n2nnn2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2n2nnn2n22222222222222222222222222222222222222222222222222222222222222222222222222222233[888888888888888888888888888888888888888888888888888888888888888888888888888888888888888||[?333•••••8|8||||[[[qzzzz3333••••••••••••••••••••••••••••••••••••••••••••••••••••••••••3888888888888888888888z••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnŽ•q8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|??3888888888888888888888||||||[?[?qqzz3333•••••••••••••••••••••••••••••••••••••3888888888888888888888••3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•3|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||?[[?qzzzzz33••••••••••••••••q8888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn•••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|||||[?[[?zq|88888888888888888888|3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888q••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–Ž–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2Ž2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233[8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•[88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3|88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••|8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn233|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•[8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•Žnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•388888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883•3nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn–•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•3|888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888|••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2•32nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3••nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2••2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn3•–nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn23•2nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn2–•3|88888888888888888888888888888888888888888888888888888888888888888888888888888888888qqqqqqqqzqqqqqq?qqqqzqq?qqqqqqq2qqqqqzqqqq2qzqqqqqqqzqqqqqqqqq?qqqqqqqqqqzqqqq?qz?qz••3–3–Ž–3–Ž–Ž–Ž––Ž–3–3–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž––Ž––Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž––Ž–Ž–Ž––Ž––Ž––Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–––Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž••3Ž–Ž–Ž––––––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž••3–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–––Ž–Ž––Ž––Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–––Ž–3••3–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž––Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž••3–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–ŽŽ••3–Ž–Ž–Ž–Ž–Ž––Ž–Ž–––Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž––Ž–Ž–Ž–Ž––Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–––––Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž––Ž––Ž––––Ž–Ž–Ž–Ž–Ž–––Ž–Ž–Ž––Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–––Ž–Ž–Ž––Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–Ž–3•3qqqqzq?qzqqzqqzqqqzqq2qqqqqqzq?qqqqqzqqqqqzq2qzqqqqqqqqqzqqz?qqqqqzqqqqqqqqzq2qqqqq222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222Ž•3222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222••322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/IMG/ARC/COUR11.BIN b/IMG/ARC/COUR11.BIN new file mode 100644 index 0000000..740e5f0 Binary files /dev/null and b/IMG/ARC/COUR11.BIN differ diff --git a/IMG/ARC/COUR12.BIN b/IMG/ARC/COUR12.BIN new file mode 100644 index 0000000..f0da4a4 Binary files /dev/null and b/IMG/ARC/COUR12.BIN differ diff --git a/IMG/ARC/COUR13.BIN b/IMG/ARC/COUR13.BIN new file mode 100644 index 0000000..ca77811 Binary files /dev/null and b/IMG/ARC/COUR13.BIN differ diff --git a/IMG/ARC/COUR14.BIN b/IMG/ARC/COUR14.BIN new file mode 100644 index 0000000..6b59733 Binary files /dev/null and b/IMG/ARC/COUR14.BIN differ diff --git a/IMG/ARC/COURT.IMG b/IMG/ARC/COURT.IMG new file mode 100644 index 0000000..8bf63c5 Binary files /dev/null and b/IMG/ARC/COURT.IMG differ diff --git a/IMG/ARC/COURT3.IMG b/IMG/ARC/COURT3.IMG new file mode 100644 index 0000000..137df2f Binary files /dev/null and b/IMG/ARC/COURT3.IMG differ diff --git a/IMG/ARC/COURT3A.IMG b/IMG/ARC/COURT3A.IMG new file mode 100644 index 0000000..10d1840 Binary files /dev/null and b/IMG/ARC/COURT3A.IMG differ diff --git a/IMG/ARC/COURT4.IMG b/IMG/ARC/COURT4.IMG new file mode 100644 index 0000000..7e51e87 Binary files /dev/null and b/IMG/ARC/COURT4.IMG differ diff --git a/IMG/ARC/COURT4A.IMG b/IMG/ARC/COURT4A.IMG new file mode 100644 index 0000000..39f43a1 Binary files /dev/null and b/IMG/ARC/COURT4A.IMG differ diff --git a/IMG/ARC/COURTA.IMG b/IMG/ARC/COURTA.IMG new file mode 100644 index 0000000..f0ec6d0 Binary files /dev/null and b/IMG/ARC/COURTA.IMG differ diff --git a/IMG/ARC/COURTZ.IMG b/IMG/ARC/COURTZ.IMG new file mode 100644 index 0000000..05620f5 Binary files /dev/null and b/IMG/ARC/COURTZ.IMG differ diff --git a/IMG/ARC/COURT_A.BIN b/IMG/ARC/COURT_A.BIN new file mode 100644 index 0000000..70a4b39 Binary files /dev/null and b/IMG/ARC/COURT_A.BIN differ diff --git a/IMG/ARC/CRT15.IMG b/IMG/ARC/CRT15.IMG new file mode 100644 index 0000000..c861afd Binary files /dev/null and b/IMG/ARC/CRT15.IMG differ diff --git a/IMG/ARC/CRT16.IMG b/IMG/ARC/CRT16.IMG new file mode 100644 index 0000000..2c077aa Binary files /dev/null and b/IMG/ARC/CRT16.IMG differ diff --git a/IMG/ARC/CRT17.IMG b/IMG/ARC/CRT17.IMG new file mode 100644 index 0000000..a65101f Binary files /dev/null and b/IMG/ARC/CRT17.IMG differ diff --git a/IMG/ARC/CRT18.IMG b/IMG/ARC/CRT18.IMG new file mode 100644 index 0000000..f3672d2 Binary files /dev/null and b/IMG/ARC/CRT18.IMG differ diff --git a/IMG/ARC/CRT19.IMG b/IMG/ARC/CRT19.IMG new file mode 100644 index 0000000..0816762 Binary files /dev/null and b/IMG/ARC/CRT19.IMG differ diff --git a/IMG/ARC/CRT20.IMG b/IMG/ARC/CRT20.IMG new file mode 100644 index 0000000..7802094 Binary files /dev/null and b/IMG/ARC/CRT20.IMG differ diff --git a/IMG/ARC/CRT27.IMG b/IMG/ARC/CRT27.IMG new file mode 100644 index 0000000..aeeb2bf Binary files /dev/null and b/IMG/ARC/CRT27.IMG differ diff --git a/IMG/ARC/CRT3B.IMG b/IMG/ARC/CRT3B.IMG new file mode 100644 index 0000000..5367225 Binary files /dev/null and b/IMG/ARC/CRT3B.IMG differ diff --git a/IMG/ARC/CRT3BA.IMG b/IMG/ARC/CRT3BA.IMG new file mode 100644 index 0000000..6a862a7 Binary files /dev/null and b/IMG/ARC/CRT3BA.IMG differ diff --git a/IMG/ARC/CRTREF.IMG b/IMG/ARC/CRTREF.IMG new file mode 100644 index 0000000..2f945bb Binary files /dev/null and b/IMG/ARC/CRTREF.IMG differ diff --git a/IMG/ARC/CRTSAMP.IMG b/IMG/ARC/CRTSAMP.IMG new file mode 100644 index 0000000..080b4b3 Binary files /dev/null and b/IMG/ARC/CRTSAMP.IMG differ diff --git a/IMG/ARC/CRWDPALS.IMG b/IMG/ARC/CRWDPALS.IMG new file mode 100644 index 0000000..aa99b6c Binary files /dev/null and b/IMG/ARC/CRWDPALS.IMG differ diff --git a/IMG/ARC/CUTAWAY.BDB b/IMG/ARC/CUTAWAY.BDB new file mode 100644 index 0000000..cd2962b --- /dev/null +++ b/IMG/ARC/CUTAWAY.BDB @@ -0,0 +1,55 @@ +cutaway 2000 1000 255 1 3 53 +cut1 9 666 71 362 +4010 79 166 0 1 +2800 92 80 3 1 +4200 110 199 6 1 +4000 131 207 9 0 +4100 133 177 C 1 +4100 163 180 C 1 +4010 195 452 0 1 +4000 223 364 3 1 +4200 241 484 6 1 +2D00 257 175 F 1 +4000 262 493 9 0 +4100 264 463 C 1 +4000 280 196 12 1 +3200 289 82 15 0 +4100 294 466 C 1 +3700 325 86 18 2 +4000 333 86 1B 2 +4000 335 207 1E 0 +2800 338 78 3 1 +4000 387 171 21 1 +4000 388 461 F 1 +4100 397 185 C 1 +4000 411 482 12 1 +4000 418 192 24 1 +5000 420 368 15 0 +7800 456 372 18 2 +4000 466 493 1E 0 +4000 469 364 3 1 +4000 518 457 21 1 +4100 528 471 C 1 +4000 549 478 24 1 +7800 812 526 18 2 +4010 825 126 0 1 +4000 853 40 3 1 +4000 857 519 12 1 +4010 871 487 0 1 +4000 892 169 9 0 +4000 899 401 3 1 +4000 938 530 9 0 +4000 1018 137 F 1 +4000 1041 158 12 1 +5000 1050 44 15 0 +4000 1064 498 F 1 +4000 1087 519 12 1 +5000 1096 405 15 0 +4000 1096 169 1E 0 +4000 1099 40 3 1 +4000 1142 530 1E 0 +4000 1145 401 3 1 +4000 1148 133 21 1 +4000 1179 154 24 1 +4000 1194 494 21 1 +4000 1225 515 24 1 diff --git a/IMG/ARC/CUTAWAY.BDD b/IMG/ARC/CUTAWAY.BDD new file mode 100644 index 0000000..528092f Binary files /dev/null and b/IMG/ARC/CUTAWAY.BDD differ diff --git a/IMG/ARC/DESIGNA.IMG b/IMG/ARC/DESIGNA.IMG new file mode 100644 index 0000000..7bc00f1 Binary files /dev/null and b/IMG/ARC/DESIGNA.IMG differ diff --git a/IMG/ARC/DESIGNC.IMG b/IMG/ARC/DESIGNC.IMG new file mode 100644 index 0000000..64cb562 Binary files /dev/null and b/IMG/ARC/DESIGNC.IMG differ diff --git a/IMG/ARC/DUNKS.IMG b/IMG/ARC/DUNKS.IMG new file mode 100644 index 0000000..68e543f Binary files /dev/null and b/IMG/ARC/DUNKS.IMG differ diff --git a/IMG/ARC/EMPTYJAM.BDB b/IMG/ARC/EMPTYJAM.BDB new file mode 100644 index 0000000..bd670e9 --- /dev/null +++ b/IMG/ARC/EMPTYJAM.BDB @@ -0,0 +1,90 @@ +emptyjam 2000 1000 255 1 7 88 +empjamb 448 1041 251 639 +100 461 261 0 0 +200 461 511 3 0 +200 461 265 6 0 +200 461 389 6 0 +200 461 368 6 0 +220 461 515 3 0 +200 467 511 9 0 +100 467 261 9 0 +200 467 389 C 4 +200 467 265 F 4 +200 467 265 12 1 +220 467 515 9 0 +200 467 269 C 4 +0 471 268 15 2 +0 471 388 15 2 +0 471 508 15 2 +200 471 265 18 4 +100 561 261 9 0 +200 561 511 9 0 +220 561 515 9 0 +200 565 265 18 4 +0 651 268 15 2 +0 651 388 15 2 +0 651 508 15 2 +220 654 515 9 0 +100 655 261 9 0 +200 655 511 9 0 +200 659 265 18 4 +100 747 261 9 0 +220 748 515 9 0 +200 749 511 9 0 +200 753 265 18 4 +200 757 511 9 0 +200 757 261 9 0 +200 757 265 18 4 +220 763 515 9 0 +0 831 268 15 2 +0 831 388 15 2 +0 831 508 15 2 +100 851 261 1B 0 +100 851 382 6 0 +200 851 389 6 0 +200 851 511 1E 0 +200 851 265 6 0 +210 855 265 6 0 +210 855 387 6 0 +210 855 389 6 0 +210 855 511 1E 0 +110 855 261 1B 0 +220 857 515 1E 0 +200 1082 358 6 0 +200 1082 379 6 0 +200 1082 255 6 0 +200 1082 501 3 0 +100 1082 251 0 0 +200 1088 255 12 4 +200 1088 255 F 1 +200 1088 379 C 4 +100 1088 251 9 0 +200 1088 501 9 0 +200 1088 258 C 4 +0 1092 498 15 2 +0 1092 378 15 2 +0 1092 258 15 2 +200 1092 255 18 4 +200 1182 501 9 0 +100 1182 251 9 0 +200 1186 255 18 4 +0 1272 498 15 2 +0 1272 378 15 2 +0 1272 258 15 2 +200 1276 501 9 0 +100 1276 251 9 0 +200 1280 255 18 4 +100 1368 251 9 0 +200 1370 501 9 0 +200 1374 255 18 4 +200 1378 251 9 0 +200 1378 501 9 0 +200 1378 255 18 4 +0 1452 498 15 2 +0 1452 378 15 2 +0 1452 258 15 2 +200 1472 255 6 0 +200 1472 501 1E 0 +200 1472 379 6 0 +100 1472 372 6 0 +100 1472 251 1B 0 diff --git a/IMG/ARC/EMPTYJAM.BDD b/IMG/ARC/EMPTYJAM.BDD new file mode 100644 index 0000000..f7b776d Binary files /dev/null and b/IMG/ARC/EMPTYJAM.BDD differ diff --git a/IMG/ARC/ENTER1.BDB b/IMG/ARC/ENTER1.BDB new file mode 100644 index 0000000..a46e98b --- /dev/null +++ b/IMG/ARC/ENTER1.BDB @@ -0,0 +1,16 @@ +ENTER1 2000 1000 255 1 11 14 +BMWODNM 865 1320 213 439 +4000 909 234 9 6 +4000 913 238 F 7 +4000 913 299 C 8 +4000 957 234 12 6 +4000 1005 234 9 6 +4000 1009 238 18 7 +4000 1009 299 15 8 +4000 1053 234 12 6 +4010 1104 234 12 6 +4000 1108 238 24 9 +4010 1148 234 9 6 +4010 1200 234 12 6 +4000 1204 238 27 10 +4010 1244 234 9 6 diff --git a/IMG/ARC/ENTER1.BDD b/IMG/ARC/ENTER1.BDD new file mode 100644 index 0000000..7cf7c0e Binary files /dev/null and b/IMG/ARC/ENTER1.BDD differ diff --git a/IMG/ARC/ENTER1.IMG b/IMG/ARC/ENTER1.IMG new file mode 100644 index 0000000..fda1bc3 Binary files /dev/null and b/IMG/ARC/ENTER1.IMG differ diff --git a/IMG/ARC/ENTER3.BDB b/IMG/ARC/ENTER3.BDB new file mode 100644 index 0000000..b2f1567 --- /dev/null +++ b/IMG/ARC/ENTER3.BDB @@ -0,0 +1,18 @@ +ENTER3 2000 1000 255 1 9 16 +ENTER3 1343 1817 121 444 +A00 1378 139 0 1 +A00 1378 204 3 2 +A00 1378 269 6 3 +A00 1378 334 9 4 +F00 1386 143 C 0 +F10 1432 143 C 0 +F00 1482 143 C 0 +F10 1528 143 C 0 +A00 1578 139 F 5 +A00 1578 204 12 6 +A00 1578 269 15 7 +A00 1578 334 18 8 +F00 1580 143 C 0 +F10 1626 143 C 0 +F00 1676 143 C 0 +F10 1722 143 C 0 diff --git a/IMG/ARC/ENTER3.BDD b/IMG/ARC/ENTER3.BDD new file mode 100644 index 0000000..53fcedb --- /dev/null +++ b/IMG/ARC/ENTER3.BDD @@ -0,0 +1,4531 @@ +9 +0 200 65 1 +$$$$$$$$$($$$(($$$$$$$+++$$$$$($$($($$$$($++$++$$(($$$$$(($(($((($$$+++$$$$$$$(((($$$($$$((((($$+>$$$$(($$$$((($$(($((($$>+$$$$$$$($$$$$((($$($$+$$$$$$$$$($$((($($$$$$($$($++>$$$$$$$$(($$((((($$+>+$$ 68768888888888;**299?8887?6786;<886/2* $$$$ 87/68888888=;6888888882;//977 ((+>+$ + ///888888688888<;;229;?887??786=/888699 + + $ + ;6/66678887=<88888888/66<+ 6788888<;8882<<=<<+$$ 6788888==88;*9;;<7888/<<788=;/88/<< + $$$$$ # 9;/6/6888788=;9;788888=/69#<8;/692 $++$ //77/7888886<*#*2<<7876==687=<=886;967/ + $$$$$ * /7777887888/;;6=29/8=//9#987<6;;2 $ + +* 6887688888;*##*29;/77=/888<9<788877/  2* $$$$$ + ;;676/776688/;=8872*9=6=;2;88766;;99 # ((( 88888889# #2<<;=6<;<788<97888;7622*** +$$$+ + + +2 ;;<6/<<=99887;;;;;<99/88776;99997*# (((((( + *88889#789* 2=/788/;/87=;<8886;;//929 9* + $$$$$$ +2*9296,))  )&/<9./&5,))))) 1,,,,,,55&5)),,&4797.$&&      + +11),55,5/:44./&&&&&&&&&&&,1))  )890.&&,))))) 1),)),,,,&,,&)1,&.790.$&&   +  + 11,,)5>/?74./&555&&&&&&&,1 +  $99./&,))))) ,5,,55,55,,,5,),/990.$&) +    +  + +1,5,5:;74./,),,5&&&&&, ))) + +   )&.934$&))))) 1),,,&&&5))5,)).630.$&)     + + + + + +,>,5:;74./5)),5&&&, ,,)   +&.96$&))))))) 111),,&&,)))))),,)43=0.$&) +  +     + + + +1))&:;74./5),5&&,)1 )), +     +$<6.&,))))))),,,)),)),,)).3=.$&&) +   + +  +1&:;74./)),55) ) )    )&88$&)))))))) ),),5,,,),,,)))830.$& + +    + + )&:774./))))  + +))      + + +/-8.&,))))))) ))),,))),,,,,)).66.$&& +  +   111,:77.$&)) ))     + +&.6*$&)))))))) )))))))),,)).768$ & +    + + + +),:70.$&5)))1 ),) +     + + + &.*$&,))))))) ,,,))),,,),)))/473'$&    + +   +))11)/00./&))))1 ,,))     +  + + &-8 &)))))) )))),,,,,)),,)),) +)),/.93'   +   )))/04$/&,)))) )))) +  +     )  8$&))))) ))),,,,,)),)),,)&.93'&      ))40.$/&,))))) )))) +  + +    + +-8$&))))) )))),,)),,,,))),,))&430$)    +  + )1/40.$/&))))) ))))      +--$&))))) )))),,)),))))).73' ) )   + + +  +)/44.$&&5))))))))) + +    -$&))))  )))),,),))))436   +  +    + +  &...$&&,)))))     + -*$&)))) )),)),,)))))&03$ )   + +    +),),.0.$&,)))    + *$ )))  )))),)))))0- )       + ,)1),,&00.$&))))  +))    + + *$&)) ),)),))) 2    + +     +  ))))))))&00.$&,)) +)    + + + *- &)) +   +))))),)))))))  )   +     ),))&00$&) +))   + +  + + $*$ & )  +),))))))-     +   +,)))&0.$)  +  +  -$ )  ))))) + ) -   +  +   + + +)),/0$& +    +  +  $$  ) ))) +)) --     +   +)),&.' )      +  $ ) +   +))))) +) &      + +)))&.$&   + + '$   +)))))) + -% &  +  + +   + + +)))))&&  +  +  +   + $'$   +   + + +) ))) + %$$          + +)))) ) )  + + +  + !'   +  + + )) )))  + -!$         + + +)) )&$)))) )  + + + + +  + + !$     + + ))) +*'$ &  +  +     ) + &,)) )  + + +  + + +     !   +  + + )  %'$         + + )&&)) +  +  + +     $       + + + +))   +'$    +   +) &&&)) +   +  + + +   +  + + +  + *+'$   +       + +))  &&&))    +  + + + +     + + +  +  *#!          +  &&)) +   + +    +   +     + )  + + *'$           +)  &&))) +     + +  +   +     + + + + + + *'!      + + +  + +)) +  && ) +  +   + +  + + +    +   + + + + + '+!$   +  + + + +) + +)  $) +    + + + +    + +  + $++!        + + +  +  )))))  )    + + +   +  + +    + +   + '+#$   +   +    +   )))))  +   + +   +  +    + + +     $#+!       + + +)))   + +   +  + + + + +  + +     +    *#!        + + ))   +  +  +  +   +   + + + + + +    +   %!$    +   +$))   + + +  + +   + +  + + + + +   $! !   +       $        + +   + +  +    +  + + +   +  !(!$  + + +       +  + + +$    +  +   +   +    +  + + + +    + '#!   + + +   + +    + + +$   +  +   +     +  +      +  !(#!  +    +     + + +$   + + +   + + +  +  + + + + +  + +  +    !#!   +      +  + $  +    + + + + +      + +  + + +  + + +   %!   + +    + +   +  +  ) +  +  +  + + +  + +   +  + +  +     + +   + + +   + + &) +  + + + + + + + +     +    + + + + %!   +   +   +  +  + +   +   + + + + + + + +    +   + + + +   + + + ##!   +       + + +  +   + + +    +   + + +   +   +  + + +   !('!   +   + +    +   +&  + + + +  +  + +  +    + +  + + +   +  + + '#!   +    +     + +    +   + + +  + +   + + + + +  + +  +  +  + +    + + +  %   +        + +    + + +   +  + + + + + + + + +       + + + + +  + !  +         + + $   +  + + + + + + +     + +     +%!   +        +   +       +  + +   +    + +   + + + + + + + !#!  +        + +     +  +   + +  +  +  +    + + +  + "!   +    + + +    + + +  +  +  + + +    +  + +   +    + +  + +   !   +            + + +   + + + + + + +   +  + +  +       + + +  + +  + +    +       +   +  + + + + +   + + +  + + +   + +     +  +        + + + + +  +  + +    + + +  +    +               + +   +   + +    + + +  + +   + +    + +          +  +  +   +  + + + + +   + +   +   +      +    +    + + + + + +   +  +  +   +     +     + + +      + +  +   +  + + +   +    +     +  + +      + +    + +   + + +    +     + +    +   +    +  + +   + +  + +    6 200 65 1 + + + + #!&&! & !//1,'#  & #  + +  +,;/2,' + &   + + +  + + + !!!&&&&& !//.,#! &#   + +   + + '0502')    + + + +    + +  +#! && & &&!!'//.,#! &''   + )2550,')  +   + + +   +   +#!! &&& ,/1,'! &#      ),5502,'   + + + + + + + +  +   + +   +! !&&& '131,#!!        +),0650,')  +  + + + + +      +  + ##!&!!  !,0/1,#! '     + +'25652,')    +  +      + + '!& ,0/1,#!  )    )) '-25450,')      + + + + +    + + + # !!'./.,#!!!     + )'' '-05550,')  + +  + +  + +   + + + '.1.,#!! &    ))'')),20550-')  +&  +  + + + + +  +   + + + +!& ,//.,      +') ))'20;02-')  + + + + +  + + + +   + + + + +!#!!&& ,//.'   ',-0552-')  + + +  + + +   + + + +  + +  !!! & & !,0/.'!(    )''),-2052,')  + + + + +   $)$ ++++ + +      &&&#10,'! &&   +    '')) ',-,2-,')  +  + +  + + + + +  )$  +  + +  &  &&&'11,'! &     )) '')--'')  +  +  + + + + +  $)  + + + + +  &! !,00,'&     + ),'---')  + + + + + + ))$  $ + + + + +  !&&& !'01,'&  &   ' +   )'--2,)$  +  + +  $)$  +  + + + +  && 0.,'  +  ) )'''),---,')   + +   +  $ $$$$  + + + +  + && &..,'#   ) +  )'''),2-,')      + $$ $$  $$$   +  + +  & & !..,'#   ) +)''-,)'2--')  + $'')$))))$ )$$))$   $$ + + +   &&& &!,/1,'   +')) + '-22''-02'))  $''))-8277--77--')))-7)))))$ + + +  + +  + +  &&& &!'0/1,###'''',''&&    )))) +'-2822222')) $)-20-255225558888822882-7')) + + + + ++ + + +  & &&!!!#,//.,##',,,,0//2'')''& &   + ))))'-28522--'')$ ))'-22002-'-28222222-:::588-7$  ++   + +  !!',030.,##,,,,.0////0,,,'    +))'255880--'))$ )))))'''''))'''')))''-28885582) +  +++  +  !',,''',,',.0/0.,,#',,,..10////02.,  &   +)'2566022')) ))))$$$)))))))))$$$$$))'7-2288827  9+ + + +   ',..1000////34/1.,'#,,,....00//000,  '')06665-'')  ))))$$))''------7)  + + +  + +   '1/////////////1.,'##',,,,.........,  ')),6665-')$  )))$ $$)))))''7777')  +  + + +  !'./3/////011111..,,'##,,,,,,,,,,,,,'   + +'0650-'$  )$ $))))))))''''')  + + + + +  +  + +  !,44//01..,,,,,,,''#####',,,,,,,,,,''    +)-550-)  )))$  $))''))$$))''')) +  + + + 13/0..,,''##'###########,,,,,,,,,''     '200-)$  ))))  $))'''))$$$))''))   + + + + !0/1.,'####',,,##',,,,,,''# &  +)',22') )))$  $)''''')$$$))'')$ +  + + +   + '//1,'###,,,,,,##,,,'''# &  )'')-')  ))$  $))''''))$$)))))$ + + +  + !,0/.,##',,,,,,'##### &   +))'')  $)))  $$)))))))$$$$))) + ++ +  + + !#./.,###,,,,,,,# &   '') '-)$  $)))  $$$$$$$$   + !!!..'#!!##'''''##!&  + &  +  +) '-)$  $$     + + +   !','!!!! & &  & &  + + + + )-,)    + + + +  + + + + + + +  +  !###!!!!! &&&  &&&  + *--)   + + +  + + +    ++   & !!!%% &&   &&&  +') +  ',)  + + +       +++ !%% (&& &&&&   &  )) + + $* + +         + ! &&  & && & &  &   + + + + +   + + + +  +  +!% && && &&&&  !  && & '   + +  +    +  & !!" &  & &          $$$$   +$$  +$ & +!!!%!!!!!##!! +    +  + + + + + + + + + +  + + + + + +$$  + $$ +   +!!%####!!  +   + + + + + + + +  + + +  $$$$$   + +    + +!!"######!!!       +  + +  + +  + + $$$$$ $ +   + +   + + + + + + + +      + + + + +  +  + + + + + +         + + + + + + + + +  +     + + + +    +  +  + + +       + +  + + +  + +   +   +    +  +         + + + + + +    +  +    +    +  + +  +        + + + + + + + +   + + +    +          + +      +  + + + +  +         + + + +   + + + + +  +   + +   + + + + + + +     +    + + +    + + + + +  +   +  + + +   +  +    + +    +  +    +   + +   +        + + +   +  +  +   + +     + +         + + + +  +   + + +      + +         +   +  + + + +  +  + +          + +  + +  + +  + + + + +   +    + +     +  + + +   + +      +  + +  + +  +      + +      + +  +      + +    + +        +  +  +      + +  +               + + +  +   + + +  +        +   + + + + + +  +    +          + +    +   +       +    + +   +     + +   +    9 200 60 1 +   ,--- ---66  !"""""!"!"""$$"""!&&!!!!&!7"!&&%&&!"$$$$$$'##%%#$####&#"$'"#%%'.$$$"$" ,, ---- 1- -  33 """"!""""""!!"$!!!!!!!!!$#"#%&#$""$""#%%%!$###%%%'$$$"'"77$''''',,,,,---------633    22"!""""""""""!!#"""""!&&!#""$"&%#$$""#"#""#!###%%%%%%#$$$$$'#''''  ,--11---- 6336  222""""""""!!#!"#!#$!&&!!!&!"%#"$$""#!!!#""#!#!&%#%%###"$$$$'''''(,, --- -- 66366   """""!!!""""#"$"&&!!&&!##$"""$$#%!!!#"$#%%%%#"'%##&#$$$$$$"$""$'',, ,,,,---- -1- 66636 22!!""!!!!"$"""$"""$$""$"##!&&&!&!#""##!&&%#"#!%%%#"$#&&%'$$$$$$"''"$",, ,,, ---1---- - 666636 2"!"""###"$"""$#!&!!& !"""7#&%#"%%%%!""%%%%#$"%%'7.$"$$'(#''#,,,1- 111------1-- - 666666   ""!"!!!!"""$"#&!!&#"""""""%&%!""!!!%'$"#%&%#""'7$."'''##'"##,, 10011-,,,,-1--1--- 1-- 666666   """"""!!"""$$"$"!!&&&#$$##""!%!!"$"%%%%'$#%%%%'737$$"'###'''""'",1111-01  -  --1- -4666666""!!!!"""""""$""$$"! &#$"""""#!!!!""%%%%##!%%%"."'"'#'""$$$$.10111--11 -01---466666 "!""""""""$$"""$""$#&#$$""$$#""$"#!&%""!%%&%""%#$7$$$""$"''$"'$$$$,-11----11-- --11-  --- -6666   """"!"""""$$!!"""""$"##"$$"$"!#""#!!&%#'!!%%$''$"$$"'"$"##$$''111--10001-11-,----- ---- 666  """"""""""""!##!"$""$"$""##"""$$!&!!%#"!%%%%""#!!!'"$$$$"'#('"''$$$''11-10000--111-,--  -1----466  """!#""$"""$$$"""##"""!%&%%%%""#!!!###%%%"$$$"''##'"'"$$$$$",-0 011--111- - -1--,----44 4   """!""""$"""""##"#!!!!%!!%#$"%%!%&#!%%'##'''''"''$..$$"$ 0 01--001-100-11-101 4 ---- 444    "!"""""""""""$$##!#""""$$# &%!"#!!!#"!&&%%%%%#$$'#'''"$$$""'$"'#"01-0001011-00111111101- ---     """""""!!"""""$"#"#!!###!"!&!!!"$#%%%""#!%!!%%'""'""'""'''$"'"$##"$ 0+ 0111-1111----11-  --    8  2"""""!""""$"$""$"#!#"!&#""""!!!&#"#&&!""##%#"7$%#''"$$"##"$'"$$'"$$ , 100 1----1--111--  -   """""!!"""$$"""""""##"""""#!&&!!&&"7"!!#7"#'""#''''"$$$$$"$..', 1 00---1--00-10 01--- 11  4     "!""""!#!##"$#!&!#"#!!!!!!"$#"$$$$'$"""###'$$$$$$$'''##  ,0010 0--1110 01-0000-441 668   "!!"""""$#!!#!!!"!!&&!"%&!#!#"$$$$$###'$$$"#'$$$$"#'"''(#'-10 11- -111--001--   6668     !!""!"""$"""#!!$&!!!&&""!&!!&&"$"$$"##'''""'$$$$"'##'$'(#$., ,10 0-1,,1- -111--,4  - 666-   ""!"""$"""$""""& !!""!& &#$""$$$$""'"####$.$""##"$$''$.,,0 00110 ,10--01 11     6668-    """"!""!!"$!!"##&&!"!#""$$#&&&!$$$$"""$$$$""$"$"#'$$""'''"$$(%$.$, ,1 00 0  - 001-11 ,,  64---   ""!!!##!!#"$!&#!!&!!#"#&%####$$"#"$"####"$$""$$$##''".$#%'$$"$,, 1110001- ,1 1--11,,, - 4-8-   2"""!!""!!#!#""!!!!!&&&!!!!#%&!!&!"$$$""""##''''##$$$""''"$$'#'$$$$ ,,1 0111- ,,1-10 4  - -    !!"""""""""#&!!!!!!!!&&!"%&%$$"$$$$""'#$"##"$""'""$$"#("$'   + 11-0,,-0     "!!"!""""""""$$"!&&&!#!&&&!$"!#"""""$'"$$$"#"$$#'"'".$#%#$$'',  ,0 0000 0-  ,,  ,,, ,        ""$"###"$""#&&#!!#&&!!$#7$"""####"$"#$$$$'"'''"'%#$$$$"(#', , 001 0001 , ,1- --   "!""""""""""$"""$#!$!!!!"$7"""###"###"$$$$$$"''##"$$$'##$$  ,,1 0011,  ----       ""!""$$""""##"$7"!&##!&!#$""""$"""$##"$$''##"$"##$$$##'$$  011100, ,--1-- -      """""""""$#""$"!&&!!&&!$""""""'$$$"$$$"###'$$"'$$$$."#$$$ , ,0 01 ,, , 1--101       2!"""""""$"$!&&&!& !"#"""###""'"$$""'##$$##$$"$$'#'$$# ,,  ,0 00 ,,---,11-   4  "!"!""""$""$""!&!!!!$""""#!#""##"'##'""$$#%#$$$$$'##"$"'( ,  ,,,1100 , --- 1 - 666     ""!"!""$""""$""""##!$"##$$"""$##""##'"'$$$##$$$$.$''"#"'''  ,,10+   ,-11- - 666     """"""!!"$""""""#$7"##""###$$$$$$$"''"'##!'$$$.$'"$$#%%%($ ,,   +, 10001,11-,6666   22"!"""!!$"""!#"""""#""!!#"""""$$$$"$$'!#'$$#%'$#(%%)%$      ,, ,   -0111 001 466664  222""""!"!!"$$"#""$"""$$$##""##'#'$$##$$'##$$$$$'%'$#%%)&%(#   ,  1010 11---01 ,66446    !""""!!"""""$""$""$"#"$"""#'"""#%#""#"$$""##"$#%)))%%%#  ,, , ,10 1, -10-- 64464      2222""""""""!!"""""$$$""$$""$"""###"$$$$$""$"##""''$$"'#"$.#%))%(%#'  , 1 0011 01-  44464    22""""!""!"""#"""""""""!#""""$'"$"#"$"'""""$$"#"$$$%&&%#%%#%+ ,,10011 00 1011- - 44     2222""""""! """""!#"""""""$"""""""###""##$$""$"'$$"'$.$'#%)%#(%(%%  0+++ -00--1-   2"!!" !"""$$"""""##"$""""##""%#""##"$$$$$##$$$'###%%%(%%%,     1++  1111,      2222""""!"" ""$$$""""###"##"""""""#""#!'$$$$''#"""''$'%%((%(#, , 00 01  -,        222"" ""$$"######"""#""""$$""$$''"$$$$""$$%'"''$"(#((((#    01010 0,       "!! $$!!""###"""$"""$"""#""""""$$$#%#$#%%%#$$$'##((#%% , ++  0000,,      !!"!! ! !""!!"""""$"""$"#!#"#!#"$"$$'%#$#%%%%#""$$'%(#(%%   ++ + 0+ 00   ,   2"!"  !"""$$"""""#""##""##'$'%#"$"$$"#"$#%%)&%%%"$$#%%%%(++ +   001, ,        " """$$$""##"#"""#"$$##"$$$$"#'$'!%))&%%%'$$$'%%%%#+ ,00 0 ,    2!!"!"""!""""""$"""""""#$$##'#!%&)%%%%###"$"(%%#(/ +00 00 10 1 , ,, ,      222!!!!!!!!"$$"$"##"'!#"$##''"'#%&%#%%##(%#$"#(##)+  0  1 ,,,,   --   222!!"""! !!!!!""$"###""#!!"$$"#%#"$$""####%##%%%%#"'##%)  + + +0 +,,,   -   22"!"!  !&&"""$$"$$"##""##''"$$#!#$$$$$"$$'%%%&%%(%(''%%))+ , * + +0000 ,, ,,,-  ,   2222!   ! "$!$"$""""$"#'$$""##'""###%&%(%%##%)))%5+ ++00 0,  ,     2"   !"! $"""$"$##$$#'$'%&&&%#''$'#(#(%%%%%))%%   +  4  , ,,    !"!"$"""!#""'""##'!#%&&&%%!##$$"'##%%%%))%%(/    ,,-    - ! !!! !"!!3!"##!#"#"$''"###%%%&&&!!!##%#$$'%%(%%&)%###/ +  0 , ,,,1 --  -22 !!""""""!!#"##$$$"#""%%!%&&!!%##%&%##$""#%%)))%((* + +, , -   !!  ""$"!#"$!!"""$$""$#%%%%&##%%!%&%%%%'$.#&%%)%%(%  +           !""!!#"""""""$$!#$#%!!&&&%%%%%%%#%%%'$$(&)%%%(%)C 48 175 1 +]V]]VVVV]]]a]]]]]V]VVVW\WVVVVVVVWV\]]]]]V]VV]VV]OOSOOOVOVVVVVVVVVVOOUORVVOOOOOOUPPOVV[RVVVVOVVcHHHHHHNTUQOVSRVQTOOIHHGDHHHHHHHHHHOOOQSOSVOVOSiBBBCBB;HOOTUPSOOOOHDB@=?BCBBB>?;BBHHMOPVVOROOPn;;;;ssssssprsqsssssrpsssopssnsnsssnspsssssssssn;155n<155n;113nB+11nB*-1iH*,-iO(*-iP&**iV&(*i]"'(cc &(gi$(ci"&ck"&ci"]i!"]e"]c&]c&]c'Vb)V]+T]-V]1O[5OV;OV@OVHOVOIVVN]] O]a H]cO]cH]cHYcHV`DVaBV]BV]AUWHOD?HVH>LROBHVH +BHVH DNVH GHVO HKVO HLVP JIVV HNVV HHVV OOVV OIVV UOYV OV]VVV]VVV][V]]]VXa]]`cb_]cc`cfc"cchg"ccfc&ccig&ciic(giic(iijc*iiic*iimc*iin]*inmX*iil\*ikj[*iim\*iikV+imnV,iinV-iilV-iinS-imnV1iknP1imnU1ilnO2iinO1inoM5iknK3inrH5insH5insH9insE:nnpG9knsB;nnsF;knsB;nnsB;nns@;nns>9;252253=>)2 2;.);55)3. +"!--9-/69522222.7763;5.=6>933:=:) 2 -/::6=>>777>=..5;;523) 5;;;5533) + +!----66352 2.::993;3:::::=//3  + + +.--/6<<77<<77<>3)..;5.2 555).93)2)) --!-6732  55.39::.)3:=/=//9 )).3::/667<<<<<<<>=3..);2 ;;2)9:999.5) ' !-/) 5522.9://) 5):/66/:32522 +  .9:/6=6<<<<<<<7:.3993.).)):=::99.52)) + 2 +.!- )393529/66352.3/77/935) +  !!3))3=7<767<<<<<<:3>>:9::.3:>=.9:3 2)) +" + + !9933332.//::3339/6:.22).) +  39)59/777<<<<<<<=9>93::3.9<6:))3) 22) + ,, + +  99339:)5.---67//).3--2222..  !!)52533/<<<<<<<79..39:3..=77<69.2 .))) +, +   59-3)3/33)3):<<7<7/3/)5)) + !-/9)552/<<<<<763;55)99=9.:66<<9.5.9/9.)  2  2)/!3.-99-./4<<<7.5)22)).. +)) + +" +!//-32 2:6<<<<7955.33:7=).:676:)/66-3)),  + + 2 3--///96//6666777/352 23.))) + + +  +).--/-)..)9:/7<:);.93:76:)./==:39////3 , + + + +2 )3).!/66676//77-967632 222.3..)) + + + )..339-9.3933.3)3322)3);:76/3).9/:993)3-/6!22 + ", + +.6/2./66666/777/3-6/35))..))) + + +" + !/-399.33/:)5352 55..9://3)-//6/23--. + + "", + + +)!//-.)--/6-/7776/..9922)).))).))) +  + +!-/--/9)3:/3525.))9:::///.52.666/9)--.2 + ,,  +!/-!!-!!/-)33-//66.)2 222)3)).. + " + +.!--!/69)3.).)52.)3/666/6/-)2:6/--//-.22 +22 , + + +.)!3!/!.3. /3)-//.  2)).. +  + +!!-66-..))).))3:666////35))399-6-.22 + +  ",, + +))!-)---.223-6/!--!. 222)).).) + +   + + --!-66-)..33)).533-//////933))9-9.22 + + ,,,  +--!)----) +)-//66-- .)))..))) + + + + " + + !!--/6!.3...)))..333-/--//3)).!.)222 2)) + ,,  + + + +!!..!!-!.!--//!.2 2.!3)..) + + + + + + " + + +!-/66- ).))9-3)).9--9!//-333.2 +). + ,"   + + + +).!!!-/-!!!.. + )).!7/3!/!)) + + + + + + +   +!-/6/3 ))9-/..9/!39-33!/9).).!!!//  8 + + + +)). +.-*/!).) +)).!!/414440/))). + + + " + +!--///!.)))))9--.52)!-/!!93!!333!-/6744/! " + +!!!!)-/-!. +2).3-04111++1140!)) + + + "" !-!--/!))3!/35 23/6!)--3)-6764441110*   + + + !!!!)!!) +.-/0111111+1110/) + + + + + + + " !!!--!) +2 +3!!!))2)3) 2.--!2!3)-4444000110**- +    + + + +!!!)-!3!/*0&100&&&&&0&*-  + + + +  + +!-!!)2 + +3!-!.--.2)!3!.2../444400***-  ," + + + +))!!!!))-000********- + + + + + +  !!!!!)2 .!!!!)-!)2).. 2)3/000**/----! " +  ) + )!!-!)).-010**--- + + + + +  "  !--! + + ).!!!!!)2. +.!!3).!00**//-!!  "'  +) --!!.!*1&*--------!!) + + + + + + + + + !!!! + +  2 + +.!!--)2 22)!)3-011*/-!) +  " + + +  + +!!!*&*--------!!!)  + + + + + + + +    + + + + + +23!!. +).))30110-!...)) + """""""""" + +  +  +.!**----!!!!!!!!) + + + + + + + + +  + !  + + + +).!!)!) +)-410*/-....))) +  """""" +  + +)*---!!!!!!!!!!)) + + + + + + + +   + + 2 +)))..!)).).010*/-..)))) + """",""""   + !--!!!!!!!!!!))) + + + +  +  + + + + + + ..).))30110-!..)))) + + ""',""" + +  %)!--!!!!!!)))) + + + + + +  + + + + )) + +22 +.).-110*-!....)))  + + """"  +  + +!!!-!!!!!)  + + + +  +  +) + +2)!) + + +201&*/-...)) +  """"  + + + + -!!!!)  +    + + + +)) + + +.) + +2)-0&*/-)))) +  ",   + + + !-!!!%% +  +"  + + + +)) + +) + 2 /011-!)) +  "",   +  %!!! %%% + + +   + )) + + + + + + .-*11*-)) +  ""'"   + !!!%% + + "    +  ))) + )) + +)/01&-!)) + + + """",    + !  + + + + + + + +%% + +      + ) +) + ./&0-!))  + + """",   ! + + +  +%% + + +     + +  + +) + )!-*&*-))  + + "",      +%%% +  +  +  + + +)))) + + + + +/01&-!)) +   "     + %      +   +)).!&&*-))   """""     +   % +     +    .-***-!)) +  + + """ + +  + +   +   + + + %   + +  (   +   ) +!*!)) +  + """"" + + %   + + + +%   +  +     + + + + +)-***!)) + """""""" + + % +   +  + + %%  +   +  + + + + + + +!&&-) +  """""""  +   +  + + + + +  %   +"  +    + + + + +!*&*!)  +  ","""  + +%%   +  + + +  %%   + + + +    + + + + + + + + +-!)   + +  "","""  + + %    +  + +  + + +    +  +  +  +  + + +)**-)     """""   +       + + + +  + + + + + + + %%  + + + + +  + +  + +*+!     "(  +     + + + + + + + +  + + + +  + %  + +   +   + + + + + +)!&&!) + +    + """"""'  +%    +  + + + + + + + + + + +   + + %  +  + +  +  +  + + &  + + +    + """   %    +  + + + + + + + +  + + + +     +  + + + +!  +   + + + ""       +   + + + + +  + %%  + +    + + + +  + + + +  + + + + + + + + +! + +    + + """""" +    +  +  + +   + +%  +  "  + + + + + + + + + + + +& + + !! +  +  """""#      +  +  + + + + + +   + + + + $  + +   + + + + + +!  +  ! + + +   """"   +    +  + + + + + + + +  +   + + +   +     +  + +  + + + +  + +  !  + + + + """""12 200 65 1 + + + + +#'%##!(4444444-44-44$''.#)"""444(44485.662<5)---497227)))))(44 + +      +!&'&#!44---445.''$5(""(4----8526127)8--4((-<227)-)))-((- +   "" + + + +!&'$#!(4-4--4)5.1'$)444(4-----5.112<58---4(9);;27)-8))-(4 + + + + +     + + !&&#!(-4-5'1.#) +444(((4444---)266;.5)8---4(<162.58))-4(4 +(  " #%##!(44-44-#''$) + +"((((--4--721127)----9(-.662.5))-( + +"  %&%#!4(4$''.#) + + + +"-((4-44-4-7212.5)----49-;:12.7))(4 + + +    +  + + + + + +*%#!(( +44445'1'$# + +( + + + +(((444----8)72227)8---4(71612.$5))))-4-44 + + """  *%! +444444$''.$)( (((((44444--5212.5)---9(.6,12.$55))))-4( +( + +   " + + +%&! +).'&$# +(((44--$6127)----4(-76:12.75555))-(4-4(44( + +  " + + + + !%# + +4 +).''$#)( + + ((4-4-)262.5)---49((4)161.$555555)-(4  "  + + !!( +#'+'$! + + ((4-4---52127)---4((48212$5555555)(4-- +  """  +  + +).+'$#) +  + + +4444-5.12$5---(-5.775))))555)((44(4   """   +(( + +4)#''.#) + + + + + +(444-)$'127)--4((4-57.$5))555)4( +   "" +  (#$'1'$!( + + -.1'.5)---5$.2.5)))-4(  """ + + + +#$'+'.#) + +(44).'2$)-4((-)$2125--)( +   """ +   +#.'''&#!( +" + + + +44#'12$5)--4()52127)--(-4 + + """     (#&''&$#) + + + + + + +45$''.$)-44((4-)$'6'$)--4( + + "  +   +!&+*'$#! + " + + + +-5.'2.5)-4()$1,1.#)- +    + + + + + + + +)#&++'$#!( + + + +( +4)#.22$)--4(()$6,12$#))4(( + +  +   +  + +$&''&$#! + + + + + +)$2.$5)-(-$6,12.$#)) +( + +   + + !%'&%#! + + + + + +5'12$)($1+1'.$##)-(( +""" + +  $''&$$! + + +(4-$+'.5-(().11'2.$##))( +  "  + + + + + + + +%*+'%$! + + +'1.#)--)$1,'2$$###)-4((4 + + +  + + +  + + +!$**&$#!" +$''$)()#'1'.$###!)( + + +  + +   +!$'*'%$#! +")''.5)(().''2$####!)( + + +  " +  +  !$**'%#! + +  + +($1'$)4(#'1.$#))!!))((  " + +   +#&&'*&%#! + + + +&1.#)(().1+$#)))))))((( + +  +   + + +!%***&%#!! + + + + +$''#)(4().1+.$)))))))( +( +  +   + +!#%&&'&%#!! + + +"#''$)(()$1+2$#))))))((( + " +  +   !#!&&**&%%#!! + + +  "( +)$'&#)(4)$'+'$#)))!)) +    !%%#!%*&%##!! + + +)&'$#) +)$1+'$#!!!!)(    !%3*%%%%#!!! + + +  + +#&$#!))()$++'.$#!!))((   + 33*%!!! + + + + + + + +" + +#.$##!!!)$++'.$#!!)((  "  !%03*&! + + + + + + +$.$##!!!!)#1+'.$#!)((  "    !3*! +   " #&$$###!!! +($+1'.#!)((((     !0*% +    + + !$$$$###!!!#2,1'$#! +((   "   !0%  + +  + + + +  #$$####!!!$'+1'$#!(((     + + + +  !0%! + +  + + + +" + +#&####!!!!( +-#'+''$#)(( +  "   + + +    *0!  + + +#$#!!!!!!()'+''$#)      00/! +      + +#'#!!!!!#&+''$#)     + %0*/! + + +   + +  + +#&'%#!('+''$#)( +    + %0*%!  +  +&*'%#',''$#( +    /  + +   + + + + +  + + + +#*+'%!('+'&$!( +    "     +!%   + + + + +      + + +  + + +  +!&++'%!&+'.#(  "     + +    + + +  +   + + + + + + + +#*+*&$!(!$*+'$!( +      +  +  + +  + +    + + +!%++'%#! +!.++'#(     ""    + + + + +     +!&+*&%#!(#&+'$) + + + +      + + + + + + + +   +  + + +   +*+'%#!!#&'$# + + +     + +  + +   + + +  + + + + +"  +!*'&%#! +$'+$ + + +        + + +  + + + +  + +%%%%#!!$''# + + + + + +   +     + + +   + +    +#&%#!#%$(       + +  + + + +    +      +!%+*&! +!)( + + +      +  + + +   + +  + + + +!&+*%!-( + +( + + + +      +      + + + + + + +    !#*+&%!((( + + +       +      + + +  +  +!%**%! +#####!###!#! + + +          + +  +  +  +   +  +!+*%!#&'''''''''&$%#!!))##!!!( + + + + + +      +     + !! +   +  + + +#*&%!!#'+++++++,,+'&%&&#)))#$$#!!(( + + + + +    +   +  +   ! + + + + + +!**%!#**+++++++++'$&&####)#$##!!!$$!!! + + +     + +    +  !  +  + + + + #%%!!%&''''''''&$##!)!!!)###!!)#$&'&#!! + + + +              +  + +   %!!!#$%&&&%%$#!!##!!#%''&%%!( + + +     "   +    + + + + + +!! +  + +   + +!!!####!!!!!!####$#! + + + + + +            +! + + + + +  +!!!!! + + + + +         + ! + +    +  +! + + + +    + +      + +  + +   + +! + + +     + +     + +  + +   +  + +  + + + +    15 200 65 1 +  + + + +   $ $  +>>/+     "#+(++##++! +#+  !!!!!   + + +  $$   (#%:+(   #:#+++##++ +##+  !!!!!   ,, +    $    (+/:/+   +:#+++##++++++++  !!!!!    + + + +  $  (+::+(    #+++++++!! +++ !      + + + +  $ (/:/+     ++(+++++! ++ !     + + +    (#::#(     "+(+ ++           (/>>/+  ++ +++     +$     +>>/+(    +! ##+ !      + $$(      /0/+(     ! ##+     + $))(8      +>/+(     "%# !    $))($     (/>>/(   (   + "%;& !     7$$$<  +    +:0/+(   + !!#'=& !    8$$      (::/+(    ';&      9$$       (//++(  +   ! %'"  8$$   + +    /0+((     + &&" !   +7)$$$ +     +/+((   +  "%#   +))))$$      (*/+(    + + ""      $--))$$ +    (//+(    +   #"# !    )5.*)$$ +    +//((     + (( !#%# !!    +-6.*)$ +  (+//(         + +   "%# !!    -61-)$ +  +  $+//(      &%#    451-)$ + + +   $($(**+(     +   %%# !   $11-)$$ + + + + (/0///*(      +  ! ''" !   , -1.*)$  + $+/000/*($    +    ''" !!     +$11-)$ $$ (.230/**($   + + + ! '%#      -1-)($$ $  +(*0230/*(($    + +  #%&# !     $--))$$$ ((*000.*)($      #'&# !    , +$-))$$  + +$(*../*)($      #'%# !!!    + )))$$ +$)**)($$       +%&# !  + + +$$$$ + $$(($$        "&#     + + + $$ +     !"&#      +  + + +      !%'"   +   + + + + +          &'"#!   +    + + + +     #%"#         $   #"# !          $    "#!!            +    "#!!           +                  +    !              !             !!!     +           !             !       +           +  !  + + +   +  + + +               +   + +              +  + + + +               + + +  + +                     +  + + + +                  + +  +             + +  + +             +  +   + + + +                     + +    +                 +  + +               + +   + +  + +  + +                + + +  + + +  + +                 +  +  +            +                + +  +                + + + +                 + + + +  + + +           +   +                                  + + +              + + +  + + +          18 200 60 1 + +  + + + + + + + + + + + + + + + + + + +    +       %%%%%% + +  + + + + + + +  + + + + + + + + +  + +  + -   + +  &     %%%%%%   + + +  + + +  + + + + + + + + + + + + + + + + + + + + + + + +  $ + &     %%%%%% ''&& + + +  + + + + + + + + + + + + + + + + + + + + + + + + +   + + +$ $        %%%%  .&& +   $ + + + + + + + + + + + +  + + +$ + +   + +$          %%%% %%%%%'.&  + +  + + + + + + + + + + + + + + + +  + 1 + $&     %%%&& %%%%'%'....&# +$  + + + + + + + + + + + + + + + + + + +  +  1  +$       %'%%'&.''(.  +  + + + + + + + + + + + + + + + + + +  +1 &$& + +  +    %%%%%%%%'%(.( + + +   + + + +  + + + + + + + + + + + +   + +  + $$ +        '%6 %%'%%'' +    + + + + + + + + + + +  + + +    +$ +$ + +      %%% %%%....(*     + + + + + + + + + + + + + + + + + + + +   +  +$& + + + + +      %%%'%& .....*&   + + + + + + + + + + + + + + + + + + + +$& + + +    %%%% &&& ....(.###      + + + + + + + + + + + + + + + + + + + + + + +  + $&  +  +   %% %%%'%% &&&'..#   + + + + + + + + + + + + + + + + + + + + + + + + + + + $& + + + +    %6%% '%%'%% &&..(& +    + + + + + + + + + +  + + + + + + +  + +  + +   +    %%%%%%%%%'&&.44.** $ +  $ + + + + + + + + + +1  + + +  + + + +    +   %%%%%%%'' &&..(....**$$$ + +    + + + + + + + + + + + + +1 + + + + + + + + + + + + + + + +  + +     %%%%%%%%%% '.'....*     + + + + + + + + + + +   + + + + + + + + + + + +    %6%%%%'%%'%%%.44..((# $ + 2   + + + + + + + + + + + $$ + + + + +   + +  + +   +      %%%'%%%%%%%'4.'.(*  $    + + + + + 111 + + + + + +  + + + + + + +   +      %6%%%%%%''''.( + +  + + + + + + + 1      + + + +  + +  +  +&     % %%%%%%'''.(*   + + + +$   + + + + + + +  +   + + + + + + + + + + +    %%%6'%%%%% '.....  $$$  + +  +  + +  + + + + + + + + + +    %6%%%%%'%%..'..4*  +   + + +1   + + + + + + + + +  +     %%%%% ..4.((***     + + +   + 11 + +  + + + +  +   +  %%%% %6%%%%  .((*   2  + + +   + +  + +1   + + + +  +  + + +  %%%%%% %%''.(*&*  22   + + +  + + +  + +  $ + 11  + + +  + + + + + +    %%%% %'%% & .4.&&*     +11 +  +11  + +    %%%%%%%&%%%%& ....5*     + +  + +       + + + + + +  %%%6%% &&%% '..'(.(((***  +  +$ + +  1 + +  +$& + + + + +   + %%%%%%%% &....*       + + +$1 + +   + + + +$&$$$ + +  + +    %%&.'*              + $$ + +   +  +   %%%%% &..(&*           + + 11  &$ + +  +  + +  %7 %%%' &.'..*  (   +   $$  + 11  +$ + + + + + + + +   %7% '%'..4..**  +    $$ + +  + 1  + + +&$ + + + +   +   % '% .4..&&***      +  + +  + 1   + + + + + + + + + + + + +   + %%% %' '.'..&&*      +   $$$$$ 1  +     + + + + +  + + +  %%%%%%&%%%% ''..       + +$$ 1  11  +$$ + + + + + + +    %7%% & %%%%%&'33'**       $ +   + +1 1 $ $$ + + + + + + + + + + + + + + +   & %6% &&%%&&..'.(       $$$$ +   + + +  1 $$$$ + + + +  + + + + + +  &&  &&%% &&&%%&.&*     + $$$    +   $$$ + + +  + + + + + + +  + + +  & && %% & &&''''...&** (  ! $$ + + + + 1 1   $ + + +  + + + + + + +      &&  '.3 ..'.4.&5   , )  $$ + + +  + 1 +  + +  + + + + + + + + + + + + +     %%%   &&./. ..(&)(  !! + + + +  + 1  + $$  + + + + + + + + + + + +  -  & %%  && ''''.. (   ! !  + +  +  +  + + +$$ + + + + + + + + + + + +     %%   '..&*(  ! !    + +    + + $$$$ + + + + + + + + + + + + + +    %%  '''***)((    "  + +2 +     $$ + + + + + + + + + + + + +   % .''....*(( !!""0   + +2   + +   $ + + + + + + + + + + +     %%% & ''.'..&**(( ) ,, )))!   +      1  $$$ + + + + + + + + + + + +  + + +  + +   % %' ''&*((,   !!   +     $ + + + + + + + + + + + + + + + + + + + + +    % %'&&&&(    !0  +$$ +    + + +$$ + +  + + + + + + + + + + + + + + +  +  -  %%% & %'&&'&*(((,*,  !" 0$    + $$$ + + + + + + + + + + + + + + +   +  %&& ' '.&((( ! "" " +  + $ + + + + + + + + + + + + + + + + + %&& '/ '.&&  )        $ + + + + + + + + + + + + +  %&&  '//'' &&*, ""  "" $ +  + + +   $$ + + + + + + + + + + + + + + + + + + + + + +   +- %&&&  /'%%'&&&&( *, ! +) ,""! $$$$   +  +$ + + + + + + + + + + + +  + + + + + + - %%%&&&  %%''*   (  !! $   +  $$$$ + + + + + + + + + + + + + + + + + + + + + +-- %&&  '.)(**,))!! !   + +  $ +  + + + + + + + + + + + + + + + + + &&  ''%&()*  + ,+! #  +   + + + $ + + + + + + + + + + + + + + + + + + + +  %&&&   '%&&  !"!!!    + + + + + + + +   + + + + + + + + + +      !! !!!""MBOX_P 122 +ÿÞ{½{½wœwœs{s{ozoZoZkYk9ggcc÷b÷^ö^×^ÖZÕZµZµV´V´R”V”R“RsRsNrNRNRJQJ2J1J1FFB>ï=î=Ï=Î9Í9Î5®5­5¬5Œ51Œ1‹1‹-l1k1l-k-j-k)j)K-J-K)J)I)J%I%*))))%(%)!(! %% !!!è ç èçæçæÇÆÇÆÅŦ¥¦¥¤¥¤„…„ƒ„ ƒ cc b cbB BA"!! ENTER01P 64 +   + ?; [_ ]  + ]? X [ ]_   _ (ENTER02P 64 +   +   7 37 1 +URW9 Y(;(8Y ;$[( Z \( X:= +U_(< \ ? Z^$?]?( ENTER03P 60 +  +       + +     + +1654289 6 8(5 7(UENTER04P 57 +  +    +     +             + ENTER05P 63 +  $ 4D(TL<, (<(\(`X H`(l@0T $*dP(p,8'h*|X@`'p)| H'|(ht0PX0|`hENTER06P 61 +    $(@*T0, $  0<<@L(L(T)X8*\*d*h(P +L,\(`X,`@)hH0*p'`PENTER07P 63 +     $$(0 @8 (L'H(P(((44 +4*<(8*@,<,L,P +,-D.H($%%)@)X% *X*HENTER08P 56 +       $$( , $(,0((,,$ \ No newline at end of file diff --git a/IMG/ARC/ENTER3.IMG b/IMG/ARC/ENTER3.IMG new file mode 100644 index 0000000..589dcc8 Binary files /dev/null and b/IMG/ARC/ENTER3.IMG differ diff --git a/IMG/ARC/ENTER4.IMG b/IMG/ARC/ENTER4.IMG new file mode 100644 index 0000000..9b4c0e3 Binary files /dev/null and b/IMG/ARC/ENTER4.IMG differ diff --git a/IMG/ARC/EWIN.IMG b/IMG/ARC/EWIN.IMG new file mode 100644 index 0000000..7e6e56e Binary files /dev/null and b/IMG/ARC/EWIN.IMG differ diff --git a/IMG/ARC/EWING.IMG b/IMG/ARC/EWING.IMG new file mode 100644 index 0000000..293c240 Binary files /dev/null and b/IMG/ARC/EWING.IMG differ diff --git a/IMG/ARC/FB7.BBM b/IMG/ARC/FB7.BBM new file mode 100644 index 0000000..c3765cb Binary files /dev/null and b/IMG/ARC/FB7.BBM differ diff --git a/IMG/ARC/FB8.BBM b/IMG/ARC/FB8.BBM new file mode 100644 index 0000000..883a1ae Binary files /dev/null and b/IMG/ARC/FB8.BBM differ diff --git a/IMG/ARC/FB9.BBM b/IMG/ARC/FB9.BBM new file mode 100644 index 0000000..db8d091 Binary files /dev/null and b/IMG/ARC/FB9.BBM differ diff --git a/IMG/ARC/FBA.BBM b/IMG/ARC/FBA.BBM new file mode 100644 index 0000000..1a40247 Binary files /dev/null and b/IMG/ARC/FBA.BBM differ diff --git a/IMG/ARC/FBALL.IMG b/IMG/ARC/FBALL.IMG new file mode 100644 index 0000000..88a797e Binary files /dev/null and b/IMG/ARC/FBALL.IMG differ diff --git a/IMG/ARC/FBB.BBM b/IMG/ARC/FBB.BBM new file mode 100644 index 0000000..d8e8252 Binary files /dev/null and b/IMG/ARC/FBB.BBM differ diff --git a/IMG/ARC/FBC.BBM b/IMG/ARC/FBC.BBM new file mode 100644 index 0000000..aa32775 Binary files /dev/null and b/IMG/ARC/FBC.BBM differ diff --git a/IMG/ARC/FCT12.IMG b/IMG/ARC/FCT12.IMG new file mode 100644 index 0000000..2695bd6 Binary files /dev/null and b/IMG/ARC/FCT12.IMG differ diff --git a/IMG/ARC/FCT12A.IMG b/IMG/ARC/FCT12A.IMG new file mode 100644 index 0000000..489f5b3 Binary files /dev/null and b/IMG/ARC/FCT12A.IMG differ diff --git a/IMG/ARC/FCT2.IMG b/IMG/ARC/FCT2.IMG new file mode 100644 index 0000000..3d9822d Binary files /dev/null and b/IMG/ARC/FCT2.IMG differ diff --git a/IMG/ARC/FCT5.IMG b/IMG/ARC/FCT5.IMG new file mode 100644 index 0000000..8037e48 Binary files /dev/null and b/IMG/ARC/FCT5.IMG differ diff --git a/IMG/ARC/FCT5A.IMG b/IMG/ARC/FCT5A.IMG new file mode 100644 index 0000000..5906e07 Binary files /dev/null and b/IMG/ARC/FCT5A.IMG differ diff --git a/IMG/ARC/FCT6.IMG b/IMG/ARC/FCT6.IMG new file mode 100644 index 0000000..14590b5 Binary files /dev/null and b/IMG/ARC/FCT6.IMG differ diff --git a/IMG/ARC/FCT6A.IMG b/IMG/ARC/FCT6A.IMG new file mode 100644 index 0000000..90c3703 Binary files /dev/null and b/IMG/ARC/FCT6A.IMG differ diff --git a/IMG/ARC/FF6.BBM b/IMG/ARC/FF6.BBM new file mode 100644 index 0000000..1cf95e5 Binary files /dev/null and b/IMG/ARC/FF6.BBM differ diff --git a/IMG/ARC/FF7.BBM b/IMG/ARC/FF7.BBM new file mode 100644 index 0000000..889d325 Binary files /dev/null and b/IMG/ARC/FF7.BBM differ diff --git a/IMG/ARC/FF8.BBM b/IMG/ARC/FF8.BBM new file mode 100644 index 0000000..59aded0 Binary files /dev/null and b/IMG/ARC/FF8.BBM differ diff --git a/IMG/ARC/FF9.BBM b/IMG/ARC/FF9.BBM new file mode 100644 index 0000000..d1708fa Binary files /dev/null and b/IMG/ARC/FF9.BBM differ diff --git a/IMG/ARC/FFA.BBM b/IMG/ARC/FFA.BBM new file mode 100644 index 0000000..8d5ad62 Binary files /dev/null and b/IMG/ARC/FFA.BBM differ diff --git a/IMG/ARC/FFB.BBM b/IMG/ARC/FFB.BBM new file mode 100644 index 0000000..acd5770 Binary files /dev/null and b/IMG/ARC/FFB.BBM differ diff --git a/IMG/ARC/FFC.BBM b/IMG/ARC/FFC.BBM new file mode 100644 index 0000000..716a6e6 Binary files /dev/null and b/IMG/ARC/FFC.BBM differ diff --git a/IMG/ARC/FIREFALL.IMG b/IMG/ARC/FIREFALL.IMG new file mode 100644 index 0000000..826275e Binary files /dev/null and b/IMG/ARC/FIREFALL.IMG differ diff --git a/IMG/ARC/FLAME2B4.BBM b/IMG/ARC/FLAME2B4.BBM new file mode 100644 index 0000000..d89a2b4 Binary files /dev/null and b/IMG/ARC/FLAME2B4.BBM differ diff --git a/IMG/ARC/FLAME2B5.BBM b/IMG/ARC/FLAME2B5.BBM new file mode 100644 index 0000000..b6be221 Binary files /dev/null and b/IMG/ARC/FLAME2B5.BBM differ diff --git a/IMG/ARC/FLAME2B6.BBM b/IMG/ARC/FLAME2B6.BBM new file mode 100644 index 0000000..b7b7d18 Binary files /dev/null and b/IMG/ARC/FLAME2B6.BBM differ diff --git a/IMG/ARC/FLAME2B7.BBM b/IMG/ARC/FLAME2B7.BBM new file mode 100644 index 0000000..ee7aa09 Binary files /dev/null and b/IMG/ARC/FLAME2B7.BBM differ diff --git a/IMG/ARC/FLAME2B8.BBM b/IMG/ARC/FLAME2B8.BBM new file mode 100644 index 0000000..5e7b7aa Binary files /dev/null and b/IMG/ARC/FLAME2B8.BBM differ diff --git a/IMG/ARC/FLAME2B9.BBM b/IMG/ARC/FLAME2B9.BBM new file mode 100644 index 0000000..07a37ab Binary files /dev/null and b/IMG/ARC/FLAME2B9.BBM differ diff --git a/IMG/ARC/FLAME2BA.BBM b/IMG/ARC/FLAME2BA.BBM new file mode 100644 index 0000000..3b5872d Binary files /dev/null and b/IMG/ARC/FLAME2BA.BBM differ diff --git a/IMG/ARC/FLAME2BB.BBM b/IMG/ARC/FLAME2BB.BBM new file mode 100644 index 0000000..50bc7f5 Binary files /dev/null and b/IMG/ARC/FLAME2BB.BBM differ diff --git a/IMG/ARC/FLAME2BC.BBM b/IMG/ARC/FLAME2BC.BBM new file mode 100644 index 0000000..0017fd2 Binary files /dev/null and b/IMG/ARC/FLAME2BC.BBM differ diff --git a/IMG/ARC/FONT6.IMG b/IMG/ARC/FONT6.IMG new file mode 100644 index 0000000..6ad6aa3 Binary files /dev/null and b/IMG/ARC/FONT6.IMG differ diff --git a/IMG/ARC/FREETHRO.IMG b/IMG/ARC/FREETHRO.IMG new file mode 100644 index 0000000..234e78d Binary files /dev/null and b/IMG/ARC/FREETHRO.IMG differ diff --git a/IMG/ARC/GLDN.IMG b/IMG/ARC/GLDN.IMG new file mode 100644 index 0000000..f7a8803 Binary files /dev/null and b/IMG/ARC/GLDN.IMG differ diff --git a/IMG/ARC/GRAYPC.IMG b/IMG/ARC/GRAYPC.IMG new file mode 100644 index 0000000..20c8f93 Binary files /dev/null and b/IMG/ARC/GRAYPC.IMG differ diff --git a/IMG/ARC/HALFTIME.BDB b/IMG/ARC/HALFTIME.BDB new file mode 100644 index 0000000..960e998 --- /dev/null +++ b/IMG/ARC/HALFTIME.BDB @@ -0,0 +1,37 @@ +halftime 2000 1000 255 1 4 35 +htclips 295 709 289 557 +4000 301 294 0 0 +4000 301 330 3 0 +4000 359 330 6 0 +4000 360 524 9 0 +4000 372 330 C 0 +4000 372 515 F 0 +4000 372 421 12 2 +4000 372 508 15 2 +4000 372 338 18 2 +4000 372 346 1B 2 +4000 372 434 1B 2 +4000 372 426 18 2 +4000 388 414 1E 2 +4000 388 502 1E 2 +4000 399 443 21 1 +4000 453 304 24 0 +4000 488 346 27 2 +4000 488 434 27 2 +4000 496 421 2A 2 +4010 496 346 27 2 +4010 496 338 18 2 +4010 496 426 18 2 +4010 496 434 27 2 +4000 497 508 2D 2 +4000 500 330 30 0 +4000 500 515 F 0 +4000 501 294 33 0 +4000 501 524 36 0 +4010 512 414 1E 2 +4010 512 502 1E 2 +4000 532 347 39 3 +4010 612 346 1B 2 +4010 612 434 1B 2 +4010 625 330 6 0 +4000 642 330 3C 0 diff --git a/IMG/ARC/HALFTIME.BDD b/IMG/ARC/HALFTIME.BDD new file mode 100644 index 0000000..fab507d Binary files /dev/null and b/IMG/ARC/HALFTIME.BDD differ diff --git a/IMG/ARC/HANGTIME.IMG b/IMG/ARC/HANGTIME.IMG new file mode 100644 index 0000000..836d9cb Binary files /dev/null and b/IMG/ARC/HANGTIME.IMG differ diff --git a/IMG/ARC/HDS25A.IMG b/IMG/ARC/HDS25A.IMG new file mode 100644 index 0000000..1915b52 Binary files /dev/null and b/IMG/ARC/HDS25A.IMG differ diff --git a/IMG/ARC/HDSMSC1.IMG b/IMG/ARC/HDSMSC1.IMG new file mode 100644 index 0000000..f373914 Binary files /dev/null and b/IMG/ARC/HDSMSC1.IMG differ diff --git a/IMG/ARC/HISCORE.BDB b/IMG/ARC/HISCORE.BDB new file mode 100644 index 0000000..ec4194d --- /dev/null +++ b/IMG/ARC/HISCORE.BDB @@ -0,0 +1,68 @@ +hiscore 2000 1000 255 1 11 66 +hiscore 448 1041 251 639 +100 461 261 0 0 +200 461 511 3 0 +200 461 265 6 0 +200 461 389 6 0 +200 461 368 6 0 +220 461 515 3 0 +200 467 511 9 0 +100 467 261 9 0 +200 467 389 C 1 +200 467 265 F 1 +200 467 265 12 1 +220 467 515 9 0 +200 467 275 15 10 +100 467 283 18 4 +200 467 269 C 1 +200 471 265 1B 1 +0 471 268 1E 5 +0 471 388 1E 5 +0 471 508 1E 5 +400 477 265 21 10 +400 477 380 24 10 +100 480 501 27 4 +4000 484 445 2A 2 +200 494 275 2D 10 +100 516 265 30 4 +100 516 434 30 4 +100 516 366 30 4 +100 516 326 30 4 +100 561 261 9 0 +200 561 511 9 0 +220 561 515 9 0 +100 564 283 18 4 +200 565 265 1B 1 +200 644 275 33 10 +0 651 268 1E 5 +0 651 388 1E 5 +0 651 508 1E 5 +220 654 515 9 0 +100 655 261 9 0 +200 655 511 9 0 +200 660 265 1B 1 +100 671 283 18 4 +100 747 261 9 0 +220 748 515 9 0 +200 749 511 9 0 +200 754 265 1B 1 +200 757 511 9 0 +200 757 261 9 0 +220 763 515 9 0 +100 788 278 36 4 +200 792 275 39 10 +100 795 278 3C 1 +0 831 268 1E 5 +0 831 388 1E 5 +0 831 508 1E 5 +100 851 261 3F 0 +100 851 382 6 0 +200 851 389 6 0 +200 851 511 42 0 +200 851 265 6 0 +210 855 265 6 0 +210 855 387 6 0 +210 855 389 6 0 +210 855 511 42 0 +110 855 261 3F 0 +220 857 515 42 0 diff --git a/IMG/ARC/HISCORE.BDD b/IMG/ARC/HISCORE.BDD new file mode 100644 index 0000000..8a9fd3f Binary files /dev/null and b/IMG/ARC/HISCORE.BDD differ diff --git a/IMG/ARC/HOOP.IMG b/IMG/ARC/HOOP.IMG new file mode 100644 index 0000000..10f7f0d Binary files /dev/null and b/IMG/ARC/HOOP.IMG differ diff --git a/IMG/ARC/HOOPN.IMG b/IMG/ARC/HOOPN.IMG new file mode 100644 index 0000000..8a3b456 Binary files /dev/null and b/IMG/ARC/HOOPN.IMG differ diff --git a/IMG/ARC/HOOPO.IMG b/IMG/ARC/HOOPO.IMG new file mode 100644 index 0000000..7284986 Binary files /dev/null and b/IMG/ARC/HOOPO.IMG differ diff --git a/IMG/ARC/HOOP_O.IMG b/IMG/ARC/HOOP_O.IMG new file mode 100644 index 0000000..fa1ad44 Binary files /dev/null and b/IMG/ARC/HOOP_O.IMG differ diff --git a/IMG/ARC/HOOP_O1.IMG b/IMG/ARC/HOOP_O1.IMG new file mode 100644 index 0000000..f7f3b5f Binary files /dev/null and b/IMG/ARC/HOOP_O1.IMG differ diff --git a/IMG/ARC/HOOP_O2.IMG b/IMG/ARC/HOOP_O2.IMG new file mode 100644 index 0000000..ee8cb0f Binary files /dev/null and b/IMG/ARC/HOOP_O2.IMG differ diff --git a/IMG/ARC/HOOP_OLD.IMG b/IMG/ARC/HOOP_OLD.IMG new file mode 100644 index 0000000..9ae2565 Binary files /dev/null and b/IMG/ARC/HOOP_OLD.IMG differ diff --git a/IMG/ARC/INIT18.IMG b/IMG/ARC/INIT18.IMG new file mode 100644 index 0000000..9b08e11 Binary files /dev/null and b/IMG/ARC/INIT18.IMG differ diff --git a/IMG/ARC/JAMSESN.IMG b/IMG/ARC/JAMSESN.IMG new file mode 100644 index 0000000..da00773 Binary files /dev/null and b/IMG/ARC/JAMSESN.IMG differ diff --git a/IMG/ARC/KENGRIF.IMG b/IMG/ARC/KENGRIF.IMG new file mode 100644 index 0000000..57002ea Binary files /dev/null and b/IMG/ARC/KENGRIF.IMG differ diff --git a/IMG/ARC/LADDER2.BDB b/IMG/ARC/LADDER2.BDB new file mode 100644 index 0000000..5edabd2 --- /dev/null +++ b/IMG/ARC/LADDER2.BDB @@ -0,0 +1,62 @@ +ladder2 2000 1000 255 2 10 59 +ladder 260 852 367 741 +dabull 610 1356 332 745 +0 270 376 0 0 +0 270 496 0 0 +0 270 616 0 0 +4000 361 577 3 5 +4000 362 398 3 5 +4000 365 647 6 1 +4000 366 468 6 1 +4000 392 501 9 5 +4000 392 680 9 5 +2300 395 689 C 1 +2300 396 510 C 1 +4000 412 510 9 5 +4000 412 689 9 5 +2300 417 519 C 1 +2300 418 698 C 1 +4000 435 468 6 1 +4000 436 647 6 1 +0 450 376 0 0 +0 450 496 0 0 +0 450 616 0 0 +2300 512 684 F 1 +2300 513 505 F 1 +2300 533 693 F 1 +2300 533 514 F 1 +4000 566 580 12 1 +4000 567 401 12 1 +0 630 376 0 0 +0 630 496 0 0 +0 630 616 0 0 +0 810 376 0 0 +0 810 496 0 0 +0 810 616 0 0 +3C00 850 403 15 8 +3C00 850 479 15 8 +3C00 850 555 15 8 +3D10 853 567 18 3 +3D00 855 492 1B 9 +3D00 856 417 1E 4 +3E00 918 408 21 6 +3E00 918 560 21 6 +3E00 918 484 21 6 +4000 920 485 24 7 +4000 920 423 27 7 +4000 920 579 2A 7 +4000 970 413 2D 2 +4000 970 489 2D 2 +4000 970 565 2D 2 +0 990 376 0 0 +0 990 496 0 0 +0 990 616 0 0 +4000 1042 413 2D 2 +4000 1042 489 2D 2 +4000 1042 565 2D 2 +4000 1114 413 2D 2 +4000 1114 489 2D 2 +4000 1114 565 2D 2 +0 1170 616 0 0 +0 1170 496 0 0 +0 1170 376 0 0 diff --git a/IMG/ARC/LADDER2.BDD b/IMG/ARC/LADDER2.BDD new file mode 100644 index 0000000..d172ce9 --- /dev/null +++ b/IMG/ARC/LADDER2.BDD @@ -0,0 +1,1120 @@ +16 +0 180 120 1 +    +  +          +  +           +   +    +         +      +        +   +              +    +   +   +  +   +   +   +     +    +   +                  +                   +            + +            + +         +   +          + +          +  + +        +   +   +     +   +            +      +       +                        +       +      +                   +    +      +   +      +   +                 +       +      +            +     +      +          +      +         +    +       + +         + +          +                                    +     +    +  +    +      +              +     +   +     + +   +    + +       +          +        +       +                 +        +        +     +       +      +         +          +    + +    + +     +                                             +    +    +                        +        +          +             +   +      +         +                           +     + +     +  + +      +          +                                               +          +         +                                +      +    +      3 208 70 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + + + + + + + + + +                                                                                    + + + + + +        + + + + + +        + + + + + +        + + + + + + + + + + +        + + + + + + + + + + +        + + + + + + + + + + +         + + + + + + + + + +         + + + + + + + + + +         + + + + + + + + + +             + + + + + + + + +             + + + + + + + + +             + + + + + + + + +            + + + +             + + + +             + + + +                + +                + +                + +                                                                                                                                                                                                                                                             +  + +    + + + + + +   + + +   + + + + + + + +   + + + + + + + + + + + + + +  + + + + +  + +  + +  + +              6 132 4 1 +9 132 9 1 +    + + + + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + +                                                                                                                                                     C 120 4 1 +F 16 9 1 +12 4 71 1 +15 100 80 1 +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + +  + + + + + + + +  + + + + +    + + + + + + + +  + + + + + +  + +  + + + + + + + + +   + + + + + + + +  + + + +   + + +  + + + + + +  + + + +  + + + + + + + +  + +   +  + +   + + + + +  + + + + + + +   + + +  + + + + +  + +    + +  +   + + +   + + + + +   + +  +   +  + + + + + + +  + + + + + + + + + + + + + + +  + +  + +  + + + + + + + + + + + + +  + + + + + +  + +     + +   +  +  + +   +  + + + +  + +    +       +  + + +   + +   + + +     +  + +          +  +    +        +      +                                                                                             18 72 62 1 +üüüüüGû}öööööøùGGGGG_µ{úûû{{ööøøG÷^_µ{ø)µµµµµøöøø··常¸4pooCee$f)eö}}}·¸SKKuuŸr<)?@ A"&$ ' + +  !"#$%&'1B 56 61 1 +5\\5\\\\\\\\\5\\5\\\\\\ÇÈ\\Ë\]\\\\\\\\\\\\\\ÈÎ\\\\\\\\\\\\\\\\]\\\\\\ÇÍe\\\\\\\\\5\\\\\\\\\\\\\ÇÈ\\\\\\\\\\\\\\\\\\\\\\\\\\Ë\Ì\\\\\\\\5!/-/DC55\\\\ËÉ\\\\\9/-//-/DÉ\\ËÈ\\\\\@--=****)Q yÊÈ555C‹‹‹‹‹‹--*)7 ' É\È<1e1£€……q3n--n==== == \Çeežžz2´Š +‹3==n +&6KKÆx·wjjÃY¡´“I3===(‹‹‹ +KKjHHHxÅÄ0ÃÃYYY´–q=((7(zKHHHH}w"YYYY¡Š€€P”==33 +‹‹‹&6¼HHÃH¹w¸ÃÂÂkO©NNª«€€€¢€À¤£H´Á´H¹t¸¸YŸ‡¿¿¿‡€À€‡––€‡Š‡‡¿¾……º´´H„hŠ“‚EE & +€………Š66žžž½´´¼„""…Š‡k22…(R55% *===-Z<59ZRz…H„{q€‡Ÿ¡‡-C<! Ž*/=79R5%) ;…£¹{"€OŸ¡‡;-D555<:!n‹(»<<\%%»D;…„"…i°Ÿ°­;-0"5!NQ<@00R"»  +º¹¢´¢AqiOŸ“³Z0"R¸-P¢ª$( +y·pR"00;BE +F¢´‡°Ÿ­;;;ZRumm‹P¥Pn‹qrZ~SZ‡‡ŠŠ +k´kŸ¢O¡N©°¦€3)D!*=¢¢OŸ­P©€©9‹‡Š€i´kŸŸk¡€€O¡¡­ª”P§ª§®­¶ª$$€€€nn(°µ‡©´#8ID9¡Ÿ¢O¡¨³PP²NN¡¦Ÿª$$€‡I$n(±ŸŸ‡( +’/¡€Ok°¨¥ªªL¯¨®¡¥­¬¬§‡‹«ª«N‡‡k†K#!b¡¡€‡k¡Oª3-8kO€ŸŸ¡¢¤¤k ‡¡#%k‡©ŸŸO”-”/*n/3q7€€€_ “nnŸ‡Ÿ‡N¨¨=%9€‡NN¢/-/¢N‡‡C!g€‡€–––N¢§)%qŸ¦Ÿ¥¥PPn¤¢‡Š“Z9( +ŒFŠ¢¢†-u%:%%n--99RR%:% :/ ŒF¢= + 5%…… ki ¡ …ž559(D(Œz3 +€,… 2..…9 Œ"hq3n(7–k#†_œ›š™˜—™™Šq‹( ‚Œ"3(=€‡kkk||•••XX”“Š‹( Œ„’=‹Ii#ii‘|GIf=‹€€Š…‹'wV„"ul€N€€3*Ž!!(‹ +…€€( wŒ„ƒr-€‡I†3**-((…€… + V„ƒsu:7‹€‡€†/!8!-…Š…& VŒt"E1%9( +‡‡i€†3=(&‹…Š…& ƒ‰ˆ ‡N€†3=-(& +…zS„ƒ‚‚9 €==7 v1S"~15\]]]:!9%%999AZ1S""EZ5]a]]]]5]\\]5@%Q|ZZZp‚"zEA[5]a]]aa]a]a]\\@yQQNQ:5%8[1‚ssul855]aaa]]\]a\\5ZQQQ-t=%99[‚Vrl[R\]]a]\]]]\@Z Qqpocn9%9: Vml99R<55]\aa]\@QQQQqjckWccb7%::9!9%%5]]\]]\]Q4T=iWd79:!89%5@@5\aaa\\@[[Q%>=fedcc%:b!9R55]]\\]]a]]]5[Q%4===`^=cJ$%:!955\]]]]\]\5%R[Z%U=X.L9!9RR5@@@555@5R%R99Q5>3WV,H+L::%%%%RRR9Q'54P#ONNML99%%%9%9%%%%%Q''''5@4JIHGNE+99!!8!!97!9DC''&&'A@> ?*;-:9!8!! )77'&&6A432 1.-,+*!!)'(  'A%$ 1"   A 1E 56 60 1 +äêääääèäèèèèääèèäèòÔìäääèäèäèèèèèèäèèèèèèäèìëääääèäääääääèäèäèäèèèèèäñêääääèèäèääääääääääèèèèäèèèòääèèääèäääääääääääääèäèèèääìêääääääääääèèååðåååðäääèääèèñìääääääääååééíî~@~~~ïåäääèèèëääääéËŠvnn4fNTvtuåääìäèßãuÈmmd--TKKççç第0}éäêÔäåæàªXOOVq¬Kç第¬Œ¬duäÞßàáÖâXXV$Ž‹ŒŒŒŒŒŒŒŒŒ‹mãÔÚÛŠÜÃXSSqV‹Œ§¢´´¨§§vÝØپñi×SSqV‹Œ‹«¨§§§§§&ÕÔÕÖ‘ªX×2£VŒŒ´¨§¨§§´Œ‡Ñ‡miXXÒ2$V¬¶ÓÓ´ÐЯ¯´¶¬Œ#mÏñiXXS2£VŒ¨¨Ð¨¨¨ÐШ´¨¹™OÏÃOSSS$V™žž²²Åů¯Å²²·——˜™XÎÃSSSXSO0Ž_žž°–°–°··—Á—³˜£SiÊÃi¦SS±vuËÌuo§°°Æ·····0vttu‡ŠÍÇÈi¦SVOVÉt~f¨ÅÆ···Æ§0ViÂÃÄi¦VVŒ«ÅÆ°Á·²§¹‹‹S0}OOqVqeÀ§²°Á·§§3|0SOOVV#-o€¾iq‹U‹²¯²²§SŠ¿¾&-0†/dS££OmX.‡t<:S§¼´ŒV£iu½.&4-vq-dS£$ £VqL‹§´´¢»#0i3#ºS$`££Ž‹Œ™²¯´²Œ™§™ª4 OdSVV™§§™˜˜¯¯·§°²²²²²²§±@&ºS9V£§§§§§§§™˜—““²™§§²°²²²²²q-S0OV£™™™¹¹§§§§§™_˜§¨¯§Œ§²²²°²²ž™SVViVŽ_™™™§²°²§˜¸¢´´§Œ¬¢¯·–––žqVVVŽ™²³°²‹‹³µ§´¨§Œ¶Œ´§–··žO±mŽ™²²§Œ³ž™¡ž²—²´²‹´¯°²Oidd§§§®‹§¯¯°ž§™§‹ŒŒ¨§pªid#Œ«Œ¬‹0&­¬Œ‹§Œ«ŒOO0LŒ¨04@©4@4?§Œp¦OLV‹‹§™‹XdŒL‹‹“ž-Xif£q£___¡¤¤G&¥XO-GG + +¡##VVXXVŸŸ ,¡˜˜ R¢q9XO0LVq“’š››œž™‘9V900L’“”•–—˜™Ži9SO-0e>‹Ž9iO9&0‹+‹ŽV9‡iO#0nV‹ŒŒ‹‹‹VOu‰}iO####&n09OVVm|t‰Š&iO0#0-4noOOOVVOOOdm„…†4n~~t‡mO00----nn}OVOdmmJˆzz{44n|v}m00000--0-4~t€o0000&n&0{‚ƒ\s8N44omm000?00-otuttvnno0wd(! ,;7-&mm30L?0?0?0no0ppiO(q,J700d303????0iVjk[h +. 7/--dLLLe#00>8) +fg1,11+7-00L?L000_6 `Na +,;[ 0LL0???00000!7#[,0S /LLL00?TU0L000VLW71X) +Y,HIJ7+-0?KL?M N + +.O,:-;< =>00?@A1B* +?@ABCB8DE8FGCHI=JKL9MN'OPQRSTUTTVWXYZ[ZZZZZ[[[[[[[[[[[[Z\]AA^_`HBRaQPbAE7DcbdePdKfggaaahZijklmkjjjjjjnjjjjloopqrsJJJJtCKLuuvB +ww8xQy,z{z,PP|}~€€€p‚‚lll‚‚llllkoo~ƒ„…††‡,GuCRS Eˆ‰cŠA‹aŒQduPuŽZ‘’p’p“ljjopol”i•~–—O˜vtRxxHU_E™c™‰ TTš‹››‹›œZoljjj”iž•iiiiii”iŸ BASSSTT` c™¡¢£‰:::¤¤]XZli~~~[~~~[~ii~[[[~~iiY¥¤¤:@@:&N¦§¨§©ª¡«¬7­®X[li~[[ZZZZZZ[[[[[[~ii~X¯47«°§¢©§±¨¡²³³´µY¶ooi~~~inq·Z[iii~~~in[X¸´©ª¹º±»¼½}Ÿ¾¿~€pli[ZZZZ[[Z~~[[[[~nni[[ÀÁÁ}Â¥ÃÄÅÆÇr[ZZY[[no’”iiiini[Z[inninn·~ŸÈȶr~···É½]Ê˶[ZYYXWWXYYY[ÌÍji~~~~[Z[~~iinni[XWWXXYYZZ[~~¾É½~[[Z[ZYYXXWÎÎX~jji~[ZYZ[nllln~YWÎÎÎX½ZZZZ[[[rW¼Ç·¿¾¾YWWXÀWÃÃWZ·oi[ZYY[oln[XÎÃÏÐ¥ÎÎ\ɾ¾rŸXÏÎÎÎÎÎW}ÑÏÃÏÎYZZZZYYYYZ~ZZXÏ++`*ÃÏÏÎÎXÒÑÓÏÎWWXXYYZZYXXXWÏ++*:ÃXZYWÎÎWWXYZ~i[ZYYXWÎÃÃÔÏÎÃWZYXWWWXY[ioi[ZZZZWÃÃÏÏÏY~[YXXXZ~l‚n~[[[ZWÎXXÎÏWZ·[XYYZikl‚ki~[[ZXZÀXÎZniY[ZZiÕ‚l[[[ZXZÖYÎW[iZr·Z~Õ‚“n[Z[ZXY×ØY[[~Ù[[non[[~[XØÚÛXYZ~Üi~nl‚oj~~Õ[XØÝXZiojjÕ‚‚ji[XÛYiooÕnjoojii~ZXW[jooo‚oo¶ZXXÞon······ÞßY½ÙÕ~YXYZZZZYXYZàWÞÈZXÎÏÎYYZYÎÎWYYXq[ZXÎÎÎXYZYÎXYZYáâZ[ÈYYXYYZYrããYXäàZ[rZYYYYYYZYXWZZZZq~ZYXXXXWÛYroq~[ZZYØäÝå[ZZZYYXÎBNBA_V_P 21 + $ +   ( ,0 +( + + mtchpal 64 +ê sH“H´LÕPöTU7YX]ya™aºeûin\r}r¾vßz<Ž84Œ0l0k,j(i$I$H G—RvNuNUJTJ4F3FBò=ñ=Ñ9Ð9°5¯51Ž1Þ{n-m-M)L),%+% ! +!êéÉȨ§‡†P_BULS 232 +co3N¶^ -çB•R*%k-s}k[k”V|o‹1¾oø^_2Fœsk¶V1tN:g!•NïAð=Zk½sSF|g2N*zk !®5[g”ZÍ=cö^×V))¥…(¥ ÇÇ>è -K!Æl%¤¬5PJ©5åj-‰1NF+°5Ï9´Vˆ1ä >MJpN1-‘Jó^nNê=g-F)&%$9c,c4c8cDcHÄ4Ä$G)(%% B >Ò5°R4cKF*FEEcXÄhälqäp£d'u‰yÅd¤P©I BÑVOFÒ9É9òZ6c7cÒbæHcT&uªyhyHy.jöbY_8_6_O%-%M)¨5LJÒZoZƒd¬yíy‹yI}ÅluiYpVqF´5f1§9%=„hiu¤Lh=q-¶5R)Ĥ,õ=s- Ø9–1%ì ɧ$Ç(P)ÌÖ9“1´=-=Å\¤\NAu)‡Æ,Ä<ãTã\UJ]ä> + + +  + + +–’¢ªš–¢ – ±ÂȺÀº±ªªª±¢ª³ËåíÝËËËÕÕÝÀ ¢ª³Ñ˳¢¢ª±ºª’’œ±¸¸±¸¸¸Â±¸ËÕÕÝÑÀªª¢šœœŠ¢¸šŠš…†… š¢š…–¢ œ ª¢–––’±ÑÝÝË/%¥úúïääØ×ʽ¥{w‡›¦½Éɾ½°²É×ääëä××Úäïïç×Ø×Øäçïïïïïïïúïï××É°°¦¥‡{qq‡¥²½ÉÉÊ×ÚäÚ½£››¥½×çïïïúúú’¢ªœ’¢¢–¢¸ÂËȱª±ºËËÀ±ÀªÈåßÝÕÈÕËÕÕÕ¸ª³¸Àª’– ±¸±¢’¢³Èª±¸º¢³ÈÀ–œª³ÈÂËÕ˱¢šœ–’’œªªª¢–‚‚Š’–¢¢š– ©¢ªºÂª’ŠŠ¢ÂÝÝÈË6>>¦¤¨«®«¨Ÿ˜¤¨¨¨Ÿ—ŽŽŽ“˜Ÿ¤ŸŸŸ¨«®««¨¤¤«´»»ÄÇÐÐÔÔÔÐÇÇ»´«¨¤¤¤¤¨«¨««¨¤Ÿ—‹€€ƒ„Ž“Ž‹„€zuuruz€„„‹¢ªœ’¢¢š ¸ÈË˱±¸ËÕÝÕÂËÕÝÝݸÂÕÕÑË˸ª±¸ºª––¢¢³±ª¢ªÀȸ¸¸¸¸ÀÂœœª±ª±ºÕÝÕ³œ –Š’––¸Ë±’†’––’–ªªªª±ÕË¢œŠ¢ÈÝËÂË݇¤¤˜“‹‹„Ž¤¨Ÿ—“ŽŽ„€puu€€€€€„„‹‹“˜¤¨¨¤¤¤¤¨«««««®´ÄÇÇÇÇÄ·®¤Ž„zpinz„“¤¨«¤Ÿ“‹„ƒ€ƒ„‹Ž“—˜¤ªœ’¢¢œœ³ËËȱ±ºËË˱±¸ÕååÝȳ¸ÈÕ˺˪³Â±š– ¸º¸ª¢©³ÕÕÂÂËÂÂËÈœšœœ¢¢¢­ËÝÕ±¢œ’œ’…– Âš†’–šœ–’œ¢¢¢±ÈÀÀÈ˪ÂÝÝËËÕÈ/¥®®®¤——“—“Ž‹Ž—¤¤Ÿ“ŽŽ—˜ŸŸŸ¤¨¤Ÿ˜“ŽŽ“˜˜———˜Ÿ®»ÄÄÄ·®¨¤Ÿ¤¤¨«®´´´·®®¨¤“‹„€~„„„€zuru~„„‹Ž‹„€€œ–¢ª œ¸ËÈÀ³±ª³ÂÕ˱œªËÝÝÝÕºÀË˱¸ÕÕȸ©œ±ºÀ¸±ªªªªÀº±ª³È˸–œ¢ššœ œœ±ÈÂÀ¢–’–Š–š–±œ’’–¢ ’’ ª’šªÕ³ÂËËÈååÕÈÝÕª«¨ŸŸ¨®®®®¨“„€z€„„„€zuz„‹Ž—Ÿ¤¨««¤¤¤«®·»ÄÄÄ»»ÄÄÇÎÇÇÄÄ»´«««®®®®«¨¨¤—Ž„€€€€ƒ„‰„‹ŽŽ“““Ž‹‹‹’¢ª ¢±ËȺ±¸±³ÈËÀª ªÀÕÝÕ±±¸ÂÑ˱¸ËÝÝ˺ ––¸Âªœœªª±ºº­¢ª¸Â±œš¢œœ¢ œœª¢ªÂÀ¢––’…Š–’šÂªœ’š’–¢ª¢œªÕÕÈËÑÂÀËÝËÂÈÕÀœ?ELÉ«´·ÄÇÇÇÇÄ·«“Ž“—ŸŸŸŸŸ¤¨«®®´´®®¨¨«®®««¨¨«´´»ÄÇÄÄ·«—‹€z„„‹€~z„‹——“„„„‹“—“‹€€z„Ž˜˜¢ª¢¢±Àº¸±³¸ºÈÕÈ¢œ¢ºÕÝÕ¸¢±ºË˺¸¸ÂÕÝÝÀ±– ¸ªšœ¢±¸ºÀÀ³ª¸È³ª³±¢¢ªªœ¢ªªœ ±ª±¢–Š’Š†¸Àª–’’¢¢¢ª¸ÝÕËÂÑ˱³¸ÂÀÂÂÕ¸šELP¾®®¨Ÿ—‹€uupuuz„‹‹„„„„Ž—Ÿ˜˜˜¤¨®®®¨¨ŸŸ˜Ÿ¨®¨¤¨´»»´¨————˜˜˜“Ž„ukkpx€€€€„„„„‰€z€€„‹“——±¢¢±Âº¸±¸¸ÂÂѪœ¢¸ÈËÕ¸³¸È˸ª±ËÕÕÝݱ’Š ±º¢œ¢¸ÈÂÈÂȺÈ˸ÈÕ¸ª œ ¢ªª¢ œ–¢¸’…–ŠŠ¢Àº ’¢ªšš¢ÕÕ˸±ªª¸¸Â˸¸Ëºš/36½Ÿ«··´¨—„uu€Ž˜¤¤¤˜“‹„€„‹Ž“˜Ÿ¨¨¨««®®®¨———Ÿ¨´´®¨¨¨«««¨¨¨ŸŸ˜˜˜“‰uiciz‹ŽŽ‹‹“˜¤¤Ÿ˜Ž‹Ž“˜¢¢±ÂÀÀÀ¸ºÂ˺ª ª¸ÈÕÀªª±ÀË˺¢¢ºÕÝÝÕÀªœœ³¸³©³Àº¸Â˺³ËÕÂÂÕÝË¢œ¢¢ªª ¢œ–’¢œ…†’’ŠŠ’’†ª±œš¢ª –¢ÕÂÀ¸±ª¸³³¸ÕªªÂ±–3//{·´®«¨«®´®¨Ÿ˜—˜Ÿ¤¤Ÿ—‹„„‹‹‹‹Ž“—˜˜˜¤«´ÄÄÇÇÇ»«¤¤¤«´´®®«««¨¨Ÿ—Ž“—˜Ÿ˜Ž„~zuupnkifpuzz„Ž““——¢±ÂÀºÈÂÂÈÑ˺©¢±ÀËÝ˪¢±ºË˪ª¸ÈÝÝÕÀ³³³ºÈ¸©œ³È¸±¸±­¸¸¸¸ÈËÑ˪¢ªªªœ¢œ–šªš…†’’’–š–’¢±ª¢±¢œššœªÈ¸ªºËºÈÝÈ¢ ¢ªª±/6>²ŸŸŸŸŸ¤«««Ÿ“€ppu„Ž—Ÿ˜˜˜Ÿ¤¨¤¤¤¨«®´´®««¨«®·»ÄÄÄ»»·´®¨¤Ÿ˜˜—“Ž“‹‹€zpfaacn~„Ž—˜ŸŸŸŸ˜¸ÀºÀ¸¸ºÂ¸­¢ªÂÕË˸³ÀÈ˪¢ ¸ËËÝÕ±ÂÕȪ±±œ¢±À³±³Àº³À¢¸ºÂÑÕÕ¸©ª¢œœ ––š……––’–’’œœœ±Ë±š–’–œ’œª¸³À˸¸Õݪ–––Š¢À<6>°··»·´«“Ž————Ž„zuuz„‹ŽŽŽ‹Ž—˜ŸŸ¤¨¨¤Ÿ˜—“˜Ÿ®´·´«¨Ÿ˜—Ž““˜ŸŸ¤ŸŸŸ¤¨¤ŸŽ„€xpi^[U^afipu€Ž˜ŸŸŸŸ¤—Àº¸¸³±ªº¸¸±±±ËÕ˱­ª³ÈËÕ¸–š±ÂËÑÕ±ºÕÝË’–œ¢±Â¸ÀºÂÈšœ±ªÂËÑÕ±ª œœ–––Šv…–š–šš…Š–’œÂè±’’’’Š–¸±¸ËÀª¸¸¸± ––š¢³66/¥´·´®¨˜“‹„„„„‹‹‹ŽŽ‹„‹‹“˜Ÿ¤¤¤ŸŸ˜˜Ÿ¤«««««®®®®®®®®´®«¨¨¤¤ŸŸ—Ž„„„„„„„€€ƒ„€xxuric^USUfu€„ŽŽ““¸³¸³ª±ÈËÀ¸ª±¸ÂÕ¢ª¸ÂËÕȪ¢±ºÑÕÂÀ¸ºÑÝݸš¢±±ÂÂÈÂÈÕÕË¢ªªª©ºËËÝÕÀœ¢œšŠš–†Šœš’Š’ŠŠ––’¢ÀÕ±š’’–ª³Âȳ±ººªª¸±œ¢¢©©6<>¾´´«¤˜“Ž—Ÿ««¨Ÿ—“‹€€„‹‹‹‹‹‹‹Ž“—˜Ÿ¨««¨¨¤Ÿ¤ŸŸ¤¨«®®®¨¤ŸŸ˜—Ž‹„~pa^^cirxxu~€„‹—¤¤¨¨¨Ÿ——˜¤³±À¸³ÀË˸ºº¸¸ÀÀ¸±³Àѱ¢š±ËÑÕ˱³ÈÑÕÕÕ¸ª±ÂÈÑËÀ±¸ÕË’©ªªœª±ÂÕÝÀ¢¢–ššŠ’š¢œŠ†…Š’–’’¢¢¢¸ªšœš–š±ËÕÛÀ¸ÂÀ¢¢¢¸Âº¢š–%/LÉ·´®¨—Ž‹„‹‹“““—˜˜“Ž‹Ž“¤«®®®¨¤¤Ÿ¤¤¨¨¤¤¤¤¤¤¨¨¤¤ŸŸŸ¤¤¤Ÿ˜˜˜————““ŽŽ‹„„zxuxz€„‹—Ÿ¨¨¨¨¤ŸŸ¸ºÀÀËÝÕ¸ªªÀºÈÕÝÕ±–š±ºËÕ˱¢¸ÝÝÕÈËÀº¸ËȱªºÂ’Šœ¢¢–šœœ±ÑÂȪšœ¢š’ššœŠ’ŠŠ–¢ ¢ªªœ’ ³œ’–š±ÀËÝ˺ÂÕ¸±¢–’¸ÑœŠŠ–/>?°´®«¨¨¤¤Ÿ˜˜Ÿ˜“Ž„„„€€„‹Ž˜Ÿ¤Ÿ˜“‹‹“—˜—“““—˜ŸŸ¨¨¤Ÿ˜—“ŽŽ‹„„€z€zupppuzƒ„„„‹Ž—˜Ÿ¤¨¨¨¨¤Ÿ¤¤ºÀÂÂÀÈ¢œ±ÂȺÀ¸¸ËÕ©¢ªºÈº³ª¢¢ËÝÕËÀËËÈÀ³±¸³±À˱’œªªœš¢ ªª±Â˱¢ …œ–’–Š–¢šŠœ±ªš–œ¸¢ŠŠ¢ºÂ˺Àȸªš¢¸œ’– qddÉýýùóîêêæÙη««´ÄÐÙáæÞÙÔÔÞêóóõîêîîóõõóîîîîóõõõõõõùùùùõîæÞÔÔÐλ´¨¨¨´ÎÔÞááæêîóîÞÎÄÇÎÙêóõùùýýýºÀȺ¸³±¢±ÀËËÈ˱¸º¸©¢³ÑÕ˱©¢±¸ÂÕÑÂÈÕÝݸ±¸ºÀÂËÈÂÀªª œ¢ªª¢œ±¸º±œ}…šŠ–ª©–šª Š ¢œ–šª±ª©ÂÕÕÈÀÕÕÀª’ ¢¢À±¢ª?EE°ßÝååôðöôðíðíåèííåèíðôðíèíðôðððôôðíååèèååèåÝÕÕÕÝåååÝÝÝåßßÝÝåðèßßßååèåßåôöðåÝÝÝßååèèôööôððô±ÂËÀ³±¸ºËÕ˺±À˺Àº±œ¢¸ËÕ˱¢ªÂËÂÈÂËÕÕÝÕº¸ÂËÑÕÝÕËÕ©œ¢ª±¢¢ œ¢¸¢Š…’œ–’¢Ë±¢œœ––¢¢ ’Š’–¢À±ºÕåÕÑÝÕÕ˱œœœš–ªÕº /36¥ôíôðôðôðíååíííííííðôðíèíðôðíðíðððíèåíííííÝÝÕÕÝÝÝíèåÝÝåßÛÝÝåíðíãåååååÝåôôåÝÝßåèåèååôüöðôôíÀËËÀº¸ÀÈÕÝȪ±¸ÂËÀªª¢³Àȱª±ºÈºÀÂÂËÕÝÝÕËÈËÕȸÂÕÕËËȳ©ª±œ¢¢ššš–’œ¢–’š¸Â¸œ’š¢¢œœŠ’Šœ³ËÝåÕºËÂÂËÑÑÂÈȱœ–’–¸Â¢/%%‡ðööðííðíèèííííííííððôèíððííðíèíèíèíííèåßÝÝÝÕÝßÝÝèåååÝÝÝÝÕÕßåèííåßÝÝßååèèÝÝÝååèíèåíöööôððåÑ˺ª¸Èº¸ºº±¸ËѸºÀÀª––±ÈÀªªÀÕÕÕÝÕÕÕËËѺ¸ËÀºÀÈËËÀª¢¢¢šœ¢œŠš–š–Š…†¢ÂȪ±Âªªª –ŠŠœ­±¸ÛÝÀÀ¸©¢±ª±ÂË˪š–’šª¸±EE?°ííððíððððèíííííííííðííðððíííííèíåÝÝèíèÝÕÝÕÕÕÝÝÝÝÝåååÝÝÝÝÝÝåÝÝííßÝÝåååèåÝÝÝèååßååíööüööôðíÕÀªª±Âº¸¸¸ºÀË˪¢¸ÈËÕѺ–šªºº±ª±ÈÝÝÝÝÕÕÕÝݺ±ª±±©ª³ËË˸ª¢š–¢œŠ’œ–ŠŠ’……’ª¸ÂÕÕ豜œœ–š¢¸±¸ÕÕÂË¢¢¢’œ±È±œ¢œœš¢±±%6¦ííðíðððððíííííðôðððííððíèåèðíðííÝßåíååÝÝÕÕÕÕÝÝÝÕÕåååÝÝÝÝßåÝÕÝèðåßåååèååÕÝåååßååíöüööðííôö±ª³ËËÀ¸³ÂÈËÝÕªšªºÂ³¢­ºÀ±±ºÀÕÝÝÝÕÕÑÝݪ±ª±ªªªªªª±ºÂºªœªš…†šœŠŠ’’†’œœ¢ÂííÕª¢’–ŠœÂÕÂÕÑËËÝȱ¢ œÀÕ±¢ÂÀª ¢ªª¢QYQ½ôðôíðððððððíððôððíííðííåÝåèíèíííååèíååßÝÕÝÝÝÝÝÝÕÝåååíÝÝßååÝÝååôðíåèåßÝÝÝßåååååïöüúüöíèíöö¸³ÀÂÑÕÂËÕÈÂÀº±¢±ÂËÀªª ¢±Ëȸ¢¢¸ËËÝÝÝÕËÝݸ¢±±±³ª±ªªª¢ªÀÀ¸¸ª……–œ’–’––šªª–œÈßÝÑËÕ±’†©¸ÀÝÝËÕËËÀºœ’šªÂ˸ºË±œ¢ª¢œddb½öôðèííåðððððíðíôðííííèåÝåííåÝßååèííåååÝÝÝÝÝÝßÝÝßåÝÕßååååÝÝÝåååèðïèåßÝÝÝååèååèöüöôööðèíöôðºÀËÝÕÀ±ÀÕÕ¸ªª±ÂËѺ¢¢ª¸À˳¢±ÂËËÝÝÕÑÝß³ª±±³±±±ªªª¢œª¢±Ë±š†–šœ’šœš––œ œ¢ÀÀËÂËÈË¢¢ºËÝÕÕßѺ¸Àº’’–¢ ª¸ÈÕȱ¢¢¢ YbY¾öðååååíðððíðððððíííííÝíííííèÝåèèíííèèåÝÝÝÝÝÝãÝÝãßÝÕÝåååÝÕÝßåååßéðíåÝÝÝåèíèååôüöôðôðííôöðíº¸À˪ª¸ËÈÀªªÀÂËÕËÀ±ª¸Â±ª©±±ºËÕËÝÕÕÝݸª±±±±ªªªªª¢¢¢œšœªœ¢ªªœ–ŠŠ––’Š–¢¢±ÂËÈÂÂÕÀÈÂÝݸÀº¸¢¢ª±šœœš†’ªÂÂÂѸ±ÀºE?6ôíèðððððííððíôðíåííííåíííðíííèííßÝßíååÝÝÝÝÝÝÝÝÝÝÝÕÝÕåååÝÝååãßåãßðôåÝÝååÝååÝèööööôôðíöööôô¸ÂÀ±ªÀËÕ³±ÂËËÈÀ³±±ÈÕÀ¢¢ª³ÀÕÝÕÈÕÝÝ߸ª±±±±ªªªªª¢¢©¢šœ–Š¢Â±¢’†Š’œ’šªª¢¢ÀÂÀ±ºÀºËååȸ³©¢¢¢œªº³ –Š–ªºÈËÂÑÝËÂåLEE°åííððððííððíôðíèåíèÝåíííííèèíðôèÝÝåèåíôåÝÝÝÝÕÝÝÝÝÝÝßåèðèåèßÝÝßßåííßÝåèÝåßåíïüööôöíðööôððô˺ºÂÂÕÕ˸±ÂÑ˺¸±±ª±ÂÀ±ªª¸ÂÀËÑËÈËß帪±±±±±±±ªªª¢ªœ–œœ’¢ÀȪœš’¢œš±±¢¢¢³±±±±ª±ËÕÂ˸¢ªªšššªË¢šœœ¢±Â±¢ÂåÝÝÝ//3¥íðèðððííðððððíååèèååíðèåèååèèíèååíèååðííÝßÝåÝÝÕÝÝÝÝååÕååååÝÝÝåååèåíèååßååíööüööôíèåððôíððËÈÂÈËÑÝÕ¸¢±À¸À³ª±¸±±±ª³¸ÂȸÂÂËÂÝ庪±±±±ªª³±º¸ªªœ’šœ’’¢±ªš¢¢ªªªªšœ±±¢––’–¢À¸ª±Â³±Âȳªª¸–¢¸Ñȳ¢©¢¢ª±œšªÕÕßåE66¦íèíôðèíððñðíèåèííÝÝåèååíèåííååßåííåèååèíåÝÝßãÝßÝÝÝÝÝÝÕåååßÝÝåèååÝÝííèåååôþüüööðåßåèåíððôíÈÂÈÕËÕ˱¢ªÂ¸À¸¸ºÂ³ª±¸ºËÕËÂÈÈËË庭±³±±ªª³ÈÕÈË˳œœª’’œš––¢±ËȺš–¢±¢–’œ’ªÝº±Èª¸ÕË©±ª¸¢©ºÝ¸¢±±œœ©ªœœªÀÝÝÝåQYQ°èíððåííðððííåÝåèÝÝÝíííííííííååÝåèèôíåèíôÝÕÝÝÕÝÝÝÝÝÝÝÝÝååååååååÝÝÛßíðíååôúöööôðåßååéèåöôôðÂÀºÀ³¢­ÈÕÂÀÂÀ³ÀÕȺ¸ºº¸ÀÈËËËËÕÕº±±³±±ªª±ÂËååßÀ¸±š–œœ–’’–¢¸åÝ¢¢ ª¢––œœŠšÀ˺ËËÀÂÑÝÂœš–¢ÂÈÝË¢¢±¸ ’¢¢¢­ºåßåÝÕ>FYÉíôððððððííèÕÝÝåÝÕßííííðíèíððåÝÝÝÕÝíððíððåÝÝÝÕÕÕÝãßÝÝååååååååíßÕÕÝååíðííööôôôíåßåíèèåíööööºÂÈÀ±¸ËËËÀËȳª¸º¸±ºÈÀ±ºÂËÈÕßݱ±³±±±ªª³ÈÕååßÈÑÕ±œŠœ¢–’’––¢ÕÝȸÀº©œœ šš–ÈÝÀÀ¸³ÂÀËÝÀ–’¢ÀËݸ±¢¢ªª¢¢¢±ËíèãßÕÀqqY°ððíððððíðíÝÕÝååßåíèíííðèåèíåÝÝÝÕÕÕåíðôöôðåÝÝÕÕÝßåÝååßÝßåååååÝÝÝÝååßåôööôôôöðíååèííííôôôöôÀËÕȸ¸ºËÕÝ˺¸º±±º¸ª¢±¸ÀºÂËȺÈÛª±¸±±ªª­ºÕåßå˳Õ˸©³ªššœ––šœ³ÀËßåËÀ¢œœœœ¸ËË˺±À±œªË¸–’œª¢ªÀ³¢¢¢±È©±ÀåèååÝÈËddQ½ôèèðððíèåÝÝååÝååèíôðíéèíèååÕÕÕÕÕÕÝÝåèííðïèÝÝÝÝÝååÝßåÝÛÝÝßåðíÝÝÝèååååðöööôôôðíèíèííèíèèðíèÂÕÑËÂÂÀÀºÀ¸±ª¸ºÀ¸¸ªª¸ÂËËÑÈÂÂÕ˱±±ª±ª±ª±ÑèåÕ¸ÕÕÀÂÝ˪’–œœœ ––±Ýååè˱ ’œ¸Â¸ÕѸ¢œ©Âºª¢ªœ–Ѻšš ªËåËÂÝÝãßÝÑËÕqmdÉåèíííðíÝÝÕååèèííííðíååèíèåÝÕÕÕÕÝÝÝÝÝßèíôååÝÝÝååßÝåÝÝÕÝßåååðíßÝåååååíôöööööðíèåèåßåèååíååèÕÕÀ³ÀѸ¸º³­ºÈÂÀÂÀºÂÂËÕËÕÕËÕ±ºÛÕº±±ª±ªªªÂèÝÀËÈÀ³Õí墚––’œœ’’ËèÕÑÕÕ±¢¢ÀÀ¸ÕÝÂËÝÀªª¢±Àªš’œ¸º œªª±åÝèÝåèÝËÕÕËQYYÉííèåèååÝÕåíßåííííííßßèðèåÝÝÝÕÕÝÝÝßåÝÝåíèååÝÝßååÝÝÝèÝÝÝåååååèíååßßßíöööüôôèåíðíåÝåååèèèåååÛ˪±ÂËÀ¸ÂȺ¸ÂËÀ¸ÂÂÀÈÝÝȸ¸Ëݸ±±Ëåȱ±±ª¢ª¢±ÈÝÕݸ±ÀÂ˱¢š–– ––ªÝåȱººÀËÂÕÂÕÝËËÂÕ˱¢¢±ÀѺœš¢ªª±Â±±ª±ÝÝåèíåÑËÕÈË%/‡èíèåååÝÝííèÝÝååííííèíííåÝÝÝÕÝåßÝÕÝÝÝåååßåèíåÝÕÛÝííííåèèåÝÕÝèïíåÝÝíüöüööðåÝåèôðååååèíèåååí˸³ÀËÂÂÂÕÈÀÕÕ¸ª±¸¸±ºË˸±ÀÕ¸¢±±ÀÝÕ±±ªªªªª¢±ÝÝÂÀ±ª±¸Ëªšœš–šª±Ýݱ±¸ÂÝÝËÝåÕȱ©ª±œ’–¢ÂÀÀ¢œœ œ±Ë¸±ªºßåååßÕËÕËËÝLLL²ððððßÝßåèèåååèííííííðíåÝÝÕÕÕÕÝÝÕÕÝÝÝÝÝÝÝåíÝåÝÝÝÝííííååèÝÝÝÝåèííåíöüöööôèÝåèðôôïèèèíåßååå誱ËÕÈÂÈȺ¸À±±¸ºÀ³È˱ºÝ¸ª¢ª±¸ÂÕªªªªª¢œ¸ÝªºÂ±ªºÂÀ³ªªœšª± ³ÈËÀ±ºËËÈËÈÂ˸¢¢ª¢’– ª±ªÀÀª––œ±±ª±ÂååèåÝËËÕÈÈÝÝ>EL½ððððãÝèèÛÝÝèíèððíèåèååßåßÕÕÕÕÝÝÕÝÝÝÝÝÕÝÕÝíðÝÝÝåÝííííåÝÝÝÝÝåååðöôöüööíðåßåèíööôðííïíååíèåå±ÑÕÈÂȺ³¸Â¸¸ºººÂËÑËÂÂËݸ±ªª±±±³Õè˪ªªœ¢±¸ÀÂÀÕȺÂÂÀº¸œœœ±³ªœ±Õ˱À˸ª¸ÂºÂÕ¸ª¢¢œœ¢ª¢¢³Âȳ  ±ª¢¢¸ßåííÝËÑÕËËÝÝÂ><6›ððððßííåÕßíèèôðíååèåÝåèíååÝÝÝÝÝÝåÝÝÝÕÝÝÝÝÝÝÝÝåßÝÕÝåöèåÝÝÝÝåßÝåüöúüöôíåßååèïíôðôðôöååíöíèíËÕ˳¸ÂÀÀÀÀºººÀÈËÑÕÕÕÈÂËݳ³±±±±±±¸åÕ³¢¢¢±±±±ºË˸Ëȱ±’–¢­ª ¢¸Õ±¸±ªºº¸ÀÈÕËÂÀ œ©±ªš–©Â˺ÂÀ³¢¢³ãèíèÝÂËÕËÂÕݸLLL½ååÝÕåèåÝåíðððèåèèèèÝååèíííåÝÝßÝÝÝåÝÝÝÝÝÝÝÝÝÝßåÝÝÝßíöíÝÝÝåèååÝíöööôôðèãåååååôöôöööèåèíðíèíÝÕ¸¸ÂÈËËËÈȸ³¸ÕÕ¸ÂÈËÂѸª±ª±³±ª±ËÑÀª¢±³±ª±¸¸Èº±±¸Ë¸œš©¢œœœ¢ÀÕ˺±ªºÈºÈËË˺Àªœ¢¢œ–œ¢¢ª³Õݺ¸åèííÝÈËÕÈËÛÕÀº±QYZÉåÝÝååÕÝåííððèååèèèèèíåÝßðôåÝÝÝÝÝÝÝÝÕÛßååÝÝÝÝÝÕÝÝßãèíèÝÝÝÝÝÝßíôüöðèðåßåèååßåðöööüíåßåèíèåðȺËÈÂËËÀÀÂ˱¸ÂÕ¸¸ÂѳÀÕÕ³±±³¸±ªª±Â¸¸¸±ª±¸¸±¸±±³Ë˱œ¢³¢š ¢ª³ÕÕÀ±¸ËÀ¸Â±±±À¸Â³±©––š¢¢šš­ÂËÀÀåèíèÝÈËÛËÂÕ˸³¸±YQE°ððððåÕåèèíðííåèèèèèíèÝååíèååßÝÝÝÝÝÕÕÝåßÝÝßåÝÕÝåßååååíÝÝÝÝÝåôööööíííåååíåååååôööðííååèååíüª³ÀÈËÝÕÀª±º¸±ÂÕÕº¸ÂÕ¸±±ÈÕ±³¸±±±±ªª¸ËÀ±±³¸³³±³ª±È˸¢±¸±©¢¢œª¸ËÀ±ÂÕ¸ª¢¢¢±ÀÂÛݺ±œ ªª¢œª±ª±ÝåèííÝËËÕËËÕȱªª¸º///ððððååèíèåèååíôíÝÛßåßÝèííåííåÝÝßÝÕÕÝßåÝÕÝãßÝÝÝßÝÝßÝÝèöðåÝåíüöüööôðííåèôååååèíèéèððíôíèíöö±ÀËËËËÀ¸³¸ÀÂÈÕÛËÂÕÝÀ±±¸³ÕÕȸ±ª±¸±œ–ºÕ˱¸º¸±¸³©¢Ëݸœœ±±ª¢ªª¢±ËÈÀºÀ¸¢¢©ÂÂÂÕåÝݺ¢©ª±±±±ªª³åèíèåËÈÕÕÂËÀ³ªª¸ÂÈZYZÉððððßíððíåèèèèèåÝßåååííðíðôöíßãßÝÝÝååÝÝÝÝÝÝÝåååÝÝÝÝÝíôôèåôööôööôèåèðííððèåèèååèôööôöôðüúüËËÈÕÀ±³ºÈËÂÕÕÝÕÀÀÕÀ³ª±±­ºÝߺ±±³±¢’š±ÀÂȸ³±±±ª¢Âºœœª± œ–š¢¢ÈÝËÈ˱ª±ªªª¸ËËÝÝÕºÀ˱œš¢Ë˪ªºåèíèåÑËÝÕÂÈÀ³¸¸ºÂÈÕqdYÉèåÝÝååíððèèèèèÕÝåèåèííððíèðôíåÝÕÝÝååßÝßíåÝÕÝÝååÝÝÝÝåðôôðôúöôðôðåÝååííöôôïååãßåíöööüúðöööþËÝÝÕ¸±ÀËËËÕÕËËȸ³±ªªª±±¸ËíÕ¸³±¢š–¢¢¢ÀÝ˸¸±±ª³± œœ©ªª–šœœ–¸ËËÝݱ±ª±ªªÂÀËѺª±Â±–œ±ÕݸºåíííÝËËÝÕÀÂÂÀ¸ÀºÈÕÕË6>?°èåÛßåèèíååèèèèÝåèåíðíèííåèííðåÝÝÝÝÝÝÛÝåííÝÝÝÝßÝÝÝÝåååðöðööôðôôåÝßååßßíúüöíåßßåíööôööôôüöôËÑÕºËËËÈÈÕȸºÂ˳±¸³ª±³¸¸¸ÑÕÕª¢ ¢¢¢¢¢¸ÝÕ³¸±¢±¸ª’œ±±±ªšœœ ±ÈÂÑÕ¸Ë˱±ª¢¢±À¢œª¸ÑÕ¸œª±³ÝÈåèíèÝËËÕ˸¸±©±Âº±¸Õ˺?LQÉååßåèíåÝèèèíßÝèåíåèíååèíèííððååßãÝÛÝÝÝÝßííåÝåÝÝÝÝÝßÝÝíöôôôöôöíÝßååÝÝåèðöööåÝåíèíôðôôöööööÕ¸±ÀÕÕÈËËÂÀÀËÕÀ¸³¸±³¸¸º¸±ÂÝÕ©–œª¢¢ª©±ºÕ˳ªª¸±ª¢ªªªªª¢œ¢ÑÕÂÕݺª¸Ëݱœœš±¢¢ ºÝÕËѸ±ªªåèííäåÕËÕ˸ȳªª¸¸©³ËÕÀªdYYÉííèíðôåßèèèÝÝåííèíèååííðððððíôííåÝÝÝÝÝÕÛåðííèÝÛÝååÕÕÝïôððôôöðåååííßßåíðôôðííèèèåíôðôöööüöÕº±ÂËÈÂËËÕÂÀËÕ˸ºº±±¸¸º¸±±¸ÂÀ¢œ©¢¢ª±±ª±ÑÝÀ³¸±ª±¸ª¢œœœœ¢ÕåÕÝÝÕ¸³ÈÕÕ˱œœ¢ª¢¢±ÈÝÕËÕºªª¸èíðíåÕËÕȸ¸±¸ÂÀºÈÕÕ¸¸YYR½ßåèðöíåíèèèÕÝèåèíèèåíððííðôíåíöïèßÝßÝÝÕÝååðííßßååÝÝÝôööôðððíßÝåèôíåååíððííðííåíèðôöðôööôðÕÂÈËѺÈËÂÂËÕÕÕº±±³¸¸º¸³±³±¢ª¸Â± š¢¢¢±±ÀÕÝÀ³ª±ººªœšœšœÀÝÂÈåÝËÈËËÕÕ¸±¢©±ª¢±ÂËË˸պª¸èííååÕÂ˱ª¸ª±ºÂËËÕåÕºÝFL>›ååèíåÝåððååååíèåååèíððíåèíåßåíôíåÕÝåÝÕÝßÝåèôåèíåÝÝåöúüöôöôíåÝßåååèåèèíååèööôíåèíööôðíðôðíÀÂÝÕÈËÈËÈÂÈÕÝÝÝȱ¸¸Àºº±±º±œœªË˳œ¢ª©ªªªªËåѪ±¸À¸ªœœš¢ÂËÀËÕËÂÂËÕÕ˸±¢¢ª±ÀºÕº¸ÈÀºåííèßËÂÈÀ¸±±±±ºÀÂÈÂÑÕ¸ÀÀYQYÉåððÝÝåíèåÝåèíèíååèííôðíèíèååíððèíåÝÝÝÝßÝåÝååöôíåÝÝíúööíðôðíèèååÝÝíååååßåôööôðíðöüüöíðôííðÀÈÂÂËÕÝËÂËÈÕÝÝÝÕº¸¸ÂÀ³±¸±¢šœªÀÕÕ¸±¢ª±¢œ¢±ÕÕº¸º¸¸¸¢ ¢ËåËÈÕÕÀ¸ÂÈËËȸÂÝѸœ¢ª±±ÀÀ±³³ÈßèíèåÕÂÀËÂȸ±ºÀÀºÈÕ˺±Àº±>EL½ððíèèèèßÕÝßåèíèíííððíííðííííðððííèÝÝÝÝåååÝåíööíßåíööôíððíèíðïååßååèåßÝÝåèôôöüðüöööôôôðððôËËȺÕÕËËÕÝËÑÕÕßÝ˸ºÀ³±³±¢œœ¢¢¢¸åº±±±¢œ ±ªºÕÕº¸±³±¢œÕåÑÝåÝÕºÑÕ˸¸ÀÕÝÕ±¢¢œ¢¸³±­¸ÝåèíåÕËÀ³±¸ºª¸ÂȺÂËÕËÂÀº¸ÀLE>›ôíåèèèèãÝååèåèíèíöôíåèèííððôôíèíðôèÝÝÝÝÝÝÝßèôðíôðöüüðððíåÝååôíååååèíåååèåèôôöüüöôôðöôôðööËÈËËÕÕËËÕÝÝÕÕßååßÀÀ¸±±ª¢¢ª©¢©ª¢¸Â±±¢œ¢ª±¢¸ÕöѸ³±±¢ºÝËÂÝÕѺ¸¸ÂË˺ºÕÕÂËݪœ¢±¸¸ªºÝåííèÕȸ±¸ªªª¸ºÀºÈÝÕÂÀËÈÂÀËQL>¥èÝßèèèèåèèííåíèíííðèåèíèèííííèååèôíåÝÝÝÝÕÝååååðöüüöðôöíåÝÝßååíèååíèåíííèåèíððööôððôðíððôôÑÕÝÝÕËÂÈËÝÝÝåååíí˸±¸ª¢œ¢ªª¢ª±¢±ÕË¢œ¢ª±ªª±ÀåÝ˱±³ÕåÀÀÝÕ¸±¢ª±±ËÑËÕÕÀ³ÂÝÛ±œª¸³±ºååèíèÕÀÂÀ±ºÂªª¸ÂºÀËÝÕȺÈÀ¸ÂÕÑ666°ÝÝííÝÝÝååíííííííèèíèíèéíèíèíèåååííðíåÝÝÝÝååÝÝèöüööôðððèååßååßåíèååÝåíöðèíííððôôôðôððèíðôðËÕÝËÕÕ˸ËÝÝååååèíÀ±±±¢ ¢¢ ¢±¸±±¸È庱­±¢¢ª±¸ËåÕ±±ÝíåËÕÕȱ¢¢ªªª¢ÂËÝ˸ÀÑÝ˸¸¸³±ÀèåííèÕÀ¸±±ÂÑÀ±ÂÂÈÈÕÝպȸº¸ºº/%%{åííßÝÝåèèííèèððèíèðííðíðíííèíèèíèèåðíåÝåååÝÝÝïööôðíðôåÝåíåååååííåÝßåèôôèèðöôôðöôöôðôððôööËÕËÈËÝÀ¸ºÀÕåèåèí߸±¢¢ª¢¢¢ªª±ªª³±À¸Â³¢œª±±³ºÝÕÂÝðéßÝÝÕ±±±¸ªœ³ÑÕËËËÕËÀËÕݺ±ºèííííÕ¸³±±º³ª±ÈÈËËÝݸÀº¸À³±À>><ðíèååååííßååèíðíííðíåðöôðíííååíííåèííèÝßåÝÝÝðüöðèíðôèÝÝßíïèååèðôèååíèèôðíöüööôôðíôöôôöööôÕËÈÕÕ¸¸ºÀÂÈÕèíåÝÕÕ³œ–¢ªª©±³ª¢¢±ª¢±È˪œ¢ªª±±¸¸ËÝíååíÕÈ˸±±Âª³ÛÝËÑËÕÕÂÀÕååÀÀíðíðèݸÀº±¸Â± ±ºÂÂËÕÕÀ±ÀºÀȸºÕEE>°ååååèííííèåíððííðôíßåíðíííðèßåèíèåíðíååßÝÝÝíöüðííðôöèÝÝßíðååßåèííííèååíööüööööðíèèôðôöööôÕÑÕݸ¸ºÀºÀÀÂÝåßËÕÕ±– ±ªª±Ëº±ªªª¢¢ª¸Â¸©ªª±±±±³åíèåðèÕȺªªª¸¸ªËÂÀºÂÑȺºÑÝÝËÂèíðíèÕ¸À±¸ËÀ³³ºÂÈËÕÕ¸ºÂÀÀÀËËËÕËQFE°ßåÝßåèèèèííððíååííååíðíèååèååèíèåèðôðôíÝÝÝíïüöðíðôðôíåßåèíååååßÝííèååííöüöôðôôíèíôôððôöôðËÝåÀ¸ÂÂÂÂÂÂÂÈËÈÈÕ¸ªª±ª±³Ñºª¸³ª©ª±ªÀÝ˱ª±ª¢ªÝöíåíèåÕÕ¸ªª¢œª³±¸±±¸ÂÂÈÕÝÕËËãèíôè˸ºÂ¸¸Âºª±ÈÈËÕÝÝÂÀËÑÀºÂ¸³ÀÕÝÑ66/¥ååÝåèåååííðöôèåíèííðððíååååèííèíèíííðöíåÝíöþöôôöðôèíèååíèåíðèåÝåèôíèííöúúöðôððííðôðíôôöôôË˸ºÂÂÂÈÂÀº±ºÀÀºËȳ±±±ª³ÂÀ±ª±ª±ª¢ªÂ˺¸ªœ¢ÈðððíèãËÈÕ±±ª¢­¸±¢ªªªªÂÝÝÝÈÂÕåíííÕ¸ËÕººÀ±¢±¸ÂÕÝÝÕÈÀÂÀºËËÀ±ÀËȺÂ>>6¥íåÝèííåèðííèåííèíðíðôïíèèåèííííèííèíííðôôöüöôððôíßÝåíèååååíüïååèíðöððöôöôôôðððíôööôöðöôöö˺ÀÂÈÂÀÂÂÂÀ¸ª±³±±ºÈ±±±±ª±ÈÕ±¢ªª¢œªªÀËȸª Âíåíðíß˸ºÀÕȱ±±¸±¢¢ªªª©ÂåÝËËÕÝÝåßÕ³³À¸¸¸³ª±ºÈËÈÕѺ¸ÂººÀËÀºËËÀ±ÀEFE°èåíííííðôèååèðíððíèèííèèíèíèåèèèíííííèèôöööððôíèååÝÝèïåÝÝååððåèéèðüôöôðôððôôðííððöööööôðôÕÑÈËÂÀÀÂÈÀ¸ªªª¢©ªºÂ±¢ª±³¸ºÕ¸¢¢¢¢ªªªªºÈ³¢Ëíèßèíå˸¸ºÕÝÕ˱³¸ºª±±ª¢±ÂåÕËÕÝÝÕÕËÀºÀ³ªª±ªÀËÈÕÕËËÀºËÂÀ¸À¸³ÂÝÑÂÈÂÀEEF½ÝåèððèíôôèåèôíèðôíèííèååèííååååíííðíèííðöôôðôíåßÝÝååíôèßåååßíðíèíðööüöôôöôððôðíðôôôôöôôôôíßÂÂÈÂÂÂÀ¸ª±ª œªª±À˱ª±³¸¸¸Ë˸ª¢ª±±³¸±¸ÕÂííèååÝÕÀº¸ÕèíÕÝÂÀºÈÂË­ª¸ÂÝÕÕÝÝÕ¸±ºÀ±¸ª¢±ºÈËÕÝÝݸÕÑÀÂ˺¸ÀËÕËËÕÕÂLLE¥åèíííåèíðííððåååííííèåÝåííèåèååíððíííðôðôôôôðèåÝåÝåèèíðíèåßãèíèèèíðööööôôíåèíððôöðððôöðööííåËÂȸ±±¸¢¢ª±±±¸Â¸¸³¸³¢¢¶ß˳±¸±ª±±±±ÝíÝÕÝÕÕËÀºÀ¸ßãíåÝÂÈå³Àݳ¸¸ÂÝÝÝÝÝ˸±Â¸ÀËÀ¸¸ËȺÈËÕËÈÕݸÀÂÀÀËÕ¸³ÈȺÀME>¥åíðíåèíðííðôôèèííðííèååííèåèððíððíÝßíððôðôëíèåÝåèèåååßíïíååèååíåíðôööôöööèèíðôöööôôôöôôööèèíÕÈÂÀ¸ªª³±ª±±³±ª³±³ÀÀº­¢¢¸ßÀ¸±±ª¢ª¢¢ËèåÕËÕÕ¸Àº¸ºËíðèÝÝݸª±Ëº¸³ÈíèåÝÕȺÀ˺±Â¸±ËÕÕËÀËÕȺËÕ¸±¸¸ÀÕÕ¸À˺ºÈ>>>¥ððííðííííèíèííííððèíåèíèíååíííöôðååèðôðíððôåÝßÝßíïåßÝåðôðíåíèíèíööööôðíðíííðôöôöööööööööôååðåËȸ±ªª¢ ª³¸³±±±±±¸º±ª±±±Èº¸±±ªªª±ËèíåÝÝÕÀ³±¸¸º¸ºÝôèÕÝÝÀª±±º¸±ºèííݸ³ÈÕÀ±¸±ª³ÂÕÕËÝÕÂÂȺ¸³¸³¸ËÕÕÂÀÕÕÀ¸ÈÀ?EE½ðôíèôôðííèßåèíðôôèÝÝåííðèååÝíííðíåíðôðíåíððèåãßåíôèååèôööíååèííïöüüôðíèåèðöööôðôðôööôöôííåííåݺ±±±¢¢±±±±±±±±³º¸¢¢ª±³±ÂÝÀº±ª±ÕíåÝÝÕÕÝÀ±±ËÂÀ¸¸ÀÝååÕ˺±±ºÀ¸ºíííå˺¸À³±¸¸±³ÈȸºËÕÕËÛ˱¸ÀÀºËÕݺÀËÕÈÂ˺À6>E½íèèíðèèíðååíðôðôíåßåííèãååíÝíðíÝßèôôôôíèðôôíåååååèååèïôööôðííèðôööôôðíèíðôôööôððôöôôöôðððèååßÑ¢ª±ªªª³¸±±º¸¸¸ÀÀ±¢¢±±ª±¸ÕÝËȳ±ÝíèÕÕËËËÂȪÂÝÕÀºÀÀÂÝåÝÕÈÂ˺ÂÀåðíèÝȸÂ˱©¸º¸ÀÈÕ˺ÈÝÑÂÕÕºÀÂÈËÝÝÀ¸È˺ºÀÀºËZYQ½ðåíííåèðííôðôðååßååíííßÝåíðôðíèÝåðôðððôíèååèíèåååãßåíôöüöööôôðôöüððððíððôôíôðôôöööôðôððôöåÝßÝ˪±ª±±º¸¸±¸ËºÀº±±±±±±¢ªªÂåíÕ±ËåßÝÕÕÕÂÀ±¸¸ååÝËÀº¸¸ËÝÝÑÝååÕÈíððíåÕºËÕ±ºÀºÂËÕÕÕÕÝËÂÀȺ¸ÂÑËËËѺ±ËËÂÀ³¸ÈÕYQE°ðððíèíííðíðöôíåßåèíððååèððôððèèíôôðííííèèåÝåèíååÝßåíèöüöüöüöööüöôðôððíôööðððôööööôöôôðôööåÕÈËËȺ±¸³±¸±±ºÈÝÕ±±ªª³¸³ªªª±ÈßåËËåÝÝÝÝÕ¸±±³ÈååèÝÀº¸ºÀËËÕßíåÕèíðíåÕÈÂÈÀª¸ÂÀÂ˸ºÂÕÝÝËÕ¸¸ÀÀÂÂѳ±ÑÝËÀËÈÀËËËQLE¥ôðôðððððíåííðèåãèïííåÝåïôôðåÝåíôöôðèííèåãÝÝßíðíååååíöúöööôöööüöööôðôíèíðôôôôôööôöôôöðôöíðËËÀÈÕÝË˺±³±±³¸ÂÝݱªª¸³±±±±±±ÈÂÕËèåÕÝÝå˸³±ª±ÂÕÝåðݺº¸±±ËåååÝíííèíÝËËȳª¸º¸ÂÑËÀÀÕÝÕÂÝո³¸ËÕº±ËßÕ±ËÕÈËÕÝÕLFL½èååðíèííðèííèåèííðèßÝåíðôðíßãíðððôðíðååÝåßåíööðíèèèåðôúöðííðôðôôðííðííðôöôööööôôôðððôöôðíÕÂÂÕËÑèÛ¸±¸³³ÀÀººË˺±¸±œªª±³º¸ÂÝååååå媱ªªª±³ÀÕååíѸ±±±ËÝÝÝåííååÝËȱ±¸ºÀÂÀÂÂËÕÝÕÀºÈÀÀÂÈËÀËÕÈÀÕåÕª¢¸ÀÂÀÂÕÈEEE°ßåííååíðíððíååèðôåÝååðôôíèååíðôôèèíöíèåÝèåíôüôðïåååååíöôííðíííððíèíðððôöôðôööôðöôðôôðôððöËÝÕȺÈÝȺ¸¸¸ÀÂÀ¸±ÀËÝÕª¢±±³¸¸³ÕíåÝÕÝ媢±±±³¸±ºÝååèݺª±¸ÂËÕÝßååÝ˸¸º³±ÀÂÀÂËÀÀÂÕåÝÕȺºÀÂËÈÕÝÈÀËÝݱ©¢ªºËËÕÕÑ>E?°¤ŸŸŸŸ¤«««Ÿ“€rpz‰Ž—˜˜˜˜Ÿ¤¤¤¤¤¨¨®´´®««¨«´·»ÄÄÄ»»·´®«¤Ÿ˜˜—“ŽŽ‹„€zrkcacpz„Ž—˜ŸŸŸŸ˜˜åßÝÕÝÝåÕÈËÕÝß˺³³¸ÂÂÀÝèåßÈÂÕ帪ª³ÕËÀ³¸¸ËÝѺ¸¸¸ÕååËíðíèíåÝÝÝãÕÕÝÝËÀ˺ËÝÕÕÕÝ˸ÂËËËËÑÈÀºÕ˱±ªºÑÕËÀ±¸¸±³³ªÂåÝÕ//%›´»»·´«“Ž“———Ž„~uuz„‹ŽŽŽ‹Ž—ŸŸ¤¨¨¤Ÿ˜——˜Ÿ«·´´«¨Ÿ˜—Ž““˜Ÿ¤ŸŸŸ¤¨¤¤˜“„€xniaUU^cfipu€Ž˜ŸŸŸŸ¤—ÕÕÝÕÝÝÝËÕÑÝÝÕÑѺ¸¸À¸ÝíðíÝÂÕåݸª±¸ËÕ¸º¸ÀËÝ˸¸ºÂÝíèíååååÝÝåßÕÕÝÝÝÕÈËÀËÕÝÑÕßÕ¸¸ºÈÈËÕÝÂÑÕ˳±ªª¸ËÑÂѺº³¸¸±¸ÕåÝÝ//%›´·´®¨˜“‹„„„„„‹‹ŽŽ„‰‹Ž“˜Ÿ¤¤¤ŸŸ˜˜Ÿ¤«««¨«®®®®®®®®´®«¨¨¤¤¤—Ž„„„„„„„€€€„ƒxzuric^USUiu€„ŽŽ““ËÕååÝÝÝÝÝßÝÈÀËåÕ¸ÂÀÕßåííßÝåÕÕº¸ºÀËÕÕÈÂÀºÀÕÕºÀÈËËíííèèåÕÕååÛÕÝÕÛßÝÕÕÕãßÕËÑÕȺÂÈÕÂȺºÕåݱ±±±³ººËÝÝÈÀ¸³±¸¸ÈíèÝ666¥´´«¤˜““—Ÿ«««Ÿ—“‹ƒ€„‹‹‹‹‹‹‹Ž“—˜Ÿ¨««¨¨¤Ÿ¤ŸŸ¤¨«®®®¨ŸŸ˜—Ž‹„€pc^^cirxxu~€„‹—¤¤¨¨¤Ÿ——˜¤ÕåèååßÝÕÝåÕ¸ºÕåÝÕÂÝÝåèåÝÝÝÝËȸºÈºÀåèËÀºÀÂÕÛËËÕðíèåÝåÝËÕÝÝÕÝÝÕÝååÝÝÕÝÝÝ˺ÂÈËËÕÂÀºËÝݱ³³±±±¸¸¸ºÕÕº¸³Àº³¸ÕÝÕ//%›·´®¨—Ž‹„‹ŽŽ““—˜˜“Ž‹Ž“¤«®®®¨¤¤¤¤¤¨¨¤¤¤¤¤¤¨¨¤¤¤ŸŸ¤¤¤ŸŸ˜˜˜————““ŽŽ‹„ƒzuxuz€„‹—Ÿ¨«¨¨¤ŸŸåèåÕÝåÕËËËÀÂËÝèíïåôíèåÝÝ˸±¸ÂÂÈÂÀ±¸ËðÕºÀººÝðÝÕðåíåÕÕÂÂÈËÕÝÝÝÛÝßÝååßËÀËÕÈÂÈÑËÝåÝȺÈÝѪª­±±ª±³¸±±¸º¸±±º¸±¸ÕåÕ%%´®«¨¨¤¤Ÿ˜˜Ÿ˜“Ž„„„€€„‹Ž˜Ÿ¤Ÿ˜“Ž‹Ž—˜—“““—˜Ÿ¤¤¨¨Ÿ˜—ŽŽŽ‹„„€z€zupppuzƒ„„‰‹Ž—˜Ÿ¤¨¨¨¨¤Ÿ¤¨9 200 130 1 +‰ƒww|wqwqjnw|ƒƒ~ƒ‰Œ‰Œ†ƒqa\\\awƒna^ch|ƒtchj|Ž|Œ‰‰†ƒnjhqqjq||||||ƒƒ†ƒqqwwnqtqjn|qjw‰~a\a\\a^aca\\aa\Xaa^aaw†ƒQ””‘Š‡‡€zr`YY_krz€„}zsv}‡ŠŠ‡‡ŠŠŠ‡ŠŠ‘‘‘‘Š„}vvsrd_WWW_mv}}€„‡ŠŠ}mdkrz‡‘‘””‘ƒ|w||||qjqw|††|wƒƒ†||ƒ~h\\aact~|njjhj||jhn|Œ‰Œ‰†‰ƒnjwwnwwt|ƒƒ~|ƒƒ‰ƒ|wwqq||njqnch||wjqhjhachhhcca^\^aaacjw||++%eŽ‰‰ƒ‰ŽŒ‰‰†ŒŽŽŽ“Ž’Ž‰ŒŽŽŽŽŽŽŒŽŽŽŽŽŽŽŽ“““ŽŽŽŒŽŽ“ŒŽŒ‰†‰‰‰Œƒ||||ƒww||wwwƒ|||ƒ|nwwc\ajcchcj||njhjnqjjq|††ƒ|||qqwwnjwwq|ƒƒƒƒ†ƒƒ†ƒ~thcjqqtqjhqwahqw||qachcahhaahcaaaacnwqVŒ‰††ŽŽŒ‰†‰ŒŽŒŒŽ‰“Œ‰ŒŽŽŒŒŽŽŒŒŽŽŒŒŒŽŽŽ“ŽŽ““ŽŽŽ““’Ž‰†‰†‰‰Œ‰‰ƒ~|††thj|ƒ||ƒƒ|||~qwwha\c|whcac||qjjhcjnn|‰‰ƒ|wwqqt|wchcqq|ƒ†ƒƒ†ƒ~‰ƒwqchqtwwjt|q\aahw†ƒ|qwq\aa^ah^ahcaahhjq!!%eŒ‰†‰ŽŒŒ‰ŒŽŒŽŒŽŽŽ‰†‰Œ‰ŒŽŽŒŽŒŽŽŒŽŽŒŽŽŽŒŒŽŽ“““’Œ‰‰‰ŒŒŒ‰†ƒtw|wccq||||ƒƒ||ƒw|‰n^\\awƒjahj|ƒ|tjhhqnwŒ‰†ƒ~|wnwwqqhhnqww~ƒ‰†ƒƒƒƒƒ|qnjw|qwwƒ|a\a\\nwƒ†‰||ch\^a^\achccaaj|Q†‰‰ŽŒ‰ŒŽŒŽŒŒŽ‰‰†‰ŒŒŽŽŒŽŽŽŽŒŽŽŒŽŒŽŽŽŽŽ“Ž““““““Ž‰ŒŒŒŽŒ‰‰|q|wjatƒƒƒ~†ƒ|~|twƒ~wca\cwƒnjqwƒŒŽ~njqww‰‰‰ƒ|wnw|whcnqjwww||ƒ‰†ƒƒƒƒ|ƒ|q||whn||^\ca^\cnwƒ‰Œ‰|qhh\\achhjna^a|E†ŒŽŒŒŒŽŒŽŒŒŽŽŒ‰†ŒŽŽ“ŽŒŽŒŽŽŒŽŽŽŽŽŽŽŽŽ“““ŽŽ““““’“ŒŒŒ‰Œ‰ŒŒ|~wqnwƒƒƒƒƒƒ~|wnw||jnhccnjjcnqƒŒŒŒŽ||||ŒŒ†ƒ|wjhq|jhjqqw|wqq|†ƒ†ƒ†~||~|||wcjwwa\\\\aaajnqƒ|†ƒ|ƒ|jchhccaaa^aqVŽ“Œ‰ŽŒŽŽŒŒŽŽŒ‰‰ƒŒŽŽŽŽŒŽŽŽŒŽŒŽŽŽ““Ž““’“““ŽŒŽ‰Œ‰Žƒ|wt|~‰†ƒ||wwwqwwqa\hqqqqhhhj|ŒŒŽŒŒŽ†ƒŽŒƒ|||jjq|qjjnww|||qt||ƒƒ‰ƒ|||ƒƒƒnah||^\^XX^cajhcawwq|†|ƒ|||qha^\^ahnFŽŒ‰ŒŽŽŒŒŽŒ†‰†ƒ‰‰ŽŽŽŽŒŒŒŒŒŽŽŒŒŽŽŽŽŽŽ““““’“ŒŒŽŒ“’“ŽŽŒŒŒŒŽ|qq||ƒƒ||||www||nc^^hwƒtjjnj|ƒ‰ŒŒ‰ŒŽŽ‰Œƒƒƒƒ|nwwwqt|wwqnqwt|||ƒ†ƒƒƒ|~ƒ†ƒhc|ƒaaa\\aahcjjhahhq|||ƒ†|ƒwna^ahnqcK“Œ‰ŒŽŽŽŽŽ‰†ƒƒ‰††‰ŒŽŽŒŒ‰ŽŽŒ‰Œ‰Œ‰ŒŒŽŽŒŒŽŽŽŽŽŽŽ“Ž“’“ŒŒŒŒ‰Œ’•Œ‰ŽŽŽŒwnqw||ƒ|||ƒ|w|ƒjcahhj‰†ncjqqtŽŒ‰Œ‰Œ†Œ‰ƒƒƒ|wwƒ~qjjt~|nqtw|||~|ƒƒ~|ƒƒƒƒwq||wcaaachjhaaacjccqnqƒ‰††‰|qa^hqjcaKŒŒŽŽŽŽŒ“Œƒ~ƒ‰††ƒ‰‰ŽŽŒ‰Œ††‰ŒŽŒŒŽŒ‰Ž‰†‰ŒŒŒŒŽŽ“ŽŒŽŽŽ“““ŒŒŽ‰‰‰ŒŽ“’ŽŒŒŒŒŽqww|ƒ††ƒƒƒ|w|†n^\nhjƒŽ‰qwqtjj|ƒ‰Œ‰†ƒƒ†ƒ†‰†|qqnwnjnqwwwqw~||ƒƒw|ƒƒ|ƒƒƒw|ƒƒ|qhX^accjh\^chaanjjw|ƒƒ†‰ƒqnnqnhaa  8ŽŒŽŒŽ“ŽŒ‰ŒŒ‰ƒƒ††ƒƒ‰‰ŒŽŒŒ‰Œ‰ƒ†‰Œ‰ŒŒŽŽ†‰ŒŽŽŽŽŒŽŽŒ‰ŒŒŽŽŒŽŽ““ŒŒŒŒ‰‰‰ŒŒŽ•“ŽŽŽŒŽŒq|†ƒƒ‰ƒ|ƒ†wwƒ|a\a|qw|†q|†wnjnt~ŒŒ‰ƒƒƒ|ƒ|qwwjhjqnnwwww||~||w|qtw|††ƒ~w|‰‰|qqcaca\aacaaha\cachqwƒ‰‰~|†ƒ|qjaaj1ŒŽŽŽ‰‰††‰‰‰‰†ƒƒƒ‰Œ‰ƒƒ†‰‰‰‰ŒŒ†‰ŽŒŽŒŒŒŽŒŒŒŒŽ‰Œ‰Œ‰ŒŒŽŽŒŒŽŽŒŒ‰‰†ŒŽŒŽŒŽ“ŽŒŽŒŽ|ƒƒ‰†wwwqq|ƒh^ajwqwjqt|ƒ|qqqqw‰‰ƒƒƒ~ƒ|ncqqhjtww||wwqq|ƒƒ|qqqww|‰‰ƒww†‰qq|njqha^chchjcaaachchjq|||ƒŽ~jachqIŽŽŽŽŒŽŒ†ƒƒƒ‰Ž‰†ƒ||†Ž‰ƒ~ƒ‰ŒŒŒŽŽ‰‰ŒŽŽŒŒ‰ŽŽŽŒƒŒŒŽŒ‰ŒŽŽŽ‰‰ŒŽŒŽŒŽŽ‰†‰ŒŒŽŒŒŒŒ’ŽŒŒŽŒƒ‰ƒ†ƒ||wqw|ƒqhcjqwqnjqqw||wnqqw†‰†ƒ|wƒ|jqwwqtw|w|†|ww||wwwwtqwwwƒƒ||‰‰qjqww|wjhhhhjhjhjhchjajhjjqwƒŒ|najqw +ŽŒŽŒŽ‰‰Œ†~|ƒ‰Œ†ƒ|ƒ‰ŒŒƒƒƒ‰ŒŽŽŒŽŽŽŽŒ‰ŒŽŒ‰ŽŽŒŒŒŒŽŽŽŒŒŽŽŽŽŽŽŽŒ‰‰ŒŒŒ‰‰ŒŽŽŒŒŽ‰‰ƒ||||tw‰ƒ|qqhnwqjhtwqnj|ƒ|qw|‰‰ƒ|qqqqtw|w|ƒƒ|qnwww||wtww|w||wqww~‰qhjh||||ncjnjhaajjhjnjhjqhhjwƒ‰|~qtqtq 1Ž‰†Œ‰†‰‰‰ƒ||††ŽŒŒ†ƒ†‰ƒƒƒ††ŽŒ‰‰ŒŽŽ‰ŒŽŒ†‰ŒŒŽŽ“Œ‰ŒŒŽŽŒŽ“Œ‰Œ‰‰‰‰Œ‰‰Œ‰ŽŒ‰ŽŒŽ††ƒ||ƒw|‰†ww|wqqqhajqwqjnw‰†wƒŽ‰ƒwqww||~|wqw||jqww||||ww|wq|wwqnq‰Œtjjhj||t|j\acja^q|qjjjnqqnhcnqt|w||†|tjFŽŒŒ‰†††ƒƒƒƒƒ†ƒŽŒŒ‰‰‰ƒ~|ƒ†‰ŒŽ‰‰ŒŽŒŽŒŽŒ‰ŒŒŽ“ŽŒŽŽŒ‰ŒŽŽŽŽŽŽŒŽŽŽŒŒ‰‰‰ŒŒŒ†‰Œ‰ŒŽƒ||ƒƒwwƒƒqhwƒ~|wjjqw|†nqqq†“ƒŽ‰ƒ~wt||tw|wnqwwqt||~ƒƒ~||wtjtwwqqƒ†tjjhjnqwƒƒjacjhahq~wnhnqqnccqtqjcawŽ|jh ?“ŽŽŒ‰‰||~†Ž‰†ƒ†‰ŒŒ†ƒ|ƒ‰‹‰ŽŒŒŽŒŽŽŒŒŽŒŽŒŒŽŽŽŽŽŒŒŽŒŒŒŽ“ŽŒŒŒ††‰ŒŒ‰†‰†‰‰‰†‰‰Œ‰‰ƒ~ƒ~|wƒƒqjq|ƒ‰Ž|wƒ‰~|Œ|qqt‰ŽŽ†ƒ|w|ƒ~wjqwtqw|||~ƒƒw|w||w|wqwwqnƒƒwhqjjqqqw†‰wjjhcjqn|Œ|w|wjhhnqqnacjw‰†|jcKŽŽŒ‰Œ“†ƒ|ƒ†Œ‰ƒƒƒƒ“Žƒƒƒ†“ŽŽŒŒŽ‰‰‰ŒŽŒŒŽŒŽŽŽŽŽŽ‰ŒŽŒ‰ƒ‰†Œ‰ŒŽŽŒŒŒ‰Œ‰‰‰ŒŒ‰†‰|ƒƒtq~ƒ|qq|ƒ††‰‰Žƒ|wwwtw|ŒŽŒ‰~|||w||qqt||w|||w|ƒƒtwwwtqqw|wqqq||qjjnqtqqwƒŒƒtnchhhqtŒƒ‰†qhcqqtjachtwwtjww  8ŒŒ‰ƒ†ŒŒ†ƒƒ†‰ƒƒƒ~ƒ‰Œ‰†‰“““ŽŽŒŽŽŒ†‰ŽŒŽŽ‰ŽŒŽŒŽ“ŒŽ‰‰Œ‰‰†‰‰‰Œ‰‰‰ŒŽŒ‰‰‰‰‰ŒŒ‰ŒŽ‰†|q|ƒ|qwƒ‰‰ƒwwŒ‹ƒwqnqtqw†Œ†‰||wqqtww||w|ƒ~tww||wwwwnjtwwww||qwwnjqqqqqq|‰wcjjhcjqƒ‰ƒhcqtqjcchqwncaj|ƒQŒ‰††ƒƒƒ‰‰‰‰‰ƒƒƒƒ‰‰Ž“Ž††ŽŽŽŒŽŽŽ‰ŒŒŽŒŒŽŒŽŽŒŽŽŒŽŽŽ‰‰Œ‰ƒ††‰‰ŒŒ‰†‰Œ’Œ†‰‰‰‰†‰Œƒ|tƒ‰|ww|ƒ††ww|Œ|qnqqwwƒŽŽŒƒ||ƒƒwnq|||ƒ~|wwwww||~||wwqqw|qq||||w|qntqqtqnwŒwhjhhjnwƒ‰~hjnqwnhahqwncaatƒ|QŒ‰‰ƒ|ƒŒŽ†ƒƒƒ†‰‰ƒ†ŒŒ‰ŽŽŽŽŽŽ†‰ŽŽ‰‰ŒŽŽŽŒŽŽŽŒŽŽŽŒŒŒŒ††‰‰‰‰Œ‰‰‰‰ŒŒŽŽŽ‰Œ‰Œ†‰ŒŒqq~†ƒ|||w|ƒ|t|‰Ž‰~wwww|ƒŽŒƒqqt|||ww|wwwwwqww|||ƒ||~|~|||tqn||t|ƒ||nqtqqqqwƒƒƒqhhjnqw||jhqqqqcchqqja^^n~~ƒQŽŒ‰ƒ~ƒŽ‰†ƒƒƒ‰‰†||†Œ‰“ŽŒ‰Ž††‰‰ŽŽŒŽŽŽŽŒ‰ŒŽŒ‰ŒŒ‰‰‰‰Œ‰‰††‰ŒŒŒ‰‰ŒŽŒ‰‰‰ŒŒ‰Œq|‰|qw|~ƒƒ||~‰‰Œ‰ƒƒ||†ƒŽ‰|qw||ww|ƒ|www|wtw~ƒƒ†|wnt||w|||||jq|ww||wjqqtqwqw‰†wjnqqwqtjjnwtqhjnwwha^aq|ƒƒ‰K‰ƒ~ƒ‰ŒŒŽ‰‰††‰†ƒƒƒ‰ŽŽ“ŽŽŒŒ‰‰ŒŽŽŽŽŒŽŽŒŒŽ“Œ†‰‰†‰†‰ŒŒŒ†‰‰‰Œ‰‰‰†‰Ž’ŒŽŒŽŒŽ†‰|wqt|†‰ƒ|ƒ‰ŒŒƒ~ƒ‰‰‰‰‹‰†ƒ||~wqqwƒƒ|w||||ƒƒ|~ƒwqq|qtqqt~ƒqhjnjw|~|njqwwtnq‰Œƒqqqtwqjjqwqqjhq|†|h^a|‰‰†‰†Q‰Ž†ƒƒ†‰†‰Œ‰‹‰ƒƒƒ†‰ŽŒŽŽŽ‰ŒŽŽŒŽŒŒŽŒ‰ŒŽŽŽ“Œ‰‰‰‰††‰‰ŒŽŒŒ‰‰Œ‰†‰Œ‰ŒŒŽ‰ŒŽŒ‰†ƒ|||†‰ƒƒ†‰†‰†||†ŒŒŒŽ‰||wƒ†ƒwqw||w|ƒƒ|||†ƒ|w|wq||qqqtw|hcnqhjwƒƒ|qjnwqqqq|ƒ†|wwqqjnqwtqhhqƒŽŒqhh~‰†‰Œ‰ƒK†ƒƒ‰‰ƒƒ|‰Ž’Œ†††‰“ŽŽŽŒŽŽŽŒŒŒŽ‰†‰‰ŒŽŽ‰Œ“ŽŽ“‰‰‰‰†‰†‰ŒŒŽŽŽŒ‰‰‰ŒŒŒŽŒŒ“’ŽŒŒŒ‰ƒww|ƒƒ‰ƒ~|†‰ƒƒƒ|ƒ†ŒŽŽ“Ž~||||ƒƒww|~wtww|||||||www|ƒƒqtq~|hchcchjwwƒ~wjnqqqwqn|Žƒqtwjjqwwqjhq†ŽŒ|qww‰ƒ||‰ƒw@‰ƒ†“Œ~ƒƒƒŒ“‰‰‰ŒŒŽŽŽŒŒ‰Ž†‰ŒŒŽ“ŒŽŒŒŒŽŽŽŽ‰†‰‰‰‰‰‰ŒŽŽŽŒ‰ŒŒŒŒ‰‰‰Œ’“ŒŽŒwtw|ƒ†ƒƒ|‰ƒ†††ƒƒƒ‰‰ŒŽŒ‰ƒ|ƒ|qnw|ƒ†ƒwww||tw|||www|ƒƒ|wwƒ‰ncjhaahhnw|||qjjqtqqq~Žƒwqjntwqtjhq†Ž‰twƒ†ƒw|††|nEƒŒ’‹ƒƒƒ†Œ‰†Œ‰Œ“Ž“ŽŽŒ‰‰ŒŽŽŽŒŒŽ“ŽŒŽŽŒŽ‰‰‰Œ‰†‰‰Œ“’““’“ŒŒ‰ŒŒŒŒ‰†‰Ž•••Ž|||†‰ƒ|ƒ†‰‰‰ƒƒƒ†‰‰ŒŒŒŽ‰†ƒ††ƒqnw||ƒƒ||||ƒ~|||†|ww||wwnq~‰|jjhhchjjjjqwƒwnjqqnqq|‰|njqwwwjhq‰Ž†||†ƒ†‰††‰‰|q?ƒŒŽŽŒ‰ƒ†ƒƒ‰ŒŽ“ŽŒŽ“Ž‰ŒŒ‰ŽŒŒ‰ŽŽŽ‰ŒŒ‰‰†‰‰Ž•“’•’ŽŽŒ‰Œ‰‰‰ŒŒ“•’•Ž†ƒ†††~wƒ‰‰†‰‰ƒ†‰‰‰‰ŒŽŒƒww|ƒƒww|ƒ|www||ƒƒ|ƒ‰†ƒ|||ƒwqnqw||qjhnqqnjjhaht||wqnqqqww‰†|jqwtqjhw†Žwww|ƒƒƒƒ‰‹ƒ‰|wKŒ‰‰ƒ~ƒ‰ŒŽ‰ƒƒ†ŽŽŒ“ŽŽŽŒ‰ŒŒ‰‰‰†Œ“ŽŒŽŽŒŽŽŽ““Œ‰Œ‰††‰ŒŒŽ••“’“Ž‰†‰ŒŒŒŽŒ““ƒ†††ƒƒƒ†‰‰†††ƒ‰‰‰‰ŒŒŒ†|w|||w||ƒƒ|w||||||w|ƒƒwq|ƒ|wqq|ƒwwwqhjjjnqnjjhqw|qqqqtqtw|ƒ|wwwqnjj|“ƒwwƒ~||||~||ƒwjE†‰ƒƒƒƒŒ†ƒ~ƒ‰“ŽŒŒŒŽ‰†‰ŒŽŽŒŽŽŒŽŒŽŽŒŽŽ‰‰‰‰‰Œ‰Œ‰’Ž’’‰‰ŒŒŽŒŽŒ“““•†‰†ƒƒ†‰‰‰‰ƒƒƒ‰‰ŒŒŒŒ‰‰ƒ|~|ƒwwwƒƒ~|||~||||ƒ~wqt|||wwƒ†ƒ||wwnchjhjjjnqqqtjntwwwqqqƒ†|wqnhjq|Œ||ƒƒ|ww|ƒ|qj||qE‰††ƒƒ‰ŒŒƒ|ƒ†ŽŽŽŽŒŽŽ‰ŒŒŽŒŽŽ‰Œ’ŽŽŒ‰‰ŒŽŒ†‰‰ŒŒŒ‰†Ž“•ŽŒŒŽŽŒŒŽŒŒ‰ŒŽ’’“‰‰ƒ|†‰‰‰‰‰ƒƒ‰‰ŒŒŒŒ‰‰†|ƒƒƒ|tw|~||w|ƒƒ||||ƒƒ|tw|~|qq|‰†|ƒƒƒƒwjhjjhjnqqtwjjqwwwwqqqƒƒwqjjqw|ƒƒwƒ†|w||ƒ|wqnw||V‰†ƒ†‰‰‰‰†ƒ†ŽŽ“Ž“ŽŽŽŽŽŽŒŒŽŒŒ‰ŒŽŽŽŽŽŽŒ‰Œ‰ŒŒŽŒ‰‰‰Œ‰‰‰Ž“ŽŽŽŒŒŒŒ‰Œ‰•••ƒƒ†‰‰‰†ƒƒ†|†‰ŒŒŒŒŒ‰†||||ƒƒ||ƒƒwww|||||ƒƒƒ|w|ƒƒƒtq|ƒqww||ƒ†wqnjnjnqqjqqjnwwwwqqqw|‰‰wjjtwwtqw|ƒww||†ƒ|qqqqw~ 9†‰‰‰‰‰ƒ†‰‰ŽŽŽŽŒŒŽ†ŒŒŒ‰Ž“ŽŒŽŒŒŽŽŽŽ‰Œ‰‰‰ŽŽŒ‰Œ‰†‰ŒŒŽ“‰ŒŒ‰ŒŒŒ’Ž|†‰ŒŒ‰ƒ|ƒƒ†‰ŒŒŒŒ‰‰†ƒ||||w|~ƒƒƒ|w|~|||ƒƒ†|ww|ƒ†~w|ƒwjjqw||ƒ|qqqnqqnjnjnqwwwwwtqqw|†Žqjqwwqqqƒƒ|ww~ƒ|ƒ†tjnjtƒV‰ƒŒƒ~ƒ†Ž“’““ŽŒŽŒŒŽŒ†‰ŒŒ‰ŒŽŒŒ“ŽŽŽˆŽŽ‰Œ‰††‰Œ’‰‰†‰‰Œ†‰ŒŽ“““Ž‰‰ŽŒ‰Œ‰“ŽŽ|†ŒŒŒ‰ƒƒ†ƒ‰ŒŒŒŒŽŒ‰†ƒƒƒ|www|††ƒ|ƒƒƒ~ƒƒƒƒ|ww|~|tq|‰wnjnjtw|ƒ|wjnjjqqnqnqwwwwwqqtwwww|wtwwtqq†ƒ||†ƒ|qwƒ|qjjjt E††ŒŽƒ|ƒ‰ŽŽ“ŽŽ‰‰ŒŽŒŽŒ‰Ž““Œ†‰‰‰‰‰‰Œ“Œ‰‰‰Œ‰‰‰‰Ž’ŒŒŒŽŒŽŽ“ƒ‰Œ‰†‰‰†ƒ†‰ŽŒŽŒŽŒ‰†ƒ||ƒw|ƒƒ||w|ƒ~ƒ|ƒƒƒww||ƒ|qnwƒwqqnnqqw||ƒ|hjjnqqqqqwwwwwwqwwwwqj|ƒwwtqq‰‰ƒ~|ƒ|tqj|ƒwjhjn ?‰Œ‰†ƒƒ†“Œ‰“ŒŒŒŽŽŽŽŽ‰ŽŽŽŽŽ‰‰‰‰‰‰‰†ŒŽŽŒ‰ŒŒ‰Œ‰ŒŽŽŽŽŽŽŒŽ‰ŒŽŽ’““Œ‰Žƒ|†‰†‰‰ŒŒŽŒŽŒ†‰ƒw||||ƒƒƒ|ww|||||~ƒww||ƒƒ~twƒwjjhjjtqqwƒƒ~tnnqqqqq|wwwwwqwwwwtjn||wqn‰“‰ƒ||ƒwjnqq|ƒwqqn[†‰ƒƒƒ†““ŽŽŽ“’Ž†‰ŒŒŒŒŒŽŒŒŽŒŒŽŒŒŽŒŽŽŒ‰‰ŒŒ‰‰‰ŒŒŒŽŒ‰‰Œ‰ŒŒŒŽŽ“ŒŽŽŒ‰ŒŒŒ“ŒŒƒww|ƒƒ‰ŒŒŒŒŽŽ‰ƒƒ|ww||ƒ††ƒ|||~ƒ||ƒƒ|w||ƒƒ||~†ƒwjhhjqjhhjqw|~wwwnjnwƒƒ|wwtwwwwqnnq|Œ|qq†Œƒ|ƒ†ƒqqnqqƒ‰wqjVŒƒ~ƒƒŽ“ŽŽŽŒŒŽŒ‰‰‰ŒŒŽŽŒŒŽ“Ž“ŽŒ‰‰ŒŽŽŒ‰ŒŒ‰‰‰‰‰ŽˆŒŒ‰‰‰‰‰‰Œ’“ŒŒ‰ŒŒŒ‰ŒŽ“ƒƒ||||‰‰ŒŒŽŒŽŒŒ‰ƒƒ|||ƒ†ƒƒ||wƒ‰ƒƒƒƒƒ~||ƒƒƒwtwƒ‰†|wjnqnjjjjhwƒƒ|wwqnqw‰‰wwwwwwwjqqw|ƒƒq‰“Ž‰ƒ†‰ƒ|wqnjw‰wwtV†ƒ†ŽŽ“““ŽŒŽŒ‰Œ‰‰ŒŒ‰“ŽŽ“Œ‰Œ‰ŒŒ‰‰‰‰‰ŒŒŒŒŽŽ‰‰†‰‰‰‰ŒŽ“’ŽŒ‰ŒŒŒŽŒŒŽ“““wqww~‰‰ŒŒŒŒŽŽŒ‰†ƒ||ƒ‰†ƒƒ|ww|ƒƒ†ƒƒƒƒww~‰‰|qwƒ†ƒƒ|||qwqjnqnnqw~qnnqwwwƒ‰~wwwwwnqqwwwwƒ‰~‰‰ƒƒƒwqqnqq|qjE‰Ž“ŒŽŽŒŽŽŒŽŽŒŒŒŽŒŽ“ŽŒŽŽ“Œ‰Œ‰‰‰Œ“Œ†‰Œ‰‰‰‰Œˆ‰ŒŒ‰‰ŒŽŒŒŽŒŽ‰ŒŒŒŒŒŽŒŽ•’•qtw~‰ŒŒŒŽŽŒŽŒŒ‰†ƒ|w|ƒƒ|||||ƒƒ|||||w|ƒƒ~|||~‰ƒwww|ƒ|wjqtqwqwtqqqqq|w||†‰‰ƒ|wwqnqw|wqw‰“Žƒ||ƒ~ƒ†|twqjn|qjKŽŒ’’““ŽŒŽ“Ž‰†‰ŒŽŽŽ‰ŽŽŽŽŽŽ‰‰‰‰†‰‰‰Ž’ŽŒ‰‰‰†‰‰ŒŒ“ŽŽŒ‰ŒŒŽŒ‰ŒŒŽŒŒŽŒŒŒŒ‰“’••ww~‹ŒŽŒŒŽŒŽ‰ƒ|ƒ||ƒ|w||ƒƒ†††|||ƒ||ƒƒ||w|†‰†ƒqw|ƒƒwqjnqwnqqwqnqwwwwwwƒ‰‹Œ‰ƒqqqwwwqq‰“Ž†|w|ƒ†ƒƒƒ|qqnqww|QŒ‰“•Ž“ŒŽŒ†‰ŒŒ‰ŽŽ‰ŒŽ’Ž‰Œ‰‰‰Œ‰‰Œ†ŽŽŒŒ‰‰Œ‰‰‰ŒŒŽŒŒ‰ŒŒŽŒ‰ŽŒŒŽŒŒŒŒŒŽ••“|ƒŽŽŽ“ŽŒŽŒ|||||ƒ†|w|ƒƒƒ‰†ƒƒƒ|ƒƒ††‰|wwƒƒƒwtqqtw|twwqqqjjqqqwwww||ww|‰‰‹|ww|wtq†ƒ||ww|†‰ƒ†ƒwqqnq||EŒ“ŽŽŽ“‰‰Œ‰‰ŒŒŽ‰ŒŽŒŒŽŽŒŽ““ŒŒ‰Œ‰‰ŒŒŒ‰‰ŒŒŒŒŒŒŒ‰†‰ŽŽ‰Œ‰‰ŒŒŽŒŒŒ‰‰ŒŒŒŽ’““““•ƒ‰“ŽŒŽŽŽ†||~ƒƒ‰†ƒƒ~ƒ~|||~ƒƒ††ƒƒƒ~||ƒ|wjqjjwwwqqw~|wqjnwtwtw||w|www†ŒŒƒƒ||tq†““ŽŽ†|||wq|ƒ‰‰†|qhjqtqEŽŽŒŽ“’“ŒŒŒŒŒŽŽŽŽŽŒŒŽ“ŽŽŽŒ‰ŒŒ‰‰‰‰ŒŒ‰ŒŒŒŽ‰‰‰ŒŒ‰Œ‰ŒŽŒ‰ŒŒŽŒŽŽŒŒŒŒ‰’••’“’“•ƒƒŽŽŽˆŒƒƒƒƒƒƒƒ||†‰‰†|w|ƒƒ|ƒƒƒww||†|tqjnnqtwqnq|ƒƒƒ|tqwqqwwww|w|w|ƒ‰ŽŒ‰Ž‹~qnƒ“ŽŒŒƒ||whw‰‰~ƒ|wjtwjjK•’Ž“Œ‰ŒŽŽ‰ŒŽŒŒŽŒŽ““ŒŒ‰‰‰‰†‰ŒŒ‰Œ‰‰ŒŽŒŒŒŽ‰ŒŒŒŽŒŒŒŽŒŒŒŒŒŒŒŒŽ••••“•“~|Ž“ŽŒŽŒƒ|ƒ†‰ƒ||||ƒ†‰ƒƒƒƒƒ|w|ƒ|||ƒ†wwwqqqqwqqjjnww|‰†ƒwwwt|||ww|w|||ƒ|‰ŒŒ‰ƒnwŒŽŽŒŒ‰Ž||wqqƒ†ƒƒ†‰†wnjnQ•“Ž““Ž†ŒŽŽŒŽŽŒŒŒŽŒŒ““ŽŽŽŽ“Ž†‰‰‰‰†Œ‰ŒŒ‰‰ŒŽŽ‰‰‰‰‰ŒŒŽŽŽŒŒŒŒ‰ŒŒŽ“““•“ƒ‰ŽŽŽƒ~ƒ|||||||ƒƒ|w|ƒ†‰†~|ƒƒƒ|ƒ‰|wqqqtwwqqnjnqqnq|ƒƒ|wwww|||w||||qw|ƒƒƒ||w†‰Œƒ‰Ž†ƒ||ƒŒ†|||ww|ƒ|ƒ‰‰|qqn[ŒŽ“Œ‰ŽŽŒŒŒ‰ŒŽŒŽŒŽŽŽŽŽ““‰‰ŒŒ‰ŒŒŒ‰‰‰‰ŒŽŒŒ‰‰Œ‰ŒŒ‰“ŽŒŒŒŒŒŽŒ‰““•’’““‰ŒŽŒ‰ƒƒ†||ƒ~ƒƒ†‰†||ƒ†ƒƒƒ‰ƒƒ†ƒƒ|wqnqnqqqqqqqqtwqqw~ƒƒ|ww|||w||||wnnƒ~ƒwwƒŒŽŒƒƒ~w||||ƒƒ||wqww|‰~||qq~KŽŽŽŽŒŒ‰‰‰ŒŽŒŽŽ“Ž“Œ‰ŒŒŒŽŒ‰†‰†Œ‰‰Œ“Ž‰Œ‰ŒŒŒŒŒŒŽŒŽŽŒ‰Œ•’“•““““•ŒŽŽŽŽŽ‰ƒ†‰ƒƒƒ|ƒƒƒ‰†ƒƒƒƒƒ||ƒƒ†‰†ƒƒwqqnqqqwqnqqtwwwwqtqwƒ‹‰ƒƒ|||||||tjqq~ƒƒw|†ƒ‰Œ‰‰~tw|w||ƒ‰Žƒ|wtjw†|qtww|‰+++e““ŽŒŽŽŽŒ†‰Œ“ŽŽ“““ŽŽŽŒŽ‰‰‰‰‰‰‰‰‰ŒŒŒŒŒŒŽŽŒŒŽŒŽ“ŽŽŒŒŒŽŽŽ’•“•Ž’“‰ŒŽŽŒ†ƒƒƒ~|ƒƒ†ƒ~|ƒ|ƒ‰‰†|ƒƒƒ|~ƒƒwqqtqtwtww|wwwqwwwqww|wƒ‰‰‰ƒ|||||wqjqtqtƒƒƒƒw|†ƒƒ||wƒ~w|†’‰|wwqwƒqjq|~ƒŒ+%[““’ŽŽŒ†ŒŒŒ‰ŒŒŽŽ““Ž“’ŽŽŽ‰Œ†‰‰ŒŒ‰ŒŒŒŒŒŽŽŒŒŽŒŒŽŽŽŽ’Ž‰‰ŒŽ’•••ŽŒŒŽ“•“ŒŽŽŽ‰ƒ~ƒ||ƒ~ƒ‰ƒ~|ƒ‰†ƒ††ƒƒ†ƒ||ƒ|wtqwwww|||~‰†wqqqnqqwww|‰ŽŽ†||||qnqqqjqƒ††ƒ|ƒ†‰~tww†‰|‰“Œ†ƒw||wqnnqwƒŽŽ%!VŽ‰ŒŒ‰‰ŽŒŒŒ“ŽŒŽŽŽ“ŽŒŒ‰‰‰‰Œ‰ŒŽŒ‰‰ŒŽŽŽŒ‰‰ŒŒŒŒŽŽŒ‰Ž“••’“ŒŒŽŒŽŒ’“ŽŽŽ‰†ƒ|ƒƒƒƒƒƒƒƒƒ†ƒ†ƒ||ƒ‰††ƒƒƒ|www|wqqw||†‰Žƒƒ~wqnqwwqt|†Œ“Ž‰|wwnqqqnjƒƒƒƒ†‰ƒ‰ƒqqq|ƒ†’Œƒƒ†ƒ||qjjqt|ƒ‰ƒ!!eŽ‰ŒŽŽŒŒŒŒŒŒŽŒ“Ž“ŒŒŒ‰Œ“Ž‰Œ‰ŒŒŒ‰‰‰Œ‰†‰Œ‰“Œ‰ŒŽŒ‰ŒŒŽŒ“’••“ŽŒŽŽŽŽ““‰†||ƒ†ƒƒƒ†ƒ~ƒƒ‰‰ƒ|ƒƒƒƒƒƒ†|wwqwwqqt~|†‰‹ŒŒŽƒƒqqwwwww|ƒŒ“’Žƒwnjqqqq~ŽŒƒƒƒ†ƒ†‹ƒqtwq~‰“Œƒ||ƒ‰ƒ|njqw|†‰ƒ]“ŽŒŽŽŒŒŽŽŒ‰ŽŽ‰Œ“““ŽŽŒ‰†‰Ž“Œ‰Œ‰Œ‰‰ŒŒ‰‰ŒŒŒŒŽŽŒŽŒŒŒŒŽŒŽ“’’“ŽŒŽ“’“’ŽŒ‰|ƒ†‰|ƒƒƒƒƒƒ†‰ƒƒƒ†ƒ‰†|ƒ†ƒ|wqqqqqt|†‰‹ŽŒŽŽŽ‰~|||www||‰’“Œ|wntqqwŽŒ‰‰†‰ƒw|‰ƒ|qttw†Žƒ|wwƒ‹‰wwwƒƒ‰Œ‰††K•“ŒŒŒ‰ŒŒŽŽŒŒŽ“ŒŒ‰Œ‰Œ‰ŒŽŽŽ“Ž‰‰‰‰‰ŒŽŒ‰Œ‰ŒŽŒŒ““ŽŒŽŽŒ‰ŒŒ“•“•“ŒŽŽŽŽ•“ŽŒ‰‰†‰‰ƒ|~ƒƒ†‰†‰|w~ƒ‰‰††ƒƒ†‰wtqtwwqww†ŽŽ‰ƒ‰Œ|~||ww|||ƒŒ“ŽŒƒƒ~wq~‰‰‰ŒŒ‰|wqq|†ƒwqwww†ƒww|~‰ƒ|Ž†‰‰ƒƒ!!!eŽŽŽŽŽŒ‰‰ŒŽŽŒŽ“““Ž“ŽŒ‰†‰Œ‰ŒŒŒŽŽ‰Œ‰ŒŒŒŽŽŒŒŽŽŒ‰ŒŒ’“ŒŽŒŒŽŒŽ’•“’“ŽŽŽŽŽŒŽŒŽŽŽŒ‰†‰†ƒ~ƒƒƒ†‰‰‰‰~|†‰††‰ƒ‰~ƒ‰~wwwwww||ƒ‰‰Ž‰~ƒƒƒƒŒƒ|tw||||ƒŒ‰‰‰ƒw|‰Œ‰ŒŽŒ‰ƒ|tqƒƒ||www||||ƒ||Œƒ‹Œ‰‰ƒƒ†!!!eŒŽŒŒ‰ŒŒŒ‰ŒŒŽ’“Ž“ŽŒŒ‰‰‰‰‰ŒŒ‰ŒŽŒ‰ŒŒ‰ŒŽŒŒŒŒŒŒŒŽŒŽŒŒŒŒŽ“•’•ŽŒŒŒŒŽŽŽŽŽŽŽŒ†ƒƒ||ƒ†‰‰‰†ƒƒƒ†‰‰‰†|ƒƒ||w|||w|wwqwwq|‰Œƒ~ƒƒƒƒŒ‰ƒqw||||~Œ‰†‰†ƒw‰‰ŒŽŒƒ|†|qw|ƒ‰ƒwqqqt|ƒ|w|ŽŒŽ“ƒ†ƒ†‰EŽ‰‰ŒŽŒŽŽŽŽ’ŽŽ“’“Œ‰Œ‰‰ŒŒŒŒ‰‰‰‰ŒŒŽŽŽŒŽŒ‰ŒŒŽŽŽŒŒŒŒŒŒ‰ŽŒŒŒŽ“’••“ŽŽŒŽŒŽŽŽŒŽŒŽŽŒŽŒƒƒ|||~‰‰‰‰Œƒ||ƒ†‰‰‰ƒƒ||www|†wwwtqtwq|†Œ†ƒ†‰†‰Ž‹ƒw||~ƒ||‰Žƒ|||ƒƒ†ŽŽŒŽƒwq|www|‰ŒŒ|qtqqwƒwtwƒŒŽ“Œ‰‰‰ŒVŽŒŒŒŽŒŒŽŒŽŽ“Ž†‰‰ŒŒŒŒŒ‰†ŒŒŒ‰‰ŒŽŽŒ‰†‰ŒŒŽŒŒŒŽŽŒŽŽŒŽ’•••“ŽŒŒ“ŽŽŽŽŒŒŽŽŽŒ‰ƒ~ƒƒƒ‰‰†~ƒƒƒ|ƒ‰‰‰‰‰ƒ‰|w|wtw|ƒƒwtqwwwwwƒ‰‰‰‰‰‰ŒŒŽ†||ƒ|~||‰Œ†ww~‰‰ŒŒ‰|twqw|wtw†‰‹ƒwwqw|wqq|ŒŽŽŒ‰ŒVŽŽŒ‰ŽŽŒŒŽ““Ž‰‰‰Œ‰ŽŒ‰ŒŒ‰ŒŒŒŒ‰ŽŒ‰‰‰Œ‰ŽŽŽŽŽŒŒŽ’’“““ŽŒŽ•’“’ŽŽŽ‰ƒƒƒ†‰Œ‰†ƒƒƒƒ†‰†‰ƒ~ƒ†|~||ww||‰‹ƒw|wwww|~||ƒ‰ƒ~ƒ‰Žƒ|ƒ|ƒ|||‰Žƒ|ƒƒ†‰ŽŒƒw|wwwwwwq|ƒ|ƒ†|w|wqqw‰ŽŽŽŽŽ‰†‰QŽŒŒŒŽŒŽŽŒ‰““““’ŽŽŒŒŒŒ‰‰‰‰ŒŽŒŒŒŒŽŒŽŒŒŒŒŽŒŽ–ŒŒŒŒŒ‰ŒŒŒ“••“’ŽŒŽŽŒ““•••’“Ž’ŽŽŒ††‰‰‰ƒƒ‰†ƒƒ††‰ŽŽŒƒ|ƒ‰|wwwwwwt|Œƒ|w||wwwwt|ƒŒƒƒ†Œ†ƒ|~|~||ƒ‰ŒŒƒ|‰‰ƒƒ†‰ƒ††ƒƒw~|wtwqw|~ƒ‰|tnnqƒ†“ŽŒŒŽŒŽŒ‰ƒQŒ‰‰‰ŒŒŽŽ““’“Ž“ŽŒ‰‰‰ŒŒŒŒ‰Œ‰‰ŒŒ‰ŒŒŒŽŽŒŒŽ’ŒŽ‰‰Œ‰‰ŒŽ“•ŽŽŒŽ’•““••ŽŽŽ‰||ƒ‰ƒ~ƒ†‰†‰‰†ƒƒ†‰†‰‰|wwtwwqwwƒ||wwwttwtq|†Œƒ‰‰Ž‰†ƒƒ|||ƒƒ‰Ž†|||ƒƒƒ†ƒƒ†Ž‰†wwww|wqqww|‰ƒqqqƒƒ†ŽŽŽŽŽ†|[Œ‰ŒŒŽŽŽŒ’“ŽŽŒ‰‰‰Œ‰Œ‰‰‰‰Œ‰‰Œ‰ŒŒŒŒŒŒ‰Ž’ŽŒŒŒŒŒŒ“’•“’ŽŽŽŒŽŽ••ŽŽŒŽŽ“‰†|ƒ†‰ƒƒ†‰ƒ‰ŒŽƒƒƒ‰†‰|†‰ƒ|w|wwww|w~ƒƒ|wqwww||‰‰ŒŒŒŒ‰||ƒ|||ƒ†††ƒ||ƒ†††ƒ†w†‰‰†|w|wwwwwtt|~|wwƒ†‰‰ŽŒŒŽŒŽŽ†‰EŒŒŒŽ““Ž“Ž““ŽŽŽŒ‰‰ŒŽŒŒ‰ŒŒŒŒ‰ŒŒ‰ŒŒŽ‰ŽŒŽ’“ŽŒŽŒŽ“•’•“ŽŒŽŽŒŒŽ““’“ŽŽŒŽ•Ž†ƒƒ†‰‰‰Œ‰‰ƒƒ‰‰ƒ††‰ƒww|‰‰†||ww|||||‰|w|w|ww|ƒ††ŒŒŒƒ~||||ƒ~‰‰‰†ƒƒ†††ƒƒ‹wƒ‰‰†‰‰‰wnqww||wnwƒ†ŒŽŒŒ‰ŽŽŒ‰ŒŽEŽŽŽŒ““““ŽŽŒ‰‰ŒŒŒ‰ŒŒŽŽŒŒŽŒŽŒŽŒŒŒŽŽŽ•’‰‰’“’•“Œ’ŒŽŽŽ•’•“Œ“••†‰†‰ŽŒ‰†‰‰‰†††‰‰ŒŒ‰|||w|ƒ‰ƒ|wwww|w|‰Œ†w||wwwwwwƒ‰‰ƒƒƒ|||ƒƒ|ƒ‰‰‰‰‰‰†||‰‰|‰†‰Œ‹‰nqw|||wqwq|ƒ‰ŽŽ‰ŒŽŒŽŒŽŒ‰ŒŽ‰V‰ŽŽŒŽ“““’’“ŒŽ“ŒŒŒŒ‰‰ŒŒŽŒŒŒ‰ŒŽŒŽŽŒŽŽŒŒŽ“Ž‰Œ““••“ŽŽŽ’““ŽŒŽ“•““’’••‰‰‰ƒ†‰†ƒ~ƒ‰†‰‰‰†Œƒ||||ww|†ƒwwww|wwwƒƒ|wwwwwwww‰Œ|||ƒ~|ƒƒƒ|†ŽŒ‰~‰Œ|wƒŒŽ†Œ‰†Œ†wqw|ƒwqnwƒ|†‹Œƒƒ†‰‰ŒŽŒ‰ŒŽ‰ŒEŒŽŒ’“““ŽŽŽŽŽ““ŽŒŒ‰‰‰ŒŒ‰ŒŽŒŒŒŒŒŽŒŒŽŒŒ’ŽŽ’“•ŽŒŽ••’ŽŽŒŒŽ“’’•’•–••Œ‰†ƒ†‰ƒƒ†‰‰‰Œ‰‰ƒ‰||||ƒ|ww|‹‰||||wwww||~||www|w|ƒƒ||~ƒ|ƒƒƒ|†ŒŽŒƒƒ†ƒq|ƒƒŒ‰Ž‰|‰‰‰ƒ|||~|ƒwwƒ†ŒŽŒ‰ƒƒ‰‰‰‰ŒŒ‰ŒŽ‰†Œ 5ŽŽŒ“““““ŽŽ“ŽŽ’““Œ‰‰ŒŒŒŒŽ“ŽŒ‰ŒŽŒŽŒŒŽŒŽ“’“ŒŽŽŽŽ“•“’ŽŒŽŒ••••••••–Œ‰‰†‰‰††‰Ž‰‰Œˆ‰ƒ~||w||||||‰†ƒ|||||ww||†ƒ||w||||||~|ƒ|ƒƒƒ~‰ŒŒŒ‰‰†‰ƒ|||||ƒ†||ƒ~ƒ†|w|wtƒw††‰ŽŽŒ‰‰‰‰ŒŒ‰‰ƒŒŽ‰†‰‰QŽ“’““ŽŽŒŽŒŽŒŒŒŽŒ‰Œ“ŽŒŽŽŒŒŽŒŽŒ“•••’ŽŽŽŽŒŒ••’ŽŒŽŽ“••••••••Ž‰Œ‰‰‰‰ŽŒ††ƒ‰‰ƒ|||wwww||ƒ~ƒƒ||||w||||‰‰ƒwww||||||ƒ|ƒ~|ƒ‹“ŒŒŽŒ‰‰‰‰†ƒ~wwww|||ƒ‰ƒƒ|wqq|†‰‰‰Œ‰‰†‰ŒŽŒŽ‰~†ŽŒ‰ŒŒ‰++%eŽ’““’““’ŽŽŽŽŽŽŽŒŽŽŒŒŒŒŒŽŽŽŒŒŽ‰ŒŽ““ŽŽŒŽŽ“’“•ŽŒ“’“•••“ŽŒ‰ŒŽŒ††‰Œ‰‰†‰Œ‰~|ƒ|w||||||||†ƒ|www|||w|‰‰|ww||w|||ƒƒƒ|ƒŒ“ŽŽŒŒ†‰‰‰ƒ||wtw|||ƒ‰‰‰ƒ|tqw†ŒŒ‰Œ‰†ƒ†‰ŒŒŒƒ|ƒ‰ƒ‰ŒŽ‰‰[“’Ž“’“’ŽŒŽŽ“ŒŽ“ŽŒŽŒŒŒŽŒŽŽ“’ŽŒŒŽŒ‰ŒŽ“Ž“’ŽŒŒŽŒŽ•••ŽŽŽŽ••“’•Œ†ƒ†‰ƒ‰‰Œ‰‰‰‰Ž‰ƒƒ||||||ww|||ƒ‰‰||||www|~‰†||||||w~ƒƒƒ|Ž’“Œ‰ƒ|†Œ†††|ww||~ƒŒŽˆ‰‰|ww|ƒƒ‰Œ‰‰Œ‰‰‰Ž†ƒ|ƒ†ƒ|†‰‰‰Œ!%!e••““•’ŽŽŒŽŽŽŽ“’‰‰ŒŽŒŽŒŒŽ’•ŽŒŒŽŒŒŽ“’“’“ŽŽŒŽ“ŽŽŒŽ““Ž•••“•““•‰ƒ†‰‰‰‰Œ‰‰‰ŒŽŒŒƒ||||ƒ||ww|||‰‰ƒ|||w||||††‰ƒ|||||ƒƒ~ƒŒ’’ŽŽŽ‰|†‰‰‰‰‰ƒ|||||ƒƒŒƒw|~|†ƒ†‰Œ‰ŒŽŒŒŒŒŒƒw~‰ƒ~ƒƒƒ†ŒŽK••““““ŽŽŽ““ŽŽ•’“ŽŒŽŽŽŽŽŽŒ•“ŒŒŽ’•’“•ŒŽŒŽ’ŽŽŽŒŽ’’“’–••“Œ‰‰ŒŒŒŽŒŒ‰‰ŒŒ‰‰†|||||||||||||ƒ†‰ƒ~|||||wwƒŒƒ|ww|ƒƒƒ†‹“’“‰†ƒƒ‰‰‰‰‰‰Œ‰ƒ|www|ƒƒwwqwƒƒ‰ŒŒŒƒ‰†‰ŒŒ‰~ƒ‰ƒ||w|~ƒŽŒE••’’“Ž“ŽŽŽŽŽŽŽŒŒŒŒŽ’““ŽŒ“•““ŽŽŒŽŒŒŽŽŒ“••“ÿ•••’““‰ŒŽŽŒŒŒ‰†‰‰†‰Œ‰ƒ|||||||ƒ|||w|ƒŽ†||||ƒ|w|ƒ††|||~ƒƒƒŒ“•“•‰ƒƒŒŒŽ‰‰‰ŒŽŒ†wwwt|ƒwwtw|ƒ‰ŒŒŒ†ƒ†‰Œ‰Œ‰~ƒ‰‰ƒ|w|||‰Œ‰V••••“•Ž““““ŽŒŽŽŽ“’“ŒŒŽŽŒŽŒŽ•’•Œ“““ŽŽŽŽŽŒŽŽŽŽ’••’•••“““‰ŒŒŽŒ‰Œ‰‰‰Œ‰‰ŒŽ‰‰ƒ~|||~|ƒƒƒ||||ƒƒ~|||||||~††ƒ|ƒ|ƒƒŒ“•••“ƒ||‰ŒŒ‰ƒ~‰‰‰‰ƒww|||ww||ƒ‰ŽŽŒŒ‰‰‰‰Œ‰ƒ|ƒ†ƒ~||w|ƒ‰‰ƒE••••’ŒŽŽŽ““Ž“•’ŒŽŒŽŽŒŒŽ“““’•’ŒŽŽ’ŽŒŒŒŽŽŽŽŽ••“•••“’’““Ž‰†‰‰Œ‰‰ŒŽŒŒŒŒŒŽ†ƒ|ƒƒ|||||||ƒ~ƒ‰‰|www||||ƒ‰Œ†ƒ~ƒŒ“•“’“~|||~ƒƒƒƒ†‰‰ƒ†‹ƒ|||wt|†‰‰ŒŒ‰‰‰‰ŒŒŽ†|ƒ‰|w|||~ƒ†~‰K•“•••“““ŽŽŽŽŽ““““““ŽŒ‰ŒŽŒŽ•’••ŽŒŒŽŽŽŽŽ“’ŒŒŽ••••’•“’•ŽŒ‰ŒŒŽŒ†ŒŒŽŒŽŽ‰ƒŒƒ||~|ƒ|||||~ƒ|ƒ‰‹‰|w|ƒ|~ƒ|ƒ‰‰|†‰’’•••ƒ|||ƒ||ƒƒ†Ž‰†‰ŒŽ††|wqw†‰†ŽŒ‰ƒ†‰Œ‰ŽŒƒƒ‰†w||~|ƒ‹‰||ŽŽK•••••’•ŽŽ’“ŽŽŽ“’’ŽŽŒŽŽŒŒŽ“’••ŽŒŽŽŽŽŽŽ“ŒŽŽ“ŽŽ’•’•••““•“ŒŒŒŽŽŒ†|ƒ‰‰†Œ‰‰‰Œ‰||||||||||w|||~ŒŽ†ƒ|~|w|||‰ŒƒŒ“•“•“||ƒ|wwƒ‰ŒŽŽƒƒ†ŒŽŒ‰www††‰‰Œ‰†ƒ‰ŒŒ‰Œƒƒƒ‰‰ƒƒƒ|ƒ|ƒƒ||‰†Œ 8••••“•“Ž“’ŽŽŽŽ“•“ŒŒŽŒŽŽ““ŽŒŽŽŽŽŒ’ŽŒŽ“’–••••““ŒŽŽ‰ƒ~|ƒ~ƒ†ŒŒŒŽŒƒ|~ƒƒƒƒƒ|||ƒ~||ƒ‰‰†ƒ|www||~‰Œ’“•••’‰~ƒƒ||ƒŒŽŽŒƒ|ƒ†‰‰†|wƒ‰ŒŒŒ‰‰ŒŒŽŽŒ‰‰ƒƒƒ~|ƒƒƒ†ƒ|~|ƒ†‰Ž1•••’••“’“““ŽŒŽ““““•’ŽŽŒŒŒ“’•’ŽŽŽŽ’ŽŒŽŽ“ŽŽŽ’•ÿ••““““““’•ŽŒŽ†ƒƒƒƒƒ||†ŽŽŽ‰ƒƒƒƒ~~‰ƒ|~|||||†‰‰ƒ|||~ƒ~|‰““•“•“ƒ||ƒƒ|ƒ‰†††‰†ƒ†‹‰~ƒƒƒ‰ŒŒŒŽŒŒŒŒŒŽŒƒƒ†||ƒƒ||ƒ‰ƒ|†ŽŒ‰‰E•••••“••’ŽŽ““““•’“’•“’“ŽŒ‰““•““’ŒŽ“’ŽŒŽŽŽˆŽ’–••••“““’••••ŽŒƒƒƒƒ~ƒƒƒƒƒŒ‰ŒŽŒŒƒƒ†|||‰†ƒƒ||||ƒƒƒŒƒ|||ƒƒƒ‹“’•’•““ƒw||||ƒƒ|w|ƒ‰‰ŽŒƒ|ƒ‰†‰ŒŽŒ‰ŽŽ‰‰‰ŒŒƒƒ‰|ƒƒ|w|ƒƒ|†‹ŽŒŽŒ 1•••“’•••“ŽŒ“Ž““’““•’Œ“’“•“•’ŒŽ“ŽŒŽ“Ž•••••••“’•““’“•“•Ž†ƒƒƒƒƒƒƒ~ƒ†ƒƒƒŒ‰‰ƒ~||||†‰ƒ||||ƒƒ||‰‰ƒ~ƒƒ|†•“•ŒŒƒ|w|||ƒ||ww~‰Ž†|ƒ†ƒƒ‰Œ‰ƒ†‰Œ‰†ŽŒƒ|‰†ƒƒ†ƒ||ƒ‰ƒ†ŽŽŒ‰‰ŒŒ 1•••’•••••’Ž“““’Ž“““•“’’•“’•Ž“ŽŽŒŽ’ŽŽŽ’•••••••“•“••“Œ†ƒ†ƒ†ƒƒƒ|~ƒƒƒ~ƒ‰Œ‰‰ƒƒ|~ƒƒ††ƒ|||~ƒ|~ƒŒ‰ƒƒ~‰Ž•’Žƒ†‰‰|||||||w|||Œƒ|||ƒƒ†ŒŒ‰‰‰ŒŒŒŽŒ†|ƒƒƒ|ƒ|~ƒ‰†ƒ†‰ŽŒ‰†‰‰ŽE“•“•••“•“•“““Ž’’“’Ž““•’•“ŽŽŽŽŽŽŽŽŽ“Ž•“’•••••“’““““•’“Œ‰ƒƒ†ƒƒ~ƒƒƒƒƒƒƒƒƒ‰Ž‰ƒƒƒƒƒƒƒ‰†ƒ|||||ƒƒ‰‰ƒ|‰‹“““Ž††‰Ž‰†ƒ~|||||||ƒƒ†||ƒƒƒ†‰‰ŒŒŒŽŽŒŽŽ‰ƒ†ƒƒƒ|w||†‰‰‰‰‰†‰‰‰‰Œ ?••••’“•“’•’Ž“““““““•“•“““•ŒŽˆŽŒŽ“ŽŽ“•••••••““““’“•’•“••Œ†ƒƒƒƒƒƒƒƒƒ~ƒƒ†ƒ†‰Œƒƒ|ƒƒƒƒ‰Ž†ƒ|~|ƒ|ƒ†‰Ž‰““’†‰‰ŽŒŒ‰ƒƒ‰†|†‰||||‰ƒ~ƒƒ‰‰‰ŒŒŒŽŒŽ‰††‰‰ƒ††||~‰‰~†‹Œ‰ŒŒŒŒŽŒKŽ“•••••••••Ž““’•’•“•“’““••ŽŽŽŽŽ’ŽŽŽŽŽŽŽ••••••“““’•’••“•“Žƒƒ~ƒ††‰†ƒƒ~ƒƒƒ|~ƒƒƒƒ~~||ƒ“Ž†ƒƒ|||||†““’“†‰†‰ŽŒŒ‰‰Žƒƒ‰‹ƒ|||‰†‰‰‰‰ƒ‰ŒŒ‰‰ŒŽŒƒƒƒƒ|ƒ‰ƒƒ†‰‰~|‰Œ‰ŒŽŽŒŽŽ‰  ?•“’•“’•••“’““““““’Ž““’ŽŒŒŽŽŽ“ŒŽŽŽŒ’•••–•’“““’••“••““ŒŽ‹‰†ƒ†‰ƒƒƒƒƒƒƒƒ~|ƒƒƒ~ƒƒ||~‰‰ƒ~ƒƒƒ|~ƒ‰Œ‰‰†‰‰ŒŽŽŒŒƒ~||†ƒ|wƒ‰†ƒ†‰‰†‰Œ‰‰ŒŽŒƒ~‰ƒ|~ƒƒ||‰‰‰ƒ†ŽŒŒŒŒŒŽŒŒ†‰Q“•“••••“••’““““•“ŽŽ••ŽŽŽ’“ŽŽŽ“ŽŽŽ“•••••“’“’“•““•“••‰‰Œ‰†‰‰ƒ~|~ƒƒƒ†ƒƒƒƒƒƒƒƒƒƒ|ƒ†‰ƒƒƒƒƒƒƒ|‰ŽŽŽ‰‰††‰†††ŽŽ†ƒ|w~||wƒ‰‰†††‰ƒ‰ŽŽŒŒŽ†ƒ‰~ƒƒƒ|wƒ†ƒ†Œ‹ŒŒ‰‰‰ŒŒ‰‰‰ŒQ“’“•••“’“•••’ŽŽ““’““’“““Ž“ŽŽŒŽ•’Ž’’•–•••“••“’“•’“’•ŒŒŽŒ‰ƒƒƒƒƒ†††ƒ†ƒƒ††ƒƒƒƒƒƒ‰ƒ†ŽŒŒ†ƒ~ƒ‹ŽˆŽŽ††‰Ž‰‰‰ƒƒŒŽ†‰Ž‰ƒ|ƒ|||†ŒŒ‰ŒŒŒŒŒŽˆŽ‰ƒ‰‰†‰†‰†ƒƒ‰ƒ†‰ŽŽŽŽ‰‰ŒŽŒ†‰Œ‰QŽ’••••••••““’’••’•“““““““ŽŽŽŽ’••–“Ž••••–•““““““•••’“••••ŽŽŽ†ƒƒƒ‰‰†ƒ‰‰†ƒƒƒƒ||~ƒƒ†ƒƒƒŒŽ‰||†““ŽŽ‰’Œ‰†ƒƒƒƒƒ†ŒŒ‰ƒƒƒƒ†‰ŒŽŽŽŒŒŒŒ‰‰‰~ƒƒƒƒƒƒƒƒ†‰ƒ‰‰‰‰†ŽŒŒŽŽŒ‰Œ‰†KŽŒ“••••••••••’•’••“•“•““’ŽŽ“ŽŒŽ’••••’–•••••’’“•“’•••••““Œ“‹‰ƒ†††‰ƒƒƒƒ†ƒƒƒƒ|ƒƒƒ~||~ƒŒ“’‰~‰““Ž‰†ŒŽ•’Œ‰†ƒ||†‰†Œ‰‰†‰ŽŒŒŒŒŽŒ‰ŽŒ‰Œ†ƒƒ~ƒƒ†|||ƒ‰†‰Œ‰ŒŽŒ‰ŒŽ‰ŒŽ†‰Q“Œ“““••••’•“•••“““ŽŽŽ“ŒŽŽŽ•–•••••’••’•••••’““•••’“““““•ŽŒŽŽŽ‰†‰ƒƒƒƒ†‰‰‰†ƒƒƒ†ƒƒ|ƒƒƒŒ“Œ‰ŽŽŽŽŒƒƒ†‰Ž’“•Œƒ~||†Ž‰ŒŒ‰ƒ‰ŒŒŒŽŒ‰‰‰‰ŒŽŽ†ƒ‰†ƒƒ†ƒ||†††ƒŒŽŒŒŒ‰‰ŒŽŒ‰†‰†ƒ‰K““’Ž’••••“••••••’“•’“““Ž’ŽŽŽŽŽ““ŽŽŽŽ••••““•–•••••“““’•’•““’“••ŽŒŒŒŒ‰ƒƒƒ††‰†‹‰ƒ†‰‰†ƒƒƒƒƒƒ‰ŒŒ“’“ŒŒƒ~ƒ†‰‰•••ƒ||~‰ŽŽ‰†Œ‰‰ŒŽŽŒ‰ŒŒŒŽŒ‰ŒŒƒ‰‰‰†ƒ‰‰‰ƒ‰Œ‰ŒŽŽŽŒŒŽ†‰†‰†‰†ƒ@““’•“•••••••••••••’“’“’“’““ŽŒŽ’’•ŽŒŽ’•“••••••••““““•••“•“’••’•••“ŒŒ‰Œ†ƒ†ƒ†ƒƒƒ†Œ‰††††ƒƒ†‰†ƒƒ‰Ž‰ƒƒ†‰ƒ†‰Œ••’||||ƒ‰Œ‰‰ŒŒŒˆ‰‰ŒŒŒŽŽ†|‰Œ‰|ƒƒ‰ƒ†ŽŒ‰‰ŒŒŒŒŒŽŒƒƒ†‰‰‰Œ‰ŽE“““•“•’••••••••••••“’•ŽŽ““•“’’ŽŽ“•’“•“•••“’“’“’“’•“““••““•••ŽŽŽŽŽŒ‰†ƒ‰‰ƒƒƒƒ‰‰‰‰‰ƒ~ƒƒ‰ƒ~ƒ‰Œ‰ŽŽŒ††‰‰Œ‰†‰Œ““’‰ƒ||~||‰ŽŒŒŽŽŽ†‰‰ŽŽ‰|†‰ƒ~ƒƒƒ|ƒ†ƒ‰ŒŒŒ‰ŽŒ‰ŒŽŽ†ƒƒ~‰ˆŽŒ‰Œ ?’Ž•’“••••••••••““ŽŽŽ“•ˆŽŽŽ“ŽŽ••’“’““•••“••’“’••“••••ŒŒŽŽŒŒ‰‰††ƒƒ††ŒŽŒ‹ƒƒƒƒ†ƒƒŽ’ŽŽˆŽŒƒƒƒƒŒŽ††‰Ž•“Œ‰ƒ|||ƒ‰†††ŽŽŒ‰ŒŽŒŽŒƒ†‰‰ƒƒƒƒ†ƒ††ƒŒŽŒŽŽŽŒ‰Ž†||||ƒŽŒ‰ƒƒK““ŽŽ““Ž“•••••••••••““Ž“““ŽŽŽŽŽŽŽ“•••’•““•••’““•“•““’•’“•ŒŽŒŽŽŒŒ‰†ƒ‰†‰†‰‰’ŒŽ‰ƒ†ƒƒ‰’’“ŽŒƒƒƒƒ‰ƒ‰‰Œ‰Œ“Œ‰ƒ|ƒ‹Œ‰†‰Œ‰Œ‰ŒŒŽ‰ƒ‰Œ‰‰‰††‰‰‰‰ƒŽŽ‰ŒŽŽŒ†ƒ|~||‰Œ‰ƒ††E•“’Ž“••••••–•••••“’“““““’ŽŽŽŽ“Ž’••“•“•’““’“““’•“••’••’•••••“ŽŽŒŽ“’‰ƒƒƒ†‰‰†‰ŽŒ‹Œ‰ƒ†ŽŒŽŽŒ‰††††‹ƒ‰‰‰†‰‰~ƒŽŒŒŒŒ†‰ŽŽ‰~ƒ‰‰‰‰ƒ†‰‰‰†‰ŽŒ‰ŒŒŒ‰ŽŒƒ|ƒ||~‰ŒŒ‰†ƒE““’•“’•“•••••••’••••“’’•••ŽŽŽŽŽŽŽŽ’’Ž•••““•“•’••“’••“•“••“••–••“•ŽŒŽŒŽŒ††ƒ‰†ƒƒƒ‰‰Ž‰Œ“ŽŽŒ‰‰Œ‹‰ƒ‰ƒƒ†Œ‰‰†‰‰Ž‰†ƒŽŽŒŒŒŽŒŒŽŒŽŒƒƒ‰††ƒƒ~ƒ†‰†ƒŒŽŒŒŽŒ‰ŒŽ‰ƒ|||ƒƒƒ‰ŽŒ‰ŒV““•“’••–••••••••’•““•“’“ŽŽ••••–••’“•“•••••“’“““••••••“ŽŒŽŽ‹‰†‰ƒƒ††††Ž“‰“’“’Œ‰†ƒ†‰Ž‰†ƒƒƒ‰‰Œ‰‰‰ŒŽŒƒ†Ž‰ŒŒŽŽŽŒŽŒŒ‰†‰†‰‰|ƒƒ†‰†ƒ‰ŽŒ‰ŽŽŽŒŽŽŒ‰ƒ|~ƒ~ƒ|ƒŒ‰Œ 9Ž“’“••“•’••••“•••“•••’“““•““••’“’“’Ž••••ÿ••“’““•“’••’“••’“•’•••““••ŽŒŽŽŽˆŽ‰‰†‰†‰‰‰ŒŽŽ“•Ž†‰†‰†‰Œ‰ƒ†‰††“‰Œ‰†ƒƒŒŒŒŒŒ‰ŒŒ‰Ž‰‰‰Œ‰ŽŒ†ƒƒ†‹‰‰ŽŒ‰ŒŒŽŽŽŒƒ~ƒƒ|ƒ|ƒ‰‰‰[)''#'('#  """   "" ŽŒŒŽŽŽŽŽŽ‰‰‰‰†††‰ŒŒ“ŽŽ‰†‰ƒƒƒ‰†ƒ‰‰††ƒ†Ž’ŒŒ‰†ƒŽŒŽŽŽ‰‰ŽŽŽŒŒ‰ƒƒ‰‰‰†ŽŽ‰†‰ŒŒŽŽŒŒŽŒŽˆŽ‰ƒƒ||||~ƒŽŒ‰Œ ESSWZ_``___WRJGDDHMNNNPPNMMJMNPRSWWYZZZYUPMMNRRPNNNSWYWWUUSUWWWWURPNJHGGGD>;77:;>ABBDDHJJJŽŒŽŽŽŽŒŽŒ‰††‰‰ƒƒƒŒŽŒ‰†ƒ†‰‰†ƒ~ƒŒ‰ƒ‰†‰“Œ‰‰ŽŒŒŽŽŒŒŒŒŒŽŒƒ‰‰‰ƒ†ƒ†ƒƒŒŒƒ†ŒŒŒŽŽŒŽŽŒ‰ŒŽ†Œ†ƒ~||||ƒŒŒ‰ ?SSSSSUUUUSSSRSSRNMJNPRUSPNJHHHDDBDMSYZ_ZWWWWY_`dddd_ZYUSRSUWWWWSNHDB>;;;>CDHJJMMNNNNPPPRS“ŽŒŒŒŽŒŒŒ†‰‰††ƒŒ“ŽŽ‰†‰‰ŒŒ‰ƒƒ†Ž‰††‰‰’‰’Œ‰‰Œ‰‰ŒŽŽ“Œƒ†‰‰††ƒ‰†ƒ‰‰ƒ‰ŒŽŽŽŒŽ†ƒ†ŽŒ‰Ž‰ƒ|||ƒ|ƒŽŽ‰[``ZWSPPSUWWRNJHDJMNNNPPNNPRSUWWWUUWWYYZY_ZZYWUWUWWZ_``ZUPNNPSWWWWUSNHGBA;>=:3/-./6BDHJNPR“ŒŽŽŽŒ‰‰†‰ƒ‹“’Ž‰ŒŒ‰††ŒŽ‰ƒ†‰†‰‰†ƒ‰ŒŒŽ’••ŽŒŽŒ‰‰ŒŽ‰†‰Œ‰‰‰‰‰†‰‰†ŒŽŒŽŽŽƒƒ‰††‰ŒŒ‰ƒƒƒƒ||~†ŽŒŽVdddkkkkd_ZZZZYYYURPMHD>>;BDHMNNPPPPRUWYZZ_`ddkdddkk`ZUPNJMJDB;2*'*-037;==BDBBBDGDDDDDJNRSŽŒŽŽŽ““‰††Ž•’“ŽŒŒŽŽ‰†ƒ‰‰Œ‰‰‰†ƒ‰‰‰‰Œ‰Ž•••“ŽŒŽŒŽŽŒ‰ƒ‰Œ‰‰Œ††ŒŒ‹Œ†ŽŽŽŽŽŒŽŒ†ƒƒƒƒ|ƒ‰‰‰ƒ|ƒƒƒ~ƒ†Ž‰ŒV`dd`YUPNNMJB737;DHHHHJNPSRRRPRRSWWZZ__`ddd`_WUSUYZURJHJNRSSSSSPJB=7320.**/36>BDJPSUWUSSSSŽŒŽŽ“ŽŒŽ“‹ƒ‰“Ž‰ŒŽŒ†ƒƒƒ†Œ†ƒƒ††ŽŒ‰Ž•–•’“ŒŽŽŽ‰†‰ŽŒŽŒƒƒƒƒŒ‰‰ŽŽŒŒŽŒŒŽ†ƒƒƒ~|~|~ƒƒƒ~~ƒƒƒƒƒ‰‰†FMJD>>>DJPRNHCBBCDDB;7432247>HJMNPSUWUUUWZ__ZWRPPRSYZZYURPRRSSRSRSPPNJD>:00/37>BHHMJMNPPRSŒŽŽŽŒŽŽ“Œ“’“ŽŽŒŒ‰ŒŽŒ‰ƒ‰†‰Œ“‰ƒƒƒ‰“’ŒŒ•••••‰ŒŒŽŒŽŽ†‰ŽŒ†‰‰‰ƒ†Ž‰ƒ†ŒŽŽŒ‰Ž‰ƒ‰†ƒ||ƒƒƒ|ƒƒ|ƒƒƒƒƒƒŒŽŒKZUPMMMNPNHHHJJMJHDDDHHJJJJMPRWZZZYURPNNPNMMJJJPUZ__ZWSPPNMMJD>>;72347::;>ADJPRSRPNMMNPSWWŽŒŽŽŽŒŽ’“ŽŽŒ‰†Œ‰†ŽŽ††‰‰‰Œ†ƒ†‰Ž’•••••ŒŒŒŽŒŒŒŽŽ‰ŒŒ†ƒƒ††‰‹Œƒ†ŽŽŒŽˆŽ‰Œ‰††ƒƒƒƒƒƒƒƒƒƒƒƒƒ~ƒƒƒQWYZ__ZWSMHBBBDHHDDDDHJMNNNPSWZZYSMDDHMNNNPSY``_WPMHJNPRNMJHJPSWUPMHHJJH>303:DMPRRRRPPRRSS““ŽŽ“’ŽŒŽ•“Œ‰‰†ƒ†ƒ‰Œ“Œ‰†ƒ†ŽŽ†‰‰‰’•••••“ŽŒŽŽŽŒŽŒ‰ŽŽ‰ƒ†‰‰ŒŽ‰ŒŽŽŽŒ“ŽŽ‰ƒƒƒƒ†‰ƒƒ|~ƒ†ƒƒƒ||~‰ŒŽEUUSRRPPNNJJHD>747;BDBBBDHJJHHHMPSWZ_ZYUPRUWYURPMHDDDHJNPNMHDB>BBDDDDDBBBA>767;BJMPPPNNNNRŽŽŒŽŽŽŽŒŽŒŒ‰‰ƒ†‰†‰Ž‹†ƒƒ†‰Œ‰‰†‰“•••••’“ŽŽŽŒ‰Œ††‰‰‰‰‰ŒŒ‰‰ŽŽŒŽŒ‰‰††ƒ~ƒ||ƒƒƒƒƒ~ƒƒƒƒŒŽFJNPPPPPPPPPNJDGDHJNPPNNNNRSWYYYYYYYZ_`d`d`__ZYSPMHHHJMNPPRRRRNJDABBHMNMHDDHMNMHD>>BHDD>DHŽŒ“’““ŽŽŽŒŽŽŽŒ‰†‰‰‰ŽŒ‰†††ŒŽ‰ƒ‰†‰‰‰†‰’’“•••““ŽŽŒŽŒŽ‰ƒ‰‰‰ŒŒŒƒ†ŒŽŽŽŒŽ‰†‰Œ‰ŽŒ‰ƒ|ƒ~ƒƒ†ƒ~ƒƒƒƒƒ†‰ŽKUSPHD>BDHJJHB;;=>HMMHHDDBBB>BDMRWZ_dd`_WRPPSY`d`__YURNJHHJJMMMJJHDDDBBBBBDJNPSUWWYZZZZYYZŽ“’ŽŽŽŒŽŽŽŒŒŽŒ‰†††ŽŒ‰‰‰ŽŒ‰‰‰‰‰†‰•••“••“‰ŒŽŽ‰‰ŒŒ‰‰‰Œ‰‰ŽŽ†‰ŽŒŽŒŒŽ‰ƒƒƒƒ†Ž’Œ‰ƒ†ƒ†‰†ƒƒ~ƒƒ†ƒƒ†QUPNNNMNMNNRPJD>73/2/27BDHJJHJMNPSW_`dddddddkkdd``ZZWSMHBBDHJHDD>;;=>BDDDABDHNRUWZ_____ZYU“’ŒŽŽŽŽŒŒŽŽŒ‰†‰ŒŽ‰‰‰‰ˆ’’ŒŒŒŒ†‰“““•“’“’ŒŽˆ‰†ŒŽŒŒŒŒŒ‰†‰†‰ŽŒŽŒ†‰†ƒƒ†ŒŽ‰‹‰‰†ƒ||ƒƒƒƒ~|‰Ž]ZZYSNHBBBBDDDDCA>=;=BCDBB>BDJSY_dkmk`___ZZYYYYYUSSSWYYYSPNMJJDBBCDHMPSUWWURMD;446>DMRUZ`k•““ŽŽŽŒŽ“Œ‰‰‰‰‰†††••“ŒŒŒ‰’•“’’““•“ŽŒŒŽŽŒŽ‰‰ŒŽŒ‰†ŒŽŒŽ“Žƒƒ†ƒƒƒƒ†ƒ‰Ž‰’Œƒ~ƒƒƒƒƒƒ|ƒƒŒKPNNMMNRUSSPNDA4006AHJJHDDDDHPUZZZYWWZ_``_ZWWURNHHHJJJMJJHDB;;:;=>BDHMMJHBBBHNSWWYYWYWUUUUŽ“ŽŒŽŽŽŽŒ†ŒŒŽŒ‰Œ‰††‰Ž““’ŽŽ“’••““••“ŽŒŽŽŒŒŽ‰††‰ŒŽŒ‰ŽŽŽŒŽ“Œ†ƒƒƒƒƒ†‰‰ƒƒ‰Œ‰“ŒŽƒ‰‰‰††ƒƒ†‰†‰! +““’ŽŒŽŒŒ‰‰‰‰‰ŒŽ†‰‰‰‰Œ“••’’“••“Ž•“’•‰‰Œ‰†‰Œ‰‰‰ŽŽ‰Œ’ŽŽŽŒŽŒŒ‰ƒ†ƒƒƒ†ƒ‰ƒƒƒ†‰ŒŽŽŒŒ‹‰‰ƒƒƒƒ‰‰†+yxxyxxxyxfTKFQVeixxooxxxxy{xxy{…‹{{‚…‹‹‹‹‹‹……{yxxpoieee[[VQK?88?EQ[eiopxxxxyxppox•“ŽŒŽŽŽŒ‰Œ‰‰‰‰Œ‰†‰‰‰Œ’“’•’““““ŽŒ“’“•‰ŒŒ‰‰ŒŒŒŒŽŒŒ‰ŽŽŒŽŽ“‰ƒƒƒ†ƒ‰ƒƒ~ƒƒ†††‰ŒŽŽŒ’’“Œ†ƒƒƒ†ƒ†ƒ1V…‹oeeeeeieVQKKQV[e[[[]eouxxxxxxoefoxyxofebeooxxpoxxxxxoeVTLE?5++18FWgy¡¬¯µ¯¯¯¯¯¯µµµµµ¯¯µ¯¯¯¯µµµÆÆÆÆÍÍ××ØÞââäâäââåêåÀ¹­¶¶ÂËÓÓÓÓÓÓÓÓààÓàÓÓÓËÓÓàà*6AA=66AN[[NNJN[huunh[NGAGJN[[N=-&&*6=AA660-**066=66006=AJN[ˆ­¶¶¶­ÂŸuuhNJNhŽŽŸŽŽˆŽ‰i‡‡tZSZg‡’¥¯µµµµµ¯¬š‡tZPFB>>:BBISZpƒš¬µµµµµµµµ¯µµµµµµµµµµµµµµµµÆÆÆÆÍ×××âäâäåêêêêêåååâÆÄËËËÓÓÓààààààÓÓËËÂËËààààæ(&**0AGNN[huunhNN[hhhNA0***-0060&#*6AGJG=6----60-006=ANh¦Â¶­­­¶Â¦ŸŽŽŽŽŽŽŸ¦­¶­­ŸŽw]‡ššš¥¯µµµµ¯¬¥¡šš’’ƒytlggpty‡š¡¬¯¯µµµµÆµÆµµµµµµµµµÆµÆÆÆÍÍÍÍÍÍÆÆÍÍ×××ØØâäêêêðððêêêêêåÆÉÂËÂÂÂÂÂËËÓàààààÓÓÓÓààààA=AJNNN[[[[hhnuˆŸŽu[G6*&&&&**&#""#&&&**&&"##&0ANNNJA6***06AJNŽÂÓÓÓ˶ˆˆŽŽˆˆn[[huˆŽŸŸ`f‡’’¡¬µÆÍÆƯ¬¥¡š¡¡¬¬¬¬¯¬¬¯¬¬¬¯¯µµµµµµÆµÆƵƵµµµµµ¯¯µ¯µµµÆµÆÆÆÍÍÍÍ×××ØØØØâÞâââêðèèðêêêêêê⸦­­¶ÂÂËËÓËÓÓàààààÓËÓÓààN[hnuuuuunNJA=60060--&""&6=A60-0000-6AGA=66=JNhhuuŸÂÂÂÂËÓ¶ŸŸ¦ŸŽˆˆˆˆunuuggggtƒ¡ÆÍ×ÍƯ¡’’š¥¯ÆÆ××Í××ÍÍÍÆÆÆÆÆÆÆÆÆÆÆÆÆÆƵµµµ¯¯¬¯¬¬¯µµµÆÆÆÍÍ××ØØØØâäåâäâäåêêèððèðêêêåÞâÕ­­ÂËËÓÓÓàÓÓÓË˶ÂËËÓÓààN[hnun[GA=GNnnn[J6-&&&&&*--066*%!!"&*-*&#"#&0=GGGG==AANN[[N[ŸÂËÓ˶ˆˆŸ¦¦¦Ÿ¦¦¦¦ŸŽ{Zfƒ’¡¯µÍ××ÆƵµµÆÆÍ×ØØ××××××ÍÍÆÆÆÆÆÆÆÆÍÍÆÆÆƵƵµµµµµµÆµÆÆÆÍÍ××ØØâÞâäâäåâåâåêêêêððèðêðêêêäâÐËË­­¶¶¶ÂÂÂÓÓàààÓ˶ÂÂ&*-=GNnnnuuuuun[[[hhhh[[NJAA=AAG=6*&&*-6=66600000-**-=GNh[h[nnŽ­ÓàææææÓ­¦ŸŽŽˆˆuuu—iƒ‡š¡¯µÆÍÍÍÆÆÆÍÍ×ØØØâØØØ×××ÍÍÆÍÆÆÍÍÍ××ÍÍÆƵƵÆÆÆÆÆÍÍÍÍ×××ØØââäâäâäâåêêêêêêêêêðêèðêêêðêâêÆÎËËËËËÓÓàÓËËÂÂË˶¶ÂËÓà&&*0=GNNNJAAN[unn[JA60--000&&&&&%""&&**-0006==AA=60--6AN[nŽŽŸ¶Ë˶­Ÿ[NhˆŽ¦ŸŸŽˆˆˆˆ”‹¡šš¡µµÆµµ¬š’’š¡¬µµÆÆÆÍÍÍÍÍÍÍÍÍÍÍ×ÍÍÍÍÍÆÍÆÆÆÆÆÆÆÆÍÍ××ØØØäØÞâØäâäâåêêêêêêêêêêèêêêðèêêêðÐɦ¶¶ÂËÓÓË˶¶ÂÂËààÓàÓÓÓà*0=NhuuhJ=====-*-=Nhnh[NG===60-&&&&**&#""&-6JNNNNJGGA=AJNhuˆuŽÂËËÓÓ˶ŸŸŸŸŽŽˆŽˆuh[[[w{µÍÍ××ÍÆƵ¯¥¡¡š¥¬µµµÆÆÆÍÍÍ×××××××ÍÍÍÍÆÍÍ×ÍÍÍÍÍ××××ØØØââââäâäâåâååååêêêêêêðêððððèððñê»Á­¶¶¶ÂÂÂËËààààààÓË˶hh[NA0--06AAA=AJ[[nnh[JA=6660-***(-00-*&&&-0-***0AN[[NNJGAAJNhˆŽŸ¶Ë¶¶ŽˆˆˆˆŸŸŽˆunN[Nhq‰}’¥µµµµµÆÆÆÍÆÆÆÆÆÍÍ××ØâäâØââØØ××××××××ØØäØâØâØâØââäâääåâååâååååâêêåêêêðêèðññèðêâÐÔÚÓÓËËËËÓààà˶­¶ÂÓÓÓÓÓÓÓÓààæààÓÓàæîõõîîæîîîîæààÓÓ¶¦ŸŽŽŽŸŸ¦­¶¶¶­¦­¶ÂË˶­ŸŸ¦­¶ÂÂËÓàæîõõõõõõõõõõõõõùùÿÿùÿÿùùùõõõîîîîîõõõ컇’‡‡’¡¥¯¯¯¯¯µµÆÆÍ×ØØâäØÞØØØØØØØØââäââåäâäâäâäâååâêêêêêêêêêêåêåêêêðêððèððêâØåúùÿÿÿùÿùÿùÿùÿùÿùÿùùùùùùùùùùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿⵡ¬¬¡¥¬¬µµµµµµµÆÆÆÍÍÍÍ×××ØÞâÞâäâÞØâäâåâåâåâäâäâåêððñ÷ññðêêêåêêêêêèðèððèâê÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè°¥¬µµµÆÆ×ØØââÞâÞØØ×××××ØÞâäâêêêêðêêêêêêêêêêêêêêêêêêåâåâååâêêêðêðââð÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿþÿþÿþÿÿÿþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè½ÆµÆ×ØØäåêêêêêââââââååêêððññðñðððððñððððððêêêâååååååååååâåè÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøþøøóóøóøóøóóóüüøóóøþþþüþøþþüøøøøøüøøøøøóøøøøøþüþÿÿÿþÿþþþþþþþüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèâÍƵÆÆ×××ØÞâäååêððññðñññññññññññèðèêêêêêêêðêåâåðñýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿééóóéááÙááÙááÙÑáéééÙéóüøóóóøóóóïïëééïøóïéáéëóóóøóüøøøþþøþüøóóóóóóøþøþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúñâäØ×Øâåâêêêêêêêêêêêâåâäâåâåââåêðñ÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙóéÑÙÙ¾¾Êʾ¾¾ÙÊÊÒáóøøüóïïïééïóáÙÙÙÙéóéÙÙÙÙéóïøüøøøøøóóóóïïïïïóïóüþøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾Ùáëپʾ¾¾¾¾ÒÙ¾¾áïóïïïóïéïëëïóéÊÊÊÙÙéáÙÙááéóóóøüóøüóóïïïïëëïïïóóüøøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʾ¾ÒáëÙÊÒÒʾ¾ÒʾºáóøóïëëáÙÙéìóóóïáÒÙáÙÙááÊÙáìóóüüøüüøóóïïóïïóïïïïóøøüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾º¾ÙìéáïÙ¾º¾ÊººÙïøøóïëéÙ¾ÊÙéïóïìééááÊÙáÙÊÙáïøüøóóóóüóïóóëééìëïìóéøüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³ººááëóïÊʾʾºÙóóóïóïìéÙÊÊÊáéééáïóáÒÊÙÙÊÙáìóóüøóïóóóïïóìéééëéëïóïøþþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³ºÊÊáóóïëïáÒ¾áóóóïìëïóìéÙÙÙÙáááéóïáÊÊÁÙááéóøóóïóóóóééïëééëìééïóïóþþüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + + + +  + + + + + +2ïëóïïóóþøþóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +  +  + + + ++ªïóóóóüóøüøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  + + +  +  + +  'aŠÿóóøüóóøüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôòçã·©©ªÇÜãÜÜãçòòòòòòòòòòòòòòòòóóãÜßóÜÇ©œ©Üòôôþòòòòòòô·2ŠŠŠÿüþüøïóþþþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxxxxsssŒ‘  ¤«®®«¨   ¨¨¤™‚skkkksxxs\RHHT\k†Œ‘‘Œ‚† ·ÇÇÿÿÿþóóóþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¤¤ ‘‘‘ ¤¤¤¤¤¨¨«««´¿Å¿´«¤Œk\\ddkddYXX\\dokkkkddds‚‘¤¨¨œœœÿÿÿþøøøüøüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsŒ ¨««®´¯¿¿´´´®´´´¬« Œ†‚xsxsskdVLHKHLV\k†††‚‚‚‚‚‚†™œœŠÿÿÿþüøóøþüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx‚Œ™¤¨®®´®¤‘††Œ «®´´®¨¤Œkd\dddkkssodXVXdsxxkkd\ks‚‘  +ŠŠŠÿÿÿÿøüóüüóüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚xsksx†Œ¤¨««®´´®®«¤ ¤¤¤¤¤¤ ™Œ‚‚‚‚††‚skokx‚†††††‚†††‚x œœ~ÿÿÿþøóóþüüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚xfkkks†Œ™¤ ™Œ†™¤¨«¨™‘†skssxsk\ddkdXTRV\ksx‚‚††Œ‘‘™™ ª©©ÿÿÿþóóóüóþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ†‚xs† «®®¤‘‚‚‚‚sks‘¤¨¨¤‘†‚‚xxskkkkskkdddf‘ ¨¨«¨¤¤ŠŠŠÿÿÿþüüóøüüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†‘ ¨¬«¨ †xxx‚‚†‚‚†Œ™¤¨¨¨™Œ†xlxsskkksxxxsss‚†‚‚†™¨||Šÿÿÿþüóóþüøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¤¨¨ ‘Œ‚†Œ™¨««¨ ™™™ ™‘†‚xs\TOLLKOTXdkkkddds‚Œ†xk\\\kx ©··ÿÿÿþøøóüóüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxsxŒ ¨¤™‘™¤«¬´´´¬««¨¤  ‘ŒŒ†ŒŒ‘‘†‚xsssskXROTds‚‚†™¤®´´®Šœ©ÿÿÿÿøïóøüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ† ¨¬¿¿¿´¯¿´´®««¤¤ ™‘Œ†††‚‚skdX\\ks†Œ™ ¤¤¨¨¨««´µ¿¿¿´´´ ··Çÿÿÿþøóëüøþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨®®«¨ ™  ™ ¤¨¨¨¨¨¤    ™   ™‘Œ†‚‚††‚‚xssx‚Œ™ ™Œ††‘ ¨®´UC9ÿÿÿþüóïøþüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¤¨®´¯´´®¨¤    ¤¨«¤‘kdkkssxx†‘‘Œ†‚p‚Œ‘‘‘‘‘‘™™ ™‘‘Œ‘Œa|Šÿÿÿþóïóþþøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ¤ Œ†‚‚†ŒŒ††™¨¨¨¨¤ ™™Œ†txp‚†††‚‚‚skdkxŒ «««®¬«¨ ™™···ÿÿÿþóóóþøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúñíÞÖÖ×äêêêêðñ÷úúú÷÷úú÷÷÷ú÷÷÷÷ñððêððêäÖÌÖê÷úýúú÷ö÷÷úýýU_jÿÿÿüøüóóøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóïïïïóóøøøøüóëééëïééïïóøþþþþüþüüøøøüóøøóóóøóóóøüøøüþþüþ +œž·ÿÿÿùüóéøüøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿééëóóóüøøøøüøïéëïóïïóóþüþþþøüóüøøüøóóóóóóóøóüüþøüüþøøüþœŠŠÿÿÿÿþóïüøüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéëïéóóüøïóóøøïëëïóþøóþøøþüøøøøøøøøóóïóóïóüøøüþüøþþþøøøüŠ||ÿÿÿþøïïøüøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëïëééïóïëïóóóïééìïüóüüøüøüóøøüóóøóóóóóóóüøóøþüøøøøøüøüþŠŠœÿÿÿÿóëéøþüóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóïìééïëéïïóóóóéëëïøøøþþüþøøüüøóóóóóóóóóüüóøüøøøüüøüøüøþ|mmÿÿÿþóéëøüøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøóëééìëïóóüóüóìëïóøøþüþøøüøüøøóúóúóóóóúóóüüøøüøøøüþüþþø œŠŠÿÿÿþóïóþüøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóïéìëëëëïóøüóóóóóüüþüøøüøøøøóóóóøóóóúóóóüóøüüþüþþüøøøüø +Š~|ÿÿÿüóøóüøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóéëïïéïïøïéóóøüøóþüóøøøüóóøúóøóóïïøóóüþüøþôüøøþþóøøøó ŠŠŠÿÿÿþøøøøøóøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóüóïëéééïóïéìïúóøøüüøøøøüøóüóóóóóïïóøóüþøøøøüøøøøøøüøøü +œœ©ÿÿÿþøïëüøüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøóóéééìëóïëëóøóüüþøøüüøøóüøøóóïïóóøøüþþøøüøøóüøüøüøøüþ +©œœÿÿÿÿóïëøüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøøóìëééëïëïóüøøüøüøøøøüóóóóóóïóóóüóüøøóüøøüüøøüøüøøüøþ·©œÿÿÿþóïïþøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóøïëéééïóüóüþþþüóóóøóóóóúóïïóóøøüþüóüøüøþøüþøüóóøøüü ©©©ÿÿÿþóóóüøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóïóøøïìéìóøóøüøøøøøóüóüóóóóóóóóüóóøøøüøþøþüøøøüóóøüüøø +œœ©ÿÿÿþóøøüøøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóóóóïïóþóüüóøóóøüøóüøóüüóïïøüøóüüøøøüøøøøóøøóóüüþøøømmmÿÿÿþóóóüøüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóïïóúøóóþüþüþøóóüøøüüøóóóóóïóóóüüøøøüþþøüóóüüøóüøþøøøó œœœÿÿÿÿóïïøüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïóóóóøüóøüóüþøüüøøüóóøøóïïóïóóüøøøüøþüøøøøüøøüóøþþüøóóø_mmÿÿÿþøïóþøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóúóóóóóøøüøøøøøøüøóóóóïïóóóøøøøüøøþüøóóøøøüüøóøüüóóóóüŠ~Šÿÿÿÿóóóüøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóüøóüüøóüüøøóóøóüøøïóóóóìóóüøüüøóüøüøøüüøüøøóøüüøøóóúüþ|mUÿÿÿþøøüþøüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøóóóóóüøøøóúøóóóóóóúøóóóüüóóøüøüøüóøøøøüøóóóøüøøóóóøþüm_Uÿÿÿþóóóüþþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïüóïóóóóøøüøøøúóóóüóøóóóóøøóóøøøøüøóøüøüøüóóüþüøóüøüþüø²žŠÿÿÿÿóóóøøøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïøóóøúóóóóóóøøøóóüøóóóïïóúóóüøüøþüøüüøøøóóóüþøøóóóóüþøó +Šm_ÿÿÿþüóóøüøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóüøüóøóóúøóóóóóüüøóïóóóóøøøüøüøüøøøøøüøóóóüþüøóóóüüþøóüm_mÿÿÿþøóóüøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøøøüøóøóóúóóüøóøøóïìóüóóüøøüþüóóóüøøøóóóüþøóóóóüøüøóüþ ·©Šÿÿÿþüøóþþüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüóóóóóóüøøøúóóóóóóóóüóøüøøóøøøøóüøóóóóóüþüóóóóüüþøøøøøª©œÿÿÿþøóïøüóüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøúóóóóøøóøøüóïóóóóøüóøøüóøüøøøüøøüóóóüþüóóóóüþøøüøøøü©œŠÿÿÿþøïïøøüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøüøóóóüóïóóøøøóóóóúøóóúøøøüøøøøüøüøóóüüøóóóúüþüóóóüøüøŠ©·ÿÿÿþøóïøüøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøøøóúøøóïóóóóóúóóóóóóøóøøüøüøøóøüøóüüþøóóóóøþüøóóüüøþüªœ|ÿÿÿÿüóóþþøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøóóóóøøüóøóøúóïóóüüóóüøøøüøøüóóóøøïóøþüüóóóüøøóóüþüóüþþ·©œÿÿÿþóóóüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóóóóóóøüüóóïóøøóüüüøüüøøóøüóüüëóøüøóïóüüþüóóüøüþüøøþ ÜÜÜÿÿÿþøïïøøøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóúóïóóüøøøóïóøóóóøøøóøøøóøóøüüóëóüþóïóóøþüøøøüþøøøøüø Ç··ÿÿÿþøïëüüþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøúøøóóóüóóóóóóüüóóóüøóóøøóóüøüøóïóóüøóóóüøøóóüüþøüøøøüþ9çÜÜÿÿÿþüóïøþøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïøüóóüüüóïïóóøøøóøüøüøøøüüøóøøïïïóóøüóøøüüóóøøþøøøøøüþü +œœ©ÿÿÿþøóøþþøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóóøøøóóóóúóóóóüøøøøüøüóøþüïëïóóïóóóüþþüóøüüøøøøüüþøø|m_ÿÿÿþóïóþþüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóïóóóóóóóüøóóüüøøøóóüøøóøüóïïóóóïïóüüøøóüüüóøøüøüþøøø +Š~Šÿÿÿþóóóüüøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøóüóüóóóüüøóóóüøøóóüøøóóóóóóóóóóìïóóþþóóóøþøüøüøüóøüøü·©©ÿÿÿþüóóüøøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøóøøüóóóóóøóóüüøøóøüóøüóóøüóóóóóïïïóüþüóóüüøøøüøþþüøøøþ +œŠ|ÿÿÿþüøøøøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóøøüóóóüóïóóøøóóüøøüóüüüóøüóïïïïóóüþøøüüüøøüøøüøøøüøü +ŠŠŠÿÿÿþüøóüøøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóúøóóóóüüøïóüüóóüüøøøóóüøøüüüóóïëóóóóøøüüóüøüøøøøøøøøøøÇÇÇÿÿÿþøóóüüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøóóóóóüøóøøøøüøøøøóóüøóóøøøüóïìïóóïïóþüøüøøüþøüøüüüþøü©žœÿÿÿÿøïïøþþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøüóóóüóóóóüøøóøøüóóøøïóïóøøøóïóóóóìóüþøøøøøøøüøøþøøøþþ©©©ÿÿÿþøïóþøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóóüøóóóóøóóóüóóóóüïóïïóóøóóïóóóóóóøþüøøøøüøøüþüóóøüø·©·ÿÿÿþøóóüøøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóüüøóóóúøøóúøøøóúøóïóóóïïóóóóóóïïóóøüøüøüüøøøøüøóüüøø ©ª©ÿÿÿþøóøüüüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóúøøóóóóüøøüøøóüóüøóïïïìóóóïóóóóïïóóóóüþøüþþøøøüøøüøüøüŠœ~ÿÿÿÿüóóøøþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøüóóïóóóøøóøøüóóøóóïëïïïïóïóúóóóóóóóóøþüøøøøøüøøøüþþøþ'ÜÇÜÿÿÿþøïïøüøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøóóóóüóüóóóóóóóüøóóóïïóïëïìóóóóóóóóóóøþøøóøøüüøøøøøøüþ'ÜÜÜÿÿÿþøóïþøüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóïóóüóüøóóúøøúøøóøóóóóïóïïóóïïïóóóúóóüüøóüüüøøüøüøüøþø·œŠÿÿÿþøóóüþøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóïóóüøüøøóøóøøøøøóóüóøóóïóóóóïóóïóóóóïóüþüøüøóóøüøøüøøþÇÈÇÿÿÿþóïóþüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóüóóóóóøüøüøïóóúøøüüóóóóóóóóóóóóóóïóóøüþþþóóüøøüþþþüþ'ÇÇÜÿÿÿÿóéáøøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóüüüóóóóøüóøøïëïïóóüøøüóüóóóóóóóóóóóóóóøþøøøøüüóüøþþøþþ2ÜÇ·ÿÿÿþóìéøþüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóøøóúóüóóóóïïëïïóóøøüþþþüøóóïïóúóïóóóóóóøóóüþøüþøøüüüþCÜÇ·ÿÿÿþïïøþüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøóïïóøøüüøóóïóïìóïïïóøüüþøüüóóóóóóóóóóóóóóüþüøþþøüüóüøø9ßÜÜÿÿÿüïóóþþþøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüóóóóóøøøüóïóïïóóóìïïóøøøüþøüüüøïïóóïóóóóøüþøøøøüþþüþøü|~œÿÿÿøóïóþøøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóóøüóóóóïóóïóïïïïóïóóóóþþþþþøüóøóóóóúóóøþþüøøüþþøþþüþ ²ÇÇÿÿÿüóïóóóøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóüüüøóóüóïïïëïëëïóïóóóóóüøüþþþþüüóóóóóóïóóøüøüþþøüøøøþœœœÿÿÿþóïïóóüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóüøøøøóüøóïëïïïïóóóóóóïóóóøøóþþüøøüóóïóóóóóüþþþþüøüøüþüœœŠÿÿÿþóïéóüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóóóúóøüøïëïóïóïóïïóóóïïóóóøüøøøþüóïóóóóóóøøþþþüøóüóüþ +ŠŠŠÿÿÿüóìéøüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,.44.,,,,..444.,$))))))$,.....4;<;;<8@,.....4;?;;;;?œœ~ÿÿÿþïééøøüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¤¤ ‘Œ‘™ ¤¤¤¤¨¨«««´¿Å¿¯«¤Œxkd\ddkkdYXX\\dkkkkkddds‚‘ ¨¨ ²©©ÿÿÿþóëïóóøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsŒ ¨««´´´¿´´´´®´´®¬« Œ†‚xsxsskdVKKHHLV\ox†††‚‚‚‚†™ŠŠŠÿÿÿþüóëóóüóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx‚Œ™¤¨®®´®¤‘†‚‘ «®´´«« Œkd\dddkksskdXVXksxxskddks†‘ ||Šÿÿÿþüóéøüóøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚pxsssx‚Œ¤¨««´®´®´«¤ ¤¤¤¤¤¤ ™Œ‚‚‚††‚xsokkx‚†††††††††‚x ©··ÿÿÿÿþøïóóøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚xskkks†Œ™¤ ™Œ†™ ¨«¨ Œ†ssssxsk\ddkdXTOV\ksl‚††Œ‘‘™™Šœ©ÿÿÿþøóóüøóüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††‚xs† «¯®¤‘‚‚‚‚skk‚‘¤¨¨ ‘†‚‚xskkkkoskk\ds‘ ¨¨«¨¤ ·ÇÇÿÿÿþüþóüüüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,.4...,,,,44744,$))))))$).....7;?;7;;@),....7;<;;;;@UC9ÿÿÿþóþüþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¤¨¨¤‘Œ†‚Œ™¨««¨ ™™  ™‘†‚xk\TOOKLOTXdkokddks‚††xk\\\kxamŠÿÿÿþóøøþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxsŒ™¨¤™™™¤«®´´´®««¨¨  ‘ŒŒŒ†Œ‘Œ†‚xsssskXROTdx‚‚†‘¤®´´®···ÿÿÿþóóóüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ† ¨¬¿¿¯´´´´´®«¨¨¤ ™Œ††††‚‚sk\Y\\ks†Œ™ ¤¤¨¨¨¨¬´¿¿¿¿´´´__mÿÿÿþóóóþüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨®®«¨      ¤¨¨«¤¨¤¤   ™   ™‘Œ†‚‚††‚‚xssx‚Œ  ™Œ††‘ ¨®® +œž·ÿÿÿþüþüüþþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¤¨«´´´´®¨¤    ¤«¨¤‘kdkkfsxxŒ‘‘Œ†‚p‚Œ‘‘Œ‘Œ‘™™ ™‘Œ‘Œ‘ŠŠŠÿÿÿþþøøþþüøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ¤ Œ†‚‚†ŒŒ‚†™¨¨¨¨¤ ™‘Œ†‚l‚‚††‚‚‚skkkxŒ¤«««¬®«« ™‘ +Š||ÿÿÿÿøóóþüøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6 200 130 1 +‚}vpkkkrvvvvv}‚‚‚‚}yyvyyvpkhkv‚…‚}‚‚… NNTÿÿÿÿ„†„††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{~~{{{x{~{~„~{x{{~{~~„†††‡†††††‡††~~{~„„„„„~ +HCHÿÿÿÿ†{††„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxx{~xxxx{~x„{~{~{x{~††††††„†„†††~{{~~~TNHÿÿÿ††~†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxx{~{{x{{{xx{~{x~{x{~†ƒ„†„†ƒ„„~~{~~~~~~~„NLHÿÿÿ‡†„€„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{{xxxxs{{xxx{~{x{{{{~~ƒ†††ƒ„†„{{„~{{~{{~{~~~ƒ† NNTÿÿÿ†~{~„€„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~{xx{{{~{{x{{~{~{~{~{~†††„„ƒ{~{~€~{{~~~~†„„TTZÿÿÿ†~~{ƒ„††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{x{x{~{xx{{{~~{~{x{{~~†„„†~{~{{„~„ƒ~„††TTTÿÿÿ†~„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{x{x{~{xx{{{~{{ƒ~x{~{~{„ƒ„ƒ~~~{{~ƒƒƒ„„~††`ZTÿÿÿ†„{†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{{{~{{{{~{x{{~~~{{{~{„ƒ„†„†{~~{~~{~„††„~~„ƒ‡ZZZÿÿÿÿƒ„„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{~~{~{~{~~~{~{{{~~~~„ƒ††„~{{~~{~„{~~~ƒ††TUZÿÿÿ†~~††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{~{~{~~{~{~~{~„~{~ƒ††††„„{~{~{ƒ~~~~~~~~ƒ†‡†ÿCCCÿÿÿ†{†„††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~{~~~~{~~{~~~~†††††€„{~{~{~{ƒ†††††TTNÿÿÿ‡~~†ƒ„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~„~{{~{~{{~~~~ƒƒ‡†††††„„~~~ƒ~~~ƒ†„„†††††„=CHÿÿÿ†„„„ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{~ƒ„~~{~{~~~w~~„„ƒÿ†‡††„†ƒ„~{{~„~~††„††††„†† NINÿÿÿ†€„ƒ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{~„ƒ{~~{~{~~{~ÿ†††††„††„ƒ~~~~~†ƒ~„†††††††„„ CC7ÿÿÿ‡~„††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{~{€†ƒ„{~~{~{„††††‡†ƒ{~„€††ƒ~†„~ƒ†ÿ†‡†††ƒ† +C=6ÿÿÿ†~{†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{x~††„ƒ„~~~{~ƒ†‡†ÿ†„~{~††††„„††††††„„`TNÿÿÿ†„„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{x{{„†††„~{~‡†ÿ††††~~~~ƒ„††ƒ~†‡††ƒ„†††NC=ÿÿÿ††„ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{x{~„††ƒƒ~{†ƒ†††††††~~„††††ƒ„~„ƒ†ÿ†††„„„ƒ†† +C=Cÿÿÿ†ƒ~„ƒ††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{xx{x{„†††ƒ„††ÿ†‡††„ƒ„{~~†††††„„„†‡†‡††ƒ†††„†ZZOÿÿÿ†„~x†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx{{xx{„„„ƒ†„†††„{~„~~ƒ†††††ƒ„ƒ††‡ÿ†ÿ†„†††††††`ZTÿÿÿÿ{{ƒ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{~{{{„{~††††{{~~~ƒ„~†††„†††††ÿ†††††ƒ††††††‡ZRNÿÿÿ†~~††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{{~{~~~†„„ƒ†„{x{{{{„~„†„†‡†‡††‡††„†††††††ÿ +NZ`ÿÿÿ††††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxxx{~{~„„„~{~~~~„ƒ~~„„†ÿ†ÿ‡††„††††††‡††ZTHÿÿÿ††ƒ„††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx{{~xx{~ƒ†ƒ„†{{~„ƒ†~~~~ƒ††††††„€††††ƒ†††††`ZTÿÿÿÿ†„€††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{~{x{{ƒ„„„~x{{~„~~~„†††‡†††††††„†††‡††&lllÿÿÿ‡†„†‡††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~{{{~††ƒ„„{~{~~{~ƒ„{„~ƒ†††††„„†‡†††††‡††††"d``ÿÿÿÿ†„††‡†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{{{{„†ƒ„„{„~~~~{†~~~~~†††††„††††††ÿ†††‡/lllÿÿÿ††„††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{x~„ƒ††„~x{~w{~ƒ„~~ƒ„ƒ††„„ƒ„„€„„††††††††TZZÿÿÿ‡††††‡†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„{~ƒ††„ƒ†{{~ƒ„~{{~„€{~„†ƒ††„†ƒ„†„†„€„†††††‡† HC=ÿÿÿÿ†„††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ„ƒ†††„~~{„ƒ~{~~~~~„†‡††††„~„„†††ƒ„†††NIHÿÿÿ†††ƒ‡††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„†††„~{~~{~~„~~~~~ƒ††††††„„€„„„†ƒ†„††„„`ZZÿÿÿÿ†„††††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„†††„{{{{~{~{ƒ†~{~†††††„„ƒ„ƒ†„†€„†„„TNHÿÿÿ‡††††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ƒ„„ƒ†~~{~{~~{{~„ƒ„~{~„ƒ††„„„„††††††„„ƒ†„†TNNÿÿÿ†„~x„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„„~~{~~{~„~†††††„„ƒ„††„††††„ƒ††fffÿÿÿ†xx†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„~~{{~~~~„†††‡†ƒ„„ƒ†„€„†ƒ„†ƒ†„†††ZZTÿÿÿÿ{x{ƒ„„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~„„~{~{~{~~„ƒƒ„ƒ††††„„ƒ††„††††„††††„†††ZTZÿÿÿ†~{~ƒ†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„~{~ƒ„ƒ†{~~{~~††††‡†„ƒ†„†ƒ„„„„€††„^``ÿÿÿ†††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„~~{„††ƒƒ~~~~~†††‡†„„„„†††††††€„ƒ†††††Z[Zÿÿÿ†„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{~„ƒ†„†„{~~„††††††„ƒ„„ƒ††ƒ†„„†„†††‡††† TNNÿÿÿ†„~~ƒ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{~{ƒ„„~{~ƒ†„„ƒ††‡~ƒ„€„ƒ†††††„ƒ†„ƒ†„†††††&glfÿÿÿ‡††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~x{~~„~~~„ƒ~~~†„†††††„„†††„††„††††††ƒ†„†&lllÿÿÿ†ƒ„††„ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{~{~{~ƒ†ƒ~††††‡††ƒ„†††„„ƒ†ƒ„„††„††„†`ZNÿÿÿ††„†ƒ†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„{~~{{{„††††~„†††††„„„†„„†††„„†††€„„ƒ†ƒ†††ƒ††fffÿÿÿ‡†{„„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€„{~{~„€††~ƒ†††ƒ„ƒ„ƒ†††„ƒ„ƒ††~††††††††††„"gflÿÿÿÿ†x„ƒ†„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„†~{~~„„~~„‡††††„„††††€„††~†††††„„„†„†-lf`ÿÿÿÿ„{†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„~{{~„{ƒ†††††„„„ƒ„††„„„†„ƒ††ƒ†††„€ƒ„1lf`ÿÿÿ†~~~ƒ††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ~~~~~~~„†††††„„„ƒ†ƒ„†€„„††††„„„††††„/mllÿÿÿ†„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒ{~{~ƒ†††††„„„ƒ††††„ƒ†ƒ„„ƒ†‡†††ƒ†††„†`flÿÿÿ†„~{ƒ„ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„{~{~††„„ƒ„„€„„€†††††„†††„ƒ†„††††„††„„„†fffÿÿÿ‡€„„††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„„ƒ„~~ƒ†††††„ƒ†„€„†„„„†„††„††„ƒ†††„††```ÿÿÿ†„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„†„††††††„„„„††„ƒ†„ƒ~††††††„††††ƒ††*f`[ÿÿÿ‡~{ƒ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„ƒ†„ƒ†‡††„„††„†„„ƒ†„†††††„€†„„„ƒ††††*jf`ÿÿÿ†„~††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„„†‡††††„„„„ƒ††ƒ††ƒ†††„ƒ†††ƒ„ƒ†„†„††††††fffÿÿÿ†††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„††ƒ†††††„„„€„ƒ†††„„†„„†‡††„„†„†ƒ„ƒ††††††"lffÿÿÿ†„ƒ„‡†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„€„†„†††††„ƒ„†„†„††„„†„ƒ††††††ƒ†„†††„††„†`Z`ÿÿÿ††„††††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„€†„„„ƒ†„„ƒ†„†ƒ„„ƒ„††††„ƒ†††„„ƒ†††††††ZZ[ÿÿÿÿ††„††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ƒ„„„„ƒ„†ƒ„ƒ†††„†††††„„€†††„ƒ†„†††„†‡-ld`ÿÿÿÿ†~ƒ††„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„ƒ†„†„„„†††€„††††††††††ƒ„†„„††††††„ƒ††"f``ÿÿÿÿ„„†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„€„„ƒ„ƒ„„ƒ†„†††„„~„ƒ††„††„††„ƒ††††††††††``Tÿÿÿ†„††„†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„†„†„€„„ƒ††„„„ƒ~ƒ††„€„„†ƒ„„†††††„†††„„† NHHÿÿÿ‡†ƒ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††ƒ„†„„„††„€ƒ„„„††††„„€††††„ƒ††††††„††ƒ†Z[`ÿÿÿ††„~„†„ÿÿÿÿÿÿÿÿ + + + + + + + + + + + + + + + + + + -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††††„„„ƒ„†„„†††„ƒ†††††„††ƒ†„††„†††„ƒ†ƒ„††‡-ff`ÿÿÿÿ†{††††ÿÿÿÿÿÿÿÿ + + +  """" + + + + +    + + + *Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††††„„„ƒ„ƒ†ƒ††††„††„††††††„††††„ƒ†††††††††„††††&f`Zÿÿÿ††††††ÿÿÿÿÿÿÿÿ&& +  + +  + + +  &4Nÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„„„†††††„ƒ††~„ƒ†„††„ƒ††„„††††††ƒ„††††ƒ„††gllÿÿÿ‡„ƒ†††ÿÿÿÿÿÿÿÿT‡ƒzzsllg`TH=:CNU`ffd`Z[flstsslloszzssmlssuzzzzzzz„|zsg`ZZZTHC:66CRZ`afflsss`THNT`lszzƒ€ƒƒzzszzzzzzƒ`ZNNRÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„„††„„††„††„†ƒ„††„„ƒ†††††„††„„†††„†/llsÿÿÿ†„{††††ÿÿÿÿÿÿÿÿ"&&Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ``fÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ„„„ƒ„†ƒ„ƒ„„††††††„ƒ†„†††††„„††„ƒ††††††"g`Zÿÿÿÿ~††††ÿÿÿÿÿÿÿÿFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ TTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒ„†††„†ƒ††„„†††††„„†††ƒ††„†††„ƒ††††††„†††1sllÿÿÿ‡†‡†††ÿÿÿÿÿÿÿÿTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ RTNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒ„††„†††„„ƒ†ƒ††ƒ†„~††††††††††„ƒ†††„€†††1sslÿÿÿÿ„ƒ†††„†ÿÿÿÿÿÿÿÿHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTNNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„†„ƒ†„„†ƒƒ††„††„„††~„†††††ƒ†††„††††„††††flsÿÿÿ††„„††††ÿÿÿÿÿÿÿÿ&*-fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ TTNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„„†„†ƒ„„ƒ~††††††ƒ††„~ƒ†‡†††„†„€„†„†††††‡`dfÿÿÿÿ†††††ÿÿÿÿÿÿÿÿ*-/`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZZTÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ„ƒ†††††ƒ†~†††††„††ƒ~~†††ƒ††„†††††ƒ†††ÿ††6sslÿÿÿ‡††ÿ‡ÿÿÿÿÿÿÿÿ"[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ NNOÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒ†„„††„†††„†„„†„†„~~„ƒ†††††„ƒ†††„††††‡†††1losÿÿÿÿ†„†††€ÿÿÿÿÿÿÿÿCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1qosÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒ†††„ƒ†„„„†††ƒ†ƒ†ƒ†„„„†††„ƒ€†‡††ƒ††††††„†TTOÿÿÿ††ƒ„††„†ÿÿÿÿÿÿÿÿ!&ZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTTNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„€††††„†„†ƒ††„†††††„„„„†††„†††„„††††††ƒ††/lffÿÿÿÿ†„††„††ÿÿÿÿÿÿÿÿ&&"Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ljfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„††„„„„ƒ††~ƒ†„†††ƒ†††††ƒ„„†††††††††††††„††‡-qssÿÿÿ††††††ÿÿÿÿÿÿÿÿ""Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-losÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„„€„€††„††„€†„†‡†„„„†„„„ƒ††††„ƒ††††‡†††††&lffÿÿÿÿ„ƒ†††ÿÿÿÿÿÿÿÿ"%&`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&lffÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„††„„€„„„†††††„€„††~ƒ††ƒ„„„†††„€†††‡††††ƒ†††`^Zÿÿÿ††~†††„ÿÿÿÿÿÿÿÿ"*fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`^Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„ƒ„€††„„ƒ†††††„†„~††††„„„††††„††‡†††††„††††fglÿÿÿÿ„††„„†ÿÿÿÿÿÿÿÿ&)Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfglÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††„†††ƒ††††„„†ƒ~„†‡†ƒ„††ƒ„††††††ƒ„††††‡†&llfÿÿÿ†„ƒ„††ƒ†ÿÿÿÿÿÿÿÿ644fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&llfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„†„„†††††„††~„„„„„„†††††††††„†††††††NNNÿÿÿ††††††ÿÿÿÿÿÿÿÿ&**[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿINNÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„ƒƒ†††††ƒ†„„„„„††††††††††‡††‡††.lssÿÿÿ†„„„ƒ††ÿÿÿÿÿÿÿÿ!"Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.sssÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ„†„††††„„†††~„„„„„„ƒ††††††††††††††††6sssÿÿÿÿ††„„†ÿÿÿÿÿÿÿÿCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6slsÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††ƒ„†ƒ†††„ƒ†††„„„„ƒ„„„††‡†††ƒ†††ƒ†‡††‡4slfÿÿÿ††††††ÿÿÿÿÿÿÿÿ**)Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ4ssgÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„ƒ††††„„††„†„„ƒ†„„„„„„€†‡††„„††††††††††6ssfÿÿÿÿ~†††‡ÿÿÿÿÿÿÿÿ"Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6slfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„††„†††„ƒ††ƒ††‡††ƒ„„„„†ÿ†††ƒ††‡††‡††††llsÿÿÿ†~xƒ†ÿ†ÿÿÿÿÿÿÿÿ/1/`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿllsÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„ƒ†„†††††„~~†‡†ÿ†††ƒ„„„„„„†††††††††††††††‡-llfÿÿÿ†{~†‡††ÿÿÿÿÿÿÿÿ441`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-llfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ƒ††„†„†††††††„„„ƒ„€„††‡††‡††††††††`[`ÿÿÿ‡„†ÿ††ÿÿÿÿÿÿÿÿ131dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`Z`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„††††††„„†„~„„†††‡††††ƒ„„„†„„††††††††††‡†‡†TZ`ÿÿÿ†ƒ†ÿ†††ÿÿÿÿÿÿÿÿ&'"HÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTZ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ƒ†††ƒ††„~„„ƒ††††‡†‡†„„†‡††††††‡†††††*fd`ÿÿÿ†„„††††ÿÿÿÿÿÿÿÿ-**Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ff`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„†††„„†„~~„„„„†††††††„†ƒ„ƒ„†ƒ†‡††††††‡†††ÿf`Rÿÿÿ†~~ƒ„††ÿÿÿÿÿÿÿÿ"Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿa`Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††††††„„††††ƒ†ÿ††„„„„„†††††‡†††††††/oslÿÿÿÿ~{„†„†ÿÿÿÿÿÿÿÿ&&"Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/sslÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡††„„ƒ†††~„„€„„€„„„„„†‡†ÿ††„ƒƒ„††‡ÿ†††ƒ†††‡2sllÿÿÿ†„{„€††ÿÿÿÿÿÿÿÿ/0/`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2ssfÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„††††„„„„„„€„ƒ††††‡†ƒ„††„„†††††††††‡†-qllÿÿÿ‡~ƒ†††ÿÿÿÿÿÿÿÿ&-1fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-lllÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†„†„ƒ„„„ƒƒ„„€„††‡†††††„†„ƒ„ƒ††††ƒ††‡†††NZ`ÿÿÿ†{{„†††ÿÿÿÿÿÿÿÿ640ZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNZ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„†ƒ††ƒ„„„„„„~„„†††††††ƒ„†„††††††††„†fffÿÿÿÿ„{~†„†ÿÿÿÿÿÿÿÿ441`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††~ƒ††„€„„€„„„€„„††‡†††„„†††‡††‡††††NFHÿÿÿÿ„~††ÿÿÿÿÿÿÿÿ654fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNFHÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††„„†††„„„†ƒ„„„„„††ÿ†‡†ƒ„ƒ‡†ÿ†ÿ††„†ZZ`ÿÿÿ††ƒ{„„ƒÿÿÿÿÿÿÿÿ/11fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZZ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ††††„„†††„„ƒ„€„„†††ƒ„†††ÿ†††††„„„„fffÿÿÿ†††„ƒ†„ÿÿÿÿÿÿÿÿCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„~„„‡††ƒ„„††„ƒ†„„„„ƒ„††††††‡ÿ†ÿ‡††„††ƒ††6ssoÿÿÿÿ†††††ÿÿÿÿÿÿÿÿ---`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ssmÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+,,++(((((++( $(++($ $ $(++($ $`dfÿÿÿ†„„†††‡ÿÿÿÿÿÿÿÿ&*-`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ffÿÿÿÿÿÿÿÿÿÿÿÿÿÿKMPQSVSQQMKJJJKMPPPMKGEGJMQSQKGEB@BBBDEJMPPPMMMQSSSVWY] +Zflÿÿÿ†„††††‡ÿÿÿÿÿÿÿÿÿ%&"Nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ZflÿÿÿÿÿÿÿÿÿÿÿÿÿÿQSSSQQSSSVVSSSSSSVVVSSQSVYYYWSPJEEGJMPPMKJJGGEBEGKPVY\]^flÿÿÿ†††ƒÿ‡††ÿÿÿÿÿÿÿÿ---`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ``lÿÿÿÿÿÿÿÿÿÿÿÿÿÿPPQPPPSVYYYWVSQQQQSVVWYVPMKJGEEEGEEEB?BEGKQWWWQKGJMSW\\ZZ`ÿÿÿ‡„††ÿ†ÿÿÿÿÿÿÿÿÿ/12fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXZ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿSSSVVWYYYYYYYYYYWWWWVSPPMQQSSSQPKJGEBEGGGEEBBBBEJPVY\]]```ÿÿÿÿ„†††ÿ‡ÿÿÿÿÿÿÿÿ1.-Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ```ÿÿÿÿÿÿÿÿÿÿÿÿÿÿQPMJGGKPQVW\]\YQMJKPQVVVSQQPJGEGGGEB<99€u`uÿ9`q1F0Fß5`mFBBŸ-@i%@eïAZXï=î=_!@aYT?! aXT?Î=Î9 ]XPWPÿ YÿWL­9ßVLß­5¿UVH¿ UHŒ5Ÿ QŸŒ1UDTDMàLT@__S@R@k-àH?R<>àDQ<=ÀDJ)I)Q8<18À@08;:À<04)%/49À88/0 8.0%7!! 46.,-,5 0-(4€0ç,(æ+(3€,,$2+$Æ*$1€(ÆÅ* €$) + `$¥)¥¤( `  (` @„ƒ ƒ @ +c @c b B  B   !MAN02_VDP 256 +Œ1ÿÞ{½w¼wœs›s{oZk9k9gñ~gccÏ~®~÷^­~~Œ~k~j~ÖZI~(~µV~~Jä}ã}”RÃ}Â}Á}_F¡} }sN€}?B€yRJ>`uÿ9ÿ1`q©e1F0Fß5ß-`m¿1¿)B¿%Ÿ-Ÿ)@iŸ!)%@eï=²M__ a? ]ÿ Yÿÿ Y-ßÿß­5¿ß¿ Ÿ ¿QŸ¾Œ17%‹1Ÿú6%ž½àL¼k1_k-àH?œäDÙ>›àD¸ 9=šÀDÖJ)·I)<ä<À@;yÕ µ:xÀ< -)%–9wÀ8ï(Ä48v 8î(ÑÏ$Ë,Î(7u¢4!t! 46t± ¢05s 0¨(4çæ3R€,2Q­ «Æ*$1P€(Æm † * m… m) l ˆ`$‡jM¥¤ˆ(` L‰ Kh(`hJ +Jb@„ *ƒ @Hc (@c F'D   %B A  MAN03_VDP 256 +Œ1ÿþÞ{Ý{½w¼wœwœs›s{ozoZoZkYk9k9g8ggcc÷b÷^ö^Ö^ÖZÕZ¿RŸRŸNµV´VJ”V”R“R_FsRsNrN?BRNRJ>ÿ91F0FBBï=î=Î=Î9­9­5¬5¿¿ Œ5Ÿ ŸŒ1_k1_k-?>J-=J)I)<;)):)%(%98%7!!65ç 4çæ32Æ1ÆÅ¥¥¤ „ „ƒ ƒ +c c b bB  B A!!MAN04_VDP 256 +Œ1ÿþÞ{½wœs›s{ozoZoZkc÷^ö^ÖZÕZµZµV´VJ”V”R_J_FsRsN?F?BRNRJQJ>ÿ91Fß5¿1FBBŸ-Ÿ))%ï=î=_!?!?Î9ÿÿ­9ßß­5¬5¿¿ Œ5Ÿ ŸŒ1‹1__k-j-?>J-=J)I)<;)):)%98%7!6-,54ç,(æ+(32+$Æ*$1ÆÅ* Å) ¥)¥¤( („ „ƒ ƒ  +c c b bB  B ! \ No newline at end of file diff --git a/IMG/ARC/MATCHBAK.BDB b/IMG/ARC/MATCHBAK.BDB new file mode 100644 index 0000000..d907625 --- /dev/null +++ b/IMG/ARC/MATCHBAK.BDB @@ -0,0 +1,197 @@ +matchbak 2000 1000 255 2 14 194 +final 1079 1686 252 649 +matchup 448 1041 251 639 +100 461 261 0 0 +200 461 511 3 0 +200 461 265 6 0 +200 461 389 6 0 +200 461 368 6 0 +220 461 515 3 0 +200 467 511 9 0 +100 467 261 9 0 +200 467 389 C 1 +200 467 265 F 1 +200 467 265 12 1 +220 467 515 9 0 +200 467 269 C 1 +200 471 265 15 1 +0 471 388 18 8 +0 471 508 18 8 +0 471 268 18 8 +600 479 337 1B 10 +500 482 346 1E 4 +600 482 380 21 10 +500 486 451 24 4 +400 486 286 27 11 +300 489 287 2A 1 +600 497 346 1B 10 +500 501 355 1E 4 +4000 541 280 2D 2 +4000 554 280 30 2 +100 561 261 9 0 +200 561 511 9 0 +220 561 515 9 0 +200 565 265 15 1 +4000 568 280 33 2 +4000 582 280 36 2 +4000 589 280 39 2 +500 599 341 3C 4 +4000 603 280 3F 2 +4000 617 280 2D 2 +500 618 384 42 4 +500 618 350 3C 4 +4000 630 280 45 2 +4000 637 280 48 2 +600 640 339 4B 5 +600 643 401 4E 5 +0 651 268 18 8 +0 651 388 18 8 +0 651 508 18 8 +220 654 515 9 0 +100 655 261 9 0 +200 655 511 9 0 +200 660 265 15 1 +4000 663 280 51 2 +4000 684 280 54 2 +600 695 337 57 9 +4000 698 280 2D 2 +500 700 346 1E 4 +600 700 380 5A 9 +500 704 451 24 4 +4000 711 280 5D 2 +600 713 346 57 9 +500 717 355 1E 4 +4000 723 280 3F 2 +4000 737 286 60 2 +100 747 261 9 0 +220 748 515 9 0 +200 749 511 9 0 +4000 751 280 63 2 +200 754 265 15 1 +200 757 511 9 0 +200 757 261 9 0 +220 763 515 9 0 +4000 765 280 66 2 +400 786 286 69 11 +300 787 287 6C 1 +500 816 341 3C 4 +0 831 268 18 8 +0 831 388 18 8 +0 831 508 18 8 +500 834 350 3C 4 +500 836 384 42 4 +100 851 261 6F 0 +100 851 382 6 0 +200 851 389 6 0 +200 851 511 72 0 +200 851 265 6 0 +210 855 265 6 0 +210 855 387 6 0 +210 855 389 6 0 +210 855 511 72 0 +110 855 261 6F 0 +220 857 515 72 0 +220 1101 518 3 0 +200 1101 371 6 0 +200 1101 392 6 0 +200 1101 268 6 0 +200 1101 514 3 0 +100 1101 264 0 0 +220 1107 518 9 0 +200 1107 268 12 1 +200 1107 268 F 1 +200 1107 392 C 1 +100 1107 264 9 0 +200 1107 514 9 0 +200 1107 272 C 1 +0 1111 511 18 8 +0 1111 391 18 8 +0 1111 271 18 8 +200 1111 268 15 1 +600 1118 340 1B 10 +500 1122 349 1E 4 +600 1122 383 21 10 +500 1126 454 24 4 +600 1137 349 1B 10 +500 1141 358 1E 4 +600 1154 474 75 13 +600 1164 746 78 6 +500 1168 764 7B 6 +400 1170 289 27 11 +300 1171 290 2A 1 +220 1201 518 9 0 +200 1201 514 9 0 +100 1201 264 9 0 +200 1205 268 15 1 +600 1228 778 78 6 +4000 1230 282 7E 2 +700 1234 474 81 13 +500 1239 344 3C 4 +4000 1241 282 84 2 +500 1242 760 7B 6 +4000 1243 464 87 3 +4000 1248 282 8A 2 +500 1258 353 3C 4 +500 1258 387 42 4 +4000 1262 282 8D 2 +4000 1268 464 90 3 +800 1275 474 81 13 +4000 1276 282 93 2 +4000 1282 464 87 3 +500 1287 745 7B 6 +0 1291 511 18 8 +0 1291 391 18 8 +0 1291 271 18 8 +220 1294 518 9 0 +200 1295 514 9 0 +100 1295 264 9 0 +4000 1298 282 96 2 +200 1300 268 15 1 +4000 1306 464 99 3 +4000 1311 282 9C 2 +900 1316 474 81 13 +4000 1323 282 9F 2 +4000 1323 464 87 3 +600 1335 340 57 9 +4000 1337 282 A2 2 +600 1337 814 78 7 +500 1340 349 1E 4 +600 1340 383 5A 9 +500 1344 454 24 4 +500 1346 799 7B 6 +4000 1347 464 A5 3 +4000 1351 282 A8 2 +600 1353 349 57 9 +500 1357 358 1E 4 +A00 1357 474 81 13 +4000 1364 464 87 3 +300 1376 290 6C 1 +400 1377 289 69 11 +600 1377 804 78 7 +100 1387 264 9 0 +220 1388 518 9 0 +4000 1388 464 AB 3 +200 1389 514 9 0 +200 1394 268 15 1 +200 1397 264 9 0 +200 1397 514 9 0 +B00 1398 474 81 13 +220 1403 518 9 0 +4000 1407 464 AE 12 +500 1456 344 3C 4 +0 1471 391 18 8 +0 1471 271 18 8 +0 1471 511 18 8 +500 1474 353 3C 4 +500 1476 387 42 4 +200 1491 268 6 0 +200 1491 514 72 0 +200 1491 392 6 0 +100 1491 385 6 0 +100 1491 264 6F 0 +110 1495 264 6F 0 +210 1495 514 72 0 +210 1495 392 6 0 +210 1495 390 6 0 +210 1495 268 6 0 +220 1497 518 72 0 diff --git a/IMG/ARC/MATCHBAK.BDD b/IMG/ARC/MATCHBAK.BDD new file mode 100644 index 0000000..29061b2 Binary files /dev/null and b/IMG/ARC/MATCHBAK.BDD differ diff --git a/IMG/ARC/MESSAGES.IMG b/IMG/ARC/MESSAGES.IMG new file mode 100644 index 0000000..0284dc2 Binary files /dev/null and b/IMG/ARC/MESSAGES.IMG differ diff --git a/IMG/ARC/MESSFNT.IMG b/IMG/ARC/MESSFNT.IMG new file mode 100644 index 0000000..4259e37 Binary files /dev/null and b/IMG/ARC/MESSFNT.IMG differ diff --git a/IMG/ARC/MIDWAY.IMG b/IMG/ARC/MIDWAY.IMG new file mode 100644 index 0000000..adf5800 Binary files /dev/null and b/IMG/ARC/MIDWAY.IMG differ diff --git a/IMG/ARC/MUGSHOT2.IMG b/IMG/ARC/MUGSHOT2.IMG new file mode 100644 index 0000000..0d91451 Binary files /dev/null and b/IMG/ARC/MUGSHOT2.IMG differ diff --git a/IMG/ARC/MUGSHOT3.IMG b/IMG/ARC/MUGSHOT3.IMG new file mode 100644 index 0000000..af61d97 Binary files /dev/null and b/IMG/ARC/MUGSHOT3.IMG differ diff --git a/IMG/ARC/MUGSHOT4.IMG b/IMG/ARC/MUGSHOT4.IMG new file mode 100644 index 0000000..8ae0dbf Binary files /dev/null and b/IMG/ARC/MUGSHOT4.IMG differ diff --git a/IMG/ARC/MUGSHOTS.IMG b/IMG/ARC/MUGSHOTS.IMG new file mode 100644 index 0000000..ddab49b Binary files /dev/null and b/IMG/ARC/MUGSHOTS.IMG differ diff --git a/IMG/ARC/MUGSMSC1.IMG b/IMG/ARC/MUGSMSC1.IMG new file mode 100644 index 0000000..c2f97f9 Binary files /dev/null and b/IMG/ARC/MUGSMSC1.IMG differ diff --git a/IMG/ARC/NAMES.IMG b/IMG/ARC/NAMES.IMG new file mode 100644 index 0000000..8077134 Binary files /dev/null and b/IMG/ARC/NAMES.IMG differ diff --git a/IMG/ARC/NAMES_90.IMG b/IMG/ARC/NAMES_90.IMG new file mode 100644 index 0000000..b9784fc Binary files /dev/null and b/IMG/ARC/NAMES_90.IMG differ diff --git a/IMG/ARC/NBACROWD.IMG b/IMG/ARC/NBACROWD.IMG new file mode 100644 index 0000000..0bcc76f Binary files /dev/null and b/IMG/ARC/NBACROWD.IMG differ diff --git a/IMG/ARC/NBAEDNK.IMG b/IMG/ARC/NBAEDNK.IMG new file mode 100644 index 0000000..470cf5a Binary files /dev/null and b/IMG/ARC/NBAEDNK.IMG differ diff --git a/IMG/ARC/NBAHEAD2.IMG b/IMG/ARC/NBAHEAD2.IMG new file mode 100644 index 0000000..5dadf21 Binary files /dev/null and b/IMG/ARC/NBAHEAD2.IMG differ diff --git a/IMG/ARC/NBALDNK4.IMG b/IMG/ARC/NBALDNK4.IMG new file mode 100644 index 0000000..493ebd3 Binary files /dev/null and b/IMG/ARC/NBALDNK4.IMG differ diff --git a/IMG/ARC/NBALGO.IMG b/IMG/ARC/NBALGO.IMG new file mode 100644 index 0000000..d57e370 Binary files /dev/null and b/IMG/ARC/NBALGO.IMG differ diff --git a/IMG/ARC/NBA_DEF2.IMG b/IMG/ARC/NBA_DEF2.IMG new file mode 100644 index 0000000..dc43fbc Binary files /dev/null and b/IMG/ARC/NBA_DEF2.IMG differ diff --git a/IMG/ARC/NBA_MSC4.IMG b/IMG/ARC/NBA_MSC4.IMG new file mode 100644 index 0000000..5499a2c Binary files /dev/null and b/IMG/ARC/NBA_MSC4.IMG differ diff --git a/IMG/ARC/NBA_STN1.IMG b/IMG/ARC/NBA_STN1.IMG new file mode 100644 index 0000000..10c7bdc Binary files /dev/null and b/IMG/ARC/NBA_STN1.IMG differ diff --git a/IMG/ARC/NBA_STN2.IMG b/IMG/ARC/NBA_STN2.IMG new file mode 100644 index 0000000..cdad789 Binary files /dev/null and b/IMG/ARC/NBA_STN2.IMG differ diff --git a/IMG/ARC/NBBD8.IMG b/IMG/ARC/NBBD8.IMG new file mode 100644 index 0000000..620f20a Binary files /dev/null and b/IMG/ARC/NBBD8.IMG differ diff --git a/IMG/ARC/NCRT.BDB b/IMG/ARC/NCRT.BDB new file mode 100644 index 0000000..60de6d9 --- /dev/null +++ b/IMG/ARC/NCRT.BDB @@ -0,0 +1,4 @@ +ncrt 2000 1000 255 1 1 2 +ncrt2 0 402 0 254 +4000 0 165 0 0 +10 198 165 0 0 diff --git a/IMG/ARC/NCRT.BDD b/IMG/ARC/NCRT.BDD new file mode 100644 index 0000000..77c428b Binary files /dev/null and b/IMG/ARC/NCRT.BDD differ diff --git a/IMG/ARC/NDUNKS5.IMG b/IMG/ARC/NDUNKS5.IMG new file mode 100644 index 0000000..7212261 Binary files /dev/null and b/IMG/ARC/NDUNKS5.IMG differ diff --git a/IMG/ARC/NEWAD.IMG b/IMG/ARC/NEWAD.IMG new file mode 100644 index 0000000..1059a2d Binary files /dev/null and b/IMG/ARC/NEWAD.IMG differ diff --git a/IMG/ARC/NEWADS.IMG b/IMG/ARC/NEWADS.IMG new file mode 100644 index 0000000..27383b6 Binary files /dev/null and b/IMG/ARC/NEWADS.IMG differ diff --git a/IMG/ARC/NEWBKCUT.IMG b/IMG/ARC/NEWBKCUT.IMG new file mode 100644 index 0000000..bc02789 Binary files /dev/null and b/IMG/ARC/NEWBKCUT.IMG differ diff --git a/IMG/ARC/NEWGROBX.IMG b/IMG/ARC/NEWGROBX.IMG new file mode 100644 index 0000000..018ed33 Binary files /dev/null and b/IMG/ARC/NEWGROBX.IMG differ diff --git a/IMG/ARC/NEWLOGOS.IMG b/IMG/ARC/NEWLOGOS.IMG new file mode 100644 index 0000000..4f55fff Binary files /dev/null and b/IMG/ARC/NEWLOGOS.IMG differ diff --git a/IMG/ARC/NEWP.IMG b/IMG/ARC/NEWP.IMG new file mode 100644 index 0000000..66aae13 Binary files /dev/null and b/IMG/ARC/NEWP.IMG differ diff --git a/IMG/ARC/NEWPALS.IMG b/IMG/ARC/NEWPALS.IMG new file mode 100644 index 0000000..0969ab4 Binary files /dev/null and b/IMG/ARC/NEWPALS.IMG differ diff --git a/IMG/ARC/NEWRIM2.IMG b/IMG/ARC/NEWRIM2.IMG new file mode 100644 index 0000000..0b08ba0 Binary files /dev/null and b/IMG/ARC/NEWRIM2.IMG differ diff --git a/IMG/ARC/NEWTITLE.BDB b/IMG/ARC/NEWTITLE.BDB new file mode 100644 index 0000000..1fb701f --- /dev/null +++ b/IMG/ARC/NEWTITLE.BDB @@ -0,0 +1,98 @@ +newtitle 2000 1000 255 1 25 96 +trned 615 1213 309 739 +100 645 459 0 5 +100 646 376 0 5 +100 646 625 0 5 +100 646 542 0 5 +100 672 339 0 5 +4000 694 420 3 0 +4000 709 529 6 9 +4000 742 566 9 17 +4000 759 393 C 22 +4000 763 454 F 1 +4000 763 428 12 12 +100 770 587 0 5 +100 796 339 0 5 +4000 826 529 15 10 +4000 829 471 18 3 +4000 829 445 1B 2 +4000 829 428 1E 15 +4000 833 566 21 18 +4000 861 394 24 14 +4000 862 601 27 20 +4000 862 567 2A 19 +4000 888 532 2D 11 +4000 888 467 30 23 +4000 888 428 33 24 +100 894 588 0 5 +3F00 915 364 36 13 +3F00 919 342 36 13 +3E00 920 342 39 13 +3200 929 403 3C 13 +3200 937 401 3C 13 +100 938 399 0 5 +4000 942 476 3F 7 +4000 942 428 42 6 +4000 947 567 45 21 +3F00 966 369 36 13 +3200 971 428 3C 13 +3E00 971 355 39 13 +3200 975 410 3C 13 +3200 976 392 3C 13 +4000 978 476 48 8 +3200 978 394 3C 13 +3F00 978 416 36 13 +3F00 983 423 36 13 +3D00 987 378 4B 13 +3200 987 423 3C 13 +3200 988 411 3C 13 +3F00 990 430 36 13 +3200 991 402 3C 13 +3200 991 380 3C 13 +3E00 995 399 39 13 +3200 996 408 3C 13 +3200 998 423 3C 13 +3200 1004 459 3C 13 +3200 1006 392 3C 13 +3E00 1007 397 39 13 +3200 1011 424 3C 13 +3C00 1013 375 4E 13 +3200 1013 396 3C 13 +4000 1014 485 51 16 +3200 1015 387 3C 13 +3200 1016 436 3C 13 +3200 1017 424 3C 13 +100 1018 595 0 5 +3200 1019 395 3C 13 +3200 1019 448 3C 13 +3200 1022 417 3C 13 +3200 1026 419 3C 13 +3200 1026 443 3C 13 +3200 1027 436 3C 13 +3F00 1028 534 36 13 +3200 1028 475 3C 13 +3200 1028 554 3C 13 +3200 1033 407 3C 13 +3D00 1035 709 54 4 +3E00 1035 436 39 13 +3D00 1035 416 4B 13 +3200 1036 460 3C 13 +3200 1036 434 3C 13 +3200 1037 448 3C 13 +3200 1037 446 3C 13 +3200 1038 402 3C 13 +4000 1039 393 3C 13 +3200 1040 424 3C 13 +3200 1040 400 3C 13 +3200 1040 458 3C 13 +3200 1041 412 3C 13 +3200 1042 469 3C 13 +3200 1042 457 3C 13 +3200 1043 496 3C 13 +3200 1046 451 3C 13 +3200 1049 478 3C 13 +3200 1051 447 3C 13 +3200 1058 459 3C 13 +3F00 1072 496 57 13 +3F00 1072 528 57 13 +3200 1140 417 3C 13 diff --git a/IMG/ARC/NEWTITLE.BDD b/IMG/ARC/NEWTITLE.BDD new file mode 100644 index 0000000..2018f83 --- /dev/null +++ b/IMG/ARC/NEWTITLE.BDD @@ -0,0 +1,555 @@ +30 +0 124 83 1 +3 72 109 1 +ÁïËøEöññú}}«sûª®hÆùñññg}}™§§§§§OýLþ÷ñg}}m§§§§§§§lskª®hüöññú}}­s§§§§§§§§§§§§lOû‚öï-E}}¶s§§§§§§§§§§§§l§lVsDô-Ë}ˆ@§§§§§§§§§§§§§§llll®DêñÅ}ˆ§§§§§§§§§§§§§§l§llDêïï}}«§§§§§§§§§§§§§§§llllOLDïñøEÄùññE}}™§§§§§§§§§§§§§§§lllllLDô븸õiŒö÷E}}ª§§§§§§§§§§§§§§llllllªÅÂô¸¸™VAKOWï~}­s§§§§§§§§§§§§§§lllllll­êï-鸸WVVVVVïÅ}­s§§§§§§§§§§§§§§l§lllllLDòó~¸¸IVVVVV-é}¢@§§§§§§§§§§§§§§l§llllll®D<-ë~¸ˆVVVVVñg}ˆ§§§§§§§§§§§§§§§§llllllIDêï-;}¸ˆVVVVVååÃîïÅ}¶s§§§§§§§§§§§§§§llllllll¨Dï-ð}¸«VVVVVVÞÏ{Š»ÞÞìÃÃE}}™§§§§§§§§§§§§§§§§llllllll­D<픸¸™VVVVVV‘Ïϼ¼¼¼{‘¥ ååé}}@§§§§§§§§§§§§§§§§llllllll‚Dêç딸¸WVVVVVVå{ϼ¼Ï¼¼···{Š¥Ù•}ˆs§§§§§§§§§§§§§§llllllllll@DËæ ç¹¥’±è}¸ˆ^VVVVVVÁßÏϼ¼¼¼¼·····Žä}ˆs§§§§§§§§§§§§§§l§llllllllI¨DÈ{{{{{{c¸¸VVVVVVÞÖÞßà‘¼¼¼¼¼·¼{[Z{áâ}}Œ§§§§§§§§§§§§§§§llllllllllVLDÕã{{{{Í˸¸«VVVVVVÖÏÏÏϼ¼¼¼··¼ÚÛ››Ü‡}}W§§§§§§§§§§§§§§llllllllllllªÅDÉ{{{{»~¸¢ÝVVVVVVVÖ×’ZÏϼ¼Ï¼¼··4}}­§§§§§§§§§§§§§§§§§llllllllll¨DØ{{{{Ù}¸ˆIVVVVVVVÎbbÒ‘¼¼¼¼·¼··Ó&&Ô}}­s§§§§§§§§§§§§§§lllllllllllllwDÕ{{{{Ñ}¸IVVVVVVVÎbZ¼¼Ï·¼¼·$'ppppC}}P§§§§§§§§§§§§§§§lllllllllllll‚DÐ{{{{Ѹ¸«VVVVVVVV–p&q{¼¼¼··¼·$''''(D}ˆ§§§§§§§§§§§§§l§lllllllllllll@DÌÊ{{ÍƸ¸™VVVVVVVV–ÁÁ½¼¼¼··¼·{µp''''*”}s§§§§§§§§§§§§§l§lllllllllllllLDÉ{{ÊË}¸WVVVVVVVV—ÁÁ½¼¼¼¼···Z¾'666'5}}™§§§§§§§§§§§§§§§lllllllllllllllLDÇ{{Èf¸IVVVVVVVV—Á[¼¼·····Yp'6——6œ}}™§§§§§§§§§§§§§§l§llllllllllllllWÅÆ{Ÿr}¸VVVVVVVV`ÁZ¼¼¼¼···›p'————D}}§§§§§§§§§§§§§§§llllllllllllllll¨ÂÃYÄ}¸VVVVVVVV`uÀ¼····op6———¦”}­s§§§§§§§§§§§§§§lllllllllllllllllwD4–\}¢™VVVVVVVVV`–»··¼····$'6———œ}¢™l§§§§§§§§§§§§§llllllllllllllllllªD7¿”}ˆIVVVVVVVVV`½¼¼¼¼···³t'6—— \}ˆ§§§§§§§§§§§§§§llllllllllllllllllIDD5”¸­IVVVVVVVVV`½······Z¾p'———¦”}s§§§§§§§§§§§§ll§llllllllllllllll¨D\}¸ŒVVVVVVVVVV`»¼¼····Z'6———œ}}™§§§§§§§§§§§§l§lll´‰lllllllllllllllD”¸¸™VVVVVVVVVV`Z···³p'6———œ}}™§§§§§§§§§§§l§llll´šllllllllllllllLD”}}WVVVVVVVVVV#·····Tp'——— D}¢k§§§§§§§§§§§l§llls?\jllllllllllllll@D”¸¢OVVVVVVVVVV%····Z$'6———¦”}ˆs§§§§§§§§§§§§§lllk•\®llllllllllllllIL”¸ˆVVVVVVVVVV¹···Z$'6——ºœ}}«l§§§§§§§§§§§lllll_\LllllllllllllllVL”¸AVVVVVVVVVV¥··ep'——— D}}™§§§§§§§§§§§§l§lll®=\UlllllllllllllllW”¸ŒVVVVVVVVVVV¥·›p'———¦”}}ª§§§§§§§§§§§§lllll?=\U°llllllllllllllI¨}™VVVVVVVVVVV¥Zµ'6———œ}}­s§§§§§§§§§lllllllkš=\D‚lllllllllllllVV¶}WVVVVVVVVVVV¥$'————œ}}­s§§§§§§§§§§llllll´_=\DLIllllllllllllVVWIVVVVVVVVVVV¥³u6——— D}¢@§§§§§§§§§§§llllll°_=\DDIllllllllllllVV@VVVVVVVVVVV¥Zp6——— ”}ˆ§§§§§§§§§§lllllll‰==\DD°lllllllllllVVlIIVVVVVVVVVVV¥±'6———ž}}²s§§§§§§§§l§llllllk•==\DDLlllllllllllVVVVVVVVVVVVVVVVV¥¯p'6———œ}}™§§§§§§§§§llllllll°_==\DDUllllllllllVVVVVVVVVVVVVVVVVV¥›p'————D}}ª§§§§§§§§§l§llllll?====DDU®llllllllllVVVVVVVVVVVVVVVVV¥Z©'6———¦”}­k§§§§§§§llllllllll£==87DDD‚llllllllllVVVVVVVVVVVVVVVVV¥z$'6———¬”}­s§§§§§§lllllllllll•==87\DDLlllllllVVVVVVVVVVVVVVVVVVV¥{›u'6—— N}¢ª§§§§§§§llllllllllk_==5 =DDfIllllllVVVVVVVVVVVVVVVVVVVV¥Z'6———¦”}ˆ§§§l§l§llllllllllj\=82 8DDD]lllllVlVVVVVVVVVVVVVVVVVVV¥zp'6———œ}}«§§§§§§llllllllllll?==82 5DDDLlllllVlVVVVVVVVVVVVVVVVVVV¥›p'————œ}}™§§§§l§llllllllllll?==5 + 7DDDBlllllVVVVVVVVVVVVVVVVVVVVA¥¡p6————D}}ª§§§§llllllllllllllš==7 + 28DDUIllllVVVVVVVVVVVVVVVVVVVVV¥Z©'6———¦”}ˆk§llllllllllllllllj_== + CDDD@llVVVVVVVVVVVVVVVVVVVVVVA¥’u'6———œ}}¨l§§lllllllllllllllm\=C** 5\DD]lVlVVVVVVVVVVVVVVVVVVVVVA¥›p'6—— D}}™§ll§lllllllllllllk‰==Cv) =DDVlVVVVVVVVVVVVVVVVVVVVVAA¥T'6———¦”}}™lllllllllllllllllk•== ¤* + =DDUVVVVVVVVVVVVVVVVVVVVVVAA¥z'6———œ}}}lllllllllllllllllj==8)'v + + CDDU]VVVVVVVVVVVVVVVVVVVVVVAAƒz$'6———œ}}slllllllllllllllllH==Cv'') 7DDD‚VVVVVVVVVVVVVVVVVVVVVAAAƒ{¡p6————D}¢™Vlllllllllllllllll£==2¤''* + +2=DDIVVVVVVVVVVVVVVVVVVVAAAAƒŸp6——— ”}ˆlllllllllllllllllj•== '''v + + 8DDDIVVVVVVVVVVVVVVVVVVVAAAAƒS$'6———ž”}lllllllllllllllllj_== +'''v + + +5\DD]VVVVVVVVVVVVVVVVVAAAAAAƒ›p'6———œ}}Œllllllllllllllllll]_=8v'''') +5=DDVVVVVVVVVVVVVVVVVAAAAAAƒTt–————˜}}™lllllllllllllllllsš==Cv'''') + =DDUVVVVVVVVVVVVVVVVVAAAAAAƒŠ‘’Sxx“”}ˆlllllllllllllllll•==7'''''v + +5DDf]VVVVVVVVVVVVVVVAAAAAAKƒ„„………Žf}lllllllllllllllllm===2'''''v + 7DDDLVVVVVVVVVVVVVVVVAAAAAJƒ……………Š‹}}ŒVlllllllllllllllll?=== +'''''v) + 2\DDLJVVVVVVVVVVVVAAAAAAAAIƒ„…………†‡}ˆllllllllllllllllll‰==8*'''''') +=DDDIVVVVVVVVVVAVAAAAAAAA@xyz[[{|f}~€ikkllllllllllllsg==Cv''''''* + + =DDD]VVVVVVVVVVVAAAAAAAAA‚qMrD=7222::?@@AB=.1 + + + + + + + + +9* 2 222222222222227:;<==---+.//01 + + + + + + +6' + + + + 222222222278++,3011 + + + 4#"' + + + + 22222225--++./011 /"&) + + + + + + 2++,,) + + + + + +)%* + + + + + + + + + %') + + + + + + + + + + +'''())) + + + + + + %&&&'(  + + + + + +  + +$        + " + $ #  !  "!  !   + +      + 6 120 37 1 +øüÇc!Ï®¯°°ä®K‰ ¤±°°·ÓÃÃÃÝÝóóîîîîþþþÞàààãõÌÀ°°ÁËK ‰9À°°äÂÃÃÃÝÝêóîóîîîþîøúàààáÌ˯°°·< ˯°Á¸ÑÃÃÃÝçóóîîîîþþýàààà«8±°°¯®¤) {·°°ä®ÌÃÃÃÃÝçóîîîîîîrüûààààÍÏÀ°°Á¸¤‰ ˯°°±ÑÃÃÃÝÝíóóîîîðøùúàààôàôû!ÌËÁ°°±Â9‰ <À°°ä®ÓÑÃÃÝÝçóîîîîîÝààààôôôëã8Âä°°¯®K KËÁ°Á¸ÑÃÃÃÝçóîîîîîL–÷ààààôôôôëá8̱°°°À< ‰9Âä°°±®ÌÃÃÃÃÝêóîîîîL– áààôôëôëëëy̸¯°°ä{ ¤¸¯°°·¹ÃÃÃÝÝóîîîî4öàôôëôëëÇë†Ä8Ì®±°°¯®) )±°°¯ÂÑÃÃÃÝçîîîî*P mEôôôëëÇÇÇÇcâ8·°°°¸ ¸¯°°À¹ÃÃÃÃÝóîîî–ÍÛôëëëÇëÇÇÇÇÆõ¹®¯°°·¥‰ )·°°±ÂÌÃÃÃÃÝíîîîB4Ô²ëëÇÇÇÇÇÇÇÇRÔ8¹±°°¯ñò ‰K˯°¯ÀÂÓÃÃÃÃÝóîîL4TÇÇÇÇÇÇÇÇÇÇÇÇï̮䰰ÒJ K¸¯°°·ÑÃÃÃÝçîð–žÇëÇÇÇÇÇÇÇÇÇÇÅÏ̱°°ìV À°°±ÂÌÑÃÃÃÝíîèéÄÍÍRÇÇÇÇÇÇÇÇÇÇÇÇD8¹˯åæa1 HË°°ÁÀ¹ÃÃÃÃÝêÝÞßàÚáâã!!!ÖÇÇÇÇÇÇÇÇÇÇÇdžÉ®äåæ'@ + ‰±°°ÁÀÌÓÃÃÃççÙÕ‘ÚÛÛÛÛŸyÆbÆcÇÇÇÇÇÇÇÇÇÇÇÇ#Å8Ì˧Ü3;1 ‰¤˯°°±ÌÑÃÃÃÝL mÍÍÔ!ÕžRÖÖÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇžQ¹Â× I Ø KÀÁ°Á¸ÌÃÃÃÃÄ!Ɔ†ÇÇÇÇÇÇÇÇÇÇÇÇdžRž—55Í8̤ÒI + <®±°°¯ËÓÃÃÃPmÍ»¼žbR#ÇÇÇÇǽǽ½EEE«7Ξž¼55QQ Ï)H›3 ' {Ð˯°°±®ÌÑÃÃP!ÄÅƆ†Çǽ½½½²²²²cccccc«yy‡ÈÉ) + Ê1 )KK¤­µ´˯°°±ÂÌÃú–l44 mQ»¼žc½²²²ccccccccccccc#˜¾ 1;3 Ž ‰H{? +@ A !"#$%&  '( + )*+,-./0 123 ' +    9 92 82 1 +-----†öööööööööïýE===¤VSXS[======I;eeeefyzzœñ÷÷÷÷÷÷÷ñññññܲþuyfeeDI==GŽVrXL®G===----€öööööööööÁü_E===QaXXhQ======937eeeef¥Ü÷÷÷÷÷÷ñññññññ ufeeeeeeE====GgLXrRˆG= ---—ûööööööööö£¼7m==¶RSXS\U======98eeeefª²÷÷÷÷÷÷ñ÷ññññññ³óeeeeeeee8=====JRTXSqQ=+---‚öööööööööÁúvDm==U\SXSRJ======9PDeeµœñ÷÷÷÷÷ññññññññññóeeeeeeee;======U\rXT\J---úööööööðöððê63===ˆhXXL®G=======<;eÄ‘÷÷÷÷÷ññ²œñññññññÊeeeeeeee;I======JRSXSR+--€ööööööððêêêM1D9==F[rXTW[=======99Õœ÷÷÷÷÷²±ø›ÈñññññàÄeeeeeD3<9=======¤VSTS-- öööðððêÁÁêÁM¼P===GxrXXWˆ=======ìÓÜ÷÷÷‰uzzzzøÈ¡ññññùee7;¨I===========J[hX---õööððððêêÁÁÁÁ˜_E===JRSXTV¤======É»÷÷ ¥ uyffzzzz¥¡ñññ¿e;PI===============ÌW--£ððêêêêÁÁÁÁÁÒ¼D<===U\SXrRJ====ìó² ±ôufeeefuzzz¡ññ©EI=================GÌ---ïððêêêÁÁÁÁÁÁÁ˜2;9===QqTXLgG===Ö±¥zeeeeeeefzzzz‰²ñòî===================F+-- êêÁÁÁÁÁÁÁÁÁÁÒÔ39==G[aXXqÌG=ìÄ uyfeeeeeeeeefyzzzz‰Èíî====================--•êÁÁÁÁÁÁÁÁÁÁÁÁÒ039==F[rXTWH9ëµfeeeeeeeeeeeeeefzzzz±Ð====================-,pÁÁÁÁÁÁÁÁÁÁÁÁÁÁ‡Ý_<===GRTXX½é;eeeeeeeeeeeeeeeeefzzzæ¾====================-£ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ‚·Dm===ˆ™SXSKåeeeeeeeeeee;37eeeeeuæã9==================çè O£ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ˜2°I==FQ½XXWáeeeeeeeeeePE=E;eeeeeâã9===================ä‘O“ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ“/0Ï9==G}WTTbtkeeeee78I9==9I3eeeeeP==================ÆÇà¡,(“ÁÁÁÁÁÁÁÁÁÁÁÁ«««««‡ÝÔ3I==G[qXXØÞde73EI=======9E;eee8I===============ÂÆß‘¡¡,“ÁÁÁÁÁÁÁÁÁÁÁÁ«Á«ŸŸŸ†/0P===GgrTÙÚcÛE============IDeeeI===============ÉΑܡ¡,ÁÁÁÁÁÁÁÁÁÁÁÁ«««Ÿ«“““p¼wm===JHq×Ø×}G=============<37e<==============ÂÇ‘¡¡¡¡',ÁÁÁÁÁÁÁÁÁÁÁ«««ŸŸŸ““““1Õ9===G}jXXqÌ==============I8eP==============Ö¡¡¡¡¡'NÁÁÁÁÁÁÁÁ«Á«««Ÿ“Ÿ““““““ÔDE===¶xSXShHJ=============9P8============ÂЊ¡¡¡¡¡¡—ÁÁÁÁÁÁÁÁÁÁ««ŸŸ“Ÿ“““““““‡­B¨9==¶xLTXS\U==============99==========Âò¡¡¡¡¡¡¡'ÒÁÁÁÁÁÁÁÁ«««««Ÿ““““““““““£1BE===¶gWXXSKG========================ÂÓÑ¡¡¡¡¡¡¡³ ÁÁÁÁÁÁÁ«««ŸŸ“ŸŸ“““““““““““£2DI===GgLXXW̶=======================ÐÑ¡¡¡¡¡¡¡¡´‹“ÁÁÁÁÁ«Á«««ŸŸŸŸ“““““““““““““£2Ï9===JxSXXaRJ=====================É»¡¡¡¡¡¡¡¡¡©žÍÁÁÁÁÁ«««ŸŸŸŸ“““““““““““““““““N·_Pm===¤VSTXrxG===================ÂΡ¡¡¡¡¡¡¡¡¡¡žËÁÁÁ«Á«««ŸŸ“““““““““““““““““““¦¦‡·2e<===JÌ\TXrRQF================ÆÊ¡¡¡¡¡¡¡²‘¡‹“ÁÁÁ««««ŸŸ“Ÿ“““““““““““““““““““¦¦N2Dm====ŽLXXSqU===============ÉÊ¡¡¡¡¡¡¡ ‰œ¡£ÁÁÁ««ŸŸŸ“““““““““““““““““““““¦¦¦””N¼2Å9===GKWSXSVŽG============ÆÇ¡¡¡¡¡¡¡Šzz›È’«ÁÁ«ŸŸŸŸŸŸŸ“““““““““““““““““““¦¦¦”‡‡M0;m===JŽhTXTWH===========Âá¡¡¡¡¡¡³Äuzzz“«««ŸŸ«““““““““““““““““““““““¦¦¦”””‡‡‡M¼2Dm====[½rXThQG=========¾¿¡¡¡¡¡¡¡¿Àfzzzž•««««ŸŸŸ“““““““““““““““““““““¦¦”¦””‡‡‡‡‡|·2¸<9==F¶grXTaRJ=======¹º›œ¡¡¡¡¡»¯eefz‹“««««Ÿ“Ÿ““““““““““““““““““¦“““””‡”‡‡‡‡‡‡‡‚0:8====¶\XXXSgG=====muzzz‰¡¡¡¡¡©¯eef£ŸŸŸŸ“““““““““““““““““““““¦¦¦””””‡‡‡‡‡‡‡‡‡‡‚2BEI===QVWXXWVQG===I°yzzzz±²¡¡¡¡¡³´µee’«ŸŸ““Ÿ“““““““““““““““““““¦¦¦””””‡‡‡‡‡‡‡‡‡‡‡‡†¬­B39===GgSXXXq®J==98eyuzzz ¡¡¡¡¡©¯e¢“Ÿ“““““““““““““““““““““““¦¦”¦”””‡‡‡‡‡‡‡‡‡‡‡‡‡‡†§B¨9===JxhTXTLgG==Peefuzzz¥‘¡¡¡¡©ª¢Œ“Ÿ““““““““““““““£‚**44p†N”‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡N41_3<====¤xWTXr\ˆ=m;eeefuzzz¥‘¡¡¡¡žŒ““Ÿ“““““““““†–+--------€MN‡‡‡‡‡‡‡‡‡‡‡‡‡‡{{1AeI====GxrTXSVˆG;eeeefzzzz ¡¡¡‘’““““”††•4/–,----------------++—˜NN‡‡‡‡‡‡‡{‡{{|v;E9===JH™SXSqgšeeeeefuzz›œ‘‘‹Œ‡--------------,++,-------------‡‡‡‡‡‡‡‡‡{{||o€2BE=====ŽqTXTrbdeeeeeefuzzz‘…O ,--------,+++ +,---------,†N‡‡‡‡{{{||NNo€27PI===Gˆ\STXTbtkeeeeefyzzzz‰Š -----++ +------+€N{{{||NNNNN‚!leP====JQVWTTƒ„deeeeeeyzzz ,- +-------(*{|{|NNNNNNN2e<9====J}WXXTb~eeeeeeeuzz ,-----,O*NNNNNNNNN**Ovw3I9===GxWXXSWndeeeeeeyuz-------#o*NNNNNNNNNpOl:eE====GHqrXXYsteeeeeefu,------4NNNNNNNNNN1lem9===G`RaSXSjndeeeeef -----,NNNNNNNNNNN!?B;<9===GURWXXTjikeeee,----NNNNNNNNNNCC!1fBPI====GghSXXYideee,----#&NNNNNNNNCCC*+2_D9====G`VaTXYbcde,----ONNNNNNCCC>C* O-:PI=====G[\TXXY]^ ----,/NNNNCCC>>***!107EI====GUVWTXYZ,----MCNCC>>>>*****O127P9====GQRLST-----CCCC>>>*******4AB8I=====JHKL .----4*C>>***********10DE9====FGH+----#>>>>************@+AB8<9=====+----4>***************/?2:3<9===----******************$12:;<9=---#4****************$$$$56789----!****************$$$$ 1203+---/ **************$$$ +0.----*************$$$   ----/************$$$  +---#*********$$$$$ .---&*******$$$$$ ----*******$$$$$ ----******$$$$ --&****$$$$  +-,&*****$$$ +,***$$$  ***$$$  +$$$$  )$*$ '($$ $ '$$  %% $ %&  !"#    +   +  C 104 35 1 +xü“hhh®®®“Áýýûûûûûxüü“hhhhhh®®“ÁýýûûûûûûxxüÁ“hhhhhhhh®®“Áýûûûûûûûûxüü“hhhhhhhhhhh®®“ÁýûûûûûûûûûxüÁhhhhhhhhhhhhhhh®“Áýûûûûûûûûûûx1xüÖOOOOOOO×מžhhhhh®“ÁÁýþûññññûûûûûò÷11xøOOOOOOOOמ×hhhhhhhä®´´ÁÁÁÁÕÕÕÕÕÕù³ú“õûðñññññññññòòïó1xxÖOOOOOOOOO×מhhhhhhhhhç纺ºõõõ“ööñääððððññññññññññòï1xhOOOOOOOO×מhhhhhhhhhhhççèäääääääääääðððññññññññññòZ1·OOOOOOOOO××מhhhhhhhhhhççèèääääääääìì파ŒŒ¢¢î©î©îî©1OOOOOOOOOOOמžhhhhhhhhhhççèèäääéêê©áááëë ** AÁÕâã·OOOOOOOOOOO×מhhhhhhhhhäÏŒ¢¢å{••5æ ¸¸6¸ ݼÞv03OOOOOOOOOOOמžhhhhhhߢàá** 6Q~Q;p|p—p7p7—pZƒ§¼À±ÕÁ¥Ö3OOOOOOOOOOO××h·Ø ¢”••Ù 6J GnVW,,,,,,,MLV&&&%-L+ Z[112\G 78]< ^_`E= aX(&bc,,,,,,-Lde&&&f.-LLM.g N12O 5 PQ RSTU CAVWH,,,,,,MXT&&&&Y/,-KK-,,/ 012345 6789:;< =>?@AB CD?EFG//.,HI@&&&EJ +,,-KKLLLLLLKM--,,,+  +    !"#$%&&&&'() *+,,,,,---,,,,,,,,./ F 68 75 1 +´´´´´´/€€&(RÄoooaÆÇNdd„Qhhhhhhhhhhhhhhh“¡€O%6FO€EKK::::::::::::´´´´´´/€On(SÄooooÅqNdd„“¢hhhhhhhhhhhhhhQ›€O F€NˆK::::::::::::´´´´´¢£€On((U¿ÀÁÂÃ5~ddhhhhhhhhhhhhhhhhQ›€7  %N~»KK:::::::::::´´´´´ €7)(((((S½¾7Xd•v¢hhhhhhhhhhhhhhhPe€6  %™š•vK::::::::::::´´´´´ e€%www))(()%7Xdr¼¢hhhhhhhhhhhhhhhP€O% %šmLK::::::::::::´´´´´žN€ wwwww %FXdr]hhhhhhhhhhhhhhhKD€O%   6šmLK::::::::::::´´´´´E€€ 6Odd„]¢hhhhhhhhhhhhhhh”€O%  FšmLK::::::::::::´´´´­›€€* *6€dd»¢hhhhhhhhhhhhhhhh”€F Fšš„;:::::::::::::´´´´ª›€F ………… 6NddˆhhhhhhhhhhhhhhhhK°€6)#$ 6€š•::::::::::::::´´´´§€€F ƒ6Nddˆ¢hhhhhhhhhhhhhhhK©€ƒ((#6~––±K:::::::::::::´´´´0€€% …%7udd9hhhhhhhhhhhhhhhhK˜¤µ??¸6FN–¹º:::::::::::::::´´´´/€O …‡%FXd„]hhhhhhhhhhhhhhhhhKKKLL²—¶·‹LK::::::::::::::´´´¢°€O* …‡6FXd„“hhhhhhhhhhhhhhhhKKKKKKK;;;:KKK::::::::::::::´´´­€F …†6€Xd¨“hhhhhhhhhhhhhhhKKKKKKKKKKKKKKK::::::::::::C:´´´­e€6 …ƒ7NddhhhhhhhhhhhhhhhKhKKKKKKKKKKKKK:K:::::::::::::´´´ªN€ …‚%7ud•PhhhhhhhhhhhhhhhKKKKKKKKKKKKKKKK::::::::::::::´¢´§€€ …‚%7udr]hhhhhhhhhhhhhhhKhKKKKKKKKKKKKK:K::::::::::::C´´¢/€€$ …‡6FXd«]hhhhhhhhhhhhhhhKKKKKKKKKKKKKKK::::::::::::::;´¢¢2€F …†6€ddµhhhhhhhhhhhhhhhKKKKKKKKKKKKKKKK::::::::::::::9´¢¢£€F ƒ6Ndd¢hhhhhhhhhhhhhhhKKKKKKKKKKKKKKK::::::::::::<.I¢¢ €6 ƒ6NddˆhhhhhhhhhhhhhhKhKKKKKKKKKKKKK::::::::::::;2-%%¢¢ e€ …%6~ddˆhhhhhhhhhhhhhhhKKKKKKKKKKKKKKKK:::::::::::¤³%%¢¢žNO$ …6Fudd]hhhhhhhhhhhhhhKKKQQQKKKKKKKKK::::::::::::::²€6¢¯£€F* …‚6FXdrQhhhhhhhhhhhhhhKK“°M?4=J\]BCKK:::::::::::::::±™¢­›€F …‡6€Xdr“hhhhhhhhhhhhhhKKQ¡F%%%%%,,@PK::::::::::::::;;®¢ª›€% …‡6Ndd«“hhhhhhhhhhhhhKKKQ©O6%%%%%%7¬9::::::::::::::;;;¢§€€ …ƒ7udd¨hhhhhhhhhhhhhhKKKQ©€6%%%%%6O€¡:::::::::::::C;;;¢0€€ ƒ7udd¤hhhhhhhhhhhhhKKKKPe€% %F€€¥¦::::::::::::C;;;¢2€O* …ƒFXddˆhhhhhhhhhhhhhKKKKD€O 7Nv::::::::::::;;;;¢£€O …%OdddvhhhhhhhhhhhhhhKKK”€O 6šš<:::::::::::CC;;; €F …‡6Nddd677!%    %%%%%%%%%%%%%%++,-../0011234,5%%67     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%#         %%%%%%%%%%%%%%%%%%%*)          %%%%% $)            $ (             $ ()$          $ ((#      &''$%    %%$ $$    " ##   !  ! +     ! +     +    + 12 68 26 1 +úûááááááââüüüýÑHoZÜdecs\\Êд£££££É¡zþ–Ázzzz¡¢££££££££’ñòááááááâââãóôHH[gcddp}oÄß´£££££££“õöHH÷zzzzzz²øù££££’’èéááááááâááãêHHoˆqedp}\µç£££££“££££ëìíî»zzzzzzzï…””ðððÌuà²ÙÙáááááâãäå\S«qe‰ˆ}\µæ££££É¡²“£££££çµÊÑ »zzzzzzzzzyyzÒÓ+ÔÕÖ×ØÙÚÛ|\]fdqÜs\ÝÞ“£££“²yzz‘’££££³ßµ–¦Ÿ ±zzzzzzzzzzzz::ÌkÍ>BÎgfddpS\χz…“£¢…zzzzzz²¢£££££´ÐÊѧŸŸ Âzzzzzzzzzz%ÅGÆg‰def}\Çzy„²ÈzzzzzzzyÉ“££££´ÃÊHËŸŸŸ  ±±Â»»%&À‰ddpa\‡Ázzzzzz±Âzzzzzz…“£££££ÃÄH¦ŸŸŸŸŸŸŸŸŸŸŸŸŸ·¸¹eep‹\[Zºxzzzzz»  ±zzzzzzz„¼£££££´½¾¿§ŸŸŸŸŸŸŸŸŸŸŸ1ªeq«SB¬ ­!®u¯°¨¨ŸŸŸ ±zzzzzz²¢££££³´µ¥¦§ŸŸŸŸŸŸŸŸ¶1Šeˆ[\< Fj‚mžžŸŸ zzzzzzz¡¢££££¢¤–¥¦§ŸŸŸŸŸ¨©$<Šf‹\E) F@:TŒŽzzzzzz‘’“”•|H–—˜™š›œ"%&(< TJUVWXDYZ[\15BN) 2OOPQRS$GBHI F:JJKLMEBC F@A=6BC D@;<=6>#< ?@%4567#) *8918:%&'(#) *+,-./0123 +  !!"##$ +  15 64 38 1 +7777733333343334344444=4=3444=44=44-2......2834XXXYYYYZYZZZYYZ777333334443433734474344J====4=4=482.......-4J/J/=4=4XYYYYYYZ77373734343344444344444444444=443-2.......<8=====JJJJJJJJJ4XXX877777373344334333434343444=4=38<2.......<34===J=JJ=JJ//=JJ/JJ8877377433733434=4444=44=7=3348<2.......2834=J=====J/J=J=/J=J/8787773373334333343333473337771........283=====JJ====J=JJJJJJ/788833773=733334333333444383812........-34J===4===JJ=JJJ6=:WJ=8773377337773343434333374778-2........<7344==4======JJJ==FTUVJ87888777733377777773773338111.......-;4344=44===4=J=J===JO%LS6888777837778873444434478-122.......263344===J=J===JJ/===SMLO8888873877333378887788812.........15'444=4==4=4=====4===RLM8888778777777788347338<2.........-#%?4=34====4=J=====JJ4LLQ88883883887777778788812.........7'CC=4===4=J=4==J=====OPLE8888888887888888888-2.........1:'''DD43=444=34==4=====J6NLE88888788388777888812.........16$'CD''CHI/==3444=43=JJ=34=J=KLM-888888888888888-1..........8CCC?'%C:3444=4==4443===4=4FGH-88888888878888-2.........24$CCDC'?CC'#33=7343444=44=====4+E2888888888888-12.........1:''?'CC'CC444=444343=44=3444=C2<78888888-12.........19'$''''''$?'$443443=374344==444=DAB#6;4488812.........-#$'$?'''''6734344=444344=334=6C>@#;8222.......1;$''''$$'$'':334344433444334=4362>98--1122..2-4$$$$$?'37737=4=3434==3====2-68888-11228:$$$'$6333334343=43344434.2694438-<1-9$$$$$733333434333343433:.<=:#:98-18#$$$$$$$553343448444434=446 .28:#4884#$$$##6;4447343333; ...*6789$''%''#:6/4443 ..2345#$$$'& .1#$$$$$'''! ./0$$$''$' , -#$$$+ ( )*$$+ & $$' ! "#$$% +     + 18 60 58 1 +ll5 17››œ.YIIUGGGGN@@@@@@@@@@@@@MMMMMMMM8žžžš”šc—&77777+KBIL)GGGN@@@@@@@@@@@@@?MMMMMMMMO’˜™•••–š &&&&&&&&77.:IIR@GGGG@@@@@@@@@@@@@@?MMMMMMMM’-Ž‹“”••–Spp&&&&&&&&+.BILMGGGGG@@@@@@@@@@@@@?MMMMMMMMM,ŒŽ‘Saaaaapp&&&& .VIILMGGGGN@@@@@@@@@@M@@?MMMMMMMMMO‰Š‹1aaaaaaaapp`.:IIUGGGGG@@@@@@@@@@5#@@MMMMMMMMMM%†‡ˆ… &aaaaaaaaaabVBIL@GGGGGN@@@@@@@@M#,M??MMMMMMMMM*,ƒ„ttt…:&paaaaaaaa`.IIPGGGGG@@@@@@@@@@>eH*@MMMMMMMMMMM/‚ttttt*&paaaaaaaad.CILMGGGGGG@@@@@@@@@$VA*?MMMMMMMMMMMODx€uutG/&&paaaaaaa\.:IIUGGGGGGN@@@@@@@@@JKA%?MMMMMMMMMMMM]{||}}~l)e &paaaaaa`.YII)GGGGGN@@@@@@@@@5'AO?MMMMMMMMMMMM,vwxyzyllW&paaaaaadKrIL@GGGGGN@@@@@@@@MJVA/MMMMMMMMMMMMMOXaattullJ&paaaaaa\.CIIUGGGGGGG@@@@@@@@>!.A,MMMMMMMMMMMMM%aaaaall[SpaaaaabKBIL)GGGGGGN@@@@@@@@^VQA,>MMMMMMMMMMMM*!daaaallQ&aaaaaas.:IIR@GGGGGGN@@@@@@@@JVAAHOMMMMMMMMMMMMMA\aaaalNQpaaaaa`.CII2@GGGGGNN@@@@@@@>QAAOMMMMMMMMMMMM>/0aaaalq:paaaaa\.KrIR@GGGGGGN@@@@@@@@$.AA/MMMMMMMMMMMM)O.daaalq'paaaab.:IIUGGGGGGNNN@@@@@@@J AA/*MMMMMMMMMMMM%,faaalq' paaaabVBILMGGGGGGG@@@@@@@@5.AAH*MMMMMMMMMMM>)80aaal_' paaa`.TIIR@GGGGGGGN@@@@@@@5 .:AA%MMMMMMMMMMM))/aaal_K paaad.CILMGGGGGGGG@@@@@@@>!. :AAOMMMMMMMMM>>))%!daal^V-aaaaX.:IIUGGGGGGGGN@@@@@@@MZZmn''AAoMMMMMMMMM>)))),XaaNWV-aaa`VCIIUGGGGGGGN@@@@@@@@@@@@))ijk,,MMMMMMMMMM>)))$0aaNgVSaaadVBIL@GGGGGGGGN@@@@@@@@@@@@??Mh)*MMMMMMMMM>>)))O.daNe.Saaa\.CIIUGGGGGGGGG@@@@@@@@@@@@@??MMMMMMMMMMMMMM>)))U,faNe.1aabKBIIUGGGGGGGGN@@@@@@@@@@@@@?MMMMMMMMMMMMMM>>))))80a>e.`aa\IIR@GGGGGGGNN@@@@@@@@@@@@@?MMMMMMMMMMMMM>))))))$Da>Vba`.BILMGGGGGGGGGN@@@@@@@@@@@@?@?MMMMMMMMMMMM>)))))))!dcVaa\.KBIL@GGGGGGGG@@@@@@@@@@@@@?@MMMMMMMMMMMMM>>))))))),d5Vab.:IIUGGGGGGGGG@N@@@@@@@@@@@@@?MMMMMMMMMMMMMM)))))))Z\$VabVCIL)GGGGGGGG@@@@@@@@M445>>MMMMMMMMMMMMMMMM))))))))O0^VX`.:BIPGGGGGGGGNN@@@@@@@500;66J_**MMMMMMMM>>)))))))2!^V\\.VCILMGGGGGGGGN@@@@@@@@J ]6__MMMMM>>))))))))A[V\X.:IIR@GGGGGGGNNN@@@@@@>]2MMMM))))))))))8 .X.YIIUGGGGGGGGG@@@@@@@@5 .:/MMMM))))))))))ZVBIL@GGGGGGGG@@@@@@@@>!  :WMMM>))))))))))O.CIIRGGGGGGGGG@@@@@@@@$     H%MM)))))))))))) STIIIUGGGGGGGGGN@@@@@@@J   $M>>))))))))))):IIR@GGGGGGGG@N@@@@@@5   '8*>))))))))))))7 .BIIP@GGGGGGGGN@@@@@@>6   Q%>))))))))))))KBILMGGGGGGGG@N@@@@@@>!   :OM))))))))))))II/?@GGGGGGG@@@@@@@@J&&&  '8))))))))))))).BC:D;"EFFGGGG@@@@@@@>&&&&&&&&  H)))))))))))))9:.0;"<4=>>?@@@5.1777&7&&&& A$))))))))))))033"45567777 8)))))))))))) 0001&  ',2)))))))))))     & %)))))))))))    -  ./)))))))))))      + ,))))))))))*     & '($$$))))))*         !""#$%% + + +                 +      +              + + +            1B 60 26 1 +öö÷øùjƒh¸åÂabTTVúØÏÐÐÏûúS~¦­¯½¾¾Ô¾Ô¾ÔÔÙÔÙٿ٫««¬¬¬¬¤üýëìíîïð‰}h¸å×ÂxrbTUU`ñòÏÐÐÏØÞ󦮮½¾¾¾ÔÔÔÙÙÔÙ¿¿¿¿¬«¬¬¬J¬¤ôô‘õ‘霃}äÝåÂÂarbT„„~~_æÉÐÐÐÉêS¦®¯½¾Ô¾ÔÔ¿Ô«¿«¿««¬««¬JJÕëèèâÛ‘ooã}äݸåÂxabbVU’’¦~ÄæÐÐÐÐÉÞ̦¯¯½¾¾ÙÔ¿««««««Ú¬¬¬H¬:ç—èÀ¥‘oooÜݸ¸×ÂaabVTT„~¦¦~_ØÏÐÐÐÑÞß¹®½¾¾ÙÙ¿Ú««¿¬«¬«¬¬JJ:àáÀâooodÁ××ÂxxbbbTTU„„’¦ÃÍØÏÐÐÐÉÒR®¦½¾Ô¿Ù««¬«¬ÚJ¬¬¬JJJJf¥¥‘ÛooL˸ÂÂxarbbTUUU’’¦¯ÌÍÎÏÐÐÐÑÒÓ¯®µ¾Ô¿¿««¬¬«J¬J¬:JJÕÖoouÁÂxxxarbVT„U„’’¦¦¯ÃÄÅÆÇÈÉŧ½¯¾¾¿¿«¿¬«¬¬¬JHJ:JÊ¥¥oog¸xixaabTVU„„’„¦¦¯¯¹žº»Fu¼,Š´½¾µ¿¿«¿««¬¬J¬JJ::fÀÀ¥ooLYthxxxxarVVT„U„„’­®¯°pXk±Y* ²³´ªµ¶««¬«JJJJJH·“”¥oo› ƒxxxaabbVTUUT„„’¦§j‹*¨©¢ªª«¬¬:JJJJ91¥¥¥‘‘oo› œxxxrbTTTUTUU’’~ž67+Ÿ ¡¢¢£JJJJ¤¥—oL ‰xxxribbTUU„U„’„˜)+7…™:JJ9–1–šooˆ ‰xixrbbTVU„U„U’SE k)[:IHI“”•9–—ooˆ ‰xiaxbbVTTTT„U~Š‹7+ŒHI:Ž00‘oo ƒxxrbbTbTTTTU„cE F++d…JIII†f]^‡o }xxarVVTVUTUU~q6dI:III€<‚Lp wxiarbbTVUVTT`y+ zHI:II{|oop qraaabbTVTVVTst7++uvJ::IIfnLLM6ghaibbVVVTTTT`j6klJ:::IfmnM=N_`abbVTTTTTTcE de:::I:f LM=NOPBBQRSTUTTVW 6X7+YZ[::::\]^=>?4444@@ABBCDE F+GHIJIJ2K 3444444&&&'56789::99;< !"##$ %&'' ()*+,-./012 + + 1E 60 17 1 +íííí#!¯%n‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚&î²µïï]´’ðvvhñ\ŸžŸžT’’òåóôõmÒã#SÞ$°%䔂‚‚‚‚‚‚‚¢¢ƒtåæ’Tlç‡ççç\è\éêTTŸŸŸTŸTŸØ\ëëëlTìÞÞÂÂÂЂnßn‚‚‚›ƒtàváâx†‘††lŸ’]´U  µ³HmmmH²HHHH““³ UÄ]’ÂÂÂÂК‚`IÑÒÓÔÕÕÖx×\ØT’Ùó“²___IIIyyy888¶ÚÚÛÜݯ°‚‚‚”I_^ÃÄŸ‡††‡TTõ^m_IIII%y¡8&›Å£ÆÇÈNÉÉÊËËÌÍÍÍÌÌËÎϯ°š‚‚‚‚`±²³´‡‘‘‘‘Tµ²_I777¶¶”`=·¸<¥~¹/§ººº»¼½½¾¿ÀÀ½½Áš‚‚‚‚‚›œž‡‘‘ŸT] H_Iy¡”¢£¤|‰<¥¦/§-¨q©ª0«««¬«¬¬­®‚‚‚‚‚t‘‘†l’“_II7yn”X{ˆ•–—/‹-˜Œ?P000ABfCC2C™‚‚‚ƒv„…†‡TUHmI7y8‚X{ˆ‰Š~‹qŒP0BfC2ŽtuvwxkTUH_I7yWzX{|}~/?P00ABCCCCCCC€Shijkl]mI7%n`op)9-qrP0AA22Cg sS[\T]^_I%`Xabcde?P@0ABf2g !"TUVI7WXM=Y) +,P@0ABCC2Z$F"HIJ'KLKMNO,P@0ACC2QR#S78)9:+;<='>?@0ABCC2DEF"G%&'()* +, -.'/012345"6 +  !"#$21 32 82 1 +=*...ÜÙÙÙÙÙÝéìæïæâââððââââððâ0-/...&ØÙÙÙÙÙëâóæææâââðððâððð004/....ÜÙÙÙÙÙÞâæñæââìâððððáð>00-*....ØÙÙÙÙçëòæææãìðððððáð9000=/....ÜØÙÙÙÙÝéìñïæãâââðððí9803=/....ÜÙÙÙÙÙçîææïæâââðððkoAÇ004,*....ÜÙÙÙÙÙëáãææââìââTkTA_004,.....ÜÙÙÙÙÙåéâããêâââjGkMA_003+.....)ØÙÙÙÙçèáâãããâ[jMkMa9003ä7.....ØÙÙÙÙÙåßâãææ>KAMkTÊLÇ03=7.....)ÙÙÙÙÙÝàáâã008LnTGGF_803+*....&ÜÙÙÙÙÙÝÞß0000:aTkTF[803,......&ØÙÙÙÙÙÛÚ•000_aTGGnr_83g*......)ÙÙÙÙÙÑÕ 000ÇrxkkMj:802/......)ØÙÙÙ°ÔÖ×0008:jTGkx`_33+*......)ØÙ°°°ÔÕÌ000_EjMkTn`?32**......)°°°°°Ñ 0008?AokkTF:04œ.......°°°°°°ÑÀÌ000_SÊGkTnED3œ+.....°°°°°°°°ÓÌ00089FBkkBAK03+....°‡Í|¨°°°ÁÄ •00>_@jTGTjL_3g/..}’mq{}°°°°ÎÄÌ•000DLxTkGjÒ?8g+Ðmmmmz|°°°°°ÑÏ00000SFTkkTjE84hummmmÍ}°°¨¨ÎÏÌ000>?`AoGkoF@¢.hlmmmm†‡°¨¨¨£ËÌ000008`okkkM£È­hlmmmm†w}¨¨¨¨ÉÀ•00008SrÊTG°°£ÅÆilmmm†µ}¨¨¨¨½000000Ç:r°°°°º¢hummmmz¨¨¨¨Ä00000000D}°°°Á³­immmmq‡¨£Ã0000000000z€°°°°‡±­ilmmmmzª 000000‹0000m¸¨°¨¨‡®¾hummml¿00000•»¶‰À•mmm¸µ¨¨¨¨¹º­hui./0000»Œ{‡¨}¼½mmmm§‡¨¨¨¨®¢.../=00‘†—¨¨}}}ilmmm’‡}¨¨®­....g0•š¦{§}¨}}}.hlmmmmzw¨«³.....,3‹¡†v‡}}}}}­.himmmm¶·ž...../4š†{€}}}}}‡²³..hummu´03g*../2‹‘†—¨}}}}}µ°‡±­..ii./000-*.g0š†v‡¨}}}}}¨¨‡®­....*=0002-3•–’—}}}}}}|¯¨¨¨¨®¢....=000000‘{€}}}}}}ª­¨¨¨¨¨‡˜­..,30000‹Œ†—}}}}}}€¢.§¨¨¨¨«¬..740000š†{‡}}}}}}›..mz§¨¨¨©..*=0000‘†—}}}}}}ª..mmv£¤¥g*œ3000•š¦{|}}}}}‡›™..mmmmŸ 00-30000‹¡†v‡}}}}}€¢.//umluž400000000š†{€}}}}}}›.*g4.hh..œ0000000‹‘†—}}}}}}€.+30.....,0000000š†v‡}}}}}}›..g00...../400000•–’—}}}}}}}˜™/300......-00000‘’€}}}}}}}€“”000ŠW...*-0000‹Œzz€‡}}}}}‡ŽCƒQWt300000„…mmmm†w€‡}}}}}ˆ‰kCH‚_D00004,hulmmmz|}}}}}}FTGH~ja98003,..hummmmq€}}}}KrxkkkTxy880=....hilmmmmz{|}}0DEAnGkkBFr?st.....hulmmmmvw0000K@nMTkTojp^.......hilmmmq000008[LjGkkGOc]XX......hhllmg400000>9@FTTH\Qcf^.......hhi%7=3000000K@aMCHIeRfX........($&+=300000>_`aMCObQcd^X.....Y$)7Z33000008[EFBMO\VRW]^..# (&7,00000000?SFTCHUVRRWX###5J)/,43000000KLABMNOPQR##### $%7=00000000DE@FGHHI######;((<+=30000000>?@ABC#######!56*7/-300000089:###### (%*+400000000####   1$)*/2330000###   (%./,-000### '(()*+,-#   $%&# "  !!!"        +   +  24 96 34 1 +ûûûûîî÷ûûûûûûûî÷——ûûûûûûûûûî÷—ýýý—ûûûûûûûûûûîî÷ýÒɱ±ý—ûóôôôôôôôûûôî÷÷²²Òұɱ±ýûóôôôôôôôôôôõèïü÷²òÚÒÒɱ±±±—óóóôôôôôôôôôõõííîù÷÷ääòÚÚÒÒÒÉɱ±º÷óóôôôôôôôôôôõõííèèìîöö÷ø÷÷äðòÚÚÚÒÒÒ±±±±±²é¹¹¹êààëááëëìâííèèèèèèèîïïïððñññòòÚÚÚÚÚÚÚÒÒÉɱ±±±È²....===圜¹¹ææçèèèèèèèããâÚÚÚÚÚÚÚÚÚÚÚÚÒÉÉɱ±±±º—f....#xx·Üœ°¹àÑáâãâÚÚÚÚÚÚÚÚÚÚÚÒÒÒɱ±±±±±ä¬ÛW¬c¬::`VCC ...·nܸÝÞÉÚÚÚÚÚÚÚÚÚÚÒÒÉɱ±±±±ÈßaÎÓÔÔÕÔÔÔÔÖÖÖ¿×ØÙYV:C + ...x=œ°¹ÉÑÚÚÚÚÒÒÉɱ±±±±±±È²Ê¡zzzzzuuuuuuuËËÌÍÎÏXXµXDDc¶@¯~Ð.#xˆ°°ÇÑÒұɱ±±±±±±±¤— zzzz uuuuuÁÂÃCWcDµÄÅqk{!Æ .††°ÇÈɱ±±±±±±±±º—Tzzzz777777duu‹»¼§½4qqqq¾¿cY:C ##·°°À£±±±±±±±º—pzzzzuuuuŒ§2Bqqqqq³´XEµXD`¶""~.†·¸¹±±±±±±ºžTzzz73quuu{¥2pqqqqqqªG«:Y¬­®  !9¯Ž##ˆ°££±±©©ž²L˜pAzzuTpppppppTquuu9¥¡qqqqAq 9¦§2pdddd¨cV.#Mœ‰©©£€–L-+ŸLSzzzuuuuuuuuuuuu}x36qqq6 q @x2¡dddd¢FXXD:.(‰•£€€¤–—--++++LBzzuuuddddddduuuUPx26qqq d&š7dddU:cDFC›fxœ‰€€€ž™—˜KŸ+++++-17Tzzzd777777p5uuuqŒx24qqq3“ dBSddd!Ž YXX”Y +.‡•h€€€€’–—˜˜˜˜˜˜˜-™++++++++KŠuuudduq‹Œ_4dqqABAdSB5ddd&Ž +VcDFYI#mˆ‰‘€€€‘’’’’’’’’+++++++++Kuuu 7Buqqq9‚B qqq4 d 5ddd{ :ƒ„…&}9~†‡ˆ‰t€€€yytt+++++++++++*-"zuuu6uqq{|qqq6B d Sdddd"wAAAAA!}~#M€€yytt++++++++++++K^7duuuvpqqqH3Sqqq6 dddddd"QR8AAAAAw fx)shytt++++++++++++KTT6o p6666B6qqq3B dddddRRAAAABAArFcff(Ms*tt++++++++++++LMi N23B4j2Adddd9"8AAA 7AklFFc.mn]h++++++++++++-.1 ._0?B ddd!QR8AAA44A UeCcXDY fg)h++++++++++KL^N1 M_1/ 34SSHRAAAAAH3B5 @`Fabc ()*+++++++++L.1.. .MN/ OPQR8AAAAAS43T U VWXDY Z[\]*+++++++KL > ?/0#@5AAAA5B5AA53 !"CDEFGH'I)J+++++++KL ./ ./ /01.2345674 89 :;<&&'=)*++++,*- + +     !"#$% &'()*+++,*-27 172 47 1 +³èèèèèïûØæ66666666;>KN[]TWWVVUdfgguu|5555555555555555555555555555555555555555{{uo°_s^^Vk\LB@<6666666666666ÔìÕüɲ²²¨6666666666666-555555%+.&055†ÙýþVRD<6.17ÖÖÖÖ‚‚‚8‘¿¡³èèèèèÞØæ—6666666666M]QRSTVaVTSÛddPú˜¯¯u|55555{{||55uu{{qopqo°XZZsc^WWUTQ[L@?<666666666666666666žœœœœœ«²²²²²£666666666666*55%*666666.0{^UK<;/,ùÖÖÖÖ‚‚‚ˆœœœœ«¿³èèèèÞØ—66666666666666<=>@AB[STUUVWWVV^U‡äälrrXXrZrXXXrZZrlscc^^^UVUkR[[LBB=<666666666666666666666-®œœœœ¿²²²²¨666666666666-5&./666666ACGKM[\QRSTUVWWaaWaaWWWWWWWVUWWURSS]N\MAB<;666666666666666666666££Ô666Ù›œœœœ«²²²²·Â66666666666/+/66666666BQcs˜@<6/1ùÖÖÖ‚Ö‚Ö‚‚‚ 5†‹œœœœª±ÉèèèÐÞÊ66666666—Ôæ6666666666666<<<>>ABDGKM[\]QR]ee[\]]eGKMF@AB><<<6666666666666666666666ìÒÍÀËßÑÔ6+œœœœ¿²²²²ßì66666666666666666666@\UVQ~™66,ó‚ÖÖ‚‚‚‚Ö‚‚‚ô555†›œœœ¢èÐÐЩî66666Ç¥âºíØØ£æ6666666666666666666666<<<<6666<<6666666666666666666666666666666Ô¥â¸É²²²²²ËÍÔŒ›œœœœ‘¿²²²²¨6666666666666666666CQUVQB<6/-ø‚ÖÖÖÖ‚‚‚Ö‚‚‚Î55555›œœœ¦èÐÐÐÐ÷6666ÇÈ «³ÐÐÐÞ©6666666666666666666666666666666666666666666666666666666666666Ôž­œ«²²²²²²²²À•œœœœœ«²²²²·£66666666666666666>\VWSE<66+ö7ÖÖÖÖÖ‚‚‚Ö‚‚‚Î555555‹œœœ«ÐÐÐÐЩÁ66µÈ  “ÐÐÐÐÐÞÒšÚéØØ£Áææ66666666666666666666666666666666666666666666666666žœœœ‘¶²²²²²²²²É¡ðœœœ§²²²²Ì66666666666666666-å‚ÖÖÖ‚‚‚‚‚‚‚‚85555555›œœ«ÐÐÐÐÐÐî66µÈ  ¶ÐÐÐÐкϱ«¢³³³³´´éØò££66666666666666666666666666666666666¨¨ÂÓ£Ô66š›œœœœ«É²²²²²²²²²²§‘œœ’²²²²À£66666666666666>]VVRD<;6.ö ÖÖÖÖÖ‚‚‚‚‚‚‚‚8*#05555‹œ«ÐÐÐÐÐÐÂ66¥   ¶ÐÐÐÐж±±«¢³³³³³³³³ÞÞº´©éÑòÓ£æÔ—666666666666666666666ìÓ¨©©²¢¢¢¢²Ë©ÑÔµÙœœœœœ¦²²²²²É²²²²²¡¿’§²²²²¨Ô666666666666B[UWSe<66/õçÖÖÖÖÖ‚‚‚‚‚‚‚‚6/.*&05±§ÐÐÐÐÐÐò66‰  «²ÐÐÐÐж±±’É¢³³³³³³³³³³³³³³³³¢ÜÜ©éî6ÇîÓÓÓÂÓ66666666ìáßË¢¢¢¢¢¢¢¢²¢¢²²Ë¨žœœœœ‘¡²²²²¿“¿¡²²²²²¡’«¡²²²²Ì6666666666FQVU]E<<6.)ç7ÖÖÖÖÖÖÖ‚‚‚‚‚‚‚‚‚Î666666Ǭ’¡ÐÐÐÐÐÐíæ6µÈ  ¡ÐÐÐÐÐ܆††‹›››œœª¿³³³³³É’“¿§¡¡³¢“§¢¢¢¢ºÂ66—Ú¦“¿²¢¢¢¢ÉÈ›œœœœœ«É²²²²²Èœœœœœ«²²²²²«œœœ‘’§²²²²²²²²²ÉÂ66666>KSVW\A<66/'ÖÖÖ‚Ö‚‚‚‚‚‚‚‚‚‚866666µ¬“§¢ÐÐÐÐÐïØ—6µÈ «²ÐÐÐÐЩ…55555††‹œª¿³³³³³¿ªœ‘È’±¦¢¢¢¢ÜÂ66Õð“¦É¢¢¢¢É­††‹œœœœœ ²²²²²Àœœœœ¿²²²²¿‘œœœª’¡²²²²É²ÉÉß—666A\SVVRD;66/)çÖÖÖÖÖÖÖ‚‚‚‚‚‚‚‚‚‚‚ˆØîææÁᶲ³ÐÐÐÐÐдî66¥  ’¢ÐÐÐÐÐØ'5555555‹œ±§³³³³³ê†‹‹‹ÙšŸ’¢¢¢¢¢Ñ6Ǭ’«¶¢¢¢¢²ÈŽ5555œœœœœ’²²²²²¸ëœœœœ ¡²²²²êŠœœœœœ’¿¡²É²ÉÉßÔ6>KQVVS\@<66-&çÖÖÖÖÖÖÖ‚‚‚‚‚‚‚‚‚‚‚‚‚ÎèíííéºÐÐÐÐÐÐÐÐÐØ666Ï  ¿ÐÐÐÐгØ-5555555‹ª‘±§³³³³³”55555&µŸ«¢¢¢¢¢¨ì¬«« ¡¢¢¢¢É®555555œœœœ‘¦²²²²²Èœœœœœ¦²²²²²È†›œœœœœ‘§É²ÀÂì;>eTWVQK=<66.# ÖÖÖÖÖ‚Ö‚‚‚‚‚‚‚‚‚‚‚‚èèÐèÐÐÐÐÐÐÐÐÐÐÀž666Ï  ¶ÐÐÐÐгÊ.%55555†‹ª‘±§³³³³³•55555%/Ÿ ¢¢¢¢¢éÒÈ  ’É¢¢¢¢¸5555555†›œœœœ“ɲ²²²¬‹œœœœ‘¶²²²²êŽ†‹œœœœœë•Ìì6<666/+ 8¾Å!! ‚‚‚‚‚×55555555555550+66‰  “¢Ð³³³³Ø666666666š­±±«É³³³³ºÓ66666666‰±¡¢¢¢¢©Ùœœœœ«É¢¢¢¢ÃÂ66666—Ú’“¦¡²²²²ËÓ66,Ž›œœ››®ÓÔ66<>GÛs_`fJ<666/,1 8 ˆ‘Ä!!!3‚‚ˆ5555555555550)/66Ï  ¿Ð³³³³³Ñ666666666šÈ±±«²³³³³º£66666666š¡¢¢¢¢©Ò®œœœœ“¢¢¢¢¢²ÑÓÔ6—Õ”¿¶É²²²²ÃÍ—666*Ž††50+6>F]SUWVRNB<6666-% Ö ‘‘ÄÄ!!3×555555555555'666ÇÈ ‘‘¶Éɳ³³Ê666666666š±±±«²³³³³º£66666666š§¢¢¢¢ºÂŒœœœœ§¢¢¢²²²Ë©Â̧§¡²²²²²²Í666666&55555hB\SWWWT\E<66666-$ ξÅ ¾q{|5555555#'/666šªªœœ±’¿ÀÁ666666666š±±±«²³³³³º£66666666š¿¢¢¢¢¢Â+›œœœœ ¡²¢²²²²²Ã²²²²²²²²²¸š666666,055|qnlUWVS\G@<6666.) ‚8ˆ‘ÄÄ!ÅŽľÆYYmq|5555%,666666…†››œœ›‹­/666666666š±±±«²³³³³º£66666666š“¢¢¢¢¢¨.†›œœœœ‘¶²¢²²²²²²²²²²²²»”+666666/¼{pnYbsVU]F>66666/,$ ˆ½½¾¾‘csZ_°zIH6666666%55†††0*6666666666š±±±«²³³¢¢´£66666666µŸ«¢¢¢¢¢¨µ%†›œœœœ“¶²²²²²²²²²·¸¬®55,6666>@F¹€bbbX[K@<6666/-& ‚ ‘ˆMSUUVaWSk]D@@=666+55555550.6666666666¥‘‘‘ ’“¦§¨£666666666Ÿ ¢¢¢¢¢©£*55†‹œœœœª‘«““¦””¬­®55550.<>CeQSVWc€n¯¤<6666/.)0 ‚ 6666666,#38666;>Ke]VVWWaTQ]]Oh|55555&66666666666.%†††††Ž.66666666666‰‘’“”••–—/*05555††††††55555555|up˜RSVWWSR[KB™666666/+%386666666@eM\TaaaaaVrnopq55*666666666666'5555550.66666666666‰ŠŠŠ‹‹‹Œ66666.%555555555555555{{pmY_^WWWT]K@>6666666.+&  66666666<<>F[\]RWa^_`bYnp„FGB<66666666+555555%.66666666666/…††††5%666666,0555555555{{poomYYb_c‡RjMF@<666666/.,#" ‚ˆ##,//666666666;ALM[NdssZ_^WWS\MMLKGEC=.%55555%.666666666666'55555%.6666<<-ƒ{{{{qnonYYbbbbbnXdLE>><6666666-'%4 8x5#%.6666666666666;B[y]PRTaaaaaWVVVTMCz{||55#-66666666666<,55555}~@>>@MMeeYYYYbbbbbb€nnn@@/66666666/.,0‚ +!20&&).6666666666;<=>>@LQjRkSTTUWaUSlYYmmnn\[MMLFGEDBBD\OnoppqnrRjQQUVVU^sZtbbYmYnuuvw-<66666666/-&&0  3 "#'*-6666666666666<>>?@BCEKSVWW^Z___`_aaaaWVVVUTSTWa_bbbbbcaaaaaWUTUVdefghii(+.6666666666.-%4 7899 + "5*)+,/6666666666666666>?@ABCDEFGH++,,IJ@<66;<66666666666666//.''#2 789:3""#)++,-.66666666666666666666666666666666666666666666666666666666.--'00 78 +!4225*,--...//6666666666666666666666666666666666666666/..-'&'024 833424445#*/666666666666666666666666666666/6666-+,-#450 78 + +! "#$%&'()*+++,,--...////-*+++,--'0#%%1022! 3  +    2A 88 34 1 +[t[[Z[[[t[t[ttt[[[[yy{{{y{{||}~‡‡}~{}z^LJJKHGGGGG?€„„“‰”JKKJKJwJM[[yy{[•[[[ZVZV[[Z[Z[ZZ[[[[xtt[tx[ty{z||}||}}|}‡‡Œ‡WLJLJH?GGGGH„Ž‘JJLJKLJKJKJWztz’yzZ[ZV[ZZZVZZZ[Z[[Z[Z[Z[[[t[tZtt{{{tyt|{{{}‡{|}|}|ZJJLJH?GGGG?J€„„ˆ‰ŠJM‹JKJJJJJL\z[zz[yZy[V[UVVV[ZZZ[[ZZ[[[Z[t[t[[[{ttt{t}{|{|}{|||~~{zMLwII?GGGG?Jl„„…†mLU\SJJKLJJMVy[[[Z[ZZVV]VZVU[[ZZZ[Z][ZZ[[Z[[[[tt[ytzyy|t|~{|}}}{{bKJMW?GGGG?Jw€‚ƒLLZ\JJJJJJ[[[[ZtZZ[ZZVV]VVU[[[ZZZZZ[ZZ[Z[ZZZZZ[tt[[{t{xxt{|{|{x}xx|VJJ[V?GGGG?JJuuJLJU{{tSJIJJW[V[[ZZ[ZZVUVVVVUU[[ty[[[]ZZVVZ[ZZZ[Z[Z[t[[ty{[[ttz{x{|y|y]WbZW?GGGG?JJLLLJL[[x[ZMJJIVyZ[Vt[VV[VVVUVUUUtt[[[ZZZZZZ\ZZZZ[[ZZ[[[[Z[[t[tZZyttxt[{[[ZSVU?GGGGGIJKJJJUxttVyWJJL[VZVVZVVVVUZUUUWUW{{t[[ZZZ[]ZZZVZZZZZZZZZZ[[[[[ZZttVtt[{yZy[U[U?GGGGGIJJJLM[y[[V[[KJVZU[UVZUVUZUUWWWUSWxy[t[[[Z[ZZZZ]ZZZZ[ZZZZZ[[[Z[[Z[[Zt[xxZ[[[[ZU?GGGGGIJJJL\[[[z\[ZWMZVVZV]UVVWUTUWUUSTStttttt[[[ZZZ[\ZZ[[[Z[ZZ[ZZVZZZZV[Z[]t[[t[xZZUHGGGG?IJJKM[[[t\V[VUUVUVUUVVWWTUTWTTWSSSU[ttttt[[Z[[[[ZZVZZZ[ZZZVZVVVV[ZZZZ]Z[Z[ZtV[WHGGNNHMJJJW[tZZZZZU]ZVUVWUUUWWTUWWWWTWSSlsU[[[t[[Z[[[ZZZVZZ[ZZZZZVVVVZ]V]]Z]ZZVZVZVVUHGGvINbKJJZZZZ][[]VUVZUUUUWUSWWWWWTSSTSb99uW][[[Z[[ZZZZV]VZVZZVVVZVZVZV]VVVVVZVZZ[U[UHGGvwNMbLW[V[VV[ZVVVUVWUUUWWWUVUWWbWTSTS999@mUZZ[ZZ[ZZZZZZZZ]VVVV]VZVVVZVVVVVZVVZVVZbHGGIJNSWLUZZ]UVVUUV]UUUUWUUWUVUUWWWTTSSS99999@m^UV[[ZZZZ[ZZZZVZV]VVVVVVVUVVV]VVVVVVUbHGGIJHMUWVV]UUUUUWUUUUUUWWUUTWWWWWWWWTTT8999999@^VZ[[Z[tZ[Z[[ZZZZVVUVUVU]V]VVZVVZVWWHGGNJHMWUUVUUWUUUUUUUUUUWWUUWWWWWWWWWUWT-789999@mSUZZ[Z[[[ZZZ[ZZZ]VVUUUVUVVVVVVZUbbHGGHJHMWUUUUUWUTUUUUWUWWWWUUUUWUWUUUUWTW-899999@l^WV\ZZ[ZZZ[ZZZZZVVUVVVVVVZVVUWUSHG?piHMWUUUWWWWUVUUUWUUWWUWUWUUUUWUUWUWU7899999@l^WVZZZZZZZZZVZZZVZ\VVVZ[VVWUUTp?NJiHKUUUUUUWWUUUUUUUUUUUVVVUUUUUUUUUUU56899999@lsSWUVZZZZZZZZZ[[ZZZZVVVVVVUI?IKKHKUVVUUWVUVUUVUVUUUWUVVVVUUUUUUUUWUa,8999999@q^TUVZZZVZZ[Z[[[]VVZVVUUUI?JropLUVUUUUVUUVVWVVUUUWUUUUVUWUUUUUUUUjkF77999999@lmMWUUVVZZZ[[[[[ZZ]VVVUJNJnopKUVVUUUUUVVUUUUUUVUVVVUVVVVVVVVVVVOdg,889999999@JKbWUVVZZ[[[]Z[ZVZUKIMThiKUVVVUUVUVUUUUV\V]VVVVVZZZZZZZZZZZC< /de55679999999@@IKMMSWVVVZZZVVVUKIbffKKUV]ZVVVVZZVVZZZZZZZZZZZZ[[ZZZZZZZ C'P_`a56899999999>@NJJMbSTTTTTKNJcSKJWVZZZZ[ZZZZZ[[[[[[[ZZ[[[[ZZZVVUUW' +C '1Q/Y=,-78999999999>?NNIIJJIH???HHIMUVZVZ[ZZZZZ[[[ZZZZ\VZ]VUUWT^LJIN%/OP' + C(QBR55778999999999????GGGGGGG?HJMSTUUUUVVVVVVUUUWTSSMLJJINN?98XA&B +C 12DEF--8899999999999?GGGGGGG?HIIJJKLMLLKKJJJIINHH>?9>977-:;< + + =!5-767899999999999999>??>>?>>>@??>?>999999886-$./01' + (234!5--66778888899999898988888887---"#$%& ' + ()*+ ,----------- + + + ! + 2D 56 35 1 +V, ;9••••·¸dppppppppppppppppppp¨¹º»¼½¾¿À®®ÁÂÃÄÂÅÆÇÈÉÊËš !•••••§dpppppppppppppppppppppppp¨››©ª« ¬­®¯°±²³´µ¶# ?••••œ‚plllpppppppppppppppppppppppppp››žŸ ¡¢£¤¥¦CVš t•••••‰p}llppppppppppppppppppppppppppppppp›››‚ V:# {••••{ol}}lppppppppppppppppppppppppppppppppw˜™““VCV !••••‘‰w}}Šlpppppppllllpppppppppppppppppplx <<<“:# ••••‘‘ol}}lppppppl}}}lpppppppppppppppppl„ `2<““VCVC# !•••‘‘‰l}}lppppplŠ}}}}lpppppppllllpppl `2<VVC †‘‘ŽŽ€pl}lppll}}}}}}}}lppppl}}lppp} ;r“0:Œ)CCCV, 9‘Ž‘KL‡lŠppppl}}}}}}}}lpppl}}}pppp Wr ’ŒJCCV ZŽŽŽKKwlppppll}}}}}}}lpppl}}lpppl~ r7ŒŒVCV:, 9ŽŽŽKKƒppppppl}}}}}}}lppppl}lpplv r"56ˆJCCC& !KKKKK‰ppppppp}}}}}}lppppplŠpppl~ ‹:Xh6huCVC5, ;3KKKK†‡ppl}xl}}}}lppppppppppp &Vhq*CCC ZKKKKK…olv# l}}}lppppppppppl Cqqqh+VCCV 9KKKKK‚}~;DYƒl}}}pppl}„lppl &C666)CCCC, ZKKKKK€DKK€p}lpplv# pplS A*q6hyzCCC 9KKKK{e/KK|l}lpp}~ Y8Dwp S-Jih*uCC& ZKKKKKGHKKaoppplv $wSN/G88rrxC6hqhACCC# 9KKKK KKKaappplS;rs r55# ! +. + /", ? <<35@A56)7,  + + +. + 89: ;!<=5'*+,-. + + + + + /0& 12345) + + + + + !"# $%&'() + + + + + +  30 56 65 1 +%Rêöð÷%%%%%%øù×pVV2,ƒhƒlFFF99×8 úûûàííòîíííîÅüèé%êR%%%ììì׊H><Ä·Y....^F2&p̵áôDfíífííííõèèèØ%%ïÞÖð$RìììÜ׊;š>,W.00.^,K–2g&|âñ òfíííóèèØØ%%8‹ãÖêëììÜŠ;UH>ƒ000000KcV|\\|&š“) íîçèèèØ%%½ ‹‹ãÖ佯;UUH>h.000000000_+cIœttßå\væfçèèèé%%ÜŠ' ‹‹ŒÝÞ8;UUUH>h.00000000001MIII…{55P ß\àáÐÜâØ%%%p:G‹‹‹ÎÚ;UUUUH>h.0000000000iJIII3[BBBC5 !]9¿ÐÛ%%%pHH:U' ‹³(UUUUUp>ƒ.000000000001rJIII{BBBBBCt—&RÐØRR%pHHHH:U (UUUUU>ƒY/0000000000-dJIII"BBBBBB5ž|×ÙØÖÖ¾ÀHHHHH::U(UUUUU:>ƒ./000111zkJII›œA5BBBBBBC˜|×ÕØÓÔ:HHHHHHH:;UUUUUÌ>ƒ./00XbkccccciIIŽœA5BBBBBBBC6|ÐÕÒÎÏHHHHHHHHH:;UUUUUÌ>ƒY/0kJJIIIJJIII7BBBBBBBBBt|ÐÑÒ‹GHHHHHHHH:;UUUUUÌ>ÄY/1dJIIIIIIIIIIŽ!ABBBBBBBBBt7HÊÍ ;HHHHHHHH;;UUUUUÁ>ÄY/_„IIIIIIIIIIIII›œBBBBBBBBÉ7HÊËGUTHHHHHHHG'(UUUUUÁ>Ä/1kIIIIIIIIIIIIIII£4BBBBBB 7vÇÈ((;GÁHHHHHT(UUUUUG>ÄX„IIIIIIIIIIIIIIIIJ—[BBBBB DvÅÆŒŒŒ ';¦ÁH( (UUUUUÀ>w^IIIIIIIIIIIIIIIIIIŽ{BBBBBPDvÂÃŒŒŒŒŒŒ‹‹ (‹‹(UUUUUÀ>wƒMIIIIIIIIIIIIIIIIIIII!BBBBP!šR¿ŒŒŒŒŒŒŒŒŒŒ'UUUUU¦>,IIIIIIIIIIIIIIIIIIII…A4BBBP!R¿ŒŒŒŒŒŒŒŒŒŒ'UUUUU¦>IIIIIIIIIIIIIIII›²²JIŽ†4BBBP¡Ÿ½¾ŒŒŒŒŒŒŒŒŒŒ'UUUUU¦>IIIIIIIIIIIIIIœA{²››[OBBBž¼ŒŒŒŒŒŒŒŒŒŒ'UUUUUT>,W`iIIIIIIIIIIII75£Ž›œBBB5˜‘ŒŒŒŒŒŒŒŒŒŒ'UUUUUŠ>,XxIIIIIIIIIII[ªBB[…J7BBB5˜¸»‹ŒŒŒŒŒŒŒŒŒŒ'UUUUUŠ=,_1@IIIIIIIIIII7BB²›"BBB¹º¸ ‹ŒŒŒŒŒŒŒŒŒŒ'UUUUUµ=,.IIIIIIIIIII—BB£››[5BBC6¸µ'ŒŒŒŒŒŒŒŒŒŒ'UUUUUµ=L„IIIIIIIIIIIII7BB4›œªBBC‡¸:ŒŒŒŒŒŒŒŒŒŒ'UUUUUµ=·`IIIIIIIIIIIII[4BBA£›…{4BCt\¦(ŒŒŒŒŒŒŒŒŒŒ'UUUUUµ=^.bIIIIIIIIIIIIII£§BBB{ŽJ©BCt\¶‹ŒŒŒŒŒŒŒŒŒŒ'UUUUU;=^_IIIIIIIIIIIII"ABBB¬J—4Ct\ ´ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU;=^_@IIIIIIIIIIIII{5BBBœ3[C \ ´ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU¯=^_0IIIIIIIIIIII›œ5A£›£C !³ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU¯2^_0yIIIIIIIIIIIII7£²3›J3£ ¡Ÿ³ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU¯g^_0/IIIIIIIIIIIIœ±IIIII3žt!Ÿ ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU¯gF^_00„rIIIIIIIIIII›[¬IIIIIIIŽž7°ŒŒŒŒŒŒŒŒŒŒ‚'UUUUU¯KF^_0000brIIIIIIIIII›ž—IIIIIIII…Z‘°¤ŒŒŒŒŒŒŒŒŒ‚'UUUUU¢KF^0000_yIIIIIIIIIII!£IIIIIIIII›&®#ŒŒŒŒŒŒŒŒŒ‚'UUUUU¢K*W00000yIIIIIIIIII¬[­IIIIIIIIJ&®eŒŒŒŒŒŒŒŒŒ‚'UUUUU¢KK00000rIIIIIIIII…{œIIIIII……&«e¤ŒŒŒŒŒŒŒŒ‚'UUUUU¢&K000000IIIIIIIIIJ[OªœJIJ"˜!& ¨¤ŒŒŒŒŒŒŒŒ‚'UUUUU¢&K0000000„IIIIIIIII©4[œœ{A˜| eŒŒŒŒŒŒŒŒ‚'UUUUU¢FK00000000X`IIIIIIII"5BBB455C6|¢ nŒŒŒŒŒŒŒŒ‚'UUUUU¢Fg000000000XxJIIIIIIJ£ABBBBBBCt| ~¤ŒŒŒŒŒŒŒ‚'UUUUU¢20000000000mrJIIIIIIŽBBBBBBCt|¦’#ŒŒŒŒŒŒŒ‚'UUUUU¢20000000000/>IIIIIIID§BBBBBB 7¦’€eŒŒŒŒŒŒŒ‚'UUUUU¢200000000000?IIIIII4BBBBB 7¦’An¤ŒŒŒŒŒŒ‚'UUUUU¢<000000000000_kIIIIII¥BBBBB 7 ’QŒŒŒŒŒŒ‚'UUUUU¢a0000000000000_mdIIIII£BBBBBPD’ˆeŒŒŒŒŒŒ‚'UUUUUUa0000000000000/mrJIII7A4BBBBP!’” nŒŒŒŒŒŒ‚'UUUUUUš–h000000000000000/xII…4BBBBP!“’ˆ~ 'UG;;U‹'UUUUUUš–h/000000000_1x>I›[BBBBP¡š”ˆˆv&&T'UUUUUUš–h„lWW-/0000YiJ74BBBžŸ”ˆˆ ™U‹Œ‚'UUUUUUš–h/c+r,j+h0000Y`›œBBB5˜‘”ˆˆA•ŒŒŒŒŒ‚'UUUUUU“–h/+Nr,?,cdlr,LX_NI—4BB5˜‘’ˆˆ~ŒŒŒŒ‚'UUUUUU“=ƒ/+N*>,N`2jW1@?`cIŽ[BBC6‘ˆˆˆˆ‰;Š‹Œ‚'UUUUUU=ƒ/+?c?N,Nd,rj12ikmXdJŽBBC6‘}~€<<&TU‚'UUUUUU=ƒ./Y+ir*,>idcbX„M`?b?…†BBC‡|####euv&&<:'UUUUUU=w./+ixd,NliMmjlkyXzls{BBCt|####eno&T''UUUUU(=pqlcd,cjkr,rkbad1Ys[BBCt\#####ef<H; 'UUU((()=gh.W-,,2iji?*ckli?ma!ABBC \####(F&H; 'UU(('( =]^0/_--,`,,ab1`cbWd7BBC \##Q8R%ST 'U(''''U&JV*W0000/WX,YXMZ[5BC \####EF&G '(((''H=IJKL000000000////.1MN!OBBP!89&: '''';<=>?*00000000001@"ABC D#$%& '( )&&*+,-./0000001234567  +  !"33 56 39 1 +úûµµ­¢¢¢¢¢°¯µµµµµµ°¢¢ÖÌRRRRRRRRRRRRRRRRsfffü¢¢¢¢¢×bff¤Œæ÷ç ”•••¢°¯µµµµµ°¢¢øéRRRRËËËRRRRRRRRRaoffùÖ¢¢¢Öîsoff’’’ßßí’Ê“«¬¡°¯µµµµ­¢¢°ÀÀéé˵µµÀËéRRRRRR(ffõö¢¢¢Öó fff¿¿¬à“«ÊŸ’ß’’ÊïÝè®®¯¢¢°¯µÀÀµµµµµµÀÀËéRRRRb fô¢¢¢×eofffKVÚxZëëèèç¿à’³“”••´®µµµµµ®µµµµµÀËRRRRQ(dðñÖòóofffo‚ããã,êÑXmKxËÜëìà’í’Ÿ“¬èµµµµ®°­¯µµµµËRRRRRRR¼¶Öîffff Íii™ââÆãXKxäååæ³’’æçè®­¢¢§­´®®ÀéRRRRR̶¢×bdofffs–——Í…iiiiiii™ÙÆ,ÏÚLÛÜÝÞß’Ÿà¬¡•¢¢¢°°¯¯ËRRRÌÕ¢ÖáWRdf(–––—…h„„…………hhii²?LLL?Ӻɞ’Ÿ«”••¢¢§­®ÀËÔÕ§Ö×ÒRRQ(sØQ–––Â…k„…––…„„„„h,`LL?ϲÑm‡Èɤ³ŸÊ”••¢­µµ®­¢¶ÒRRRRRËÀЖ––Â…k…–zzu…v==vi?LL`,~™~ΆϜ³¤Ÿ«¬¡°µµµ´¢°ËRRRRËÀµÐo–Â……–zzzpÄ=–—vy0ÅRZcÆii™~‚›ÇÈɤ³Ê»¥®®¯°§¯ËËRËÀµ®Ìo–½…––f–z¾–—vz–––*…hhiii™™~‚¸‡žžŸ¿¦®­¢­µµÀÀµµ¯Áa––—––f–tŠGt– wo– ffz—·…„………iii™~‚²¸¹ºž»¬•°¯µµµµ®°¼^–––– dp–pb––bz—w((ept…±–iiii™}~‚²œ‘Œ³«”¦´®µµ´¢¶W–––zeatfbo–fa–faRRRGt we–u9i………i™™¨©›œªž’«¬­®¯§¢°W––z=3e–obe––af–RRRRdttde–u9…– {iyy™~›œ£¤Ÿ“¥¦§¢§W––{^o–^–fGG–—w˜RRQet ae–u9…–– siy–i™š›œžŸ ¡¢¢WetŽ{^Gtzeb –pa–fa?VQ^–We–ur––t syy–f……|*mž’“”•((^{GWfoaet–Gf–x‰K>ef–e(e– –tt swp–f…rp–f_2II‹ŒQ(< WWW^ebz bz–08K)so– d(e––ttt ss–|r–p–aa –†‡ˆR2 <(QRUQWWGGWfzz–––––t€((e––to– s –fr–oGp–G(f‚ƒQyIQRV]RRQRWaGeffzz=€d((e–ttoss– –f|w –^p–GQf}~8Y>QQ]VRV]QQRRQ(WaadnnY((etttWG–o–tr– s^p–GQGfik8((((]QQURRRRRRRRxmnW((eot(QG–ttuy–fsspfeQa–o>(>>(8QURRRRRZ?mn(((abbYQQG–tuvwff fff–fQQf–g8((>>>8]UqZLL?mn(QQRR]UQ(apo=wfpa^sof((fgy((8>8(>>(>8VlLLLLmnQQQRU8((Q(^Yw^RRRQfWapfpr>(((88VLLLL)Y(Nj>](QQUQ((^RRRRQefWd yi>(((>(>3cLLLL`3N +QUUURUUUQQd Wfgri>8>>>>(8(8(Y_VLLLL`T + + +'T8]]UQ)8UQQRQUUb0*>(3(>>888YZLLLL[ + + + +\8)UQQR]UUQ(8),>S;H(((>8>88K?LLL% + + + + + +7'T888)UVUUQRDKXOPI>(HJ(K?LL% + + + + + +7N(83C)QRKDE-FGH01(3IJ(K?L + + + + +M77N39+DK ;1<=<>4?@ + + + + +&A78B*CD-#./0123345 + + + +&&&678*9:  ! + +"##$%&&&'())*+,  + 36 88 61 1 +39 84 67 1 +"""" " !!"!""! " "  !""" !!   """! !""""!" !""" "!! """! !!" ! !"!"""!! """"!! ! "" " " !"" "" ! "! !"!! "!" !"" !"  " " ! !!"!  !! """!""!" "" " " ""! " !! " " !"!"! """ !"!!!"  !! "!!"!"!"! !!     """"! !   " ! !!!! !!"!""  " !""""!!! "" " ! !  !!""!" !"   " !"  "  !"""!!"!"  ! "!"  !"!""!"!! !" !!  !! !"!"" ! !" !" ! "!"! """!! "   " """" "!" "! !"! "" !"  "!"""!"!!"  " "! "!"""!  "!!! !"! !" !! !! !!""""!!! ""     "!"! "!"" "! !!"!! """" "  "!!   """"!! ! " """ !" !!" !! ! " """!" """ "! " ""! " "!"  "" !! " !" !!"!! "!" "!""!" !"!"!  " !!"! ! " " ! " !! ! ! "!" !!""" !!"! !!"! "" ! !"! " " !!"!"""!!!  ! "" "   !"!!!"""!!" "!" ! !"! " !! !"    " "!  !!  !"! "   "!!"" ! !"""" "!" !!!"!!! "! !!"!"" ! " !"! " " ""!"!"!"  ! !"!"" ! ! !! """""!"!"   " "" " " """!   !" "! !""!" "!"! ""  ""!  " ""!"!!""  !"  !! "!!"!""!" !" "!!" !"  !!!"! """" !!  ! !""" "!""! !! ! !!!!" !!"! ""  !!" """!! "" ""!!! "" !  " "    """!!! "!""! " !"   " "" ! !!!!"""  ""!    " ! !!  !!" !!!!" !!!!!!"!"  !"!"!"!!" !!"" !!!! !! """ !!  !! !"!""  !" "!!! !  ""!   !"  !"! """!! "!"!  "! !""""" """" "!""! !!"!!" """"!" !! !3C 48 24 1 +9;>9><;>=>;<8;;:9;>=>;<8;;:989;=9=:>:9=:=<===;9>;;<<<:;89<<;;<<<:;89<<=9;:<>=9<=99=89<>988<<<<9>8<:88<<<<9>8<::;>=999;8:<>;:><9:>9:;:<:8<=>>9:;:<:8<==>8>9;>9<89;98<>89<8=<=>;>8<9<8=<=>;>8<>98<:=<:<;88;88;>8:;;=>8:;>>8:;;=>8:;:=9<===8;:::9;:=:=8>=<;:=:9==8>=<;::;>899;;88=<;=;=9<;8><99=;89<;8><98>:8:9;:>=<98<<;9=;9=8<>9=9<9<<<89;>=>89<8>><:=:898;8999;>>9989=<88<9;98;<=>:===:<8;:;9<<;>9>:>88:>>9;:8>9>;=;9><;;;<8:>88;99=<<8;<;<9<:9;9=8<>;9;8<;><>89><>9;:8::;::;=<;8;=<:8;::;:;<<:9=:=>=>8;<<998:99;:9<;9>=;998<=>8>898;>;;8=:8<:9;;8>:>8>99=89888;8:9;>:<><<:=;8=>>8=8:>8=:=:;9<<:9;>:=3F 36 91 1 +éÐéé¥úûË ËÝô¯à°¶¾¾ÑâõïüýþéÐ×¥Ý!Óáô¯È×°°¶§¨â³õïïö÷øùéÖ¦ÝÓ êëì¯ÈÈ×í¶¶§¨©âîïåðñòóà¦ÝË Ôá¤ÇÇ×Ü×°¶§¼¨ÑâØÒÒoãäåæçè¥ÝËÞÌÍÆÖÐÏ⶧¨¨Ñ³ß''ƒd66wÙÔ ÚÛ¤ÍÇÏÏÐܲ°¶¨©ÑѸ'''ƒr666Ó ÔŸ¯ÕÎÎÎÖ×ײ¶¾¨ÑØ(''''zr666Êa^^.ËÌÍÇÎÏÏÏв²¶§§ÑÒ''''''f«666POOVV”ÀÁÂÃÄÅÆÇȱ¶§§¾³É'''''''bx666;;;;;;;DDD7½½µ½»¶¶§¾¨¿'''''''ˆx666>’¹=%%”EOOOOº°°§§¨©(''''''n„d66---------’O7OO·±¶¶§¨©¸''''''n„d66WW´´´´–->EO7Oµ¥¶¶¶§§¨³ª''''''nr66•••••••¬­OO7®¯°§§§±²§³ª'''''')ƒr66FKKKK•W¡877OP¢£¤¥¦§§¨©ª''''''(ƒ«66GGGššk›—8-’’—”EEOOOOOO8= '''''''zx\6••K@k–-/---99’—%%88<<='''''''˜xd6`````_..../------9’“”’‘'''''''f„d6`````a___......///--9-‘'''''''ˆd6`````aa________._.../-0'''''''sd6````````aaa__________. '''''''nr6```````````aaaaa______ '''''''nr6`````````````````aaa__ #''''''nƒx6````````````````````__ ''''''nzx6````````````````````__''''''(fx6````````````````````___'''''''f„6````````````````````a__'''''''ˆ„\````````````````````a__'''''''ˆd````````````````````a__'''''''ˆqd``````````‹ŽŽX‹‹````a__#''''''nƒd`````````‹(crr:ŒlYX‹a__ #'''''''ƒd```````‡~'(cxxrpuwwZ1*#'(''''''r``````‹€'''cxxxddddd66uŒŠŒ*''''zx`````~#''''ˆxxxddddddd\666‰Š('''fx…``‡€''''''jxxxddddddd\\\66w)'''bx…```#''''''joxxdddddddd\6665)'''†„‚```#''''''joxxddddddd\\6665I'''sx‚```#''''''nxxddddddddd\665I(''nx‚```#''''''nxxddddddd\d66642(''nq„‚```€'''''''xxrdddddd\666662(''nƒ}```€'''''''xxrdddddd\666663('')f}```~'''''''fxxrddddd\6666664*''(fJaaaB'''''''fxqrdddddd6666666+'')z{|Fa__'''''''bqqrddddd\\666666w)(IxyyF`__'''''''sqqrddddd\66666666:tuvvvk`__'''''''1qqrdddddd666666666pppp6k`__ '''''''nooo\ddd\\66666666666p66k`__ '''''''lmgggdddd666666666666666i`__ #'''''#'jggg\ddd666666666666666e`__ '''####1fgh\dd6666666666666666A`a__ '######(b[c[d\6\66666666666666]JW^_ ###### 1SZZ4\6666666666666666TU?@A@B  ()))*+3466666666666789--/.    #))'''*3:666666666,-.../0    #'''''((1+2344566% &   #''#'###'(()*+$    ###########"       ####                              !      + +                                           +               +             +     +    +     +    +  42 80 48 1 +ËËËËÇ­RXþúýýýöáËËÇÇÇüa…¥Šýúúöár==ÇÇÇÇò…nóïäääðáá+YYYYYYY+‹²²UUj>ÇÇÇÇÇÇÇ;=ÇÇÇÇî X¥ïäääääðñ²ááá²²²²‚‚‚‚²YUUU^rÇÇÇÇ>šÇÇÇëìCí¤ŠäääääÛÛ×××ׂ‚‚‚‚‚‚²UUTšrÇ><<>ÇÇÇ«­aœCQ ¥ŠäääääÛÛÛ×Û×ׂ‚‚‚‚²UTTTš;€€Ž^rÇÇÇs…aQCœé‰Êê×ääÛÛÛ××ׂ‚‚‚‚‚‚²T„€”jkÇÇÇÇå æçèt|ÓŠääÛÛ××ׂ‚‚‚‚‚‚ကUrÇÇÇ&]…âtrrrsãŠäÛÛÛ××ׂ‚‚‚‚‚‹ €€„V”<^=>ÇrÜÝ]Þßrrrrrrsàb×Û××ׂ‚‚‚‚‚‚á\;;š>>@\…&rrrrr>%rÚ×Û×ׂ‚‚‚‚‚‚‹iØ”;TÙg!…sÇrrr>%<;=«tEŠ×‚‚‚‚‚‚‚‚‹ ÔÕg Œ”€gx…±sÇÇrrrr<T^k«|ÖŠ×ׂ‚‚‚‚‚+ЭÑgA!]©€Vg]ÒtÇÇÇÇr%r=<;škrºÓŠ‚‚‚‚‚‚‚²Í¬ÎsÏRxgV„Vx™kÇÇr<<>>T%>ºŠ‚‚‚‚‚‚²Y¬ËÃÌ–9 y@>Ç>š<^r><=rsÊbŠ‚‚‚‚‚YÇÈÉ0§–aq”Tj>r>TT^k%^TU=rsÊ‚‚‚‚‚‹Ãƒ.¾§7–a°ggy;>>^;<=r=>;;%r%”ÂCœ X¥Š‚‚‚‹ƒƒƒ,¿ ÀB9RRigV„;>r=>_yA"¸¹sº»‘‚‚GƒƒvvHH,’-“L§–9¤´gVš>s™  !ªµrrr|¥Š‚‚YƒƒvvH,vH-“.§³ ¤!gVT:™]]A R…±|trrrrt|¥Š‚G+®ƒƒ,,,,,¯-d¨a°„„]R]±ªrrrrrrr>>¥Š‚²‹¦v,,,,J-/O§¨"! „©gx…ªs«rrrrrr>>¬­¤¥‘‚‚‹¡H,,,,,---K./d79]xg€V ii\]™}rrrrrr=^^>>¢£ ¤¥)‚‚GYHH,,,I--K/9xhxXžUkrrrr^UTjk>ˆŸœ Xb‚‚‚GY—vH,,--K./d˜78aRxg ™@”šk>%?;Ukr&›Cœ9nb‚‚o‘‹YvvH,’---“KpdP56789R]g”;U^„€T<krs•–CnŠ‚‚ooG‹YƒHH---KKKddPP56e89! ŒŽ€TU>>|…9QCb‚ooo‘G‹YƒH,-KK//d5faR!V„VV;<=>>|…†‡ˆt‰Šoooo))*GG‹YYYvv,H----KK/pd56 fa[] V€VUj=>>|{&>>>&‚oo)))()(((**G+Y+v,,--..//4dL6w11 + +89xgy<j=r>z{|t>>>>>}~)oo)))(((((((****GGYH,,JJK./.pddO Z1 + + + + + 89]q@j%r>st>>>>>>tu]boo))(((((((((((((GHHcJ...//4dO N1 + + + 11ef9]AghAiSj%>>>>>>>>klm9nbo))(((((((((((((+H,-K.//LM1 + + 1ZL 689[R\\]RS<<^>>>>>>%_`X"CQaXb))))((((((((((GHIJ-K..4 L1 + + +11MN2OOP7Q9RS<;TU>>>>=V!QWX))()(((((((((*Y,---./ 01 + + + + 2 3456789:;<=>%?@ABCCDEF))((((((((((G + + + + + +  !"#$%&'()((((((((*+45 104 34 1 +Œ‹‹˜˜˜˜ÊžÐ~~~ßûâââââââêéßÐОžÐÐ~éêërHjÜî# Îüf¾ý$rÉœœœœœ’‹‹‹˜ž˜ž˜žÐžÐ~ßëââââââê~˜˜žÊžž€ëìIÖÜIGz úCÓº#rœœœœœœœP‹˜˜˜Ê˜ÊÊÐ~ÐÐ~~€ëâââëëëé~˜˜˜ÊÊßërHjÖjG ù[ºGלœœœœœœ•‹˜˜˜žÊʘ˜žžžž~~éëââëëëëéИ˜Êʘž±yGÜÖi {ù´ÌGòœœœœœœœ˜˜ÊÊÊÊʞʘʞÐ~Ð~Ð~~~€ëââëëêêßʘž~$jÖj#6 iZ[ø‡ÉœœœœœœœœPÊÊžž˜ÊÊžžžžž~~ÐÐ~~~~ßßéââëé€éßʘ˜ô$HjÖj$‡ pîõö÷çrÉœœœœœœœœ–ʘʞžžžžžžžž~žžÐž~Ð~~~ßßêââé~€ðžÐGÖÜiG zGjÖó çלœœœœœœœœ”ÐÊ~Ð~žžžžžÐžžž~~Ð~Ð~~~~߀êâëß~ðê€GiÜÜ# ‡HjÜï ñòœœœœœœœœœœ•9žÊžžžÐ˜žž~žžÐžžžžÐž~~Ž~~߀êëé€êëìr#jÖî#z]] IÜjï{{ÉœœœœœœœœœœœPžžÐžžÐОž~žžÊÐÐОžž~žÐ~~~~ßéêëâìr#iÜÖ$1/tN‰¶ #Ü#í{œœœœœœœœœœœœ–n~ÐŽ~žžžžžÐОžžžÐžžžžžžž˜ÊžÐÐЀâãäåZæ燇‡?>>Q ÎHjjHœœœœœœœœœœœœœèPž~~žÐŽ~žžÐОžžÐʘžž˜žžÊžÊ˜žžß×Gà(( p{záOb>>mÀ GijG|§œœœœœœœœœœœœœ—ОŽžÐžžžžžÐžžžž˜˜Ê˜˜˜Ê˜˜˜žŽ#ºÓ(¤ Çt>>>¢dd- {#jÜiGݦœœœœœœœœœœœœœ§ÞžŽžžŽžž˜˜ÊžÊ˜Ê˜ž˜Ê˜˜˜˜žG³Ó(MfÙ… ÚÛ>>>_dd Ijj$rh¥œœœœœœœœœœœœœœšFžÊИžÊÊÊÊž˜˜˜˜˜˜ÊÑÒ³Ó()s¿ ]>>>>cddÀ® {Ô†‡Õ¬Öj#×°E¦œœœœœœœœœœœœœhW؞ʘʘʘ˜˜˜‹‹‹‹˜ŽHº¾(k… Ç]¶ ¼=Q>>Qddd¼ Ë<¾KÌÍÍÎɧEϧœœœœœœœœœœœœV 8X˜˜˜˜˜‹‹ŒžŸ#Gº¾(< ÇÈP>ÀÀc_¢¢ddddd® ¿C gÉœh ¦œœœœœœœœœœœœ° WF˜˜˜˜‹‹‹‹‹‹ž±#G³K(T + ÄabuddddddddÅ»¶®¼¼¼ M(¿qhÆE ¥¦§§§œœœœœœœœ¦ ¹9˜‹‹‹‹‹‹ž y#J¾(¤¿ @budddddddddddÀÀeÁ»® T(· p EEE¥°Ã¦¦§œœ¦ ½‹‹‹‹‹‹‹‹‹˜žŸ$#ºK(¤ @3P_dddddddddddddddµ»¼ +[() + ‘ ¸EEhV¥E W½9‹‹‹‹‹‹‹‹‹‹‹˜±²##³´)\ @23>cddddddddddddµe¶ <(· {¸ ! EEEE¸¸¸¸¸¸E W¹9‹ª‹‹«Œ‹Œ‹‹‹‹˜~##¬¡(()­ … †nddddddddddd® +[(C ¯ ! ¥°§¦¦¦¦¦¦°°°°¥VE”ŒŒŒŒŒ‹‹ŒŒ‹žŸ #I%¡(MŠ+ 63¢ddddddddd‰t£ *¤ D ! E¥¦§œœœœœœœœœœœ§¨©”nŒŒŒŒŒ‹‹˜Žy#IK([s +… †@n_ddddddddd™† +[ !! ! š›œœœœœœœœœœœœ—”‹Œ‹‹Ž#H%L(; ‡23nbcdddddddddt‡{ Šs ‘ ! "’PPPP““”•••–—“P~€‚yrG$JƒL)*„… p†‡23ˆ>>ddddddddd‰/zŠC 7 "9wxyr$&'+ zab>>QdddddQcddddt{ +M(\ 6| }rrGHi&L([s + lt>>>QddduQ3PQdde] fM* vE 8FHijL([fk lN>>>mdd_nPnddo +(\ pq "#YZ'[T\ ]^>>>_R`abcdeT(fgh ! 89GHIJ&KLM)< + =>>>>NO@2PQRSMMT UV ! WX#$&:;< + =>>?/1@2>ABC + DE!! 8F#$%&'()*+ ,-, ./012345 67! !! 89 +    !! "48 40 91 1 +wwwî‘‘‘‘‘ï“Ž¹º»ð²½Ù¶ñŸŸŸŸŸŸŸŸŸÎtww…ê‘‘“‹ëì‘‘‘¥µ¬í¯ŸŸŸŸŸŸŸÆÇæ{wwŽ’ß…wç‘‘‘‘‘³¬Ë诟ŸŸŸŸŸéáâww‹Õwwwãä‘‘‘‘¥Â¬åÚŸŸŸŸŸŸÎÛÜÝÞ¹ ß…wwww¹—‘‘‘²£Â¬¬à¯ŸŸŸŸŸÎÇMMÏÐÑÒÓÔ†ÕwwwwwwÖ×ؾ½ÂÙ¬¬¬­ÚŸŸŸŸŸÎÇMMMMMMMaKÈwwww¹ÉÊËˬ¬¬¬¬¬¬¬¬¬ÌÍŸŸŸŸÎÇMMMMMMMM?swww¹»¥Â¬¬¬¬¬¬¬¬¬¬¬µÃÄÅŸŸŸÆÇMMMMMMMMN¸w¹º»‘‘¼¬¬¬¬¬¬µ½³¢¥¾¬¿ÀŸŸŸŸÁMMMMMMMMM°w¡±‘‘‘²³¬¬³³£´¦‘‘‘¥µ¬¶·ŸŸŸMMMMMMMMM w¡‘‘‘‘‘¢£¤¥¦™§A¨©ª¦«¬­®¯ŸŸMMMMMMMMM–w…—‘‘‘‘‘˜™+5[PGM@??š›œžŸMMMMMMMMMŒww‹‘’’“”‚--SGBGM@@@@@@JK•MMMMMMMMMŒ}w…ŽŽ (---5GBGM@@@@@@@@@MMMMMMMMMŠ„ww‹‡-----YGBEM@@@@@@@@@MMMMMMMMMƒ„ww…†‡------ˆ‰B\@@@@@@@@@@MMMMMMMMM?€www‚-----4cBPU@@@@@@@@@@MMMMMMMMM@{ww}------VTBPQ@@@@@@@@@@MMMMMMMMMM|}ww~------VTBPQ@@@@@@@@@@MMMMMMMMMMyz{wx------5TBGQ@@@@@@@@@@MMMMMMMMMMJvtwx------OBBG@@@@@@@@@@@MMMMMMMMMMJrstu------LBBE@@@@@@@@@@@MMMMMMMMMM?opqn------FBB\@@@@@@@@@@@MMMMMMMMMMMklmn------FBB\@@@@@@@@@@@MMMMMMMMMMMhij(------ABBU@@@@@@@@@@@MMMMMMMMMMMefg(------:BBU@@@@@@@@@@@MMMMMMMMMMMO',------S[BPQ@@@@@@@@@@@MMMMMMMMMMMI,.------S;BPM@@@@@@@@@@@MMMMMMMMMMMK + +------S;BPM@@@@@@@@@@@MMMMMMMMMMM? +------Y;BPM@@@@@@@@@@@MMMMMMMMMMM?d*------FBBGN@@@@@@@@@@@MMMMMMMMMMM@V+-----V------VTBB\@@@@@@@@@@?bMMMMMMMMMMMM>4-----STBB\@@@@@@@@@@aDMMMMMMMMMMMMJ4-----OBBBU@@@@@@@@@@JDMMMMMMMMMMMM@X-----LBBBQ@@@@@@@@@@KAMMMMMMMMMMMMMX-----FBBGQ@@@@@@@@@@K<MMMMMMMMMMMMNW-----FBBGM@@@@@@@@@@I<`MMMMMMMMMMMN7-----ABBGM@@@@@@@@@@O<]MMMMMMMMMMMMH-----:BBEM@@@@@@@@@@V_]MMMMMMMMMMNMJ----V[BB\@@@@@@@@@@?+^CMMMMMMMMMMNN?----V;BPU@@@@@@@@@@?(*CMMMMMMMMMMNM?----V;BP]@@@@@@@@@@?(*\MMMMMMMMMNMN?4---S;BPQ@@@@@@@@@@R(*UMMMMMMMMMNNN@X---OBBPQ@@@@@@@@@@RWWMMMMMMMMMMMN@@X---LBBG@@@@@@@@@@@@@@MMMMMMMMMMMNNNW---FBBG@@@@@@@@@@@@@@MMMMMMMMMMMNN@W---DBB\@@@@@@@@@@@@@@MMMMMMMMMMMNN@7---ABB\@@@@@@@@@@@@@@MMMMMMMMMNMN@@7---:BB\@@@@@@@@@@@@@@MMMMMMMMMMN@@@7--S[BBQ@@@@@@@@@@@@@@MMMMMMMMMMN@N@7--S;BBQ@@@@@@@@@@@@@@MMMMMMMMMMM@N@W--Z;BGM@@@@@@@@@@@?J?MMMMMMMMMMMN@@X--Y;BGM@@@@@@@@@@@7++MMMMMMMMMNN@@@4--FBBGM@@@@@@@@@@@5**MMMMMMMMNN@@N?--V:BBEN@@@@@@@@@@@W**MMMMMMMMMMMN@7+-VTBBU@@@@@@@@@@@@4 +MMMMMMMMNN@@?4+-6TBPU@@@@@@@@@@@?+ + +MMMMMMMMMNN?6+--STBPQ@@@@@@@@@@@R(MMMMMMMMNNJ6((--OBBPQ@@@@@@@@@@@R( +5IJJ??JJK4())+--LBBGM@@@@@@@@@@@H) +**+++++******+--FBBG@@@@@@@@@@@@H +***********+--DBBE@@@@@@@@@@@?6! +*******(---ABBC@@@@@@@@@@@?+ + + +!!% +(---:;<=+655>???@@@?+%! + + + + /00 +*---123)*****)()+456789% +! +)--(* +************).'% !  + +*+() + + + +******,'', +() + + +*%''' + + + + + + + + + + +$%&''' !! + + + + + + + + + +"# ! +! + +  + + +  +    +  +      + +     +    +   4B 72 57 1 +(&##&&&#$$$&$$(()&'#$)&%$)#'%'%#))$()'#'$$)$)$'((&$&)'$'((%&)'&&)%)%$#()&%(%#&$)#'(%#(%&()()))##$$(&('%$(($%%#&##$)&(&$$(&(%()()#%)$##)$%#$(#$'#$'($&%&&()(&%&)')&)#%(&('#%%'$%$)&)$%$&)'))%$&'('$()('%#&&'''$((%'$%%$'((%&))#)#(#))&###'&$#)'%$%)$%()'(''&))''#&($'('%'('$#$($%&(($)'#&)%$)#)'#($$#'(&(#)&(%))()')&(&'#%$(#)'%)&$#)'&$%'#'&()%''#%%)')%#&)%$$$'&#''#('$(%('()'#%%$'&))((#&#())%)#('&)$(#%%'((%&&$%%'')&()#)$'&'#&'#%%&&&)%&$#(($#'$$$(##%')%()'%#)(()%&&#$($()$('$')()''')#'('#($)&#%&%%$'('#(#&%)&(')($)#%()'##')'$(%)$$$%%%&#$#''&#((%#)%(''&)'$'$##$'#&((&#$#%)$)#'$%)&&#)(#$%)(#%(%)'&$&#)))##'$')#(&&$%'&$(&#%#%))%&%$&%)#(&&#((#'(&$%#($(#)%'&'$))#))'$&()('$&$%%(%'$$#%&%'&'#))')%#$%(#$''#)')()#$&)#)&$%##)()')%'$%''#)%')#(%'#%&'%'#)$$(%$&)$#$(&'''((#%#'%%(%$''&((($#&&($)##%($#&)''&%%)#$)#))$%''&#)&(((()(&%'&&)&%$%()%%#%''$#&(&&($(%$&'%''))%)%$(&$)%#&%(()($%#('(()$(&'&%'&'$%%&(('##((%')#(#)$%)##'%&(&$()($&(#%$$#$'%)&%)(&''#)&#'$&#%)()&'#%&&')$&'#%%%')$$%(&#)')#$##$(''#$)#)%&))(($))%&))#%&&)$'$)%'(&&&$%%$$)(')'#%))&(#%''#(&%%&&%#'%$$&%%%#%('&#%'(&#'&%'#%#((''&$'(&)&%%$(#%$')%$#)$%&&'$##)$(%'&%&%'')$(($)')#&'$&('%)#&&'#%#($#$)%#$$&'%)$%&()$%&#4E 76 87 1 +,+*,+00/*000,+0/+,00+,*0/+/-*,,+0/--..--00*...-/0-.+*+0-*/***-**,,0+.,*--+*,-,/-0.,/,++0*0-.-+-/.,00*,00/,0+*/,**,0/+*+-***0*..//,*+,+--.++-**-*./,..+*.0-*-0..**-,++.,/,///-./0-000*+,/-.,+/00/*/,/,*.0.0--.,+/*/*+,+,*,-/.0/+-.-**-0/-0/0-.+.*/-++,*.0.0-,,+/,+0-/**,.--**.+*/.0*..-.-//.-.*,,*0/,,*+0./.**0-/0-./.,..*--*,.+-*.+.0+,*,0/..-*,**-+--,0+0*0++,0,-0.+/*,**+0.*/,/+--*-/,-++00--/0.,---//*./,0+0..-/,+0*0*,+*..,+.+-*-/-*-,+,,/0,/-.,*/-.,0,/+.0/***/+//,-+,--*+,+//.--0-.-*,0.-*-+-+-.+,0,+./+/00*0/+0,+0+-,0.0-,+0*,,,+0,*//-++.-+.*/.+/+00/.-*,-00/0*,*00/.,,*//++,*.,-,*0,,*+0-+,,,+.+//-0++/,,0,0,/+,0..*////-+-+,.0/.0,0-+.-../--,+*/.-/./,,-0/.+*+,0.-.+/--,-*,,.*+*/./*00.*-,,0*/.0+.00+/,-/0-/+,,-*-/,+-+.000-+.*0*0-,/*..-,-0,--0..,/./.+,/,./0-/+****.+0+./0/,0,./+,-*,*+.0,0.,./-+0,+-**--//./0,0./-/.,/,*//0,/00-0+,,-***.0//+/0,,+-0,..*-*..+*0*..0.*-,.0*/,,++**/0.*-,.0/+/*..*0/00-*/..*,./**/++*0./*0.--+.+0,.0-/.+-,+0./*.,+,++/+,0//.,,/-00,.+-...,0*0,,.0-++.*/,.+.++,0/-+-*0*+//0*+**00,/,,+,,,+,./.+.+0-/*0//*+--.--,0.*0*,..-*/-,+-0,*,-,,.,/.*-*.-+,0*.*,0,,*-,.*0..+.,*,**-+-.00*-+0,++///0+*0,-+/+.0,0,+--0-*,/-.*.-,*-+/+..+/*+/*+.00-.+.-+.-0+,-*,0/.00+0.-0-/-+-0/+.+/.---*/,0++00-,,+0.0/,,*-*,0-,--.*0+-*0/-.,.++,+/*-.*,....+,0/*-.*++*+0**./*-++,/.*,.*,*,--/,.*,+//.**-0-/.+.,0*,*0,,00,.--+/*/-++,,,.*0*+/*,,*.--,++,-+-/,.-/.*+0-0,*-**/+-+**.--.+.0--/0,-+-.0,0*,*-+.+.-00+0+.+/0-,,-,-.,..*51 76 82 1 +¹¾¿¨¹$+¿eÇ„„ƺ„„ÅÀ„„oÂÀ,¢Ã²Ä‹„„„§¨À¼†7`nÁeQWW„„„½µ¾¿­/009]<…œ\e\ZQ‹‹„„„·¸¨¹º»¼00000]<<œ\\\\\\LeQW„„„„®µ¨¶­/000000Š<{{{oo\\\\\\\\_b0007Uhh~\\\\\\\\\CxwRo\\\\\\\\\\\\B`}~\\PP\JPJC†x{{|\\\\\\\\\\@0008lhhu\\\\\\\\\fpRR[\\\\\\\\\\\\ok}u\\PPJPJJ‡ˆ7{{wo\\\\\\\\\_b000ghhƒ„\\\\\\\\d9ZRRe\\\\\\\\\\\ik}…i\PPPJJJJQX{{{|\\\\\\\\\\f000gkhhi\\\\\\\\\0KRR[\\\\\\\\\\\ck}}q\PP\PJJJGW1Z{{wo\\\\\\\\\d0005Uhhq\\\\\\\\\T0ZRRe\\\\\\\\\\@‚}}V\PP\JPJJ_W7{{{o\\\\\\\\\_b000Uhh~\\\\\\\\\f7RR[\\\\\\\\\\fN}}O\PPPJPJPJXR{{w\\\\\\\\\\f000thhu\\\\\\\\\c0xRRe\\\\\\\\P?j}}noPPP\JJJJ€7{{wo\\\\\\\\\d800phhO\\\\\\\\\d07RRRe\\\\\\\Pb7`}h~PJPJJJJJC>g{{|\\\\\\\\\Pf00jhhO^\\\\\\\\_b0RRR[\\\\\\\Jb5]}}u\PPPJJPPCmw{w\\\\\\\\\\c807nh`~\\\\\\\\\?7RRR\\\\\\\BT0U<1188?@AABC  4%&'))(&)100000056711111110089: # 23(&.00000001111111."!*# 2 '))'&,/000111."!!"# /01)(*!!" +,-())'&. !!"# $%&'()'     + + 54 76 87 1 +,+*,+00/*000,+0/+,00+,*0/+/-*,,+0/--..--00*...-/0-.+*+0-*/***-**,,0+.,*--+*,-,/-0.,/,++0*0-.-+-/.,00*,00/,0+*/,**,0/+*+-***0*..//,*+,+--.++-**-*./,..+*.0-*-0..**-,++.,/,///-./0-000*+,/-.,+/00/*/,/,*.0.0--.,+/*/*+,+,*,-/.0/+-.-**-0/-0/0-.+.*/-++,*.0.0-,,+/,+0-/**,.--**.+*/.0*..-.-//.-.*,,*0/,,*+0./.**0-/0-./.,..*--*,.+-*.+.0+,*,0/..-*,**-+--,0+0*0++,0,-0.+/*,**+0.*/,/+--*-/,-++00--/0.,---//*./,0+0..-/,+0*0*,+*..,+.+-*-/-*-,+,,/0,/-.,*/-.,0,/+.0/***/+//,-+,--*+,+//.--0-.-*,0.-*-+-+-.+,0,+./+/00*0/+0,+0+-,0.0-,+0*,,,+0,*//-++.-+.*/.+/+00/.-*,-00/0*,*00/.,,*//++,*.,-,*0,,*+0-+,,,+.+//-0++/,,0,0,/+,0..*////-+-+,.0/.0,0-+.-../--,+*/.-/./,,-0/.+*+,0.-.+/--,-*,,.*+*/./*00.*-,,0*/.0+.00+/,-/0-/+,,-*-/,+-+.000-+.*0*0-,/*..-,-0,--0..,/./.+,/,./0-/+****.+0+./0/,0,./+,-*,*+.0,0.,./-+0,+-**--//./0,0./-/.,/,*//0,/00-0+,,-***.0//+/0,,+-0,..*-*..+*0*..0.*-,.0*/,,++**/0.*-,.0/+/*..*0/00-*/..*,./**/++*0./*0.--+.+0,.0-/.+-,+0./*.,+,++/+,0//.,,/-00,.+-...,0*0,,.0-++.*/,.+.++,0/-+-*0*+//0*+**00,/,,+,,,+,./.+.+0-/*0//*+--.--,0.*0*,..-*/-,+-0,*,-,,.,/.*-*.-+,0*.*,0,,*-,.*0..+.,*,**-+-.00*-+0,++///0+*0,-+/+.0,0,+--0-*,/-.*.-,*-+/+..+/*+/*+.00-.+.-+.-0+,-*,0/.00+0.-0-/-+-0/+.+/.---*/,0++00-,,+0.0/,,*-*,0-,--.*0+-*0/-.,.++,+/*-.*,....+,0/*-.*++*+0**./*-++,/.*,.*,*,--/,.*,+//.**-0-/.+.,0*,*0,,00,.--+/*/-++,,,.*0*+/*,,*.--,++,-+-/,.-/.*+0-0,*-**/+-+**.--.+.0--/0,-+-.0,0*,*-+.+.-00+0+.+/0-,,-,-.,..*57 20 61 1 +Z_pal1 255 +à±5G.…B# $ 6>Ž% +-Ç¥ %¦ ÇbC +% +%"cÇ$ƒ M-A!!  +-Ç,+-¦$…$c$!$$¦,!,B ,4 !4B4c<<…DMmó}W~…T4D…<ÇL+Unm~~6~ +eÇ !<6~+m 66ûFñ-cLx~nuc˜>O_OBLBDMU±u~W~š~±}! n%!¦ +=x~c B Çd6w>GŸW˜VL!D +Une6~MmºFßWŸW_W¦LBT +eW +M +mßWWcTW~_O?OM5DcL… c !4Mu¦T.!,¦TB$_OB%!L+e»FB»~cT¦ u¦dB,…Tu56ó}?O…dW66~M%ÇdßWLw>B OÿWó5 $ºF B<5¦ó=ŸWnM?OBL±5=>EcB,BTš>6DM}! +±-m%¦…DÇl4c B !c\B!B+m+}…lÇt¦d +}cd!LT!d…l~ +e!T!TB\+u!D!LcL…TBDucLó}¦\W~¦T +m!G65.šFX>c,Z_pal3 254 +à±} +m,4 B¦Ç¯%5.W6!44!TB\cdn}}n}M} +mcTn-V&V..K%b¦6&±}¦TB$*6.˜6º6š6B4!L+y}c@>¸JûV¯=*-Æ +5º6J5!DÇl*M·^;o+%* !@¦4w6¸>–BsNOV‡Q 4cdkQo>ooKó}nyc4V>vB.V-f+f*f+f +fÃDBTMyÆPvf—VÇŽªQ +fæef§]¦d*UFAD#Uæe¢@ +uKQƒñ%ó}BH†Uçe%I@…\5^EU¦eA§ /787-,"T!T#L55&F¦6Fÿÿÿ»VBf 3%DM%bÇ w.º6F#L-,1+%±5og-%†M6 'W.# +6*4 _o«q .,+,+%ƒ5.»>-'3"L5 +%ß{ø=-¦ƒV.?%G/$*ÿß{Ÿw_o¿V?FFvM†L+4ñ%C1QxNŸwN¿5%š…co7 V‹n-ÿÿß{?FZ*4w6« 1$o ?goŸVZ-g_-'@/$˜6ó%*67%º5Ÿ5%3&@*6.‡w ÷=?g¥ mO¿Vg3 '4 +¯%º>e%Ls-¸5 +$,+¦ x6NÎC'ö=ÿ^ Ç¥K?C-8F !Æ m.?G %*<…&"S-"&$#¦Ž%ûB,8MW6þB!L V6G_O±%n+$!L-K?G"4   @ 6 _GC.+n-ó5ºBGx>W6 Z_pal11 91 +à<4¡@4¢@¢DÂL!T+,781#!! ,¢<¡<*455 AÂD6"A ‚<7a,¢LM ÂL. !M a$@@@A$a$  @$a,A$ AAÂT‚,!‚,UU#U¢4#UU¡4aÂ4C]#]E,c]#MÂ@MCUCU¢4¢, Z_pal12 204 +àÂDÂL¢D¢LMa$@  B…Ž¯mA ! Ac… A44¢@<¡<MÂL#U¢4!* AÆKA a,¡@¢<U,A@mKƒm nƒ@UA$ Žac¯Æ,¥A$a$MA + Ç + K CUa,ñb¦ÆÂT B±bab@$ + ǯ%…¦£¡4ƒññ%WB +%…'#UU±%ó=¦¥ƒ +ÇU* *MÂ@BÇ¥#M¢,¯M…!c Ž¦+ +cn±K#]m†¥C]¡4óMJ‚Â<&*Æ+naÊó%  %.%O%“-³5õA6FWF6ó-Ê$ %.%/%s-¶5>8F›NxV˜^»fº^WN7N&6> % %-%O-q-“5µ5ö=>ø5—-—-»V^ +eMeó]wVºVZ_pal13 255 +àx~}4!BÇ 5._O¿>¾-E$Ló}W~6~Mm,$$cD±}~ó}~!DGnz 8 +Ln}!<,¦T6~cL$ D+m±}!4!,B4¦L +U+e±}ó}Ç\,5 } +]ó}nm<43 …\~ó}6$c\ BT,7$±}‘} mUn}emDS$3Mu‘}-u m¦lGL.$57/$}o<—$1$+4#L"T!T%D-, $ +mM}+e¦Dj4V6 &D"L4.,,+U¦4Ç$¦$ +%¦W1'4-$/$ eeT…$ó=WN-%V'<#L!L3ËLf4&$f+%xNÿÿgs-6/  + "4.&5ßÿ7%5  D*44 +eMm¦D§$f šVÿÿ-±}4#DOFŸw?F˜ ,ª†?g%cL3o ±5ošm«468ÿ=16~W~óuWn6fVV?OOž6¶&Dx V-¿V +MOOGº-XÿŸw W>z%ÿŸw%-n-þ^n-?Gx%wXN“K?gÿ*%ñ%_O..P_STATIC 63 +Æ­5µVœs÷^RJ­5!ÿ½wZkcµVsN1FÎ9Œ1)%祄k-RJÖZRJk-„c )%Î9RJï=)%c Æ­5B­5Æ¥J)Î9J)¥„)%Œ1)%„c ÆJ)Æc top2_p 254 +876 - 3556 15&Ff †M6U‹¦ +%Ç+%BWJ?g_o¿V%WÕ$Bÿ^»5vÓ ¯¯n%7 +§o ËM-6Fþ^šRn-?g¾5.$­4WN– G;%oó=1$*4%H'<-ŸRqŽM%qª%z X~-g»VF/$+,&@.,V ·³ OŠ¯/$#H&D-,Ÿwv6S‘ÊzNg1Ev•7F±5ß{z^q±ÿÿ^x=VñÿgV-Nxsñš‘JÿM-s-ŽW.-J %Z_pal19 244 +àM%+%¦Bc¦Ž¯Ç…b + …M± +%ñcŽñ +Ç* ¥ƒ + K Kmó¯n&"+ # 5 8E376C% +731±'185.,+4#L!L7 /$'ž>º%/$7 8WJ'4-,_J %ŸwÏó=n-xN +bÇ ·.,&@3x %¥ ›KÿBÿŸw^-×ÿ=Ž_G8.5-,þB[6M-?gV6X· 5 *4gö=ªÿAo¯%þ>{6+,%ø%šcñ%GG~6—%'@Q»ß{˜>W666ó5¯-±-6ûB?C»>65x6?K»B w6ÓW>-&D«@Xf_{{gz6ŠHóeIo.V6Z.N5oÿŸf•,n-º>?Z6VFH U†T.±5µ%67Æ…º6Wû6»68.¸%– x.X.–%+%š6˜6˜.ƒÇw656*%š6-ó-x6mñ-5.nlogo_p 253 +!B + .WF6NǦÊ,-5N5‘=õE7NF¸=—5w55-Õ¶ µ • •Ö:Ng»vÇtBt…t6všv,Ž5.xV +-+-³EZV:Nø=Öµ – –7-šVþv!|!tKuWv+6>óEn5š^»^þf¾^~V¦t|tVvm-XN±=N¿w_wzVµ{VÿfB|ctBñ˜V=M5gÖ »fnu6^û^¶ N›^ú=þ^{V!4k=zVU-¾^[VžV[NW-4óMFÓž^›fÇt +M5V¶=;N;NKuW^BDBLcT…\MUB v5Fºv*u*u +}MM5…c Çûvmuct7V+}öM+}B4»^˜veÇ<Nwóuc\ñuN-vN56vB¯u‘=bt!Tvƒt--wvVvÊn5§ºv˜v††o5o=Õ7^ tmu -NŽm¯±=³=¯5J5–5íUFUë]§uÆt-^êuó= v… ¦3>N^MvcM-/Ncó5o~/V +ov6BbM]ºf—^3Nc + ]¯Eqv‘~~…¯5.Å,5*Æ +5îM^S^«Mb+˜Nv>-J5qvmid1_p 253 +5&ñKŽºFûVo?o—F&ºNg_þV»VxNxFó5M%K%%Æ$%Å$/R'-j=Ofnw6_o¸^ï-6.w666¦ c¯% +%Æ$s^­EŠEV.¸Jg˜V5FŽ5*%ƒ** %QV&-º^¯=ûf +%!Æ  -NÃ$V.V6ó=n5ñEm5ƒ$ mŽ%%VFǦK-*%Æ¥+%%5K-B m%Ç$M-ïMAn-5¥,±56F_o?oµn³n-÷nA Å,m5?gþ^…3JFo_o–^FcvVŸwVN¸fMf-fgxRqfêU#Eönu^ŠI‚,! F¦4#,'4w^oFIC4&D-,57ßw…of +^fI£,A$#D'436 8b<#  """!!"$"&"&!!!!!!!!!!!&"&&""%""$%""$$%"&"%%$+%"&$+%)%)&((!!'''((''(!))),'''&),''''&),&,)-),004777::1::411:7411  ;;;1    !"""""$"& %!!!!!!!!(!!&&&&""&""%""$$"'"+$%%++&"%+%%++&!!!'&'(((!('&)),,)&&,''''&,)),',-)'3: :40:11444949< 1;;59  """"""$!!!!!!!!(!!!!!&"&&&""&&&""&&+2$"$%!(!&"%+22)'!&&''!((((''&&,&))))'''&&))&'',,'(30:77:447704:1::4: 5;;919  ""! ""$ $"&"$&!!!!!!!!!(((&%%&&"$$""%)!("22%&%)&(&''%+++%'!'''&&&&'''&&'&'&))''&&,,,&''-*'(3'07:7 7777741:4 0;;9999   " "" "$ &!&"!!!!!!!((!%""%$%%%$%%"'%$$$)%%+%%)&)++))))'('&)&'&))))&''&&''')),,&3')*,''&'004:77440:7441440 9199;919   "!# " """ ""$$&!(!!!!!!!!!&""%$%""%%"&"%%%%%$++%%$%)++%%+%&''&&&&&))),,,))'''&&,,&'',),'('''00777444041:7<919 1   !!#$$"""&" $&!!!!!!(!!!(!&""""""&&"&&%+$%%$%%%%++%&"++*'!'&&''&&&))'&%)&'&&,&&&'&)-&((((', + +::0047 99   "!"""""$"&$&!!!!!!!!!!!&&""&"""&&'&"%$+2+%%%+++%'&%)!((&&&&&&,&'''&)&'&),&,&3')*)'(((',,007 7:77 700 000999    """" """$""!!!!!!!!!!&"%%""""'!&"&)2$)%%)++%%'!)(((('&&&))))&'&)'''&,&,,,&,*)''''&-),00:7/ + 7774 0 041119   """ ""$$$&!&&!!!!!!&!!!&"""""&&"&'(&&&&)%&%%%%"'!((((!&&&)))&)))&''''''&,,)),'''(,))&'00/ 77::0111991    "  """"""$ &"""!!!!!!!&!!!&&&&""%"'!(((&%+))%+%)!((!'&&&&&&&&&))&'&,,))&'&))''(((')),''::7:0 0411419191   """"&"&&!!!!!!!&!!!&&&"""&"&'!&%22%%++%!((('&""&&&&&''&'''&))))''&,'''&3(&)'(''00: 7: + + +000441147:9   "# $$"$"""&&!!!!!&!!!(!&"""&&""&!%22+%+2%!((((&)"&&%))&&,&''&&,))''))'(','',),'(')007 + 7 + +04110::199 <  "!$" $""""&!!!$%""&!!!!!!((!&"&&&&&&&"$$%%%%!(((('&&&&)%)&&%)&,)),&&'')*)''''',))&'&,-000::77 011149991;;;       """"""$ """!!&"""""&!&!!!!!((!'&&&""&'&&&&))%(((('&))'!'&&&&))&&)),&,'''))''''3&,,&)&,,,00: + 0::4191;5;   "&"""&""&%$"""""&!!!!!!!!!!&""&&&"&&!&")'!(=(&""&")))'''&&&&&,,&,))%,''''',&'')***-'00 +0:77740:41;;;;   # "&!!"$%"""&&$%"!!!!!!!!((!'&&&"%)&&&&!((((!")&&%%)&&&&&''''&'',%),'(((')*,')***.*&0017::4 ::4 ;;;;;; ##" "&"""%"$"$&!!!!!!!((((!&&")""&&!(((!&&&''&))&&))&),'&))'',%)''''',*,')*+..*-)/0 :74744111:4;;<;;  $$"""""""&"$ $"&&"!(!!!!!((((!&&&&&"&'!(((&""&'&)"&&&&),&&&)*)&&)&'('&&))&')*...***)0000 0:7 + + :4:741;;;;<   !  ####"""""""""""""""%$""&&&&&!!!!!!!(((!!&'&&&''&&'!!&"&&%))&'''''&&&&))&&),'(('&,)&'3)*..*-*))//: + 77:: +7:19 <;;;<   # ""&!&&"""$$$"&%$"&&!!!!(((!!!!!!"%"&""&&""&&"%)&&&&&&&!'&)&'&,&&&&''&)&''&*++*)**)*/ +00/ 7:777 47:411;<    #"""&""&"""$ $""!22 &&&"&!!!((!!!!(!!&%)&&&&&&&'&"&&&&&&)))&&))''&&'&,''&,''',)*.*)-*-**7 + + +47741141   !!# """&"$$$""& 2 ""%"&!(((!!!((!!!&&''&&&&&"))&'&&&"%)&&*)&&))&''''&))''',)))***-***0/ + + :::40     " #### "!"""""$"&"$$2 "!!""""!(!!!!!!!!!!!'!'&&&&)%)"&))&&&&&&&)&&)%,'!'(',,)&&&,,',**--*-)0 :1     !###!!"""&&" 2 $$!!""&!!!!((!!!!!!(!!&))))))&&&)&&&&'!&&'',,&''!'&&''*,&,,'(&-)----)/ 7/7:7 + 70        !!""""$$""$ $$$%%2"!%%&!((!!!!!!((!")))"&&'&&&'&&&)&&&&&&''!(')*)')***)''',))--)**0/ + + + + +77 00    00    "    "$ $$"""%$$2 $2 %&!&%%"!(!!!!((((((!&""&&&'&&"&'&)%)&)%)&&&'',*)')****)&&'',*-)-**// + + + + + 7  0  9 "!(!" " $""" %"" 222 %"&""&&&!!!(((((!((!&&&&%"&))"&))"'&*)&'&&'&)&')**.+***&'(')****-0 + + + +  + + :000      !   """"$""&" $"22 $"&&"""!!&"&!((((!!!!!!'&&))&")&&&)&&'))&''''&),',%*..+***,''',****)// + + 07 70  #""  $$""$ "$ $ $"&&&%"&"""&!!((!!!!!!!!!&&&'&&&&""!!&)'((!(')),)%*+.****)))&',-**)-// + + +/ 7 // :0 0      #!(" $ $"""$$ $"!"$$ $%!%$%$$%"&!(((!!!!!!!!!!!''&'!&))&"%)&(!')),,&,)*+*)**))-*)'&)-))./ + +  + + / :0000  99  #!!! ###$$$$"$"&$ !&% 22$$%%%%"&&'!!!!!!!!!!!!((!&))")"&)%%&''&)*)&''&&))))*))****),,))*.// + + + + +0000 9   "## "$" $ 2 "$ 2 $$ $&&&&&""&!!!''!!!!((!!&)%"&&))"&&'')%)'''''&'',***+**-*-),**../6///6 /0 8 + 777 + 000001000     !!""" $$222 """"$ $%$2 "&!(!&"%"'!!!!(!!((((!(&"'&&"&'!(!&),&'&&)),&&)))*+*-**))*...*6 +///// +// 70  00    "!  $(("!  2 $2 %&!!%22$$ "!!(!"""&&&!(((!(((((((!&'))!!''(!),('&*+++*),,',)*)-*****2.** +/  +   000     "$ #2 $$$$!!"$ $%!!!(!&"%"&&&&!((!((((((!((!&%)&&"&&)),%)*+++**%))''&,))****..**-/// /  010      $ $" 2 $$$% $&"$%!!(5(!"%""%)%)"!!!(((((!!((!&)&'""&)%)%**+++%%%))*)'',**-**+.*))) + //  /0 0410 #"  $" 2 $ 22%!!&"!&&!!!&""""%%)&""!(((((!!((!'!!'!'&)&&**%*++%%*))*+*))'&&)**...*--/ / + + +0 0100  !!!!" "$$ 2 $ 22$(!&((&!!"%"&'"%%&&"&!!(((!!((!'((((!'&&!%***++))**%*+****,'3)+**+**-* +         !""" #$$ $%"""&!!!!&$$%""""&&&&'!!!!!!((!'!((((!%%!)*%%+++*******%***,''-+.***-*.C 200 72 1 +                                                                                              +                                                                                             +           +            +                                                        + +      +      +                      +                    +          +                            + + +         + + +            + +               + +            +                                                 + + +               + + + +                 + +                  +                                                       +              + +            + +                                   +                                                  +                   +               +                           + +                 +      +    F 200 65 1 +         + +                 +       +            + +     + +           + +     +                             +             +   +           + +      + + +          +     +   + +        +                     +                 +        + +                   + +      +    + +          +     + +   + +        +     + +     +              +  + +             + + +        + +    +          +     +   + + +  +           + +                  +                + +     + +   +        + +       + +                      +              +  +                         +   +             +             +  +                 + + + +   +              +                + +     +          +  + +               +   +                                     +     +                      +         + +       +            + +   + + +   + +           +        + + + + +  + + +    +          +  +     + + + + +   +         + + +      + +      + +             +   +      +  +    + +       + +  +                       +  +                    +   +      + + +   + +          +  +    +  + + + + + +             +    +    +  +              +     + +  +               + +     + + + + + +  +       +        + + + + +   +              + +    + + + +    + +           +     +  + + +  + + +  + +             + + +     +     +   +          +  +     + +   + +            +  + + +    +            + + +  + + + + + +               +   + + + +   + +               + +    + +        + + + + +   +   + +                   + + + + + + +            + + + + + +  +          + + +  +                + + +  + +         + +      + + + + +     15 200 54 1 +? +  - + +  + + + + + + + + + + + + + + + + + 6     444::44:  #7$$$$7  + -  + + + + + + + + + + + + + + +  + + + * *   44444::44: !$$$$$ + + + 6--- + + + + + + + + + + + + + +  * - +  +  +  *    4:::4:::  #$# # +  - - + + + + + + + + + +  + + - + +     +     44:4:  7 $,7$! $$    -  + + + + + + + + + + + + + + + + +    *      444:::  $77$$,77$! #$#    -- + + + + + + + + + + + + + + + + +  +  +  *    44  #7777$ $7$# !! ???    -- - + + + + + + + + + + + + + + + + + + + + +  +   * +     444:4:+: 777$ #$$$! ?   ---- + + + + + + + + + + + + + + + + + + + +  + + + + + +  + **     44:444:44::4  77$!  $!$$,$   +  -- - + + + + + + + + + + + - + + + + + +  +  +   +       4444:44:+   $7$!$<<,!!#$$$!5! 5    + - -  + + + + + + + + + + + --6    +  +   444444:++* 7<$,,<<,# !"# !!? + +  - --- + + + + + + + + + + + + + + +---6- + + + +  + + + +   +      4444::4::::  $<,$,,<<$#""!!" #!!   - - + + + + + + + + + + + + + ---  + + +  + + +         4>44444::::::   7<<$!$,<,$#"$,###  "?   + 6 - -- + + + + + + + + + + + + ---  + + + +  +  +      4444::::44::  !$<<,! $###,.,!! !5## 6   - -----  + + + + + + + -66 + + + +--  + +  +     44>:444::++ #,,# #,$5"&.,"  !##!!  + +-6 - + + + + + + + - 6----  -   + +    *  44:4:::4++$ ! $7#$$,,# !","#,$5 !#    + + + +  -- - + + + + + + +- + -- + + + + +       444:+:4::::!7<# $,,<,#!#$,,$"#! !!!! ! +    -  + + + + -- + +  +  + + +      4>44:4: ##!$77,$!!$,<<$ #,$$$$#!5 &&&! #  - + -  + + + + + +-6---  --- + + + + + + + +    :44:44 !7<$$"#,<<,"!,$$"#5 !55 !#! #    +-  + + + + --- + -66-  +-- + +        4444:+:::   !#7$$$#,,,,$"#!&5 !  ## #!!& +  6  + + +- -  + + + - +---- + -6--   + +       44444:::+: !#$$,.$!#,,$.#55 &! 5 #%%!&!!!&!66   + + + -- + + +-6- + +-- + --66   +  +       4444:+: # ,./<!"$$$!5!!!! !%"#! &#""      +-- 66-- + - +-6-- +       444:::::: $7$##,.<."!$$$ =5#"! !&&#&! !&!!#""     + +  + + -6 --- ---- -- +  +      44::44**  $7<, !$,.,,,"".,$ &"&55 !&&&5 #%%##"#  +  --- +   +-- + -- -- -6 +   * + +  + + +    444444:4   7<7""""$,,,,.,&!"# 5!&!!#"& !%%#&"#!    -   + + + 6- + + -- --- + + + + *  + +    + +     4444  $<,$#!"! "$"$$$# && 5!"%"#"&&&""#&&#&!       ---  - ---  +   + +      444::44  $$,7!55".$"#&5!& 5 &%"#&&!&(#&!&((#" 6   -  +---6 + + -----66 *  + + +  + 4>44:4::  77$#,<<," 5 ""%&&5 !&!(""##! !!&##(((""'%   + - - - --- - ----- + 6-66--   +  + + + 4444::+<4:  7<7##"$!,/.%& &""!!###&((&(#%&!&%%%%'%(&(&&   +   + - + + + + -66- *  + + +    ****44: ##$7$#$$# #,"!5 !!!!&("&&&!(""%%%%"%%"%"&!!!&  +   +   -  + 6-    + + +   +   +  * * 44$+$77$!$.<.#!!5#& 5 !&#%#&!&((('.%"(""!&&!!(%(6    + + + + + 6---- 6- - -   + +   + + + +    * +787<7$! #=<:<=<==<<<=:=<;<<;;=<<<;=<=<<<<;=<;<<<<<==<=<<<=:?+<<=<==<><;=<;<<;=<==<><<<<;<<<<<==;<<;<;;<><;<<<<<=<===;<<<<;<<<=?*><<<=<<<==<<==<<==<<><<<=;<=><<<>>=<<==;<<><<==<<=<=<=<<==<<=<<<==<>><=<>=<<=<<<><=<===<=<=<=><=<>==><=<=<==<<>===>==>>>>><==<<<>><><=<<<=<><=<<=>=><><>==><>=<==<<<<<=><<=<==>=<<>=><<=<<=>><<<<>=>>=<=<>>><==>=>=<=<>><<=<<=<=>=>===<=><<===<><<<===>=?+=>><>=><>=<===>><==>=>>>>=>><>=<>>=<><<==>>=<<<><==>>==>===>>=>><>>>>><>==>>>=>====<==>>><=<><>===>>>===>>>><>>>=>=>>>>><==>><>>?,>>>>>>=><=>>>=>>>=>=>==>==>>======>>>=>>>>>>>>>>>=>=>>>>>>>><==>=?,>=>>>>>>>>>>>====>>>>>>=>=>>=>>>=>>>>>>>>>=>>=>=>>>>>=>>=>>>>=>>=?,>>>=>>>>>=>>>>>>>=>>>>>>>>>>>>=>=>>>>>>>>>>>=>=>>>>=>>>>>>>>==>>>?8??????????????????????????????????????????????????????????????????12 16 22 1 + + + + + + + + + + +           15 12 22 1 + + + + + +         18 4 65 1 +               + + + +  +  +    1B 120 4 1 +######################################################################################################################   +    +  +  +  1E 4 107 1 +###11####################################### # # # # # # # # # +# # + +# # ########################################### # # # + +#  +   + 21 16 22 1 + + + + + +                  24 16 22 1 + + + + + + + + + + +         27 96 17 1 +#######$###$$$$$$$$$$$$$$$$%$$$%%%$%$%%%%%%%%%%%%%%%%&&&%&&&&&&&&&&&&&&&&'&'&'''''''''''''''###$#$#$#$#$#$$$#$$%$$$%$%$%$%$%$%$%%%$%%%%%%&%&%&%&%&%&%&%&&&&&&'&&&'&'&'&'&'&''''''('''('##  +  + ###  +  + #$#    #$#  +  + #$#   #$$  + + + + #$#   $$$ +  + $$#  $$$ +  + $$$  $$$ +  + $%$  $*11METLPALR 52 +DHHLLPP!T!X!XB\B\B`c`cd„h„h„l¥l¥pÆpÆtçxP0~D<84,($ J})yuçtÆp¥l„hƒdc`B`!\!XTPPÆBNBA_V_P 21 + $ +   ( ,0 +( + + BLUE 43 ++!%¿cŸSŸOK?K??¿ÿ¿Ÿ_?ÜÛº™xWV5ß{Èc æ €a@]àTÀP H€D`@ 840( GnMETLPALB 52 +¯-45UVv—¸ØÙù:;[ +{ +| +œ +½ +½ÝÞþ l[ñ Ñ Ð¯®Žm;þ6Þ.½*œ&{[:ùøØ×·–&mtchpal 64 +ê sH“H´LÕPöTU7YX]ya™aºeûin\r}r¾vßz<Ž84Œ0l0k,j(i$I$H G—RvNuNUJTJ4F3FBò=ñ=Ñ9Ð9°5¯51Ž1Þ{n-m-M)L),%+% ! +!êéÉȨ§‡†REDPAL 43 ++!%.~í}¬}‹}Í}­y­uu)yuçpælæh¤d„`¢8¢T¢P¢L¢H¢D¢D¢,9Èc æ €a@]àTÀP H€D`@ 840( Gn \ No newline at end of file diff --git a/IMG/ARC/STATUS.IMG b/IMG/ARC/STATUS.IMG new file mode 100644 index 0000000..a9baa0e Binary files /dev/null and b/IMG/ARC/STATUS.IMG differ diff --git a/IMG/ARC/STAY.IMG b/IMG/ARC/STAY.IMG new file mode 100644 index 0000000..aa45cc5 Binary files /dev/null and b/IMG/ARC/STAY.IMG differ diff --git a/IMG/ARC/STUFF.IMG b/IMG/ARC/STUFF.IMG new file mode 100644 index 0000000..29eee31 Binary files /dev/null and b/IMG/ARC/STUFF.IMG differ diff --git a/IMG/ARC/STVSTANC.IMG b/IMG/ARC/STVSTANC.IMG new file mode 100644 index 0000000..ea720cb Binary files /dev/null and b/IMG/ARC/STVSTANC.IMG differ diff --git a/IMG/ARC/SUBST.BDB b/IMG/ARC/SUBST.BDB new file mode 100644 index 0000000..818d950 --- /dev/null +++ b/IMG/ARC/SUBST.BDB @@ -0,0 +1,59 @@ +subst 2000 1000 255 1 13 57 +subs 449 1038 255 645 +210 457 261 0 0 +4010 460 511 3 0 +100 460 387 6 0 +100 460 266 6 0 +0 467 504 9 11 +0 467 385 9 11 +200 467 268 C 10 +200 467 389 C 10 +0 467 265 9 11 +300 467 278 F 12 +A00 470 383 12 8 +7800 470 389 15 8 +100 471 281 18 10 +100 472 454 1B 5 +1400 472 265 1E 10 +7800 476 454 21 8 +4300 476 389 24 6 +300 508 278 27 12 +100 514 286 2A 3 +4000 535 332 2D 2 +4000 544 307 30 1 +100 559 496 33 5 +4300 562 389 24 6 +1400 566 265 1E 10 +4000 573 270 36 4 +100 620 286 2A 3 +0 647 505 9 11 +0 647 385 9 11 +0 647 265 9 11 +7800 648 389 39 8 +100 650 386 3C 5 +200 652 261 0 0 +4000 655 511 3 0 +300 658 278 3F 12 +1400 660 265 1E 10 +7800 664 389 15 9 +A00 664 383 12 9 +300 666 454 1B 5 +4400 669 389 42 7 +7800 670 454 21 9 +100 670 286 2A 3 +1400 728 265 1E 10 +100 754 496 33 5 +4400 755 389 42 7 +1400 756 265 1E 10 +100 802 281 45 3 +300 803 278 48 12 +100 804 281 4B 10 +0 827 505 9 11 +0 827 385 9 11 +0 827 265 9 11 +7800 842 389 39 9 +100 844 387 3C 5 +100 845 392 3C 5 +200 851 511 4E 0 +4000 851 266 51 0 +4000 851 387 51 0 diff --git a/IMG/ARC/SUBST.BDD b/IMG/ARC/SUBST.BDD new file mode 100644 index 0000000..e948a14 Binary files /dev/null and b/IMG/ARC/SUBST.BDD differ diff --git a/IMG/ARC/S_BLDG1.IMG b/IMG/ARC/S_BLDG1.IMG new file mode 100644 index 0000000..ecd0715 Binary files /dev/null and b/IMG/ARC/S_BLDG1.IMG differ diff --git a/IMG/ARC/TAKE.IMG b/IMG/ARC/TAKE.IMG new file mode 100644 index 0000000..f71fc78 Binary files /dev/null and b/IMG/ARC/TAKE.IMG differ diff --git a/IMG/ARC/TEAMMETR.IMG b/IMG/ARC/TEAMMETR.IMG new file mode 100644 index 0000000..83e2800 Binary files /dev/null and b/IMG/ARC/TEAMMETR.IMG differ diff --git a/IMG/ARC/TEAMSEL.BDB b/IMG/ARC/TEAMSEL.BDB new file mode 100644 index 0000000..7f0e127 --- /dev/null +++ b/IMG/ARC/TEAMSEL.BDB @@ -0,0 +1,60 @@ +teamsel 2000 1000 255 1 11 58 +teamsel 449 864 255 523 +4010 457 261 0 0 +4010 460 511 3 0 +200 460 387 6 0 +200 460 266 6 0 +0 467 389 9 10 +0 467 267 9 10 +200 467 274 C 3 +100 470 276 F 0 +A00 470 291 12 2 +A00 470 383 15 8 +7800 470 389 18 8 +100 472 454 1B 5 +7800 476 454 1E 8 +4300 476 389 21 6 +4600 501 290 24 0 +4600 501 292 27 0 +4600 503 375 2A 10 +4000 503 292 2D 1 +200 508 274 30 3 +100 510 276 33 0 +3E00 522 629 36 0 +3E00 533 629 39 0 +0 558 389 9 10 +0 558 267 9 10 +100 559 496 3C 5 +4300 562 389 21 6 +7800 648 389 3F 8 +0 649 267 9 10 +0 649 389 9 10 +100 650 386 42 5 +4000 652 261 0 0 +4600 653 290 45 0 +4000 655 511 3 0 +200 658 274 48 3 +4600 659 375 4B 10 +4000 659 292 2D 1 +100 660 276 4E 0 +7800 664 389 18 9 +A00 664 383 15 9 +300 666 454 1B 5 +4400 669 389 51 7 +7800 670 454 1E 9 +0 740 267 9 10 +0 740 389 9 10 +100 754 496 3C 5 +4400 755 389 51 7 +0 761 267 9 10 +0 761 389 9 10 +200 803 274 54 3 +100 805 276 57 0 +4600 813 292 5A 10 +A00 824 291 5D 4 +7800 842 389 3F 9 +100 844 387 42 5 +100 845 392 42 5 +200 851 511 60 0 +4000 851 266 63 0 +4000 851 387 63 0 diff --git a/IMG/ARC/TEAMSEL.BDD b/IMG/ARC/TEAMSEL.BDD new file mode 100644 index 0000000..1af35e1 Binary files /dev/null and b/IMG/ARC/TEAMSEL.BDD differ diff --git a/IMG/ARC/TEAMSEL1.BDB b/IMG/ARC/TEAMSEL1.BDB new file mode 100644 index 0000000..5f7d83e --- /dev/null +++ b/IMG/ARC/TEAMSEL1.BDB @@ -0,0 +1,11 @@ +TEAMSEL1 2000 1000 255 2 5 8 +WOODFL 165 638 251 569 +ATRIBUTE 765 1209 552 682 +A00 202 278 0 0 +A00 202 408 3 3 +A00 402 278 6 1 +A00 402 408 9 2 +6400 792 575 C 4 +6400 886 575 C 4 +6400 986 575 C 4 +6400 1080 575 C 4 diff --git a/IMG/ARC/TEAMSEL1.BDD b/IMG/ARC/TEAMSEL1.BDD new file mode 100644 index 0000000..627705b --- /dev/null +++ b/IMG/ARC/TEAMSEL1.BDD @@ -0,0 +1,115 @@ +5 +0 200 130 1 +H0GbH€G^ÌYµ¸‚¿2œÛÉ´´œ[²´ÉØÉØÉØ´wŸ3,bJJJL}|^µa|Bœ&|{|&xɸYw´éw´ÛçË`|G´^|œ´wGwñi´œvéÉx´›µ’|wYwœäçÉÉÛ‹^G´´GJGév›¶‡|^Gœw|´w›‡^^ww^{DG^w^^||+|[ȳwÛw—éww^š.žÌx}´}Ì´´e 6i€\||b&|||{^œD‚œYœœw^|Jñ&d|||Gw&w³´ë{^œœÌ´ÛêØÛš¥v|G||B^|¸×ŠÛ´ÉÛÛÛé|ÚÉxb,bGJ,,LK1q^^^}´œY´|¶’||w|G|Y³|w¹¬w´wé´Y´{šU|BYYYw™šx—[¬¸wÉJJ^´¸]Zv||œY^wv›Z¬^YY´}^[|BY^G,GJ+^ñ³³wéwéÛw³|w»-}´´´´´xx PiLL¿L._|||bbGG{œœZ{œœœ^Y^^{šcv||BœéG³´ÉÂbœœÌ}ÛêØÛÌ~³||G||^œ›°Š´´Û´ÉêéÉÚšHbJbGb,-^»‡œœ‚}´}´YË°‡^^œ^G|^||vñ’´ÉéBY^|™Ys|w´´ÉË|wGšä©GYÉ|JGœ{]y¬³|||||œ|]D^‚YYw}œ^{^YwG,GG+œ[™wwéwç´v³^v.b}´´´x´šÛyž}b66€z||GG&^ž{œœ¶ºœYYœw^œ{¶^(JG||Y˜|³éšzbœœ}éœÛØÛy›³||GG^^|vë´۴´ÉçÉØéÉx¿-bbG-,L€m‡^^^œY´´´w`ˆœww^|{^v|³¹ˆ´´Y³|w|›wrvYx^´|v^,+ˆv´ê|Gw{]¶ˆG||G||GvE|‚wYé}^^b^^wGbGGJ|F™éœw—´w^¸G³H-œ´Y´´´Éɺ€`iJaËwvG^|{Y^ZºYYYœw}œ{šIg&J||^é|é¶|œœœ}´œÉØÛñ£ËB|||^^w|åÂœwœYÉêÉêÛšH¿ž,^}-LLy‡œœY}^Ì´Ûw¶©wY´|{G^v|³¶Œ´xwwËY|]Z§³wY^é^wœ,-š¯|´É^&^w{]¶nË||G||G{z¶^‚BYY}^bb^^b,,,J^¶ÈéY³éÜw³›Gw.‚^´}}´ÌÉɶaJb,H6+»dËww^|w}|w¼D}YÌ}wœYw€y´abJ|||wwvé[™œœœ}éÌÛê鶄w´³^vw^Ë|°Ëœœ^œ´ÜØÜçšHbbb}‚}LL»‡œY´}wœ´xw¶ÀB}´œG|œw|³¶Œ´´´œ|wY]Zsww^wGvœ,»’w´š|{|w{›¶|Z||G|G{]D¬^w}œœ^bbJZ|,JJJ^[³´Y³³ØY´³Gš.{b‚}Yœ´´ÉÉya{GGbH¢€¹]œwwœwYY|wœH£L`w´œYœ{y¸z|G,||ww³é[¾Ìœ^}œYÛê綛wé^|w^^|vë¸|œœœœÉÜÜÛšHbG^b-}^}+LY‡^´Ì´Y}´Ûœñ<|w´w||Bw|³[|Û´´´vwx›ZsËB}œ^GYb,ˆw´ÉwG^w¸›DTœ´|µË|G{E¶Œ^œYœ^^,bH¼-J,L|FÈ´´w³ØYÛwG³.bGœ´œ´´ÉÉyaž{G|ž^JD]|w´wwœwËwœy¸G,€wœY{ÜxX|G|^ww³é¶wé^œœœ´ÛÉéµ›³YwB|Ë^||ë£b‚‚|´ÜÉéÉHbb^b‚^}^L»‡œ´É´´Ìx´³µ<^w´œ^^œËv|ÖÏÛxÉYw|x¸šŽv^^^G,¸,+»|³´Éœ||wv²µ¬^´´w|xœ|a¶^^^œ}^bbbJy¡´,J+^ëÈwÉÛ³´}|w|xDbb^Y}Y´ÉÉZ&||‚^œµz|www³wBwœœH{G|bJ€`w|š€™œ^{G^wé³éFÏÌ^^œ´ÛÛÛç[Àwwé^|Bw|{°¸¸bbž^ÌÉÉéÉx‚|^'‚^}^‚ ƒkœ´ÜÉx´ÉÛw[‰|wÌw||^³ËwšÂwYé´wGw™µ’JG^^G-|,»Ä³´ÉGGG^¸›.|Yé^œœ|Z›yŒ'œ^œ^G,,yŠÌvJ,JœFÈw´´wv´{v|éHº^bœ}œwÌÉÉ&{|||^^€›ë›|wwéwé^™œœZ|^GJbbJ}µ{ÈéB|^xww³éš³Û´œœœ´Éêé[½³wœ|G|w^¸ÖÀ||žœé´´wšH}}}‚‚‚}‚‚¿­lœÉšš´´ÉØwyÂB^´œ^Gvœww¶âx´´ÉYw³{ZŽ{^'GG-|,‰w´É|Gœ{›DÄœY´^œvœw鶌}œ^}^b,b{DÀw||Jœ[Ú´´Ûw³YœE|´[¸^^œ´Y}wxɵ{J{||B|€[›vwËwwœv|œœZ^^|bGJšxÈ´wY´xwé³é´ºÉÉ´}œ´êÉ鶽^||||wœ^¸±Ëwœ^œœ´´œœÜHéY´}‚}}´|¿»†^´´´´xÉÉËñ|YÛwœv|^w^³ë|Ø´é´´³w{ZâG|^b,G,¸w´É^{^|a]D{}´wœwœœw|yw}^^}^bbbJHÀwGGGwF³´´´´{éw{Géx™^œYÉ´´´ÉÉΛ|{J¸GG{{|Ö·|ËBéww|™wœ¶Ëwœœ|Gbž&Ö¸³´Yéw´´wvé[ÏÛÉÛ´´´ÉÉéy›ww^G|^œwËÖËw霜œÛœwËÉxwY´H}´´ÌG¤1o^w}Y}´É´wWÂYéYœ|^|w^³ÖŒÉÛYšÉ´é]Z¥&J|-b,,KyÄ´´Øœ|||]›¶ÂÌ´wœ|œvœ|µwœ^œ}œ-G,yâYJG|œ[³é´´´³wxv{´x¸‚Y´ÉÉÉ´ÉÉ›¸{JGGG{ñ{YËw´Y||{œœ[ÜYœYœ|b|{F€™´´ééY´´wéš™ÛÉÉÛ´ÛÉÛéy¥ww|G|BËB|äw´Ì}œé´´´ËÉx}´w¹´ÉxÌ^¢»q^œw^œ}´´wy´œYœB|^w|³šÂ´ÉY´ÉØÉ]^«Jbb,2,6b,yrw´É|GGw{]DÄY´Yœœwœœ|y✜^œ^-,bJyYGGG||ñ³´´YÉYvÉ´Gµ¶¸^´Û´ÛÉçÉÉZ›¸{Jb||€›¶{wËvw´Y³{wœyÜ´}´}|bGš¸X´éwçw³´³é[¸ÛÉ´´´´ÛÛéD¡wœ|G||œvËÖ³ÉÌ´œœ´ÉÛ³šxé´œÉÛÉÉHœ¢.‡^^œ^^œ´´|¶wwwœ||w³||ëÂYÉœwéçx›wÅJbb,¿,6bÎœ³´É|G|w¸]µŒ´´œœœw^œvñ³^^^Y^b,byâYGGvw|B³Y´éÉ´vw´{´°|w´ÉYÛÉ´ÉÉܸœ|,||^{¶véœv³´}é||œš›´}É´œG^|y€²éw—éwwY³é$º´Û´´´Û´´é¶¸ww^bb|B||°ÚÛê´Ìœ´Û´ËšH´´|xÉÉÇÜw¿§l}œœ^b^Yw|¶£|wé^^||^|v¶‰´É´vvY´{Z†2,,¿ +6bKÌ|³w´^||||²y|´}œwwœéw|¶Â^œœ}^-b,{HâY|vBwwBw´É´u´w³´G´¶|´´ØÉÉÉ—šÉµ›œœ{||GJ›[{wYwœw^v||^y¸Y}´´´^Gœ[xÊBé´´GéY鵶›ÌÉ´ÌÌÉÉ´é[¡wwœGb|Bœ{VÚÛÛ´œœ´´´ËÜH´wœxØÉÇÜ´¿M9œ}Yœ|^œœ¸¶Äwww^|G{||v¶ÄY´Û|wœÉ{ši22¿6bÌwwÉœw^|¸›Z¬Y}wwœËYé|¶¥Yœœ}^b,,HâY|B^éwœB]Ø´ÉÛwéB|´¶¸ÉÉÇÉxØÛÉɵ›œËGJ||G€{¶™wwé|^^G¸^œyºw´´´Ìwœœy›ÊvéÉwv´Y´é¶GÌÉ´Ì´É´Ìé[aé´wG{^^œ¸ä¾³ééœéÛ´éœ`xé´Y´ØÉÉÜ´|M‡}´´Yœ^œœ|¶¥BwYœ|^|{G™ñÂYÛ´´^ÛY™µi¿6bÌŒ³}ÛYw||]]D‰ÌY霜^´Û™¶ÂYœ}œ^bb,yÁY|BwwBYY{x´šÇÉ´G|—¶™ÉšÇêÉÉÛÉÉš›^œœ¸G+€ñ™}w}v|w]œœZ›œ´´ÌYYœ´µ¸›³wÉxww´çé'&Ì´´ÌÛÉ´´é[›éYw^|}Y^³°ÍÚéœY´´´œ^Hx^œw}É´ÉÇÉB»‡œY´YwœYœvñÂw}wœ|GG&{³¶ÂYÛ´|Bww{Zi + +6 +¿ Â|YÛ}œ||+]¶Œ´YÌ^wœwé™yˆw}}w-G,,{Dâ}G|wœY´´²xŽšÇÉÇ{v´[¸xÉÉêØÉçxÉš|||{|+¸y›wwéwwœ^]œœ${œY´}´Ìw̵™|³³çYÛ´´´´H›ÌÛÉ´´´Ûxœñ{w´é^w´´^¸äÐéœw^wÛ´w|H¹|v´œØÉxÇÛw»l}w´Yœ´œœv¶fY´wœ|vG{¸|Ö|YÛYvwœ{ɉi 66666 y||YÛYœ|G›AÎ|´œYé^œ´w™¶ÂYÌwœ-G,bHÒYGG^wx´Y™$Ž‡—Û–wv´¶Ë´´ÉÉÉÉxÉÉñº{{bG€¸y¸YéYœwœB{^œyº´œœœ´}wÌW{³ÛB´}wY´ÛÛ[´´É´´Ì´Ìéñw´´Yw´´^|°éw³^œœÉ´éœHÛww}w´É´Ç´é.Á}œY}´wœw|¶¡w´Yw^G^vG™ë‰éx´BBww]µo8 R 666µ¿|wxÌw||™›¶Œ´´}œœœ´³Ê[âé}œ^|b,,{¶Ž}G|^wÉ´Y™¶Žl´êw^Û[v^´xÉØÉØÉɶaJJb{G|¸¶vwwœ}wB´||œy²}|Y´Y´wYµ¸™´v³Y|w´ØÛDËÌ´ÉÛ´ÌY}éyww´wéYYwœäÚv||œ|´ÛY|`Éœw´^´É´ØÉÜ[´YY}wwœ^|ñ†w´wœœG||{™[´x´}^w^›xSi666886 i»Ó|YÛ´w|v¸]DŒ´´wœœw´w¸[ÂYYœ^bb,¶Â´||^wÌY´¸D«22…ÇY|ؚ˜´ÉÉÉÉ´ÉÛya€+€J{b|{ñ{wœœ´w{œ|GœH›œG}´ÌYœYÜ{™´wËY|œwÉéDËÌ´É´´´YÌéZ¡œwéw´éB³žyº|G^^œ´ÉY˹xœé´^´Ûx´´é.œ´Y}wœw^|Ë[dBœwœB|{||³ë|´x´œwwwzµÄ66 66i»¢vœ´´}|^v›Z‡´}œÌwœÉÛ™¶‡´Ìœ^žbb,{¶Â´^vBwé^´Bxl¢…,é^É[ËYxxÉÉØ´ÉÉyJLLJG|J{y{´w´´w|B||^¹›^G}x´YœxµxÊÉw|wœBwÉ´ñ{}Ì´Ì´´´}é[¸wwwwééw||™||Ë^éÉÛ|`xœwx^éÉ´´ww[Ò´xœw^||^œ¶¾BwwœB|G{{™Ü¸YÛ´œYœœ²yÀi¿R686f|^œwœ|wË›¶Â}wœY´œÉÛv¶‡´Ì^^-G-|bñ‰}^vBéYBx³yÀ6-¿6^ص³H´´ÉÉÉxÉÉyºbJJJ€¸[¸´´w´w^w{|}aœ^œ´´ÌwÉy¸³´´|w´|wÉÛ[³É´´´x´´}é[™ËËwé´Y|v|™Ë||w^w´xžH´Ìw´œYØÉÉw鶌x´}w^||^|¶†BÌwœw|G{G¸¶yš´´œY´w™yÔ ¿ +¿6 h»o|œ^œœ^w{²¶ˆYwœ´´œwé™ñ‡É´œ^bbb|{xoY||ËY'éYvyl2O¿2ض|}}xÉÉÉxÉÛZ{|b¿JJ+¸y¸´´w´´wéœ^}µ›œ^}´´ÌYx¶{™Y´wvxww´Û¶¸ÉÉ´´´ÌYÌw¶›wœw´Yw¸{|Ÿ™|||wœBYœ|¹xœvw´´êÉÉwé`ÌH´}}^|G|^¶€}wYœwœw|G¸y£éµš´Y´´|ñÔ¿¿26 66h€|^^^w|œ{]D©YwÌxÛœY³™yY´}œ‚-bb||y‡œG|Bw´Y—{xÀˆ‚¿¿2bV´xH´xÉÉÉÉɵ¸|JJJbJ¢{y™´´YÉ´´œ^^œš{^œY´YÌYéF›¸w´YGœww´éyœÉÉÛ´Ì´´Ìw¶ÍwËv´Éw|™G[ʳ^|w´B^|{¹xœw´É´´ÉØ´éDb´´}wœ^G^|¶g^´Yéw^w||{»€wY´šµ´Ìw´ˆ2¿, ii68»||^^|||^›]¶ËYœÌx´œww¸yéÌ}œ^-bb|¶ˆY^|œwÉY´™Dl¢¤2,,béÉÉx´xÉ´xšµ{œËGbbbJº¶™Ì´œwé´œw^œD›œ}´´}´w´[™³é´´vvww´ée¸ÉÛÛ´Ûx}wwñ{wœ³éxxé|G»¸³‚¸œ^ww^¸Hx´ÛwÉÉ´´É´éi}^}YœY^|G¶¡Gwœ^w|||G¸DwYww´Üµ³Zº2¿6i i»Äv^œ|G^œ{]¶ˆ´w´ÉÛœwwÊy|´}œ^žbb||ÜÀYËËwwÌx´™xl¾-…J22b‚Éš}ÉÉÉÉxɵ|œœœGG^^{|±{´xœ|³wwœ|œ¶¸^Y´Y´´Ywµ¸³w´´wwËw´é.¸ÉÛÉÉx´´œËµ{wéwwYœw||[™|ž|^œYY||¹xÛØ´Øê´´É´we©ÌY}}œ^^^|ñgG^wGG^|G{y¥BwYwww´yš‡¿626 i}P^^œG^|œ{²y©ww´´´wœw¸¶ˆ´Ìœ|‚^-||[Ìœ|^w^´œY¸y¥b¤‚22¿,…‚yxÉšxÉxɵݜœw^œÌ}|¸¶]|´´|Bœwœ|œ}›^´xÌ´´w´[x˜é´´Yé|œ´é»ÏÉÌ´Éx´wœw[›é´´œY^|Ë|¶|b|^}YBœ¸¹xÉêêæÉØÉêw黧Hw^}}'^|œy€^^œ|JG||G{»jwY´´œ|B|µ¼¿6¿i…66b»œ{^^|||œ{².|v´ÉÌ´œœwÈ[Ò´´œ^|^^ž|܇´š|³^´œC³DÂ22¼}-¿¿Ob…}µxÉÉššµ¸œ}ÌœwœÌ^vñ]|´´|wYé^|œ${œ´x´´Yw̶›é´´xØx{v´ÛéÉÌÛÉHÛœœv¶›w´YéYœ{GG¶{b2G^}œ^^¸x´ØÇ×ÜÇÉuéwDLJb`^œYœ|G¶¡Gœw|JG|G{{yz´Yœ´|vœ|Z}i ¿6-‚6G»w{^w|G|^{².¸w´Éœw^œ³™¶é´´œ^|œ^ž{[nÉxY¹||œx™yÂb2}}‚…¿,b…€x´µÉCšµžœœ´œéœœ´|ëv´´wG^wœ^|}¶¸}´´´x´´´¶Yw´´´Ûšv^Û´»œHÌ´ÌÉÛœ^|[›w´´ww}G]¸¶›b…^‚^^œ|J´´ÛܵæÇêÇÛwŸ‰,b,J|^^G¶fG^œ^{GG{{»¥Y^´^w^{$†i2,66¿bbÎb|G||Gž^›]ZÀ´Y´œ|Ëwv¸¶¢´}^^‚|žb|šÕÉÉÉÉY`vB¸DÂ2,¼}‚…6¿2bOº^xxx¶Üµ¸œœ´Ë´wœœé°³}´Y|Gœœw^œy|Ì´H´É´YwµYéÉYwéØé|´vhÁÛÌœœ}É}^˶™œé´éœYw{^¶,bb‚‚^J¹xœwÉØêÇÉæ´é¹P,-b,œ{e‡^Bœ|Gb|G{JD½wœw||^J`§,Ji2‚bÎŒG{GGžGœ&]¶‡´´Ûœ|^w|›µËx}œœœœ-b{ñŒÛ´ÉÉÉÌéH|x…2…}} ‚2 +…b¿Â^´Y^àµÏœœ³}Ìœœéé[wYwœ^^Bœwœœ.{Ì´}xÉ´´´[{™´´³w´wBBve6HÛ^bœÉÛœ|ñ™Yé´YwY´||y+K‚^‚^^€`xœv´ÉÉÉêÇ´µ¶,,bb,Jx¿šGœ|GG|G{y£^Y^^G^|J¹6i22b66J-GJœGG|Gb|^{]yœw´É}||||²¶éx´Ì^œ^žG¶‡É´ÉÉxÌYx´[¿º-}Ìœ^……bƒy}G‚vYw´š|œœœÌ´œœéœV³´´}Y^Bœwœ^»›}´}´HÛY´[É™´´w}éY´w|M3LLƒœ‚}x}˶™´´Y´œ|´^¸š+L‚^^^€xwww´YÛØÇéw»ib…,J2Jb|µ¢´}š{G|GGJD£B^^b^bG† ‚b¿ 6¿bJG{GGJGœ%›[Ïw´Ûœ||B|›[Œxx}œ|^Ë^H©ê´ÉÉxÌ´x³šœÒ‚ }^ -…-žëœšxG|Yɵœ}œœÉ}œ||鶳´´x}^œwwœœ»HœÌ‚ÌÌ´Y´µY¸´´BéBwéw|O3¿2¿ƒYÌÌw¶™´´´´wGw^¸š+LiK-‚|`xœéB´´´´šww[b-,b2J,Jb|[|}YÌ}ZG|{»/G^^G,bGJ»€bb, Jb»L&GJJG^]]¶‡w´YY^|œ|›yËxxÌœ^^œ^€ñªÛÛÉ´´}Y´éÉàË‚œ}‚}žb‚ƒ[œÉšÉ¹G´µœ}œœÌ¹}œœéFœx´´}w^œw}^»›}Y‚}}ÌœéµÌ™´w|wœwéY|»3,6LH^³¶™Û´´´ww³||š+L L`H¹x´w^´wY´Û³wŸb,b +¿22bG[|é^}x}}}JJJN'^bG^^*ji,b¿¿¿b¿G&JGœ]]¶fœ´Y´Ë|B³™¶éxxÌœ^ž^|€.HÉ´ÉÛ^^œ´³ëÓ‚‚}H¼}^‚‚-ë¾ÉšÉÉÉš¶œÌÌ|éx}´œé¶´šÉµ}œœw}œ`H}œ‚}}œYYyx™´wBwwwY´vMb666¿bœ[¸Û´´´´wvG|š]iii-b»x´´´´œ´´éw´[b-b-22bGŸ´^œ}}Ì}YygG|^b,b-†J¿, bHœ+JG€G^€]ZœœéYéœ|œ³›[wxxÌœ^Ë^^»ËÌÌÛÉœ^^wËñÏË‚ÌHœ}œ‚‚ƒë¿ÉÉÉxxCÉ|HHÌ}H}Ì}é[´ÉÉÉH|´Y}œ.¸Ì^‚}}}´œµ¸™wœBœwœé´|M3¿,6ii¿L[³Û´x´´É³{¸š]LbJ¹´šY´´Y´´www[bKbb,6¿Gb¶|ÌœwY}Y}}^¢Djb-,,,- J,,,¿JG»œœx&J{{€]Dœ´wY}^|^vay¢ÉÌ´}^œ^œyÓHÌ´Éœ^^^|ë¢Ë‚}ɜ̜^ ž¶¸xÉ´x´HÉÉ̹´œÌ^^}é[ÛÉÉÉêÉ´¹œ}œ»HÌ'‚Ì }´wyx³´´Y^www´^»¿,¿ J¿,¶È´´´Y´Ü´{|¶]JJJb,x^éY´´´w´´³¹‚ ‚-26,|¶|´^vœ}Y}}œ|»/b,b6be€JG,J bJΡœ}œš)G{&]D|霴´|œG{zyÒxx´œ^œœœ{¶Ó¹ÌHÌ}^´}vÜeœKÌxœÌY} b¶Ï´´Ìx}´´H´ÌÌ}}}-|é[ÛÇÜÇÉÉÉšwyœ.|Ì^Ì}‚‚}^ñ¸{éYYœwwœ´vM32¿,¿,|DË´´´Yéç´v{¶]J+LLLbx|´&]HYÉ´´³Ÿ^}^b,¿¿b¶|w^|wwé}}^|¶3b,¿¿2¿J*†,G^GžGž~B^œ}|´{€]¶|éY´œœG^€E`ÌÉx´Ì^œœœ¶œÉ´H¼œ}´Ì³ÜßÓ}´H}´´} ‚ິx´´Y´}Éœ[H}}}^bËV´ÜÇÜÉ´Øêɵ³.¸}^}}‚‚ |Ü{{YY^œwww´|e0¿2¿2,¿,|»³´´éYé´Y™{š&&JLb¹x|w&{{{C´´wœ´^bb, +¿,G[ËY^|wwYY}^|D0,b,J +6J-¤JG^-|Jb…œœœ³}v|Y]¶||´xw^|G{ay´šÉÉx´œœ|yœÉÛH¼œœ´´³µ¿œ}ÌxÌ´Ì}}`àÐH´´´}wÌxœ[¿Ì}Ì}GËVÛÜ×Éx´ÉÉÉš´e¸}œbO-‚‚|y}´}YwY´œ´w»0b2¿bbJ,|[È´´´Y´Y´|{¶{&Jbbxœw{{{G{]H´¶^´^|GbJJ,G¶œY|G^ww}œ^|D:22¿6JH¾Jb^|bGJbbJ|œ^Bœœ|v{šf|^xw||w|zDâÉ´ÉÉÉ´||{¹ÒH´Hœ}é´Éœñá‚ÌHêÌ´xÌ}‚ëœÛ´´Ì}Yé´œ¶k}xHÌœVÛÜ×ÜÉxÉɚܴ»H^‚b2…-‚^µJbw´}YÌ´´^ML2b¿,^,b{¶³É´´w´´œvvñ&&J+bGxœw{G¸G¸G{\[Ï´}³|GbJb{Ÿ³Yœ|^wœ^G|»4¿6J¡J^^^}bJ|b»d|³}wœœYv|y{GwÉœG|wwéš´ÉÉÉ´é^]»ÒHéÌœHÌ´Éwñ`‚ÌxÉx´H´}œ¶º´x´´œYwHœDˆi}HH´VêÜ–ÜÉxÉÉÜÜ´*{‚-22b‚K^µJE}œyœ´w´xvM,¿bb,^bb|y³´´Yw´´w¸|µ]&Jib¹xww{|{|{G¸E.Y´œB|||&GG¶ËwœG^œœw^‚|.‰626 +62i¾G^'-^bJbbÎdv^|ËYY^œ{Öf|^xœ||w³a`wG^yéw´éœ¹ÜÉÛ}œ xx¹wñ¹‚}ÉÉÛÌÉÛHœ¶œÛÉ´´œY´x˶962ÌHÛ°êµ–ÜÉÉxÉǵ´.|'‚22-…Kbµ€™H´x^š}ÌÉvMa2¿-b2bbb{[³Û´Yé´´œ|GÖ{,bGx^œ{|{¸GG{'.ËÌw||^|GGGñœYœ³^œwYœ-¸D4i6 6666i-¾^^'b^žGbbyj&œvw´x|v{ÖfBœÛœ{GœvyÀ|bGwywÉ}{`¹ÜÉxÌ}}̹³Ü¿‚ÌÉêx´ÉÌHÌëºÛÉ´´}´YÌœ[Si¿R2´´FêܵÜÇêxÉšµxD|'‚-…-bK^Ü{wÉ´^}}|šY^»)…,b^¿,b|[³´´YwYYœv³ñ™&JLbJx|w{G¸GG|]]D|´w^|w^wG|¶ËYwv^œww}-{»7  66i€^|'b^G,bb»Q&|³wœxËv|Ö0w´x^&,œvaZ¡|GBwHGñwËëßêêÜ´Ìœœ´|ܹœÉHêx´ÉÌÉÌ[¸´É´´œw}´œ¶Si ¿´ëصזÜÜÉCɵÉ`|}}K bO‚|[GœxxÌ'}´^bB‚+b…-b¿,Jb|y™Û´´}Y̳wwš&GGJ,J´bw{|{|{|{%Ÿ¸´œw|w´œ^|¶wéwË^wwY}b|.66m886ifœG^^G,^,bÌ~&|vwœYv||Z€œYÉ^Gœvz€||wœ^YvÉ[ßÜÉÉÉ´œ^}¸Ü¹áx¹êÉ´ÉH¹œ¶ÏéÉ´´´´Ì´ËDii °Üµ×××æšxɵÉDG}'‚2--‚^[HËxx}}Éx}b|»€^bž¿,Jb^µ|´´´Y´´wœ³µ]GJJ,¿`xGœG{G¸G^™%¹|Ìww||w´œ|[Ú´xwwœ}w'ž|¶7¿ 8681fœ^2,,Jb)&Gvw´Y³|™yv|w´^GGY|a`³||Bww^Y³}œÉ´ÉÉ´œ^œ³¶¿ÛÉÜÉÉÉÉ̹œ[¸w´´´šÌ´x^Di 6686ðµ×±µÜÜÉɵÉZGHK‚-O‚‚^[|wxx}ÌxÉ}b|G€^b‚-¿Jb{ZË´´´œ´´´wéµ]GJLbJx|^G{¸G|v¸]H|´YwwGw´^³[é´´´^œww}ž|¶g R68i¢œ^G…,bbÎd]GvwwY™v¶{|^^|GGœœ~y€³vv´Ì´wœ{yËÉ´ÉÉÌ^‚œéñ¹ÛÉÜÇêÉÛHɼëì´´´´Éx´´|DSi66 ¿±ñ±µðÇÜÉZx»|HH‚-O‚‚^y|éHÉHÉxÉx^|0^bžbJJ,|yÌx´´´´´´wy]JGJJJbJx|}{¸|G|w¸'¹|´´é||v´œ|[³´´´w|wœ'žG2¿685º^^^bbbb»d{GGvw^™{DdG|w|G|œwzºv|wœY´Y|{CÒšÛÉÉÌ|œ}éF±ÜÉÇÜÜÉÉÉɼ¶º´Û´´É´´x|¶S26¿,±×µµÜÜššH¶^x'}--K‚^µ|wxÉšxxšx‚|*+^‚-b¿J,{¶J‚»xHÌ´´´é¶]JbGJ&J,¿`H|^{G{v^w{%Ÿ^´´BGG^ËY|[Ë´éY´^|w^b|¶3¿2666i5fœGG^b +bb‚~™GG|||Y{GW€G|œ^|Gœway]v³wY´wG¸ÉÏÉÉÉÉé^œx´Ö¼6|ñxÇÉÉɹ̹ÏÛÉÛÉÉé´´¸[L22666¿,{±µðÜÜÉZš»^CH}--K ^[CœxšÉšÉšx}v»€œ-‚ž¿b{y{éœbÎH´´´wy]&GGJJ,x|^{v{œ|w{E¶œ´´w||v|||[³éwY³w|w|b|¶3,2¿6ii8O¾}‚bb +Jby€™w|||wYG™¶||Y^G|^z`³||wéwYY|v¶|ÉÌÉÛY^œ}œÖÐ̳^GñÉÉÉÉxšËÛ´ÉÉÉYœ´|.J,b,¿26,bDµ×ÜÜšZšvCH}}'KK^¶|œHxššxÉÉHw &}‚‚ž¿b{¶›œœœœ‚´´é¶€&&€J,¿´G^|{|GwY{E.|´Yw||G|||¶³w|||^||GJ|*S¿2 2K^GbJ, +¿,b‚d™³|GG^´v™¶+|œ^G^^]`¾vvwwYwvBy¢Û´´é´œ}œ¸ñÞ¿³b^^GyÉšÌëдÉÉÉ´wË´|Dfbb2 +22bG¶0×ܚܵš.wH`ÌHKK ^µ^œxÉšÉxšÉxw.|^‚^-2¿,{D{œ^^‚-ž-œDa&&J,+J,¿*xJGœY|G´É¸E»Ë´Y|||G|||[³œG{^v|w|b.S¿66i1¢^bb,2,,b»d™v^G|B´w|y€w^|^|^^|]D³GG|wBBB|B´¢Ûœ´é´} bº¶í¿wž^w}Ë|yÉ[Ï´ÛêÉéYœ´|»J{G,2J +bb|»dbÜššyš¶œxx`Y}}Kœ¶^^}xšÉHššxwÎJ^‚‚‚¿JGš¸œ^‚‚b|‚nfJ&+¿,¿*x||^´|^Y´™]Ÿw´'vB|GGG|¶ËwG{&||œ^{|»g6,¿62 +¢O¾^,bb¿,,I™´³|GwY|™D|Yœ^b|^œ|&ñv|GG|v^B|BñH´é´´´´‚žñê}œ|^^œ^^^ZëºÛêÉÛwwÉxËDfGGb¿,2¿,|{Dg^šH¹š¶}CCHH}}K}FCÌxHšH}šÉx´`+‚‚œ-, +¿,|¶¸}œ^Gb|ž|b»3€LJ,bx|^|éG{^œ|E`œ´YBw³GGG^¶³´œ|bG|^|{»S¿6bb6JH€-J,bJ,+L‚dwÉéG^BéG{yvœ^|^|^wBºZ|vv||www|ByËÌœ´Ì´e‚‚|ÉÉ¿³œ||Y^Bœ™µœÉÉêÉé´ÉÉËD{JG‚,,2,|byÂ^'^¹ÜšD}xCHH}} }µšœHHÉÌ}CÉC´»+‚‚}-22¿,GZ|œœ^b^žGœ.gJLL¿J,x|œ^YGJ^œGE.w´´wwwvGG|[³´w^b|^GJ{.7¿262…JH¾bJ,2J22+K‚~v´œG|wwG{¶vœ^|^œ^wœ{¶v³|G^wY^Byàxéé´wK…‚|µÌ}³œ|œ´Y^œv[ËÛÉÉÛw´´´™[¿G^‚,,b|Gyf^b‚šš.^xxx´ÌH}¶œ}xHš¹HCÉH´»L‚K'b2bbb|y¸}}^b^b{|M,LL&L,b¹x|wYœ||GwG].wÌ´Ywév|Gbyw´´|^bG|b€{»7,26b‚J ¾,22,2J»I|é´w|vœ{{Z{}^^|œ^Bœ{µvvËG^|YÛwBñž´´´´}œ2R»í¿³|vœY}œœ{¹ÊéÛÛéÉÛœœ{y|^œ^,Jb|{»f,-bµ.œxHxx}HH}D^}xHšÜCš¹x´»&K}¼-…-b-|Z|}Ìœb-œ|b»¿JLL,J¹xb´Y´GGGwG'DË´YYwwv|G|[é´é||GG‚bJG» 2b26J‚J`€^¿¿2,Îa|wœw|^w{]µ³}|œG^^^|{ñwé³B|Bww^ByË´Û´´ÌÌ‚RLHÞb³||wœYœBxë³ÛÛÛÛçÉœ^›¶B^^^b,,b|GD0‚-b,,¶}Cx}H}H}Fœ´`HšµCšxC´»{ }'‚--,bG[¸}}^‚^^‚JLiLL,JxbwYÉG||´G]HËY´´´w|wG|[é´´´B|G^^JG»bb6¿J¢K, +»a{v|^|Gœ{]D^w^}^|^|G]Dw´´v|^´w^BñË´´´´ÌYé‚iÌÌÑœGvwww^w|[³éÛÛçÜšé´{ñ|wYœ^G,bG{yPG-b2 + +xšÉH}HHH}¶ZÌ`HšZšÉ`šxHb}}}‚-…2b|¶|}}œ^}}^b.PJii,¿xJ|´´GG´G]Ÿœ´—Y´œBËG¸[w´´éw^B´}Gb¶3bb¿6¿J¢^,¿2¿6Ìd{G||||œ|]»|œwÌ^G‚|G€Zºé´w|wwBG³y}´´´É´Û}yÌb³G^w´^w|ëÞéÛÉØÜÜêxé[BY}^bG-G|{.†J-b2ZCHHHHH}[}}`HµÜµCšš´Kb}} K-22b^D¸}}}‚^}}žb»3J J,J`x|Gw´JJ|´GE³´—'wœB|{|[é´´´YY´´Y|y7,b2J*L,¿¿ +,2»I&{&|||YG]D|œœ}^|bGG€¶³´´´^|w^GÈyÏ}œw´Ì´´Ì³ñÏ̳GG|wB^wšë¸çÛØÛêÉØÉé[€wYœ^^^œ¸$g--22 +2.šHH HHH¶}HššµÜµššH´Mb H ‚-…2-^y|}}}}wÌ´|‚»iJ¿LJbƒx|GYêJJ^´G}ŸœYYwœ^³|JJ[Ú´´´çYéY´^|»3J,¿6JJ*‚J6+aJbbG^œ|›yœ^œYœ^œGž]ywéwYœvw^™³yË}|œœÌx´Ìé¶Éé³GGG||^œv¶éÛêêØêØ۴鶀|´YœBG|^¸D†,,b221¼HHHHH'FZÌ`µÜµššHxh¿}H ‚-O2-|¶|}ÌHš´É}œ^ŸJ6¿bbxwœœÇ{JGwGE¹|B´^^^B|+[³wé´´´éYww|yd,,,¿¿J1L266-»G|GJG|^{]»|^œYYœYœ|]»aGBœ||^B¸vÉÏ}^^œ´´ÌÌéµÜé³^G||B^w{°éêØêÇêêÛwé[|Bxœw^^|^|$0,b…2 Ÿ¼}HHHH ¶}´¹ZµÜµZÜH´h¿HH}K-Ob-^D|Ì}HxššH^œ»PJ2¿,bbx´Y´Ø{GGéGE[Y^YB^GG|++¶wéwwé—´é³^|¶d,Gb,JJHž`L6¿2-»aG||bb|^{{¶{Yœw}œwœ^{Z|&|||Bœww³ÖËœJ‚ÌÌÌ}´´°Ë˳w||b^^œ{ÖœÉØÜæêØÛ´Ú[||Y´Y}v^|^|yPJ22 ¿,ŸžHœ```}¶HHµµµµµµÜšx1bHH K¤-b-^µ|Ì}Hxxšxœž*L,2¿,b}-bµx´œ´æbG|wGGŸv^wY^bLJ[ééwéw—´év^|¶)G^GGb¿,¢œ|ei6&||||GG^&µ}œœYœœ}œ|¶€J&G||œww{¶éY|œÌ´}œœÛäÜ̳œ||G^Bœ|±ÏÛØêØêØêê綞wY´´´|œ^Ë|yP22¿6 …2.žHÌ}``HFHɵµµµ–µZšxƒ-HH K-OO-œD|ÌHxHÌ´}b‚LbbJb‚b‚byH´ww×JG|´G%Ÿv^^Y^GžJG[ÚYww´´´wG|wDfG^G-GJ,JeJœ|GGƒ¿ ‚|w|^GGœJ{¶}Yw´}YYœGy€J+JG|wYw¸Éé´œ´´ÌœœœÛ×Ü´³wv||^œx¶ËÛÛÛêÉÉêÉç[¼G¹YY}wvœ|vD322,6 2b»Hœ}´HHñHxµµWñµZšxebH¹ K‚O--œZ|ÌHHH´}}b‚»L…,22…b^‚‚yHwœwÜG^|wG%¹w^G^^b,GJ{¶é´wéwØÛw¸{|¶aG^^bGJJJ*€žJ¿bb{e2P»^wéB||}|™[|¹YxÌYYœY|y{|GbG||^é{¶Ëx´ÛÌÌ}œ}éðœËË´w^|w^w|¶³Û´éÉ´ÇÜÇÛ[^-bZww|œ^¸32222 22»ž¹ÌÌÌH}FxHµyy±ñyµZx.bH` KKK-‚}¶œHHxH}^}œ-»2b,¿Jb‚‚^ÉwwYÜ|^|wGœŸ|^G^¿,JJ¶é´´w³´É´v{|D)^'^^bbJ*¢œJGG|-|eiy|wœB^wxw¸D|œJHÌY}œY{¶|œ^|bG|Bév±ÜÉÛÛœYœœ}éµÜËËY´|œw^w¸ÉËéÛ´´w´ÜæÛFž‚‚G-,Z^w^v»322……6 +¿»žHwÌ}HœFÉšyññµñ–µZÉMbeHeKKK‚K}yœHxHÌ}}ÌÌ .L…b-2,,b-GÉ´w}êJ,G{G][|^žb2,LJ¶w´´´³´Û´Y||y€^'ž‚bb,*¢œGžG|‚b^JJH{|w´Yww´B¸¶|œ|GJ`wY´|µww||Gb^œévyéÉÛ´}Ì}œœé°ì´w´´œ|v^wG¶év|}´œ´šÜÛ[Ïb^‚^^bbZ|¸P,…22b +2¿H^HœÌœH̞ɚññWy±yµZÉ12eHe KKKK}¶}ÉH¹}'xHxHML2…Ob2¿,bb»x´œ´ÇG{Y,|]»b|Gb,,++[éY´Éw´´Bœ|v¶z^^b^GbGJ*ºœ{{|œb}Bµ{|wYéwwœw|y|œ^^b,JHœ|¶wéw|GG^œ˜vñËÉÉÛÌYÌœÌw°Ü´³w´w|^Yœ}¶³wËËœœÌ´ê´ëžb‚‚--^bš$Lb‚2…‚…2}¼ÌœÌ´¹éGžšñ¶±ñ±ñyš»2eHe eKKK}[xšH´}ÌH¹¹HŸ +OOb22,2-¹xx´xÇ^^^G^}.Gb‚b,,¿,+b[éYéÛ´v´^|v¶]^^-GGbbJ`bœGJGËG^}^Iɸv^éwœéwv{¶{^|^|G|JH¶¸Y´wB|}´w³yÉ´êÉ´Ì}œ´éñêìwœwœ^|wœ{ê³éwvœwÌ´´é[€‚‚^‚^G‚œœ¶¢‚‚2--‚2žH´Éé¹´‚}^±¶±ññyZZšMO`eeeKKK}yHš¹H}ÌxHx}ŸL2OR + 2,…,šYÉɵG||^|].bbbbb,¿ ++{[é´´´´³wœJ|D{^-bbbJ*Jœ{J&||œw|dë|vœwwYww|{¶¸œ^^^Gbbb€šw´´éYw´xwȶ³ÛÛÉÉ´}œ´éµÜœw|wœ|v}w{¶é´éw霴´´œ¶-‚‚‚^‚‚‚œ¶L‚‚‚O‚‚2¿Ÿž¹ÉêœHxœ}|‚ë±ñy$ZšM‚HeeHKKKY¶}ššÌx¹HHHÌ.fbOO 6R2‚‚»šœ´xµG^^w^]¹bbb,,,,+{[é´Y´´wwYGL{[{G^b,,,bJ*œ¸|J||^G{€š³vœwwéYœ|™¶œYYœœ^žbGJ¶w´´´YY´xév±Ë´ÛÉÉ}œœÌ´¶êéwœB|||Yœ|Öé´É´´Ì´´œË¶|-‚^^‚-‚^.Á-‚K-‚‚…¿.^¹´Éœš×¹´…HÖñWyµ`¹.KeeeeHKKKH[HܹHÉ`H Ì}.L'-- …KH»š^´xÉ^^|w^&[‚G-,222,J[éY´´´év´^J¶]G^bbbbJ*œ¸|{bJGGG}¶³Yœ³w´wœ›{DË´´œœYœG|D|w´´´éY´´vñË´´ÉÉ}œœÌéÜÉ´www|G^wœv¶é´êÛÛ´´Û´Ë¶J-‚‚^‚^b^‚Ÿ¢‚h¤K¼‚‚-Hž¹´ÉÌx´´Üž»†yñµ*¹.Keee`Hehex[ÌšZššZHHH}Ÿ+---OO2-KK»šYY´xG|^^^HŸi2O…22,2LJëw´´´´´B´YbJÖ+G^^b,bGJ*Ïœ||{JJ|^bañv´w|w´Yœ™›yË´ÉÌ´´œGžJyËwé´wç´wévÖË´´ÉÛ}œw}wµÜœwwœbG|³^x¶³êêÇÉ´ÛÉÛ³¶bb‚^‚^^--Kž.€‚-‚ }}Kž»žxÌšÌ^é´šœH.L±yšM-e11`eeKeHñHšµZµš¹¹H» '--O2-K'»šxYxš^^^G^&»H 2-O222¶w´´é´´w|w||[+G|-bbJ*œ|œ¸b,Ëœ^IÉvY´|³´}´w][|´´Ì´x}^žGyËwwwé´´ww³¶w}ÌÉ´}œ}}é[Ëéwwœ^G|œœ{¶ÚÛÇÉêÛ´É´é¶Lb‚}‚‚--‚^‚»€‚‚K  } œ`‚Ìœ´ÉœœœHËbŸ†-‚yZš.‚11H¹`eex[šZµZZ¹¹ššHyG}}'‚-O-KKñš´´ÌÜ^^^G^{[ÌšHƒ +2 +2L[é´´´´ØwBwœ|¶›Gb-, +bJ*œœÛ|JbËBG‚ñvÌ´Ìv´œww›y|w´}´x´œ|G[Ëww´é#wwéwÖ|œÌ´Ì}‚}´œšÜ´wwÌ^b^w{ÜÚêÛÉ´´´´Ûw[¢,‚}}¼^‚b‚‚Î^‚¼} }HÌD¼Ì^´Éœ^Ìxé|Ÿ3b‚YZMZ.Kƒ1¹`eeHH[xεZµšxx¹Éy|'}'‚K--K}D¹xx}xxœ^^œ&[Hxx¹Hƒ2…JFéxÉ´´Éwwwwvy{G,2bJ,J*œËœ|J|||b)ñv´w´wœw|{D^w´Y´xÌw|[wYœw´´w³´wšË^œ´Ì}¼}´œëÚ´w´´^{G}œ{µÚé´Ûéw´Û´œŸb‚}Ì ----ž»^‚‚}HÌHœ»œxœx´œÛH|^»g¿bœ}ƒšŸKƒ1``HeHH[HµyµZ¹¹HHxD^}}}' -K}»š}x}šx´^B^{ÌÉxxC¹H1¿J[éÉɗɚشw|™[€b-J2,,J*œ|œÌ^J||Ja¶vYœYw|^‚]›Ÿ|BœÌ´Ì´ÌYœ[wœw³Ûšww´wÖšœ}ÌÌ}œ}´œZÜœw´´wG|HwGÖÚéwéY´Û´´Ë[b-}H‚b-b-ž.¿^‚‚}̹HœŸž¹´xÛœ^œ}||ŸL,,´}ÌZ.K`1¹ƒH1`H¶ÉµyµZÜšHH¹[|YH}'K^KK}»Z'x}xšx^^œ{.YCxxx¹`¹H¶´xÉÉÉêÇÜw{w[€bb,¿,J0*œ|œ|ËJ||J,ñ™ww´^éwY&›Z|ËœY´´´´Yw¶éÌé³éxx´´w°Üœ}´Ì}¼}´œµêéw´´w^wšw¸¶Úéœwœœ´´´Ë[b…-^œ ‚-b…¤^‚' }}}œ¶œÉYéÌ^Y}¸Ÿ0bxÌÌ}.KƒMƒ`H¹¶xÎyZµššÜšy|HHH}H-KxHyZ}xÌxšx^}'{D´xCšC¹`H´HÜ´xÉ´´´—ÉÉv³¶€,,bJ2) ºœ{||J{ž{f¶™Y´Ìw´|}G]¶|œYœ}}YÌYœ¶wY´ww´}´´éÖË}}Ì´}œ}}œµê´wœÉwY´xw|[é´wœœœ´É´Ë[¿…-^¼}‚b……-»¢‚‚}}}} œ.œH´é}YœYœ¸G.›|žx‚xÌ}e*ƒZƒ``ƒ`[šZZµµZ¹šµ[wHxHH'K'HH¶¹Hx}Hšx^}œG[HšxCHÉxÌ}ÌF´Ì´x´wéÉÉB|°+¿,2,¿¿)1œ{,G|ž|‚y™´}wY´|xw]¶{œ´œœ´´ÌYœ¶wÌÛ´^´^w´w°Ë}ÌÌ}}œ}œË¶Úœww´´éY´´Gëéwœ|œ^wÉ´œ¶b2‚¼œ ¼ž-b¤»¿‚^‚}K}ÌœyH¹é´xx^YY{|.º^^´bœ}}}*M`````¶šµšµZZšµ¶}xxHH-''xHñµHxH}Éš}x}G[É}xH´ÌY}}^[´´´Üxwwx´wvy+, +,2, +20*œJ+bJ^|'ÛvYœwÌ´Gœw]|œw^^x´ÌYé[wwY´³ww|Yé°Ë}}Ì}}}Y}wÚéww´´YéYw|DééG|^œwÉ´Ë[¿…‚‚¼‚œ-2‚‚D¿^‚‚}}Ì}œ¶¼¹^´´}'}œ¸|¶º^‚É‚}}œY|M`*ƒ*``FšZyµšµZµµDYxxHH}'}HH¶ZHHš}šx}x}G¶H}Hx}}xœ}^[Û´´xxœxxÛw|[€22222J*œ+LJ|||‚ñv´œw´´v|w]Ÿ||œ^^´´ÌYw[wœ´´œw}œBé°œÌ}œ}œ}œYË[ê´w^éwé´´³¸.˳G^œwÉÉË[bbb¼¼}‚-Ñ-‚¿^-‚}}}Ì̶¼^G`œÌ}œœ´œH¢^|É^œ}œœ^µ*ƒƒ*¹``FxµÎZšZµ[´xHxH'HHHñZHHxHxHHx}G[¹}Hx'''^'‚FÛšxÉ´wYx´œ|[,2¿ +2œ|b¿bGf±vYÛwÉ´Bœv][{Gœ^^´´xYwF³´´´w|wwww°É´É}¼}}}´œšÚ´wœww´´wv¸`™³^|œwË´É|[¿b‚ ÌÌ}‚…-ž»€œ‚-‚}ÌÌ´yœ-œ-G}´´Ì^.€b|Ì^Ì}œœ}yw*``¹[HµZZ¹Z`š[´x`xxHHHš¶H¹}HÌ}xÉ}GF}HHH}''}œ[ÛšÉxx}´w^w[{-2 +2222*œ|bbJ¿J|JdÉv}ÉwÉw霴]»|œœ^œYÌ´}´F³}´´´B´´œv[ì}Ì´}}œ}´wšÜœwœwé´´w{H¹|w||wœwYY|.b¤ }}} O…….}œ-¼}Ì}´¶žG|^œ´^HºG|}œH^ž^œDwÉ**`ZD¹µZ¹šƒH`[YxC`xHHCHŸZ}}xšHHšµ}G»HHHÉ}''}}^FÉšÉÉxxYx}||¶J22222,2»œ^|bJ,bJd¶³wÉœx´ÉYY¸D{wœ^YxÌ´´w¶³Yw}´w|´wvëé}Ì´Ìœœ}´œ¶ÜœéwËwšYw{{`¸³œ^BéY^œ{Ÿž…‚   ¼‚……….œ}‚‚ }Ì´[ž^}^‚^^G`H¹^^Ìœœ}¿^}¶œÉÉ**¹F`µZZ¹`e`¶}`CCCCHHx¹¶µ}HCµHxšµY[HHÌHHK'}‚FÉššÉxÉx}éw|D0,2 +¿ +2 +i}œœ{b,žf¶¸wÉYwéÛYé{y|Yœ'´Ì´Y´w[w}é´´w|YwvÜœ‚}´}}YÌ´|yš´wY|³Éxx³›¹¸³œ|^œYY^{¶b‚  K‚ž‚……….Ð^Ì}‚}}Ì´[G^^^^^^-žŸGœ^´}}},^^¶³x´´`Fxµ¹``e`FxCšCCCHHC¹[µHšxš}}Hš}[HHHHH-- }^FɵɚÉxÉY´Y´¶2222 +2 +iÌœ´œ^bG^^ayv´šYœwéYœ{»|´œœ´´xY´œ[Ë´´´xéwwœ³µË‚ Ì}Ì}´´|šËw³Ìœ³ÛY´w{¹{w^||œYww¸DÑž¼ Kb…-…§O.€^}Û}}}Ì´[žG^^œ^-^-|b{œœÉœ´^œ^œy|´´´H*[š»µ``H`ŸšZCZšC`xC`¶y`x`šH}š`H^[H¹} KK-K}K[´}}yx´xÉÌ´´F= +2222O2žÌœœœœ|}}œa¶w{YÛw|^w´›»|w^œx´´´´w[³xÛ´´´Yw|³µËÌÌÌ}}Ì´x|¶š³œ´ÛwYY^³¸.¸|ž|‚}}Y}{¶¿b‚ Ì ………O…»œÌÉ}}ÌÌY[¼G^^^œG^|G.Y}É^Ì´}}|¶|´´Ìx´Z¶µyZZ`*`ƒ[šZZ¹CC`x``¶y`šššHHHxx`[HHHKKK-KHœ[´H}}´y´š´xÉ[}x1222 +,1žœwœÌw^´}Ìœyw´Éw^Yé}]»{wœ}xx´x}w¶wxÛ´xØÉw|vµé̹É}ÌÌx´|¶xËw´´wé´^{G¶›|bb^œ}wœ{¶¿‚‚¼¼‚ÑORO…Ÿ|}Ìx´}ÌÌ´[^G^^œ^b^b^|H€œœxœx´}œ^µ|´x´x´^FyÎy*Z`[yµZZšC¹CC`[yHZZµHHxšH^[HHHHKK K}}[´H}}xHYñÉšÉ[YÉx´e2221žœœœÌ´œéœx¸¶w´´´^|w´Y]¶|œ}´x´´x´w¶w´É´´ÉÉ´|vµËÌHÉÌÌxÉ´Gµ|wéwÉ´´Y}+{Ÿ¸|bb^‚^}^{[b‚K¼‚ž……2O…»¸ÌÉÉx}ÌH´[ž^^^-,^b^GH|^wYœ´Ì}}|µwxÉxÌxœœšyµ$*ZF¹Z[µµZ`šC¹[y`µÜ±HHxµHC[eHeeKKK KK[Ìx}xxxxx'yÉ[}ÉÉxx´OMbÌËœ´œœ´œ}éñ´´´´^|B}œ¸yžœY´Ì´ÉÉ´w[³´É´YéçxB|븠ÌÉÌœ}ÉÉ{¶|Úww´´wœ´{]ñ{b-b‚‚^'œ&Ÿ¿‚ œ‚žÑb…O…ŸxÉÉxÌÌxœ¶|^-^‚,-^{`¸^^´^œ}}w̶ZÛÉx´}Y}|y»*Z`F¹Z»y[µZZ``[yHšZyHHHµx^»HHe KKKKh‚F´HHxxCCxxxxF}ÉCxx´xY15|Ìœ^œœé̜̳¶éY´}œBœ´{[ž}YÌHxÉx´w[é}ÉxéwY´w¸yJLƒÉ}b^ÌÉ|HËé´´´´´wx|Gy{b^'^‚JŸb-¼}ž‚‚b…‚‚¶¸ÌxÉÉxÌxœë‚G‚^œ|G-^||¶{^w´}´xÌ}}ywËyÛxÌ´´wËy$$µ`[¹Z»y¹[yš[y``ZµHHšµx`[H¹eKKKK[´¹HxxC–šCCÉFw¹CxxYY}vY|ÌœœÌwx}wœÚ¶éx´´Y'BœY¸¶b^œH}ÌÛH´w[wY´´YYw´éwD›6Lœ‚}Éœ¹Ëw´´´´´|xY{É{b‚^^{»žb‚¼‚¼‚…b‚œ¶|}xÉÉx}xœë^^|^^b^^bG»{œœ´Ì´Û}}œy³œ´w¶xYÌ´œyµy*»[Zyyyµñy[y`šµ±HešµH'Ÿ`¹hKKK[ÉHxxxšZZCšÉ[}¹šHxH´}wšÛHœ}œœÉœœ^³ñxY´xx}^œ´|¶bœ}H}ÌxH´wñw´´´Yéœw´wy› +¿¿ }´œyšéÛ´´´´GœwHš+-‚'{.b…‚œž¼ ‚‚K¼¶œÛxÉÉHH´Ì[‚|-b-2,{^œ}´ÉÉ}}œy³œw´}éñÌ´œ+$$y$*[yy»yyZ°y`Zy°HHHµHYŸš`eKhKh[ÉHÉÉÉšZuššÉFÌZšHH}Y}wZ´Ì}œœœµ}}Ë´[š´´ÉÌ}^w´|ybœ}Ì}}Ì}´w¶wY´YwwYw´³š{6¿,¿Hœyéé´x´x´Bw³|¶{J iK‚Ÿb…‚¼‚‚ÌÌ  œ¶ËÉxÌxHÉÉÛµœG^-bO,¿,LJœ^YÉÉx}}´µ|´}´ÌœYéµ´J‚»yy»[yyñy»yyyµ»°D¹CµµH``µC}ŸÜš1e5h5H[šHšÉCšµZšCš[H¹`HH´H}wZÛHÌHœËÉ}ÌYËëšÜxšx'}œY|yž}}}}}Ì}Ìw[éYÌYw^wœwéy}¿ +2b 66¿¿*éw´Û´´´w´|GÜ{Jib¿O‚‚¼……   œ¶ËÉ´´´¹ÌÉ̶‚G‚-b¿2,H€}^œÉÉÉ}}YÎœY´Û}^œœÛwš^}^3 200 125 1 +DiU|i¬dŒiiŒ˜ii†Œ‹\‹dUGU‹CCVn‹Y8"((""‚V—hhh{{¢e{{{|hCGmmT~U¡›m›Š~hmmhk‹ª— ——FŠŠfi[~Šmmmm›mgŒŠŠŠggBgg–giŠ^$^[L=^$nk–¡ŠyhŠ—yjj˜j0$ L$#$^InItqX€9^qq‚mŒ–hŠŠTŠh›ŠŒ~F1[[I9$4 $ogXX— h~~T‹~ŠŠh~qkX––‹‰Š›1dH|˜£†¬ŒŒŒŒŒi†DUi˜Œ‹UY‹YC{i{YY<`"]]£{C{{”U{{C{£n{G1mG~U¡hmhmmmqš¢ˆ{—{ª{hT~iq~GmJm‚hTŒ–ŠŠŠTmgmgg{}=99[$)$4$J–Š—ŠŠŠ—”j‹j0IIL$$$9IH^„qqqP9tqq€¡—›ŠmŠ›ŠŠ‹kX[99^$9I$n0XFX—ª—TXgi~h›Šmq[q~‰ikŠhmqi|i£†|†ŒŒŒ˜ŒRŒ‹‹‡iYU{iY{V¢i«]]""]Vhhh{¢‹A{{{|hn{YJmGgUŠ›m›~›qXšž—{¢”————hŒXmmm›m‚m~ŒTmŠhŠTg~gg{m99$[$^4[ƒqk–—ŠŠTŠ¡”BjUjFII$3$$9 H^qmq[P$v^N€HpC——hmTmXŒkXq59^9$9 $npX~XŠ¢——~~‹~h›Šmq[tkkU‰ŠŠm›|id£§†¬VžŒŒ†Œi‹iŒY{nUU{D‹i˜UYYG]]]£{hC{{eU{{{|nCYGGGmi—¤m››~›1[mŒ—{¢©{——ª{¢{~mmm‚J‚XDgŠŠŠmTmTŠg˜p^4^9^t9tLš–—ŠŠTŠ–—fj{F0$$L$$4$2p5‚q[P=^^t[\pXXY—ŠŠ~‹XXq49=99$$njXX~—¢——ggi~hŠTm~€5[kngŠŠh›ŠG|iŒŒ£†£@ŒŒD“Œ˜iŒžUUYYhUVU˜‡{{YGG]]V{CC{{{UC{{£Y{YUYGGmm‹—h~GmmW‹—¢Ÿ”—h——{¡žXmmqqJqJXi›ŠTGTmŠŠ~‹pI5t9^45[$nš–—ŠŠTŠŠ—‰{z0^$$$$4IpNq~€t==99[HpXXq[——m£Xqq9P=$#nIXX›——ˆ—g~išhŠhm~q5[p‹g–mhŠhh›iiŒ£†£VŒŒi†ŒŒS˜žUnUUGGi¬S‹{C]£{{¢{{{{U{{{EUYYYGGmU—›hmmI£ {Ÿ¢{—h—ª—dmmmmq5t5Jqi~YŠŠŠŠŠg˜j$N49[^X5LUšŠ—ŠhŠŠŠhfkA04I$ $4[\IqqX59==$t[‘ kX5^9IY—‹[99===)Ln[kkmh— —~m‹~hŠhŠT~X€pU~ŠmŠh›—hTDŒ£@VdŒŒi“VŒD˜ŒŒ‹Unh|idiUUY{CY|{U¢‹{{‹xU{U|nY{YYGGmU—{1hY~dª‹x¢¢—h—¢—Œmmm5tNqJ€DXX~mhhmhŠŒG^5^9q45XIYk–—ŠŠgŠŠŠk‹zFFI#$4pnI9qXqt$==9[o[[^^$^LUF599=9)I[X~h—¢—gg‹~h¡hhm~mXkUkŠTŠhŠh——€Œ£VŒŒŒŒD“£D˜i¬Œin‹hYVi¬‹‹UUU‹UY|{U¢‹{{U‹‹{U£{nCYYGGmi—¤mhm~~†¢¢x¢¢—h—¢¢†mmmJ5N55JqV~mmhCm{mhŠij454tX[9XIYš–—ŠŠTŠŠŠkjUzF[4$#$4In^^kmX[$=99n3[Xq$$$^7"pFN[9=^)nIFkT~—¢ˆX~i~Šhh›m~m~knk–mTŠT{•mVVŒŒŒ£ŒD“|iŒDŒ¬dU‹{YVŒi‹Ui˜˜‹Y£U‹‹¢U{U‹UU¢|YnCYYGmi—{h{m~‡¢¢x‹¢”—{—¢@mmm1qN5Nqq‹mmh—mmU–Œk[5tNX59XIYk–—ŠŠŠŠŠTkk‹zkFII $4I\L$5m~€9==$t2Z[Xq^^$$7%p^[9t==$#œjXX~X›——kgišhhŠ›mmm~XUjgTT›mh—ŠŠŒŠ@£V£ŒD“­iŒ˜Œ†Œ‹i‹YVŒž˜i‹Ui‡‹Y|U‹˜Ÿ‹U‹‹UU‹|YUnUY1‹—hU{{C~£¢«Ÿ‹”¢{C—¢ŒmmGJNqqqDmh—{hmmmXDkq5[5~59XoYX–Šh¡.mŠŠšg‹zXF4$ IIHL$[55[4$$9tHL€[q49$^'rmF^5[[^==$#[XkXX~ŠŠB~išh—Šhmm~~~‹g›mŠTŠhŠŠ\›Š££†VŒ“­ŒŒiD£Œii˜YŒ¬ŒiiU‹Œ‹Y£‹‹‡˜‹‹‹‹‹{U|UnCnYY1n{¤‹¢{n{~Œ”«ŸŸŸ«”——{ŒŠmmGm5Nqq5ŒŠ—Ch—hhX~XXJqXq9q3Y›Š—Š—TŠŠŠ~g«jFF4I 4^HL^9[[t4^^9[27[qq[4$$#"pF9t[[4^$^$YjXmXXT›T~~‹~—hh›m~m~~‹fŠm~Thm—¡Š–ŠTR£VŒ“­ŒŒŒŒ£žiŒ‹Y|ŒžŒ‡i‹‹ž˜Y|U‹˜¬˜U‹x‹U‹™UnYnYYGn—{‹{{‹X£”˜«‡««”¢—{£ŠGGGJ„5qq5ŒThhhG{h[nkq5mqm59[IYmŠ—ŠhŠŠŠŠggxjF4F $ 4IHL$55q5^^94[r7€€qt$^LJpF95F[4^I $HommŠ[›ŠmB~i~Šhhm~mmqk‹fŠŠXTmmŠŠŠŒmŠTT†£Œw™VŒVŒ†ŒŒ¬iC|Œ£¬SiUi‹‹Y|‹‹˜˜‡‹U‹‹U‹|{HnUUYYYn¢Y‹{—‹¤G˜x«‡Ÿ˜‹”¢—CŒmŠ.1q5JqDŠ—{C—{—C~Hk4X~q1[^[Ing——Š—hhŠŠ˜jF40II [I‘LI55tNI^4t[r'€[5X[$^L4p^5p4[[IILIXXŠqmŠ~k~išŠhhm~mmkk‹kŠŠXmŠmggŠ\ŠhŠm~£Vw­ŒŒVŒŒŒŒd‹Y|Œ£žŒii‹‹i2|‹Ui˜i‹U‹U‹‹™UUnnnYmH{{Uh[†‹«‡˜Ÿ‡¢¢{{Œ~GCGGJ5JJXŒŠY{C{—Y{{mk4q1qqt5IkIJnh¤hŠŠŠ–ij[F[4044I2345t[4t9t[M'[[tqt$^3"pF9[[[[F4Ln[XkmkX›mkg‹kh›m‚1~q€‹kŠhXmŠmgg›VŠ›T~XV“™ŒŒŒ£Œ˜£†‹2™Œ£†Œiii˜iY|i‹‹i‹U‹‹‹/‹|{iUUYYG\¢G‹C{XV««‡˜‡¢«¢{{£mm{Gm1J‚X\ŠYh—{‹{{{mDk5mmqJ59[^Y‰j›Š‚nC——T˜FFqII4$Hƒ[[59[4^99tn'€[[q[94L"p9F€4kX~k5IX~mŠmmŠkX‹X›Š›m~qmqkUkgŠT›hŠŠg›V~hŠTmgXw™ŒD£†ŒŒR“˜n|££dŒ˜i‹ixn|iUUU‹Ui‹Uii™ninUnYYGH{hn{YYY£««‡i¨¢«¢{{£h›CCGGmJ‚JDh—C{{{—{ŠŒšXmqmq94IšF›TŠmJn—h–˜F[FI[4^HL4[5494999I\:[€9N49I^MpF9[[[[ŠmF0YommXŠ—~~kXik›Šmmmqm~X‹kgŠ—mhŠŠŠŠŒmŠŠmm~kwVŒ£†ŒV£“˜U|£†@Œd˜iiin|iUnUi‹iii|UiiHUnYYGH¢Un{Cq˜Ÿ˜‡i‹«‹¢—{|G.Ym1J1ŒC{{{{UhŒXqmmJm599InškŠmm‚mqJnhij4F44II4^HI9[99999tM'[[t[499LJpF9Xk[^X~kjoqXŠXXXF[X‹k›Tmmmqmm~‹gŠŠ—hŠŠhŠ›\XŠ1Š1g~XX££V†VŒ£†ŒU£††£dŒi/Un|iinUUUi‹iii|UiH‹nnYGD‹n{GYG5†‹˜‹˜‹‹x—{‹£hhhYhGm‚XŒhh{{{C{—ŒXX1mJm59$YBkhmmmqqmXqp44F4FII[^2^$45t994t[M:€[9^9pLNm^k4^XŠ~0$[m~~[[kF~Ukmmm›Xqmq~‹–¡Š——ŠŠ—ŠŠY~›mmmgmXX›£†£V˜V£˜n||“†£†žŒiin|˜iiiiiiiiiwœi/U2Y]!¢œ{YnYGG[˜«˜‹‹UU{{{|hhChYG1‚JVhY{{Y¢hŒ~XXJ‚mq9t$Y~š—mm1JmkXn$^444I44[HI$455949[t5‘'[qt^^[L"p4^Xk44[XFjnI[XTXXkFkXikm›mmmqmqki–———ˆ———ŠŠ\UmTmmm~XX–R££VŒR˜/||§R£†žŒŒiUE˜D‹ii‹/iiii­HiHinnYH‹n{‹nYCG˜‹‡‹i‹{U¢{VŠhCCGm]1ŒhCCYG{hŒX5qJmm595^2gkhmXq1m€X#^44I4I4[[I9t5N994N5r'[q599qqIH[t4m4^9pFp^Y[F~~~~XX[X‹kmmmm~qmqX‹Š— {{—ªˆŠŠnI4Y~mTmXXm–2“VVŒ“ŒU|§|††£ŒŒS/E˜iiiiiii˜i™iiHiUn2YH‹‹UYnY£«‹‹i‹{2{¤£. {hGmŒhCY{Yh{hV{JqJm‚5NJIYg€h››X51mkk$t54$4^4[[HI945t=9Nqn'€q[v9t5L"]t ~[994Fp$Y[GkXXXXk[X‹€mmmm~q‚Xk‹–—{{———”ŠŠ\L[5[~mXXm–GWV£V“žHE|“R“­£žžŒi­ii/iiiiD˜DŒ|/Hi/‹n2H«œU«œUYCX£«iU‹UnCU{VG.GhhGGhmŒYCY{U{{hŒTmm‚G‚N5J[HgkGh1qmG[[\^9549^4944\I9[9P$999527€q59=[9L"p4$X[49I[j$YoqXmFXkXX~‹kmmm~mqq~Xœf¡——hh ”¡ŠI[5F[91~X~gYj~ŒV“§H™|“­“|£d£˜/|ŒŒiiŒŒŒiD˜™‹H/Hn28H‹/‹œnnnYYGži‹U‹UY{‹|Y{CYhGGmŒhY{YY{‹UCh£mm]mG‚5J54YgXhmqmG€F^[[$4I9[H^9N99995[\LqqN9^99#M[94[94^94IvY^4[q~F€X~ikqmmm‚q~qq‹kg——h——¢¡Š\I[5[t4$4YT{UWmg£“†Hl­“|R££†£DiEŒŒ˜iiŒŒDiŒŒ™/HH/nn8HŒ˜iœiinU{£«UU{n{UVhY{CGGGGmŒYY{Y‹‹{{h£mmm]mJ‚N4gX›]m1G€49[5v994H^99Nt9999qn^qq59995LM[54[44[9 ^^Yp945XJ1Xmkqm›m~X‚q~‹fgŠhŠ—— ŠŠ\[[[44^4XmŠ‹šGkFw¬iE­“R|†£†VŒEŒ˜ŒŒŒŒŒD˜ŒŒ|iD/iH28!«‹iiiœ‹nœU£iUnY2nC{|YU¢GGGGGŒYCYU‹‹{CV~GGG‚NNInT~mGm~mY~[^959^45[H^99999[qH)m~m9t95L"[5I[5[€9$^2o5[[[[X~mmiqmmmqJqq~‹kgŠŠŠhª ŠŠ4[55^[[X›h‹gh{FŒ E­“||†£VŒŒ\EŒŒŒdŒiDŒŒDŒ|i\DiHnY!‹UUSi‹in‹‹nRi‹nnUYYU£hY{{YGGGGGŒY{nCU‹‹‹UhŒmJ‚‚JN59\gXm›{mq99[99945599P99995q\'qm‚P9tqƒ"€5t[k4^ ^nL[[4[X[5XkœF‚m›m~qmqqif–TŠŠŠŠ—gŠn[5[5459[mhik~GGmYiE­w||VVVVŒD™ŒŒŒžŒDŒŒŒŒŒ™/DDDHn!‹UiDiii‹iU­‹UnnnYYU|Y{CGGGG‚DY{Y‹‹‹‹{hVXNmJJJ59HT~G{—h{Š~i99[959945[[9999PP95‚\pqmq=9[qI][55X95q44$‚o[4[[XX1X[Ukqmmm‚qmm~ighŠŠThŠŠŠŠ\[555[599X‚—˜k~Th›m™|w||VVVVŒ\™Œ†£†ŒŒŒdŒŒd™i\DDH22!‹‹iDUiU{Uœ‹­iinn2‹2n{RYYYY{YGŒCUnU‹‹‹U¤Vma]YJJJNt2T~hY‹{‹mm\t9[59t55qJ*9**P9J\€qmmP9qJ^"€5q5[554[9^nI[49FXXgXknkqm›mmqmm~‹ŠŠhŠŠhŠŠT–Gq5[559[XmŠikTT›.hE£||£VV£V\w££|†£Œ£†ŒVV™iDDDH2!‹i/D/iUUiYi£iiin‹HnU{|nUYCYYGYYG\{nU‹‹‹‹‹‹{VmNGYJ‚JN42Š~h{C¢‹GX[55N9N5m1qm]*P*9Jqm‚99NqL]q1J5J5t[9^2^[[[FXXFFœkqmmmmqmm~‹khŠhŠhŠŠŠŠmJJ555^[m—Œg~g›TmmXV|VVVVVD™£V†“£ŒŒ†ŒŒ@™i\\\DDHHMH‹/iDin2iniRi/nn‹n‹n­GY/‹YGYYYGŒ{nU‹i‹˜S‹{£mJYYY‚J(J4HŠXChCmk[5q5[5mq‚q\m{{{r9*9‚\kmm‚€tNq$8€GJqJN[tt9$no[[[N[5X[npqm›m‚qm‚mUkŠjŠhŠhhŠ\m›q5[594[m—‹X~BŠThmXŠ|||66Œ\™V££|§V@£ŒŒV™i\D\DDHH2!ii//n22nUH|œinHHi‹i‹£GYnYnUYG\{nU‹‹i‡«i{VmJGY]JJJNHT~YhYhGqq\tN5N5NqmJ1\›Chx{89‚~m›‚q5qq42€JJq`N555=^nL[[[5[€XmXU[qmm‚q‚m~‹kgFFFh—{hŠVmŠX5559t5m—ikXgTŠ›ŠGqTŒVVDV\\l£V£R££Œ†VŒVliD\DD2!i22Din2H/nH“iiiii‹‹|YCnYGn‹YGŒUnUii˜‡˜i{V›"GYY]JJJ[\ŠmCYYmmXt55q555J‚1\m{hx{mYN‚\~mm›q5‚J[8€]]JN5Nt^2ƒ[[[N951mXn€qmmmq‚m~ifXFFkkjTh—V›ŠXq55[[m—ikXBmŠThhmŠŒ~VD\l†VŒ†V£VVVŒ£wi\\D\D 6inniDHH/ni|ii\iiii‹|YnUnYGiHVU‹i˜˜˜‡˜i‹£mJ]]Y]]J]5HŠCYYm›\N55J5N55mq\›{‹x¤GmC{{\km›‚‚Jq‚[8€G]J„9N99no[[[N95m~Xœkqmm‚q‚mi‰~kkkkXFF£~hT~X5[[5—ik~XTŠm.›mŠŒk‚KV6D™£VŒV£VV†£V£?\\DD\DH\in/HiH22nnD­iDŒDi\Œin|UnUiUYYrGi‹‹i˜d˜˜˜‡U£m(]Y]]J]q\{YhmCYVN5N(q5N5q5\A‹xCmGh—{{Œk‚›G‚mmm[8X]JNP992ƒ[qq[9XXqX‹X›mm‚qmh›iggXkXBkkkFThŠ~XXkF—i‰XXTmmTmmŠŒXmm66VV™|VDDŒV££|V£™D\\\D\\H\iH/HHM2/\­iDiŒŒŒ˜in“2YiiU2YYYGŒUi˜˜ž˜˜‡i‹V("]Y]G‚"JnhhUCU{DNNN`JN5N55h{‹x‹{{{”“k›m‚‚‚‚[8q]]JNa*P9nomq555~mXœ~››G›‚‚m—h‹g~kXXkXXXF\ŠhmgX~XFX¡ikmBm›TmmXŠŒXm‚mV™|VVVVV†VVR™D\\DD\\H6iHHHMH2HH\£ŒDŒŒŒŒŒHnVYYnŒinnn]V‹˜˜‡¬‡˜‡i‹V"]8Y]]]"qnhhœUYYCY\[5NN(NNN5tH{xx‹—C{{{”“qm‚‚mq[8q]‚J`NN9n^qJq55qJmX‹~Šm‚Jm›‹XTkXkXXkjF\Šhmg~mgXXh—i~Tgm›TmmqmŒ~m‚m›Vl||£|V\£V|£|™DD6D\\H6iHHHH%MHi“ŒDŒŒŒ†£iHnV82niinYnY]£‹i˜Œ¬‡˜˜i‹V"8]Y]Y]]J2hmn‹CYYYn[N((**Jq!{e‹{{C{”U”Vkm‚m‚58q]qJNP*PP9n^5‚mJN5qmX~›Gm‚J]ŠUXTkXXBXk-FŒ~hgŠXŠŠ›X—i‰ggmmThmqTŒkm‚l|£|V£VV|£||wŒ6\\\6D\H6iH_HH_HM\RŒŒŒŒ†ŒŒn8nin2n2YV‹i˜Œ‡¬Œ˜iY]8]r8Y]"q\{‹Uh‹YG›D[JJJ(*PNJJ\{{x‹{{”x‹”Œ~›mmmq8q„qJN(**99n^5‚q‚NqXmXišŠmJ`‚mU[mXX‰XX~fXnm—T~~›{Š1——Œ–—–mŠhT‚qTŒ~m›hŠ?||R£VV||RlV66D6\D\\DM%H__MMDwŒŒŒŒ†V££DH62n/iY88nY]Vii˜˜žŒ‡˜iYV]888YY]]J6—UU‹{Un]\5JJ"J((J]D{¢x‹{{{‹‹xŒ~m‚q8qa`(aN*N9n9tq5q55qJ~i~]‚J‚m‹XmfXXX~gkF\m—TŠTXŠŠ1——˜Š{Šm.ŠGmqh\~mmGhmh™R­“||V|||RlŒ6\6\D\D6ŒM%%_%%%%i\“\ŒŒŒ@¬V†ŒH2n/Œn8MnY|i˜ŒŒŒ˜˜˜i"rrrY]]JH—CU{‹in{¤\5mGJJ`5("m\U‹S‹{{Ax‹x£~]mrqa```Na*NP9n9t55NNqJ‚~i›mJJ‚G›iXTXXXgmgXX\Š—hŠmXŠ{m——VghŠ~mŠmmqTŒqGmh—“™w||R|+||lV6D6\!\\6Œ%%_;%__%\wVŒŒŒV¬V†ŒinniDn22iY8|iŒŒ¬‡˜ŒiiVY"rrY28]"H{i‹ii‹n‹U{Œ1mGGJJJ‚GU‹‹x‹{U‹‹‹”†~‚›mnq(`"J`N*N9H99N9JNqJm~i›{G``‚JmikmXXgXmTkFœŠhhŠ1gThm{˜g— hmTmGqh\qm›—h›hww™+w™w||?V666\\6\VŒ%%%;%>%%\!­VŒŒV†£@£ŒD£nH/Hnn2nnYViŒ¬dŒ˜iiinVY8rrnnY]]\{Yi‹iœ‹{{{VmmYGG‚J"]V‹‹x‹‹x‹x‹xxŒ‚‚mnq(`<„`(aaNntt9NNqJmmŠ{¤‚‚JJJ~/kmXg~ŠmŠFkHm——TXXg~mh—¬g—ŠhXŠTmqTŒqGm——hhiw™““™R|™?6!6\DV>% +;>>%%D;“£ŒVVŒ£ŒVŒD|HH/iH2nHnYVŒŒdŒ¬ŒiiY8YMrnnY8GH{iiiiUUY{ŒTG.GGm"J]]Vn‹x‹‹‹S‡x‹‹†m›]m~nq(`````a(NNntJ`NNNqJ‚mim{‚<`J~kTXXXTmTFX\Š——TXmgmmh—˜BŠTmmgmq5ŠVqG‚h¤—h{›Dk™ww™+|™?K666\6\V;;;;>>>_\;w£VV£Œ†VVŒŒ|HHiiiHniUn|ŒŒ¬Œ¬˜iiYY8Y2r‹2rY]H{{iiii‹‹h\TGGGm"]GVU‹xi‡‹x‡‡‹x†m›‚nJa<`<`(`(ntJ‚J(NqJmmX—]J]‚mHFmmmm{—kX\Š—hTmmXmX——ŒfX~mmTmX5T\q‚‚{—hŒq1w¦™R|wlV66\6\Œ%;;;>>>\\w£VV¬@£VŒŒŒ|HiiŒHn2Hnn|ŒŒŒdŒŒinY8YMMi2rY8\Uniii‹i‹n{{ŒmGhYG"JGK‹‹xiŸxS‡‡˜x|mYmn{Q`<_\6™VV£VV£VŒVVEiiHDinHinn|ŒV£†¬ŒiiHnVn82M2‹rr2Y\‹{‹i‹œi‹U‹‹VhGCY GGGY|‹‹S˜‡‡˜Ÿ‡‡x£›Y¤Ymn{iYQN6Vw£££@££VVVV|ii\DiHDn2EŒ†Œ†ŒŒiiiYUr2n222nYHUUiiniin{‹VhCYC]YV‹‹S˜‡‡‡xix«RmY¤mœ{œ‹œM©©T©"TO“T“T«‹ªi^‹«¼†‹U‹‹‰wMh†¼RUoU#nˆÃ¼†«Ï¼†R†kŽÊoꨨ¼Œ†«Eˆ–;;Y;Y&)q¯M)BBtF)o<)¾²¼¼ŒUUU†§jÑ…6Œ††UUU‹jÀ¼¼¼ÐφІ‹ˆ‹Uol‘‘‘‘ZŒ¾†Ð¨¨ŒŒ‡lllÁŒ¬mVV¬¬9m½j¼¨i½i½½½ˆˆTmŽiXXiŽŽ:Ž©mˆXSXX'ÁSjˆTìÌj¾©Ì©Ì©Opj©©¯j¯¯O“TO“TTTTŠkSц†¼lŠUl…ªSŸhŒ«†‹U‹U‰Vh«¼¼¼†U‹Š¬Êo¼Í¨Ð¼Œ†«ßÐY;;;Y&t\>a)tB)F]oo)Yjuh¼‡U‹‹†‹¾h…6l«R‹U8¬j®¼¼¼¼¼RЇŠi‹oo‘‘‘‘ZZ«¾¼Ð¨¨¼ŒhŒUlp¬Vm¬¬¬(V9m½j«¨¨½¨½½i½ˆjmŽŽXŽiŽX::©%ˆXXXXˆpjÁTÙjjjjÌÌ©jOpjj©j">"¯©TåTTTT“O„¾«¼«Þl8U‹ŠkjÏhŒ†llU‹…ªjZ¼††¼«…U‹¿½ãoÏШÐІ†««¸V;o;<&t&q>±x)Bt)tott\¾”l¼†U‹h¿¨«RÑhŒlRl«8UpÔ†¼Ï¼¼††¼ª¾‹oo=Z=ZZZl©†¨¨¨Œ«6Òll©ŒVVVŒ(ZVŒm½¾«6¬m¨½½½ˆˆjmŽ:iŽiŽŽ:Ž©mŽXXX XX'¾ÁTÙjjjjæ©jjËpp©Tj"¯©p"TO©TTTTËˈ‹††Ð«Ul‹8‰ˆ]¬l†‹U‹»ªˆ£¼«¼¼«U†Ð‹¨ã¼ÐͨЫh‹Eˆ|8m;&;&);?'tF)B)t)B\YYSœ‹h«YU«†‹¨¨R†9llUU‹;Y¾Ï¼ÏÐéh†h…ˆ¬oo=‘]=Z‘l¾‹‡¨Ð«ŒŒ‡llÁm¬ZZrZŒr9m½¾Œm¬m¨¨iiˆ½©mŽ:ŽŽŽŽŽ:m"%:: Ž::XÁpÁ¥ìjjæj©©¸jËvj¥jj¯©'[TTTTTTTåTO‹Ï¼¨Œ‹U;nSŠt©p[©Ë©©TTTTT“OU†Ð«UU‹ŠnˆÃB<Ê«‹†«†ÐŒhŠjãh«Ð«h«¼ÑÏìuo$©O©[©©[©©©[TT[©[Šl…kj=oU=lU<),p£h»«†…¼‹«Š¨‘tV«¼«l«†«»ì^t$•oo+@@ ``` XÁŽTˆ¾¾¾¾jjjˆOŽÁS¾ppSjXj©Tj©[jj[["¯©T>[[©T[[i‘l®=‹=®\Á«R«»l††‹Š¨{CFFGG.mì›x<[[©T[©TwllllUllYpl‹‹«$l«lŠˆB*FbGGIHMF)jO¯j©¯©¯©"¯jT¯[[[©[©“©‘‘ll‹U‘lY¬«‹UY‹UhlŠˆMx^BFFG`,tY)t +qXžY<$oB))B8Z—«lŒ†U†ªj¼Ð¼†Þ‡††l†RŽÄ«m¼¼h«†»…ëÏÐÐÐÐŒŒh¼ÏS«llll¼hŠU©Šh66¼¼ŒŒUŒ¨¾h¨‡Ðˆ½¨¨i¨©Á(((E(r((V¯]@@`r@(@:Ž½Tˆƒˆ¾ƒì¾ìj厈SÁ¾ˆjjS¯jTj©j¯jjj¯>©T¯"©[¯[©["T‘ll‹o‘lˆ£lUoooYlŒÑˆx,BšFF-`G)Ft)F,q@B#oloB))]r@rr@@rŽŽ½Tˆìˆ¾Ù쾈¸OŽXˆÁ¾S¾jˆ¾jTjjj¯©j[©¯j©!©©[¯[©[©©OlRU<‘lY¾l\Yoo&oŒŠˆfB?B)FGG.`b)F)F,qp~Šo$=<)"¯¯"T©TT©©o¾¡¼«†‹‹o‹onVB;=•B,-`GG,,Cpt8U«‹‘‹ooUYSyll«Ul‹8jŒŒ«Œ‡Ò¼l‹R«ˆÒ¼‡Þ¼«h«¼½ßφ¼††Œ««†Áh¼¼U‹«¼ŠU©hh6ŒŒhŒho=о»¨‡¨¨h½‡¨‡©¬¨m¨¨¨¨è½¨¯]@@rE(r@rm¨T½ˆˆˆˆ¾ˆˆˆO¨Žˆj¾SŽˆXp¾T¾j¸jjj毾jËj©©>>¯¯¯>"T©©©TT©Sd‡¼¼«loU«nmLB;=BB)F,IXbGbGCX—oUlll‹$oUYˆy«Œ‹UUUR‰jwÒŒŒ¼h¼hY‹†j—¼¼‡¹Þ†h«¼ˆÏ††¼¼¼h‡¼«S;«¼«o‹l¼‹ŠŽ8¼VŒhh«o<ÐS…ÐШ¨h‡‡¨ÐjÒ¨¨¨m¨¨¨ëëj]mV(EErrr¨ŽT눈½ˆ¾ˆmˆËmiˆjiˆXˆiS¾OjjjjjjjjjjTj©©©©D>>p©T©©T©©©©ÁÏÏh«ŒŠ‹lkmÉB;ZVŽ: Ž@ ŽXˆTˆ¾¾¾pjj¯jæT¾jjj©©©jjjOj©©©ÌTTTåTTOTT¥BÕ‘oˆAYU=o))<,>/=‘o=ooo=‹p²†«¼lÒlo;jƼhhÞ‹lŒ½¬Ðjl«‘lŒ«]‘‘¾­††l†¼Ð¹h‹¾Šl«†U‹««‹ß¨CoU$Y<))^)\pŒŒŒ«ŒÒ¼ë¨¾§¼ÐŒ¬l9¬ÛоYZŒZZZZVŒp]ˆˆ½Ž½i¨¨¾Ž6m½m¨mˆ¨Žˆ¯V ŽŽ :@Xˆ©Žˆpp>¾p¾jjTìjjjjjjjjjO©©©ÌT¥T¥TTTËT¥¥T•‘oˆqoU$ot)Y<\v\$l‘‘ootoUÁul«ŒŒÒl‹k¾wÒhŒ¼Œhhh$½©«ŒlŒŒŒ‘‘‘¾Š«lU…ÏЇ†§¾n«†«UUl‹Š¼jZll$‹®<)\)(¬whŒ««¼¨¨jª¼¼¼6¬V¬ÐÐjYZZZZ=ZZŒŒD)™ˆ½i½¨¬T99¨½m¨mˆ¨Žˆj%ŽXŽ@@@ Xˆ©ŽˆppS¾¾jjjTˆ¸jjjj¾jj[Ëj©©ÌTÌT©©åTËÌTTT¥‘®SUUoo< Bo¬ŽŽ::@: ŽˆT½ÁSÁS¾jjjìT¾©jjj¾¾jj¾O¯Ìj©¥ÌTÌTTTË©TT¥¥O‘¬³Uo$oU<<mˆ::m @ŽˆT½ˆÁXS¾jjìjTˆ¾ƒ©j¾!¾SjO¯æj¥¥©Tå©©TË©¥4¥¥T¥@lU$o%ˆ::m:@Žˆ©½¾ˆˆˆp¾¾jjå¾¾¾j¾j¾©j¾Oj©j©ÌT¥åT©©ËÌ4¥Ë¥T¥¥Ë‹=loU$U=px)o<EH +wV¬j«6¨mm‡iˆ‡Ž½>¬ˆ::m: mŽÁ©½ˆÁˆÁÁS¾jj刾jP¾S!jj"O¯©©©¥¥ååT©©ËÌ4TË¥T¥¥OTl‹Ulloo8w1tV:ŽŽm::@ŽXÌŽXˆÁÁSˆjæìOˆ¾¾jSSS¾¾pOp¾©j©©TT¥©©O¸¥å¥4Ì4TOTO©U‘‘UoY'zx,,)Bt))to‹Šp{Œ¼¬ŒÒŒŒ«i±«&‹Ul«†h‹o¸Ã«†Œ¼‡h‡¬¼¾‹†l‹†¼¼hl‹¾§R†l‹lU‹‹¼ˆ?$®U•)>[©ÌT©T©©¥©>"T©t)BttB•ol‹ŠŽ{¬Ð¬¬¬ŒŒŒ"Ñlo<‹lR†‹l¾À¼¼«h¼ŒŒŒ¼¾»«««R¼Ðм…¾À¼†‹†l‹U8«¾s=o=t<)<\)YŒs=l‘oBB=ŒÐƒ¿Ï¼¼‡«hÐh»©ÏШͽèйШ¬vBZ=]]]Z=‘©lo¨½9¬VVŒm½pmrr(((@mŽ©¨¾ƒ¾¾Ù샾¾Ìˆˆ¾¾jæ¸jˆÁTp¾¾j¾j¯jj©©[X'>DDD[©T©Oj©¥Tj"©©T)oBtBoo‘‹Šˆ¬¬¬¬¬ŒŒŒÒj‹‘looo$lU‹ÐÒ¼hŒ¼ÒhŒ¼ˆ‹††«R¼ÐÐh‹¾ª‡ÐÐl‹‹‹Š«ˆu=pDDp'“©¥©T¥Tj"T©T¥tBtBoo‘‹‹¾-Ž‡¬ÒŒÒŒŽZÒ«Ò‹tollU‹j±«¼hÒ¼¼ŒÒ†jΫ«‹†¼ÐІŠˆŠh¼¼U‹U†ŠÏS•>>>!T©©å©j©©©©T‚BtBoo‘‹ŠX_U$‹Ž¨¬¬Œ½ÔŒol‘BollYo²«†¼¼¼‡Òh¼ìÀh«…†¼‡Ðh‹¾ª†¼†o‹U‹…†¾‘pp>D>'jT©©åTj©©©©TËTtBo‘U‹ŠÁz=lU®UŽÐŒ½«ŒZ«=•o‘Yľņ†Ð‡ŒÒŒ¼¼ˆ‹†«‹lϹІ…¾­R¼«U‹oU‹¼pCBBBB)B^&Y¾?l®‘ŒUlÒÐÐjªÏ¹h¼¼¼«U†Ìި訨ëШۨÒ(Z9==]]]=Álh¨¨99V¨‡9¨p]Er(EEr@mŽ©¨ˆˆˆƒÙˆƒ¾¾©iˆˆƒ¾ˆˆˆiŽO¾¾¾jjSˆjjj©[pSpp'Dp'>jTj©¥©j"©©©TËTT>¯TjjÌ©j©©©©TË["T•oo‹ŠXCl«Uo&UU‡«‘toBo•o=YoÐŹÐÐмŒŒ¼ÒˆÑ††lUŒ¼‡RŠjª«†‡‹UU;l¾«ÁV])B?&Y¾nŒ==Œ««ŒÐоŠÏ¼††¼‡¼lÏ櫨¨¨¨ÐШШÞ(r9Zl9=]==Ál†¨ˆŒ9‡¨Œ‹‡jmrrEw(rrmŽj¨ˆˆççìˆç¾¾©iˆˆƒˆˆˆS¾ˆTìj¸jj¾Sj¾j©[ˆ>pppD'p>STj©Ì©>"j©©TO[©T©)oUŠˆul«ljj©©O¯>©"[¯[[¯“UlRU‹ooX팋‘•])•wtį–«¼ÐШШÐÞˆ…ϼм«Ðм†ˆl««h«l†8oˆr==ŒÏ«†hϼЈ»hÒ9ÂZŒ¬Ð¼¾lψ«†¼¼ŒÏj¿ŒÒ«ŒŒŒ‡¼Ð¨jЈ¬Z‘Z‘""[["[>“Ëllo$oYo!ÂŒl««‘t‘ro‘p¼¼ÐÐÐÐÍÐÞˆ¿ÞÞ¼¼Ò¼Ð¼†j­llll‹R†oˆol=l¼«h¼ÏÞЈ»«ŒŒŒŒÒШЈRlURëhŒ«ÏjŠ«ŒhŒŒl‡¼¨¨¾¿Ð‡½¬ZZloÁmR¨¬ŒŒˆ‡¬‡¼jÒ¨m¬V(VZV‡©¨½Úˆi½ˆçˆˆÌ¨½ˆˆˆçˆˆˆ½TìÙ¸jìjjæjjj"ŽjppSpXXvSTÙjÌj¾jpj©©Ë>>[¯¯[![¯“O‚llooUYj‘ZÝ‘«l‘ŒV‘Á×¼¬ÐÐШÍмj»¼¼†«Œ¼‡«‹Ssl««‹l¼†Y‹ˆ‘$Œ¼¼Ï¼†¼¨ˆ»«hŒŒŒ‡‡¨Ðjªll«l$†ˆ††¾l9«Œ«l‡Ò¨Ð¾Š‡‡lli¬9oXUlŒŒ‡Œ¨¨¨m‡jŒi¨V¬(ZZ¬jн½½ii¨ëˆç©¨i½½çˆˆi½½TìÙjÙ¾¾¸jjæj[ŽSpSppXXvp©¾jj©jSjj©©O¯'¯[¯[>">“OËå‘®ooŠp•ß«‘¼Z‘ŒZŒlms«iÞÐÐÐÐм쿼†«lŒ¼Ð«‹Sn‹«†ll¼¼‹‹ˆtllhÞ¼¼¼†Þ¨ˆ»ŒhŒlŒVШÐjkl††l†h«†½¾;lZlŒÒ9Œ¼¨¨¾h‡‡lll«i‘XU«hV‡‡‡½hŒˆjŒ ¨mmV9Œ©ÐiiiiŽ¨½¨ç©¨½½ˆˆˆˆi¨½Tˆƒìƒ¾¾ìj橾"ŽSpSpˆ'Xvp©¾jj©j!p¾©©Ë>'¯>j>>[¯“O‚åËUp>¯>[>[¯[OËåTË<))¯•Z®Â¼Œ«Ò«¼pA‹Œ«ÒŒ½ÐÐÞˆ¿¼hŠo«¼ÐÒ‹¾­l««U‹ll‹l¾ÄllŒ‡ÞÞÞÏÐоªŒ«Œl‘¬Ð¨Ð¾Šll†hh‡hR†jŒŒZŒ¬‡Œ¼‡¨¾ª‡¨«lllYR©Ò…¬‡¨¨Œ‡lŒ‡jŒÚi¨%VVVV¬j‡¨½½i½i¨¨ˆ©¬%ˆˆˆˆÚˆ½ˆTˆì¸ƒ¾¾¾jìæj[:ˆ'XÁXXXvX©S¾jj¸jS¾j©OpD¯>[>[>“OË©TËË)>«ZÑ‘«‹hÒ«lÒ¬uolŒolŒŒˆÐˆÎ¼«‹o«¼¬«§jŠ«†«loR‹U‘ˆÄŒŒÒ‡Ð¼ÞéЇ‘n««hŒ«ŒÐ¨Ðjª«†»h¬¼h‹»¾«ŒŒÒ¬¼¬¼‡ÐjŠ¼‡‡«llŠ†[†…Œ¬¨‡¬‡RŒ‡¾Œi¨¨m‡‡Œ9¬jШ½¨¨ i½¨½©‡m½ŽÚˆˆˆ½ˆTˆæ澈ˆ¾¾¾¸¾[:XXˆ'XÁXv'©ˆS¯jjjS¾j©OpD>>>>¯>>[TË©ååTå\¯ÕÒ‹ÂŒ«ÒÒ]«¼¾–o‹ŒYlÒlÒÒˆ»¼¼«o‘¼Ð«¿SŠhh«lU‹lY®‡®Œ‡¬‡ÐÞÞÞÐÐŽ«lŒhŒÒ¼ÍÐjŠl‹†h¼¼R‹…©YŒŒŒŒŒVÒŒ‡¬jªŒ¬‡hlRURÁ†»¬¨¨¨9‡lŒ¼jŒi¨¨¨‡‡ZZ¬j¨½ˆ½¨¨i¨‡½©‡m½iŽˆˆçˆˆTˆÙì숈ˆ¾¾j¾"@XXXˆXXXvX©ˆjSjjjjpj©T©>>>>>>>>[ËË©TåTËË@®Œ«Œ‘†¬«‘ÄßjtUlŒoŒ‘ŒÒl¾†¼Œ‹‹®lÒl‹S¼Ò«lU‹«Šlj®Œ‡‡ÐÐÞ޼ЇŽUll«¼¼Œ¼Ð‡ìŠ‹…††h¼R‹»j«ÒVŒŒ¬ŒŒl¬‡jªŒ‡ÐŒl«‹R©¨…‡‡¨‡9¼«Œ‡jŒÍ¨¨¨‡m99¬¸¨ˆëi¨¨i¨‡i©‡¨½ŽŽiŽŽˆ½T½Ù쾈Áˆˆˆ¸¾[ XX:XXXXvX©ˆj¾jjjj¾j©Tjj©©>D>>>[TË©©åTËåT®rZ«®«mŒ«®«S±‹®Œl«Ò$Œ«½†¼¼«lUll«ŠphŒ†U‹‹¼Ul¾®h‡‡ÐÐÐÞÑ«ÐX««hмŒ‡Ð‡jŠUU†Ï¼¼†…»©»¼‡¬V¬ŒZ«VÒmªŒ‡ÐhlŒ……Á‹ŠÐ¨‡¬lŒhŒ‡¾Œ¨¨¨¨‡¬Œ¬j¨ë½¨¨i½¨Vm©‡¨ÁiŽŽmŽiˆìm¾¾ÙˆXˆˆˆj¾[XXX X:X X©ˆS¾Sj¾j¾S©Tj¸©j©[>>>[Tä©Tå¥ËTT©¬«¬®ÑÐҬ«Ž–o=‘lŒÒl««½†¼¼Ò««lÒŒ‹Sn«¼«o$‹hU«¾ŒÒ¬ÐÞÐÞ‹«‡p«ŒhЇ¼‡¬Ò¾ŠUUR†RhR…†j»¼Ð¬¬¬ŒZ«¬Ò>Œ9ŒÐhŒŒ…«Á‡…‡¨ŒŒlŒ†Œ‡¾Œ¨Í¨¨6¬V9ÒjÐëÚi¨¨½¨m¨©‡mˆiŽŽ::¨ˆìV@ 숈ˆˆˆæ¾[:XŽ v vvÁ©ˆpSp¾¾jS¾jTjjjÌjj©©>[åË©¥©ÌäTåÌËŒÒÒl‡ZÂŒ«jC=o‘ŒÒÒlŒl¾«Ð¼¼¼hÒ‡‡»jn«h«oU«Œ‹«jm‡‡Ò‡h¼¼‹ŒÞpk«Œ¼Ð쇇ÒSŠlUl…«RR‹»j»¼‡¨ÐЬZŒÒZ!kh«‡¼Œh‹RÁ¨«¨‡Œ«9Œ«9‡¾Œ¨6¨‡‡‡¼¬‡©¼Ú½iͨi½¨½©‡¨ˆˆˆŽimiˆ©Z@@: ˆˆì¾æ¾[@Žv X X"ŽS¾¾SS©¾j©T¾¸©Ìj"jj©[“ËT¥©ÌËTËTO‚Œ¬‘ÂŒÕlßZ^oooŒ¼Œ«Œ«½†¼¼¼Ò¼¼‡Ð«jŠ«¼ÒlU««l‹¾«ÐÒ‡‡ŒhÒ»«Ðpk«‡¼ÐÐÐЇҾ‹U‹‹…hR¿»jÎχÐШ¬ZŒ¬V¾ŒŒŒ¼ŒŒŒŠRj¨¼Ð¨l«lŒ…l¼jŒ¨6‡‡‡Vh¬‡j‡¨½½ˆ½½½¨¨©‡½ˆˆ½Ži:¨ˆìZr :Ž 숸¾@v: v Á©iSj¾Sj©¾¾j¥¾jÌjjjj¸©©TË©åTÌËTTåTË˼«‹Œ]Ä«¬›oooŒÒŒ«Œ«½†‡¼¼‡¼¼¼ÐϾŸhh«l‹«Œ«‹jmЇÐмhÒ†ŒÐˆŠ¼ÐмЇ‡‡ÒSY†…‹l†¼†Š»jμŒÐÐЇŒŒ¬ÒjkŒŒ«ŒŒhŠRÁ¨»¨ÚlŒ99U9‡jŒ¨¨‡‡6¬hVÐjШ¨¨ˆçëÚ‡½©Ð½ˆˆˆ½i:¨ˆ©m@: @@` Žì¾¯@ Ž vv:vÁ©ˆˆ¾SpSj¾¾jO¾jÌjjjjjj©TË©¥T©¥T©©åO‚“Œ®ŒZojCow v@v@X: ŽjŽ¾¾¾XˆS¾¾jT¾¾"jjjj!S[©Oj©ÌTÌjT©jOË“ËËËåO«Á›)o‘«ÒҌҫ¾†¼‡«»¼Ð¨Þ…jª¼¼h‹UR»ŠYp҇ЌŒol‹«Ð¸¼Ð¨èèШЇÒS¼Þ¼l††‹Š…j¿¼«†¼‡¼‡ÐÐÞjª‡Òll««U…Á†ÑŒÚŒl¬9‹lÐpm6m‡ŒŒ‡Ò‡Ðj‡¨¨¨¬Vi¨i¨©Ð½çƒçˆi½m½©¬i(@V@%@Vr [w @ vŽŽ©ŽˆjˆXˆ¾¾¾jTˆjjjjSjSp"©TjÌÌTÌ©©Tj“ËTËåËåTTp^<<‘«ŒŒŒŒÒˆ†‡Ð¼ß¼ÐÐÞ†pk«h†‹U‹»ŠYíÒ‡¼ŒŒoll†Ï¾Þ¨Ð¨Í¨¨Ð‡ÒSŠ††«†‹†‹Š…j¿Ï†«h‡‡ÐШ¼jª¼‡«$«l8…©†»‡çlŒ9lYl‡(•ZŽ‡¬Œ¼¼hÐjÒ¨½¨Ð‡¨i¨¨©¬iˆˆ¾½i½¨½©Œ%mˆVVV%@ vw í@@@mˆTiˆjSŽX¾¾¾j¥¾¾j¾S'>¾'¯©ËÌå©TÌ©Ì©jT‚TåËËËTTË\S!p¯©O©©jåÌÌ©"jO‚TåËËTTTåOoo‘lŒ«l««¾†‡Ò¼††¼Ò‹‹jª†RR»l‹UŠŠpoÒÒ‡ÒŒŒŒŒŒÏˆ»¼Ð½¨ÐЇ‡ÒSŠUUl…‹h«‹»j¿¼hh¼¼‡ÐШÐjªŒ‡¼«‹lŠRÁŠŠh½ll9Ò†lÐZtZZVVŒi¬¼‡jχ¬‡‡¨mVVЩ‡m½ˆˆç½½½¨©¬m:m@@@ˆmV ¯.````Emˆ"ˆ¾¸¾ˆXS¾¾jTˆ¾SjSp!¾pj©O©Ì©å¥TÌ©jOË“åËTËåTåOË$‘«Òl‘«Œˆ†Ð¼¼Ò«ÒÐlªjª†R††R$#kŠm«Ò¼ŒÒ‡‡Œ¼ŒÏig¼‡UUiÐЇ¬ˆŠoYU‹l†«…»jª†Œ¼¼¼ÐÐШÐmªŒhÐŒ$«Š…©9k‡ÚllŒ‡†l‡pY9VZZZVZ:‡jϬm‡Ðim99‡©¬mii½½½ë½½©ŒmŽ@@%@@(Svv.`````E@X©i¾jˆX¾¾¾¾jTS¾pSp'''pj[O©©©Ì©¥åjj“‚TTåËåTTTOË‚ÒŒŒll«Œˆ†¼‡ÒŒ«hм¿jŠ†¼¼Ï†‹U7U©mЇŒÒ‡¬¼¼Òψªh¼U‹®UiЇjŠo8oU‹†«‹»©¿†¼¼¼¼‡¹Ð¨ÐSkŒ¼ÐhU«……ÁŠ‡¨llŒ‡†l‡>oZŒŒZZZZZ¬½«¬‡‡¨¨%ŒŒÐ©¼mi½Ž½ë½½ë©ŒmŽ:%@ @%r@]@`c`E@ˆTiˆ¾ˆXˆˆ¾S¾Tˆ¾'SpvX''¯©ËjT¸©¸ÌTj©T‚©TåËåTTåËË‚TŒ¼Ò«Œ«¾†¼¬Ò¼h¼¼Ð†jª†¼h†h…‹8‹jmÐÒ‡¬‡¬Ð҇Ͼ„«Ð‹UUŠ†ˆjª«‹oU‹Œ‹Š…©Î¼¼¼¼¼‡é‡¨Ðj‰lŒ‡Œl«……[V…‡Ð‘o«‡†lЯoŒŒŒŒŒZ+wVjϬЬ¨¨mШ‡¾Œ¨½imim½¨½ˆ‘mŽ:m@@m@r ¯] @```` ŽTjˆ¾¾ˆXˆ:ˆjTSSÁ'pX''Á>©T¾©Ìj©ÌÌ©TTË©TåTåTTåOË“OTT¬¼ÒŒˆÑм¼Œ¼¼Ò‡«¾‰h6¼¼««»ŠŠjÑЇ‡¬‡‡¬¼Òψ§«¼«lUUŠRßjŠ†‹‹UU«‹8ŠÌÏÛййÐÐШоkŒ«hŒ«¼8‹j¬‹Ð¨l=Œ‡ll¼¯<ŒZŒV9]Œjχ‡¨‡¨¬V¨¬pBmm¨mm¨¨ŽæZmŽmm@m@rr@¯Z @@``` Ž©iˆ©SˆXˆiˆ¾TÁpÁpÁ'Xp'j©¥¾©¸jjÌ©j©T‚©TTTåT©TËËOTTT˼ŒŒ½†Ð‡hÒ¼¼¼¼†¾ª¼‡hÒ†R‹ŠUjlÒ‡¬ÐÐЬ¼ÒÏSŠl¼h«UUŠlßjŠ¼Ï«$‹ŒlU«ÌÏÐÍÍÍÐйШÐj‰Œ««««h8…ˆ¬Š‡ÐllŒÐ‹l¼¯<ŒZŒVZZ]w¬j¼‡¨¨‡¨m9¼¬!´.Hm¬¨¨¨¨jZmm:Ž@m@EV ¯Z: @` `@Ž©iˆS¾©iˆŽˆjTS¾ˆXS'vXp¾©Tj©Ìjj©jj©TË©©T©TT©TåËO“TTTOŒŒˆ†‡‡ÒҼЇ¼‹jª¼hŒh†«‹‹m®¼‡ÐШ¨Ð¼¬Ïi¿l¼ÒhU‹Šlhìg¼¼h†R‡h‹»¸»ÐÍͨۨۨ¨ÐS­l«ll‡hŠ‹j¬ŠŒhl«l‡«l¼>oVŒVŒ9=](ÒPÏШ¨¨¨¬ŒŒ‡j´.EHHcmˆ¨½æZm%:Ž@%@mr jZ:@@@ @@ Xj ˆÁ¾¾Ž[¨ˆST¾¾¾SSÁSppj"Tj¸jj!©PSjTË[TTT©T©TåË“T©TTåT«¾»‡Ð¼¼¨ÐІ‹jŠhhl†«‹‹;Š©‹¼‡ÐÐÛ¨¨ÐІŽ5««‡¼o…Š†«ì¿¼¼¼h¼‡¼‹…j»Ð¹¨ÍÛ¨Û¨èÐX‰hŒl«‡Ð……©9kŒ‡«lŒ‡†l¼¯=ŒŒrŒŒZZ¬j«‡‡¬‡Ð‡¬‡Ð¯E+HcHHm¨jw@mmŽmr@Žr@Á9m@@@@` ijŽˆÁ¾¾ˆˆiTjT¾p¾¾¾Sjj¾j¯TÙæj©j¸j¾jTË[©©T©©©åTËOTT©TTTTˆ†ÐÐÒ‡ÐШ†‹¾Š†hŒlll‹;Šj‹¼ÐШ¹ëÚЇÏiŠll‡hU‹‹«¼j§¼Þ¼¼h¼h†»Ì»¼ÐÐÛÐÐÛ¨½ÐSŒ¼«l¼‡‹¿ÁŒ‡lŒl‡ÏŒ¼>=VVVŒŒVVrÒj«¬‡¬‡m‡¬¨¨p]EHH H`H¯Zí%mŽ%r@@m:¯‘: @ ` @:Ž"iiˆˆSˆŽˆˆ¾TˆS¾¾jj¸jjj©åjÌ©©jj©SjTË©©T©©©©TTËO©©TT¥TT4†Ð‡¬¼ÐÐм‹¾ŠlllUUlU‹p‹¼ÐÐÐШÚÛÐψŠ‹l¼¼‹l‹h¼j¿†¼¼¦ê¼†††©ÏЇ¦ÐШۨ¨Ðm‰Œ¼U‹Œh‹gˆVŠŒÐlll‡†l¼p=ŒŒVŒŒVŒŒ«j«Œ9ŒV%¨¬¨Ð¯B]E++HHHH >@@@mŽmr@mm@[=::v@@@@ ŽjmˆXˆ¾ˆˆˆˆjTÁ¾¾¸¾¸¾jjjjT[æjjjPj¾jTË[©T©©©©TåËË[©T©©TT©©Ð‡‡Þ¼hм‹jk$«ll<$o;Š©‹¼ÒÐÐÐÍÚ¨ÐÏiŠŒlhßU†‹†Ò¾¿†Ï¼¼Þ¼††»jϹ¼¼‡¼ÐÍШШŒŒhloŒŒŠ§¯Šªl‡llŒ¼Rl‡p=VŒVŒŒVZVÒj«ŒŒ9Œ¨m¨¨jB+E++HHHH ¯]@@mmm@m@m@jZ:Žm@@@ ½©mˆÁˆˆˆˆˆˆ¾TÁˆ¾¾jÙj¾¸©©TjjTÌjjjì©TË[©©©¯"©TË“"©T©©TTÌ©TЇ޼Œ«¼‹ˆnUlh=U$UY‹ŽÑ¼Œ¼Ð¹ÐÍÐÐψ‹ll«†lhŠ«‡j¿†Ï†¼¼†††»©Üм¼¼¼‡ÐШоŠ¼«l‹l¼k…[ŠUŒŒ«ŒŒh‹l¼p=VŒV9ZVŒV«jo=ZrZZ¬m¨‡jB=(w+HE H+v]m@mmm@mmm ©9:Ž:@@@@@i"mˆˆiˆXˆˆiSTˆSS¾Ù¾¸¾¾©jTì©Ì©T¾jj©T˯©©">¯[©TËTj©T©©TËT©T‚¼¼ŒŒ¼†¿Sk‹ll‘#o=YŠj‹¼h¼ÐÐШÐÐÏŽkl«‹ll†¿«¼j¿†«¼¦¼¼R»»j‹Ð¹Ð‡¼¼¼ÐÐÐS¿Ðhl‹lhŠ…ÁŠ‹¼Œll‡‡ll¼poVŒŒ9ZVŒŒ«jU==ZZZV¨V¬j]=E+++H H.[@m@m@@@m@m@©VŽ:m@@@@:Ž"miŽXŽˆˆˆŽ¾Tˆpˆ¾¾¸¾¾¾¸©åjjÌæææTì©TË[©"¯¯>[©©åO©©T©©TO©©TOT¼Œ«†«‹jUllo)<<;Šj‹¼‡«‡Ð¹¨ÍІˆkl«lU¼¼U«‡j‹¼†Ï솋‹‹¾¿†iÐм¼‡Ð¨Ðpª‡‡lU«‡Š…ÁVŠŒŒŒl‡¨«l¼[oVhVŒŒŒŒŒŒj‹l=‘ZZZ(Œ¬j<](+H+H H.v@í@mm@@m@m@jŒŽŽ:%: @:ŽjVŽˆˆˆˆ¾ˆˆ¾Tˆpˆ¾Ù¸ìSˆÌjTj©Ìæjj©ÌËTË[j¯¯¯>¯©©ËOj©©©"©T©©TOTOh«R‹ŠjUU=<<<<\ŠjŽ¼¼h¼Ð‡ÐÐІln«¼‹l¼¼‹†¼¾¿¼»»‡Ð‡†……¾khh†¨Ð‡ÐШÐSk‡ÒUU«‡……¯…ŠlŒ¼h¼¨Ïl¼>‹h‡¬Œ9rŒŒŒ¾«99‘Z9ZZŒV¾]=(Ew+HHH]X]@@m@@™mmm@jŒˆ:@m:@@ŽjVŽˆˆŽˆ¾ˆˆ¾TÁSˆ¾Ù©¾ˆˆ¾jTjÌÌjjj©ÌåT䯯¯"¯>["©ËO[©T©"©T©jTOTOO†llŠSYU=oo<<<;UjѼ¼‡ÞÐмއψ‹¼‹l«¼‹R¼ˆ¿¼¼»¼¼‡Ïl»jª†¼h††½¹Ð¨ÐSŒ¼¼YoŒ¼…¿©ÐªŒl‡Òl‡†l¼pU‡‡‡VVŒ9ZŒj†‡ŒŒ9ŒŒZZŒ©==r(+++ ]¯]@rm@@r:mr@[Œˆ:mm:@@ˆjmiˆˆ:Xˆˆˆ¾OÁˆ¾ˆƒj¸ƒSjjTìÌææjjææTÌ˾¸¯"j>>¯TåO[Ì©©"©©©jTOTTOTl‹ŠÁ;U‘Uo<<<;‹¾‹‡¼¼Ð¨Ð‡¼¼†ˆ‹lh‹Ul†‹†¼j¿¼Þ«¼¼««†…Sªhh¼¼«…l¨¨Ð¾k‡ÐoYh‡ŠgÁŒŠlÑŒhŒ¼‹l¼>l‡‡m‡¬ZŒŒÒ¾Ï¬‡ŒŒŒVŒZŒj=@(wHH H]>]@rm@@í@mV@jlˆ:mŽ:mŽ:ŽjmiÁi:ŽˆŽˆ¾TŽÁpjj¸¾¸¾jjTìj©æjjjjå©äˆ©Ìj©[¯©©ËT©¥T"©"©©"“OTTOTO«ŠS?o=ooBFBY‹p‹¼¼¼Ð¨¹Ð¼¼†ˆªl¼‹Ul«URÞj‹¼‡h»h9‹……¾ª‡hÒ¼R‹loo¨jŒÐÐUUlÒk…Áªg««l«lhll¼p‹‡¨‡‡¬9ŒŒŒ¾¼Ð¨¬VŒVŒZŒ¾=ZrZw+++HB¯]rrm@@@mmr@¯9ŽmŽi:m:m:jmˆˆiŽŽˆiŽˆTXXp¾ì¸¾ˆ¾jjåì¸ÌÌjjjj©©ËìjÌj©Ì©©©ËTj©T©"©T©jTOTTOTTT…j?Y=oo])t…j†Þ¼Ð¼Ð¹ÐÐÐÏi‹h«‹‹U«5«Ïj»¼¼¼»«hŠ‹»¾ªhhŒ¼l»lo=«jª‡ÐlU«¼ŠR¯¬kl«l«ll‹l½ml6Ї¬ŒZŒŒŒj†¨¨ÐVŒV¬ŒV¾‘9@ZEE ]>@m@@@ímmmV@j9imˆmmm:mŽ!mˆ¾ŽŽ iiŽSTŽvDpS¾¾SSjjå¾Ì©Ìjjjj©ÌˈjÌÌÌP©Ì©ËTj©Tjj©©Ì"TO©T¥TTTOÁno‘o=]•]ZUj½¼ÐÐЇШЇώ…¼ÐUlU¼‹†Ïƒ»¼Ð¼l†¼l‹…jghŒ†l†ll<=Ñj§‡Ðl‹«hŠ‹Á»‡««lll«…l¼>U‡‡¬¬9Z9Z«¾»Ð‡VVŒŒŒŒ¬¾=Z%(w+E+H.¯Z¬@í@rmŽmV@jl:¨mŽ¨:im:!¬ˆ¾Ž:iÁˆ½STXvXXSj¾¾iìjå¾ÌÌÌæjjj©ÌËŽ¸Ì©jÌ©Ì©ÌOj©¥j¯"T©j©OTTTTTTT©nll==‘]•\Äm†ÞÐйÞÐÐмÏ:¿hÐll‹¼‹†¼¾…м¼†R¼†‹…jªŒhl«Rll<=‹jhÞ¨lU«¼¿5©Š‹¼½««llUl¼¯l¬‡¬V9ZZŒŒ¾«¼‡ŒŒŒ‡ŒŒV¾=9%rZ(++H]XZm@™r@m:m¬m©¬Žmmimm:mŽ¾rˆˆŽ:Žiˆ½pTÁvXXSì¾SˆjjT¾jÌ©Ìj츩©O½j¸j¸ÌÌjÌTOp©T©¯j©©j“O©TTTT[TT"ll=‘‘‘])®pÏÞ¨ÐÍÐймώŠh‡‹ll†…†Þj»¼Ð¼¼l¼¼l…¾ªR9l$Ulo<=ш¼ÐÐll†¼‹…¯ŠÑ‡¼Œ¨¼ŒŠl¼mlh‡VŒ9ZŒŒÒ¾†h¼ŒŒ6¬Œ9¬¾=Zm(Z(++H.>Œm@r@mmmmVm©mˆŽiŽm¨Žmi!VŽˆ:m:ˆˆˆ¾TXvXpS¾¾¾j¾¯©ì©Ì©æ¸jj©©ËˆjjjÌ©jjÌTT©©j©jj©"j©O©©TT©TTT©TŒ‘=‘=]Š®Ž†Ð¨ÚÚÐÐÍÐh¼i¿hÞ«l†Ï‹Œ¼P»¼¼‡¼Rl†«…ˆklllUo$Uo=ÑS§ÐÐll««……¯Š‹Ð‡Œ¼Œ¨hl¼plŒ¬¬Œ9ZZŒŒ¾†¼¼ŒŒ¬‡Œ9¬S==m(rrZ+H+>Œmmrr@mŽmVm©mŽŽëŽmimmijVŽƒŽ%:ˆ½ip©vXppp¾¾Sjpp©¾ÌÌÌÌjjj̩˽jjæÌ©j¸ÌTTjÌT¥!"©"j©O©TT©"“"T‚‘]]‘]]®S»Ð¨Úè¨ÛÚÞ¼Ïik¼¼ll‹«†«é¾†¼¼Þ¼†††«…i;U9l®$l‘<=ÑS‡‡Ð#‹lU‹¿pŠ‹Ð‡«¼ŒÒŒ½‡p«Œ‡¬ŒZ=9ŒŒ¾†ÒhŒ9V‡VŒŒ¾==%¬rZZ+H+pŒmmrr@mmm¬Ž©mŽŽvŽÁ½ŽXˆjmi¾immiŽ:ÁTXXXÁS¾SS¯¾¯©¾©©Ìjjìj©©ËˆjjæTj¸jj©Tì©ÌjjT©jj©O"T©T[["[T‚T9 200 125 1 +nnnXCzAd‚š‚gtT‚X?iexT‚b€‚‚feeddgZCXXC2X23“udiC‚Cwd–hf‚f‚k‚‚‚ugXkfyk/n/k‚„XTkk/kffk+„3n D]kGG`'\kYY]]YYY‡D‡Vull•lll‘ggVug‘gY0UUlgBEEE\„„AA„„V¥„ Q VvŒj„V„~ŒvQV~vrVQvVVVVVVvjQBvHHHBa’Uguuuu‡l{G66]::"JJEvllˆgllˆol„E!Y0lA„gˆA‘„B‘„„b„„„V„v,„„„gˆ„A\AB\VVvVVVA–j\VVvvr¥ŒrvaVVVVVv(VVrjŒv’r¦<’’j¦†BB’’<’j(Bj<¦‹jBBBBv’ajkkDy”A‡fyuuu@f@DE.//kfYufff„kyy‡‡‡Yuƒœy+ffDy@YuyVYYUƒœluƒY‡Y„gUƒUUu@‡‡U{G66]::olEvl•gg•lˆJ6ˆE\6YJg„ˆ•A„„v„„„„˜„¤~„g„„AAˆA„\\v\VVVV„{j„VvvQ¥r’’¦Vv~VVVvŒVVrjŒBr‹j‹’’jj‹BvBBBBjBvj‹j‹a†BBBBvBajjTy@X‚v‡TUuuuYu‡kA3//kyyffykyYY‡u‡‡ƒœ+fufyYu@uyVkuƒœ‡YuƒYUYVD]gUƒfu‡0l\G6]6]:OJl—ƒgˆ‘EoglYˆE\YoJ‘„ˆgA„„v„„‘„„˜„„~vUg„AˆA„A\Av\VVVVVVV¦VvvQvŒvŒrr†VvVVVvrvv’jŒB’‹’|G´^|œ´wGwñi´œvéÉx´›µ’|wYwœäçÉÉÛ‹^G´´GJGév›¶‡|^Gœw|´w›‡^^ww^{DG^w^^||+|[ȳwÛw—éww^š.žÌx}´}Ì´´e 6i€\||b&|||{^œD‚œYœœw^|Jñ&d|||Gw&w³´ë{^œœÌ´ÛêØÛš¥v|G||B^|¸×ŠÛ´ÉÛÛÛé|ÚÉxb,bGJ,,LK1q^^^}´œY´|¶’||w|G|Y³|w¹¬w´wé´Y´{šU|BYYYw™šx—[¬¸wÉJJ^´¸]Zv||œY^wv›Z¬^YY´}^[|BY^G,GJ+^ñ³³wéwéÛw³|w»-}´´´´´xx PiLL¿L._|||bbGG{œœZ{œœœ^Y^^{šcv||BœéG³´ÉÂbœœÌ}ÛêØÛÌ~³||G||^œ›°Š´´Û´ÉêéÉÚšHbJbGb,-^»‡œœ‚}´}´YË°‡^^œ^G|^||vñ’´ÉéBY^|™Ys|w´´ÉË|wGšä©GYÉ|JGœ{]y¬³|||||œ|]D^‚YYw}œ^{^YwG,GG+œ[™wwéwç´v³^v.b}´´´x´šÛyž}b66€z||GG&^ž{œœ¶ºœYYœw^œ{¶^(JG||Y˜|³éšzbœœ}éœÛØÛy›³||GG^^|vë´۴´ÉçÉØéÉx¿-bbG-,L€m‡^^^œY´´´w`ˆœww^|{^v|³¹ˆ´´Y³|w|›wrvYx^´|v^,+ˆv´ê|Gw{]¶ˆG||G||GvE|‚wYé}^^b^^wGbGGJ|F™éœw—´w^¸G³H-œ´Y´´´Éɺ€`iJaËwvG^|{Y^ZºYYYœw}œ{šIg&J||^é|é¶|œœœ}´œÉØÛñ£ËB|||^^w|åÂœwœYÉêÉêÛšH¿ž,^}-LLy‡œœY}^Ì´Ûw¶©wY´|{G^v|³¶Œ´xwwËY|]Z§³wY^é^wœ,-š¯|´É^&^w{]¶nË||G||G{z¶^‚BYY}^bb^^b,,,J^¶ÈéY³éÜw³›Gw.‚^´}}´ÌÉɶaJb,H6+»dËww^|w}|w¼D}YÌ}wœYw€y´abJ|||wwvé[™œœœ}éÌÛê鶄w´³^vw^Ë|°Ëœœ^œ´ÜØÜçšHbbb}‚}LL»‡œY´}wœ´xw¶ÀB}´œG|œw|³¶Œ´´´œ|wY]Zsww^wGvœ,»’w´š|{|w{›¶|Z||G|G{]D¬^w}œœ^bbJZ|,JJJ^[³´Y³³ØY´³Gš.{b‚}Yœ´´ÉÉya{GGbH¢€¹]œwwœwYY|wœH£L`w´œYœ{y¸z|G,||ww³é[¾Ìœ^}œYÛê綛wé^|w^^|vë¸|œœœœÉÜÜÛšHbG^b-}^}+LY‡^´Ì´Y}´Ûœñ<|w´w||Bw|³[|Û´´´vwx›ZsËB}œ^GYb,ˆw´ÉwG^w¸›DTœ´|µË|G{E¶Œ^œYœ^^,bH¼-J,L|FÈ´´w³ØYÛwG³.bGœ´œ´´ÉÉyaž{G|ž^JD]|w´wwœwËwœy¸G,€wœY{ÜxX|G|^ww³é¶wé^œœœ´ÛÉéµ›³YwB|Ë^||ë£b‚‚|´ÜÉéÉHbb^b‚^}^L»‡œ´É´´Ìx´³µ<^w´œ^^œËv|ÖÏÛxÉYw|x¸šŽv^^^G,¸,+»|³´Éœ||wv²µ¬^´´w|xœ|a¶^^^œ}^bbbJy¡´,J+^ëÈwÉÛ³´}|w|xDbb^Y}Y´ÉÉZ&||‚^œµz|www³wBwœœH{G|bJ€`w|š€™œ^{G^wé³éFÏÌ^^œ´ÛÛÛç[Àwwé^|Bw|{°¸¸bbž^ÌÉÉéÉx‚|^'‚^}^‚ ƒkœ´ÜÉx´ÉÛw[‰|wÌw||^³ËwšÂwYé´wGw™µ’JG^^G-|,»Ä³´ÉGGG^¸›.|Yé^œœ|Z›yŒ'œ^œ^G,,yŠÌvJ,JœFÈw´´wv´{v|éHº^bœ}œwÌÉÉ&{|||^^€›ë›|wwéwé^™œœZ|^GJbbJ}µ{ÈéB|^xww³éš³Û´œœœ´Éêé[½³wœ|G|w^¸ÖÀ||žœé´´wšH}}}‚‚‚}‚‚¿­lœÉšš´´ÉØwyÂB^´œ^Gvœww¶âx´´ÉYw³{ZŽ{^'GG-|,‰w´É|Gœ{›DÄœY´^œvœw鶌}œ^}^b,b{DÀw||Jœ[Ú´´Ûw³YœE|´[¸^^œ´Y}wxɵ{J{||B|€[›vwËwwœv|œœZ^^|bGJšxÈ´wY´xwé³é´ºÉÉ´}œ´êÉ鶽^||||wœ^¸±Ëwœ^œœ´´œœÜHéY´}‚}}´|¿»†^´´´´xÉÉËñ|YÛwœv|^w^³ë|Ø´é´´³w{ZâG|^b,G,¸w´É^{^|a]D{}´wœwœœw|yw}^^}^bbbJHÀwGGGwF³´´´´{éw{Géx™^œYÉ´´´ÉÉΛ|{J¸GG{{|Ö·|ËBéww|™wœ¶Ëwœœ|Gbž&Ö¸³´Yéw´´wvé[ÏÛÉÛ´´´ÉÉéy›ww^G|^œwËÖËw霜œÛœwËÉxwY´H}´´ÌG¤1o^w}Y}´É´wWÂYéYœ|^|w^³ÖŒÉÛYšÉ´é]Z¥&J|-b,,KyÄ´´Øœ|||]›¶ÂÌ´wœ|œvœ|µwœ^œ}œ-G,yâYJG|œ[³é´´´³wxv{´x¸‚Y´ÉÉÉ´ÉÉ›¸{JGGG{ñ{YËw´Y||{œœ[ÜYœYœ|b|{F€™´´ééY´´wéš™ÛÉÉÛ´ÛÉÛéy¥ww|G|BËB|äw´Ì}œé´´´ËÉx}´w¹´ÉxÌ^¢»q^œw^œ}´´wy´œYœB|^w|³šÂ´ÉY´ÉØÉ]^«Jbb,2,6b,yrw´É|GGw{]DÄY´Yœœwœœ|y✜^œ^-,bJyYGGG||ñ³´´YÉYvÉ´Gµ¶¸^´Û´ÛÉçÉÉZ›¸{Jb||€›¶{wËvw´Y³{wœyÜ´}´}|bGš¸X´éwçw³´³é[¸ÛÉ´´´´ÛÛéD¡wœ|G||œvËÖ³ÉÌ´œœ´ÉÛ³šxé´œÉÛÉÉHœ¢.‡^^œ^^œ´´|¶wwwœ||w³||ëÂYÉœwéçx›wÅJbb,¿,6bÎœ³´É|G|w¸]µŒ´´œœœw^œvñ³^^^Y^b,byâYGGvw|B³Y´éÉ´vw´{´°|w´ÉYÛÉ´ÉÉܸœ|,||^{¶véœv³´}é||œš›´}É´œG^|y€²éw—éwwY³é$º´Û´´´Û´´é¶¸ww^bb|B||°ÚÛê´Ìœ´Û´ËšH´´|xÉÉÇÜw¿§l}œœ^b^Yw|¶£|wé^^||^|v¶‰´É´vvY´{Z†2,,¿ +6bKÌ|³w´^||||²y|´}œwwœéw|¶Â^œœ}^-b,{HâY|vBwwBw´É´u´w³´G´¶|´´ØÉÉÉ—šÉµ›œœ{||GJ›[{wYwœw^v||^y¸Y}´´´^Gœ[xÊBé´´GéY鵶›ÌÉ´ÌÌÉÉ´é[¡wwœGb|Bœ{VÚÛÛ´œœ´´´ËÜH´wœxØÉÇÜ´¿M9œ}Yœ|^œœ¸¶Äwww^|G{||v¶ÄY´Û|wœÉ{ši22¿6bÌwwÉœw^|¸›Z¬Y}wwœËYé|¶¥Yœœ}^b,,HâY|B^éwœB]Ø´ÉÛwéB|´¶¸ÉÉÇÉxØÛÉɵ›œËGJ||G€{¶™wwé|^^G¸^œyºw´´´Ìwœœy›ÊvéÉwv´Y´é¶GÌÉ´Ì´É´Ìé[aé´wG{^^œ¸ä¾³ééœéÛ´éœ`xé´Y´ØÉÉÜ´|M‡}´´Yœ^œœ|¶¥BwYœ|^|{G™ñÂYÛ´´^ÛY™µi¿6bÌŒ³}ÛYw||]]D‰ÌY霜^´Û™¶ÂYœ}œ^bb,yÁY|BwwBYY{x´šÇÉ´G|—¶™ÉšÇêÉÉÛÉÉš›^œœ¸G+€ñ™}w}v|w]œœZ›œ´´ÌYYœ´µ¸›³wÉxww´çé'&Ì´´ÌÛÉ´´é[›éYw^|}Y^³°ÍÚéœY´´´œ^Hx^œw}É´ÉÇÉB»‡œY´YwœYœvñÂw}wœ|GG&{³¶ÂYÛ´|Bww{Zi + +6 +¿ Â|YÛ}œ||+]¶Œ´YÌ^wœwé™yˆw}}w-G,,{Dâ}G|wœY´´²xŽšÇÉÇ{v´[¸xÉÉêØÉçxÉš|||{|+¸y›wwéwwœ^]œœ${œY´}´Ìw̵™|³³çYÛ´´´´H›ÌÛÉ´´´Ûxœñ{w´é^w´´^¸äÐéœw^wÛ´w|H¹|v´œØÉxÇÛw»l}w´Yœ´œœv¶fY´wœ|vG{¸|Ö|YÛYvwœ{ɉi 66666 y||YÛYœ|G›AÎ|´œYé^œ´w™¶ÂYÌwœ-G,bHÒYGG^wx´Y™$Ž‡—Û–wv´¶Ë´´ÉÉÉÉxÉÉñº{{bG€¸y¸YéYœwœB{^œyº´œœœ´}wÌW{³ÛB´}wY´ÛÛ[´´É´´Ì´Ìéñw´´Yw´´^|°éw³^œœÉ´éœHÛww}w´É´Ç´é.Á}œY}´wœw|¶¡w´Yw^G^vG™ë‰éx´BBww]µo8 R 666µ¿|wxÌw||™›¶Œ´´}œœœ´³Ê[âé}œ^|b,,{¶Ž}G|^wÉ´Y™¶Žl´êw^Û[v^´xÉØÉØÉɶaJJb{G|¸¶vwwœ}wB´||œy²}|Y´Y´wYµ¸™´v³Y|w´ØÛDËÌ´ÉÛ´ÌY}éyww´wéYYwœäÚv||œ|´ÛY|`Éœw´^´É´ØÉÜ[´YY}wwœ^|ñ†w´wœœG||{™[´x´}^w^›xSi666886 i»Ó|YÛ´w|v¸]DŒ´´wœœw´w¸[ÂYYœ^bb,¶Â´||^wÌY´¸D«22…ÇY|ؚ˜´ÉÉÉÉ´ÉÛya€+€J{b|{ñ{wœœ´w{œ|GœH›œG}´ÌYœYÜ{™´wËY|œwÉéDËÌ´É´´´YÌéZ¡œwéw´éB³žyº|G^^œ´ÉY˹xœé´^´Ûx´´é.œ´Y}wœw^|Ë[dBœwœB|{||³ë|´x´œwwwzµÄ66 66i»¢vœ´´}|^v›Z‡´}œÌwœÉÛ™¶‡´Ìœ^žbb,{¶Â´^vBwé^´Bxl¢…,é^É[ËYxxÉÉØ´ÉÉyJLLJG|J{y{´w´´w|B||^¹›^G}x´YœxµxÊÉw|wœBwÉ´ñ{}Ì´Ì´´´}é[¸wwwwééw||™||Ë^éÉÛ|`xœwx^éÉ´´ww[Ò´xœw^||^œ¶¾BwwœB|G{{™Ü¸YÛ´œYœœ²yÀi¿R686f|^œwœ|wË›¶Â}wœY´œÉÛv¶‡´Ì^^-G-|bñ‰}^vBéYBx³yÀ6-¿6^ص³H´´ÉÉÉxÉÉyºbJJJ€¸[¸´´w´w^w{|}aœ^œ´´ÌwÉy¸³´´|w´|wÉÛ[³É´´´x´´}é[™ËËwé´Y|v|™Ë||w^w´xžH´Ìw´œYØÉÉw鶌x´}w^||^|¶†BÌwœw|G{G¸¶yš´´œY´w™yÔ ¿ +¿6 h»o|œ^œœ^w{²¶ˆYwœ´´œwé™ñ‡É´œ^bbb|{xoY||ËY'éYvyl2O¿2ض|}}xÉÉÉxÉÛZ{|b¿JJ+¸y¸´´w´´wéœ^}µ›œ^}´´ÌYx¶{™Y´wvxww´Û¶¸ÉÉ´´´ÌYÌw¶›wœw´Yw¸{|Ÿ™|||wœBYœ|¹xœvw´´êÉÉwé`ÌH´}}^|G|^¶€}wYœwœw|G¸y£éµš´Y´´|ñÔ¿¿26 66h€|^^^w|œ{]D©YwÌxÛœY³™yY´}œ‚-bb||y‡œG|Bw´Y—{xÀˆ‚¿¿2bV´xH´xÉÉÉÉɵ¸|JJJbJ¢{y™´´YÉ´´œ^^œš{^œY´YÌYéF›¸w´YGœww´éyœÉÉÛ´Ì´´Ìw¶ÍwËv´Éw|™G[ʳ^|w´B^|{¹xœw´É´´ÉØ´éDb´´}wœ^G^|¶g^´Yéw^w||{»€wY´šµ´Ìw´ˆ2¿, ii68»||^^|||^›]¶ËYœÌx´œww¸yéÌ}œ^-bb|¶ˆY^|œwÉY´™Dl¢¤2,,béÉÉx´xÉ´xšµ{œËGbbbJº¶™Ì´œwé´œw^œD›œ}´´}´w´[™³é´´vvww´ée¸ÉÛÛ´Ûx}wwñ{wœ³éxxé|G»¸³‚¸œ^ww^¸Hx´ÛwÉÉ´´É´éi}^}YœY^|G¶¡Gwœ^w|||G¸DwYww´Üµ³Zº2¿6i i»Äv^œ|G^œ{]¶ˆ´w´ÉÛœwwÊy|´}œ^žbb||ÜÀYËËwwÌx´™xl¾-…J22b‚Éš}ÉÉÉÉxɵ|œœœGG^^{|±{´xœ|³wwœ|œ¶¸^Y´Y´´Ywµ¸³w´´wwËw´é.¸ÉÛÉÉx´´œËµ{wéwwYœw||[™|ž|^œYY||¹xÛØ´Øê´´É´we©ÌY}}œ^^^|ñgG^wGG^|G{y¥BwYwww´yš‡¿626 i}P^^œG^|œ{²y©ww´´´wœw¸¶ˆ´Ìœ|‚^-||[Ìœ|^w^´œY¸y¥b¤‚22¿,…‚yxÉšxÉxɵݜœw^œÌ}|¸¶]|´´|Bœwœ|œ}›^´xÌ´´w´[x˜é´´Yé|œ´é»ÏÉÌ´Éx´wœw[›é´´œY^|Ë|¶|b|^}YBœ¸¹xÉêêæÉØÉêw黧Hw^}}'^|œy€^^œ|JG||G{»jwY´´œ|B|µ¼¿6¿i…66b»œ{^^|||œ{².|v´ÉÌ´œœwÈ[Ò´´œ^|^^ž|܇´š|³^´œC³DÂ22¼}-¿¿Ob…}µxÉÉššµ¸œ}ÌœwœÌ^vñ]|´´|wYé^|œ${œ´x´´Yw̶›é´´xØx{v´ÛéÉÌÛÉHÛœœv¶›w´YéYœ{GG¶{b2G^}œ^^¸x´ØÇ×ÜÇÉuéwDLJb`^œYœ|G¶¡Gœw|JG|G{{yz´Yœ´|vœ|Z}i ¿6-‚6G»w{^w|G|^{².¸w´Éœw^œ³™¶é´´œ^|œ^ž{[nÉxY¹||œx™yÂb2}}‚…¿,b…€x´µÉCšµžœœ´œéœœ´|ëv´´wG^wœ^|}¶¸}´´´x´´´¶Yw´´´Ûšv^Û´»œHÌ´ÌÉÛœ^|[›w´´ww}G]¸¶›b…^‚^^œ|J´´ÛܵæÇêÇÛwŸ‰,b,J|^^G¶fG^œ^{GG{{»¥Y^´^w^{$†i2,66¿bbÎb|G||Gž^›]ZÀ´Y´œ|Ëwv¸¶¢´}^^‚|žb|šÕÉÉÉÉY`vB¸DÂ2,¼}‚…6¿2bOº^xxx¶Üµ¸œœ´Ë´wœœé°³}´Y|Gœœw^œy|Ì´H´É´YwµYéÉYwéØé|´vhÁÛÌœœ}É}^˶™œé´éœYw{^¶,bb‚‚^J¹xœwÉØêÇÉæ´é¹P,-b,œ{e‡^Bœ|Gb|G{JD½wœw||^J`§,Ji2‚bÎŒG{GGžGœ&]¶‡´´Ûœ|^w|›µËx}œœœœ-b{ñŒÛ´ÉÉÉÌéH|x…2…}} ‚2 +…b¿Â^´Y^àµÏœœ³}Ìœœéé[wYwœ^^Bœwœœ.{Ì´}xÉ´´´[{™´´³w´wBBve6HÛ^bœÉÛœ|ñ™Yé´YwY´||y+K‚^‚^^€`xœv´ÉÉÉêÇ´µ¶,,bb,Jx¿šGœ|GG|G{y£^Y^^G^|J¹6i22b66J-GJœGG|Gb|^{]yœw´É}||||²¶éx´Ì^œ^žG¶‡É´ÉÉxÌYx´[¿º-}Ìœ^……bƒy}G‚vYw´š|œœœÌ´œœéœV³´´}Y^Bœwœ^»›}´}´HÛY´[É™´´w}éY´w|M3LLƒœ‚}x}˶™´´Y´œ|´^¸š+L‚^^^€xwww´YÛØÇéw»ib…,J2Jb|µ¢´}š{G|GGJD£B^^b^bG† ‚b¿ 6¿bJG{GGJGœ%›[Ïw´Ûœ||B|›[Œxx}œ|^Ë^H©ê´ÉÉxÌ´x³šœÒ‚ }^ -…-žëœšxG|Yɵœ}œœÉ}œ||鶳´´x}^œwwœœ»HœÌ‚ÌÌ´Y´µY¸´´BéBwéw|O3¿2¿ƒYÌÌw¶™´´´´wGw^¸š+LiK-‚|`xœéB´´´´šww[b-,b2J,Jb|[|}YÌ}ZG|{»/G^^G,bGJ»€bb, Jb»L&GJJG^]]¶‡w´YY^|œ|›yËxxÌœ^^œ^€ñªÛÛÉ´´}Y´éÉàË‚œ}‚}žb‚ƒ[œÉšÉ¹G´µœ}œœÌ¹}œœéFœx´´}w^œw}^»›}Y‚}}ÌœéµÌ™´w|wœwéY|»3,6LH^³¶™Û´´´ww³||š+L L`H¹x´w^´wY´Û³wŸb,b +¿22bG[|é^}x}}}JJJN'^bG^^*ji,b¿¿¿b¿G&JGœ]]¶fœ´Y´Ë|B³™¶éxxÌœ^ž^|€.HÉ´ÉÛ^^œ´³ëÓ‚‚}H¼}^‚‚-ë¾ÉšÉÉÉš¶œÌÌ|éx}´œé¶´šÉµ}œœw}œ`H}œ‚}}œYYyx™´wBwwwY´vMb666¿bœ[¸Û´´´´wvG|š]iii-b»x´´´´œ´´éw´[b-b-22bGŸ´^œ}}Ì}YygG|^b,b-†J¿, bHœ+JG€G^€]ZœœéYéœ|œ³›[wxxÌœ^Ë^^»ËÌÌÛÉœ^^wËñÏË‚ÌHœ}œ‚‚ƒë¿ÉÉÉxxCÉ|HHÌ}H}Ì}é[´ÉÉÉH|´Y}œ.¸Ì^‚}}}´œµ¸™wœBœwœé´|M3¿,6ii¿L[³Û´x´´É³{¸š]LbJ¹´šY´´Y´´www[bKbb,6¿Gb¶|ÌœwY}Y}}^¢Djb-,,,- J,,,¿JG»œœx&J{{€]Dœ´wY}^|^vay¢ÉÌ´}^œ^œyÓHÌ´Éœ^^^|ë¢Ë‚}ɜ̜^ ž¶¸xÉ´x´HÉÉ̹´œÌ^^}é[ÛÉÉÉêÉ´¹œ}œ»HÌ'‚Ì }´wyx³´´Y^www´^»¿,¿ J¿,¶È´´´Y´Ü´{|¶]JJJb,x^éY´´´w´´³¹‚ ‚-26,|¶|´^vœ}Y}}œ|»/b,b6be€JG,J bJΡœ}œš)G{&]D|霴´|œG{zyÒxx´œ^œœœ{¶Ó¹ÌHÌ}^´}vÜeœKÌxœÌY} b¶Ï´´Ìx}´´H´ÌÌ}}}-|é[ÛÇÜÇÉÉÉšwyœ.|Ì^Ì}‚‚}^ñ¸{éYYœwwœ´vM32¿,¿,|DË´´´Yéç´v{¶]J+LLLbx|´&]HYÉ´´³Ÿ^}^b,¿¿b¶|w^|wwé}}^|¶3b,¿¿2¿J*†,G^GžGž~B^œ}|´{€]¶|éY´œœG^€E`ÌÉx´Ì^œœœ¶œÉ´H¼œ}´Ì³ÜßÓ}´H}´´} ‚ິx´´Y´}Éœ[H}}}^bËV´ÜÇÜÉ´Øêɵ³.¸}^}}‚‚ |Ü{{YY^œwww´|e0¿2¿2,¿,|»³´´éYé´Y™{š&&JLb¹x|w&{{{C´´wœ´^bb, +¿,G[ËY^|wwYY}^|D0,b,J +6J-¤JG^-|Jb…œœœ³}v|Y]¶||´xw^|G{ay´šÉÉx´œœ|yœÉÛH¼œœ´´³µ¿œ}ÌxÌ´Ì}}`àÐH´´´}wÌxœ[¿Ì}Ì}GËVÛÜ×Éx´ÉÉÉš´e¸}œbO-‚‚|y}´}YwY´œ´w»0b2¿bbJ,|[È´´´Y´Y´|{¶{&Jbbxœw{{{G{]H´¶^´^|GbJJ,G¶œY|G^ww}œ^|D:22¿6JH¾Jb^|bGJbbJ|œ^Bœœ|v{šf|^xw||w|zDâÉ´ÉÉÉ´||{¹ÒH´Hœ}é´Éœñá‚ÌHêÌ´xÌ}‚ëœÛ´´Ì}Yé´œ¶k}xHÌœVÛÜ×ÜÉxÉɚܴ»H^‚b2…-‚^µJbw´}YÌ´´^ML2b¿,^,b{¶³É´´w´´œvvñ&&J+bGxœw{G¸G¸G{\[Ï´}³|GbJb{Ÿ³Yœ|^wœ^G|»4¿6J¡J^^^}bJ|b»d|³}wœœYv|y{GwÉœG|wwéš´ÉÉÉ´é^]»ÒHéÌœHÌ´Éwñ`‚ÌxÉx´H´}œ¶º´x´´œYwHœDˆi}HH´VêÜ–ÜÉxÉÉÜÜ´*{‚-22b‚K^µJE}œyœ´w´xvM,¿bb,^bb|y³´´Yw´´w¸|µ]&Jib¹xww{|{|{G¸E.Y´œB|||&GG¶ËwœG^œœw^‚|.‰626 +62i¾G^'-^bJbbÎdv^|ËYY^œ{Öf|^xœ||w³a`wG^yéw´éœ¹ÜÉÛ}œ xx¹wñ¹‚}ÉÉÛÌÉÛHœ¶œÛÉ´´œY´x˶962ÌHÛ°êµ–ÜÉÉxÉǵ´.|'‚22-…Kbµ€™H´x^š}ÌÉvMa2¿-b2bbb{[³Û´Yé´´œ|GÖ{,bGx^œ{|{¸GG{'.ËÌw||^|GGGñœYœ³^œwYœ-¸D4i6 6666i-¾^^'b^žGbbyj&œvw´x|v{ÖfBœÛœ{GœvyÀ|bGwywÉ}{`¹ÜÉxÌ}}̹³Ü¿‚ÌÉêx´ÉÌHÌëºÛÉ´´}´YÌœ[Si¿R2´´FêܵÜÇêxÉšµxD|'‚-…-bK^Ü{wÉ´^}}|šY^»)…,b^¿,b|[³´´YwYYœv³ñ™&JLbJx|w{G¸GG|]]D|´w^|w^wG|¶ËYwv^œww}-{»7  66i€^|'b^G,bb»Q&|³wœxËv|Ö0w´x^&,œvaZ¡|GBwHGñwËëßêêÜ´Ìœœ´|ܹœÉHêx´ÉÌÉÌ[¸´É´´œw}´œ¶Si ¿´ëصזÜÜÉCɵÉ`|}}K bO‚|[GœxxÌ'}´^bB‚+b…-b¿,Jb|y™Û´´}Y̳wwš&GGJ,J´bw{|{|{|{%Ÿ¸´œw|w´œ^|¶wéwË^wwY}b|.66m886ifœG^^G,^,bÌ~&|vwœYv||Z€œYÉ^Gœvz€||wœ^YvÉ[ßÜÉÉÉ´œ^}¸Ü¹áx¹êÉ´ÉH¹œ¶ÏéÉ´´´´Ì´ËDii °Üµ×××æšxɵÉDG}'‚2--‚^[HËxx}}Éx}b|»€^bž¿,Jb^µ|´´´Y´´wœ³µ]GJJ,¿`xGœG{G¸G^™%¹|Ìww||w´œ|[Ú´xwwœ}w'ž|¶7¿ 8681fœ^2,,Jb)&Gvw´Y³|™yv|w´^GGY|a`³||Bww^Y³}œÉ´ÉÉ´œ^œ³¶¿ÛÉÜÉÉÉÉ̹œ[¸w´´´šÌ´x^Di 6686ðµ×±µÜÜÉɵÉZGHK‚-O‚‚^[|wxx}ÌxÉ}b|G€^b‚-¿Jb{ZË´´´œ´´´wéµ]GJLbJx|^G{¸G|v¸]H|´YwwGw´^³[é´´´^œww}ž|¶g R68i¢œ^G…,bbÎd]GvwwY™v¶{|^^|GGœœ~y€³vv´Ì´wœ{yËÉ´ÉÉÌ^‚œéñ¹ÛÉÜÇêÉÛHɼëì´´´´Éx´´|DSi66 ¿±ñ±µðÇÜÉZx»|HH‚-O‚‚^y|éHÉHÉxÉx^|0^bžbJJ,|yÌx´´´´´´wy]JGJJJbJx|}{¸|G|w¸'¹|´´é||v´œ|[³´´´w|wœ'žG2¿685º^^^bbbb»d{GGvw^™{DdG|w|G|œwzºv|wœY´Y|{CÒšÛÉÉÌ|œ}éF±ÜÉÇÜÜÉÉÉɼ¶º´Û´´É´´x|¶S26¿,±×µµÜÜššH¶^x'}--K‚^µ|wxÉšxxšx‚|*+^‚-b¿J,{¶J‚»xHÌ´´´é¶]JbGJ&J,¿`H|^{G{v^w{%Ÿ^´´BGG^ËY|[Ë´éY´^|w^b|¶3¿2666i5fœGG^b +bb‚~™GG|||Y{GW€G|œ^|Gœway]v³wY´wG¸ÉÏÉÉÉÉé^œx´Ö¼6|ñxÇÉÉɹ̹ÏÛÉÛÉÉé´´¸[L22666¿,{±µðÜÜÉZš»^CH}--K ^[CœxšÉšÉšx}v»€œ-‚ž¿b{y{éœbÎH´´´wy]&GGJJ,x|^{v{œ|w{E¶œ´´w||v|||[³éwY³w|w|b|¶3,2¿6ii8O¾}‚bb +Jby€™w|||wYG™¶||Y^G|^z`³||wéwYY|v¶|ÉÌÉÛY^œ}œÖÐ̳^GñÉÉÉÉxšËÛ´ÉÉÉYœ´|.J,b,¿26,bDµ×ÜÜšZšvCH}}'KK^¶|œHxššxÉÉHw &}‚‚ž¿b{¶›œœœœ‚´´é¶€&&€J,¿´G^|{|GwY{E.|´Yw||G|||¶³w|||^||GJ|*S¿2 2K^GbJ, +¿,b‚d™³|GG^´v™¶+|œ^G^^]`¾vvwwYwvBy¢Û´´é´œ}œ¸ñÞ¿³b^^GyÉšÌëдÉÉÉ´wË´|Dfbb2 +22bG¶0×ܚܵš.wH`ÌHKK ^µ^œxÉšÉxšÉxw.|^‚^-2¿,{D{œ^^‚-ž-œDa&&J,+J,¿*xJGœY|G´É¸E»Ë´Y|||G|||[³œG{^v|w|b.S¿66i1¢^bb,2,,b»d™v^G|B´w|y€w^|^|^^|]D³GG|wBBB|B´¢Ûœ´é´} bº¶í¿wž^w}Ë|yÉ[Ï´ÛêÉéYœ´|»J{G,2J +bb|»dbÜššyš¶œxx`Y}}Kœ¶^^}xšÉHššxwÎJ^‚‚‚¿JGš¸œ^‚‚b|‚nfJ&+¿,¿*x||^´|^Y´™]Ÿw´'vB|GGG|¶ËwG{&||œ^{|»g6,¿62 +¢O¾^,bb¿,,I™´³|GwY|™D|Yœ^b|^œ|&ñv|GG|v^B|BñH´é´´´´‚žñê}œ|^^œ^^^ZëºÛêÉÛwwÉxËDfGGb¿,2¿,|{Dg^šH¹š¶}CCHH}}K}FCÌxHšH}šÉx´`+‚‚œ-, +¿,|¶¸}œ^Gb|ž|b»3€LJ,bx|^|éG{^œ|E`œ´YBw³GGG^¶³´œ|bG|^|{»S¿6bb6JH€-J,bJ,+L‚dwÉéG^BéG{yvœ^|^|^wBºZ|vv||www|ByËÌœ´Ì´e‚‚|ÉÉ¿³œ||Y^Bœ™µœÉÉêÉé´ÉÉËD{JG‚,,2,|byÂ^'^¹ÜšD}xCHH}} }µšœHHÉÌ}CÉC´»+‚‚}-22¿,GZ|œœ^b^žGœ.gJLL¿J,x|œ^YGJ^œGE.w´´wwwvGG|[³´w^b|^GJ{.7¿262…JH¾bJ,2J22+K‚~v´œG|wwG{¶vœ^|^œ^wœ{¶v³|G^wY^Byàxéé´wK…‚|µÌ}³œ|œ´Y^œv[ËÛÉÉÛw´´´™[¿G^‚,,b|Gyf^b‚šš.^xxx´ÌH}¶œ}xHš¹HCÉH´»L‚K'b2bbb|y¸}}^b^b{|M,LL&L,b¹x|wYœ||GwG].wÌ´Ywév|Gbyw´´|^bG|b€{»7,26b‚J ¾,22,2J»I|é´w|vœ{{Z{}^^|œ^Bœ{µvvËG^|YÛwBñž´´´´}œ2R»í¿³|vœY}œœ{¹ÊéÛÛéÉÛœœ{y|^œ^,Jb|{»f,-bµ.œxHxx}HH}D^}xHšÜCš¹x´»&K}¼-…-b-|Z|}Ìœb-œ|b»¿JLL,J¹xb´Y´GGGwG'DË´YYwwv|G|[é´é||GG‚bJG» 2b26J‚J`€^¿¿2,Îa|wœw|^w{]µ³}|œG^^^|{ñwé³B|Bww^ByË´Û´´ÌÌ‚RLHÞb³||wœYœBxë³ÛÛÛÛçÉœ^›¶B^^^b,,b|GD0‚-b,,¶}Cx}H}H}Fœ´`HšµCšxC´»{ }'‚--,bG[¸}}^‚^^‚JLiLL,JxbwYÉG||´G]HËY´´´w|wG|[é´´´B|G^^JG»bb6¿J¢K, +»a{v|^|Gœ{]D^w^}^|^|G]Dw´´v|^´w^BñË´´´´ÌYé‚iÌÌÑœGvwww^w|[³éÛÛçÜšé´{ñ|wYœ^G,bG{yPG-b2 + +xšÉH}HHH}¶ZÌ`HšZšÉ`šxHb}}}‚-…2b|¶|}}œ^}}^b.PJii,¿xJ|´´GG´G]Ÿœ´—Y´œBËG¸[w´´éw^B´}Gb¶3bb¿6¿J¢^,¿2¿6Ìd{G||||œ|]»|œwÌ^G‚|G€Zºé´w|wwBG³y}´´´É´Û}yÌb³G^w´^w|ëÞéÛÉØÜÜêxé[BY}^bG-G|{.†J-b2ZCHHHHH}[}}`HµÜµCšš´Kb}} K-22b^D¸}}}‚^}}žb»3J J,J`x|Gw´JJ|´GE³´—'wœB|{|[é´´´YY´´Y|y7,b2J*L,¿¿ +,2»I&{&|||YG]D|œœ}^|bGG€¶³´´´^|w^GÈyÏ}œw´Ì´´Ì³ñÏ̳GG|wB^wšë¸çÛØÛêÉØÉé[€wYœ^^^œ¸$g--22 +2.šHH HHH¶}HššµÜµššH´Mb H ‚-…2-^y|}}}}wÌ´|‚»iJ¿LJbƒx|GYêJJ^´G}ŸœYYwœ^³|JJ[Ú´´´çYéY´^|»3J,¿6JJ*‚J6+aJbbG^œ|›yœ^œYœ^œGž]ywéwYœvw^™³yË}|œœÌx´Ìé¶Éé³GGG||^œv¶éÛêêØêØ۴鶀|´YœBG|^¸D†,,b221¼HHHHH'FZÌ`µÜµššHxh¿}H ‚-O2-|¶|}ÌHš´É}œ^ŸJ6¿bbxwœœÇ{JGwGE¹|B´^^^B|+[³wé´´´éYww|yd,,,¿¿J1L266-»G|GJG|^{]»|^œYYœYœ|]»aGBœ||^B¸vÉÏ}^^œ´´ÌÌéµÜé³^G||B^w{°éêØêÇêêÛwé[|Bxœw^^|^|$0,b…2 Ÿ¼}HHHH ¶}´¹ZµÜµZÜH´h¿HH}K-Ob-^D|Ì}HxššH^œ»PJ2¿,bbx´Y´Ø{GGéGE[Y^YB^GG|++¶wéwwé—´é³^|¶d,Gb,JJHž`L6¿2-»aG||bb|^{{¶{Yœw}œwœ^{Z|&|||Bœww³ÖËœJ‚ÌÌÌ}´´°Ë˳w||b^^œ{ÖœÉØÜæêØÛ´Ú[||Y´Y}v^|^|yPJ22 ¿,ŸžHœ```}¶HHµµµµµµÜšx1bHH K¤-b-^µ|Ì}Hxxšxœž*L,2¿,b}-bµx´œ´æbG|wGGŸv^wY^bLJ[ééwéw—´év^|¶)G^GGb¿,¢œ|ei6&||||GG^&µ}œœYœœ}œ|¶€J&G||œww{¶éY|œÌ´}œœÛäÜ̳œ||G^Bœ|±ÏÛØêØêØêê綞wY´´´|œ^Ë|yP22¿6 …2.žHÌ}``HFHɵµµµ–µZšxƒ-HH K-OO-œD|ÌHxHÌ´}b‚LbbJb‚b‚byH´ww×JG|´G%Ÿv^^Y^GžJG[ÚYww´´´wG|wDfG^G-GJ,JeJœ|GGƒ¿ ‚|w|^GGœJ{¶}Yw´}YYœGy€J+JG|wYw¸Éé´œ´´ÌœœœÛ×Ü´³wv||^œx¶ËÛÛÛêÉÉêÉç[¼G¹YY}wvœ|vD322,6 2b»Hœ}´HHñHxµµWñµZšxebH¹ K‚O--œZ|ÌHHH´}}b‚»L…,22…b^‚‚yHwœwÜG^|wG%¹w^G^^b,GJ{¶é´wéwØÛw¸{|¶aG^^bGJJJ*€žJ¿bb{e2P»^wéB||}|™[|¹YxÌYYœY|y{|GbG||^é{¶Ëx´ÛÌÌ}œ}éðœËË´w^|w^w|¶³Û´éÉ´ÇÜÇÛ[^-bZww|œ^¸32222 22»ž¹ÌÌÌH}FxHµyy±ñyµZx.bH` KKK-‚}¶œHHxH}^}œ-»2b,¿Jb‚‚^ÉwwYÜ|^|wGœŸ|^G^¿,JJ¶é´´w³´É´v{|D)^'^^bbJ*¢œJGG|-|eiy|wœB^wxw¸D|œJHÌY}œY{¶|œ^|bG|Bév±ÜÉÛÛœYœœ}éµÜËËY´|œw^w¸ÉËéÛ´´w´ÜæÛFž‚‚G-,Z^w^v»322……6 +¿»žHwÌ}HœFÉšyññµñ–µZÉMbeHeKKK‚K}yœHxHÌ}}ÌÌ .L…b-2,,b-GÉ´w}êJ,G{G][|^žb2,LJ¶w´´´³´Û´Y||y€^'ž‚bb,*¢œGžG|‚b^JJH{|w´Yww´B¸¶|œ|GJ`wY´|µww||Gb^œévyéÉÛ´}Ì}œœé°ì´w´´œ|v^wG¶év|}´œ´šÜÛ[Ïb^‚^^bbZ|¸P,…22b +2¿H^HœÌœH̞ɚññWy±yµZÉ12eHe KKKK}¶}ÉH¹}'xHxHML2…Ob2¿,bb»x´œ´ÇG{Y,|]»b|Gb,,++[éY´Éw´´Bœ|v¶z^^b^GbGJ*ºœ{{|œb}Bµ{|wYéwwœw|y|œ^^b,JHœ|¶wéw|GG^œ˜vñËÉÉÛÌYÌœÌw°Ü´³w´w|^Yœ}¶³wËËœœÌ´ê´ëžb‚‚--^bš$Lb‚2…‚…2}¼ÌœÌ´¹éGžšñ¶±ñ±ñyš»2eHe eKKK}[xšH´}ÌH¹¹HŸ +OOb22,2-¹xx´xÇ^^^G^}.Gb‚b,,¿,+b[éYéÛ´v´^|v¶]^^-GGbbJ`bœGJGËG^}^Iɸv^éwœéwv{¶{^|^|G|JH¶¸Y´wB|}´w³yÉ´êÉ´Ì}œ´éñêìwœwœ^|wœ{ê³éwvœwÌ´´é[€‚‚^‚^G‚œœ¶¢‚‚2--‚2žH´Éé¹´‚}^±¶±ññyZZšMO`eeeKKK}yHš¹H}ÌxHx}ŸL2OR + 2,…,šYÉɵG||^|].bbbbb,¿ ++{[é´´´´³wœJ|D{^-bbbJ*Jœ{J&||œw|dë|vœwwYww|{¶¸œ^^^Gbbb€šw´´éYw´xwȶ³ÛÛÉÉ´}œ´éµÜœw|wœ|v}w{¶é´éw霴´´œ¶-‚‚‚^‚‚‚œ¶L‚‚‚O‚‚2¿Ÿž¹ÉêœHxœ}|‚ë±ñy$ZšM‚HeeHKKKY¶}ššÌx¹HHHÌ.fbOO 6R2‚‚»šœ´xµG^^w^]¹bbb,,,,+{[é´Y´´wwYGL{[{G^b,,,bJ*œ¸|J||^G{€š³vœwwéYœ|™¶œYYœœ^žbGJ¶w´´´YY´xév±Ë´ÛÉÉ}œœÌ´¶êéwœB|||Yœ|Öé´É´´Ì´´œË¶|-‚^^‚-‚^.Á-‚K-‚‚…¿.^¹´Éœš×¹´…HÖñWyµ`¹.KeeeeHKKKH[HܹHÉ`H Ì}.L'-- …KH»š^´xÉ^^|w^&[‚G-,222,J[éY´´´év´^J¶]G^bbbbJ*œ¸|{bJGGG}¶³Yœ³w´wœ›{DË´´œœYœG|D|w´´´éY´´vñË´´ÉÉ}œœÌéÜÉ´www|G^wœv¶é´êÛÛ´´Û´Ë¶J-‚‚^‚^b^‚Ÿ¢‚h¤K¼‚‚-Hž¹´ÉÌx´´Üž»†yñµ*¹.Keee`Hehex[ÌšZššZHHH}Ÿ+---OO2-KK»šYY´xG|^^^HŸi2O…22,2LJëw´´´´´B´YbJÖ+G^^b,bGJ*Ïœ||{JJ|^bañv´w|w´Yœ™›yË´ÉÌ´´œGžJyËwé´wç´wévÖË´´ÉÛ}œw}wµÜœwwœbG|³^x¶³êêÇÉ´ÛÉÛ³¶bb‚^‚^^--Kž.€‚-‚ }}Kž»žxÌšÌ^é´šœH.L±yšM-e11`eeKeHñHšµZµš¹¹H» '--O2-K'»šxYxš^^^G^&»H 2-O222¶w´´é´´w|w||[+G|-bbJ*œ|œ¸b,Ëœ^IÉvY´|³´}´w][|´´Ì´x}^žGyËwwwé´´ww³¶w}ÌÉ´}œ}}é[Ëéwwœ^G|œœ{¶ÚÛÇÉêÛ´É´é¶Lb‚}‚‚--‚^‚»€‚‚K  } œ`‚Ìœ´ÉœœœHËbŸ†-‚yZš.‚11H¹`eex[šZµZZ¹¹ššHyG}}'‚-O-KKñš´´ÌÜ^^^G^{[ÌšHƒ +2 +2L[é´´´´ØwBwœ|¶›Gb-, +bJ*œœÛ|JbËBG‚ñvÌ´Ìv´œww›y|w´}´x´œ|G[Ëww´é#wwéwÖ|œÌ´Ì}‚}´œšÜ´wwÌ^b^w{ÜÚêÛÉ´´´´Ûw[¢,‚}}¼^‚b‚‚Î^‚¼} }HÌD¼Ì^´Éœ^Ìxé|Ÿ3b‚YZMZ.Kƒ1¹`eeHH[xεZµšxx¹Éy|'}'‚K--K}D¹xx}xxœ^^œ&[Hxx¹Hƒ2…JFéxÉ´´Éwwwwvy{G,2bJ,J*œËœ|J|||b)ñv´w´wœw|{D^w´Y´xÌw|[wYœw´´w³´wšË^œ´Ì}¼}´œëÚ´w´´^{G}œ{µÚé´Ûéw´Û´œŸb‚}Ì ----ž»^‚‚}HÌHœ»œxœx´œÛH|^»g¿bœ}ƒšŸKƒ1``HeHH[HµyµZ¹¹HHxD^}}}' -K}»š}x}šx´^B^{ÌÉxxC¹H1¿J[éÉɗɚشw|™[€b-J2,,J*œ|œÌ^J||Ja¶vYœYw|^‚]›Ÿ|BœÌ´Ì´ÌYœ[wœw³Ûšww´wÖšœ}ÌÌ}œ}´œZÜœw´´wG|HwGÖÚéwéY´Û´´Ë[b-}H‚b-b-ž.¿^‚‚}̹HœŸž¹´xÛœ^œ}||ŸL,,´}ÌZ.K`1¹ƒH1`H¶ÉµyµZÜšHH¹[|YH}'K^KK}»Z'x}xšx^^œ{.YCxxx¹`¹H¶´xÉÉÉêÇÜw{w[€bb,¿,J0*œ|œ|ËJ||J,ñ™ww´^éwY&›Z|ËœY´´´´Yw¶éÌé³éxx´´w°Üœ}´Ì}¼}´œµêéw´´w^wšw¸¶Úéœwœœ´´´Ë[b…-^œ ‚-b…¤^‚' }}}œ¶œÉYéÌ^Y}¸Ÿ0bxÌÌ}.KƒMƒ`H¹¶xÎyZµššÜšy|HHH}H-KxHyZ}xÌxšx^}'{D´xCšC¹`H´HÜ´xÉ´´´—ÉÉv³¶€,,bJ2) ºœ{||J{ž{f¶™Y´Ìw´|}G]¶|œYœ}}YÌYœ¶wY´ww´}´´éÖË}}Ì´}œ}}œµê´wœÉwY´xw|[é´wœœœ´É´Ë[¿…-^¼}‚b……-»¢‚‚}}}} œ.œH´é}YœYœ¸G.›|žx‚xÌ}e*ƒZƒ``ƒ`[šZZµµZ¹šµ[wHxHH'K'HH¶¹Hx}Hšx^}œG[HšxCHÉxÌ}ÌF´Ì´x´wéÉÉB|°+¿,2,¿¿)1œ{,G|ž|‚y™´}wY´|xw]¶{œ´œœ´´ÌYœ¶wÌÛ´^´^w´w°Ë}ÌÌ}}œ}œË¶Úœww´´éY´´Gëéwœ|œ^wÉ´œ¶b2‚¼œ ¼ž-b¤»¿‚^‚}K}ÌœyH¹é´xx^YY{|.º^^´bœ}}}*M`````¶šµšµZZšµ¶}xxHH-''xHñµHxH}Éš}x}G[É}xH´ÌY}}^[´´´Üxwwx´wvy+, +,2, +20*œJ+bJ^|'ÛvYœwÌ´Gœw]|œw^^x´ÌYé[wwY´³ww|Yé°Ë}}Ì}}}Y}wÚéww´´YéYw|DééG|^œwÉ´Ë[¿…‚‚¼‚œ-2‚‚D¿^‚‚}}Ì}œ¶¼¹^´´}'}œ¸|¶º^‚É‚}}œY|M`*ƒ*``FšZyµšµZµµDYxxHH}'}HH¶ZHHš}šx}x}G¶H}Hx}}xœ}^[Û´´xxœxxÛw|[€22222J*œ+LJ|||‚ñv´œw´´v|w]Ÿ||œ^^´´ÌYw[wœ´´œw}œBé°œÌ}œ}œ}œYË[ê´w^éwé´´³¸.˳G^œwÉÉË[bbb¼¼}‚-Ñ-‚¿^-‚}}}Ì̶¼^G`œÌ}œœ´œH¢^|É^œ}œœ^µ*ƒƒ*¹``FxµÎZšZµ[´xHxH'HHHñZHHxHxHHx}G[¹}Hx'''^'‚FÛšxÉ´wYx´œ|[,2¿ +2œ|b¿bGf±vYÛwÉ´Bœv][{Gœ^^´´xYwF³´´´w|wwww°É´É}¼}}}´œšÚ´wœww´´wv¸`™³^|œwË´É|[¿b‚ ÌÌ}‚…-ž»€œ‚-‚}ÌÌ´yœ-œ-G}´´Ì^.€b|Ì^Ì}œœ}yw*``¹[HµZZ¹Z`š[´x`xxHHHš¶H¹}HÌ}xÉ}GF}HHH}''}œ[ÛšÉxx}´w^w[{-2 +2222*œ|bbJ¿J|JdÉv}ÉwÉw霴]»|œœ^œYÌ´}´F³}´´´B´´œv[ì}Ì´}}œ}´wšÜœwœwé´´w{H¹|w||wœwYY|.b¤ }}} O…….}œ-¼}Ì}´¶žG|^œ´^HºG|}œH^ž^œDwÉ**`ZD¹µZ¹šƒH`[YxC`xHHCHŸZ}}xšHHšµ}G»HHHÉ}''}}^FÉšÉÉxxYx}||¶J22222,2»œ^|bJ,bJd¶³wÉœx´ÉYY¸D{wœ^YxÌ´´w¶³Yw}´w|´wvëé}Ì´Ìœœ}´œ¶ÜœéwËwšYw{{`¸³œ^BéY^œ{Ÿž…‚   ¼‚……….œ}‚‚ }Ì´[ž^}^‚^^G`H¹^^Ìœœ}¿^}¶œÉÉ**¹F`µZZ¹`e`¶}`CCCCHHx¹¶µ}HCµHxšµY[HHÌHHK'}‚FÉššÉxÉx}éw|D0,2 +¿ +2 +i}œœ{b,žf¶¸wÉYwéÛYé{y|Yœ'´Ì´Y´w[w}é´´w|YwvÜœ‚}´}}YÌ´|yš´wY|³Éxx³›¹¸³œ|^œYY^{¶b‚  K‚ž‚……….Ð^Ì}‚}}Ì´[G^^^^^^-žŸGœ^´}}},^^¶³x´´`Fxµ¹``e`FxCšCCCHHC¹[µHšxš}}Hš}[HHHHH-- }^FɵɚÉxÉY´Y´¶2222 +2 +iÌœ´œ^bG^^ayv´šYœwéYœ{»|´œœ´´xY´œ[Ë´´´xéwwœ³µË‚ Ì}Ì}´´|šËw³Ìœ³ÛY´w{¹{w^||œYww¸DÑž¼ Kb…-…§O.€^}Û}}}Ì´[žG^^œ^-^-|b{œœÉœ´^œ^œy|´´´H*[š»µ``H`ŸšZCZšC`xC`¶y`x`šH}š`H^[H¹} KK-K}K[´}}yx´xÉÌ´´F= +2222O2žÌœœœœ|}}œa¶w{YÛw|^w´›»|w^œx´´´´w[³xÛ´´´Yw|³µËÌÌÌ}}Ì´x|¶š³œ´ÛwYY^³¸.¸|ž|‚}}Y}{¶¿b‚ Ì ………O…»œÌÉ}}ÌÌY[¼G^^^œG^|G.Y}É^Ì´}}|¶|´´Ìx´Z¶µyZZ`*`ƒ[šZZ¹CC`x``¶y`šššHHHxx`[HHHKKK-KHœ[´H}}´y´š´xÉ[}x1222 +,1žœwœÌw^´}Ìœyw´Éw^Yé}]»{wœ}xx´x}w¶wxÛ´xØÉw|vµé̹É}ÌÌx´|¶xËw´´wé´^{G¶›|bb^œ}wœ{¶¿‚‚¼¼‚ÑORO…Ÿ|}Ìx´}ÌÌ´[^G^^œ^b^b^|H€œœxœx´}œ^µ|´x´x´^FyÎy*Z`[yµZZšC¹CC`[yHZZµHHxšH^[HHHHKK K}}[´H}}xHYñÉšÉ[YÉx´e2221žœœœÌ´œéœx¸¶w´´´^|w´Y]¶|œ}´x´´x´w¶w´É´´ÉÉ´|vµËÌHÉÌÌxÉ´Gµ|wéwÉ´´Y}+{Ÿ¸|bb^‚^}^{[b‚K¼‚ž……2O…»¸ÌÉÉx}ÌH´[ž^^^-,^b^GH|^wYœ´Ì}}|µwxÉxÌxœœšyµ$*ZF¹Z[µµZ`šC¹[y`µÜ±HHxµHC[eHeeKKK KK[Ìx}xxxxx'yÉ[}ÉÉxx´OMbÌËœ´œœ´œ}éñ´´´´^|B}œ¸yžœY´Ì´ÉÉ´w[³´É´YéçxB|븠ÌÉÌœ}ÉÉ{¶|Úww´´wœ´{]ñ{b-b‚‚^'œ&Ÿ¿‚ œ‚žÑb…O…ŸxÉÉxÌÌxœ¶|^-^‚,-^{`¸^^´^œ}}w̶ZÛÉx´}Y}|y»*Z`F¹Z»y[µZZ``[yHšZyHHHµx^»HHe KKKKh‚F´HHxxCCxxxxF}ÉCxx´xY15|Ìœ^œœé̜̳¶éY´}œBœ´{[ž}YÌHxÉx´w[é}ÉxéwY´w¸yJLƒÉ}b^ÌÉ|HËé´´´´´wx|Gy{b^'^‚JŸb-¼}ž‚‚b…‚‚¶¸ÌxÉÉxÌxœë‚G‚^œ|G-^||¶{^w´}´xÌ}}ywËyÛxÌ´´wËy$$µ`[¹Z»y¹[yš[y``ZµHHšµx`[H¹eKKKK[´¹HxxC–šCCÉFw¹CxxYY}vY|ÌœœÌwx}wœÚ¶éx´´Y'BœY¸¶b^œH}ÌÛH´w[wY´´YYw´éwD›6Lœ‚}Éœ¹Ëw´´´´´|xY{É{b‚^^{»žb‚¼‚¼‚…b‚œ¶|}xÉÉx}xœë^^|^^b^^bG»{œœ´Ì´Û}}œy³œ´w¶xYÌ´œyµy*»[Zyyyµñy[y`šµ±HešµH'Ÿ`¹hKKK[ÉHxxxšZZCšÉ[}¹šHxH´}wšÛHœ}œœÉœœ^³ñxY´xx}^œ´|¶bœ}H}ÌxH´wñw´´´Yéœw´wy› +¿¿ }´œyšéÛ´´´´GœwHš+-‚'{.b…‚œž¼ ‚‚K¼¶œÛxÉÉHH´Ì[‚|-b-2,{^œ}´ÉÉ}}œy³œw´}éñÌ´œ+$$y$*[yy»yyZ°y`Zy°HHHµHYŸš`eKhKh[ÉHÉÉÉšZuššÉFÌZšHH}Y}wZ´Ì}œœœµ}}Ë´[š´´ÉÌ}^w´|ybœ}Ì}}Ì}´w¶wY´YwwYw´³š{6¿,¿Hœyéé´x´x´Bw³|¶{J iK‚Ÿb…‚¼‚‚ÌÌ  œ¶ËÉxÌxHÉÉÛµœG^-bO,¿,LJœ^YÉÉx}}´µ|´}´ÌœYéµ´J‚»yy»[yyñy»yyyµ»°D¹CµµH``µC}ŸÜš1e5h5H[šHšÉCšµZšCš[H¹`HH´H}wZÛHÌHœËÉ}ÌYËëšÜxšx'}œY|yž}}}}}Ì}Ìw[éYÌYw^wœwéy}¿ +2b 66¿¿*éw´Û´´´w´|GÜ{Jib¿O‚‚¼……   œ¶ËÉ´´´¹ÌÉ̶‚G‚-b¿2,H€}^œÉÉÉ}}YÎœY´Û}^œœÛwš^}^3 200 125 1 +DiU|i¬dŒiiŒ˜ii†Œ‹\‹dUGU‹CCVn‹Y8"((""‚V—hhh{{¢e{{{|hCGmmT~U¡›m›Š~hmmhk‹ª— ——FŠŠfi[~Šmmmm›mgŒŠŠŠggBgg–giŠ^$^[L=^$nk–¡ŠyhŠ—yjj˜j0$ L$#$^InItqX€9^qq‚mŒ–hŠŠTŠh›ŠŒ~F1[[I9$4 $ogXX— h~~T‹~ŠŠh~qkX––‹‰Š›1dH|˜£†¬ŒŒŒŒŒi†DUi˜Œ‹UY‹YC{i{YY<`"]]£{C{{”U{{C{£n{G1mG~U¡hmhmmmqš¢ˆ{—{ª{hT~iq~GmJm‚hTŒ–ŠŠŠTmgmgg{}=99[$)$4$J–Š—ŠŠŠ—”j‹j0IIL$$$9IH^„qqqP9tqq€¡—›ŠmŠ›ŠŠ‹kX[99^$9I$n0XFX—ª—TXgi~h›Šmq[q~‰ikŠhmqi|i£†|†ŒŒŒ˜ŒRŒ‹‹‡iYU{iY{V¢i«]]""]Vhhh{¢‹A{{{|hn{YJmGgUŠ›m›~›qXšž—{¢”————hŒXmmm›m‚m~ŒTmŠhŠTg~gg{m99$[$^4[ƒqk–—ŠŠTŠ¡”BjUjFII$3$$9 H^qmq[P$v^N€HpC——hmTmXŒkXq59^9$9 $npX~XŠ¢——~~‹~h›Šmq[tkkU‰ŠŠm›|id£§†¬VžŒŒ†Œi‹iŒY{nUU{D‹i˜UYYG]]]£{hC{{eU{{{|nCYGGGmi—¤m››~›1[mŒ—{¢©{——ª{¢{~mmm‚J‚XDgŠŠŠmTmTŠg˜p^4^9^t9tLš–—ŠŠTŠ–—fj{F0$$L$$4$2p5‚q[P=^^t[\pXXY—ŠŠ~‹XXq49=99$$njXX~—¢——ggi~hŠTm~€5[kngŠŠh›ŠG|iŒŒ£†£@ŒŒD“Œ˜iŒžUUYYhUVU˜‡{{YGG]]V{CC{{{UC{{£Y{YUYGGmm‹—h~GmmW‹—¢Ÿ”—h——{¡žXmmqqJqJXi›ŠTGTmŠŠ~‹pI5t9^45[$nš–—ŠŠTŠŠ—‰{z0^$$$$4IpNq~€t==99[HpXXq[——m£Xqq9P=$#nIXX›——ˆ—g~išhŠhm~q5[p‹g–mhŠhh›iiŒ£†£VŒŒi†ŒŒS˜žUnUUGGi¬S‹{C]£{{¢{{{{U{{{EUYYYGGmU—›hmmI£ {Ÿ¢{—h—ª—dmmmmq5t5Jqi~YŠŠŠŠŠg˜j$N49[^X5LUšŠ—ŠhŠŠŠhfkA04I$ $4[\IqqX59==$t[‘ kX5^9IY—‹[99===)Ln[kkmh— —~m‹~hŠhŠT~X€pU~ŠmŠh›—hTDŒ£@VdŒŒi“VŒD˜ŒŒ‹Unh|idiUUY{CY|{U¢‹{{‹xU{U|nY{YYGGmU—{1hY~dª‹x¢¢—h—¢—Œmmm5tNqJ€DXX~mhhmhŠŒG^5^9q45XIYk–—ŠŠgŠŠŠk‹zFFI#$4pnI9qXqt$==9[o[[^^$^LUF599=9)I[X~h—¢—gg‹~h¡hhm~mXkUkŠTŠhŠh——€Œ£VŒŒŒŒD“£D˜i¬Œin‹hYVi¬‹‹UUU‹UY|{U¢‹{{U‹‹{U£{nCYYGGmi—¤mhm~~†¢¢x¢¢—h—¢¢†mmmJ5N55JqV~mmhCm{mhŠij454tX[9XIYš–—ŠŠTŠŠŠkjUzF[4$#$4In^^kmX[$=99n3[Xq$$$^7"pFN[9=^)nIFkT~—¢ˆX~i~Šhh›m~m~knk–mTŠT{•mVVŒŒŒ£ŒD“|iŒDŒ¬dU‹{YVŒi‹Ui˜˜‹Y£U‹‹¢U{U‹UU¢|YnCYYGmi—{h{m~‡¢¢x‹¢”—{—¢@mmm1qN5Nqq‹mmh—mmU–Œk[5tNX59XIYk–—ŠŠŠŠŠTkk‹zkFII $4I\L$5m~€9==$t2Z[Xq^^$$7%p^[9t==$#œjXX~X›——kgišhhŠ›mmm~XUjgTT›mh—ŠŠŒŠ@£V£ŒD“­iŒ˜Œ†Œ‹i‹YVŒž˜i‹Ui‡‹Y|U‹˜Ÿ‹U‹‹UU‹|YUnUY1‹—hU{{C~£¢«Ÿ‹”¢{C—¢ŒmmGJNqqqDmh—{hmmmXDkq5[5~59XoYX–Šh¡.mŠŠšg‹zXF4$ IIHL$[55[4$$9tHL€[q49$^'rmF^5[[^==$#[XkXX~ŠŠB~išh—Šhmm~~~‹g›mŠTŠhŠŠ\›Š££†VŒ“­ŒŒiD£Œii˜YŒ¬ŒiiU‹Œ‹Y£‹‹‡˜‹‹‹‹‹{U|UnCnYY1n{¤‹¢{n{~Œ”«ŸŸŸ«”——{ŒŠmmGm5Nqq5ŒŠ—Ch—hhX~XXJqXq9q3Y›Š—Š—TŠŠŠ~g«jFF4I 4^HL^9[[t4^^9[27[qq[4$$#"pF9t[[4^$^$YjXmXXT›T~~‹~—hh›m~m~~‹fŠm~Thm—¡Š–ŠTR£VŒ“­ŒŒŒŒ£žiŒ‹Y|ŒžŒ‡i‹‹ž˜Y|U‹˜¬˜U‹x‹U‹™UnYnYYGn—{‹{{‹X£”˜«‡««”¢—{£ŠGGGJ„5qq5ŒThhhG{h[nkq5mqm59[IYmŠ—ŠhŠŠŠŠggxjF4F $ 4IHL$55q5^^94[r7€€qt$^LJpF95F[4^I $HommŠ[›ŠmB~i~Šhhm~mmqk‹fŠŠXTmmŠŠŠŒmŠTT†£Œw™VŒVŒ†ŒŒ¬iC|Œ£¬SiUi‹‹Y|‹‹˜˜‡‹U‹‹U‹|{HnUUYYYn¢Y‹{—‹¤G˜x«‡Ÿ˜‹”¢—CŒmŠ.1q5JqDŠ—{C—{—C~Hk4X~q1[^[Ing——Š—hhŠŠ˜jF40II [I‘LI55tNI^4t[r'€[5X[$^L4p^5p4[[IILIXXŠqmŠ~k~išŠhhm~mmkk‹kŠŠXmŠmggŠ\ŠhŠm~£Vw­ŒŒVŒŒŒŒd‹Y|Œ£žŒii‹‹i2|‹Ui˜i‹U‹U‹‹™UUnnnYmH{{Uh[†‹«‡˜Ÿ‡¢¢{{Œ~GCGGJ5JJXŒŠY{C{—Y{{mk4q1qqt5IkIJnh¤hŠŠŠ–ij[F[4044I2345t[4t9t[M'[[tqt$^3"pF9[[[[F4Ln[XkmkX›mkg‹kh›m‚1~q€‹kŠhXmŠmgg›VŠ›T~XV“™ŒŒŒ£Œ˜£†‹2™Œ£†Œiii˜iY|i‹‹i‹U‹‹‹/‹|{iUUYYG\¢G‹C{XV««‡˜‡¢«¢{{£mm{Gm1J‚X\ŠYh—{‹{{{mDk5mmqJ59[^Y‰j›Š‚nC——T˜FFqII4$Hƒ[[59[4^99tn'€[[q[94L"p9F€4kX~k5IX~mŠmmŠkX‹X›Š›m~qmqkUkgŠT›hŠŠg›V~hŠTmgXw™ŒD£†ŒŒR“˜n|££dŒ˜i‹ixn|iUUU‹Ui‹Uii™ninUnYYGH{hn{YYY£««‡i¨¢«¢{{£h›CCGGmJ‚JDh—C{{{—{ŠŒšXmqmq94IšF›TŠmJn—h–˜F[FI[4^HL4[5494999I\:[€9N49I^MpF9[[[[ŠmF0YommXŠ—~~kXik›Šmmmqm~X‹kgŠ—mhŠŠŠŠŒmŠŠmm~kwVŒ£†ŒV£“˜U|£†@Œd˜iiin|iUnUi‹iii|UiiHUnYYGH¢Un{Cq˜Ÿ˜‡i‹«‹¢—{|G.Ym1J1ŒC{{{{UhŒXqmmJm599InškŠmm‚mqJnhij4F44II4^HI9[99999tM'[[t[499LJpF9Xk[^X~kjoqXŠXXXF[X‹k›Tmmmqmm~‹gŠŠ—hŠŠhŠ›\XŠ1Š1g~XX££V†VŒ£†ŒU£††£dŒi/Un|iinUUUi‹iii|UiH‹nnYGD‹n{GYG5†‹˜‹˜‹‹x—{‹£hhhYhGm‚XŒhh{{{C{—ŒXX1mJm59$YBkhmmmqqmXqp44F4FII[^2^$45t994t[M:€[9^9pLNm^k4^XŠ~0$[m~~[[kF~Ukmmm›Xqmq~‹–¡Š——ŠŠ—ŠŠY~›mmmgmXX›£†£V˜V£˜n||“†£†žŒiin|˜iiiiiiiiiwœi/U2Y]!¢œ{YnYGG[˜«˜‹‹UU{{{|hhChYG1‚JVhY{{Y¢hŒ~XXJ‚mq9t$Y~š—mm1JmkXn$^444I44[HI$455949[t5‘'[qt^^[L"p4^Xk44[XFjnI[XTXXkFkXikm›mmmqmqki–———ˆ———ŠŠ\UmTmmm~XX–R££VŒR˜/||§R£†žŒŒiUE˜D‹ii‹/iiii­HiHinnYH‹n{‹nYCG˜‹‡‹i‹{U¢{VŠhCCGm]1ŒhCCYG{hŒX5qJmm595^2gkhmXq1m€X#^44I4I4[[I9t5N994N5r'[q599qqIH[t4m4^9pFp^Y[F~~~~XX[X‹kmmmm~qmqX‹Š— {{—ªˆŠŠnI4Y~mTmXXm–2“VVŒ“ŒU|§|††£ŒŒS/E˜iiiiiii˜i™iiHiUn2YH‹‹UYnY£«‹‹i‹{2{¤£. {hGmŒhCY{Yh{hV{JqJm‚5NJIYg€h››X51mkk$t54$4^4[[HI945t=9Nqn'€q[v9t5L"]t ~[994Fp$Y[GkXXXXk[X‹€mmmm~q‚Xk‹–—{{———”ŠŠ\L[5[~mXXm–GWV£V“žHE|“R“­£žžŒi­ii/iiiiD˜DŒ|/Hi/‹n2H«œU«œUYCX£«iU‹UnCU{VG.GhhGGhmŒYCY{U{{hŒTmm‚G‚N5J[HgkGh1qmG[[\^9549^4944\I9[9P$999527€q59=[9L"p4$X[49I[j$YoqXmFXkXX~‹kmmm~mqq~Xœf¡——hh ”¡ŠI[5F[91~X~gYj~ŒV“§H™|“­“|£d£˜/|ŒŒiiŒŒŒiD˜™‹H/Hn28H‹/‹œnnnYYGži‹U‹UY{‹|Y{CYhGGmŒhY{YY{‹UCh£mm]mG‚5J54YgXhmqmG€F^[[$4I9[H^9N99995[\LqqN9^99#M[94[94^94IvY^4[q~F€X~ikqmmm‚q~qq‹kg——h——¢¡Š\I[5[t4$4YT{UWmg£“†Hl­“|R££†£DiEŒŒ˜iiŒŒDiŒŒ™/HH/nn8HŒ˜iœiinU{£«UU{n{UVhY{CGGGGmŒYY{Y‹‹{{h£mmm]mJ‚N4gX›]m1G€49[5v994H^99Nt9999qn^qq59995LM[54[44[9 ^^Yp945XJ1Xmkqm›m~X‚q~‹fgŠhŠ—— ŠŠ\[[[44^4XmŠ‹šGkFw¬iE­“R|†£†VŒEŒ˜ŒŒŒŒŒD˜ŒŒ|iD/iH28!«‹iiiœ‹nœU£iUnY2nC{|YU¢GGGGGŒYCYU‹‹{CV~GGG‚NNInT~mGm~mY~[^959^45[H^99999[qH)m~m9t95L"[5I[5[€9$^2o5[[[[X~mmiqmmmqJqq~‹kgŠŠŠhª ŠŠ4[55^[[X›h‹gh{FŒ E­“||†£VŒŒ\EŒŒŒdŒiDŒŒDŒ|i\DiHnY!‹UUSi‹in‹‹nRi‹nnUYYU£hY{{YGGGGGŒY{nCU‹‹‹UhŒmJ‚‚JN59\gXm›{mq99[99945599P99995q\'qm‚P9tqƒ"€5t[k4^ ^nL[[4[X[5XkœF‚m›m~qmqqif–TŠŠŠŠ—gŠn[5[5459[mhik~GGmYiE­w||VVVVŒD™ŒŒŒžŒDŒŒŒŒŒ™/DDDHn!‹UiDiii‹iU­‹UnnnYYU|Y{CGGGG‚DY{Y‹‹‹‹{hVXNmJJJ59HT~G{—h{Š~i99[959945[[9999PP95‚\pqmq=9[qI][55X95q44$‚o[4[[XX1X[Ukqmmm‚qmm~ighŠŠThŠŠŠŠ\[555[599X‚—˜k~Th›m™|w||VVVVŒ\™Œ†£†ŒŒŒdŒŒd™i\DDH22!‹‹iDUiU{Uœ‹­iinn2‹2n{RYYYY{YGŒCUnU‹‹‹U¤Vma]YJJJNt2T~hY‹{‹mm\t9[59t55qJ*9**P9J\€qmmP9qJ^"€5q5[554[9^nI[49FXXgXknkqm›mmqmm~‹ŠŠhŠŠhŠŠT–Gq5[559[XmŠikTT›.hE£||£VV£V\w££|†£Œ£†ŒVV™iDDDH2!‹i/D/iUUiYi£iiin‹HnU{|nUYCYYGYYG\{nU‹‹‹‹‹‹{VmNGYJ‚JN42Š~h{C¢‹GX[55N9N5m1qm]*P*9Jqm‚99NqL]q1J5J5t[9^2^[[[FXXFFœkqmmmmqmm~‹khŠhŠhŠŠŠŠmJJ555^[m—Œg~g›TmmXV|VVVVVD™£V†“£ŒŒ†ŒŒ@™i\\\DDHHMH‹/iDin2iniRi/nn‹n‹n­GY/‹YGYYYGŒ{nU‹i‹˜S‹{£mJYYY‚J(J4HŠXChCmk[5q5[5mq‚q\m{{{r9*9‚\kmm‚€tNq$8€GJqJN[tt9$no[[[N[5X[npqm›m‚qm‚mUkŠjŠhŠhhŠ\m›q5[594[m—‹X~BŠThmXŠ|||66Œ\™V££|§V@£ŒŒV™i\D\DDHH2!ii//n22nUH|œinHHi‹i‹£GYnYnUYG\{nU‹‹i‡«i{VmJGY]JJJNHT~YhYhGqq\tN5N5NqmJ1\›Chx{89‚~m›‚q5qq42€JJq`N555=^nL[[[5[€XmXU[qmm‚q‚m~‹kgFFFh—{hŠVmŠX5559t5m—ikXgTŠ›ŠGqTŒVVDV\\l£V£R££Œ†VŒVliD\DD2!i22Din2H/nH“iiiii‹‹|YCnYGn‹YGŒUnUii˜‡˜i{V›"GYY]JJJ[\ŠmCYYmmXt55q555J‚1\m{hx{mYN‚\~mm›q5‚J[8€]]JN5Nt^2ƒ[[[N951mXn€qmmmq‚m~ifXFFkkjTh—V›ŠXq55[[m—ikXBmŠThhmŠŒ~VD\l†VŒ†V£VVVŒ£wi\\D\D 6inniDHH/ni|ii\iiii‹|YnUnYGiHVU‹i˜˜˜‡˜i‹£mJ]]Y]]J]5HŠCYYm›\N55J5N55mq\›{‹x¤GmC{{\km›‚‚Jq‚[8€G]J„9N99no[[[N95m~Xœkqmm‚q‚mi‰~kkkkXFF£~hT~X5[[5—ik~XTŠm.›mŠŒk‚KV6D™£VŒV£VV†£V£?\\DD\DH\in/HiH22nnD­iDŒDi\Œin|UnUiUYYrGi‹‹i˜d˜˜˜‡U£m(]Y]]J]q\{YhmCYVN5N(q5N5q5\A‹xCmGh—{{Œk‚›G‚mmm[8X]JNP992ƒ[qq[9XXqX‹X›mm‚qmh›iggXkXBkkkFThŠ~XXkF—i‰XXTmmTmmŠŒXmm66VV™|VDDŒV££|V£™D\\\D\\H\iH/HHM2/\­iDiŒŒŒ˜in“2YiiU2YYYGŒUi˜˜ž˜˜‡i‹V("]Y]G‚"JnhhUCU{DNNN`JN5N55h{‹x‹{{{”“k›m‚‚‚‚[8q]]JNa*P9nomq555~mXœ~››G›‚‚m—h‹g~kXXkXXXF\ŠhmgX~XFX¡ikmBm›TmmXŠŒXm‚mV™|VVVVV†VVR™D\\DD\\H6iHHHMH2HH\£ŒDŒŒŒŒŒHnVYYnŒinnn]V‹˜˜‡¬‡˜‡i‹V"]8Y]]]"qnhhœUYYCY\[5NN(NNN5tH{xx‹—C{{{”“qm‚‚mq[8q]‚J`NN9n^qJq55qJmX‹~Šm‚Jm›‹XTkXkXXkjF\Šhmg~mgXXh—i~Tgm›TmmqmŒ~m‚m›Vl||£|V\£V|£|™DD6D\\H6iHHHH%MHi“ŒDŒŒŒ†£iHnV82niinYnY]£‹i˜Œ¬‡˜˜i‹V"8]Y]Y]]J2hmn‹CYYYn[N((**Jq!{e‹{{C{”U”Vkm‚m‚58q]qJNP*PP9n^5‚mJN5qmX~›Gm‚J]ŠUXTkXXBXk-FŒ~hgŠXŠŠ›X—i‰ggmmThmqTŒkm‚l|£|V£VV|£||wŒ6\\\6D\H6iH_HH_HM\RŒŒŒŒ†ŒŒn8nin2n2YV‹i˜Œ‡¬Œ˜iY]8]r8Y]"q\{‹Uh‹YG›D[JJJ(*PNJJ\{{x‹{{”x‹”Œ~›mmmq8q„qJN(**99n^5‚q‚NqXmXišŠmJ`‚mU[mXX‰XX~fXnm—T~~›{Š1——Œ–—–mŠhT‚qTŒ~m›hŠ?||R£VV||RlV66D6\D\\DM%H__MMDwŒŒŒŒ†V££DH62n/iY88nY]Vii˜˜žŒ‡˜iYV]888YY]]J6—UU‹{Un]\5JJ"J((J]D{¢x‹{{{‹‹xŒ~m‚q8qa`(aN*N9n9tq5q55qJ~i~]‚J‚m‹XmfXXX~gkF\m—TŠTXŠŠ1——˜Š{Šm.ŠGmqh\~mmGhmh™R­“||V|||RlŒ6\6\D\D6ŒM%%_%%%%i\“\ŒŒŒ@¬V†ŒH2n/Œn8MnY|i˜ŒŒŒ˜˜˜i"rrrY]]JH—CU{‹in{¤\5mGJJ`5("m\U‹S‹{{Ax‹x£~]mrqa```Na*NP9n9t55NNqJ‚~i›mJJ‚G›iXTXXXgmgXX\Š—hŠmXŠ{m——VghŠ~mŠmmqTŒqGmh—“™w||R|+||lV6D6\!\\6Œ%%_;%__%\wVŒŒŒV¬V†ŒinniDn22iY8|iŒŒ¬‡˜ŒiiVY"rrY28]"H{i‹ii‹n‹U{Œ1mGGJJJ‚GU‹‹x‹{U‹‹‹”†~‚›mnq(`"J`N*N9H99N9JNqJm~i›{G``‚JmikmXXgXmTkFœŠhhŠ1gThm{˜g— hmTmGqh\qm›—h›hww™+w™w||?V666\\6\VŒ%%%;%>%%\!­VŒŒV†£@£ŒD£nH/Hnn2nnYViŒ¬dŒ˜iiinVY8rrnnY]]\{Yi‹iœ‹{{{VmmYGG‚J"]V‹‹x‹‹x‹x‹xxŒ‚‚mnq(`<„`(aaNntt9NNqJmmŠ{¤‚‚JJJ~/kmXg~ŠmŠFkHm——TXXg~mh—¬g—ŠhXŠTmqTŒqGm——hhiw™““™R|™?6!6\DV>% +;>>%%D;“£ŒVVŒ£ŒVŒD|HH/iH2nHnYVŒŒdŒ¬ŒiiY8YMrnnY8GH{iiiiUUY{ŒTG.GGm"J]]Vn‹x‹‹‹S‡x‹‹†m›]m~nq(`````a(NNntJ`NNNqJ‚mim{‚<`J~kTXXXTmTFX\Š——TXmgmmh—˜BŠTmmgmq5ŠVqG‚h¤—h{›Dk™ww™+|™?K666\6\V;;;;>>>_\;w£VV£Œ†VVŒŒ|HHiiiHniUn|ŒŒ¬Œ¬˜iiYY8Y2r‹2rY]H{{iiii‹‹h\TGGGm"]GVU‹xi‡‹x‡‡‹x†m›‚nJa<`<`(`(ntJ‚J(NqJmmX—]J]‚mHFmmmm{—kX\Š—hTmmXmX——ŒfX~mmTmX5T\q‚‚{—hŒq1w¦™R|wlV66\6\Œ%;;;>>>\\w£VV¬@£VŒŒŒ|HiiŒHn2Hnn|ŒŒŒdŒŒinY8YMMi2rY8\Uniii‹i‹n{{ŒmGhYG"JGK‹‹xiŸxS‡‡˜x|mYmn{Q`<_\6™VV£VV£VŒVVEiiHDinHinn|ŒV£†¬ŒiiHnVn82M2‹rr2Y\‹{‹i‹œi‹U‹‹VhGCY GGGY|‹‹S˜‡‡˜Ÿ‡‡x£›Y¤Ymn{iYQN6Vw£££@££VVVV|ii\DiHDn2EŒ†Œ†ŒŒiiiYUr2n222nYHUUiiniin{‹VhCYC]YV‹‹S˜‡‡‡xix«RmY¤mœ{œ‹œM©©T©"TO“T“T«‹ªi^‹«¼†‹U‹‹‰wMh†¼RUoU#nˆÃ¼†«Ï¼†R†kŽÊoꨨ¼Œ†«Eˆ–;;Y;Y&)q¯M)BBtF)o<)¾²¼¼ŒUUU†§jÑ…6Œ††UUU‹jÀ¼¼¼ÐφІ‹ˆ‹Uol‘‘‘‘ZŒ¾†Ð¨¨ŒŒ‡lllÁŒ¬mVV¬¬9m½j¼¨i½i½½½ˆˆTmŽiXXiŽŽ:Ž©mˆXSXX'ÁSjˆTìÌj¾©Ì©Ì©Opj©©¯j¯¯O“TO“TTTTŠkSц†¼lŠUl…ªSŸhŒ«†‹U‹U‰Vh«¼¼¼†U‹Š¬Êo¼Í¨Ð¼Œ†«ßÐY;;;Y&t\>a)tB)F]oo)Yjuh¼‡U‹‹†‹¾h…6l«R‹U8¬j®¼¼¼¼¼RЇŠi‹oo‘‘‘‘ZZ«¾¼Ð¨¨¼ŒhŒUlp¬Vm¬¬¬(V9m½j«¨¨½¨½½i½ˆjmŽŽXŽiŽX::©%ˆXXXXˆpjÁTÙjjjjÌÌ©jOpjj©j">"¯©TåTTTT“O„¾«¼«Þl8U‹ŠkjÏhŒ†llU‹…ªjZ¼††¼«…U‹¿½ãoÏШÐІ†««¸V;o;<&t&q>±x)Bt)tott\¾”l¼†U‹h¿¨«RÑhŒlRl«8UpÔ†¼Ï¼¼††¼ª¾‹oo=Z=ZZZl©†¨¨¨Œ«6Òll©ŒVVVŒ(ZVŒm½¾«6¬m¨½½½ˆˆjmŽ:iŽiŽŽ:Ž©mŽXXX XX'¾ÁTÙjjjjæ©jjËpp©Tj"¯©p"TO©TTTTËˈ‹††Ð«Ul‹8‰ˆ]¬l†‹U‹»ªˆ£¼«¼¼«U†Ð‹¨ã¼ÐͨЫh‹Eˆ|8m;&;&);?'tF)B)t)B\YYSœ‹h«YU«†‹¨¨R†9llUU‹;Y¾Ï¼ÏÐéh†h…ˆ¬oo=‘]=Z‘l¾‹‡¨Ð«ŒŒ‡llÁm¬ZZrZŒr9m½¾Œm¬m¨¨iiˆ½©mŽ:ŽŽŽŽŽ:m"%:: Ž::XÁpÁ¥ìjjæj©©¸jËvj¥jj¯©'[TTTTTTTåTO‹Ï¼¨Œ‹U;nSŠt©p[©Ë©©TTTTT“OU†Ð«UU‹ŠnˆÃB<Ê«‹†«†ÐŒhŠjãh«Ð«h«¼ÑÏìuo$©O©[©©[©©©[TT[©[Šl…kj=oU=lU<),p£h»«†…¼‹«Š¨‘tV«¼«l«†«»ì^t$•oo+@@ ``` XÁŽTˆ¾¾¾¾jjjˆOŽÁS¾ppSjXj©Tj©[jj[["¯©T>[[©T[[i‘l®=‹=®\Á«R«»l††‹Š¨{CFFGG.mì›x<[[©T[©TwllllUllYpl‹‹«$l«lŠˆB*FbGGIHMF)jO¯j©¯©¯©"¯jT¯[[[©[©“©‘‘ll‹U‘lY¬«‹UY‹UhlŠˆMx^BFFG`,tY)t +qXžY<$oB))B8Z—«lŒ†U†ªj¼Ð¼†Þ‡††l†RŽÄ«m¼¼h«†»…ëÏÐÐÐÐŒŒh¼ÏS«llll¼hŠU©Šh66¼¼ŒŒUŒ¨¾h¨‡Ðˆ½¨¨i¨©Á(((E(r((V¯]@@`r@(@:Ž½Tˆƒˆ¾ƒì¾ìj厈SÁ¾ˆjjS¯jTj©j¯jjj¯>©T¯"©[¯[©["T‘ll‹o‘lˆ£lUoooYlŒÑˆx,BšFF-`G)Ft)F,q@B#oloB))]r@rr@@rŽŽ½Tˆìˆ¾Ù쾈¸OŽXˆÁ¾S¾jˆ¾jTjjj¯©j[©¯j©!©©[¯[©[©©OlRU<‘lY¾l\Yoo&oŒŠˆfB?B)FGG.`b)F)F,qp~Šo$=<)"¯¯"T©TT©©o¾¡¼«†‹‹o‹onVB;=•B,-`GG,,Cpt8U«‹‘‹ooUYSyll«Ul‹8jŒŒ«Œ‡Ò¼l‹R«ˆÒ¼‡Þ¼«h«¼½ßφ¼††Œ««†Áh¼¼U‹«¼ŠU©hh6ŒŒhŒho=о»¨‡¨¨h½‡¨‡©¬¨m¨¨¨¨è½¨¯]@@rE(r@rm¨T½ˆˆˆˆ¾ˆˆˆO¨Žˆj¾SŽˆXp¾T¾j¸jjj毾jËj©©>>¯¯¯>"T©©©TT©Sd‡¼¼«loU«nmLB;=BB)F,IXbGbGCX—oUlll‹$oUYˆy«Œ‹UUUR‰jwÒŒŒ¼h¼hY‹†j—¼¼‡¹Þ†h«¼ˆÏ††¼¼¼h‡¼«S;«¼«o‹l¼‹ŠŽ8¼VŒhh«o<ÐS…ÐШ¨h‡‡¨ÐjÒ¨¨¨m¨¨¨ëëj]mV(EErrr¨ŽT눈½ˆ¾ˆmˆËmiˆjiˆXˆiS¾OjjjjjjjjjjTj©©©©D>>p©T©©T©©©©ÁÏÏh«ŒŠ‹lkmÉB;ZVŽ: Ž@ ŽXˆTˆ¾¾¾pjj¯jæT¾jjj©©©jjjOj©©©ÌTTTåTTOTT¥BÕ‘oˆAYU=o))<,>/=‘o=ooo=‹p²†«¼lÒlo;jƼhhÞ‹lŒ½¬Ðjl«‘lŒ«]‘‘¾­††l†¼Ð¹h‹¾Šl«†U‹««‹ß¨CoU$Y<))^)\pŒŒŒ«ŒÒ¼ë¨¾§¼ÐŒ¬l9¬ÛоYZŒZZZZVŒp]ˆˆ½Ž½i¨¨¾Ž6m½m¨mˆ¨Žˆ¯V ŽŽ :@Xˆ©Žˆpp>¾p¾jjTìjjjjjjjjjO©©©ÌT¥T¥TTTËT¥¥T•‘oˆqoU$ot)Y<\v\$l‘‘ootoUÁul«ŒŒÒl‹k¾wÒhŒ¼Œhhh$½©«ŒlŒŒŒ‘‘‘¾Š«lU…ÏЇ†§¾n«†«UUl‹Š¼jZll$‹®<)\)(¬whŒ««¼¨¨jª¼¼¼6¬V¬ÐÐjYZZZZ=ZZŒŒD)™ˆ½i½¨¬T99¨½m¨mˆ¨Žˆj%ŽXŽ@@@ Xˆ©ŽˆppS¾¾jjjTˆ¸jjjj¾jj[Ëj©©ÌTÌT©©åTËÌTTT¥‘®SUUoo< Bo¬ŽŽ::@: ŽˆT½ÁSÁS¾jjjìT¾©jjj¾¾jj¾O¯Ìj©¥ÌTÌTTTË©TT¥¥O‘¬³Uo$oU<<mˆ::m @ŽˆT½ˆÁXS¾jjìjTˆ¾ƒ©j¾!¾SjO¯æj¥¥©Tå©©TË©¥4¥¥T¥@lU$o%ˆ::m:@Žˆ©½¾ˆˆˆp¾¾jjå¾¾¾j¾j¾©j¾Oj©j©ÌT¥åT©©ËÌ4¥Ë¥T¥¥Ë‹=loU$U=px)o<EH +wV¬j«6¨mm‡iˆ‡Ž½>¬ˆ::m: mŽÁ©½ˆÁˆÁÁS¾jj刾jP¾S!jj"O¯©©©¥¥ååT©©ËÌ4TË¥T¥¥OTl‹Ulloo8w1tV:ŽŽm::@ŽXÌŽXˆÁÁSˆjæìOˆ¾¾jSSS¾¾pOp¾©j©©TT¥©©O¸¥å¥4Ì4TOTO©U‘‘UoY'zx,,)Bt))to‹Šp{Œ¼¬ŒÒŒŒ«i±«&‹Ul«†h‹o¸Ã«†Œ¼‡h‡¬¼¾‹†l‹†¼¼hl‹¾§R†l‹lU‹‹¼ˆ?$®U•)>[©ÌT©T©©¥©>"T©t)BttB•ol‹ŠŽ{¬Ð¬¬¬ŒŒŒ"Ñlo<‹lR†‹l¾À¼¼«h¼ŒŒŒ¼¾»«««R¼Ðм…¾À¼†‹†l‹U8«¾s=o=t<)<\)YŒs=l‘oBB=ŒÐƒ¿Ï¼¼‡«hÐh»©ÏШͽèйШ¬vBZ=]]]Z=‘©lo¨½9¬VVŒm½pmrr(((@mŽ©¨¾ƒ¾¾Ù샾¾Ìˆˆ¾¾jæ¸jˆÁTp¾¾j¾j¯jj©©[X'>DDD[©T©Oj©¥Tj"©©T)oBtBoo‘‹Šˆ¬¬¬¬¬ŒŒŒÒj‹‘looo$lU‹ÐÒ¼hŒ¼ÒhŒ¼ˆ‹††«R¼ÐÐh‹¾ª‡ÐÐl‹‹‹Š«ˆu=pDDp'“©¥©T¥Tj"T©T¥tBtBoo‘‹‹¾-Ž‡¬ÒŒÒŒŽZÒ«Ò‹tollU‹j±«¼hÒ¼¼ŒÒ†jΫ«‹†¼ÐІŠˆŠh¼¼U‹U†ŠÏS•>>>!T©©å©j©©©©T‚BtBoo‘‹ŠX_U$‹Ž¨¬¬Œ½ÔŒol‘BollYo²«†¼¼¼‡Òh¼ìÀh«…†¼‡Ðh‹¾ª†¼†o‹U‹…†¾‘pp>D>'jT©©åTj©©©©TËTtBo‘U‹ŠÁz=lU®UŽÐŒ½«ŒZ«=•o‘Yľņ†Ð‡ŒÒŒ¼¼ˆ‹†«‹lϹІ…¾­R¼«U‹oU‹¼pCBBBB)B^&Y¾?l®‘ŒUlÒÐÐjªÏ¹h¼¼¼«U†Ìި訨ëШۨÒ(Z9==]]]=Álh¨¨99V¨‡9¨p]Er(EEr@mŽ©¨ˆˆˆƒÙˆƒ¾¾©iˆˆƒ¾ˆˆˆiŽO¾¾¾jjSˆjjj©[pSpp'Dp'>jTj©¥©j"©©©TËTT>¯TjjÌ©j©©©©TË["T•oo‹ŠXCl«Uo&UU‡«‘toBo•o=YoÐŹÐÐмŒŒ¼ÒˆÑ††lUŒ¼‡RŠjª«†‡‹UU;l¾«ÁV])B?&Y¾nŒ==Œ««ŒÐоŠÏ¼††¼‡¼lÏ櫨¨¨¨ÐШШÞ(r9Zl9=]==Ál†¨ˆŒ9‡¨Œ‹‡jmrrEw(rrmŽj¨ˆˆççìˆç¾¾©iˆˆƒˆˆˆS¾ˆTìj¸jj¾Sj¾j©[ˆ>pppD'p>STj©Ì©>"j©©TO[©T©)oUŠˆul«ljj©©O¯>©"[¯[[¯“UlRU‹ooX팋‘•])•wtį–«¼ÐШШÐÞˆ…ϼм«Ðм†ˆl««h«l†8oˆr==ŒÏ«†hϼЈ»hÒ9ÂZŒ¬Ð¼¾lψ«†¼¼ŒÏj¿ŒÒ«ŒŒŒ‡¼Ð¨jЈ¬Z‘Z‘""[["[>“Ëllo$oYo!ÂŒl««‘t‘ro‘p¼¼ÐÐÐÐÍÐÞˆ¿ÞÞ¼¼Ò¼Ð¼†j­llll‹R†oˆol=l¼«h¼ÏÞЈ»«ŒŒŒŒÒШЈRlURëhŒ«ÏjŠ«ŒhŒŒl‡¼¨¨¾¿Ð‡½¬ZZloÁmR¨¬ŒŒˆ‡¬‡¼jÒ¨m¬V(VZV‡©¨½Úˆi½ˆçˆˆÌ¨½ˆˆˆçˆˆˆ½TìÙ¸jìjjæjjj"ŽjppSpXXvSTÙjÌj¾jpj©©Ë>>[¯¯[![¯“O‚llooUYj‘ZÝ‘«l‘ŒV‘Á×¼¬ÐÐШÍмj»¼¼†«Œ¼‡«‹Ssl««‹l¼†Y‹ˆ‘$Œ¼¼Ï¼†¼¨ˆ»«hŒŒŒ‡‡¨Ðjªll«l$†ˆ††¾l9«Œ«l‡Ò¨Ð¾Š‡‡lli¬9oXUlŒŒ‡Œ¨¨¨m‡jŒi¨V¬(ZZ¬jн½½ii¨ëˆç©¨i½½çˆˆi½½TìÙjÙ¾¾¸jjæj[ŽSpSppXXvp©¾jj©jSjj©©O¯'¯[¯[>">“OËå‘®ooŠp•ß«‘¼Z‘ŒZŒlms«iÞÐÐÐÐм쿼†«lŒ¼Ð«‹Sn‹«†ll¼¼‹‹ˆtllhÞ¼¼¼†Þ¨ˆ»ŒhŒlŒVШÐjkl††l†h«†½¾;lZlŒÒ9Œ¼¨¨¾h‡‡lll«i‘XU«hV‡‡‡½hŒˆjŒ ¨mmV9Œ©ÐiiiiŽ¨½¨ç©¨½½ˆˆˆˆi¨½Tˆƒìƒ¾¾ìj橾"ŽSpSpˆ'Xvp©¾jj©j!p¾©©Ë>'¯>j>>[¯“O‚åËUp>¯>[>[¯[OËåTË<))¯•Z®Â¼Œ«Ò«¼pA‹Œ«ÒŒ½ÐÐÞˆ¿¼hŠo«¼ÐÒ‹¾­l««U‹ll‹l¾ÄllŒ‡ÞÞÞÏÐоªŒ«Œl‘¬Ð¨Ð¾Šll†hh‡hR†jŒŒZŒ¬‡Œ¼‡¨¾ª‡¨«lllYR©Ò…¬‡¨¨Œ‡lŒ‡jŒÚi¨%VVVV¬j‡¨½½i½i¨¨ˆ©¬%ˆˆˆˆÚˆ½ˆTˆì¸ƒ¾¾¾jìæj[:ˆ'XÁXXXvX©S¾jj¸jS¾j©OpD¯>[>[>“OË©TËË)>«ZÑ‘«‹hÒ«lÒ¬uolŒolŒŒˆÐˆÎ¼«‹o«¼¬«§jŠ«†«loR‹U‘ˆÄŒŒÒ‡Ð¼ÞéЇ‘n««hŒ«ŒÐ¨Ðjª«†»h¬¼h‹»¾«ŒŒÒ¬¼¬¼‡ÐjŠ¼‡‡«llŠ†[†…Œ¬¨‡¬‡RŒ‡¾Œi¨¨m‡‡Œ9¬jШ½¨¨ i½¨½©‡m½ŽÚˆˆˆ½ˆTˆæ澈ˆ¾¾¾¸¾[:XXˆ'XÁXv'©ˆS¯jjjS¾j©OpD>>>>¯>>[TË©ååTå\¯ÕÒ‹ÂŒ«ÒÒ]«¼¾–o‹ŒYlÒlÒÒˆ»¼¼«o‘¼Ð«¿SŠhh«lU‹lY®‡®Œ‡¬‡ÐÞÞÞÐÐŽ«lŒhŒÒ¼ÍÐjŠl‹†h¼¼R‹…©YŒŒŒŒŒVÒŒ‡¬jªŒ¬‡hlRURÁ†»¬¨¨¨9‡lŒ¼jŒi¨¨¨‡‡ZZ¬j¨½ˆ½¨¨i¨‡½©‡m½iŽˆˆçˆˆTˆÙì숈ˆ¾¾j¾"@XXXˆXXXvX©ˆjSjjjjpj©T©>>>>>>>>[ËË©TåTËË@®Œ«Œ‘†¬«‘ÄßjtUlŒoŒ‘ŒÒl¾†¼Œ‹‹®lÒl‹S¼Ò«lU‹«Šlj®Œ‡‡ÐÐÞ޼ЇŽUll«¼¼Œ¼Ð‡ìŠ‹…††h¼R‹»j«ÒVŒŒ¬ŒŒl¬‡jªŒ‡ÐŒl«‹R©¨…‡‡¨‡9¼«Œ‡jŒÍ¨¨¨‡m99¬¸¨ˆëi¨¨i¨‡i©‡¨½ŽŽiŽŽˆ½T½Ù쾈Áˆˆˆ¸¾[ XX:XXXXvX©ˆj¾jjjj¾j©Tjj©©>D>>>[TË©©åTËåT®rZ«®«mŒ«®«S±‹®Œl«Ò$Œ«½†¼¼«lUll«ŠphŒ†U‹‹¼Ul¾®h‡‡ÐÐÐÞÑ«ÐX««hмŒ‡Ð‡jŠUU†Ï¼¼†…»©»¼‡¬V¬ŒZ«VÒmªŒ‡ÐhlŒ……Á‹ŠÐ¨‡¬lŒhŒ‡¾Œ¨¨¨¨‡¬Œ¬j¨ë½¨¨i½¨Vm©‡¨ÁiŽŽmŽiˆìm¾¾ÙˆXˆˆˆj¾[XXX X:X X©ˆS¾Sj¾j¾S©Tj¸©j©[>>>[Tä©Tå¥ËTT©¬«¬®ÑÐҬ«Ž–o=‘lŒÒl««½†¼¼Ò««lÒŒ‹Sn«¼«o$‹hU«¾ŒÒ¬ÐÞÐÞ‹«‡p«ŒhЇ¼‡¬Ò¾ŠUUR†RhR…†j»¼Ð¬¬¬ŒZ«¬Ò>Œ9ŒÐhŒŒ…«Á‡…‡¨ŒŒlŒ†Œ‡¾Œ¨Í¨¨6¬V9ÒjÐëÚi¨¨½¨m¨©‡mˆiŽŽ::¨ˆìV@ 숈ˆˆˆæ¾[:XŽ v vvÁ©ˆpSp¾¾jS¾jTjjjÌjj©©>[åË©¥©ÌäTåÌËŒÒÒl‡ZÂŒ«jC=o‘ŒÒÒlŒl¾«Ð¼¼¼hÒ‡‡»jn«h«oU«Œ‹«jm‡‡Ò‡h¼¼‹ŒÞpk«Œ¼Ð쇇ÒSŠlUl…«RR‹»j»¼‡¨ÐЬZŒÒZ!kh«‡¼Œh‹RÁ¨«¨‡Œ«9Œ«9‡¾Œ¨6¨‡‡‡¼¬‡©¼Ú½iͨi½¨½©‡¨ˆˆˆŽimiˆ©Z@@: ˆˆì¾æ¾[@Žv X X"ŽS¾¾SS©¾j©T¾¸©Ìj"jj©[“ËT¥©ÌËTËTO‚Œ¬‘ÂŒÕlßZ^oooŒ¼Œ«Œ«½†¼¼¼Ò¼¼‡Ð«jŠ«¼ÒlU««l‹¾«ÐÒ‡‡ŒhÒ»«Ðpk«‡¼ÐÐÐЇҾ‹U‹‹…hR¿»jÎχÐШ¬ZŒ¬V¾ŒŒŒ¼ŒŒŒŠRj¨¼Ð¨l«lŒ…l¼jŒ¨6‡‡‡Vh¬‡j‡¨½½ˆ½½½¨¨©‡½ˆˆ½Ži:¨ˆìZr :Ž 숸¾@v: v Á©iSj¾Sj©¾¾j¥¾jÌjjjj¸©©TË©åTÌËTTåTË˼«‹Œ]Ä«¬›oooŒÒŒ«Œ«½†‡¼¼‡¼¼¼ÐϾŸhh«l‹«Œ«‹jmЇÐмhÒ†ŒÐˆŠ¼ÐмЇ‡‡ÒSY†…‹l†¼†Š»jμŒÐÐЇŒŒ¬ÒjkŒŒ«ŒŒhŠRÁ¨»¨ÚlŒ99U9‡jŒ¨¨‡‡6¬hVÐjШ¨¨ˆçëÚ‡½©Ð½ˆˆˆ½i:¨ˆ©m@: @@` Žì¾¯@ Ž vv:vÁ©ˆˆ¾SpSj¾¾jO¾jÌjjjjjj©TË©¥T©¥T©©åO‚“Œ®ŒZojCow v@v@X: ŽjŽ¾¾¾XˆS¾¾jT¾¾"jjjj!S[©Oj©ÌTÌjT©jOË“ËËËåO«Á›)o‘«ÒҌҫ¾†¼‡«»¼Ð¨Þ…jª¼¼h‹UR»ŠYp҇ЌŒol‹«Ð¸¼Ð¨èèШЇÒS¼Þ¼l††‹Š…j¿¼«†¼‡¼‡ÐÐÞjª‡Òll««U…Á†ÑŒÚŒl¬9‹lÐpm6m‡ŒŒ‡Ò‡Ðj‡¨¨¨¬Vi¨i¨©Ð½çƒçˆi½m½©¬i(@V@%@Vr [w @ vŽŽ©ŽˆjˆXˆ¾¾¾jTˆjjjjSjSp"©TjÌÌTÌ©©Tj“ËTËåËåTTp^<<‘«ŒŒŒŒÒˆ†‡Ð¼ß¼ÐÐÞ†pk«h†‹U‹»ŠYíÒ‡¼ŒŒoll†Ï¾Þ¨Ð¨Í¨¨Ð‡ÒSŠ††«†‹†‹Š…j¿Ï†«h‡‡ÐШ¼jª¼‡«$«l8…©†»‡çlŒ9lYl‡(•ZŽ‡¬Œ¼¼hÐjÒ¨½¨Ð‡¨i¨¨©¬iˆˆ¾½i½¨½©Œ%mˆVVV%@ vw í@@@mˆTiˆjSŽX¾¾¾j¥¾¾j¾S'>¾'¯©ËÌå©TÌ©Ì©jT‚TåËËËTTË\S!p¯©O©©jåÌÌ©"jO‚TåËËTTTåOoo‘lŒ«l««¾†‡Ò¼††¼Ò‹‹jª†RR»l‹UŠŠpoÒÒ‡ÒŒŒŒŒŒÏˆ»¼Ð½¨ÐЇ‡ÒSŠUUl…‹h«‹»j¿¼hh¼¼‡ÐШÐjªŒ‡¼«‹lŠRÁŠŠh½ll9Ò†lÐZtZZVVŒi¬¼‡jχ¬‡‡¨mVVЩ‡m½ˆˆç½½½¨©¬m:m@@@ˆmV ¯.````Emˆ"ˆ¾¸¾ˆXS¾¾jTˆ¾SjSp!¾pj©O©Ì©å¥TÌ©jOË“åËTËåTåOË$‘«Òl‘«Œˆ†Ð¼¼Ò«ÒÐlªjª†R††R$#kŠm«Ò¼ŒÒ‡‡Œ¼ŒÏig¼‡UUiÐЇ¬ˆŠoYU‹l†«…»jª†Œ¼¼¼ÐÐШÐmªŒhÐŒ$«Š…©9k‡ÚllŒ‡†l‡pY9VZZZVZ:‡jϬm‡Ðim99‡©¬mii½½½ë½½©ŒmŽ@@%@@(Svv.`````E@X©i¾jˆX¾¾¾¾jTS¾pSp'''pj[O©©©Ì©¥åjj“‚TTåËåTTTOË‚ÒŒŒll«Œˆ†¼‡ÒŒ«hм¿jŠ†¼¼Ï†‹U7U©mЇŒÒ‡¬¼¼Òψªh¼U‹®UiЇjŠo8oU‹†«‹»©¿†¼¼¼¼‡¹Ð¨ÐSkŒ¼ÐhU«……ÁŠ‡¨llŒ‡†l‡>oZŒŒZZZZZ¬½«¬‡‡¨¨%ŒŒÐ©¼mi½Ž½ë½½ë©ŒmŽ:%@ @%r@]@`c`E@ˆTiˆ¾ˆXˆˆ¾S¾Tˆ¾'SpvX''¯©ËjT¸©¸ÌTj©T‚©TåËåTTåËË‚TŒ¼Ò«Œ«¾†¼¬Ò¼h¼¼Ð†jª†¼h†h…‹8‹jmÐÒ‡¬‡¬Ð҇Ͼ„«Ð‹UUŠ†ˆjª«‹oU‹Œ‹Š…©Î¼¼¼¼¼‡é‡¨Ðj‰lŒ‡Œl«……[V…‡Ð‘o«‡†lЯoŒŒŒŒŒZ+wVjϬЬ¨¨mШ‡¾Œ¨½imim½¨½ˆ‘mŽ:m@@m@r ¯] @```` ŽTjˆ¾¾ˆXˆ:ˆjTSSÁ'pX''Á>©T¾©Ìj©ÌÌ©TTË©TåTåTTåOË“OTT¬¼ÒŒˆÑм¼Œ¼¼Ò‡«¾‰h6¼¼««»ŠŠjÑЇ‡¬‡‡¬¼Òψ§«¼«lUUŠRßjŠ†‹‹UU«‹8ŠÌÏÛййÐÐШоkŒ«hŒ«¼8‹j¬‹Ð¨l=Œ‡ll¼¯<ŒZŒV9]Œjχ‡¨‡¨¬V¨¬pBmm¨mm¨¨ŽæZmŽmm@m@rr@¯Z @@``` Ž©iˆ©SˆXˆiˆ¾TÁpÁpÁ'Xp'j©¥¾©¸jjÌ©j©T‚©TTTåT©TËËOTTT˼ŒŒ½†Ð‡hÒ¼¼¼¼†¾ª¼‡hÒ†R‹ŠUjlÒ‡¬ÐÐЬ¼ÒÏSŠl¼h«UUŠlßjŠ¼Ï«$‹ŒlU«ÌÏÐÍÍÍÐйШÐj‰Œ««««h8…ˆ¬Š‡ÐllŒÐ‹l¼¯<ŒZŒVZZ]w¬j¼‡¨¨‡¨m9¼¬!´.Hm¬¨¨¨¨jZmm:Ž@m@EV ¯Z: @` `@Ž©iˆS¾©iˆŽˆjTS¾ˆXS'vXp¾©Tj©Ìjj©jj©TË©©T©TT©TåËO“TTTOŒŒˆ†‡‡ÒҼЇ¼‹jª¼hŒh†«‹‹m®¼‡ÐШ¨Ð¼¬Ïi¿l¼ÒhU‹Šlhìg¼¼h†R‡h‹»¸»ÐÍͨۨۨ¨ÐS­l«ll‡hŠ‹j¬ŠŒhl«l‡«l¼>oVŒVŒ9=](ÒPÏШ¨¨¨¬ŒŒ‡j´.EHHcmˆ¨½æZm%:Ž@%@mr jZ:@@@ @@ Xj ˆÁ¾¾Ž[¨ˆST¾¾¾SSÁSppj"Tj¸jj!©PSjTË[TTT©T©TåË“T©TTåT«¾»‡Ð¼¼¨ÐІ‹jŠhhl†«‹‹;Š©‹¼‡ÐÐÛ¨¨ÐІŽ5««‡¼o…Š†«ì¿¼¼¼h¼‡¼‹…j»Ð¹¨ÍÛ¨Û¨èÐX‰hŒl«‡Ð……©9kŒ‡«lŒ‡†l¼¯=ŒŒrŒŒZZ¬j«‡‡¬‡Ð‡¬‡Ð¯E+HcHHm¨jw@mmŽmr@Žr@Á9m@@@@` ijŽˆÁ¾¾ˆˆiTjT¾p¾¾¾Sjj¾j¯TÙæj©j¸j¾jTË[©©T©©©åTËOTT©TTTTˆ†ÐÐÒ‡ÐШ†‹¾Š†hŒlll‹;Šj‹¼ÐШ¹ëÚЇÏiŠll‡hU‹‹«¼j§¼Þ¼¼h¼h†»Ì»¼ÐÐÛÐÐÛ¨½ÐSŒ¼«l¼‡‹¿ÁŒ‡lŒl‡ÏŒ¼>=VVVŒŒVVrÒj«¬‡¬‡m‡¬¨¨p]EHH H`H¯Zí%mŽ%r@@m:¯‘: @ ` @:Ž"iiˆˆSˆŽˆˆ¾TˆS¾¾jj¸jjj©åjÌ©©jj©SjTË©©T©©©©TTËO©©TT¥TT4†Ð‡¬¼ÐÐм‹¾ŠlllUUlU‹p‹¼ÐÐÐШÚÛÐψŠ‹l¼¼‹l‹h¼j¿†¼¼¦ê¼†††©ÏЇ¦ÐШۨ¨Ðm‰Œ¼U‹Œh‹gˆVŠŒÐlll‡†l¼p=ŒŒVŒŒVŒŒ«j«Œ9ŒV%¨¬¨Ð¯B]E++HHHH >@@@mŽmr@mm@[=::v@@@@ ŽjmˆXˆ¾ˆˆˆˆjTÁ¾¾¸¾¸¾jjjjT[æjjjPj¾jTË[©T©©©©TåËË[©T©©TT©©Ð‡‡Þ¼hм‹jk$«ll<$o;Š©‹¼ÒÐÐÐÍÚ¨ÐÏiŠŒlhßU†‹†Ò¾¿†Ï¼¼Þ¼††»jϹ¼¼‡¼ÐÍШШŒŒhloŒŒŠ§¯Šªl‡llŒ¼Rl‡p=VŒVŒŒVZVÒj«ŒŒ9Œ¨m¨¨jB+E++HHHH ¯]@@mmm@m@m@jZ:Žm@@@ ½©mˆÁˆˆˆˆˆˆ¾TÁˆ¾¾jÙj¾¸©©TjjTÌjjjì©TË[©©©¯"©TË“"©T©©TTÌ©TЇ޼Œ«¼‹ˆnUlh=U$UY‹ŽÑ¼Œ¼Ð¹ÐÍÐÐψ‹ll«†lhŠ«‡j¿†Ï†¼¼†††»©Üм¼¼¼‡ÐШоŠ¼«l‹l¼k…[ŠUŒŒ«ŒŒh‹l¼p=VŒV9ZVŒV«jo=ZrZZ¬m¨‡jB=(w+HE H+v]m@mmm@mmm ©9:Ž:@@@@@i"mˆˆiˆXˆˆiSTˆSS¾Ù¾¸¾¾©jTì©Ì©T¾jj©T˯©©">¯[©TËTj©T©©TËT©T‚¼¼ŒŒ¼†¿Sk‹ll‘#o=YŠj‹¼h¼ÐÐШÐÐÏŽkl«‹ll†¿«¼j¿†«¼¦¼¼R»»j‹Ð¹Ð‡¼¼¼ÐÐÐS¿Ðhl‹lhŠ…ÁŠ‹¼Œll‡‡ll¼poVŒŒ9ZVŒŒ«jU==ZZZV¨V¬j]=E+++H H.[@m@m@@@m@m@©VŽ:m@@@@:Ž"miŽXŽˆˆˆŽ¾Tˆpˆ¾¾¸¾¾¾¸©åjjÌæææTì©TË[©"¯¯>[©©åO©©T©©TO©©TOT¼Œ«†«‹jUllo)<<;Šj‹¼‡«‡Ð¹¨ÍІˆkl«lU¼¼U«‡j‹¼†Ï솋‹‹¾¿†iÐм¼‡Ð¨Ðpª‡‡lU«‡Š…ÁVŠŒŒŒl‡¨«l¼[oVhVŒŒŒŒŒŒj‹l=‘ZZZ(Œ¬j<](+H+H H.v@í@mm@@m@m@jŒŽŽ:%: @:ŽjVŽˆˆˆˆ¾ˆˆ¾Tˆpˆ¾Ù¸ìSˆÌjTj©Ìæjj©ÌËTË[j¯¯¯>¯©©ËOj©©©"©T©©TOTOh«R‹ŠjUU=<<<<\ŠjŽ¼¼h¼Ð‡ÐÐІln«¼‹l¼¼‹†¼¾¿¼»»‡Ð‡†……¾khh†¨Ð‡ÐШÐSk‡ÒUU«‡……¯…ŠlŒ¼h¼¨Ïl¼>‹h‡¬Œ9rŒŒŒ¾«99‘Z9ZZŒV¾]=(Ew+HHH]X]@@m@@™mmm@jŒˆ:@m:@@ŽjVŽˆˆŽˆ¾ˆˆ¾TÁSˆ¾Ù©¾ˆˆ¾jTjÌÌjjj©ÌåT䯯¯"¯>["©ËO[©T©"©T©jTOTOO†llŠSYU=oo<<<;UjѼ¼‡ÞÐмއψ‹¼‹l«¼‹R¼ˆ¿¼¼»¼¼‡Ïl»jª†¼h††½¹Ð¨ÐSŒ¼¼YoŒ¼…¿©ÐªŒl‡Òl‡†l¼pU‡‡‡VVŒ9ZŒj†‡ŒŒ9ŒŒZZŒ©==r(+++ ]¯]@rm@@r:mr@[Œˆ:mm:@@ˆjmiˆˆ:Xˆˆˆ¾OÁˆ¾ˆƒj¸ƒSjjTìÌææjjææTÌ˾¸¯"j>>¯TåO[Ì©©"©©©jTOTTOTl‹ŠÁ;U‘Uo<<<;‹¾‹‡¼¼Ð¨Ð‡¼¼†ˆ‹lh‹Ul†‹†¼j¿¼Þ«¼¼««†…Sªhh¼¼«…l¨¨Ð¾k‡ÐoYh‡ŠgÁŒŠlÑŒhŒ¼‹l¼>l‡‡m‡¬ZŒŒÒ¾Ï¬‡ŒŒŒVŒZŒj=@(wHH H]>]@rm@@í@mV@jlˆ:mŽ:mŽ:ŽjmiÁi:ŽˆŽˆ¾TŽÁpjj¸¾¸¾jjTìj©æjjjjå©äˆ©Ìj©[¯©©ËT©¥T"©"©©"“OTTOTO«ŠS?o=ooBFBY‹p‹¼¼¼Ð¨¹Ð¼¼†ˆªl¼‹Ul«URÞj‹¼‡h»h9‹……¾ª‡hÒ¼R‹loo¨jŒÐÐUUlÒk…Áªg««l«lhll¼p‹‡¨‡‡¬9ŒŒŒ¾¼Ð¨¬VŒVŒZŒ¾=ZrZw+++HB¯]rrm@@@mmr@¯9ŽmŽi:m:m:jmˆˆiŽŽˆiŽˆTXXp¾ì¸¾ˆ¾jjåì¸ÌÌjjjj©©ËìjÌj©Ì©©©ËTj©T©"©T©jTOTTOTTT…j?Y=oo])t…j†Þ¼Ð¼Ð¹ÐÐÐÏi‹h«‹‹U«5«Ïj»¼¼¼»«hŠ‹»¾ªhhŒ¼l»lo=«jª‡ÐlU«¼ŠR¯¬kl«l«ll‹l½ml6Ї¬ŒZŒŒŒj†¨¨ÐVŒV¬ŒV¾‘9@ZEE ]>@m@@@ímmmV@j9imˆmmm:mŽ!mˆ¾ŽŽ iiŽSTŽvDpS¾¾SSjjå¾Ì©Ìjjjj©ÌˈjÌÌÌP©Ì©ËTj©Tjj©©Ì"TO©T¥TTTOÁno‘o=]•]ZUj½¼ÐÐЇШЇώ…¼ÐUlU¼‹†Ïƒ»¼Ð¼l†¼l‹…jghŒ†l†ll<=Ñj§‡Ðl‹«hŠ‹Á»‡««lll«…l¼>U‡‡¬¬9Z9Z«¾»Ð‡VVŒŒŒŒ¬¾=Z%(w+E+H.¯Z¬@í@rmŽmV@jl:¨mŽ¨:im:!¬ˆ¾Ž:iÁˆ½STXvXXSj¾¾iìjå¾ÌÌÌæjjj©ÌËŽ¸Ì©jÌ©Ì©ÌOj©¥j¯"T©j©OTTTTTTT©nll==‘]•\Äm†ÞÐйÞÐÐмÏ:¿hÐll‹¼‹†¼¾…м¼†R¼†‹…jªŒhl«Rll<=‹jhÞ¨lU«¼¿5©Š‹¼½««llUl¼¯l¬‡¬V9ZZŒŒ¾«¼‡ŒŒŒ‡ŒŒV¾=9%rZ(++H]XZm@™r@m:m¬m©¬Žmmimm:mŽ¾rˆˆŽ:Žiˆ½pTÁvXXSì¾SˆjjT¾jÌ©Ìj츩©O½j¸j¸ÌÌjÌTOp©T©¯j©©j“O©TTTT[TT"ll=‘‘‘])®pÏÞ¨ÐÍÐймώŠh‡‹ll†…†Þj»¼Ð¼¼l¼¼l…¾ªR9l$Ulo<=ш¼ÐÐll†¼‹…¯ŠÑ‡¼Œ¨¼ŒŠl¼mlh‡VŒ9ZŒŒÒ¾†h¼ŒŒ6¬Œ9¬¾=Zm(Z(++H.>Œm@r@mmmmVm©mˆŽiŽm¨Žmi!VŽˆ:m:ˆˆˆ¾TXvXpS¾¾¾j¾¯©ì©Ì©æ¸jj©©ËˆjjjÌ©jjÌTT©©j©jj©"j©O©©TT©TTT©TŒ‘=‘=]Š®Ž†Ð¨ÚÚÐÐÍÐh¼i¿hÞ«l†Ï‹Œ¼P»¼¼‡¼Rl†«…ˆklllUo$Uo=ÑS§ÐÐll««……¯Š‹Ð‡Œ¼Œ¨hl¼plŒ¬¬Œ9ZZŒŒ¾†¼¼ŒŒ¬‡Œ9¬S==m(rrZ+H+>Œmmrr@mŽmVm©mŽŽëŽmimmijVŽƒŽ%:ˆ½ip©vXppp¾¾Sjpp©¾ÌÌÌÌjjj̩˽jjæÌ©j¸ÌTTjÌT¥!"©"j©O©TT©"“"T‚‘]]‘]]®S»Ð¨Úè¨ÛÚÞ¼Ïik¼¼ll‹«†«é¾†¼¼Þ¼†††«…i;U9l®$l‘<=ÑS‡‡Ð#‹lU‹¿pŠ‹Ð‡«¼ŒÒŒ½‡p«Œ‡¬ŒZ=9ŒŒ¾†ÒhŒ9V‡VŒŒ¾==%¬rZZ+H+pŒmmrr@mmm¬Ž©mŽŽvŽÁ½ŽXˆjmi¾immiŽ:ÁTXXXÁS¾SS¯¾¯©¾©©Ìjjìj©©ËˆjjæTj¸jj©Tì©ÌjjT©jj©O"T©T[["[T‚T9 200 125 1 +nnnXCzAd‚š‚gtT‚X?iexT‚b€‚‚feeddgZCXXC2X23“udiC‚Cwd–hf‚f‚k‚‚‚ugXkfyk/n/k‚„XTkk/kffk+„3n D]kGG`'\kYY]]YYY‡D‡Vull•lll‘ggVug‘gY0UUlgBEEE\„„AA„„V¥„ Q VvŒj„V„~ŒvQV~vrVQvVVVVVVvjQBvHHHBa’Uguuuu‡l{G66]::"JJEvllˆgllˆol„E!Y0lA„gˆA‘„B‘„„b„„„V„v,„„„gˆ„A\AB\VVvVVVA–j\VVvvr¥ŒrvaVVVVVv(VVrjŒv’r¦<’’j¦†BB’’<’j(Bj<¦‹jBBBBv’ajkkDy”A‡fyuuu@f@DE.//kfYufff„kyy‡‡‡Yuƒœy+ffDy@YuyVYYUƒœluƒY‡Y„gUƒUUu@‡‡U{G66]::olEvl•gg•lˆJ6ˆE\6YJg„ˆ•A„„v„„„„˜„¤~„g„„AAˆA„\\v\VVVV„{j„VvvQ¥r’’¦Vv~VVVvŒVVrjŒBr‹j‹’’jj‹BvBBBBjBvj‹j‹a†BBBBvBajjTy@X‚v‡TUuuuYu‡kA3//kyyffykyYY‡u‡‡ƒœ+fufyYu@uyVkuƒœ‡YuƒYUYVD]gUƒfu‡0l\G6]6]:OJl—ƒgˆ‘EoglYˆE\YoJ‘„ˆgA„„v„„‘„„˜„„~vUg„AˆA„A\Av\VVVVVVV¦VvvQvŒvŒrr†VvVVVvrvv’jŒB’‹’758:7?::7??:38:>8//:0/?3=>>353575=>8/=3>7?:5831>1?7=/73080=88:7171=30?05133101:5775>=::=B?8888:75>=55:>:>55888887::::8::588::7=:=5555835575555855513318::55555888=87888>??=>>:===>?N^JA35558:B58=>B>??A>==>81?5>10:A58573/=7=1738503>83:7:3>?0/////8?/77815005/5803:7:?5837778W`^GLBigiggggffifffbaabaaaaafbfdbffafbdfafbffigiggggfiifffbfabaaaaafbffbfffbfffefafabfffbh^Z_^^GLPaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkhkhkhkhkkkjkkhkhkhkX_^\JLVdhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM__\JJQakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkL_^\JJMaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkL_^\JIOdikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM_^\GGVbkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM__\GILaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM_^\GJLfhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM__\GILeikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkM_^\GJLbkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkL_^^JLQahkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF^]\JJPakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^\GLVdikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^^GJMakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^^GJVbikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^^GGMajkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^^GJVdikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF_^\GJMakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^\GIVbikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^]\GGPakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^\GJVdikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_]ZGNVbikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^^\GNPdkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^\JKUaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^^JJPakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^^\GJVaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^\IJL`kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^^\GJVaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^^\GJVaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^]ZGILakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_^ZGJMaikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD_]\GILbkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD^^ZBNTfikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkA][ZBN[ekkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkA][WBNTfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD\[ZGNPiikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD][WGN[fkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD]ZWBNXfikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD]ZWBNPfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD]ZZGNRgkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD][WJN[bkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkD]ZWJRTfikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkDXXWBN[gkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkAXZWBNTfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkAXZWBNTgkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkAZZWBNRfikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhAXZWBNRakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkAXSWBNTfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk>[ZZBNR>=:85:857:1085/50051857/>8/////0?>387:38>305837153/075/=355=7:/35585A:01>5??>B>?8>?8>5[[WBN\````````\^\^\\^^\^^\^^^^^^`^^^^^\`^^^^^^`^```^^``^^`^``^`^^^^`^^^^^^^^^^^^ddddc_dcd``^^\WB`dd`^^^`^^`^^^^^^^8888:53:>=55:5878:3>1>:77:08>:>:8?88>>8?BB7ABA>??8?>?````````````````d`ZWN``^^^^^^^^\^^^^^^^A35558=>B58:>>==>81?5>10:A58573005/5803:78?5858===>?\^`^`^^^^^^\^^\^^^``NNBkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkF[NPkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjL\LVjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhFXJQhkkjkkjkkjkkjkkjkkkjkkjkkjkkjkkkkjkkjkkjkkjkkjkkhDNNTjkkkkkkkkkkkkkkkkjkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkjANNTjkkkkjkkkkkkkkjkkkkkkjkkjkkjkkkkkkkjkkjkkjkkjkkkjDWRTjkkjkkkkkjkkjkkkkkkjkkkkkkkkkkkkkjkkkkkkkkkkkkkkkAWNPjkkkkkjkkkkkkkkkjkkkkkkkkkkkkkjkkkkkkkkkkkkkkkjkhANRPkkkkkkkkkkjkkkkkkkkkkjkkjkkjkkkkkkkjkkjkkjkkkkkkjDNRPjkkjkkkkjkkkkjkkkkjkkkkkkkkkkkkkjkkkkkkkkkkjkkkkhANNPjkkkkkjkkkkkkkkkjkkkkkkjkkjkkkjkkkkkkjkkjkkkkjkkjANNTkkkkkkkkkkkjkkkkkkkkjkkkkkkkkkkkkkjkkkkkkkkkkkkkkARN[??A??=>?>A???AAA>>@?A>B==8AAB??BBBBJJJGJABBAA;D\W^^^^\^\^^^^^^^^^^^^^`^`^^^^^^^^^^````^`````^`^``^`\\^^_^^^^^^^^^^`^_```````^`^`^```````````````````````^ZF 48 10 1 +3//8@58553/=5=35385/3=838583>>///8>/55835///5@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkB@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkP@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkV@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk@Jkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk@@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk@Jkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk@J88@58553/=5=35385/3=838583>>///8>/55835//55@^^^^^^^^^^^^^^^^_^_^^^^^^^^^^_^______________WOODA_P 242 +K-R$Vƒ=náQAÂI#ZÃIReb%VR&VGZªf s¡Ia=!1âQÂM‚AV£E$ZVE^¨j©jHZ w-{N`AA9ZâU¢ICf#^b=ZãQÃM"1Db$^ƒAäQEb†j¤EVff&Zgb¨nG^Ér‰f {ªjëráY¡MaA!5^á(ÂQ‚E#bãU£IZc=ejÄM%^†nåQFbˆj-à, 9á]IA=1bâY¢M#fbA^ÃQDj$bƒE^Ef¤IZfj&^GbæQhf‰j(ZªnËr ìv@A¡QMaE!9â]ÂU¢Q‚IbB=ãYÃU£McAEjÄQ%b^&bgjZ¥IGf'^©rÊvªrifëzŠj«n  =`I€Q¡UAAÂY‚Mã]£Q1ƒIbäY%f¤MFj‡vÅQgn^'bˆrhjZë~ìzà09¡YQaI!=5Â]¢UBAÃY"9ƒMfä]ÄUbåY&fÆQhnËzÌv AUAE¢Y‚QbIÃ]"=£UÄY¤Qå]bHj(bà4= EYaQAI!A‚U£YƒQcIÅY'jHnÀ0à8A IaUAM!Eá4bQƒUÄaAQAá8WOODB_P 238 +K-NsÊfëj o-s)‚="-R$Vƒ=åI sÀ A5¢E#ZÃID^R%VR„=&Vg^GZh^‰bªf-w¡Ia=!1-âQÂM‚AVB5£EVE^ÄI%ZF^åM¨j'VÉnHZ,{à(ÁQEZâU¢Ib=ZãQÃM"1$^ƒAefäQEbC5¤EV&ZÅIgb¨n‰fªjërOÀ$1@=¡M!5á(ÂQ‚E#bB9ãU£I-ZÄM%^§r„AgfVÆI©nÊribÁUIA=1âY¢MbA^ÃQ"5$bƒE^äUEfC9¤IZfj‡n&^¨rÉvhfêz‰jªn  5ÁY¡QMaE!9â]ÂU¢Q‚IbB=ãYÃU£M$fâ(EjÄQ%b^fn„EåUFf‡rgjZGf'^©r‰nªr)ZÀ(`I¡UAAá,ÂY‚MbEã]£Q1bäY%fFjÅQ^'bÊzà0@E€UQaI!=5¢UÃY"9ƒMä]ÄUbåY&fhn^Hf $À, AUaMAE‚QbI£UÄY¤QæY'fí~à4= E@MaQAIbMÆU(fIj^€  (À0à8A IAM=á4CEWOODC_P 168 +K-)¢A‚="-à$£A)ƒ=C1À -AA5á$ÂI¢Eb9ãMÃIReb%VR&VD1¡Ia=!1-ÂMÁ ‚AB5£E$ZVc9E^ÄIà( 5ÁQEA9ZâU¢Ib=ZãQÃM"1$^ƒAäQEbC5¤EVÀ$1@=¡MaA!5á(ÂQ‚EB9ãU£I-Zc=ÄM%^#1åQ„AD5à, 9ÁUIA=1âY¢MbA^ÃQ"5ƒEäUC9¤I  5@A¡QMaE!9ÂU¢QÁ$‚IB=ãY£McAâ(ÄQÀ( =¡UAAá,ÂY‚MbE£Q1ƒI€à09@EQaI!=5¢U¡ BA"9cEC= $À, A@IaMAE9Á(‚QbI"=5â,à4= EAI!Aá0€  (À0A!E=á4Á,¡$€$WOODD_P 176 +K-)"-c5à$R$V)ƒ=C1d5À AA5á$¢Eb9ãMÃIRäM%VR„=&Va=!1-âQÂMÁ ‚AVB5£E$ZVc9â$E^ÄI%ZåMà( 5ÁQEA9âU¢Ib=ZãQÃM"1$^ƒAäQEbC5¤EVd9À$1@=¡MaA!5á(ÂQ‚EB9ãU£I-Zc=ÄM#1åQ„Aà, 9IA=1âY¢MbA^ÃQ"5ƒEäUC9¤IÅMd=  5@A¡QMaE!9ÂU¢QÁ$‚IB=ãYÃU£McAâ(ÄQ„EåUÀ( =`I¡UAAá,ÂY‚MbE£Q1ƒIäY¤M€à09@EQaI!=5¢U¡ BA"9C= $À, A@IaMAE9Á(‚QbI"=â,à4= EAI!Aá0BE€  (À0à8A!E=á4Á,¡$ ,METAL_P 31 +K-œs9gcÖZ”RsNRJB­5Œ1h!J)H!'!æåÅÄ¥¤£ „aBA!BMRED2_P 108 +„P„LdLcL„HdHBLcHCHBHcDbDBDc@!DB@c<D!@B<@!h|whN" + + + + + + + + + + + +6Yuw÷ß‚†††††òòñññòþþþþþˆˆˆˆˆˆˆˆˆˆˆˆˆ÷ôôõõõõõ + 2\€øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøæÉĵÑßåææíæååÜУ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6Uwôôwh\;& + + + + + + + + + + + 5hu÷Ȭ‹†††òòññññþýþþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷ôôõõõõõ + + + "G€|øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøÖÁÂñÔÔÔßÛÐÔ¹£‚ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EUww÷muuh\F, + + + + + + + + + ?nu÷Ó±©‹†òñññññýþþþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷ôôõõõõõ + + + + +3Y€|øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøææ×ÄÁ»Ú¬¬¬¬£¬š” + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@hwófsup\N + + + + + + EdpööÕÂòñññññýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷óôõõõõõ + + + + + + +P€€|øøø|øøøøøøøøøøøøøøøøøøøøøøøøøøøøíæìÉÀ‚”––‘‘‘‹ô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A[A:#"CQhuuiqduhuY; + + ?VXöè¹òñññññþýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷ôôõõõõõ + + + + + + + + +?W€€€øñms|øøøøøøøøøøøøøøøøøøøøøøøøøøøíææ샫Œ‹ŒŒ‹‹‡ôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.KeejA,"C^huh^biuuhYG" (BBBññññññýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆôôõõõõõ + + + + + + + + + +/hufbB_y|øøøøøøøøøøøøøøøøøøøøøøøøøøøøììåÄ ŒŒŒ‹††ôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.A[huwwQ2"IQhh\^]guuuYM& Jññññññýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆôõõõõõõ + + + + + + + + + + +/9BB0AZ€øøøøøøøøøøøøøøøøøøøøøøøøøøøøæíêÞ°˜Œ‹‹†ôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.K[hgnu€uQ2"R^phd^]guuukY+ +ññññññýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆôõõõõõô + + + + + + + + + + + + (0&N€|øøøøøøøøøøøøøøøøøøøøøøøøøøø}íííÓ½¤˜”‹ôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + +%AehfñB]pwQ35Ghupi`ovkN+ + ññññññýýýýþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõõõõõôô + + + + + + + + + + + 2h€øøøøøøøøøøøøøøøøøøøøøøøøøøøøøíåÙ¿®žôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + +>[hwõB/?IpuI "Chuuulÿ}wöuuW1 + ññññññýýýýþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõõõõõôô + + + + + + + + + + + +  + +R€€øøøøøøøøøøøøøøøøøøøøøøøøøøøøøÙƒÌôôôôôôõ + + + + + + + + + + + + + + + + + + + + + + + + +":††††††††††††††††††††öö÷÷÷÷÷ôôôôôôó ñòòòòòýýýýý #Kejy}ùùùùùùùùùùùùùùùùùîøíÓ«˜ˆ‡‡ˆ‡ˆ‡‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.Keej†††††††††††††††††††††öö÷÷÷÷÷ôôôôôôó ñòòòòñýýýýþ :[tky}ùùùùùùùùùùùùùùùùùùøùìÙɼ›Œˆ‡‡ˆ‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.A[huw††††††††††††††††††††††ööö÷÷÷÷ôôôôôôó ñòòòòñýýýýý 4Oekk}ùùùùùùùùùùùùùùùùîøøìøøìí×Å«Œ‡ˆ‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.K[hgnu†††††††††††††††††††††††ööö÷÷÷öôôôôôôó ñòòòòñþýýýü 4>[\y}ùùùùùùùùùùùùùùùùùøääìøøììáÙ®Ž‹‹‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + +%AehfñB]††††††††††††††††††††††††ööö÷÷ööôôôôôôô òòòòòñýýýýü '[Py}ùùùùùùùùùùùùùùùùùøÚ¹ÊÜÙìøøì샼’Œ‹‹‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + +>[hwõB/?†††††††††††††††††††††††††ööö÷öööôôôôôôô òòòòòòþýýþü ASryùùùùùùùùùùùùùùùùîøìѱ©©»ÕìøøìçĨ›—Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷ôôôôôôõ + + + + + + + + + + + + + + + + + + + + + + + + +"hw\P" + + + + + + + + + + + +6Yuu÷ß‚†††††òòñññþþþþþþˆˆˆˆˆˆˆˆˆˆˆþ EUk}ùîøìãààÝÝÒãã×ÿÿÌ­ŸŒˆ‡ˆ‡‡ˆ‡‡ˆ‡ˆ‡ˆ‡ˆ‡‡ˆ‡ˆ‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡÷÷÷õôôôóóó + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6Uwôôwh\;& + + + + + + + + + + + 5huêȬ‹†††òòñññþþýþþþˆˆˆˆˆˆˆˆˆˆˆˆ Cc}ùùùøîëÿìÙìììììììÉ­•‘ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷ôôôôôóó + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Edwwömöuh\F2 + + + + + + + + + ?nuu÷ÓÚ‹†òññññþýýþþþˆˆˆˆˆˆˆˆˆˆˆˆˆ ,PyùùîîùùøøììøøîùøìøøÙÖ½˜ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡‡ˆ‡ˆ‡‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@h€ó]õuh\N + + + + + + EduööÕÂòññññýýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆ &Or}ùùùùùîîøøîùùùîùîîøìÙÅ´—‹‡ˆ‡‡ˆ‡‡ˆ‡ˆ‡‡ˆˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A[>>#5Qhuugdquh\Y; + + ?VXöõ¹òññññýýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ *Otyùùùùùùùùîùùùùùùùùùøæ×É«—ˆˆ‡ˆ‡‡ˆ‡ˆ‡‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.KeejA,""C^huh^biuupY=" (BBBñññññýýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ #Aejy}ùùùùùùùùùùùùùùùùùùøíæÓ«˜‹ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.A[hu€uQ2"IdhhhW]guuu\N& Jñññññýýýýþþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ >[zky}ùùùùùùùùùùùùùùùùùùøøìÙɳŒˆ‡ˆ‡‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ö÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.Kehgsu€uQ2@^hhd^]guuu€Y+ +ðññññýýýýýþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ 4Oekk}ùùùùùùùùùùùùùùùùîøøìøøìæ×Å«Œ‡ˆ‡ˆ‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + + +%A[hfbBXu€wQ35Ghupi`ovkN+ + ñññññýýýýýþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ .>[kkùùùùùùùùùùùùùùùùùùøääìøøììáÙ®Ž‹‹‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷÷÷ôôôôôôô + + + + + + + + + + + + + + + + + + + + + + + + + + +>[hwõB/?IpuI"5huuulÿ}wöuuW1 + ñññññýýýýýþˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ '[PkùùùùùùùùùùùùùùùùùùøÚ¹ÊÜÙìøøì샼’Œ‹‹‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷÷÷÷÷ôôôôôôõ + + + + + + + + + + + + + + + + + + + + + + + + +"3@ k[C1) ðññññýþýýüü30011) ñññññþþýýýü*LqzúúúúúúíìÁ³Š‰‰‰‰ˆ‰ˆˆ‰ˆˆ‰ˆˆ‰ =W‚~ùùùøøøøøøøøøøøøøøøøøøøøø}ììì὞’£ËæìøøøøøøøøøøìêÚ³™Œˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷ôôóóóóó 0Fouq`VVio`<301) ñññññýþýýþüAjqúúúúííìµ’‰‰Šˆˆ‰ˆ‰‰ˆ‰‰ˆ‰‰ˆ .g‚}~ùøøøøøøøøøøøøøøøøøøøøøøøøììì쬚¦ÆæãìøøøøøøøøìãêÒ»–Œˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öôôóóóóó 0@fulZV)_oufK% ñññññýþþýýü +Dq~úúúúííßÅœˆˆˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆˆˆ  J‚yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøãĶ˜š´éã÷øøøøøøøìãêåÓ³Œˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööôôóóóóó 0 fugH@%Vis11! ñññññýýþýýý8b~úúúúíåÁš‰‰‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰‰ 2^yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø㯣®êìììøøøøìãæßسšŒˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööôôóóóóó 0 ou^>4%)11) ñññññþýþýýý"NqúúúíãÛ“ˆˆˆ‰ˆˆ‰ˆ‰ˆˆ  R‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøº©®ßìãììøøìãæßÛ¤šŒˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööôôóóóóó 0Ffuu`3)) ñññññýýþýýþYr‚~úííìÙ¹’’’˜’ˆ‰ˆ *g‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøì½ÀÃô×êãìãêååÚÛ¤®Œˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööôóóóóòò 0FforA0  ñññññýýþýýý4C_zyùùùùÓÅ©¨þ¢Ÿ½¸¾¾½¨¨’ˆ IgøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøãæÏÀÁðÒÒÒßÙÛÒ»¤®ˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööóóóóóóò 0Fi Ø1 ñññññþýýýýý @Wy~ùùøì„ààààÖääÕÿÿǸ¡’ 9S‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøãæÕÀÅس³³³¤³ššˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööõööööóóóóóóò !011% ðññññýýýýýý De~ùùíøíëÿìÜãæãììãããÆ…˜ ,S‚‚}øøø}øøøøøøøøøøøøøøøøøøøøøøøøøøø}ìæãÌÆ®™–ššŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öõõööööóóóóóòò !1) ðññññýýýýýþ -SyùùùíùíøøììøøùíøøøøæѼô @Z‚‚‚}ðmr}øøøøøøøøøøøøøøøøøøøøøøøøøøø÷ãæÕЭŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öõõööööóóóóóòò  ðññññýýýýýý 'Pq~ùùùùùíùáøííùùùíùíøãÜôô 0 jgdCly}øøøøøøøøøøøøøøøøøøøøøøøøøøøìãåɬŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööööóóóóóòò ðññññþýýýýý  +P{yùùùùùùù~ùùùùùùùùùùøãôôô 0:¤C1 +B\‚øøøøøøøøøøøøøøøøøøøøøøøøøøø}ììæÔ…˜ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõöööööóóóóóóò ðññññýýýýýý #Mbly~ùùùùùùùùùùùùùùùùùùøôôôó %1'Og}øøøøøøøøøøøøøøøøøøøøøøøøøøøøììì×½§šŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõöööööóóóóóóò ðññññýýýýýþ  ;]{gy~ùùùùùùùùùùùùùùùùùíøôôôóó 9j‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøì÷÷÷åμ²žŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööööóóóóóóò ðññññüýýýýý  /Pngy~ùùùùùùùùùùùùùùùùíøøìôôôôóó  ,T‚}øøøøøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷æÜÏË…Ÿ—‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõöööõóóóóóóò ðññññüþýýýü /B]gy~ùùùùùùùùùùùùùùùùùøÝÝæóôôôóóó  Dk‚}øøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷ìáãɽ¬˜‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööõõóóóóóóó ñññññüýýýýü (]SyyùùùùùùùùùùùùùùùùùøæØØÁóôôôóóó *Tw‚}øøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷æåÕÇ·œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõöõõõóóóóóóó ñññññüýýýþü  BXqyùùùùùùùùùùùùùùùùíøìÙµ¥¥óóôôôóó 4_w‚}øøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ãêåÕƦŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõóóòòóóó ñññññþýýýýü "MlqùùùùùùùùùùùùùùùùùùøãÒ³š÷óôôôôóó F_w‚}}øøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷êãÀ§Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõóòòòóóñññññþýýýýü /Qyùùùùùùùùùùùùùùùùùùøøì×»š÷óôôôôóó 0Vk‚w}}}}øøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì÷êвŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòòóññññýýýýýü .Ny~ùùùùùùùùùùùùùùùùùíøìåÁš÷óôôôôóó 0::T‚w}}}øøøøø}}øø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì׺Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòòñññýýýýýþ  GgyùùùùùùùùùùùùùùùùùùíøãÊ¥÷óôôôôóó  )::_w}‚wøøø÷}÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì׿¯œŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòññüýýýýý  8ey~ùùùùùùùùùùùùùùùùùùøã×µ÷÷óôôôôôó CCï[w‚ì‚‚‚‚wwì÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷å׺ªž’ŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòñüüþýýý €gq~ùùùùùùùùùùùùùùùùùùùøæÅ÷÷ôôôôôôô  0CC:rg:Ø[poww÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìåÜÐȼ¡˜ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòýüýýýý 'Nyùùùùùùùùùùùùùùùùùùùøøø×¥÷÷ôôôôôôô %:C11CC: iowww÷w÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷w÷ì÷êêãã·˜Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòóóóóóó =lyùùùùùùùùùùùùùùùùùíøøøãÁˆˆ÷÷ôôôôôôô !1 !C)CVV[uwwww÷w÷www÷÷÷w÷w÷www÷www÷÷êß¹Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ïïðððþ÷óóóóóóó  +Xy~ùùùùùùùùùùùùùùùùùøøø÷Úˆ‰ˆ÷÷ôôôôôôô !%)1CCC[_moujuuwwouwuoufijssô‚÷÷÷÷æÓ±Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðïðððþþ÷÷óóóóôóó Lgy~ùùùùùùùùùùùùùùùøøøøì㈉ˆ‰÷÷ôôôôôôó 1)CC:CCïCCC::Cd:C1C11:Cdpw÷wìêÒ Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþý÷óóóôôóó 9cy~~ùùùùùùùùùùùùøøøøøøø쉈‰ˆ÷÷ôôôôôôó   +1%0011)1C) +1! +4%:kw÷w÷æÊŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþýþ÷óóóôôôó Sy~~ùùùùùùùùùùøøøøøøøøøøˆ‰ˆˆ‰ˆ÷÷ôôôôôóó FsowꚎŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþýýý÷÷óóóôôôô 7cy~ùùùùùùùùøøøøøøøøøøøøˆˆ‰ˆ‰ˆ‰÷÷ôôôôôóó   ::VkwåÂ’Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ñððððþþþýýý÷÷÷óóóôôôô  H‚~ùùùùùùøøøøøøøøøøøøøø‰ˆ‰ˆˆ‰ˆˆ‰÷ôôôôóóó   +)CCiwå´£šŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ññððñþþýýýýŠ÷÷÷óóóôôôô =W‚ùùùùøøøøøøøøøøøøøøøøˆˆ‰ˆ‰ˆ‰ˆôôôôóóò  )VköÜ©œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ññðññþþýýýþŠ‰‰÷÷÷òóôôôôô .g‚}~ùøøøøøøøøøøøøøøøøøˆ‰ˆ‰ˆ‰ˆ‰ˆôôôôóóò /M# 0V`uߺ©‡‡‡‡‡‡‡‡‡‡‡‡‡‡ñññññþþþýýý‰‰‰‰‰÷÷÷÷òóôôôôô  J‚yøøøøøøøøøøøøøøøøøøøˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆôôôóóóò ;PbJ<   +%VrõåÌ°œŽ‡‡‡‡‡‡‡‡‡‡‡ñññññþþþþþþ‰‰‰‰‰‰‰÷÷÷öòóôôôôô 2^yøøøøøøøøøøøøøøøøøøøˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆôôôóóòò ;Pnuu^>' 0Kfåå彡Ž‡‡‡‡‡‡‡‡ñññðñþþþþþþ‰‰‰‰‰‰‰‰‰÷÷÷÷öóóôôôôô  Ryøøøøøøøøøøøøøøøøøøø‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆˆˆˆöôôóóóòò &Bnww}w^S(  +WföêêÐ…‡‡‡‡‡‡‡ññððñþþþþþþ‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô *^‚øøøøøøøøøøøøøøøøøøˆˆˆ‰ˆˆ‰ˆˆˆˆˆˆˆˆööôôóóòòò ?uw÷÷w‚jO€' 4Suuß®“‡‡‡‡‡ññðððþþþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô 4Ig}øøøøøøøøøøøøøøøøøˆ‰‰ˆ‰ˆ‰ˆˆˆˆˆˆˆˆˆöööôóóóòòò 3Ww÷òówj^<' 4juʳŽ‡‡‡ññðððþþþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô 9S}}øøøøøøøøøøøøøøøøˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööóóóóóòò Ff‚wömõgj^L- @`uå» Ž‡ñððððþýýþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòóôôôôô ,S‚‚}øøø}øøøøøøøøøøø‰‰ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆööööóóóóóóƒ Ajwòsôuo^U€ Ffoõõݹ ñððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô @Zg‚‚}ðmr}øøøøøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõöööööóóóóóóó Bb??(DRjugifpujgS< @Y[õôØñððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷öóóôôôôô 0 j‚dCly}øøøøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóó /MbblB-4D`juj`dkuuog> )CCCÅððððþýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷óôôôôôô 0:1C1 +B\‚øøøøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóó /BbjwwwR2 +KfjjjZ_iuuugO'  +Eðððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷óôôôôôó )1'Ng}øøøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóƒ /Mbjiru‚uR2 +A`jjf`_iuuu‚S, ðððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷ôôôôôóó 9j‚øøøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóóó /BbjsdCsuwwR34Ijuok\nvu‚O, ðððððýýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷ôôôôôóó ,T‚‚øøøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóóó ;]jwpC0@Ko÷uK!DjuuueÿzwuZ( ðððððþýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷óôôôóóó  Dk}}øøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóóóô  =WuwwjW3 + owðA 3Kjuuw‚ñsiourF% ðððððýýýýýý†‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷óôôôóóó *Tg‚øøøøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóóôô &$F r‚ugZ93AkuumP8*5DumhCVmf[C1% ðððððþýýýýþ†ˆ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆ÷÷÷÷÷óóôôôóó 4sw‚}øøøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóôô &;b<3F_rgwgZLUbuyxqSN23@_ouugl{qyou‚jR2IfwjA34%1) ïððððþýýýýý•Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆ‰‰‰ˆ‰ˆ÷óôôôôóó 0Vk‚wøŒŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóôô   +Tu^>3Ksruuq‚qkï[ooR5K_ruugZA3-kour0!1% ïïðððýýýüüüÿ„ÖÍǸŸ—Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆ‰‰ˆˆˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆ‰÷÷ôôôôôôô øøìììì÷øìæåĶšŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóôôôô !F`wwwga\mƒ‚u^>5@YruugZH5@_ruug^bPgf[C1 ïðððñýýýüüüÿûúíáøáììš’‰‰‰‰‰‰‰‰‰‰‰‰‰Šˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ÷÷ôôôôôôô ììøøøøøøøø÷æßÁ“ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡öööôôôôôôô 0 `w÷ww‚x|wu^>5FYruugeer_C1 + ðððññþýýüüüUqzúííííÕÜŘŠ‰‰‰‰‰‰‰‰‰‰‰‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰÷÷ôôôôôôó ãìøøøøøøøøøìåÓ™Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡öööôôôôôôô 0 ow}÷u^>3@_rjuwosC1) ðððññýýýýüü 8\vúúúúúíãÄ°’Š‰‰‰‰‰‰‰‰‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰÷÷ôôôôôôó ìøøøøøøøøøìãÒµŒˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡ööôôôôôôô 0Foökwuj>3@_fjrsC1) ððñññþþýþüü&MqúúúúúíãÄ¢‰‰‰‰‰‰‰‰‰‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰‰ˆ‰ˆˆ‰ˆˆ‰ˆ÷÷ôôôôôóó ìøøøøøøøøøøì÷Ù³šŒˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡÷öôôôóôôô 0@oös[÷u^>3@ k[C1) ðññññþþýýüü€jqúúúúúúú홚‰‰‰‰‰‰‰‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ÷÷ôôôôôóó øøøøøøøøøøøøã׳šˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡÷ôôôóóóó 0Fou÷õðdiu`>30011) ñññññþþýýýü*ZqzúúúúúúíìÁ³Š‰‰‰‰‰ˆˆ‰ˆˆ‰ˆ‰‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ÷ôôôôóóó ìøøøøøøøøøøìêÚ³™ˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷ôôóóóóó 0Fowq`VVio`<301) ñññññýþýýýü5jqúúúúííìµ’‰‰‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆôôôôóóò ãìøøøøøøøø÷ãêÒ»–Œˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öôôóóóóƒ 0KfulZV)_ouf@% ñññññýþþýþü +Dq~úúúúííßÅœˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆôôôôóóò ìøøøøøøøìãêåÓ³Œˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööôôóóóóƒ 0 fug>@::is11! ñññññýýþýýý8b~úúúúíåÁšˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆôôôóóóò æìììøøøøìãæßسšŒˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööôôóóóóó 0 oug>4!)11) ñññññþýþýýý"NqúúúíãÛ¥‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆˆˆôôôóóòò ßìãììøøìãæßÛ¤šŒˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööôôóóóóó 0 fuu`3)) ñññññýýþýýýYr‚~úíùìÙ¥’’’˜’ˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆˆˆˆˆˆöôôóóóòò Ãô×êãìãêåæÚÛ¤®œŒˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööôóóóóòò 0FfooA0  ñññññþýþýýþ4C_zyùùùíÓÅ©¨þ¢Ÿ½¸¾¾½¨¨’‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰‰ˆ‰ˆˆˆˆˆˆˆˆööôôóóòòò ÀÁðÒÒÒßÙÛÒ»¤®œˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööóóóóóóò 0@ihC1 ñññññýýýýýýFWy~ùùøáåäààààÖääÕÿÿǸ¡’‰ˆˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆˆˆˆˆˆˆˆˆöööôóóóòòò ÕÀÅس³³³¤³šˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööõööööóóóóóóò !011) ðññññýýýýýý De~ùùùøíëÿìÜãæãììãããÆ…˜’ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆöööóóóóóòò æãÌÆ®™–šššŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öõõööööóóóóóòò !1% ðññññýýýýýý -SyùùùùùùøøììøøíùøøøøæѼšˆ‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆööööóóóóóóó ìãæÕέŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öõõööööóóóóóòò   ðññññýýýýýþ 'Pq~ùùùùùííøøíùùùùíùíøãÜÆ­˜ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõöööööóóóóóóó ø÷ãìåÉ¡Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööööóóóóóòò ðññññýýýýýý .PtyùùùùùùùííùùùùùùùùíøããÌ­š‰ˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóó øø÷ìæÞ·˜ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõöööööóóóóóóò ðññññþýýýýý  #Bnly~ùùùùùùùùùùùùùùùùùùøìÜÄ­šˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóó øøøììì×½§ššŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõöööööóóóóóóò ðññññýýýýýý  ;]tgy~ùùùùùùùùùùùùùùùùùùøøìãÌ·ˆ‰ˆ‰ˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆõööööööóóóóóóó øøøøì÷ì÷åμ²žŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööööóóóóóóò ðññññüýýýýþ /Pngy~ùùùùùùùùùùùùùùùùíøøìøøìãÕƯˆˆ‰ˆ‰ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóóƒ øøøøø÷÷÷÷æÜÏË…Ÿ—‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõöööõóóóóóóò ðññññüýýýýü /?b^y~ùùùùùùùùùùùùùùùùùøÝÝÜìøøìãáδ’Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóóó øøø÷÷÷÷÷÷÷ãøÜȽ¬˜‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõööõõóóóóóóó ñññññüþýýýü (]Sy~ùùùùùùùùùùùùùùùùùøæØØÁÚÜìøøìãÕ¿—ŒŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóóóô ø÷÷÷÷÷÷÷÷÷÷÷ãæåÐÇ·œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõöõõõóóóóóóó ñññññüýýýýü  BXqyùùùùùùùùùùùùùùùùùøìõ¥¥ÅÊåìøøììé½…žšˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóóôô ÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìêåÕƦŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõóóòòóóó ñññññýýýýþü "MayùùùùùùùùùùùùùùùùùíøãÒ¤ššœ¥ÁÚãøøøøãÏǽªšŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóôô ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìêãÀ§Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõóòòòóóñññññýýýýýü /Qyùùùùùùùùùùùùùùùùùíøøì×»˜’µÅÛæøøøøìãÕËȨŒŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóôô ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷êÏ´ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòòóññññþýýýýü .Ny~ùùùùùùùùùùùùùùùùùùøìåÁœš–Á×ìììøìããìɲ—ŒŒŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóóôô ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì÷÷׺¢Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòòñññýýýýýý  GgyùùùùùùùùùùùùùùùùùííøãÓ¥ˆˆˆŒ–ÅÒåæã}}ììãÕº¢šš’ŒŒŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööööóóóóôôô÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ã×ƯœŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòòññüýýýýþ  8ey~ùùùùùùùùùùùùùùùùùíø㵈ˆˆˆˆµÅÁèæìììììæ̾͸««¸šŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆööööööóóóóôô÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷åĺ…ž’ŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòòñüüýýýý 2gy~ùùùùùùùùùùùùùùùùùùùøæňˆˆˆˆˆšµ³ÅÙæãìììãÞàÿÑÈý⸫’šŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóô÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷åæÐȼ¡˜ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõòüüþýýý 'Nyùùùùùùùùùùùùùùùùùùùøøø×¥ˆˆˆˆˆˆˆŒ’ ³»ðèãì}ììãêæããåο©šŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóóóww÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷w÷w÷÷æêãã·˜Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õõõõõõõóóòóóóó  =ayùùùùùùùùùùùùùùùùùùøøøãÁ¦ˆˆˆˆˆˆˆˆŽŒœ¥ðÝìøøì÷ìì÷øìæåĶšŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆöööööóóó[uwwww÷w÷www÷÷÷w÷w÷wwwww÷w÷êß¹Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ïïðððþ÷óóóóóóó  +ay~ùùùùùùùùùùùùùùùùíøøøìÚÁšŒŒˆˆˆˆˆˆˆˆˆŒš®ÑéìøøøøøøøøìãæÂ¥ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡öööööôô1CCC[_moujowwwouwuowfigsspwì÷ì÷æÓ±Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðïðððþþ÷÷óóóóôóó Lgy~ùùùùùùùùùùùùùùùøøøøìãÚ¯š’ŒˆˆˆˆˆˆˆŒš¸Íàììøøøøøøøø÷æßÅ“Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡öööô1)CC:CCïCCC::Cd:C1C11:Cdpw÷w÷êÒ Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþý÷óóóôôóó 9cy~~ùùùùùùùùùùùùøøøøøøøìãÜ⾞šŒˆˆˆˆˆŒš«ÖåãìøøøøøøøøøìåÊ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡ööö  +1%0:11)1C) +1!4%:kww÷÷æÊŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþýý÷óóóôôôó Sq~~ùùùùùùùùùùøøøøøøøøøø÷ìéÞɽ¾šŒˆˆˆˆˆ§Èåã÷øøøøøøøøøìãÒµŒˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡öö  FsowꚎŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ðððððþþýýþ÷÷óóóôôôô 7cy~ùùùùùùùùøøøøøøøøøøøøøøøìæÌÑ·§ˆˆˆˆ¨Äæ÷øøøøøøøøøøììÙ¤šŒˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡÷ö   ::VkwåÂ’Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ñððððþþýýýý÷÷÷óóóôôôô  H‚~ùùùùùùøøøøøøøøøøøøøøøøøøøãæãÔ²˜ŒŒŒ¨Íæøøøøøøøøøøø}ã׳šŒˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡÷  )CCiwå´£š‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ññððñþþþýýýŠ÷÷÷óóóôôôô =W‚ùùùùøøøøøøøøøøøøøøøøøøøøø}ìììÕ¾ž’£ËæìøøøøøøøøøøìêÚ³–Œˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡÷   +)Vkö©œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ññðññþþýýýýŠ‰‰÷÷÷òóôôôôô .g‚}~ùøøøøøøøøøøøøøøøøøøøøøøøøììì쬒¦¿æãìøøøøøøøøììêÒ»–Œˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ /M# 0V`uߺ©‡‡‡‡‡‡‡‡‡‡‡‡‡‡ñññññþþþýýþ‰‰‰‰‰÷÷÷÷òóôôôôô  J‚yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøìĶ˜šÀÞìøøøøøøøìãæåÓ³Œˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ;PbJ<  %VrõåƶœŽ‡‡‡‡‡‡‡‡‡‡‡ñññññþþþþþþ‰‰‰‰‰‰‰÷÷÷öòóôôôôô 9^yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøã°®æìììøøøøìãêß»³šŒˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ;Pnuu^>' 0Kfåå彡Ž‡‡‡‡‡‡‡‡ñññðñþþþþþþ‰‰‰‰‰‰‰‰‰÷÷÷÷öóóôôôôô  E‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø}캩®ßìãììøøìãìæßÛ¤¦Œˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ &Bnu‚ìw^J( @IföêæÐ…‡‡‡‡‡‡‡ññððñþþþþþþ‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô 2g‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøãÉÀÃß×êãìãååÚÛ¤®šŒˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ?uwìw‚jU-' 3guuß®“‡‡‡‡‡ññðððþþþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô  +I‚}øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø}ãÜÏÀÁðÒÒÒßÙÛÒ»¤®Œˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ 5Ww÷óówj^<3 4^uêʳŽ‡‡‡ññðððþþþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô 9S‚}øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøæÕÀÅس³³³¤™¦ˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ Ff‚wõmõuj^J- @`uu廎‡ñððððþýýþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòóôôôôô ,S‚}}øøø}øøøøøøøøøøøøøøøøøøøøøøøøøøøøìæãÌÀ© ™–’Œˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ Ajwò_ôgo^O< Vfoõõݹñððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öóóôôôôô @Zj‚‚øðmr}øøøøøøøøøøøøøøøøøøøøøøøøøøøììæáέŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ Bb?;(4RjugippujgS< @Y[õôØñððððþýýþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷öóóôôôôô 0KjgdCly}øøøøøøøøøøøøøøøøøøøøøøøøøøøìãåÉ¡Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ /MbblM-4D`juj`dkuuog> )CCCðððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷óôôôôôô 0:1C1 +B\‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøììæÞ·˜ŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ /Bbju‚uR24KfjjjZ_iuuugO'  +Eðððððþýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷óôôôôôó C)'N‚}øøøøøøøøøøøøøøøøøøøøøøøøøøøøììì×½§šŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ /PbjiruwgR2 +T`jjf`_iuuu‚S, ðððððýýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷ôôôôôóó 9j‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøì÷ì÷åμ²žŽŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ /BbjsdCswR34Ijuok\nvu‚O, ðððððýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷ôôôôôóó ,Y‚‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷æÜÏÍ…Ÿ—‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ ;]jwpC0@Ko÷uK!4juugvÿzu`+ ðððððýýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷óôôôóóó  Dk}}øøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷ãøÜȽ¬˜‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡  =WuwwjW3 + owðA 5KjuuwgdsƒourF) ðððððþýýýýý†‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷óôôôóóó *Auy}øøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷ãêåÐÇ·œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡&$0 r‚ugZ93AkuuTP7*5KumhCVmf[C1! ðððððýýýýýý†ˆ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆ‰÷÷÷÷÷óóôôôóó 4_w‚}øøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷êåÕƦŒ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡&;]>3F_rgugZLUbu}xqgN23@_ouugl{qyowwwjR2IWuj93%1) ïððððýýýýýý•Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰Šˆˆˆ‰ˆˆ‰÷óôôôôóó 0Vk‚w}}}}øøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì÷êвŽŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ +Twu^>3K_ruuq‚qkï[ooR5K_ruugZA5€ijur0!1% ïïðððýýýüüüÿ„ÖÍ˸Ÿ—Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆ‰‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰‰‰ˆ÷÷ôôôôôôô %:C11CC:[iowww÷w÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷w÷w÷÷êêãã·˜Ž‡‡‡‡‡‡‡‡‡‡w}‚jUXmƒ÷u^>5@_ruugZH5F_ruu‚eer_C1 + ðððññýýýüüüUqzúùíííÕ楚‰‰‰‰‰‰‰‰‰‰‰‰Šˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰ˆˆ‰ˆˆ‰ˆ‰ˆ‰ˆˆ‰ˆ÷÷ôôôôôôó  1)CC:CCïCCCï:Cd:C1C11:Cdp÷ww÷æÒ Ž‡‡‡‡‡‡‡0K`÷}wu^>3@_rjjwosC1) ðððññþýýýüü 8\vúúúúúíãĶ’Š‰‰‰‰‰‰‰‰‰ˆˆˆ‰ˆˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆ‰ˆˆ‰ˆ‰‰ˆ‰ˆ÷÷ôôôôôôó   +1):1))1C) +1!4%:kw÷w÷êÊŽ‡‡‡‡‡‡‡3 200 130 1 +™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòóóóô + + + + + + + + + +D`wwweR[nƒwu^<3=_suueWF:M`pqA$ îïïïïþýýüüüÿûèáäÈ¡–‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + + + + + + $8A//AA8œŽ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡†öööööóóòóóóô + + + + + + + + +.O`wwõkfy÷u^<3=_suue^gNedYA/ îïïïðýýýüüüÿûúíäøäìâΙ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + +/·‘Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡††††öööóóóóóóó + + + + + + + + +.Ypw‚ww‚x{÷u^<3D_suue€cp_Z/ ïïïððýýýüüüRr}~úííííìæ·™‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + + + + + +Ï—Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡††††††öööóóóóóóó + + + + + + + + +.O`w|÷u^?1=_suup_//$ ïïïððýýýþüü7\v~úúúúúíÙΰŠ‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóò + + + + + + + + + + + + + + + + + + + + + + + + + +×½ŽŒˆ‡‡‡‡‡‡‡‡‡‡‡‡††††††††ööóóóóóóó + + + + + + + + +.O`öquw^?1=Vdp`hZ/' ïïðððþþþýüü%Jr~~úúúúúíâÉ£‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóò + + + + + + + + + + + + + + + + + + + + + + + + + + +ݱ’Œ‡‡‡‡‡‡‡‡‡‡‡†††††††††††÷öóóóòóóó + + + + + + + + +.OpöhYuu^?1=OlYZ/' ïððððþþýýüü :^rúúúúúúúí´’‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóòƒ + + + + + + + + + + + + + + + + + + + + + + + + + + +ã±™Œ‡‡‡‡‡‡‡‡‡‡†††††††††††††÷óóóòòòò + + + + + + + Dpwöðbiu`?DS//' ðððððýþýýýü (Wk}úúúúúúíìű‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷óóóóóòò + + + + + + + + + + + + + + + + + + + + + + + + + + +Ö±—Œˆ‡‡‡‡‡‡‡‡†††††††††††††††÷óóòòòòò + + + + .Dpuk`SSiuj`:1/' ðððððýþýýýü 3jr~úúúúííì´‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóóòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + +×½—Œˆ‡‡‡‡‡‡††††††††††††††††††öóóòòòòò + .=durW.8_udO$ ðððððþþþýýü Bk}~úúúúíä·šŒ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóóòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ر•Œ‡‡‡‡‡‡††††††††††††††††††††ööóóòòòòò + .Odu÷eF=8Si_// ðððððýýþýýý 7g}~~úúúúíæÅ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóóòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + +½±’Œ‡‡‡‡†††††††††††††††††††††††ööööóóòòòòò .O`e?$'//$ ðððððýýþýýþ Kr~~~úúúíâÓœŒ‰Œˆˆˆ‰Œ‰Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡óóóòòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +§™’Œˆ‡‡†††††††††††††††††††††††††öööööóóòòòòò .Yduu`4'' ðððððýýþýýý Vs‚}~úíùìÝ¡‰Œ–‰Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡öóóóòòññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +®•Œˆ‡††††††††††††††††††††††††††††öööööööóòòòòññ .Ddps>.  ðððððþýþýýý 2AV~yùùùøØ難þ£¥¼²Ë¼¨¥Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡ööóóòòòññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +šŽ‡‡††††††††††††††††††††††††††††††öööööööòòòòòòñ .DiOZ/ ðððððýýýýýý DGy}ùùøäæààààáÚ„àÙÿÿʲ Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡öööóóòòñññ + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ž‡‡††††††††††††††††††††††††††††††††ööõööööòòòòòòñ .//' ïððððýýýýýþ Bc}ùùíøíëÿìâçâììâââçȲ–Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡öööóòòòñññ + + + + + + + + + + + + + + + + + + + + + + + + + + +‡†††††††††††††††††††††††††††††††††††öõõööööòòòòòññ /' ïððððýýýýýý +XyùùùùíùøäììøøùíøøøøçÒÇ£™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööòòòòòññ + + + + + + + + + + + + + + + + + + + + + + + + + +†††††††††††††††††††††††††††††††††††††öõõööööòòòòòññ  ïððððþýýýýý &Mk}ùùùùùùùøøííùùùíùíøâÈ°˜Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + +††††††††††††††††††††††††††††††††††††††õõõööööòòòòòññ ïððððýýýýýý )MzyùùùùùùùííùùùùùùùùùøââÈ°™Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õöööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + +†††††††††††††††††††††††††††††††††††††††õõöööööòòòòòòñ ïððððþýýýýþ #@gfy}ùùùùùùùùùùùùùùùùùíøìç𘌈ˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õöööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + +††††††††††††††††††††††††††††††††††††††††õõöööööòòòòòòñ ïððððýýýýýý 9]zey}ùùùùùùùùùùùùùùùùùùøøì縟ˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õöööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + +ŽŒŒŒ†††††††††††††††††††††††††††††††††††††õõõööööòòòòòòñ ïððððüþýýýý -Mgey}ùùùùùùùùùùùùùùùùùøøìøøìâÙÈ°ˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + +¸ž–ŽŽ†††††††††††††††††††††††††††††††††††††õõõöööõòòòòòòñ ïððððüýýýýü -@]ey}ùùùùùùùùùùùùùùùùùøååçìäøìâ䪌Œˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòòò + + + + + + + + + + + + + + + + + + + +м¬˜•†††††††††††††††††††††††††††††††††††††õõõööõõòòòòòòò ðððððüýýýþü +]Xy}ùùùùùùùùùùùùùùùùùøç½½ÅÖçìøøìâäÁ“ŒŒ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòòòò + + + + + + + + + + + + + + + + + + +ìçæÙʶš†††††††††††††††††††††††††††††††††††††õõõöõõõòòòòòòò ðððððüýýýýü @UkyùùùùùùùùùùùùùùùùíøìÔ´­­ÀÏìøøììÛЯ›˜Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòòòó + + + + + + + + + + + + + + + + + +÷÷âêæÙÚŒ††††††††††††††††††††††††††††††††††††õõõõõõõòòññòòò ðððððþýýýýü  Jfyùùùùùùùùùùùùùùùùùùøâ×±’˜š·ÀÖâøøøøâÒʼª™Œˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòóó + + + + + + + + + + + + + + + + +÷÷÷êâɤŽŒ†††††††††††††††††††††††††††††††††††õõõõõõõòñññòòðððððýýýýýü -Nyùùùùùùùùùùùùùùùùùùøøìã½™œÀÓçøøøøìâÙÍÊ¥ŽŒŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòóó + + + + + + + + + + + + + + + +÷÷÷÷ì÷êÒ¬•ŒŒ††††††††††††††††††††††††††††††††††õõõõõõõññññòððððýýýýþü %Ly}ùùùùùùùùùùùùùùùùùíøìæÅ™ŒŒŽ•œÅãìììøìâìЪ–ŽŒŒŒ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòóó + + + + + + + + + + + + + + +÷÷÷÷÷÷÷÷ܺŸ•ŽŒ†††††††††††††††††††††††††††††††††õõõõõõõññññðððýýýýýý EeyùùùùùùùùùùùùùùùùùùíøâÏ­‰‰ŒŒŒ‘·×æçâøøììâÙº£™™ŽŒŒŒ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòòóó + + + + + + + + + + + + + +÷÷÷÷÷÷÷÷÷÷ÜȬš•Œ†††††††††††††††††††††††††††††††††õõõõõõõñññððüþýýýý 7cy}ùùùùùùùùùùùùùùùùùùøâÜ´Œ‰‡ˆ‡‡Ž´·ÌÞçìììììçÈÂÚ¼««²Ÿ˜ŽŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòóóó + + + + + + + + + + + + +÷÷÷÷÷÷÷÷÷÷æκ¨’ŒŒŒ††††††††††††††††††††††††††††††õõõõõõõññðüüýýýý :er}ùùùùùùùùùùùùùùùùùùùøç·•Œ‡‡‡‡‡‡š´±ÀÝçâ÷ììßáÿÕÒþῲ–’Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööòòòòóóô + + + + + + + + + + + +÷÷÷÷÷÷÷÷÷÷ìæÙ˹¢–ŒŒ††††††††††††††††††††††††††††††õõõõõõõñüüýýýþ KyùùùùùùùùùùùùùùùùùùíøøøÜ­‡‡‡‡‡‡‡Œ’¡±½ïéâìøììâççââæÁ©™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööòòòòóóô + + + + + + + + + + +÷÷÷÷÷÷÷÷÷w÷÷÷êêââǸ–Œ†††††††††††††††††††††††††††††††õõõõõõõòòòòòñò ;fyùùùùùùùùùùùùùùùùùíøøøâÅšŒ‡‡‡‡‡‡‡ˆŒŒ™·Ìåâøøìììììøìçæγ™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööòòòòóóô + + + + + + + + + +÷w÷w÷wwwwwww÷÷÷êÖÅ•Œ†††††††††††††††††††††††††††††††îîïïïþ÷òòòòòòò fk}ùùùùùùùùùùùùùùùùùøøøìéÅ™ŒŒˆ‡‡‡‡‡‡ˆ‡Œ™¾ÕúìøøøøøøøøìâçÎœ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡†ööööòòòóóóô + + + + + + + + +wpuwuuudiu__qw÷÷÷÷çÏ¡•Œ†††††††††††††††††††††††††††††ïîïïïþþ÷÷òòòòóòò Iey}ùùùùùùùùùùùùùùùøøøøìâÖ¬™’ŽŒ‡‡‡‡‡‡‡Œ’²ÑàììøøøøøøøøìçÖ·‘Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡††††öööóóòóóóô + + + + + + + +A88Zb8A/A//8Abqw÷w÷êסŽŒ†††††††††††††††††††††††††††ïïïïïþþý÷òòòóóòò 4fy}}ùùùùùùùùùùùùøøøøøøøììáÂ’Œ‡‡‡‡ˆŒ’²ÚæâìøøøøøøøøøìæÏ—Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡††††††öööóóóóóóó + + + + + + +//'/A'/2$8lww÷÷çÏ¡Œ††††††††††††††††††††††††††ïïïïïþþýý÷òòòóóóò Ly}}ùùùùùùùùùùøøøøøøøøøøììíÛ¼™Œ‡‡‡‡ˆ¤Ëæìøøøøøøøøøìâ×½ŽŒ‡‡‡‡‡‡‡‡‡‡‡‡‡††††††††ööóóóóóóó + + + + + +D_pwêÆ™ŒŒ†††††††††††††††††††††††ïïïïïþþþýý÷÷òòòóóóó 6[y}ùùùùùùùùøøøøøøøøøøøøøøøìêÕÁ¤Ž‡‡‡‡Œ¥Îçìøøøøøøøøøøììݱ’Œˆ‡‡‡‡‡‡‡‡‡‡†††††††††††÷öóóóóóóó + + + + + + + + + + + + + + +88SlwæÆŸŽŒ††††††††††††††††††††ðïïïïþþýýýý÷÷÷òòòóóóó F‚}ùùùùùùøøøøøøøøøøøøøøøøøøøâçâÒ¶˜ŒŒŒ¨Ñçøøøøøøøøøøøøâã±™Œ‡‡‡‡‡‡‡‡‡‡†††††††††††††÷óóóòóóó + + + + + + + + + + + + + + + + + + +'AAiw润•Ž††††††††††††††††††ððïïðþþýýýþŠ÷÷÷òòòóóóó ;T‚}ùùùøøøøøøøøøøøøøøøøøøøøøøìììÙ¼’¦ÍçìøøøøøøøøøøìêÖ±—Œ‡‡‡‡‡‡‡‡‡†††††††††††††††÷óóóòòòò + + + + + + + + + + + + + + +'SqöÇ©šŽ††††††††††††††††ððïððþþýýýýŠ‰‰÷÷÷ñòóóóóó ,e‚|}ùøøøøøøøøøøøøøøøøøøøøøøøøììøìǬ’®Èçâìøøøøøøøøìâê×½‘Œ‡‡‡‡‡‡‡††††††††††††††††††öóóòòòòò + + + +-M! + + + + + + + + +.SPº©•††††††††††††††ðððððþþþýýý‰‰‰‰‰÷÷÷÷ñòóóóóó H‚yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâγ˜™»ßìøøøøøøøìâêæر•Œˆ‡‡‡‡‡††††††††††††††††††††ööóóòòòòò + +9M]H: + + + + + + + + + + +8SæȵšŒ†††††††††††ðððððþþþþþþ‰‰‰‰‰‰‰÷÷÷öñòóóóóó 4^yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø|ìܬ¦®Ççìììøøøøìâç½±’Œ‡‡‡‡†††††††††††††††††††††††ööööóóòòòòò +9Mouu^?& + + + + + + + + + + + +.OdõãæÇ¢ŽŒ††††††††ðððïðþþþþþþ‰‰‰‰‰‰‰‰‰÷÷÷÷öòòóóóóó P‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâܺ©¾Öìâììøø÷âìçÖÓ§š’Œ‡‡‡†††††††††††††††††††††††††öööööóóòòòò%@oww|w^H) + + + + + + + + + + + +=GdöêçЯ•†††††††ððïïðþþþþþþ‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòòóóóóó + +(e‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø|âÇ»ÏãêâìâêææÞÓ§®•Œˆ‡††††††††††††††††††††††††††††ööööööóóòòò@jwì÷wjL: + + + + + + + + + + + +3kuuö㮑†††††ððïïïþþþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòòóóóóó + + + GeøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâçÒÄ·ï×××ÝÓ×½§®šŽ‡‡††††††††††††††††††††††††††††††ööööööóòòò1Tw÷ñòwj^?& + + + + + + + + + + + 2jwêϱŒ†††ððïïïþþýþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòòóóóóó + + + + 4X‚|øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø|âçÙÐÄÀ½§±±±§±™•Ž‡‡††††††††††††††††††††††††††††††††ööõöööòòòDdw‚õnõej^H0 + + + + + + + + + +=duuê㽡Œ†ðïïïïýýþþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öñòóóóóó + + + + + + *X‚‚|øøø|øøøøøøøøøøøøøøøøøøøøøøøøøøøøìçâþ¡•——’’’Œ‡†††††††††††††††††††††††††††††††††††öõõöööòò>jwwñ_óup^K: + + + + + + DdpõõØÅ¡ðïïïïýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷öòòóóóóó + + + + + + + + + =W‚‚‚|ïn|øøøøøøøøøøøøøøøøøøøøøøøøøøø÷âçäÇ°ŽŒŽŽŒŒ††††††††††††††††††††††††††††††††††††††öõõöööò!BPjueiqdujee: + + =V_ó½ðïïïïþýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷öòòóóóóó + + + + + + + .jebAXy|øøøøøøøøøøøøøøøøøøøøøøøøøøøìâæТŽŽŽŒ††††††††††††††††††††††††††††††††††††††††õõõöööE+2B`juj`bluuje< 'A8§ïïïïïýýýýþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷òóóóóóó + + + + + + + + + + + + .8§A/@\‚øøøøøøøøøøøøøøøøøøøøøøøøøøø|ììçÛ¶˜ŽŒŒ††††††††††††††††††††††††††††††††††††††††õõööö‚P4Bdjjj`_iuuueL& Cïïïïïýýýþþþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷òóóóóóò + + + + + + + + + + + + $/&L‚|øøøøøøøøøøøøøøøøøøøøøøøøøøøøìììâÜǪ™•Œ††††††††††††††††††††††††††††††††††††††††õõööweP4Q`jjd`_ieuu‚X* +ïïïïïýýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷óóóóóòò + + + + + + + + + + + 4j‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøì÷÷÷翪ŽŒŒŒ†††††††††††††††††††††††††††††††††††††õõõpwwP12GpujlaoveL* + ïïïïïþýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷óóóóóòò + + + + + + + + + + + + + + *Q‚|øøøøøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷çÛ͸ž–ŽŽ†††††††††††††††††††††††††††††††††††††õõOuwuOB^uuu€ÿ}wöuW) + ïïïïïýýýýýþ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷òóóóòòò + + + + + + + + + + + + + + +Bl‚|øøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷âø˼¬˜•†††††††††††††††††††††††††††††††††††††õOuwb>1Ojuuw‚wð_ipusS$ + ïïïïïýýýýýþ…‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷òóóóòòò + + + + + + + + + + + + + (Qw‚|øøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷ìçæÙʶš†††††††††††††††††††††††††††††††††††††1>luunM7(3BunhZSndYA/$ + + ïïïïïþýýýýý§‡‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆ÷÷÷÷÷òòóóóòò + + + + + + + + + + + + + + +2_w‚|øøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìêæÙÚŒ†††††††††††††††††††††††††††††††††††ILgu‚x}XK(:TuuubS=DD//' ïïïïïþýýýýý‹ˆŠ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆ÷÷÷÷òóóóóòò + + + + + + + + + + + + +=_w‚||øøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìêâɨŽŒ†††††††††††††††††††††††††††††††††kzkypewjP4Gdwuj>12$/' îïïïïýýýýýý”Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + + + +.Sl‚w||||øøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì÷÷êÙ¬•ŒŒ†††††††††††††††††††††††††††††††y‚rdîhjP:>`uujQ3 +îïïïïýýýýýþ”Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + .88Q‚w|||øøøøø||øø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìܺŸ•ŽŒ†††††††††††††††††††††††††††††wwuZAAYspT:>lusY/ + îîïïïýýýýýýžŠ‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + + + +'88_w|‚wøøø÷|÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìÜȬš•Œ††††††††††††††††††††††††††††ui82=Sp`B2>Q_Z/$ îîïïïþýýýýý²Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷òóóóóóò + + + + + + + + + + + + + AAîYw‚ì‚‚‚‚wwì÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷æκ¨’ŒŒŒ††††††††††††††††††††††††duue`>SduT==//' îîïïïýýýýýýÿªÑ“Š‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + .AA8e8ZYqpww÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìæÙ˹¢–ŒŒ†††††††††††††††††††††††_suueW>3+lpus./' îîïïïþýýüüüÿ„ÚÚʼž–‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + +$8AZ/AA8Oipwww÷w÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷w÷÷÷êêââǹ–Œ†††††††††††††††††††††††=VsuueWF:M`jqA$ îïïïïýýýüüüÿûèáßÇ¡˜‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + +/A'ASSYuwwww÷w÷www÷÷÷w÷w÷wwwww÷w÷÷öÆÅ•Œ††††††††††††††††††††††3=_suue^g\kdYA/ îïïïðþýýüüüÿûúíøäøìâΙ˜‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + + + + + + +$'/AZAY_npujpwwwpuwupudiu__qwì÷÷ìêÏ¡•Œ†††††††††††††††††††††<3DVsuue€cd_Z/ ïïïððýýýüüüRr}~úííííì·™Š‰‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóƒ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/'AA8ZZîAAA88Zb8A/A//8Abqww÷÷êסŽŒ††††††††††††††††††††^?1=_sjup_Z/$ ïïïððýýýþüü7\v~úúúúúíâΰ‰‰‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóƒ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/$..//'/A'/2$8qwww÷çÏ¡Œ††††††††††††††††††††u^?1=Odps_Z/' ïïðððþþýýüü%Jr~~úúúúúíâÄ£‰‰‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D_pwêÆ™ŒŒ††††††††††††††††††u^?1=OlOZ/' ïððððþþýýüü :^rúúúúúúúí´’‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +88SlwæÆŸŽŒ††††††††††††††††u`<1D8//' ðððððýþýýýü (Wk}úúúúúúíìűŠ‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷óóóóòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'AAiw润•Ž†††††††††††††††ij`:&./' ðððððþþýýþü >jr~úúúúííì´‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóóòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'SqöÇ©šŽ††††††††††††††8Opud=' ðððððýþþýýü Bk}~úúúúíä·šŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóóòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-J! + + + + + + + + +.SPܺ©•†††††††††††††=$Si_// ðððððþýþýýý 7g}~~úúúúíæ·š‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆóóóòòòñ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9MgH: + + + + + + + + + + +8SãêȳšŒ†††††††††††?2$'//' ðððððýýþýýý Kr~~~úúúíâÓœŒ‰Œ‰ˆˆˆŒ‰Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡óóóòòññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9Mouu^?& + + + + + + + + + + + +.BdõãæÇ¢ŽŒ††††††††ð`4'' ðððððþýþýýþ Vs‚}~úíùìÝ¡Œ‰˜‰Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡öóóòòòññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%@ouw|w^H) + + + + + + + + + + + +TdöêçЯ•†††††††ððsQ.  ðððððýýþýýý 2AV}yùùùùØþ£¥Â²Â¼¨¥Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡ööóóòòñññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +uwì÷wwjL:& + + + + + + + + + + + +3kuuö㮑†††††ððïYZ/ ðððððþýýýýý DTk}ùùøì„àààáÚ„„Ùÿÿʲ Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡öööóòòòñññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1T‚wñò÷wj^:& + + + + + + + + + + + 2juêϱŒ†††ððïï//$ ïððððýýýýýý Bc}ùùíøíëÿìâçâììâââçȲ–Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡öööòòòòòññ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Ddwwõnõuj^I+ + + + + + + + + + =`uuö㽡Œ†ðïïïï/' ïððððýýýýýý 0XyùùùíùíøäììøøùíøøøøçÛ¿£˜Œˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>j‚ñ_sup^K: + + + + + + DduõæØÅ¡ðïïïïï ïððððýýýýýþ &Mk}ùùùùùùùøøííùùùùííøâÈ°™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õöööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@]!BPjeuiqdujee: + + =VYó½ðïïïïïý ïððððþýýýýý )MzyùùùùùùùííùùùùùùùùùøââÈ°™Œ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-Jggk@+2B`juj`bluuje< 'A8§ïïïïïïþý ïððððýýýýýý #Jgfy}ùùùùùùùùùùùùùùùùùùøìç𘌉ˆˆˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-@]jewwP4OdjjjW_iuueeL& Cïïïïïïýýý ïððððýýýýýþ 9]zey}ùùùùùùùùùùùùùùùùùíøøì縟ˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡õööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-M]jióuweP4>`jjd`_iuuu‚X* +ïïïïïïýýýý ïððððüýýýýý -Mgey}ùùùùùùùùùùùùùùùùíøøìøøìâÙÈ°ˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + + +-@]uhbA_p÷wP12Gjuplaovu‚L* + ïïïïïïýýýýý ïððððüþýýýü -@]ey}ùùùùùùùùùùùùùùùùùøååçìäøìâ䪌Œˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòòòò + + + + + + + + + + + + + + + + + + + + + + + + + + +9]u‚qZ.OOpwuOBjuuu€ÿ}wuW) + ïïïïïïþýýýýþðððððüýýýýü +]Xy}ùùùùùùùùùùùùùùùùùøç½½ÅÞçìøøìâäÁ“ŒŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòòòó + + + + + + + + + + + + + + + + + + + + + + + + +;TuwwjG1Owï41Ojuuw‚wð_ipusS$ + ïïïïïïýýýýýþ‰ððððüýýýþü @UkyùùùùùùùùùùùùùùùùíøìÔ´­­ÀÏìøøììèǯ›™Ž‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòòóó + + + + + + + + + + + + + + + + + + + + + +%"DOswweW41>luunM7(1BunhZSndYZ/$ + + ïïïïïïýýýýýý…‰ðððýýýýýü  Mfyùùùùùùùùùùùùùùùùùùøâ×±•˜™·ÀÖâøøøøâÒʼ¤™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòòóó + + + + + + + + + + + + + + + + + + + + +%9]:1DVseueWIRguyx}eK0:TuuubS=DD//' ïïïïïïýýýýýý…‡‰ððýýýýýü -Nyùùùùùùùùùùùùùùùùùùøøìã½™’œÀÓçøøøøìâÙÍÊ¥ŽŒŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòòóó + + + + + + + + + + + + + + + + + + + +6]PW<1=_puuekzkypuywjP4Gdwj>12$/' îïïïïïþýýýýý‹‡‰‰ðýýýýýü )Ky}ùùùùùùùùùùùùùùùùùíøìæÅ™Œ‰•œÅãìììøìâìЪ–ŽŒŒŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòòóó + + + + + + + + + + + + + + + + +Qu^<1O_su‚y‚rq8hpwpP:G`upi1 +îïïïïïýýýýýý”Š‰‰‰ýýýýýþ EeyùùùùùùùùùùùùùùùùùùíøâÏ­‰ˆŒŒŒ‘·×æçâøøììâÙº£™™ŽŒŒŒ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööööòòòòóóó + + + + + + + + + + + + + +%".ƒ‚w^<1D_swwuZAAYspT4>lu`YA + îîïïïïþýýýýþ”Š‰‰‰‰ýýýýý 7cy}ùùùùùùùùùùùùùùùùùùøâÜ´Œˆ‡‡‡‡Ž´ÀÌéçìììììçÈÂѼ««²Ÿ˜Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡ööööööòòòòóóô + + + + + + + + + + + + +-@]!1Si‚u^F1=Osui82=Ds`B2>QhZ/$ +îîïïïïýýýýýýžŠ‰‰‰‰‰ýýýý :er}ùùùùùùùùùùùùùùùùùùíøç·•Œˆ‡‡‡‡‡š´±ÀÝçâ÷ììßàÿÕÒþῲ–’Œˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòóóô + + + + + + + + + + + +-]jjR7;Yƒwe^<1D_duue`>YswuT==//' îîïïïïþýýýýý²Š‰‰‰‰‰‰ýýý &KyùùùùùùùùùùùùùùùùùùùøøøÜ­Ž‡‡‡‡‡‡‡Œ’¡±½ïéâìøììâççââæÁ©™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòòóóô + + + + + + + + + + +5TuwwkLH_ƒwu^<3O_suueW>3+lpus./$ îîïïïïýýýýýýÿªÑ“Š‰‰òòòò ;fyùùùùùùùùùùùùùùùùùíøøøâÅ™Œ‡‡‡‡‡‡ˆˆŒŒ™·ïåâøøìììì÷øìçæγ™Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡öööööòòòóóóô + + + + + + + + + +D`wwwjR[nƒ‚u^<1=VsuueWF:M`pdA$ îïïïïïþýýüüüÿ„ÚÚʼž–‰‰òòòòò 2fy}ùùùùùùùùùùùùùùùùùøøø÷ÞÅ™ŒŒ‡‡‡‡‡‡‡ˆˆŒ™¾ÍíìøøøøøøøøìâçÎœŽˆ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡†öööööóóòóóóô + + + + + + + + +.O`ww‚õkfy÷wu^<3=_suue^gMedYA/ îïïïððýýýüüüÿûèáßÇ¡˜‰òòòóòò Iey}ùùùùùùùùùùùùùùùøøøøìâÖ¬™ŽŒ‡‡‡‡‡‡‡Œ’²ÑàììøøøøøøøøìçÖ·‘Œ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡††††öööóóóóóóó + + + + + + + + +.O`w÷ww‚x{w÷u^<3D_suue€ms_Z/ ïïïðððþýýüüüÿûúíøäøìâΙ˜òòòóóòò 4fr}}ùùùùùùùùùùùùøøøøøøøìâáÂ’ŽŒˆ‡‡‡‡Œ’²ÚæâìøøøøøøøøøìæÏ—ŽŒˆ‡‡‡‡‡‡‡‡‡‡‡‡‡††††††öööóóóóóóó + + + + + + + + +.O`wøw÷u^?1=_sjuj_Z/' ïïïðððýýýüüüRr}~úííííì·™òòòóóóò Ly}}ùùùùùùùùùùøøøøøøøøø|ììíÛ¼™Œ‡‡‡‡ˆ¤Ëæìøøøøøøøøøìâ×½ŽŒ‡‡‡‡‡‡‡‡‡‡‡‡‡††††††††ööóóóóóóó + + + + + + + + +.Dpõqu^?1=Odjs_Z/' + ïïððððþýýþüü7\v~úúúúúíâΰòòòóóóó 6[y}ùùùùùùùùøøøøøøøøøøøøøøøìêÕÁ¤Ž‡‡‡‡Œ¨Éçìøøøøøøøøøøì÷ݱ’Œ‡‡‡‡‡‡‡‡‡‡‡†††††††††††÷öóóóòóóó + + + + + + + + +.=pöhYuu÷u^?1=OlYZ/' ïðððððþþýýüü%Jr~~úúúúúíâÉòòòóóóó F‚}ùùùùùùøøøøøøøøøøøøøøøøøøøâçâÒ¶˜ŒŒŒ¥Ñçøøøøøøøøøøøøâã±™Œˆ‡‡‡‡‡‡‡‡‡†††††††††††††÷óóóòòòò + + + + + + + .Dpu÷õðbiuu`<1D8//' ððððððþþýýüü :^rúúúúúúúí÷òòòóóóó ;T‚ùùùùøøøøøøøøøøøøøøøøøøøøø|ìììÒ¼Ž’¦ÍçìøøøøøøøøøøìçÖ±—Œˆ‡‡‡‡‡‡‡‡†††††††††††††††÷óóòòòòò + + + + .Dpuwy`SSip`:./$ ððððððýþýýýü (Wk}úúúúúúíì÷÷ñòóóóóó ,e‚|}ùøøøøøøøøøøøøøøøøøøøøøøøøìì÷ìǬ’®Èçâìøøøøøøøø÷âê×½‘Œ‡‡‡‡‡‡‡††††††††††††††††††öóóòòòòò + .=dufW.8OpudO' ððððððýþýýþü >jr~úúúúííì÷÷÷öñòóóóóó H‚yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâγ˜™»Ûìøøøøøøøìâêæر•Œ‡‡‡‡‡‡††††††††††††††††††††ööóóòòòòò + .OduöeFD$Si_// ððððððýþþýýü Bk}~úúúúíä÷÷÷÷öñòóóóóó 4^yøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø|ìܬ¦®Ççìììøøøøìâç½±’Œˆ‡‡‡†††††††††††††††††††††††ööööóóòòòòò .Opue?2$'//$ ððððððþýþýýý 7g}~~úúúúí‰÷÷÷÷÷öòòóóóóó +Pyøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâܺ©¾Öìâììøøìâ÷çÖÓ§š•Œ‡‡‡†††††††††††††††††††††††††öööööóóòòòòò .Oduu`4'' ððððððýýþýýý Kr~~~úúú퉉÷÷÷÷÷öòòóóóóó +(^‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø|âÇ»ÏóãêâìâöææÞÓ§®’Œˆ‡††††††††††††††††††††††††††††öööööööóòòòòññ .Ddps>.  ððððððýýþýýþ Vs‚}~úíù‰‰‰÷÷÷÷÷öòòóóóóó + + +2G‚|øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøìÒÄÅÌ×××ÖÝÓ×½§®šŽ‡‡††††††††††††††††††††††††††††††öööööööòòòòòòñ .=iYZ/ ððððððýýþýýý 2AV}yùùù‰‰‰‰÷÷÷÷÷öòòóóóóó + + + + +4X‚|øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøâçÙÇÎÀ½±±±±§±™•Ž‡‡††††††††††††††††††††††††††††††††ööõööööòòòòòòñ .//$ ïðððððþýýýýý DTk}ùù‰‰‰‰‰÷÷÷÷÷öñòóóóóó + + + + + + +*X‚‚øøøø|øøøøøøøøøøøøøøøøøøøøøøøøøøø|ìêâþ¡•——’’’Œ‡†††††††††††††††††††††††††††††††††††öõõööööòòòòòññ /$ ïðððððýýýýýý Bc}ùù‰‰‰‰‰‰÷÷÷÷öòòóóóóó + + + + + + + +=^j‚‚|ïn|øøøøøøøøøøøøøøøøøøøøøøøøøøøìâçäÇ°ŽŒŽŽŒŒ††††††††††††††††††††††††††††††††††††††öõõööööòòòòòññ  + ïðððððýýýýýý 0Xyùù‰‰‰‰‰‰‰÷÷÷÷òòóóóóó + + + + + + + + + + .=jebAfy|øøøøøøøøøøøøøøøøøøøøøøøøøøøìâæТŽŽŽŒ††††††††††††††††††††††††††††††††††††††††õõõööööòòòòòññ ïðððððýýýýýþ &Mk}ù‰‰‰‰‰‰‰‰÷÷÷÷òóóóóóó + + + + + + + + + +.8ZA/@\‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøììçÛ¶˜ŽŒŒ††††††††††††††††††††††††††††††††††††††††õõöööööòòòòòòñ ïðððððþýýýýý )Mzyù‰‰‰‰‰‰‰‰‰÷÷÷÷÷òóóóóóò + + + + + + + + + + + + + +'/&Ke|øøøøøøøøøøøøøøøøøøøøøøøøøøøøìììâÜǪ™•Œ††††††††††††††††††††††††††††††††††††††††õõöööööòòòòòòñ ïððððïýýýýýý #Jgfy}‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷óóóóóòƒ + + + + + + + + + + + 4j‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøøì÷÷ì濨ŽŒŒŒ†††††††††††††††††††††††††††††††††††††õõõööööòòòòòòñ ïððððïýýýýýþ 9]zey}‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷÷óóóóóòò + + + + + + + + + + + + + + + *Q‚‚øøøøøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷ìççÒ͸ž–ŽŽ†††††††††††††††††††††††††††††††††††††õõõöööõòòòòòòñ ïððððïüýýýýý -Mgey}ù‰‰‰‰‰‰‰‰‰‰‰‰÷÷÷÷÷òóóóòòò + + + + + + + + + + + + +Oly|øøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷âä˼¬˜•†††††††††††††††††††††††††††††††††††††õõõööõõòòòòòòò ðððððïüþýýýü -@]ey}ùù‰‰‰‰‰‰‰‰‰‰ˆˆˆ÷÷÷÷÷òóóóòòò + + + + + + + + + + + + + + + +(>u‚øøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷çæÙʶ™†††††††††††††††††††††††††††††††††††††õõõöõõõòòòòòòò ððððððüýýýýü +]Xy}ùùù‰‰‰‰‰‰‰‰ˆˆˆˆˆˆ÷÷÷÷òòóóóòò + + + + + + + + + + + + 2_w‚|øøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷êæÙÚŒ††††††††††††††††††††††††††††††††††††õõõõõõõòòññòòò ððððððüýýýþü @Ukyùùùù‰‰‰‰‰‰‰ˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + + + +D_u|‚|øøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ìê⤎Œ†††††††††††††††††††††††††††††††††††õõõõõõõòñññòòððððððýýýýýü  Mfyùùùùù‰‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + +.Sl‚wø|||øøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷æЬ•ŒŒ††††††††††††††††††††††††††††††††††õõõõõõõññññòðððððþýýýýü -Nyùùùùùù‰‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆ÷òóóóóòò + + + + + + + + + + + + + + .88iew|||øøøøø||øø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ì÷÷ܺŸ•ŽŒ†††††††††††††††††††††††††††††††††õõõõõõõññññððððýýýýýü )Ky}ùùùùù‰‰‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷òóóóóòò + + + + + + + + + + + + + +$88_w|‚wøøø÷|÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷âÜȬš•Œ†††††††††††††††††††††††††††††††††õõõõõõõñññððïýýýýýý Eeyùùùùù‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷òóóóóóƒ + + + + + + + + + + + + + AAîhw‚÷‚‚‚‚÷w÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷æκ¨’ŒŒŒ††††††††††††††††††††††††††††††õõõõõõõññðïüýýýýþ 7cy}ùùùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + A88e8ZYlpww÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷æÙ˹¢–ŒŒ††††††††††††††††††††††††††††††õõõõõõõñïüüþýýý :er}ùùùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + + +$8Z//AA8Yipwww÷w÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷w÷wì÷êêââǸ–Œ†††††††††††††††††††††††††††††††õõõõõõõüüýýýý &Kyùùùùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + +/''ASSYuwwww÷w÷www÷÷÷w÷w÷wwwww÷w÷÷öÎÅ•Œ†††††††††††††††††††††††††††††††îîïïïïòòòòòòò ;fyùùùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóó + + + + + + + + + + + + + + + + + + + + + +$'/AZAY_npujpwwwpuwupwdij__qwì÷÷ìêÏ¡•Œ†††††††††††††††††††††††††††††ïîïïïïþ÷òòòòòòò 2fy}ùùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóò + + + + + + + + + + + + + + + + + + + + + + + + + + + +/'AA8ZZîAAA88Zb8Z/A//8Abqw÷w÷êסŽŒ†††††††††††††††††††††††††††ïïïïïïþþ÷÷òòòòóòò Iey}ùùˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ÷÷óóóóóóò + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/$.8//'/A'/.2$8qww÷÷êÏ¡Œ††††††††††††††††††††††††††ïïïïïðþþý÷òòòóóòò 4fr}}ù6 200 125 1 +ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõôô?WiêÄ”‡‡ñññññòþþýýôôôõõõôErvvùƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõôô33McbæÄ›‹‰‡òññññòþþþýýôôôõõõõ -arvùƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôô#<3`p÷ʶ¡‰òòññòòþþýýýþôôôõõõõ 7{vùƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôó#Mj÷ÝŦ™‰òòñòòòþþýýýý…ôôôõõõõ 6\{vƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôó-D(MHgÙ¸¦òòòòòòþþýýýý…„„óôõõõõõ &V]øƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚õõõôôôó4GUA53_läêÁ°–‡òòòòòòþþþþýý„„„„„óôõõõõõ E{rƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚÷õõõôôóó-GhpnV7!(Bg÷äæÅŸ‰‡òòòñòòþþþþþþ„„„„„„„÷óôõõõõõ2Vrƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚÷÷õõôôôóó DhnpVA*:yiêç´òòññòòþþþþþþ„„„„„„„„„÷ôôõõõõõ>{‡„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚÷÷÷õõôôóóó;bpbFx0]bp÷ß~Œòòñññòþþþþþþ„„„„„„„„„„„÷ôôõõõõõ +]‹‡„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷õôôôóóó0Npôô{bV5,.bnê·òòññññþþþþþþ„„„„„„„„„„„„„÷ôôõõõõõ@¦“‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷ôôôôôóó?Npp÷fönbVA+:gnnêäÚž‡òñññññþþþþþþ„„„„„„„„„„„„„„„÷ôôõõõõõ2ƨ”„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ö÷÷÷÷÷ôôôôôôôJbpóWlniVFx:\iöæ嬞òñññññýýýþþþ„„„„„„„„„„„„„„„„„÷óôõõõõõ!ÝÊ«”‡„ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ö÷÷÷÷÷÷ôôôôôôô;U94.Hbn]`j\nb]I5?ORlõÚòñññññþýýýþþ„„„„„„„„„„„„„„„„„„„÷ôôõõõõõìáÁ«“‡„ƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ö÷÷÷÷÷÷ôôôôôôô'D^^d;x%=XbnbX[cnni]7#<3¢ññññññýýýýþþ„„„„„„„„„„„„„„„„„„„„„÷ôôõõõõõøíçÊ´›ˆƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ö÷÷÷÷÷÷ôôôôôôô';Ubnpn>/%=\bbVXW`nnn]F!Cññññññýýýýþþ„„„„„„„„„„„„„„„„„„„„„„„ôõõõõõõ øøøç×ƨˆƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôôô'GUb`gnpH/%JXib\XW`nnn{I!ññññññýýýþþþ„„„„„„„„„„„„„„„„„„„„„„„„„ôõõõõõôìøøììÞʯ‹‡‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôôô';^b_ñ,:Wln`3.:Mgg=.yJW<)ððññññþýýýýý…„„„„„„„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒôõõõõôô‰‚‚‚‚‚‚‚‡‡ž­»ËèçøøííççááíæÅÁ¦”‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôõõ-UbbK86R|{nV7,?W\nn]Xy%MgnN::))#ððññññýýýýýý®ˆ…„„„„„„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒôõõõõõô£‡‚‚‚‚‚‚ƒƒ‡‡ˆ–½ËóçøøíøíííøíçæÍ°”‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôõõ1NnnQEAW|{nV70BWgnn]Hy0xJing(#)ððññññþýýýýýÿ¤ÔŽŠˆ„„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõõ¾”‡‡‚‚‚‚‚‚‚ƒ‚‡”~Óúíøøøøøøøøíáç͘ˆ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôõõõ?g{]YSf|{nV70:Wgnn]P>5GXbj<ðñññññýýýüüüÿ}ÔÔɺœ‘„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõõÛ§”‹‰‡‚‚‚‚‚‚‚‡¹Ôàííøøøøøøøøíçß·Œ‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷õõôõõõõ(=gpppnkdrnV70:Wgnn]V^L]\R<)ðñññòòþýýüüüÿïúàÞÝÊÆ£“„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõõç×ÜÀš‰‡ƒ‚‚‚‚‡®ÔæçíøøøøøøøøøíæΈ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷õõõõõõõ(g{pp{qtnV70?Wlnn]zzgW<)ñññòòòýýýüüüÿûúîøøøì×Ä¡‹„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõõíîØȺÀ”‡‚‚‚‚ƒˆ¤ÏççíøøøøøøøøøíáÕ»‰‡‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷õõõõõõõ(B\unV7,:WgiiniW<)ñññòòòýýýüüüKkvúúéîéîìá·”ˆ„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõ|øøøíêÊÒ¿¤‰‚‚‚‚‡ ÂçívøøøøøøøøøíøÑ­‡‚‚‚‚‚‚‚‚‚‚‚÷õõõõõõõ(?i÷jnnb7,:W\ig_<)#ññòòòòýýýýüü-Towúúúúúî×Í«‹…„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõôøøøøøç×϶“‡‡‡ˆ Ôçøøøøøøøøøøøøçä­”‡ƒ‚‚‚‚‚‚‚‚‚õõõôõõõ(B\p÷_WnnpV7,:cR<)#ñòòòòòþþþýüü DkwwúúúúúùÝǨˆ„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõôôøøøøøøíì׺šˆ‰¡ÌçíøøøøøøøøøøíçÛ­’‡ƒ‚‚‚‚‚‚‚‚õõõôôôô(in÷ñ[`inX7,(())#òòòòòòþþýýüü 5bkúúúúúúúúÝ„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõôôøøøøøøøííøìŧ‹£ÆççíøøøøøøøøøçêÕ»Œ‡‚‚‚‚‚‚‚÷õõôôôôô(?iikXMM`iX5,()#òòòòòòýþýýýü $CkvúúúúúúîìË„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôôøøøøøøøøøøvçÍ°“”¶ÞííøøøøøøøíççæÖ­‡‚‚‚‚‚‚÷÷õõôôôôô(B\ndPM#Win\Bòòòòòòýþýýþü 0bkwúúúúîîìÝ»‹„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôóøøøøøøøøøøøøíÙ«¡¡ÅêíííøøøøíçíçßÚ­‡ƒ‚‚‚÷÷÷÷õõôôôôô(\n{7?M`W))òòòòòòþþþýýü %=kvwúúúúîøß·–‡„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõôôóøøøøøøøøøøøøøáʸ¦¼ßíçííøøíçíçßТ”‡‚‚‚÷÷÷÷÷õõôôôôô(ii]7%#))#òòòòòòýýþýýý &^vwwúúúúîæÔˆƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõôôôøøøøøøøøøøøøøøÝŶÑßæççøçêææÛТ~‡ƒ‚÷÷÷÷÷÷÷õõôôôôô(?\nnX/##òòòòòòþýþýýþ FkwwwúúúîÝИ‡„‡ƒƒƒ„‡„‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚õõõôôøøøøøøøøøøøøøøøçÝÏÂÃñÕÕÕßåÐÕ»¢¡™‰ƒ‚÷÷÷÷÷÷÷õôôôôóó(?\igJ(òòòòòòýýþýýý Og{vwúîîøѬ‹ˆ‹ˆ„‡ˆ‹“‹ˆ„‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚÷õõôôøøøøøøøøøøøøøøøøçç×Åǽڭ­­­¢£‰‚‚÷÷ö÷÷÷÷ôôôôôôó(?`<)òòòòòòþýþýýý %{vùùùùùùøøøøøøøøøøøøøøøøøøøçáÝÒ¶“‡‡‡ˆ¥Ôçøøøøøøøøøøøøçæ­”‡‚‚‚‚‚‚‚‚-D(MbgÙ¸¦òòòòòòþþýýýþ…„„ôôôõõõõ 6N{vùùùøøøøøøøøøøøøøøøøøøøøøøííì׺šˆˆ¡ÌçíøøøøøøøøøøíçÛ­’‡‚‚‚‚‚‚‚‚4GUA5_gÙÊ°–‡òòòòòòþþþýýý„„„„„óôõõõõõ &]{uvùøøøøøøøøøøøøøøøøøøøøøøøøííøìŧ‹£ÆççíøøøøøøøøøçêÕ»Œ‡‚‚‚‚‚‚‚4GhnnV7!(Bg÷äæÅŸ‰‡òòòñòòþþþþþþ„„„„„„„÷óôõõõõõ A{røøøøøøøøøøøøøøøøøøøøøøøøøøøøøøÍ°“”¶ÞííøøøøøøøíççæÖ­‡ƒ‚‚‚‚‚ ;hn{øpVA*Ngêçªòòññòòþþþþþþ„„„„„„„„„÷óôõõõõõ2VrøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøçÙ«¡¡ÅêíííøøøøíçíçßÚ­‡‚‚‚‚9b{bFx!,]nn÷ß~Œòòñññòþþþþþþ„„„„„„„„„„„÷ôôõõõõõ>{øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøùçʸ¦¼ßíçííøøííççßТ£‡‚‚‚0NpôôpbV5,.Vnêέ‡òòññññþþþþþþ„„„„„„„„„„„„„÷ôôõõõõõ+]{øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøvçæŶÑßæççíçêææÛТ¡‡ƒ‚?\ppöfönbVA+?gnn÷ä»™‡òñññññþþþþþþ„„„„„„„„„„„„„„„÷ôôõõõõõ@]øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøìÝÏÂÃñÕÕÕäÑÐÕ»¢~™‰ƒ‚ybpóWõ]iVF5?\n÷öÖ¾™òñññññþýýþþþ„„„„„„„„„„„„„„„„„÷ôôõõõõõ2Q{uøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøçç×Åǽڭ­­­¢£‰‚‚;U94.Hbn]`jjnb]I5:ORöõÚòñññññýýýýþþ„„„„„„„„„„„„„„„„„„„÷óôõõõõõ !Q{{uøøøuøøøøøøøøøøøøøøøøøøøøøøøøøøøvíçáÊÁ~™’’‡‚'DU^d;x%=XbnbX[cnni]7#<<<ññññññýýýýþþ„„„„„„„„„„„„„„„„„„„„„÷ôôõõõõõ :P{{{uñfluøøøøøøøøøøøøøøøøøøøøøøøøøøøííá쫉‡‰‰‡‡‚-;Ubn{n>/%B\bbbPW`nnn]F!Cññññññþýýýþþ„„„„„„„„„„„„„„„„„„„„„„„ôôõõõõõ(b][,:Wln`3.R\X=.yJW<)ððññññþýýýýþ•…„„„„„„„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒôõõõõôô (33O]uuuøøøøøuuøøÙµ›õ-UbbK8*R`{nV7,?Wgin]Py0%RgnN::))#ððññññýýýýýý®ˆ…„„„„„„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒôõõõõô|33Wp{{øøøuÙÆõõõ1NnnQEAW|pnV70BWgnn]Hy0xJing()#ððññññþýýýýýÿ§ÔŽŠˆ…„„„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒôõõõõõô<<ðRn{{{{{æõõõ?Xpp]YSf|unVx0:Wgnn]P75GXij<ðñññññýýýüüüÿ}ÔÔɹœ“…„„„„„„„„„„„„„„„„„„„„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒõõõõõõõ(<3ðg{3/%B\bbbXööö÷÷÷öôôôôôôóñòòòòñüýýýýþ  -G^]rvùùùùùùùùùùùùùùùùîøøìøøøá×ƨˆƒƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôôô'DUb`gnpH/%JXbb\ööö÷÷ööôôôôôôôòòòòòñüýýýýü  -9U]rvùùùùùùùùùùùùùùùùùøååáìøøøáéʯ‹‡‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôôô';Un_[ÚWipH,%@bniööö÷öööôôôôôôôòòòòòòýýýýýü  +UQrvùùùùùùùùùùùùùùùùùøáÚ»ËÛÝìøøìí׿Žˆ‡‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôôôô4Un{j<(::inB.bnnöööööööôôóóôôôòòòòòòüýýýýü  ;SkrùùùùùùùùùùùùùùùùùøìÑ»±ž½ÎæìøøìíúŪ—“‰‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôôôõ6Nnppb@0%ipñy0Bbnöööööööôóóóôôòòòòòòýýýýþü  DYrùùùùùùùùùùùùùùùùùîøçÕ­”–±ÃÛÝøøøøáÏɺ¤”‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôõõ ?g{n]P2,JcnnfG-$0=nöööööööóóóóôòòòòòýýýýýü  'Lrùùùùùùùùùùùùùùùùùîøøøä»”ˆˆ˜·ÐáøøøøøÝ×ÓÉ ˆ‡‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôõõ 4U5,?Wg]p]PCF^nrqd]E+5Nöööööööóóóóòòòòþýýýýü  &F]vùùùùùùùùùùùùùùùùùùøìæÔˆ‡„ˆ·Ãäìííøííá쯑ˆ‰‡‡‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôõõ4UHP7,:Wlnn]dskrinpbH/@öööööööóóóòòñýýýýýý  ;{rùùùùùùùùùùùùùùùùùîîøáαˆ„ƒ‡‡‡Œ·Õæáçøøííá׸¦””‹ˆ‰‰‡‡‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷÷ôôôôôõõ%JnV7,BWlnnk{kcðRibH5öööööööóóòñüýýýýþ  8zrvùùùùùùùùùùùùùùùùùùùÝÙ·ˆ‡ƒ‚ƒ‚‚‡·½ËÛçíííøíÝÊÀÔ¹©©®›“ˆ‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷÷ôôôôõõõ (`ppV7,?Wgppn<<,:Wln`3.:Mggöööööööüüþýýý  !EkùùùùùùùùùùùùùùùùùùùøøøÙ±ˆ‚‚‚‚‚‚‚‡‰™»ËèçívííççááçæÊƦ”‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôõõö-UbbK8*R`p]V7,?Wgin]Xy%Mgnnððññññôôóôôôô  6drùùùùùùùùùùùùùùùùùùøøøá㇃‚‚‚‚‚‚‚‡‡ˆ–½ËåçøøíøííøøøáæÍ°”‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôôõõ1NnnQEAW|pnVx0BWgnn]Hy0xcbnñðññññþôôôôôôô %KrvùùùùùùùùùùùùùùùùîøøøøÛ¾”‡‡‚‚‚‚‚‚ƒ‚‚‡”~Óúíøøøøøøøøøáç͘‰‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷÷÷ôôôõõõ?Xp]YSf|{nV70:Wgnn]P>5GXiññññññþþôôôôõôôC]rvùùùùùùùùùùùùùùùøøøøííĨ”ˆ‡‚‚‚‚‚‚ƒ‡¹Ôàìíøøøøøøøøíçß·Œ‡‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷õõôõõõ(BgppnkdrnV70:Wgnn]V^L]\ñññññòþþýôôôõõôô2Yrvvùùùùùùùùùùùùøøøøøøøíç×ÜÀš‰‡ƒ‚‚‚‚‡®ÔæçíøøøøøøøøøíæΈ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚÷÷÷õõõõõõõ(g{pp{qtnV70?Wlnn]zzgWTRAN1P 256 +ÇXÏM=ðAF§ªm4310ZQw NM›s ¿Kp ”“I¶þ‘ÙH!³ùGÕ!Óö<%_)i #!ôÑ-®ÐZ){-g ¿5!W)4%ß9«ïÿ=DÌT)ª—11%¸5Ë–1?FBÙ9ú=_Jù=r- !B¨P)ë“1ÉÕ9|N¿V³5ê‘18FœRYJ§zNo-ÿ^È,%±5M)6Fó=™R +!1?g°5m-4FŽ1oÐ9—Rñ=ú^3FŸs\k2FSJtN5!>l)æ@0f‹uDHPTp!DBHc\cTcPB4cH„d¥|cD„TB(„P„Hç|„DÆdc0„<çhuqç\J}! )mJuçP)ik}„,çLUBŒ}JeQkmcMŒqJ]ke„$JUï}cç8„ ­iïu~ïq­aŒY¥$JIïmÎeŒUR~)=Î]¥ 1nszŒMkE”~Æ$1µ~­Mç()5Rj^snïUc-k=÷~RbŒAR^÷v9)-ÎEïI”bk5sZïEo1N1JsR÷b„¥ÆJ)k-Œ1Î9ï=RJsN”RÖZ{oœs½wÿTRAN2P 256 +ÏYÏQ=ðA§Ž5ªm4310ZNM›s ¿q Kp –”“I¶ÚþÙH!³GÕ!Óö<%_)i #ôÑ®ÐòZ)Ÿ1{-g ¿5!W)4%«ï3%ÿ=DÌv-ªý=S)1%¸5–1?Fû=ú=_J=FÊr- !B¨P);Fë“1÷=ÉC[J|N¿V³5ê‘1œR§zNo-Ó97Fÿ^È,%±5BM)™R +!?g°5m-4FŽ1oÐ9—Rñ=ú^3FŸs\k2FSJtNÿ9šNÐ5>l)zDHLPTp!DBLBHc\cTB4cH„d¥|cD„TB(„P„H„DÆdc0çhyÆXu„8mç\)qJ}ÆH! JuçP)ik})e„,Æ@kuUBŒ}QcMke„$Œm­qJUk]ï}cç8Îq„ ­i~­aŒY¥$JIïmÎeŒUR~1v¥ szŒM)9f”~1jÆ$1RnkAç()5^Ö~Rf­I-k=Rb÷vR­ARZ)-ÎEïI”bk5ïEo1JsR„¥ÆJ)k-Œ1­5Î9ï=1FRJsN”RÖZ{oœs½wÿTRAN3P 256 +=ðAF§ª4310Zw NM›r ¿q Kp ”“I¶ÙH!³!GÕ<%_)i #!ôÑ-®óÐZ)ñg ¿5!W)4%›1ß9«ÿ=DÌT)ª1%¸5Ë–1?FÙ9ú=_Jr-×9 !B]J¨P)ë“1÷=É[J|N¿V³5ê‘18FœR§o-Ó9ÿ^È,%yN±5M)6F™R +!1?g°5m-4FŽ1oÐ9—Rñ=ú^3FŸs\k2FSJtN5!šN>l)zæ@0fDHLPTp!DBLBHc\cTB4cH„d¥|cD„XB(„P„Hçx„DÆdc0„<çhÆXuB„8qJ}ÆH! ¥<)mJuçP)i]k}kuU¥4BŒ}JeQ„(kmMŒqJ]ke„$JUÎuï}cç8„ ¥(­i~­aŒY¥$JIïmÎeŒUrR~Î]¥ szŒM)91jÆ$1Rnsrµ~ç()5^Rf­Ick=÷~ïQRbŒAïM{9­A)-ÎEïIk5sZïEo1N1JsR÷b„¥ÆJ)k-Œ1Î9ï=RJsN”RÖZ{oœs½wÿTRAN4P 256 +ÇXÏeÏ]®QÏQÏAðA§ªm4310Zv Nt M›s q Kp ß“I¶ÚþH!³ùGÕ!Óö<%_)i #ôÑ®ÐZ)Ÿ1{-ñg ¿5!W)4%ß9«ïÿ=DÌv-ªý=S)1%¸5Ë–1?Fû=ú=_J=Fr-×9 !B¨P);Fë“1É|N¿V³5ê‘18FßZYJ§zNo-Ó9È,%±5M)6F +!?g°5m-4FŽ1èoÐ9—Rñ=ú^3FTJŸs\k2FSJtN5!Ð5>l)z‹uDHPTp!H!L!DBLBDc\cTB4„d¥|B,„X„PB$„Hç|„D„<çhy„8qç\ÆH! „0¥<)mJuçPJqk})eYÆ@)aU¥4JiBJecMŒmÎ}¥,JUcÎqïu~ÎiŒY¥$JI9ŒU„ÎaR~1vn)=szÎY”~ï]1jbRnç()5Rj^Ö~­Ic-k=Æ ïQ)1RbŒAR^÷vR9ÎEïI”bk5sZïEo1JsR÷b„¥ÆJ)k-Œ1Î9ï=1FRJsN”RÖZ{oœs½wÿ \ No newline at end of file diff --git a/IMG/ARC/TRANPLAC.IMG b/IMG/ARC/TRANPLAC.IMG new file mode 100644 index 0000000..0a18efe Binary files /dev/null and b/IMG/ARC/TRANPLAC.IMG differ diff --git a/IMG/ARC/TROPHY.IMG b/IMG/ARC/TROPHY.IMG new file mode 100644 index 0000000..e883e3a Binary files /dev/null and b/IMG/ARC/TROPHY.IMG differ diff --git a/IMG/ARC/TROPHY1.VDA b/IMG/ARC/TROPHY1.VDA new file mode 100644 index 0000000..573b58a Binary files /dev/null and b/IMG/ARC/TROPHY1.VDA differ diff --git a/IMG/ARC/TSMLOGO.IMG b/IMG/ARC/TSMLOGO.IMG new file mode 100644 index 0000000..4e71270 Binary files /dev/null and b/IMG/ARC/TSMLOGO.IMG differ diff --git a/IMG/ARC/TTITLE.BDB b/IMG/ARC/TTITLE.BDB new file mode 100644 index 0000000..c9458f0 --- /dev/null +++ b/IMG/ARC/TTITLE.BDB @@ -0,0 +1,16 @@ +ttitle 2000 1000 255 1 4 14 +ttitle 292 697 288 570 +4600 314 351 0 3 +4000 359 330 3 0 +4000 372 330 6 0 +4000 372 515 9 0 +4000 372 427 C 2 +4000 372 339 F 2 +4000 372 338 12 1 +4300 374 338 15 1 +4000 497 430 18 2 +4000 499 342 C 2 +4300 499 338 1B 1 +4000 500 330 1E 0 +4000 500 515 9 0 +4410 612 330 3 0 diff --git a/IMG/ARC/TTITLE.BDD b/IMG/ARC/TTITLE.BDD new file mode 100644 index 0000000..fe29067 Binary files /dev/null and b/IMG/ARC/TTITLE.BDD differ diff --git a/IMG/ARC/TTLSCR.IMG b/IMG/ARC/TTLSCR.IMG new file mode 100644 index 0000000..74ff887 Binary files /dev/null and b/IMG/ARC/TTLSCR.IMG differ diff --git a/IMG/ARC/VIEWHP.BDB b/IMG/ARC/VIEWHP.BDB new file mode 100644 index 0000000..75e5e8c --- /dev/null +++ b/IMG/ARC/VIEWHP.BDB @@ -0,0 +1,9 @@ +viewhp 2000 1000 255 1 2 7 +viewfrt 892 1377 161 455 +4B00 938 351 0 0 +5A00 1096 207 3 0 +5A00 1120 259 6 0 +5A00 1129 187 9 0 +5A00 1133 191 C 1 +4B10 1136 351 0 0 +5A00 1142 191 F 1 diff --git a/IMG/ARC/VIEWHP.BDD b/IMG/ARC/VIEWHP.BDD new file mode 100644 index 0000000..1e763ab Binary files /dev/null and b/IMG/ARC/VIEWHP.BDD differ diff --git a/IMG/ARC/W3JSFT.IMG b/IMG/ARC/W3JSFT.IMG new file mode 100644 index 0000000..6092b57 Binary files /dev/null and b/IMG/ARC/W3JSFT.IMG differ diff --git a/IMG/ARC/WGSFNT18.IMG b/IMG/ARC/WGSFNT18.IMG new file mode 100644 index 0000000..0890ed3 Binary files /dev/null and b/IMG/ARC/WGSFNT18.IMG differ diff --git a/IMG/ARC/WILLIE.IMG b/IMG/ARC/WILLIE.IMG new file mode 100644 index 0000000..222dd4b Binary files /dev/null and b/IMG/ARC/WILLIE.IMG differ diff --git a/IMG/ARC/WILLIE2.IMG b/IMG/ARC/WILLIE2.IMG new file mode 100644 index 0000000..d40be89 Binary files /dev/null and b/IMG/ARC/WILLIE2.IMG differ diff --git a/IMG/ARC/WILLIE3.IMG b/IMG/ARC/WILLIE3.IMG new file mode 100644 index 0000000..0f64274 Binary files /dev/null and b/IMG/ARC/WILLIE3.IMG differ diff --git a/IMG/ARC/WILLIE4.IMG b/IMG/ARC/WILLIE4.IMG new file mode 100644 index 0000000..88a497c Binary files /dev/null and b/IMG/ARC/WILLIE4.IMG differ diff --git a/IMG/ARC/WILLIE5.IMG b/IMG/ARC/WILLIE5.IMG new file mode 100644 index 0000000..72d79a4 Binary files /dev/null and b/IMG/ARC/WILLIE5.IMG differ diff --git a/IMG/ARC/WILLIEF.IMG b/IMG/ARC/WILLIEF.IMG new file mode 100644 index 0000000..de5ca67 Binary files /dev/null and b/IMG/ARC/WILLIEF.IMG differ diff --git a/IMG/ARC/WILLY_O.IMG b/IMG/ARC/WILLY_O.IMG new file mode 100644 index 0000000..1b1aad9 Binary files /dev/null and b/IMG/ARC/WILLY_O.IMG differ diff --git a/IMG/ARC/WILSTANC.IMG b/IMG/ARC/WILSTANC.IMG new file mode 100644 index 0000000..ef2c272 Binary files /dev/null and b/IMG/ARC/WILSTANC.IMG differ diff --git a/IMG/ARC/WNLP.IMG b/IMG/ARC/WNLP.IMG new file mode 100644 index 0000000..1d9b941 Binary files /dev/null and b/IMG/ARC/WNLP.IMG differ diff --git a/IMG/ARC/WST.IMG b/IMG/ARC/WST.IMG new file mode 100644 index 0000000..9a1cda5 Binary files /dev/null and b/IMG/ARC/WST.IMG differ diff --git a/IMG/ARC/YESNO.BDB b/IMG/ARC/YESNO.BDB new file mode 100644 index 0000000..6ce5926 --- /dev/null +++ b/IMG/ARC/YESNO.BDB @@ -0,0 +1,55 @@ +yesno 2000 1000 255 1 5 53 +yesno 448 1041 251 639 +100 461 261 0 0 +200 461 511 3 0 +200 461 265 6 0 +200 461 389 6 0 +200 461 368 6 0 +220 461 515 3 0 +200 467 511 9 0 +100 467 261 9 0 +200 467 389 C 1 +200 467 265 F 1 +200 467 265 12 1 +220 467 515 9 0 +200 467 269 C 1 +200 471 265 15 1 +0 471 268 18 2 +0 471 388 18 2 +0 471 508 18 2 +400 497 288 1B 4 +300 499 289 1E 1 +100 561 261 9 0 +200 561 511 9 0 +220 561 515 9 0 +200 565 265 15 1 +0 651 268 18 2 +0 651 388 18 2 +0 651 508 18 2 +220 654 515 9 0 +100 655 261 9 0 +200 655 511 9 0 +200 660 265 15 1 +100 747 261 9 0 +220 748 515 9 0 +200 749 511 9 0 +200 754 265 15 1 +200 757 511 9 0 +200 757 261 9 0 +220 763 515 9 0 +400 776 288 21 4 +300 777 289 24 1 +0 831 268 18 2 +0 831 388 18 2 +0 831 508 18 2 +100 851 261 27 0 +100 851 382 6 0 +200 851 389 6 0 +200 851 511 2A 0 +200 851 265 6 0 +210 855 265 6 0 +210 855 387 6 0 +210 855 389 6 0 +210 855 511 2A 0 +110 855 261 27 0 +220 857 515 2A 0 diff --git a/IMG/ARC/YESNO.BDD b/IMG/ARC/YESNO.BDD new file mode 100644 index 0000000..d1ba2d5 Binary files /dev/null and b/IMG/ARC/YESNO.BDD differ diff --git a/IMG/ARC/YES_NO_3.IMG b/IMG/ARC/YES_NO_3.IMG new file mode 100644 index 0000000..6b414d5 Binary files /dev/null and b/IMG/ARC/YES_NO_3.IMG differ diff --git a/IMG/ARROWS.IMG b/IMG/ARROWS.IMG new file mode 100644 index 0000000..c8e515c Binary files /dev/null and b/IMG/ARROWS.IMG differ diff --git a/IMG/ARROWSN.IMG b/IMG/ARROWSN.IMG new file mode 100644 index 0000000..0814cba Binary files /dev/null and b/IMG/ARROWSN.IMG differ diff --git a/IMG/ATTBAR2.IMG b/IMG/ATTBAR2.IMG new file mode 100644 index 0000000..0308972 Binary files /dev/null and b/IMG/ATTBAR2.IMG differ diff --git a/IMG/ATTRACT.BDB b/IMG/ATTRACT.BDB new file mode 100644 index 0000000..3657a80 --- /dev/null +++ b/IMG/ATTRACT.BDB @@ -0,0 +1,6 @@ +ATTRACT 2000 1000 255 1 1 4 +ATTRACT 229 699 195 511 +4000 272 229 0 0 +4000 272 354 3 0 +4000 472 229 6 0 +4000 472 354 9 0 diff --git a/IMG/ATTRACT.BDD b/IMG/ATTRACT.BDD new file mode 100644 index 0000000..0ceb4e3 --- /dev/null +++ b/IMG/ATTRACT.BDD @@ -0,0 +1,127 @@ +4 +0 200 125 1 + #%('('('('(''$" !$'''''((''''&'%"  + + + + + +  +!#$&''('''('(&#  !#&'''('(''&'&'$!  +  !"#&'('('''('%"  "%''('(''&'&'&#! +   + !!#%('(''''''$  !$'(('''''&''%#!   !#$''('''('&# "$'''''&&''&'$#  !"$&''''(''$" + !$&'''&''&'''$"!"$%''''''&$! "#%''''&''''&#! !"#%''''''&#   !"$&''&'''''%#  !"#%&(''''%#   !#%''''&'''$! !"$&'''''%"!"%''&''''&"  !#$&'''&&$" "$&''''''%"!!##%&'''&#  "$%'''''&#!  !"##%'''$"  "#%''''&%#!  ! !#%'&&#" !"#%''''&%#! !#%'&%"!!  !#%&''&'$#! !#$%&$"!!!!"$&''&&$#! !"#%&$##" !"#%&'&&#"!  !"$%%$$!  !!"$&''%$"!  "%%%$#! !"$%''%$""!!#%%%#!!  !#%'&%$#"!"%&%%#"! !#%'&$##!!#%&%$#"!  "#%'&%#"  #$%$#$#!! !!"#%&%%$! "#$$###"!  !##%%&$" "####""""!  !##$%%#!!"""!"!!""!  !"#%$$" !"!!!!!!!!!!!!  !!#$$#"! "!! !!!!!!!!! !!"####! !!  !!!!"!!!""###!    !!""  !"""##"!   !   !!"!!!"""""#!   !!!!!!  !!""""!!!  !!!"!!  !!!!!!!  !!""!  !!!!!  ! !"!!  !!!  ! !"!! !  !!  !!"!!!    !!!      !!  !    !!!    !!!    !   !!!     !!!! !!    ! !!  !!!  !    !   !      ! !!      !    !    !  !!     !!      ! !"!   ! !!"!      !! !!  !      ! !!  !      !!   !!       ! !  !       !   !    !   !   !! !  !  !!   !  !  ! !   ! !!!!!    !  !  ! !!  !   !!!       !   !!  !   !""      !   ! !"!    !  !!   "#"!!     !! !  !!!!    !  !!  !""!    !  !!!! !!! !!! !   """      ! !! !!! !!!! !!  !!!!"##!           "!!   !"! !!! !#$#! !!!   !      !! !!! !"! !!   !#$#"  !!!!   !!      !  !!!  !!!  !!   "###"! !!!!  !        !!  !!!  !!!   "#$$! ! !!!      !  !  !   !"!!!!   !###!  !!  !        !   !  ""!  !!!  !"##!  !  ! !           ! !!!!! !"!  !!"! "###! !!!   ! !!     !     !! !!!!!!"! !"! !"! !!   !###!!!!!"!  !! !!!! !        ! !!!!!! !"#!  !!! !!!  !###"! !!!!!  !   !! !!!! !!     !    !!    ""!"!! "#"!  ! !!!! !!  "###"!!!!! !   !!!!""!!!     !    !!  !  """"!  ""!  !!!"!  !  !"#" !!"!!   !""!       !!!   !  !!    """! !""!  !!   !""! !"""!   !""!     !!   !!  !!  !!  !!    "!!!"#!  !   !""! !!"!!   !!!""!   !! !! !!!  !!! !!!! !! !!"    "!  ""!  !!  !##! ! !!""!   !  ! !!!!   !!!!   !"! !!! !!"!! !!   !!!   ! !""! !!!!  #$# !!! !!!!!  !!  !!! !!! ! !!!!   !"! !!! !!""!!!!!  !!!     !##"!  !!  !"##! !!! !!!! !! !!    !!!  ! !!!!!  !  !!!  !! !!""!!!!   !! !!   !##"!  !!!   !##"!!  !!  !!!!  !!!!!! !  !!   !!!!!  !!!  !!  !!! !!!!"!!  ! !!!    !"#"! !!!"!  !  !#$$! !!  !!  !!!!  !!  !!!  !!   !!!! !!!  !! "!  !!!""!   !!! !!   ! !###! !!"!!   ! !! !###!! !""  ! !!!!! !!!  !!!   !  !!!!! !!!  !! !!"! !!!!!!!  !!  !! !!  ! !###"!! !!"!"!!  !! ! "##"  !!!""! !!  !!! !!!!! !!!!    !  ! !!!!!!  !"!! !!!! !""!! !!"!"!!  !  !!  !!  !##""!!! !!!""!!     !##" !! !"#"!!!  !!!!!!!!!!!"!! !!  !!!!!!!  !"!  """!!!""!!!!!!!!!!    !!!!!  "##"!!!!!!!!!"!!  !!  !##"! !""!"##"!   !!!!!!!!!! !"!!  !!! ! !!!  !""! !"""! !"""!!!!!!!!   !  !! !! !!##$$"!!!!!""""!!    !!! !### !  !!"!"###"   ! !!! ""#!! !!!  !!!!  !""! !!""!!!!"""!!!!!!!   !  !! !!! !"###""""""""""!!   !!!!#$#!  !! !"""!"##!    ! !!!!!!"##!   !!!  !"!!  !""!! !!"!!!!##"!!!!!!!   !!  !!  !! ###"!!"""""""""!! !!!! "#%$#!!!!!!!! !!"!!"#"!   !!! !!!!!"##!  !!   !!!  !""!! !!"!!!""#"!! !!!   !! !!  !!  !!!  $##!!!"!"!!""!! ! !!!""! "#$$#!!!"!!!!!!!!!"!!!!""!   !!! !!!"!!###!   !!   !"!!   !""!!!!!!!!!"##"!!!!!!  !! !!  !!!!!! $#"!!"""""""!! !!!!!!""! "#$#"!!!!!!!!!!!!! !!!!!!##!   !!!! !!!"!!###!   !!   !!!! !! !""!!!!"!!!!"#""! !!!  !!!!   "!!!!!!! ! ##"""""!!""!! !!!""!""!  "$$##!!"! !!!!!""!!!!!"! !#"!   !"!!! !!""""#$#!   !"!  !""!!!!!!!! !"""!!!"""!!!#"!!!!! ! ! !!!!   !!!!!!!! "###""!!"""!!!"""""""" !"#$$#""""!! !!!"!!!!!!!""!! !""!    !""!!!!!!"!!###! !!! !!"!!!!!""" !""!"""""""!""""! ! !  !!!!  "!!!!!! ####""""""! !!"""""""! "#""!!"""""!!!!!""!!!"!!!!"! !""!   !""! !!""!!!###! !!! !"""!!!""#"!! """"""""""!!!""!!   !!! !  !! !!!!!! ####""#""!!!!"!""""!!!!##!!!""""!!!!!!!"!!!!!!!!!! !""!    !"!!!!"""!!!###"  !!! !"""!!!""#"! !""##""""""!!!""!! !   !!!!!  !  !!! """""###"!!"""""""! !"##! !"""!!!!!!!!!""!!!!""!!! !""! !!"! !"""""!!"$#!  !!!  !"""!!!""#"" !"###"""""!! !!"!!  !!!    !!!"!   !" """"###!!!"""!"""!!"#"! !"""! !!!! !!""!!""""!!! "!!  !"""!""###!!!###!   !!  !""!!!!"""!! !###"##""!! !!!! !!!  !  !!!!!!  !!!#$####"!!"""!"""! !"##" !"#"!!!!! !!"#""""""!!!!  ""!    !""""####""!!###!  !"!  !""!!!!!""!! !"##"##""!!! !!"! !!!!  !  !!!!!  !!!  ###$#"!!"""""""!  "#$#!  "#"""!!!!!!"##"""""!!!!!  ""!  !  !""""####""!!###!  !"!  !""!"!!!!"!! !"###"##""!! !!"! !"!!   !!  !!!! !!!!""!##$#"""""""""""!  "##"!!!!!  !##""""""!""###!!"!!!!!  "!!   ""#""""###"""###!  !!"#"  """"""!"!"!! !"##""""""!! !!"! !"!!!  ! !  ! !!! !""! ###"!!""""""""!  !"#"!!"#"!!  "###"#"""""###"!!!!!!!"! !"!!  !  !#""""#####""#$#"  !!!"#"  !""""""!""!!!!"#""""""!! !"! !!""! !! !!  !!  !!! !""! $#"!!!""""#""!  !"##! !#""!  "######""""###"! ! !!""! !""!  !  "##"""####"""###" !!!!"##  "##""""""!!! !"#"!!"""!!! !!"! !!""!! !!!! !!  !!!!!  !"! !  "$#""""""###"! !"#$#!  !"""!! !"######"""###""! !!!!"! !"!!  "###"""###"!"#$#"  !!!""##!  !"#""""""!!!!!""!!!!!!"!  !"!! !!!"""! !!"!! !!!  !!!!  !!!  ###""""#####"!  !!"#$#!!!"!  """!!! !"#######"""###!! !!!! !"!! !! !"###"""#"""!"###"  !!!"##"!  !""""""""""!"!!!"!! !!!!! !!"!! !!"""! !!"!! !!!  !!!  !! !##!"!"""####""  ""$$#!!!""""! !#"!!! !!!"########"#"#""!!  !!!!! !""!!! ! !####"##"""!!!###" !!""#$#!  "###"""""""!!!!"! !!!! !""! ! !"""!! !!"! !!!!!!!! ! "##! """"""##"! !!#$$$#!!""""""! !"""!!  !!!"#$#$###"""###"!  !!!! !""!!!! !!! !#######""!!!!###" !!!"""###!  "###"#""#""! !!"!  !!! !""! !!""""!!!""!!! ! !!!!!!"$#!"######""   !#$#$"!"#"""""#"! """!!  !##$$####"#"##"!  !!! !"""!!! !!! !#####""!!!! !###"!!!!!!"####!  !###"#""""! !"!  !!!  """!!!!""#"!!!!"!! !!! !!!! !$$"  ##"####"! !!####! !""""!"""""! "#""!  !##$####"""""#"!  !"!!!##!!!!!!!!!!!"####""!!!! !"##"!!!!!""""#"!!!!! !"#"##""""!  !"!  !!! """!!!"""#""!!!""!!!"! !!!!!##"! ######!  "#$$#!!!""""!!!!!!!!! "#""!    "#$$$#""""""##"!  ""!""""!!!!!!!!!!#####""!! !!"##"!!!!!"!!!"""!! !!! !"###"#"!!!! !!"!  !!!! !!"!!!!"""#""!!!""!!!!!!!!!"$#!!""! $####!  "#$$#"!""#"""""!!!!!"! "##!! !"#$$$##"!!""##"!  !""!!"#"!!!!!"! !"####""!!!!!""##""!!!!"!!!"""!! !"###"""!!!! !!"!  !"!! !"""!""""###"!!!""!!!""! "$$" !""!###"!  "#$$#"!!####"""""!!!!!"" "#"!!! ! !!"#$$##""!!!""##!  "#!!!##"!!!!!"! !"$####"""""""###""!!!"""!""""!! ! !!#####""""!! !""!! !""!! !""""""""###""!!!!!!!!!!$$"!! !""##"! !"#$%$"!!"""##""""""! !!!""! "#"!! !!!!!!"#$$##""!!!""##!  !"""!!"#"!!!!"!! !"#$####""""""###""!!""#"!"##"! !!"####""!!!!! !!"!! !"""!!!"#"""#######"!!!!!! "$#"!!! !"""! !"#$%%$#"""""""#""""""!! !!""! "##!!!!!!! !##$##""!!!""#""! !"!!"###"""""!!!"#$##"##"###"###"!!""#######"! !!! !"####""!!!!!! !!"!! !!!"!!!!!#""""######""""!!#$#! !""! !"!  !!#$$#""#$#"!!!"""""""#"! !"" !"##"!!!!!! !"####""!!!!"#""!! !!""!!"##""!!"!!! "#####"#####"###""""########"!!! !!"####"!!!!!!! !!"! !"""!! !"#""""######"""!"$$"  !!""! "! !!!!!"#$##" !#$##""!"""#""""#"! !!"  "##"!!!!!! !"$##"""!!!!""""!!! !!""""###""!"""! "#####""####"###""""####"###"! !! !"$##""! !!  !"!!!""""!!!!"####"#"####"!"$#"!!  !"#"! !!!!!!!!"#$$#!!!""#$##""""""##"###"!  !!  "##"!! !!! !"###""""!!!!""!!! !"#""#$##""!"""!  "####"""###""#####""#####"##!!!!!! !"###"!!!  !"!!!""!"!!!!"##""##"###!"$#!!""!! !"#"!!!!!!!!"#$%#! !"#""#$$##""""####"##"! !! "###"!!!! !"###""#""!!!""!! !!"#####$""!""""! !####"#""##"!#####""####"##"!!!!!! !!"###"!  !!"!!"""""!!"######"#"!"$#"!!!"""! !!##"!!!!!!"#$$#"!!!"##""#$$##""""########!  !  "###""!!!  !"###"###"!!!"!! !!"######$#"!"###! "####"#"""""!"###"#"####""##!!!!!!! !"###"!!  !""!""""""!!"######"! #$#! !!!!"""! !##!"""""#%%#!!!!"""""""#$$###"#""###$###!  ! "###"! !! !###"""###! !""!! !!!"###""$$#!!"###"  "#####"###""!"###""###$#####!!!"""!!!"###"! !!!  !""""""""""!"#$##"! #$$! !!!"""!! "#""""#$%%%#""""""!"""!!"$$#####""#######" !  "###"!! !! !"##"""""" !!"""!!!!"###"#$$"!!""##"  "######"""""!"#####"##$#####!!!"""!  "##""!!!!!!! !"""""""""!!"###! #$$"!  ! !"""!!!"""##$$%$$####""""!!""!!##$####"######$##"!! !!!  "###!! !!"!!!"#""!!!!! !"##""""!"###"#$#"!!""""" !"#########"!!"########$####"!!"##"!  !"##"!!!!!!  !"#"""!""#"!"#" #%$"!"! ! !!"""!!!###$$%$###$##""""!!!""!!#$$####"######$$#"!!!!!!  "##""! !!!! "#""! ! "##"""""""#####$#"!!!!"""! "##$#####""!!"####"###$###$#"""##"!  !"#""!!!!!! !"###"""#"""! #%$"!!"""!!!! !!!!""! $$$%%$"""#$$$##""!!!"""!!"$$####$$$#####$$""!!!!!  "##"!! !!! "##!! ! !""#"""""!"####$$$"!!!!"""! "#########"!!"####""##$#####"""#""!  !"#""!!!!  !####"####! #%%#""!""""!!!!!!!!!""!$$&%$"!"##$$###""!"!!"#" !"$$###$$$#####$$##"! !! !"##"!! !! !"##"! ! !!"""""""!"#$$#$$$#!!!!"""! !"#########""!"##############""""""! !!""!!!! !!  !####"#"!!#%%####"""""""!!!!!! !""$%%%"!!"####$###""!!!!"""!!"$$$#####$#####$#""!!!"!! "##"!! !""! !"##"! ! "##""##""##$$#$$$#!!"!"""! "#$$######""""#$############""""""!  """!!!!!!!! !###"" !$%$####""""""""!!!!!!! !"3 200 130 1 +$$%$""!""###$$$##"!! !!""" !"$$##########$$$##""!!"!! !"#""!!!!"" !"###! !! "##""#####$$###$$#"!"!"""!"#$########!!"#$##########$#"!""#"! !!"""!!!!!!!  ""#" !$&%#"##"##"#""""""!!!!!!!!###$##""""####$$##""! !!""" !"$$##"###$####$$##""!!!"! ""#""!!!!! !#$##!!!!!!!"##""#$####$###$$#"!!""""  !#$$#$####"!!"###$#$$#######!"""#"! !!"""""!!!!! !"" !$%%$###########"""""!!!"!!!$###%%$#"#"###$$$$#""! !!""" "#$###########$$#""!!!!!! "#""!!! !!!!!"###""""!!!"##"##$####$####$#"!!""""  "##$#####""!!"#$####$$######""#""!! !""#""!!!!!!!! !$%$###############"#""!!!"!!#$###$$$#"#"####$$$##"!!!"##" !$$$#"###$####$$$"!! !!! "#"""!!! ! !!##$#"""""!"###"##$########$$#!"!!"#"  "#$#######"""##$#$#$$$#$$####""""!!  !###"!!!!"!! !#%%#!"#$$##########""#"!!!!!!$#$##$%%$###""##$$$###"!!!###" !$%$######$#$$$##"!!! !!  !##""! ! !!"#$##""""!"#$#"##$###$$###$$#"""""#"  !#$$########"##$$#$##$$$#$##"""!!!  "###""!""" !#%%##"""#$############"#"" !"$$$$###%$$####""##$$$##!!!"###!"$%$$########$$$#"!! !!"  "#"""!! !!#$$#"""""""#$####$####$#"#$$#"""""#"  "#$$#####$##"#$$###$$$$$####""""!!!  !"##"""! !$%$##$##""#$$#####"#####"""!! !$$$$$##$$%$$#"####$$$$##"!!####!!$$$$$#######$$$#""!!!"!! !##"!! !!##$$#"#"""############$###$$#"""""#"  "#$$##$#######$$$$##$$#$####""""!!  "###"" !$&%#!"#$##"##$############"#""! $$$#####$$%$###"###$$$$#""!""##! !$$$#####$##$$$$##!!!!""!!"""! !!!!"#$$####""##$#####$$$#$###$$#""""##" !"#$$$#####$####$#$$##$$##"##""""!!! !"#" !$&%$#""##$$####$##############""!%%$#####"$$%$######$$$$###!!!"""! "$$$$#######$$$$#"!!""#"!!#"!!  !!!!"#$$###""###$#"#$$$#$#$###$$#"""""#" !##$######$##"##$$####$$#####"#"""!! !"" !$$##$$$#"##$$####$####"#######"#""%%$$#$##""#$%$######$$$$$##!!!!""! "$$$###$$###$$$$#"!!""##!!""!! !!!!!#$$$$##"""##$####$$$#$$###$$##"""##" !"#$$$#$####""##$$$####$########"""!  !$%#!!#$$$#"#$$$#"##$#########$#####$%%$$#######$%$#####$$$$#$#"""!"##"!"$$$$#$%$$##$$$$#"!"""##! !"#!! !! !"#$$###""##$$###$$$$$$$###$$#""""##"  "#$$$##$###!!##$$$####$###$###"""""!! !$$#!!!!#$$$#"##$$#""#$$##"###########$$$$$##""###$%$#####$$$$$###"#"###"! "$%$#$$%%$$#$$$$""!!""##! !#""!  ! !###########$$#"##$##$$$###$$#"""###" !"#$#$######"!#$$$#$$#$#$###""""##""! !$%#"!!!!"#$$#""####"""##$$############$$$%$$#####"#$$$#####$$###$#$######"! "$%$$$$$$$$#$$$$"!!!"###! !##"!  ! !!##$$#####$#$$#######$$$###$%#""""##"!!#$$$#######""##$$#####$##""""!"""" !$%#"!!!"""##$$#"""###""##$$######$#$##$#$$$%$$#"""#"#%%$$###$$$$#$$###""###"! #$%$##$$$$$$$$$#"!!"####! "###!  !!!"#$$$##$$$$#$$#""##$$$$$$#$$$#""""##" !"$$$$$$##$####$$########"""""""" !$&$""!!""""""#$$#"!"#$##"##$$$#######$#$$##$$$$$##""###%$$$####$$$$$#####"###"! "$%$##$$%$$$$$$#"!!#####! "###! !!!!"#$$$$#$$$$##$##"###$$$$$#$$$#""""##" !"$$$$$#$$$####$$########!""""!!$%%###""!"""""#####"""#$$#""#$$#$#####$$$$$###$$$###""""#%$$$####$#$##########""! !#$%$$#$$$$$$$$%#"!!"###"! "##""! !!!!"#$$$#$$$#$##$##"####$$$###$$$""""##"!!#$$$$$$##$##"##$########""#"!$%###$##"""!""""##$##""###$#"##$$####$##$$$$$$##$####"#"#"#%%$####$$#$$$####"#####! !"$%$$$$$$$$#$$$#"!!"""!! "#$#"!!!!!!!"#$$###$$$##$$########$$$##$$#""""##"! !#$$%$$$$#$##"##$###"#####"!"$%#!!"#$###!!""""##$$$#""##$$#""#$$#######$#$#$$##$$###"""""#$$$$###$##$$#$#####$$$#"!!#$%%$$$$$$###$$#!! !!!!! !###"! !!!!!#$$##$$$$##$$###"####$$###$$##""###"! !#$$$$$$$#$#""#$###""####!!$%#!!!!##$$##"""#""###$$##""#$$#""#$$######$#$###$##$$###""!!"#%$$$$$$$$#$$$$#####$$$#"!!#$%%$$$$###"#$$"! !!!! !##""! !!!!!!#$$$#$$$$##$$####""###$###$$##""####! !#$$%$$$$$$##"##$#"""#"!!$$#"!!!!!##$$$##"""""###$$#"!"####""#$$###$#$$##$#$$######""!"!"#$%$#$$$$$$$$#$#####$$##!! #%%$$$$##""##$#"! !!!!! !#$"!!!!""! !#$%$#$###$$$$$###"""##$###$$##""###"! !#$$$$$$$#$#####$###" "$%#!!"""!!!"$$$$##""""""#$$##"!"###"""#$$$###$$$$#$$$$######"!!!""#$%$##$###$#$##$###$$$#"! "$%$$$$##"""##$"! ! "###"!!!""!!"#$%$$###########""""####$#$%##""####! !#$%$%$$$####"##$#"  #%%# !"""!!!##$$##"""#"""##$##!!"####"##$$##$$$$$$$$$%$#####""!!!""#%$$###$#$#$$###########" #$%$$$##""!!"$##! !!"$##"!""""!!"$$%$#$##########""""##$###$%##""####! !#$$$%$$$####"#$#! #%&$"! !!!!"""!!#$$###"""""""##$$#"!"#$####$$$##$$$$$$$$$$$###"#""!!""##%%$###$$#$$$$$#########! #$%$$$##""!!"$$#!! ! ! "#$##"""##"!"#$%$####"##$$#####"######$$%$#####$#"!!#$$%$$$$######! #%%$##"! !!!!"""!!#$$$##"""""""#$$$#""#$$##"#$$$$$$$$#$$$$$$$###"#""!!""#$%%$#$$$#$#$$$#$#$#####"! !#$%$$$##""""#$$#"! !!! !"#$##"""##"!"#$%$$#"###$$$$##""""##$##$$%$#####$#"!!#$%$$$#$##$#! "%%$"####! !!"""!!!"#$$##""!"""""##$$#""#####""$$$%$$$$#$$$#$$$#"###"""""#"$%%%$$#$#$$$#$#$########"!!#$%$$$######$$$#"!!!!!!!  "$##"!""#"!!"$$%$$####$$$%$########$##$$%######$#"!!#$%$$$$$##! "$%#"""####"!!!!""!!!"#$$###"""""""#$$$#"##$##""##%%%$$$$$$$$#$%$#"####"""####%%$$$$###$$$$###$#$####"!!#$%$$$$#####$$$#"!!!!"""  "#$#""""""!!"$%%$$####$$$%$######$$$##$$%$#$###$#"!"#$$%$$$#! #%%#!""""###"""!!!"""!!"#$$$##"#"#""##$$$####$##"""#%&%$$$#$$$$#$%$#######""###$%%$$$$#$#$#$$$#$$###$##" !"$%$$$$$###$$%$$#""""#""! "$$#"!"""""!#$%%$$####$$%%$######$$$##$%%$#####$#"""#$$$$#! #%&#!!!"""""##"""""""""!!"#$$$$$##"##"##$$####$###""#$%&%%$$$$%$##$%%$#####"""####%%$$$$#$#$$$$$$#$$$$$##" !#$%$$$####$$$$$$#""""###! "$$$""""#""""$%%$$###$$%%$$$######$$$##$%$#####$$#""#$$#! #%&%#! ! !!"!"###!""""##"!!"#$%$$$#"#"##"#$$####$####"$%%%%$$$$$%$$#$$$$###""##""##$%%$$$$#$#$$$$$$$$$#$$#"! !#$%$$#$####$$$$##""#####! !"$$##"""#"""#$%$$$##$$$%$$#$######$$##$$%$#####$##"###!!#%&$$##! !!!!"###"#####"""""#$%$$#"""#""##$$$########%$%%%%$$$$%%$##$$$$###"""""###$%%%$$$$$#$$$$#$$$$#$$#"! "$%$$#####$###$$##"#####! !#$%$#"""#"""#$%%$$###$$$#$#$#$#$#$$$$#$%%$#####$##""!!#&%#"#$$#! !!!""##########""""#$%$#""!"#"""#$$$#$#####%$$$%&&$$$$%%%##$$$$####"#""###$%%$$$#$$$$$$$$$$#$#$$#"! !"$%$$######$###$##"##"##! #$$$#"""#"""#$%%$$#######$$$##$$$$$$$$$$%$####$$$#!!#&%$"!!#%$#"!!!!"""##$#########"""#$$##"!!"###"#$$$##$###%%$$%%&%%$$%%$$##$$$$####"###"##$%%$$$$$#$#$$##$$$$$$##"! "$$$$############"""####" !#%$$#"""##"""$$%%$$#####$$$$#$$$$$$$$$$%%$####$$"!#%%$"""""#%$$#"""""#"##$###$#####"!"#$$##"""""##"##$$$####$%%%%%%%%%$$%%$$###$$$$######""#"$%%$$#$$$$$####$$###$##! !$$$$#######$###"""""##"" !#%$##"""###"#$%%%$$#$$$#$$#$#$$$$$%$$$$%%$$$$#!!#&&%#"""""##%%$#""###"########$####"!"$$%$#""""##"##$$$$$##%$%%$$$$%%%$$%%$$#"#$$$#$$$###"""#$%%%$$$$#$##$#$$$###$$#" !$$$$$##########""""!"""!!!#$%##"""##""#$%%%$$###$$$$$###$$$$$$$#$%%%$#"!#&&%$######"##%%##""####"############!!"$$%$#"""####"##%%%$#%%%%%$##$$%%$%%$$$###$%$$$####""""#$&%%$$$$$$$###$####$$##! !$%$$$$##########"!!""##! "#%%##""###"!"$%%%$$####$$$$###$$$$$$$$$%%$"!#%%%$$$$#####"#$$%##""###"""#$######$#"!!"$%%%#"""#######$$$$%&%%$$$###%%$%%%$$###$%$$##$###""###$&%%$$#$$$$$###$$##$$##" !$%$$######"####""!!""""!!"$%%$######!!##%%%$$#$##$$$$##$$$$$$$$#$$" !$%%##$$$$$##""###$%%$"###$##""######$$#$"!!"$%%$#"""#$#####$%$%%%%%$$#"#$%&$$%%%$$##$$$######""""##%%%%$#$$$%$#$#$####$$$#" "$%$$$########$##!!"""#"!!"$%%$##"#""!!#$%%%$###$$#$$$$#$$$$$$$$#" "$%&"!!#$$$$$#######$%$###$$$#"""$#$###$$##"!!"$%%$#""""######$$%%%$$$$####%%%$%%%%$$##$%$$#####""""##%%%%$$$$%%$$$#$$###$$$#"!"$%$$$#$######$##"!"###"!!"$%%$##""##"!"$%%%$$$#$$$%$$$$#$$$$$#! "$%%$"! !#$$$$$$$#####$%%$###$$##""#$$#######"!!"#%%$#"""#######$$$$$$##$$$$$%%%$%%%%$$$#$$$#$#####"""##$%%%$$$$%%%$$#$####$##"! "$%%$$#$#$#######!""###""!"$%%$#""###""##%%%%%$$$$$%%$$#$$$$#" "$%&$###!!!#$$%%$$#$#####%$####$$##"#$$$###$###"!!"#%%$##""#$####$%$$$#$$$%%$$$%%%%%&%%$$$##%$#####$#####$%%&$$#$%%%%$$##$######"!!$$%#$#$##$###$##""#####"!"$%%##"###""!"$%%%%%%%$$$%$$$$$$#! "$%&#"####! !"$$$$$#$##$###$%$#####$####$$$###$$#"!!"$$%$$#"""###"#$$###$$%%%%$$%%%%%%&%%%$##$$$$##$$$##"###$%%$$$$$%$$$$###$####!! !#%$$$###############$##"!"$%$$#####"""##%&%&%$$$$$$%$$$#" !#%&&$#"####"!!"##$$$$##$####$$$$###$$$####$$$$#$$$##"!"#$%$$#""#####$$##$$%%%%%&%%%%%%%%%%%$$$#$%$$$#$#$####$#$&%$$#$$$$$$#######"""" !$%%$#####"###$######$##"!"$%%$##"###""#$%%%%%$$$$%%%$#! !"$&&&%########"!"#$$$$#$#$#####%$####$$$####$$$###$$$#"!"#$%$###"###"$#$#$$%%%%&%%%$$$$%%%%%$$$$#$%%$$####$###$#$&%$$##$$$$$$$##$####""!!#%$$$$$####$$$$##$##$$#"!"$%%$##"###"!"#%&%%%$$$$$%$! !"%&&%$%%$#"#####"!"##$$$########$%%$###$$$####$$$####$##"""$$%$#########$$$%%$$%%%%%$$$%%%%%%%%%$$$%%$$$##$######$$&%%$#$#$$$$$##$#$$$##"! !#%%$$##$###$$$$####$$$#"!"$%%$##"##""""#%%%%%$$$%$" !#$&&%$#$%%$#######"""#$$$$##$#$$##$%%$###$%%$###$$$####$$#""##$%$$#######$$%%%%%%%%%$$$$$&%%$%%%%%$$%%%%$####$$###$$%%%%$$#$$$$$#$#$$$$##"""! !$%%$$$$$$$$$$$$#$#$$$##"!!#%%%$####"!!"#%%%%$$$$" !"$&&$$$###$%$#######"""#$$$###$$$###$%%$###$$%$##$$$##"##$%$#"#$$%$#####$#$%%%%%%%%$$$$$%%$%%%$%&%%%$%$%%$$$####$####$%%&%$##$$#$$$####$##""""!!$%%$$$#$$#$$%$$###$$$#""!!#%%$####$""!"$$%%%$#! !#%&&%##$$$#$%%$#######"!"#$$$###$$$$##$%%$##$$%%$##$$$$###$%$$#"#$$$$$#$#$%%%$%%%%%%$$$%%%%$##$%%%&%&%$%$%%%$$$###$$####%%%%$$#$#$$$#####$$"!!!!!"$%%$$$#$$$$$%$$##$#$$##"""#%%$$#####"""$%%$$! !#$&&%$$$$$$$#$%%$$######"""#$$$$$$$$$$$#$%%$$#$%%%$#$$%$$##$$%$$###$$$$$$$%%%%%%%%%%$%$%%%%$$#"$%%%%&%%%$$$%%%$#$##$####$$$&%%$$##$$#$#######"!!!!! !$%%$$$###$$$$$#$#$$#$$$#""#%%$$###$####$$$! !#%'&%$$$#$#$$$#$%%$####"##"""#$$$$$$$$$$$$$%%$#$$$%%$$$%%%$####$$####$%$$$$%&%%&&%%%%%$%%%&%$$###$%%%&%%%$$$%$%%$$####$#####$&%%$#$$#$$########!!!!""! "$%%$$$$$$$$$$$$$$$$$$$%#""#%%$#$#$$$#$$#" !#%&&&%$$$$$$$$$$##%%$$######"""#$$$##$#$$$$$$%%$$$$%%%$$$%%$$$#$$$$$###$$%$$%%%&%%%%%$$%%%%%$$$$###$%%%%&%%$$$%%%%$$######"#$$%%%%$#$##$$$####$##!!!"#! !"$%%$$#$####$#$$$%$$$$%$$""#$%$####$$$#! !#%&'%$%%$$$$$$#$$###$%$$######"""#$$$##$$$$$$$$%%$$$$%$%$$$%%$$###$$$$###$$%$&%&%%%%%$%%%%%%$$$$$$###$%%%%&%$$$%%%%%%#$####""##$$&%%$$$#$$$$####$$""!""#"! "$%%$$$$$$###$$%$$%$$$$%#""#%$$####$#" !#%&&%$$%%%%$$$$$$$$####%$$######"!"#$$$####$$$$$$%%%$%$$%$$$$%%$$$#$#$$$###$$%%%&%&%%%%%%%%%$#$$$$$$$$$%%%$%%%%$%%%%%%$###$###"##$$&%%$#$$$$$$###$$##"!""#"!!"$%%$$$#$#$$$$$$%$$$$$$$$""#%$#####" !"%&&%$$$$%&%$$$$$###$###$%$$#######""#$%%$$$$$%$$$$%%%$$$$$$%$$%$$$#$#$$$$$##$$&&%%%&%%$%%%%$#$$#$#$$%%%$$$%$%&%%%%%%&%%$$#########$$%%%$$$#$$$####$$$#"!""#"!!"$%%%$$$$$$$$$$$%$$$$$$$#""$%%$$#" !#$&'%%$$$%%%&%$$$##$#$###$$%$$######"""#$%$%$#$$$%$$$%%%$$$#$$%%$%%$$$$$$$$$$$$#&%%%%%%%%%%$#$###$$$$%&%%$$$%%%%&&%%%%%&%%$$$#$###"##$$&%%$#$$#$$####$$##"""###!!#$%%%$$$$$$$$$%$%$$$$$$$#""$%%$" !"%&'&%%%%%$%%%%%$$####$#$$##$%$$#######""#%%$%$$$$%%$$$$%%$$#$$%%%%%%$$#$$$%%$$##%&&%&%%%%%$$$$$###$$%&%%%$##$%&%&&%%$%%%&%%$$$#$$##"###$%%$$##$#$$####$$##""####!!"$%%%%$%$$$$$$$$%%$$$$$$$##$%" !#%&&%%%%%%$%$%%&%%$$#####$$%$$$%$$$$$$###""#$%%%$$$$%%$$$%%%$$$$$%%%%%%$$$$$$$%$# &&&%%%%&%$$$$$##$$$%%%%%%$$##%%&%%%&%$%%%%&%$$$#####"###$%%$$$##$$$####$$$##"####"!"$&%%%%$%$$$$$$$$%$$$$$$$$#" !!#%&&$$%%&%%%$%$%%%&%%$####$$$%$$$%%######$#""#$%%$$$$%%%%$$%&%$$$$$%%%%%%$$$$$$$# &&%%%%%%$$$$$##$$$%%&%%$$$#$$$%%%%&%%%%%$%%%&%$###$##""##$%%%$##$$$$##"#$$$##"####!!"$%&%%%$%%$$#$$%$$$$$$$%#! !#%&&$$#$%%&%%%%%%%%%&%$$#$$##$%$$#$$$####$$##""#$%%$$$%%%%%%$%%%%$#$$%%&%%%%$$$$#&%&%%%$$##$####$$%&%%%%$$$$$%$$$%%%&%%%%%&%&%&%$$#####"###$&%%$##$$$$##"#$$$#""##$#"!"%%%%%%$%$$$$$$%$$$$$$$!!!#%&%$#$$$#%%&%%%%$$%$%%%%$######$$##$%$#$#$$$##""#$%%%$%%&%%%$$%%%$$$$%%%&&%%$$$"&%%%&%$#$$####$$%%%%%%$$##$%%%###%%%%%%%%&%&&%%%$###$#""###$&%%$##$$%$$#"#$$$#####$#!!"%&%%%%%%%$$$$$%$$$$#" !!#%&%#"##$$$$%%&&%%$$$$$%%%$$$###"#$$##$%$##$$$#$#""#$%%%%%%&&%%$$%%%%$%$%%%%%%%$" %%%%%$$$$$#$#$%%&%&%%$$$$%%%%$$#$$%%%%%%%%%&%%&%%$$#$$#"""##$&%%$#$$%%$####$$$#"###$#!!"$%&%%%%$%$$$%%$%$#" !#%'&$##"##$##$%&%&%%%$$$$%%%$$##""##$$##$%$##$##$$#"##$$%%%%%%%%%$$%%%%%%$%%%&%$#  %%%$$$$%$###$%%%%%%$$$%$%%%%$$$$$$%%%%%%%%%%&%%%%$#$$$##"!""#$%&%$#$$$%%$#"#$$#####$$#!!#%&%%%%%%$$$%$%%$" !"#%&&%$#####$$$#$$&&%&%%$$$$%%%$###""##$$##$%$##$$$$$#"#$$%%$%$$$%%%$$%%%%%%$%%%$# !&%$$#$%$$#$$%%&%&%$$$%$%&%%%$$$$$$$%&%%%&%%%%%%%&%%##$###"""##$%%$$##$%$$$###$$$#####$#"!"%%&%%%%$$$%%%$" !#%&%#$%%$####$$#$$$%&%%%%%$$$%%%$###"##$$$##$%$#####$$##"#$%%%$%$%%%%$$%%%%%%%%$# !#%$$$$%%$$#$%%%&%%%$$$%&%%%$$$%$$$#$%%%&%%%%%&&%%%&%%##$$$$#""##$%%%###$%%$$$##$$$####$##! #%&&%%%%%%$$$" "#%&&$""$%%$$#$#$$#$$%%%&&%%%$$$%%%%######$%$#$$%$####$$$$###$$%%%%$%%%$#$%%%$%$$# !#&$##$%%$$#$%%%&%%$$$$%%%%%$$$%$$##$$$$$%&%&%&%%&%&%%%$$#$$$$#####$&%$$##$$%$$$##$$$$#####"!!#%%&&%%%%%$! !"#%'&%$$##$%$$$#$$$$$##$%%%%%%$%$$%%%$$####$$$$##$%$$###$$$###$$%%%%%%$%%%$#%%%%$# !$&&##$%%%$$$%%%&%%%$$%$%&%%$$$$$$$$$%%$$$%%&%%%%%&&%%&%%$$$$%$$###$$$%&$$#$$$%$$#$#$$$$#####"!"#%&%&%%%$" !!#%&%%$%%$#"$%%$#$$$$$###$%&%%%%$$$%%%%%$####$$%$##$%$$###$$%$##$$%%%%$%$%%%$$%%$# !"$%&%##$%%$#$%%&%%%%$%$%%%%%$$$$$$$$$%%%$$$$%%&%%%%%&%%%%&%$$$$$$######$%&%###$%%$$###$$$$######!"#%&&%%%"  !!#%&&$$$%%%$##$$%$#$$$$$###$%%%%%%%$$%%&%$$###$$$$$##%%%$###$$$$##$$%%%%$%$%%$$$$#  !!#%&$#$$$$$#$%%%%&%%%$%%%&%%$$$$$$$$$%&%%$%%%%%&%&%%%&&%%%%%%$#$$$$$#####$%%%$$$$$%%$$##$$%$$$#$##""#%&%%"  !!$%'&$##$$$%%$##$%$$#$$$$$##"$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$$#$%%%%%%%%%%%## !$&%$"#$$$##$%%&&&%%%%%%%&%%$$$$%$$$%%%%%%%%%&%&%&%%&%%&%%$$$%%$$$$$$##"###$%%%$#$$$$%$$##$$%%$$$$$#""$%%# !"#%&&%$$###$$%%$##$%%$$$$$$$###$%%%%%$$$%%%%%$$####$$$$##%%%$####$$$#$$%%%%$%$%%$#  "$%%$""#%$$$$%%&%%%&%%$%%&%%$$$$%$$$%%%%%$%%&%%&%%&&&%&%%&%%$$$$%$$$$$###"###$%%%$$$$%%$$$$$$$%$$#$$$##"#" !"#%&&%$%$$##$$$$%$##$$%$$$$$#$#"##%&%%$$$%%%%%%$$$#$$$$$##$$%%$####$$$$#$%%&%%%$$#  "$%&#""#$%%%%%%&%%%&%%%%%%%%$$$$$$$%%%&%%%%&%%&%%&%%%&&%%&%&%%$$$$$$$$$$$##""##$%%%$$$$$%%$$#$$$%$$$$%%%#!!!"#&'&$#$%%%$##$#$#$###$$$$#$#####"#$%%%%%$$$%%%&%$$##$#$$$###%%%$$###$$$$$$%%%%$$" !"$%%#"###$%%%%%&%%%%%%%%&%&%$##$$%%$%%%%%%%&%%&%%&%%%%%%&%%&%%%%$#$$$$#$$$$$#"""#$%%%$$$%$%%$$##$%$$$%%%$" !"$%'%%$$#$%%%$#$####$#"#$%$$$$$######%%%%%%$$%%%%%%$$##$#$$$$##$%%$$###$$$$$$%%%$#  !"#%%#"####$%%%%&&%&&%%%%&%%%$#$$$%$$%%%%%$%%%%%%&%&%&%%$%%&&%%&%%$$##$$$#$$$$##""##$&&%$%$$%%%$$$$$%%$%%%"  !!"$%'&%$$$$$%%&%%######$$###%%#$#$####$#$%%&%%$%%&%&%%$#$$$$#$$$##%%%$$$$#$%$$$$%$#  !"#%%#""###$$%%&%%%%%%%%%%%&%$$$$%$%%%%%%$$%%%%%%%%%%%%%%$$%%&%&%%%%$$#$$%$$#$$$#"!"#$$%&%%$%$%$%%$$$$%%%$"  !!"#%'&%%%$$$$$%%&%$$##$$$$##"$$%$$$###$##$$%%%&%%%%%%%%%$$$$$$$$$$##%%%%$#$$$$$$$$#  !"$%%#""###$$%%%&&%%%&%%%%&%%%%$%%%%$%&%%%%$%%%%%%&%&%%%%%$#$%%%%&%%%%%$#$$$$$#$$##"""##%%&%$$$%%%%%$$$%%$"  !!"#%&'&&%%%%$%$$%%&%%$$$$$$$###$%%$$$###$###$%%%%$$%%&%%%%$$$$$$$$$$##%%%%$$#$$%%$#  !"$%%#!""##$$$$%&%%&%&%%%%&%%%%%%%%%%%%%%$$$%%%%%%&%&%&%%%$$$$$%&%%&&%%%%$$$%%$$#####"""##%%&%$%$$$%%%%$$$" !!"#%&%%%&&&%%$$$$%%%&%%%%$$$$$$##$%%$$$#"#####$%%%%$$%%&%%%%$$$$$#$$%$#$%%%%$$$$$$# !!"$%%#""###$$%%%%&%&%&&&%&&%&%%$$%%%$%%%%%$%%%%$%%%%&%%%%%%%$%%%%$$%%%&&%%$$#$%%$###$$##""##%%&&%$%$%$%$$#! !!"$%&%#"#%&&%%%%%%%%%&&%%%%$$$$$###$$%$$##"######$%%%$$%%%%%%$$#$###$$%$$$%&%$$$$$#  !!"$&%#""##$$%%%%$&%&%&&%%&%%&%%%$%$$$$%%%$$%%%%%%%%&%%&%%%$$$%%%%###$%%%%%%%%$$$%%$##$$###""#$%%&%%$$$$%$#  !!##&&&$"""#%&%&%&%%%$%%%&%%%$$$$$$$##$%$$##"#$$#! !$%%$$$%%%%%%%$#$$$$#$$%$%%%%$$$# !"$&%#""###$$%%%$$&%%&%&%&&%%%%$%$$$$$%%$$%%%%%%%%%&%&%&%%%$%%%&%$##"#$$%%&%%%%$$%%%$#######""#$%%&%$%%$$#! !"#$%&&$$$#""#%&&%&%%%%%%%%&%%%$%$$$$$""#%$$#####!!$%%%$$%$$%$%%$#$$$$$$%%%%%&%$"  !!"$&%#!"###$$%%%$$#%%&%%&%%&%%$%$$$$$$%%%$$$%&%%%%%&%%&%%%%%%%&%%$####"#$%%%&&%&%%$%&%$#######""##$%&%%%%#! !!"$&&&$%$$$#""#%&&%&%%%%%%%%&%%%$$$$$$##"#$%$$$#"#$%%%$$%$$$%%%$$$$$$$$%%%%%%#! !!"$%%#""###$%%%$$###%&%%%&%&%%%$%$%$$%%%$$$%%&%%%%%&%%&%%$$%%%&%%$##$$####$%%%%&&%%%%%&%$#######""##%%&%%$" !!!$%&&$$$%%$$$""#%&%%&%%%%%%%%&%%%$$$$$%##"#%%$$# #$%%%%%$$$%%%%$$$$$$#$$%$$# !!!"$&%$"####$%%%%$##$$&%&%&%&%%%%%$%$%%%%%$$$%%%%%%&%&%&%%$$%%&%%%###$$#$###%%&%&%%&&%%%%%%$######"""##$&%$" !!"$%&&%$%$%%%%$$#"#%&&%&%%%%%$%%%&%$$$%$%$$""#%%%#! #$%%%%%$$$%%%%$$$$$#$$%$" !!!"$&%$"##$$$%%%%$###$$%&%&&&%%%%$$%$%%%%%$$$%%%%%%%%&%%%%%$%%%%%$###$$$$#$$$$%%&%%%%%%%%%%&&%$#####"""#$$$! !!"$%'%$$%%%%$%%%$##!#%&&%&%%%%%$%%%%%%$%%%$$#""#$%%$#"! "$%%%%%$%%%%%%$$$%$$$#" !!#$&%$"##$#$%%%$$$$$#$%&%&&&%%%%$%$$%%&%%$$$%%%$$%%&%%&&%%%%%%&%%###$$$#$$$%&%%%%%%%%%&%&%%%%%%$$######### !!#$%'&%$$%%%%%%$%%%#"!#%&&%%%%%%%%%&&%%$$$$$$$#""#$&&&$"! "$%&%%%$$%%%%%$$$$$#"!!!#$&&$###$$$%%%%$#$#$$$%%&&&%&%%$$$$%&&%%$$$%%%$$$%&%%&%%%%%%%&%%$##$$$$#$$%%&&%$%%%%%%%&%&%%%&&%$$$$$#$$# !!#$&'&%%%$$%%%%%%$$%$$""#%&&%%%%%%%%%%&%%%$$$$#$#""#%%&%$"! "$%%&%%$%%%%%%$$%$" !!#%&&$"##$$$%%%%$$$$$$%%&&&%%%%%%$$%%%%%%$$$%%%$%%%&%%&%&%%$%%&%%#$$%%$$$$$%%&&%%%$$%&%%$%%%%%&&%%%$$#$$%#  !!#$&&&%%&%%%$$%%%%$%$%$$#"#%&&%%%%&&%%&%%&%%$$#$$$#""#%&&%$"! "$%%%%%%%%&%%%$$" !"#%&&%##$$$$%%%%$$#$$$%%&&&&%&%%$$$$%%&%%$$$%%%%%%%&%&%%&%%%%%&%%##$%%%%$%%%&&&%%%%$#$%%%%$%%%%%&&&%%$$$%#! !"$&'&%%%%%%%$%$%%%%$%%%$$#"#%&&%%&&%&%%&%&%%%$$%$%$##"#$&&&$"! #$%%%%%%%%&%%$" !!#%&&%$$$$%%%%%%$####$$&&&&&&%%%$$%$%%%%%$#$$%%%%%%%&%%&&%&%%%&&%$#$%%%%%%%%&&&%%%%$$##%%&%%%%%%%%%%&%%$%#! !!"$%'&%%%%%&%%%%%$%%$%$$%%$$##$%&&&%%&%%%%%%&&%%$%$%$%#""#$%&&$!! #%%%%%%%%%%%"  !"#%&&%$$$$%%%$%$$$$###$%&&&&%%%%$%%%%%%%%$##$%%%%%%%&%%&&&%%%&&&%$#$%%%%%$%%%&&&&%%$$$$$%&%&&%%%%%%%%%&%%#! !"$%'&&&%%%%%%%%%%%%%%%%$%$%%$##$%&&%%%%%&%&%%%&%%$$$$$$#""#$%&%$"! "$%%&%%%%$" !"#%'&%$$$$%$$$%%$$###$$%%&&%%&%%%%%%%%%%%$$$%%$%%&&&%&%&&%%%%&%%$##$%%%%%$$%%&&%%%%$$$$$%%%%&&%%%%%%%%%%%$! !!"$%&%%%&&&%%&&%&%%&%%%$%%%%%%%$##$%&&%%%%%%%&%&%&%%#$$$$%##"#$&&%$"! #$%%%%$$! !!#%&&&%$$$$$$%%%$$$$#$$%&&&&%$%%%%%%%%%%%$$$%%%%%%%&%&%%%%&%%&&&%##$$%%&%$$%&&&%%%%%$$$%%&%$%%%&%&%%%%%%%$  !"$&&%$$$%&&&%%%&%%%%%%%%%%%%&%&%$""$%&&%%%%%%&%%&%%&$##$$$%$###$&&&$"! "$%%%$! !!$%'&&%$%$$$%%$%$%$$##$%&&&%%$$%%%%&%%%%%%%$%&%&%%%&%%%&%&%%%&%&%$#$%%&%%$%%%&&&&%%$%%%%&%%$$$$$%%%&%%%%%#  !!#$&&&$##$$%&'&&&%&%%%&&%%%%%%%&%%$$#"$%&&&%%%%%%&%%&%%$##$$%%$###$&&&$#!!"$%$" !"#%&&%%%$$$$$$%%%%%$$$$%%&&%%$$$%%%%%%%%%%$$%%%%%&%&%&%&%&%%%%%%%$#$%%&%%%$%%&&&%%%%%%%%%%%%%$$##$%&%%%%%#  !!#$&&%$$$$$$$%&&&%%%%%%%%%%%%%%$%%%%$##"#%&&&&&%%&%&%&%&%$$$$%%%$###$&&&$#! !#" !!#%&&%%%$$##$%%%%%%%$$$%&&'&%$$$$%%%&&%%%%%%%%%%%%%&%&%%&%%%%&&&%$#$%%&%%$$%%&&&%%%%%%%%&&&%%%%$#$$$%&%%%#  !#$&&%$$#$##$$$&&'&%&%%%%%&&%%%%%$%%%$$$""$%&&&%&%%&%%%%%&%%$$$$$%$##$%&&&$#!  !!#%&&%$$$###$%%%%%%%$$%%&&&&%$$$$$%%&%%&%%%$%%%%%%%&%&%&%%%&%&%&%$$$%%%%%%$%%&&&%%%%%%%&&%%%%%%$$$%$$%%&%#  !!#$&'%%$$$$$$##$$%&'&%%%%%%%%&%%%%%$%%%%$$#"$%&&&&%%%&%&%%&%%%$$$$%%$###%%&&$"!! !!$%&%$$$$##$$%&%%&%%%%%%&&&&%$$$$$$&%%&%%%$%%%%%%%%%%&%%%&&%&%&&%$$%%%%%%%%%%&&&%&%%$%%&%&&%%%$$$$$$$%%%%#  !!#$&'&%$$$$%%$$##$%%&&&&%%%%%%&%&%%%%$%$%%$$#"$%&&&&%%%&%%&%&%%%$$$$$$$###%%&%$#!!  !"#%&&$#####$$%%%%%%%%%%%&&&&%$$$$$$$%%&%%%$$%%%%%%%%&&%%&&%%%%&&%$$$%&%&%%$%%&&%&%%%%%%%&&%%%%%$$$$$$%%%$"  !!#$&'&%%&%$$$$%$$##$$%&&&%&%%%%%&%%%%%%$%%%%$$#"#%&&&%%&%&&%%%&%%%$$$$$$$##$%&'&%#!! !#%&%######$$%%%%%%%%%%%%'&&%$$$%%%$%&%%%%%%%%%%%%&&%%%&&%%&%&&&%$$$%&%%%%$&&&%%&%%&%%%&&&%%%%%%$%%%%%&&%# !!#%&'%%%%%&%%$%$$$##$$$$&&&%%&%%%%%&%%%%%$%$%%$$""#%&&&&%&&%&%&%%%%%$$$$$%$$#$%&&%#!!!!!"#%&%####$#$%%%%%$%%%%%%%&&%%$%$%%%%%%&%%%%$%%%&%&%%&%&%%&%&%&&%%%$$%&%%%%%%&&&&%%&%%%&%&%%%%%%%$%%%%%&&%#  !"#%&'&%$%%&%%%$$%$$%$#$$$%&&&%%&%%%&%%&%%%%%$%$%$##"$%&&&%%&&%&%%%%&%%$$$$$%%$$$%%#!!!!!!#%&$#"###$$$%%&%%%%%%$%%&&&$$$$%%%%%%%%%%%%%%&%%&%&&&&%%&%%%&%&%%$$%&%%%%%%&%&%%%&%&%%&&%&%%$%$$%%%$%%&%#  !"#%&'&%%%%%%%&&%$$$$%$$$$$$&&'&&%&%&%%&%%%%%%%%%%$$$###&&&&%&&%%%&&%%%%%$%$$%%%$$#!  !!"#%&%#"##$$$%%%%%%%%%%%%&&&&%%$$%%$$%%%%%%%%%%&%%&%&%&%&%&%&&&&%%$$$%&%%%$%%%%&%%&&%&%%&&&&%$%%%%%%%%%%&$#  !"#%&'&&%&&%%%%%%%%$$%$%%$$$$%%&&&&%%&%&%&%&%%%%%%$$%%$##$%&%&%%%%%%%%%%%%%$%$%%%%#! !!#%&%##$$$%$$%%%%%%%%$$%%&'&&%%%%%$$%%%%$%%%%%%%&%%&%&%%%&%%&&&%%$$$%%%&%%%%&&&%&%%%&%&&&&%%$%%%%%%%%%%&$" !"#%&'&%%%&%%%%%%%&&%%$%%%%%$%%%%&&&%&%&%%%&%&%%%%%$%%%&%$#$&&&%&%%%%%%%%$%%%$%%%%$! !"#%&%###$$%%%%%%%&&%%%$%%&&&%%%%%$$%%%%%$$%%%%%%%%&%&%%&&%%&&&%&%$$$%%%%%%%%&&%&%&&&%%&%&&%%$%%%$%%%%&&%$#  !"#%&'&%&%&%&&&&%%%%%%%$$%%%%%$$$%%&&&%&%%&%%&%%&%%%%$%%&%&$#$&&&%&%%%%%%%%%%%%%$%$! !!#%&%###$%$$%%%%%%%%%%$%%&&&%%%%%%$%$%%%$$$%&%%%%%%%&%%&%%%&%&&&$$$$%%&%%%%%%&%&%%&%%&%&&&%%%%%%%%%%$%%%%#  !!#%&'&%%%&&%&&&%&%%$%%&%%%%%%%%$$%%%&&&%%%%%&%&%%&%%%$$%%&&&$$$%&&%%%%%%%%%%%%%%%#! !"#%&%$##$%$$%%$%%%&%%%$%&&''%%%%%$%%%%&%$#$$&%%%%%&%&&%&&&%&&&&%%$$$%&%%%%%%%&%&%%&%%&%&&&%%%%%&%%%%%%&%%# !!"#%&'&%%%%%%&&&&&&%%%%%%%%%%%%%$$$$$%%&&&&%&%&%%&&%%%%%$%%&%%&$$$&&&&%%%$%%%%%%%%$! !"#%&&##$$%$%%%%%%%%%%%$%%&'&%%%%$$%%%%%%$$$$$%%%%%%%&&%&%%%&%&&&%$$$%%%%%%%%%&&%&%&&%&%&&&%%%%%&%&%%%%%%%#!!!"#%&'&%&%%%%%&&&&&&&%%%$%&&%%%%$$$$%%$%%&&&%&%&%&&%&&%&%%$$$%%%%%$$%&%&%%%%%%%%%%$! !"$%&&##$%%%%%%$%%%%%%%%%%&'&%%$%$$%$%%&%%%$##$%%%&&&&%&&%&%&%&&%%$$%%%%%%%%%&&%&%%&&%%%&&&%&%%%&%&%%%%%&%#!!!"#%&'&%%$$%%%&%&&&&&&%&%%%%&%&%%%$$$$$$%$%&&&%&%%%&&%%&%%%$$#$$%%%$$$&&%&%%%%%&%%#!!!"$%'%$#$%%$%$%$$$%%%%%%%&''&%%$%%%%$%%&%$$$$#$#%%%%&%&&&%&%%&&&&$##$%%%%$%%&&%&%%&&&%&&&&&&%%&%&&&%&%%%%$#  !"#%&&%%%$%$%&%%%%&&%%%&%&%%%%&&%%%%$$$$$$%%%&&&&&%&%%&&&&%&%$$$$$%%%$#$%&&%%%%%%%$! !!"$%&%$#$%$%%$%$$$$%%%%%%&&&&%%%%%$%%%&%%%#$#####%%%&%&&&%&%%&&&&%$$$%%%%%%%&&%&&%&&&&&&%&&%%%&%&&&%&%%&%%# !!"#%&'%%$$%%%%%%&%%%&&&%&&%&&%%%%&%%%%$$$$$$$$%&&&%&%%&%&&%&&&%%$$$$$%%%$$%&&&%%%%$" !!"$%&%$#$%%%%$%$%$%%%%%%%%&&&%$$%$$%%%%&%$$#$##$##%&&%&%%%&%%&&&&%$$$%%%%%$%%&&&%%&%&&&%&&&&%%&%&&%%%%%&%%# !!"#%&&%%$%%%%%&&%%%%%%&%%&&&&%%%%%%&%%%$%%$$$#$%%&&&%&%%&%&&&%&&%%$$$$%%%$$%&&%%%%#! !"#%&%$#$$%$$%$%%$%%%%%%%&''&%%$%%%$%%%&%$$#$$$##$%&%%&%&%&%&&&&%%$#$%%%%%%%%&%&%&%&&&%&&&%&%&&&&&%%$%%%%%# !!"#%&'&$$%%%%&&%%%&%&%%%&&&&&&&&%%$$&&%%%$$%$$#$$$%&&&%&%&%&&&&&&%&%%$$$%%&%$%&&&%$! !!"$&&&$#$$%$$%%%$%%%%%%%&&&'&%%%%%%%%%%%%$$$$$$#$$%&%&%%&%%%&&&&&%$$$%%%%%%%&&&&%&%%&%%&%%&%%&%&&&%%%%$%%$#  !""$%&'%$%$%%&%&%&%%%&%%%%&&&&&&&&%%%$$%&%%%%%$$###$$%&&&%&%&%&&&&&&%%%%$$$%%%%$%&%$! ""$%'%##$$%%$%$%%%%&%%%%&%'&&%%%$%%%%%%%%%$$%$$$#$%&&&%%&%%&&&&&&%%$$%%%%%%%%&&&%%%&&&%&%&&%&%&&&&%%%%%&%$#! !"##%&'%%$$$%%%&%&%%%&%%%%%&&'&&&&&&&%%$%%&%%%$%$$$#$$$%%&&&%%%&%&&&&&&%%%$$$%%%%%%$" !!"$&&%##$$%$$$%%%%%%%&%%%&'&&&%%%%%%%&%&%%%%%%$$$$%&&&&%&%&&&%&&&%%%$%%%%%%%%&&&%%&&%%&&%&&&&%&&%%&%%%%%%%#! !""#%''%%$$%%%%&%&%%&%&%%%&&&&%&&&&&&%&%%%%%&%%%$$%$$$$$$%&&&&%%%%&%&&&&%&%%$%$$%%%$! !!"$%&%##$$$$$%%%%%%%%%%&%&&'&%%%$%$%%%%%%$%%%%$$$$&&&&%%&%&&%&&&&%%$$%%%%%%%&&&&%&%%%&&%&&&&%&&&&%%%%%%%%$#! !""$%&'%%$$$%%%&%&%%%&%%%%&&&&%$%%&&&&&&&%%%%&&%%$%%%$$$%%%%&&&&%%%%%%&&&&&%%%%%$%%$" !!"$%&%###$$$$$%%&%&%%%%&%&&'&%%%%$%%%%&&%%$%%%$###%&&&%%%&&&&&&'&%%$%%%%%%%%%&&&%&%&%&%%&&&&%&%&%&%%%&%%%$$! !""#%''&%$$$%%%&&%%&%&%&%&%&&&%%$#$%%%%&&&&&%%%&&%%$$%%%%%$%%%&'&%&%%%%%&&&&&%%%%%%$" !!#$&&%####$$$$%%&%%%%%%%%&&&&%%%$$%$%%&&%%$%%%$###%%&%$$%&&&%&&&&%%$%%%%%%%%%&&&&&%&%%&&&&&&%&%&%%%%%&%%%$$! !"#$%'&&$$$$%%&&&%%&%&%%%%%&&&%%$$##$%&%&&&&&&%%%&&%%%%%%%%%%%%%&&&&&%%%%%&&&&&%&%&$" !"#$&&&###$$$$$%%&&&&%%%%&&&'&%%$$$$%%%&&%%%%%$$##$%&&%$$$%&&&&&&&%%$%%%&%%%%&&&&&%%&%%&&&&&&&%%&%%%%%%%&%$#! !!"#$%&'&$$$$%%&&&&%&%&%&%%&&&&&%$$$$$$%&&&&&&&&&%%%&&%%%%%%%$%$%$%&&&&%%%&%%&&&&%%%$"  !"#$%'%$##$$%$%%%&&%%%%%%&&&'&%%%$%$%%%&&%$$$%%$##$%&&%%$$%%&&&&&&%%$%&%&%%%%&&&&%%&%%&%&&&&&&&&%%%%%%%&%%%#! !!"#$%''%%%$%%%&&&&%%%&%&%&%&&&&%$$$$%%%%&&'&&%&&&&&%%%&%%%%%%%%%$%%%&&&&&%%&%&&&&&%$" !!""$&'%$##$$$%%%%&&%&%%$%%%&&&&%%%$$%%%&&%%$$%%$#$$%%&%%$$%%%&&&&&%%%%%%%%%%%&&&&&%&%%&%&&&&&&&&%%%%$%%&%&&%"!!!"#$%''%%$$$%&&&&%%%&&%%%%%&&&%$$$$$%%%%%&&&&&&%&&&&&%%&&%%%%%%%%%%%%%&'&&&%%&%%%&&$" !!"#$&&&$$$$$$$%%%&%&%%%%%%&&&%%$%$$$%%%&&&%%%%%$$#$%&&&$$$$%&%&&&&%$%%&%&%%%%%&&&&%&%&%&&&&&&%&&%%%%%$%%%&%%# !""#$%''&%%$$%%&&&&%&&%%&%%%&&%%%$$$$%%%&&&&%&&&&%&%&&%&%%&&&%&&&%%%%%%%%&'&&%&%&%&%$" !!"#$%'&$$$$$%$%%%&%%&%%%%%&''&%%$$$$%%%&&%%%%%%$##%%&&%%%$%%%%&&&&%%$%%%%%&%&&&&&%%&%%%&&&&&&&&&%&%%%$%%%&%&# !""#$%'&&%$$$%%&&&&&%%&&%%%&&&&%%$$$$$%%&&&&&%%%&&&%&%&&&%&&&&%&%&%&%%%%%%%&&'&%&%%&$" !!"#$%'&$##$$$$%%%%%&%%%%%%&&&&%$$$$%%%%&&%%%$%$$$#$%&'&%%$%%%&%%'&%$$%%%&%&%&&&&&%&%%&&%&&&&&%&&&%%%&%&&&&%%# "##$%&'&$$$$%%&&&&&%&&%&&%&&&&%%$$$$$%&&&&&&%%%$%%&&%%%%&&%&&&&%&%&&&%%%%%%&&&&%%&%$" !""#$%'&$$#$#$$%%&%&%%%$%%%&'&&$$$$$%$%&&&&%%%%%$#$$&&&%%$%%%%%&%&&%%$$%%&%&%%&&&&&%%%&%%&&&&&%%%%%&%&%&&&&&%# !"#$%''%$$$$%&&&&&%&&&&&%%&&&&&&%%$$$%%%&&&&%&%%$$%%&&&%&%%&&%&%&%&%&&&&%%%&%%&'&%%%" !!"#$&'&$$$$##$$%%%&%%%%$%%&'&%%$$$$%%%%&&%%%%%%$$$$%&&&$$$$%%%&%&%%%$$%%&%&%%&&&%%%&%&%&&&&&&%%&&%&%&%&&%&%%# !##$%''&%$$%%%&&'&%&&&&%%%%&&&%%%$$$%%%%&&&&%&%&%%%%%&'&&%&%&%&%%&%%&%&&&&&&%&%&&&%%" !""#$&'%$$$$#$$%%&%&%%%$$%%&&'&%$$$$%%%%&&%%$%%%$$$$%&&%%%$%%%%%%%%&%$%%&%%&%&&&&%%%&%%&%&&&&&&&%%%&%%%&&%&&%# "##$%''%%$%$%%&'&&&&&&&%&%&&&%%%%$$$%%%&&&&%%%%%%%&%%%&'&&%&%%&&%%%&&%&%&&&%%&%&%%&%"!!!""#$&'%$$#$$$$%%&&&%&%%%%%&&&%%$$$$%%%&&&%%$%%$%$$$%&&&%$$%%%%%%&&%%%%%&%&%%&&&&%&%&%&%%&&&&&&%&&%&%%&%%&&%%# !""#$%''&%$%$%&&'&&%&&&&&%&&&&%%$$$$%%%%%&&&&%%%%%%%%&&%%&&'&&%&%%&&%%&%%&&&'&&&&&&%$"! !"##%&'%$$$$$$$%%&&&&%%%%%%&&'&%$$$$$%%&&&%%%%%%$$$$%&&%$$$$%%%&&%%&%%%&%%&%&%&&%&%%%&&%&%&&&&&%&&&%%%%%&%%&&" "##$%''&%$%$%&&&&&%&&&'&&%%&&&$$$#$$%%%&&%&%%%%%%%%%&%&&&%&'&&&%%&%%%%%&&%%&&&&&&&%%" !""##$&'%$#$$%$$%%&%&%%&&%&&&''&%%%%$$%%%%&%$$%%%$$$$&&&%%$$$%%%&%%&&&&&&%%&%&%&&%%%%%&&&&%&&&&&&&%&%&%%%%%%%&"!"##$%''&%$%$%%&&&&%&&&&&&&&&&%$$###$%%&%&&&%%%%%%%%%%&&&&&&&&'&&%&%%&%&%&&&%&&'&&&&$" !""##%&'%$#$$%%%%%&&%&%&%%%%&&'&%%%%$$%%&&&%$$%%%$$#$%&&%%$$$%%%&%%&&&&%&%&%%&%&&&%%&&&&&%&&&&&%%&%&&%%&%%%%%%# !""#$&''%%%%$%%&&&&%&&&&%%&&&&%%$#$$$$%%&&&&%%%%%%$%%%&&&&&&&%&&''&%&&%&%&%&%&%&&'&&%"!!""##$&'%$#$%%%$%%&&%%%&&%&%&&'&%$$%$%%%%&&&%%%%%%$#$$%&%%$%%%%&%%&&&&&%&&&%&%%&&&&&%&&&&%%&&&&%&%&&&%&%&&%%%%$! ""##%&'&%%%%%%&&&%%%&&&&%%&&'&%%$$$$%%%%&&&&%%%%%%%$%&%&&&&&&&%&&'&&%&%%&%%&%&%%&&'%$!!""""$%'&%$$%%$$%%%%%&&%&&%&%&'&%$$%%%$%%&&&%%&%%%$$$$%&%%%%%%%%%&%%&&&%&&&6 200 125 1 + + + + "$''(((''''''$"  !$&&&&&'('''('('(''$"  + +  + + +  +  + +   !#&'''''''''&#! "%&&''''''''''(''&#  + +  + + +     #&'('''''''%#! !$&''((''''''(''(%! + +  +    "%(''''''''$"   !$''('''''''('(''$!  + +    #$&'''''''%$"!  + +#%''''''''''(''(&"   + +   "#%'''''''%$#"   +!#%'''''''''''(''%! +  !!$'&'''&'%$#!  +"$%&'''''''''(''&#! + +  !$&''''&&%$!   +!"##%''''''''('''&#!  +  !#%'''''&%#   + + +  + !!"#$&''''''''''&%"  + + + + !#%'''''&$"  + +  !!!"#%&''&''('''''$! +   +  + "$&''''%#!  + + +   "#$%'&'''''''&&#! + + +  "#%'''&$"!   + +  "#$%&''''''&&'%#  + + !#&'''&$#!   + + + !""$%&''''''&'&$!   +   #%'''%$"! +  + +!!!"#%&'''''&''&#!  + +!#$&'&%#"!  + + !"#%&'''&'''&%"!  + +  "#$%&&%#! +  + + !"#$%&'&''&&&$""!   + !"#%'&$#!  !!"#$%&&''&'&&$##!   +  !"$&%$"! !  +  !"##$%'''&&&%%##!  + "#%%#!! !  + !!"#$&&'&&&&%%$"   + "#$$""!!  +  !!#$%&&&&&'&%#!   + !##$#""!  +   !#$%&&&&''%$#!  + !""####!!  + + !"##$%&&&''%$"! + !"#$#"!  +!!##$$&'''&%$"!  + + + !##$#"!!   !"""#%&''(&$#"!  + + + + !#####"!!   !! !#%''('%%#"!  + + + + ""#"##"!   ! !!"$%''''%$#"!   + + !"!!""""!  ! !"#%&&''&&$$!!  + +  !!!!!"#"  !!#$%%&'(&%$#"!!  + +  !!!!!!!"!  "#$%&&''&%$#"!! +  ! !!!! "#$$%&''%%##"! +    !!  #$$%%&&%$##"     !  !#$$%&&%$##!  +  !!  !$$%&%%%#"!  +  !   #%%%&%$#"!  +  !!#%&%%##!!   !!!$%%%$"!  +   !!"! !#$$#"!    !! !""  !##"!     ! !"!  !#"!   !   !""! "!!!   !  !##! !"" !    !"###" !!!!     "#"###"      !   !""""#$$#! !  !    """!!!"#$#"    !!  !"""!!!""#"##"  !     !""! !!""""$#" !! !   !!! !!"""####" ! !!    !!!  !!""##!!"#"! !"     !"!!  !!!!"""! ""! "" !!  !  !!  !!!!###!!   ""   !!! !  !!  !!""##"    ""!   !   !!!  !!!"##"  #"!  !!  !!!! !!""#! "#! !!!   ! !!!! !!! !"#"!  !  #"!! ! !!!!!  !!  !! !!!! !""! !$# !  ""! !!!  !  ! !"!! !!!  !! !!!#%%"!  #" !! ! !"!!!!  !!! !! !"" !!  ##"#$"!  "!  !!!! !"! !!! !!! !!!  "" !! !""!!"#$" !  "! !!!!!! !   !! !!! !!!! !! !!!#" !!##"  "! !!!! !!  !  !!!! !!! !! !!!#" !!##"  "! !!!!  !"! !!!  !!!! !!!!!!! !! ###! ! "#$"  "! !"!  !"! !  !!!!  !!! !!!!  !! !!!#"!""" ! !"#"    ""!!! !  !" !!  ! !!!  !!"!!!!!!  !! !"#! ""!!!  !#$"  !#"   !! !""! !!! !  !"!  !!! !!"  !  !! ""!  !""!!  !#$#   !#"   ! !"""!!!!!!!! !"!!   !!! !!!! !!  !!""! !!  !""!  !##"  !#! !  ""! !!!!!!!"! !!!  !!!! !!!  ! !!"#! !!  ""!  !##"  !#  !""! !!"!!!!!!!   !!   !! ! "#" !!!! !!!  !"#$# !"#!!##" !!"!!!!!      !! ! "$$"! !!""!!"! !"##" !  "#!  """!!!"!"!!!"! !!! !! "$$#""!!!!""#"!!"!! !!"##"   !   ##!  !"#! !"""!!!!"!  !!   !  !$$"!"#"!!!!"##"! "! !!!"$#      #$!   "##"!!"#"!!!!!! !!   !!!!   #$#!!!"#""!!""#""  "!! !!""##  !    #$"  !##"!!###!!!!!!!#! !!  !!"!  "$#!!!!!"""!!!"##"!  "! !!!"#"   !   !  ##!   "#!!!""#"!!!""!!##!!!  !! !!  !"##! !!!!!""""!!"##"" !"!! !!!"#"   !!  !  ##" !"#!! !""!! !!"! !""#$" !!  ! ! "##!! !!! !""""!!"#"""!!!! ! "##   !!! !!!  #$"  !###!"""""!!!!  !""!""$$"  !"! !!  !!$%#! !! !!! !"#""!!""""!  !! !!!!"##   !!  !"!   ##!  """!!#"""!!""! !! """!!!!#$"  !! !! !!!$%$#"!!! ! ! !""""!!""""!  "! !!!!!"##   !!! !"""  ##! !    ""! !!"""""!"!!  !  """!!! !#$" !   !#%%#"""!!! !!! "##"!"!!"""  !! !!!!!!"$#! !"! !!!!"  ##! !  !##! !!"""""""!   !"""!!!!! !!#$#!"!  !!!%%#"""#""!! !!! !!##"!!!""""!!"! !!!! !"$#  !! !"!  !!!"    #$! !!!!   "#! !"#"##"""!  !"#"!!!!!!!!!"$$" !  "" #$#""!!"""!! ! !"!!!"#""""!"""!!!!! ! ! !"#"    ! !!"!  !!!! ! ##! !!!!  !"! !"""#""""!   """!!!!!!!!!!!!"#! !!##""##!!!!!!!""!! !!!"!!!""""!!!!!"!! !!! ! "##!  ! !"! !! !! ##! !  "! !!!""""""!  !"!! !!!!!!!!! !#$" !"#$$" #$#! !!!! !""!! !!""" !"#"!"!!!""!! !! !! !!"$#!   !"!! !!!  ##!  !!!! !"#! !!"""""""!  !"#"! ! !! !!!! !#$# #"##""""! #%#"!!!!!! !""!! !!""" !"""!"!""""!!  !!!!!! !"##    ! !""! !!!! ##! !!"!! !!! !!""""""""! !"##"!"!!!!!!"! !!"#$"####"!!"#$#"#%%#!!! !  !""!!!!!""!! """"!"!!""!! !!!!! !"##!   !!"!! !! !  ##  !!!!!!!!  !""!!!!""! !"#"!""""!!!!""!! !!!"!"#$""$##"! !!"$%%%%$""!!  !"""!!!!"#! !!#""!!!!!"!! !!!!! !"$$!  !!!!"""!!!!  ##  !!!!  !"" !"#"!!!!!! !  !##"!!"#"!! !!! !!!"""""##$" "$##""! !!!"#$$$###"!  !"""!!!!""!! !"""!!!!!!"!!"!!!! !!"$#!  !!! !!!!"""!!!  ## !!!!!!!  !"!! "#""!!!!! !##""!"""!!!""! !!!!!"""! "#!!$%#" !!!!!"!!"####$#"!  """!!""""!!!!""!!!!!!!"!!!!!!! !"##!  !"!! ! !""""!  ## !!!!!!!  !!! !"!!!!!!!  !"#""!!!!!!!"""! !!!!!!!!!!! #%$#!! """!"!!!"#######"  ""!!"!"""" !"""!!!!!""!!!!! ! !"$#!  !!"!! !!""""  #$"  ! !  !"! !!!!!! !! !###"!""""!!"""!!!!!!!"!!!! !$$#"""!!""""""""#""####"! """!"""""! !!"""!!!!!"!!"!!! !!!"$#! !!!!! "## !$$"!!! ! !   !""" !!!!!!!!  ""!  "#$##""""""!"""!! !""!!"""!  #$#"!"##""""""#""!"#"""##"! "#"!""!""" !"""!!!!!"! !"!!!!!!!"##! !""!  !"#!#$" !!!!!!!  !!!!  !!!!!! !  !""! "#$###""""""###! !!"!!!!!"! #%#"!!"###"!"""##"""""!!""#"! "#""""!""! !!!"""! !!!! !!!!!!! !"##! !"!!!  !"!$#!!! !!!!!  !!!!!!!"! !! !""! !"###"""""""""##"!!!!!!"!!"! !$$#!!"""##"!""#""##"""""!"##"!!  "#""""!""" !"""!!!!!!! !"!!!!!!!"##"  !"!! !" #$!!!!!!!!  !!!""##"  !  !!! !"#$#""""""!!"""! !!!"""""" ! #$#""!""""###"""#"###"""""!"##"!   "##""!!""! !""""! !!!  !"!!!! ! "##!  !!!!! !!"" ##!! !!!!!"!  !!!!""! !!!!!  !! !"#$##"""##""""#!! !!"!!!"""  ! !$#""""""!""###"!"#""##""""!!"##"   "#"""!!!"! !!"""!! !!!  !"!! !!!!"##! !!"!!!!!"# #$" ! !"!"!!!! !!!!""! !!!!!  !! "####"""##""###"!!!!""""""!  #$""!""#"""""###"!###""#"""!!!"##"   "#"!""!!"! !"""! !!!  !"!! !!!!"#$! !""""""""!##! !! !"""!"""!"""#"" !!!  !"##$###$##"""###"!!!!"""#"!  #%$""""""#"""#"###""###"###""!!!"#""! !!  "##"""!!!!! !"#"!!! !  !"!!!!!"!"$#! ! !"##""!"!$#  ! !!"!""""""##"! !!!!  !"#$$$#####"""##"!!!!!"""#""  ! !$%$"""""""###""""#$$#####"##"""!!!"##"!  !  "##""!"!!!! !"#""!!!  !"!!!!""""##! ! !"##""!!$#! !! !! !!!!!""""""!!!"!!!!!  !!####$$$###""##"!!!!!!!!"""  ! !$%$"!""#""""####""##$######"##""""!!"###!   "##""!!!!!!!!"#""!!!  ""!!!"#""#$$" !  !"#"""!$#!  !! ! !!!!!""""  !"""!!  ! !!""#"##$$$#""###"!!!!""!"""!  !$&%#"!""""""!"########$$#$###"###""!!!"###!   "##""!!!!! !!"#""!!!!  !" !!!"""#$$"!"! !"#""!$$" !!!  !!!"""! !!!!"!!  !!!!"###"######""##"!!!""""""#" ! $&$#""""""###"""########$$####"""""#""!!"###"   "##""""!!!!!!""""!!!!  !"! !!!!""$$"!!! !"#"$$#!! !!! !!!   !!"!"""!"""!"!!  !!!!!"#""""####"###"!!!"""""##"  !  #%#""##""""####"""#######$$$#"##"!!""""""!"###"! !!! "##""!!!!! !!""""!!!  !!! !!!!"##!!"! ""##""""!! !! !!! !#"""""""!!!!!  !""""""""#######"!!""""""!!  ! !#$#! !"##""""####""##$####$$$##"##!!!!""#""!"###"! !!!  !#"""!!!!!!!!"#""!!!  !"!!!!!!""$#"!"! "#  """!! !!! !!! !!!!""""""!!  !!!!!"""!!"""##"####"""""##"""! !!$%"  !"###"""#####""#$$#$$$%$##""#"!!!""#""""###"!!!!!  !##"""!!!! !"""""!  !!!!!!!""#$$!!""!!! !#""!!!"!!!!"! !!!!!""!"!!!!  !!!!!""""!"""###"####""""""""""!  !$%#  !"###""######"####$$%$$$##"##"!!!!"""""#####!!!!! !##"!!!!!!  "#""!!  """!!"!""#$$" !"! !"""""!!"!!!!"!!!! !"!!!!!!!  !!!""""!!"!""####$###"""""""""! !!!%%$!!! !"###""###$##"##$$#$$#$###"##"!!!!!"""""####!! "#""""!!!  !"#""!  !"""!"!"!"#$%# !""!  "#"""!"""!!!"!! !!!!!!"!  !!!""!"!!!!!"""""######"#"#""! ! "%&$"!!"!! !!""###"###$##"##$$####$###"##"! ! !"""##$#"!!! !#""!"!!!!!"##"!   """!"!"""#$$# !""  """""!"""!!!""! ! !!!!!"" !!"""!!!!!"!!!!!###$########""! ! "%&%##""""!! !!"###""###$$#"##$$#####$##""#"!! !!"""##$$#"!  !"#"!!!!"!  !"##!  ! """"!""""#$$"!#  """""!"""!!!"!! !"!!!!!! !!""!!!!"""""!!"######"#####"!!!"!"$&%$####""!!!!!!!"#########$$$##$$$##"#####"##"!!! !"###$#$#!  "##!"!!""!  !"##"!! !! !"""""!""""#$" !   """""!"""!!!"" !"!!!""!!!!!"!!!!!!"""""#######"##"##"!!!"!!$%%#$$$$##""!!!!!!!"########$$%$##$$$##"#####"##"!! !!!"###$$##!   """!!!"""!  !###"!!!!! !!""#"""""""#$$#!   """!"!"""!!"""! !!"! !""!""""!!!!"!!!!"##############"!!"!"%%$"#$$$$$##"""!!!!!""########$$$$##$$$###"####"###!!!!!!####$$##!  "##"!""""! !"###!!!!!!!!""#""""#"##$$" !  !""!"!!"""!!"#"!! !!"! !"""#"!!!""""!!""#""""#"####$#"!!!!!%&%"""##$$$$##"""! !!"!""$######$%$$##$$$###"###"###""!!!!"####$$##! ! "##!!"###"! !"##"!"!!"!"!""##"""#"##$$#!"!  ! !"""!""###"!"##! !!!""! !!"""!!!""#"""##"""""""#"###"!"!!"$&$#######$$#$##"!!!!!!!!""#$$##$%%%$$###$$###""##""###"!"!!"#####$$#"  """!!""##"! !"#""!"!!!"!""###"""##"#$%$!"""  !  !""""####""""#"!! !!""! !!!"""!!"!""""""###"#"##""!!!!"$&$""###""###$$$##""!! !!! !"##$#$$$$$%##"####"#"##"""###""""!"####$$$#"!  ""!!!!""""! !!"##"!!!"!""""##"##""###$%#!!"""!  !! ""#"######"""""! !!""! !!!"!!!!!"""!""""######"!!"!"%%#"!"####""#####$$#""!!! !!"#$$$$$$$$$#""#$#"#"####""###""""!"###$$$%$"!  """!!!!"""!!!!"""""!!!""""###"#"""###$$#! !""! !!! !##"""""##"!"#"! !"!!! !!"""!!!"""!!!""""####""""!"$&#"!"""####""######$##"!! ! !!""#$$####$$$#""###""#####""###""""!"####$$$#"  "#!!!!!!""!!!!###""!!!"#""####"""####$$#! !""!! !!!!  !##"!""###"!"""! !!!!! !""""""""""#""""###""""!"$&#"""""""#"##""##$##$$#""!!!!!!!"##$####$$$$#""#######$$#""###"""!"##$$$#$$#"! "#"!!!!!""!!!!###"""!!""######""#####%$#"! !""!!!! ! !#""""""##""""!! !!!! !"""#""""###"#####"""! #%&#""#""""""##"#""!!"###$##!!!!!!!"!##$#####$#$#""#$###$$$###"##""""""##$##$$$#"!!!!!!##"!!""""!!!!####"!""##""#####"##$##%%$"! !##"!!  "#""""""##"!!""! !!!!! !!""!""####"####"##! "&%#"!"##"""""""#""!!!#$##"!!!!!""""#$#####$$$#!"###############"""#"##$###$$#"! !""""!!!"""!!!!####"""""#######"###$##$$#"!!!"##"!!! !#####"###"!!"!! !""!!! !"""#"#""""###"##! "%&$#"""""###"""""#"!#$##""!!!!!!""#$$######$#!!"###"###$##########""#$####$#"! !!!#""!"!!""! !"###"#""####$$$#"##$$#$$##"""!!"""!!!!!  !####""###"!!""!"""!!"! !!"###""""#""""#! "%%####""""#""""""#"""$$$#"""!!!"!""#$#######$#!!"##""###$$###$###$#########$#"! !!! !##""!""""! !#$#####"#$$$#$######$$$""#"""!""""!!!! ! "#$##""###"!"""!!"!!!"! !!###"""##"""#" "%%#!"###"""""###"#"#"!###$$##"""!"!"""#$#""###$##!!"#######$#$########"#####$$$#"!! !!!"##""!!"""!! !"#########$##$######$# !"#""!!!"#""!!!!!  !#$#"""###"!""" !!!!!"! !""#"""#""##" "%%$"!!"###"""!"""""""!"$$###$$##""!""""""#$#""###$##""############$###$##""#####$$#"!!!!"" !##"""""#"" !!#########$###$$####$$ !!"##""!"""""!!!!!  !###"""###"!""!! !!!!!!!!"#"""!!!"" "%%$"""""###"""!!""""""  #%%#"#$$$###""!"""""##$""""#$##!!"#######$##########""#$$$$$$#"!!!"#"!##"""""##!! !##$$##########$#####!!!!""##"!""#""!!!!! !###""##$#"!""! !!!!"""""#"""!"!!#&&#""""#""####"""!""##" #%$$#""#$$###""""""""#$##""##$##!!"#$##$####"######$#"##$$##$%#! !!##"!###""""##!! !#############$#$###""!!!"##""!""#"!! !! !#######$##!"""!!!"!!""""##"""!!#%&$"!!"###"""###""!!""#"!$$$###""#$$###""""#"#####""""###"! "###$$####"######$$####$##$$#" !""!!##"##"#""!!!!#############$$#$$9 200 130 1 +""!!!"####""""#"! !!! !##########!"#""!""!!"##"##"!!#&&$$#!!""###"""###!"!!"#" #$$####"!"$$$###"""#"##"######"#$#"!!"##$####"#""###"#$$#######$$#" !""!!###"""#"""!!!###########$$$$$$"""!!!"####"""##"!! !!"! !######"##""""""!""!!""""" !#%&$###$"!""""#""###""!!!"!!#$#$###"""#$%$###"""###""#$$##"##$#"!!"##$$#"###""##"##$########$$$! !!""!!"###""##""!!!########$$#$%$$#!"""!!!"####"""##"!!!!!"! !##""""!"##!""""!""!!"#"  #%&%###$$#"""""##""###"!"""!$$########""$$$####"""##"""#$####$$#"!!"#######"#""#"###$$##$####$$$" !!"! !###"""###!!!"#$$#####$$$$$$$!!""""!!"####""###"!!!!""!!!""""""""##"!""""!""!!"  #%&%$$$#$$%$#"""###""##$##"!!$####$$$$##"#$%$###""""#""!##$####$$$#!!"#$$$########""##$########$%#" !!!! !###""""##!!!!##$####$$$$$$$!!!"#"!!!"#$####"##""!"""""!!"##"#""""""!!"""!""!  #%&&%%%$$$$$$$##""###"!"#$##! !###$$#$$$$##"#$%$###""""##"!"#$##"#$$$#!!##$$$$#$$$$###"######$####$$$"! !"! !"##""###""!!!#$##$$###$$$$"""""#""!""##$######"""""""#!!"##"#""""#"!"""""" #&&%%$%%%%$$$$%$##""###"!"$##  !#"##$$$$$$$####$%$###""####"!"#$#####$$#!!##$$$$#$$$$$#"""#$##$$####$$$"! !""" !###"""###"!!"#$#######$#$!""""""#""""##########""!""""!!"##"""""##"!"#"!!#%&%%%%%%$%%$$$$$$######""!###!#"!!##$$$#$$$####%%%####""#"""""#$#####$$#!!#$$$$$$$$%$$#"#"###$######$$$#!!!!"!  "###"""###"!!"#$$$$$###$$ !!""""#"""! "########"""!""#"!""#"""""##"""" #%&%$$%%$$%%%$$$#$$$###""##""#! !#"! !"#$$$$$$$####%%%###"""""""""#$#####$$#"""$$$$$#$$%%$$####$$$##$$##$$$#!!!!""! !#####"###"!!"#$$$$#$$#$! !"!!!"#" "#$######""!!"##"!""#""#"###"! $&&%$#$$$$$$$$%$$##$$$########"  #$"! !"#$$$$$$#$##$$%$####"!""#"!##$####$$$$""#$$$$$##$%$$#####$$$$#$###$%$#"!"!!!! "###"#"###""!"#$$$$$##$" !!!!"!"#$######""!!"##"""##"""""#" #%&%#$##$$$$$$$$$$$###$$######$# !##!!! !"#$$$$%$$$#$$$%$####"!""""""#$#$###$$$#"#$$$$$#$#%$$###"#$$#$#$###$$$#"!!!!!! "#####"###""""#$$$$####"  !"!"  ##$######""!!"##""###""""!  #&&$####"#$$$$$$$$$$$##$$$$##$### !#"! ! !"#$$$%%%%$$$#$%%$###"!!""""##$#####$%$#"#$$$#$##$$#####"#$###$$$##$%$#!! !!! "####"####""!"#$$$$$###!! !"""! "#$##"###""!!####"####"! #&%$#$#####$$$$$$$$$%$$$###$#####" "#"! !!!!!!##$$$%%%%$###$%$$##""!!!"""#######$$%$#"#$$$$#$#######"""###$$$$##$$$#" !!!! !"#######$##""!#$$$$$###"!!""""!  "$###"###"!"""#######! #&&$$######$$$$$$$##$$%$$##$$##"##!!#$"!!!!""!!!##$$%%%%$$####$$##""!!!"""""$$####$$%$""#$$$$$$$#$###"""####$$$$##$$$#!!!!!"! !"##########"""#$$$$###$#"!""###! "$###"###"!""######! #&%$######$#####$$$$###$$%$$##$###"!$%#"!!!!"!!!!##$$%%%$$##""#$$##"!!!!""#""$$####$%%$""#$$$$$$#$#####"######$$$##$%$$"!!!!"! !"#$#########""#$%$###$$#"!"#$%#! #####"###"""""$##! #&%$###$####$##"###$$$###$$$$###$$#" !%%$#"!!""""!!"#$$$%%%$$##""#$$##""!!!"#""#$$####$%%$###$$$$$$#$$############$$$##%%##!!!!"! !"#$#####$$##""#%%$$###$#"!!#$%$! ####""#####"""#! #%&#######$$$##"#"##$$$$####$$$###$$" "$$%$#""!!""!!!"#$$%%%$$$#"""#%$#""!!!!"#"!"#$###$$$%%###$$$$$$$#####"########$$##$$%##!"!""!! "##$###$#$#####%#####$##"!!"#$#! ####""######"! #&%#########$##""##"#$%&%##""##$###$#" !#$$$%$$"""!"""!!""#$%$$$$$$#"#$%$##"!!!!!"""##$#"##%%%%###$$$$$$$$####"####""###$##$%%$#"!"##"!!!#$#$#$#$$##"##$$$####$"!!!"#$#!!####""####"" #&%#""##"##$###"######%&%&%##""######$! !$$##$%$$""!""""!""##$$$$$$$##""$%$$#"!! !"!"#$$#"#$$%%%$###$$$$#$$$###"####"""##$##$%%##!""##!! "##$#$##$$######$$######!!!"$$#!!####""###! #%%""###"######"###$$$%%%&%%%$#"##$####!!$$###$%%$""!"""""""#$$%%$$$$$#""#%$$#""!!!""""#$$###$%%%%$"##$$$$$#$$###""###""""#$##$%%#"""###"! "##$#####$$#$##$$$######!!!"$%$" "####""" $%%""####"#####"##$$$$%%%$#%&%%$#####$$#   !$#####$%%##"!!""""""##$%$$$$$##""$$%$##"!!!"##"#$$###$$%%%#"##$$$$$$#$##"""###"""###$#$$%#"""#$#"! "#$#$##$#$$$##$$$$$#$###"!!#%%#" "###"!!$%$"!"##""#####"##$$$$%%%$##$$&%%%$$$$##" "##"####$%%##""""""#""#$%%%$$$$##""$%%$##"!!!""#"#$$$#$$$%%$#""$$$$##$###"""###""""##$##$%$#"""#$$#! !#$#$###$#$$##$$%$$#$###"""#%%$" "##!!#%$!!"##""#####"###$$$%&%$##$#$%%%%%$$$$#" "$#"#####$%%$#"!""""""""#$%%$$$$##""#$%$###"!!"##"#%$$##$#$%$#"##$$$$#######"####"""##$##$%%#"""#$##!!"#$$#$##$#####$$%$$$#$$##""#%%$" ""!#&$! !##"""####"###$#$%%%%$$$$$#$%%%%$$$$$! !#$####$###$%$$#"""""""!""#$$%$$$$#"""#$$$$#""!!""#""$$$##$$$%%###$$$$$$#######$###"""#$$$$$%%#"!"#$$#"!"#$$##$#$$####$$%%$$$$$##!"#%%$! $%$!!!##""#####"#####$%&%%##$%%%$##$%%%$$$$! !#%$#####$$$$%$$#""!!!!!!!"#$$$$%$$$"""#$$$##""!!"#"!"$$$###$$%$$###$$$$$$$##########"##$$#$$%$#"!"#$%$""##$$$##$$$#$#$$$%$%$#$##"!"#$$#" !$%$! !"#"""#########$$%%%$$#$$%%$$$###$%%$$$   !#%$#$##$#$##$$%$#"""""""!!"#$%$$%$$#"""#$$$##"!!""#""#$$$#$#$$%$$##$$$#$#$#$####$$##"##$$$$#$%%#"""$%%$""#$$$$$#%%$####$$$%$$$$##"!!#$%$" !#%%" !!"!!"####"""##$$%&%%$$$%$$%$$$##"#$%%$#  "$$$$###$##$##$$$$#""!!!"""""$$$#$$$##"""#$%$##""""##""#$$$###$$%$####$$$$$###$#$##$#####$$$$$$%%#"!"#$$#""#$$$$##$$$$####$$$$$$$##"!"#%%$" !$&%"!!"""""####"#####$%%%%$$$$$%$$$###"!"#$$$#  #$$$$$$##$###$#$%$$##""!""""!"#$#$$%$$#"!!#$%$###"####""#$$$#$#$$$$####$$$$#########$$###$$$$$$%%%$"""#$$#"##$$$$#$%$$$#####$%$$$$$#"""#%%# !$%%" !!!"""##""""##"##%%%$$$$$%$$$$##$###""#$$$!!!!""#%$#$$$$$$###$$#$%%$##""""#""!"#$#$$%%$#"!!"$%$#######$#"#$$$$$#$$$$#"##$$$$##########$###$$%%#$%%%$"!"#$$##"#$$$""$%$$######$%$$$$$#""##$!"$&%"!!!!"""##""""##"#$%%%$$$$$$$$$$#$####$###$%%$$$$$$%%$$#$%$$$$##$$$#$$%$#""!"#"#"""#$$$$%$$##!!#%%$$#####$$#"#$%$$$#$$$$###$$$$$######"##$$$##$%$$$#%%%$"""#$$####$$#"#$$%$##$###$%%$$$$###""$&$"! !!!""##""""#####%%&%$$$$%%%$$$####$$$$$$$%&&&&&&&%$%$$##$$$$$##$$$$$%%$##""""#"""##$$$$%%$##!"#%%$$#######"!"$%$$#$$%$$#"##$$$$######"##$$$#$$%$$$$%%%$""##$$#""#$#""#$$$$$##$#$$%$%$%$$""$&$" !!"####"""#####$%%$$$$%%%%$$$$####$$$%$$%$%&&&&%%$$$$$##$$$$######$$$%%$#"""""###"##$$$$%%$$"""#%%$$##""###"""$%$$##$$$$###$$$$$#########$$$#$$$$$$$%%%$#"##$$##"###""#$$%$$#####$%$%$$# !$&$"! !!!"####"""####$%%%$$#$$$%$$$$$###$#$$$$%%$$#$%%%%$$##$$$###$$$#$###$$$%%%$#""""""##"##$$#$$$##"!"#%%$$###"###""#$%$####$$$###$$$$$##########$$#$$$$$#$%%%$#""#$$#"####""#$$%$$$$$#$$%$$# "$&$"!!!!!!"###""""##$$%%%%$$$$$%%$$$##"####$$$%%%%##"#$%%%$$$$$$$$#$$$#$####$$$%%%$#"""""###""#$$$$$##""!"#$%%$##"####"##$%$####$$$###$$%$$###$$#####$$$$$%$$$$%%%$#"###$##$###""#$%%$$#$$#$$$# "$&$"!!!!!"####""""###$%%%%$$%%%%%%$$$##"####$$%%%$$##""#$%%%%$$$$%%$#$$$$#$###$$$%%%$###""""#"""#$$$#$##""!!#$%%$$######""#$$$#$#$$$$####$$$$$##$######$#$%%$$$$$%%%$####$#####$##"#$%%$$##$$$"  "$%$" !!"""#$$#""""##$$%%%$$$%%%$%$%%$#####$$$$%%%$$###"""$$%&%%$$$$%%$$$$$$#$$##$$$$%%$###""""""!!"$$$$$$#""!!#%%%$$###"###"#$%$#$#$$$$###$$$$$$##$######$$%%%%$%$$%&%$####$$#########$$%$$###" "$&$! !!"#####""""##$%%%%$#$%%%$%$$$$#####$$$$%%%$$########$%&%%%$$$$%%$$$$$$#$#"#$$$$$%$###"""""!!!#$%$%$$##"!"#%%%%$##"####"#$%$$$$#$$$###$$$$$#$##$####$$%$%$$$$$$%&%%$#$$#$####$####$%$$##" #%&$! !!""#####""!""##$%%%$#$$%%$$%$$$#""##$$$$%%%$$######$$%%%&%%$$$$$%%%$$$$$$#######$$$%$##""""#""!!#$%%%$$####"#%%%%$##"####"#%%$$#$$$%$$##$$$$#$####$#$#$$$$$$$$%$%%&%$##$$%$###$$$###$$$$#  #%%$! !""#####""!!""##$%%%$##$%%$$$$%$#####$$$$$%%$#######$%%%%%%%%%$$$$$%%%$$%%$$#$###$$#$$$$$#"""###"!"#$%$%$$#$##"#%%%$##""######$%$$#$$$%$$##$$$$$$#$#$####$$$$$$$$%$%%&%$$##$%$###$%$###$$#  #$&#"!!""#####"!!""###$%%%$##$$$$#$$$$#""#$$$$$$%%$###"###$%%&%%$#%%%%$$$$$%%%%$%%$$#$$#$$##$%%$$#"######""#$%$$$####"##%&%%##""####"#$$$$#$$$$$$$$#$$$$$$$$$#####$$$$$$%%%%%&%%$$$$%$###$$$####  #%%$"!""######""!!""#$%%%%$###$$$$#$$##"##$$$$$$%%$$######$%%%%%%$#$%&%%$$$$%$%%%$%%$$$$%$##$#$$%$##"###$###"#$%$$#######$%%%$$##"####!"$%$$$$$$%%$###$$$$%$$##$##$$$$%%$$%%%%%&%%$##%%$$###$$#"!#%&$""""######"""""##$$%%%$###$$$$$$$##"##$$$$$$%%%$######$$%%&%%$$$$%%&%&%$%$$$$%$$%%%$%%$######$$$$####$#$#""#$%$####$$##$%&%%$######""#$%$$#$$$%%$###$%%%%$$#$####$%%%%$$$%%%%%%%###$%$###$$#!#$&$#"##"######""####$$%%%##$$$$%$$$$$#"#$$%%$$$%%%$#####$$%%%%%%#$$%%$$%&%%%$$$#$$%$$%%%$%$%######$$$$########""#$%$$###$$$#$%&%%#######""#$%$$$$$$%%$###$%%$$$$$$$$##$%%%%%$$%%%%%&""#$$%$$##"!#%&$#"####"#########$$%&%%$####$$$$$$$""#$%%%$$$%%%$$$#$$$$%%%&%%$$$%%%$$%&&%%$$#$##$%$$%%$$$$$####"#$$$#########""#%%$###$$$$$$%%%%$###"##""#$%%$#$$$$%%$##$%%$$$$##$###$%%%%$#$%%%%%##"##$$$$"!#%&$#"######$$########$%%%$##$$$$$$#$#"""$$%$$#$%%%$$$#$#$$%%%%%%$$$%%%$%%$$&%&%$$$##$$%$$$$%$%$$##"""#$$$$####$###!"#%%$$###$$$$$%%&%$#""###""#$$$$#$$$%%$$#$$%%%$#$$$#$#$$%$%$$$$%%%%#####$$$#  !"%&$#"###$#$$$########$%%%####$$$$$$$##""#$%$###%%%$#$##$$%%%%%%%$$%%%%$%%%%$$%&&%%$#$#$$$$$$%%$$$###"""#$%$$######$#"!#%%$$##$$$$$%%%%$$######"""$$$##$$$%%$$#$$%$%$$#$$$###$$%$%$$$&%%#$$###$#!"%%$"##$#############$%%&%####$#$$$$$###"#######%%%$#####$%%%%&%%$$$%%%$%%%%%$$%%&&%%$$##$$$$$$%%$$$###""#$%%$$###$####"!#%%$$##$$$$$$%&%$########"#$$$#$$$%%&%$#$$%%$$$#$$$$#$$$$%%$$%%&#$$$$$" !#%%$"##$$###$####"###$$&%%$###$$$$$$#$#"####"""#%%%$######$%&%&%%$$%%%$%%%%%%%%$$%%&&%%$$$$%%$$#$$%$$$$####$$%$$#$####$$#""#%%$$$$$$%$$$$&%%$$#####""#$$$$$$$%%%%$#$$%%$$$#$$#$##$%%%%%$%%$#$$$# !#%%$"##$$##$#####"#"#$%%%%$$$$%$$$$$$$#"####"!!#$%%%#######$%%%&%$%%%%%%%%%%%%$$%%%%%&%%$$$%%%%$$#$%$$$$$$#$#$$$$$$######$#""$%%%$$$$%$$$$%&%%$$#"###"""$$$$$%$%&%%$#$$%$$$$$$$$##$$%$%%%$%$$$$#!#%%#"##$#$#$####"####$%%%%##$$%$$$$$%##"####"!"#$%%%#######$$%%%%$$%%%%%$%%%%$$%%&%%$$%%&%%%%%%%$$#$$%%$$$$###$$$%$$#$####$$#""#%%%$$$$$%$#$%%&%$$###$##""$$$$$$$%%%$##$$%%$$$####$#$%%%%%%$$##" !#%%$""#$#$######"####$%%&%$##$%$$$#$###""###"""#%&%%$$$$##$$$%%%%$$%%%%%$%%%%%$%%%%%%$$$$%&%%%%%%%$$##$%%$%$$#####$$%$$######$#""$%%%%$$%$%$$$%%%%$$#####"""$$$$$$$%%%%##$$%%%$$$$##$$$%%%%%$$$# !#%%$""##$$#$###""""##$$%%%$##$%%$#$$$#"""####""$%&%%%$$$$$#$%%%&%%%%%%%%%%%%%%%$%%%&%$%$##$%%&%%%%%%%$###%%$$$##"###$$$$$$$$$####""$%%%$$$$%%$#$%%%%$$#####"""#$$$$$$%%%$$#$%%%%$$$$#$#$$$%%$%$#  !#%&#""##$$$$$#######$$$%%%$##$%$$##$$##""###"""#%%%%$$$#$#$$%%%&%$%%%%%%$%%%%%$%%%%%%$$$$###$%&%&%%%%%$$##$$%$$$##"###$$$$$$###$$$###$%&%$$$$%%$#$$%%%$$######"#$$$##$%%&&$$$$%%%%$$#$#$$$$%%$$#  !#%%#""##$#$#########$$%%&%$#$$$$$##$$$#"#$##"""$%%%$$$$$$$$$%%&%%%$%%&%%%%%%%%$%%%%%%$$$$$$$#$%%&&%%%%$%$$$$$$%$#$##"###$$$$$$#$$#$$##"#%%%$$$$%%$#$$%%%$$$$#$$###$%$##$%%%%%$$$%%%%%$$#$#$$%%%$  !#%&$""###$$$$#""####$$%%&%$$$$%%$##$$#""###""""$%%&$$$$#$$$$%&&&%%$%%&%%%%%%%%%%%%%%%$$$$$$$$$$$&&%&%%%%%%$$$$$$$$$$##"###$$$$$$$$$$$$###$%&%$$$$%%$#$$%%%$#$#$$$$#$$$$$$$%%&%%$$$%%%%%$$#$#$$$%% !#%&$""##$$$$########$$%%&%$$$$%%$$$$$$#"###""""#$%%$$$$$$$$$%&%&%%%%%&%%%$%%&%%%%%%%%$$$$$$%%%%%%%%&%&%%%%%%%$$$$%$$$$$#####$$$$$$##$$$$$#"$%%%$%$%%$$##$%%%$####$$$#$$%$$$$$%&%%$$$%&%%%$$#$$$$%& !#%&$#"####$$$#######$$%%%%$$$$$%$$$$$$###$$$"""#$%%#####$$%$%%%&&%%%&%&%%%%&%%%%%%%%%%$$$$$$$%%&%%$#$%&&%%%$%$%%$$$%%$$$#####$$%$$$$$$#$$$$###%&%%%$$$$##$%%%%$#####$$#$%%$$$$$%%%%$#$$%&%%$$$$$$$% "#&&%#"####$$$######$$%&&&%$$$$%$$$$#$####$$##"#$%&%$#"#"#$$%%%&&%%%&&%&%%%%%%%%%%%%%%$$$#$#$$%%%%&%$$$%%&%&%%$$%%%$$$%%$$$#####$$%$$$$$$$$$$$###%%%%$$$$$##$%%%%$#"###$##$$%$%$$$%%%%$#$$%&%%%$$$$$% "#&&%#######$$$######$%%&&%%$%%$$$$$$$##"#$$##""$%&%######$$$%%%%%%%%&&%%%%%%&%%%%%&%%$$$##$$$$%%%&%%$$%%%%&%%%%$%$%%$$$%$$$$$$##$$%%$$$$$#$$$%$#"$%%%%%$$$$##$%%%$$##"##$##$$%%%$$$%%%%#$$%%&%%$$$$$$ !#%&&$##"##$$$$$$$###$$%%&%$$$#$$$$$$$$#"#####""#%%$####$$$%$%%%%%%$%&&%&%%%%&%&%%&%%%%$$$###$$%%&%%$$$$%$%%&&%%$%$$$%$#$$%%%$$$####$%%%%$$$$$$$%%#"#%%%%%%$$$##$%%%$$######$##$$%%%$%%%%$$$$%%%%%$$$$$!#&&&$$##"##$$$$$%$$$$%%&&%$#######$$$$##"###"""$%%$####$$$%%%%%&%$$%&%%%%%%%&%&&%&%&%%$$$##$%$%%%%%#$$$$$$$%%%&&%$$$$$%$$#$%%%$$####$$%%$%$$$##$$%$##$%&%%%%$%$$#$$%%%$#####$$#$$%%%%%%%%%%$#$%%%%$$$$$#&'%$$####$$%$$$$$#$$%%&&%$$#####$$$$##"###"!!"$%%%#"###$$%%%%%&%%%%&%%%%%%&%%&%&%%&%%$$###$$%%%%%%$$$%$$%%%%%%&&&%$##$$$$$$$%%$$#$####$$$%%%$$$#$$%$##$%%&%%$$%$$##$%&%$###$$$$$$$%%%%%%%%%%$#$$&%%$$$$&&%$$#""#$$%$$$$###$$$%&%%$##$$$$$$$$#""##"!!!#$%$####$#$%%%%&%%%%%&&&%%%%%&%%%&%%&%%%$####$%%%%%%%%%%%%%%&%%%%%&%%%##$$$%$$#$%%$$$$$####$$%%%$$#$$$%$##$%%&%%%%%$$##$%%%$$###$$$$$$%%%%%%&%%%$#$%%&%%$$&%$##""##$%$$$$###$$%&%%%######$$$$$#####"!!"#%%$#####$$$%%%%%%$%%&&%&%%%&%%%%%%%%%%$$###$$$$%%%%%$$%%%%&&%%%%$$$%&%%##$%%%$$#$%%%$$$#""##$$$%%$$$$$$%$##$%%%%%%%%%$#$$%%%$$####$$$$$%%%%%%%&%%$$$%%%%%%%$###"##$$$$#####$%%&&&%$#$#####$$$#####"!!"$%%%####$$$$$%%%%%$%%&%%%%%&&&%%%&%%$$$%$$#$$$$%%%%%$%%%%$%%&%%%%%###%%&%%$$$%%%$##$%%%$$$##"##$$%%%%$$$$$%$###$%%%%%&%%$#$%%%%$#####$$$$$%%%%%%%&&%$$$%&%%%#######$%$$######%%&&&%$$$$#$##$$$#####"!!"#%%%$###$$$$$%%%%%%%%%%&%%%%%%%%%%%%%$$##$#$$$%$%%%%$%%%%%%%&%%%%$$$$$$%%&%$$$$%%%$$#$%%$$$$#####$$%%%%$$$$$$$#"#%%%%%%&%%$#$%&%%$#####$##$$%%%$%%%%%%%$%%%&%##$##$$%$$######$%&&%%$$$$$$$$%%$######"!"#%%%$#$$$$$$$$$%%%$%%&&%%%%%&&%%%%&%%$#" !"$%%%%%%%$$$%%%%&&%&%%%$$$%$%$%&&%%$$$%%%$$$$%%%$$$$###$$$%%%$$$$$$%$#!#$%%%%%&%$$$$%%&%$####$$$$$$%%%%%%&&%&%%$%&&###$$$%%$$#####$%&&%%$$%$%$$$$$$#####""""$%%%####$$$$$$%%%$$$%&%&%%%%&&%%%%%&%%#  "%%%%%$$$$%%$%%%%&%&%%$%%%&%%%%&&%$##%%%%%$$$%%%$%$$#$#$$%%%%$$#$$$$$""#$%%%&%&%$#$$%%&%$$####$#$$$%%%%%%%%%&%%$%&###$$%$$$##"##$%&&&%$$$%%%$$$$$######"!#$%&%$#$#$#$$$%%%%%%$%&%%%%%%&%%%%&%&%%%# "%%%%%$$%%%$%%%%&%%%%%%%%&%&%%%%%%%$$#%%&%%$$$%%%$$$%$$$$$%%%%$$$#$$$$#"#%%$%%%&%%$$$%%%%$$$$$$$$$$$%%%%%%%%%%%$%%$$$$$$$$#####$%&&&%$%%%%%%$%$$######"!"$%&$#####$$$$$%%&%%%%%%&%%%&%%%%%%%&%%%&$!!!!!!"%%$%%%%%%%%%%%&%%&%%%%%&%&%%$###%%%$##$%%%%$$$%%%$%%%%$%%$%%%%%###$$$$##$%%%%%%&%%#$$%%&%$$#$$$$$$#$%%%%%%%&%&%%%$$$%$$$$###$$%&&&%$%$%%&%%$%$######"!#$%%$###$$$$$$$$%%%%$%%&%%%&%&&%%%%&%&%&%%%#!!!!!#$%%%%%%%%%%%%%&&%%%%%%&%%%%%$"""#%%%$###$%%$$$$%%$$%%%%$%%%%%%%%####$$$##$%%%%%%&%%##$%%%%$$$#$$#$##$$%%%%%%%&&%%$$$$$$##$$$%%&&&%%%%%%%%$$$$$##$##"!"$%%$####$$$$%%%%&%%$%%%%%%%%&&%%%%&%%%%%%%%#"!!!!"$%%%%&%%$%%%%&%%%%%%%%%&&%%$#""""#$%&$###$$$%%$$%%$$$%%%%%$%%%%%%#####$$##$%%%%%%%%%$$$%%%$$#$$$$$$##$%%%$%%%%%&&$%$#####$%%&&'&%%%%%%%%%##"##$$##"!#$%%$####$#$$$%%%&%%$%%%%%%%%&&%%&%&%%&%%%$$%#"""!!!$%%%&%%%%%%%&%%%%%%%%&&%%%$#####""#%&%%###$$%%$$$%%$$%%&%%%%$$%%%$$####$$##$%%$%%%&%$$$$%%%%$$$$$$$$##$$%%%$%%&%&%$$$###$$%&&&&%%%%%%%%%#"!#$$#"!#$%%%##"##$$$$$%%%%%%%%%%%%%%&&%&%%&%&%%%%$$$%#"!!!!!$%%&%%%%%%%&&%%%$%%%&%%&%$#"#######$%'&%####$%%%$%%%%$%%%%%%%$$%%&%$#$##$####$%%%%%&%%%$$%%%%$#$$$$$##$$$%%%%%%&%$$$###$$&&&&&%$$%%$%$$$"!###"#$%&$##"#$$#$$%%%%%$$%%%%%%%%&&&&&&%%%&%%%$$$%%#""!!!!$%%%%$%%%&&&%%$$%%&%%&%%$####$$$$#$$%&&&%$###$%%%$%%%$$$%%%%%%$$%%%%$####$####$%&%%%&%%%$$$%%%$$#$#$$###$%%%$%%%&$$####%%%&&&%%%%$%%$$$"!###%%&%$####$$$$%%%%%%$%%%%$$%%%%&%&&%&%&%%$$$$$$%$#!"""!#%%%%%$%%%&%%%%%%%%%&%%$####$$#$$%%%%%%&&&$##$$%%%$$%%$%$%%%%%%%%%&%%$$###$####$%&%&%&%%$$$$%%%$#$$$$#$$$$%%%%%%%####$$%%&&%%$%%%%%%$%%" !#%&%%######$$$%%%&%%%%%%$#$$%&%&%%&%%%&%%%$$$$$$$$#""!!!#%&%%%%%%&%%%%%%&%&%&%$$$$$$$$$$$%%%$#$%&&%%$$$$%$$%$$%%$$%%%%%%$$%%%%$#######"#$%&%%%&%%$$$%%%%$$#$#$$#$%%%%%%%%$##$$%&&&%%$%%%$%$%%%$$""!! "$%$####$$%$%%%%&%%$%%%$$$$&&%&%&&%&%&%&%$$$$$$$$%#"!"!!#%%%%&%&%%%%%%&%%&%&%$$$$$$$##$$%%%$#"#$&&&&%$$$$$%$$%%$%$$%%%%%%$$%%%%#$##$$##"#$%%&&%%&%%$$%%%%$$$$$#$$%%%%%&%%##$$%&&&&%%%%%$$$$%$$%%%%#!! !#$###$$$$%%%%%%$$%%%$$$%%&&%%&&&%%%&%%$$%$$##$%%#"!""!#$%%%%&&%&%%%&&%&%&%%$$$%$$$##$%%%$##$$$%%&&&%%$$$$$$#$%%%%%%&%%%%$%%%%%####$$##""$%%%%%%%%%$%%%%%$$$$$$$$%%%%%%&#$$%%&&&%%$%%$$$$%%%$#$&%%#! !#$$$$$%$%%%&%%%%$%$$$%%&&%&&&&%%&%%%$$%$$$$#$%%$""!!!"$%%&%%&%%%%&%&%&&%%$$$%%%$$$$%&&%$$%%%%%%%&&&%%$$$$$#$$%%%%%%&%%%%%$%%%%#####$#"!"$$%%&&%&%%$%&&&%%$$$##$$$$%%&%$$%%&&&%$%%%$$$%%%%$$#"#%%$"! !#$%$$$$$%%%$$%%%$$$%%&&%&%%&%%&%%%%$%%$$##$%%&#"!!"!"$%&%&&%%%%&%&%&%%%$$%%%%$$$$%%&%$$%%%&%%%%&&&&%%$$$$$$$$%%%%%%&%%%%%$%&%%####$$##""$%%%%%%&%%%%%%&%$$$$###$$$%%&%%%&&&%$%%$%$$$%%%$$##""#%%%#"  #$%$%%%%%$$%%$$$$%%&&&%%&&%&%&%%%%%%%$$#$%%%%#"""!!"$%&&%%%%&%&%%%%%%$$%%&%$$$$%&&%$$%%&&%%&%%%%%&&%%%%%%$$%$%%%$%%%%%%%%%%%%%###$$$$#"#$%%%&&&&%%%$%%&%%$$##$$$$$%%&&&'&%%%$%%$$%%%%$###"!!"#&&%#" !#$%%%&%$$%%%%$$%%&&&&%&%%&%%%%%%%%%%$$%%%%%%%#"!""!#&%%%%%%&%%&&%&%$%%%&%$$$$&&&%%$%%%%%%&%&%%%%&&&%%%%%%%%%$%%$%%%%%%%%%%%&%%$##$%$$#"#$%%%&%&&%%$$%%&%%$$###$$$$%&&&&%$$$%%$%%%%$$###"""""$%'&%#!  #$%%%$%%%%$$$%%&&%%%&%&%%&&%%$%%%%$$$%%%$%%%#"!"!"#%&%%%&%%%%%%%%%%%%%$$##$%&&&%%%%&%&&%%&%%%%%%&&&%&%&&%%%%%%%$$%%%%%%%%%%&%%$#$$%$$###$%&%%&&&%%$$%%&%%$$$#$$$$$&&%%$$%$$$%$%%%$####"""#$%%%&&%#"! "$%$$%%%%$$$%%&&%%$%%%%%&%%%$$%%$$$$%%%$$$%%#""""!#%%%&%%&%%&%%%$$%%%%$#$$%&&%$$%%%%&%%%&%%%%%%$%&&&%%&%%&%%$%%%%$%%%%%%%%%%&%%$#$$$%$###$%%%%%&&%%$$%%&%%$$$$$$$$&&%$$%$$$$#%%$####"""##%&&&%$&&%#"! !#%$$$%%&%$%%%&%%$$$$%%&%%%%$%$$$#$$%&%%$$%&%$"""!!"%%&%%&%&%%&%$%%%%%%$$$&&&%$$$%%%&%&%&%%%%%%$$$%&&&&%%%%%%%%%%%$$$%%%%%%%$%%&%$#$$$$$###$%%%&&%%%%$$%%&&%$$$#$$$&%$$$$%$$$$%$##""##""#%&&&$$$%&&%#!"#$%%%%%&%%$%%%&%%$$$%%%%%&%$$$$$##$$%&&%%%%%%&$"!""!"$%%&%%&%&%%%%%%%%%$$%%&&%%$%%%%&%&%%%%%%%%$$$$%%&&%%%%%%%%%%%%%%$$$%%%%%%%%%%%$##$$$##"#$%%%%%&%%%$$%%&%%$$$#$$%$$$%$$$$%%$#"""#####$%&%$$$#$%&%%#$%&&%%%&%%$$%%&%%$$$%%%%&%%$$%%$$$#$%%%%%%&%&%&$""""""$%&%%&%&%%$%%%&%%$$%&&&%%%%%%%&&%%%%%%%%%%%$$%%%%%%%$%$%%%%%%&%%%$$$%%%&%%%%%%%$##$$$#""##%%%&%&%%%%$%%&&%$$$$$$$$$$$$%%%%##""###$$%&&%$#$$$$$$&&%%&&%%%&%$$$%%&%%%$$$$%%%%%%$%$$$$$$%%%%%%%%%&&&%""!"!"$%&%%&%%%%$%%&%%%$%%&&&%$%%%%&&%%%%%%%%%%%$%%$$$$%&&&%$$$%%&%%&%%%%$%%%%&%%%%&%%$#$$$$$#"#$%%%&%%&%%%$$%&%%%$%$$$$$$$%%%%##""####$%&&&%$$$$$###%&&'&%%%%%$$$%%&%%$$$$$$%%%%%%%$$$$#$&%&%%%&%&&&%&%#"""!!#%%&%&%%%$%%%%%%$%&&&&$$%%%&&%%%%$$%%%%%%%%%%$$#$$%&&&%$$%%%%&%&%%%%%%%%%%&%$%%%%$#$$%$$###$%%%&%%&%%$$%%&&%%$%$$$%%%%%%$#"#$#$#$$&&&%$$$$$$##$%%&&%%&&%$$$%%&%%%$%$%$%%&%$$$%$$#$$%%%%%%%&&&&&&&%#""""!"%%%&%%%%%%%%%$$%%&&&%%&%&&%&%%%$$%$%%%%%%%%$$#$$$$%&&&$$$%&%%&%&%%%$%%%%%%%%$%%&%$$$%%$$#"#$%%&%&%%&%$$$%&&%%$$%%%%%%%#####$$$$$%&%%#$$$$$$$$%%%%%%%&%$$$%%&%%%%%%%%%%%%$%$%$$$$$%%%%$%%%&&&&&%&&$#"""!!$&%%%$%%%%%%%$%&&&&%%%&&&&%&%%%%$%%%%$%%%%$$$$$$$$%&''&%$%%%&&&%&%%%%%%%%%%%%%%%&%$$$%%%$#"#$%%&%%&%%%%%%%&&%%$$%%%%%####$$$$$%&&&%##$$%$$$%%%%%$%%&%%%$%%&%%%%%%%%%%%%$%$$$$$$$%%&%%%%%&&%%%%&&&%#""""!#%%%%$%&%%%$$%%&&&%%&&&&&%%%%%$$%%%%%%%%%$$$$$%%$$%%&&'&%$%%%%&&%&%%%%%%&%%%%%%%&&%$$$%%%$###$%%&%&%&%&%%%&&&&%%%%&%####$$$$$%&&&%#$$%$$%$%%%&%$%%&%%$$%%%%%$%%%&%%%%%$$$$$$#$%%&&&%%%&%%%&%&&%%&%#""""!#%&%$%%%%%$%%&&'&%&&&&&%%%%%$$$%%%%$%%%%%$$$%%%%%%%%%&&'&%$%%&%&&&%&%%&%%&%%&%%%%%%%$$$%%%$#"#$%%&%&%&&&%&%&&&$%%%%$$##$$$$#%%&%$$#$$$%%$%%%%%$%%&%%%$%&%&%%%%&&%%%%$$$$%$$$$$%&&&%&%&&&&&%&&%&%&%$""""!"$%%%%%%%$%%&&&&%&%&&&%&%%%$$$$%&%%$%%&%$$$%%%%%&%%$$$&&'&%$%%%%&%&%%%%&%&&%%&%%%%&%%$$$%%$$#"#$%%&%%&&&&&%%&&$%%$$##$$$$$$%&&%$$$$$$%%$%%%%%$$%&%%$$%&%&%%%&%&%%%%%$$$$$$#$$&%&%&&%&&&&%&&%&%%%&%$#"""""$%%%%%%%$%&&&&%%&&&&%&%&%$$#$%%%$%%%%$$$$%%%%%%%&%$$$%&&'&%$%%&%&&&%%%%%&&&&%&%%%%&%%$$$%$$####$%%%%%&'&&&&%&%%$$##$$$$$$%&&%$$#$$$%%$%%%%%$$%&%$$$%%&%%%%%%&%%%%$$$%$$$#$%%&&&&&%&&&&&%&&%&%%%%%$#"""""#%%%%%%$%&&&&%%&&&%%%%%%$##$%%%%%%%%%%$$%%%%%%&%%%$$$$%&'''%%$%%%%&%%%%%%&&%&%%%%%%&%%$#$$$$$###$%&%%%&&&&&&&%%$##$$$$$$%%&%%$#$$%%%$%%%&%$%%%%%$$$%&%%%%%%&%%%$$$$%$%$#$%%&&&&%&&&&&&&&%%&%%%%&&%##""""#%%%%$$%&&'&&&&&&%%&%&%$##$%%%%$%%%%%$%%%%%%%&%%$$%%&&%%&''&%%$$%&%&%%%%%%%&&%%%%%%%%%%$#$$$%$$##$%%%%%%&&&&&%$##$$$%$$%&%&$$#$$%%%%%%&%%%%%%%%#$%%&&%%%%%%%%%$$%$%%$$#$%%%%%%&%%&&'&&&&&%%%&%&%&&$""""!"%%%%$%&&&&&&&&&&%&%&%$$#$%&%%%%%%%$$%%%%%%%%%%%%%%&%&&%%&''&&$$$%%%&%%$%%%%%&%%%%%%%&%%$#$$%%$$$$%&&%%%%%%&&$##$$$$$$%&&%%$$$%%$%%%%&%&$%%%&%$$%%&&%%%%%%%%%$$%$%%$$##$%&&&&&%%&&&&&&&&%%%&%&%%&&$""""!"$%%%%%&&&%%&&&%%&%%%%$$$$%%$$%%&%%%$%%%%%%%&%%%%&%&&&%&%$%&'&%%%%%%%&%%$$%%&%&%%&%%%%&%%$$%$%%$$$$%%%%%%%%%&$#$$$$$$%%&&%$$$%%%%%%%&%%%%%%&%%%%%&%%%%%%%%%%%$$%%%$$#$%&&&&%&%%&&&%%&&%%%&&%%%&&&&$#"""""#%$%&&&&%%&&%%%&%&&%$$$$%$$$%%%%%%$%$$$%%%&&%%%%%&&%&%%$#$%&''&%%%%%%%&%%%%%&%%&%%&%%%&&%$$$%$%%%$$%%&%%%%%&$$$%$$$$&%%%%$%$%%%$%%%%%%$%%%%%$%&&&%%%%%%$%%$$$$%%%$##$%&&&&&%&&&&&&&%%%%&%%&%&&%%&%####$$%&%%&&&&&&&%&%&&&%%$$$$$%$%%%%%%%$%$$$%%&&%%%%%&%&%&%&%$$$$&&''&%%%%%%%%%%%%%%&%&%&&%%%&%%%$%%%%$%$%%%&%&%%%$$%$$$%%&&$$$$%%%%%%%&&%$%%%%%%%%%&&%%%$%$%%%%$$$%%%$$#$%&&&&%%&%&&%&%&%%%%%&%&&%&%%%%$$$$%&&%&&&&%%&&&&&&%&%%%$$$%$%%%%%$$$%%$$$%%&&%%%%%&%%&&%%%%%%$$%%'''&&%%%%&%&%%%%%%&%&%&&&%&&&%%$%%%%%$$%%%&%&%%$$$$$%&&%$$#$%%%%%%%&%%%%%%%%%%%%&%%%%%%$%%%%$$$%%%%##$%&&&&&&%&&&%&%&&%%%%%%&%&&&%$%&%&%&&&&&&&&&&%&%%&%&%&&$%$$$$%%%&%%$$%%%$%%&&&%%$%%%%&&%%%%%%%%%%%%&'''&&%%%%%%&%%%%&%%&&&&&&%%&&%%$$%%%%%%%%%&%%&$$##$%&%$$#$$%%%%%%&%%%%%%%%$%%%&%%%%%$$%%%%%%$%%%$$##$%&&&&%&&&&&&%&%%%%%&%%%&&%%%%%%&&&&%%%&&&&%%&%&&&%%%%$$$$$$$%%%%%%$%%%%$%%&&%%$%%%%&%%%%$$%%%%&%&%&&&'&&&%%%%&%&%%$%%&&%&&&&&%&%&%%%%%%%%%%%%%%&&$$$%%&%%$$$%%%%%%%&%%$$%%%%$%%%&%%%%%%$$%%%$$$%%%%$$#%%&&&%%&&&''&&&%&%%&&%%%&&%%$$$$%%%$$%%&&&%&%&&%&%&&%&%$$$$$$%&%&%$$%%%%$%%&&%%%%%%&%&&%%%$%%%&&&&&&%%&&''&%&%%%%%&$%$%&%%%%%&&&%&&&%%$%%%%%%%%%&%&$$%&&&%$$$%%%%%%&&&%%%%%%%$%%&&%%%%$%$%%$%%$%%%&%$$$%&&%&%&%%&&&&&%%&%&%%%%%%&%%$$$$$$$$$$%&&&&%%&%%&%&%%&%%$$$$$%%%&%$$$%%%%&&&&%%%%%%&%&%%%$$%%%%%&&&&&%%%&'''&%%%%%&%%$$%%%&&%&%&&&%&&&&%$%%%%&%%%%%%#$&&&%$$$%%%%%%%%&&%%%%%$%%%&&%%%%%%%%%%%$$%%%&%%$%%&&&&%&%%&%&&%&%%%&&%&%%%&&%%$$$$%$$$%&&'&&%&%%%&%%&%%%$$$$$$%%&%%%%%%%%%&%&&%%%%%&%%&%%%$$%$%%%%&&&&%&%&%&&''&&&&%%%%%%$%%%%%%%%%&&&%&&%%%%%%%%%&%&&$&&%%$$$$%%%%%%&&%%%&%%%%%%&&%%%$%$%$%%%$$%%%&%%$%%&&&&&%&%&&&&%&%%&&&&%%%&&%%$$$$$$$$%%&&'&&%&%%&&%%&%%$$$$%%%%&&%%%%$%%%&%&&&%%%%%&%%&%%%$#$$%%%%&&&&&%%&%%&&'''&%&%&%&%%%$%&%&%%%&&&&%%%&&$%$$%%%%%&%&&%%$$%%%%%%&%&%%%%%%&%%%%&&&%%$$$$$%%%$$$%%&%%%$%%&&&&%%%&%%&%&%%%&&&%%%%&%%$$$$$$$$%%&&&&%%&%&&&%&&%%$$$$%%%%%&%%%%%%%%&%&&&%&%%&%%&%&%%$$$$%%%&%&&&%%&&&&&%&&&''&&&%&%%%%%$%%%%%%%%&&%%$%%&%$%%%%&%&&&&%%$%%%%%%&&&&%%%%%%%%%&&%%%%%$$$$$%%$$$$%&%%%%%&&&&&&%&%%&%&%%%%&%&%%%&&&%%$$$$$$$%%&&'&%&%%&%&&%%%%$$$$%%%%%&&%%%$%%&%%&%&%&%%&&&%&%%%$$$%%%&%&&&&%&%%&&&&%%%&''''&&%%%&%%%%%&%%%&%%&%&%%%%%%%%%%%%&%&%%$%%%%%%%%&%&%%%%%%%%%&&&%$$$%$$%%%$$$$%%%%$$%%%&&&&&%&&&%&&%%%%&&%%%%&&%%$$$$$$$%%&&&&%&%&&%&&%&%%$$$$%%%&%&%%%$$%%%%%&&&%%%%&%%%&%%%$#$$%%%%&%&&%%%&&&&&&&%%&&&''&&%&%%&&%%%%%&%%%%%&&%%%&&%%%%%%&%&%%$%%%%%%%%&&%%%&%&%%%&&&%%$$%%$%%%%$##$%%%$$$$$%%&&%&%&%&%&&%%%%&%%%%%&&%$$#$$#$$%%&&&&%&%%&&&&%%%%$$$%%&%&%%%%%$$%%%&%&&&%&%%&%&%&%%$$#$$$%%%&%&&&%&&&&&&&&%%%%$%&''&&&%&%%&%%%%&%&%&%&&&&%%%&&%&%%%&%%$%%%%%%%&&&%%%%%&%%%%&&%%$$%$%%%%%%##$%%%$$$%%%%%%%%%%%&%&&%%%&&%&%%%&&%$##$$#$$%%&'&&%&%&&&&%%%%%$%$%%%%&%&%%$$$%%%&%&&&%%%%&%&%%&%%$$$$%%%%&%&&%%&%&&&&&&%&%%%$$%%''&&%%&%&%%%%%%&&&%&%&&&%%%&%%%%&%&%%%$%%%%%&%%%%%&%%%%%&%&%$%$%%%%%%%$#$%%%%$$%%%%&&&&%&&%%&%%%%&%%&%&%&&%$##$#$$$%%&&&&%&%%&%&&%&%$$%$%%%&%%&%%%%$%%&%&&&&%&%&%%&%%&%$$##$$%$%%&&&&&&&&&&&&&%%&&%%$#$%&''&&%%%%&&&%%&%&&&&&&&&&%%%&%%%%%%%%$%$$%%&%%%%&&%&%%&&&%%$$%%%%%%%%##$$%%%#$$%&%&&&&%&%&&&%&%%%%&%%&%&&%$#$#$$$%%%&&&&%&%&%&&%&%%%$%%%%%&%%&%%%%%%%&%&&&&%%%%%%&%%&%%$#$$$%%%%&&&&%&%&&&&&%%%&%%%%%$%%%&''&&&%%%%&&&%%%&%&%&%&&&%%%&&&%&&%$%$%%%&%%%%%&&&&%%&&&%%$$%%&%&%$$#$$%%$$$%%%%&%&&%&%%&&&%%%&%&&%&%&&%$$###$$%%%&&&&%%%%%&&%&%%%$%%%&%&%%&%&%%%%%%%&&&&%%&&%&%&%&%%$$$%%%&%%&&&&%&&&&&&&%&%&%%%%%%&%%&&'''&&%%%&&&&&%&%&&&&&&&&&%%%&%&%%%%%$%%&&%%%&&&%%%&&&%%$$%%%%%&%%$#$$%%$$$%%&%&%&&%%%%&%%%%%%%&%%&%&&%%$$##$$$%%&&&&%%&%&&%%&%%%$%%%&%&%%&&%%&%&%&&&&&%&%&%%&%&%&%%$$#$%%&%&&&&&%&&&&&&&&%%&%%%%%%&&&%%&'&''&&%%%%&&&&%&%&&&&&&%&%%%&&&%&%%$%%&&%&%%&&%&%&&&%%$$%$%%&%%%##$$%$$$$%%&%%%&&&&%&%%&%%%%&%%&%&&%%%$$$$$$$%%&&'&%%&%&%%&%%%$$%%&%%&%&&&&&%&%&%%&&&&%&%%&%%&%%%%$$$$%%%%%%&&&&&&&&&&&&&%&%%%$%%&%&&&&%%&&'''%%%%%&&&&%&&&&&&&&%&%%%&&%%%%%&&&%%%&&%&%&%&&%%%%$%%%%%%$$$$$$%%$$%%%%%&%&&%%&%&%%%%%&%%&%%%&%$$$$$$$%%%&&&%%&&%&%%&%%%%%%%%%&%%&&%&&%%%&%%&&&&%&%%&%&%%&&%$$$$%%$$$%&&&&&&&&&&&&%&%%%$$%%%&&&&&&&%%&&''&&&%%&&&&&%%&&&&%&%&%&%%%&&&%&&&%%&&&&%%%%&&%%%%%%%%%%%$$$#$%%%$%%%%%%%%&&%%&%&%%&%&&%&%&%&&%%$$$$$$%%%&&&&%%%%%&%&%%%$$%%&%&%%&&%&%%%&&%%&&&&%&&%&%&%%&%%%%$$%$$$$%&&%%&&&&&&&&&%%%$$$%%&%&&&&&&%%&%&&'''&%&%&&&&&&%&&&&%%%&&%%%%&%&&&&%&&&&&%%%&&%%%%%%%%%%&%$$$$%%$$%%%%%%%%&&%&%%&%%%%%%%%%%%&%%%$%%%$$%%%&&'&%&&&%%%&%%$$$%%%%&%&%%%&%&%&%%&&&&&&&%%&%%%&%%%%$$$$$$$$&&&&&&&&&&&&&&&%%%$$%%%%&&&&&&%&&&%&&''''&%&%&&&&&&&&&&%%&%%%%%&'&%&%&&&&&%%%%&&%%%%%%%%&%&$$#$$%%$$$%%%$$%%%&&%%&&&%%%&&%%%%%%&%%$%$%%$%%%&'&&%&%&&%%&%%$$$%%%&%%&%&%&%%&%%&&&&&&&&%&%%&&&&%%%$$$$$##$%&&&&%'''&'&&&&&&%$$%%&&&%&&&&%&%&&&%%&''''&%&%&&&&&%&&&&%%&&%&&&&&%%%%&&&%%%%&&&&%%%%%%&%%%$#$$%%$$$%%$$$$%%&%%&&&&%%%&%%%%%%%&%%%$%%%%%%%&&&&%&%&%&%&%%$$$$%%&%&%%&%%%%&%&%%&&&&&&%&%%&%%&%%%%$%%$$#$%&&&%&&&''&&&&&%%$$$%%&%%&&&&&%&%&&&&%%&&'''&&&&&&&&'&%&&&&%%&&&&&&%%%&&&&&&%&&&&%%%%%%%&%&%$#$$%%$$%&%%$%%%&%%%&%%%%%%&%&%%%%&&&%%$%%%%%%&&&&&%&%&&&%&%%%$$$%%&%&%%&%%%%&%&%%&&&&&&%%%&%&%&%%%$$$$$$$%%&&&%&&&&&&&&&&%%%$$%%&%&%&&&&&&%&&&&&%&%&&&''&&&&&&&&&&&&&&&&&&&&&&%%&&&&&%%&&&&&%%%%%%&%&%$#$$%%$$$%%%$%%%&%&&%%&&%%%%%%%$%%&&%%%$$%%%%&&&'&&%&%%&%%&%%$$$$%%&%%%&%%&%%%%&%&&&&&&&%&%&%&&%%%$$%%%$$$$&&'&&&&&&&&&&&&%%$$$%%%%&%&&&&%%&&&&&&%&&&%%&'''&&&&&&''&&%&&&&&&'&&%%&&&&%%&&&'&&%&%&%%&%%%$#$$%%$$$%%%$%%%%%&%%&&%%%$%%%%$%%%&%%$$%%%%&%&&&&%%&%&&%&%%%%$$$%%%%&&%&%&%%%&%%&&&&&&&%%%&%&&%&%%%%%%$$$$%&'&&&&&&&&&&%%%%%$%%%&%&%&&&&&%&%&%&%%&&&&%&&&&''&&&&&&&'&&%&&&&&&%%&%&&&&%%&&&&%%%%&%%%&&%$$$$%%$$%&%&%%%%&%&%%&%%%%%%&%%%%%&&%%$%$%%%%&&&&&&%%%&%%&%%&%$$$%%%%&%%%%%%%%&%&&%&&'&%&&%&%&%&&%%%%%%$$$%%&'&&&%&&&&&%&&&%$$%%%&%&%&&'&&&&&&&&%&%&&%%&%%&&''''&&&&'&'&&&&'&&&%&%&&&%%%&&&&%%%%&%%&&&%%$$$%$$$%%%&%%%%&%%&%&%%%%%%%%%%%%&&%%$%$%%&%&&&&&&%%&&&&&%&%%%$$%%%%&%%&%%%%%&%&&&&'&&&&%%&&&&&%%%%%%%$$$%&&'&&&%&&&'&&&&%%%%%%&&%&%&&&&&%&%&&&%&&&&%%&%&&%&&&&'&''&&'&&&&&&&%%&%&'&%%%%&&&%%%%%%%&&%%%$$$%$$$$%&&%%&%&%&%%&%&%%%%&%%%$%&%%%%%%%%%&&&&&&&%&&%&%&%%%%%$$%%%&&%&%%%%%%%%&&&&&&&&%%&&&&&&%&%%%&%$$$$%&'&&&%&&&&&&%&&%%%%&&&%%%&&&&&&&&&&&%&&&&%%%%&&&%%%&&&'&&&'''&'&&&%&&&&&&&%%%&&&%&%%%%%&%&&%%%$$$%$$%%&%%&%&%%&%&&&%%%%%%%%$%%&%%%%%%%&%&%&&&&%&%&&&&%&&%%$%%%%%%%&%&%%%%%&%&%&&'&&&&&%&%&&&&%%%&%%$$$$&&&%%%&&&&&&&&%%%$%&&&%&&&&''&&&&&&&%&%&&&&%&&&&&%&%%&&''&'&&'&&&%%&%%&&'ATBK_V_P 41 +Œ1ÿTßT¿PŸPL_LHHDDDD@@<<8440,,(($     +   \ No newline at end of file diff --git a/IMG/ATTRACT.IMG b/IMG/ATTRACT.IMG new file mode 100644 index 0000000..b63b522 Binary files /dev/null and b/IMG/ATTRACT.IMG differ diff --git a/IMG/ATTSTUFF.IMG b/IMG/ATTSTUFF.IMG new file mode 100644 index 0000000..30ced95 Binary files /dev/null and b/IMG/ATTSTUFF.IMG differ diff --git a/IMG/BALL.IMG b/IMG/BALL.IMG new file mode 100644 index 0000000..d6d5fd2 Binary files /dev/null and b/IMG/BALL.IMG differ diff --git a/IMG/BALLFONT.IMG b/IMG/BALLFONT.IMG new file mode 100644 index 0000000..8815483 Binary files /dev/null and b/IMG/BALLFONT.IMG differ diff --git a/IMG/BAST10.IMG b/IMG/BAST10.IMG new file mode 100644 index 0000000..567795c Binary files /dev/null and b/IMG/BAST10.IMG differ diff --git a/IMG/BAST18.IMG b/IMG/BAST18.IMG new file mode 100644 index 0000000..2bbe6a5 Binary files /dev/null and b/IMG/BAST18.IMG differ diff --git a/IMG/BAST7T.IMG b/IMG/BAST7T.IMG new file mode 100644 index 0000000..64a6287 Binary files /dev/null and b/IMG/BAST7T.IMG differ diff --git a/IMG/BAST8.IMG b/IMG/BAST8.IMG new file mode 100644 index 0000000..af99a06 Binary files /dev/null and b/IMG/BAST8.IMG differ diff --git a/IMG/BAST8T.IMG b/IMG/BAST8T.IMG new file mode 100644 index 0000000..22cb077 Binary files /dev/null and b/IMG/BAST8T.IMG differ diff --git a/IMG/BASTCYC.IMG b/IMG/BASTCYC.IMG new file mode 100644 index 0000000..99d8b62 Binary files /dev/null and b/IMG/BASTCYC.IMG differ diff --git a/IMG/BB.LOD b/IMG/BB.LOD new file mode 100644 index 0000000..e19731d --- /dev/null +++ b/IMG/BB.LOD @@ -0,0 +1,196 @@ +***> 5d6e300,1 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD.TBL +XON> +PPP> 6 +HDS1.IMG +GLO> PLYRHD.GLO +---> ewing0,ewing1 +GLO> XXXHD.GLO +---> ewing2,ewing3 +---> ewing4,ewing5,ewing6,ewing7,ewing8,ewing9,ewing10,ewing11,ewing12 +---> ewing13,ewing14,ewing15,ewing16 +GLO> PLYRHD.GLO +---> stock0,stock1 +GLO> XXXHD.GLO +---> stock2,stock3,stock4,stock5 +---> stock6,stock7,stock8,stock9,stock10,stock11,stock12,stock13,stock14 +---> stock15,stock16 +GLO> PLYRHD.GLO +---> shiek0,shiek1 +GLO> XXXHD.GLO +---> shiek2,shiek3,shiek4,shiek5,shiek6,shiek7,shiek8 +---> shiek9,shiek10,shiek11,shiek12,shiek13,shiek14,shiek15,shiek16 +GLO> PLYRHD.GLO +---> kmalone0,kmalone1 +GLO> XXXHD.GLO +---> kmalone2,kmalone3 +---> kmalone4,kmalone5,kmalone6,kmalone7,kmalone8,kmalone9,kmalone10 +---> kmalone11,kmalone12,kmalone13,kmalone14,kmalone15,kmalone16 +HDS2.IMG +GLO> PLYRHD.GLO +---> Person0,Person1 +GLO> XXXHD.GLO +---> Person2,Person3,Person4,Person5,Person6,Person7,Person8,Person9 +---> Person10,Person11,Person12,Person13,Person14,Person15,Person16 +GLO> PLYRHD.GLO +---> Augmon0,Augmon1 +GLO> XXXHD.GLO +---> Augmon2,Augmon3,Augmon4,Augmon5,Augmon6,Augmon7,Augmon8,Augmon9 +---> Augmon10,Augmon11,Augmon12,Augmon13,Augmon14,Augmon15,Augmon16 +GLO> PLYRHD.GLO +---> Benja0,Benja1 +GLO> XXXHD.GLO +---> Benja2,Benja3,Benja4,Benja5,Benja6,Benja7,Benja8,Benja9,Benja10,Benja11 +---> Benja12,Benja13,Benja14,Benja15,Benja16 +GLO> PLYRHD.GLO +---> Cole0,Cole1 +GLO> XXXHD.GLO +---> Cole2 +---> Cole3,Cole4,Cole5,Cole6,Cole7,Cole8,Cole9,Cole10,Cole11,Cole12,Cole13 +---> Cole14,Cole15,Cole16 +GLO> PLYRHD.GLO +---> Drex0,Drex1 +GLO> XXXHD.GLO +---> Drex2,Drex3,Drex4,Drex5,Drex6 +---> Drex7,Drex8,Drex9,Drex10,Drex11,Drex12,Drex13,Drex14,Drex15,Drex16 +GLO> PLYRHD.GLO +---> Elliot0,Elliot1 +GLO> XXXHD.GLO +---> Elliot2,Elliot3 +---> Elliot4,Elliot5,Elliot6,Elliot7,Elliot8,Elliot9,Elliot10,Elliot11 +---> Elliot12,Elliot13,Elliot14,Elliot15,Elliot16 +GLO> PLYRHD.GLO +---> Hrdaway0,Hrdaway1 +GLO> XXXHD.GLO +---> Hrdaway2,Hrdaway3 +---> Hrdaway4,Hrdaway5,Hrdaway6,Hrdaway7,Hrdaway8,Hrdaway9,Hrdaway10 +---> Hrdaway11,Hrdaway12,Hrdaway13,Hrdaway14,Hrdaway15,Hrdaway16 +HDS4.IMG +GLO> PLYRHD.GLO +---> Miller0,Miller1 +GLO> XXXHD.GLO +---> Miller2,Miller3,Miller4,Miller5,Miller6,Miller7 +---> Miller8,Miller9,Miller10,Miller11,Miller12,Miller13,Miller14,Miller15 +---> Miller16 +GLO> PLYRHD.GLO +---> Mutumbo0,Mutumbo1 +GLO> XXXHD.GLO +---> Mutumbo2,Mutumbo3,Mutumbo4,Mutumbo5,Mutumbo6,Mutumbo7 +---> Mutumbo8,Mutumbo9,Mutumbo10,Mutumbo11,Mutumbo12,Mutumbo13,Mutumbo14 +---> Mutumbo15,Mutumbo16 +GLO> PLYRHD.GLO +---> Oakley0,Oakley1 +GLO> XXXHD.GLO +---> Oakley2,Oakley3,Oakley4,Oakley5,Oakley6 +---> Oakley7,Oakley8,Oakley9,Oakley10,Oakley11,Oakley12,Oakley13,Oakley14 +---> Oakley15,Oakley16 +GLO> PLYRHD.GLO +---> Hakeem0,Hakeem1 +GLO> XXXHD.GLO +---> Hakeem2,Hakeem3,Hakeem4,Hakeem5,Hakeem6 +---> Hakeem7,Hakeem8,Hakeem9,Hakeem10,Hakeem11,Hakeem12,Hakeem13,Hakeem14 +---> Hakeem15,Hakeem16 +GLO> PLYRHD.GLO +---> Rice0,Rice1 +GLO> XXXHD.GLO +---> Rice2,Rice3,Rice4,Rice5 +---> Rice6,Rice7,Rice8,Rice9,Rice10,Rice11,Rice12,Rice13,Rice14,Rice15 +---> Rice16 +GLO> PLYRHD.GLO +---> Robins0,Robins1 +GLO> XXXHD.GLO +---> Robins2,Robins3,Robins4,Robins5,Robins6,Robins7,Robins8 +---> Robins9,Robins10,Robins11,Robins12,Robins13,Robins14,Robins15,Robins16 +HDS5.IMG +GLO> PLYRHD.GLO +---> schremp0,schremp1 +GLO> XXXHD.GLO +---> schremp2 +---> schremp3,schremp4,schremp5,schremp6,schremp7,schremp8,schremp9 +---> schremp10,schremp11,schremp12,schremp13,schremp14,schremp15,schremp16 +GLO> PLYRHD.GLO +---> smith0,smith1 +GLO> XXXHD.GLO +---> smith2,smith3,smith4 +---> smith5,smith6,smith7,smith8,smith9,smith10,smith11,smith12,smith13 +---> smith14,smith15,smith16 +GLO> PLYRHD.GLO +---> tisdale0,tisdale1 +GLO> XXXHD.GLO +---> tisdale2,tisdale3,tisdale4,tisdale5,tisdale6 +---> tisdale7,tisdale8,tisdale9,tisdale10,tisdale11,tisdale12,tisdale13 +---> tisdale14,tisdale15,tisdale16 +GLO> PLYRHD.GLO +---> laet0,laet1 +GLO> XXXHD.GLO +---> laet2,laet3,laet4,laet5,laet6,laet7,laet8,laet9,laet10 +---> laet11,laet12,laet13,laet14,laet15,laet16 +GLO> PLYRHD.GLO +---> hawkins0,hawkins1 +GLO> XXXHD.GLO +---> hawkins2,hawkins3 +---> hawkins4,hawkins5,hawkins6,hawkins7,hawkins8,hawkins9,hawkins10 +---> hawkins11,hawkins12,hawkins13,hawkins14,hawkins15,hawkins16 +;Larry +GLO> PLYRHD.GLO +---> johnson0,johnson1 +GLO> XXXHD.GLO +---> johnson2,johnson3,johnson4,johnson5,johnson6,johnson7,johnson8,johnson9 +---> johnson10,johnson11,johnson12,johnson13,johnson14,johnson15,johnson16 +GLO> PLYRHD.GLO +---> divac0,divac1 +GLO> XXXHD.GLO +---> divac2,divac3,divac4,divac5,divac6,divac7,divac8,divac9,divac10 +---> divac11,divac12,divac13,divac14,divac15,divac16 +HDS6.IMG +GLO> PLYRHD.GLO +---> kemp0,kemp1 +GLO> XXXHD.GLO +---> kemp2,kemp3,kemp4,kemp5,kemp6,kemp7,kemp8,kemp9 +---> kemp10,kemp11,kemp12,kemp13,kemp14,kemp15,kemp16 +GLO> PLYRHD.GLO +---> pippin0,pippin1 +GLO> XXXHD.GLO +---> pippin2,pippin3,pippin4,pippin5,pippin6,pippin7,pippin8,pippin9 +---> pippin10,pippin11,pippin12,pippin13,pippin14,pippin15,pippin16 +GLO> PLYRHD.GLO +---> gill0,gill1 +GLO> XXXHD.GLO +---> gill2,gill3,gill4,gill5,gill6,gill7,gill8,gill9,gill10,gill11,gill12 +---> gill13,gill14,gill15,gill16 +GLO> PLYRHD.GLO +---> mullin0,mullin1 +GLO> XXXHD.GLO +---> mullin2,mullin3,mullin4,mullin5,mullin6,mullin7,mullin8,mullin9 +---> mullin10,mullin11,mullin12,mullin13,mullin14,mullin15,mullin16 +ASM> PLYRHD2.TBL +HDS7.IMG +GLO> PLYRHD.GLO +---> BEdwrd0,BEdwrd1 +GLO> XXXHD.GLO +---> BEdwrd2,BEdwrd3,BEdwrd4,BEdwrd5 +---> BEdwrd6,BEdwrd7,BEdwrd8,BEdwrd9,BEdwrd10,BEdwrd11,BEdwrd12,BEdwrd13 +---> BEdwrd14,BEdwrd15,BEdwrd16 +GLO> PLYRHD.GLO +---> gug0,gug1 +GLO> XXXHD.GLO +---> gug2,gug3,gug4,gug5,gug6,gug7,gug8,gug9,gug10 +---> gug11,gug12,gug13,gug14,gug15,gug16 +;GLO> IMGTBL4.GLO +;ASM> plyrhd4.tbl +;ourhds2.img +;---> SAL1,SAL2,SAL3,SAL4,SAL5 +;---> SAL6,SAL7,SAL8,SAL9,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +;ourhds3.img +;---> RAIDEN01,RAIDEN02,RAIDEN03,RAIDEN04,RAIDEN05,RAIDEN06 +;---> RAIDEN07,RAIDEN08,RAIDEN09,RAIDEN10,RAIDEN11,RAIDEN12,RAIDEN13,RAIDEN14 +;---> RAIDEN15,RAIDEN16 +;raiden.img +;---> ballite1,ballite2,ballite3,ballite4,ballite5,ballite6,ballite7,lighten1 +;---> lighten2,lighten3,lighten4,lighten5,lighten6,lighten7 +PPP> 0 + + diff --git a/IMG/BB2.LOD b/IMG/BB2.LOD new file mode 100644 index 0000000..7f1fd13 --- /dev/null +++ b/IMG/BB2.LOD @@ -0,0 +1,93 @@ +***> 3eda390,1 +; +POF> +COF> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W +; +ASM> CROWD.TBL +; +nbacrowd.img +;---> COACH02,COACH03,COACH04,COACH05,COACH06 +;---> BNCHPL02,BNCHPL03 +;,BNCHPL04,BNCHPL05,BNCHPL06,BNCHPL07 +---> CR4THD02,CR4THD03,CR4THD04,CR4THD05 +;,CR4THD06,CR4THD07 +; +ASM> PLAQUES.TBL +; +tvtext.img +---> BST_DEFred,BST_STKred,BST_RNKred,BST_OFFred +; +PON> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRSEQ.TBL +GLO> PLYRSEQ.GLO +; +nba_pas1.img +---> w1cp1,w1cp2,w1cp3,w1cp4 +---> w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 +---> w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 +---> w5cp5,w5cp6 +---> w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 +---> w1ohp9,w1ohp10,w1ohp11 +---> w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 +---> w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 +---> w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 +---> w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11 +---> w5ohp1,w5ohp2,w5ohp3,w5ohp4 +---> w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 +; +nba_msc2.img +---> w1push1,w1push2,w1push3 +---> w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 +---> w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 +---> w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 +---> w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 +---> w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 +---> w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 +---> w5push10,w5push11 +; +nba_def1.img +---> T1SWPE1,T1SWPE2,T1SWPE3,T1SWPE4 +---> T1SWPE5 +---> T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T1SWPE10 +---> T1SWPE11,T1SWPE12,T2SWPE1,T2SWPE2 +---> T2SWPE3 +---> T2SWPE4,T2SWPE5 +---> T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T2SWPE10,T2SWPE11,T2SWPE12,T3SWPE1 +---> T3SWPE2,T3SWPE3,T3SWPE4 +---> T3SWPE5 +---> T3SWPE6,T3SWPE7,T3SWPE8 +---> T3SWPE9,T3SWPE10,T3SWPE11,T3SWPE12,T4SWPE1,T4SWPE2,T4SWPE3,T4SWPE4 +---> T4SWPE6 +---> T4SWPE5,T4SWPE7,T4SWPE8,T4SWPE9,T4SWPE10,T4SWPE11 +---> T4SWPE12,T5SWPE1,T5SWPE2,T5SWPE3,T5SWPE4,T5SWPE6 +---> T5SWPE5 +---> T5SWPE7,T5SWPE8,T5SWPE9,T5SWPE10,T5SWPE11,T5SWPE12 +; +nba_def3.img +---> w1reb5,w1reb7,w1reb8,w1reb9,w1reb10 +---> w2reb1,w2reb2,w2reb3,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 +;---> w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 +---> w4reb4,w4reb5,w4reb7,w4reb8,w4reb9,w4reb10 +---> w5reb5,w5reb7,w5reb8,w5reb9 +---> w1blokl1,w1blokl2,w1blokl3,w1blokl4 +---> w2blokl1,w2blokl2,w2blokl3,w2blokl4 +---> w3blokl1,w3blokl2,w3blokl3,w3blokl4 +---> w4blokl1,w4blokl2,w4blokl3,w4blokl4 +---> w5blokl1,w5blokl2,w5blokl3,w5blokl4 +; +nba_def4.img +---> w1rej1,w1rej2,w1rej3 +---> w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 +---> w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11 +;,w3rej1 +;---> w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 +---> w4rej1,w4rej2,w4rej3,w4rej4,w4rej5 +---> w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 +---> w4rej11 diff --git a/IMG/BB3.LOD b/IMG/BB3.LOD new file mode 100644 index 0000000..8b177b0 --- /dev/null +++ b/IMG/BB3.LOD @@ -0,0 +1,35 @@ +***> 5c3ec30,2 +; +COF> +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> BEHIND.TBL +; +nba_pas2.img +---> T1HINDR6,T1HINDR7,T1HINDR8,T1HINDR9,T1HINDR10 +---> T2HINDR6,T2HINDR7,T2HINDR8,T2HINDR9,T2HINDR10 +---> T3HINDR6,T3HINDR7,T3HINDR8,T3HINDR9,T3HINDR10 +---> T4HINDR6,T4HINDR7,T4HINDR8,T4HINDR9,T4HINDR10 +;---> T5HINDR6,T5HINDR7,T5HINDR8,T5HINDR9,T5HINDR10 +---> T2HINDL6,T2HINDL7,T2HINDL8,T2HINDL9,T2HINDL10 +---> T3HINDL6,T3HINDL7,T3HINDL8,T3HINDL9,T3HINDL10 +---> T4HINDL6,T4HINDL7,T4HINDL8,T4HINDL9,T4HINDL10 +; +ASM> PASS.TBL +; +---> W1NLPR1,W1NLPR2,W1NLPR3,W1NLPR4 +---> W2NLPR1,W2NLPR2,W2NLPR3,W2NLPR4 +---> W3NLPR1,W3NLPR2,W3NLPR3,W3NLPR4 +---> W4NLPR1,W4NLPR2,W4NLPR3,W4NLPR4 +---> W5NLPR1,W5NLPR2,W5NLPR3,W5NLPR4 +; +nba_pas3.img +---> W1ALPAS1,W1ALPAS2,W1ALPAS3,W1ALPAS4 +---> W2ALPAS1,W2ALPAS2,W2ALPAS3,W2ALPAS4 +---> W3ALPAS1,W3ALPAS2,W3ALPAS3,W3ALPAS4 +---> W4ALPAS1,W4ALPAS2,W4ALPAS3,W4ALPAS4 +---> W5ALPAS1,W5ALPAS2,W5ALPAS3,W5ALPAS4 diff --git a/IMG/BB4.LOD b/IMG/BB4.LOD new file mode 100644 index 0000000..269b55f --- /dev/null +++ b/IMG/BB4.LOD @@ -0,0 +1,48 @@ +***> 52e6c90,2 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> FLAIL.TBL +GLO> FLAIL.GLO +; +nba_msc1.img +;---> w1cow1,w1cow2,w1cow3 +;---> w1cow4,w1cow5,w1cow6,w1cow7,w2cow1,w2cow2,w2cow3,w2cow4,w2cow5,w2cow6 +;---> w2cow7,w3cow1,w3cow2,w3cow3,w3cow4,w3cow5,w3cow6,w3cow7,w4cow1,w4cow2 +;---> w4cow3,w4cow4,w4cow5,w4cow6,w4cow7,w5cow1,w5cow2,w5cow3,w5cow4,w5cow5 +;---> w5cow6,w5cow7 +---> w1flai1,w1flai2,w1flai3,w1flai4,w1flai5,w1flai6,w1flai7,w1flai8 +---> w2flai1,w2flai2,w2flai3,w2flai4 +---> w2flai5,w2flai6,w2flai7,w2flai8,w2flai9,w2flai11 +---> w3flai1,w3flai2,w3flai3,w3flai4,w3flai5,w3flai6,w3flai7 +---> w3flai8,w3flai9 +---> w4flai1,w4flai2,w4flai3,w4flai4,w4flai5,w4flai6 +---> w4flai7,w4flai8 +---> w5flai2,w5flai3,w5flai4,w5flai5,w5flai6 +---> w5flai7,w5flai8,w5flai10,w5flai11 +; +nba_msc4.img +---> w1fall1,w1fall2 +---> w1fall3,w1fall4,w1fall5,w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 +---> w1fall11,w1fall12,w1fall13,w1fall14,w1fall15,w1fall16,w1fall17,w1fall18 +---> w1fall19,w1fall20,w1fall21,w1fall22,w1fall23 +---> w2fall1,w2fall2 +---> w2fall3,w2fall4,w2fall5,w2fall6,w2fall7,w2fall8,w2fall9,w2fall10 +---> w2fall11,w2fall12,w2fall13,w2fall14,w2fall15,w2fall16,w2fall17,w2fall18 +---> w2fall19,w2fall20,w2fall21 +---> w3fall1,w3fall2,w3fall3,w3fall4 +---> w3fall5,w3fall6,w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 +---> w3fall13,w3fall14,w3fall15,w3fall16,w3fall17,w3fall18,w3fall19,w3fall20 +---> w3fall21,w3fall22,w3fall23,w3fall24 +---> w4fall1,w4fall2,w4fall3 +---> w4fall4,w4fall5,w4fall6,w4fall7,w4fall8,w4fall9,w4fall10,w4fall11 +---> w4fall12,w4fall13,w4fall14,w4fall15,w4fall16,w4fall17,w4fall18,w4fall19 +---> w4fall20,w4fall21,w4fall22 +---> w5fall1,w5fall2,w5fall3,w5fall4 +---> w5fall5,w5fall6,w5fall7,w5fall8,w5fall9,w5fall10,w5fall11,w5fall12 +---> w5fall13,w5fall14,w5fall15,w5fall16,w5fall17,w5fall18,w5fall19,w5fall20 +---> w5fall21,w5fall22 diff --git a/IMG/BB5.LOD b/IMG/BB5.LOD new file mode 100644 index 0000000..d557111 --- /dev/null +++ b/IMG/BB5.LOD @@ -0,0 +1,187 @@ +***> 36ad630,0 +; +PON> +CON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRDSP.TBL +; +nba_sht2.img +---> T3DESPA1,T3DESPA2,T3DESPA3,T3DESPA4,T3DESPA5,T3DESPA6 +---> T3DESPA7 +---> T3DESPB1,T3DESPB2,T3DESPB3,T3DESPB4,T3DESPB5 +---> T3DESPB6,T3DESPB7,T3DESPB8 +---> T4DESPA1,T4DESPA2,T4DESPA3,T4DESPA4,T4DESPA5,T4DESPA6 +---> T4DESPA7,T4DESPA8 +; +ASM> PLYRDSEQ.TBL +GLO> DUNKS.GLO +; +nba_dnk1.img +---> M3SPRLA1,M3SPRLA2,M3SPRLA3,M3SPRLA4,M3SPRLA5 +---> M3SPRLA6,M3SPRLA7,M3SPRLA8,M3SPRLA9,M3SPRLA10 +---> W3SETLA1,W3SETLA2,W3SETLA3,W3SETLA4 +---> W3SETLA5,W3SETLA6,W3SETLA7,W3SETLA8,W3SETLA9 +---> S1SETLA1,S1SETLA2,S1SETLA3,S1SETLA4,S1SETLA5 +---> S1SETLA6,S1SETLA7,S1SETLA8,S1SETLA9 +---> S2HBHLA1,S2HBHLA2,S2HBHLA3,S2HBHLA4 +---> S2HBHLA5,S2HBHLA6,S2HBHLA7,S2HBHLA8,S2HBHLA9 +---> S3HBHLA1,S3HBHLA2,S3HBHLA3,S3HBHLA4 +---> S3HBHLA6,S3HBHLA7,S3HBHLA8,S3HBHLA9 +---> S3BEHLA1,S3BEHLA2,S3BEHLA3,S3BEHLA4 +---> S3BEHLA5,S3BEHLA6,S3BEHLA7,S3BEHLA8,S3BEHLA9 +---> S3BETLA2,S3BETLA3,S3BETLA4,S3BETLA5 +---> S3BETLA6,S3BETLA7,S3BETLA8,S3BETLA9,S3BETLA10 +---> S4SETLA1,S4SETLA2,S4SETLA3,S4SETLA4,S4SETLA5 +---> S4SETLA6,S4SETLA7,S4SETLA8,S4SETLA9 +---> S5SETLA1,S5SETLA2,S5SETLA3,S5SETLA4,S5SETLA5 +---> S5SETLA6,S5SETLA7,S5SETLA8,S5SETLA9,S5SETLA10 +---> W3SPLY1,W3SPLY2,W3SPLY3,W3SPLY4,W3SPLY5,W3SPLY6,W3SPLY7,W3SPLY8 +---> W3SPLY9,W3SPLY10,W3SPLY11,W3SPLY12,W3SPLY13,W3SPLY14,W3SPLY15,W3SPLY16 +---> W3SPLY17,W3SPLY18,W3SPLY19,W3SPLY20 +; +nba_dnk2.img +---> M1SPDU1,M1SPDU2,M1SPDU3 +---> M1SPDU4,M1SPDU5,M1SPDU6,M1SPDU7,M1SPDU8,M1SPDU9,M1SPDU10,M1SPDU11 +---> M1SPDU12,M1SPDU13,M1SPDU14,M1SPDU15,M1SPDU16,M1SPDU17,M1SPDU18,M1SPDU19 +---> M1SPDU20,M2DKDU1,M2DKDU2,M2DKDU3,M2DKDU4,M2DKDU5,M2DKDU6,M2DKDU7 +---> M2DKDU8,M2DKDU9,M2DKDU10,M2DKDU11,M2DKDU12,M2DKDU13,M2DKDU14,M2DKDU15 +---> M2DKDU16,M3TUKDU1,M3TUKDU2,M3TUKDU3,M3TUKDU4,M3TUKDU5,M3TUKDU6 +---> M3TUKDU7,M3TUKDU8,M3TUKDU9,M3TUKDU10,M3TUKDU11,M3TUKDU12,M3TUKDU13 +---> M3TUKDU14,M3TUKDU15,M3TUKDU16,M3TUKDU17,M3SPRDU1,M3SPRDU2,M3SPRDU3 +---> M3SPRDU4,M3SPRDU5,M3SPRDU6,M3SPRDU7,M3SPRDU8,M3SPRDU9,M3SPRDU10 +---> M3SPRDU11,M5REVDU1,M5REVDU2,M5REVDU3,M5REVDU4,M5REVDU5,M5REVDU6 +---> M5REVDU7,M5REVDU8,M5REVDU9,M5REVDU10,M5REVDU11,M5REVDU12,M5REVDU13 +---> M5REVDU14,M5REVDU15,M5REVDU16,S1TUKDU1,S1TUKDU2,S1TUKDU3,S1TUKDU4 +---> S1TUKDU5,S1TUKDU6,S1TUKDU7,S1TUKDU8,S1TUKDU9,S1TUKDU10,S1TUKDU11 +---> S3SORDU1,S3SORDU2,S3SORDU3,S3SORDU4,S3SORDU5,S3SORDU6,S3SORDU7,S3SORDU8 +---> S3BKDU1,S3BKDU2,S3BKDU3,S3BKDU4,S3BKDU5,S3BKDU6,S3BKDU7,S3BKDU8,S3BKDU9 +---> S3BKDU10,S3BKDU11,S3BKDU12,S3BKDU14,S3BKDU15,S3BKDU16,W3SPRDU1 +---> W3SPRDU2,W3SPRDU3,W3SPRDU4,W3SPRDU5,W3SPRDU6,W3SPRDU7,W3SPRDU8,W3SPRDU9 +---> W3SPRDU10,W3SPRDU11,W3SPRDU12,W3SPRDU13,W3SPRDU14 +;---> W3SWDU1,W3SWDU2,W3SWDU3,W3SWDU4,W3SWDU5,W3SWDU6,W3SWDU7,W3SWDU8,W3SWDU9 +---> W3SWDU10,W3SWDU11,W3SWDU12,W3FLDU1,W3FLDU2,W3FLDU3,W3FLDU4,W3FLDU5 +---> W3FLDU6,W3FLDU7,W3FLDU8,W3FLDU9,W3FLDU10,W3FLDU11,W3FLDU12,W3FLDU13 +---> W3CRZDU1,W3CRZDU2,W3CRZDU3,W3CRZDU4,W3CRZDU5,W3CRZDU6,W3CRZDU7,W3CRZDU8 +---> W3CRZDU9,W3CRZDU10,W3CRZDU11,W3CRZDU12,W3CRZDU13,W3CRZDU14,W3CRZDU15 +---> W3CRZDU16,W3CRZDU17,W3CRZDU18,W3CRZDU19,W3CRZDU20 +---> W3SPNDU1,W3SPNDU2,W3SPNDU3,W3SPNDU4,W3SPNDU5 +---> W3SPNDU6,W3SPNDU7,W3SPNDU8,W3SPNDU9,W3SPNDU10,W3SPNDU11,W3SPNDU12 +---> W3SPNDU13,W3SPNDU14,W3SPNDU15,W3SPNDU16,W3SPNDU17,W3SPNDU18,W3SPNDU19 +---> W3SPNDU20,W3SPNDU21 +---> W3SMDU6,W3SMDU7,W3SMDU8,W3SMDU9 +; +nbafades.img +---> W2FADIN4,W2FADIN5,W2FADIN6 +---> W2FADIN7,W2FADIN8,W2FADIN9,W2FADIN10,W2FADIN11,W2FADIN12,W2FADIN13 +---> W3FADIN5,W3FADIN6 +---> W3FADIN7,W3FADIN8,W3FADIN9,W3FADIN10,W3FADIN11,W3FADIN12,W3FADIN13 +---> W4FADIN2,W4FADIN3,W4FADIN4,W4FADIN5 +---> W4FADIN8,W4FADIN9,W4FADIN10,W4FADIN11,W4FADIN12,W4FADIN13 +---> W2FADAW3,W2FADAW4,W2FADAW5,W2FADAW6 +---> W2FADAW7,W2FADAW8,W2FADAW9,W2FADAW10,W2FADAW11,W2FADAW12,W2FADAW13 +---> W3FADAW3,W3FADAW4,W3FADAW5,W3FADAW6 +---> W3FADAW7,W3FADAW8,W3FADAW9,W3FADAW10,W3FADAW11,W3FADAW12,W3FADAW13 +---> W4FADAW3,W4FADAW4,W4FADAW5,W4FADAW6 +---> W4FADAW7,W4FADAW8,W4FADAW9,W4FADAW10,W4FADAW11,W4FADAW12,W4FADAW13 +; +nba_sht2.img +---> w1hks1,w1hks2,w1hks3 +---> w1hks4,w1hks5,w1hks6,w1hks7,w1hks8,w1hks9,w1hks10 +---> w3hks1,w3hks2,w3hks3 +---> w3hks4,w3hks5,w3hks6,w3hks7,w3hks8,w3hks9,w3hks10,w4hks1,w4hks2,w4hks3 +---> w4hks4,w4hks5,w4hks6,w4hks7,w4hks8,w4hks9,w4hks10,w5hks1,w5hks2,w5hks3 +---> w5hks4,w5hks5,w5hks6,w5hks7,w5hks8,w5hks9,w5hks10 +; +nbafhook.img +---> w3fhks1,w3fhks2,w3fhks3,w3fhks4,w3fhks5,w3fhks6,w3fhks7,w3fhks8,w3fhks9 +; +ASM> STAND.TBL +; +nba_msc3.img +---> w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 +---> w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 +---> w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 +; +nba_stn1.img +---> W1ST1 +---> W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 +---> W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 +---> W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 +---> w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 +---> w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 +---> w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 +; +ASM> PLYRSEQ2.TBL +; +nba_msc2.img +---> w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 +---> w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 +---> w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 +---> w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 +---> w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +; +nba_msc3.img +---> w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 +---> w4hndne1,w4hndne2,w4hndne3,w4hndne4 +---> w4hndne5 +---> w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 +---> w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 +---> w2hndhp1 +---> w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 +---> w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 +---> w1pikup1,w1pikup2 +---> w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 +---> w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 +---> w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +; +nbaspnmv.img +---> W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 +---> W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 +---> W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 +; +ASM> PLYRSEQ3.TBL +GLO> PLYRSEQ3.GLO +; +nba_stn1.img +---> w1dst1,w1dst2,w1dst3,w1dst4,w1dst5,w1dst6,w1dst7,w1dst8,w1dst9,w1dst10 +---> w2dst1,w2dst2,w2dst3,w2dst4,w2dst5,w2dst6,w2dst7,w2dst8,w2dst9,w2dst10 +---> w3dst1,w3dst2,w3dst3,w3dst4,w3dst5,w3dst6,w3dst7,w3dst8,w3dst9,w3dst10 +---> w4dst1,w4dst2,w4dst3,w4dst4,w4dst5,w4dst6,w4dst7,w4dst8,w4dst9,w4dst10 +---> w5dst1,w5dst2,w5dst3,w5dst4,w5dst5,w5dst6,w5dst7,w5dst8,w5dst9,w5dst10 +---> w1drcr1,w1drcr2,w1drcr3,w1drcr4,w1drcr5,w1drcr6,w1drcr7,w1drcr8,w1drcr9 +---> w1drcr10,w1drcr11,w1drcr12,w2drcr1,w2drcr2,w2drcr3,w2drcr4,w2drcr5 +---> w2drcr6,w2drcr7,w2drcr8,w2drcr9,w2drcr10,w2drcr11,w2drcr12,w3drcr1 +---> w3drcr2,w3drcr3,w3drcr4,w3drcr5,w3drcr6,w3drcr7,w3drcr8,w3drcr9 +---> w3drcr10,w3drcr11,w3drcr12,w4drcr1,w4drcr2,w4drcr3,w4drcr4,w4drcr5 +---> w4drcr6,w4drcr7,w4drcr8,w4drcr9,w4drcr10,w4drcr11,w4drcr12,w5drcr1 +---> w5drcr2,w5drcr3,w5drcr4,w5drcr5,w5drcr6,w5drcr7,w5drcr8,w5drcr9 +---> w5drcr10,w5drcr11,w5drcr12,w1stand1,w1stand2,w1stand3,w1stand4,w2stand1 +---> w2stand2,w2stand3,w2stand4,w3stand1,w3stand2,w3stand3,w3stand4,w4stand1 +---> w4stand2,w4stand3,w4stand4,w5stand1,w5stand2,w5stand3,w5stand4 +; +ASM> PLYRJSHT.TBL +; +nba_sht1.img +---> w1js1,w1js2,w1js3,w1js4 +---> w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 +---> w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 +---> w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 +---> w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 +---> w5js9,w5js10 +; +nba_sht3.img +---> W1UNDR1,W1UNDR2,W1UNDR3,W1UNDR4,W1UNDR5 +---> W1UNDR6,W1UNDR7,W1UNDR8,W1UNDR9 +---> W5UNDR1,W5UNDR2,W5UNDR3,W5UNDR4,W5UNDR5 +---> W5UNDR6,W5UNDR7,W5UNDR8,W5UNDR9,W5UNDR10,W5UNDR11 +; +ASM> PLYRMAKE.TBL +; +nba_mak1.img +;W5BGDR2 is an unused img +---> W5BGDR1,W5BGDR2,W5BGDR3,W5BGDR4,W5BGDR5,W5BGDR6,W5BGDR7,W5BGDR8,W5BGDR9 +---> W5BGDR10 + diff --git a/IMG/BB6.LOD b/IMG/BB6.LOD new file mode 100644 index 0000000..08c2e14 --- /dev/null +++ b/IMG/BB6.LOD @@ -0,0 +1,224 @@ +***> 4000000,2 +; +PON> +CON> +XOF> +; +ASM> names2.tbl +GLO> names2.glo +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +pnames2.img +---> SCOTT,ROBERTSON,CHAPMAN,WEBB,LANG,RUFFIN,MARCI2,WEATHSPN +---> AMRICH,ANZALONE,BENSON,BUTATA,FUNK,HAEGERJR,JIGGETTS +---> KELLER,LAWMAN,LEE,MDOC,MIKE,MUNDAY,NORTH,PERRY,RIVETT,SEAN,ZIRIN +---> HBETT,MBETT +pnames.img +---> GUGLI2,MCKEE2,ELLIOT2,TURMELL,CARLTON,HEY +---> FITZ,AIRMOR,BARDO,HEDRICK,MINIFE,MARTIN,PESINA,THOMPS,GEER,JAPPLE +---> FERRIER,VINIK,EHRLICH,LIPTAK,ROOT,MEDNICK,ROAN,OURSLER,QUINN,TOBIAS,BOON +PLYRNAME.img +---> ATLNAUG,ATLNBLA,ATLNSMI,ATLNLAE,ATLNNOR,BOSNBRO,BOSNBAR +;,ATLNROO,ATLNHEN +---> BOSNMON,BOSNRAD,BOSNFOX,CHANAND,CHANJOH,CHANRIC,CHANZID,CHANCUR,CHINPIP +---> CHINROD,CHINKUK,CHINLON,CHINKER,CLENHIL,CLENMIL,CLENPHI,CLENBRA,CLENFER +---> DALNJAC,DALNKID,DALNMAS,DALNJON,DALNMcC,DENNRAU,DENNMUT,DENNMcD,DENNROS +---> DENNELL,DETNDUM,DETNHIL,DETNMIL,DETNTHO,DETNHOU,GOLNWIL,GOLNSPR,GOLNSEI +---> GOLNSMI,GOLNMUL,HOUNOLA,HOUNDRE,HOUNHOR,HOUNCAS,HOUNSMI,INDNMIL +;,GOLNCOL +---> INDNDAV,INDNSMI,INDNMcK,INDNJAC,LACNVAU,LACNROG,LACNMUR,LACNRIC,LACNBAR +---> LALNEXE,LALNDIV,LALNCEB,LALNCAM,LALNJON,MIANMOU,MIANWIL,MIANCHA +;,LALNJOH +---> MIANHAR,MIANDAN,MILNBAK,MILNROB,MILNRES,MILNBEN,MILNDOU,MINNRID,MINNLAN +---> MINNWEB,MINNGUG,MINNGAR,NWJNGIL,NWJNBRA,NWJNGIL,NWJNOBA,NWJNEDW,NWYNEWI +---> NWYNMAS,NWYNHAR,NWYNOAK,NWYNSTA,ORLNHAR,ORLNGRA,ORLNAND,ORLNSCO +;,NWYNAND,ORLNGAT +---> ORLNKON,PHINSTA,PHINCOL,PHINWEA,PHINRUF,PHINMAX,PHONJOH,PHONTIS +---> PHONMAN,PHONPER,PHONFIN,PORNSTR,PORNROB,PORNSAB,PORNWIL,PORNCHI,SACNOWE +---> SACNRIT,SACNGRA,SACNMAR,SACNEDN,SANNELL,SANNROB,SANNJOH,SANNPER,SANNNEG +---> SEANKEM,SEANPAY,SEANSCH,SEANHAW,SEANFOR,TORNROG,TORNSTO,TORNROB,TORNMIL +---> TORNMUR,UTANSTO,UTANMAL,UTANHOR,UTANBEN,UTANMOR,VANNANT,VANNEDW,VANNSCO +---> VANNREE,VANNMUR,WASNHOW,WASNWEB,WASNCHE,WASNPAC,WASNMUR +infowin.img +---> GAINED_TXT,IDIOTS_TXT +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> plyrdsq2.tbl +GLO> dunks2.glo +; +nba_dnk2.img +---> W3PLDDU5,W3PLDDU6,W3PLDDU7,W3PLDDU8,W3PLDDU9 +---> W3PLDDU10,W3PLDDU11,W3PLDDU12,W3PLDDU13,W3PLDDU14,W3PLDDU15 +---> W3SMDU1,W3SMDU2,W3SMDU3,W3SMDU4,W3SMDU5 +; +nba_dnk3.img +---> W2THPW1,W2THPW2,W2THPW3 +---> W2THPW4,W2THPW5,W2THPW6,W2THPW7,W2THPW8,W2THPW9,W2THPW10,W2THPW11 +---> W2THPW12,W4THPW1,W4THPW2,W4THPW3,W4THPW4,W4THPW5,W4THPW6 +---> W4THPW7,W4THPW8,W4THPW9,W4THPW10,W4THPW11,W4THPW12,W4THPW13,M5OHPB1 +---> M5OHPB2,M5OHPB3,M5OHPB4,M5OHPB5,M5OHPB6,M5OHPB7,M5OHPB8,M5OHPB9 +---> M5OHPB10,M5OHPB11,M5OHPB12 +---> W3SDTUK1,W3SDTUK2,W3SDTUK3,W3SDTUK4,W3SDTUK5,W3SDTUK6,W3SDTUK7 +---> W3SDTUK8,W3SDTUK9,W3SDTUK10,W3SDTUK11 +---> W3SDTUK12,W3SDTUK13,W3SDTUK14,W3SDTUK15 +---> W3ARMSP1,W3ARMSP3,W3ARMSP4,W3ARMSP5,W3ARMSP6 +---> W3ARMSP7,W3ARMSP8,W3ARMSP9,W3ARMSP10,W3ARMSP11,W3ARMSP12,W3ARMSP13 +---> W3ARMSP14,W3ARMSP15,W3ARMSP16,W3ARMSP17 +---> W4SDSLM1,W4SDSLM3,W4SDSLM4,W4SDSLM6,W4SDSLM7,W4SDSLM8 +---> W4SDSLM9,W4SDSLM10,W4SDSLM12,W4SDSLM13,W4SDSLM14 +---> W4SDSLM15,W4SDSLM16,W4SDSLM17,W4SDSLM18 +; +nba_dnk4.img +;---> S3OASD01,S3OASD02,S3OASD03 +;---> S3OASD04,S3OASD05,S3OASD06,S3OASD07,S3OASD08,S3OASD09,S3OASD10,S3OASD11 +;---> S3OASD12,S3OASD13,S3OASD14,S3OASD15,S3OASD16,S3OASD17,S3OASD18 +---> W3OHSD01,W3OHSD02,W3OHSD03,W3OHSD04,W3OHSD05,W3OHSD06,W3OHSD07,W3OHSD08 +---> W3OHSD09,W3OHSD10,W3OHSD11,W3OHSD12,W3OHSD13,W3OHSD14,W3OHSD15,W3OHSD16 +---> W3OHSD17,W3OHSD18,W3OHSD19,W3OHSD20,W3OHSD21,W3OHSD22,W3OHSD23,W3OHSD24 +---> W3OHSD25,W3OHSD26,W3SPLD01,W3SPLD02,W3SPLD03,W3SPLD04,W3SPLD05,W3SPLD06 +---> W3SPLD07,W3SPLD08,W3SPLD09,W3SPLD10,W3SPLD11,W3SPLD12,W3SPLD13,W3SPLD14 +---> W3SPLD15,W3SPLD16,W3SPLD17,W3SPLD18,W3SPLD19,W3SPLD20 +nba_dnk5.img +;---> W8ALY101,W8ALY102,W8ALY103 +;---> W8ALY104,W8ALY105,W8ALY106,W8ALY107,W8ALY108,W8ALY109,W8ALY110,W8ALY111 +;---> W8ALY112,W8ALY113,W8ALY114,W8ALY115 +;---> W8ALY501,W8ALY502,W8ALY503,W8ALY504 +;---> W8ALY505,W8ALY506,W8ALY507,W8ALY508,W8ALY509,W8ALY510,W8ALY511,W8ALY512 +---> W8OHP201,W8OHP202,W8OHP203,W8OHP204,W8OHP205,W8OHP206,W8OHP207,W8OHP208 +---> W8OHP209,W8OHP210,W8OHP211,W8OHP212,W8OHP213,W8OHP214,W8OHP215 +;---> W8OHP401 +;---> W8OHP402,W8OHP403,W8OHP404,W8OHP405,W8OHP406,W8OHP407,W8OHP408,W8OHP409 +;---> W8OHP410,W8OHP411,W8OHP412 +---> W8UND101,W8UND102,W8UND103,W8UND104,W8UND105 +---> W8UND106,W8UND107,W8UND108,W8UND109,W8UND110,W8UND111,W8UND112,W8UND113 +---> W8UND114,W8UND115,W8UND116,W8UND117,W8UND118,W8UND119,W8UND120 +; +nba_dnk6.img +;---> M8FLY201,M8FLY202,M8FLY203 +;---> M8FLY204,M8FLY205,M8FLY206,M8FLY207,M8FLY208,M8FLY209,M8FLY210,M8FLY211 +;---> M8FLY212 +;---> M8OASD01,M8OASD02,M8OASD03,M8OASD04,M8OASD05,M8OASD06 +;---> M8OASD07,M8OASD08,M8OASD09,M8OASD10,M8OASD11,M8OASD12,M8OASD13,M8OASD14 +;---> M8OASD15,M8OASD16 +;---> M8OHM201,M8OHM202,M8OHM203,M8OHM204 +;---> M8OHM205,M8OHM206,M8OHM207,M8OHM208,M8OHM209,M8OHM210,M8OHM211,M8OHM212 +;---> M8OHM213,M8OHM214,M8OHM215,M8OHM216,M8OHM217,M8OHM218 +---> M8OHM301,M8OHM302 +---> M8OHM303,M8OHM304,M8OHM305,M8OHM306,M8OHM307,M8OHM308,M8OHM309,M8OHM310 +---> M8OHM311,M8OHM312,M8OHM313,M8OHM314,M8OHM315,M8OHM316,M8OHM317,M8OHM318 +---> M8OHM319 +;---> M8OHM501,M8OHM502,M8OHM503,M8OHM504,M8OHM505,M8OHM506,M8OHM507 +;---> M8OHM508,M8OHM509,M8OHM510,M8OHM511,M8OHM512,M8OHM513,M8OHM514,M8OHM515 +;---> M8OHM516,M8OHM517,M8OHM518 +---> S8ALY201,S8ALY202 +---> S8ALY203,S8ALY204,S8ALY205,S8ALY206,S8ALY207,S8ALY208,S8ALY209,S8ALY210 +---> S8ALY211,S8ALY212,S8ALY213,S8ALY214,S8ALY401,S8ALY402,S8ALY403,S8ALY404 +---> S8ALY405,S8ALY406,S8ALY407,S8ALY408,S8ALY409,S8ALY410,S8ALY411,S8ALY412 +---> S8ALY413,S8ALY414 +nba_dnk7.img +;---> M8REVD01,M8REVD02,M8REVD03 +;---> M8REVD04,M8REVD05,M8REVD06,M8REVD07,M8REVD08,M8REVD09,M8REVD10,M8REVD11 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15,M8REVD16,M8REVD17,M8REVD18,M8REVD19 +;---> M8REVD20,M8REVD21,W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +;---> M8REVD12,M8REVD13,M8REVD14,M8REVD15 +---> W8CLSD01,W8CLSD02,W8CLSD03,W8CLSD04,W8CLSD05,W8CLSD06 +---> W8CLSD07,W8CLSD08,W8CLSD09,W8CLSD10,W8CLSD11,W8CLSD12 +;,W8CLSD13,W8CLSD14 +---> W8FL2D01,W8FL2D02,W8FL2D03,W8FL2D04,W8FL2D05,W8FL2D06,W8FL2D07,W8FL2D08 +---> W8FL2D09,W8FL2D10,W8FL2D11,W8FL2D12,W8FL2D13,W8FL2D14,W8FL2D15,W8FL2D16 +---> W8FL2D17 +---> W8FL3D01,W8FL3D02,W8FL3D03,W8FL3D04,W8FL3D05,W8FL3D06,W8FL3D07 +---> W8FL3D08,W8FL3D09,W8FL3D10,W8FL3D11,W8FL3D12,W8FL3D13,W8FL3D14,W8FL3D15 +nba_dnk8.img +---> W3CANN02 +---> W3CANN04,W3CANN06,W3CANN08 +---> W3CANN10,W3CANN12,W3CANN14,W3CANN16 +---> W3CANN18,W3CANN20,W3CANN22,W3CANN24 +---> W3CANN26,W3CANN28,W3CANN30,W3CANN32 +---> S8HLSP01,S8HLSP02,S8HLSP03,S8HLSP04,S8HLSP05,S8HLSP06,S8HLSP07 +---> S8HLSP08,S8HLSP09,S8HLSP10,S8HLSP11,S8HLSP12,S8HLSP13,S8HLSP14,S8HLSP15 +---> S8HLSP16 +; +nba_msc3.img +---> w3stwb3fix +nbajmpps.img +---> w1jupa,w2jupa,w3jupa,w4jupa,w5jupa +nba_pas4.img +;---> W2RN2P01,W2RN2P02,W2RN2P03 +;---> W2RN2P04,W2RN3P01,W2RN3P02,W2RN3P03,W2RN3P04,W2RN4P01,W2RN4P02,W2RN4P03 +;---> W2RN4P04 +; +;#3 run pass! +;---> W3RN1P01,W3RN1P02,W3RN1P03,W3RN1P04,W3RN1P05,W3RN1P06,W3RN2P01 +;---> W3RN2P02,W3RN2P03,W3RN2P04,W3RN3P01,W3RN3P02,W3RN3P03,W3RN3P04,W3RN4P01 +;---> W3RN4P02,W3RN4P03,W3RN4P04,W3RN5P01,W3RN5P02,W3RN5P03,W3RN5P04,W3RN5P05 +;---> W3RN5P06 +; +;,W4RN3P01,W4RN3P02,W4RN3P03,W4RN3P04,W4RN4P01,W4RN4P02,W4RN4P03 +;---> W4RN4P04,W4RN6P01,W4RN6P02,W4RN6P03,W4RN6P04 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> NCKNME.TBL +GLO> JUNKXXXX.GLO +; +stattxt2.img +---> PASSWORD,stx_avgallow,stx_avgscore +---> NN_ACE,NN_BERTHA,NN_BIGDAD +---> NN_BIGFOOT,NN_BOOGY,NN_BUBBA,NN_CHILLY,NN_CORNEL,NN_CUCKOO +---> NN_DINGBAT,NN_FATBOY,NN_FLASH,NN_FRANKIE +---> NN_FRNKCOW,NN_GATOR,NN_GRANDPA,NN_HAMMER,NN_HAWKEYE +---> NN_HOMEBOY,NN_JOKER,NN_LOVER,NN_MADDOG,NN_MARGE +---> NN_MERLIN,NN_PONGO,NN_SHADOW,NN_SLIM +---> NN_SNAKE,NN_SPANKY,NN_SPIDER,NN_SPIKE,NN_TOPGUN,NN_TREXX +---> NN_VIPER,NN_ZIPPY +; +ASM> PRIVLG.TBL +; +privilg2.img +---> TEX_SR,HIDEAT,OVRTME +privilg.img +---> TEX_NTA,TEX_DBH +statstxt.img +---> SENDTO,ENTRIES +; +ASM> CHEER.TBL +ZON> +; +cheer.img +---> CHEERA01,CHEERA02,CHEERA03,CHEERA04,CHEERA05,CHEERA06,CHEERA07,CHEERA08 +---> CHEERA09,CHEERA10,CHEERB01,CHEERB02,CHEERB03,CHEERB04,CHEERB05,CHEERB06 +---> CHEERB07,CHEERB08,CHEERB09 +;Start of game hot spots +hot.img +---> HOTred,HOTblu,HOTgrn,HOTyel +; +ASM> PLYRHD6A.TBL +; +ZOF> +XON> +CON> +PPP> 6 +; +HDS3.IMG +; +GLO> PLYRHD6A.GLO +---> GrantG0,GrantG1 +GLO> XXXHD.GLO +---> GrantG2,GrantG3,GrantG4,GrantG5,GrantG6,GrantG7,GrantG8,GrantG9 +---> GrantG10,GrantG11,GrantG12,GrantG13,GrantG14,GrantG15,GrantG16 +GLO> PLYRHD6A.GLO +---> Horna0,Horna1 +GLO> XXXHD.GLO +---> Horna2,Horna3,Horna4,Horna5,Horna6,Horna7,Horna8,Horna9,Horna10,Horna11 +---> Horna12,Horna13,Horna14,Horna15,Horna16 +GLO> PLYRHD6A.GLO +---> Manning0,Manning1 +GLO> XXXHD.GLO +---> Manning2,Manning3,Manning4,Manning5,Manning6,Manning7,Manning8 +---> Manning9,Manning10,Manning11,Manning12,Manning13,Manning14,Manning15 +---> Manning16 +; +offnba.img +---> OFFNBA diff --git a/IMG/BB7.LOD b/IMG/BB7.LOD new file mode 100644 index 0000000..e83e1ef --- /dev/null +++ b/IMG/BB7.LOD @@ -0,0 +1,533 @@ +***> 2f63930,1 +; +PON> +XOF> +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> ARROW.TBL +GLO> ARROW.GLO +; +arrowsn.img +---> arrown1l,arrown1r,arrown2l,arrown2r,arrown3l,arrown3r,arrown4l,arrown4r +---> arrown1t,arrown2t,arrown3t,arrown4t +---> arrown1l2p,arrown1r2p,arrown2l2p,arrown2r2p +---> arrown1t2p,arrown2t2p +; +fball.img +PPP> 6 +---> nflash1,nflash2,nflash3,nflash3a,nflash4,nflash5,nflash6 +PPP> 0 +; +ASM> MUGSHOT.TBL +GLO> MUGSHOT.GLO +; +PPP> 8 +ZON> +; +mugs1.img +---> AUG_ATL,DIV_LAK,EWG_NEY,HRD_MIA,JON_CHA,KMP_SEA,MIL_IND +---> MLN_UTA,MUT_DEN,OAK_NEY,OLA_HOU,PIP_CHI,RAD_MK2,ROB_SAN,SAL_DIVM +---> SCH_SEA,SMT_HOU,STK_UTA +; +mugs2.img +---> AND_CHA,AND_ORL,BAK_MLW,BEN_UTA,BRO_BOS,CAM_LAK,CHE_WAS,DUM_DET,HAR_ORL +---> HOR_HOU,JAC_DAL,JOH_PHX,KUK_CHI,MAS_DAL,MAS_NEY,PAY_SEA,RIC_SAC,RID_MIN +---> ROB_PRT,SMI_IND,STA_NEY,WEA_PHL +; +mugs3.img +---> ANT_VAN,BAR_BOS,BAR_CLP,BEN_MLW,BLY_ATL,BRA_CLE,BRA_NEJ,CAS_HOU +---> CEB_LAK,CHI_PRT,COL_PHL,CUR_CHA,DAN_MIA,DAV_IND,DEL_SAN,DOU_MLW +---> DRX_HOU,EDN_SAC,EDW_NEJ,EDW_VAN,ELL_DEN,ELL_SAN,FER_CLE,FIN_PHX,FOR_SEA +---> FOX_BOS,GAR_MIN,GLL_NEJ,GIL_NEJ,GRA_SAC,GRT_ORL,GUG_MIN,HIL_CLE +---> HIL_DET,HOU_DET,HPR_NEY,HRN_UTA,HWD_WAS,HWK_SEA,JAC_IND,JON_DAL +---> JON_LAK,JON_SAN,KER_CHI,KID_DAL,KON_ORL,LAE_ATL,LON_CHI,MAN_PHX,MAR_SAC +---> MAX_PHL,MCC_DAL,MCD_DEN,MCK_IND,MIL_CLE,MIL_TOR,MLS_DET,MON_BOS,MOR_UTA +---> MOU_MIA,MUL_GLD,MUR_CLP,MUR_TOR,MUR_VAN,MUR_WAS,NOR_ATL,OBA_NEJ,OWE_SAC +---> PAC_WAS,PER_PHX,PHL_CLE,PRS_SAN,RAD_BOS,RAF_DEN,RCE_CHA,RCH_CLP,RES_MLW +---> REV_VAN,ROB_MLW,ROD_CHI,ROG_CLP,ROG_TOR,ROS_DEN,SAB_PRT,SCO_ORL +---> SKL_GLD,SMI_ATL,SMI_GLD,SPR_GLD,STA_PHL,STO_TOR,STR_PRT,THR_DET,TIS_PHX +---> VAN_LAK,VAU_CLP,WEB_WAS,WIL_PRT,WIL_MIA,WLS_GLD +---> ZID_CHA +---> RODBLK,RODBLU,RODORG,RODPRP,RODRED,RODWHT,RODYEL,RODGRN +; +mugs4.img +---> SCO_VAN,ROB_TOR,CHP_MIA,WEB_MIN,LNG_MIN,RUF_PHL +;JOH_LAK +mugsmsc1.img +---> COW,ALIEN,GUIDO,ANG,LIS,MEL,MIK,JOE +;ROS,SAL +mugsmsc2.img +---> BER,CHK,FAT,FRA,GOR,GRE,OLD,PIG,WIZ +mugsmsc3.img +---> ERI_MUG,KIM_MUG,MAR_MUG,ROH_MUG,SEA_MUG +mugsmsc4.img +---> BEA_MUG,CHE_MUG,CLO_MUG,JAB_MUG,BAL_MUG,MDOC_MUG,VIK_MUG +mugsmsc5.img +---> MUN_MUG,AMR_MUG,BAR_MUG,DIM_MUG,JAC_MUG,JIG_MUG,JON_MUG,MIK_MUG,MIN_MUG +---> MXV_MUG,WIL_MUG,NOR_MUG +mugsmsc6.img +---> CAR_MUG,DAN_MUG,EDD_MUG,EUG_MUG,JEF_MUG,SHN_MUG +---> JAM_MUG,TUR_MUG +mugsmsc7.img +---> BUD_MUG,HEY_MUG,JEN_MUG,JMC_MUG,NIK_MUG,ROT_MUG +---> SAL_MUG,PAT_MUG,NEI_MUG,PER_MUG +colmugs1.img +---> ALL_COL,CAM_COL,DAM_COL,DUN_COL,HAM_COL,HAR_COL,IVE_COL,KIT_COL,MAR_COL +---> MIN_COL,RIL_COL,WAL_COL +PPP> 0 +ZOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> HOTSPOT.TBL +GLO> HOTSPOT.GLO +; +firefram.img +---> FFRAME01,FFRAME02,FFRAME03,FFRAME04,FFRAME05 +---> FFRAME06,FFRAME07,FFRAME08,FFRAME09,FFRAME10 +---> FFRAME11,FFRAME12,FFRAME13,FFRAME14,FFRAME15 +---> FFRAME16,FFRAME17,FFRAME18,FFRAME19,FFRAME20 +; +hotcircl.img +---> HOTCRC01,HOTCRC02,HOTCRC03,HOTCRC04,HOTCRC05,HOTCRC06,HOTCRC07 +---> HOTCRC08,HOTCRC09,HOTCRC10,HOTCRC11,HOTCRC12,HOTCRC13 +; +hotspot.img +;---> HOTA_01,HOTA_02,HOTA_03,HOTA_04,HOTA_05,HOTA_06,HOTA_07,HOTA_08,HOTA_09 +;---> HOTA_10,HOTA_11,HOTA_12,HOTA_13 +---> HOTNA_01,HOTNA_02,HOTNA_03,HOTNA_04 +---> HOTNA_05,HOTNA_06,HOTNA_07,HOTNA_08,HOTNA_09,HOTNA_10,HOTNA_11,HOTNA_12 +---> HOTNA_13 +; +explode.img +---> SMOKE01,SMOKE02 +---> SMOKE03,SMOKE04,SMOKE05,SMOKE06,SMOKE07,SMOKE08,SMOKE09,SMOKE10 +;---> SMOKEB01,SMOKEB02,SMOKEB03,SMOKEB04,SMOKEB05,SMOKEB06,SMOKEB07,SMOKEB08 +;---> SMOKEB09,SMOKEB10 +---> SALTA01,SALTA02,SALTA03,SALTA04,SALTA05,SALTA06 +---> SALTA07,SALTA08,SALTA09,SALTA10,SALTB01,SALTB02,SALTB03,SALTB04,SALTB05 +---> SALTB06,SALTB07,SALTB08,SALTB09,SALTB10,SALTB11 +---> XPLOD_BLU,XPLOD_BRT,XPLOD_YEL +---> SMOK1_01,SMOK1_02,SMOK1_03,SMOK1_04,SMOK1_05 +---> SMOK1_06,SMOK1_07,SMOK1_08,SMOK1_09,SMOK1_10,SMOK1_11,SMOK1_12 +;---> SMOK1_13,SMOK1_14 +; +ASM> BALLSHAD.TBL +GLO> BALLSHAD.GLO +; +ball.img +COF> +---> shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 +---> shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 +---> shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 +---> ballshad5 +POF> +---> ballshad2,ballshad3,ballshad4,ballshad6 +---> ballshad7 +PON> +; +ASM> BALL.TBL +GLO> JUNKXXXX.GLO +; +nball.img +PPP> 6 +---> NBALL101,NBALL601 +PPP> 0 +POF> +---> NBALL102,NBALL103,NBALL104,NBALL105,NBALL106,NBALL107,NBALL108 +---> NBALL109,NBALL110,NBALL111,NBALL112,NBALL113,NBALL114,NBALL115,NBALL116 +---> NBALL117,NBALL118,NBALL119,NBALL120,NBALL121,NBALL122,NBALL123,NBALL124 +---> NBALL125,NBALL126,NBALL127,NBALL128,NBALL129,NBALL130,NBALL201,NBALL202 +---> NBALL203,NBALL204,NBALL205,NBALL206,NBALL207,NBALL208,NBALL209,NBALL210 +---> NBALL211,NBALL212,NBALL213,NBALL214,NBALL215,NBALL216,NBALL217,NBALL218 +---> NBALL219,NBALL220,NBALL221,NBALL222,NBALL223,NBALL224,NBALL225,NBALL226 +---> NBALL227,NBALL228,NBALL229,NBALL230,NBALL301,NBALL302,NBALL303,NBALL304 +---> NBALL305,NBALL306,NBALL307,NBALL308,NBALL309,NBALL310,NBALL311,NBALL312 +---> NBALL313,NBALL314,NBALL315,NBALL316,NBALL317,NBALL318,NBALL319,NBALL320 +---> NBALL321,NBALL322,NBALL323,NBALL324,NBALL325,NBALL326,NBALL327,NBALL328 +---> NBALL329,NBALL330,NBALL401,NBALL402,NBALL403,NBALL404,NBALL405,NBALL406 +---> NBALL407,NBALL408,NBALL409,NBALL410,NBALL411,NBALL412,NBALL413,NBALL414 +---> NBALL415,NBALL416,NBALL417,NBALL418,NBALL419,NBALL420,NBALL421,NBALL422 +---> NBALL423,NBALL424,NBALL425,NBALL426,NBALL427,NBALL428,NBALL429,NBALL430 +---> NBALL501,NBALL502,NBALL503,NBALL504,NBALL505,NBALL506,NBALL507,NBALL508 +---> NBALL509,NBALL510,NBALL511,NBALL512,NBALL513,NBALL514,NBALL515,NBALL516 +---> NBALL517,NBALL518,NBALL519,NBALL520,NBALL521,NBALL522,NBALL523,NBALL524 +---> NBALL525,NBALL526,NBALL527,NBALL528,NBALL529,NBALL530 +---> NBALL602 +---> NBALL603,NBALL604,NBALL605,NBALL606,NBALL607,NBALL608,NBALL609,NBALL610 +---> NBALL611,NBALL612,NBALL613,NBALL614,NBALL615,NBALL616,NBALL617,NBALL618 +---> NBALL619,NBALL620,NBALL621,NBALL622,NBALL623,NBALL624,NBALL625,NBALL626 +---> NBALL627,NBALL628,NBALL629,NBALL630,NBALL701,NBALL702,NBALL703,NBALL704 +---> NBALL705,NBALL706,NBALL707,NBALL708,NBALL709,NBALL710,NBALL711,NBALL712 +---> NBALL713,NBALL714,NBALL715,NBALL716,NBALL717,NBALL718,NBALL719,NBALL720 +---> NBALL721,NBALL722,NBALL723,NBALL724,NBALL725,NBALL726,NBALL727,NBALL728 +---> NBALL729,NBALL730 +---> NBALL801,NBALL802,NBALL803,NBALL804,NBALL805,NBALL806 +---> NBALL807,NBALL808,NBALL809,NBALL810,NBALL811,NBALL812,NBALL813,NBALL814 +---> NBALL815,NBALL816,NBALL817,NBALL818,NBALL819,NBALL820,NBALL821,NBALL822 +---> NBALL823,NBALL824,NBALL825,NBALL826,NBALL827,NBALL828,NBALL829,NBALL830 +;;---> NBALL901,NBALL902,NBALL903,NBALL904,NBALL905,NBALL906,NBALL907,NBALL908 +;;---> NBALL909,NBALL910,NBALL911,NBALL912,NBALL913,NBALL914,NBALL915,NBALL916 +;;---> NBALL917,NBALL918,NBALL919,NBALL920,NBALL921,NBALL922,NBALL923,NBALL924 +;;---> NBALL925,NBALL926,NBALL927,NBALL928,NBALL929,NBALL930,NBALL1001 +;;---> NBALL1002,NBALL1003,NBALL1004,NBALL1005,NBALL1006,NBALL1007,NBALL1008 +;;---> NBALL1009,NBALL1010,NBALL1011,NBALL1012,NBALL1013,NBALL1014,NBALL1015 +;;---> NBALL1016,NBALL1017,NBALL1018,NBALL1019,NBALL1020,NBALL1021,NBALL1022 +;;---> NBALL1023,NBALL1024,NBALL1025,NBALL1026,NBALL1027,NBALL1028,NBALL1029 +;;---> NBALL1030 +PON> +; +fball.img +PPP> 6 +---> FBALL101 +PPP> 0 +POF> +---> FBALL102,FBALL103,FBALL104,FBALL105,FBALL106,FBALL107,FBALL108 +---> FBALL109,FBALL110,FBALL111,FBALL112,FBALL113,FBALL114,FBALL115,FBALL116 +---> FBALL117,FBALL118,FBALL119,FBALL120,FBALL121,FBALL122,FBALL123,FBALL124 +---> FBALL125,FBALL126,FBALL127,FBALL128,FBALL129,FBALL130,FBALL201,FBALL202 +---> FBALL203,FBALL204,FBALL205,FBALL206,FBALL207,FBALL208,FBALL209,FBALL210 +---> FBALL211,FBALL212,FBALL213,FBALL214,FBALL215,FBALL216,FBALL217,FBALL218 +---> FBALL219,FBALL220,FBALL221,FBALL222,FBALL223,FBALL224,FBALL225,FBALL226 +---> FBALL227,FBALL228,FBALL229,FBALL230,FBALL301,FBALL302,FBALL303,FBALL304 +---> FBALL305,FBALL306,FBALL307,FBALL308,FBALL309,FBALL310,FBALL311,FBALL312 +---> FBALL313,FBALL314,FBALL315,FBALL316,FBALL317,FBALL318,FBALL319,FBALL320 +---> FBALL321,FBALL322,FBALL323,FBALL324,FBALL325,FBALL326,FBALL327,FBALL328 +---> FBALL329,FBALL330,FBALL401,FBALL402,FBALL403,FBALL404,FBALL405,FBALL406 +---> FBALL407,FBALL408,FBALL409,FBALL410,FBALL411,FBALL412,FBALL413,FBALL414 +---> FBALL415,FBALL416,FBALL417,FBALL418,FBALL419,FBALL420,FBALL421,FBALL422 +---> FBALL423,FBALL424,FBALL425,FBALL426,FBALL427,FBALL428,FBALL429,FBALL430 +---> FBALL501,FBALL502,FBALL503,FBALL504,FBALL505,FBALL506,FBALL507,FBALL508 +---> FBALL509,FBALL510,FBALL511,FBALL512,FBALL513,FBALL514,FBALL515,FBALL516 +---> FBALL517,FBALL518,FBALL519,FBALL520,FBALL521,FBALL522,FBALL523,FBALL524 +---> FBALL525,FBALL526,FBALL527,FBALL528,FBALL529,FBALL530,FBALL601,FBALL602 +---> FBALL603,FBALL604,FBALL605,FBALL606,FBALL607,FBALL608,FBALL609,FBALL610 +---> FBALL611,FBALL612,FBALL613,FBALL614,FBALL615,FBALL616,FBALL617,FBALL618 +---> FBALL619,FBALL620,FBALL621,FBALL622,FBALL623,FBALL624,FBALL625,FBALL626 +---> FBALL627,FBALL628,FBALL629,FBALL630,FBALL701,FBALL702,FBALL703,FBALL704 +---> FBALL705,FBALL706,FBALL707,FBALL708,FBALL709,FBALL710,FBALL711,FBALL712 +---> FBALL713,FBALL714,FBALL715,FBALL716,FBALL717,FBALL718,FBALL719,FBALL720 +---> FBALL721,FBALL722,FBALL723,FBALL724,FBALL725,FBALL726,FBALL727,FBALL728 +---> FBALL729,FBALL730 +---> FBALL801,FBALL802,FBALL803,FBALL804,FBALL805,FBALL806 +---> FBALL807,FBALL808,FBALL809,FBALL810,FBALL811,FBALL812,FBALL813,FBALL814 +---> FBALL815,FBALL816,FBALL817,FBALL818,FBALL819,FBALL820,FBALL821,FBALL822 +---> FBALL823,FBALL824,FBALL825,FBALL826,FBALL827,FBALL828,FBALL829,FBALL830 +;;---> FBALL901,FBALL902,FBALL903,FBALL904,FBALL905,FBALL906,FBALL907,FBALL908 +;;---> FBALL909,FBALL910,FBALL911,FBALL912,FBALL913,FBALL914,FBALL915,FBALL916 +;;---> FBALL917,FBALL918,FBALL919,FBALL920,FBALL921,FBALL922,FBALL923,FBALL924 +;;---> FBALL925,FBALL926,FBALL927,FBALL928,FBALL929,FBALL930,FBALL1001 +;;---> FBALL1002,FBALL1003,FBALL1004,FBALL1005,FBALL1006,FBALL1007,FBALL1008 +;;---> FBALL1009,FBALL1010,FBALL1011,FBALL1012,FBALL1013,FBALL1014,FBALL1015 +;;---> FBALL1016,FBALL1017,FBALL1018,FBALL1019,FBALL1020,FBALL1021,FBALL1022 +;;---> FBALL1023,FBALL1024,FBALL1025,FBALL1026,FBALL1027,FBALL1028,FBALL1029 +;;---> FBALL1030 +PON> +; +aball.img +PPP> 6 +---> ABALL101 +PPP> 0 +POF> +---> ABALL102,ABALL103,ABALL104,ABALL105,ABALL106,ABALL107,ABALL108 +---> ABALL109,ABALL110,ABALL111,ABALL112,ABALL113,ABALL114,ABALL115,ABALL116 +---> ABALL117,ABALL118,ABALL119,ABALL120,ABALL121,ABALL122,ABALL123,ABALL124 +---> ABALL125,ABALL126,ABALL127,ABALL128,ABALL129,ABALL130,ABALL201,ABALL202 +---> ABALL203,ABALL204,ABALL205,ABALL206,ABALL207,ABALL208,ABALL209,ABALL210 +---> ABALL211,ABALL212,ABALL213,ABALL214,ABALL215,ABALL216,ABALL217,ABALL218 +---> ABALL219,ABALL220,ABALL221,ABALL222,ABALL223,ABALL224,ABALL225,ABALL226 +---> ABALL227,ABALL228,ABALL229,ABALL230,ABALL301,ABALL302,ABALL303,ABALL304 +---> ABALL305,ABALL306,ABALL307,ABALL308,ABALL309,ABALL310,ABALL311,ABALL312 +---> ABALL313,ABALL314,ABALL315,ABALL316,ABALL317,ABALL318,ABALL319,ABALL320 +---> ABALL321,ABALL322,ABALL323,ABALL324,ABALL325,ABALL326,ABALL327,ABALL328 +---> ABALL329,ABALL330,ABALL401,ABALL402,ABALL403,ABALL404,ABALL405,ABALL406 +---> ABALL407,ABALL408,ABALL409,ABALL410,ABALL411,ABALL412,ABALL413,ABALL414 +---> ABALL415,ABALL416,ABALL417,ABALL418,ABALL419,ABALL420,ABALL421,ABALL422 +---> ABALL423,ABALL424,ABALL425,ABALL426,ABALL427,ABALL428,ABALL429,ABALL430 +---> ABALL501,ABALL502,ABALL503,ABALL504,ABALL505,ABALL506,ABALL507,ABALL508 +---> ABALL509,ABALL510,ABALL511,ABALL512,ABALL513,ABALL514,ABALL515,ABALL516 +---> ABALL517,ABALL518,ABALL519,ABALL520,ABALL521,ABALL522,ABALL523,ABALL524 +---> ABALL525,ABALL526,ABALL527,ABALL528,ABALL529,ABALL530,ABALL601,ABALL602 +---> ABALL603,ABALL604,ABALL605,ABALL606,ABALL607,ABALL608,ABALL609,ABALL610 +---> ABALL611,ABALL612,ABALL613,ABALL614,ABALL615,ABALL616,ABALL617,ABALL618 +---> ABALL619,ABALL620,ABALL621,ABALL622,ABALL623,ABALL624,ABALL625,ABALL626 +---> ABALL627,ABALL628,ABALL629,ABALL630,ABALL701,ABALL702,ABALL703,ABALL704 +---> ABALL705,ABALL706,ABALL707,ABALL708,ABALL709,ABALL710,ABALL711,ABALL712 +---> ABALL713,ABALL714,ABALL715,ABALL716,ABALL717,ABALL718,ABALL719,ABALL720 +---> ABALL721,ABALL722,ABALL723,ABALL724,ABALL725,ABALL726,ABALL727,ABALL728 +---> ABALL729,ABALL730 +---> ABALL801,ABALL802,ABALL803,ABALL804,ABALL805,ABALL806 +---> ABALL807,ABALL808,ABALL809,ABALL810,ABALL811,ABALL812,ABALL813,ABALL814 +---> ABALL815,ABALL816,ABALL817,ABALL818,ABALL819,ABALL820,ABALL821,ABALL822 +---> ABALL823,ABALL824,ABALL825,ABALL826,ABALL827,ABALL828,ABALL829,ABALL830 +PON> +; +ASM> LOGOS.TBL +; +newlogos.img +ZON> +---> BALLBAK1,T_HAWKS,T_CELTS,T_HORS,T_BULLS,T_CAVS,T_MAVS,T_NUGS,T_PISS +---> T_PISS_N,T_WARS,T_ROCKS,T_PACER,T_LAKS,T_CLIPS,T_HEAT,T_BUCKS +---> T_TWOLV,T_TWOLV_N,T_NETS,T_KNIKS,T_MAGIC,T_76RS,T_SUNS,T_BLAZ,T_KINGS +---> T_SPURS,T_SONICS,T_RAPT,T_JAZZ,T_JAZZ_N,T_GRIZZ,T_BULTS +ZOF> +; +dcslogo.img +---> DCSRUM1 +;;---> DCSRUM2,DCSRUM3,DCSRUM4,DCSRUM5,DCSRUM6 +; +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +; +GAMEGRAF.IMG +---> NSHOTCLK,MUGPLAT +POF> +---> TUBEPIEC +PON> +TVSCORE.IMG +CON> +---> colon,cpu,freeply,credit +---> bbal,bbal_w +COF> +---> font60,font61,font62,font63,font64,font65,font66,font67,font68,font69 +---> font60w,font60r,font60g,font6?,font90r +---> S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4,S_LED_5,S_LED_6,S_LED_7,S_LED_8 +---> S_LED_9,S_LED_MAX +;---> BigLED_0,BigLED_1,BigLED_2,BigLED_3,BigLED_4,BigLED_5 +;---> BigLED_6,BigLED_7,BigLED_8,BigLED_9 +ASM> CREDIT.TBL +---> CRED_00 +GLO> XXXHD.GLO +---> CRED_01,CRED_02,CRED_03,CRED_04 +---> CRED_05,CRED_06,CRED_07,CRED_08,CRED_09 +---> CRED_10,CRED_11,CRED_12,CRED_13,CRED_14 +---> CRED_15,CRED_16,CRED_17,CRED_18,CRED_19 +---> CRED_20,CRED_21,CRED_22,CRED_23,CRED_24 +---> CRED_25,CRED_26,CRED_27,CRED_28,CRED_29 +---> CRED_30,CRED_31,CRED_32,CRED_33,CRED_34 +---> CRED_35,CRED_36,CRED_37,CRED_38,CRED_39 +---> CRED_40,CRED_41,CRED_42,CRED_43,CRED_44 +---> CRED_45,CRED_46,CRED_47,CRED_48,CRED_49 +---> CRED_50,CRED_51,CRED_52,CRED_53,CRED_54 +---> CRED_55,CRED_56,CRED_57,CRED_58,CRED_59 +---> CRED_60,CRED_61,CRED_62,CRED_63,CRED_64 +---> CRED_65,CRED_66,CRED_67,CRED_68,CRED_69 +---> CRED_70,CRED_71,CRED_72,CRED_73,CRED_74 +---> CRED_75,CRED_76,CRED_77,CRED_78,CRED_79 +---> CRED_80,CRED_81,CRED_82,CRED_83,CRED_84 +---> CRED_85,CRED_86,CRED_87,CRED_88,CRED_89 +---> CRED_90,CRED_91,CRED_92,CRED_93,CRED_94 +---> CRED_95,CRED_96,CRED_97,CRED_98,CRED_99 +IHDR SAG:L +PPP> 6 +;---> TURBO_60,TURBO_59,TURBO_58,TURBO_57,TURBO_56 +;---> TURBO_55,TURBO_54,TURBO_53,TURBO_52,TURBO_51 +---> TURBO_52,TURBO_51 +---> TURBO_50,TURBO_49,TURBO_48,TURBO_47,TURBO_46 +---> TURBO_45,TURBO_44,TURBO_43,TURBO_42,TURBO_41 +---> TURBO_40,TURBO_39,TURBO_38,TURBO_37,TURBO_36 +---> TURBO_35,TURBO_34,TURBO_33,TURBO_32,TURBO_31 +---> TURBO_30,TURBO_29,TURBO_28,TURBO_27,TURBO_26 +---> TURBO_25,TURBO_24,TURBO_23,TURBO_22,TURBO_21 +---> TURBO_20,TURBO_19,TURBO_18,TURBO_17,TURBO_16 +---> TURBO_15,TURBO_14,TURBO_13,TURBO_12,TURBO_11 +---> TURBO_10,TURBO_09,TURBO_08,TURBO_07,TURBO_06 +---> TURBO_05,TURBO_04,TURBO_03,TURBO_02,TURBO_01 +; +;---> TEAMZN30,TEAMZN29,TEAMZN28,TEAMZN27,TEAMZN26 +;---> TEAMZN25,TEAMZN24,TEAMZN23,TEAMZN22,TEAMZN21 +;---> TEAMZN20,TEAMZN19,TEAMZN18,TEAMZN17,TEAMZN16 +;---> TEAMZN15,TEAMZN14,TEAMZN13,TEAMZN12,TEAMZN11 +;---> TEAMZN10,TEAMZN09,TEAMZN08,TEAMZN07,TEAMZN06 +;---> TEAMZN05,TEAMZN04,TEAMZN03,TEAMZN02,TEAMZN01 +ASM> CREDTURB.TBL +GLO> CREDTURB.GLO +CON> +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +---> TURBO_01b,TURBO_01y,TURBO_01g,TURBO_01r +;---> TEAMZN_01r,TEAMZN_01b +PPP> 0 +---> S_LED_0r +; +ASM> HOOP.TBL +GLO> HOOP.GLO +; +hoop.img +CON> +PON> +ZON> +PPP> 8 +;Remove ZON to speed up(?) DMA transfer +---> hoopbot +ZOF> +PPP> 0 +---> hooptop +---> back1,back2,back3,back4,back5,back6,back7,back8,back9,back10 +---> RIM0_B_00,RIM0_F_00 +---> RIM1_F_01,RIM1_F_02,RIM1_F_03,RIM1_F_04,RIM1_F_05,RIM1_F_06 +---> RIM1_F_07,RIM1_F_08,RIM1_F_09,RIM1_F_10,RIM1_F_11 +---> RIM1_B_01,RIM1_B_02,RIM1_B_03,RIM1_B_06,RIM1_B_07,RIM1_B_08 +---> RIM1_B_09,RIM1_B_10,RIM1_B_11 +---> RIM2_F_01,RIM2_F_02,RIM2_F_03,RIM2_F_04,RIM2_F_05,RIM2_F_06 +---> RIM2_F_08 +---> RIM2_B_01,RIM2_B_02,RIM2_B_03,RIM2_B_05,RIM2_B_06,RIM2_B_08 +---> RIM3_F_01,RIM3_F_02,RIM3_F_03,RIM3_F_04,RIM3_F_05,RIM3_F_06 +---> RIM3_F_07,RIM3_F_08,RIM3_F_09,RIM3_F_11 +---> RIM3_B_01,RIM3_B_02,RIM3_B_03,RIM3_B_04,RIM3_B_05,RIM3_B_06 +---> RIM3_B_07,RIM3_B_08,RIM3_B_09,RIM3_B_11 +---> RIM4_F_01,RIM4_F_02,RIM5_F_01,RIM5_F_03 +---> RIM4_B_01,RIM4_B_02,RIM5_B_01,RIM5_B_03 +---> RIM7_F_01,RIM7_F_02,RIM7_F_03,RIM7_F_04,RIM7_F_05,RIM7_F_06 +---> RIM7_F_07,RIM7_F_08,RIM7_F_09,RIM7_F_11 +---> RIM7_B_01,RIM7_B_02,RIM7_B_03,RIM7_B_04,RIM7_B_05,RIM7_B_06 +---> RIM7_B_07,RIM7_B_08,RIM7_B_09,RIM7_B_11 +---> RIM8_F_01,RIM8_F_02,RIM8_F_03,RIM8_F_04,RIM8_F_05,RIM8_F_06 +---> RIM8_B_01,RIM8_B_02,RIM8_B_03,RIM8_B_04,RIM8_B_05,RIM8_B_06 +---> CHAN1F_01,CHAN1F_02,CHAN1F_03,CHAN1F_04,CHAN1F_05,CHAN1F_06,CHAN1F_07 +---> CHAN1F_08,CHAN1F_09,CHAN1F_10 +---> CHAN1B_01,CHAN1B_02,CHAN1B_03,CHAN1B_04,CHAN1B_05,CHAN1B_06,CHAN1B_07 +---> CHAN1B_08,CHAN1B_09,CHAN1B_10 +---> CHAN2F_01,CHAN2F_02,CHAN2F_03,CHAN2F_04,CHAN2F_05,CHAN2F_06,CHAN2F_07 +---> CHAN2B_01,CHAN2B_02,CHAN2B_03,CHAN2B_04,CHAN2B_05,CHAN2B_06,CHAN2B_07 +---> CHAN3F_01,CHAN3F_02,CHAN3F_03,CHAN3F_04,CHAN3F_05,CHAN3F_06,CHAN3F_07 +---> CHAN3F_08,CHAN3F_09,CHAN3F_10 +---> CHAN3B_01,CHAN3B_02,CHAN3B_03,CHAN3B_04,CHAN3B_05,CHAN3B_06,CHAN3B_07 +---> CHAN3B_08,CHAN3B_09,CHAN3B_10 +---> FLAME_F_01,FLAME_F_02,FLAME_F_03,FLAME_F_04,FLAME_F_05,FLAME_F_06 +---> FLAME_F_07,FLAME_F_08,FLAME_F_09,FLAME_F_10,FLAME_F_11,FLAME_F_12 +---> FLAME_F_13 +---> FLAME2F_01,FLAME2F_02,FLAME2F_03,FLAME2F_04,FLAME2F_05,FLAME2F_06 +---> FLAME2F_07 +---> FLAME2F_13 +;,FLAME2F_08,FLAME2F_09,FLAME2F_10,FLAME2F_11,FLAME2F_12 +;---> FLAME2B_01,FLAME2B_02,FLAME2B_03,FLAME2B_04,FLAME2B_05,FLAME2B_06 +;---> FLAME2B_07 +---> FLAME2B_09,FLAME2B_10,FLAME2B_11,FLAME2B_12,FLAME2B_08 +;---> FLAME2B_13 +; +nbbd8.img +PPP> 8 +ZON> +---> nback10,nback9,nback8,nback7,nback6,nback5,nback4,nback3,nback2,nback1 +---> nhoopbot +ZOF> +PPP> 0 +; +ASM> COURTFLR.TBL +; +;Load court and bench pals +; +crtflr.img +---> CRTPC1,CRTPC2,CRTPC3,CRTPC4,CRTPC5,CRTPC6,CRTPC7,CRTPC8,CRTPC9,CRTPC10 +---> CRTPC11,CRTPC12,CRTPC13,CRTPC14,CRTPC15,CRTPC16,CRTPC17,CRTPC18,CRTPC19,CRTPC20 +---> CRTPC21,CRTPC22,CRTPC23,CRTPC24,CRTPC25,CRTPC26,CRTPC27,CRTPC28,CRTPC29 +crwdflr.img +---> bk_flr1,bk_flr2,bk_flr3,bk_flr4,bk_flr5,bk_flr6,bk_flr7,bk_flr8,bk_flr9,bk_flr10 +---> bk_flr11,bk_flr12,bk_flr13,bk_flr14,bk_flr15,bk_flr16,bk_flr17,bk_flr18,bk_flr19,bk_flr20 +---> bk_flr21,bk_flr22,bk_flr23,bk_flr24,bk_flr25,bk_flr26,bk_flr27,bk_flr28,bk_flr29 +; +ASM> HANGFONT.TBL +; +hangfont.img +---> HANGF_A +---> HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G,HANGF_H,HANGF_I,HANGF_J +---> HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O,HANGF_P,HANGF_Q,HANGF_R,HANGF_S +---> HANGF_T,HANGF_U,HANGF_V,HANGF_W,HANGF_X,HANGF_Y,HANGF_Z,HANGF_0,HANGF_1 +---> HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7,HANGF_8,HANGF_9 +;---> HANGF_DOL,HANGF_PCT,HANGF_NUM,HANGF_AND,HANGF_STR,HANGF_PRL +;---> HANGF_PRR,HANGF_PLS,HANGF_MIN,HANGF_QUE,HANGF_PER,HANGF_SLS,HANGF_COL +;---> HANGF_SEM,HANGF_COM,HANGF_EQU +---> HANGF_EXC,HANGF_APO +; +ASM> BASTCYC.TBL +GLO> BASTCYC.GLO +; +bastcyc.img +;---> B10CYC_A,B10CYC_B,B10CYC_C,B10CYC_D,B10CYC_E,B10CYC_F,B10CYC_G,B10CYC_H +;---> B10CYC_I,B10CYC_J,B10CYC_K,B10CYC_L,B10CYC_M,B10CYC_N,B10CYC_O,B10CYC_P +;---> B10CYC_Q,B10CYC_R,B10CYC_S,B10CYC_T,B10CYC_U,B10CYC_V,B10CYC_W,B10CYC_X +;---> B10CYC_Y,B10CYC_Z,B10CYC_0,B10CYC_1,B10CYC_2,B10CYC_3,B10CYC_4,B10CYC_5 +;---> B10CYC_6,B10CYC_7,B10CYC_8,B10CYC_9,B10CYC_EXC,B10CYC_NUM,B10CYC_DOL +;---> B10CYC_PCT,B10CYC_AND,B10CYC_PRL,B10CYC_PRR,B10CYC_DSH,B10CYC_PLS +;---> B10CYC_SLS,B10CYC_COM,B10CYC_APO,B10CYC_PER,B10CYC_SEM,B10CYC_COL +;---> B10CYC_QUE +---> B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F +---> B8TCYC_G,B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N +---> B8TCYC_O,B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V +---> B8TCYC_W,B8TCYC_X,B8TCYC_Y,B8TCYC_Z,B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3 +---> B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7,B8TCYC_8,B8TCYC_9,B8TCYC_COL +---> B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_PRL,B8TCYC_PRR +---> B8TCYC_PER,B8TCYC_COM,B8TCYC_APO,B8TCYC_PLS,B8TCYC_QUE,B8TCYC_SEM +---> B8TCYC_SLS,B8TCYC_EXC +---> B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E +---> B7TCYC_F,B7TCYC_G,B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M +---> B7TCYC_N,B7TCYC_O,B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U +---> B7TCYC_V,B7TCYC_W,B7TCYC_X,B7TCYC_Y,B7TCYC_Z,B7TCYC_0,B7TCYC_1,B7TCYC_2 +---> B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7,B7TCYC_8,B7TCYC_9 +---> B7TCYC_EXC,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_AND,B7TCYC_PCT,B7TCYC_PRL +---> B7TCYC_PRR,B7TCYC_DSH,B7TCYC_PLS,B7TCYC_COM,B7TCYC_PER,B7TCYC_QUE +---> B7TCYC_APO,B7TCYC_COL,B7TCYC_SEM,B7TCYC_SLS +; +ASM> PLYRNUB.TBL +; +plyrnubs.img +---> PLYRNUB1,PLYRNUB2,PLYRNUB3,PLYRNUB4 +cities2.img +---> CUST6,CUST7,CUST8,CUST9,CUST10 +; +ASM> PRIZES.TBL +; +prizes.img +ZON> +---> prize1,prize2 +---> prize3,prizeG +ZOF> +; +ASM> POWERTXT.TBL +GLO> POWERTXT.GLO +; +bast8.img +---> TOURMODE2,NOCPU2,SECRETS2 +;---> NOPUSH2 +---> ASISTOFF2,SHOTPERC2,BABYPLAY2 +;---> WIN4FREE2,WINSTAY2,WNRSSTAY2 +; +brush20f.img +POF> +PPP> 5 +---> BRSH20APO +PPP> 0 +PON> +; +ASM> OUTDOOR.TBL +GLO> OUTDOOR.GLO +; +FRM> OUTDOOR +; +outdoor.img +ZON> +---> sidebot,sidetop +---> lamp1,lamp2,hang_logo,moon +ZOF> +---> BKg1,BKg2 +---> bkwall +;---> fence +---> city1,city2,city3 +---> outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 +---> outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +---> PAPER1,PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9,LGSHEET1 +---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7,LGSHEET8,LGSHEET9 +---> SMSHEET1,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5,SMSHEET6,SMSHEET7,SMSHEET8 +---> SMSHEET9,LEAF1,LEAF2,LEAF3,LEAF4,LEAF5,LEAF6,LEAF7,LEAF8 +---> STORM01 +;---> STORM02,STORM03,STORM04,STORM05,STORM06,STORM07,STORM08,STORM09,STORM10 +;---> STORM11,STORM12 +; +GLO> BGNDTBL.GLO +; +BBB> HANGTIME +BBB> VSSCR +BBB> TEAMSTAT + diff --git a/IMG/BB8.LOD b/IMG/BB8.LOD new file mode 100644 index 0000000..3a22e0d --- /dev/null +++ b/IMG/BB8.LOD @@ -0,0 +1,304 @@ +***> 4e66600,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W,PT2X:W,PT2Y:W,PT3X:W,PT3Y:W,PT5X:W +; +ASM> PLYRRSEQ.TBL +; +nba_run1.img +---> w1defst1,w1defst2,w1defst3,w1defst4,w2defst1,w2defst2,w2defst3,w2defst4 +---> w3defst1,w3defst2,w3defst3,w3defst4,w4defst1,w4defst2,w4defst3,w4defst4 +---> w5defst1,w5defst2,w5defst3,w5defst4 +---> w1run1,w1run2,w1run3 +---> w1run4,w1run5,w1run6,w1run7,w1run8,w1run9,w1run10,w1run11,w2run1,w2run2 +---> w2run3,w2run4,w2run5,w2run6,w2run7,w2run8,w2run9,w2run10,w2run11,w3run1 +---> w3run2,w3run3,w3run4,w3run5,w3run6,w3run7,w3run8,w3run9,w3run10,w3run11 +---> w4run1,w4run2,w4run3,w4run4,w4run5,w4run6,w4run7,w4run8,w4run9,w4run10 +---> w4run11,w5run1,w5run2,w5run3,w5run4,w5run5,w5run6,w5run7,w5run8,w5run9 +---> w5run10,w5run11 +;,w1spr1,w1spr2,w1spr3,w1spr4,w1spr5,w1spr6,w1spr7,w1spr8 +;---> w1spr9,w1spr10,w1spr11,w2spr1,w2spr2,w2spr3,w2spr4,w2spr5,w2spr6,w2spr7 +;---> w2spr8,w2spr9,w2spr10,w2spr11 +---> w3spr1,w3spr2,w3spr3,w3spr4 +---> w3spr5,w3spr6,w3spr7,w3spr8,w3spr9,w3spr10,w3spr11,w4spr1 +---> w4spr2,w4spr3,w4spr4,w4spr5,w4spr6,w4spr7,w4spr8,w4spr9,w4spr10,w4spr11 +;---> w5spr1,w5spr2,w5spr3,w5spr4,w5spr5,w5spr6,w5spr7,w5spr8,w5spr9,w5spr10 +;---> w5spr11,w1dspr1,w1dspr2,w1dspr3,w1dspr4,w1dspr5,w1dspr6,w1dspr7,w1dspr8 +;---> w1dspr9,w1dspr10,w1dspr11,w2dspr1,w2dspr2,w2dspr3,w2dspr4,w2dspr5 +;---> w2dspr6,w2dspr7,w2dspr8,w2dspr9,w2dspr10,w2dspr11 +---> w3dspr1,w3dspr2 +---> w3dspr3,w3dspr4,w3dspr5,w3dspr6,w3dspr7,w3dspr8,w3dspr9,w3dspr10 +---> w3dspr11,w4dspr1,w4dspr2,w4dspr3,w4dspr4,w4dspr5,w4dspr6,w4dspr7 +---> w4dspr8,w4dspr9,w4dspr10,w4dspr11 +;,w5dspr1,w5dspr2,w5dspr3,w5dspr4 +;---> w5dspr5,w5dspr6,w5dspr7,w5dspr8,w5dspr9,w5dspr10,w5dspr11 +---> w1drun1 +---> w1drun2,w1drun3,w1drun4,w1drun5,w1drun6,w1drun7,w1drun8,w1drun9 +---> w1drun10,w1drun11,w2drun1,w2drun2,w2drun3,w2drun4,w2drun5,w2drun6 +---> w2drun7,w2drun8,w2drun9,w2drun10,w2drun11,w3drun1,w3drun2,w3drun3 +---> w3drun4,w3drun5,w3drun6,w3drun7,w3drun8,w3drun9,w3drun10,w3drun11 +---> w4drun1,w4drun2,w4drun3,w4drun4,w4drun5,w4drun6,w4drun7,w4drun8,w4drun9 +---> w4drun10,w4drun11,w5drun1,w5drun2,w5drun3,w5drun4,w5drun5,w5drun6 +---> w5drun7,w5drun8,w5drun9,w5drun10,w5drun11 +;,w5defwd1,w5defwd2,w5defwd3 +;---> w5defwd4,w5defwd5,w5defwd6,w5defwd7,w5defwd8,w5defwd9,w5defwd10 +;---> w4defwd1,w4defwd2,w4defwd3,w4defwd4,w4defwd5,w4defwd6,w4defwd7,w4defwd8 +;---> w4defwd9,w4defwd10,w4defwd11,w3defwd1,w3defwd2,w3defwd3,w3defwd4 +;---> w3defwd5,w3defwd6,w3defwd7,w3defwd8,w3defwd9,w3defwd10,w2defwd1 +;---> w2defwd2,w2defwd3,w2defwd4,w2defwd5,w2defwd6,w2defwd7,w2defwd8,w2defwd9 +;---> w2defwd10,w1defwd1,w1defwd2,w1defwd3,w1defwd4,w1defwd5,w1defwd6 +;---> w1defwd7,w1defwd8,w1defwd9,w1defwd10 +; +nba_run2.img +---> w1dfcr1,w1dfcr2,w1dfcr3 +---> w1dfcr4,w1dfcr5,w1dfcr6,w2dfcr1 +---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +PPP> 6 +ASM> PLYRHD6.TBL +colhds1.img +GLO> PLYRHD6.GLO +---> MARBRY00,MARBRY01 +GLO> XXXHD.GLO +---> MARBRY02,MARBRY03,MARBRY04 +---> MARBRY05,MARBRY06,MARBRY07,MARBRY08,MARBRY09,MARBRY10,MARBRY11,MARBRY12 +---> MARBRY13,MARBRY14,MARBRY15,MARBRY16 +GLO> PLYRHD6.GLO +---> ALLEN00,ALLEN01 +GLO> XXXHD.GLO +---> ALLEN02,ALLEN03,ALLEN04,ALLEN05,ALLEN06,ALLEN07,ALLEN08 +---> ALLEN09,ALLEN10,ALLEN11,ALLEN12 +---> ALLEN13,ALLEN14,ALLEN15,ALLEN16 +GLO> PLYRHD6.GLO +---> CAMB00,CAMB01 +GLO> XXXHD.GLO +---> CAMB02,CAMB03,CAMB04,CAMB05,CAMB06,CAMB07,CAMB08 +---> CAMB09,CAMB10,CAMB11,CAMB12,CAMB13,CAMB14 +---> CAMB15,CAMB16 +GLO> PLYRHD6.GLO +---> DAMP00,DAMP01 +GLO> XXXHD.GLO +---> DAMP02,DAMP03,DAMP04,DAMP05,DAMP06,DAMP07 +---> DAMP08,DAMP09,DAMP10,DAMP11,DAMP12,DAMP13,DAMP14,DAMP15,DAMP16 +GLO> PLYRHD6.GLO +---> DUN00,DUN01 +GLO> XXXHD.GLO +---> DUN02,DUN03,DUN04,DUN05,DUN06,DUN07,DUN08,DUN09,DUN10,DUN11,DUN12 +---> DUN13,DUN14,DUN15,DUN16 +GLO> PLYRHD6.GLO +---> HAM00,HAM01 +GLO> XXXHD.GLO +---> HAM02,HAM03,HAM04,HAM05,HAM06,HAM07 +---> HAM08,HAM09,HAM10,HAM11,HAM12,HAM13,HAM14,HAM15,HAM16 +GLO> PLYRHD6.GLO +---> HARR00,HARR01 +GLO> XXXHD.GLO +---> HARR02,HARR03,HARR04,HARR05,HARR06,HARR07,HARR08,HARR09,HARR10,HARR11 +---> HARR12,HARR13,HARR14,HARR15,HARR16 +GLO> PLYRHD6.GLO +---> IVER00,IVER01 +GLO> XXXHD.GLO +---> IVER02,IVER03,IVER04,IVER05,IVER06,IVER07,IVER08 +---> IVER09,IVER10,IVER11,IVER12,IVER13,IVER14,IVER15,IVER16 +GLO> PLYRHD6.GLO +---> KIT00,KIT01 +GLO> XXXHD.GLO +---> KIT02,KIT03,KIT04,KIT05,KIT06,KIT07,KIT08 +---> KIT09,KIT10,KIT11,KIT12,KIT13,KIT14,KIT15,KIT16 +GLO> PLYRHD6.GLO +---> MINR00,MINR01 +GLO> XXXHD.GLO +---> MINR02,MINR03,MINR04,MINR05,MINR06,MINR07,MINR08 +---> MINR09,MINR10,MINR11,MINR12 +---> MINR13,MINR14,MINR15,MINR16 +GLO> PLYRHD6.GLO +---> RILY00,RILY01 +GLO> XXXHD.GLO +---> RILY02,RILY03,RILY04,RILY05,RILY06,RILY07,RILY08 +---> RILY09,RILY10,RILY11,RILY12,RILY13,RILY14,RILY15,RILY16 +GLO> PLYRHD6.GLO +---> WAL00,WAL01 +GLO> XXXHD.GLO +---> WAL02,WAL03,WAL04,WAL05,WAL06,WAL07,WAL08,WAL09 +---> WAL10,WAL11,WAL12,WAL13,WAL14,WAL15,WAL16 +hdsmsc6.img +GLO> PLYRHD6.GLO +---> CARY00,CARY01 +GLO> XXXHD.GLO +---> CARY02,CARY03,CARY04,CARY05 +;,CARY06 +;---> CARY07,CARY08,CARY09,CARY10,CARY11,CARY12,CARY13,CARY14,CARY15,CARY16 +---> CARY16 +GLO> PLYRHD6.GLO +---> DAN00,DAN01 +GLO> XXXHD.GLO +---> DAN02,DAN03,DAN04,DAN05,DAN06,DAN07,DAN08,DAN09 +---> DAN10,DAN11,DAN12,DAN13,DAN14,DAN15,DAN16 +GLO> PLYRHD6.GLO +---> EDDIE00,EDDIE01 +GLO> XXXHD.GLO +---> EDDIE02,EDDIE03,EDDIE04,EDDIE05,EDDIE06 +---> EDDIE07,EDDIE08,EDDIE09,EDDIE10,EDDIE11 +---> EDDIE12,EDDIE13,EDDIE14,EDDIE15,EDDIE16 +GLO> PLYRHD6.GLO +---> EUGG00,EUGG01 +GLO> XXXHD.GLO +---> EUGG02,EUGG03,EUGG04,EUGG05,EUGG06,EUGG07,EUGG08 +---> EUGG09,EUGG10,EUGG11,EUGG12,EUGG13 +---> EUGG14,EUGG15,EUGG16 +GLO> PLYRHD6.GLO +---> JEFF00,JEFF01 +GLO> XXXHD.GLO +---> JEFF02,JEFF03,JEFF04,JEFF05,JEFF06 +---> JEFF07,JEFF08,JEFF09,JEFF10,JEFF11,JEFF12,JEFF13,JEFF14,JEFF15,JEFF16 +GLO> PLYRHD6.GLO +---> JAMIE00,JAMIE01 +GLO> XXXHD.GLO +---> JAMIE02,JAMIE03,JAMIE04,JAMIE05 +---> JAMIE06,JAMIE07,JAMIE08,JAMIE09,JAMIE10,JAMIE11,JAMIE12,JAMIE13,JAMIE14 +---> JAMIE15,JAMIE16 +GLO> PLYRHD6.GLO +---> TURMEL00,TURMEL01 +GLO> XXXHD.GLO +---> TURMEL02,TURMEL03,TURMEL04,TURMEL05,TURMEL06,TURMEL07,TURMEL08 +---> TURMEL09,TURMEL10,TURMEL11,TURMEL12,TURMEL13,TURMEL14,TURMEL15,TURMEL16 +; +hdsmsc7.img +GLO> PLYRHD6.GLO +---> BUD00,BUD01 +GLO> XXXHD.GLO +---> BUD02,BUD03,BUD04,BUD05,BUD06 +---> BUD07,BUD08,BUD09,BUD10,BUD11,BUD12,BUD13,BUD14,BUD15,BUD16 +GLO> PLYRHD6.GLO +---> HEY00,HEY01 +GLO> XXXHD.GLO +---> HEY02,HEY03,HEY04,HEY05,HEY06,HEY07,HEY08,HEY09,HEY10,HEY11,HEY12,HEY13 +---> HEY14,HEY15,HEY16 +GLO> PLYRHD6.GLO +---> JEN00,JEN01 +GLO> XXXHD.GLO +---> JEN02,JEN03,JEN04,JEN05,JEN06,JEN07,JEN08 +---> JEN09,JEN10,JEN11,JEN12,JEN13,JEN14,JEN15,JEN16 +GLO> PLYRHD6.GLO +---> JOHNC00,JOHNC01 +GLO> XXXHD.GLO +---> JOHNC02,JOHNC03,JOHNC04,JOHNC05,JOHNC06,JOHNC07,JOHNC08 +---> JOHNC09,JOHNC10,JOHNC11 +---> JOHNC12,JOHNC13,JOHNC14,JOHNC15,JOHNC16 +GLO> PLYRHD6.GLO +---> NIK00,NIK01 +GLO> XXXHD.GLO +---> NIK02,NIK03,NIK04 +---> NIK05 +;,NIK06,NIK07,NIK08,NIK09,NIK10,NIK11,NIK12,NIK13,NIK14,NIK15,NIK16 +---> NIK16 +GLO> PLYRHD6.GLO +---> ROOT00,ROOT01 +GLO> XXXHD.GLO +---> ROOT02,ROOT03,ROOT04,ROOT05,ROOT06,ROOT07,ROOT08,ROOT09 +---> ROOT10,ROOT11,ROOT12,ROOT13,ROOT14,ROOT15,ROOT16 +GLO> PLYRHD6.GLO +---> NEILF00,NEILF01 +GLO> XXXHD.GLO +---> NEILF02,NEILF03,NEILF04 +---> NEILF05 +;---> NEILF06,NEILF07,NEILF08,NEILF09,NEILF10,NEILF11,NEILF12,NEILF13 +;---> NEILF14,NEILF15,NEILF16 +---> NEILF16 +GLO> PLYRHD6.GLO +---> PAT00,PAT01 +GLO> XXXHD.GLO +---> PAT02,PAT03,PAT04,PAT05,PAT06,PAT07 +---> PAT08,PAT09,PAT10,PAT11,PAT12,PAT13,PAT14,PAT15,PAT16 +GLO> PLYRHD6.GLO +---> PERRY00,PERRY01 +GLO> XXXHD.GLO +---> PERRY02,PERRY03,PERRY04,PERRY05,PERRY06,PERRY07,PERRY08,PERRY09,PERRY10 +---> PERRY11,PERRY12,PERRY13,PERRY14,PERRY15,PERRY16 +GLO> PLYRHD6.GLO +---> SAL00,SAL01 +GLO> XXXHD.GLO +---> SAL02,SAL03,SAL04 +---> SAL05,SAL06,SAL07,SAL08,SAL09,SAL10,SAL11,SAL12,SAL13,SAL14,SAL15,SAL16 +hdsmsc8.img +GLO> PLYRHD6.GLO +---> BOON00,BOON01 +GLO> XXXHD.GLO +---> BOON02,BOON03,BOON04,BOON05 +---> BOON06,BOON07,BOON08,BOON09,BOON10,BOON11,BOON12,BOON13,BOON14,BOON15 +---> BOON16 +GLO> PLYRHD6.GLO +---> CARLOS00,CARLOS01 +GLO> XXXHD.GLO +---> CARLOS02,CARLOS03,CARLOS04,CARLOS05,CARLOS16 +;---> CARLOS07,CARLOS08,CARLOS09,CARLOS10,CARLOS11,CARLOS12,CARLOS13,CARLOS14 +;---> CARLOS15,CARLOS16 +GLO> PLYRHD6.GLO +---> FIFI00,FIFI01 +GLO> XXXHD.GLO +---> FIFI02,FIFI03,FIFI04,FIFI05,FIFI06 +---> FIFI07,FIFI08,FIFI09,FIFI10,FIFI11,FIFI12,FIFI13,FIFI14,FIFI15,FIFI16 +GLO> PLYRHD6.GLO +---> HEITH00,HEITH01 +GLO> XXXHD.GLO +---> HEITH02,HEITH03,HEITH04,HEITH05,HEITH16 +;---> HEITH06,HEITH07,HEITH08 +;---> HEITH09,HEITH10,HEITH11,HEITH12,HEITH13,HEITH14,HEITH15,HEITH16 +;---> HEITH16 +GLO> PLYRHD6.GLO +---> JASON00,JASON01 +GLO> XXXHD.GLO +---> JASON02,JASON03,JASON04,JASON05,JASON16 +;---> JASON06,JASON07,JASON08,JASON09 +;---> JASON10,JASON11,JASON12,JASON13,JASON14,JASON15,JASON16 +GLO> PLYRHD6.GLO +---> JOSH00,JOSH01 +GLO> XXXHD.GLO +---> JOSH02,JOSH03,JOSH04,JOSH05,JOSH16 +;JOSH06,JOSH07,JOSH08,JOSH09,JOSH10,JOSH11 +;---> JOSH12,JOSH13,JOSH14,JOSH15,JOSH16 +GLO> PLYRHD6.GLO +---> MARTY00,MARTY01 +GLO> XXXHD.GLO +---> MARTY02,MARTY03 +---> MARTY04,MARTY05,MARTY16 +;MARTY06,MARTY07,MARTY08,MARTY09,MARTY10,MARTY11,MARTY12 +;---> MARTY13,MARTY14,MARTY15,MARTY16 +GLO> PLYRHD6.GLO +---> MATT00,MATT01 +GLO> XXXHD.GLO +---> MATT02,MATT03,MATT04 +---> MATT05 +;,MATT06,MATT07,MATT08,MATT09,MATT10,MATT11,MATT12,MATT13,MATT14 +;---> MATT15,MATT16 +---> MATT16 +GLO> PLYRHD6.GLO +---> OURSL00,OURSL01 +GLO> XXXHD.GLO +---> OURSL02,OURSL03,OURSL04,OURSL05,OURSL06 +---> OURSL07,OURSL08,OURSL09,OURSL10,OURSL11,OURSL12,OURSL13,OURSL14,OURSL15 +---> OURSL16 +GLO> PLYRHD6.GLO +---> QUINN00,QUINN01 +GLO> XXXHD.GLO +---> QUINN02,QUINN03,QUINN04,QUINN05,QUINN06,QUINN07 +---> QUINN08,QUINN09,QUINN10,QUINN11,QUINN12,QUINN13,QUINN14,QUINN15,QUINN16 +GLO> PLYRHD6.GLO +---> TOBIAS00,TOBIAS01 +GLO> XXXHD.GLO +---> TOBIAS02,TOBIAS03,TOBIAS04,TOBIAS05,TOBIAS06,TOBIAS07 +---> TOBIAS08,TOBIAS09,TOBIAS10,TOBIAS11,TOBIAS12,TOBIAS13,TOBIAS14,TOBIAS15 +---> TOBIAS16 +PPP> 0 +ASM> MUGSHOT8.TBL +mugsmsc8.img +---> FIFI_MUG,MAT_MUG,JOS_MUG,HEI_MUG,CARL_MUG,MARTY_MUG,BOO_MUG,QUI_MUG +---> JAS_MUG,OUR_MUG,TOB_MUG + diff --git a/IMG/BBMUG.LOD b/IMG/BBMUG.LOD new file mode 100644 index 0000000..66704cb --- /dev/null +++ b/IMG/BBMUG.LOD @@ -0,0 +1,930 @@ +***> 2000000,1 +; +PON> +XOF> +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> PLYRHD3.TBL +GLO> PLYRHD2.GLO +PPP> 6 +; +hds8.img +XON> +---> WILLIS0,WILLIS1 +GLO> XXXHD.GLO +---> WILLIS2,WILLIS3,WILLIS4,WILLIS5,WILLIS6,WILLIS7,WILLIS8 +---> WILLIS9,WILLIS10,WILLIS11 +---> WILLIS12,WILLIS13,WILLIS14,WILLIS15,WILLIS16 +GLO> PLYRHD2.GLO +---> BROWN0,BROWN1 +GLO> XXXHD.GLO +---> BROWN2,BROWN3,BROWN4,BROWN5,BROWN6,BROWN7,BROWN8,BROWN9,BROWN10 +---> BROWN11,BROWN12,BROWN13,BROWN14,BROWN15,BROWN16 +GLO> PLYRHD2.GLO +---> MOURN0,MOURN1 +GLO> XXXHD.GLO +---> MOURN2,MOURN3,MOURN4,MOURN5 +---> MOURN6,MOURN7,MOURN8,MOURN9,MOURN10,MOURN11,MOURN12,MOURN13,MOURN14 +---> MOURN15,MOURN16 +GLO> PLYRHD2.GLO +---> KUKOC0,KUKOC1 +GLO> XXXHD.GLO +---> KUKOC2,KUKOC3,KUKOC4,KUKOC5,KUKOC6,KUKOC7,KUKOC8,KUKOC9,KUKOC10 +---> KUKOC11,KUKOC12,KUKOC13,KUKOC14,KUKOC15,KUKOC16 +GLO> PLYRHD2.GLO +---> JACK0,JACK1 +GLO> XXXHD.GLO +---> JACK2,JACK3,JACK4,JACK5,JACK6 +---> JACK7,JACK8,JACK9,JACK10,JACK11,JACK12,JACK13,JACK14,JACK15,JACK16 +GLO> PLYRHD2.GLO +---> MASH0,MASH1 +GLO> XXXHD.GLO +---> MASH2,MASH3,MASH4,MASH5,MASH6,MASH7,MASH8,MASH9,MASH10,MASH11 +---> MASH12,MASH13,MASH14,MASH15,MASH16 +HDS9.IMG +GLO> PLYRHD2.GLO +---> DUMARS0,DUMARS1 +GLO> XXXHD.GLO +---> DUMARS2,DUMARS3,DUMARS4,DUMARS5,DUMARS6,DUMARS7,DUMARS8 +---> DUMARS9,DUMARS10,DUMARS11,DUMARS12,DUMARS13,DUMARS14,DUMARS15,DUMARS16 +GLO> PLYRHD2.GLO +---> RODMAN0,RODMAN1 +GLO> XXXHD.GLO +---> RODMAN2,RODMAN3,RODMAN4,RODMAN5,RODMAN6,RODMAN7,RODMAN8 +---> RODMAN9,RODMAN10,RODMAN11,RODMAN12,RODMAN13,RODMAN14,RODMAN15,RODMAN16 +---> RODCLR1,RODCLR2,RODCLR3 +---> RODCLR4,RODCLR5,RODCLR6,RODCLR7,RODCLR8 +GLO> PLYRHD2.GLO +---> WEBBER0,WEBBER1 +GLO> XXXHD.GLO +---> WEBBER2,WEBBER3,WEBBER4,WEBBER5,WEBBER6,WEBBER7,WEBBER8 +---> WEBBER9,WEBBER10,WEBBER11,WEBBER12,WEBBER13,WEBBER14,WEBBER15,WEBBER16 +GLO> PLYRHD2.GLO +---> HORRY0,HORRY1 +GLO> XXXHD.GLO +---> HORRY2,HORRY3,HORRY4,HORRY5,HORRY6,HORRY7 +---> HORRY8,HORRY9,HORRY10,HORRY11,HORRY12,HORRY13,HORRY14,HORRY15,HORRY16 +GLO> PLYRHD2.GLO +---> SMITS0,SMITS1 +GLO> XXXHD.GLO +---> SMITS2,SMITS3,SMITS4,SMITS5,SMITS6,SMITS7,SMITS8,SMITS9,SMITS10 +---> SMITS11,SMITS12,SMITS13,SMITS14,SMITS15,SMITS16 +HDS10.IMG +GLO> PLYRHD2.GLO +---> CAMP0,CAMP1 +GLO> XXXHD.GLO +---> CAMP2,CAMP3,CAMP4,CAMP5,CAMP6,CAMP7,CAMP8,CAMP9,CAMP10,CAMP11 +---> CAMP12,CAMP13,CAMP14,CAMP15,CAMP16 +GLO> PLYRHD2.GLO +---> BAKER0,BAKER1 +GLO> XXXHD.GLO +---> BAKER2,BAKER3,BAKER4,BAKER5,BAKER6,BAKER7,BAKER8,BAKER9,BAKER10 +---> BAKER11,BAKER12,BAKER13,BAKER14,BAKER15,BAKER16 +GLO> PLYRHD2.GLO +---> RIDER0,RIDER1 +GLO> XXXHD.GLO +---> RIDER2,RIDER3,RIDER4,RIDER5,RIDER6,RIDER7,RIDER8,RIDER9,RIDER10 +---> RIDER11,RIDER12,RIDER13,RIDER14,RIDER15,RIDER16 +GLO> PLYRHD2.GLO +---> K_AND0,K_AND1 +GLO> XXXHD.GLO +---> K_AND2,K_AND3 +---> K_AND4,K_AND5,K_AND6,K_AND7,K_AND8,K_AND9,K_AND10,K_AND11,K_AND12 +---> K_AND13,K_AND14,K_AND15,K_AND16 +GLO> PLYRHD2.GLO +---> MORRIS0,MORRIS1 +GLO> XXXHD.GLO +---> MORRIS2,MORRIS3,MORRIS4 +---> MORRIS5,MORRIS6,MORRIS7,MORRIS8,MORRIS9,MORRIS10,MORRIS11,MORRIS12 +---> MORRIS13,MORRIS14,MORRIS15,MORRIS16 +GLO> PLYRHD2.GLO +---> MASON0,MASON1 +GLO> XXXHD.GLO +---> MASON2,MASON3,MASON4,MASON5 +---> MASON6,MASON7,MASON8,MASON9,MASON10,MASON11,MASON12,MASON13,MASON14 +---> MASON15,MASON16 +GLO> PLYRHD2.GLO +---> STARKS0,STARKS1 +GLO> XXXHD.GLO +---> STARKS2,STARKS3,STARKS4,STARKS5,STARKS6 +---> STARKS7,STARKS8,STARKS9,STARKS10,STARKS11,STARKS12,STARKS13,STARKS14 +---> STARKS15,STARKS16 +HDS11.IMG +GLO> PLYRHD2.GLO +---> A_HARD0,A_HARD1 +GLO> XXXHD.GLO +---> A_HARD2,A_HARD3,A_HARD4,A_HARD5,A_HARD6,A_HARD7,A_HARD8 +---> A_HARD9,A_HARD10,A_HARD11,A_HARD12,A_HARD13,A_HARD14,A_HARD15,A_HARD16 +GLO> PLYRHD2.GLO +---> N_AND0,N_AND1 +GLO> XXXHD.GLO +---> N_AND2,N_AND3,N_AND4,N_AND5,N_AND6,N_AND7,N_AND8,N_AND9,N_AND10 +---> N_AND11,N_AND12,N_AND13,N_AND14,N_AND15,N_AND16 +GLO> PLYRHD2.GLO +---> WEATH0,WEATH1 +GLO> XXXHD.GLO +---> WEATH2,WEATH3 +---> WEATH4,WEATH5,WEATH6,WEATH7,WEATH8,WEATH9,WEATH10,WEATH11,WEATH12 +---> WEATH13,WEATH14,WEATH15,WEATH16 +GLO> PLYRHD2.GLO +---> BRAD0,BRAD1 +GLO> XXXHD.GLO +---> BRAD2,BRAD3,BRAD4,BRAD5,BRAD6 +---> BRAD7,BRAD8,BRAD9,BRAD10,BRAD11,BRAD12,BRAD13,BRAD14,BRAD15,BRAD16 +GLO> PLYRHD2.GLO +---> K_JOHN0,K_JOHN1 +GLO> XXXHD.GLO +---> K_JOHN2,K_JOHN3,K_JOHN4,K_JOHN5,K_JOHN6,K_JOHN7,K_JOHN8 +---> K_JOHN9,K_JOHN10,K_JOHN11,K_JOHN12,K_JOHN13,K_JOHN14,K_JOHN15,K_JOHN16 +GLO> PLYRHD2.GLO +---> C_ROB0,C_ROB1 +GLO> XXXHD.GLO +---> C_ROB2,C_ROB3,C_ROB4,C_ROB5,C_ROB6,C_ROB7,C_ROB8,C_ROB9,C_ROB10 +---> C_ROB11,C_ROB12,C_ROB13,C_ROB14,C_ROB15,C_ROB16 +GLO> PLYRHD2.GLO +---> RICH0,RICH1 +GLO> XXXHD.GLO +---> RICH2,RICH3 +---> RICH4,RICH5,RICH6,RICH7,RICH8,RICH9,RICH10,RICH11,RICH12,RICH13,RICH14 +---> RICH15,RICH16 +HDS12.IMG +GLO> PLYRHD2.GLO +---> PAYTON0,PAYTON1 +GLO> XXXHD.GLO +---> PAYTON2,PAYTON3,PAYTON4,PAYTON5,PAYTON6,PAYTON7,PAYTON8 +---> PAYTON9,PAYTON10,PAYTON11,PAYTON12,PAYTON13,PAYTON14,PAYTON15,PAYTON16 +GLO> PLYRHD2.GLO +---> MCKEY0,MCKEY1 +GLO> XXXHD.GLO +---> MCKEY2,MCKEY3,MCKEY4,MCKEY5,MCKEY6,MCKEY7,MCKEY8,MCKEY9,MCKEY10 +---> MCKEY11,MCKEY12,MCKEY13,MCKEY14,MCKEY15,MCKEY16 +GLO> PLYRHD2.GLO +---> BENOIT0,BENOIT1 +GLO> XXXHD.GLO +---> BENOIT2 +---> BENOIT3,BENOIT4,BENOIT5,BENOIT6,BENOIT7,BENOIT8,BENOIT9,BENOIT10 +---> BENOIT11,BENOIT12,BENOIT13,BENOIT14,BENOIT15,BENOIT16 +GLO> PLYRHD2.GLO +---> CHEAN0,CHEAN1 +GLO> XXXHD.GLO +---> CHEAN2 +---> CHEAN3,CHEAN4,CHEAN5,CHEAN6,CHEAN7,CHEAN8,CHEAN9,CHEAN10,CHEAN11 +---> CHEAN12,CHEAN13,CHEAN14,CHEAN15,CHEAN16 +; +ASM> PLYRHD5.TBL +GLO> PLYRHD5.GLO +; +hds13.img +---> BLAYLO0,BLAYLO1 +GLO> XXXHD.GLO +---> BLAYLO2,BLAYLO3,BLAYLO4,BLAYLO5,BLAYLO6,BLAYLO7,BLAYLO8,BLAYLO9 +---> BLAYLO10,BLAYLO11,BLAYLO12,BLAYLO13,BLAYLO14,BLAYLO15,BLAYLO16 +GLO> PLYRHD5.GLO +---> SSMITH0,SSMITH1 +GLO> XXXHD.GLO +---> SSMITH2,SSMITH3,SSMITH4,SSMITH5,SSMITH6,SSMITH7,SSMITH8,SSMITH9 +---> SSMITH10,SSMITH11,SSMITH12,SSMITH13,SSMITH14,SSMITH15,SSMITH16 +GLO> PLYRHD5.GLO +---> KNORMA0,KNORMA1 +GLO> XXXHD.GLO +---> KNORMA2,KNORMA3,KNORMA4,KNORMA5,KNORMA6,KNORMA7,KNORMA8,KNORMA9 +---> KNORMA10,KNORMA11,KNORMA12,KNORMA13,KNORMA14,KNORMA15,KNORMA16 +;GLO> PLYRHD5.GLO +;---> HENDER0,HENDER1 +;GLO> XXXHD.GLO +;---> HENDER2,HENDER3,HENDER4,HENDER5,HENDER6,HENDER7,HENDER8,HENDER9 +;---> HENDER10,HENDER11,HENDER12,HENDER13,HENDER14,HENDER15,HENDER16 +GLO> PLYRHD5.GLO +---> BARROS0,BARROS1 +GLO> XXXHD.GLO +---> BARROS2,BARROS3,BARROS4,BARROS5,BARROS6,BARROS7,BARROS8,BARROS9 +---> BARROS10,BARROS11,BARROS12,BARROS13,BARROS14,BARROS15,BARROS16 +GLO> PLYRHD5.GLO +---> MONTRO0,MONTRO1 +GLO> XXXHD.GLO +---> MONTRO2,MONTRO3,MONTRO4,MONTRO5,MONTRO6,MONTRO7,MONTRO8,MONTRO9 +---> MONTRO10,MONTRO11,MONTRO12,MONTRO13,MONTRO14,MONTRO15,MONTRO16 +GLO> PLYRHD5.GLO +---> RADJA0,RADJA1 +GLO> XXXHD.GLO +---> RADJA2,RADJA3,RADJA4,RADJA5,RADJA6,RADJA7,RADJA8,RADJA9,RADJA10,RADJA11 +---> RADJA12,RADJA13,RADJA14,RADJA15,RADJA16 +hds14.img +GLO> PLYRHD5.GLO +---> CURRY0,CURRY1 +GLO> XXXHD.GLO +---> CURRY2,CURRY3,CURRY4,CURRY5,CURRY6,CURRY7,CURRY8,CURRY9,CURRY10,CURRY11 +---> CURRY12,CURRY13,CURRY14,CURRY15,CURRY16 +GLO> PLYRHD5.GLO +---> ZIDEK0,ZIDEK1 +GLO> XXXHD.GLO +---> ZIDEK2,ZIDEK3,ZIDEK4 +---> ZIDEK5,ZIDEK6,ZIDEK7,ZIDEK8,ZIDEK9,ZIDEK10,ZIDEK11,ZIDEK12,ZIDEK13 +---> ZIDEK14,ZIDEK15,ZIDEK16 +GLO> PLYRHD5.GLO +---> KERR0,KERR1 +GLO> XXXHD.GLO +---> KERR2,KERR3,KERR4,KERR5,KERR6,KERR7,KERR8 +---> KERR9,KERR10,KERR11,KERR12,KERR13,KERR14,KERR15,KERR16 +GLO> PLYRHD5.GLO +---> THILL0,THILL1 +GLO> XXXHD.GLO +---> THILL2 +---> THILL3,THILL4,THILL5,THILL6,THILL7,THILL8,THILL9,THILL10,THILL11 +---> THILL12,THILL13,THILL14,THILL15,THILL16 +GLO> PLYRHD5.GLO +---> CMILLS0,CMILLS1 +GLO> XXXHD.GLO +---> CMILLS2,CMILLS3,CMILLS4 +---> CMILLS5,CMILLS6,CMILLS7,CMILLS8,CMILLS9,CMILLS10,CMILLS11,CMILLS12 +---> CMILLS13,CMILLS14,CMILLS15,CMILLS16 +hds15.img +GLO> PLYRHD5.GLO +---> PHILLS0,PHILLS1 +GLO> XXXHD.GLO +---> PHILLS2,PHILLS3,PHILLS4,PHILLS5,PHILLS6,PHILLS7,PHILLS8,PHILLS9 +---> PHILLS10,PHILLS11,PHILLS12,PHILLS13,PHILLS14,PHILLS15,PHILLS16 +GLO> PLYRHD5.GLO +---> KIDD0,KIDD1 +GLO> XXXHD.GLO +---> KIDD2,KIDD3,KIDD4,KIDD5,KIDD6,KIDD7 +---> KIDD8,KIDD9,KIDD10,KIDD11,KIDD12,KIDD13,KIDD14,KIDD15,KIDD16 +GLO> PLYRHD5.GLO +---> PJONES0,PJONES1 +GLO> XXXHD.GLO +---> PJONES2,PJONES3,PJONES4,PJONES5,PJONES6,PJONES7,PJONES8,PJONES9 +---> PJONES10,PJONES11,PJONES12,PJONES13,PJONES14,PJONES15,PJONES16 +GLO> PLYRHD5.GLO +---> RAUF0,RAUF1 +GLO> XXXHD.GLO +---> RAUF2,RAUF3,RAUF4,RAUF5 +---> RAUF6,RAUF7,RAUF8,RAUF9,RAUF10,RAUF11,RAUF12,RAUF13,RAUF14,RAUF15 +---> RAUF16 +GLO> PLYRHD5.GLO +---> PACK0,PACK1 +GLO> XXXHD.GLO +---> PACK2,PACK3,PACK4,PACK5,PACK6,PACK7,PACK8,PACK9,PACK10 +---> PACK11,PACK12,PACK13,PACK14,PACK15,PACK16 +hds16.img +GLO> PLYRHD5.GLO +---> MCDYES0,MCDYES1 +GLO> XXXHD.GLO +---> MCDYES2,MCDYES3,MCDYES4,MCDYES5,MCDYES6,MCDYES7,MCDYES8,MCDYES9 +---> MCDYES10,MCDYES11,MCDYES12,MCDYES13,MCDYES14,MCDYES15,MCDYES16 +GLO> PLYRHD5.GLO +---> GHILL0,GHILL1 +GLO> XXXHD.GLO +---> GHILL2,GHILL3,GHILL4,GHILL5,GHILL6,GHILL7,GHILL8,GHILL9,GHILL10,GHILL11 +---> GHILL12,GHILL13,GHILL14,GHILL15,GHILL16 +GLO> PLYRHD5.GLO +---> TMILLS0,TMILLS1 +GLO> XXXHD.GLO +---> TMILLS2,TMILLS3,TMILLS4 +---> TMILLS5,TMILLS6,TMILLS7,TMILLS8,TMILLS9,TMILLS10,TMILLS11,TMILLS12 +---> TMILLS13,TMILLS14,TMILLS15,TMILLS16 +GLO> PLYRHD5.GLO +---> THORPE0,THORPE1 +GLO> XXXHD.GLO +---> THORPE2,THORPE3,THORPE4 +---> THORPE5,THORPE6,THORPE7,THORPE8,THORPE9,THORPE10,THORPE11,THORPE12 +---> THORPE13,THORPE14,THORPE15,THORPE16 +GLO> PLYRHD5.GLO +---> SPREWE0,SPREWE1 +GLO> XXXHD.GLO +---> SPREWE2,SPREWE3,SPREWE4 +---> SPREWE5,SPREWE6,SPREWE7,SPREWE8,SPREWE9,SPREWE10,SPREWE11,SPREWE12 +---> SPREWE13,SPREWE14,SPREWE15,SPREWE16 +hds17.img +GLO> PLYRHD5.GLO +---> JSMITH0,JSMITH1 +GLO> XXXHD.GLO +---> JSMITH2,JSMITH3,JSMITH4,JSMITH5,JSMITH6,JSMITH7,JSMITH8,JSMITH9 +---> JSMITH10,JSMITH11,JSMITH12,JSMITH13,JSMITH14,JSMITH15,JSMITH16 +GLO> PLYRHD5.GLO +---> CASSEL0,CASSEL1 +GLO> XXXHD.GLO +---> CASSEL2,CASSEL3,CASSEL4,CASSEL5,CASSEL6,CASSEL7,CASSEL8,CASSEL9 +---> CASSEL10,CASSEL11,CASSEL12,CASSEL13,CASSEL14,CASSEL15,CASSEL16 +GLO> PLYRHD5.GLO +---> DDAVIS0,DDAVIS1 +GLO> XXXHD.GLO +---> DDAVIS2,DDAVIS3,DDAVIS4,DDAVIS5,DDAVIS6,DDAVIS7,DDAVIS8,DDAVIS9 +---> DDAVIS10,DDAVIS11,DDAVIS12,DDAVIS13,DDAVIS14,DDAVIS15,DDAVIS16 +GLO> PLYRHD5.GLO +---> MCKEE0,MCKEE1 +GLO> XXXHD.GLO +---> MCKEE2,MCKEE3,MCKEE4,MCKEE5,MCKEE6,MCKEE7,MCKEE8,MCKEE9,MCKEE10,MCKEE11 +---> MCKEE12,MCKEE13,MCKEE14,MCKEE15,MCKEE16 +GLO> PLYRHD5.GLO +---> VAUGHT0,VAUGHT1 +GLO> XXXHD.GLO +---> VAUGHT2,VAUGHT3,VAUGHT4,VAUGHT5,VAUGHT6,VAUGHT7,VAUGHT8 +---> VAUGHT9,VAUGHT10,VAUGHT11,VAUGHT12,VAUGHT13,VAUGHT14,VAUGHT15,VAUGHT16 +GLO> PLYRHD5.GLO +---> RROGER0,RROGER1 +GLO> XXXHD.GLO +---> RROGER2,RROGER3,RROGER4,RROGER5,RROGER6,RROGER7,RROGER8,RROGER9 +---> RROGER10,RROGER11,RROGER12,RROGER13,RROGER14,RROGER15,RROGER16 +hds18.img +GLO> PLYRHD5.GLO +---> LMURRA0,LMURRA1 +GLO> XXXHD.GLO +---> LMURRA2,LMURRA3,LMURRA4,LMURRA5,LMURRA6,LMURRA7,LMURRA8,LMURRA9 +---> LMURRA10,LMURRA11,LMURRA12,LMURRA13,LMURRA14,LMURRA15,LMURRA16 +GLO> PLYRHD5.GLO +---> PRICHA0,PRICHA1 +GLO> XXXHD.GLO +---> PRICHA2,PRICHA3,PRICHA4,PRICHA5,PRICHA6,PRICHA7,PRICHA8,PRICHA9 +---> PRICHA10,PRICHA11,PRICHA12,PRICHA13,PRICHA14,PRICHA15,PRICHA16 +GLO> PLYRHD5.GLO +---> BBARRY0,BBARRY1 +GLO> XXXHD.GLO +---> BBARRY2,BBARRY3,BBARRY4,BBARRY5,BBARRY6,BBARRY7,BBARRY8,BBARRY9 +---> BBARRY10,BBARRY11,BBARRY12,BBARRY13,BBARRY14,BBARRY15,BBARRY16 +GLO> PLYRHD5.GLO +---> EXEL0,EXEL1 +GLO> XXXHD.GLO +---> EXEL2,EXEL3,EXEL4,EXEL5,EXEL6,EXEL7,EXEL8,EXEL9,EXEL10,EXEL11,EXEL12 +---> EXEL13,EXEL14,EXEL15,EXEL16 +GLO> PLYRHD5.GLO +---> CEBALL0,CEBALL1 +GLO> XXXHD.GLO +---> CEBALL2,CEBALL3,CEBALL4,CEBALL5 +---> CEBALL6,CEBALL7,CEBALL8,CEBALL9,CEBALL10,CEBALL11,CEBALL12,CEBALL13 +---> CEBALL14,CEBALL15,CEBALL16 +GLO> PLYRHD5.GLO +---> EJONES0,EJONES1 +GLO> XXXHD.GLO +---> EJONES2,EJONES3,EJONES4,EJONES5 +---> EJONES6,EJONES7,EJONES8,EJONES9,EJONES10,EJONES11,EJONES12,EJONES13 +---> EJONES14,EJONES15,EJONES16 +GLO> PLYRHD5.GLO +---> BOWENS0,BOWENS1 +GLO> XXXHD.GLO +---> BOWENS2,BOWENS3,BOWENS4,BOWENS5 +---> BOWENS6,BOWENS7,BOWENS8,BOWENS9,BOWENS10,BOWENS11,BOWENS12,BOWENS13 +---> BOWENS14,BOWENS15,BOWENS16 +hds19.img +GLO> PLYRHD5.GLO +---> GROBIN0,GROBIN1 +GLO> XXXHD.GLO +---> GROBIN2,GROBIN3 +---> GROBIN4,GROBIN5,GROBIN6,GROBIN7,GROBIN8,GROBIN9,GROBIN10,GROBIN11 +---> GROBIN12,GROBIN13,GROBIN14,GROBIN15,GROBIN16 +GLO> PLYRHD5.GLO +---> EMURD0,EMURD1 +GLO> XXXHD.GLO +---> EMURD2,EMURD3 +---> EMURD4,EMURD5,EMURD6,EMURD7,EMURD8,EMURD9,EMURD10,EMURD11,EMURD12 +---> EMURD13,EMURD14,EMURD15,EMURD16 +GLO> PLYRHD5.GLO +---> RESPER0,RESPER1 +GLO> XXXHD.GLO +---> RESPER2,RESPER3,RESPER4,RESPER5 +---> RESPER6,RESPER7,RESPER8,RESPER9,RESPER10,RESPER11,RESPER12,RESPER13 +---> RESPER14,RESPER15,RESPER16 +;GLO> PLYRHD5.GLO +;---> MWILLI0,MWILLI1 +;GLO> XXXHD.GLO +;---> MWILLI2,MWILLI3,MWILLI4,MWILLI5 +;---> MWILLI6,MWILLI7,MWILLI8,MWILLI9,MWILLI10,MWILLI11,MWILLI12,MWILLI13 +;---> MWILLI14,MWILLI15,MWILLI16 +;GLO> PLYRHD5.GLO +;---> ROOKS0,ROOKS1 +;GLO> XXXHD.GLO +;---> ROOKS2,ROOKS3,ROOKS4,ROOKS5,ROOKS6 +;---> ROOKS7,ROOKS8,ROOKS9,ROOKS10,ROOKS11,ROOKS12,ROOKS13,ROOKS14,ROOKS15 +;---> ROOKS16 +hds20.img +GLO> PLYRHD5.GLO +---> GARNET0,GARNET1 +GLO> XXXHD.GLO +---> GARNET2,GARNET3,GARNET4,GARNET5,GARNET6,GARNET7,GARNET8,GARNET9 +---> GARNET10,GARNET11,GARNET12,GARNET13,GARNET14,GARNET15,GARNET16 +GLO> PLYRHD5.GLO +---> GILLIA0,GILLIA1 +GLO> XXXHD.GLO +---> GILLIA2,GILLIA3,GILLIA4,GILLIA5,GILLIA6,GILLIA7,GILLIA8,GILLIA9 +---> GILLIA10,GILLIA11,GILLIA12,GILLIA13,GILLIA14,GILLIA15,GILLIA16 +GLO> PLYRHD5.GLO +---> OBANN0,OBANN1 +GLO> XXXHD.GLO +---> OBANN2,OBANN3,OBANN4,OBANN5,OBANN6,OBANN7,OBANN8,OBANN9,OBANN10,OBANN11 +---> OBANN12,OBANN13,OBANN14,OBANN15,OBANN16 +GLO> PLYRHD5.GLO +---> DSCOTT0,DSCOTT1 +GLO> XXXHD.GLO +---> DSCOTT2,DSCOTT3,DSCOTT4 +---> DSCOTT5,DSCOTT6,DSCOTT7,DSCOTT8,DSCOTT9,DSCOTT10,DSCOTT11,DSCOTT12 +---> DSCOTT13,DSCOTT14,DSCOTT15,DSCOTT16 +GLO> PLYRHD5.GLO +---> WRIGHT0,WRIGHT1 +GLO> XXXHD.GLO +---> WRIGHT2,WRIGHT3,WRIGHT4 +---> WRIGHT5,WRIGHT6,WRIGHT7,WRIGHT8,WRIGHT9,WRIGHT10,WRIGHT11,WRIGHT12 +---> WRIGHT13,WRIGHT14,WRIGHT15,WRIGHT16 +hds21.img +GLO> PLYRHD5.GLO +---> STACK0,STACK1 +GLO> XXXHD.GLO +---> STACK2,STACK3,STACK4,STACK5,STACK6,STACK7,STACK8,STACK9,STACK10 +---> STACK11,STACK12,STACK13,STACK14,STACK15,STACK16 +GLO> PLYRHD5.GLO +---> WPERS0,WPERS1 +GLO> XXXHD.GLO +---> WPERS2,WPERS3 +---> WPERS4,WPERS5,WPERS6,WPERS7,WPERS8,WPERS9,WPERS10,WPERS11,WPERS12 +---> WPERS13,WPERS14,WPERS15,WPERS16 +GLO> PLYRHD5.GLO +---> FINLEY0,FINLEY1 +GLO> XXXHD.GLO +---> FINLEY2,FINLEY3,FINLEY4,FINLEY5 +---> FINLEY6,FINLEY7,FINLEY8,FINLEY9,FINLEY10,FINLEY11,FINLEY12,FINLEY13 +---> FINLEY14,FINLEY15,FINLEY16 +GLO> PLYRHD5.GLO +---> STRICK0,STRICK1 +GLO> XXXHD.GLO +---> STRICK2,STRICK3,STRICK4,STRICK5 +---> STRICK6,STRICK7,STRICK8,STRICK9,STRICK10,STRICK11,STRICK12,STRICK13 +---> STRICK14,STRICK15,STRICK16 +GLO> PLYRHD5.GLO +---> SABONI0,SABONI1 +GLO> XXXHD.GLO +---> SABONI2,SABONI3,SABONI4,SABONI5 +---> SABONI6,SABONI7,SABONI8,SABONI9,SABONI10,SABONI11,SABONI12,SABONI13 +---> SABONI14,SABONI15,SABONI16 +GLO> PLYRHD5.GLO +---> BWILLI0,BWILLI1 +GLO> XXXHD.GLO +---> BWILLI2,BWILLI3,BWILLI4,BWILLI5 +---> BWILLI6,BWILLI7,BWILLI8,BWILLI9,BWILLI10,BWILLI11,BWILLI12,BWILLI13 +---> BWILLI14,BWILLI15,BWILLI16 +hds22.img +GLO> PLYRHD5.GLO +---> CHILD0,CHILD1 +GLO> XXXHD.GLO +---> CHILD2,CHILD3,CHILD4,CHILD5,CHILD6,CHILD7,CHILD8,CHILD9,CHILD10 +---> CHILD11,CHILD12,CHILD13,CHILD14,CHILD15,CHILD16 +GLO> PLYRHD5.GLO +---> WWILLI0,WWILLI1 +GLO> XXXHD.GLO +---> WWILLI2,WWILLI3 +---> WWILLI4,WWILLI5,WWILLI6,WWILLI7,WWILLI8,WWILLI9,WWILLI10,WWILLI11 +---> WWILLI12,WWILLI13,WWILLI14,WWILLI15,WWILLI16 +GLO> PLYRHD5.GLO +---> BGRANT0,BGRANT1 +GLO> XXXHD.GLO +---> BGRANT2,BGRANT3 +---> BGRANT4,BGRANT5,BGRANT6,BGRANT7,BGRANT8,BGRANT9,BGRANT10,BGRANT11 +---> BGRANT12,BGRANT13,BGRANT14,BGRANT15,BGRANT16 +GLO> PLYRHD5.GLO +---> MARCIU0,MARCIU1 +GLO> XXXHD.GLO +---> MARCIU2,MARCIU3 +---> MARCIU4,MARCIU5,MARCIU6,MARCIU7,MARCIU8,MARCIU9,MARCIU10,MARCIU11 +---> MARCIU12,MARCIU13,MARCIU14,MARCIU15,MARCIU16 +;GLO> PLYRHD5.GLO +;---> CWILLI0,CWILLI1 +;GLO> XXXHD.GLO +;---> CWILLI2,CWILLI3 +;---> CWILLI4,CWILLI5,CWILLI6,CWILLI7,CWILLI8,CWILLI9,CWILLI10,CWILLI11 +;---> CWILLI12,CWILLI13,CWILLI14,CWILLI15,CWILLI16 +GLO> PLYRHD5.GLO +---> AJOHN0,AJOHN1 +GLO> XXXHD.GLO +---> AJOHN2,AJOHN3 +---> AJOHN4,AJOHN5,AJOHN6,AJOHN7,AJOHN8,AJOHN9,AJOHN10,AJOHN11,AJOHN12 +---> AJOHN13,AJOHN14,AJOHN15,AJOHN16 +hds23.img +GLO> PLYRHD5.GLO +---> FORD0,FORD1 +GLO> XXXHD.GLO +---> FORD2,FORD3,FORD4,FORD5,FORD6,FORD7,FORD8,FORD9,FORD10,FORD11 +---> FORD12,FORD13,FORD14,FORD15,FORD16 +GLO> PLYRHD5.GLO +---> CROGER0,CROGER1 +GLO> XXXHD.GLO +---> CROGER2,CROGER3,CROGER4 +---> CROGER5,CROGER6,CROGER7,CROGER8,CROGER9,CROGER10,CROGER11,CROGER12 +---> CROGER13,CROGER14,CROGER15,CROGER16 +GLO> PLYRHD5.GLO +---> STOUD0,STOUD1 +GLO> XXXHD.GLO +---> STOUD2,STOUD3 +---> STOUD4,STOUD5,STOUD6,STOUD7,STOUD8,STOUD9,STOUD10,STOUD11,STOUD12 +---> STOUD13,STOUD14,STOUD15,STOUD16 +GLO> PLYRHD5.GLO +---> ANTHON0,ANTHON1 +GLO> XXXHD.GLO +---> ANTHON2,ANTHON3,ANTHON4,ANTHON5,ANTHON6,ANTHON7 +---> ANTHON8,ANTHON9,ANTHON10,ANTHON11,ANTHON12,ANTHON13,ANTHON14,ANTHON15 +---> ANTHON16 +;GLO> PLYRHD5.GLO +;---> GATTIS0,GATTIS1 +;GLO> XXXHD.GLO +;---> GATTIS2,GATTIS3,GATTIS4,GATTIS5,GATTIS6,GATTIS7 +;---> GATTIS8,GATTIS9,GATTIS10,GATTIS11,GATTIS12,GATTIS13,GATTIS14,GATTIS15 +;---> GATTIS16 +GLO> PLYRHD5.GLO +---> JHOW0,JHOW1 +GLO> XXXHD.GLO +---> JHOW2 +---> JHOW3,JHOW4,JHOW5,JHOW6,JHOW7,JHOW8,JHOW9,JHOW10,JHOW11,JHOW12,JHOW13 +---> JHOW14,JHOW15,JHOW16 +hds24.img +GLO> PLYRHD5.GLO +---> FOX0,FOX1 +GLO> XXXHD.GLO +---> FOX2,FOX3,FOX4,FOX5,FOX6,FOX7,FOX8,FOX9,FOX10,FOX11,FOX12,FOX13 +---> FOX14,FOX15,FOX16 +GLO> PLYRHD5.GLO +---> LONG0,LONG1 +GLO> XXXHD.GLO +---> LONG2,LONG3,LONG4,LONG5,LONG6,LONG7,LONG8,LONG9 +---> LONG10,LONG11,LONG12,LONG13,LONG14,LONG15,LONG16 +GLO> PLYRHD5.GLO +---> BRAND0,BRAND1 +GLO> XXXHD.GLO +---> BRAND2,BRAND3 +---> BRAND4,BRAND5,BRAND6,BRAND7,BRAND8,BRAND9,BRAND10,BRAND11,BRAND12 +---> BRAND13,BRAND14,BRAND15,BRAND16 +GLO> PLYRHD5.GLO +---> FERRY0,FERRY1 +GLO> XXXHD.GLO +---> FERRY2,FERRY3,FERRY4,FERRY5 +---> FERRY6,FERRY7,FERRY8,FERRY9,FERRY10,FERRY11,FERRY12,FERRY13,FERRY14 +---> FERRY15,FERRY16 +GLO> PLYRHD5.GLO +---> MCCLOU0,MCCLOU1 +GLO> XXXHD.GLO +---> MCCLOU2,MCCLOU3,MCCLOU4,MCCLOU5,MCCLOU6,MCCLOU7 +---> MCCLOU8,MCCLOU9,MCCLOU10,MCCLOU11,MCCLOU12,MCCLOU13,MCCLOU14,MCCLOU15 +---> MCCLOU16 +GLO> PLYRHD5.GLO +---> ROSE0,ROSE1 +GLO> XXXHD.GLO +---> ROSE2,ROSE3,ROSE4,ROSE5,ROSE6,ROSE7,ROSE8,ROSE9,ROSE10 +---> ROSE11,ROSE12,ROSE13,ROSE14,ROSE15,ROSE16 +GLO> PLYRHD5.GLO +---> DELLIS0,DELLIS1 +GLO> XXXHD.GLO +---> DELLIS2,DELLIS3,DELLIS4 +---> DELLIS5,DELLIS6,DELLIS7,DELLIS8,DELLIS9,DELLIS10,DELLIS11,DELLIS12,DELLIS13 +---> DELLIS14,DELLIS15,DELLIS16 +GLO> PLYRHD5.GLO +---> HOUSTO0,HOUSTO1 +GLO> XXXHD.GLO +---> HOUSTO2,HOUSTO3,HOUSTO4,HOUSTO5,HOUSTO6 +---> HOUSTO7,HOUSTO8,HOUSTO9,HOUSTO10,HOUSTO11,HOUSTO12,HOUSTO13,HOUSTO14 +---> HOUSTO15,HOUSTO16 +GLO> PLYRHD5.GLO +---> MJACKS0,MJACKS1 +GLO> XXXHD.GLO +---> MJACKS2,MJACKS3,MJACKS4,MJACKS5,MJACKS6 +---> MJACKS7,MJACKS8,MJACKS9,MJACKS10,MJACKS11,MJACKS12,MJACKS13,MJACKS14 +---> MJACKS15,MJACKS16 +GLO> PLYRHD5.GLO +---> DANILO0,DANILO1 +GLO> XXXHD.GLO +---> DANILO2,DANILO3,DANILO4,DANILO5,DANILO6 +---> DANILO7,DANILO8,DANILO9,DANILO10,DANILO11,DANILO12,DANILO13,DANILO14 +---> DANILO15,DANILO16 +;GLO> PLYRHD5.GLO +;---> COLES0,COLES1 +;GLO> XXXHD.GLO +;---> COLES2,COLES3,COLES4,COLES5,COLES6,COLES7 +;---> COLES8,COLES9,COLES10,COLES11,COLES12,COLES13,COLES14,COLES15,COLES16 +GLO> PLYRHD5.GLO +---> DOUGLA0,DOUGLA1 +GLO> XXXHD.GLO +---> DOUGLA2,DOUGLA3,DOUGLA4,DOUGLA5,DOUGLA6,DOUGLA7,DOUGLA8,DOUGLA9 +---> DOUGLA10,DOUGLA11,DOUGLA12,DOUGLA13,DOUGLA14,DOUGLA15,DOUGLA16 +hds25.img +GLO> PLYRHD5.GLO +---> KEDWAR0,KEDWAR1 +GLO> XXXHD.GLO +---> KEDWAR2,KEDWAR3,KEDWAR4,KEDWAR5,KEDWAR6,KEDWAR7,KEDWAR8,KEDWAR9 +---> KEDWAR10,KEDWAR11,KEDWAR12,KEDWAR13,KEDWAR14,KEDWAR15,KEDWAR16 +GLO> PLYRHD5.GLO +---> KONCAK0,KONCAK1 +GLO> XXXHD.GLO +---> KONCAK2,KONCAK3,KONCAK4,KONCAK5,KONCAK6,KONCAK7,KONCAK8,KONCAK9 +---> KONCAK10,KONCAK11,KONCAK12,KONCAK13,KONCAK14,KONCAK15,KONCAK16 +GLO> PLYRHD5.GLO +---> VMAX0,VMAX1 +GLO> XXXHD.GLO +---> VMAX2,VMAX3,VMAX4,VMAX5,VMAX6,VMAX7,VMAX8,VMAX9,VMAX10,VMAX11,VMAX12 +---> VMAX13,VMAX14,VMAX15,VMAX16 +GLO> PLYRHD5.GLO +---> EDNEY0,EDNEY1 +GLO> XXXHD.GLO +---> EDNEY2,EDNEY3,EDNEY4,EDNEY5,EDNEY6 +---> EDNEY7,EDNEY8,EDNEY9,EDNEY10,EDNEY11,EDNEY12,EDNEY13,EDNEY14,EDNEY15 +---> EDNEY16 +GLO> PLYRHD5.GLO +---> DELNEG0,DELNEG1 +GLO> XXXHD.GLO +---> DELNEG2,DELNEG3,DELNEG4,DELNEG5,DELNEG6,DELNEG7,DELNEG8 +---> DELNEG9,DELNEG10,DELNEG11,DELNEG12,DELNEG13,DELNEG14,DELNEG15,DELNEG16 +GLO> PLYRHD5.GLO +---> WANDERS0,WANDERS1 +GLO> XXXHD.GLO +---> WANDERS2,WANDERS3,WANDERS4,WANDERS5,WANDERS6,WANDERS7,WANDERS8,WANDERS9 +---> WANDERS10,WANDERS11,WANDERS12,WANDERS13,WANDERS14,WANDERS15,WANDERS16 +GLO> PLYRHD5.GLO +---> OMILLER0,OMILLER1 +GLO> XXXHD.GLO +---> OMILLER2,OMILLER3,OMILLER4,OMILLER5,OMILLER6,OMILLER7,OMILLER8,OMILLER9 +---> OMILLER10,OMILLER11,OMILLER12,OMILLER13,OMILLER14,OMILLER15,OMILLER16 +GLO> PLYRHD5.GLO +---> MURRAY0,MURRAY1 +GLO> XXXHD.GLO +---> MURRAY2,MURRAY3,MURRAY4,MURRAY5,MURRAY6,MURRAY7,MURRAY8,MURRAY9 +---> MURRAY10,MURRAY11,MURRAY12,MURRAY13,MURRAY14,MURRAY15,MURRAY16 +GLO> PLYRHD5.GLO +---> MURESA0,MURESA1 +GLO> XXXHD.GLO +---> MURESA2,MURESA3,MURESA4,MURESA5,MURESA6,MURESA7,MURESA8,MURESA9 +---> MURESA10,MURESA11,MURESA12,MURESA13,MURESA14,MURESA15,MURESA16 +GLO> PLYRHD5.GLO +---> BREEV0,BREEV1 +GLO> XXXHD.GLO +---> BREEV2,BREEV3,BREEV4,BREEV5,BREEV6,BREEV7,BREEV8,BREEV9 +---> BREEV10,BREEV11,BREEV12,BREEV13,BREEV14,BREEV15,BREEV16 +GLO> PLYRHD5.GLO +---> DHARP0,DHARP1 +GLO> XXXHD.GLO +---> DHARP2,DHARP3,DHARP4,DHARP5,DHARP6,DHARP7,DHARP8,DHARP9 +---> DHARP10,DHARP11,DHARP12,DHARP13,DHARP14,DHARP15,DHARP16 +hds26.img +GLO> PLYRHD5.GLO +---> Robertsn0,Robertsn1 +GLO> XXXHD.GLO +---> Robertsn2,Robertsn3,Robertsn4,Robertsn5,Robertsn6,Robertsn7,Robertsn8,Robertsn9 +---> Robertsn10,Robertsn11,Robertsn12,Robertsn13,Robertsn14,Robertsn15,Robertsn16 +GLO> PLYRHD5.GLO +---> Chapman0,Chapman1 +GLO> XXXHD.GLO +---> Chapman2,Chapman3,Chapman4,Chapman5,Chapman6,Chapman7,Chapman8,Chapman9 +---> Chapman10,Chapman11,Chapman12,Chapman13,Chapman14,Chapman15,Chapman16 +GLO> PLYRHD5.GLO +---> Lang0,Lang1 +GLO> XXXHD.GLO +---> Lang2,Lang3,Lang4,Lang5,Lang6,Lang7,Lang8,Lang9 +---> Lang10,Lang11,Lang12,Lang13,Lang14,Lang15,Lang16 +GLO> PLYRHD5.GLO +---> Scott0,Scott1 +GLO> XXXHD.GLO +---> Scott2,Scott3,Scott4,Scott5,Scott6,Scott7,Scott8,Scott9 +---> Scott10,Scott11,Scott12,Scott13,Scott14,Scott15,Scott16 +GLO> PLYRHD5.GLO +---> Webb0,Webb1 +GLO> XXXHD.GLO +---> Webb2,Webb3,Webb4,Webb5,Webb6,Webb7,Webb8,Webb9 +---> Webb10,Webb11,Webb12,Webb13,Webb14,Webb15,Webb16 +;GLO> PLYRHD5.GLO +;---> MJohnson0,MJohnson1 +;GLO> XXXHD.GLO +;---> MJohnson2,MJohnson3,MJohnson4,MJohnson5,MJohnson6,MJohnson7,MJohnson8,MJohnson9 +;---> MJohnson10,MJohnson11,MJohnson12,MJohnson13,MJohnson14,MJohnson15,MJohnson16 +GLO> PLYRHD5.GLO +---> Ruffin0,Ruffin1 +GLO> XXXHD.GLO +---> Ruffin2,Ruffin3,Ruffin4,Ruffin5,Ruffin6,Ruffin7,Ruffin8,Ruffin9 +---> Ruffin10,Ruffin11,Ruffin12,Ruffin13,Ruffin14,Ruffin15,Ruffin16 +hdsmsc1.img +;GLO> PLYRHD5.GLO +;---> ROS_00,ROS_01 +;GLO> XXXHD.GLO +;---> ROS_02,ROS_03,ROS_04,ROS_05,ROS_06,ROS_07 +;---> ROS_08,ROS_09,ROS_10,ROS_11,ROS_12,ROS_13,ROS_14,ROS_15,ROS_16 +GLO> PLYRHD5.GLO +---> ANG_00,ANG_01 +GLO> XXXHD.GLO +---> ANG_02,ANG_03,ANG_04,ANG_05 +---> ANG_06,ANG_07,ANG_08,ANG_09,ANG_10,ANG_11,ANG_12,ANG_13,ANG_14,ANG_15 +---> ANG_16 +GLO> PLYRHD5.GLO +---> JOE_00,JOE_01 +GLO> XXXHD.GLO +---> JOE_02,JOE_03,JOE_04,JOE_05,JOE_06,JOE_07,JOE_08 +---> JOE_09,JOE_10,JOE_11,JOE_12,JOE_13,JOE_14,JOE_15,JOE_16 +GLO> PLYRHD5.GLO +---> LIS_00,LIS_01 +GLO> XXXHD.GLO +---> LIS_02,LIS_03,LIS_04,LIS_05,LIS_06,LIS_07,LIS_08,LIS_09,LIS_10,LIS_11 +---> LIS_12,LIS_13,LIS_14,LIS_15,LIS_16 +GLO> PLYRHD5.GLO +---> MEL_00,MEL_01 +GLO> XXXHD.GLO +---> MEL_02,MEL_03,MEL_04 +---> MEL_05,MEL_06,MEL_07,MEL_08,MEL_09,MEL_10,MEL_11,MEL_12,MEL_13,MEL_14 +---> MEL_15,MEL_16 +GLO> PLYRHD5.GLO +---> MIK_00,MIK_01 +GLO> XXXHD.GLO +---> MIK_02,MIK_03,MIK_04,MIK_05,MIK_06,MIK_07 +---> MIK_08,MIK_09,MIK_10,MIK_11,MIK_12,MIK_13,MIK_14,MIK_15,MIK_16 +GLO> PLYRHD5.GLO +---> ALIEN00,ALIEN01 +GLO> XXXHD.GLO +---> ALIEN02,ALIEN03,ALIEN04,ALIEN05,ALIEN06,ALIEN07,ALIEN08,ALIEN09 +---> ALIEN10,ALIEN11,ALIEN12,ALIEN13,ALIEN14,ALIEN15,ALIEN16 +GLO> PLYRHD5.GLO +---> COW00,COW01 +GLO> XXXHD.GLO +---> COW02,COW03,COW04,COW05,COW06,COW07,COW08,COW09,COW10,COW11,COW12,COW13 +---> COW14,COW15,COW16 +GLO> PLYRHD5.GLO +---> GUIDO00,GUIDO01 +GLO> XXXHD.GLO +---> GUIDO02,GUIDO03,GUIDO04,GUIDO05 +---> GUIDO06,GUIDO07,GUIDO08,GUIDO09,GUIDO10,GUIDO11,GUIDO12,GUIDO13,GUIDO14 +---> GUIDO15,GUIDO16 +hdsmsc2.img +GLO> PLYRHD5.GLO +---> BER00,BER01 +GLO> XXXHD.GLO +---> BER02,BER03,BER04,BER05,BER06 +---> BER07,BER08,BER09,BER10,BER11,BER12,BER13,BER14,BER15,BER16 +GLO> PLYRHD5.GLO +---> CHK00,CHK01 +GLO> XXXHD.GLO +---> CHK02,CHK03,CHK04,CHK05,CHK06,CHK07,CHK08,CHK09,CHK10,CHK11 +---> CHK12,CHK13,CHK14,CHK15,CHK16 +GLO> PLYRHD5.GLO +---> FAT00,FAT01 +GLO> XXXHD.GLO +---> FAT02,FAT03,FAT04,FAT05,FAT06,FAT07,FAT08 +---> FAT09,FAT10,FAT11,FAT12,FAT13,FAT14,FAT15,FAT16 +GLO> PLYRHD5.GLO +---> FRA00,FRA01 +GLO> XXXHD.GLO +---> FRA02,FRA03,FRA04,FRA05,FRA06,FRA07,FRA08,FRA09,FRA10 +---> FRA11,FRA12,FRA13,FRA14,FRA15,FRA16 +GLO> PLYRHD5.GLO +---> GOR00,GOR01 +GLO> XXXHD.GLO +---> GOR02,GOR03,GOR04,GOR05,GOR06,GOR07,GOR08,GOR09,GOR10 +---> GOR11,GOR12,GOR13,GOR14,GOR15,GOR16 +GLO> PLYRHD5.GLO +---> GRE00,GRE01 +GLO> XXXHD.GLO +---> GRE02,GRE03,GRE04,GRE05,GRE06,GRE07,GRE08,GRE09,GRE10,GRE11 +---> GRE12,GRE13,GRE14,GRE15,GRE16 +GLO> PLYRHD5.GLO +---> OLD00,OLD01 +GLO> XXXHD.GLO +---> OLD02,OLD03,OLD04,OLD05,OLD06,OLD07,OLD08,OLD09,OLD10,OLD11,OLD12 +---> OLD13,OLD14,OLD15,OLD16 +GLO> PLYRHD5.GLO +---> PIG00,PIG01 +GLO> XXXHD.GLO +---> PIG02,PIG03,PIG04,PIG05,PIG06,PIG07 +---> PIG08,PIG09,PIG10,PIG11,PIG12,PIG13,PIG14,PIG15,PIG16 +GLO> PLYRHD5.GLO +---> WIZ00,WIZ01 +GLO> XXXHD.GLO +---> WIZ02,WIZ03,WIZ04,WIZ05,WIZ06,WIZ07,WIZ08,WIZ09 +---> WIZ10,WIZ11,WIZ12,WIZ13,WIZ14,WIZ15,WIZ16 +hdsmsc3.img +GLO> PLYRHD5.GLO +---> ERI00,ERI01 +GLO> XXXHD.GLO +---> ERI02,ERI03,ERI04,ERI05,ERI06,ERI07,ERI08,ERI09,ERI10 +---> ERI11,ERI12,ERI13,ERI14,ERI15,ERI16 +GLO> PLYRHD5.GLO +---> KIM00,KIM01 +GLO> XXXHD.GLO +---> KIM02,KIM03,KIM04,KIM05,KIM06,KIM07,KIM08,KIM09,KIM10 +---> KIM11,KIM12,KIM13,KIM14,KIM15,KIM16 +GLO> PLYRHD5.GLO +---> MAR00,MAR01 +GLO> XXXHD.GLO +---> MAR02,MAR03,MAR04,MAR05,MAR06,MAR07,MAR08,MAR09,MAR10 +---> MAR11,MAR12,MAR13,MAR14,MAR15,MAR16 +GLO> PLYRHD5.GLO +---> ROH00,ROH01 +GLO> XXXHD.GLO +---> ROH02,ROH03,ROH04,ROH05,ROH06,ROH07,ROH08,ROH09,ROH10 +---> ROH11,ROH12,ROH13,ROH14,ROH15,ROH16 +GLO> PLYRHD5.GLO +---> SEA00,SEA01 +GLO> XXXHD.GLO +---> SEA02,SEA03,SEA04,SEA05,SEA06,SEA07,SEA08,SEA09,SEA10 +---> SEA11,SEA12,SEA13,SEA14,SEA15,SEA16 +hdsmsc4.img +GLO> PLYRHD5.GLO +---> CHEECH00,CHEECH01 +GLO> XXXHD.GLO +---> CHEECH02,CHEECH03,CHEECH04,CHEECH05,CHEECH06,CHEECH07 +---> CHEECH08,CHEECH09,CHEECH10,CHEECH11,CHEECH12 +---> CHEECH13,CHEECH14,CHEECH15,CHEECH16 +GLO> PLYRHD5.GLO +---> CLOWN00,CLOWN01 +GLO> XXXHD.GLO +---> CLOWN02,CLOWN03,CLOWN04,CLOWN05,CLOWN06,CLOWN07,CLOWN08,CLOWN09 +---> CLOWN10,CLOWN11,CLOWN12,CLOWN13,CLOWN14,CLOWN15,CLOWN16 +GLO> PLYRHD5.GLO +---> MADBAL00,MADBAL01 +GLO> XXXHD.GLO +---> MADBAL02,MADBAL03 +---> MADBAL04,MADBAL05,MADBAL06,MADBAL07,MADBAL08,MADBAL09,MADBAL10,MADBAL11 +---> MADBAL12,MADBAL13,MADBAL14,MADBAL15,MADBAL16 +GLO> PLYRHD5.GLO +---> VIKAPE00,VIKAPE01 +GLO> XXXHD.GLO +---> VIKAPE02,VIKAPE03,VIKAPE04,VIKAPE05 +---> VIKAPE06,VIKAPE07,VIKAPE08,VIKAPE09,VIKAPE10 +---> VIKAPE11,VIKAPE12,VIKAPE13,VIKAPE14,VIKAPE15,VIKAPE16 +GLO> PLYRHD5.GLO +---> BEAST00,BEAST01 +GLO> XXXHD.GLO +---> BEAST02,BEAST03,BEAST04 +---> BEAST05 +;,BEAST06,BEAST07,BEAST08,BEAST09,BEAST10,BEAST11,BEAST12,BEAST13 +;---> BEAST14,BEAST15,BEAST16 +---> BEAST16 +GLO> PLYRHD5.GLO +---> JABAL00,JABAL01 +GLO> XXXHD.GLO +---> JABAL02,JABAL03,JABAL04,JABAL05 +;---> JABAL06,JABAL07,JABAL08,JABAL09,JABAL10,JABAL11,JABAL12,JABAL13,JABAL14 +;---> JABAL15,JABAL16 +---> JABAL16 +GLO> PLYRHD5.GLO +---> MDOC00,MDOC01 +GLO> XXXHD.GLO +---> MDOC02,MDOC03,MDOC04,MDOC05,MDOC06,MDOC07 +---> MDOC08,MDOC09,MDOC10,MDOC11,MDOC12,MDOC13,MDOC14,MDOC15,MDOC16 +hdsmsc5.img +GLO> PLYRHD5.GLO +---> AMRICH00,AMRICH01 +GLO> XXXHD.GLO +---> AMRICH02,AMRICH03,AMRICH04 +---> AMRICH05,AMRICH06,AMRICH07,AMRICH08,AMRICH09,AMRICH10,AMRICH11,AMRICH12 +---> AMRICH13,AMRICH14,AMRICH15,AMRICH16 +GLO> PLYRHD5.GLO +---> BARD00,BARD01 +GLO> XXXHD.GLO +---> BARD02,BARD03,BARD04 +---> BARD05,BARD06,BARD07,BARD08,BARD09,BARD10,BARD11,BARD12,BARD13,BARD14 +---> BARD15,BARD16 +GLO> PLYRHD5.GLO +---> DIM00,DIM01 +GLO> XXXHD.GLO +---> DIM02,DIM03,DIM04,DIM05 +;,DIM06,DIM07,DIM08 +;---> DIM09,DIM10,DIM11,DIM12,DIM13,DIM14,DIM15,DIM16 +---> DIM16 +GLO> PLYRHD5.GLO +---> JACKJR00,JACKJR01 +GLO> XXXHD.GLO +---> JACKJR02,JACKJR03,JACKJR04,JACKJR05,JACKJR06,JACKJR07,JACKJR08,JACKJR09 +---> JACKJR10,JACKJR11,JACKJR12,JACKJR13,JACKJR14,JACKJR15,JACKJR16 +GLO> PLYRHD5.GLO +---> JIGGET00,JIGGET01 +GLO> XXXHD.GLO +---> JIGGET02,JIGGET03,JIGGET04,JIGGET05 +;,JIGGET06,JIGGET07,JIGGET08 +;---> JIGGET09,JIGGET10,JIGGET11,JIGGET12,JIGGET13,JIGGET14,JIGGET15,JIGGET16 +---> JIGGET16 +GLO> PLYRHD5.GLO +---> JON00,JON01 +GLO> XXXHD.GLO +---> JON02,JON03,JON04,JON05,JON06,JON07,JON08,JON09,JON10,JON11 +---> JON12,JON13,JON14,JON15,JON16 +GLO> PLYRHD5.GLO +---> MIKE00,MIKE01 +GLO> XXXHD.GLO +---> MIKE02,MIKE03,MIKE04,MIKE05,MIKE06 +---> MIKE07,MIKE08,MIKE09,MIKE10,MIKE11,MIKE12,MIKE13,MIKE14,MIKE15,MIKE16 +GLO> PLYRHD5.GLO +---> MIN00,MIN01 +GLO> XXXHD.GLO +---> MIN02,MIN03,MIN04,MIN05,MIN06,MIN07,MIN08,MIN09 +---> MIN10,MIN11,MIN12,MIN13,MIN14,MIN15,MIN16 +GLO> PLYRHD5.GLO +---> MUND00,MUND01 +GLO> XXXHD.GLO +---> MUND02,MUND03,MUND04,MUND05,MUND06, +---> MUND07,MUND08,MUND09,MUND10,MUND11,MUND12,MUND13,MUND14,MUND15,MUND16, +GLO> PLYRHD5.GLO +---> MXV00,MXV01 +GLO> XXXHD.GLO +---> MXV02,MXV03,MXV04,MXV05,MXV06,MXV07 +---> MXV08,MXV09,MXV10,MXV11,MXV12,MXV13,MXV14,MXV15,MXV16 +GLO> PLYRHD5.GLO +---> NORTH00,NORTH01 +GLO> XXXHD.GLO +---> NORTH02,NORTH03,NORTH04,NORTH05 +;---> NORTH06,NORTH07,NORTH08,NORTH09,NORTH10 +;---> NORTH11,NORTH12,NORTH13,NORTH14,NORTH15,NORTH16 +---> NORTH16 +GLO> PLYRHD5.GLO +---> WIL00,WIL01 +GLO> XXXHD.GLO +---> WIL02,WIL03,WIL04,WIL05,WIL06,WIL07, +---> WIL08,WIL09,WIL10,WIL11,WIL12,WIL13,WIL14,WIL15,WIL16 +PPP> 0 diff --git a/IMG/BBPAL.LOD b/IMG/BBPAL.LOD new file mode 100644 index 0000000..2878958 --- /dev/null +++ b/IMG/BBPAL.LOD @@ -0,0 +1,45 @@ +PON> +; +IHDR PAL:L +; +ASM> junkxxxx +; +;Flesh and uniform pals +anewp.img +---> NPAL1 +---> NPALW1 +---> XSPAL1,XSPAL2,XSPAL3,XSPAL4,XSPAL5,XSPAL6,XSPAL7,XSPAL8 +---> XSPAL9,XSPAL10,XSPAL11,XSPAL12,XSPAL13,XSPAL14,XSPAL15 +---> XSPAL16,XSPAL17,XSPAL18,XSPAL19,XSPAL20,XSPAL21,XSPAL22 +---> XSPAL23,XSPAL24,XSPAL25,XSPAL26,XSPAL27,XSPAL28,XSPAL29 +---> XSPAL30,XSPAL31,XSPAL32,XSPAL33,XSPAL34,XSPAL35,XSPAL36 +---> XSPAL37,XSPAL38,XSPAL39,XSPAL40,XSPAL41,XSPAL42,XSPAL43 +---> XSPAL44,XSPAL45,XSPAL46,XSPAL47,XSPAL48,XSPAL49,XSPAL50 +---> XSPAL51,XSPAL52,XSPAL53,XSPAL54,XSPAL55,XSPAL56,XSPAL57 +---> XSPAL58,XSPAL59,XSPAL60,XSPAL61,XSPAL62,XSPAL63,XSPAL64 +---> XSPAL65,XSPAL66,XSPAL67,XSPAL68,XSPAL69,XSPAL70,XSPAL71,XSPAL72 +---> XSPAL73,XSPAL74,XSPAL75,XSPAL76,XSPAL77,XSPAL78,XSPAL79 +---> XSPAL80,XSPAL81,XSPAL82,XSPAL83,XSPAL84,XSPAL85,XSPAL86 +---> XSPAL87,XSPAL88,XSPAL89,XSPAL90,XSPAL91,XSPAL92,XSPAL93 +---> XSPAL94,XSPAL95,XSPAL96,XSPAL97,XSPAL98,XSPAL99,XSPAL100 +---> XSPAL101,XSPAL102,XSPAL103,XSPAL104,XSPAL105,XSPAL106 +---> XSPAL107,XSPAL108,XSPAL109,XSPAL110,XSPAL111,XSPAL112 +---> XSPAL113,XSPAL114,XSPAL115,XSPAL116,XSPAL117,XSPAL118,XSPAL119,XSPAL120 +---> XSPAL121,XSPAL122,XSPAL123,XSPAL124,XSPAL125,XSPAL126 +---> XSPAL127,XSPAL128,XSPAL129,XSPAL130,XSPAL131,XSPAL132 +---> XSPAL133,XSPAL134,XSPAL135,XSPAL136,XSPAL137,XSPAL138 +---> XSPAL139,XSPAL140,XSPAL141,XSPAL142,XSPAL143,XSPAL144 +---> XSPAL145,XSPAL146,XSPAL147,XSPAL148,XSPAL149,XSPAL150,XSPAL151,XSPAL152 +---> XSPAL153,XSPAL154,XSPAL155,XSPAL156,XSPAL157,XSPAL158 +---> XSPAL159,XSPAL160,XSPAL161,XSPAL162,XSPAL163,XSPAL164 +---> XSPAL165,XSPAL166,XSPAL167,XSPAL168,XSPAL169,XSPAL170 +---> XSPAL171,XSPAL172,XSPAL173,XSPAL174,XSPAL175,XSPAL176 +---> XSPAL177,XSPAL178,XSPAL179,XSPAL180,XSPAL181,XSPAL182,XSPAL183,XSPAL184 +---> XSPAL185,XSPAL186,XSPAL187,XSPAL188,XSPAL189,XSPAL190 +---> XSPAL191,XSPAL192,XSPAL193,XSPAL194,XSPAL195,XSPAL196 +---> XSPAL197,XSPAL198,XSPAL199,XSPAL200,XSPAL201,XSPAL202 +---> XSPAL203,XSPAL204,XSPAL205,XSPAL206,XSPAL207,XSPAL208 +---> XSPAL209,XSPAL210,XSPAL211,XSPAL212,XSPAL213,XSPAL214,XSPAL215,XSPAL216 +---> XSPAL217,XSPAL218,XSPAL219,XSPAL220,XSPAL221,XSPAL222 +---> XSPAL223,XSPAL224,XSPAL225,XSPAL226,XSPAL227,XSPAL228 +---> XSPAL229,XSPAL230,XSPAL231,XSPAL232 diff --git a/IMG/BBVDA.LOD b/IMG/BBVDA.LOD new file mode 100644 index 0000000..6671c10 --- /dev/null +++ b/IMG/BBVDA.LOD @@ -0,0 +1,5 @@ +;Memory ceiling for LOAD2 is $fffff000 (512 bytes below top) +***> fff6ba30 +ASM> BBVDA.TBL +FRM> CHEERS +;FRM> TROPHY diff --git a/IMG/BLANKJAM.BDB b/IMG/BLANKJAM.BDB new file mode 100644 index 0000000..7ea688d --- /dev/null +++ b/IMG/BLANKJAM.BDB @@ -0,0 +1,11 @@ +blankjam 2000 1000 255 1 1 9 +blankjam 448 1041 251 639 +0 471 268 0 0 +0 471 388 0 0 +0 471 508 0 0 +0 651 268 0 0 +0 651 388 0 0 +0 651 508 0 0 +0 831 268 0 0 +0 831 388 0 0 +0 831 508 0 0 diff --git a/IMG/BLANKJAM.BDD b/IMG/BLANKJAM.BDD new file mode 100644 index 0000000..8c36a30 --- /dev/null +++ b/IMG/BLANKJAM.BDD @@ -0,0 +1,130 @@ +1 +0 180 120 1 +    +  +          +  +           +   +    +         +      +        +   +              +    +   +   +  +   +   +   +     +    +   +                  +                   +            + +            + +         +   +          + +          +  + +        +   +   +     +   +            +      +       +                        +       +      +                   +    +      +   +      +   +                 +       +      +            +     +      +          +      +         +    +       + +         + +          +                                    +     +    +  +    +      +              +     +   +     + +   +    + +       +          +        +       +                 +        +        +     +       +      +         +          +    + +    + +     +                                             +    +    +                        +        +          +             +   +      +         +                           +     + +     +  + +      +          +                                               +          +         +                                +      +    +      BNBA_V_P 21 + $ +   $ , ,4 +, +$ +$ \ No newline at end of file diff --git a/IMG/BRUSH10.IMG b/IMG/BRUSH10.IMG new file mode 100644 index 0000000..710fc6c Binary files /dev/null and b/IMG/BRUSH10.IMG differ diff --git a/IMG/BRUSH12.IMG b/IMG/BRUSH12.IMG new file mode 100644 index 0000000..400f594 Binary files /dev/null and b/IMG/BRUSH12.IMG differ diff --git a/IMG/BRUSH20F.IMG b/IMG/BRUSH20F.IMG new file mode 100644 index 0000000..ba138d1 Binary files /dev/null and b/IMG/BRUSH20F.IMG differ diff --git a/IMG/BRUSH50.IMG b/IMG/BRUSH50.IMG new file mode 100644 index 0000000..f672881 Binary files /dev/null and b/IMG/BRUSH50.IMG differ diff --git a/IMG/BUTTONS.IMG b/IMG/BUTTONS.IMG new file mode 100644 index 0000000..37f87db Binary files /dev/null and b/IMG/BUTTONS.IMG differ diff --git a/IMG/CHEER.IMG b/IMG/CHEER.IMG new file mode 100644 index 0000000..dd55c22 Binary files /dev/null and b/IMG/CHEER.IMG differ diff --git a/IMG/CHEERS1.VDA b/IMG/CHEERS1.VDA new file mode 100644 index 0000000..e36ae07 Binary files /dev/null and b/IMG/CHEERS1.VDA differ diff --git a/IMG/CITIES2.IMG b/IMG/CITIES2.IMG new file mode 100644 index 0000000..9281d0e Binary files /dev/null and b/IMG/CITIES2.IMG differ diff --git a/IMG/CITNAMES.IMG b/IMG/CITNAMES.IMG new file mode 100644 index 0000000..355d7a6 Binary files /dev/null and b/IMG/CITNAMES.IMG differ diff --git a/IMG/COLHDS1.IMG b/IMG/COLHDS1.IMG new file mode 100644 index 0000000..8a1abf2 Binary files /dev/null and b/IMG/COLHDS1.IMG differ diff --git a/IMG/COLMUGS1.IMG b/IMG/COLMUGS1.IMG new file mode 100644 index 0000000..3ac93a0 Binary files /dev/null and b/IMG/COLMUGS1.IMG differ diff --git a/IMG/CREDBALL.IMG b/IMG/CREDBALL.IMG new file mode 100644 index 0000000..e3fea94 Binary files /dev/null and b/IMG/CREDBALL.IMG differ diff --git a/IMG/CRTFLR.IMG b/IMG/CRTFLR.IMG new file mode 100644 index 0000000..911a84a Binary files /dev/null and b/IMG/CRTFLR.IMG differ diff --git a/IMG/CRTREF.IMG b/IMG/CRTREF.IMG new file mode 100644 index 0000000..685b51f Binary files /dev/null and b/IMG/CRTREF.IMG differ diff --git a/IMG/CRWDFLR.IMG b/IMG/CRWDFLR.IMG new file mode 100644 index 0000000..8a1d73c Binary files /dev/null and b/IMG/CRWDFLR.IMG differ diff --git a/IMG/DCSLOGO.IMG b/IMG/DCSLOGO.IMG new file mode 100644 index 0000000..4b069a0 Binary files /dev/null and b/IMG/DCSLOGO.IMG differ diff --git a/IMG/DESIGND.IMG b/IMG/DESIGND.IMG new file mode 100644 index 0000000..a54427a Binary files /dev/null and b/IMG/DESIGND.IMG differ diff --git a/IMG/DIAGP.IMG b/IMG/DIAGP.IMG new file mode 100644 index 0000000..75452f4 Binary files /dev/null and b/IMG/DIAGP.IMG differ diff --git a/IMG/ENTER4.BDB b/IMG/ENTER4.BDB new file mode 100644 index 0000000..ff44a10 --- /dev/null +++ b/IMG/ENTER4.BDB @@ -0,0 +1,66 @@ +ENTER4 2000 1000 255 2 13 63 +ENTER4 1342 1800 121 350 +ENTERKIT 685 1168 130 373 +A00 737 270 63 3 +A00 737 166 4E 7 +A00 737 170 6C 12 +F00 745 170 3 0 +F00 750 340 6 0 +F00 750 170 9 0 +E00 800 170 9 0 +F00 812 340 6 0 +A00 836 166 51 8 +F00 846 340 6 0 +F00 846 170 9 0 +F10 927 170 3 0 +A00 937 166 54 9 +A00 937 270 60 11 +F00 939 170 3 2 +F00 944 340 6 2 +F00 944 170 9 2 +E00 987 170 9 2 +F00 999 340 6 2 +A00 1037 166 57 10 +F00 1040 340 6 2 +F00 1040 170 9 2 +F10 1121 170 3 2 +A00 1129 170 78 12 +A00 1381 139 69 12 +A00 1381 143 6C 12 +F00 1389 143 3 0 +F00 1394 143 9 0 +F00 1394 313 6 0 +F00 1394 263 12 4 +F00 1394 225 15 4 +F00 1394 186 18 4 +F00 1394 148 1B 4 +F10 1475 143 3 0 +A00 1483 142 6F 12 +F00 1485 143 3 0 +F00 1490 143 9 0 +F00 1490 313 6 0 +F00 1490 148 21 5 +F00 1490 179 24 5 +F00 1490 219 27 5 +F00 1490 259 2A 5 +F10 1571 143 3 0 +A00 1579 143 72 12 +A00 1581 139 66 12 +F00 1583 143 3 2 +F00 1588 313 6 2 +F00 1588 143 9 2 +F00 1588 261 33 6 +F00 1588 220 36 6 +F00 1588 180 39 6 +F00 1588 148 3C 6 +F10 1669 143 3 2 +A00 1677 142 75 12 +F00 1679 143 3 2 +F00 1684 143 9 2 +F00 1684 313 6 2 +F00 1684 148 42 1 +F00 1684 181 45 1 +F00 1684 219 48 1 +F00 1684 255 4B 1 +A10 1765 143 3 2 +A00 1773 143 78 12 diff --git a/IMG/ENTER4.BDD b/IMG/ENTER4.BDD new file mode 100644 index 0000000..3d2d3bc --- /dev/null +++ b/IMG/ENTER4.BDD @@ -0,0 +1,9327 @@ +32 +63 200 74 1 +  +   + +   + + + + + + + +  + + + + +   +  +   +  + + +       +  +  +        +  +   +  + + +  + + + + + + + + +  + +   +   + +     + +   +   + + +            + +   + + +   + + + + + + +  + + + +     +   +       +   +  + + +    +  + +    + + + +  + + +    +  +       +       + +    + + + +    + + +  +       + +   + + +   +  +            +   +   + + + + +  +   + + + + +         +   +  +  +       +  + +  + +   + +    + + +       + +  +  +  + +   +   +        +  +   +  + + +  + + +  + +   + + +    +   +  +  + + + + +  + +     +              +   + +  + + + +    + + + +  +       +    + +    +  +        +  +    + + + + +  + + +  +  +  +     + + + + + +   +   + + + +         +     + +    + +   +    +  + +   +  + + + +  +  + + + + + +      +         +    +    + + + + +     + +  + +   + + + + +   +  + +  +             + + +   + + +   +   +  + + +     + +  + +   +            +   +  +  + +  + +    +  + +  +  + + + +     + +  +  +   +  +              + +   + +    + + + +     + + + + +   +   + + + + +     +  +  +              + +  +  +   +  +   +  + + +  + + + + + + + + + + + +  + +    +   + +                +     + +   + + + +  + +  + + + +   +   +    +                   +     +  +   + + + +  +       +                       + + + + +   + +   +  + +     + +                       + + + + + +  +  + + +  + + + +                   +   +    +   + + +   + + +                      +   +  +  +   +  + + +  +                      +       + +  +  + + + + + +   +  +                          + + + + + + + + + + +   + +                 +      + +    + + + +   +   +                  + +    +     +                      +    +   + + + +  +                     + +  + + +      +                      +  +     +    +              +   + +    + +   + + +  +  +                     +  + + +   + +  +  + +     +                         + +  + + + + + +   + +     +    +                      +     + +   +    + +   +   + + +  +                       +   + + +  +  + + +   + + + +  +      +                      +  +  + + + +   + + +             +                +    + +  + +   + + +  + + + + +  +                       +  + + + + + +   +   + + + + +    +  +   +                         +  +  + + +  + +  +  + +                 +   +   +  + + +    + +   +  +                 + + +  + + + + + +  + +  + +  +         +              +  +  +  + + + + +   + + + + + +  +   +                    +  +    + + + + +  + +  + + +    +  +        +  +                 +   + +  + + +   + + +     + + +                     + + + + + +  +    + + + + +     +      +         +    +  + + + + + +  + + + + +                         +  +  + +    + + +   + + +  +      +   +                  + + + +  +   + + + + +        + + +              +     + + +  +  +   + + + + +   +     +                    + +     + +  + +    + +      + +                +  +  + + +   + + + + + +   + + + +      +  +                +   + + +   +  +     + + +        + +            + +  + +  + +  + +     +   +      +  +                        +  +  + + + +     +     + + +  + +                 +  + +  + + + + + + + +    + + +     + +  + +              +   + +          + + +     +               + +      + + +       +    + +                    +    +   + +  + +   +  +  +    +  +               +   + +     + + +  + +    + +  +  +                  + +    + + + + + +   + + + + + +  +            +   + +     + + + +     + +  +                 + +        +     + +   +                +   + +  +      + +   +  +               +  +    + + + + + + +    + +  +                 +   + + + + + +  + +   + + + + +                   + + +     + + + + +   +   + + + + + + +  + +  +                 +  +     + + + +  +   + +                      +   +   + +  + +       +   +                 +     +  +  + + + + + + +      + +                 +  + +  + +      + +  +       + + + + +                 + +        + +         + +                  +   +     + + + +     + +  + +                     + + + + +   +   + +                 +   +   + + + + + +   + + +   +  +           +      + + + + + +   + + +  +      4E 100 104 1 +  + + + + +  + + + + + +   + + + +  +          + + + + + +  + + +   + + + +        + + + + + + + + + + + +    + + +   + +           + + + + + + + + +  + + +  + + + + +           + + + + + +  + + +  + + + + + +           + + + + + + + + +  + + + + + +            + + + + + +  + +  + + + + + +        + + + + + +    + + + + +  + +        + +   + + + + + + + +            + +    + + + + + + + +             + + + +  + + + + + + + +            +  +  + + + + +  + + +         +  + + +  + + + + +  + + +              +  + + + +  + +              + +  +  + + + +  + + +   + + +         +   +  + + + +    + + + + + + + +   +     +   +  + + +   + + + + +  + + +      + + +     + +  +  + + +  + + + + + +      + +    + + + + + +   + + +  +  + + + + + + +    + +     + + + + + + + + + + + + + + + + + +   + + +    +    + + + +   + + + +  + + + + + + + + + + +  +    + +      + +  +  + + + + +   + + + +  + +     +     + + + +  + + +  + +   + + + +     +        + +  + + + + +   + +  + + +  +    + +      + + + + + + +   + + + + + + +             + + + +  + +   + + + + +       + +  + + + + +  + +       + +    + + + + +  + + + +   + + + + + +    +    + + + +   +  + +  + +  + + +   +    +     + + + + +  + + + + + + + +   +    +       + + + + + + + +  + +  + + + + + +      +  +   + +  + +  + + + + +  + + + +  + + + + +      +  +    + +  + + + + + + +   + +  + +  + + +    +  +     + +  + + + + + +   + +  + + + +  + +    +  +      + + + + + + + + + + + + + +  + + +   + + +   +     +  + + + + +  + + + + + +   + +  + + +  + + +   +       + + +  + + + + + +  + + +   + + +    +  +        + + +  + +  +  + + +  + + +  +  +        + + + + + + + + + + + +  + +  + +  + + + +    +  + +      + +   + + + + + + + + + + + + + +  + + + + +          + +  +  +  + + + + + + + + + +  + + + +      + +  +    +   + + + + + + + + + + +  + + + + + +      +       + + + + + +  + + + + + + + +  + + + + +      +   + +  + + + + +   + + + + + +   + + + +    +     +     + + + + +  + + + + + + + + + + + + + +   + + + +         + + +    + + +    + + + + + + + + + + + + +  +   + +    + + +  +        + + + +  + + + +  +   +     + +     + + + + + + + +  + + +    +   +      + +     +  + + + + + + + + + + +  +              + + + + + + + + + + + +  + + + +        +    + +     + + + + + + + + + + + + + +  + + + + + + +       + +   +   +  + + + + + + + + + + + +  + + + + +      +     +      + + + + + + + + + + + + +  + + + + +         + +     + +   + + + + + + + + + + + + + + + +    +    + +      + + + + + + + + + + + + + + + + + +  + + + + +   + +   +        + +  + + +  +  + + + + + + + + + +     +  +    +  +     +  + + + + + +  + + + +         + +  +   + + + + + + +  + + + + + + +  +       +        + + + + + + + + + + + + +               + + + + + + + + + +  + + +    + +    +      + + + + + +  + + + + +  + + +    +   +  +       + + + + + + +  + + + + +  +    +   + + + + +  +   +  + + +  +   +  + + +       +  + +  +     + + +  + + + + + + + + + +   + +   + + +   + +    +  +       + + + + + + + + + + + +     + +  + + +   +     + + +    + + + + + + +  + + +    + + +  +     +  +        + + + + + +  + + + + +  + + +     + + + + + + + + +    +   +    +   + + + + + + + + + +  +  +  + + + +   +    +    +   + +  + + + + + +    +  + +  + + + +   +         +   + + +  + + + + + +    + +  + + + + +    +          + + + + +    +  + + + + + +    + +     +  + +    + +  + + + +    +  + + + + + + + +     + +    +     + +  +  + + + + + + +  + +    +     + + +   + +  + +   + + +  + +  + +       +   + + + +    +      + +   + + +    + +  +  + +  + + + + +  + + +     + +  +  + + + +  +  + +    +    + + +   + + + + + +  +   + + + +     + + + + + + + + + +      + + + + + + +    +  +      + + + + + + + +  +       + + + + +    + +  +    + + +  + +   +    + + + + + +  +  + +    + + +  + +     + + + + + +         +    + + + +  +    + + +      + +   +  + +  + + + + + + + +  + + +  +  +   + + +   + + + + + + +    +    +   + + + + + + +  + + + + +  + +  + + + + + +     + +    + + + + + + +  + + + +  + + +  + + + + + +  + + + +   +   + + + + +  +  + + + + + +  + + + +  + + + +      + + + +  +  + + + + + + + +    + +  +  + +   + +  + +    + + +  + + +  + + + + + + + +  +  + + +  + + +   + +     + + + + + + + +  + + + + + +  + + + + +   + +   +     + + + + + + +  + + + + +    + + + +   +  + + + +     +  + + + +  + +  + +       + + +      + + +        + + + + + + + + +   +      + + + + +  + +       + + + + + +  + +       + + +  + +      + + + + + +  + + +     + + +  + +        + + +  + + + + + + +   + + + +  +     + + + + + +  +  +    + + + + + + +     +  + + + + +   + +  +      +  + + + + +   + + +  + +  + +   + + + +   + +  + +   +    + +    + + + + +  + +     + + +  + +    +  +  + + + + + + + +    +   +   +  + + + +   +   + + + +   +  + + +     + + +  +  +  + + +  + + + +  + +    + + +  + +  + +  + + + + +    +       + +  + + + +   +    +  + + + + + +   +  +  + + +  + +    + + +   + + + + + + +  +   + + +  + + + +   + + + + + + + + +    + + + + 6C 8 174 1 + + + +  +   +     + + +  +   +   + +   + + +  + +  +  + +     +   + +  + +     +  +   + +  +  +  + +  + + +   +   + +  +     + +  + +     +   +    +    + +  + +     +    +     +   +   + +  +   +  +   +  +  +   + + + + + + +  + +  +  +   +   + + +  +   +    + +  + +     + +  + +  + +  + + + +    +   +   + + +   + +   + + +  +  +   +  + +  + +  +  +  + +  + + + + +  + + +  + + + +  + + + + + + + + +  + + +  + +    +    +   +  +  + +  +   +  +  +  +     + + +   + +    +  + + +   + +    +     +  +   +  +   +   +   +  +       + +   +    +  +  +  +   + +   +  +   +    + +    + + + + +    +      +    + +3 8 175 1 +]V]]V]OOSOcHHHHiBBBCn;;;;n;155n<155n;113nB+11nB*-1iH*,-iO(*-iP&**iV&(*i]"'(cc &(gi$(ci"&ck"&ci"]i!"]e"]c&]c&]c'Vb)V]+T]-V]1O[5OV;OV@OVHOVOIVVN]] O]a H]cO]cH]cHYcHV`DVaBV]BV]AUWHOD?HVH>LROBHVH +BHVH DNVH GHVO HKVO HLVP JIVV HNVV HHVV OOVV OIVV UOYV OV]VVV]VVV][V]]]VXa]]`cb_]cc`cfc"cchg"ccfc&ccig&ciic(giic(iijc*iiic*iimc*iin]*inmX*iil\*ikj[*iim\*iikV+imnV,iinV-iilV-iinS-imnV1iknP1imnU1ilnO2iinO1inoM5iknK3inrH5insH5insH9insE:nnpG9knsB;nnsF;knsB;nnsB;nns@;nns?;BBHHMOPVVOROOPPOOROVVPOMHHBB;?>BBBCB?=@BDHOOOOSPUTOOH;BBssssssprsqsssssrpsssopssnsnsssnspsssssssssssssssssspsnsssnsnssposssprsssssqsrpssssss51 104 104 0 + + +  + + + + + +  + + + + + + + + + +    + + + + +  + + + + +    + + + + + + +  + + + + + + + + +  + + + + + +  +  + + + + + + + + + +  + + + + + + + +  + + + + + + +  + + + + + + + +  + + +    + + + + + + +   + + + + + + + + +  + + + + + + + + +   + + + + +   + + + + + +       + + + + + + +   + + + +    +  + + + + + +     + + +  + + + + + + +   + +  + + + +     + + + + + + +    + + + + +    + + +  +  + +  +  + +   +   + + + + + +    +    + + +    +   + +  + + + + +  + +   + + + +      +  + + + + + + +     + + + +      +  + + +    + +   + + + + + +          +       + + + + +    +   + + + +     + + + + +     +     + + + +        + + + + +  + + + + + +  +    + + + +  +       + + + +   +     + + + + +   + +   + + +    +  +    + + + +    + +  + +   + +    +  +    + + + + +    + +  +   + + + + +    + +  +  + + +        +      + +    +    + + + + + +      +   + +     +         +  + +       +  + +     +      + + +         + +    +         +  + +            + + +          +  +    +  + + + +         + + +    +       + + + +  +         + + + + +       +   +          +        +  +        +   + +         + +  +       +       +      + + +           +                    +  +  +            +  +              +           +   + +   +                   + +    + +             +     +    + + +  +        + + +           + + + +      +   + +  +      +    + + +     +   +     + +      +        +        + + +      + +                           + +  +    + + + +        +          +  +    + +    +   +    +         +  + +   +54 100 104 0 +         + + + + +     +  + +   + +     + +    + +  +         +    +     +   + +   +  + +  +      +  +    +          +  +  +    +  + + +  +  +         + + +    +      +   + +   +   + + + +    +  + +  + + + + + + + + + +        + + + + + + + + + + + +       +   + + + + + + + + + + +    + + +   + + + + + + + + + + + +    + + + +  + +  + +  + +    + + + +  + + + + + + + + + + + + +  +   + + + + + +    + + + + + + + +   + + + + + + + + + + + + + +    +      + + + + + + + + + + +  + + + + +   + + + + + + + + + + + + + +  + + +     + + + + + + +   + + +   + + + + + + + + + + + + + + + +  +     + + + + + + + + +  + + +   +  + + +  + + + + + + + +    + +   +  + +   + + + + + + + + + + + +  +   +  + +   +     + + + + + + + + + +   +      + + + + + + +  +  +   + +  + + + + + + + + +       +  + + + + + + + + +  +       +   + + + + + + + +  +  + +     +  + + + + + + + + + + +       +    + + + + + + + +  + +     +      +   + + + + + + + +   +         + + +   + + + + + +  + +   +    +  + + + + + +        + + + + + + + + +   + +   +  + + + +  + + + + + + +      + +     + + + + + + + + + + +  +    + + +  + + + + + +  +   +   + +   + + +  + + + + + +     +   + + + + + + + + + + + + +     + +  + + + + +  + +      +     + +  + + + + + + + +  + +       +   +  + + + +  + + +   + +   + + +  + +   + + +  +     +    + + + + +   + +  +   +   + + +  + + + +   + + + + + + + +    + + + + + + + +    + +        + +  +  + + +   +        + + + +  +  + +    +  + + + + + + + + + +   +  + +  +   + +  + + + + + + + + + +   + + +     + + +  + + + +  + + + +    + +   +    + +  + + + + +  +   + +    + +   + + + + + + +  +   + +     + + + + +   + + + +   +  + + + + + +  + + + + +  + +     + +  + + + + + +  +  + + + + +    + +   + + + + + + + +  + + + + + +  + + +   + + + + + +  + + + + + +  + + + +   + + + +  +  + + +   + + + + +  +    +  + + + +  + +  + + +  + +     +  + + + + + + + + + + +  + + + + + +    + + + +  + + + + +   + + + + + +  + + + +     + + + +   + +  + + + + + + + + +   + + + + + +  + +  + + + + + + + + +  +  + + + + + + + + + + + +  + + + + + + + + + + +  + + + + + +  +  + + + + + + + + + + + + + +  + +  + +  + + + + + +  + + + + + + + +  + + +  + +   + + + + +    + + + + + + + + + + +  +   + + + +  + + + + + + + + + + + + + + + +  + +  + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + + + +  + + + + + + +  + + + + + + + + +  + + +   + + + +    + + + + + + + +  + + + + + + + + + +  + + +    + + + + + + + + + + + + + + + + +  + + +  + + + + +   +   + + + + + + + + + + + +  + + + + +   + + + +  +  + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + +  + + + + +   + + + +  + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + +  + + + + +   +  + + + + + + + + + + + +  + + + + + + + +  +  + +  + + + + + + + + + + + + + + +   + + +  + + + + + + + +  + + + + + + +  +  + +   + + +    + + + + + + + + + + +  + +  + + + + + + + + +   + + + + + + + + + + + + + + + +   + + + + + +  +  + + + + +  + + + + + + + + +       + + + + +  +  + + + +  + + + + + + + + +   + + + + + + +  + + + + + + +  + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + +    + + + + + + + + + +  + +  + + + + + + + +  + + + + + + +   + + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  +   + + + + + + + + + + + + + + + + + + + +  + + + +   + + + + + +  + + + + + + + + + + + + + + + + + + + +  + + + + +     + + +  +  + + + + + + + + + + + + + + + + + + + + + +  + + +   + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + +    + + + + + + + + + + + + + + + +  + + + + + + + + +      + +  + + + + + + + + + + + +  + +  + + + +  + + + + + +  +     + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + +  + + + + + + + + + + + + + + + +  + + + + + + + + + + +60 200 74 1 +       + +   +  + +    +   +  + + + + + +     +     +      + +   + + +  + + +   +          +   +  + + +    + + + + + + + + +          +       + + + + +      + +  +    + + +  +   + + + + + +     +     + +  +    + +      + + + + + +            +   +   + +   +      + + + + + +        +    +   +  + +    +    + + + + + + + +           +   +  +  +  + + + + +  + + + +                + +   + +    + + + +        +     + + +  +     +      + +  + + + + + + + +                    +     + +    + + + + +           +  +    +  + +       + + + + + + + + +                 +  +     + +   + + + +  + +  +           +     + + + + +    + +   + + +  + + + + +           + +       + + +    + +  + + + + + + + +  +         +       + +     + + + + + + + + + + +  + +         +  +    + +   +     + + + + + + +  + + + +        +  + +  + +   +    + + + + + +       +      +  +   +  + + +       + + + + + +  + +                + + + + +    +      + + + +  + +  + + + + + +         +    +  +    + + +   +     + +  + + + + + +  + + +      +  + +       + + + + + + + +   + + +      + +  +  +   + +    +   + + +  + + +  + + +  +  + + + +            + +   + + +   + + +   +      + + + + +  + + + + + + +      +       + +    + +  +   +    +  + + + + + + +  + + + + + + +        +  +  +     + +  + + +   +  + + + + + + + + + + + +  + + + + + + + +      +     +  + +  + + + +        + + + + + + + + +  + + + + +          +  + +     + +   + + + +  + +  + +  + + + + +             +    +  + +  + + +      + + +  + + + +  + + + + + + +            +    + +      + + +  + + + + + + + + + + + +            +     +  +     + + + + + + + + +  + + + + +          +  +        + + + +      + +  + + +   + + + +                  + + + + + +    + +    + + + +  + + + + + + +               + +    + + + +  + + + + + + + +    +    +    +  + +   + + +  + +  + + +  + + + + +  + +        +       + + +  +  +    + + + + + + + +  +  + + + + + +       +       + + + +      + + + +  + + + +  + + + + + + + + +             + + +    + +  +  + + + + + +    +       +     + + + +   + + + + + + +  + + + +     +        + + + + + +  +  + + +   + + +  + +  + +  + + +  +     +  + +     + + + +     + + +  + + + +  + + + + +   +           +   + + +   + + + + + + + + + + + +        +  + +  + +   + + + + + + +  + + + + + + + +   +      + + + +      + + +  + + + + + + + + +         +    +   +  + +   + + +  + +  + + + + + + +  +        + +    + + + + + + +  + +  + + +    +   +   +  + + + + + + + + + + + + +  + + + + + + + +    + +      + +  +   + + + + + +  + + + +  + + + + + +    +  +  + + + + +       + + + + +   + +  + +  + + + + +       + +     + +   + + + + +     +   +    +    + +  +  +  + +       +     + +    +  +  + + +  + + + +          +   + + + + +  + +    +    + + +            +  + +   + +  +    + +   + + + + +             + +  + + + +   +  + + + + +  +    +    +   + + + +   + +  + + +         +  +    + +  + + +   +   +           + + + +   + + + + +   + + +   +       +   +  +   + + + + + + + + + + + + + +            + + + + + + + + + +           + +  +  + + + + + + + + + + +         +     + + + + + + +   +       +       + +   + +  + + + +  + +  +   +   + +   + + + +  +  + +   + + + + + + + + + + +           +     + + + + + + + + + + + + + + + + + +         +      +   + + + + + + + + + + + + + +       +    + + + +   + + + + + + + + + + + + + + + + + +       + +    +      + + + + + + + + + + + + + + + + + + +         +      + + + + + + + + + + + + + + + + + + + + + + + + +          +      + + + + + + + + + + + + + + + + + + + + + + + + + + +                + + + + + + + + + + + + + + + + + + + + + + + + +   +         +    +  + + + + + + + + + + + + + + + + + + + + +   +    + +    +        + + + + + + + + + + + + + +57 100 104 0 +                                   +                                                           +                +                                                                    +                                                                     +                                           +           +           +             +    +             +         +                     +      +        +           +           + +     + +             +          + + +     +                  +   +           + + + +  +                + +  + + + +             +   + + + + +                    + +  + +                   + + + + + + +      + +       +   + + + + +   +    + + + + +   + + +   + + + + + +     + +        + + +    + +  + + +    + + +    + + + +    + + + +       + + + +       + + + +    + + + +       + + +          + +  + + + + +    +  + +       + + + + +   + + + +  + +   + + + +   + + +  + + + + +    + + + + + +   + + + +   +  +       +  + + + +  + + + + +       + +           + + + + + + + + + + + +    + +  +   +  + + +  + +    +  + + + + + +  + +   + + + + +  + +       + +  + + + + + + + + +   + + +   + + + + + + +         + + + + + +  +  + + + +  + +  + + + + +  + + +       + +   + + + + +  + + + + + + + + + + +  + + + + + + + +        + + + + + +  + + + + +     + + + +  +    +    + + +  + + + + +  + + + + +  + + + +  + + + + +       + + +  + + + +   + + + + + + + + + + + +  + + + + +          + + + + + + + +  + + + + +  + + + + + + +  +        + + + + + + +  + + + + + + + + + + + + + + +  + +  + +   +    + +  + + + + +  + +   + + + + + + +   + + + + +   +  + + + + +  + + + + +   + + + + + + + + +  + + + + + + + + +        + +    +  + + + + + + + + + +   + + + +  +       + + + + + + +  + + + + + + + + +   + + +   +      + + +  + + + + + +  + + + + +     + +  +  + +     +    + + + + + + + + + +  + + + +    + + +   + +         + + + + + +  + + + + +     + + + + + + + + + +       +  + + + + + + + + +  + +      + + + + + + + + + + + + + + +  78 8 174 1 +     +                      +   +     +              +     +                         +                                                                                                                                                                                                           69 204 4 1 +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   +  +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 84 50 1 + + +      + +  + +      +    +     + +    +   + +  +   + +  +  +   +  + + +   +   + + +     +  + + + +   +      +   + + + +   + + +          + +  +   +   +       +  +  +  +       +        + +  + +      +   + +  +  +   + + +  +  +    +   +  + +  + +   + +     +   + + +  + + + +        +  + + + +  + + + + +  +   + + +  + + +   + +  +  + + +  + + + + + +   + + + + + +     +    +  +   + +  + +     +   +  +  + + +  + + +   + +   + +  + + +   +  +   +  + + +  + +      + + + + +  + + + + +  +     + + + + + +   +  + + +    + + +    + + +  +  +   +  +   +  + + +   +  +     +   +  + + +    +         + + + + + + +    +  +   +  + + + + +   +  + + + + +     + + +  +  +  +     +  + +  + + +    + +  + +  +  + +   +  + +           +    +    + +   +       + +      +  +        +  +   +       +  +  + +  +  +            +  + + + +   + + +  +   +   + + + +  + + + +   + + + + +  +   + + +  + +  + + + +  + +       + +   + +    +    + + +  +  + + + +  + + +   +  + + + + + +   + + + + + + +  +  + +    + + +    + +  +    +    + + + + + + +  + +             + +   +  15 84 38 1 + + + +  + +  )/)(      +  + + + + + +  +   +  ()/  +  +  +    + + + + + +    ()(  + +  + +   + + + +  +  ( ! +  + +   +  +   +      +     + +  +            +   + + + + +     +  +  + +       !(   + +   +   + +   +(+  + +  +   +    ((  ! + + + +  +   +    ((   +  + +  +  +  +   +   +   +(+    +  +    + +   +    ((   +  + + +      +   +   +   +  + +      + + + +   + +       +    +  +  +  + +          + + +   + +   +  +   + +        + + +  +       +       +   + + +     + + +   +    +  + + + +    + +   +   + + +   + +  +  + + +   +    + + + +  + + + +   +   +       + + +    + +  +  +     +   +      +   + + + + +    +   +    + + + +  + +   + +  +   +  (  + + + + + +  +     + +  + +  + + + +   +   +   + + +    + + +  + + + +  +   + +      + + +  + + +  +       + +       +    + +  +  + +  +   +      +  +   +   +  + + +       + +   + +    + + + +  +    + + + +   + +  + + +         +  +  +   +  + +  +     +      +  + +    +  +   +   +   +        +   + +    + + +   + +   + + +    + +   +   + + +  + +  + +  18 84 39 1 + !"##  #$$%%&"'""'$())(((()))))))(*&! &+#%, %   + +!! !""&-%'"%# !' +)))((())))))))(+&!".$.##%   +!%# !"""#%#$-# %#- #()))(()))))))))(+. .,!,    + + '" '+$--% " " $-#.%,))((())))))))))($#'%$'%$, +    !" !$&# " "'&...-#&()(((()))))))))(*$"%,$. , +   + '!.% "!' #!'**&.&$$)))(((()))))))))(*,"'.$.. %    + '!# ''" "''##"+($--$+()/))((()))))))))(+!'#%$ ,    ! + %#!'"!!' %# '%+$..$$$*)//)((()))))))(((+# %#,, $, +     + %% '''% "'"" #.,,,$)//))(())))))(((+$% %#,%, +   + + %'!'!''!" "'!!!".,&&$)//))))))))))((+$ ' $$$,% + + +!  ! ''!!"!!'"''".#.+)//))))))))))(+$ %"%$$$$ ! +   ! "!!!'" "!'#$()/)))))))))))(+,#  % $$$  +   +  + + +'%#%%..''!,)//)))))))))))(+,'% ,  !  + +   +!  '!%%%%%#####% %)//)))))))))))(+,,$$ + +   +  ! %% .%%%###.# %+)/))))))))))((+,,+% +   ! %'!!%%%%###. )/)))))))))(((+,!! ! + + + + + +!  +!%%#####...,$+)//)))))))(((((+,%'! '' + +     + + +!%%%###...,$()//)))(((((((((+,%!! + + !!   +    + +  ! +! %%%%# #$,,()//))(((((((((++,%! ! +!     + + + +!! '!!' %%%#$$,$()//))(+++(((((++,%'% +  +!   + +  + + + +!!! %%''!!#$+()//)(+$$$+++((++,%' ! +    + + +   + + +! %%" ,$,$)//))( ,$++(++,!! + + +    +  + +!!!,+$)//))($ %% $+++!  + ! +  + +     + + +!'%  !!##+)//))($ $++,"! +!    +  +  +!%  '!%()//))(  ,$$ ! + + + +    +     %%%  !!  +)//))(      +   + +  +   + +  !%%%%!' '',)//))(% !! + +  + + + + +   +%%%  % )//))($  ' +  +   +   + +  + +!%%% '% ' + (//)(( % ',  + +      +   !% + +! +  )//)(+ +         !! + !! )/))(+  ! +   + + +    ! + % +  '(//))(+  + + +   + +    ! +   !!)//))(+$  + +      +    + !+))))(+, ! + +     +    !  ! //))(  +   + + ,  +! + ' +//))(  + +  + + + +   +   +//))+ +  +   + +  + + +    ,  (//)(      + + + + + + + !   (/))      +1B 84 38 1 +01 2223332100.&94994455444455-%#.9555599559&:55996% 773333371 11133332110,899554445955545:&&%#-955999559695449:.#%% 3373333371 117333332112 $95:;44444;-555%;:6:::9995995556;5449:.#&#"333333333371 11237010 &*95;:544456654& .&&;95559::9456-9559;;:6;-.!277373333711123377201.*995595455559; '%;;9599669556;6549&#*999:& + 2777233337111233372771.*9445954444-'".&99969445:#;9445*6959-;. +77007773217223332277 ,&!!64444:6445#"!'%:;&69;&;545:.*9555*-659;%% +777027777777223333211277 -.:4444#"55# !!%69*9559-9596&;4449-&699.#&#%# 7722777770007273333011111 .#;;654596%9"";96:5599545-.9449&&&*99#%:6:--# +207777770111123333011111 + + %#&*9*94999*:'! #.;::659*944*.-9559;.:9999-;*6:.#7777772000103330110011 !.:95499544*%" %#&;&.;:69959#;5449#%-955*&.&.&- "372000010111077#.699995446%''.-&69*96666&-9449;.;9496&..::%" .;!337000020721111122 %'.*59955.'!"%%%-99999599.#:959;#:449;.%#:99.%&*6;,#37010117222110 '"-*955&%!!%*:.-*999549&:9549#%-949;..##69.%-<*;;$. 333770111711771111 + ' -:5:%'!".*9*:;:;999:&;9445*&-949;##&-;;###*9*6:&% 330007111022111  .9;!! ;*6-;9966:&%9944:&:459&%%:99-:*::;;.% 2377711111201   !.6%!! .---&*9999;.&6999&.;949&#&..99:&&99<866-.#%7777337111111222 +%!.6%!".::#:9996&&9449:#.696.#-*6:*:&-%9<<<*;&.#. 12331101173 #!-."!! .:;&--6*9*&#-95446.:999;%#6**:&#&."&<9*6-&#&  17311122273 .##'"%---𐾴.%-94449664445966995*9<: %:**:-&--,$ 172731027122 %#'" &::&&%.<45<96944444<5444445444444//4;&#&8;-&-$$$$  111711112 + %%% ''" #6:&%#&<44954///////////////////////4<*:*-&-&-+$ 11271102  + %#%"!".&..%;<4444)//////////////////////////)*.;-;:;++.#$$  1002111227 !.#!!.:&-44////////////////==/=====//////=)*%;;;*8$#,$,  10001112722!%'!-;&%*4//////////////=5)))))))))5=//==))+"#&**$+*$%  000772 !'! ..#&84/////////=555)))<<<<<<<<<<)))))))8;!'-<8*8*   1007337  ! .*54//////=5)))))<<<8********8<)))))<*-'&*<<8$%! +  077372 +  !! &<54///==5))<<<<<88***+*+6666*8<<))<8+&  -<)$$$%' + 273371  + !'!!''#:8<9)///=))<<<<88***6666++6:;;:+8<<<<8*- $*$&,+,  + 03337 !''!'-:+*+)//=))<88888**66666+**+:-&&;*8<<<8*-.8+-$$ %17 +!!!!;-&;$)//=)<88888*+666666+***6-..-6*8<<8*- !&$$8**$  2727  '!!&#%.*///))8****+666666++*88*+;-..;*8))8*-'!.$)($$% + + 2777! '''&#%.)//))*+++6:;-;;;:6+*88<8*+;&.-+8))8*&!!%+*+$,  +7  '!''"#%&)/=8*$;--.###..&-:+88<<<8*+;-;+8))8+&!"',*$$, ,, 27 + +! '!!"";8+&.##% %%.;*8<))<<8*+$$+8))8+.,$$$# , +2 !!'"'-+*#"!'"%-+8<)))<88**+*8((*+%"%"#,$$,$ 3 !  '! #$*$%#%' .+*8))<88888*88((*$ & #$$$, +2  + +!! %'#+8-%&.$*8)(888()((())(*-' && $$#%  6F 4 174 1 + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + +   + + +  + + + + + + + + + + + + + + + + + + + +     +                + + + + + +  + + +    + + + + + +  + + +  + + +  + + +21 84 31 1 +9  999 99999 9+(33:<<:;<<<<<<<:3;<<<<<<<<72::2:<;/1+)99999999999999999 99&7(/3.=::;;=;<<<<:/<<<<<<<<:==//:<:/32&') 9999999999 9999 99999,+0012.//:;<:::;=://<<<<<<;/<;20:<:/.1&&1+9999999999999999  9996'2//23:;:=<<<<<<:212;<<<<<::;2'/<:3:=/10(1+'999999999999 9999 99999)6&3.:::;<;<<<;<<<:33;:02:<:::1'1<;/:=:32022(+9999999999  99999 &71(//33;;;:;;;=<<:3:<<;0&1:=:203<<;;=:32113(1')99999999999 9999970003322:./:;://::22<<<32333/11:<<;<=32212:;:+'') 99999999999999999 &77+171:;:/:<<;:311/<=32:<<;7,3<<>><<<3414339;.6.;..#%  ""$$$:-;765..122221.3=<=2365;7.533=<><>>>><><<2191397.9.;.60%%% ! %%%7.7..;-9222234322331;66.93==<><>><><><><<3316776.;;;7%--#! !$%--64467-77;12332213=239.9953,=<<<><<<<<<<<<<=39--..7;..-%%#0! $%-0433167-7;91132232=234691=<<<<<<<<<<<<<<<<==5-;.9666.7-7--#%#" $-04331466547-12233=231943=<><<<<<===========3.%7...6.77;.0-!""   %%:%044114446-.1==2233393=<><<============22334.::-;;77-7..07%%# %!#00.444131.7751222333.52<<<==========222333315.%:---7;7700-#-#   #08487.44134-794911153332=<<=====22222222331114567:%%-;99.0;7####""  #&/8446;61331665416%;13==<=====2222222222233114496.7;;.95.7777--%%#"  &//88860.1311334329-612======2222222222223311144996656549.--7777%"  #&/0/48.--6113223333433,====223322222222233111444599941114.;;;#0#-%"75 4 174 1 + + +  +       +  +                          +  +    +                                                                              42 84 33 1 +7:;77777::777((#,49995555555592+0++0455.**,4-233-9.1 ((::7:::7(((7(;::;;;;;::;;::;( ).55555555===55443220*9.0,,,3,339<-) (((((7:;:77(((((((::::;;;;::;;::;: *+45555=========59.4.20.*300.499.+3--,#(((((((7(((777(((:::;;77;:::;:::; +8--4955555========5594..,+2,+-95999.0,-,)#(((((7(77(((;::;;;77:::::::: .//,4955555========549994..4-.55559940+--,) 77((((7((((:;77;:::::;;::::"6/99<..<5===5=======5955595544555.9592*--1# 77((((((((:;7;;::;(((((;; + .4/99.2095==========59594554.9=55..<-**0-,)(((7(((777;:::::;(((7!///99-0*3995========94.4959.45===59.*2..2--,) (((((((77((7;:;;;(((6%//9559-30*,5======59233-99594555==9.3.959.-/4,# ((((7(((7;;:;((((8///9555<3++55=====900,4445=5-455=55.,55559--46#$ ((((((:;;:;((((( *0-.//5555.2.4.955==5-2,4945=55.2.5555<,95555<021 (((((((:::;;7(((73-..<99594<99949-99,++.4.25=55<..95599<.95559*2**((((((::::::7(( 1.//9559994<955-3<3+023.,.95559,.55555,*9554+1*$77(((((::;:::;((7*0*1/9555559-<559,2,0*0...9555555.3+455559-5543*00*7((7(((:;::::;7((*0*0.95595=92.<.-..3+2..<55555555-,+,55555555.*++**((((7((((((::::;7;;7$**/9/95==54...-.,32--,<55555555923--<99555.0,+*+*##((((((((7((((::::::::*#*155/955=5-..<<.,..220,<9555555599<.2.959.+03*+03+01#((7((77((7(7;::::::#+3/9/955559024<....,.,3-4.9995555559...94-****3,--1#*7(((77((7((7(;:::;***,//95555520-.2,-,.95<-,2..9559955599<.,03++32-4/.0*7((7((777(7(7::::$*).449555590-,3,.3,955.,,3349599959995903-..499955/1)#(((7(((77777(7;;; + +*6/9555559.2--,,---9554220*32.955999999<2<9955====5//9.# (77777(77;;7;:: +"#1649595559/22,03-,-99593000+029559,-559.5======''''5'56#777777((7(;:777: + 8864999559/-3+*+32,9999--+-<.0+.5592+99-5===='=''''''556*7777(((((::;(( 866.///9599-,2*+3+3<95942255420+-9<9.*.245===='''''5555/1$7(((((((7::7((# 8 .%99999/-22*02,32.9999-/59-+-.2///4+-<5=''''5555559/.)$(((((77:;;7 +"888.%%9559,++,,233-.99999/-0+.,+.99<,-.9='''55599////.,0(7((77(;;:  86!!%9999,*+*3223++049955-***,2-9/2-<5='''559//444..-1+ $77777(7:: 8!.%%%//1**+*0000++03+2<99/4,,+-4,2-3,-9='''559/4....--,)+ 77(((;;"86.%9/40$020++3++,-324///99,-/9-+000-5='''55/4....---,)+ (((((7::: +#886!%%/1+*$$*33*0-2,--00,.4/9/-///-,.-34='''55//4...----,)*$ ((77;: + +&!%%4)****+010,222,,230+3.//.4//-2.--<='''559/44...----,)*  7(77(7 +"&%!.++00,..--3010+0+**+./////-03,2.5''''59/....--.66-10 $* 77((( +##8!6*$$$*).-4//4+**020023,-//9-*++*3/='''55/4...--6.66,)+ $7(((45 84 38 1 +( + )*$+*+,--.//,+*011,,2*034.-+**3-5'''55/4....--6.--1)* (((7 +!&)*$***1--11.,+,3+3-,+3,*2/5'''559/4....666--,1#* $((((8$*-441)60)-60*03+*02*0+3+0.5''''55/4....666--,1)#* 7(( $+$6/..6--64.-00*0--301++-/5'''559/4..6666--,,1)#*$  ((+#,6.4.44/4-..1+0-,3013*0./'''559/4.66666--,,11)0 $* ((**$$+186#)666644.64//,*)-3333*0-95'''55//..66.6--,1111)0*  (( +**)1.8**)1-6-6,-44.-*+++0313+1/5'''559/4.6666--,11111)+ ((*11 ))),))),4.6,*1301--1.95'''55//4.66--,11111,,)#  )866*$)))8,8..)06,1,,13.5'''559/4.66--,1111,,,,1  $* $$*) &68#$)-..)..6)*1,00,)33/95'559/.6688--,111,,8,1)+ $    "" 8 ##).68888)*+0+0+*0-5'''5594.66--,,1111,,,,1#*$$ $#""*))1 1+*+)886661**+))+395'''55%4.66-,11111,,,,1)#*$ $$$" #"" #)1)).6,*+***0),,69'''5594.66-,111)11,, ,11#* $* ) 8 8 *+#**+11*+*+#111,.5''559/.68-,1)))11,,8 11# *   +"6&81+$*$$$*++)#1-%''555%.8-,1))))1,,, 1#  $  +"" $$&886 *$*0+3.'''559468,1)##)11,, "#  +""$)8&88"1+*#+*)#*+))-9''559%.8-1)0++)1, 8888 )$$$$   + + +"#*$*"" 661*#+))##)18%'''59%.8 ,)#+**),88 866668) $$   + + +#*##)188#+#*+##+#16%5'59946 11#+,.668886!!!8)*   "" #)8 )#**+*****149''59%681)#+*$6%468866!!! #$ $   + + "" "" ##+++###**)845''5%.8,1#+*$$199!6886!!!& $ + + + +"""*++*)#*)16%9''59%6 1)#*699!6888!!!& $ + +# "*$**$** 86%5'59%.81)#+*$ 49!68 86!!6"$ #  + + + "" *$*****1 .9''99!8")##* *%9%6 " 8&&8"    +"""* *$)#+**##,.''9%6 1)#*099%6")" 6&8)*$ +#  "$#*#))) !9''99. 1)##*$ 6559%6")1 88 )*   + +   $$* **)"##69''59!81)##*+9''9%. 1" 88") $  + + +$##**#)%9'9%6"))##* )%''99!8 " 8 "#     +  +#$$*# #*)%'%!8")))#* )5'99%&8 " $   + + $$* )###18%9%6 1))#$ *%''99%!&888 "# #   +  # )" !9%!8"))#* $"%''99%!!&&8"#  $ +   ***  )) %''9%6 ))##*$ )%''9%%!!!!&"#$ # $#* #89'%!8"))#*6''9%!!!!!!"#    + + #  ###"!99%6"))#$  $*199%!!!!!!!&" ##  +** # !%! "))#*  $*)!9%%!&&&&!!!" + + +  **)&%9%6 "## $# !%9%!6 &!!!  +    # * %!8")#*  #"!%%99! " &&& #   +      + &9%& "# $ $*)"&%'9! )#"  "$   +48 84 36 1 +    9%!"# $  '9%#""#  # +  !%%& # #" &%'%& "##    + +     !9%"#$ " &%''%&"#    + + +   +   +%99%& ## $  "%''9%&"  + + + +    "&%9%!" +#  # %''9%%&" +   + +  !'9%&" + + +   +"%''%%&  # +   #"%'%! + +# $ +"&%''9%%&"   +      + '&"#  # +" &%''9%%"#  + +     +"%%& ""  +" + +"&'%% +  + + +   + +&%!""""$  +"&%9%   + +    "%'%&" +"" +  " '%%&&&    +    +' + +""$ ""&%''%&&&&&   +    + %" + + + +   "&%''%%&& +  + + +   "%& + + + + + $  "%''9%&& +     % + + + +    %'%&&&&"  +   +% + +    + + "&%''%        "%&" +  + +"&%''%%" +     + +%% +    +" "&%''%%    + + +     +%%% +   """  ''%% +  +  %% + "%''%   + +  %%%% +  + + + + +9''%   + +%%%   + + + + + +%''%    + +% +  +#'% +   + + +%  +'%" +    + + +%     + + + + + + + + +%    + + + % +  + + + + + + + + +'%    + + % +   + + + + +'%    + +    +% +  + + + + + +"'% +    + +     % + + +   + + + + + + + + + + +'% +    + + +  + %% + +   + +  + + +%'%  +  + +  + %%  +    + + + +%'  + + + +  %%%    + + + +% +   + +    %    +  + + + + +%"    + + +  %%   + + +%% +    + +    %%       +%"  + + + +   %%     + + % +  + +   + + + + +4B 84 58 1 +%%  +   + + + +  + +    + +  %%  +  + # +  +    %  +  + + + + + + + +   +    %%  +  + + +     %  + +%%%  + +   % %%%%%  + + + +  + %  +%%% + + + +%%   %%  + +%%% + + + +%% %%%%%%%%  + + +%%% +       + + + +   + + + %     +   + +   + +     +    + + + + + + +        + +  + + +     +  +  +         +  +   + +      +   +        +         +  +      +  + +          +          +              % +         +%% +        %% +     %% +    %% +      +%% +   % +    + + +   + + +      % +      % +     +%%   %% +      % +     +      %% +   %% +   % +     +%% +        %% +      % +        +% +       %%      %% +       +% +        +        +        + +  +        +    +           + + +        +  +       + + +       +       + +  MBOX2B_P 122 +ÿ¿wŸso_k?gcÿ^ßZßZ¿VŸRN_J?FBBÿ=ß9ß9¿5Ÿ1Ÿ1-_)_)_)?%!!ÿßß¿ŸŸŸ _? + ENTD_P 62 + $(,84(  04,$$ X@< 4@0(H<*d, $48@H(00,D`< 8T H|MBOX2R_P 122 +ÿ½œ{Z9÷~Ö~Ö~µ~”~s~R~1~~~ï}Î}Î}­}Œ}Œ}k}J}J}J})}}}ç|Æ|Æ|¥|„|„|„|c|B|!||xttplllhddd`\\\\\XTTTTTTPLLLLLHDDDDDD@<<<<<<84444440,,,,,($$$$$  BK8_P 27 +       + +   ENTA_P 62 +    +  6  + 7       +   ?     ENTB_P 62 +  +  +   4 1  +  8       +  8 ENTC_P 63 +    $ (, (< $ (,)X08H(L(,$<PH84, 00$(XT)|BK1_P 22 +     ÿBK2_P 16 +   ÿBK3_P 16 +   BK4_P 16 +   BK7_P 27 +     ENT_P 27 +!       ÿ \ No newline at end of file diff --git a/IMG/EXPLODE.IMG b/IMG/EXPLODE.IMG new file mode 100644 index 0000000..9b04be1 Binary files /dev/null and b/IMG/EXPLODE.IMG differ diff --git a/IMG/EXPL_OLD.IMG b/IMG/EXPL_OLD.IMG new file mode 100644 index 0000000..87f8a20 Binary files /dev/null and b/IMG/EXPL_OLD.IMG differ diff --git a/IMG/FBALL.IMG b/IMG/FBALL.IMG new file mode 100644 index 0000000..54bd396 Binary files /dev/null and b/IMG/FBALL.IMG differ diff --git a/IMG/FIREFRAM.IMG b/IMG/FIREFRAM.IMG new file mode 100644 index 0000000..0b71a69 Binary files /dev/null and b/IMG/FIREFRAM.IMG differ diff --git a/IMG/FLASH.IMG b/IMG/FLASH.IMG new file mode 100644 index 0000000..45c8ccd Binary files /dev/null and b/IMG/FLASH.IMG differ diff --git a/IMG/FOG.IMG b/IMG/FOG.IMG new file mode 100644 index 0000000..18d3ae0 Binary files /dev/null and b/IMG/FOG.IMG differ diff --git a/IMG/GAMEGRAF.IMG b/IMG/GAMEGRAF.IMG new file mode 100644 index 0000000..2c87491 Binary files /dev/null and b/IMG/GAMEGRAF.IMG differ diff --git a/IMG/HALFTIME.BDB b/IMG/HALFTIME.BDB new file mode 100644 index 0000000..4de9e09 --- /dev/null +++ b/IMG/HALFTIME.BDB @@ -0,0 +1,38 @@ +HALFTIME 2000 1000 255 1 12 36 +HTSTATS 211 677 145 470 +4000 255 222 3 8 +A00 255 188 0 7 +6E00 263 222 6 2 +A00 263 434 9 9 +6E00 268 222 C 2 +6E00 268 429 F 2 +A00 268 227 12 4 +A00 268 291 15 6 +6B00 282 222 C 2 +6B00 334 429 F 2 +7300 356 226 18 1 +4000 356 417 1B 1 +A00 358 291 1E 6 +6E00 360 222 C 2 +6E00 360 429 F 2 +A00 360 227 12 4 +6E10 445 222 6 2 +A00 453 188 21 8 +A00 453 291 24 8 +6E00 458 222 6 0 +A00 458 188 27 11 +A00 458 434 2A 10 +6E00 463 429 F 0 +6E00 463 222 C 0 +A00 463 227 2D 5 +A00 463 291 30 3 +6B00 476 222 C 0 +6B00 515 429 F 0 +7300 551 226 18 1 +4000 551 417 1B 1 +A00 553 291 33 3 +6E00 555 222 C 0 +6E00 555 429 F 0 +A00 555 227 2D 5 +6E10 640 222 6 0 +4000 648 222 36 8 diff --git a/IMG/HALFTIME.BDD b/IMG/HALFTIME.BDD new file mode 100644 index 0000000..e97e28b Binary files /dev/null and b/IMG/HALFTIME.BDD differ diff --git a/IMG/HALFTIME.IMG b/IMG/HALFTIME.IMG new file mode 100644 index 0000000..3380170 Binary files /dev/null and b/IMG/HALFTIME.IMG differ diff --git a/IMG/HANGFONT.IMG b/IMG/HANGFONT.IMG new file mode 100644 index 0000000..400bf61 Binary files /dev/null and b/IMG/HANGFONT.IMG differ diff --git a/IMG/HANGTIME.BDB b/IMG/HANGTIME.BDB new file mode 100644 index 0000000..ff958c5 --- /dev/null +++ b/IMG/HANGTIME.BDB @@ -0,0 +1,27 @@ +hangtime 2000 1000 255 2 14 24 +maxim 867 1313 244 525 +hangtime 192 720 149 506 +A00 274 206 0 0 +A00 274 329 3 5 +A00 349 329 6 7 +A00 349 206 9 1 +A00 419 329 C 6 +A00 424 206 F 2 +A00 494 329 12 8 +A00 499 206 15 3 +A00 574 329 18 9 +A00 574 206 1B 4 +A00 888 376 3 5 +A00 888 253 0 0 +4000 915 294 1E 10 +A00 963 253 9 1 +A00 963 376 6 7 +4000 983 294 21 11 +A00 1033 376 C 6 +A00 1038 253 F 2 +4000 1052 295 24 12 +A00 1108 376 12 8 +A00 1113 253 15 3 +4000 1138 295 27 13 +A00 1188 253 1B 4 +A00 1188 376 18 9 diff --git a/IMG/HANGTIME.BDD b/IMG/HANGTIME.BDD new file mode 100644 index 0000000..2076500 Binary files /dev/null and b/IMG/HANGTIME.BDD differ diff --git a/IMG/HDS1.IMG b/IMG/HDS1.IMG new file mode 100644 index 0000000..b469ff4 Binary files /dev/null and b/IMG/HDS1.IMG differ diff --git a/IMG/HDS10.IMG b/IMG/HDS10.IMG new file mode 100644 index 0000000..b2320ee Binary files /dev/null and b/IMG/HDS10.IMG differ diff --git a/IMG/HDS11.IMG b/IMG/HDS11.IMG new file mode 100644 index 0000000..a5313cc Binary files /dev/null and b/IMG/HDS11.IMG differ diff --git a/IMG/HDS12.IMG b/IMG/HDS12.IMG new file mode 100644 index 0000000..f3cd005 Binary files /dev/null and b/IMG/HDS12.IMG differ diff --git a/IMG/HDS13.IMG b/IMG/HDS13.IMG new file mode 100644 index 0000000..f824438 Binary files /dev/null and b/IMG/HDS13.IMG differ diff --git a/IMG/HDS14.IMG b/IMG/HDS14.IMG new file mode 100644 index 0000000..33faa94 Binary files /dev/null and b/IMG/HDS14.IMG differ diff --git a/IMG/HDS15.IMG b/IMG/HDS15.IMG new file mode 100644 index 0000000..eb9783d Binary files /dev/null and b/IMG/HDS15.IMG differ diff --git a/IMG/HDS16.IMG b/IMG/HDS16.IMG new file mode 100644 index 0000000..ffddd6b Binary files /dev/null and b/IMG/HDS16.IMG differ diff --git a/IMG/HDS17.IMG b/IMG/HDS17.IMG new file mode 100644 index 0000000..95155f9 Binary files /dev/null and b/IMG/HDS17.IMG differ diff --git a/IMG/HDS18.IMG b/IMG/HDS18.IMG new file mode 100644 index 0000000..03b6e6d Binary files /dev/null and b/IMG/HDS18.IMG differ diff --git a/IMG/HDS19.IMG b/IMG/HDS19.IMG new file mode 100644 index 0000000..d866c66 Binary files /dev/null and b/IMG/HDS19.IMG differ diff --git a/IMG/HDS2.IMG b/IMG/HDS2.IMG new file mode 100644 index 0000000..cab2cd3 Binary files /dev/null and b/IMG/HDS2.IMG differ diff --git a/IMG/HDS20.IMG b/IMG/HDS20.IMG new file mode 100644 index 0000000..36e57e1 Binary files /dev/null and b/IMG/HDS20.IMG differ diff --git a/IMG/HDS21.IMG b/IMG/HDS21.IMG new file mode 100644 index 0000000..cdc242b Binary files /dev/null and b/IMG/HDS21.IMG differ diff --git a/IMG/HDS22.IMG b/IMG/HDS22.IMG new file mode 100644 index 0000000..9666b91 Binary files /dev/null and b/IMG/HDS22.IMG differ diff --git a/IMG/HDS23.IMG b/IMG/HDS23.IMG new file mode 100644 index 0000000..b893512 Binary files /dev/null and b/IMG/HDS23.IMG differ diff --git a/IMG/HDS24.IMG b/IMG/HDS24.IMG new file mode 100644 index 0000000..1298604 Binary files /dev/null and b/IMG/HDS24.IMG differ diff --git a/IMG/HDS25.IMG b/IMG/HDS25.IMG new file mode 100644 index 0000000..2433d32 Binary files /dev/null and b/IMG/HDS25.IMG differ diff --git a/IMG/HDS26.IMG b/IMG/HDS26.IMG new file mode 100644 index 0000000..7a3401a Binary files /dev/null and b/IMG/HDS26.IMG differ diff --git a/IMG/HDS3.IMG b/IMG/HDS3.IMG new file mode 100644 index 0000000..474ce6d Binary files /dev/null and b/IMG/HDS3.IMG differ diff --git a/IMG/HDS4.IMG b/IMG/HDS4.IMG new file mode 100644 index 0000000..96d415c Binary files /dev/null and b/IMG/HDS4.IMG differ diff --git a/IMG/HDS5.IMG b/IMG/HDS5.IMG new file mode 100644 index 0000000..8b9948e Binary files /dev/null and b/IMG/HDS5.IMG differ diff --git a/IMG/HDS6.IMG b/IMG/HDS6.IMG new file mode 100644 index 0000000..facec71 Binary files /dev/null and b/IMG/HDS6.IMG differ diff --git a/IMG/HDS7.IMG b/IMG/HDS7.IMG new file mode 100644 index 0000000..4902ace Binary files /dev/null and b/IMG/HDS7.IMG differ diff --git a/IMG/HDS8.IMG b/IMG/HDS8.IMG new file mode 100644 index 0000000..d83a52d Binary files /dev/null and b/IMG/HDS8.IMG differ diff --git a/IMG/HDS9.IMG b/IMG/HDS9.IMG new file mode 100644 index 0000000..2c72e93 Binary files /dev/null and b/IMG/HDS9.IMG differ diff --git a/IMG/HDSMSC1.IMG b/IMG/HDSMSC1.IMG new file mode 100644 index 0000000..f042161 Binary files /dev/null and b/IMG/HDSMSC1.IMG differ diff --git a/IMG/HDSMSC2.IMG b/IMG/HDSMSC2.IMG new file mode 100644 index 0000000..2ecf3e7 Binary files /dev/null and b/IMG/HDSMSC2.IMG differ diff --git a/IMG/HDSMSC3.IMG b/IMG/HDSMSC3.IMG new file mode 100644 index 0000000..d132d61 Binary files /dev/null and b/IMG/HDSMSC3.IMG differ diff --git a/IMG/HDSMSC4.IMG b/IMG/HDSMSC4.IMG new file mode 100644 index 0000000..6c33398 Binary files /dev/null and b/IMG/HDSMSC4.IMG differ diff --git a/IMG/HDSMSC5.IMG b/IMG/HDSMSC5.IMG new file mode 100644 index 0000000..8f4fdcb Binary files /dev/null and b/IMG/HDSMSC5.IMG differ diff --git a/IMG/HDSMSC6.IMG b/IMG/HDSMSC6.IMG new file mode 100644 index 0000000..e86f4d2 Binary files /dev/null and b/IMG/HDSMSC6.IMG differ diff --git a/IMG/HDSMSC7.IMG b/IMG/HDSMSC7.IMG new file mode 100644 index 0000000..a5fb288 Binary files /dev/null and b/IMG/HDSMSC7.IMG differ diff --git a/IMG/HDSMSC8.IMG b/IMG/HDSMSC8.IMG new file mode 100644 index 0000000..0d83eaf Binary files /dev/null and b/IMG/HDSMSC8.IMG differ diff --git a/IMG/HOOP.IMG b/IMG/HOOP.IMG new file mode 100644 index 0000000..fa6a223 Binary files /dev/null and b/IMG/HOOP.IMG differ diff --git a/IMG/HOT.IMG b/IMG/HOT.IMG new file mode 100644 index 0000000..5e101b4 Binary files /dev/null and b/IMG/HOT.IMG differ diff --git a/IMG/HOTCIRCL.IMG b/IMG/HOTCIRCL.IMG new file mode 100644 index 0000000..d122202 Binary files /dev/null and b/IMG/HOTCIRCL.IMG differ diff --git a/IMG/HOTSPOT.IMG b/IMG/HOTSPOT.IMG new file mode 100644 index 0000000..c1e857d Binary files /dev/null and b/IMG/HOTSPOT.IMG differ diff --git a/IMG/INFOWIN.IMG b/IMG/INFOWIN.IMG new file mode 100644 index 0000000..80d749d Binary files /dev/null and b/IMG/INFOWIN.IMG differ diff --git a/IMG/INGA16.IMG b/IMG/INGA16.IMG new file mode 100644 index 0000000..aa41a5c Binary files /dev/null and b/IMG/INGA16.IMG differ diff --git a/IMG/LEDS1.IMG b/IMG/LEDS1.IMG new file mode 100644 index 0000000..911fad0 Binary files /dev/null and b/IMG/LEDS1.IMG differ diff --git a/IMG/MAPPER.INI b/IMG/MAPPER.INI new file mode 100644 index 0000000..6c47dd9 --- /dev/null +++ b/IMG/MAPPER.INI @@ -0,0 +1,27 @@ +# +# MAPPER.INI +# +# lists all the files that mapper will look at. Keep this file in IMGDIR. +# + +#raw file address file + +;misc.irw misc.lod + +;bb5.irw bb5.lod + +bb.irw bb.lod + +bb2.irw bb2.lod + +bb3.irw bb3.lod + +bb4.irw bb4.lod + +bb6.irw bb6.lod + +bb7.irw bb7.lod + +bb8.irw bb8.lod + +bbmug.irw bbmug.lod diff --git a/IMG/MISC.LOD b/IMG/MISC.LOD new file mode 100644 index 0000000..7e112f3 --- /dev/null +++ b/IMG/MISC.LOD @@ -0,0 +1,581 @@ +***> 2000000,0 +; +PON> +XOF> +ZOF> +; +IHDR PAL:L +; +ASM> junkxxxx +;Loads DIAGP palette +diagp.img +---> DIAGPIMG +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> COURT.TBL +; +FRM> COURT +; +crtref.img +---> ref01n,ref02n,ref03n,ref04n,ref05n,ref06n,ref07n,ref08n +---> tabletop +---> ad01_nl,ad01_nr +---> ad01_ref_nl,ad01_ref_nr +; +nbacrowd.img +---> SIDECHK,SIDECAMS +---> TOPCRV,BOTCRV,TOPCHK,BOTCHK +---> STAIRS01,STAIRS02,STAIRS03,bk_flr +---> COACH01,BNCHPL01 +---> CR0FST01n,CR0FST02n,CR0FST03n,CR0FST04n,CR0FST05n,CR0FST06n,CR0FST07n +---> CR2FST01,CR2FST02,CR2FST03,CR2FST04,CR2FST05,CR2FST06,CR2FST07 +---> CR3FST01,CR3FST02,CR3FST03,CR3FST04,CR3FST05,CR3FST06,CR3FST07 +---> CR1SEC01,CR1SEC02,CR1SEC03,CR1SEC04,CR1SEC05,CR1SEC06,CR1SEC07 +---> CR2SEC01,CR2SEC02,CR2SEC03,CR2SEC04,CR2SEC05,CR2SEC06,CR2SEC07 +---> CR3SEC01,CR3SEC02,CR3SEC03,CR3SEC04,CR3SEC05,CR3SEC06,CR3SEC07 +---> CR4SEC01,CR4SEC02,CR4SEC03,CR4SEC04,CR4SEC05,CR4SEC06,CR4SEC07 +---> CR5SEC01,CR5SEC02,CR5SEC03,CR5SEC04,CR5SEC05,CR5SEC06,CR5SEC07 +---> CR1THD01,CR1THD02,CR1THD03,CR1THD04,CR1THD05,CR1THD06,CR1THD07 +---> CR2THD01,CR2THD02,CR2THD03,CR2THD04,CR2THD05,CR2THD06,CR2THD07 +---> CR3THD01,CR3THD02,CR3THD03,CR3THD04,CR3THD05,CR3THD06,CR3THD07 +---> CR4THD01 +; +ASM> IMGTBL.ASM +GLO> IMGTBL.GLO +; +tvscore.img +---> DoubleOT,TripleOT,endof1,endof3,endof4,halftime +---> please,start,insert,tocontrol +---> one,two,three,four,overtime,final +; +halftime.img +---> HTSTAT01,HTSTAT02,HTSTAT03,HTSTAT04 +---> HTFIRE01,HTFIRE02,HTFIRE03,HTFIRE04,HTFIRE05 +---> HTFIRE06,HTFIRE07,HTFIRE08,HTFIRE09,HTFIRE10 +---> HLFSTATS +; +optscr.img +---> SPOTLTA1 +---> SPOTLTA2,SPOTLTA3,SPOTLTA4,SPOTLTA5,SPOTLTB1,SPOTLTB2,SPOTLTB3,SPOTLTB4 +---> SPOTLTB5,SPOTLTC1,SPOTLTC2,SPOTLTC3,SPOTLTC4,SPOTLTC5,BIGBAL1 +---> SMBAL1,SMBALSA1,SMBALSA2,SMBALSB1 +---> SMBALSB2,SMBALSC1,SMBALSC2,BGBALSA1,BGBALSA2,BGBALSB1,BGBALSB2,BGBALSC1 +---> BGBALSC2 +; +transbar.img +ZON> +---> TRANBR01,TRANBR02,TRANBR03,TRANBR04,TRANBR05 +---> TRANBR06,TRANBR07,TRANBR08,TRANBR09,TRANBR10 +---> TRANBR11,TRANBR12,TRANBR13,TRANBR14,TRANBR15 +ZOF> +; +time.img +---> BRSH1800,BRSH1801,BRSH1802,BRSH1803,BRSH1804,BRSH1805,BRSH1806,BRSH1807 +---> BRSH1808,BRSH1809,BRSH18CO +; +attstuff.img +---> ATT_HT,ATT_WT,ATT_SP,ATT_PW,ATT_SH,ATT_DU,ATT_ST,ATT_BL +---> END_HT,END_WT,END_SP,END_PW,END_SH,END_DU,END_ST,END_BL +PPP> 3 +---> NOTCH_00,NOTCH_01,NOTCH_02,NOTCH_03,NOTCH_04,NOTCH_05 +---> NOTCH_06,NOTCH_07,NOTCH_08,NOTCH_09,NOTCH_10 +PPP> 0 +; +yes_no_4.img +---> NO,NOP,YES,YESP +---> SMNOP,SMYESP,SMYES,SMNO +---> SMNSHP,SMYSHP,ONE +ZON> +---> F_NO1,F_NO2 +ZOF> +; +fog.img +---> FOG_01,FOG_02,FOG_03,FOG_04,FOG_05,FOG_06,FOG_07,FOG_08,FOG_09 +---> FOG_10,FOG_11,FOG_12,FOG_13,FOG_14,FOG_15,FOG_16 +; +privilg.img +---> CHECK,PRVLGCK1 +---> TEX_HA,TEX_SD,TEX_AR,TEX_BD,TEX_BB,TEX_ST,TEX_BH +; +designd.img +---> HDAROW,HDBAR,HDSPTLT,HDSPTLT2 +ZON> +---> BIGBOX +ZOF> +---> TUBE01,TUBE02,TUBE03 +---> DITH_A,DITH_B,DITH_C,DITH_D +---> TIMEPRT,CREDTOOB +---> SPOTFL,TUBESH,BBTXT +---> TOTALBR,TEXTBAR +---> NNABAR,NNBAR,NNAROW +---> M_HOTSPT,M_NOARRW,M_BIGHED,M_QIKHND,M_UNLIMT,M_GOALTN,M_HYPRSP +---> M_FSTPAS,M_MAXSPD,M_BIGBAL,M_NOPUSH,M_MAXPOW,M_SHTPCT,M_BABYMD +---> M_STELTH +; +buttons.img +---> BUTTON_A,BUTTON_B,BUTTON_C,BUTTON_D,BUTTON_E,BUTTON_F,BUTTON_G,BUTTON_H +ZON> +---> BSHAD_A1,BSHAD_A2,BSHAD_B1,BSHAD_B2,BSHAD_C1,BSHAD_C2,BSHAD_D1,BSHAD_D2 +---> BSHAD_E1,BSHAD_E2,BSHAD_F1,BSHAD_F2 +---> BSHAD_G1,BSHAD_G2,BSHAD_H1,BSHAD_H2 +ZOF> +---> TXT_VIEW,TXT_HEAD,TXT_UNIFRM,TXT_ATTR,TXT_NEWN,TXT_SAVE +---> TXT_PRIV,TXT_NICK1 +; +teamsel4.img +---> TEAMBR,HEADER,SQUAD1,SQUAD2 +---> RHEAD,LHEAD,SCORE +---> SQDBAL01,SQDBAL02,SQDBAL03,SQDBAL04,SQDBAL05 +---> SQDBAL06,SQDBAL07,SQDBAL08,SQDBAL09,SQDBAL10,SQDBAL11,SQDBAL12,SQDBAL13 +---> SQDBAL14,SQDBAL15,SQDBAL16,SQDBAL17,SQDBAL18,SQDBAL19,SQDBAL20 +---> SQDBAL21,SQDBAL22,SQDBAL23,SQDBAL24,SQDBAL25,SQDBAL26,SQDBAL27 +---> SQDBAL28,SQDBAL29,SQDBAL30 +---> TEAMBR2 +; +attbar2.img +PPP> 4 +---> ATTBAR00,ATTBAR01,ATTBAR02,ATTBAR03,ATTBAR04,ATTBAR05 +---> ATTBAR06,ATTBAR07,ATTBAR08,ATTBAR09,ATTBAR10 +PPP> 0 +---> ATTRIBS +; +attract.img +---> NBABAR,NBALOGO +; +gamegraf.img +CON> +---> JMPBAL_L,JMPBAL_R,SCORTUBE,LOGOTUBE +---> RECVRBLK +---> clock,clock2 +COF> +; +cities2.img +PON> +---> city_atl +---> city_bos +POF> +---> city_cha,city_chi,city_cle,city_dal,city_den,city_det +---> city_gol,city_hou,city_ind,city_lac,city_lal,city_mia +---> city_mil,city_min,city_nej,city_ney,city_orl,city_phi,city_pho +---> city_por,city_sac,city_san,city_sea,city_tor,city_uta,city_van,city_was +---> DEFAULT,CUST1,CUST2,CUST3,CUST4,CUST5 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L,PWRD1:W,PWRD2:W,PWRD3:W,PT0X:W +; +referee.img +CON> +PON> +;---> REFPNT1,REFPNT2,REFPNT3,REFPNT4,REFPNT5,REFPNT6,REFPNT7,REFPNT8,REFPNT9 +;---> REFPNT10,REFPNT11,REFPNT12,REFPNT13,REFPNT14,REFPNT15,REFPNT16,REFPNT17 +;---> REFPNT18,REFPNT19 +---> REFWHS1,REFWHS2,REFWHS3,REFWHS4,REFWHS5,REFWHS6 +---> REFWHS7,REFWHS8,REFWHS9 +---> REFTOS1,REFTOS2,REFTOS3,REFTOS4 +---> REFTOS5,REFTOS6,REFTOS7,REFTOS8,REFTOS9,REFTOS10,REFTOS11,REFTOS12 +---> REFTOS13,REFTOS14,REFTOS15,REFTOS16,REFTOS17,REFTOS18,REFTOS19,REFRUN1 +---> REFRUN2,REFRUN3,REFRUN4,REFRUN5,REFRUN6,REFRUN7,REFRUN8,REFRUN9 +---> REFRUN10,REFRUN11,REFSTN1,REFSTN2,REFSTN4 +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +credball.img +PON> +---> t0000,tX000,tXX00,tXXX0 +---> tXXXX,t1000,t1100,t1110 +---> t1111,tX100,tX110,tX111 +---> tXX10,tXX11,tXXX1 +COF> +; +pnames.img +---> ABDULRAU,AHARDAWAY,AJOHNSON,WANDERSON,ANTHONY,AUGMON,BAKER +---> BARROS,BBARRY,BENJAMIN,BENOIT,BGRANT,BLAYLOCK +---> BOWENS,BRADLEY,BRANDON,BREEVES,BROWN,BWILLIAM +---> CAMPBELL,CASSELL,CEBALLOS,CHEANEY,CHILDRES,CMILLS,CMORRIS +---> COLEMAN,COLES,CROBINSON,CROGERS,CURRY,DANILOVI +---> DDAVIS,DELLIS,DELNEGRO,DIVAC,DOUGLAS,DREXLER,DROBINSON,DSCOTT +---> DUMARS,EDNEY,EDWARDS,EJONES,ELLIOT,EMURDOCK +---> EWING,FERRY,FINLEY,FOX,GARNETT,GATTISON,GHILL,GILL,GILLIAM +---> GRANT_HC,GROBINSO,GUGLI,HARPER_D,HAWKINS,HENDERSO +---> HORNACEK,HORRY,HOUSTON,HOWARD,JACK,JHOWARD +---> JOHNSN_L,JSMITH,KANDERSON,KEDWARDS,KEMP,KERR,KIDD,KJOHNSON +---> KNORMAN,KONCAK,KUKOC,LAETTNER +---> LMURRAY,LONGLEY,MALONE_K,MANNING,MARCIULO +---> MASH,MASON,MCCLOUD,MCDYESS,MCKEE,MILLER +---> MJACKSON,MONTROSS,MOURN,MULLIN,MURESAN,TMURRAY,MUTUMBO +---> NANDERSON,OAKLEY,OBANNON,OLAJUWON,OMILLER +---> PACK,PAYTON,PERSON,PHILLS,PIPPEN,PJONES +---> PRICHARD,RADJA,RESPERT,RICE,RICH,RIDER +---> RODMAN,ROOKS,ROSE,RROGERS,SABONIS,SCHREMPF,SEIKALY +---> SFORD,SMITH,SMITS,SPREWELL,SSMITH,STACKHOU,STARKS,STOCKTON +---> STOUDAMI,STRICKLA,THARDAWAY,THILL,THORPE,TISDALE,TMILLS +---> VANEXEL,VAUGHT,VMAXWELL,WEATH +---> WEBBER,WILLIS,WPERSON,WRIGHT,WWILLIAM,ZIDEK +;Special guests: +---> DIVITA +; +sparks.img +---> spark2,spark3,spark4,spark5,spark1 +; +tvtext.img +---> PRESSBUTT,PRESSTURB +---> TopTenred,TopTengrn +---> TopTenblu,TopTenyel +---> start3,insert3,freplay3,join3 +---> start2,insert2,freeplay +---> FulGamered,FulGameblu,FulGamegrn,FulGameyel +---> onePlblu,onePlgrn,onePlyel,onePlred +---> Customblu,Customgrn,Customyel,Customred +---> TopFivblu,TopFivgrn,TopFivyel,TopFivred +---> TournDblu,TournDgrn,TournDyel,TournDred +---> TurnNSblu,TurnNSgrn,TurnNSyel,TurnNSred +---> WorldRblu,WorldRgrn,WorldRyel,WorldRred +---> Top10Dblu,Top10Dgrn,Top10Dyel,Top10Dred +---> BstDfPlblu,BstDfPlgrn,BstDfPlyel,BstDfPlred +---> BstOfPlblu,BstOfPlgrn,BstOfPlyel,BstOfPlred +---> Top5DPblu,Top5DPgrn,Top5DPyel,Top5DPred +---> Top5OPblu,Top5OPgrn,Top5OPyel,Top5OPred +---> Top10Oblu,Top10Ogrn,Top10Oyel,Top10Ored +---> CORECTblu,CORECTgrn,CORECTyel,CORECTred +---> INCRECTblu,INCRECTgrn,INCRECTyel,INCRECTred +---> InvaldNMblu,InvaldNMgrn,InvaldNMyel,InvaldNMred +---> TRIVIA1,TRIVIA2,TRIVIA3,TRIVIA4 +---> QUALIFYblu,QUALIFYgrn,QUALIFYyel,QUALIFYred +---> GrtWnSblu,GrtWnSgrn,GrtWnSyel,GrtWnSred +---> NbaChpblu,NbaChpgrn,NbaChpyel,NbaChpred +---> PRESSPASS +; +inga16.img +PON> +PPP> 5 +---> INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G,INGA16_H +---> INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O,INGA16_P +---> INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W,INGA16_X +---> INGA16_Y,INGA16_Z,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6 +---> INGA16_7,INGA16_8,INGA16_9,INGA16_0,INGA16DEL,INGA16SPC,INGA16END +---> INGA16COM,INGA16PER,INGA16SLS,INGA16QUE,INGA16COL,INGA16EXC +---> INGA16NUM,INGA16DOL,INGA16PCT,INGA16AND,INGA16AST,INGA16PRL,INGA16PRR +---> INGA16ADD,INGA16SUB,INGA16APO +PPP> 0 +; +vsscr.img +ZON> +---> VSB01,VSB02,VSB03,VSB04,VSB05,VSB06,VSB07,VSB08,VSB09 +---> VSS01,VSS02,VSS03,VSS04,VSS05,VSS06,VSS07,VSS08,VSS09 +ZOF> +---> CODE +; +bast7t.img +PON> +---> BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G,BAST7T_H,BAST7T_I +---> BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O,BAST7T_P,BAST7T_Q,BAST7T_R +---> BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W +COF> +---> BAST7T_X +CON> +---> BAST7T_Y,BAST7T_Z,BAST7T_1 +COF> +---> BAST7T_2 +CON> +---> BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7,BAST7T_8,BAST7T_9 +---> BAST7T_0,BAST7TAST,BAST7TEXC,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TLPR +---> BAST7TRPR,BAST7TDSH,BAST7TPLS,BAST7TCOM,BAST7TPER,BAST7TQUE,BAST7TSLS,BAST7TAPO +---> BAST7TCOL,BAST7TSEM +; +bast8.img +---> WIN4FREE,WINSTAY,WNRSSTAY +---> ASISTOFF,NOPUSH,SHOTPERC,BABYPLAY +---> TOURMODE,NOCPU,SECRETS +---> TEAMST,TEAMST4 +---> TRIVPTS,CORRECT,POINTS +PPP> 4 +---> BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G,BAST8_H,BAST8_I +---> BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O,BAST8_P,BAST8_Q,BAST8_R +---> BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W,BAST8_X,BAST8_Y,BAST8_Z,BAST8_0 +---> BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7,BAST8_8,BAST8_9 +---> BAST8COL,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8PRL,BAST8PRR,BAST8PER +---> BAST8COM,BAST8PLS,BAST8QUE,BAST8SLS,BAST8APO,BAST8SEM,BAST8SPC,BAST8EXC +; +bast8t.img +---> BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H +---> BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P +---> BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X +---> BAST8T_Y,BAST8T_Z,BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5 +---> BAST8T_6,BAST8T_7,BAST8T_8,BAST8T_9,BAST8TCOL,BAST8TNUM,BAST8TDOL +---> BAST8TPCT,BAST8TAND,BAST8TPRL,BAST8TPRR,BAST8TPER,BAST8TCOM,BAST8TAPO +---> BAST8TPLS,BAST8TQUE,BAST8TSLS,BAST8TSEM,BAST8TSPC,BAST8TEXC +; +bast10.img +---> BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G,BAST10_H +---> BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O,BAST10_P +---> BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W,BAST10_X +---> BAST10_Y,BAST10_Z,BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5 +---> BAST10_6,BAST10_7,BAST10_8,BAST10_9,BAST10EXC,BAST10NUM,BAST10DOL +---> BAST10PCT,BAST10AND,BAST10PRL,BAST10PRR,BAST10PLS,BAST10APO,BAST10DSH +---> BAST10SLS,BAST10COM,BAST10PER,BAST10SEM,BAST10COL,BAST10QUE +PPP> 5 ;don't change this...its for echoing enter inits... +---> BAST10SPC +PPP> 0 +; +bast18.img +---> BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G +---> BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O +---> BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W +---> BAST18_X,BAST18_Y,BAST18_Z,BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4 +---> BAST18_5,BAST18_6,BAST18_7,BAST18_8,BAST18_9,BAST18EXC,BAST18NUM +---> BAST18DOL,BAST18PCT,BAST18AND,BAST18PRL,BAST18PRR,BAST18ADD,BAST18DSH +---> BAST18SLS,BAST18PER,BAST18COM,BAST18COL,BAST18APO,BAST18_1a +; +brush50.img +---> BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G,BRSH50_H +---> BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O,BRSH50_P +---> BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W,BRSH50_X +---> BRSH50_Y,BRSH50_Z,BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5 +---> BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9,BRSH50AND,BRSH50COL,BRSH50COM +---> BRSH50DOL,BRSH50EXC,BRSH50NUM,BRSH50PCT,BRSH50PER,BRSH50PRL,BRSH50PRR +---> BRSH50QUE,BRSH50SLS +; +brush20f.img +PON> +PPP> 5 +---> BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G +---> BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O +---> BRSH20_P,BRSH20_Q +COF> +---> BRSH20_R +CON> +---> BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W +---> BRSH20_X,BRSH20_Y,BRSH20_Z,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 +---> BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9,BRSH20_0,BRSH20COM,BRSH20PER +---> BRSH20SLS,BRSH20QUE,BRSH20EXC,BRSH20PCT,BRSH20COL +PPP> 0 +---> SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05,SQUD_06,SQUD_07,SQUD_08 +---> SQUD_09,SQUD_10,SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17 +---> SQUD_18,SQUD_19,SQUD_20 +---> useupbx,TRIVIA,CONTEST +; +ballfont.img +---> FNT_SEL,FNT_ENT,FNT_CRE +; +brush12.img +PON> +PPP> 5 +---> BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F +---> BRSH12_G,BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L +---> BRSH12_M,BRSH12_N,BRSH12_O,BRSH12_P,BRSH12_Q,BRSH12_R +---> BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W,BRSH12_X +---> BRSH12_Y,BRSH12_Z +---> BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 +---> BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +---> BRSH12QUE,BRSH12EXC,BRSH12COL +---> BRSH12DOL,BRSH12PER,BRSH12COM,BRSH12SLS,BRSH12NUM,BRSH12PCT,BRSH12AND +---> BRSH12PRL,BRSH12PRR,BRSH12DAS +PPP> 0 +; +brush10.img +PON> +PPP> 5 +---> BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F +---> BRSH10_G,BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L +---> BRSH10_M,BRSH10_N,BRSH10_O,BRSH10_P,BRSH10_Q,BRSH10_R +---> BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W,BRSH10_X +---> BRSH10_Y,BRSH10_Z +---> BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5 +---> BRSH10_6,BRSH10_7,BRSH10_8,BRSH10_9 +---> BRSH10COM,BRSH10PER,BRSH10SLS +---> BRSH10QUE,BRSH10EXC,BRSH10DOL,BRSH10PCT,BRSH10AND,BRSH10NUM,BRSH10PRL +---> BRSH10PRR,BRSH10COL +PPP> 0 +; +statstxt.img +---> scorshad1,scorshad2 +---> stx_all,stx_aveallow,stx_avescore,stx_created,stx_current,stx_defeated +---> stx_defrank,stx_havenot,stx_l,stx_nbateams,stx_nextcpu,stx_offrank +---> stx_ofthe27,stx_overall,stx_record,stx_tournwin,stx_w,stx_worldrec +---> stx_youhave,stx_avepoint,stx_lostto,stx_norecord,stx_pct,stx_wins +---> credbox +COF> +---> stshad1,stshad2 +CON> +; +threepnt.img +---> THREPNTS +IHDR PAL:L +---> THREP1,THREP2,THREP3,THREP4,THREP5,THREP6,THREP7,THREP8,THREP9,THREP10 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +sgmd8.img +---> plyr1,plyr2,plyr3,plyr4 +; +ogmd10.img +COF> +---> getready,_1quart,continue +---> _2quart,_3quart +---> _4quart,overtme +---> congrats_l,winstay_l,chalneed_l,chalacc_l,winfree +---> TMATE +---> CHALENG +CON> +; +infowin.img +---> dronetxt,firstwin,colormessage,joycontrol,red,blue,green,yellow +---> message1,message2,message3,message4,message5,message6,message7 +---> message9,message2a +---> infobox,CREDNOT,WINPIECE +; +expl_old.img +PON> +---> CLD1A +---> CLDB1 +---> CLDB1YELL +---> CLDB1WHT,CLDB1ORNG,CLDB1LGRY,CLDB1GRN,CLDB1PURP +POF> +---> CLD2,CLD3,CLD4,CLD4A,CLD4B,CLD5,CLD6,CLD7,CLD8,CLD9,CLD10,CLD11 +---> CLDB2,CLDB3,CLDB4 +PON> +; +flash.img +PPP> 5 +---> flash1,flash4 +---> flash3,flash3a,flash5,flash6,flash2 +PPP> 0 +; +;ASM> ARROW.TBL +; +arrows.img +---> arrow1l,arrow1r,arrow2l,arrow2r,arrow3l,arrow3r,arrow4l,arrow4r +---> arrow1t,arrow2t,arrow3t,arrow4t +---> arrow1l2p,arrow1r2p,arrow2l2p,arrow2r2p +---> arrow1t2p,arrow2t2p +; +ASM> CITY.TBL +; +citnames.img +---> ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND +---> LA_CLIP,LA_LAKS +---> MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT,SEA,UTAH,WASH +---> TORO,VANC +---> SCOR18_0,SCOR18_1,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5 +---> SCOR18_6,SCOR18_7,SCOR18_8,SCOR18_9 +; +ASM> LEDS.TBL +GLO> FONTTBL.GLO +; +leds1.img +ZOF> +COF> +---> QUARTR01,QUARTR02,QUARTR03,QUARTR04,OT01,OT02,OT03,OT04,SHOTPER,FREEPLT +---> MINCOL00,MINCOL01,MINCOL02,MINCOL03 +---> TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 +---> TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 +---> LED_00 +IHDR SAG:L +;These images are not referenced - but needed... +---> LED_0,LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LED_9 +---> LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,LED_17,LED_18,LED_19 +---> LED_20,LED_21,LED_22,LED_23,LED_24,LED_25,LED_26,LED_27,LED_28,LED_29 +---> LED_30,LED_31,LED_32,LED_33,LED_34,LED_35,LED_36,LED_37,LED_38,LED_39 +---> LED_40,LED_41,LED_42,LED_43,LED_44,LED_45,LED_46,LED_47,LED_48,LED_49 +---> LED_50,LED_51,LED_52,LED_53,LED_54,LED_55,LED_56,LED_57,LED_58,LED_59 +---> LED_60,LED_61,LED_62,LED_63,LED_64,LED_65,LED_66,LED_67,LED_68,LED_69 +---> LED_70,LED_71,LED_72,LED_73,LED_74,LED_75,LED_76,LED_77,LED_78,LED_79 +---> LED_80,LED_81,LED_82,LED_83,LED_84,LED_85,LED_86,LED_87,LED_88,LED_89 +---> LED_90,LED_91,LED_92,LED_93,LED_94,LED_95,LED_96,LED_97,LED_98,LED_99 +; +---> LED_100,LED_101,LED_102,LED_103,LED_104,LED_105,LED_106,LED_107,LED_108,LED_109 +---> LED_110,LED_111,LED_112,LED_113,LED_114,LED_115,LED_116,LED_117,LED_118,LED_119 +---> LED_120,LED_121,LED_122,LED_123,LED_124,LED_125,LED_126,LED_127,LED_128,LED_129 +---> LED_130,LED_131,LED_132,LED_133,LED_134,LED_135,LED_136,LED_137,LED_138,LED_139 +---> LED_140,LED_141,LED_142,LED_143,LED_144,LED_145,LED_146,LED_147,LED_148,LED_149 +---> LED_150 +---> LED_MAX +---> LED_0A,LED_1A,LED_2A,LED_3A,LED_4A,LED_5A,LED_6A,LED_7A,LED_8A,LED_9A +; +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +; +ASM> TEXT.TBL +; +trogf15.img +COF> +POF> +---> FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 +---> FON15A,FON15B,FON15C,FON15CR,FON15D,FON15E,FON15F,FON15G,FON15H,FON15I +---> FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P,FON15Q,FON15R,FON15S +---> FON15T,FON15U,FON15V,FON15W,FON15X,FON15Y,FON15Z,FON15and,FON15apos +---> FON15apos1,FON15ast,FON15backsp,FON15brackl,FON15brackr,FON15break +---> FON15carr,FON15colon,FON15comma,FON15dash,FON15doll,FON15engPOUN +---> FON15equal,FON15excla,FON15forsp,FON15la,FON15lb,FON15lc,FON15ld +---> FON15le,FON15less,FON15lf,FON15lg,FON15lh,FON15li,FON15line,FON15lj +---> FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp,FON15lq,FON15lr +---> FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx,FON15ly,FON15lz +---> FON15more,FON15paren2l,FON15paren2r,FON15parenl,FON15parenr,FON15perc +---> FON15period,FON15plus,FON15poun,FON15quest,FON15quote,FON15rquote +---> FON15semicol +; +trogf7.img +---> FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H,FONT7I,FONT7J +---> FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P,FONT7Q,FONT7R,FONT7S,FONT7T +---> FONT7U,FONT7V,FONT7W,FONT7X,FONT7Y,FONT7Z,FONT7a,FONT7b,FONT7c,FONT7d +---> FONT7e,FONT7f,FONT7g,FONT7h,FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n +---> FONT7o,FONT7p,FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT71,FONT72 +---> FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79,FONT70,FONT7excla +---> FONT7pound,FONT7doll,FONT7percen,FONT7and,FONT7ast,FONT7parenl +---> FONT7parenr,FONT7dash,FONT7line,FONT7equal,FONT7plus,FONT7bracl +---> FONT7bracr,FONT7backsp,FONT7paren2l,FONT7paren2r,FONT7break +---> FONT7semicol,FONT7apost,FONT7colon,FONT7quote,FONT7comma,FONT7period +---> FONT7forsp,FONT7less,FONT7more,FONT7quest +PON> +; +ASM> ROBOIMG.TBL +GLO> ROBOIMG.GLO +; +robotron.img +COF> +---> robo_bad,bullet_hrz,bullet_vrt,bullet_bck,bullet_fnt,grunt_1,grunt_2 +---> grunt_3,robo_dead +;---> brain_l1,brain_l2,brain_l3,brain_r1,brain_r2,brain_r3 +;---> brain_d1,brain_d2,brain_d3,brain_u1,brain_u2,brain_u3 +---> enf_1,enf_g1 +---> enf_g2,enf_g3,enf_g4,enf_g5,spark_1,spark_2,spark_3,spark_4,man_l1 +---> man_l2,man_l3,man_r1,man_r2,man_r3,man_d1,man_d2,man_d3,man_u1,man_u2 +---> man_u3,skull,one_k,two_k,three_k,four_k,five_k,mom_l1,mom_l2,mom_l3 +---> mom_r1,mom_r2,mom_r3,mom_d1,mom_d2,mom_d3,mom_u1,mom_u2,mom_u3,dad_l1 +---> dad_l2,dad_l3,dad_r1,dad_r2,dad_r3,dad_d1,dad_d2,dad_d3,dad_u1,dad_u2 +---> dad_u3,kid_l1,kid_l2,kid_l3,kid_r1,kid_r2,kid_r3,kid_d1,kid_d2,kid_d3 +---> kid_u1,kid_u2,kid_u3,hulk_l1,hulk_l2,hulk_l3,hulk_ud1,hulk_ud2,hulk_ud3 +---> hulk_r1,hulk_r2,hulk_r3,rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5 +---> rfont_6,rfont_7,rfont_8,rfont_9,rfont_exc,rfont_comma,rfont_period +---> rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g,rfont_h,rfont_i +---> rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o,rfont_p,rfont_q,rfont_r +---> rfont_s,rfont_t,rfont_u,rfont_v,rfont_w,rfont_x,rfont_y,rfont_z +---> rfont_lparens,rfont_rparens,rfont_fslash +;---> rfont_arrow +---> wave_text,circle_1 +---> circle_2,circle_3,circle_4,circle_5,circle_6,circle_7,circle_8,rsmall_0 +---> rsmall_1,rsmall_2,rsmall_3,rsmall_4,rsmall_5,rsmall_6,rsmall_7,rsmall_8 +---> rsmall_9,grunt_xv1,grunt_xv2,grunt_xv3,grunt_xv4,grunt_xdb1,grunt_xdb2 +---> grunt_xdb3,grunt_xdb4,grunt_xh1,grunt_xh2,grunt_xh3,grunt_xh4 +---> grunt_xdf1,grunt_xdf2,grunt_xdf3,grunt_xdf4,star_1,star_2,star_3 +---> crystal_1,crystal_2,crystal_3,diamond_1,diamond_2,diamond_3,R2084_1 +---> R2084_2,R2084_3,pcube_1,pcube_2,pcube_3,spiral_1,spiral_2,spiral_3 +---> square_1,square_2,square_3,triangle_1,triangle_2,triangle_3,rectangle_1 +---> rectangle_2,rectangle_3,enf_xv1,enf_xv2,enf_xv3,enf_xv4,enf_xv5,enf_xb1 +---> enf_xb2,enf_xb3,enf_xb4,enf_xh1,enf_xh2,enf_xh3,enf_xh4,enf_xf1,enf_xf2 +---> enf_xf3,enf_xf4,tank_g1,tank_g2,tank_g3,tank_g4,quark_1,quark_2,quark_3 +---> quark_4,quark_5,quark_6,quark_7,quark_8,tank_1,tank_2,tank_3,tank_4 +---> shell +CON> +; +;  ;THESE ARE CHARACTERS TO MAKE DIFFERENT! +ASM> IMGTBL.ASM +GLO> BGNDTBL.GLO +; +BBB> BLANKJAM +; +BBB> TEAMSEL4 +BBB> ENTER4 +BBB> OPTSCR +;BBB> VSSCR +BBB> SPORTBG +BBB> ATTRACT +BBB> HALFTIME diff --git a/IMG/MUGS1.IMG b/IMG/MUGS1.IMG new file mode 100644 index 0000000..89bb639 Binary files /dev/null and b/IMG/MUGS1.IMG differ diff --git a/IMG/MUGS2.IMG b/IMG/MUGS2.IMG new file mode 100644 index 0000000..a9929ea Binary files /dev/null and b/IMG/MUGS2.IMG differ diff --git a/IMG/MUGS3.IMG b/IMG/MUGS3.IMG new file mode 100644 index 0000000..1936988 Binary files /dev/null and b/IMG/MUGS3.IMG differ diff --git a/IMG/MUGS4.IMG b/IMG/MUGS4.IMG new file mode 100644 index 0000000..f3a9586 Binary files /dev/null and b/IMG/MUGS4.IMG differ diff --git a/IMG/MUGSMSC1.IMG b/IMG/MUGSMSC1.IMG new file mode 100644 index 0000000..c236751 Binary files /dev/null and b/IMG/MUGSMSC1.IMG differ diff --git a/IMG/MUGSMSC2.IMG b/IMG/MUGSMSC2.IMG new file mode 100644 index 0000000..310e5a8 Binary files /dev/null and b/IMG/MUGSMSC2.IMG differ diff --git a/IMG/MUGSMSC3.IMG b/IMG/MUGSMSC3.IMG new file mode 100644 index 0000000..a3675a1 Binary files /dev/null and b/IMG/MUGSMSC3.IMG differ diff --git a/IMG/MUGSMSC4.IMG b/IMG/MUGSMSC4.IMG new file mode 100644 index 0000000..14a97fc Binary files /dev/null and b/IMG/MUGSMSC4.IMG differ diff --git a/IMG/MUGSMSC5.IMG b/IMG/MUGSMSC5.IMG new file mode 100644 index 0000000..caab341 Binary files /dev/null and b/IMG/MUGSMSC5.IMG differ diff --git a/IMG/MUGSMSC6.IMG b/IMG/MUGSMSC6.IMG new file mode 100644 index 0000000..869a9cd Binary files /dev/null and b/IMG/MUGSMSC6.IMG differ diff --git a/IMG/MUGSMSC7.IMG b/IMG/MUGSMSC7.IMG new file mode 100644 index 0000000..cf68eaa Binary files /dev/null and b/IMG/MUGSMSC7.IMG differ diff --git a/IMG/MUGSMSC8.IMG b/IMG/MUGSMSC8.IMG new file mode 100644 index 0000000..ce2bfaa Binary files /dev/null and b/IMG/MUGSMSC8.IMG differ diff --git a/IMG/NBACROWD.IMG b/IMG/NBACROWD.IMG new file mode 100644 index 0000000..fac4024 Binary files /dev/null and b/IMG/NBACROWD.IMG differ diff --git a/IMG/NBAFADES.IMG b/IMG/NBAFADES.IMG new file mode 100644 index 0000000..47bdf26 Binary files /dev/null and b/IMG/NBAFADES.IMG differ diff --git a/IMG/NBAFHOOK.IMG b/IMG/NBAFHOOK.IMG new file mode 100644 index 0000000..0ae3a0b Binary files /dev/null and b/IMG/NBAFHOOK.IMG differ diff --git a/IMG/NBAJMPPS.IMG b/IMG/NBAJMPPS.IMG new file mode 100644 index 0000000..4bcedc2 Binary files /dev/null and b/IMG/NBAJMPPS.IMG differ diff --git a/IMG/NBALL.IMG b/IMG/NBALL.IMG new file mode 100644 index 0000000..f2fd2d1 Binary files /dev/null and b/IMG/NBALL.IMG differ diff --git a/IMG/NBASPNMV.IMG b/IMG/NBASPNMV.IMG new file mode 100644 index 0000000..3811406 Binary files /dev/null and b/IMG/NBASPNMV.IMG differ diff --git a/IMG/NBA_DEF1.IMG b/IMG/NBA_DEF1.IMG new file mode 100644 index 0000000..202fc48 Binary files /dev/null and b/IMG/NBA_DEF1.IMG differ diff --git a/IMG/NBA_DEF3.IMG b/IMG/NBA_DEF3.IMG new file mode 100644 index 0000000..c68a49e Binary files /dev/null and b/IMG/NBA_DEF3.IMG differ diff --git a/IMG/NBA_DEF4.IMG b/IMG/NBA_DEF4.IMG new file mode 100644 index 0000000..6fe4658 Binary files /dev/null and b/IMG/NBA_DEF4.IMG differ diff --git a/IMG/NBA_DNK1.IMG b/IMG/NBA_DNK1.IMG new file mode 100644 index 0000000..23bc494 Binary files /dev/null and b/IMG/NBA_DNK1.IMG differ diff --git a/IMG/NBA_DNK2.IMG b/IMG/NBA_DNK2.IMG new file mode 100644 index 0000000..89172a9 Binary files /dev/null and b/IMG/NBA_DNK2.IMG differ diff --git a/IMG/NBA_DNK3.IMG b/IMG/NBA_DNK3.IMG new file mode 100644 index 0000000..65b40dc Binary files /dev/null and b/IMG/NBA_DNK3.IMG differ diff --git a/IMG/NBA_DNK4.IMG b/IMG/NBA_DNK4.IMG new file mode 100644 index 0000000..97aa888 Binary files /dev/null and b/IMG/NBA_DNK4.IMG differ diff --git a/IMG/NBA_DNK5.IMG b/IMG/NBA_DNK5.IMG new file mode 100644 index 0000000..6de9ce9 Binary files /dev/null and b/IMG/NBA_DNK5.IMG differ diff --git a/IMG/NBA_DNK6.IMG b/IMG/NBA_DNK6.IMG new file mode 100644 index 0000000..a7e23ba Binary files /dev/null and b/IMG/NBA_DNK6.IMG differ diff --git a/IMG/NBA_DNK7.IMG b/IMG/NBA_DNK7.IMG new file mode 100644 index 0000000..3756803 Binary files /dev/null and b/IMG/NBA_DNK7.IMG differ diff --git a/IMG/NBA_DNK8.IMG b/IMG/NBA_DNK8.IMG new file mode 100644 index 0000000..bdbb5c9 Binary files /dev/null and b/IMG/NBA_DNK8.IMG differ diff --git a/IMG/NBA_MAK1.IMG b/IMG/NBA_MAK1.IMG new file mode 100644 index 0000000..9ee1784 Binary files /dev/null and b/IMG/NBA_MAK1.IMG differ diff --git a/IMG/NBA_MSC1.IMG b/IMG/NBA_MSC1.IMG new file mode 100644 index 0000000..d9c497a Binary files /dev/null and b/IMG/NBA_MSC1.IMG differ diff --git a/IMG/NBA_MSC2.IMG b/IMG/NBA_MSC2.IMG new file mode 100644 index 0000000..1b4a762 Binary files /dev/null and b/IMG/NBA_MSC2.IMG differ diff --git a/IMG/NBA_MSC3.IMG b/IMG/NBA_MSC3.IMG new file mode 100644 index 0000000..926c427 Binary files /dev/null and b/IMG/NBA_MSC3.IMG differ diff --git a/IMG/NBA_MSC4.IMG b/IMG/NBA_MSC4.IMG new file mode 100644 index 0000000..045b9d9 Binary files /dev/null and b/IMG/NBA_MSC4.IMG differ diff --git a/IMG/NBA_PAS1.IMG b/IMG/NBA_PAS1.IMG new file mode 100644 index 0000000..5f9180b Binary files /dev/null and b/IMG/NBA_PAS1.IMG differ diff --git a/IMG/NBA_PAS2.IMG b/IMG/NBA_PAS2.IMG new file mode 100644 index 0000000..3d39ef7 Binary files /dev/null and b/IMG/NBA_PAS2.IMG differ diff --git a/IMG/NBA_PAS3.IMG b/IMG/NBA_PAS3.IMG new file mode 100644 index 0000000..0819b07 Binary files /dev/null and b/IMG/NBA_PAS3.IMG differ diff --git a/IMG/NBA_PAS4.IMG b/IMG/NBA_PAS4.IMG new file mode 100644 index 0000000..bb5f1b6 Binary files /dev/null and b/IMG/NBA_PAS4.IMG differ diff --git a/IMG/NBA_RUN1.IMG b/IMG/NBA_RUN1.IMG new file mode 100644 index 0000000..81490e0 Binary files /dev/null and b/IMG/NBA_RUN1.IMG differ diff --git a/IMG/NBA_RUN2.IMG b/IMG/NBA_RUN2.IMG new file mode 100644 index 0000000..75c8202 Binary files /dev/null and b/IMG/NBA_RUN2.IMG differ diff --git a/IMG/NBA_SHT1.IMG b/IMG/NBA_SHT1.IMG new file mode 100644 index 0000000..88f1481 Binary files /dev/null and b/IMG/NBA_SHT1.IMG differ diff --git a/IMG/NBA_SHT2.IMG b/IMG/NBA_SHT2.IMG new file mode 100644 index 0000000..1a6d2a2 Binary files /dev/null and b/IMG/NBA_SHT2.IMG differ diff --git a/IMG/NBA_SHT3.IMG b/IMG/NBA_SHT3.IMG new file mode 100644 index 0000000..f583f91 Binary files /dev/null and b/IMG/NBA_SHT3.IMG differ diff --git a/IMG/NBA_STN1.IMG b/IMG/NBA_STN1.IMG new file mode 100644 index 0000000..7cb1c20 Binary files /dev/null and b/IMG/NBA_STN1.IMG differ diff --git a/IMG/NBBD8.IMG b/IMG/NBBD8.IMG new file mode 100644 index 0000000..4a26aae Binary files /dev/null and b/IMG/NBBD8.IMG differ diff --git a/IMG/NEWLOGOS.IMG b/IMG/NEWLOGOS.IMG new file mode 100644 index 0000000..3b78aba Binary files /dev/null and b/IMG/NEWLOGOS.IMG differ diff --git a/IMG/OFFNBA.IMG b/IMG/OFFNBA.IMG new file mode 100644 index 0000000..0b4b600 Binary files /dev/null and b/IMG/OFFNBA.IMG differ diff --git a/IMG/OGMD10.IMG b/IMG/OGMD10.IMG new file mode 100644 index 0000000..5677505 Binary files /dev/null and b/IMG/OGMD10.IMG differ diff --git a/IMG/OPTSCR.BDB b/IMG/OPTSCR.BDB new file mode 100644 index 0000000..e20dfd3 --- /dev/null +++ b/IMG/OPTSCR.BDB @@ -0,0 +1,17 @@ +OPTSCR 2000 1000 255 2 8 14 +OPTSCR 887 1414 357 638 +BKGD 245 757 191 513 +4000 297 228 0 0 +4000 297 332 15 7 +4000 297 406 C 4 +4000 396 228 3 1 +4000 497 228 9 3 +4000 497 332 12 6 +4000 497 406 F 5 +4000 597 228 6 2 +4000 963 513 15 7 +4000 963 409 0 0 +4000 1062 409 3 1 +4000 1163 513 12 6 +4000 1163 409 9 3 +4000 1263 409 6 2 diff --git a/IMG/OPTSCR.BDD b/IMG/OPTSCR.BDD new file mode 100644 index 0000000..9ba7384 Binary files /dev/null and b/IMG/OPTSCR.BDD differ diff --git a/IMG/OPTSCR.IMG b/IMG/OPTSCR.IMG new file mode 100644 index 0000000..84e52a2 Binary files /dev/null and b/IMG/OPTSCR.IMG differ diff --git a/IMG/OUTDOOR.IMG b/IMG/OUTDOOR.IMG new file mode 100644 index 0000000..0c05275 Binary files /dev/null and b/IMG/OUTDOOR.IMG differ diff --git a/IMG/PLYRNAME.IMG b/IMG/PLYRNAME.IMG new file mode 100644 index 0000000..33d88f5 Binary files /dev/null and b/IMG/PLYRNAME.IMG differ diff --git a/IMG/PLYRNUBS.IMG b/IMG/PLYRNUBS.IMG new file mode 100644 index 0000000..0a795d9 Binary files /dev/null and b/IMG/PLYRNUBS.IMG differ diff --git a/IMG/PNAMES.IMG b/IMG/PNAMES.IMG new file mode 100644 index 0000000..91f9fef Binary files /dev/null and b/IMG/PNAMES.IMG differ diff --git a/IMG/PNAMES2.IMG b/IMG/PNAMES2.IMG new file mode 100644 index 0000000..fef47d9 Binary files /dev/null and b/IMG/PNAMES2.IMG differ diff --git a/IMG/PRIVILG.IMG b/IMG/PRIVILG.IMG new file mode 100644 index 0000000..4d05b72 Binary files /dev/null and b/IMG/PRIVILG.IMG differ diff --git a/IMG/PRIVILG2.IMG b/IMG/PRIVILG2.IMG new file mode 100644 index 0000000..27001a8 Binary files /dev/null and b/IMG/PRIVILG2.IMG differ diff --git a/IMG/PRIZES.IMG b/IMG/PRIZES.IMG new file mode 100644 index 0000000..ccd5991 Binary files /dev/null and b/IMG/PRIZES.IMG differ diff --git a/IMG/REFEREE.IMG b/IMG/REFEREE.IMG new file mode 100644 index 0000000..2464c90 Binary files /dev/null and b/IMG/REFEREE.IMG differ diff --git a/IMG/ROBOTRON.IMG b/IMG/ROBOTRON.IMG new file mode 100644 index 0000000..f5c6f98 Binary files /dev/null and b/IMG/ROBOTRON.IMG differ diff --git a/IMG/SGMD8.IMG b/IMG/SGMD8.IMG new file mode 100644 index 0000000..b9fe13f Binary files /dev/null and b/IMG/SGMD8.IMG differ diff --git a/IMG/SPARKS.IMG b/IMG/SPARKS.IMG new file mode 100644 index 0000000..04fa07e Binary files /dev/null and b/IMG/SPARKS.IMG differ diff --git a/IMG/SPORTBG.BDB b/IMG/SPORTBG.BDB new file mode 100644 index 0000000..c1509f9 --- /dev/null +++ b/IMG/SPORTBG.BDB @@ -0,0 +1,8 @@ +SPORTBG 2000 1000 255 1 6 6 +SPORTBG 82 492 94 434 +A00 174 308 9 3 +A00 174 223 6 2 +A00 174 143 0 0 +A00 374 308 F 5 +A00 374 223 3 1 +A00 374 143 C 4 diff --git a/IMG/SPORTBG.BDD b/IMG/SPORTBG.BDD new file mode 100644 index 0000000..4161c40 --- /dev/null +++ b/IMG/SPORTBG.BDD @@ -0,0 +1,720 @@ +6 +9 200 90 1 +utjsrqfslrpfrrirbfp\ildddhhddj`bgddee__d^\Z][[dT]WXXM^TTPPUeeeSYBJKOCOMNUNZCKVLSFHOIEEEHJHFBRB0FD@@D<<;F=???B9=?1B1=6;4445885;43?146&3545+*4%321)6*+$+,$*&(%2& +(//*) """!! +! +rrkjxfiiivqfrbjipaaihhlggg^^ddddgbf\g_eXd[dXd\VbT[dU[T[XZfKKKKKfHOOOLOHRSNeEPIFHGNGLKB0`B?FDLCFF;D@O<2F;;;;<=8>@=1?:=?2?<3;;9;3<22255&<4565632!1%343%%%&()2%)$+***"&!"&"$#! ! xqppfvqffwjslhljqfpqqfcldgghhd[__d[^gjVYcWW^[[[[WSbaaaYYVZPTMSFPOKYCVKRKFOVKRHHJ`J0RHFFIIDOD@F??H<==F<<;:@=?1?1?=;==5::9=22?13864?334)54%2123332((%(65!&())))"&1(&&"""$""/pxf{qxxxsttlltlkjbiiqpbhhhh_gjch[g^W^c\aYZcW^W^[X^ZYRRYYYZTWPLOPOSPSHKYVHVF7=2<<1246=25534;&223%&43%(*54*(%1!!% )%/1%%!%"## %#"  / +pqivxppskleultkkkjb\pqrhhdg[gbbgkccgd[]YaZWW^XTTTSVRKHYY?Y]PWTMTMMMMSLLFFHK?RRRR0RHLICOCFFHHBB?=C;H6=3;213;?15+844221!3&3&356(3&%2&(43!12&0&%*$"""("""" + ppirxieutttkklgtgktldlbichhdk^kfVbcjZ]g^bZZY\aKYYKfS^TUSRRK`HOSLSZIMPPI`RKKHHKFOCLFF;LD;??<D??<<<=C===9@9;<2?1?223=66=333<3334&212(32%2!%2%21!%&()(#$#"( $# !qvqqqxaqjkleulkltgudgggdllkjckd]Jf]^ghd[d_[b\YYpK\WPWWP\JRKYaRSMGPVLLSV?KHD><0<>F?2?<<=1?=;433=5321222<(5%332112&32!()(%3 )(!&+") *"###&"#"!!&%!   rivq{ppqivxoxjllksscsgcanqj^gk^gcfaaaaYYZS]^TbYS]bPTP\YOVZWPO`BRYKKVHHFHOLLLH?KKAA:=00B?<3;6;4==;;32?12<243!222&4&3!!1!6(23**)&%4") "##"#"&"% +  q{fxxqvwrfoop\ssssjbskjaaYbqbkgboRaffaaVfbWWW]Y]]]WT^OYYaHOVJnJRYFZOOFKKVLLHRKR?KFH?KGGC???BBH8C>:@@>:DD8@>CA981J12842222?122211133112&5)3%212%!1&(!1()%&&1! %%      + + ypxxxaxfxyaxvqfirvfffpaaitk]rYibbbiRfjWc]]]]]Za`RRJ`K\\VVVYRRKYHVKHOOHaFLOHKKR0?OAD89;=898201<22<22212122!04***)0//022%4!%(&!(!&%!  ! +  +  oopo`yxxxxvqiqvffqpyqijjff\bbjbZifJ```nR\YJRaR`RaVaKYHOOVVKRRaKRKHHFOOFK?RRKFF?BFDGNGICCFCCFBB1BJ?/F9D899D89D9;?1B%=321111211233=6+:75%1!(%3&!2))&2%!!%0%!!% "!   }a{yyxfqfqivqfrriqafirjjbffbji\b\pn`ooRaRnnao``\Z\VaRKYVVRRRRKOVYVOZOHY?RBVILHRFODMADCLDCCF;FF?B0B?<8<=;C8D::88<00?<211112;3?335&(+*)()(66 40&)1%(%!%%%%"  +   oyyayp{fypqqfxrrfofsbiijjafr]bbjjY``oaYa`nn``RKZ\VfVfYfKaRKYVOOYKHLO?BRRBRSIKBRCIG@LLCDDIDCC@@CK@C;CC;;<0B0228968582B1?10?576323455&/2&5(*+6(&(%0!0%&! !!!! +  + +  z`nnzoyppypxpaooaxirrjjiqijjb\oai\```aYYYaaYYaRRYVYRaVYYYYB`\LVaB`J?YKRRCOLPPOK?BFLCFFDD=R>?0D2<;615C237,:/?1:,119/11,6,1,7.,11/#,#,#,,,1,%)-/"$.-%%))$,"00 1  "" "#"/" !##!!pjjiii\yhslddme^kke_^eenZdkTe_`V_M[WI]Wg[LoGWRRXHXMHbRUYSKZN\C[WCLQP88GG[CL9WCDJH9?HD9HDQDMHHH9WCCC?:@90?>:08?2<2@:GC6379C??1?1001/?0C/910-79"1#/11?,--"1,)...%/#').&*/ "!   " " 0"" !!ji\zaijr[akm`nlk]d_dXpZf_eYde_`^dQaLiagGWLLbYOZYXMoW[HUKOVOM[GC8gHWGgPLHHHH?CWLH\?HJJIH1LDHC??1C???:6D?D<;950D>;>99972:11010099/?1-:,,,!01//"1/--$10/-/ 1)&.))."/-)*+(%F !! 1!! !"#1#"!"r\csicjXrrke_eeennedib^__e^^_Zd]d]iGLGGW\a[TVZ^^OZQP8PMZVOKMG[L[[LLC[LMQQQMDMDH?C?DJ>M9LH?CC?0GC9D::D??B<2:C517>,?0G?:/1::-9-.,:::-6-/0 C/6-,"#,15 ..,")*1 "/+*&&&%1  ""5 !!!"-$"##"!""""sppbijjsarXkdd_nnee_diik^d_ff^]T``b[oWWoC[MVZ^SVVOR\PG[NOTSSMHHHLLC[GWDD:LI@HL?LCWDI@?H>>?C?H:W9::HHCC;O7G52B3>9G0:@-?C19:6,/,:,1/:-,16.$?110 /:#1,..!,**.#.,"/0!*'))+&!!! 1"  !""###$$#!## "!""ppbrraarrQazike__e_ff]i\bpn`_d^ffOa[\aWW[\T^YMRZZTRQL\MIRRSNTX\L?[GC[?LaW?HDHW9M@@DHCC@@9?9@:H/DD:9CC2A;@CC;<>9?972900?,6-9C1?1?11//0!,:/!/-,9#/00../0!2()).)/%-$,/#%)'*&" "$"5 !##"""""!! !5"#!csrabbzWsksP[jeddeff_kciaQdedYZ`VrFG\QLaRZ_U]aQNYTXD\IM\HRTENM?WHQWGWMI?[LLCGCMJ@M@LCL9LLCCH9LC9H91?=B=>6?H7D90?7>D1C?,9,9!C,,001.@!G// 00:-,,,1!##1!51&2).%)).)*'%/-&&&%15#$" 0""!""""## !#" ! #iaospjscq]iobp`mdenZleYc\kcXYen^[Fg[o[WQd_UTUYRTYRITY]WGQINSIPG\IIDQISIHD@@LGWD@MQ9Q@@HCCC?CC?C9CGCBBA>2=<>71559761C-:,,/00,6:,9.7-/-66150/,,//---/00 1#-&-..-&(+*)%%.()"!!! $#"""!"$$""#"!#%#"rozbjsjk]iarcbq_n_ele^ek]hWrd__QFg[bQWaMR]dT`VXT^YTOOQG[WiMMGPPLID\@S@LLIMHH9HHHD?9@@9W?1?D:CC9>,C>B=;29C0?::99?0C,:,162,19.6//"1//#1,.-/0111/#$-)(*&.*')')%%&,!!50"#""#"!##"!##!5" !!rbsirjss\ra\s\tdmnmlYdedjgPXTeQxPabb\X]R\\YT^O^SYZ`VURLL[GDGGGW?LHHMML??L9L?HMMLGGHHHW?LHDH99@>DH6;E7>JBB=D80>E7/1191/90?,991?/-911///111,:15 /,/0!"##/"1.**.&%"-'))# ,"!0!!"!!""/#! "!!! #"  sptb{\aroz\jjrace_n_e_`djarbaLgxhLQLbT_ZRaMYTYY]RUVTYKS\W[Pg[L\HWaHDWC?\?CWLMII9WD@LCC?9999?LDD:H@6>>>=BA21F?E.?C:9//? G,6-,119/0!1/1 0!,6-/1,-1 !/,//"5#-#"-&5$&)'!FF !#"!!!!!$$"0  ##"/!pcjjc|ijbbjkYjWzkn_eff_dk]d\Pgxhaa[bd_`UeSXYTY]YTXXSSTNMQQWh?QHHMI@XQL9QHWC?D@L?@JDL??D9LC??:L19:H96ABBB<>C06,?11:/?991?66,9:.,::9/9/050:,/17.,11/,#"10 !08#&*%)((." F !#"!"$#$""""!1## ! bjtjscjjbpkkpXiabke^n_qd__RhhPhLQLi]YT^^^ZYXYU^VOM[HYSXXDQH?\QQbMSXDHQQ9LLHHHLCL>@L?HD9LL1?:D99W0C0@=BB=>;>:9C0G1C19,:::,:,,-7:-,,,/1!1,/11/%:11,$//"00/,0!-)'**(*#0  !0 "-%$"""#!"$# !! r{\irssssjtcjjcpii]edYdZfeaPoa\bri^Z^XY^T^Tb\TVVTSaaSYQGLa\LL?LDD@DHW??WLHMIH[WH\CW?L?L?99D:LD@9?CC>=BA;7DH@J<<>><<>W819::?C/,C0973619,1509,/#,/11-699,,#,/"/,-#1!1#---&-$ 8 "##/###""%$" """#"!!!$psr{pkppqltspkj\raobe`nsgxhiba[rWX^^T]c]TTdZVcQSTTRM[PGLQH\XERHHXMHWHMQHQLCWHQHHLL:H\?9@:?>N;JJ>>>EB;<<>>3E/5?,:D,9/9::000/?1C01!C!0",:,9,/0//1!/-, #%,--#! 5F 0 0/#!!#%$$"""%!!   tsijjjcjcppjcjsbbjpcz[[oaiab]de`_Xa^V_^Y\\]R]Si8aGL\LiHLLMIRXQWWWCWHDQ?CHI@@HLLDHDDDD:9H>@EAA;;;>>>2>15/76,911,:,-,110 1:,10/,,,///,,-,"#-,"11?,$$"%-#!F !0 "%&$#!!!1!#$ "#"! %jbpqqjijukldcsraspXj\[[WiWbde_Ze^pW]_^YZ_Xb]SRQ[PP[L\W\MMHXIDL\HLW?HQL\IJ@\W?L?M@DLL:L?H9@@@E2E/G?6H?1:H?96:9//1509,/,6:/91!"/--,1"-#1",$#","!--"!!!!"!0 !"!"$%"!!/! ""%" "!$|jqwqjjpqcqpsarjjbrarrWWW\]lnZ_l]]RibdTZVSMYY]RQWy[WLLRTYIQQH?HMQH\HLCME@H?LCW?LHH???L?H:H99@@;E>J/01116;799:/1/:11,9/0-%#,),001,#"!//00#-,,#! !1""0"#"""""#$#""!!##! $""""rjdqjstqtiiiirjelX\aaWaab]dZe]]dTe_bWXd^YdYYYSQaGW\WhWSTIH\?[[HHL?LLCCHDQ?LIMDH9WC0WJ>>HH1CW7@>;>>>;;;;>;4=;2,G05C7)9/9?05?111//00?1,734$,,"050/"""/###,,/$#0 !""!!#%-#"" $! !#"#!!  !tpjssbkkjsi[oi]lprr\biaad___eiaY_ZT\\\RY]]S]XCoG[HQMXRIXDaL?CW?WLWWLWMIWGWL@@H9L9WCJBBAJHCCC9H?:@;>;>7>>;;3;;90?96,////1005 111?0#/16)*)://!/"//$-,/,//#$,/"! ! 0!#$$"""#/! $#!!!!!  wqtrspqujbsiicksa\rbkji\ce_m^b[]^^]L[hbTT]XRLhPPaQITYSQLW[LQbH\CCW?HIJMHWLD\HHLH@DEKBAE;>H/GGPLH@7E4>7>276676?CC01,9/11011/,:622*-0!1 17%/,.,1"#"!1"#"!!1#,#! !$#"!!!#&$# %&!  $qssullpb|s\jmeproWajXb\\bd^ddYYld]a[G[WjRQ]\WGoL\QRTRD\\[CLDQLWH\L\MJML\JJM9C[CHDJEEANJ;A;S:5[PG?9@>;;<EA=A>/?9GP?09L:=<2;4A3;<:C0?7:911011:://1"72+B+-/1-#/!1""!01##/$$""""!!##!!%%##$#1"! !#"!#! #%$ riuvpiazrip]jraaccbj]kd_m]bde_^dXcoPPhhxP[[P[L\iQbXQ[[HXQLWWCGWLLQQ\LWLHHH9CDM:J>JJENEA=AANEANABBEEEJ;J;D9?5PFg81C6>>;3<4<2/C??05!/?,/119)2.)3*7..++-!/#1"$.,""/"1!10!!"! #/! !!!"#""%! !"wmqsaoajmejaarriiikYm^neQy[\bY]kdbWg[icXQ\Q\W\RRbIRb\LLWC[CLHQ\QMHW\JRQLaL0WH9WHKBAEAAE;J>I>;E>D?::C0G?::;<=;3<4;,051/9,?11,)<47/.*).)3$! ,/#1,$"111 1"! !###,%%#!"##!1#$$" # "'%#"wpsza|cvqs{o{]pjoiklnkkiaxi\ildd^dcGaXcQX]XQQ]ScMMQ\LL\L[CLQL\QQQQQMDHHW9MHHH[0LEKESEJJJ;A;;EAE;>>D0?:1G93=<;;3;26?0809:/1"C/3+43-0"7*3+)15 0$-"!0 "/#1"##/"##%%""$#! !$ $" !&  p{oo{kevjo[obqja[cdn_cp\Y]ckcYd^^ecLiMbLb]XLbSRbH\WGaQbQLQ\HL\HHL@IRHWGC\DHJMCC:@>J;E;J;KAEAAA;>3E>/?9CP0><2)3>6776?1,:/C10//3B4*60,4+2.-#,.),!!!",$"##"!1""/"#$"!"%#!"$#"# " azaspvvbaaasjbr[awfnmkk^m_l_kbbllT]i\aWrb\WLbQHHiQQWL\HWLbHaWDQ\Q@IHLLCWL9SJ@M:Q@JEEKA>E>76H?05C/:7;A;7>)>1?-/001:7-7+3*2/8#)*.*4.$*).#/$#,#/!1"1!0!!!" !" 5!$%$#!""! !$oitulk|azjukja[y\lfmdYlnm^l^diWckXX\baaXRQWQXXWaDMQiQHaCWLWWHXMMMM\LWDMDHIJJSJH??JEK=EJE>>>;@M><=>><<>11:G09<<3222?G1050.443-6*)3*1-1$)*()))&-//1",/! 0 0#$"!"#" !!$!!  #"{juvuizoztdjrooaj]kqkleedqYkcXrMkbo\\i]YcXX]S]bLiQ\?LWCCWWW\MQMIQLWCCQM\RJREKILWCIEEE>>>L0D;J2EA<79992;7771F5506+4B<,1-7*4-10/.*.)).$0! 5!! #""--##$##$,"1%%#"! !!$# tpqpsa\rsjbroackqcrbledkjLklYkja]aLao\XRMQbY]QLLLaLCWC[a\QIIMQMQL?H??L?JJSBBKEH?CJAJ@J;E@C9I<;A=N;2;;J3E3;;321C1/D055050C2;-627734.2+7-"11#.)7$0! 8!,,"/$/""/""!!"""!1!"$#! "#uupsrskpiro[appci[[ooobpkcke^cjW[xGo[o\\[oQL[[aQbLWLLQMQQHH\QbMHLHXDHWLIEKNEEJIHCHM>;AAAJD5L/C>J6@;J@@>;@@6,9C1550055-3+.:6)33+2)).)./8!,-#5 8!/#"!!"!"!"! !! "%!!##! ||bsss||aoatqecoyWroh\jqqk^ldi[xg[bbaQ]kQ\bbW[QbHLH\aL\Q\L\aLHMMHLHHLGLEBBSIIJ;DPG1JEEEE>@?[9=<;3B=3>;3>62J710 8855,3<;.,1.*2*3.#)4*,8 18880"!01!0! !"$,!-%" !#"""!## "% jissr\rhhyjwlcraass\[jkk^^qcbo\hGXcbi]YXXXRMbQM\WoaLWL\WW\IIQ\D\WCWPPGHNUNJEJSNJL5?JEA>@7J@W1AA<;BB<;<=4;;;>185P855:4B426-,/62-,-442%5!55  !""1 "$"!#$#"%!"%%%" !"! !'!{r{{\sso[zcktroscjibrijkmedcarWoipb\\RXb\bXi\LQa[CWWWMIQLIYX\\LLCLHWGCQQ;SJNKKEA>D72C8F80,6:3B42*.?!-*.)*2&))/"/" 1#/"###11,$#/$"!!%$! #$"" !" $ zrroo{aartks[hobjrazooacdcjo\o[W\\a\aL\aWQ\\aoWG[LQLHRXQQRI\WLWG[SMHLDHLWIJAKEJJ@L?@AE>E=A;J;J;;>;>6:2;>.@1F88585227-7;*23.08-:)3+).--/1#00#"!!,#!!$$/!"" !"!50#$" !" a{sroozzbqury[zara[[hhyaarhG[hazaro[rX\[oLaWWW\WLQQbQMQQQQWW?\L?RSJIMMHW9MJEESIJ>C5?I>JEEEEJJ<>I2<6C096@.?5855064=36/17323)?/-.2*3)" 1! 1! 0/!!!#""!"" ""0!"" """"$ sszy[ob}proari\a[oWaao[hx8xhh[o\b\LbXQaa\a[WHQHiQQQ\\aQ\\WG[HQYSJSNRILCW@NNI@JNAM?C:@>;E>>>HWJAEAAE;3<;>@9F88C555P58592<=3227.01,77.+*/ 8!!8"00"/"!""!#$#"#$#""##!!""&#!"  zhxyrjsoyozaraoo[arirriiz[oo[oaWzWa[[ooWoWo[WoCaQiLiXQWW\L?[HIXIKOKSJNJI9LHJJENJI@DGH>JEE;;;E>D?8gFF5558FFG,;44=6/66:,?"/6)3*6155880"""100! !//!/#"!/ !1""! ! '&&   |hrtso[orrr\aoyoiirri\ar\r[oWW[a\o[[[[[[GGWWWWaLWLQ\W[WWPP[LRNTKYJRNUKKRW1MSKKEJ>EHC9J>>JEEE6?555550G0G88:@2<<36-.2,:),9)3)7),0"1!550!!/#,!0""0 0! !,#!"$%# !!"8#& tprt|oyoarriro[orirriiariiaoWo[zLW[[o[[Ghh[W[W[W[[WWC[WWLW[PCXNNSJIINUKS>M9IJAE>JBBJ?L>E<>;AED850550C50/?16;6.<3762<3*777.,6...1 /15"" 0/,"!#,#!!!/"!#$"!#%%"  #$"$!  ptsioy[z{\{ay[zrirarraai\aooWoz\a[oW[[[hy[oWWLW[WLW[[[GGWW[PCMJRIIMISEJIJKNKESJJEBK;LDJAEEE;;@F888G011C?/6=39/)<<43434))320!7."F5 0 /%:"1""0!$,"1$,,#"!"1# "!"! siryxhoariayyar\raaaaarrooazoWrWooW[o[[h[[[WaWWWaoGGhGhPGGPG[LbIIRJNNJMDRAKEJJ@>EEE;LDI;;;>>@@955P5?9H1064<<71?*4<23276**6 ,,8 05!,%#1"" 5!""!!,###"! !#%5 #$! #   {oxyhyzzazyyorirrrrzaraooaWooaW[WWo[[[h[[[[WWoWaW[hG[hP\GhGWCPCbMIRSJIIJSEERIJSEEJ>@M99>JEE<>7@9?109:1G97;3==6/@3-9./0-37-1?, 0 5!,-#/!11"0""!0 0"#!"/#!"%$"!#!#%&  t[t{z[zoyhorsjssirrsia[oooa\zooWooW[h[oWo[[[[LW[G[[GhMMQQ\CP8GHM@JIMMIS;SR@IAAEJE>J>?g:@A0C0?910,@:6;=3;./00?/1,2.2,8505-&,1011!#,#"""!!""5 ##$$$!!"#!#   +touqtsroyorijjrrijjjbjbirrisiaLiraaW[[zWWWoG[WW[Gh[GhDXMXSRW5xPWI]IMD@IIJI@IJEJJ>SE;J@?L>;E;>>?50C?C89<<773;3<21F962*6)7)/888"-:!0"  ,#1!,,##$/!!/###"!!""((&    + }pvqpjryyri|bukcbssirtjsajl]ibbb\iayo\Q\\\WWaL[GhGGhQcXRSYRQ[58[IJMMIIIIMMMIJIII@@>J>;9?>>I>@C8C/?:2;=2:,>337:-,)+3*77.950//0 1,"1!1 0!,###$$""#! "#%#     uvl|t|~[sjtjjvkt|jiooi\arlksibaGW\b\aXcXj\ibQaW[[GPbRXJYY]MM\G[CHMMMIII@H:II@MMD@@@>>JHC@>@:G88851?93<;3<:1>;722:,7276-6,8F5/--,"00",""11 0!"#"$#!!""!"!##%$'   qmmu{ohtmwuppqtsjkjsir[oijibbXciicccXXXb\Qcbaaa?aoQRMRYNRMXMMH?[CQIIRI@MWLI>IM@@IM@>M@HCH@>?F55050996><;76/:*2;26:::-.,1F500%-/#,,#1#"1!,"""! !!!!$# $$$%'%!%&"   nnnq{hpmmmtsss\sjpbirisjb{WrbkkbicXbriLaicSMaCo\XbbQQSNSRMMMISMGhQIIIIMDCWLM@@I@@>I@6M6C5D0FF8g88G/C/63;7>.56;)72-5#:, 1 0,6#!?$#!0!0 "$#1"-$"!! #%#""#!%"  + + nfmu|svwwti{iiraarrazjcjrbj\icQzWbj\W\a[LRbi\QQiQ\W[Q]N]RcI]SJM\CHIIIMMID8G?MI@@I>@M@@@9G0FFFC11C09@73<>:1:77375?5105!,/5 "11 1 1"!1$%$"!""""#!!##%&&!   + + wmuuqmwluryosptizaohatjrikkXbiWoWr[hajXXbb\a\MiLaGGaMRRSSSYNYRIJIMRRIMMIM?GhL6I>I@@@@@@D0FFFF1D/GC1G07337705,727/888885/,,! !/05"//"!00"#,"!!$%$!! ""%($%  + + +tjtvmfmqtszrppirriozsioajkjirWho\iLaacpXiaWWLi\aWQiXMH\QJSNSSIRYTKNER>S>IHGF5WLI@@@@II@CFFFFFF?72905555,6677/0?.6.1F85!1,,,/,$/1!##/"!#,#"0 "&#! ! "#&#"   + o{qmnmpr|o[zj{azi{ijji{ssbbaoaaaiXbiiXX\WW[h[\QXR^ZURaWWMTTTTNNKKTSSKNESJM?FFGFCHM@@I>CFFFFFFC>;>@15P G0/6-66,,66,5880,-,///"//"!0//"0#.%#"! !"# "!"&''&&   +  xrvmwkz[hyor~[[oz\jsip]csi[[WjXi\bia\iaW[r\L]bXXYOT]RRX\bSSYYNYTNESETTEJSJLWP8FG?@@D@CFF8F889>>77:G ?GFG9:676:-6"88 C,-,!0!/1 0!0!!0 0$%#!"#,$#!$#"&'%%%!  y|uvthhhhPozrzy[zi{ajkpiiio[\ciWriLabiWGoQiYY]kTZY]]RYTTI\LISYNNRXJTEIJEAED?GPP88LM@0FFFFP0?977I6/C05850,76:,:1F851/#101!55  1/!5"$"0 "#$"!! "%$!!'("  haqvrhho{zzriroitsoassi{iQiib\ozaaorbQiaWiYYcYZZ^]XMRTUNXL8WLRTTNSTKTSENNSNID58PG8H?8FFFFFGCH10@6@>>/8P8F?:,,91FF!/1 50/15 !!00"!!#%-!5!""!!#"#$!$&''" + + +  {stioyzrra{iao{upi{cpsoaiiii{WoWriQi\iaWoR]]XTZTRRRRYYYYRRM\LMNNYKUNEENESEKS9[C99GC850G88CD;@:0W:6>7:C888550?!CFF51185 0 00!!0"-$"0 !$" "/"#" !""%' v|t~hhzrzoaoyotc{aplkciooabraiiibcj\aoWCckbM]dY]R]T^UTRMRYTRQHXSNSNSSJSR>SEJ9?HI@DC88GG8H795?@@:6/585/PPFF5115 G855! 5",#" !%$" ####""&&& +  uzryhyzyhoz[rszospqjroai\ooibi\jj\WW[[cTd]kT^RMbRTTT]SYYNTNQgLMIIRIXIJJJI>IH[?@D9GC[5g?AB<;E;:C966:69C?:0FFFF //05 5885 0#1 5 ",! 0!"1!"$""&     yoyyri{zor\tjrasjssiazjps[[ai\\\aWoWoXdk]YZZdcXbXRNYRTUTYYSMLHCCQENRJNNNJJJ@?GL9C?:9G1@NAN@CCPGH9CGDAE>C?69559:D>2277:90FF5//0550055 55"1 5 "#%""" &     + + + +yzs{{{{aho|travlts{r[[bbzoQjjQa\i\aakd]]]kYdRa[W\aL[\]S]SSJSTTILPGLQMSERIJKNE9GGGG?[1?>=E;:9@9C966/6;@776/88888 11580058855 55""  5 !%&$ "& +   zrzozoyyy{{[stjj{\sbti[hoijbrib\ro]d]X]Y]]XWhFoWPg[IRYSRRSTUNXWP8FCQJMM@JJEQP5W:L0??C@E;;>J7C?6;@99666:151!0/,/05 88 0 55"" 8  !$%&&! " !$  +    zoozrryhau|zspj~ooi|tiazorr\\ooarWa]]]]^^dYi[Fh[gg8WW\QISSTTSRJ\GGggCDJIISEWFFG9LCLJ@1?@J@J;DC@7779:779F8555/-76"C10588855"108 58 $$$%%#  " + +   +  yyr{azsujspvuujo[{tboabjiiro[z[Pooccjk^lYRcioQ[ggPGhGWiTUTSRIRRLGCC[\HMNAIGFFGC0?;KE9?9@><>9FC766>959/81C1C1/,91/?//0 5880!!8 0  !$$%$$% "$     +   +zoyzzor}tsttup|izrbro[{bi\raoa\rj\ajkYYk]]R]S\[5[\Q\GPPQSTSRRRIIL[CWWGL?JI0P8GGP5DE>J:[0:;J>>>:?7@61FF880/,62,9,/1"00 !//"1#$"88  !#%%%$$#$$$! "        + z{rzo{z{ss{tjooopproaisaozazaWcpc]]QikYk]R]TkQ[GabH\\b\CQRMXSYSSWgPLCGG?[FF8WCHJJ@>I@6??C:@@@>7H6661g855G/,9,///,1000 0,,,.-10   #$%$#$$$$&$       + + r{z{|ssqutt}sz[{jryatbs\raaaojp]kkkboikkkTeT]]\\LWaWaM\[LYSRSSSSL5aMQHQHG8g8GHJJA;>;;J6:G0H7>>7D-69850101::9/01?0100!//"/-..-#1#//"10 !  ###$&%$$%" ! + + +   oo{|{tqu|t}srztjoyoaiirzaazoXpckddkbog\RkeT]R^YX\W[[LL[GQNNRJNYRWWHHHM@WGGC[5D>J;S>>JE>9[00D;2@:9?8880?/:>.,?/1 550/-,C"6.$!/#/"/#"!!#-$!5"/#%#"     + + +  yzrzzuut{sroztus[ozzooooyoau]kYlkdkcPocYY]kYdT]\rL\X\GCbSRXRIMMLWWL\HWGCL?LCWLHI@>I;;>D9C?L66@698F880/:-6,?1/101C 0,/0 #,!05"""!!!0!$'$! !$$##$#      s}~ys}s{ssr{pryoirsso[oaoWocqkqdkdlkiabk]cR]Y]]MLbbHW[aQIXRNSMQ?PGL9LC[C?HHC9?9I@@JEJ@>>D9?1?9:P588C99/11111/11!111 0#.-00 00"! ")&$/## $&%#$$%        q}stu}sa{|sttayooibs\zoaatsi\cqkcckdk]cXbYd]Y]RRcQQLo[WLRMXSYYSIQCWW?HQHWLJJ9WLC?:JE;>7J>2@985?5g5C/66/?101000110//1506)$! 1"0!/#$%%$"#$" %&%&""%      +   +ti|pqu}sisjj~yoooarro[ratpkjrip]pccRkkkMiXYddddYd]\[5[\R]SS]ESSML\H?WHHCLIJI?GC0PW6J>M6J2J@6?g80,66::,/://C0 5!///:-%,150##/!"/,$%$"!!1!!"%%'&#!#     +   z|}tutsz~{j~hozz{so[yy[jppppaasdkdkcc]]biikTdSd^d]Q[P[MSSSRRR]SMHL[GWWC?@JJ?W?585P?@@@DD@@@@:P8FFC:69/:9/9,0505500/,-:15 1#1!00$-#"1"""5"" #&$$     ssr|||rz|syxo~isiroyhzcppkqkbyakkkkdqkkc\[QkS]YTSX]bQRcRSRXSSIIQCPPWLG[MRJM??[?P5G?D>J7L1H::P585?:,?0C//C01G 1--/!/.,10 5!!1! "/"""1##" """''$#$     0 200 80 1 +```I`I`_HYY`AfHX^S\cTYZZH^QmHN\MTYIXf;_IJRX@@Q@R2>BB11B1887111-544(;/4(<0-11161=/444/(;(//(4/$*)(0+1!+***%)(4#:5((4//4#'#/### ## $$$$#`YhRf_Hf_hI_XH^Q@TNMLYTKRHH^@T[TTZ<;XXARAH@_7C7>>>>1C76617B)Q444/4(<-=66616=(///;))@((5*=$;)-*+*0 -$/($/4:#(//#4/# #'###$$ )_RRgXHX^f_HXqA_XqK[[TT\YZaTZ10505@:4;)<+66+1++=-0(0;/44:4--%%5/=+* -$/-%#44#:# #4 #4/# :##4### $) fRqX_YYRHHq^HY`RAZZaKMMCLNNTIfISSKZ;WIKI_HRRA_X@QQ@HBBL7D8716-=121=06>0@/4Q/(-=*666226)//4:#(**-*-4%1**+$'( $#4: '#/#'(: /4##/## # #/$$ 'fR_X`SYR`IRA_YRXHKMMMTZaZT[ZSIH_SCLHHSIX_<_@;;Q@;@_AI11L871=*>>172>111=554#:Q5*2+++122/4:'#:;$/(-*1,%/(0****$5 0('4:##/ ######## ' ## #''### ')$)RYYR`Y_fIYRf_R_XfaM\[\[LaZJBT[AAKTXXXX@AIAA_@W4@RAII_@W@RA;@HBA);LC72>6<<>3827B666B1*0;4:'Q<7>+1264'4(:5+*)4) 1,*#/%--+**%$/'#: ##G#'#' G' +9 +'' ' +' +' ' + +''' +999 + 9 9)YYR___X@fH_;HHQ^HIYB[CZLJXJaZMH:R@;@eW^@@_R_@@X;AIIH;@/;5H;X6A@;73871=A517B6116-B*<<6*;/5A+1111;9 +:4:#;+*00/5*1 4:5 +*%$/' + +''''' :''' #'''9 +##'9''' ' +99 +'' + 9#G ' +9 +#R`RH_XQqHqQX_``A_X^XRJ_IR4ZMTKXeeQWGGHS_@H_@@R_X_RA@HL>B15@5787>>B1>6;5-=--J22=<*=-66)(5*6+5#G''#:)%05%$()+ 05:(*-04 9F '9 +# ' ''# ' + +'## ' +' +#'999''' + 9 / (fXfg`IgR``AfISh<`RQ:xe_`K[TLKY@eQXG9QLBRAH@Q;A;_A5QQAI5^/@@@AH/4<6A@;(H=>C8L>>65;=>B61>8859:H6*6=6>,;4/-6/'#d 9';4)%*+*00$5$99)):FFFF 9 +'''' ##''9###''''' '9 + +' ' +99)$## (YRXRnR_AS`A_SYRRSSR^4HISTMTSSRGQfHQ;JBAH;@WWQ;ARIB7876;A=<<>8.B09W@5+7>66=-<*6160($0;#d9999/-*(#40-- $()5$(#9##/F F F99'#:'''' #'9 +'##'''' #'' + +'##'9 +(%) 'Y`__ARfHRRfRA__RYJg@mJZM[KYSIXHH@@HYAX;;Q@@@@X_5HARAXQ4/;AJBA/;IA@QQ@4/J>BBBCD8J5-56B77166@#@0>1=-<-0*B+=0-*6$:'9 +9'/*=%@#'4$-0)//$0$49 '#FFFFF9 + +## ##::''#####/#'#4 ' $ %%$$ %9RHfHq^qHq^ARR_^H__XQQ`L[ZSRA^<_W:HJHXH^WQ__ARIAHXHA@4(;_AIBAQXIAQ:4Q:WQ1=0<05-22B**61;#9 v 99$5;)(#:)))5$0%-)F 99F F 9 + 4#4// 4# ! $ #qXRI_XXR`AgYJYR`RX4WWAYARIJ^f_W'^IH^ARH/@A_AIBSAA;@4QHR00L8D7>6QW@>37>6*65@B+<5=*-=1>1-=>2)'9 FF 9G'/)55/::(00%0-05#9'999 9 +#4(//()(/#$%)$)4# " $)$+ $(^^I`R_`YY`IYYRYSIfQQ_XeWfY@f;:dmIR@XRHX@^;AIR<=;4@BC>*J6=<-6<00-==6-<-=6+/99 FF :#''/5$0-F $- --$)'##' +9'#(%$((()%$))4)':%+$)%% %% RRR_XXR`RHRR_H`RXQqJSH:d:QXXW:QRI_A_XQQ4QXHHQQHH/Q5;H;;HQ4AS<;@Q<7C71=B1-(@0==<-===-<<<<-0/#:)--49FFF4(;(G'#;$--('9Q0**%5G44//@()$(4$/#'  %$% %$) ^W^mWW^m4mX^WW4WGGfI@eGee::GGQHX@X^:#:e:@71<5=.-:'GQQ4/@550=*5#/51.,=)5(44#::#''##';$())5(/($$/ 4 (/4 ) %$ /$% )' +#%# cbKZk[bhZZSZSfQ_R__RX^HHq@IMTAQXQQ@X^QHKI@Q5I@QQQWQWQXL>>7876676-:'9d#4@;5//%1>2,04-2.,10(:#G##'#/())0$$$)//$% //) ##$ !! %  %%% hZic]ThaS`a`@Q_nRgX^^QX^qRKK_^XAHH@e:4RYXWXJHQX@QW::G#XIJJ=J>BIJ<<6==I6B6A(/A1B>>17>6=>2A:':::/(4/@:;222265-2+**5:4'' #G/()((5%$(/())/##(/#%% % !! $%))$  ' +Q`bcbhSYg_@QWRZYRRXmQ^@@RL[g4Q_RAHQW4HAQWQAH4QWW4^QW4:QH=IJLBIIJ6KBBJ==BB>=J280 +9G/4/A=-54::4*16-,10-226'9#d9'/)(/))());)$ ##/(#/) %%% ! $ +9yh[iYYYRS_eeRa`RRqQXH__YTbKBBL>JB2>5Q/;:<>71B28-:'9G/)*726)4:44)00*2,*,8,-(#d +#4:#4(/$ $))))0%#/(((4$ "" $$ !$%")%  + + HYoZa`^`Rmm`ZIXfXQQRg_RKTRXf5_X^4:4IJX4H<^::5_=>>CD7>H@4G#J61628<#G:::Q;->26<;)50:027+6.,=)G#9'4(45))--%--%)()(#))//(#% !! % "%(!!%% $%  + + X^fiZfR_WG`T`Xf@xW^X_ISaRQ^H__@:Gx^_@QX;Q:eAIJIJIIJBK=IDDCL1>>>DDBB=X'GW4#;6>A''://W#:(6=*=-00;:/-88.,*-0##://4$%)$%0%5 (($/'#44#(4)%   )% % + 9'#ed_Kf_fWdmY`HXX_HHfXH`YgX@^^;^WWQ_I;Q^@WeeRJSJJYIJBBJIJTLC8>SB>BS>B1B1<5@@GdG55#'d'4Q((H()=-=*1=@45-,&160) v 44#:/$)$0%0)($($(4: (//)! %$%!  !%%   ' ' 9e^f_q:xQnRWQ^Qg`_;gSY_;RRf^@W:QRB1J1=@W/W(444:445A6>=@)=*=>-44)-)-=0(04'd'#:4/)%)$%))4(4 ($)//#4))(/ %!$$%$9'9 #`g`_^eeHSYRfmWXXX__a\Yf_R;QQWWQfH@WQX4eeAYSJSJJ=KLLCMEML>BKLJ<L>>>B66B>A@#(60/W4::45-*66+0@A1.26))00-('(//:##GG'40$)$5)$0%%0$G(/)$4/)%%+ %% ' %  +' ' iR``m:Hhh_fX_gRfQqRZKf@XX^mWWQ@^4eQ@WWWAJJYJS=YBLCCN?MKLBKCNJ:QAJBL>BBBLC7C>;::>>DC>J0Q4;5;QW:/<66A*6-5445662.3116=@/#''G##//5)(5$$-!-0((0#)$4/#//(! !! %!!% %' ' +  ^^^XgY_X^^y@fHXqYZY^m^WQ@m:WQ^WWQ@W::RJYJSKKZKBYHXJJBJA@;:@;=BBBB2>6->6(@Q4Q(/;111;/0-/Q(4(1227,6%-(d''9')$)/)$)$--$(()#)4(/4:4)(%%* + % + + 9#XW^gRgXqRf__q^^AZYf@f^;^WeeWQW:WQQWWRSYJSKKKBRAGeHLJSBLMMLJYJ6IHGd:H8CL7B=<6D=QQ(Q/;<;06610@@:;;50=6,1-0;/:':/:455/(0$$- $($$/):;(4 +!%() % $%$# +# # ^^_hg^^Xg`f@q@X`If^fHf^:e:WQ4WWQ4WWgJSSKTMNTRAW4@RAHRRKLB6I6LLBX +9GA>D7BJJ=B<4#:55H<0@5=JJ<((4//=.861.2-(4G';/4(/($%-**-();(/4#///%!! #: %!! %%  + # #  +WX`_XHffXXq^XYSY^@f@^Q:ee4QmWmQW:W^JKLTTMUU>IX;RHXX^:HIJII6L>LBQ':@X5<6=677<#'G#;5<=0:/<61660/5=.320*2*0//:#Q://5-*-*-((0)4(4(/(% % !(/! "%$! + # +  ^grqXg__qQWQgZYffX^4Wee:W^QW4QWWmQQTM[TLMN\KHHAXQ@QGWQ<21#(23.25A0#:G#::##@))0-***-0(50(4##)//4$ - %% " $(  % %  " +# ' 9fgXXffHq^^mXYnHX@^mmWWeWQ^QmQQ:QJ`HB5H*71+5d#'d''##444((5- +*%$)5$/(/#//4(%%%"! "! $%$! +# #  _g_rfX^^Qf`ahf@^^m4W:e4QmQQQQ^XSaKYRKLBTNTIKNJGQB=1<(;;66*-6=521*@:99'#d#4()))5-$0 -$()-0/(/))(4$ "! !!! %)(% !   # +' ffrH@^Qm^`hY^WQQ^QWee4QmWQ^^^@KMMTKSS[\ONTLNOM<@HAAHXQ:G5S=I=LDDH#4:WH<@:G9G:/LMC>=Q#@H<5/Q:W;55-=B1>66J6B=;;*.7>26-;44'':(4:/4/$--6+*%- 54#/((//)$)4$!!!%""!,! !%%%9"  ' +  #' + +^qqqqHqfH^Q^^^mWeWWQ@Hf__ISYL\c[TKTK<'^ISTTLKBSLJ@W/H_AX@I>CDL>BXG;<5;@44@;<@4;>;#@;;Q;H;<=(#:Q(AIJ6>111160/;000##::G'44::()0-+--**$())#G5((44(($444%!! ! %%   $% +# + + # ^q^^^f_@m^^@mWWW^^____H_Ib`@AK[KK[UMZMTKS[UCLTMZI@H@W:W:ICEC66>IQe::W/A<1=B22>0;5/W444;())5500- %%)4/)/((44 /($%()%! %! %! !!% !   + +    ^^QQq_XWm^X^:x^^`I`YanRY[MUaAY[[TNMZSUUIHLMZLTLBYIHQ:Q@ICN?LBK6AGW^/4Q;5B1=BA;@@/A0>222>2781-44:9:4:4)@(@$0$$%0005$)(();/4///4/$4$$%$/(+"! !"! !!$! ( ###     #ymWq_^mW^Q^WxQXYYgH`YRgTU]cTY`YZTTKaZMTIXRZZLSYISLJQ:;KNNNLKB6S@GQ;A;;5I=I=<;Q4//:;1.C>1C71-A:'9G#:#/((/0))-*-$0 0/)(4$($)$%)$"+ "!$% % #  +# # # mQ^_fm4^^^^QqQX_R_fHXHaT\\TZZHHSLKIKMMZYf@RKKYBSKLKQQSNNLBJJJB>@G4@;@<>7JAHQQ/::#Q6L71)=+-;:#9FG4:G#Q//0-)-6+-)%0#///(;$0-)#/)$4% *%$%!' + + +  # + mQffQy^X^fHff___^XH`YZZ[\aSZK`GHaTT[NUNKSR;HJZ[TLLSRIMMCBB=IJ7<4:W/@;L7BJ65@'Q<5@4/=266;#@@#Q:G#Q(/44(45*+6*+-;);:4(G))((/ //)(/( $ $  % ' +9% + + + ^ffym^ffqX_HfniaR^RZk[\c\TZZT[_XIMN\U\ZSMZAXKLLBSJISC?CJBL7BBRW#G4QQ;<==6L>=;6B=A;;*821=:(:::#:/(/4455)$=-*-*%;)$(#(;(/)//4)(/- $4%)% % % ! " #  +  + + Xq^QX_Rf^X^Qfaa`__`bT[\c\[T[\MSXR[TMMKYLULRXILKJJIJCOULJLLLB5GGe:;AA;QQ1B<;;H077>6Q4#'::4/W;00%<- =%0(5;/(()/////(/($)/#4* %)$()!   !'#  '  qm^fnZnfH_X^XIRgH`ISb[bTTZZT\TaJYAK[KYSTTSI@HgJJBZCEN>=SLK>@G'd'^
>16J<@Q@@(6>-=66B=;440;;<;G:'GQ444/);)55)0*0)0-%/(4#4 #4)$/$%(/ %$$%$  ##%%#!   +  m`oY`ffqRanRrHX__R`Z[[\[KKZTKSMU[JfA[\TSSSSKIXHKMNCKI;9'Q@@;IA@4;+5$%@#44##4)/:$5$%()* %) :%/$$## () % ($ '' '   na`fff^qf_AfXYiY_RYga\[bT\kTTMk\\Y4^TTSYKKS>ZX^KNCKBLKKC777B;ReG#W4QAHQ:Q5A@:e@<>C2L6A6>*5454GG:4::4@;;/;5*+6*0);/##()/($(/(()$@4(%%:%%( $ '$ # # +   # + + + `qq_`gR`__q_nY__Y`^ffaaaKbZMT\c[JSMK_ISTMZSJJSKAJYKLLBX:'#e4Q>61B-;:44#G:/(@445$-A(-1+=5((/((////(//))) %%/(%$((( $% % '# #    + nR`s_gR_fRnhYff`gYR_XSZaaabZbU\bZk\Y^HZLZKJJZTTIHIKBSQ'dGGW5KCLJSI5;;Q@X5H)A5:4<7>6;/@4G:::Q(;(@(0555--0)($54;(4Q)-*5/)%$5))#$$ (4!!#   +  q_XqXrXmX`iabpZH^qX^QhTTjc]U[SK[TSSIYX_RYRZOOCSJA;_;e4@@@ABTBJIAHI<@@@4XRH5<5@4;;9'GG::)5/4/4#/)A$56> 55/@(44//$0)-):/$-!$4/)/)## !!   # + +  # mf_rggg`kpcl\kbi`Rf_^mgZb\TaSYTSS\\MLbI^RMNZYSKKZX:::QQQHBJ1C>H/@;@@@;/:#4Q/Q:4/A=0$B*=-5(((/((4#:/0)()(4$%)%++-)/ %//) # +     +# `o_^rgiijkkZibahii`__SIZbaaabZ_IbTLaYJaBRRYKTTLX::W:Q@IBRXI>MDLBBJ67CBX4Q(44/@4G:;)(@@//-0;5=*=(@/:/;(44((()//)%$((0++%4;)/#/) + +' + +    + + + + +  g_qfnZiik[ohbkbZaaYhaSggS[\\bZR_YaIIJMU\I^HBLTHGGGe:;KMT=QHB>>K6JB>T>=/:@AH;@/::Q(X//505;);5)0)//0$/4(/45)(///$+-(4($$ (#(($( +9 #'$ # +' + +   f^qYijkclkbbk\bbbZbTbhX@hU\bKZS^_KSIa]VTSAfRKAG'e:eQJMCJ;QQHJJ=R7DL7T>=4H05;;;/44/44(0;;;;(;A=54@-5((/44($(/(/(**(5$%%/#%*$)))) ( +#   +   sRnh`hkccjjbkbZabkk[kZXqa[Taa[a@HaZTcETSBSHdQwGGQ_HKTLJH4QQ/IA@0CBABL><H5;@505;(@Q4@;;(/5;5**A)5)(@44:////50+045- %$!$$)()/ ' +  `ohg_`httbbZiaaa[k\k[bZZbZha[\TY:gK\MZYBZTYGGd'GQABTKJY@HX;@;Q:B7R#=B6A:44Q/55@@;5;);@/45=*=-A)(Q44Q(//-!0/4 !+$$%/(() #  #  ohgg_fmYiaaZbiYiZ[bbb[[[biSZ[TZ`GHaMZSJaL[5W:WQ@XITLS>LS@4Qm#:KCBI;JJ>=W:44@A0A5@@;/4Q5-0A<)/4;@/4;(///(/;/)-*0/:$ -()$))$(/)()))   +'  + + +    F 72 90 1 +28*777/9//643+664/+33//+3/+*3.1(++*/./"+++ *3+ * *+(3!==!! 2 228*7374464+333.4/+74.1/+/4+3+4(/33 4$./+/(/3 * 3+3"/+2;==!3 <222228*37746/3 3/7++3/11//44/(.(+33 3,05)+++"+3+3 3* "/(" !=;==!* ! 2 888*:33+47339///3**/4(//(/4./7++.0,)./ *3+** **3+("*3 2;;!**!22 ***:3*33:*3///333 7.+*7/++((++//3.,,1.,(8* *** + ++"+* /+ ;===! 2228*:+3:3*8*:*3 3*3/..//++//+3++//#0,...,." 3***+++"""+ "+*!;=;;228*3333******88**3//+////4///++3/.,))),).+** +"++"(++((( !;= 8  !*333738**3:**88*3337+*+(/+("+**++()00,))+2+(+3/+ 3#(3**!;==;! 2!!:3333**33:***8*+ *3 *83/3 3 **++*+&-,).. 2*++ +"/ "("3 *2=;=!*+ !! 3:3*8**3***8**+3*3 88 *8***2+." 4,,)).#"++ ""((#( *** ;=;!2 233**8*:***88*+3*3+** 3**2**+ *3.).(.#..( +("+/(( 3 !;=!* 2247****888833* 3**33 **2"/(*8 ".).#.))" /#/""+*("+!===;  22 43333*8888+ 8*3*83+ **2".1#+3 **((#()). +(""((*3"+ +!;=;=!2* ! /7/.4/*8** 38**88 3 **8".,)4#)+*+/(().#" "+"(" * * ;;=; !!2+41547++7//+++*8 3***27.1)(.))#( +"(#(()"*+" *+""+ 2!=!2 /1.//33////..+3++ *82/#).(.))4((/"((("(.#2 + *"" * ;=; *22 1143 3(5)/10./..+ 822 (.(#)).##((((("()#*** * *+2===2  !!14733/50.10.(4)(/+*** 3+..((((/(#(/())#( ***++ !==;!* 2 /+33/1,4(../(4./* *+3+ *"/((("(#(($$#(#"2* !;=;=!* 23:*+..7/./++(.,.+31&0#+3 2* ""(#(())####*22  !==; *++(.14//+(1./)./ 1--&,,." * +)((/#)#(##(* 2 !;==!2/4.1..1((1,.(.+ /&--)&')(3+2+(((#("""" *2 !;!( + !/4446,4/,14"/3*/)0,))--&)"**+# .$)###("+ 22 !;==! !4/+/./+(6("7+ ".%-,.&&$,$)("#"*"+)#)(("""2*2!=  1(/.43/.(+3++.,--&0&--&),,$$) "" +"#)#"" 2!==!" 44.1.)1(.4"3 )0-0&&--%-,&&,#"("""*##&)#" !=;=;2(.4.,1(.)/ * .&$,&&&'-$),&))#()" #)####+ 2 2!===; 4/+4.(/(/ 3*/((,&0&&&$))%$.%'&$+  +$#$$ ;=;=;!!24".1/3+3*/((#/#-'-%&,)$&%))%'%$)" *!$$$$!>=== ! /,5)/""+(.$1/")---&,))&-&&%%&&$$( $$##""  ;=;!  (5)//(7)1&&(+#(&&&&)&&$$,%%&$$$%&$$$  ")# +"";== !! .4//+")),0,("/(&-)#&%'#"$%$%)$$$$+" #" "!=; !>! ./+ *(1,-&-',((,&$$''$#(((%&$$ $"!=== +>==!/(/3+)1,)0'-&#()))%%$,&# ")$$)##$"* " +" !;=; !;=!/.(3"0-,&---$( .&-,$%&#)$$$$$   + +!===; !==+(3 /0-&--&&,(8"%&&%,%) ""$$% + +  !=;! !=***3")&-&&,)))((#,&%&%#""$$$  +  "!=;==; !! * +3+&-&--&$%&)"$%%%&%$#"$$$$$  + !=== +! ../ (#,&'',,'&" )&$%%%%$$$$" !==; 10#3".)&&-,$&'$ #$$&&$)" +  +;=  ! &,.(.),&&,$&%$#"($%%&$&$$" "  + ===; !! ,1,).)..)),&$,%%)(&&$)$ +    +!== > ,0-&,#"+#'%,$''%$"#$$$)))$ 2  + + !;=!! !-'--0) *)'&$&%&$* #)$)#  + + !====  !>---&&,#($,$&%&%&$""&$"  + !==! !! &,&&,&-&#)$&%&$$%$"$$$%%2  +" +!===! + +!> -0)),'-,#&&&%&&"($  !=;= ! -&,)&%$)&'%%-%&&$$" ")   !==! ! &,)--,#$'%%&%&$"$$"   + ==== ,)&'-$,&&&%$$$)$$$" +"  ===; ()-%),-%%&)$$#$$#  + ;=;==> + ,&&),%%''&$&&$$$ +   +== + + '&)),$&%&$%$)$$$" $ +  +  + ;==;  +!!&)&%&&)#))$)$$$$$$* +  + + ==! ))-'-%("$###$# +  +   +;====! +  )&&%%$(*"(&$  "    +!=;==! +  $,&&,))+"##)%%$$$ +" +  + +  + +!====! &-%$)$(+)   +" + + +  +!  + ;==! + %-&$&$$)"2(#$ +" + +    === + &&$)$$$"* """ + +   + + ;=== +  ,.)))))("+ $       + +  >=; + $$))$))$* #  + +   + + + ;===  + ,))$$))%) **2 +  + + + !=== ).$$)#&$"  #    + +  + +  !===; + #).#)&$("       !=== + #)$#)%$##  # + + + +  + +;===! #$)$&))$$*  + +   + +====! +!/"#$&)$       +   + =;== + ? ()##)$2      +   !==== + 2 ")$$$2"##  +   !=== + ? +++#)   +   +  + ===! ?# +" 22 $  +2!  + +    ;==! 3 * *  "  + +  +  +  !>===  +  !  *"  +! + + + + ===! !!! !!! 2!  ! !=! !!!  !  ! !===> + ? ;;!;!;!;;==!!!! !!!!!!!==!!!!!>!=;=!====!>!!====?!!!>===>====!======;==;=!!!==!>!!==;==>;>=;========;====;>;>===;=!==;== ;=;=;==;=;=;==;!=!;>!;=;=;=====;=;=;=======;============ + ==;=;=;!=!;===;!=!=!>;>;=======!=>;===!!>==;=>;=======  ?=;;!!;;!!!!;==;!!!!!>!!!!=;=!!=;=;=!>!=;=!!!>!>;==!==;=;>;===  ? ; !  !=!!  =! !!! !>  ! >>! >;!   "+  +  +  +!  +  + + + + + +*") ++    + +  +  + + + + +? ?+ ($%# "   +  + +  +  +  +   + ! * #$$#"# +  ! + +   +    + +  +?+###"  +  +  + +  +   + + +   + + +#"+"$$ + *  +  + + +  + +   + ? ?""(""#$+   + + + + +   + + +  +  +  ? "" ##" +  + + +   + + + +    "+*(#""   +  +  + +  + +  + + ?3 72 85 1 +44#0022#2$1#25('('5'&$3$2//#3###$' 4$&&$0/..,,-#.--3$1#101$2#1$5''''''(53&2##0/1&3&$$$$1/2/.,7,$..3113&211114'''5'''''''5&&$$#.01$$2$3$2#&1#..-,7,,$/.002&$221001&')6''''&((&'((($0/#$$&$&''000.,7,,-/#..0#$21#22#1#$'6((''&3&'&4'!)('&/./&&&'&'&0/0./.,,,,.3$21021'&2$$4!(4&4&$&&&''(( '(&0..#&'&&&$.-,,7,--./&2$#0014'&$2$$''''('''&&'5''&( &0/2&&''$#$#.,,,-/$1$32#1&''5$0&&&&5 ''((!($&'&&$#$/#' $&#/.00,,,...212#1'5'()(1/0'(&4'''2#(!((' ('$$&'#0#&'$#-./0#.,7,7-0045())*($##''''&'&2$' &') &&&&&&#$&$.-/#.,,.-,-11#0#((())6' '(''''$/2$' '&&'&&&&$&$#$0---./#0#,,,,---2$23()))('''2$(( ((!'#&&&& & ' #.#&$#,,,#,#2#$())(''(!$./0''(())'13$&$&&&&&( ( &&...#$$$-,,,,7-#.-,,011&)(''(!5$1#' ( ( '$&$&&&'&'&' &$0-...1$$#-,,7,.7,#013&'(5)!'''$$$((' '&&#&&' ' ' $#--..#$&&-,,-.-32#$&3$(!)''&''3#&(!(( '&3&'' & &2&$..###$$,,,-/.-'''4$#))'''&'#2(!!((( ''' ''&2&' &-.#$&$##,7,.-5(!&0/#'''' (!(2&(( ('' !''#&#--#&&&.#$0.,,-.,!*)&1#&$&& )!6!!$$''&& '' ''##.#.----&&.$.,,,,**(((&'')!(()(& '&'&&&'$0...$$&11,77,/,-+)(()'1&( (( ) #& (('&''#$.-/#&$###,,,,--( (('&$#$((('' ''$0) ' !!&##/' $#&&,,,7-.--''(( ('$&(!!)!!! ## ' '!!'.-#/#&$.,,7, --,)('()!(('!(!"((('&#$&( ! 0#/&#&$$#-,,,--,*"(!)(((!( (((('' &&& !! '$&/#  # $$##,77-.---)(((( '(!((  (!($#'!)!!!$#$. $$#,,---(!'' ' ()!)!(( ( $""!!"' //$$ &##$.,,,,..-,'' ()!))!!('!(' $#&!!!!'/.$&&&$-,,,-,,!((("")( (('( ('! &#. # #&$-77,---))!))) ' (!  !"!''%!&.0& $##,,7,7,--()! ( #$ ('!"!! !!!!!  ..'##,7, ((!'#&!!)!( !)!!! #&-.# &##.-,,-,,)(!!")0$ (!! (!!!!!#--$$$ -,7,,,,!(!)!('$2$ !"!!!(-/$,7,.!!(!(' &#&("""!!/ $$####/,,,-!)!  !!$'# """!(!. #77--)!! '!""$$# !! -//# $# ,,,,-.-!('(!")'##0&$/-.! ##.,,7,,-'!"! !$##$#$&&# ,,,- ("!!!! !( ##$0.  .-,7,-"""!")"!". !# #   ,7--""!!""" $###     /0-,,--! !!)"""!$#/ !# .,7,7,- (!)!!!!! ### #,,7,7, --!%"!"! ### -7,,-& %%"/#!! $  -,,,-0 "!"!/./&&##/ ,7--#& .#    .#,, -$ &$#$! #  .,7,7,-$&##.# !/!   .  ,,--#$$#  #    ,7,,--##.# ,77,- ##.   #   ,,,-$&###   .  ,,.-$#   +  ,77##  #/  +,, +/ 0 $     + ,77- #0!       +,7,, -## ##  +  + + ,,  "#   +     + 77--" .  +     -,7,, # #      ,77--$     +  + +  ,,,,,-     +  ,7--       +  +   ,77-#$  +   +  +  7,,- #     +      ,77      +     ,7,7,   +  + + + ,,          + + + +  77-   +  +  + + ,,7, -      +   + ,7#      + +  +  + + + + 7,,,     +  + +  + +  + +,,    +  +  777   + +   +   + + +  + ,,,,-   +  +   +  + + ,77  +  +   +  + +   +  + +  ,7,    +  +   + + + + + +  ,77    + + + + +   + + + + +7,7,      + + + + + + + +  +  + +,7,    +    + +  + + +  + + + +  +,7,7   + +  + +  + + +,,       +  + + +   ,77,    +  + +  + +     + +,77, C 72 80 1 +                                                                                                                                                                                                                                                                                                                                                                                        +    +                    +  +      +                              +            + +         +  + +       + + + + +  + + + + +      + +   + + +        +     + +      + +  + + +         + + + + + + +      +   + + + +      + +  +       + +   + + +     PLAYBK1_P 124 + $  $ +( , 0 48 048< +$ ( , <048 ( ,< + $048,<  (48@ $08<  (,4@ + $08<@ (,048<@D $,4<@ (048< + $,08   (,048 $(4   ,  +PLAYBK2_P 56 +  $( , $0( 4 +8 , 0$ +4 8( , +0 4 8$ ( +, 0 4 8  $ +( ,PLAYBK3_P 128 +  +8 , 0$ +4 8( < , +0 4 8 <$ ( +, 0 4 8  $ +( , 0 48 048 +$ ( , 048 ( , + $048,  (48 $0  (,4 + $08 (,048 $,4 (048 + $,08   (,04 $(   $(,  +   PLAYBK4_P 128 + (4$,08( 4, $0( , 0$ +4 8( , +0 4 8$ ( +, 0 4  $ +( , +$ ( , 0 ( , + $,  ( $  (, + $ (, $, ( + $,   (, $(   $  +  $     +PLAYBK5_P 32 +  $ (  $ +( +$ (  PLAYBK6_P 64 +$ ,($4 0< ,8@4(0<8$,4< (084<$,08( 4, $0(  \ No newline at end of file diff --git a/IMG/STATSTXT.IMG b/IMG/STATSTXT.IMG new file mode 100644 index 0000000..04aaf9e Binary files /dev/null and b/IMG/STATSTXT.IMG differ diff --git a/IMG/STATTXT2.IMG b/IMG/STATTXT2.IMG new file mode 100644 index 0000000..408dcb2 Binary files /dev/null and b/IMG/STATTXT2.IMG differ diff --git a/IMG/SWEETSPT.IMG b/IMG/SWEETSPT.IMG new file mode 100644 index 0000000..23272fc Binary files /dev/null and b/IMG/SWEETSPT.IMG differ diff --git a/IMG/TEAMSEL4.BDB b/IMG/TEAMSEL4.BDB new file mode 100644 index 0000000..f670713 --- /dev/null +++ b/IMG/TEAMSEL4.BDB @@ -0,0 +1,125 @@ +TEAMSEL4 2000 1000 255 6 9 118 +ATRBKIT 366 815 678 803 +ATRIBUTE 834 1305 400 535 +TEAMSEL4 139 641 232 571 +HTIME 823 1290 52 308 +ATRBHTKT 997 1434 557 664 +ATRBHT 1010 1438 709 810 +A00 206 268 0 8 +A00 206 372 3 8 +F00 213 272 6 0 +F00 214 372 9 0 +F00 218 272 C 0 +F00 218 367 F 0 +F00 219 442 15 0 +F00 219 372 12 0 +F10 297 272 6 0 +A00 305 268 18 5 +6700 388 696 1B 8 +F10 396 372 9 0 +6900 396 696 1E 1 +6700 396 755 21 8 +6900 401 696 24 1 +6900 401 750 27 1 +A00 404 372 2A 8 +A00 406 268 2D 4 +F00 408 372 9 3 +F00 413 372 12 3 +F00 413 442 15 3 +6A00 464 752 30 1 +6900 491 696 24 1 +6900 491 750 27 1 +F00 506 272 6 3 +A00 506 268 33 8 +F00 511 367 F 3 +F00 511 272 C 3 +6900 563 757 36 2 +6910 578 696 1E 1 +6700 586 696 39 8 +F10 590 372 9 3 +F10 590 272 6 3 +6700 590 755 3C 8 +6900 590 696 1E 1 +6900 595 696 24 1 +6900 595 750 27 1 +A00 598 372 3F 8 +6A00 658 752 30 1 +6900 685 750 27 1 +6900 685 696 24 1 +6910 772 696 1E 1 +6700 780 696 42 8 +A00 867 93 45 6 +A00 867 197 3 8 +F00 875 197 9 0 +F00 880 267 15 0 +F00 880 197 12 0 +6800 884 430 1B 8 +6900 892 430 1E 1 +6700 892 489 48 8 +6900 897 430 24 1 +6900 897 484 27 1 +6A00 914 486 30 1 +6A00 981 430 4B 1 +6900 987 430 24 1 +6900 987 484 27 1 +6A00 1006 486 30 1 +6800 1016 573 1B 8 +6700 1023 632 4E 8 +6900 1024 573 1E 1 +6800 1025 720 1B 8 +6900 1029 627 27 1 +6900 1029 573 24 1 +6700 1032 779 4E 8 +6900 1033 720 1E 1 +6900 1038 774 27 1 +6900 1038 720 24 1 +F10 1057 197 9 0 +6900 1059 490 36 2 +A00 1065 197 2A 8 +A00 1067 93 51 7 +F00 1069 197 9 3 +F00 1074 267 15 3 +F00 1074 197 12 3 +6910 1074 430 1E 1 +6700 1081 430 39 8 +6900 1086 430 1E 1 +6700 1086 489 54 8 +6900 1091 430 24 1 +6900 1091 484 27 1 +6A00 1108 486 30 1 +6900 1119 627 27 1 +6900 1119 573 24 1 +6A00 1122 720 4B 1 +6900 1128 774 27 1 +6900 1128 720 24 1 +6A00 1175 430 4B 1 +6900 1181 430 24 1 +6900 1181 484 27 1 +6900 1191 634 36 2 +6500 1200 781 36 2 +6A00 1201 486 30 1 +6910 1206 573 1E 1 +6700 1214 573 39 8 +6910 1215 720 1E 1 +6700 1218 632 57 8 +6900 1218 573 1E 1 +6900 1223 573 24 1 +6900 1223 627 27 1 +6700 1223 720 39 8 +6700 1227 779 57 8 +6900 1227 720 1E 1 +6900 1232 774 27 1 +6900 1232 720 24 1 +F10 1251 197 9 3 +A00 1259 197 3F 8 +6910 1268 430 1E 1 +6700 1276 430 42 8 +6900 1313 573 24 1 +6900 1313 627 27 1 +6A00 1316 720 4B 1 +6900 1322 774 27 1 +6900 1322 720 24 1 +6910 1400 573 1E 1 +6700 1408 573 42 8 +6910 1409 720 1E 1 +6700 1417 720 42 8 diff --git a/IMG/TEAMSEL4.BDD b/IMG/TEAMSEL4.BDD new file mode 100644 index 0000000..8bd9c5f Binary files /dev/null and b/IMG/TEAMSEL4.BDD differ diff --git a/IMG/TEAMSEL4.IMG b/IMG/TEAMSEL4.IMG new file mode 100644 index 0000000..0c0c2f6 Binary files /dev/null and b/IMG/TEAMSEL4.IMG differ diff --git a/IMG/TEAMSTAT.BDB b/IMG/TEAMSTAT.BDB new file mode 100644 index 0000000..971effb --- /dev/null +++ b/IMG/TEAMSTAT.BDB @@ -0,0 +1,63 @@ +teamstat 2000 1000 255 2 23 60 +teamstat 710 1162 131 422 +finalres 109 565 128 425 +4000 138 161 0 5 +500 138 151 3 12 +500 139 288 6 16 +500 139 220 9 13 +500 140 357 C 11 +4000 145 250 F 20 +4000 145 349 12 18 +4000 150 319 15 19 +4000 150 255 18 17 +4000 156 319 15 19 +4000 238 349 1B 18 +4000 242 319 15 19 +4000 242 255 18 17 +4000 248 319 15 19 +4000 248 338 1E 22 +4000 272 349 1B 18 +4000 306 349 1B 18 +500 338 221 21 15 +500 338 151 24 14 +500 339 286 27 10 +500 340 354 2A 9 +4000 340 349 1B 18 +4000 341 250 F 20 +4000 342 161 2D 5 +4000 346 319 15 21 +4000 346 255 18 17 +4000 352 319 15 21 +4000 374 349 1B 18 +4000 408 349 1B 18 +4000 438 319 15 21 +4000 438 255 18 17 +4000 442 349 1B 18 +4000 445 319 15 21 +4000 460 338 33 22 +4000 476 349 36 18 +500 738 151 3 12 +4000 738 161 0 5 +500 739 220 9 13 +500 739 288 6 16 +500 740 357 C 11 +A00 752 258 39 6 +C00 771 249 3C 2 +C00 797 383 3F 0 +2800 803 250 42 7 +A00 842 258 45 6 +C00 893 273 48 1 +2800 914 384 4B 8 +2800 917 373 4E 8 +2800 921 250 51 7 +2800 922 263 54 4 +500 938 223 21 15 +500 938 151 24 14 +500 939 286 27 10 +500 940 354 2A 9 +4000 942 161 2D 5 +C00 943 249 57 2 +C00 944 383 5A 0 +A00 946 258 5D 3 +2800 995 250 42 7 +A00 1036 258 60 3 diff --git a/IMG/TEAMSTAT.BDD b/IMG/TEAMSTAT.BDD new file mode 100644 index 0000000..1a7c84e --- /dev/null +++ b/IMG/TEAMSTAT.BDD @@ -0,0 +1,4513 @@ +32 +0 204 23 1 +ÍåìÞåìÞ¶æß··ÖÒ¸¸ÎΛΥ¦¸¸tjkr)¨¹¨llqqppQQPPQPPŽŽŽŽQQQPPPOPŽSOOS/OSOS////7.6Ls7-///7s.66666666777777/////////77664455555555335555555544444/pppQQT6444446666666666666444666L455NNN,,,,,...........----.åìÞåìååÞæÖææ¤××ÂΦ×؛اÁtt¦¨lÅ2uuqqQPQPPŽPTŽQ>TTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<  """!!"$"&"&!!!!!!!!!!!&"&&""%""$%""$$%"&"%%$+%"&$+%)%)&((!!'''((''(!))),'''&),''''&),&,)-),004777::1::411:7411  ;;;1    !"""""$"& %!!!!!!!!(!!&&&&""&""%""$$"'"+$%%++&"%+%%++&!!!'&'(((!('&)),,)&&,''''&,)),',-)'3: :40:11444949< 1;;59  """"""$!!!!!!!!(!!!!!&"&&&""&&&""&&+2$"$%!(!&"%+22)'!&&''!((((''&&,&))))'''&&))&'',,'(30:77:447704:1::4: 5;;919  ""! ""$ $"&"$&!!!!!!!!!(((&%%&&"$$""%)!("22%&%)&(&''%+++%'!'''&&&&'''&&'&'&))''&&,,,&''-*'(3'07:7 7777741:4 0;;9999   " "" "$ &!&"!!!!!!!((!%""%$%%%$%%"'%$$$)%%+%%)&)++))))'('&)&'&))))&''&&''')),,&3')*,''&'004:77440:7441440 9199;919   "!# " """ ""$$&!(!!!!!!!!!&""%$%""%%"&"%%%%%$++%%$%)++%%+%&''&&&&&))),,,))'''&&,,&'',),'('''00777444041:7<919 1   !!#$$"""&" $&!!!!!!(!!!(!&""""""&&"&&%+$%%$%%%%++%&"++*'!'&&''&&&))'&%)&'&&,&&&'&)-&((((', + +::0047 99   "!"""""$"&$&!!!!!!!!!!!&&""&"""&&'&"%$+2+%%%+++%'&%)!((&&&&&&,&'''&)&'&),&,&3')*)'(((',,007 7:77 700 000999    """" """$""!!!!!!!!!!&"%%""""'!&"&)2$)%%)++%%'!)(((('&&&))))&'&)'''&,&,,,&,*)''''&-),00:7/ + 7774 0 041119   """ ""$$$&!&&!!!!!!&!!!&"""""&&"&'(&&&&)%&%%%%"'!((((!&&&)))&)))&''''''&,,)),'''(,))&'00/ 77::0111991    "  """"""$ &"""!!!!!!!&!!!&&&&""%"'!(((&%+))%+%)!((!'&&&&&&&&&))&'&,,))&'&))''(((')),''::7:0 0411419191   """"&"&&!!!!!!!&!!!&&&"""&"&'!&%22%%++%!((('&""&&&&&''&'''&))))''&,'''&3(&)'(''00: 7: + + +000441147:9   "# $$"$"""&&!!!!!&!!!(!&"""&&""&!%22+%+2%!((((&)"&&%))&&,&''&&,))''))'(','',),'(')007 + 7 + +04110::199 <  "!$" $""""&!!!$%""&!!!!!!((!&"&&&&&&&"$$%%%%!(((('&&&&)%)&&%)&,)),&&'')*)''''',))&'&,-000::77 011149991;;;       """"""$ """!!&"""""&!&!!!!!((!'&&&""&'&&&&))%(((('&))'!'&&&&))&&)),&,'''))''''3&,,&)&,,,00: + 0::4191;5;   "&"""&""&%$"""""&!!!!!!!!!!&""&&&"&&!&")'!(=(&""&")))'''&&&&&,,&,))%,''''',&'')***-'00 +0:77740:41;;;;   # "&!!"$%"""&&$%"!!!!!!!!((!'&&&"%)&&&&!((((!")&&%%)&&&&&''''&'',%),'(((')*,')***.*&0017::4 ::4 ;;;;;; ##" "&"""%"$"$&!!!!!!!((((!&&")""&&!(((!&&&''&))&&))&),'&))'',%)''''',*,')*+..*-)/0 :74744111:4;;<;;  $$"""""""&"$ $"&&"!(!!!!!((((!&&&&&"&'!(((&""&'&)"&&&&),&&&)*)&&)&'('&&))&')*...***)0000 0:7 + + :4:741;;;;<   !  ####"""""""""""""""%$""&&&&&!!!!!!!(((!!&'&&&''&&'!!&"&&%))&'''''&&&&))&&),'(('&,)&'3)*..*-*))//: + 77:: +7:19 <;;;<   # ""&!&&"""$$$"&%$"&&!!!!(((!!!!!!"%"&""&&""&&"%)&&&&&&&!'&)&'&,&&&&''&)&''&*++*)**)*/ +00/ 7:777 47:411;<    #"""&""&"""$ $""!22 &&&"&!!!((!!!!(!!&%)&&&&&&&'&"&&&&&&)))&&))''&&'&,''&,''',)*.*)-*-**7 + + +47741141   !!# """&"$$$""& 2 ""%"&!(((!!!((!!!&&''&&&&&"))&'&&&"%)&&*)&&))&''''&))''',)))***-***0/ + + :::40     " #### "!"""""$"&"$$2 "!!""""!(!!!!!!!!!!!'!'&&&&)%)"&))&&&&&&&)&&)%,'!'(',,)&&&,,',**--*-)0 :1     !###!!"""&&" 2 $$!!""&!!!!((!!!!!!(!!&))))))&&&)&&&&'!&&'',,&''!'&&''*,&,,'(&-)----)/ 7/7:7 + 70        !!""""$$""$ $$$%%2"!%%&!((!!!!!!((!")))"&&'&&&'&&&)&&&&&&''!(')*)')***)''',))--)**0/ + + + + +77 00    00    "    "$ $$"""%$$2 $2 %&!&%%"!(!!!!((((((!&""&&&'&&"&'&)%)&)%)&&&'',*)')****)&&'',*-)-**// + + + + + 7  0  9 "!(!" " $""" %"" 222 %"&""&&&!!!(((((!((!&&&&%"&))"&))"'&*)&'&&'&)&')**.+***&'(')****-0 + + + +  + + :000      !   """"$""&" $"22 $"&&"""!!&"&!((((!!!!!!'&&))&")&&&)&&'))&''''&),',%*..+***,''',****)// + + 07 70  #""  $$""$ "$ $ $"&&&%"&"""&!!((!!!!!!!!!&&&'&&&&""!!&)'((!(')),)%*+.****)))&',-**)-// + + +/ 7 // :0 0      #!(" $ $"""$$ $"!"$$ $%!%$%$$%"&!(((!!!!!!!!!!!''&'!&))&"%)&(!')),,&,)*+*)**))-*)'&)-))./ + +  + + / :0000  99  #!!! ###$$$$"$"&$ !&% 22$$%%%%"&&'!!!!!!!!!!!!((!&))")"&)%%&''&)*)&''&&))))*))****),,))*.// + + + + +0000 9   "## "$" $ 2 "$ 2 $$ $&&&&&""&!!!''!!!!((!!&)%"&&))"&&'')%)'''''&'',***+**-*-),**../6///6 /0 8 + 777 + 000001000     !!""" $$222 """"$ $%$2 "&!(!&"%"'!!!!(!!((((!(&"'&&"&'!(!&),&'&&)),&&)))*+*-**))*...*6 +///// +// 70  00    "!  $(("!  2 $2 %&!!%22$$ "!!(!"""&&&!(((!(((((((!&'))!!''(!),('&*+++*),,',)*)-*****2.** +/  +   000     "$ #2 $$$$!!"$ $%!!!(!&"%"&&&&!((!((((((!((!&%)&&"&&)),%)*+++**%))''&,))****..**-/// /  010      $ $" 2 $$$% $&"$%!!(5(!"%""%)%)"!!!(((((!!((!&)&'""&)%)%**+++%%%))*)'',**-**+.*))) + //  /0 0410 #"  $" 2 $ 22%!!&"!&&!!!&""""%%)&""!(((((!!((!'!!'!'&)&&**%*++%%*))*+*))'&&)**...*--/ / + + +0 0100  !!!!" "$$ 2 $ 22$(!&((&!!"%"&'"%%&&"&!!(((!!((!'((((!'&&!%***++))**%*+****,'3)+**+**-* +         !""" #$$ $%"""&!!!!&$$%""""&&&&'!!!!!!((!'!((((!%%!)*%%+++*******%***,''-+.***-*.F 192 86 1 +*'*,''''****(''''''#""##''''''')(''')))'''')****'********)')********----****'('''''''***''''''''''''''***'''''''('****----********)')********'****)'''')))'''()'''''''##""#''''''(****'''',*'**''''""""'''$"""""""""""""''%"'%'''''"%'''''''''''''''''')*)********''''''#"""#%'''''"'$$&&&&$$'"'''''%#"""#''''''********)*)''''''''''''''''''%"'''''%'"%''"""""""""""""$'''""""''''**"""""""""""''""""%%'''''''''''%"""""'''''''''###'"""!""""""""""!"""'###'''''''''"""""%'''''''''''%%""""''"""""""""""*.""""""""""'"""'''''''""""""""""""""""""""""""""""""""""'''''''"""'"""""""""".34444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433333333""3/**/////-33--/  /-*/  /**-  -*'-  -''*  *'"'  '""*'  '*""*-  -*""-/  /-"*-  -**-   -*'*   *'"* + +*"( (' '' '' '' '%%' '* *' '"'" + +"'""'" "'""'" "'""'' ''""'' ''"""*' '*""''*' '*'''*,*  *,*'**--  --**--////----////--//0//0///33--33//33--33//33**33//33**33//33''33//33''33//33''33//34##43//34""43//3443/3>44>33>44>334444334444334444334444334334334//4344."".4445-""""-5445*""""""*5445*""""""""*5445''''''''''5444'''9999'''4444'**8888**'4443'**7777**'3441*+-6666-+*144/---6666---/44/---7777---/45/--/8888/--/55////9999////54/1//:::://1/443333;;;;3333443333<<<<3333444333====3334443333""""""" !"""""""""""""""""""""""""""""""""" !""""""""""""""""""""""""""""""""""""""""""! """"""""""""""""""""""""""""""""""! """""""3333443333333/////////////////////////////////////3//0///0/////////////////////////////////////33//////33/////////////////////////////////////0///0//3/////////////////////////////////////3333333444333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444433333/33333333//3////33333333333333333333333333333333333333333//3////333333333333333333322333333223333333333333333333////3//33333333333333333333333333333333333333333////3//33333333/3333344433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333412 96 46 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6+ 66&*&66++++++6666666&&&66+ + + + + + + + + + + + + + + + + + + + + 66&*&&66666&&&***&&.--%%%%%%%%%!!!!%%%%!!!!!!!!!!!!!!!!!""""""""""""""""!!!!!!!""""""!!!!!!""""""!!!!""""""22.)))))))%%%%%%%%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""!!!!!!!!"""""""!!!!!!!!!!!!9=2''''''((((((((((((((())))))))))%%%%%%%%%%%%%%%%%%%%%%%%!!!%%%%%%%%%%%%!!!!!!!%%%%%%%%%%%=39'''''''''''(((((((((()))))))))))))))))))))))))))))))))))%%%)))))))))))))0<3''''''''''''''''((((((((()))))))))))))))%%%%))))))))))))))))))))%%%%%%))))%%%%%%% +*;<'((()))))))))))))%%%%%%%!!!!%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""" 43%%%%!!!!!!!!!!!!!"""""""""""""""""""""""""  ;?0]'VFG;; +E9#6RooQ Q QO{P{{{{€{OP\QQ{O{\\P{{{{\oKy7U:X99:FGFF[::WGW[:G>L>Z?>>Z?;;;F;-;F=,E#6K Q QQQQOO{{{{{{O{{QoQ}OOOP\P{OPPPQxt7cV=:9:FGF::V:'J;[]XG[FG;GF<?FF +:,E9#16 gK o QP{{P\OO{O{\QQP{{{Poo\{{PQK6SR7VH::9YME9VYY9GF::]M4M9=;F;GGG?>44444::::::   7<<$!$,<,$#"$,###  "?   + 6 - -- + + + + + + + + + + + + ---  + + + +  +  +      4444::::44::  !$<<,! $###,.,!! !5## 6   - -----  + + + + + + + -66 + + + +--  + +  +     44>:444::++ #,,# #,$5"&.,"  !##!!  + +-6 - + + + + + + + - 6----  -   + +    *  44:4:::4++$ ! $7#$$,,# !","#,$5 !#    + + + +  -- - + + + + + + +- + -- + + + + +       444:+:4::::!7<# $,,<,#!#$,,$"#! !!!! ! +    -  + + + + -- + +  +  + + +      4>44:4: ##!$77,$!!$,<<$ #,$$$$#!5 &&&! #  - + -  + + + + + +-6---  --- + + + + + + + +    :44:44 !7<$$"#,<<,"!,$$"#5 !55 !#! #    +-  + + + + --- + -66-  +-- + +        4444:+:::   !#7$$$#,,,,$"#!&5 !  ## #!!& +  6  + + +- -  + + + - +---- + -6--   + +       44444:::+: !#$$,.$!#,,$.#55 &! 5 #%%!&!!!&!66   + + + -- + + +-6- + +-- + --66   +  +       4444:+: # ,./<!"$$$!5!!!! !%"#! &#""      +-- 66-- + - +-6-- +       444:::::: $7$##,.<."!$$$ =5#"! !&&#&! !&!!#""     + +  + + -6 --- ---- -- +  +      44::44**  $7<, !$,.,,,"".,$ &"&55 !&&&5 #%%##"#  +  --- +   +-- + -- -- -6 +   * + +  + + +    444444:4   7<7""""$,,,,.,&!"# 5!&!!#"& !%%#&"#!    -   + + + 6- + + -- --- + + + + *  + +    + +     4444  $<,$#!"! "$"$$$# && 5!"%"#"&&&""#&&#&!       ---  - ---  +   + +      444::44  $$,7!55".$"#&5!& 5 &%"#&&!&(#&!&((#" 6   -  +---6 + + -----66 *  + + +  + 4>44:4::  77$#,<<," 5 ""%&&5 !&!(""##! !!&##(((""'%   + - - - --- - ----- + 6-66--   +  + + + 4444::+<4:  7<7##"$!,/.%& &""!!###&((&(#%&!&%%%%'%(&(&&   +   + - + + + + -66- *  + + +    ****44: ##$7$#$$# #,"!5 !!!!&("&&&!(""%%%%"%%"%"&!!!&  +   +   -  + 6-    + + +   +   +  * * 44$+$77$!$.<.#!!5#& 5 !&#%#&!&((('.%"(""!&&!!(%(6    + + + + + 6---- 6- - -   + +   + + + +    * +787<7$! #>>=>=>>= + +  + + +  + + + +     %--55577777789119999989  +  + + +  + +      "#...%%-55---5555555555     + +   + +      + !!##%%%&%,,,,,,,,,,,     + + + +  + +    !!(...**************     +  + + + +         !!!!!"!(!()(((((((((     + +  + + +      +  !'!(!(''(((((((((  +  +  + + +    + + +   + !'''!((((())((((     + + + +    + +   !##&5555677789111122222    +     +     !.&5566777891133444444444 + +      +        $$$$$$77:::>>=>=>>=   + +         "!%--55577777789119999989 +        + +  !...%%-55---5555555555   +     +     ##%%%&%,,,,,,,,,,,    + +    + +      ! !(...************** +   + +  + +        !!!!!"!(!()(((((((((  +   +          +  !'!(!(''(((((((((  +          + !!!!!(!((((()))((((  +    +  + +     +  !&67777777789111122222             +  +  #.&5566777891133444444444          + + + $$$$$77:::>>=>=>>=  +          +     #!#%--55577777789119999989  +          +  +    '#...%%-55---5555555555      +   + +   + +!!##%%%&%,,,,,,,,,,,            + +!(...**************           +  +  + !!!!!"!(!()(((((((((    + + + + +   +!'!(!(''(((((((((            +    +!!!!!(!(!((((())))((           #&667776777779111112222        +   *5566777891133444444444          +    $$$$$77:::>>=>=>>=      +     %--55577777789119999989          +...%%-55---5555555555      +    ##%%%&%,,,,,,,,,,,        +     !(...**************          +   !!!!!!"!(!()(((((((((       +  !'!(!(''(((((((((      !!!''''((((())()((     + + &%67776667789111112222          5566777891133444444444    +    + $$$$$$77:::>>=>=>>=        +"%--55577777789119999989    ....%%-55---5555555555  +    + + !!##%%%&%,,,,,,,,,,,    + + !!(...**************        +!!!!!"!(!()(((((((((   + +  +  !!'!(!(''(((((((((     + !!(!(!''(((())((((    + + +#.677777677789111122222      +.&%5566777891133444444444   +$$$$$77:::>>=>=>>= "#%--55577777789119999989!!    !""...%%-55---5555555555!     !##%%%&%,,,,,,,,,,,!   "!(...**************!!!      !!!!!"!(!()(((((((((     !'!(!(''(((((((((    "!!"!(((!((()))((((!  +  677757777889111122222   !"#&5566777891133444444444!   $$$$$77:::>>=>=>>= "".%--55577777789119999989!!    !!!#....%%-55---5555555555!    !'###%%%&%,,,,,,,,,,,! !!!!(...**************   !!!!!"!(!()((((((((( !'!(!(''(((((((((!   "''('!(((((())))((   #"#&77776777789111112222 .5566777891133444444444 $$$$$$77:::>>=>=>>="!"  !%--55577777789119999989!   ...%%-55---5555555555!  ###%%%&%,,,,,,,,,,,!   ! !""!(...**************""   !!!!!"!(!()(((((((((!!  !'!(!(''((((((((("     !'!!''(((((())()((  !#%%6777777789111112222 .%&%5566777891133444444444" $$$$77:::>>=>=>>=    %--55577777789119999989  "##...%%-55---5555555555! !!!"""##%%%&%,,,,,,,,,,,!! !!"!(...**************  !!! !!!!!!!!"!(!()(((((((((   ! !'!(!(''(((((((((   !!  !!""!!!((('((())(((("!! !!""%%667776777781111122222   !"! ""!#5566777891133444444444   " $$$$77:::>>=>=>>= # !!!"!#%--55577777789119999989  #"" !""...%%-55---5555555555 "!"##%%%&%,,,,,,,,,,,  !#!!!#!(...**************  #!!!!!!!!!"!(!()(((((((((  !"#!!!!'!(!(''(((((((((  ##"! "!''(((((((()))(((( !" !!!      !!#     #" !" "     ""7"""#" " "##"!#   !  !   "   #!!#  "  !!       !!    +   !   7  ! +  77  !    !"!!    7  #!""!!!  3C 176 24 1 +Š‡‡‡ŠŒˆˆ¢ŒŒŠ¢Š‡¢‡¢“£Ž•¦’–’¦¦’§–§¨±¨©¨  ÁÁÁªªÂÃÃÃÄÄÄĹ¹¹¹¹¹¹¬¼¬¼¬¼¹¬¹¹¬¼¬¼¬¬¼¹¹¹¹¹¹¹¹¹¹Ä¹ÄÄÄÄÃÃÃêªÁš©š©¯¨™±¨§’’’–’‹‹¤¢¢Œ“Œ‡¢Šˆˆˆ‚‚ˆ……ƒƒƒ_Q~~``LaMMbNuuvcccccccgcdcgcgcˆŒˆˆˆˆŒŒŒŽŒ¢‡¢‡¢“Ž••’¦–§’¦™¨±¨©š ÁšªªÃÂÃÃÃÄÄŬ¬ºº»º»º»º»»»»»»º»º»ºººººº¼¬¬ºººº¬º¼¬¼¬¼¹¹¹ÄÄÄÄÅÅꪠ© š¯¨™™™§–’’§’’‹Ž“¢ŒŽ“Š¢‚ˆE…Œ‚EƒFFF__KQP`eaObNjvvggcgwwwwwdwwddddgˆŒ‡ŠˆŒˆŒ^ŒŒŽ¢‡‡¢Œ‘‘‘—‘˜‘˜¸¸µŸ·´·žÑÑÑÑÏÏÏÏ̶ÎÎÒÀÖÖÖÖÖÖÖÖÖÖÖÖÖÖ×Ö×ÖÖÀÀÕ¿Ô¿ÔÇÇÇÇÔÇÇÔÇÇÇÇÇÇÇÈ®®®®ÉÉ°°²²²³³œœ­µ±›™’—›‘‘’Ž¤ŽŽŽŽ¢Š‡Œˆ…ˆ…EƒA††DqqqrWpJV{|Xo[]zzzzYzYzYzYYYzznŒ‚ˆ‡‚ˆ^ˆ…‰‡‡¢ŒŽŽ‘‘‘‘˜˜˜˜¸ŸŸŸŸ·Ÿ··ÑÑÑÑÑÓÓÐ涶ÒÒÒ×××××××××××××××××××ÖÀÀÀÀ¿¿¿¿¿¿¿¿ÔÔÔÔÇ¿¿ÇÕÈÕÈÌÉÉÉÉÊ°²Í²³³³³±¯˜––—˜’ŽŽŽŽŽ“ˆŒˆŒŒˆˆˆ…………B†DqqrrZZV{||[]]]YY\\\\\\\\\\\\\YzŒ^ˆŒ<‡ŠŒˆˆ‡‰¢¢‡¤Ž¤’—’——”—¯±¯±±š­³­œœ³Â²²°°ÆÆ®®¾¾È¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾½¾¼½½½½½½½½½½½½½½½¼¼¼Æ¼Æ¼ÄÄÅÅÅÅÅÂœœªšš¯¯±±››––¦¤¤•¤Ž¤ŒŽˆˆŒ‚^ˆE…ˆ^…†xxkkDSUHRRVygifmfmhhhhhhhhhhhfffˆˆŒŒ‡ŠŠˆˆŠ‰‰‰‰“ŒŽŽ“¤¦’’–’–§’¦§–¨§¨¨¨©±©©©ÁÁªªªªÂ«Â«ªÂªÂªÂªªªªªªªÂªÂªª  Á©š¯©±¨¨™™™§§’’¦¦••••““¢ŒŒŒŒŽŒˆˆ^Š‡ˆEˆˆE^^@ƒF__}KK~s`ttLaaaMMMˆ^Œ^Œ‡‡ŠŒ¢‰‰¡¢ŠŽ“‡¢¢“Ž¤•ŽŽ•••¥¦•¦¦¦¦¦¦§§¨™¨¨¨±¨¨©¨©¨¨©¨¨©¨¨©¨±©¨¯¨¨±©¨©¨©±©±©¯©©©©©©©¨©©¨±¨¨§§§§§’¦’¦’••¤¤••Ž¤Œ¢¢¢¢¢ŠŒŒˆ^ŒŒ‡‚^^^ˆ…^ˆ………@ƒƒ}_KKK~~~~sssss`GGssssssss`ŒŒŒŠŠŠŠ‡‡;¡‰¡‰‡ŠŠ“‡‡‡“Œ“Œ¤Ž¤••¤¤¤•¤¤•¦¦’’¦’¦¦’§¦§¦¨¦§§§§§§§§§§§§§§§§§¨§¦§§§§§§¨¨§¨¨¨§¨§§¨¨¦§§¦¦’¦¦¦•¥¦•••••¤¤Ž¤Œ¢“Š¢‡‡‡‡ŠŒ^ŒŒ‚‚‚‡‡‚‚^E^^EEE……@ƒƒ}__KKKKKKKKKKKKKKKKKKKKKŠŒ^ŒŒŒŠ‰;‰¢‰‡‡¢ŠŒ‰‰¢¢Š“Œ“¢Ž¤¤Œ“¢“£¤¤••¤¤¤¤¥¥¥¤¥¤¥¥¤¥¤¥¤¥¥¤¥¤¥¥¤¥¤¥¤¥¤¥¥¥¥¥¥¦¦¦¥¦¥¥¥¥¦¥¥¥¥¥¥¤¥¥¤••¤•¤•“£“¢¢¢ŒŽŒ¢Š‡¢‡¢¢‡ŠŠŒŒ‚‡‚‡‚‚‡‡‚‚‚‚^^^ˆ‚^^^EE……ƒƒ}ƒ}}}ƒƒƒƒƒƒƒƒƒƒƒƒƒƒŒ^ˆˆˆˆ‡¡‰‡ŠŠŠŠŠ‡‰¡‰‡¢ŒŒ‡¢ŠŒ¢¢¢‡¢¢¢¢¢“¤¢““¢£££¢££££££££££££££££££££££££¤££££££¤£¤££¤£¤£££££“¤£¢“““““““¢Š¢Œ¤ŒŠ¢¢Š¢‡ŽˆˆˆˆŠ‡Œ…ˆˆ‡‡‚^Œ^‚Œ‚=‡‚‡‚^Œ^^^^^^^^^^^^^^^^^^^^^E^ŒŒˆ^^‰;‰‰‡Œ‚ŠŠŠ‡¢‰‰ŠŒŒŠŠŠŠ¢‰‡¢Š¢Š¢“¢¢“¢£“¢¢¢¢£¢£¢££¢£££££¢£¢££¢£££££££££¢£££¢£¢££¢£¢££¢£“£““¢¢“““¢“¢¢¢“ŒŠ¢¢‡ŠŒŠ¢‡Œˆˆˆˆ‡ŒˆˆŠ<‰‚Œ^‚‚‚‡<‡‚‚^‚‚‚‚^‚‚^^‚‚^^^^^^^^^^^^‚Œ^Œ;‰‰‰‰‚ŒŒ‡ŠŠ‚‡‰‡ŠŒŒŠ¢Š¢¢¢¢“Š¢¢““““““¢££££££££¤£¤¤¤¤£¤£¤££££££££££££££££££££££££££££££“£¢““““£Œ¢¢ŒŽŽ“¢‡‡‡““Š‡‡ŠŽˆˆˆŒŒˆŒ‚‰‚‚‡^‡‡‡‡‚‚‚‚^^^‚^^^^^^^^ˆEˆEEˆEEˆ^^^‡ŒŒ;¡‡‡‡‡Œ‡‰‡‚ŠŠ‡‰‰‰‡‡‚‡‡;;¡¡‰‚‡^ˆ‚‡‚‡‚‡‚‡ŠŒŒŠŠŠŒŒŠ‡‚‡‡ŽŒŒŒŠŠ‡ŒŠŠŠˆŒ‡ŠŠ‡‡‡‡ˆˆˆˆŠ‡Šˆ‹ˆŠ‡‡‡‚ˆ…Œ‡‡‡‡‡‡ŠŒˆŒŒ‚Œˆˆˆ…ˆˆ‚‰‰‰‰‰‡‡;‰=‡‡‡‡‡‡<‚<‡<7‰7‰‰<‰‰‰7‡<‰^‡;‰‡‚Œ‚‚‰‰‰‡Š‚‚Š‰‰‰‰‡;¡¡‰‚Š‡ŒˆŽŽŽ•’’§™¯š©œÂÂÅÃÅĹ¹¹¹¼¼¼¼¼¼¼¼¼¼¹¹¹¹¹¹¹ÄÅÄÃÂÂÁ©š š±›§¦–’‹Ž““ŒŒŽˆŒ‡‡‡ŠŒŠŠŒ^ˆ……Š‚Œˆ…ˆ^‚‚<‡‡‚‚E…@}_K~~`LLOMbuNuvuccccgcggdgdcgdg‡‡‰‰‰‡ŒŒ^Œ‡‰;;‰‡‚Œ‚‚‡‰;;;¡¡;‰ŠŠŠŒ‹ŽŽ•’–––¨±š ªÅÃÅĹ¼º»»»»»»»»»»ººººººººº¼¼¼¼ÄÄÄÅÃÂœª­šš™––›—’•Ž¤Œ‹‹ˆŒ‡‡ŒŠ‚ˆˆ…‹‹‹‚‡‚ˆˆˆˆ‚‰‰‰‚‚^ˆE…ƒ}K~QPeaRbNjvvggiwwfidifwfiwiwdd‡;‰‰‰‰‡‚Œ^ˆŒ‚‰‰;‰Š‚‚ŒŒ;‰‰‰¡;¡‰;‡‚Šˆ……‘‘‘—˜¸Ÿ··ÑÑÓÓÐÐÒÒ×××××××××××ÖÀÀ¿¿¿Ô¿ÔÔÇÇ¿È®ÉÉ°²²³œµ±””›’ŽŽŽŽ‹}ŽŠ‡‡‡ŠŠ‚Œˆ…ˆ…ˆ‡‰‡‚^‚^Œ‚<‡^…A…††xkqrWZp{{|X[]]]YYY\\\\\\\\\\\\Yz‰‰‰‰‰‰‚ˆŒˆˆˆŒŒ‡‰‰¡‡‚Œ^Œ‡‰‰‰;¡‰‰‡Šˆˆˆˆˆ…‘—˜¸´·žÑÑÓÓÐ˶ÎÖ×ÖÀÖÀÀÖÀÖÀ¿¿ÔÔÔÔÔÔÔÔÔÇÈÈÈÉ®°°²³­¯´”›’¤Š‡ŠˆŒ‚‡ˆˆ…ŽŒ‡;‡‡‡ˆˆˆˆ^Œ‚E……†††xDSrWZpVV||X[zz]\zzzzzzzzzzzzzn‰‰‰‡ˆ…ˆŒ^Œ^Œ‚‰‰‰‰‚ˆŒ‚‚‡‰‰‰‰‰‡‚Œ‚ŒˆŒŒŽŒ¤Ž•••’™™±šš ªªÂÃÃÄÄĹÄÄÄÄÄÄÄÄÅÄÄÅÄÄÄÄÄÄÃÅÃÃê ª šš±š±›–•¤Ž‹‹Ž‡‡‡ŠˆŒ‡Œˆ…ˆŒ^‡^Œ‚Œ‚Œ^^ˆˆ^‡‚^ˆ^EƒFƒ†QQ~Q`StaMbNuNvcvcccccccccccuuc‰‡‚ˆˆˆŒ‚‡‚ŒŒ‡‰‰;‚Œ‚‚‚‡‰;‰‰‰‡‚‡‚Œˆ‚‡ŒŒŒŒŽŽ““¤•••¦’’––™™¨±©©©©©©©©©©©©©©©ÁÁ©©Á©©ÁÁÁ©©¯¨±™™–’’––•¤ŽŽŽ‹‹Ž¢‡‡¢‚Š‡‰ˆ…‹…^Œˆ……ˆ…^‡‚ˆˆˆ^‡‚‚‡^ˆEˆ…ƒ}}„KKKQss`s````ttetLt``t```tLt‡‚ŠˆˆŒŒŠ‰‡Œ^Œ‚‡‰‚Š‡¡;;‰‰Š‚Š‡‡ŒŠ‡‚ŒŒŠŒŠ¢¢“ŽŽŽ•••¦¦’¦–§§§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨±¨±¨¯¨¨¨¨§§–§’’¦¦¦¤“ŽŽŽŽŒ‡‡Œˆˆ‚‡‰‡ˆ‹…ŒŒˆ…ˆˆˆˆˆ‡‚^‚‚‡‚‡‡^ˆ^^E………ƒ}„„KKKKKK~~~~~~~~~~~~~~~~~~‰‡‡‚Œ^ŒŒ‡‚ŒŒ^ŒŒ‡‰‰‡‡;;¡‰;‰‡Š‚‚Š‚Š‚ŠŠ‡‡‡¢ŒŽ¤Ž¤¤•••¤¥¥¥¥¥¦¥¦¦¦¦¦¦¦¦¦¦¦¦¦¦§¦§¦¦¦¦¦¦¦¦•¤¤••Ž•“¢Œ“ŽŽŽŠ‡‡ŒˆŠ‡‚Œ^Œˆˆˆ…ˆŒ^Œ‚‚‚Œ‡‡‡‡^ˆ^^ˆE……ˆ…………ƒƒƒ}„_F___FFFFFFFFFFFFF}‡‡‚‡‚Œ‚Œˆˆ‚ŒŒŒ^ŒŒ‡‰‰;‡;¡¡¡¡‰<‡‚Œ‚‚Œ‚‡‡‡‡‡‡‡¢ŠŠŠ“¢¢¢““£“££££££££££££££¤¤¤¤¤¤¤¤¤¤¤¤¤¤“£¤““¤Ž¢Š¢ŒŒŽŒŠ‡‡‡ŠŠŠ‡‰‚Œ^‚‡‚ˆˆˆŒ‡‡Œˆ^Œ‚‚<‡‚‚‚‚‚^Œ‚‚‚‚^‚^^^^ˆEˆ^^E^ˆˆ^ˆEˆˆEˆˆEˆE‡ŒŒˆˆŠ‚Œˆ^Œ‚‚‡‚Œˆ^‚‰‰‰¡‰¡;‰‰‰ŠˆŒ‚ŒŒŠ‡‡‡‰‰ŒŠ¢‡Š¢‡¢ŠŠ¢¢“¢¢£¢£¢££££££¢£¢£££££££¢£££££¢“¢¢¢““ŽŒ¢Š¢ŒŠŒŒ‡‡ŒŒŠ‚‰‡ˆˆ‚‰‡‚‚‡‚‚‰‚ˆˆˆ‚‰‰‰<‡‡‚‡‡‚‚=‡‡=‡‡‚‚‚‚‚‚‚^^^‚‚^^^^?^‚^‚^^^ˆˆˆ…ˆ‚‚ŒŒ‚Š‚‡ˆ^ŒŠ‡‰;;¡;‰‰‰‰‚ˆ‚‚‚‡‡‡‡ŠŠ‡‡Š¢‡‡Š¢¢¢Š¢¢“¢££££££¤¤£¤££££££££££££££££“¢““““Ž¢‡‡¢ŠŒŒŠ¢‡ŠŒŒ‡^Œ‚‡‰‚‚Œ‚ŒEˆ‚‡‰;‰‰‡‡=‡‡‚‚‚‚‚‚‚‚^^^^^^^^^^ˆEEˆEEEE^^ˆ3F 148 11 1 +›™˜˜‰‰¨’—››—–’–œ’œœžžœžž¬­ŸÄÄ®¤ÆÆÇÇȽ½½½¾¾¾¾¾½¾¾¾¾½½½½½½ÈÈÇÇÆÅŮ🭭žœ©›¨¨™™˜˜”‰‰‰‰‰‰‰‰‰‰^ŽŠ^ŠŠFˆˆˆF‰‰]]^K‹KK„„L_HHvv`RaSbcgcxfddyydyyyyeyyyy™™˜””˜“—››“•••–’œœ’žœž¬ŸŸŸ£¤¤ÈÈȾ¾¿ÁÁÁÁÁÁÁÁÁÁÀÀ¿¿¿¿¿¿¿¾¾¾¾½ÈÇǤ¤®ŸŸšš¬ž—–››‘™˜˜”‰‰‰‰‰‰]‰F‰‰‰]]ŠŠFˆˆˆ‰‰]]‰‰]Š^^K„L_PQQvNizhUkgf††{{{{{{{jj{{j{{e™˜™‘›—“‘›““’—“““—¹¶»¸·º¼¼¼¼ÍÍÐÐÐÐÐÐÐÐÐÐÐÐÏÏÂÂÂÎÂÎÂÂÂÊËÌÌ°°±±±¯¡¹¢¢’—•‘‘™˜”¦‰‰‰]]‰]‰F‰]]‰ˆˆF‰]]‰]Š^|^||}Vrr‡t‚‚€[ZZ\\\ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ”™“—“™‘Ž‘—’——————¹¶¶»»³ººµµ´²ÍÃÐÐÃÃÃÃÃÃÃÃÏÂÂÎÎÎÎÎÎÎÉÊËËÌÌ°°±± ¯¡šš¢¢—•‘™™˜˜”‰‰‰‰‰]Š]‰‰‰Fˆˆˆ]]‰‰^^|Š||M}VGrXtt‚€€[Ys\\\ƒ˜”‘——™›—•“’’—•–’œ›•œœž¬­š­££¤¤ÆÇÇÇÈÈȽÈÈÈÈÈÈÇÈÇÈÈÇÈÈÇÈÇÇÇÇÇƤŤ¯ŸŸ­š¬žœœ•›¨™˜˜‰ˆF‰‰]]]‰‰FˆFF‰]‰F‰‰ŠŠ]Š|K|„LVHHQ`izzhbUxgfffyyydydydydTdT˜™“›˜Ž—’’—“•‘‘œ—‘››››•–œ©œž­­Ÿ­ŸŸŸÄÄÄÄÄÄÄÄÄÄÄÄÄÄ®®Ä®®®ÅÅ®®ÄŸ­­­«žœžžœ–•›‘‘‘˜”‰”‰‰‰‰‰‰]‰‰Fˆˆˆ‰]]‰‰‰]]]]]Š^^KKu„____PHHQvv`v``wwRRRRR``w`w`wR™›•Ž™™›’—•“™˜››‘™‘¨‘¨››¨›©•œžž¬žž««¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬­­­­­­­­¬««œœ©©•©••›¨‘™˜™˜””‰‰‰ˆF‰‰‰‰‰‰‰‰‰F‰‰]‰‰Š]Š‰‰‰‰]]Š^^KMuu„„„„ŒPPPHH…QQQ…Q………QQQQQQQ…›“›’——“““›™›“›˜˜™˜™¨‘¨™¨¨¨¨•©•©©œ©©©©©©©©©©©©©©©©©ªªªªªª©©©©©•©••›››‘™™‘›™”‰‰FFFˆ]Š]‰]‰]‰‰]ŠŠ‰‰]‰‰Š]]]Š^^^KKuuMM„„„„Œ_„_L„„„„L„„„„„„„„›‘—Œ–—“›™˜‘Œ“™˜˜˜˜™™™˜‘›‘™¨™™§™™¨¨™§§§§§§§§§§§§¨¨¨¨¨¨¨¨¨¨¨§§§§™¨¨™™˜˜”™‘‹‘”˜‰ˆF‰FFŠ]‰]‰‰‰‰‰‰]‰‰‰‰‰]ŠŠ]]]ŠŠ]]Š^ŠŠ^^^^^K^^‹^‹‹^K^‹^K‹^K^KK››“œ—•›—‘‘“–™˜˜Ž™™™™˜‘››››‘˜¦¦˜§™§§§˜§§§§§§§§§§§§§˜§˜˜§˜§˜§˜§˜™™˜˜˜˜˜˜Ž‘‘]‰˜ŠŠ‰ˆF‰ˆFF‰F‰F‰‰‰]]]]‰‰‰‰‰]]]]‰ŠŠ]]ŠŠ]]]Š]ŠŠŠŠ^Š^^^^Š^^^^^^^^^^^››››››——“—•˜˜˜™‘™˜™››‘“›¨™™˜˜˜˜§˜§§§§¨¨¨§§§§§§§§§§§§§§§§§§™§˜˜˜˜˜™™‘‘‘”‰”‰FFFF‰F‰‰]]]Š]‰]]‰‰‰]‰]]Š]‰ŠŠ]]]]]ŠŠŠ^^^^^^^^^‹‹K‹K‹K^‹^^42 84 9 0 +45 92 138 1 +      + +       +   + +             +   +   + +  +  +   +    + +          +   + + + +       +      +   +  + + +         +       +   + +   + + +  + +           + +     +  +                 + +      +    + +            +   + +  + +   +     +        + +  +      +  + + + + + +   + +         +  + +   +     + + +       +    +   +  + +  +   +      + + +   + + +  + +  +   + + + + + + +    + + +    +  + + +  +  + +   + + + + + + +   +    + +    + + + + +             + + +    + + + +   + +   + +       2222211111119877776766%%%% +     + + +    +   3333333332221197777666-%%&#"    + + +    ;;======<==<<3:7:777666,&&&  + +     +      ===<<<<<<<<<<:::77776666,& +    +    8898998998887777776666,,%.#"! +       555655665666666666,,,,..#"""!!  +       ,,,,--,------,,++.*...##""!!       *****++++++*****#####""!!!         (())))))))))))!((!!!!        ((((('('(''('''''           ((((((((((((('('''           2122211111199877766666%        3333333332221197777666-%%"!       ;;======<==<<3:7:777666&$&!          ===<<<<<<<<<<:::7777666&&&$           8898998998887777776666,%"        555655665666666666,,,,..      ,,,,--,------,,++.*...##      +  *****++++++*****#####"""    +   (())))))))))))!((!!!! +   +   ((((('('(''(''''' + +  +  (((((((((((((('!(!  + + +    1222111111199877777666   3333333332221197777666-&.   ;;======<==<<3:7:777666$$&   ===<<<<<<<<<<:::7777666$&&  8898998998887777776666,.##   555655665666666666,,,,." ,,,,--,------,,++.*...##   *****++++++*****#####""   (())))))))))))!((!!!!     ((((('('(''('''''      ((((((((((('((!!!!     + 21221111111998777777666&.##"!   3333333332221197777666-%.."" +  ;;======<==<<3:7:777666&& +     ===<<<<<<<<<<:::7777666&& + + 8898998998887777776666,%..#"!    555655665666666666,,,,..#"!"   ,,,,--,------,,++.*...##""!! + +  *****++++++*****#####"""!  + +   (())))))))))))!((!!!!  +   ((((('('(''('''''       (((((((((((((('''' +    21222111111998777766666%.  3333333332221197777666-%%.    ;;======<==<<3:7:777666&&  +   ===<<<<<<<<<<:::7777666&&   8898998998887777776666,% +   + +555655665666666666,,,,..    ,,,,--,------,,++.*...#  *****++++++*****#####"""!   (())))))))))))!((!!!!   + +((((('('(''('''''     +  (((((((((((((('('!     + +2122211111199877767766#"!  3333333332221197777666-6%##    + +;;======<==<<3:7:777666&$&   ===<<<<<<<<<<:::7777666&&&  + + +  + 8898998998887777776666,&#"!   555655665666666666,,,,..#""!  + + + + +  ,,,,--,------,,++.*...#""!! + +  + *****++++++*****#####""(! + + (())))))))))))!((!!!! + + + +   ((((('('(''('''''   + + +  + +  (((((((((((((((!'!!  + + + + +  1222111111199877776566%%.## +  + +3333333332221197777666-%%.! +  +    ;;======<==<<3:7:777666&$  +    ===<<<<<<<<<<:::7777666&& +  8898998998887777776666,...  + + + + 555655665666666666,,,,..#" + +  + +  ,,,,--,------,,++.*...##  +  *****++++++*****#####"""! +  +  +   + +(())))))))))))!((!!!!  +  +  + + ((((('('(''(''''' + +   +  ((((((((((((((('''    +  212211111119987777777666%  + + + 3333333332221197777666-%#"   + +;;======<==<<3:7:777666&$ +    ===<<<<<<<<<<:::7777666&&&& + +   +8898998998887777776666,%   + 555655665666666666,,,,.#!"     + ,,,,--,------,,++.*...#!!!     *****++++++*****#####"""! + +    (())))))))))))!((!!!!! +     ((((('('(''('''''     (((((((((((((('''!!       21222111111998777677666%%#"  +     3333333332221197777666-6&&    ;;======<==<<3:7:777666&&&     ===<<<<<<<<<<:::7777666&&&!   8898998998887777776666,%.#   + 555655665666666666,,,,...    +    ,,,,--,------,,++.*...#"#!     +*****++++++*****#####""!!      (())))))))))))!((!!!!    ((((('('(''('''''   + + + + ((((((((((((('!('      + +   2122211111199877766566,%.#"""     + +  3333333332221197777666-%+.""" +    +  ;;======<==<<3:7:777666&&&#  + + + +  + + ===<<<<<<<<<<:::7777666&$ + + + + + +8898998998887777776666,+*###!!   + 555655665666666666,,,,.##""!!  + +   ,,,,--,------,,++.*...#"!(!!       *****++++++*****#####""!      (())))))))))))!((!!!!    ((((('('(''('''''      (((((((((((((('('         + + +   + +     +     +  +        +     + +       + + +   + +   +             +  +  +         + +   + +         + +               + +  +           + +                 + + +           +  +              + +             + + + +        48 100 110 1 +ÑÑÑÔlÑÒÕÇÇ×kÉÒɘ˜Ê˜Ë¹¹mºII™oJpKqqvrLussss|t|s|t|ssssu›vqKw7p/66%   +ÑÊÊÑÉÖÈÈÕÕÉÑÉÉИ4˜G¹mmzyy¾ xNžMvuuÀ|¡¡¡¡¡¡¡{{¡¡{¡¡t¡ttt¡tt¡|t||uu9vMMw=x(6&'    ÑÔÊÔÉÈÈÈÈÒÉÉÉÉ£ÍÍÏ©V_°ÄË’cŒ‘h“eÅ••””·fffff··fffff³¯¯‚¯Y‚‚‚‚¯Y‰ª„€\^ƒT1A+2!*"    +ÉÊÉk×ÒÈÕÈÒÈÒkÓUÊ£ÍCΦ°†b’´Œ²µ“¶e‰³³a³a³³a³³³³³¯‚YYYªªª„ªªªª„„€€BXX?F1A2>** + + +×ÈÈÕÕ#ÕÈÈÈÈÈÈÉllÓÊ͘¢¹m¿nI šŸwKžvvœuusssLs›sLs›sLLsLLsu›œvv8žKpJ/6&H5550U    +ÕÕÇÕÇÕÕÕÈÈÉÒkÉÑÑ$lÊÊ4ËG¹mºHnI™™™o™ooošoJšššoošošošššJšJppppp½ppJšJšoo6™&.nH5G--  + + ÈÕÕÇÕÈÈÈÈÒÈÈÒÉkkÒllÊlʘ˜GG¹mmºHnnn»I»II»IIIIII»I»II»I»™I™™™™™™™™».nnnHHº%5˜44$$## +  + + +È#ÕÕÕ#×ÈÒÈÈÒkÒÈÒkÉÉÉÉ$lÊ4˜˜˜GG¹¹5mm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmmºmmmmm5mm5m55¹G-˜4l$$kk# +  + + + È×ÕÈÈÕÈÈÈÈÈÈ#ÈÈÈÈÈkÒkkkÉ$l$lllllÊlÊllÊÊÊlÊÊlÊÊ4444˜44˜˜˜4Ê4Ê4Ê4ÊÊll$kkk## + +   ÈÈÒÈÕÈ#×#×È#Õ###ÈÈ#ÈÈkÒkkkkÉÉ$É$É$$lll$Éllllllllllllllllll$lllll$$$lll$Ékkk##  + + +  + + +ÈÒÈÈ##Õ#ÈÈÈÕÈÕÈÕ##ÈÈÈkkkÉkÉ$ÉÉlllllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllll$k$kkk  + + + + + + + ÈÈÈ#×ÈÕÈÈ##ÈÈÈkÉÉlʘG¹mºnI™oJpKKqrv›Lss|s|t|t|tttttts|uLvrMKŸo6I.H%5G- + + +ÈÈ#×###È#ÕÈÈÈkkkÉÆ4Í¢m;¿PO xŸwMvuu||¡¡¡¡¡¡¡{¡¡{¡¡t¡¡t|t¡t|tttt||uuœvMwNxOyPzH-   +  + + + + Õ#ÕÈ#×ÈÈÕ#ÈÈÈkkU)£Ï©V_Ä‹’cŒ‘¸““jj•”””fffff·f·fff·³¯‚‰‚Y¯Y¯Y‚Yªª`€\X[…AW¨!*@©,0   +   + ÕÈ##ÈÈÕ##È#ÈÈkkÆƱ±CV_†b’®F‘µh¶e‰¯³aa³³³a³³³³³³¯‚‚ªYªª~ªªªªª„„¬€BXÁ?®AW¨Z}"V +  + +ÈÈÈÈÒÈÈÈÈÈÈÈÈkÓll£˜¢¢mzny¾ xŸwqvvœuussssLsLsuLssLLLsLuL›rv8žKŸo6I.H55%-  + + + +ÈÈklÉÒkkÈÈÈ#ÈÉ$ÉlÊÊ4ËG¹¹mmHn™™o6oooošššJššoošooošššJšpšpJp½ppppššJoo™InHmm5G-$  +  + + + + #ÈÑÉÒÈÈÇÈÈkkÉl$lll444˜˜GG¹ºHHnnnII»II»IIII»III»II»I»I™™™™™™™™In.nnHHmm¹GG--G-$$ + +  + ÇÕÈkÈkkkÈkkÉkÉÉkÉÉllllÊ44˜-GG¹¹mmÌ5mm5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmmmÌ5¹GGG˜-˜44$  +   kkÈ#ÈkÉÉkÈkkkÈkÈk$lÉkkkÉlllll4Ê4l4lÊlÊ4Êl4ÊÊ4Ê4Ê444444˜44˜4Ê4Ê4ÊÊlll$$É$Ék$$# + +  ÈÈkÒÈÈk#ÈkÒÈ#ÈÈ#ÈÉkkkkkÉkkkkÉ$É$lÉlll$Éllllll$l$lllllllllllllll$É$$É$kkkkkkk + Ç##ÈÈÉkÈ#Õ#È##kkkkkkÈkÉkkÉkÉ$$llllllllllÊl4Ê4Ê4ÊÊlllllllllllllllllÉl$ÉÉÉ$$kk$ +#  +Ç#kÉkÈÈ#Õ#ÈÈÈklÊ4444G5mHnI6oppKqrv›Lss|s|s|t||t|ttttts|urv8ž7ŸJo6.Hm¹-G- ÇÇÇ#ÈÈÈÈ###ÈÈkkkkllll4Í¢¹zPy xNwMMMuu|||¡¡¡¡¡¡{{¡{t¡tt¡t|t¡tt||tt||uuvMMwNNxOPzQ5¢-$  Ç kkÈ#Ç#kkÈk$ÆÆ) C,VÄÄbgcŒ‘–¸“eÅ••”·ffffff··ffff··³¯‚¯‰Y‚‚¯Y‚ªª„¬€­Xƒƒ…1A2S}@,<±< ) Ç# ÈÈÕ#ÈkÈ#ÈÈkÓUÆ)£©©°†Zb]…´²^Ž“¶e‰³³a³³³a³³³³³³‚‚YªYªªª~ªªªª„„€\ˆƒ[T®§2¤}V© £ k#ÈÈÈÈ###È#È$$$lƘQmmHI™Oo ŸNž8vvvœuusssssLLssssLLLsLu›vvvqKKJJo6I.%G-4l$$$ Ç##ÈÈÈÈ###Èkkkkkk$4-GGmºHºn.I™™ooooooššJššššoošoooššpšJšJpp½pppJšJšoo™InnHH%5G˜Ê$$kk#ÇÇÇ#ÕÈÈ#ÈÈÈkkkÈÈkkl4Ê4-GG5¹5mHnnnnnIII»I»IIII»III»III»II™™™™™™™™™nnnnnHHm5¹5G--4$k###ÇÇ###ÈÈ##ÈkÈkÈ#È#È$ÊlÊ4˜4˜˜GG¹G¹5Ìm5mmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmmºmºmmmm5m5m55¹¹GG˜-444$$kkÈÇÇkÉÕ#ÈÈÈÈÈ####Èk$$$lll$l$llÊÊÊ4ÊllÊl4l4lÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4Ê4Ê4ll$É$$$$$kÇÇÇÇ##Çkk##ÈÈ###È#Ç#È$$$É$$llÉkkkÉÉÉ$É$$ll$ll$$llllllll$llllllllllllllll$l$$lÉ$k$Ék$$$ÇÇ##ÇÈ##ÒkkÈÈÈ#Èk$ÉÉ$É$$Ékkk$k$É$lllllllllÊÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$$kÇ##ÕÕ#kÈÈÈkÈÈÈ$Êl4-G¹5¹5mnI™6š7Kqrr›uss|s||tt|tttt|st|suœrv8wpJ/6I.H%54$$$ #ÇÇÇ##ÈÈÈÈ###È#Èll4GG¹5QQQzPyORNwM9uu|¡|¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuuvMwNxx &P;HGl$$k$ ##ÇÇÒkÈÈ####Ç#$l)<©©V"_°i×gcŒ‘–“eÅ••””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yªª„€\Xƒ«…AW¤@@VC< ) #ÈÈÈ##ÈÈÈkÈ$££<¢0,¦°††b]´Œ‘µŽ“e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[TD§2Z@¦C<< Æ)$##ÈÈÈ#ÈÈÈ#k$$Ékl44˜˜¢GmHHmHy  JNwqMvœuusssss›sLsssLsLLLLL›œvvqqKpo/6IH5G-4l$###È###È##ÉÉÉÉ$kkl444˜GG¹G¹¹mHn»I™™™oooošoJšJšoošoošoššJšJšpp½ppppJšJšo66™InHHmG44ll$$$k# ÈÈÈÈÈ#k$k$$$kÈkll4˜-G-G-GG¹5mºHnnn»™I»II»I»I»I»IIIII»II™™™™™™™™IInnnnHH%m55G44l$$$$ ## #È###kÉÉ$llÉkÈ#kll44Ê4˜˜˜˜4˜-GGG¹55m5m¹¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmmmmm¹5¹5¹GG-˜4l$É$$$$## Õ#Õ#ÈÉ$$Él$l$k#È$$l$llll$llllÊll4ÊlÊl4l4l4lÊ4l4Êl44Ê44˜˜44444Ê4Ê4ÊlÊllllkkkkkk###  #È#È#$Él$lÉ$lÉÈk$É$É$$$$ÉkÉ$É$ÉÉl$llll$lllllllllllllllllllllllll$$l$lÉ$$kkÈÈkk## ÈÈÉkÈÈÉl$ÉÉÉl$$Ékkl$$$lÉÉ$É$É$É$llllllllÊÊ4Ê4Ê4lÊllÊllllllllllllllll$$É$Ékkk$##### + ##ÉÉ$kÈÉÉÉ$llÊ444-¹mHnIIoooJpKqrv›Lss|s||tt|t|ttttu›vrž7Ÿo6I..H%5-#  kÉÉ$ÉÈÈk$lll$l4444*¦,C )  #lÉll$ÉkÇÉll44<¢Ï0CV¦†Z‹]®´²^d`¶¶‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ……®§WZ}";©<£UU$ +# #É$lÉl$lÈ#È$l4444-GG¢Q%n.I¾ xŸwwžrvœuussssLsLsLs›sLsLLLsu›œvMžKŸJJo6.HHm5-$$ #ÉÑÉÉ$Ñ$ÉÈÈklÉlÊ4˜GG˜˜GmmHHn.I™6ooooošoššJššoošoošoššššJppppppppJšJo¼™™I»nHH5¹Gl$$$### ll$$É$l$É$klll$$l4˜4Ê4-¹5¹5mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™™»nnnnºm%m5G˜-4l$$$ # ###lllÑ$lÉl$ÉÈkllÉll$4l$l˜Ë-GGGG¹¹mmm5mm¹¹¹¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmm55¹5¹GGG-˜44$$kkk # +##ÑllÉ$Ñ$$ÉkkÈk$l4lll$$Ék$$llÊ4Ê4Ê4ÊlÊll4l4l4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4lÊlÊl$$l$kÈk## + $É$ÉÉlÑll$k#È$lll$$ll$kkÉ$$$l$É$$l$lll$$lllll$l$llllllll$llllll$lÉ$l$lÉ$É$k$k  +###ÉÉÉÉlllllllk#k$ll$ÉlÉ$kkÉl$Ñ$lllllllllllÊÊ4Ê4Ê4ÊÊllÊllllllllllllllllll$É$$Ékkk  ÉllllllllÉllÉkl44˜G5mmmHHIoJp½Kqrv›œLss|t|t||t|ttts|uuœrvKw7Jo&nH55-l#Ç # lllllÉllÉ$ll$kl44˜¢5Q;¿yyOxNwMM99u||¡¡¡¡¡¡¡{¡¡{¡t¡tt¡t¡t¡tttt|tu9vMwŸx OPzmm0-4#  +ÉlllÉl$ÉÉ$ll$lÓ£±©V_°†3g’´‘–h“¶Åj•””·fffff·f·fff··³¯‚‰‚Y¯Y¯‚‰Yª„€€­XX[…AW2¤E*VQ± # + +ÉlÉÉlll$lÊl4ʣƣV¦}†¨‹]®´Œµd¸“¶‰¯³³a³³³a³³³³³‡¯‚YªYªªª~ªªªª„Š€€Bƒ[¥AW¨SS*V00< +ll$lllllÊlll$4l$l˜G5QHnIIOOšxpwqMvvuussssLsLsussLLLLsLœLvvžKwJoOIIH%5G--## + +llÊlÊlkÉl$l$ÑllÉk$4˜G¹5mHHnnI»™6™ooošošJšššoošooooššJšJppJp½pppJšššo6™I»HHm5G-˜44$  +##lÊlÉlÉkklÉÉ$$Êl$kkl˜˜GG¹¹55¹mHºHnnn™III»IIIIIIII»II»III™™™™™™™™™.nnnnºmm55G-˜4$È  ÉlÉ$É$kÈÉlÉ$ll$llÉ$l4˜˜-˜˜˜˜˜GG¹5m¹5m¹5¹¹¹¹¹¹¹¹¹¹¹¹¹mmºmmºmmmmmm5m¹5¹GG˜G-˜44$k ##ÉÉlÊl$ÉkÉ$ll$É$l$kkl4llÉ$É$$llÊ4ÊÊl4ÊÊ4lÊ4ÊÊÊÊ4Ê44Ê444˜44˜44Ê4ÊÊÊlllll$$$l$kk##   #ÒklÊÊll$ÈÉÉÉkk$$Ékk$l$kkkÉ$$$$Élllll$lll$l$l$llllllllllllllll$$l$$lÉ$$kkk## + ÈÉlÊl$É$ÈÈk$kkÉ$ÉkkkÈkÈkkkkÉ$lllllllllllÊl4Ê4Ê4ÊllllllllllllllllllÑlÉ$$É$kk$ÈÈÈ##   +# Éll$Ñ$ÉÉÈÇÈ$ll4˜GGG5¹5mmnI™Jppqq8rv›uss|st|t|tttttttsœ9v8žKŸJo66.m5G-4$ $ +##lllÑkÉ$lkÇÈÉl4˜-G¢mmQm;¿P¾RxwMv9uu||¡¡¡¡{¡¡{¡{¡¡¡¡¡¡t|t¡tt||tt||uuvvMwNx::Oz;50-$k +#  lÊll$lllÉ#Èkl4Í¢Q©VV"_i‹’F‘–h“ej••”””fffff·f·ffff³¯‚¯‰Y‚‚¯Y‚ªY„¬€\XÁ[«A¨S@@VC )U lllÉÉllÉÉÈÈkU<<0¢C©V¦ib®´²‘Ž`¶e‰³a³³³³³³³³³³³‚‚YªYªªª~ªªªª„„€€­Xƒ[T]WZS@¦"<))$#  ÉlÉÉ$lÉ$kÉk##l˜˜Æ4£<¹mnny:oxpžMvvœœusssssLLssssLLLsLuLœvvqžKpo6InHm5˜44 ## Ñ$ÉÉ$ÉÉk$lÉ#Èl44Ñ$ll4˜5m%ºnH»I6¼ooooošoJššJšoošoooššpšJšJpp½ppppššoo™6IInHm5GG4l$ ### llllÑ$É$llk#È$lkk$Éll-GG¹5¹¹5ºHnnn»II»I»II»IIIII»III»II™™™™™™™I™nnnnnHHm5¹G-G-l$##  +  ÑllÉ$ÑllÑlkÈÉÈÈÈÉk$l44˜˜-G˜˜GG¹mm5mm5m¹¹¹¹¹¹¹¹¹¹¹¹¹mmmºmºmmmmmmm5555¹G˜-444$$$$#  +kÑlÉÉlÉl$lÑkÈkÈ#ÈÉÉll$ÊlllllllÊ4llÊÊÊÊÊl4Ê4Ê44Ê4˜4˜44˜4Ê4Ê4ÊÊÊllll$$$$Ékk$# ÒÈkÉ$lÉlÊlkkkÈÈÈkÉ$$kÉ$$Ñ$ÉkÉÉ$lllll$$llllllll$lllllllllllllll$$l$l$ÉkÉ$$kk$##  È##kÊlÉlÊ4É#ÈkkÈkÉ$$lÉ$ll$$$É$$llllllllÊÊ4Ê4Ê4lÊlllllllllllllllllllÉl$É$$$k$##  #ÇÒÉlllllÉÈÈk$Ñ4G¹mHHºI™ošpKKq8v›uss|s|s||tt|tttt|st|suvrMqw7JoI...%54k    Õ#ÈkÒkllk##Èkkk$l4¢5;z¿zO xNwMMvuuÀ||¡¡¡¡¡¡{{¡¡¡¡¡t¡|ttt¡ttt|t||uuvMžwNx:¾y&y;5$  ##kÈÕÈÈllk##k$Æ£<ÏC@°†b’cŒ‘–h“eÅj•””·fffff···ffff³¯¯¯¯Y‰¯‚Y‚Yª„¬€\XX[…W22>*@V )$ ###ÑÉÈÇÇÕlkÈÈÈkÆ£<¢CC©_†Z‹]D´ŒµŽ“¶e‰³a³³³³a³a³³³³¯‚YYªªª~ª~ªªª„„€€\ƒ[T]WWR!*@0) # llkkÈÈÈ##ÕÈÉ4Ê4˜-˜-mHnI¾O6šŸ7ž8vvvœusssss›sLsssLsLLLLLu›œvvqK7poo™&.H%5kk ##  lÑllkkÈÕ#Ç#kÉÉl4˜˜˜4˜¹mmHºHnI™oo¼™ooošoJšJšoošoošoššJšJšpp½pppppšJšo6™Inn%H555G--$  +ÑlÊÉkÈÈ#Ç#kll$Él444˜44GG¹m5mmnnHnn»II»II»I»I»I»IIIII»II™™™™™™™™™.nnnHºHmm5G-G-## +# ÉlkÈÈÈkkÈÈlll$kklll4lll˜-GËGGGGG¹55Ìmm5¹¹¹¹¹5¹¹¹¹¹¹¹mmºmmmºmmm5mmÌ5¹¹G¹G˜4444$# # lÉÈÇÈkkkÈ$lÉ$kÈk$lllÉkllÊllllllÊllÊÊ4ÊÊlÊ4l4Êl44Ê44˜˜44444Ê4Ê4Ê4444l$$kk$$$  ÉÈÈÈ##kÈÈ#kÉ$ÉÉÈ#k$l$l$É$$lÉ$kkÉÉlÉlllÉ$llllllllllllllllllllllll$É$l$l$$$$kk$$ # È#kÒÈÈkÈÕÕkkÉl$kkÉ$lllkÉlÉ$ÉÉ$l$llllllllÊ4Ê4Ê4lÊllÊlllllllllllllllllll$l$$l$$ ## ÇÈÈÈ#kÉÉkÈkklʘ˜4$˜5mHHHHIo6špKKrv›uLs|s||tt|t|ttttuu›vrMKwJ/o6.H%%-k #Õ###Ò$lÉÉlÉkl4˜˜4Í5mz¿P¿O x=wMv9u||¡¡¡¡¡¡¡{{¡¡¡¡¡tt¡|tt¡t|tt|t|uuvMMNŸ::OPz%-## #È#ÕÈÉllll$lkkl£<ÏC©V°!×gcŒ‘–“eÅ••””·fffff··fffff³¯¯¯¯Y‚Y¯‚YYª„„€\Xƒ…AW>!!@" $#  Õ#kllÉÉ$lÉl$ÈUÍ<¢Q¦V°†¨ÃbÂc´‘µ““e‰³aa³³³³a³³³³³¯‚‚YYªªªªªªªª„„€€Xƒ?…1A2Z¤*@< # ##ÉÊÊlÉÈkÉ$lÉÈ$4-GGQ5mHzHny¾ šNKžvvœœussssLsLsLs›sLsLLLsu›œvMqwKxJo66I%%5 ####Õll$É$È#ÉlllkkÑl44˜GGG˜G5mmnII™o™6oošoššJššoošoošoššššJpppppppppšJoo™IIInHH%55-  ### ÈÈÉÉllÉÈÉll$kÈÉl4˜44lÊ4˜G¹mºHHnnn»II»II»IIIII»I»I»III™I™™™™™™™IInnnnHmm555G--- $ +# ÒÈkÉÉll$ÉllkÕ###klllkÉ$ll4˜GGGG¹5m5¹mm¹¹5¹¹¹¹¹5¹¹¹¹¹mmmºmmºmmmmmmm55¹GG˜˜˜4l-#lkÒk$lÑ$ÉÉkÇ##Õ#ÈÉkÈkkkÉ$l$llÊl4Ê4Êll4lÊl4lÊÊÊÊ4l44Ê4˜4˜˜4˜4Ê4ÊÊ4ÊÊlll$$Ék$$$ # #ÑlkÒllÉÉ$kÈÇÕ##ÈÈÈ##ÒÈÉÉÉ$Ék$É$É$lll$$lllll$l$llllllll$lllllll$$l$ll$Ékkkkkkk$ + +# llÈkÉllÉllÈ###ÈÈ###ÈÈkÉ$$$ÉlÉ$lllllllllÊÊ4Ê4Ê4ÊÊllÊlllllllllllllllllll$$$kkÈ#$ + +# Ñ#ÇÕkkÉlÊÊkÈÈkÉÉ$lÊ4˜G5H»IooJKKq8rœ›Lss|t|t||t|t|ttts|u›vrMKwJ/6IH5G˜---  +  kÈÇÈÈ#ÉlllÉ#k$$Ê4<¢¢mz¿yO xNžMv9u||¡¡¡¡¡¡¡{¡¡{¡t¡tttt¡tt|ttt|t|uuuvMwwNx:&z;5¢- # ÉlÉÉkÈkllkÉ$ÉkkÆ ÏC,_†bg’cŒ–¸“eÅ••””ffffff·f·fff··³¯‚‰‚Y¯Y‚‚‰Yª„„€\^ƒT…AW>}",0C   + +  ll$ÉlÉÉllÉlllUUÆ£?<<784/75917.3.1.00.''##%$  ôóòòòòòòòòòòòòõòõòòòòòîïïîîîîïîïîîîîîðððñí +!! **#'"'.-(1.3--3355555585<7<8=8<7;:zznnnnnnnnnnooom|€yVZRrqqkDxBAAE=<<77485555651..0..%$$öõõõõõõõõõõõõõõõõõõòòòòòïòïïïïïïïïïïîîððððñññ! ))**###.'.,1--.5.11359555842477872::fifffiiiiiiidwggvgNNOOSPCQQBB…E>^=‰<771777111,,,1-((( " " ! + + +íííñíììëðëìëìëìëìììììììééééééééìéìéééèèèèèèííí +ê + + !   " --,1315155155585877;::7¡:::bbMbbbbbbbbbMaLL``G~~K__Fƒ@E^^?7‰<<<74/4///1/,Ù,Ù,(((  ßààá áááááááááááááàáàáàáàáááááááááááááááàáààààßÞß  ---.---1/,1155188758<877;::2:::22ss````tttt``ssG~~~QKK__F@ƒ@@E^???<‰7<7777/775//7///&,,,,,((Ü(Ü ÜÜÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞßÞÞßÞßÞßÞÞÞÞÝÝ (,---11351&715115785547474:24:::;22KKK~K~~~KK~KKKKK_____@ƒ@@@EE^^^??‡<;4‰2<8<47/44//&&,,/&,,,,(ÜÜÜÜÜÝÝÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÝÞÝÝÝÝÝÝÜÜÜÜÜÜ(( ((,,Ù,1,111111/4/5188555=844;:277;2222;}}_}_}FF}}}}}ƒƒƒ@…@……EEˆ^^^?‚??=‚<7;4;4<774744444/4//&&/&,,,1Ù,ÙÙÙÚÚÚÛÚÚÚÚÛÚÛÚÛÚÛÚÛÛÛÛÚÛÚÛÛÛÛÜÜÜÜÜÜÜÜÛÜÜÛÛÛÛÚÚÚ,((,,,,,,/,/,11111117271878799824;::;‰4;;;247ˆEˆEˆEˆEE^^^^^^^^^‚‚‚^????=?=?==9=7477877774/4/4///4//////,1,/&&&&&Ù&&ÙÙ&ÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØ&ØØÙ,Ù/Ù/,/,/1/1/171877877447787555574247444;;;4<8^^^‚‚^‚‚^^^^^‚^‚‚‚‚=‚==‚?‚======<=8<78774444774/444/////,11/&&&&&,Ù&&ÙÙ&ÙÙ&ØØØØÙØÙØÙØÙØÙØÙØÙÙØÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØØØ&ÙØØ&&&,//,,//1///17177117157777759988724<74;;;27959^^^^^^^^^^^^^^^^^‚‚‚=‚‡‚==‚??======9877474477/4///////11111/&&&&/Ù&&ÙÙ&ÙÙ&ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÙÙÙÙ&Ù&Ù&Ù&&,,//////71717177785577895959877774;;;2;<599‰7;‰7=‚=======9=8777;;7477<9===?9999<4;7887744778877775963657457177777778775777777/71745577<7‰777444565777477844;<88888<47<88<8888885=8=5=889888728999998<;;;;;;4887898dcgdccgcdccccvvuNbMaLG~KK_FB@@@>>???87;7<77447474777777966351-0-1,(((  ââêãääåååæååååäåååååäääääããâá ß ""(,--31175559=9=888=9888877<9999887;;22;48887<88dwdwwddwcwggggvvNNNOeSPQBFF@@@>>>>>6?=7477;;7777747799556355330-(((  âêäåææççççççççççæææææææææååäããâá *(---13555599888888888888<77988<87;2;74;78987778znnnnnnnlnloXXm|€VpHUUPD††BABA>6?>6974;;;7777777796658565.333.100''%$öõõõõõõõõõõõõòïòïïïïïïîîðñ!!)*#""1.-3-35698888<<8=8<8999886988<4::;4;;88859748nnlllolllloohmm€iVTIUUDDDBAAAA>>>9?=<7;247<77777966687763333111.'''%*$öòõòòòòòõòòòòïïïïïïïïïïîðñ !)))*'-(1.3.5555478888998899999==88842:2;44478898877uuvcvccucvcvuvjuNMMOL`GCQBB@@E>>>??988=877<777;4779669842133.311Ù--'   áââãããäããããããããããêããããããâãâââà  "' --,,115555847<899=8889998987877;::22;4788995887LaLLaaaaaaLaLLtG`GC~QQK_@ƒ@E‚?????6?==88‰7<<4;7<88=69997475553313---((((Ü ÞÞßßßßßßßßÞßÞßßàßßßßßàààßßÞÞ ---11/15555958;7<88898=898997;7;:::2;7;7778898888~~~sssGsssssK~KKKKK___F@F@@‚?^=<=6?9=9=74;74;486?9889969787155333131,,,(((ÜÝÝÝÝÝÝÝÞÝÞÝÞÞÝÞÝÝÝÞÞÞÞÞÞÞÞÝÜÜ ( ---1111151555558<7777888=969998842::::;7<77<<4488998___K__K_______F_F}ƒ@@@@@EEE^??<=]>]BBBB>A>>E?BCC?>?A8883&&.+++ + ÜÜÜÞßààààáááááàááááààààààßßÞ /(6/6166:::7;:398338225:{ee{e{ee†ey†yyffgggUhiINQQG__LMKC]>‰F@‰>B‰AB]BB]>@>>]?C?B>?9899&&.++""(  àááãäääääääääããâââââââááááàß((////6666676:::595988355n~nnn~ppZmYookJO‡rllVGM||E‰‰>CCEB>AABBB>>‰FA>CB>>?>A<>995:---0%$!ììíííëëíëííëééèæææææææååçç ###)((//66666776::::3335:652~~~~~~p~~~~ppmmmWooqJtNllGG|D]‰>]DDCB]>>@BCBBE>A@B]>BBB=8<<<9:-:-00,%!  êìééééééééééèèèæææææææææåçç #')(*+/*466776:;66:88967:93dTdydTdTdTTdfTxxgbbSaR`QHPLLK^^E]‰EDEBBCBF@]BBCCC>>AAAB?===2239555+1"" Û ÜÝÞßßàßßßßßßÞÞÞßßßßÞßÞÞÞÝÜ ((((".15667::7;;;32896:539wRRRRaaaaaaaRwRw`vvvQH_L„„MK^^EE]]BDEB>BE>‰AAABCCCE>A2A>@@=2=88<335..5++""ÖÖ××ÙÙÚÚÚÚÚÚÚÚÚÚÚÚÚÛÛÚÛÛÛÛÛÛÚÙÙ×((///1.&&&316:6:6;6<223:539.5QQ…Qvvvvvvvvv…HHHHPP_„„uKKK^ŠEŠ]]>EEE>F>]A>AAF>BCCB>@ˆ@ˆ2@22A><<3333.51+++""""ÖÖ×××ØØØØØØØØØØØØØØØÙÙÙÙÙÙÙÙØ×ÖÕ"Ö//"/611.&&&35:6;::9285::591::„__P___P____L_LŒ„L„„MuK^K^ŠŠE]‰>]]]ECEB‰>B>]C>‰>CB>B]=@=@¥¥@A‰>]>>EDB]?E]>CCBB>B>]B>AAA@2=AA8=A<><<993333&&&&&ÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÒÓÒÒ..+515155335533595<228993357447^^^^^^^^^^^^^^ŠŠ^^^]Š]]]]]>Š]‰]EC‰‰BBBBBEBBCECEA>BB>@@A@@A>>A==8A<<<88333&3&&&&Ñ&ÑÑÑÒÒÒÒÒÒÒÒÑÒÒÒÒÒÑÒÑÑÒÑÒÑÑ&&&&&3+55555.3353338232=355893:444:^^^^^^^^^^^^^^^^^Š^Š]ŠŠ]]]]]>]C^C]AF>]BBCCCBCCBFA]>@@@¥@@>AA=AAAA++++##r}~~~|~|~|~YYY[SYX\YUXXYUYUUUYUUTTUUUTOSQCRRRRUUUTUUPUPOSRHTUPPUPOLOH:B::99+++#rrrzzzzzzzzYYY[R[TYYYXUUYUUYTUUT[KSTTOSRRRRRKOPVPONKUPPUPSRNOOPPPLN3A770;,,)%%  +klmnoppooooonYX\T[SZYYUYYYYUXUUUUTCRSSTSRKRRKKTPVUPUTRTOPVPNSKSSUPUNKAAAABBB,,)))ghiiiiiiiii\XX\ZRYXYXXUUUXXUUYZC^RRRSRKRCRRTPVVPUPUNNUPPOUOSCRNONRKNNNHHB0700,;)))%deefffffffff\\XYZ[YXYXXU\UUUYTSQQR[RRRRRRRRSUXVPUUOTKSNUOUPUNKRSSCRNKKNNNAAH70B,0,))bbbcbccccccXYZYZRZYYU\UYUUYZSR^RQRRRRRQQRNUVPVTSOTTTSSSTUPPOSRKCRCRKSANAKAAAA77$77$__```````````X\YYXZ[SYYYYUXXTSRRRRRRRRRR^RTYUPXUTTOUNTUNTUPUTUSKSSSRRKSKNNNAKAAAK(A$$77$$___````````\YYXWY[ZYUXYUXYT^RRRRR[RSSSSTUTTXPUTUXUUOYOTTTOUTSSSSRRSSKKSNNKNNHA(A7(7$$_``_```aa```YY\XX\SZYXU\UYUTQ^QRRRSS[SSTVUZSOXUVUPVXUUPURKYTNQRRKKNOONHHB0051))-  lnoppppqqqqYYX\U\STYYYUYYTYSRRRRSSZK[TVUXOSSUVXUXUOTUUTRRTNR[KRRSNOH7H000,))%%  + +nqqsttttttttY\YYYYZZSYYXUXYYTZS[[SZSRSYUUVVTSTUTSTS[TUYTSSSRRRRSTTNNNN:::F>9++++#r}~~~|~|~~~X\Y\YYYS^ZYXXYUYUR[RSZSRZTTTXXXUYSSRRSSSTUOUZRRRSRRTOTNSN:H:FF>99+++#r{{zzzzzzzz\YY\Y\YY[ZTYXUYYSRRSSRRZUXTYUUUXUSQRSTUUTUTUSRRRQRSTTSKNAKABB0,:1)%%  +klmnpopooooon]YYYYYYYZSYYYT]K^Q^[SSZUUXUZZYUUTTTSUXUUYTYSRCRRRSSSRRSTSNNNA77B;)51))%eghiiiiiiiiiZZZYZYYYZRYYTZR^RRRKSZUXUXUTKYUYUYTZUUYTTTZC^QRSTTZSSSSNNSANAA770B,,)))deefffffffffTYYZYYT]Z[SYYSQRRRR[SZTYUUYTSTUUUYTTZTTTZSQRRR[TTSNZNSSSSSKNNNAH77700,)bbcbcccccc]Y]YYYZTT[RZRQQ^Q^RRS[STXUYYYRTYUYYTRRSTTRRS[RSTS[STZSRSKKSTNKNNHAA((7$00```````````Y]TYYZYYZZRR^QQQQQ[[S[RZTYUUYZ[TTYUTR^SRRQS[RSTSRRS[KR[SRRKSKANONAAA7(77$$$$____````````ZYY]YZYZYZR^QQQ^QSZSR[SR[YUXYO[RZUUYSRQ^RR^RSZZSRSS[RRSSSSSKKSNNAAAHH77($$$$````aaa```ZYYZYTYYT[QQQQ^Q[YUZRRRRRZTTYYSRSTTY[QQRQQR[SNZSZZTSSSNNNNAHBB;,,)-% + moppppqqqqQ[ZZYZYY[QQ^Q^Q[YUYT[RRRR[[TZTTZZZTZRQR^RKZTZSSSSSSS[SSNNNHII;,))%%  pprstttttttt^R[TYZT[QQ^Q^QRZYYYYZ[RS[QRZTTYTTTTSC^RR[ZTSS[SSS[RSRSSSKN:MFF>9++#rr}|~~~|~|~~Q^R[ZY[QQQQ^CR[SSYYTTS[[R^RRZYTZZZ[QQQ^RSSZSRSRRRRRRRSNSA:::::>9+++++#r}{zzzzzzzz^RRRZ[^Q^QQQ[[S[[T]YYYS^RRQ^SZZZSSQQ^QQ[SSRR[SSRR[SRSSSNTLL770,)))%%  npopoooooo[[ZR[RR[R^R[ZYYZR[ZZYYZ[^^RRRRS[[QQQQQRSS^RRR[RRSRR[SSKSTONAA7BB,)))%%hiiiiiiihiZYYZ[^^RRRZXXYYYZRSYYZTSR^RS^Q^RQQ^Q^RS[RRRRRRR^RRRSRRSTNNKKAOBB700,))))%eefffffffgf[]ZS[R[R^[XW\X\YZ[ZZZZZZ[RSZRQQQQQQ^RSS[RRR[R^RRRRRRRSSSKKKKNHAAA7000,)bcbcccccccRSZ[[ZZR[Y\YZYYYZRRSYYTTY[ZZSQQ^Q^QRSZ[RR[RR^RRRRRRRRSSRRRKKKKKKAAH77($0$_``````````[[^RZS[[ZX\Y[[TZRRZZZYYYYYTZ[Q^QQQRSS[RR[RR^RRRRR^RRSSRRCRRKKCK3KAAHA77(($$$__`````_``R[R[[[[[YXX\ZSYZRZ]TSTYYYYZSRRRR^RS[RRRR[RRRRRRRRRRSS[RRRRRRRR3KKAHBHB7$($_`````aaaa`^[ZZR[S[Y\YYY\YRSZUYZZYTTZS^R[R[SZZ[R^RRRR^R^R[RRRSS[RR3KAA(770,)1.-*'  kmopppppqqqRZS[ZYY[[YYYY\ZR[YYYYSZYYZQ^RRRSTYTS[S[R^RQRRRRRRSZ[RCKKKAAA$0,).-*'& moprsttttttttR[[[YW\Z[ZYYXYZQ[YYZYZRZS^S[S[[ZZZSSSSS[RRRRR^RR[SRRRRSSNAN::::%++#r}|~~~|~|~~[^RZX\YZ[[Z\XYYS[T\YYS^R^RSR[STYTZ[SZSZSS[S[RRRSSRRRRRKKKAA::FGE++++#r}{zzzzzzzzR[RZYY\ZR[T\YYYYZSYYY[QQ^^R[SZYYZTZSSS[[RSSZSSZTSR^CRRRKKKA77;>11..% & +kkmnopoooooooZY\YYYYYS[[ZYYYYYZTYT[^RQRRRZSZZSSSZS[RSR[TTZUTS[RRRRRRCCKKA7BBI55511.% gghiiiiiiiiiY\X\Y\YYYZR[ZYYYYYZZZRR[S[[ZTZSSSS[SR[SSZSSTTYTZSTZSSSSKRKAKKABBB,;)11)%%%%eefffffffffYY\\YY\\YZ[[[ZXYYZZS^^R[SSZUYZS[S[RR[RZTZSSYYT[NZSSZTSSSNOTN3KA7HBB;;,))))%bbbcbccccccZZYYYY\UY]S[SZT]YTZ^^RQRZTTYZSSZSRSSR[TSSRZTSRRSSSSSSKSTUUNKKK3N7HHH7000,,````````````SZY]Y\X\YYYYZ[[SZZRRRQR[ZZSS[S[SZS[S[SS[RZYT[RR[S[KS[SSUUTNTNNKKNOH77H7000$`_````````Z[SZ\XYYY\\YYZRR[RR^R[ZYYSZS[[SR[SS[SZSRSTUTSRSSRRSSTTTTTNSNTNKNHLLBHBB00$__````aa`a`[[R[T\Y]YYYYY]S^Q^^^[ZYTTZZSTZSS[RRSZSZTTYZSRSZTZSSZTTOONAHH70,,?.--*&& + +mnopppppqqq^^R^Z]YYZYYYYYZR^QQQSTYZZZZZZZ[R[R[[SSTTZSRR[STSSRSSTTTNNHHB7055)-4'/  + pprstttttttt[RR[[YY\YZ[ZZZRRRRRSZZSR[ZSS[SRRSYTSSZYTS[RRRS[SS[SZNTNNOOO::F>9++##r}~~~|~|~~~ZZZ[S]Y\Y[Q[Z^R^^ZZYYZS[ZSSRRRR[TYS[STS[SSSS[S[RRTTUTSTTN:::F>99+++#rr{zzzzzzzz\YZ[[[Y\YT^S^C^^QZYYZZZTTZ[R[[R[ZZSSTYSR[SSSSTS[STUTTUNNNAAH;;551)%- ' + + noppooooonYZ[[RRYYZ]RR^^Q^SZTZ[ZYTZ[RSZTZZSRSZYYS[SSS[TSSSTYTSTTSKKKNHHHB;,;))%- ghiiiiiiiiiZ[R^^[YYZZ^R^R[SYYZRRSZZSR[SZZSSRS[ZTZRSR[R[SSZTTTSS[SSRKOLHHHH70;0)%.%%eefffffffff[[RRZS]YSR^RR[Z]TZS[[ZS^RR[[SZSRZYUT[K[R[SSS[SSTTTSSSRCRNUONNHHHH00000)1))%%bbbcbcccccc[[[YYZZS^^R^[[ZTZZSZYYZRR[SSS[R[UXYSRRRRSTTSSSZTTTZTSRRSTSSNNNOLAA7(($00,,,```````````SZY\YZ[^^QRRZZTZSSZTYZR[ZSZZZRSTUYSRR[R[ZZSSTYUTZSNSRSUUTSNSKNOAKAKA(A770000__````````YZYYZ[R^RR[S]YZZZZZZS[RRZZZSSZT]ZRRR[TTTSSSSZUUZSS[RRSUTSNNSNNAKK(A(A$(000,,`````aa```\\YZ[R[R[[[YYZZTZZS[RRR[SSS[STYSSR^RSTZS[SSZTTSSSRRRSTSNHOHLIB0))%  + moppppqqqq\Y]ZR[[[[[ZTZZ[SSZ[[[RRSZ[R[ZTZSSSS[SZSS[STTUT[SRRSTOTSNNNLIB,)))%'  + +pprsttttttttYZT^R^R[[SZZ[[SZZR[SZSZYT[[TXY[[S[[SS[R[SYUUZSSRR[TUZSTON:L:::>++++#r}~~~|~|~~~Z[^R^^RR[ZYTZZYYZ[SS[SYYSSTXYSRR[SSZSSRSTUYSS[[K[TTSSNOOOP:::::9++++#rrzzzzzzzzS^^^^R[ZZ]YZZZYZRRS[Z[SS[ZYYSRR[RRSTZSTUUYSSRRRSTTSRSSNOOHH770,)))-%  + + mnpopooooon^RR^R[]YTYZZSZS[R[[[[S[RSTT[RR[SSZZSSSTUYS[SSRSZTSSTTSNTNKAN7BBB0511)%%%ghiiiiiiiii^^^R[YYZZZSZ[SR^[SZZS[ZTZZS[RRSZTZSSZZYYSRSSSSZTSSSUTTTNKSKNHH70B5;,))beeeffffffffR^R[ZZZZSS[[SZ[[SZTZSZYYYTZS[[STZRSSSTTS[SS[SSNSSSTTTTSSKKKNAHAHB700,bbcbccccccc[[[ZYZS[ZYZ[ZSZ[ZYZ[SYYYSSS[RSZS[[SZTYTSZSS[SN[[TTSSSSSKNSNNSNHOH7A7777$0_```````````SZZYZZSZ]YZSZ[[SS[[RZYTSR[[RSZS[RSTUUYSSTSRST[RTUTZTSSKRSSNSNNONANAA7777$$$$_____````````ZZZ]ZZZZYZR[[[S[Z[R[YTR^RRRRZTZSZTYYYS[SRR[TZSTYOZNSSR[SKNSKNNNANAA777($$$__`````aa```SZZS[SZZS[R[RR[ZZSZYXY[R[S[SZZSSYYYTS[KRR[SSSTTSSSSSSNSNNNAHBB0,)))%% + moppppqqqqZYZZZZZZ[^[SZZSZZZYXY[RSZZTTZSSSYOZR[RR[TTSSTUS[SRRSSTNNNHBI;;11)%  + oprtttttttttZYYZZZYS[[SZZZZSZYTZ[RRSZZZ[SSZTYZRZN[RNYZSZTS[TTTSRKSNNNLM:F>+9+++#r}}~~~|~|~~ZZZZZZZ[[SZZZ[RZZT[RRRR[TZKRS[ZYYS[ZS[STZSSTSRSTTZKSSSKSHP::FF>:9+++#r{zzzzzzzzz[ZS[[[R[[[ZZS[SYZ[R[[^[ZS[[STTYUSSSR[SSSRSTTSZSTNSRTTTNNNH7H000,))  + nopoooooooZ]YZ[[[RRSZ[^S\XT[ZSSSZYSR[YYUTZS[RRRSSSZZSZTTZSRR[NTSNTNNNA7BB,0,,%%% hiiiiiiiiiZYZ[[SZZZZZSZYXZR[S[[ZYZS[TTYZSR[RSZT[STUTSSTSSSRRRSSNNTOONAHHB700,,5)%%%efffgfffffZS[[[ZZZZZZZTYZ[R[RRSTTS[YYTZS[SRRTTSSTUZRSSSSSSSSSSSSSNTNKNAA7A70B;,,))%%bbcbcccccccZ[RR[[ZZ[SZYYZRRRR[ZZ[[[YUXSR[ZS[STZRSYZSSSTSRSSZSSTTSSSNSKSNKKKAAH7$0B000,_```````````Z[[[ZZ[[R[ZZZS[[[[YYZS[TXVXZRSS[SZSRSTSRRSTTSSSSSSTUTSSNRRKNNNKKAHA(A77$$0,0___`_``````S[[ZTZZRZYYS[[S[[TYZ[RYUXXXZR[[SSSRRZTZSSZTSS[SSSSTTSNSSRKKNNAKHHHA77B7$00,```a`aaa``[[S]ZZ[Z\XY[R[[[SZSR[YXXXXXSRRR[SZTYTZNZTTSS[RSSSZSKSSSNOHH777,?1)%-''  + mnopppppqqq[[[ZZR[XXZRR[RRZYT[RSXWWUYUZRRS[[TYT[TZSZS[RRSSZTTSSRKKHHN7H0051)%'& pprsttttttttZZZSR[ZYZR[[SZZTZZSZZWXXYYYS[SZSSTZK[SSZSKSRSSTOTSSTSSNTHN::F>99+++#r}|~~~|~|~~ZZSZ[YYZRR^SZTYZZZ[SYXXYYYZTSS[STZRRSSZKSZSSZTTZSSSZNSNSNNHF>>>9++++#r}{zzzzzzzzZZ[ZYXZS[[[S]YS[[RZZYYTYYYUXT^SZZSRSYTSSZSSZTTSRSKSSSNSAKAAI;B,?.--%' +klnppooooooo[R[YX][ZZ[[ZZSRR[RSTZYUZTUXXSRSSRSTYUZSSSSRNZSRSS[RK[KSNNNHH77B5D5)..%dehhiiiiiiiii[[ZYZ[RSS[SYS^RZYYTZ[TYYY\UYYS[R[SYUZRS[R[STSRSYNSSSSRSNNOHNN7BB00,5)fffffffffZYY][^R[RZYZ[[YXXXS[SZYYXYTYUT[SZTTSSR[SSSSZSSTTSRTTSNSNTNSOHLBHH000,)bcbcbccccccZY]ZS[[R[ZSZZYXWWY[SRRYUXYYU\SRSTTZRRRSTTTTSTSS[RSSSN[SNSKNOOHNHBHA7(($0,,_```````````YZSS[[R]YZRSY\XWYYYZR^ZUYUXXXZRZTSSS[SZTZSSZSSRKRRSR[KSTKKSHTNNLNAAAA($00$$___````````Z[[[R[ZXYS[YYXX\TZYYUTYYYUXXUTZS[[SZSSSTSRSSSRSSSSSSRSTTTNTNSANHAAA77770$$$_`_````aa`a`ZR[RR[YY[RYYXX\UXYTXXYYYXYXUUYTSRSSSSSZSRSSRRSTTSSTNTTONNHLL;;;,,%%%  + lnopppppqqq[[[[ZYZ[[[ZXWY\X\YYX\YYUUYYYXXTSSS[SSZSSSZTSSSSSSSTTNSNNHOBID;)))%%& + opqsttttttttR[[YY][RR[T\YYYUYYYYTTYXXUYUXUZS[R[ZTSSSTSSSSSSSSKSSSSNSOO:FFF>+++###rr}}~~|~|~~~^RZYY[RZZZYZ[[ZZYYXYYYXXYUXVXXY[RRSYTSSSSS[SSSSRKZSSSNTPP:L:::>9+++#rrzzzzzzzzzR[]Z[RYXX\ZRRC[[SYYUXXYXUXXXVXTSQ[STSSS[[RRRSTSSZTTSSNUMMJL770,))%%&  +kmnoopooooonZYY[^ZXWWY[R^Q^SZZTXXYYYUXXXUYYSSZTR[S[KSSSSTSSSUTSSNUPPMPAA7B0B,5)1.%%gghiiiiiiiiiYXZSY\\W\YYZ[R[[R[ZYYYYXXUYYYTYUUS[SSRRSYTSSTSSSTSSSUUUPOKKK7HB;;0,)5)%%defffffffff]Z[Y\XW\TY\YYS[S^RS[RZXWVYUUTTYXUSR[SSZSSSS[SSSSSRRTVPPUKRCKNHHB70;;5)bbbbcbcccccc[RYYWWX\YYTYYZ[R[RR[QTXXYXXXYXUUYS[RSZTSS[SKSSSSNTTUVVVONKKONNNN7LL7$770_````````````[]Y\WW\YY\YYYYTZS[RR[ZYSZYYYUVXUYSRRSTS[KSRZTZSZTUTOVPUOUOPUOH3KHL7A707$$$$___````````RYXX\YYYYX\XYYXWYSZSSSRQRSTUXVXYUUYSSRRSSSTTTSSSUPZSTUOUPPOOONKNHAA7H770$_``````aa```Z\WW\]Y]YU\YYXXYYYYYYR^Q^RTYYUYUYUXY[RR[SZTTSRSTUUOTRNTOPLMI;;515)%  lnoppppqqqq]X\\YYYYY\YYYXXYYYXUZ[[[RRZZTYTYTUVTS[SNSTTSRSUVUUUTSSOPPIIB0551.%  +nqqsttttttttY]TY\XY\XYZYXYZTYWXYYZSR[SSTYUYTYUYYTSZTTZSRRUUUPXPUSKOMMJMF>FG++++#rr~~~|~|~~~Z[ZYYY\YYYYXX\Y\WWWYYTSTZ[[STYUXXUYTUSSZTK[STUZNUUUUTRTPJMJJJ>+E++++#r{{zzzzzzzzS[^ZYYYYY\XYYYXWWXYYYYYYZRR[SSUXXUUUSRSS[RSUVUTSTUUUTCNOLP>GGD5?1%%  lnoopooooonZ[[T\\YY\XT[ZYXWXXYYUXXUYSSRR[YUUUYTRR[RRRUVVVUS[TOUOTOSAPJMIIDD0,)%%hhiiiiiiiiiZ[[Y\YY\XY]R[UW\YTTYXXXYUYYZRSYYYYSRRRRSSTUVXUUUOUUUUVTKKOPLIII7000))eefffffffffZR[ZYY\XXYYZS\XTYZYUXXYUXYUUYSSTURRRRRRSUUZTUUUUXTTPVPNSTOHLLH3A$($0,,))bbbcbcccccccZ[RRZYXYYYYXZ]S[TXXXUYYYYYYXYZSSTRS[R^SUVUTSRNYPPOTVUUUUNSNTNC3333777$$0,0``````````\]R[S\\YY\WWYR[[\XWXYTYUTYUYTYTS[S[RRRTXXUUTR[TUUYUUUPPORRNNKAK3CA7A(770$7___````````XY[RZXYY\WWXZRRTXVXYYXXXYUYYYYSRRSRRRTUUUUVYSNTUUUPUVVPTRKKKKKK3AHAA77007$``````aa```YY[ZZYYYXWW\SZ]YX\YTXXUYXXUUXT[RRRQRZUYUUUUUTZTTVPXMVPUUNRRRRRCRNSSKNUTNNOSNNNSKTHNNOOHOLLY]T[[ZYWW\YYYYXWXYZTYYYYYXYUZSRRRR^TYUSZTUUUUTKTTYPVPUOUTRNNRQRSSSSSONNNTOOOOKRKSSNNNOOOYXY[R[\WWXYZYXWXYYYXY[R[TUYSRR[RRSUVXUTSSUUUTTZSSOVUTTUTRSNSRKSNNSNOOTNSNOOONNNNNKNKSHOHYW\ZZYWX\YYYXXXYYXXYSR^SZYSQ^RQ^SXVXUUYNRUVUUVORRUUTUUORRSSRKTTNSTOONTONNTONSOONNTNSLNNNY\\XYZY\YYYXXXYZYUYZ^RRR[SQR[SRRYVXUUXU[[TYUVVXUO[SSUURRRCCRSNTNNNTNTONTONSKKNNNNNOLLONNYYYX\[ZY]YXWX\TYYY[RQR[[RRRSSR[TXUYTXPZTSSSUVVVVTSCSTKRRRRRSSKSSNSNNSNTOONKKNSSNSNLLTHOL\\\XYRSYY\XXYYYXYZQQQ^RRRR[S[SSYXXTSNYSTSSSTUVVUTRRRCRRQCSTTSSSSSTOONNHTNSOTNNNKKNNTHNNOYXWW\ZZZXXX\YYXYS^RQ^[RRR[[RRZTTXVXUTTXTUXTTTVUTUTRK[CQQRNTSKSONTOOOTTTNSNNNNNSSNLOKNNHN\WWW\Z[ZXXYT]YYZR^QRSZZSZZSRTYSTXVXUUUYTVVUUUUTUUTSSKRCRTSKSSOUTOTONSNNKKSSSNNNOPOONNNOK\W\\YYSZYYYYYXYZQ^R[ZSSSYZSYWXTSUUUUUXUUXVVUSTUUURRSRRZOTSKRSNOTNNSSNSNSNNSNSNNOLOONLONPW\\YYY]ZZYY\XX\UZRR[SSZSZSTXVXY[SZYXUVVVUUVUSSUT^CRRRRTTSKSNNSNNSSNNSNTNTNNNNNONONNNONLMX\Y]YXXZ[Y\XYYYYYSR[[[[[RSUXXUUTSSUZZUUZOVUYSSSRCRRQKSSKKSOTTTTSKNTOTNNNNNSTOONNSKKSKLPL\YYXWW\Z^TYYYYYYZR[STS[KYYZTXUYYYYTSRUUZTUUUTSQ^C^KSTNSRRSOTTNTNTOOTNSSSSSKNNNNNONKNPLOL60 92 138 1 +HHHHHAAAHLHHAANANNKKKCKKKOPPOTOOTOUOOOTOOUPOOOOTRSNTOTOPULKRCRSKRKRRRKOOSNOOOOOPOOOOONSNBILHAKKHLMLHNKANNAAKANKRSOOUTUPUOOUOTOOUOOOUOTOOTNTNOOPLUOTCSONKRRCRNPOPONKNOPPPOOOONONKLLHAKAHHLLHNNHNNNKKONNNTONSNOUUOOTOOOOUOOOTOOOUOPNSOPPPPPPNSSNKRRRCRNPPPLTSNOOOHSNOOOOKRHNAKNMIMHHANKOHNKKTOOTOOTKRTTOOOTOTOTOUOUUUOOOOOONROPPPPPOTRKRRRRNNONOPLOONNONQNNNNOOTKCHK3KBMLHNNKKNNNKCNPOOOUTKRNOUOTTTOOUOPUPOOOUUOOUONSNPPPPOONKRCCRKTOOSTOOOOPTRCSOPTNOHNTNHNNHOLONKNNNHNRCTOPPUPPNRSNNTOOOTOUPUOOOUOTOOOOOOOSNPOOOOSRQRSKRNLPLNNNOOPLHKKPLLOONTNNSNNHOONAKKNHNNKRSOPPUPUOTTSSKTOUUOULUOTOONOOPOOOPPPOOMPOOTKQCRKRKTOOOPNSOLPUOSNLUOONONSKCNHOOHNKKNONNKCKUPOUPPOTPPTK[KTOOUOOOSNOOOOULUOUPPPPPUOOOSCQCRKKKNOOPLOSNPLOOOONNHONONARRNNOHONNOTNSRRRSUOUPUTTUPUOTSKNOOOOUTKSTUUPPUOOPPPOPONONKCQQCCRKSOOPPOOOSNTOPPHKRKRNNSRKNLOHNNKNONKRRRKTSNUUOTOUOOTOOSTUOOULUTRNNOOOOOULULPPSRSRQQQCRSRSNNOOPOLLOKNPLOOSCRCSKKKKNLONNSSNSKRCRNTSSSTTOPPUOTOOOOOOOUOPOONNSNOOOPPPPUPLOKCCQQQRNONNOTKKOOPPONOLOOOKCKNNRCRKNTNSKKKSKRCRTTTSNTRROPUOTOOTOOUOUOOOOTTKQSTOOPPMPPPPTKRCRRCNOONNNKRCNPLOOLNKOONRKONKKSKSROONKKSSSSKRSOUOTUUOSNTTTTOUOUUOOUPOOTOOONCKOSOPPPPLPNRQRCRCSOLPOOSRKSOOLULPNNOONNKNSKSNHSKNKRKSNTNSRTUPOOUOPUPUNRSNOUUOUOPOUOOTOPPTNSSKNOPPOONRCQCRRRNOOLPONKNONTOLPONOOLONSRKNNNNKKTSSSTNTKRSOUUUPPUOPPOTSKSNOOPOOUOOTOPPPPONSKSKKTNTSRQQQCQCKNOPPPLNNONKKNOOOLOOLNKKKNKKKRKCqqqqqqppppppoon %-.1?55;;IILOLONNKKSTKSNNRQQRRKRNOOPPOOOONKRKRKOLPNNNSKRNNNSKRCRtsssrrrrrrrqqpp +  -..?DDIIIPLOOUOSSONRNNRCCRKNOPPOONLOOPLRCNNKKNOKNSKQCKSNNKKKRK~||zyxxxxwxxx"""" !!446+?GGJMMMPMPLONNSKKRCQCROOOLPPOKNOPMPNNNTHSCKSKNKKKSKKNKKRHHzyyxwxwwwwwuvvv  " #!!!.1IJMIMMPONKSKNRQQRCSOLLPPLNKNLPPLLONNLSCRKKKNNNNKKRKRKONonnononononnnnl + + '%)))5D;IIIIPPPPUNRSKRCKRQROOONLPONKNOOLPPONOONKNNRKNNKNSKKCKNSCiiiiijijjjjjiiihg  %..50;;ILILPLPPLONKNSKKSKRAPOOOOONRNOKNOLOOLOASOOKKNSNKSKKRKNNKRffffffggggggggee%%%%1115,077HBIMMMPLPPOSNKRKSKKKOPMPLNSCKTNNNOLOLPOHNHNKNNKRRKKCKLOKKKccccccddddddcccbb))))5;;;BA(ANBPMPPMPONKRCRRKKSSPPMPLNSKONNOLOOOLONNNKKNNONKKKCKTHKKKK```aaaaaaaaaa```__,,000BBLHA3KKNOLPLPUNRCQQRKKOOKOLPOONNNOLPPLNNOONNNKRKSHNAKKRNONKRKKO``````_`_`___`___$$000H0HBBHHNAANNNNOOKRCQRRKSLPLONOOOLPOKNPLLOKCKNKRCKHONNKSRKHONKRKKNO``````````````__$$$000BBBHLHANONANKNNRCQRRKRNPPPONKNLMMPNNOOOONQNNNRRNHNNKKKCNOHKRKHOLHqqpqqqppppppoonlk +j &&'*-<1,,DBHANHAKQQCRNKNOPMOSRKPMPOON3OLPARNOKKNNOKRKKRKNNKCKHLLOKtsssrrrrrrqqqponm + h&'*46),,;B7AAARCQCCKHOPLPLONKNLPOLLOKOMONNOKRKNNKKKKKKHNRRKKOLOKR~||zyxxxxwxxx """//!46:5;B7AHKCCRKTOOPPMPOLHONNNOLPLLLONKSKKANNSKRKKNHNKKNNHOHKKHzyyxxwwwwwuuvv """"#!8+6):5:7HA3CCKSHOPMMPLLPPONRKNOPPLONKKKCKNNHNKNKKHOKRNHHOHKCKOonnnonoononnnmmlk +j  '*--<100;BBHAKKKNKNHOPLPOOLLONNOHOLLONKKRKNNONNKNKKNNKRKNOHNNKNNAiiiijijijjjjjiige%--.<150$$HBHAANSNNKSNHONHOMMPNOLOSNHKSKNNKNHOHNKKKKNNKCKKNNNKKLLHKffffffgggggggged%%..115;03(7AAKNNAOONRSNNOOPMMLLPLOHKKKKKKKNNNNKKKRKNKANNNHLHNKHLNKKcccccdcddddccccb))%5555;I;A(AAK33KNOOPONNNNNHMMOOLPOLLNCNNKKSHNNKKKRKNHSKNNHLLNKATAKKK```aaaaaaaaaaa`,,;,;;BBBH(KKAKKKSHHLPOHSNRKNPOOOLPLONNSHNKKNNRKNNNKHONKKNNHOHKNNNKRKK```````_`_`_`__0,00B0HHBAK3KAAKNOLOOONKNKKSNOOOHNHLONNNKRKNNNAKNNKNOHKKNNNNNKKNNNNAKK`````````````_`0,00BBBBA33CKAKAOLMMOHRNNSKRKOMLLNRNNNNKRKANHNNNKKNNKKKAHHNKKKOANNAKKKqpqqqppppppopo +&'%077AIMMMLNKOLONRKOMPLOCKKHKCKNNNNNKKKSAKKKKNLLHAHLHKAKSKKAtssrrrrrrrrqqpp + +&),,077BMMLLOLOPLNAKNOLLOCRARRKNLONKKSKANNKNNNOLNKNLHKKKKRAKN~~zzyxxxxwxx""""!%%%))55;BBILLPMPPLNKKKKHOOHKNKCKKNONASAKANNNNNHHHNKANNKKKNAKKNNyyyxxwwwwwuuwvv  """ %%))::;BBHLLLPIOKKKRNNNHNNHNKNNOHNKKKNHONKANHHHNKKNNKKKNNNANHHnnnoonoononnmmm  ),00BBBHHLILMLOKNCNLOHNKNSKKOLONKKKKNONKKNASNHNNNNNNAKANKKNHHiiiiijiijjjjjii ,,00BB77HHNOLLOOHNOLPLNKNKCKNHLNKANANNAKKNHHHNNNHNHNAKNKKAANHNffffffgggggggf`000;;BHANAANLPLLPLLPLNSNK3RKNNNKANOHHNKKKNLLHNHHNKNAAKKKKKNLLHcccccddddddccccb)`_$000BLHHAHNKKKHPLLPMPLNKAKKNNNNHKKKKHHNKANHHLHKKNNKKKKKKNHNHLLHH```aaaaaaaaaa`a`_$$$(0BBBLHAANOHNKRRHPLLLONKNKKNNNLOHNKKNNNKKOLOHNKNANKKAHNKKHHHLLAKN_`````__`_`_``__$$$$$(7BBLIBL3KHHNNNNKKNLLOKKNKKKNNAOHNNHHHNKRAHOHNAKKNHAKNHNANNNHLNKAA````````````_`_$$$$(70B;BBLAKKANNANNNNNLLOKNKKKNNKNHNNKHONAKAHNNNKANHHNANHNNKANHHNKAHHqqpqqpppppppoonlkjh''--.1);,77AAHHNKKOLKKKKKANAKNKAKKHNAKHLOHAKKNHHNAKAKKKANNHHNANHHtssrrrrrrrqqqppnmkj &'%.1<1;B77ANNAKKNKKCRKKNNOHHNKKANKKNHOHNNNHHHNKANHNKKNLHHNHHNHA~~zzyxxxxwxxx ""#!!!=+!>ÞüûÛø÷Ø|›|š ך\{™ z™z[Õy˜yZµxµxYwXwv³WvuVu“ tUt‘TSS4r RqR3 QQ6T5TS4SR3Rp Q2QP1n 0Om/N.- M.M, LL-KK,* J+I*I)H)('&%FIN_PLYRP 63 +Œ1½wœs{oZk9ggc÷b÷^Ö^ÖZµV”RsNrNRJ1FBï=Î9­5Œ1k1k-j-J-J)I))))%(%(!%!!è ç èçæÆÆÅ¥¥¥„ƒƒ dc B!]_LH80  cTUBE_LR_P 127 +J)Õ~r~îyîu«}Íu¬yi}‹y‹u‹qjuIyHyHu(y'yqÅxmæpiælÅl‚tæ`æ\Å`bp‚lapƒhÅ\‚hApalƒdbh‚dahAlÅTbd‚`adAh¥Tb`¤Ta`Adb\A`a\bX¤LA\aXbTAXaTƒLbPATaP„DAPBLAL!PaHƒ@BHbDAH!LƒTTTTSSSSSX/X/ŽŽŽSŽSss6666ž7777777ž7žžsžs67777777ŽŽŽŽž7777žLL888888888888888888888888ŽŽTTTT/LLsMsMsMžsssLLLssLLLsMsMsM88888333888888888sMžsssssMžssssssåÞìååÍìwÖwwWÔáÝÝâtÝÆÑt®Äv»Ð­­¼¼¯¯°°° ””    ”A«”A¬~“A“A““@|]]]\]]]\\\\[\[[[[x[[{<[{<<<<{<<z>>>Z{?B<{?B;>z>y=A;z>>z|||=~=~~"~"||XX!ZY:::::::x::<:<<<<<8žsssssž<<<<<8<<<<<<88<<<<<7<<7<<7<>==>>>>==@====@@@@@@?AA??A())*)CC?AAAAA??@@==@@????@@==@?ACCAA?@@@??AAAAA?AACC&BB&B&(())*****`**`++++ ,,, -.-,--.-.   + + +  + lllGGLKJKJJJJJJJJJKeJJJeLDKDKDKmLFLFLFLLLLLGGlljllljlB```)Illjljjlljjjllvlllllllll?CAhAlllllllllvll@ll@?AACCCB()))``*))```*`++,,,-,-.--.----....../0   + + + +pRTpRRQTUUUUUUUTTUUUUTTQRoPNoQPNNNPQQNNM999dddddddddd8HABCHndddEKFKFKnFnFnFKmDmFmFm_jG__FFDDDF\\D\\___jjjllkkCCCBB((())(:))``++,,,,---.---------.--..////4    + +SsrSOqsuuWWWWuuVuuWWutSSxxx9xxx999xxx99fadbabbbbbbbbbbmjHjj_bcccdd8JEJEJ8d8d8]]^w^wEE\]E^^^777DD<=>==>=<><>>>=%@?A???$??AACCAAA?$AC&B&'&&'&&&(()----,CBBBBBCB&&'&&&&&&CCC'&&(((&&&&&((()((&(&((&()))*+*+#,,++++#,, -..--..////.0214  + +**))(&B&'&'''''''''''CB((((((((()))))(((())**++++++++++,000//+*********++++**)))*++++++*****+,++,,,,,,,,,,,,,,.---......///////0//000000132     + + + -,,+,+++++++****+*****++,,,+,,,,,,-,,,,,,,--..../////../11212.............-,-,,-,.--.-------......./......//////0001111200011222221111233     + + +0/0000000/0/0000//././/0///00001010100000100111122211112344431111111111111010010100100100010111121212222222212122223333332333443554333334 4       + +3244444332322223233233223323333333333333334434444444343556665444444443434344434333434344434434455544444444444445556555555556666555 55 5 5 56  5    + + + + + 3333333333333433333333433333333333333333333434444443435566665444444433343444443333444444443344454555445454554544656565656666566655 5 5 5 5 5 6 6     + + + 333333322222222222222222233333333333333333333333333334555554333333333333334433333444444333334343333334444444454556565454555656556655 55 565 6      + + !!!!!!!!!!!!!! + + + + + + + +! + + +     + + + + +  +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + + + + + + + + + + + + + + + + +     +    + + +!" + + + + + + + +! + +" + + + + + + + + + + + + + + + + + + + + + + + + + + + +! + + + + + + + + + + + + + + + +!" + +! + + +" + + + + +  + + + + + +        + + +  + + + + + + +" +   +  +  + +  ! +! +"   +  +  + +        + +  +                  +   + +! +  +               + + + +   +                      + +   + + +              +       + + + +                   +   + + + + +                 +  +  + + + + +        +   +       +     + + + + +         +          + + + +  + + + +                         + + + +                   + +  +   +6 44 54 1 +  +           +            +  +   +  + +   +    +   +    +  +  +  +   +     +  +        +     +    +         +         +     +    +      9 44 54 1 + +   + +  +  +    + +  + +       +     +    +       +   + +   +  + +  +  +  +   + +   +           +  +  +  +  +  + + +  + + + + + +   +     + +   +    +  C 200 21 1 +]]ZYX[[X\YXXXTZYS]]SSSSMMOMOJHPNNPLFLF;HFIDDDCCCAAA@@@@s@><<<>E<><<<<<===889k99::999:::0&&&&&&!&&&&&&&&&&&&&&&&&&$$$&$$&&&9999$&&&$&&& ----w-w -w + + + + + ,+,- &-&YZTZZYX[[X\YSS]]R]]TYTZJUOTOOPPNHLFHFFIFDDCCCCACAEEE>>><<<<<<>><<>><<=====88k::i:::000 &&$$%%% + + + + + +n %% %% + + + + +w + -% +w +w + + ***  *********,4{444^T^YS]Y[X\TZZS]SSSZZZTMTYOOOOOLHJLLHHFFyDDDvCACA@A@@@>>>>>>>>ssussrsrrrrrrpr=^!~%ž)v›þTOPBAR2P 241 +   $ +($ 08.4 +$ (-0,,+( @ img1[:stcol][*{2-4}],img2[:stcol][*{2-4}],...,imglast[:stcol][*{2-4}] + + This keyword starts a list of images which are assumed to be in + the previously supplied .img file. + + The stcol field is optional and denotes an offset into the color + palette for each non-zero pixel in the image. + + The asterisk is optional and tells load2 to create multiple sizes of + the image for scaling purposes. The digit following the asterisk tells ' + load2 how many sizes to make. (full, half, qrtr and eighth) + In this case, multiple image headers are created sequentially, + but only one label is created for all of them. + +***> hex_address[,end_address][,bank] + + This keyword causes the address counter to skip to the indicated + address. Upon entering load2, the address counter is set to + 2000000h. If you specify the optional end_address, load2 checks + to see if data fits within the specified range. Only data which + will fit is processed. + + The bank applies only when the /E option is used for dual-banked + image memory and can be 0 or 1. (When omitted, 0 is assumed) + +GLO> global_filename + + Causes all subsequent labels to be written to the supplied + filename instead of the default, "imgtbl.glo" This can be + changed again by another GLO> line. + +ASM> imghdr_filename[,section_name] + + Causes all subsequent image headers to be written to the supplied + filename instead of the default, "imgtbl.asm" This can be changed + again by another ASM> line. The section_name is optional. If not + supplied, a .data line will be inserted at the beginning of the + ASM file. + +ROM> staddr,endaddr + + This keyword specifies an area of image memory which is NOT to + be downloaded to. This is useful when some area of image + memory has been fixed and replaced with ROM. + +PPP> digit + + This sets the DMA2's pixel packing option. If digit is 0, + (the default), then each image is automatically pixel packed + to its smallest size. If you want to force a specific number of + bits per pixel, digit should be a number between 1 and 8. + +ZON> +ZOF> + + These keywords turn DMA2's zero compression on and off. + When on, load2 computes the leading and trailing zeros for + each line of each image and sets the appropriate bits in the + DMA control field of the image header. + When off (the default), load2 downloads the data as it always + has in the past. + Zero compression is AUTOMATICALLY turned off for scaled images! + +CON> +COF> + + These keywords turn checksums on and off. + When on (the default), load2 computes a checksum for each image + to see if it matches a previous image. If so, it creates + a new image header pointing to the previous data, and does + not download the identical data. + When off, identical data will be downloaded separately. + +PON> +POF> + + These keywords turn the palette entry in the image header on and + off when the /T option is in effect. + When on (the default), load2 includes the palette field in the + image header table (assuming it is part of the IHDR format). + When off, the palette field is not included in the image header. + THIS IS REALLY OBSOLETE SINCE YOU CAN DO THE SAME THING WITH THE + IHDR COMMAND. + +XON> +XOF> + + These keywords turn on extra zero pixels along the right and + bottom edge of images so the DMA's scaling computation doesn't + truncate them prematurely. + +FRM> bin_filename1,bin_filename2,... + + Compressed movie footage is contained in files with a .bin + extension. These need to be loaded using the FRM> keyword. + +BBB> bg_filename1,bg_filename2,... + + Loads a BLIMP background file. This causes the following tables + to be created when the /T option is in effect... + bgndequ.h, bgndtbl.asm, bgndpal.asm + +UFN> uni_file_num + + This is used with the /A option to tell load2 what the starting + universe number should be. Without this line, the starting + universe number is 0, which might cause previous universe + files to be overwritten. + +UGL> user_glo_file + + This sets a file name which will be included in a file that + load2 generates. + + The user_glo_file is one file for all universes which you create + and maintain containing image, sequence and/or damage table names + which you want to be global, but are not automatically set to be + by load2. The only reason you are supplying the name here is so + load2 can put a .include line in univtbl.glo. + + +UNI> uni_fname[;override_directory][,uni_fname[;override_dir]...] + + Loads a BGTOOL universe file. The image files contained within + the universe file must come from IMGDIR or the override directory + (if specified). The following tables are created when + the /T option is in effect... + univtbl.glo (for the first UNI> encountered) + unixx.asm,uniseqxx.asm,unixx.tbl,univtbl.glo + +IHDR FLD1:S,FLD2:S,...,FLDn:S + + The IHDR keyword specifies a format for image headers. + FLDx represents a field name, while S represents a size + for that field. + + VALID FIELDS ARE LIMITED TO THE FOLLOWING... + SIZX x size + SIZY y size + SAG image address + CTRL DMA2 control field + ANIX x anim pt + ANIY y anim pt + PAL palette name + ALT alternate palettes (if there are any) + NOTE: these are terminated with a -1. + If an image has none, a -1 is still placed + in its table. + PTnx Point Table values + (n = 0-9 x = X or Y) + + VALID SIZES ARE LIMITED TO THE FOLLOWING.. + B .byte + W .word + L .long + + + A new IHDR line can appear at any time. If none appears, the + default table format is... + + IHDR SIZX:W,SIZY:W,SAG:L,ANIX:W,ANIY:W,CTRL:W,PAL:L + + + + + *********************************************************************** + * * + * Invocation... load2 * + * * + *********************************************************************** + + TRGTADDR is the host communication port + Source directories for related files can be chosen through flags. + YOU CAN SPECIFY AN IMAGE HEADER FORMAT IN THE .LOD FILE!!! + +Valid ... + + /X -DO NOT download to GSP. (If not present, it does) + /Dx -Specify directory for .lod file (see below for 'x' description) + /Tx -Build image table files (see below for 'x' description) + /Fx -Build raw file (see below for 'x' description) + /Ox -Override dir. for all files in .lod file (see below for 'x') + /Ux -Override dirs. within all Universe files (see below for 'x') + +NOTE! The above flags are independent and may be used in any combination. + + /Rx -Load from a raw image file. (see below for 'x' description). + /H -Print an explanation of .lod file directives. + /V -Verbose mode, report lots of stuff. + /I -Write background data to image roms + /B -Make Bits Per Pixel based on Image data, not Palette size + /P -Pad images to multiple of 4 bits + /L -aLign images to 16 bit boundaries + /A -Append to (i.e. do not erase and recreate) default table files. + /S -Write sequences in .uni files to univseq.new + /E -ED adjustment (Dual banked image memory (not available in load20) + +The T,F,R,D,O and U options use a secondary flag shown above as 'x'. + If x is I, the affected file uses IMGDIR. + If x is S, the affected file uses SRCDIR. + If x is C, the affected file uses the current dir. + If x is =, supply a directory on the command line. + + + +/******************************************************************** + +Normally, imgtbl.asm, imgtbl.glo and imgpal.asm are created for writing. + + imgtbl.asm becomes the default ASM file for image headers. + imgtbl.glo becomes the default file for .globals. + imgpal.asm is where all non-BLIMP palettes are placed. + +When the /A option is used for multiple loads... + imgtbl.asm is opened for reading, & scanned for image names. + imgtbl.glo is opened for appending. + imgpal.asm is opened for appending, old palettes are scanned for names. + + AN ASM DIRECTIVE MUST APPEAR AT THE START OF A .LOD FILE WHEN + THE /A OPTION IS USED SO THAT IMG HEADERS HAVE SOME PLACE TO GO!!! + THE GLO DIRECTIVE IS OPTIONAL. + +***************************************************************************/ + + \ No newline at end of file diff --git a/NEWLOAD2/MK8MIL.LOD b/NEWLOAD2/MK8MIL.LOD new file mode 100644 index 0000000..f052198 --- /dev/null +++ b/NEWLOAD2/MK8MIL.LOD @@ -0,0 +1,498 @@ +***> 4000000,1 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +ZON> +CON> +POF> +;******************************************************************** +; +; More floor images +; +;******************************************************************** +PPP> 6 +ZOF> +ASM> MKFLOOR3.TBL +FRM> FL_WATER +ZON> +;*************************************************************************** +; +; Kitana +; +;*************************************************************************** +PPP> 6 +ASM> MKFN.TBL +C:\VIDEO\SUPERMK3\IMG\KITANA1.IMG +PON> +---> KTTORSO1A +POF> +---> KTTORSO2A,KTTORSO3A,KTTORSO4A,KTTORSO5A,KTTORSO6A,KTTORSO7A +---> KTTORSO8A,KTTORSO9A,KTSTANCE1A,KTSTANCE1B,KTSTANCE2A,KTSTANCE2B +---> KTSTANCE3A,KTSTANCE3B,KTSTANCE4A,KTSTANCE4B,KTSTANCE5A,KTSTANCE5B +---> KTSTANCE6A,KTSTANCE6B,KTSTANCE7A,KTSTANCE7B,KTSTANCE8A,KTSTANCE8B +PON> +---> MLSTANCE1A +POF> +---> MLSTANCE1B,MLSTANCE2A,MLSTANCE2B,MLSTANCE3A,MLSTANCE3B +---> MLSTANCE4A,MLSTANCE4B,MLSTANCE5A,MLSTANCE5B,MLSTANCE6A,MLSTANCE6B +---> MLSTANCE7A,MLSTANCE7B,MLSTANCE8A,MLSTANCE8B,MLSTANCE9A,MLSTANCE9B +PON> +---> JDSTANCE1A +POF> +---> JDSTANCE1B,JDSTANCE2A,JDSTANCE2B,JDSTANCE3A,JDSTANCE3B +---> JDSTANCE4A,JDSTANCE4B,JDSTANCE5A,JDSTANCE5B,JDSTANCE6A,JDSTANCE6B +---> JDSTANCE7A,JDSTANCE7B,KTTURN1A,KTTURN1B,KTTURN2A,KTTURN2B,KTBLOCK1A +---> KTBLOCK1B,KTBLOCK2A,KTBLOCK2B,KTBLOCK3A,KTBLOCK3B,KTWALKLEG1A +---> KTWALKLEG1B,KTWALKLEG2A,KTWALKLEG2B,KTWALKLEG3A,KTWALKLEG4A +---> KTWALKLEG4B,KTWALKLEG5A,KTWALKLEG5B,KTWALKLEG6A,KTWALKLEG7A +---> KTWALKLEG8A,KTWALKLEG8B,KTWALKLEG9A,KTWALKLEG9B +C:\VIDEO\SUPERMK3\IMG\KITANA2.IMG +---> KTDUCK1A,KTDUCK1B,KTDUCK2A,KTDUCK2B,KTDUCK3A,KTDUCKBLOCK1A +---> KTDUCKBLOCK1B,KTDUCKBLOCK2A,KTDUCKBLOCK2B,KTDUCKBLOCK3A,KTDUCKBLOCK3B +---> KTDUCKHIT1A,KTDUCKHIT1B,KTDUCKHIT2A,KTDUCKHIT2B,KTDUCKHIT3A +---> KTDUCKHIT3B,KTDUCKTURN1A,KTDUCKTURN1B,KTDUCKTURN2A,KTDUCKTURN2B +---> KTDUCKPUNCH1A,KTDUCKPUNCH1B,KTDUCKPUNCH2A,KTDUCKPUNCH2B,KTDUCKPUNCH3A +---> KTDUCKPUNCH3B,KTDUCKLOKICK1A,KTDUCKLOKICK1B,KTDUCKLOKICK2A +---> KTDUCKLOKICK2B,KTDUCKLOKICK3A,KTDUCKLOKICK3B,KTDUCKLOKICK3C +---> KTDUCKHIKICK1A,KTDUCKHIKICK2A,KTDUCKHIKICK2B,KTDUCKHIKICK3A +---> KTDUCKHIKICK3B,KTDUCKHIKICK4A,KTDUCKHIKICK4B +---> KTUPPERCUT2A +---> KTUPPERCUT3A,KTUPPERCUT4A,KTUPPERCUT4B,KTUPPERCUT5A,KTUPPERCUT5B +---> KTUPPERCUT5C,KTUPPERCUT8A,KTUPPERCUT8B +C:\VIDEO\SUPERMK3\IMG\KITANA3.IMG +---> KTHIPUNCH1A,KTHIPUNCH1B,KTHIPUNCH2A,KTHIPUNCH2B,KTHIPUNCH3A +---> KTHIPUNCH3B,KTHIPUNCH3C,KTHIPUNCH4A,KTHIPUNCH4B,KTHIPUNCH4C +---> KTHIPUNCH5A,KTHIPUNCH5B,KTHIPUNCH6A,KTHIPUNCH6B,KTHIPUNCH6C +---> KTHIPUNCH7A,KTHIPUNCH7B,KTHIPUNCH7C,KTLOPUNCH1A,KTLOPUNCH1B +---> KTLOPUNCH2A,KTLOPUNCH2B,KTLOPUNCH3A,KTLOPUNCH3B,KTLOPUNCH4A +---> KTLOPUNCH4B,KTLOPUNCH5A,KTLOPUNCH5B +---> KTCOMBO2A,KTCOMBO2B,KTCOMBO3A,KTCOMBO3B,KTCOMBO3C,KTCOMBO4A +---> KTCOMBO4B,KTCOMBO4C,KTCOMBO4D,KTCOMBO5A,KTCOMBO5B,KTCOMBO5C +---> KTCOMBO7A,KTCOMBO7B,KTCOMBO7C,KTCOMBO7D,KTCOMBO8A +---> KTCOMBO8B,KTCOMBO8C,KTCOMBO9A,KTCOMBO9B,KTCOMBO10A,KTCOMBO10B +---> MLCOMBO3A +---> MLCOMBO3B,MLCOMBO4A,MLCOMBO4B,MLCOMBO5A,MLCOMBO5B,MLCOMBO5C,MLCOMBO6A +---> MLCOMBO6B,MLCOMBO7A,MLCOMBO7B,MLCOMBO8A,MLCOMBO8B,MLCOMBO8C,MLCOMBO9A +---> MLCOMBO9B,MLCOMBO10A,MLCOMBO10B +---> JDCOMBO2A,JDCOMBO2B,JDCOMBO3A,JDCOMBO3B,JDCOMBO4A,JDCOMBO4B,JDCOMBO4C +---> JDCOMBO5A +---> JDCOMBO5B,JDCOMBO5C,JDCOMBO6A,JDCOMBO6B,JDCOMBO7A,JDCOMBO7B,JDCOMBO7C +---> JDCOMBO8A,JDCOMBO8B,JDCOMBO8C,JDCOMBO9A,JDCOMBO9B,JDCOMBO9C,JDCOMBO10A +---> JDCOMBO10B,JDCOMBO10C,JDCOMBO11A,JDCOMBO11B,JDCOMBO11C +PON> +---> JADEROD2A +POF> +---> JADEROD2B,JADEROD3A,JADEROD3B,JADEROD4A,JADEROD5A +---> JADEROD6A,JADEROD6B,JADEROD7A,JADEROD7B,JADEROD8A,JADEROD8B,JADEROD9A +---> JADEROD9B,JADEROD10A,JADEROD11A +C:\VIDEO\SUPERMK3\IMG\KITANA4.IMG +---> KTLOKICK1A,KTLOKICK2A,KTLOKICK3A,KTLOKICK3B,KTLOKICK4A,KTLOKICK5A +---> KTLOKICK6A,KTHIKICK1A,KTHIKICK1B,KTHIKICK2A,KTHIKICK2B,KTSWEEPKICK1A +---> KTSWEEPKICK1B,KTSWEEPKICK2A,KTSWEEPKICK2B,KTSWEEPKICK3A,KTSWEEPKICK4A +---> KTSWEEPKICK5A,KTSWEEPKICK5B,KTSWEEPKICK6A,KTSWEEPKICK7A,KTSWEEPKICK7B +---> KTSWEEPKICK8A,KTSWEEPKICK8B,KTSPINKICK1A,KTSPINKICK1B,KTSPINKICK2A +---> KTSPINKICK2B,KTSPINKICK3A,KTSPINKICK4A,KTSPINKICK4B,KTSPINKICK5A +---> KTSPINKICK5B,KTSPINKICK6A,KTSPINKICK6B,KTSPINKICK7A,KTSPINKICK8A +---> KTSPINKICK8B,KTKNEE1A,KTKNEE2A,KTKNEE2B,KTAXEKICK1A,KTAXEKICK2A +---> KTAXEKICK2B,KTAXEKICK3A,KTAXEKICK3B,KTAXEKICK4A,KTAXEKICK4B +---> KTKNEECOMBO1A,KTKNEECOMBO1B,KTKNEECOMBO2A,KTKNEECOMBO3A,KTKNEECOMBO3B +C:\VIDEO\SUPERMK3\IMG\KITANA5.IMG +---> KTJUMP1A,KTJUMP1B,KTJUMP2A,KTJUMP2B,KTJUMP3A,KTJUMP3B,KTJUMPKICK1A +---> KTJUMPKICK2A,KTJUMPKICK2B,KTJUMPKICK3A,KTJUMPKICK3B,KTJUMPFLIP1A +---> KTJUMPFLIP1B,KTJUMPFLIP2A,KTFLIPKICK1A,KTFLIPKICK2A,KTFLIPKICK2B +---> KTFLIPKICK3A,KTFLIPKICK3B,KTFLIPUNCH1A,KTFLIPUNCH2A,KTFLIPUNCH3A +---> KTFLIPUNCH3B,KTFLIPUNCH3C,KTWAVEPUNCH1A,KTAIRSAI1A,KTAIRSAI2A +---> KTAIRSAI3A,KTAIRFAN1A,KTAIRFAN1B,KTAIRFAN2A,KTAIRFAN3A,KTAIRFAN4A +---> KTJUMPFLIP3A,KTJUMPFLIP4A,KTJUMPFLIP5A,KTJUMPFLIP6A,KTJUMPFLIP7A +---> KTJUMPFLIP8A +C:\VIDEO\SUPERMK3\IMG\KITANA6.IMG +---> KTHIHIT1A,KTHIHIT1B,KTHIHIT2A,KTHIHIT2B,KTHIHIT3A,KTHIHIT3B,KTLOHIT1A +---> KTLOHIT1B,KTLOHIT2A,KTLOHIT2B,KTLOHIT3A,KTLOHIT3B,KTSTUMBLE1A +---> KTSTUMBLE1B,KTSTUMBLE2A,KTSTUMBLE2B,KTSTUMBLE2C,KTSTUMBLE3A +---> KTSTUMBLE3B,KTSTUMBLE4A,KTSTUMBLE4B,KTSTUMBLE5A,KTSTUMBLE5B +---> KTSTUMBLE5C,KTSTUMBLE6A,KTSTUMBLE6B,KTSTUMBLE7A,KTSTUMBLE7B +---> KTSTUMBLE8A,KTSTUMBLE8B +---> KTKNOCKDOWN1A,KTKNOCKDOWN1B,KTKNOCKDOWN2A,KTKNOCKDOWN3A +---> KTKNOCKDOWN3B,KTKNOCKDOWN4A,KTKNOCKDOWN4B,KTKNOCKDOWN5A +---> KTKNOCKDOWN6A,KTKNOCKDOWN7A +---> KTGETUP1A +---> KTGETUP2A,KTGETUP3A,KTGETUP4A,KTGETUP4B,KTGETUP5A,KTGETUP6A +---> KTSWEEPFALL1A,KTSWEEPFALL1B,KTSWEEPFALL2A,KTSWEEPFALL2B,KTSWEEPFALL3A +---> KTSWEEPFALL3B,KTSWEEPFALL4A,KTSWEEPFALL4B,KTSWEEPFALL5A,KTSWEEPFALL5B +---> KTSWEEPFALL6A,KTSWEEPFALL7A,KTSWEEPUP1A,KTSWEEPUP2A,KTSWEEPUP3A +---> KTSWEEPUP4A,KTSWEEPUP5A,KTSWEEPUP6A,KTFLIPPED1A,KTFLIPPED2A +---> KTFLIPPED3A,KTFLIPPED3B,KTFLIPPED4A,KTFLIPPED5A,KTSTUNNED1A +---> KTSTUNNED1B,KTSTUNNED2A,KTSTUNNED2B,KTSTUNNED3A,KTSTUNNED3B +---> KTSTUNNED4A,KTSTUNNED4B,KTSTUNNED5A,KTSTUNNED5B,KTSTUNNED6A +---> KTSTUNNED6B,KTSTUNNED7A,KTSTUNNED7B,KTSTUNNED8A,KTSTUNNED8B +---> KTSTUNNED9A,KTSTUNNED9B +---> KTFALLTHUD1A +---> KTFALLTHUD4A,KTFALLTHUD5A,KTFALLTHUD6A,KTFALLTHUD7A +C:\VIDEO\SUPERMK3\IMG\KITANA7.IMG +PON> +---> FANSTUN1 +POF> +---> FANSTUN2,FANSTUN3,FANSTUN4,FANSTUN5,FANSTUN6,FANSTUN7 +---> FANSTUN8,FANSTUN9,FANSTUN10,FANSTUN11 +---> KTTHROWFAN1A,KTTHROWFAN1B,KTTHROWFAN2A,KTTHROWFAN2B,KTTHROWFAN3A +---> KTTHROWFAN3B,KTTHROWFAN4A,KTTHROWFAN4B,KTTHROWFAN5A,KTTHROWFAN5B +---> MLTHROWSAI1A,MLTHROWSAI1B,MLTHROWSAI2A,MLTHROWSAI2B,MLTHROWSAI3A +---> MLTHROWSAI4A,MLTHROWSAI4B,KTFANSPIN1A,KTFANSPIN1B +---> KTFANSPIN2A,KTFANSPIN2B,KTFANSPIN3A,KTFANSPIN3B +---> KTBUZZSAW1A,KTBUZZSAW1B,KTBUZZSAW2A,KTBUZZSAW2B +---> KTBUZZSAW2C,KTBUZZSAW3A,KTBUZZSAW3B,SIPROJ1,SIPROJ2,SIPROJ3,SIPROJ4 +---> SIPROJ5,SIPROJ6,SIPROJ7,SIPROJ8,SIPROJ10,SIPROJ12 +---> SIPROJ14,SIPROJ16,SIPROJ18 +---> JDTHROWBLADE1A,JDTHROWBLADE1B,JDTHROWBLADE2A,JDTHROWBLADE2B +---> JDTHROWBLADE3A,JDTHROWBLADE3B,JDTHROWBLADE4A,JDTHROWBLADE4B +---> JDTHROWBLADE5A,JDTHROWBLADE5B +PON> +---> FANS1,BOOMERANG1 +POF> +---> FANS2,FANS3,FANS4,FANS5,FANS6,FANS7,FANS8,FANS9 +---> FANS10,FANS11,FANS12,FANS13,FANS14,FANS15,FANS16 +---> BOOMERANG2,BOOMERANG3,BOOMERANG4,BOOMERANG5,BOOMERANG6,BOOMERANG7 +---> BOOMERANG8,BOOMERANG9,BOOMERANG10,BOOMERANG11,BOOMERANG12,BOOMERANG13 +---> BRTRAIL1,BRTRAIL2,BRTRAIL3,BRTRAIL4,BRTRAIL5,BRTRAIL6 +;---> BOOMERANG2,BOOMERANG3,BOOMERANG4,BOOMERANG5,BOOMERANG6 +;---> BOOMERANG7,BOOMERANG8,BOOMERANG9,BOOMERANG10,BOOMERANG11 +C:\VIDEO\SUPERMK3\IMG\KITANA8.IMG +---> MLFLIP1A,MLFLIP1B,MLFLIP1C,MLFLIP2A,MLFLIP2B,MLFLIP2C,MLFLIP3A +---> MLFLIP3B,MLFLIP4A,MLFLIP4B,MLFLIP5A,MLFLIP5B,MLFLIP6A,MLFLIP6B +---> MLFLIP8A,JDSTAFFLIP2A +---> JDSTAFFLIP2B,JDSTAFFLIP3A,JDSTAFFLIP3B,JDSTAFFLIP4A,JDSTAFFLIP4B +---> JDSTAFFLIP5A,JDSTAFFLIP5B,JDSTAFFLIP6A,JDSTAFFLIP6B,JDSTAFFLIP6C +---> JDSTAFFLIP7A,JDSTAFFLIP7B,JDSTAFFLIP7C +---> JDSTAFFLIP9A,JDSTAFFLIP9B,JDSTAFFLIP10A,JDSTAFFLIP10B,JDSTAFFLIP10C +---> JDSTAFFLIP11A,JDSTAFFLIP11B,JDSTAFFLIP11C +---> KTLEGFLIP1A,KTLEGFLIP2A +---> KTLEGFLIP2B,KTLEGFLIP3A,KTLEGFLIP3B,KTLEGFLIP4A,KTLEGFLIP5A +---> KTLEGFLIP6A,KTLEGFLIP7A,KTLEGFLIP8A,KTLEGFLIP8B,KTLEGFLIP9A +---> KTLEGFLIP9B +C:\VIDEO\SUPERMK3\IMG\KITANA9.IMG +---> KTRUN1A,KTRUN1B,KTRUN2A,KTRUN2B,KTRUN3A,KTRUN3B,KTRUN4A,KTRUN4B +---> KTRUN5A,KTRUN6A,KTRUN7A,KTRUN7B,KTRUN8A,KTRUN8B,KTRUN9A,KTRUN9B +---> KTRUN10A,KTRUN10B,KTRUN11A,KTRUN12A,KTVICTORY1A,KTVICTORY1B +---> KTVICTORY1C,KTVICTORY2A,KTVICTORY2B,KTVICTORY2C,KTVICTORY2D +---> KTVICTORY3A,KTVICTORY3B,KTVICTORY4A,KTVICTORY5A,KTVICTORY6A +---> KTVICTORYLEG1A,MLVICTORY1A,MLVICTORY1B,MLVICTORY2A,MLVICTORY2B +---> MLVICTORY2C,MLVICTORY2D,MLVICTORY3A,MLVICTORY3B,MLVICTORY4A +---> MLVICTORY4B,MLVICTORY5A,MLVICTORY5B,MLVICTORYLEG1A +---> JDVICTORY2A,JDVICTORY2B,JDVICTORY3A,JDVICTORY3B +---> JDVICTORY4A,JDVICTORY4B,JDVICTORY5A,JDVICTORY5B,JDVICTORY6A +---> JDVICTORY6B,JDVICTORY7A,JDVICTORY7B,JDVICTORY8A,JDVICTORY9A +---> JDVICTORY9B,JDVICTORY10A,JDVICTORY11A,JDVICTORY11B,JDVICTORY11C +---> JDVICTORY12A,JDVICTORY12B,JDVICTORY12C,JDVICTORY13A,JDVICTORY13B +---> JDVICTORY13C,JDVICTORY14A,JDVICTORY14B,JDVICTORY14C,JDVICTORY15A +---> JDVICTORY15B,JDVICTORY15C +PON> +---> RODJDVICTOR2 +POF> +---> RODJDVICTOR3,RODJDVICTOR4,RODJDVICTOR5,RODJDVICTOR6 +---> RODJDVICTOR7,RODJDVICTOR8,RODJDVICTOR9,RODJDVICTOR10,RODJDVICTOR11 +---> RODJDVICTOR12,RODJDVICTOR13,RODJDVICTOR14,RODJDVICTOR15 +;*************************************************************************** +; +; Scorpion / Reptile / Subzero +; +;*************************************************************************** +PPP> 6 +ASM> MKNJ.TBL +C:\VIDEO\SUPERMK3\IMG\SCORP1.IMG +PON> +---> SCSTANCE1A +POF> +---> SCSTANCE1B,SCSTANCE2A,SCSTANCE2B,SCSTANCE3A,SCSTANCE3B +---> SCSTANCE4A,SCSTANCE4B,SCSTANCE5A,SCSTANCE5B,SCSTANCE6A,SCSTANCE6B +---> SCSTANCE7A,SCSTANCE7B,SCSTANCE8A,SCSTANCE8B,SCSTANCE9A,SCSTANCE9B +PON> +---> RPSTANCE1A +POF> +---> RPSTANCE1B,RPSTANCE2A,RPSTANCE2B,RPSTANCE3A,RPSTANCE3B +---> RPSTANCE4A,RPSTANCE4B,RPSTANCE5A,RPSTANCE5B,RPSTANCE6A,RPSTANCE6B +---> RPSTANCE7A,RPSTANCE7B,RPSTANCE8A,RPSTANCE8B,RPSTANCE9A,RPSTANCE9B +---> SCWALKTORSO1A,SCWALKTORSO2A,SCWALKTORSO3A,SCWALKTORSO4A,SCWALKTORSO5A +---> SCWALKTORSO6A,SCWALKTORSO7A,SCWALKTORSO8A,SCWALKTORSO9A,SCWALKLEG1A +---> SCWALKLEG1B,SCWALKLEG2A,SCWALKLEG3A,SCWALKLEG4A,SCWALKLEG5A +---> SCWALKLEG6A,SCWALKLEG7A,SCWALKLEG8A,SCWALKLEG8B,SCWALKLEG9A +---> SCWALKLEG9B,SCTURN1A,SCTURN1B,SCTURN2A,SCTURN2B,SCBLOCK1A,SCBLOCK1B +---> SCBLOCK2A,SCBLOCK2B,SCBLOCK3A,SCBLOCK3B +C:\VIDEO\SUPERMK3\IMG\SCORP2.IMG +---> SCDUCK1A,SCDUCK1B,SCDUCK2A,SCDUCK2B,SCDUCK3A,SCDUCK3B,SCDUCKBLOCK1A +---> SCDUCKBLOCK1B,SCDUCKBLOCK2A,SCDUCKBLOCK2B,SCDUCKBLOCK3A,SCDUCKBLOCK3B +---> SCDUCKTURN1A,SCDUCKTURN1B,SCDUCKTURN2A,SCDUCKTURN2B,SCDUCKPUNCH1A +---> SCDUCKPUNCH1B,SCDUCKPUNCH2A,SCDUCKPUNCH3A,SCDUCKLOKICK1A +---> SCDUCKLOKICK1B,SCDUCKLOKICK2A,SCDUCKLOKICK2B,SCDUCKLOKICK3A +---> SCDUCKLOKICK3B,SCDUCKLOKICK3C,SCDUCKHIKICK1A,SCDUCKHIKICK1B +---> SCDUCKHIKICK2A,SCDUCKHIKICK2B,SCDUCKHIKICK3A,SCDUCKHIKICK3B +---> SCDUCKHIKICK4A,SCDUCKHIKICK4B,SCUPPERCUT1A,SCUPPERCUT1B,SCUPPERCUT2A +---> SCUPPERCUT2B,SCUPPERCUT4A,SCUPPERCUT4B +---> SCUPPERCUT5A,SCUPPERCUT5B,SCUPPERCUT5C +---> SCUPPERCUT7A,SCUPPERCUT7B,SCDUCKHIT1A,SCDUCKHIT1B,SCDUCKHIT2A +---> SCDUCKHIT2B,SCDUCKHIT3A,SCDUCKHIT3B +C:\VIDEO\SUPERMK3\IMG\SCORP3.IMG +---> SCHIPUNCH1A,SCHIPUNCH1B,SCHIPUNCH2A,SCHIPUNCH2B,SCHIPUNCH3A +---> SCHIPUNCH3B,SCHIPUNCH4A,SCHIPUNCH4B,SCHIPUNCH5A,SCHIPUNCH5B +---> SCHIPUNCH6A,SCHIPUNCH6B,SCHIPUNCH7A,SCHIPUNCH7B,SCLOPUNCH1A +---> SCLOPUNCH1B,SCLOPUNCH2A,SCLOPUNCH2B,SCLOPUNCH3A,SCLOPUNCH3B +---> SCLOPUNCH4A,SCLOPUNCH4B,SCLOPUNCH5A,SCLOPUNCH5B,SCLOPUNCH6A +---> SCLOPUNCH6B,SCCOMBO1A,SCCOMBO1B,SCCOMBO2A,SCCOMBO2B,SCCOMBO3A +---> SCCOMBO3B,SCCOMBO3C,SCCOMBO4A,SCCOMBO4B,SCCOMBO6A +---> SCCOMBO6B,SCCOMBO7A,SCCOMBO7B,SCCOMBO8A,SCCOMBO8B,SCCOMBO9A,SCCOMBO9B +---> SCCOMBO10A,SCCOMBO10B,SCCOMBO11A,SCCOMBO11B,SCCOMBO12A,SCCOMBO12B +---> RPCOMBO1A,RPCOMBO1B,RPCOMBO2A,RPCOMBO2B,RPCOMBO3A,RPCOMBO4A,RPCOMBO4B +---> RPCOMBO6A,RPCOMBO6B,RPCOMBO7A,RPCOMBO7B,RPCOMBO8A +---> RPCOMBO8B,RPCOMBO9A,RPCOMBO9B,RPCOMBO10A,RPCOMBO10B +C:\VIDEO\SUPERMK3\IMG\SCORP4.IMG +---> SCLOKICK1A,SCLOKICK1B,SCLOKICK2A,SCLOKICK3A,SCLOKICK3B,SCLOKICK4A +---> SCLOKICK5A,SCLOKICK5B,SCLOKICK6A,SCHIKICK1A,SCHIKICK1B,SCHIKICK2A +---> SCHIKICK2B,SCHIKICK3A,SCHIKICK4A,SCHIKICK4B,SCHIKICK5A,SCHIKICK6A +---> SCHIKICK6B,SCKNEECOMBO1A,SCKNEECOMBO1B,SCKNEECOMBO2A,SCKNEECOMBO3A +---> SCKNEECOMBO3B,SCKNEECOMBO4A,SCKNEECOMBO4B,SCKNEECOMBO5A,SCKNEECOMBO5B +---> SCKNEECOMBO5C,SCKNEECOMBO6A,SCKNEECOMBO6B,SCKNEECOMBO6C,SCKNEECOMBO7A +---> SCKNEECOMBO7B,SCKNEECOMBO8A,SCKNEECOMBO8B,SCKNEECOMBO8C,SCKNEECOMBO9A +---> SCKNEECOMBO9B,SCKNEECOMBO9C,SCKNEECOMBO10A,SCKNEECOMBO10B +---> SCKNEECOMBO11A,SCKNEECOMBO11B,SCSWEEPKICK1A,SCSWEEPKICK1B +---> SCSWEEPKICK2A,SCSWEEPKICK2B,SCSWEEPKICK3A,SCSWEEPKICK3B,SCSWEEPKICK4A +---> SCSWEEPKICK4B,SCSWEEPKICK5A,SCSWEEPKICK5B,SCSWEEPKICK6A,SCSWEEPKICK6B +---> SCSWEEPKICK7A,SCSWEEPKICK7B,SCSWEEPKICK8A,SCSWEEPKICK8B,SCSPINHOOK1A +---> SCSPINHOOK1B,SCSPINHOOK2A,SCSPINHOOK2B,SCSPINHOOK3A,SCSPINHOOK4A +---> SCSPINHOOK4B,SCSPINHOOK5A,SCSPINHOOK5B,SCSPINHOOK5C,SCSPINHOOK6A +---> SCSPINHOOK7A,SCSPINHOOK8A,SCSPINHOOK8B +C:\VIDEO\SUPERMK3\IMG\SCORP5.IMG +---> SCJUMP1A,SCJUMP1B,SCJUMP2A,SCJUMP2B,SCJUMP3A,SCJUMP3B,SCJUMPKICK1A +---> SCJUMPKICK2A,SCJUMPKICK2B,SCJUMPKICK3A,SCJUMPKICK3B,SCJUMPFLIP1A +---> SCJUMPFLIP2A,SCJUMPFLIP3A,SCJUMPFLIP4A,SCJUMPFLIP5A,SCJUMPFLIP6A +---> SCJUMPFLIP7A,SCJUMPFLIP8A,SCFLIPKICK1A,SCFLIPKICK2A,SCFLIPKICK3A +---> SCFLIPUNCH1A,SCFLIPUNCH2A,SCFLIPUNCH2B,SCFLIPUNCH3A,SCFLIPUNCH3B +---> SCFLIPUNCH3C,SZSLIDE2A,SZSLIDE2B,SZSLIDE3A +---> SZSLIDE3B,SCTELEPUNCH1A,SCTELEPUNCH1B,SCTELEPUNCH1C +C:\VIDEO\SUPERMK3\IMG\SCORP6.IMG +---> SCHIHIT1A,SCHIHIT1B,SCHIHIT2A,SCHIHIT2B,SCHIHIT3A,SCHIHIT3B,SCLOHIT1A +---> SCLOHIT1B,SCLOHIT2A,SCLOHIT2B,SCLOHIT3A,SCLOHIT3B,SCSTUMBLE1A +---> SCSTUMBLE1B,SCSTUMBLE2A,SCSTUMBLE2B,SCSTUMBLE3A,SCSTUMBLE3B +---> SCSTUMBLE4A,SCSTUMBLE4B,SCSTUMBLE5A,SCSTUMBLE5B +---> SCSTUMBLE7A,SCSTUMBLE8A,SCSTUMBLE8B,SCSTUMBLE8C,SCSTUMBLE9A +---> SCSTUMBLE9B,SCKNOCKDOWN1A,SCKNOCKDOWN1B,SCKNOCKDOWN2A,SCKNOCKDOWN3A +---> SCKNOCKDOWN4A,SCKNOCKDOWN5A,SCKNOCKDOWN5B,SCKNOCKDOWN6A,SCKNOCKDOWN6B +---> SCKNOCKDOWN7A,SCKNOCKDOWN8A,SCGETUP1A,SCGETUP2A,SCGETUP3A,SCGETUP4A +---> SCGETUP4B,SCGETUP5A,SCGETUP5B,SCGETUP6A,SCGETUP6B,SCSWEEPFALL1A +---> SCSWEEPFALL1B,SCSWEEPFALL2A,SCSWEEPFALL2B,SCSWEEPFALL3A,SCSWEEPFALL3B +---> SCSWEEPFALL4A,SCSWEEPFALL4B,SCSWEEPFALL5A,SCSWEEPFALL5B,SCSWEEPFALL6A +---> SCSWEEPUP1A,SCSWEEPUP2A,SCSWEEPUP2B,SCSWEEPUP3A,SCSWEEPUP3B +---> SCSWEEPUP4A,SCSWEEPUP5A,SCSWEEPUP5B,SCSWEEPUP6A,SCSWEEPUP6B +---> SCFLIPPED1A,SCFLIPPED2A,SCFLIPPED3A,SCFLIPPED4A,SCFLIPPED5A +---> SCFLIPPED5B,SCFLIP1A,SCFLIP1B,SCFLIP2A,SCFLIP2B,SCFLIP3A,SCFLIP3B +---> SCFLIP4A,SCFLIP4B,SCFLIP5A,SCFLIP6A,SCFLIP7A +---> SCFLIP9A,SCFLIP9B,SCSTUNNED1A,SCSTUNNED1B,SCSTUNNED2A,SCSTUNNED2B +---> SCSTUNNED3A,SCSTUNNED3B,SCSTUNNED4A,SCSTUNNED4B,SCSTUNNED5A +---> SCSTUNNED5B,SCSTUNNED6A,SCSTUNNED6B,SCSTUNNED7A,SCSTUNNED7B +---> SCSTUNNED8A,SCSTUNNED8B +---> SCFALLTHUD1A,SCFALLTHUD4A +---> SCFALLTHUD5A,SCFALLTHUD6A,SCFALLTHUD7A +PPP> 0 +C:\VIDEO\SUPERMK3\IMG\SCORP7.IMG +PON> +---> SCSPEAR1A +POF> +---> SCSPEAR1B,SCSPEAR1C,SCSPEAR2A,SCSPEAR2B,SCSPEAR3A,SCSPEAR3B +---> SCSPEAR4A,SCSPEAR4B,SCSPEAR5A,SCSPEAR5B,SCSPEAR6A,SCSPEAR6B +---> SCSPEAR7A,SCSPEAR7B,SCSPEAR8A,SCSPEAR8B,SCSPEAR9A,SCSPEAR9B +PON> +---> RPFORCEBALL1A +POF> +---> RPFORCEBALL1B,RPFORCEBALL2A,RPFORCEBALL3A,RPFORCEBALL4A,RPFORCEBALL5A +;PON> +---> SZICEPRO1A +;POF> +---> SZICEPRO1B,SZICEPRO2A,SZICEPRO2B,SZICEPRO3A +;PON> +---> SZFLOORICE1A +;POF> +---> SZFLOORICE1B,SZFLOORICE2A,SZFLOORICE2B,SZFLOORICE3A,SZFLOORICE3B +---> RPSPIT1A,RPSPIT1B,RPSPIT2A,RPSPIT2B,RPSPIT3A,RPSPIT3B +---> RPSPIT3FACE1,RPSPIT3FACE2 +---> RPPOOF1A,RPPOOF1B,RPPOOF2A,RPPOOF2B,RPPOOF3A,RPPOOF3B +PON> +---> GLOBALL1 +POF> +---> GLOBALL2,GLOBALL3,GLOBALL4,GLOBALL5 +---> GLOBALL6,GLOBALL7,GLOBALL8,GLOBALL9 +PON> +---> REPLODE1 +POF> +---> REPLODE2,REPLODE3,REPLODE4,REPLODE5,REPLODE6,REPLODE7 +PON> +---> SPIT2 +POF> +---> SPIT3,SPIT4,SPIT5 +---> SPIT6,SPIT7,SPIT8,SPIT9,SPIT10,SPIT11,SPIT12,SPIT13,SPIT14 +PON> +---> SPITROT1 +POF> +---> SPITROT2,SPITROT3,SPITROT4,SPITROT5,SPITROT6,SPITROT7,SPITROT8 +---> SPITROT9,SPITROT10,SPITROT11,SPITROT12,SPITROT13 +ZOF> +PON> +---> SPEAR1 +POF> +---> SPEAR2,SPEAR3 +ZON> +;PON> +---> CSFLOORICE1 +;POF> +---> CSFLOORICE2,CSFLOORICE3,CSFLOORICE4,CSFLOORICE5 +---> CSFLOORICE6,CSFLOORICE7,CSFLOORICE8,CSFLOORICE9,CSFLOORICE10 +---> CSFLOORICE11,CSFLOORICE12,CSFLOORICE13 +C:\VIDEO\SUPERMK3\IMG\SCORP8.IMG +---> SCRUN1A,SCRUN1B,SCRUN2A,SCRUN2B,SCRUN3A,SCRUN3B,SCRUN4A,SCRUN4B +---> SCRUN5A,SCRUN5B,SCRUN6A,SCRUN7A,SCRUN7B,SCRUN8A,SCRUN8B,SCRUN9A +---> SCRUN9B,SCRUN10A,SCRUN10B,SCRUN11A,SCRUN11B,SCRUN12A +---> RPVICTORY1A +---> RPVICTORY1B,RPVICTORY2A,RPVICTORY2B,RPVICTORY2C,RPVICTORY3A +---> RPVICTORY3B,RPVICTORY4A,RPVICTORY4B,RPVICTORY5A,RPVICTORY5B +---> SZVICTORY1A,SZVICTORY1B,SZVICTORY2A,SZVICTORY2B,SZVICTORY3A +---> SCVICTORY2A,SCVICTORY2B,SCVICTORY3A +---> SCVICTORY4A,SCVICTORY5A,SCVICTORY6A,SCVICTORY7A,SCVICTORY7B +C:\VIDEO\SUPERMK3\IMG\SCORP9.IMG +---> SCSCARED2A +---> SCMASKOFF2A,SCMASKOFF3A,SCMASKOFF4A +---> SCMASKOFF5A,SCMASKOFF6A,SCMASKOFF7A,SCMASKOFF7B +---> SCSUMMON5A,SCSUMMON5B,SCSUMMON6A,SCSUMMON6B,SCSUMMON7A +---> SCSUMMON7B,SCSUMMON8A,SCSUMMON8B,SCSUMMON9A,SCSUMMON9B +PON> +---> SCORPFIRE1,REPHEAD1,SKULLHEAD1,REPHEADVOMIT1 +POF> +---> SCORPFIRE2,SCORPFIRE3,SCORPFIRE4,SCORPFIRE5,SCORPFIRE6,SCORPFIRE7 +---> SCORPFIRE8,SCORPFIRE9,SCORPFIRE10,SCORPFIRE11,SCORPFIRE12,SCORPFIRE13 +---> REPHEAD2,REPHEAD3,REPHEAD4,REPHEAD5 +---> REPHEADVOMIT2,REPHEADVOMIT3 +---> SKULLHEAD2,SKULLHEAD3,SKULLHEAD4,SKULLHEAD5 +---> SKULLSPTFIRE1,SKULLSPTFIRE2,SKULLSPTFIRE3 +;******************************************************************** +; +; Broken Back animations (via Jax) +; +;******************************************************************** +ASM> MKJAX3.TBL +C:\VIDEO\supermk3\IMG\KANO10.IMG +---> KNBROKEN3A,KNBROKEN3B +C:\VIDEO\supermk3\IMG\BLADE10.IMG +---> SBBROKEN3B,SBBROKEN3C +C:\VIDEO\supermk3\IMG\JAX10.IMG +---> JXBREAKER1ARM,JXBREAKER2ARM,JXBREAKER3ARM,JXBREAKER4ARM +---> JXBREAKER2A,JXBREAKER2B,JXBREAKER4A +---> JXBROKEN3A,JXBROKEN3B,JXBROKEN3C +C:\VIDEO\supermk3\IMG\INDIAN10.IMG +---> INBROKEN3A,INBROKEN3B +C:\VIDEO\supermk3\IMG\SUBZ9.IMG +---> SZBROKEN3B,SZBROKEN3C +C:\VIDEO\supermk3\IMG\SWAT9.IMG +---> OBBACKBROKEN3B +C:\VIDEO\supermk3\IMG\LIA10.IMG +---> LIBACKBROKEN3A,LIBACKBROKEN3B +C:\VIDEO\supermk3\IMG\ROBO12.IMG +---> RBBACKBREAK3A,RBBACKBREAK3B +C:\VIDEO\supermk3\IMG\LAO10.IMG +---> KLBACKBROKEN3B,KLBACKBROKEN3C +C:\VIDEO\supermk3\IMG\TUSK10.IMG +---> TRBACKBREAK3B +C:\VIDEO\supermk3\IMG\FEMGORO9.IMG +---> SGBACKBREAK3B,SGBACKBREAK3C +C:\VIDEO\supermk3\IMG\SHANG10.IMG +---> TSBACKBROKEN3B +C:\VIDEO\supermk3\IMG\NUKANG9.IMG +---> LUBACKBREAK3B,LUBACKBREAK3C +C:\VIDEO\SUPERMK3\IMG\SCORP9.IMG +---> SCBACKBREAK3A,SCBACKBREAK3B +C:\VIDEO\SUPERMK3\IMG\KITANA10.IMG +---> KTBACKBREAK3A,KTBACKBREAK3B +---> KTSCARRED2A +;************************************************************************ +PPP> 0 +ASM> MKSEL4.TBL +C:\VIDEO\SUPERMK3\IMG\MKMUGS2.IMG +PON> +---> HDERMAC,HDREPTILE,HDCLASSUB,HDJADE,HDMILEENA,HDKITANA,HDSCORPION +POF> +C:\VIDEO\SUPERMK3\IMG\MKBGANI3.IMG +PON> +---> HELLHIT1 +POF> +---> HELLHIT2,HELLHIT3,HELLHIT4,HELLHIT5,HELLHIT6,HELLHIT7,HELLHIT8 +PPP> 0 +ASM> FORNOW.TBL +C:\VIDEO\SUPERMK3\IMG\MKSUCK.IMG +---> SUKJAX1A,SUKJAX1B,SUKJAX1C,SUKJAX3A,SUKJAX3B +---> SUKJAX4A,SUKJAX5A,SUKJAX6A,SUKLIA1A,SUKLIA1B +---> SUKLIA3A,SUKLIA3B,SUKLIA4A,SUKLIA5A,SUKKUL1A,SUKKUL1B +---> SUKKUL3A,SUKKUL3B,SUKKUL4A,SUKKUL5A,SUKKUL6A,SUKLIU1A +---> SUKLIU1B,SUKLIU3A,SUKLIU3B,SUKLIU4A,SUKLIU5A +---> SUKLIU6A,SUKSUB1A,SUKSUB1B,SUKSUB3A,SUKSUB3B +---> SUKSUB4A,SUKSUB5A,SUKSUB6A,SUKKAB1A,SUKKAB1B +---> SUKKAB3A,SUKKAB3B,SUKKAB4A,SUKKAB5A,SUKKAB6A,SUKKAN1A,SUKKAN1B +---> SUKKAN1C,SUKKAN2C,SUKKAN3A,SUKKAN3B,SUKKAN4A +---> SUKKAN4B,SUKKAN5A,SUKKAN6A,SUKSON1A,SUKSON1B,SUKSON1C +---> SUKSON2B,SUKSON3A,SUKSON3B,SUKSON3C,SUKSON4A,SUKSON4B,SUKSON5A +---> SUKSON6A,SUKSTR1A,SUKSTR1B,SUKSTR3A,SUKSTR3B +---> SUKSTR4A,SUKSTR5A,SUKSTR6A,SUKSHE1A,SUKSHE1B +---> SUKSHE3A,SUKSHE3B,SUKSHE4A,SUKSHE5A,SUKSHE6A,SUKSCO1A,SUKSCO1B +---> SUKSCO3A,SUKSCO3B,SUKSCO4A,SUKSCO4B,SUKSCO5A +---> SUKSCO6A,SUKROB1A,SUKROB1B,SUKROB1C +---> SUKROB3A,SUKROB3B,SUKROB4A,SUKROB5A,SUKROB6A,SUKKIT1A,SUKKIT1B +---> SUKKIT3A,SUKKIT3B,SUKKIT4A,SUKKIT5A,SUKKIT6A +---> SUKSHA1A,SUKSHA1B,SUKSHA3A,SUKSHA3B,SUKSHA4A +---> SUKSHA4B,SUKSHA5A,SUKSHA6A,SUKIND1A,SUKIND1B +---> SUKIND3A,SUKIND3B,SUKIND4A,SUKIND4B,SUKIND5A,SUKIND6A +C:\VIDEO\SUPERMK3\IMG\MKGROW.IMG +---> GROJAX2A,GROJAX2B,GROJAX4A +---> GROJAX4B,GROJAX5A,GROJAX5B,GROSONYA2A,GROSONYA2B +---> GROSONYA4A,GROSONYA4B,GROSONYA5A,GROSONYA5B +---> GROKANO2A,GROKANO2B,GROKANO2C +---> GROKANO4A,GROKANO4B,GROKANO5A,GROKANO5B +---> GROSUB2A,GROSUB2B,GROSUB2C,GROSUB4A +---> GROSUB4B,GROSUB4C,GROSUB5A,GROSUB5B +---> GROKABAL2A,GROKABAL2B,GROKABAL4A,GROKABAL4B +---> GROKABAL5A,GROKABAL5B,GROSINDEL2A,GROSINDEL2B +---> GROSINDEL4A,GROSINDEL4B,GROSINDEL5A +---> GROSINDEL5B,GROINDIAN2A,GROINDIAN2B +---> GROINDIAN4A,GROINDIAN4B,GROINDIAN5A +---> GROINDIAN5B,GROSTRYKR2A,GROSTRYKR2B +---> GROSTRYKR4A,GROSTRYKR4B,GROSTRYKR5A +---> GROSTRYKR5B,GROKUNG2A,GROKUNG2B +---> GROKUNG4A,GROKUNG4B,GROKUNG5A,GROKUNG5B +---> GROKITANA2A,GROKITANA2B +---> GROKITANA4A,GROKITANA4B,GROKITANA5A,GROKITANA5B +---> GROLIU2A,GROLIU2B,GROLIU4A,GROLIU4B +---> GROLIU5A,GROLIU5B,GROSHEEVA2A,GROSHEEVA2B +---> GROSHEEVA4A,GROSHEEVA4B,GROSHEEVA5A +---> GROSHEEVA5B,GROROBO2A,GROROBO2B,GROROBO2C +---> GROROBO3A,GROROBO3B,GROROBO3C,GROROBO4A,GROROBO4B,GROROBO4C,GROROBO5A +---> GROROBO5B,GROSHANG2A,GROSHANG2B +---> GROSHANG4A,GROSHANG4B,GROSHANG5A,GROSHANG5B +---> GROSCORP2A,GROSCORP2B,GROSCORP4A +---> GROSCORP4B,GROSCORP5A,GROSCORP5B +;************************************************************************** +ASM> MKFREND4.TBL +PPP> 0 +C:\VIDEO\supermk3\IMG\RAID7.IMG +PON> +---> RNBEAMUP3A +POF> +---> RNBEAMUP3B,RNBEAMUP4A,RNBEAMUP4B,RNBEAMUP5A,RNBEAMUP5B,RNBEAMUP6A +---> RNBEAMUP6B,RNBEAMUP7A,RNBEAMUP7B +;************************************************************************** +ASM> MKSEL3.TBL +C:\VIDEO\supermk3\IMG\MKSEL.IMG +ZOF> +CON> +PON> +---> ENDUR_GOLD,ENDUR_MAG,ENDUR_BLUE,ENDUR_GREEN,ENDUR_RED +POF> +ZON> +;************************************************************************ +COF> +PPP> 0 +ASM> MK8MIL.TBL +C:\video\supermk3\img\boonpics.img +---> ENDMARKER + + \ No newline at end of file diff --git a/NEWLOAD2/MK9MIL.LOD b/NEWLOAD2/MK9MIL.LOD new file mode 100644 index 0000000..37a7995 --- /dev/null +++ b/NEWLOAD2/MK9MIL.LOD @@ -0,0 +1,68 @@ +***> 5000000,1 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +ZON> +CON> +POF> +;******************************************************************** +; +; More floor images +; +;******************************************************************** +PPP> 6 +ZOF> +ASM> MKFLOOR2.TBL +FRM> FL_CAVE +FRM> FL_HELL +FRM> FL_DESER +ZON> +;******************************************************************** +; +; Backgrounds +; +;******************************************************************** +;PPP> 6 +PPP> 0 +GLO> BGNDTBL.GLO +BBB> c:\video\supermk3\img\nubuyin +BBB> c:\video\supermk3\img\steelvs +BBB> c:\video\supermk3\img\mknuport +;BBB> c:\video\supermk3\img\fireport +;BBB> c:\video\supermk3\img\mkcoinpg +;BBB> c:\video\supermk3\img\mklost +;BBB> c:\video\supermk3\img\nupalsel +;******************************************************************** +BBB> c:\video\supermk3\img\mkcave +BBB> c:\video\supermk3\img\mkhades +BBB> c:\video\supermk3\img\mkwater +BBB> c:\video\supermk3\img\mkdesert +BBB> c:\video\supermk3\img\mkcity +BBB> c:\video\supermk3\img\mksubraw +BBB> c:\video\supermk3\img\mk3soul +BBB> c:\video\supermk3\img\mkstreet +BBB> c:\video\supermk3\img\mkbridge +BBB> c:\video\supermk3\img\mkbell +BBB> c:\video\supermk3\img\mkbell2 +BBB> c:\video\supermk3\img\mktemp2 +BBB> c:\video\supermk3\img\mkgrave +BBB> c:\video\supermk3\img\mkthrone +BBB> c:\video\supermk3\img\mkbalc2 +;******************************************************************** +;BBB> c:\video\supermk3\img\mkbank +;BBB> c:\video\supermk3\img\mkshao1 +;BBB> c:\video\supermk3\img\mkshao2 +;BBB> c:\video\supermk3\img\mkladder +;BBB> c:\video\supermk3\img\mk3coin +;BBB> c:\video\supermk3\img\mk3end +;BBB> c:\video\supermk3\img\mkselect +;BBB> c:\video\supermk3\img\mkhidden +;BBB> c:\video\supermk3\img\mktext +;BBB> c:\video\supermk3\img\mk3bio +;BBB> c:\video\supermk3\img\widebox +;************************************************************************ +COF> +PPP> 0 +ASM> MK9MIL.TBL +C:\video\supermk3\img\boonpics.img +---> ENDMARKER + + \ No newline at end of file diff --git a/NEWLOAD2/MKCMIL.LOD b/NEWLOAD2/MKCMIL.LOD new file mode 100644 index 0000000..5394955 --- /dev/null +++ b/NEWLOAD2/MKCMIL.LOD @@ -0,0 +1,597 @@ +***> 4000000,2 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +ZON> +CON> +POF> +;*************************************************************************** +; +; Zipped character endings +; +;*************************************************************************** +ASM> MK3END.TBL +;FRM> E_SON +;FRM> E_LIA +;FRM> E_JAX +;FRM> E_COP +;FRM> E_LIU +;FRM> E_LAO +;FRM> E_SHA +;FRM> E_SHE +;FRM> E_IND +;FRM> E_SEK +;FRM> E_KAB +;FRM> E_KAN +;FRM> E_SUB +;FRM> E_CYR +;FRM> LAO_B +;************************************************************************ +PPP> 6 +ASM> MKFX2.TBL +C:\VIDEO\supermk3\IMG\MKGUTS.IMG +---> BONE07,BONE08,BONE09,BONE10,BONE11,BONE12 +---> CAGE02,CAGE03,CAGE04,CAGE05,CAGE06,CAGE07,CAGE08,CAGE09,CAGE10,CAGE11 +---> CAGE12,CAGE13,CAGE14,CAGE15,CAGE16,CAGE17,CAGE18,CAGE19,CAGE20,CAGE21 +---> CAGE22,CAGE23,CAGE24 +---> SKULL02,SKULL03,SKULL04,SKULL05,SKULL06 +---> SKULL07,SKULL08,SKULL09,SKULL10,SKULL11,SKULL12 +---> GOROARM02,GOROARM03,GOROARM04,GOROARM05,GOROARM06 +---> GOROARM07,GOROARM08,GOROARM09,GOROARM10,GOROARM11,GOROARM12 +PON> +---> BLDXPD1A +POF> +---> BLDXPD1B,BLDXPD2A,BLDXPD2B,BLDXPD3A,BLDXPD3B,BLDXPD4A +---> BLDXPD4B,BLDXPD5A,BLDXPD5B,BLDXPD6A,BLDXPD6B,BLDXPD7A,BLDXPD7B +---> BLDXPD8A,BLDXPD8B,BLDXPD9A,BLDXPD9B,BLDXPD10A,BLDXPD10B,BLDXPD11A +---> BLDXPD11B,BLDXPD12A,BLDXPD12B,BLDXPD13A,BLDXPD13B +COF> +ASM> MKBGANI2.TBL +c:\video\supermk3\img\mkbgani3.img +---> WATERA01,WATERA02,WATERA03,WATERA04,WATERA05,WATERA06,WATERA07 +---> WATERA08,WATERB01,WATERB02,WATERB03,WATERB04,WATERB05,WATERB06 +---> WATERB07,WATERB08,WATERC01,WATERC02,WATERC03,WATERC04,WATERC05 +---> WATERC06,WATERC07,WATERC08,WATERD01,WATERD02,WATERD03,WATERD04 +---> WATERD05,WATERD06,WATERD07,WATERD08 +PON> +---> HELLFLAME01 +POF> +---> HELLFLAME02,HELLFLAME03,HELLFLAME04,HELLFLAME05,HELLFLAME06 +PON> +---> CYRXSAND1 +POF> +---> CYRXSAND2,CYRXSAND3,CYRXSAND4 +PON> +---> CAVESKY1 +POF> +---> CAVESKY2,CAVESKY3,CAVESKY4,CAVESKY5,CAVESKY6,CAVESKY7,CAVESKY8 +---> CAVESKY9,CAVESKY10,CAVESKY11 +ASM> MKJAXFIX.TBL +C:\VIDEO\supermk3\IMG\JAX4.IMG +---> JXNEWROUND1A,JXNEWROUND1B +ASM> MKSTFIX.TBL +C:\VIDEO\supermk3\IMG\SHANG3.IMG +---> TSHIBLOCK1AF +;************************************************************************** +; +; Babies +; +;************************************************************************** +PPP> 0 +ASM> MKBABY.TBL +C:\VIDEO\supermk3\IMG\MKBABLTY.IMG +PON> +---> BABKANO,BABWITCH,BABTUSKEN,BABSONYA,BABLAO,BABJAX,BABKANG,BABZERO +---> BABKETCH,BABTSUNG,BABGORO,BABSWAT,BABINDIAN,BABMUST,BABSMOKE +C:\VIDEO\SUPERMK3\IMG\MKBABES2.IMG +---> BABYSCORP,BABYKIT +POF> +;********************************************************************** +; +; More Fatalities +; +;********************************************************************** +PPP> 0 +; +; Subzero +; +ASM> MKSZ3.TBL +C:\VIDEO\supermk3\IMG\SUBZ11.IMG +---> FREEZEBODY1A,FREEZEBODY2B,FREEZEBODY3C,FREEZEBODY4D +ASM> MKSWAT2.TBL +C:\VIDEO\supermk3\IMG\SWAT11.IMG +PON> +---> TAZBLAST +POF> +; +; tusk +; +ASM> MKTUSK2.TBL +C:\VIDEO\supermk3\IMG\TUSK10.IMG +---> TRSCARED3A +PON> +---> UGLYHEAD1 +POF> +---> UGLYHEAD2,UGLYHEAD3,UGLYHEAD4,UGLYHEAD5,UGLYHEAD6,UGLYHEAD7 +---> UGLYHEAD8,UGLYHEAD9,UGLYHEAD10,UGLYHEAD11,UGLYHEAD12,UGLYHEAD13 +---> UGLYHEAD14,UGLYHEAD15,UGLYHEAD16,UGLYHEAD17,UGLYHEAD18,UGLYHEAD19 +---> UGLYHEAD20,UGLYHEAD21,UGLYHEAD22 +---> UGLYTONGUE1,UGLYTONGUE2,UGLYTONGUE3,UGLYTONGUE4,UGLYTONGUE5 +---> TRUGLYLEG1A,TRUGLYLEG1B +---> TRUGLY1A,TRUGLY2A +---> TRUGLY3A,TRUGLY4A,TRUGLY5A,TRUGLY5B,TRUGLY6A,TRUGLY6B,TRUGLY7A +---> TRUGLY7B,TRUGLY8A,TRUGLY8B,TRUGLY9A,TRUGLY9B,TRUGLY10A,TRUGLY10B +C:\VIDEO\supermk3\IMG\BIGHEAD.IMG +PON> +---> BHROBO1,BHJAX1,BHIND1,BHKANO1,BHLIU1,BHSZERO1,BHTUSK1,BHLIA1,BHSWAT1 +---> BHTSANG1,BHLAO1,BHBLADE1,BHSHGOR1 +POF> +---> BHROBO2,BHROBO3,BHROBO4,BHROBO5 +---> BHJAX2,BHJAX3,BHJAX4,BHJAX5 +---> BHIND2,BHIND3,BHIND4,BHIND5 +---> BHKANO2,BHKANO3,BHKANO4,BHKANO5 +---> BHLIU2,BHLIU3,BHLIU4,BHLIU5 +---> BHSZERO2,BHSZERO3,BHSZERO4,BHSZERO5 +---> BHTUSK2,BHTUSK3,BHTUSK4,BHTUSK5 +---> BHLIA2,BHLIA3,BHLIA4,BHLIA5 +---> BHSWAT2,BHSWAT3,BHSWAT4,BHSWAT5 +---> BHTSANG2,BHTSANG3,BHTSANG4,BHTSANG5 +---> BHLAO2,BHLAO3,BHLAO4,BHLAO5 +---> BHBLADE2,BHBLADE3,BHBLADE4,BHBLADE5 +---> BHSHGOR2,BHSHGOR3,BHSHGOR4,BHSHGOR5 +;---> INFLOATA,INFLOATB +;---> JXFLOATA,JXFLOATB,KNFLOATA,KNFLOATB,LIFLOATA,LIFLOATB,LUFLOATA +;---> LUFLOATB,OBFLOATA,OBFLOATB,SBFLOATA,SBFLOATB,SHFLOATA,SHFLOATB +;---> SZFLOATA,SZFLOATB,TRFLOATA,TRFLOATB,TSFLOATA,TSFLOATB,RBFLOATA +;---> RBFLOATB,KLFLOATA,KLFLOATB +C:\VIDEO\SUPERMK3\IMG\BIGHEAD2.IMG +PON> +---> BHKIT1,BHSCO1 +POF> +---> BHKIT2,BHKIT3,BHKIT4,BHKIT5 +---> BHSCO2,BHSCO3,BHSCO4,BHSCO5 +;---> KITFLOATA,KITFLOATB,SCORPFLOATA,SCORPFLOATB +C:\VIDEO\supermk3\IMG\TUSK12.IMG +---> TRTUBE1A,TRTUBE1B,TRTUBE2A,TRTUBE2B,TRTUBE3A,TRTUBE3B,TRTUBE4A +---> TRTUBE5A,TRTUBE6A,TRTUBE7A,TRTUBE8A,TRTUBE9A,TRTUBE10A,TRTUBE11A +---> TRTUBE12A,TRTUBE13A,TRTUBE14A,TRTUBE15A,TRTUBE15B +; +; Shang Tsung +; +ASM> MKST3.TBL +C:\VIDEO\supermk3\IMG\SHANG11.IMG +PON> +---> SKELSUK3A +POF> +---> SKELSUK3B,SKELSUK3C,SKELSUK4A,SKELSUK4B,SKELSUK4C,SKELSUK4D,SKELSUK5A +---> SKELSUK5B,SKELSUK6A,SKELSUK6B,SKELSUK7A,SKELSUK7B,SKELSUK8A,SKELSUK8B +---> SKELSUK9A,SKELSUK9B,SKELSUK10A,SKELSUK10B +---> SKELSUK12A,SKELSUK13A,SKELSUK14A,SKELSUK15A,SKELSUK16A,SKELSUK17A +---> SKELSUK18A,SKELSUK19A +PON> +---> SKELFALL1A +POF> +---> SKELFALL1B,SKELFALL2A,SKELFALL2B,SKELFALL3A,SKELFALL3B,SKELFALL4A +---> SKELFALL4B,SKELFALL5A,SKELFALL6A,SKELFALL7A,SKELFALL8A,SKELFALL9A +---> SKELFALL10A +C:\VIDEO\supermk3\IMG\SHANG10.IMG +---> TSSCARED3A +---> TSSLAMSPIKE5A,TSSLAMSPIKE5B +---> TSSLAMSPIKE6A,TSSLAMSPIKE6B,TSSLAMSPIKE7A,TSSLAMSPIKE7B,TSSLAMSPIKE8A +---> TSSLAMSPIKE8B,TSSLAMSPIKE9A,TSSLAMSPIKE9B,TSSLAMSPIKE10A +---> TSSLAMSPIKE10B,TSSLAMSPIKE12A,TSSLAMSPIKE12B +C:\VIDEO\supermk3\IMG\MK3SPIKE.IMG +PON> +---> EJBSPIKE,SPIKE9 +POF> +; +; Liu Kang +; +ASM> MKLK2.TBL +C:\VIDEO\supermk3\IMG\NUKANG9.IMG +---> LUSCARED2A +C:\VIDEO\supermk3\IMG\NUKANG10.IMG +---> LKREFORM1A,LKREFORM2A,LKREFORM3A,LKREFORM4A,LKREFORM5A,LKREFORM6A +PON> +---> LKFIRE1A +POF> +---> LKFIRE1B,LKFIRE1C,LKFIRE1D,LKFIRE2A,LKFIRE2B,LKFIRE2C +---> LKFIRE3A,LKFIRE3B,LKFIRE3C,LKFIRE4A,LKFIRE4B,LKFIRE5A,LKFIRE5B +---> LKFIRE5C,LKFIRE6A,LKFIRE6B,LKFIRE6C,LKFIRE7A,LKFIRE8A,LKFIRE9A +---> LKFIRE10A,LKFIRE11A +; +; Lia +; +ASM> MKLIA4.TBL +C:\VIDEO\supermk3\IMG\LIA11.IMG +---> LIABODY1A,LIABODY1B +---> LIBODYPULL1A +---> LIBODYPULL1B,LIBODYPULL1C,LILGHAIR1A,LILGHAIR2A,LILGHAIR2B,LILGHAIR3A +---> LILGHAIR4A,LILGHAIR5A,LILGHAIR6A,LILGHAIR7A,LILGHAIR8A,LILGHAIR9A +---> LILGHAIR10A,LILGHAIR11A,LILGHAIR12A,LILGHAIR13A,LILGHAIR14A +---> LILGHAIR14B,LILGHAIR14C,LILGHAIR15A,LILGHAIR15B,LILGHAIR15C +---> LILGHAIR16A,LILGHAIR16B,LILGHAIR17A,LILGHAIR17B,LILGHAIR17C +---> LILGHAIR18A,LILGHAIR18B,LILGHAIR19A,LILGHAIR20A,LILGHAIR20B +---> LILGHAIR20C +; +; Sheeva +; +ASM> MKSG3.TBL +C:\VIDEO\supermk3\IMG\FEMGOR10.IMG +ZOF> +---> INNAIL1,JXNAIL1,KLNAIL1,KNNAIL1,LINAIL1,LUNAIL1,OBNAIL1,RBNAIL1 +---> SBNAIL1,SGNAIL1,SZNAIL1,TRNAIL1,TSNAIL1 +ZON> +C:\VIDEO\SUPERMK3\IMG\KITANA11.IMG +---> KTFANDECAP1A,KTFANDECAP1B +---> KTFANDECAP3A,KTFANDECAP3B,KTFANDECAP3C,KTFANDECAP4A,KTFANDECAP4B +---> KTFANDECAP5A,KTFANDECAP5B,KTFANDECAP6A,KTFANDECAP6B,KTFANDECAP7A +---> KTFANDECAP7B +---> JDIMPALE1A,JDIMPALE1B +---> JDIMPALE3A,JDIMPALE3B,JDIMPALE5A,JDIMPALE5B +---> JDIMPALE5C,JDIMPALE6A,JDIMPALE6B,JDIMPALE6C +---> JDSTAFFSHAKE1A,JDSTAFFSHAKE1B,JDSTAFFSHAKE2A,JDSTAFFSHAKE2B,JDSTAFFSHAKE3A +---> JDSTAFFSHAKE3B,JDSTAFFSHAKE4A,JDSTAFFSHAKE4B,JDSTAFFSHAKE5A +---> JDSTAFFSHAKE5B,JDSTAFFSHAKE5C,JDSTAFFSHAKE6A,JDSTAFFSHAKE6B +---> JDSTAFFSHAKE7A,JDSTAFFSHAKE7B,JDSTAFFSHAKE7C +---> RODIMPALE1,RODIMPALE2,RODIMPALE3,RODIMPALE4 +---> RODIMPALE5,RODIMPALE6,RODIMPALE7 +---> JDKISS1,JDKISS2,JDKISS3,JDKISS4,JDKISS5,JDKISS6,JDKISS7,JDKISS8 +---> KTKISS1A,KTKISS1B,KTKISSLEG1A,KTKISSLEG1B,KTKISS2A,KTKISS3A,KTKISS4A +---> KTKISS5A,KTKISS5B,KTKISS6A,KTKISS6B,KTKISS7A,KTKISS7B,KTKISS8A +---> KTKISS8B,KTKISS9A,KTKISS10A,KTKISS10B +PON> +---> SHAKBOD1A +POF> +---> SHAKBOD1B,SHAKBOD2A,SHAKBOD2B,SHAKBOD3A,SHAKBOD3B,SHAKBOD4A +---> SHAKBOD4B,SHAKBOD5A,SHAKBOD5B,SHAKBOD6A +PON> +---> SHAKROD1A +POF> +---> SHAKROD2A,SHAKROD3A,SHAKROD4A,SHAKROD5A,SHAKROD6A +C:\VIDEO\SUPERMK3\IMG\KITANA12.IMG +---> BLOBUBBLE1,BLOBUBBLE2,BLOBUBBLE3,BLOBUBBLE4,BLOBUBBLE5,BLOBUBBLE6 +---> BLOBUBBLE7,BLOBUBBLE8,BLOBUBBLE9,BLOBUBBLE10,BLOBUBBLE11,BLOBUBBLE12 +---> BLOBUBBLE13,BLOBUBBLE14,BLOBUBBLE15,BLOBUBBLE16,MLMIRROR1A,MLMIRROR1B +---> MLMIRROR2A,MLMIRROR2B,MLMIRROR3A,MLMIRROR3B,MLMIRROR4A,MLMIRROR4B +---> MLMIRROR5A,MLMIRROR5B,MLMIRROR5C,MLMIRROR6A,MLMIRROR6B,MLMIRROR6C +---> MLMIRROR7A,MLMIRROR7B,MLMIRROR7C,MIRRORBREAK1A,MIRRORBREAK2A +---> MIRRORBREAK3A,MIRRORBREAK4A,MIRRORBREAK5A,MIRRORBREAK6A,MIRRORBREAK6B +---> MIRRORBREAK7A,MIRRORBREAK7B,MIRRORBREAK8A,MIRRORBREAK8B,MIRRORBREAK8C +---> MIRRORBREAK9A,MIRRORBREAK9B,MIRRORBREAK10A,MIRRORBREAK10B +---> MIRRORBREAK11A,MIRRORBREAK12A,MIRRORBREAK13A +---> JDPOGO1A,JDPOGO1B,JDPOGO1C,JDPOGO2A,JDPOGO2B,JDPOGO3A,JDPOGO4A +C:\VIDEO\SUPERMK3\IMG\KITANA13.IMG +---> NAIL1 +---> NAIL2 +---> MLSWALLOW1A,MLSWALLOW1B,MLSWALLOW2A,MLSWALLOW2B +---> MLSWALLOW3A,MLSWALLOW3B,MLSWALLOW4A,MLSWALLOW4B,MLSWALLOW4C +---> MLSWALLOW5A,MLSWALLOW5B,MLSWALLOW6A,MLSWALLOW6B,MLSWALLOW7A +---> MLSWALLOW7B,MLSWALLOW8A,MLSWALLOW8B,MLSWALLOWLEG1A,MLSWALLOWLEG1B +---> MLSWALLOW9A,MLSWALLOW10A,MLSWALLOW11A,MLSWALLOW12A,MLSWALLOW13A +---> MLSWALLOW14A,MLSWALLOW15A,MLSWALLOW16A,MLSWALLOW17A,MLNAILSPIT1A +---> MLNAILSPIT1B,MLNAILSPIT2A,MLNAILSPIT2B,MLNAILSPIT3A,MLNAILSPIT3B +---> MLNAILSPIT4A,MLNAILSPIT4B,MLNAILSPIT5A,MLNAILSPIT5B,MLNAILSPIT6A +---> MLNAILSPIT6B,MLNAILSPIT7A,MLNAILSPIT7B,MLNAILSPIT8A,MLNAILSPIT8B +---> MLNAILSPITLEG1A,MLNAILSPITLEG1B,MLNAILSPIT9A,MLNAILSPIT10A +---> MLSUCKSPIT1A,MLSUCKSPIT1B,MLSUCKSPIT2A,MLSUCKSPIT2B,MLSUCKSPIT3A +---> MLSUCKSPIT3B,MLSUCKSPIT4A,MLSUCKSPIT4B,MLSUCKSPIT5A,MLSUCKSPIT5B +---> MLSUCKSPIT6A,MLSUCKSPIT6B +C:\VIDEO\SUPERMK3\IMG\SCORP10.IMG +---> RPHITUNG1,RPHITUNG2,RPHITUNG3,RPHITUNG4,RPHITUNG5,RPHITUNG6,RPHITUNG7 +---> RPHITUNG8,RPHITUNG9,RPHITUNG10,RPHITUNG11,RPCHOMP1,RPCHOMP2,RPCHOMP3 +---> RPCHOMP4,RPCHOMP5,RPCHOMP6,RPCHOMP7,RPCHOMP8,RPCHOMP9,RPCHOMP10 +---> RPCHOMP11,RPCHOMP12,RPCHOMP13,RPCHOMP14,RPMEDTUNG1,RPMEDTUNG2 +---> RPMEDTUNG3,RPMEDTUNG4,RPMEDTUNG5,RPMEDTUNG6,RPMEDTUNG7,RPMEDTUNG8 +---> RPMEDTUNG9,RPMEDTUNG10,RPMEDTUNG11,RPLOTUNG1,RPLOTUNG2,RPLOTUNG3 +---> RPLOTUNG4,RPLOTUNG5,RPLOTUNG6,RPLOTUNG7,RPLOTUNG8,RPLOTUNG9,RPLOTUNG10 +---> RPLOTUNG11 +PON> +---> ACIDVOMIT1A +POF> +---> ACIDVOMIT2A,ACIDVOMIT3A,ACIDVOMIT4A,ACIDVOMIT5A +---> ACIDVOMIT6A,ACIDVOMIT7A,ACIDVOMIT7B,ACIDVOMIT8A,ACIDVOMIT8B +---> ACIDVOMIT9A,ACIDVOMIT9B,ACIDVOMIT10A,ACIDVOMIT10B,ACIDVOMIT11A +---> ACIDVOMIT11B,ACIDVOMIT12A,ACIDVOMIT13A,ACIDVOMIT14A,ACIDVOMIT15A +---> ACIDVOMIT16A,ACIDVOMIT17A,ACIDVOMIT18A,ACIDVOMIT19A,ACIDVOMIT20A +---> ACIDVOMIT20B,ACIDVOMIT21A,ACIDVOMIT21B,ACIDVOMIT22A,ACIDVOMIT22B +---> ACIDVOMIT23A,ACIDVOMIT23B,ACIDVOMIT24A,ACIDVOMIT25A +;********************************************************************** +; +; Friendships +; +;********************************************************************** +ASM> MKFRIEND.TBL +C:\VIDEO\supermk3\IMG\KANO10.IMG +---> KNFRIEND1A,KNFRIEND1B,KNFRIENDLEG1A,KNFRIENDLEG1B,KNFRIEND2A +---> KNFRIEND3A,KNFRIEND4A,KNFRIEND5A,KNFRIEND6A,KNFRIEND7A,KNFRIEND8A +---> KNFRIEND10A,KNFRIEND10B,KNFRIEND11A,KNFRIEND11B,KNFRIEND12A +---> KNFRIEND12B,KNFRIEND13A,KNFRIEND13B,KNFRIEND14A,KNFRIEND14B +---> KNFRIEND15A,KNFRIEND16A,KNFRIEND16B,KNFRIEND17A,KNFRIEND17B +---> KNFRIEND18A,KNFRIEND19A,KNFRIEND9A,KNFRIEND9B +PON> +---> BUBGUM1A +POF> +---> BUBGUM2A,BUBGUM3A,BUBGUM4A,BUBGUM5A,BUBGUM6A,BUBGUM7A +C:\VIDEO\supermk3\IMG\BLADE11.IMG +---> SBFRIENDLEG1A,SBFRIENDLEG1B,SBFRIENDSHIP3A +---> SBFRIENDSHIP3B,SBFRIENDSHIP4A,SBFRIENDSHIP4B,SBFRIENDSHIP5A +---> SBFRIENDSHIP5B,SBFRIENDSHIP6A,SBFRIENDSHIP6B,SBFRIENDSHIP7A +---> SBFRIENDSHIP8A,SBFRIENDSHIP9A,SBFRIENDSHIP10A,SBFRIENDSHIP11A +C:\VIDEO\supermk3\IMG\SUBZ12.IMG +---> SZSNOW1A,SZSNOW1B,SZSNOW2A,SZSNOW2B,SZSNOW3A,SZSNOW3B +PON> +---> SZSNOW3C +POF> +---> SZSNOW4A,SZSNOW4B,SZSNOW4C,SZSNOW5A,SZSNOW5B,SZSNOW6A,SZSNOW6B +---> SZSNOW7A,SZSNOW7B,SZSNOW8A,SZSNOW8B,SZSNOW9A,SZSNOW9B,SZSNOW10 +---> SZSNOW11,SZSNOW12 +C:\VIDEO\supermk3\IMG\SWAT9.IMG +PON> +---> STOP1 +POF> +---> STOP2,STOP3,STOP4,STOP5,STOP6,STOP7 +---> OBFRIENDSHIP2A,OBFRIENDSHIP2B,OBFRIENDSHIP3A +---> OBFRIENDSHIP3B,OBFRIENDSHIP5A +---> OBFRIENDSHIP5B,OBFRIENDSHIP6A,OBFRIENDSHIP6B +---> OBFRIENDSHIP8A,OBFRIENDSHIP8B,OBFRIENDLEG1A +---> OBFRIENDLEG1B,OBFRIENDSHIP9A,OBFRIENDSHIP10A,OBFRIENDSHIP11A +---> OBFRIENDSHIP12A +C:\VIDEO\supermk3\IMG\LIA10.IMG +---> LIFRIENDSHIP1A,LIFRIENDSHIP2A,LIFRIENDSHIP3A,LIFRIENDSHIP3B +---> LIFRIENDSHIP4A,LIFRIENDSHIP4B,LIFRIENDSHIP5A,LIFRIENDSHIP6A +---> LIFRIENDSHIP6B,LIFRIENDSHIP8A,LIFRIENDSHIP8B,LIFRIENDSHIP8C +PON> +---> FTBALLGROW6 +POF> +---> FTBALLGROW7,FTBALLGROW8,FTBALLGROW9 +---> FTBALLGROW10,FTBALLGROW11,FTBALLGROW12 +---> FTBALLROT1,FTBALLROT2,FTBALLROT3,FTBALLROT4 +C:\VIDEO\supermk3\IMG\ROBO12.IMG +---> RBHAMMER2A,RBHAMMER2B,RBHAMMER3A,RBHAMMER3B +---> RBHAMMER3C,RBHAMMER4A,RBHAMMER4B,RBHAMMER5A,RBHAMMER5B,RBHAMMER5C +---> RBHAMMER6A,RBHAMMER6B,RBCHACHA1A,RBCHACHA1B,RBCHACHA2A,RBCHACHA2B +---> RBCHACHA3A,RBCHACHA3B,RBCHACHA4A,RBCHACHA4B,RBCHACHA5A,RBCHACHA5B +PON> +---> RBDINGER1A +POF> +---> RBDINGER2A,RBDINGER3A,RBDINGER4A,RBDINGER5A,RBDINGER6A +---> RBDINGER7A,RBDINGER8A,RBDINGER9A,RBDINGER10A,RBDINGER11A,RBDINGER12A +---> RBDINGER13A,RBDINGER14A,RBDINGER15A +C:\VIDEO\supermk3\IMG\TUSK10.IMG +---> TRFRIENDLEG1A,TRFRIENDLEG1B,TRFRIENDSHIP1A,TRFRIENDSHIP1B +---> TRFRIENDSHIP2A,TRFRIENDSHIP2B,TRFRIENDSHIP3A,TRFRIENDSHIP3B +---> TRFRIENDSHIP4A,TRFRIENDSHIP4B,TRFRIENDSHIP5A,TRFRIENDSHIP5B +---> TRFRIENDSHIP6A,TRFRIENDSHIP6B,TRFRIENDSHIP7A,TRFRIENDSHIP7B +---> MELLOW1A +---> MELLOW2A,MELLOW3A,MELLOW4A,MELLOW5A,MELLOW6A,MELLOW7A,MELLOW8A +---> MELLOW9A,TRFRIENDSHIP8A,MELLOWSWORD1A,MELLOWSWORD2A,MELLOWSWORD3A +---> MELLOWSWORD4A,TRFRIENDSHIP9A,TRFRIENDSHIP9B,TRFRIENDSHIP10A +PON> +---> CAMPFIRE1A +POF> +---> CAMPFIRE2A,CAMPFIRE3A,CAMPFIRE4A,CAMPFIRE5A,CAMPFIRE6A,CAMPFIRE7A +---> CAMPFIRE8A +C:\VIDEO\supermk3\IMG\NUKANG9.IMG +---> LUFRIENDSHIP1A,LUFRIENDSHIP1B,LUFRIENDSHIP2A,LUFRIENDSHIP2B +---> LUFRIENDSHIP3A,LUFRIENDSHIP4A,LUFRIENDSHIP5A,LUFRIENDSHIP6A +---> LUFRIENDSHIP7A,LUFRIENDSHIP8A +PON> +---> SHADOWDRAG1 +POF> +---> SHADOWDRAG2,SHADOWDRAG3,SHADOWDRAG4,SHADOWDRAG5,SHADOWDRAG6 +---> SHADOWDRAG7,SHADOWDRAG10 +C:\VIDEO\supermk3\IMG\FEMGORO9.IMG +---> SGFRIENDSHIP3A,SGFRIENDSHIP4A,SGFRIENDSHIP4B,SGFRIENDSHIP5A +---> SGFRIENDSHIP5B,SGFRIENDLEG1A,SGFRIENDSHIP6A,SGFRIENDSHIP7A +---> SGFRIENDSHIP8A,SGFRIENDSHIP9A,SGFRIENDSHIP9B,SGFRIENDSHIP9C +---> SGFRIENDSHIP10A,SGFRIENDSHIP10B,SGFRIENDSHIP10C,SGFRIENDSHIP11A +---> SGSPINDISH1A,SGSPINDISH1B,SGSPINDISH2A,SGSPINDISH2B,SGSPINDISH3A +---> SGSPINDISH3B,SGSPINDISH4A,SGSPINDISH4B,SGSPINDISH5A,SGSPINDISH5B +---> SGSPINDISH6A,SGSPINDISH6B +C:\VIDEO\supermk3\IMG\LAO11.IMG +---> KLFRIENDHEADA,KLFRIENDHEADB,KLFRIENDHEADC,KLFRIENDHEADD +---> KLFRIEND3A,KLFRIEND3B,KLFRIEND4A,KLFRIEND4B +---> KLFRIEND6A,KLFRIEND6B,KLFRIEND7A,KLFRIEND7B +---> KLFRIEND8A,KLFRIEND8B,KLFRIEND9A,KLFRIEND9B +---> KLFRIEND11A,KLFRIEND11B +---> KLFRIEND14A,KLFRIEND14B +PON> +---> FETCHHAT2,LAODOG1 +POF> +---> LAODOG2,LAODOG3,LAODOG4,LAODOG5,LAODOG6 +C:\VIDEO\supermk3\IMG\LAO10.IMG +---> KLHATSLICE1A,KLHATSLICE1B,KLHATSLICE2A,KLHATSLICE2B,KLHATSLICE3A +---> KLHATSLICE3B,KLHATSLICE4A,KLHATSLICE4B,KLHATSLICE6A,KLHATSLICE6B +C:\VIDEO\supermk3\IMG\ROBO13.IMG +PON> +---> BIGHORN1 +POF> +---> BIGHORN2,BIGHORN3,BIGHORN4,BIGHORN5 +ASM> MKROBO3.TBL +PON> +ZOF> +---> COMEHERE1,COMEHERE2,COMEHERE3 +ZON> +POF> +PON> +---> SMBOMB1A +---> EARTH1A,EARTH2A +;---> EARTH3A,EARTH3B,EARTH3C,EARTH3D +---> SMMECARM1 +POF> +---> SMMECARM2,SMMECARM3,SMMECARM4,SMMECARM5,SMMECARM6,SMMECARM7 +---> SMMECARM8,SMMECARM9,SMMECARM10,SMMECARM11 +C:\VIDEO\supermk3\IMG\ROBO11.IMG +PON> +---> RBPANELITE3 +POF> +---> RBPANELITE4,RBPANELITE5,RBPANELITE6 +ASM> MKFREND2.TBL +C:\VIDEO\supermk3\IMG\JAX9.IMG +---> JXJUMPROPE2A +---> JXJUMPROPE2B,JXJUMPROPE2C,JXJUMPROPE2D,JXJUMPROPE3A,JXJUMPROPE3B +---> JXJUMPROPE3C,JXJUMPROPE3D,JXJUMPROPE4A,JXJUMPROPE4B,JXJUMPROPE5A +---> JXJUMPROPE5B,JXJUMPROPE6A,JXJUMPROPE6B,JXJUMPROPE6C,JXJUMPROPE6D +---> JXJUMPROPE7A,JXJUMPROPE7B,JXJUMPROPE8A,JXJUMPROPE8B,JXJUMPROPE9A +---> JXJUMPROPE9B,JXJUMPROPE9C,JXJUMPROPE9D +C:\VIDEO\SUPERMK3\IMG\SCORP11.IMG +---> SCJACKBOX2A,SCJACKBOX2B,SCJACKBOX5A,SCJACKBOX6A,SCJACKBOX7A +---> SCJACKBOX8A,SCJACKBOX9A,SCJACKBOX10A,SCJACKBOX10B,SCSKULLBOX1A +---> SCSKULLBOX2A,SCSKULLBOX3A,SCSKULLBOX4A,SCSKULLBOX6A +---> SCSKULLBOX7A,SCSKULLBOX8A,SCSKULLBOX9A,SCSKULLBOX10A,SCSKULLBOX11A +---> SCSKULLBOX13A,SZSNOWBOX1A,SZSNOWBOX2A +---> SZSNOWBOX2B,SZSNOWBOX3A,SZSNOWBOX4A,SZSNOWBOX5A,SZSNOWBOX6A +---> SZSNOWBOX7A,SZSNOWBOX8A +PON> +---> RPSNAKEBOX1A +POF> +---> RPSNAKEBOX2A,RPSNAKEBOX3A,RPSNAKEBOX4A,RPSNAKEBOX5A,RPSNAKEBOX6A +;********************************************************************** +; +; Animalities +; +;********************************************************************** +PPP> 3 +ASM> MKANIMAL.TBL +C:\VIDEO\supermk3\IMG\MKANIMAL.IMG +PON> +---> HAWKMORF1A +POF> +---> HAWKMORF1B,HAWKMORF3A,HAWKMORF3B,HAWKMORF4A +---> HAWKMORF4B,HAWKMORF5A,HAWKMORF5B,HAWKMORF5C +---> HAWKFLY1B,HAWKFLY2A,HAWKFLY2B,HAWKFLY2C,HAWKFLY3A,HAWKFLY3B,HAWKFLY4A +---> HAWKFLY4B,HAWKFLY5A,HAWKFLY5B,HAWKFLY5C,HAWKFLY6A,HAWKFLY6B,HAWKFLY7A +---> HAWKFLY7B +PON> +---> LIONMORF1A +POF> +---> LIONMORF1B +---> LIONMORF3A,LIONMORF3B,LIONMORF4A,LIONMORF4B,LIONMORF5A,LIONMORF5B +---> LIONMORF5C,LIONMORF6A,LIONMORF6B,LIONMORF6C,LIONMORF7A,LIONMORF7B +---> LIONMORF7C,LIONMORF8A,LIONMORF8B,LIONMORF8C,LIONMORF10A,LIONMORF10B +---> LIONMORF10C,LIONMORF13A,LIONMORF13B +---> LIONMORF14A,LIONMORF14B,LIONMORF15A,LIONMORF15B,LIONMORF16A +---> LIONMORF16B,LIONMORF16C,LIONMORF17A,LIONMORF17B +PON> +---> POLAR1A +POF> +---> POLAR1B +---> POLAR3A,POLAR3B,POLAR4A,POLAR4B,POLAR5A,POLAR5B,POLAR6A,POLAR6B +---> POLAR8A,POLAR8B,POLAR10A,POLAR11A,POLAR12A,POLAR12B,POLAR13A,POLAR13B +---> POLAR15A,POLAR15B,POLAR16A,POLAR16B,POLAR17A,POLAR17B +PON> +---> WOLF1A +POF> +---> WOLF1B +---> WOLF3A,WOLF3B,WOLF4A,WOLF5A,WOLF6A,WOLF6B,WOLF11A,WOLF12A,WOLF13A +---> WOLF14A,WOLF14B,WOLF15A,WOLF16A,WOLF18A,WOLF18B,WOLF20A,WOLF20B +C:\VIDEO\supermk3\IMG\MKANIML2.IMG +PON> +---> CHEETA1A +POF> +---> CHEETA1B,CHEETA3A,CHEETA3B,CHEETA4A,CHEETA4B,CHEETA5A +---> CHEETA5B,CHEETA6A,CHEETA6B,CHEETA6C,CHEETA7A,CHEETA7B,CHEETA7C +---> CHEETA9A,CHEETA9B,CHEETA10A,CHEETA10B +---> CHEETA15A,CHEETA15B,CHEETA15C,CHEETA16A +---> CHEETA16B,CHEETA16C,CHEETA17A,CHEETA17B,CHEETA17C,CHEETA19A,CHEETA19B +---> CHEETA19C +PON> +---> BAT1A +POF> +---> BAT1B,BAT3A,BAT3B,BAT4A,BAT4B,BAT5A,BAT5B,BAT6A,BAT6B +---> BAT7A,BAT7B,BAT8A,BAT8B,BAT9A,BAT9B,BAT10A,BAT10B,BAT11A,BAT11B,BAT12A +---> BAT12B,BAT13A,BAT13B +PON> +---> SNAKE1A +POF> +---> SNAKE1B,SNAKE3A,SNAKE3B,SNAKE4A,SNAKE4B +---> SNAKE5A,SNAKE5B,SNAKE6A,SNAKE6B,SNAKE8A,SNAKE8B,SNAKE9A,SNAKE9B +---> SNAKE9C,SNAKE10A,SNAKE10B,SNAKE10C,SNAKE11A,SNAKE11B,SNAKE11C,SNAKE12A +---> SNAKE12B,SNAKE12C,SNAKE13A,SNAKE13B +C:\VIDEO\supermk3\IMG\MKANIML3.IMG +PON> +---> SPIDER1A +POF> +---> SPIDER1B,SPIDER3A,SPIDER3B,SPIDER4A,SPIDER4B,SPIDER5A +---> SPIDER5B,SPIDER5C,SPIDER6A,SPIDER6B,SPIDER6C,SPIDER7A,SPIDER7B +---> SPIDER8A,SPIDER8B,SPIDER10A +PON> +---> WASP1A +POF> +---> WASP1B,WASP3A,WASP3B,WASP4A,WASP4B,WASP5A,WASP5B,WASP5C +---> WASP6A,WASP6B,WASP6C,WASP7A,WASP7B,WASP7C,WASP8A,WASP9A,WASP9B,WASP9C +---> WASP10A,WASP10B,WASP11A,WASP11B,WASP12A +PON> +---> SHARK1A +POF> +---> SHARK1B,SHARK3A,SHARK3B,SHARK4A +---> SHARK4B,SHARK5A,SHARK5B,SHARK9A,SHARK9B,SHARKFINA,SHARKFINB,SHARKFINC +---> SHARKFIND +---> SHARK10A,SHARK10B,SHARK10C,SHARK11A,SHARK11B,SHARK11C,SHARK11D +---> SHARK12A,SHARK12B,SHARK12C,SHARK12D,SHARK12E,SHARK13A,SHARK13B +---> SHARK13C,SHARK13D,SHARK13E,SHARK13F,SHARK13G,SHARK14A,SHARK14B +---> SHARK14C,SHARK14D,SHARK15A,SHARK15B,SHARK16A,SHARK17A +---> SHARK17B,SHARK19A +C:\VIDEO\supermk3\IMG\MKANIML4.IMG +PON> +---> DRAGON1A +POF> +---> DRAGON1B,DRAGON3A,DRAGON3B,DRAGON4A,DRAGON4B,DRAGON5A +---> DRAGON5B,DRAGON6A,DRAGON6B,DRAGON6C,DRAGON7A,DRAGON7B,DRAGON7C +---> DRAGON9A,DRAGON9B,DRAGON9C,DRAGON10A,DRAGON13A,DRAGON13B +---> DRAGON13C,DRAGON15A,DRAGON15B,DRAGON15C,DRAGON15D +PON> +---> SCORP1A +POF> +---> SCORP1B,SCORP3A,SCORP3B,SCORP4A,SCORP4B,SCORP4C +---> SCORP5A,SCORP5B,SCORP5C,SCORP5D,SCORP6A,SCORP6B,SCORP6C,SCORP6D +---> SCORP7A,SCORP7B,SCORP7C,SCORP7D,SCORP8A,SCORP8B,SCORP8C,SCORP9A +---> SCORP9B,SCORP9C +PON> +---> DINO1A +POF> +---> DINO1B,DINO3A,DINO3B,DINO4A,DINO4B,DINO4C +---> DINO5A,DINO5B,DINO5C,DINO6A,DINO6B,DINO6C,DINO6D +---> DINO9A,DINO9B,DINO10A,DINO10B,DINO11A,DINO11B +; +; reduce +; +C:\VIDEO\supermk3\IMG\MKANIML5.IMG +PON> +---> BULL1A +POF> +---> BULL1B,BULL3A,BULL3B,BULL3C,BULL4A,BULL4B,BULL4C,BULL5A,BULL5B +---> BULL5C,BULL6A,BULL6B,BULL6C,BULL7A,BULL7B,BULL8A,BULL8B,BULL8C,BULL9A +---> BULL9B,BULL9C,BULL9D,BULL10A,BULL10B,BULL10C,BULL11A,BULL11B,BULL11C +---> BULL11D,BULL12A,BULL12B,BULL12C,BULL12D,BULL13A,BULL13B,BULL13C +PON> +---> SKELETN1A +POF> +---> SKELETN1B,SKELETN2A,SKELETN2B,SKELETN3A,SKELETN3B,SKELETN3C +---> SKELETN4A,SKELETN4B,SKELETN4C,SKELETN5A,SKELETN5B,SKELETN5C +---> SKELETN9A,SKELETN9B,SKELETN9C,SKELETN10A,SKELETN10B +---> SKELETN10C,SKELETN11A,SKELETN11B,SKELETN11C,SKELETN12A,SKELETN12B +---> SKELETN12C,SKELETN13A,SKELETN13B,SKELETN13C,SKELETN14A,SKELETN14B +---> SKELETN14C +;********************************************************************** +; +; Raiden Cameo +; +;********************************************************************** +PPP> 6 +ASM> MKFREND5.TBL +C:\VIDEO\supermk3\IMG\RAID8.IMG +PON> +---> RNVICTORY1A +POF> +---> RNVICTORY1B,RNVICTORY1C,RNVICTORY1D,RNVICTORY2A,RNVICTORY2B,RNVICTORY2C +---> RNVICTORY2D,RNVICTORY3A,RNVICTORY3B,RNVICTORY5A,RNVICTORY5B,RNVICTORY6A +---> RNVICTORY6B,RNVICTORY6C,RNVICTORY6D,RNVICTORY7A,RNVICTORY7B,RNVICTORY7C +---> RNVICTORY7D +;************************************************************************ +COF> +PPP> 0 +ASM> MKCMIL.TBL +C:\video\supermk3\img\boonpics.img +---> ENDMARKER + + \ No newline at end of file diff --git a/NEWLOAD2/MKDISP.ASM b/NEWLOAD2/MKDISP.ASM new file mode 100644 index 0000000..3c41609 --- /dev/null +++ b/NEWLOAD2/MKDISP.ASM @@ -0,0 +1,1805 @@ + +; +; +; +; Mark, +; +; Look for the string: "TURMELL" +; +; +; + + + +************************************************************************** +* * +* mkdisp - mortal kombat gsp dma object handler * +* * +* copyright (c) 1995 Midway Manufacturing * +* * +************************************************************************** + .file "mkdisp.asm" + .title "gsp display processor" + + .width 132 + .option b,d,l,t + .mnolist +* +* files required for assembly +* + .include "sysequ.asm" + .include "macros.hdr" + .include "dispequ.asm" + .include "mainequ.asm" + .include "imgtbl.glo" + + .include ram.glo + .include mkdisp.glo + +slowdma .set 1 +lm_fliph .set m_fliph*>10000 + +************************************************************************** +* * +* dma queue ram * +* * +************************************************************************** + +cell_size .set 32*6 ; # bits in 1 dma queue cell entry +q_size .set cell_size*500 + + .bss dma_q,q_size,1 + +objq_1 .set dma_q+q_size ; object queue entry #1 + + .bss dmaqcur,32 ; current dmaq + .bss qdmaflg,16 ; special dmaq being updated=1 +qsize .set nobj*bqcell ; size of queues + .bss dmaq,qsize ; misc. non-sync dma queue + .bss objstr,nobj*obsiz ; object structure list start + .bss objlstnd,0 ; object list end + +************************************************************************** +* * +* keep chache aligned * +* * +************************************************************************** +dclipl + move a0,a3 + addi oxvel,a3 ; a3 ---> vel/pos info we want + mmfm a3,a12,a11,a9,a8 + move b0,b0 ; add velocities ? + jrne skip_velocities ; sans + + add a12,a9 ; add in x velocity + add a11,a8 ; add in y velocity + mmtm a3,a9,a8 ; stuff in new coordinates + +skip_velocities + move a8,a10 + srl 16,a9 + movx a9,a10 ; a10 = y:x coordinates + move a0,a3 + addi oflags-16,a3 ; get parameter location + mmfm a3,a12,a11,a9,a8,a7,a6 ; a12 = oflags / a7 = oflags2 + + btst b_noscroll,a7 ; do we scroll ? + jrne clip4 ; no, then don't + subxy a4,a10 + +clip4 clr a3 ; assume "single part" image + btst b_multipart,a7 + jreq no_multi + + btst b_inviso,a7 ; invisible ? + jrne dispnext ; yes, dont display this guy + + move *a0(oimg),a3,l ; a3 = multipart ram + move a10,b3 ; save original coordinates + +clip41 move b3,a10 ; restore original coordinates + move *a3+,a11,l ; ram entry #1 = sag + jreq dispnext + move *a3+,a9,l ; ram entry #2 = y:x size + ; if the becomes lw - see: "ejby" + move *a3+,a2,w ; ram entry #3 = control word + sll 16,a2 + andi >803fffff,a12 ; clear compress/clip bits + or a2,a12 ; set "bits per pixel" + + move *a3+,a2,l ; ram #4 --> a2 = y:x animation points + subxy a2,a10 ; adjust coordinates +* +* on screen check +* +no_multi + move a10,a2 + addxy a9,a2 ; a2 = bottom right (y,x) coordinate + subxy a14,a2 + jrylt boxc3 ; y greater than zero = offscreen + jrxlt boxc3 ; x greater than zero = offscreen + + move a2,b1 ; b1 = # of pixels on screen + + move a10,a2 ; a2 = top left (y,x) coordinate + subxy a13,a2 + jrygt boxc3 ; y greater than zero = offscreen + jrxgt boxc3 ; x greater than zero = offscreen + +clip5 clr a2 ; a2 = coorindate adjustment for flips + btst b_fliph+16,a12 ; flip horizontal ? + jreq clip6 ; no + movx a9,a2 ; yes, add x size to coordinate + dec a2 +clip6 btst b_flipv+16,a12 ; flip vertical ? + jreq clip7 ; no + movy a9,a2 ; yes, add y size to coordinate + subi >10000,a2 ; and nudge it back up +clip7 + addxy a2,a10 ; add flip adjustments + +* +* put on dma queue +* +* a6 = oscale +* a7 = oflags2 a10 = destination y:x +* a8 = const:palette xlate a11 = image sag +* a9 = vsize:hsize a12 = control:offset +* + addxy a5,a10 ; page offset + mmtm a1,a6,a8,a9,a10,a11,a12 ; put entry on dma queue ! + inc b13 + +; cmpi 2,b13 +; jrhs dispnext + + dint + + .if slowdma + setf 1,0,0 ; field 0 is 1 bit + movk 1,a2 + move a2,@(intenb+b_x1e),0 ; enable dma interupt + setf 16,1,0 + .else +; +; TURMELL: Ignore this.....it is not assemlbed because SLOWDMA=1 +; + move b9,*b12,w ; enable dma interupt + .endif + + move @dmactrl,a2,w + jrn dma_is_busy ; dma busy = queue up this object + +; move b13,b13 +; jrne dma_is_busy + +* +* dma is not busy +* + trap 1 ; call dma interupt + ; (1) + +dma_is_busy + eint + btst b_multipart,a7 ; is this a multipart image ? + jrne clip41 ; yes + + +clipb move @pageaddr,a5,l + jruc dispnext + +boxc3 addxy a5,a10 ; undo the "unpad" + move a3,a3 ; we in middle of "multiparter" + jrne clip41 ; yes, grab the next piece + +dispnext + move *a0,a0,l ; get next link + jrne dclipl ; done? + rets + + +dma_interupt + move b11,b10 + move -*b14,-*b10,l + move -*b14,-*b10,l + move -*b14,-*b10,l + move -*b14,-*b10,l +; +;TURMELL: Here is where the >80000 bit is set!!!! (Note: B12 is always >80000) +; + or b12,b10 + move -*b14,-*b10,l + move -*b14,-*b10,l + dsjs b13,dmaq9 + + setf 1,0,0 ; field 0 is 1 bit + clr b10 + move b10,@(intenb+b_x1e),0 ; disable dma interupt (ejbpatch?) + setf 16,0,0 + + .if bog_line + move @vcount,@br_yellow,w + .endif + +dmaq9 cmp b14,b8 ; are we at the shadows ? + jreq dmaq10 ; ya ! + reti + +dmaq10 move @f_shadows,b10,w + jreq dmaq12 + + setf 1,0,0 + clr b10 ; this section needed ? + move b10,@(intenb+b_x1e),0 ; disable dma interupt (ejbpatch?) + setf 16,1,0 + + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmtm sp,b0,b1,b2,b3,b4,b5 + + move @pageaddr,a5,l ; a5 = page + move @worldtly,a4,l + +dmaqw move @dmactrl,a0,w + jrn dmaqw ; dma busy = wait + + .if bog_line + move @vcount,@br_blue,w + .endif + + callr shadow_p1p2 + + move b13,b13 ; remaining queue entries ? + jreq dmaq11 ; na ! + + .if slowdma + setf 1,0,0 ; field 0 is 1 bit + movk 1,a2 + move a2,@(intenb+b_x1e),0 ; enable dma interupt + setf 16,1,0 + .else +; +; TURMELL: Ignore this.....it is not assemlbed because SLOWDMA=1 +; + move b9,*b12,w ; enable dma interupt (1) + .endif + + move @dmactrl,b3,w + jrn dmaq11 ; dma running ? + trap 1 ; na, start it up + +dmaq11 mmfm sp,b0,b1,b2,b3,b4,b5 + mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 +dmaq12 reti + +************************************************************************** +* * +* end of cache alligned code * +* end of cache alligned code * +* end of cache alligned code * +* * +************************************************************************** + +************************************************************************** +* * +* display object lists * +* * +************************************************************************** +display + move @call_every_tick,a0,l ; routine to run every tick ? + jreq disp0 ; no + call a0 ; yes, call it +* +* gravity & keep in bounds +* +disp0 move @left_edge,a0,w + addi left_padding,a0 + move @right_edge,a1,w + addi scrrgt-right_padding,a1 + clr a4 + + move @p1_obj,a2,l ; player 1 defined ? + jreq grav1 ; no + callr gravity_n_bounds +grav1 move @p2_obj,a2,l ; player 2 defined ? + jreq grav2 ; no + callr gravity_n_bounds +* +* update scrolling +* +grav2 movi scrollx8,a10 + movi worldtlx8,a11 + mmfm a10,a0,a2,a3,a4 ; grab 1st 4 scroll values + mmfm a11,a5,a6,a7,a8 ; grab 1st 4 world x values + add a0,a5 + add a2,a6 + add a3,a7 + add a4,a8 ; add 'em up + mmtm a11,a5,a6,a7,a8 + + movi scrollx4,a10 + movi worldtlx4,a11 + mmfm a10,a0,a2,a3,a4,a5 ; scroll values + mmfm a11,a6,a7,a8,a9,a10 ; world x values + add a0,a6 + add a2,a7 + add a3,a8 + add a4,a9 + add a5,a10 ; add 'em up + mmtm a11,a6,a7,a8,a9,a10 + + move @scrollx,a0,l + move @worldtlx,a1,l + add a0,a1 + move a0,@scrollx,l ; player objlst scroll + + move @scrolly,a7,l + move @worldtly,a4,l + add a7,a4 + move a4,@worldtly,l ; do y scrolling for all planes + +************************************************************************** +* * +* display object lists * +* * +* a0 = object pointer a14 = scrntl * +* a1 = queue pointer b0 = velocity flag * +* a4 = world top left y:x b4 = dlist table pointer * +* a5 = pageaddr * +* * +************************************************************************** + + callr init_dma_regs + move @pageaddr,a5,l + + move @dlists,b4,l ; any lists to display ? + jreq disp5 ; no + + move @scrntl,a14,l ; a14 = top left + move @f_novel,b0,w ; b0 = velocity flag !! + +disp1 move b4,a3 +disp2 move *a3+,a0,l ; a0 = object list + jreq disp5 ; zero = we are done + jrn disp4 ; negative = next longword is a routine + +disp3 move *a3+,a13,l ; a13 = world + move *a13,a13,w + movx a13,a4 ; a4 = combine to form top left y:x + move @scrnlr,a13,l ; a13 = lower right + move a3,b4 + callr dispnext + jruc disp1 + +disp4 move *a3+,a2,l ; a2 = routine to call + call a2 + jruc disp2 + +* +* do manual dma queue entries +* +disp5 push a1 + move @qdmaflg,a0,w ; q being modified blow it off + jrne dma_score_area + move @dmaqcur,a2,l ; a2 = current queue position + movi dmaq+qsize,a1 + move a1,@dmaqcur,l ; reset misc dma queue + addi bqcell,a1 + jruc dqlp + +dql0 mmfm a1,a8,a9,a10,a11,a12 ; get q stuff + addxy a5,a10 ; page offset + movi dmaregs,a7 + rl 16,a12 ; shift flags to upper word +q_wait move @dmactrl,a6,w + jrn q_wait ; wait for dma while it is busy + + movi >01000100,a6 ; a6 = scale + +;********** +; mmtm a7,a6,a8,a9,a10,a11,a12 ; stuff the dma regs + + move a6,-*a7,l + move a8,-*a7,l + move a9,-*a7,l + move a10,-*a7,l +; +; TURMELL: Here I do the same thing for the manual DMA queue ! +; + move b12,a6 + or a6,a7 + move a11,-*a7,l + move a12,-*a7,l +;********** + +dqlp subi 2*bqcell,a1 + cmp a2,a1 + jrhs dql0 + +dma_score_area + pull a1 + + move @f_doscore,a0,w + jreq dsa9 ; flag sez no ! + + clr a9 ; used for zero x compare + move @score_1st,a0,l ; a0 = entry #1 +dsa1 mmfm a0,a2,a3,a4,a6,a7,a8 ; grab dma inputs + cmpxy a4,a9 + jrxeq dsa3 ; x size = zero ---> skip dma + add a5,a6 + mmtm a1,a2,a3,a4,a6,a7,a8 ; put entry on dma queue ! + inc b13 ; increment queue counter + + dint + + .if slowdma + setf 1,0,0 ; field 0 is 1 bit + movk 1,a2 + move a2,@(intenb+b_x1e),0 ; enable dma interupt + setf 16,1,0 + .else +; +; TURMELL: Ignore this.....it is not assemlbed because SLOWDMA=1 +; + move b9,*b12,w ; enable dma interupt (1) + .endif + + move @dmactrl,a2,w + jrn dsa2 ; dma busy = skip trap + trap 1 ; call dma interupt +dsa2 eint +dsa3 cmpi score_ram_end,a0 ; are we done ? + jrlo dsa1 ; no + +dsa9 + .if bog_line + move a1,@last_dma,l ; mark the last dma queue entry + .endif + + rets + + +;tttt move b13,b13 +; jrne tttt +; move b13,b13 + + +drop_1 .word 3,>3000-8 + .word 3,>1000-8 + .word 6,8,6,>1000-8 + .word 6,>1000 + .word 3,>1000-8 + .word 6,8,6,>1000-8 + .word 6,>1000 + .word 3,>1000-8 + .word 4,8,4,>1000-8 + .word 3,>1000 + .word 3,>1000-8 + .word 3,8,3,>1000-8 + .word 3,>1000 + .word 3,>1000 + .long -1 + + +gravity_n_bounds + move *a2(oxpos),a3,w + cmp a0,a3 ; within left edge ? + jrgt kib4 ; yes + + move *a2(oflags2),a5,w + btst b_noedge,a5 ; no edge limits ? + jrne kib4 ; ok, let em go free + + move a0,a3 ; x coordinate = exactly on edge + move *a2(oxvel),a5,l + jrp kib6 ; moving right velocity = ok + move a4,*a2(oxvel),l ; moving left velocity = stop it + jruc kib6 + +kib4 cmp a1,a3 ; within right edge ? + jrlt kib7 ; yes + + move *a2(oflags2),a5,w + btst b_noedge,a5 ; no edge limits ? + jrne kib7 ; ok, let em go free + + move a1,a3 ; x coordinate = exactly on edge + move *a2(oxvel),a5,l + jrn kib6 ; moving left velocity = ok + move a4,*a2(oxvel),l ; moving right velocity = stop it +kib6 move a3,*a2(oxpos),w + +kib7 move *a2(ograv),a5,l ; player 2 have gravity ? + jreq kib9 ; no + move *a2(oyvel),a3,l + add a5,a3 + move a3,*a2(oyvel),l ; yes add gravity to yvel +kib9 rets + +************************************************************************** +* * +* edge_limits - keep both players within limits of our defined universe * +* * +* input: a8 = player object in question * +* * +************************************************************************** +;edge_limits +; jreq elim3 ; no object there ---> skip +; +; move *a8(oflags2),a3,w +; btst b_noedge,a3 ; no edge limits ? +; jrne elim3 ; ok, let em go free +; +; move *a8(oxpos),a3,w +; sra 16,a3 ; a3 = ani x +; +; move *a8(oxvel),a9,l +; jreq elim9 ; zero velocity ----> skip +; jrp elim6 +;* +;* negative velocity / moving left +;* +; cmp a10,a3 ; compare with left edge +; jrhi elim3 ; higher = cool +; jreq elim4 ; equal = no moving left allowed +; +;elim0 move a10,a5 +; sub a3,a5 ; a5 = how far off we iz +;elim1 move a8,a7 +;elim2 move *a7(oxpos),a0,w +; add a5,a0 +; move a0,*a7(oxpos),w ; too far left = adjust back to edge +; move *a7(oslink),a7,l +; jrne elim2 +;elim4 clr a0 +; move a0,*a8(oxvel),l ; too far left = zero x vel +;elim3 rets +; +;* +;* positive velocity / moving right +;* +;elim6 cmp a11,a3 ; compare with right edge +; jrlo elim3 ; lower = cool +; jreq elim4 ; equal = no moving left allowed +;elim7 sub a11,a3 +; move a3,a5 ; a5 = amount to adjust x left +; neg a5 +; jruc elim1 +;* +;* zero velocity +;* +;elim9 cmp a10,a3 ; compare with left edge +; jrlt elim0 ; too far left ---> adjust (neg=left) +; cmp a11,a3 ; compare with right edge +; jrhi elim7 ; too far right ---> adjust +; rets + +************************************************************************** +* * +* yzsort - sort object list in z:y priority * +* * +* sorts both object lists independently now (ejb) * +* * +************************************************************************** +yzsort: + mmtm sp,a0,a1,a2,a4,a5,a7,a8 + movi objlst,a0 + callr sort_list ; sort object list #1 + movi objlst2,a0 + callr sort_list ; sort object list #2 + movi objlst3,a0 + callr sort_list ; sort object list #3 + mmfm sp,a0,a1,a2,a4,a5,a7,a8 + rets +* +* sort subroutine: +* input: a0 = object list to sort +* +sort_list + movi 080000000h,a1 ; lowest possible z + movi 080000000h,a5 ; lowest possible y + move *a0,a2,l + jrne yzlp0 ; list not empty = sort away + rets ; list is empty = return + +yzlp0 move *a2(ozval),a8,l ;test z + move *a2(oyval),a7,l ;test y + cmp a1,a8 + jrgt priok + jrlt priswap + + cmp a5,a7 + jrge priok + +priswap pushst + dint + move a2,*a4,l + move *a2,*a0,l + move a0,*a2,l + popst + move a2,a4 + jruc yzlp + +priok move a0,a4 + move a2,a0 + move a8,a1 + move a7,a5 + +yzlp move *a0,a2,l ; current link in a2, prev in a4 + jrne yzlp0 + rets + +************************************************************************** +* * +* scrtst - test if an object is on screen * +* * +* input: a8 = object to test returns: eq if on screen * +* * +************************************************************************** +* +* enter here and provide your own screen boundries +* +scrtstg mmtm sp,a0,a1,a2,a3 + jruc scrtst1 +* +* normal screen boundaries +* +scrtst mmtm sp,a0,a1,a2,a3 + move @scrntl,a2,l ;get screen top left + move @scrnlr,a3,l ;get screen lower rt. + +scrtst1 move *a8(oypos),a0,w + move *a8(oxpos),a1,w + sll 16,a0 + movx a1,a0 ; a0 = top left [y,x] of object + + move @worldtly,a1,l + move @worldtlx+16,a4 + movx a4,a1 ; a1 = packed worldtl [y,x] + + subxy a1,a0 ; subtract out world base + move *a8(osize),a1,l + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + jryge scrtf ;lower + jrxge scrtf ;to the right + + cmpxy a2,a1 + jryle scrtf ;above... + jrxle scrtf ;to the left.. + + clr a0 + jruc scrtx ;return eq (on screen) +scrtf: + movk 1,a0 + move a0,a0 ;return ne (not on screen) +scrtx: + mmfm sp,a0,a1,a2,a3 + rets + +************************************************************************** +* * +* oinit - Initialize object system * +* * +************************************************************************** +oinit mmtm sp,a0,a1,a2,a3,a4,a5 + + pushst + dint + move @intenb,a0,w + andni x1e,a0 ;no more dma interrupts + move a0,@intenb,w + popst + + movi zero_words_oinit,a1 + calla zero_table_o_words + + movi zero_longs_oinit,a1 + calla zero_table_o_longs + + calla dmawait ;wait on dma + move a0,@dmacmap,w + + movi -1,a0 + move a0,@swtemp1,l + move a0,@swtemp2,l +;MJL 03/31/95 + move @switch2,a0,l +;MJL END + move a0,@swtemp3,l + move a0,@swtemp4,l ; all previous switch states = open + +************************************************************************** +* * +* setup last 2 lines of bitmap for autoerase color * +* * +************************************************************************** + + movi 510*512*8,a1 ;store to last 2 lines of bitmap + movi erasecol,a14 ;color pair + movi 512*8*2/16,b0 +lp move a14,*a1+ + dsj b0,lp + + calla clrpal ; clear palette ram + + movk 1,a0 + move a0,@f_auto_erase,w + + movi boonpal,a0 + calla getfpal ; palette #1 + mmfm sp,a0,a1,a2,a3,a4,a5 + + calla bakclr ; clear background !! + + mmtm sp,a0,a1,a2,a3 ; save reg + movi nobj,a3 ; # of object blocks to init + + movi scrnst,a0,l ; init screen top left [y,x] + move a0,@scrntl,l + move a0,@scrntl2,l + + movi scrnend,a0,l ; init screen lower right [y,x] + move a0,@scrnlr,l + move a0,@scrnlr2,l + + movi dmaq+qsize,a1 + move a1,@dmaqcur,l ; init misc dma queue + +; removed 7/6/93 +; pushst +; dint +; move @intenb,a0,w +; andni x1e,a0 ; no more dma interrupts +; move a0,@intenb,w +; popst + + movi objstr,a1,l + move a1,@ofree,l ;setup free list + +oinitl move a1,a2 + addi obsiz,a1,w + move a1,*a2,l ; link em up + dsjs a3,oinitl ; continue for nproc + move a0,*a2,l ; zero last link + mmfm sp,a0,a1,a2,a3 ; restore regs + +************************************************************************** +* * +* init_dma_regs - Initialize dma registers where: * +* * +* a1 = dirq queue pointer * +* * +* b11 = dmaregs (dedicated) * +* b12 = intenb (dedicated) * +* b13 = counter * +* b14 = dma int queue pointer * +* * +************************************************************************** +init_dma_regs + clr b8 ; 1st shadow queue spot pointer + movi x1e,b9 ; dedicated for speed + movi dmaregs,b11 ; dedicated for speed +; movi intenb,b12 ; dedicated for speed + +; +; TURMELL: Here is where I set the B12 reg to always be >80000 +; + + movi >80000,b12 + movi objq_1,a1 ; a1 = object queue entry #1 (dirq) + move a1,b14 + clr b13 ; b13 = queue count + rets + + +zero_words_oinit + .long f_novel + .long f_auto_erase + .long f_shadows + .long noflip + .long f_skew + .long skew_y + .long skew_height + .long skew_stack + .long f_only_t + .long 0 + +zero_longs_oinit + .long call_every_tick + .long dlists + .long skew_oc + .long skew_sag + .long skew_constpal + .long skew_dx + + .long p1_shape + .long p2_shape + .long p1_obj + .long p2_obj + .long worldtly + .long worldtlx + + .long objlst + .long objlst2 + .long objlst3 + .long baklst1 + .long baklst2 + .long baklst3 + .long baklst4 + .long baklst5 + .long baklst6 + .long baklst7 + .long baklst8 + .long baklst9 + .long scrolly + .long scrollx + .long scrollx1 + .long scrollx2 + .long scrollx3 + .long scrollx4 + .long scrollx5 + .long scrollx6 + .long scrollx7 + .long scrollx8 + + .long p1_xvel + .long p2_xvel + .long 0 + +************************************************************************** +* * +* getobj - get a free object block for use * +* * +* returns: a0 = ptr to object block * +* if no blocks were available then the z flag is set * +* * +************************************************************************** +getobj mmtm sp,a1,a2 + move @ofree,a0,l ; pointer to next available obj block + jreq getox + move *a0,a2,l + move a2,@ofree,l ; adjust pointer to free list + + clr a2 ; used for zero-ing object data + movi (obsiz/16)-2,a1 + addk 32,a0 + srl 1,a1 + jrnc getobj1 + move a2,*a0+,w +getobj1 move a2,*a0+,l + dsjs a1,getobj1 + subi obsiz,a0 ; restore a0, set non zero flag + + movi >01000100,a2 + move a2,*a0(oscale),l ; default scale = 100 / 100 + +getox mmfm sp,a1,a2 ; dont screw up z-flag + rets + +************************************************************************** +* * +* insert an object block into an object list * +* * +* list is sorted by increasing z and increasing y within constant z * +* * +* input: a0 = object block to be inserted * +* * +************************************************************************** + +* +* insert an object onto object list #3 (sorted) +* +insobj3 mmtm sp,a1,a2,a3,a4,a5 + movi objlst3,a4 + jruc insobj0 +* +* insert an object onto object list #2 (sorted) +* +insobj2 mmtm sp,a1,a2,a3,a4,a5 + movi objlst2,a4 + jruc insobj0 +* +* insert background object (sorted) +* +insbobj mmtm sp,a1,a2,a3,a4,a5 + movi baklst1,a4 + jruc insobj0 + +************************************************************************** +* * +* insobj_v - insert background object on a variable list * +* * +* input: b4 = object list to add to ! * +* * +************************************************************************** +insobj_v + mmtm sp,a1,a2,a3,a4,a5 + move b4,a4 ; he wants it in a4 + jruc insobj0 + +* +* insert object into object list #1 +* +insobj: + mmtm sp,a1,a2,a3,a4,a5 + movi objlst,a4 + +insobj0 move *a0(ozval),a1,l ; get z position + move *a0(oyval),a5,l ; get y position + +ins_loop move a4,a2 ; ptr to prev in a2 + move *a2,a4,l ; ptr to next in a4 + jreq ins_at_end ; bra if at end of list + move *a4(ozval),a3,l ; zpos in a3 + cmp a3,a1 + jrgt ins_loop + jrlt ins_at_end + + move *a4(oyval),a3,l ;test y position + cmp a3,a5 + jrgt ins_loop +ins_at_end: + move a4,*a0,l ; put next link in new block + move a0,*a2,l ; put link to new in prev block + mmfm sp,a1,a2,a3,a4,a5 + rets + + +delobj3 + mmtm sp,a0,a2,a3,a4,a8 + movi objlst3,a4 + jruc del_loop + +delobj2 + mmtm sp,a0,a2,a3,a4,a8 + movi objlst2,a4 + jruc del_loop + +* +* a0 = object +* a4 = object list to delete from +* +delobj_lista4 + mmtm sp,a0,a2,a3,a4,a8 + jruc del_loop + +* +* delete foreground object +* +delobj: + mmtm sp,a0,a2,a3,a4,a8 + movi objlst,a4 +del_loop + move a4,a2 ; ptr to prev in a2 + move *a2,a4,l ; ptr to next in a4 + jrnz del_chk + lockup 10 + jruc delobjx + +del_chk + cmp a4,a0 + jrne del_loop + + move *a0,*a2,l ; put next link in prev block + move @ofree,a2,l + move a2,*a0,l + move a0,@ofree,l ; return deleted block to free stack + +delobjx + mmfm sp,a0,a2,a3,a4,a8 + rets +************************************************************************** +* * +* kill a class of objects * +* a0=oid (16 bits) ,a1=mask (16 bits) * +* mask bits of zero are dont cares * +* * +************************************************************************** + +************************************************************************** +* * +* Kill an object from list #2 * +* * +************************************************************************** +kilobj2 + mmtm sp,a0,a2,a3,a4,a5 + movi objlst2,a2,l + jruc kilgen + +************************************************************************** +* * +* Kill an object from list #1 * +* * +************************************************************************** +kilobj + mmtm sp,a0,a2,a3,a4,a5 + movi objlst,a2,l + +kilgen + and a1,a0 ;form match + +kilobp: + move a2,a3 ;save previous + move *a2,a2,l ;get next + jreq kilobx ;all done + move *a2(oid),a4 + and a1,a4 ;can dont care bits + cmp a0,a4 ;match? + jrne kilobp ;no + + move *a2,*a3,l ;link around in active list + move @ofree,a5,l ;link into free list at start + move a5,*a2,l + move a2,@ofree,l ;point free to cell + move a3,a2 + jruc kilobp ;kill the rest +kilobx: + mmfm sp,a0,a2,a3,a4,a5 + rets + +************************************************************************** +* * +* existobj - does an object from a certain class exist? * +* a0 = oid * +* a1 = mask (0's don't care) * +* returns: * +* z bit set = no object, a0 = 0 * +* z bit clr = no object, a0 = ptr to object * +* * +************************************************************************** +existobj + mmtm sp,a2,a3 + sext a0 + and a1,a0 ; form match + movi objlst,a2,l + callr existobp ; try object list #1 + movi objlst2,a2,l + callr existobp ; try object list #2 + jruc existo3 ; object ain't out there.... + +existobp move *a2,a2,l ; get next + jreq existo4 ; end of list ---> return + move *a2(oid),a3,w + and a1,a3 ; can dont care bits + cmp a0,a3 ; match? + jrne existobp ; no + pull a0 ; pull return address off stack + move a2,a0 ; return a0 = found object (non-zero) +existo3 mmfm sp,a2,a3 +existo4 rets + +************************************************************************** +* * +* bkgsagof - special version of gsagof for backgrounds with no animatio * +* * +************************************************************************** +bkgsagof: + move *a1(isag->20),a3,l ; get top left sag (-20 -> no ani off) + zext a4,w ; zero offset in a4 + move *a1(>40),a2,w ; grab backgrounds control offset info + or a2,a4 ; stuff into flags + jruc gsag3 + +************************************************************************** +* * +* gsagof - get sag for object - adjusts sag for flip * +* * +* input: a1 = ptr to image header (oimg) * +* a4 = object flags * +* * +* returns: a2 = returned with new osize * +* a3 = returned with new sag * +* a4 = returned with new offset:oflags * +* * +************************************************************************** +gsagof + move *a1(isag),a3,l ; get top left sag + zext a4,w ; zero offset in a4 + move *a1(icontrol),a2,w ; grab control info + or a2,a4 ; stuff into flags +gsag3 move *a1(isize),a2,l + rets + + +;**************************************** +badani + .if debug + dint + jruc $ + .endif + jruc anigx ; ignore bad ani calls +;**************************************** + + + +ani_flag + move *a8(oflags),a4,w + +************************************************************************** +* * +* ani - animation subroutine * +* a1=new image pointer * +* a4=new oflags * +* a8=object structure pointer to be updated * +* * +************************************************************************** +ani mmtm sp,a0,a2,a3,a4,a5,a6,a7,a9 + +;************************************* + cmpi rom,a1 + jrlo badani +;************************************* + + andi dmago|dmaclp|m_fliph|m_flipv|>0f,a4 ; keep flip info and dma info + move *a1(icontrol),a2,w + or a2,a4 + + move *a8(oflags),a5,w + move *a8(oimg),a3,l + cmp a1,a3 + jrne anig1 ; br = not the same image as last time + + zext a4 + zext a5 + cmp a4,a5 + jreq anigx ;br = every thing is the same + +anig1 swap a4,a5 + swap a1,a3 + move *a8(osize),a2,l + callr ganiof ;get old animation offset + mmtm sp,a6,a7 + move a5,a4 ;new oflags + move a3,a1 ;new oimg + + callr gsagof ;get sag, offset, hw + callr ganiof ;get new animation offset + mmfm sp,a0,a5 ;bring back old animation delta + sub a6,a0 ;subtract new from old + sub a7,a5 + + move a2,*a8(osize),l + move a3,*a8(osag),l + move a4,*a8(oflags),w + +; move a8,a9 ;get push address of oflags,osag,osize +; addi oflags+>60,a9 +; mmtm a9,a2,a3,a4 ;blow this stuff out + + move a1,*a8(oimg),l + + move *a8(oyval),a6,l + add a5,a6 ;adjust oyval, oxval for delta x + move a6,*a8(oyval),l + move *a8(oxval),a7,l + add a0,a7 + move a7,*a8(oxval),l + +anigx mmfm sp,a0,a2,a3,a4,a5,a6,a7,a9 + rets + +************************************************************************** +* * +* ani0 * +* * +* same as ani except this does not check for repeating images * +* * +************************************************************************** +ani0 mmtm sp,a0,a2,a3,a4,a5,a6,a7,a9 + move *a8(oflags),a5,w + +;***************** +; move *a8(oimg),a2,l + move *a8(oimg),a3,l +;***************** + + jruc anig1 + +************************************************************************** +* * +* get animation offset * +* a1=oimg, a2=h:w, a4=oflags * +* * +* output: * +* a6=x animation offset x 64k * +* a7=y animation offset x 64k * +* * +************************************************************************** +ganiof: + mmtm sp,a2,a3 + move *a1(ianioff),a6,l + clr a7 ;make sure a7 is 0 + movy a6,a7 + sll 16,a6 ;move to upper word + subi >00010001,a2 ;adjust for -1 + clr a3 + movy a2,a3 + sll 16,a2 ;move to upper word + btst b_fliph,a4 + jrz gani1 + neg a6 + add a2,a6 ;sub ths-1 for h-flip +gani1: + btst b_flipv,a4 + jrz gani2 + neg a7 + add a3,a7 ;sub tvs-1 for v-flip +gani2: + mmfm sp,a2,a3 + rets + +************************************************************************** +* * +* dma queue support routines * +* * +************************************************************************** +* +* qdma puts image on dma q +* inputs: +* a1: constant color:palette +* a3: destination y:x +* a5: offset:control +* a14: address of image header +* gets: a2=h/w; a4=sag +* +qdma + mmtm sp,a2,a4,a13 + move *a14,a2,l ;get vsize:hsize + move *a14(isag),a4,l ;get sag +qdma1 movk 1,a13 + move a13,@qdmaflg,w ;q being modified + move @dmaqcur,a13,l + cmpi dmaq,a13 + jrls qdmax ;q overload, can it + + mmtm a13,a1,a2,a3,a4,a5 + move a13,@dmaqcur,l + clr a13 + move a13,@qdmaflg,w +qdmax mmfm sp,a2,a4,a13 + rets + + +*manual dma (setup your own regs) +*inputs: +*a1: constant color:palette +*a2: vsize:hsize +*a3: destination y:x +*a4: sag +*a5: offset:control +qdman: + mmtm sp,a2,a4,a13 + jruc qdma1 + +************************************************************************** +* * +* dman - manual dma, all regs must be setup upon calling * +* a1 = [constant color,palette] * +* a2 = size [h,w] * +* a3 = destination [y,x] * +* a4 = starting address * +* a5 = [offset,control] * +* * +************************************************************************** +dman + jruc qdman + +************************************************************************** +* * +* Cache aligned code #2 - Shadow code * +* * +************************************************************************** + +************************************************************************** +* * +* shadow_a8 - Does multipart shadows THE HARD WAY. Using * +* * +* a5 = page offset to add to coordinates * +* a8 = y:x coordinates * +* a9 = multipart ram pointer * +* a10 = sag pointer * +* a11 = x size of piece * +* a13 = scratch * +* a14 = control:offset * +* * +* b1 = lead multiplier * +* b2 = ground y * +* b3 = counter * +* b4 = ani y:x * +* b5 = line counter * +* * +************************************************************************** + .sect "SHADORG" + +shadow_p1p2 + move @syscopy,a2,w ; ram copy !! + andi 1111110011111111b,a2 ; clear image bank bits + ori 0000000100000000b,a2 ; set bank 1 bit + move a2,@sysctrl,w + move a2,@syscopy,w ; keep a copy in ram + + movi >01000100,a2 + move a2,@dmaxscl,l ; dma input #1 = scale + movi bpal_black*>10000,a2 + move a2,@dmacmap,l ; dma input #2 = const:palette +* +* setup dedicated registers +* +* b0 = dmactrl +* b1 = worldtly +* a2 = dma y:x size pointer +* a3 = dma control:offset +* a6 = dma y coordinate pointer +* a12 = dma sag pointer +* + movk 1,a8 + move a8,@dmahsize+16,w + + clr a8 + movi dmaoffst,a3 + move a8,*a3+,w ; offset is always "0" + movi dmavert,a6 + movi dmahoriz,a7 + movi dmasagl,a12 + + movi dmactrl,b0 + move @worldtly,b1,l + move @ceiling_y,b6,w ; ceiling y + + move @p2_shadadj,b7,w ; player 2 shadow adjust y + push b7 + move @p1_obj,a8,l + move @p1_shadadj,b7,w ; player 1 shadow adjust y + jruc shadorg + +;******* end of commented stuff + + .sect "SHADORG" + +shadorg callr shad0 + move @p2_obj,a8,l + pull b7 + +shad0 move *a8(oflags2),a0,w + btst b_shadow,a0 ; shadow ? + jreq shad9 ; no + + move *a8(oimg),a9,l ; a9 ---> multipart ram + movi >2000000,a2 ; a2 = quick handy 2 mil + clr a13 ; bank 0 = bit clear + move *a9(mp_sag),a0,l ; a0 = sag of this piece + cmpi >4000000,a0 ; lower bank ? + jrlt bank0 ; yes + neg a2 ; no, upper ---> flip dis !!! + movi >100,a13 ; bank 1 = bit set + +bank0 move @syscopy,a0,w + andni >100,a0 ; 1st clear the bit + or a13,a0 ; set 8th bit = use band 1 + move a0,@sysctrl,w + move a0,@syscopy,w ; keep a copy in ram + + move *a8(oypos),a13,w + move *a8(oxpos),a0,w + zext a0,w + sll 16,a13 + or a13,a0 ; a0 = ani y:x for all pieces (world) + + move b1,a14 ; a14 = worldtly + move @worldtlx+16,a13,w + +;************ fix elevated shadows + zext a13,w ; clear out the Y in case x = neg +;************ fix elevated shadows + + or a14,a13 ; a13 = world y:x + subxy a13,a0 + move a0,b4 ; b4 = ani y:x (screen coordinates) + + move @ground_y,a14,w + sll 16,a14 + subxy a13,a14 ; a14 = [screen ground y,??] + move a14,b2 + srl 16,b2 + add b7,b2 ; personal adjust for each ochar + sll 16,b2 ; b2 = [screen ground y,0] + +************************************************************************** +* * +* piece by piece loop * +* * +************************************************************************** + +shad2 move *a9(mp_sag),a10,l ; a10 = sag of this piece + jreq shad9 ; sag = 0 ---> we are done + +;*************** + cmpi >a17ce6a,a10 + jreq shadsk ; sag = 0 ---> we are done + +; move a10,a10 +;shad19 +; jrne not_shang_patch +; movi 0400c20aH,a10 +; movi 0400c20aH,a10 +;not_shang_patch +;*************** + + add a2,a10 ; cpu read = add 2 mil + + move b4,a0 ; get ani y:x + move *a9(mp_anixy),a13,l + subxy a13,a0 ; a0 = y:x of this piece + + move b2,a13 ; a13 = [ground y,0] + subxy a0,a13 ; a13 = [distance from ground,??] + srl 16,a13 + + sll 16-2,a13 ; a13 = [1/4 distance,0] + move b2,a14 ; a14 = [ground y,0] + subxy a13,a14 ; a14 = [shadow y,0] + + movy a14,a0 ; a0 = shadow [1/4 y:x] + move *a9(mp_sizey),a13,w ; a13 = # of lines + + srl 2,a13 ; shadows are 1/4 the normal height + + move a13,b5 + + move *a9(mp_sizex),a11,w + move a11,@dmahsize,w ; set a11 = x size for this piece + + move *a9(mp_control),a14,w + btst b_fliph,a14 ; flip horizontal ? + jreq shad1 + addxy a11,a0 ; yes, adjust coordinates for flip + dec a0 ; and nudge.. + +shad1 move a14,a1 + move a14,a4 + sll 16+4,a1 + srl 32-2,a1 ; a1 = trail multiplier + sll 16+4+2,a4 + srl 32-2,a4 ; a4 = lead multiplier + + ori dmacnz,a14 + + addxy a5,a0 + move a0,*a7,w ; set x coordinate here !! + srl 16,a0 + +************************************************************************** +* * +* line by line loop * +* * +************************************************************************** + +shad4 +shad3 move *b0,b3,w + jrn shad3 ; wait for dma while busy + + sub a2,a10 + move a10,*a12,l ; stuff sag + add a2,a10 + + move a0,*a6,w ; set y coordinate + move a14,*a3,w ; set the GO! bit + dsjs b5,shad5 + +************************************************************************** +* * +* do the last line again to fill in "holes" * +* * +************************************************************************** + +shad6 move *b0,b3,w + jrn shad6 ; wait for dma while busy + + inc a0 + move a0,*a6,w ; set y 1 line down + dec a0 + +;shad6 move *b0,b3,w +; jrn shad6 ; wait for dma while busy + + move a14,*a3,w ; set the GO +shadsk addi mp_length,a9 ; a9 ---> next multipart piece + jruc shad2 +* +* skip 4 lines +* +shad5 move *b0,b3,w + jrn shad5 ; wait for dma while busy + + inc a0 + + movk 4,b3 + setf 8,0,0 ; field 0 is 8 bits (zero extend) + +shad7 move *a10+,a8,w ; grab a BYTE !! + + move a8,a13 + sll 32-4,a13 + srl 32-4,a13 ; mask off upper b.s. + sll a4,a13 ; a13 = lead zeros + + srl 4,a8 + sll a1,a8 ; a8 = trailing zeros + + add a8,a13 ; a13 = lead + trailing = all compressed zeros + move a11,a8 ; a8 = x size + sub a13,a8 ; a8 = uncompressed pixels to skip + + sll 1,a8 ; 2x + add a8,a10 + sll 1,a8 ; + 4x = 6 bits per pixel + add a8,a10 ; a10 ---> sag for next line + dsjs b3,shad7 + + setf 16,1,0 ; field 0 is back to 16 bits + jruc shad4 + +shad9 rets + + +;************** (2) +; move @intenb,a0,w +; andni x1e,a0 +; move a0,@intenb,w ; disable dma interrupts +;************** (2) + +;*************** (1) +; setf 1,0,0 ; field 0 is 1 bit +; movk 1,a2 +; move a2,@(intenb+b_x1e),0 ; enable dma interupt +; setf 16,1,0 +;*************** (1) + + +************************************************************************** +* * +* Cache aligned code #2 - floor code * +* * +************************************************************************** + + .sect "FLOORORG" + +************************************************************************** +* * +* floor code * +* * +* a0 = floor_x b0 = DON'T TOUCH ! * +* a1 = dma queue pointer b1 = DON'T TOUCH ! * +* a2 = scale b2 = DON'T TOUCH ! * +* a3 = const:pal b3 = loop counter * +* a4 = piece #2 y:x size b4 = loop counter * +* a5 = DONT TOUCH b5 = sag holder (for a8) * +* a6 = piece #1 y:x size b6 = [1,x] size holder (for a6) * +* a7 = piece #1 y:x coordinates b7 = unused * +* a8 = sag * +* a9 = control:offset * +* a10 = skew x (running x) * +* a11 = skew dx * +* a13 = scratch * +* a14 = piece #2 y:x coordinates * +* * +* a12 = running y * +* * +************************************************************************** +floor_x .set 1200 + +floor_code + move @f_skew,a2,w ; skew the ground ? + jreq kib9 ; no + mmtm sp,a3,a14 +* +* scroll the floor +* + move @skew_scroll,a9,l + move *a9,a9,l + move @skew_oc,a10,l + sub a9,a10 + move a10,@skew_oc,l ; scroll "OFF CENTER" indicator !! + + move @skew_calla,a0,l + jump a0 +skew_rets ; a11 = dx per line + move a11,@skew_dx,l + + move @skew_height,b4,w ; b4 = # of lines to DMA out + move @skew_y,b6,w + move @worldtly+16,b3,w + sub b3,b6 ; b6 = starting y screen coordinates + cmpi 254,b6 + jrgt floor_exit ; off screen ---> exit + sll 16,b6 + move @skew_sag,a8,l +* +* CONSTANTS !! +* + movi >01000100,a2 ; scale + move @skew_constpal,a3,l ; const:pal + movi >00010190,a6 ; y:x size + movi >e0020000,a9 ; conrtol:offset + movi floor_x*6,a12 ; beginning of next line offset + movi >00010000,b2 ; setup for fast "down 1 line" +* +* a10 = how far off center we are ! +* a11 = skew value to add for EACH LINE +* +floor6 move b6,a13 + clr a7 + movy a13,a7 ; move current y into a7 + addxy a5,a7 ; a7 = our line's y:x coordinates + + move a8,b1 ; save sag + move a10,a13 + sra 16,a13 ; a13 = pixels off center (integer) + sll 1,a13 + move a13,a0 + sll 1,a13 + add a13,a0 ; a0 = 6 bits/pixel + sub a0,a8 ; adjust sag + mmtm a1,a2,a3,a6,a7,a8,a9 ; floor piece ---> on the queue + inc b13 + move b1,a8 ; restore sag + + add a12,a8 ; sag ---> beginning of next line + add a11,a10 ; start skew on line two + + add b2,b6 ; down 1 line + + dsjs b4,floor6 + +floor_exit + mmfm sp,a3,a14 + rets + +************************************************************************** + + .if bog_line + +* +* a2 = vcount to use +* a3 = constant color to use +* +draw_boglines + mmtm sp,a0,a1,a2,a3 + +dbog2 move @dmactrl,a0,w + jrn dbog2 ; dma busy = wait + +; move @br_red,a2,w +; movi bog_red,a3 +; callr draw_1_line + +; move @br_white,a2,w +; movi bog_white,a3 +; callr draw_1_line + +; move @br_blue,a2,w +; movi bog_blue,a3 +; callr draw_1_line + + move @br_yellow,a2,w + movi bog_yellow,a3 + callr draw_1_line + + mmfm sp,a0,a1,a2,a3 + rets + + +draw_1_line + move a2,a2 + jreq draw9 + cmpi >fe,a2 + jreq draw9 ; dont write onto erase lines + cmpi >ff,a2 + jreq draw9 ; dont write onto erase lines + + clr a0 + move a0,@dmacmap,w ; setup dma palette register + + move @pageaddr,a1,l + srl 8,a1 + sll 4,a1 + addi >38*8,a1 ; padding bs + + sll 12,a2 + add a2,a1 + +; movi 30,a2 + movk 10,a2 +draw7 move a3,*a1+,l + dsjs a2,draw7 + +draw9 rets + + .endif + + +; setf 3,0,0 ; field 0 is 3 bits (zero extend) +; setf 8,0,1 ; field 0 is 8 bits (zero extend) +; move a12,a5 +;rain1 move a11,a3 +;rain2 move *a0+,a2,w ; grab 3 bits +; jreq rain3 ; zero ---> don't write +; move a2,*a1,l ; stuff 8 bits +;rain3 addk 8,a1 +; dsjs a3,rain2 +; addi >1000-(6*8),a1 ; down 1 line on the screen +; dsjs a5,rain1 +; setf 16,1,0 +; setf 32,1,1 + + +************************************************* +* +* rain !! +* +; move @gstate,a0,w +; cmpi 99,a0 +; jrne norain +; +;; movi >0e0e0e0e,a3 +;; calla draw_bogline ; white = start of rain loop +; +; movi >0101,a0 +; move a0,@dmacmap,w ; setup dma palette register +; +; movi rain_ram,a4 +; move @pageaddr,a11,l ; take this outside the loop +; srl 8,a11 +; sll 4,a11 +; addi >38*8,a11 ; a11 = top of page we are on +; +;rain5 move *a4,a6,l ; x coordinate +; jreq rain9 +; +; move *a4(32*2),a9,l ; x vel +; add a9,a6 +; move *a4(32*1),a7,l ; y coordinate +; move *a4(32*3),a9,l ; y vel +; add a9,a7 +; +; cmpi 0,a6 +; jrgt rain4 +; movi (scrrgt-17)*>10000,a6 +;rain4 cmpi 234*>10000,a7 ; hit ground ? +; jrlt rain6 +; clr a7 +;rain6 move a6,*a4,l ; stuff new x coordinate +; move a7,*a4(32*1),l ; stuff new y coordinate +; +; move a11,a1 ; grab the correct page +; srl 16,a7 +; sll 12,a7 +; add a7,a1 ; add in y coordinate +; srl 16,a6 +; sll 3,a6 ; x coordinate * 8 bits/pix (screen) +; add a6,a1 +;* +;* draw drop +;* +; movi drop_1,a0 +; movk 14,a3 ; rain drop = 14 lines tall +;rain2 move *a0+,a2,l ; grab [offset,pixel data] +; movb a2,*a1 ; stuff 1 pixel +; srl 16,a2 +; add a2,a1 ; add in offset +; dsjs a3,rain2 +; +;rain3 addi 32*4,a4 +; jruc rain5 +; +;rain9 +;; movi >04040404,a3 +;; calla draw_bogline +; +;norain +************************************************************************ + + .end + \ No newline at end of file diff --git a/NEWLOAD2/MKDMIL.LOD b/NEWLOAD2/MKDMIL.LOD new file mode 100644 index 0000000..042be6f --- /dev/null +++ b/NEWLOAD2/MKDMIL.LOD @@ -0,0 +1,772 @@ +***> 5000000,2 +IHDR SIZX:W,SIZY:W,ANIX:W,ANIY:W,SAG:L,CTRL:W,PAL:L +ZON> +CON> +POF> +;************************************************************************ +ASM> MKTEXT2.TBL +C:\VIDEO\supermk3\IMG\MK3FONTS.IMG +---> SMALLFONT_APOS,SMALLFONT_OPNQ +---> SMALLFONT_CLOQ,SMALLFONT_SEMI,BIGFONT_APOS,BIGFONT_OPNQ,BIGFONT_CLOQ +---> BIGFONT_SEMI +c:\video\supermk3\img\MKBGANI2.IMG +PON> +---> THRONEWALL +POF> +;************************************************************************ +; +; Fight / Finish Him / Finish Her +; +;************************************************************************ +PPP> 0 +ASM> MKFIGHT.TBL +C:\VIDEO\supermk3\IMG\MKFIGHT.IMG +ZOF> +PON> +---> FINFITE1,FINHIM1,FINHER1 +ZON> +---> FINFITE2 +POF> +---> FINFITE3,FINFITE4,FINFITE5,FINFITE6,FINFITE7 +---> FINFITE8,FINFITE9,FINFITE10,FINFITE11,FINFITE12,FINFITE13,FINFITE14 +---> FINFITE15,FINFITE16,FINFITE17,FINHIM2,FINHIM3,FINHIM4,FINHIM5 +---> FINHIM6,FINHIM7,FINHIM8,FINHIM9,FINHIM10,FINHIM11,FINHIM12,FINHIM13 +---> FINHIM14,FINHIM15,FINHIM16,FINHIM17,FINHER2,FINHER3,FINHER4 +---> FINHER5,FINHER6,FINHER7,FINHER8,FINHER9,FINHER10,FINHER11,FINHER12 +---> FINHER13,FINHER14,FINHER15,FINHER16,FINHER17 +;******************************************************************* +; +; New character VS screen images +; +;******************************************************************* +PPP> 0 +ASM> MKVS3.TBL +C:\VIDEO\SUPERMK3\IMG\MKNUVS.IMG +PON> +---> REPGRAY1A +---> REPFLESH1A +---> REPGREEN1A +---> KITGRAY1A +---> KITFLESH1A +---> KITBLUE1A +---> JADFGRAY1A +---> JADFLESH1A +---> JADGREEN1A +---> SCORPGRAY1A +---> SCORPFLESH1A +---> SCORPYELO1A +---> SCORPSKULL1A +POF> +---> REPGRAY1B,REPGRAY1C,REPGRAY1D +---> REPFLESH1B,REPFLESH1C,REPFLESH1D +---> REPGREEN1B,REPGREEN1C,REPGREEN1D,REPGREEN1E +---> KITGRAY1B,KITGRAY1C +---> KITFLESH1B,KITFLESH1C,KITFLESH1D,KITFLESH1E,KITFLESH1F,KITFLESH1G +---> KITBLUE1B,KITBLUE1C,KITBLUE1D,KITBLUE1E +---> JADFGRAY1B,JADFGRAY1C,JADFGRAY1D,JADFGRAY1E,JADFGRAY1F,JADFGRAY1G +---> JADFLESH1B,JADFLESH1C,JADFLESH1D,JADFLESH1E,JADFLESH1F,JADFLESH1G +---> JADFLESH1H,JADFLESH1I +---> JADGREEN1B,JADGREEN1C,JADGREEN1D,JADGREEN1E,JADGREEN1F +---> SCORPGRAY1B,SCORPGRAY1C,SCORPGRAY1D,SCORPGRAY1E,SCORPGRAY1F,SCORPGRAY1G +---> SCORPGRAY1H +---> SCORPFLESH1B,SCORPFLESH1C,SCORPFLESH1D,SCORPFLESH1E +---> SCORPYELO1B,SCORPYELO1C,SCORPYELO1D,SCORPYELO1E +;************************************************************************** +; +; Fatalities +; +;************************************************************************** +PPP> 0 +ASM> MKFATAL.TBL +C:\VIDEO\supermk3\IMG\KANO12.IMG +PON> +---> MAINBONE1A +POF> +---> MAINBONE3A,MAINBONE3B,MAINBONE3C,MAINBONE4A +---> MAINBONE4B,MAINBONE5A,MAINBONE5B,MAINBONE6A,MAINBONE6B +---> MAINBONE2A,MAINBONE3A,MAINBONE3B,MAINBONE3C,MAINBONE4A,MAINBONE4B +---> INMOUTH3A,INMOUTH4A +---> INMOUTH5A,INMOUTH6A,INMOUTH6B,INMOUTH6C,INMOUTH8A,INSKELEG1A +---> INSKELEG1B,INSKELEG1C +---> JXMOUTH3A,JXMOUTH4A,JXMOUTH5A,JXMOUTH6A,JXMOUTH6B,JXMOUTH8A +---> JXSKELEG1A,JXSKELEG1B +---> KLMOUTH3A,KLMOUTH4A,KLMOUTH5A,KLMOUTH6A,KLMOUTH6B +---> KLMOUTH6C,KLMOUTH8A,KLSKELEG1A,KLSKELEG1B,KLSKELEG1C +---> LIMOUTH3A,LIMOUTH4A +---> LIMOUTH5A,LIMOUTH6A,LIMOUTH6B,LIMOUTH6C,LIMOUTH8A,LISKELEG1A +---> LISKELEG1B,LISKELEG1C +---> LUMOUTH3A,LUMOUTH4A,LUMOUTH5A,LUMOUTH6A,LUMOUTH6B,LUMOUTH6C +---> LUMOUTH8A,LUSKELEG1A,LUSKELEG1B,LUSKELEG1C +---> OBMOUTH3A,OBMOUTH4A,OBMOUTH5A +---> OBMOUTH6A,OBMOUTH6B,OBMOUTH6C,OBMOUTH8A,OBSKELEG1A +---> OBSKELEG1B,RBMOUTH3A,RBMOUTH3B +---> RBMOUTH3C,RBMOUTH4A,RBMOUTH4B,RBMOUTH4C,RBMOUTH5A,RBMOUTH5B,RBMOUTH5C +---> RBMOUTH6A,RBMOUTH6B,RBMOUTH6C,RBMOUTH8A,RBSKELEG1A +---> RBSKELEG1B,ROBOBONE1A,ROBOBONE2A,ROBOBONE3A,ROBOBONE3B,ROBOBONE4A +---> ROBOBONE4B,ROBOBONE4C +---> SBMOUTH3A,SBMOUTH3B,SBMOUTH4A,SBMOUTH4B,SBMOUTH5A +---> SBMOUTH5B,SBMOUTH6A,SBMOUTH6B,SBMOUTH6C,SBMOUTH8A,SBSKELEG1A +---> SBSKELEG1B,SGMOUTH3A,SGMOUTH4A +---> SGMOUTH5A,SGMOUTH6A,SGMOUTH6B,SGMOUTH6C,SGMOUTH8A +---> SGOROBONE1A,SGOROBONE2A,SGOROBONE2B,SGOROBONE3A,SGOROBONE3B +---> SGOROBONE3C,SGOROBONE4A,SGOROBONE4B,SGSKELEG1A,SGSKELEG1B,SGSKELEG1C +---> SZMOUTH3A,SZMOUTH4A,SZMOUTH5A +---> SZMOUTH6A,SZMOUTH6B,SZMOUTH8A,SZSKELEG1A,SZSKELEG1B +---> TRMOUTH3A,TRMOUTH4A,TRMOUTH5A +---> TRMOUTH6A,TRMOUTH6B,TRMOUTH8A,TRSKELEG1A,TRSKELEG1B +---> TSMOUTH3A,TSMOUTH4A,TSMOUTH5A +---> TSMOUTH6A,TSMOUTH6B,TSMOUTH8A,TSSKELEG1A,TSSKELEG1B +---> KNRIPSKEL1A,KNRIPSKEL1B,KNRIPSKEL2A,KNRIPSKEL2B,KNRIPSKEL3A +---> KNRIPSKEL3B,KNRIPSKEL4A,KNRIPSKEL4B,KNRIPSKEL5A,KNRIPSKEL5B +---> KNRIPSKEL7A,KNRIPSKEL7B,KNRIPSKEL8A +---> KNRIPSKEL8B,KNRIPSKEL8C,KNRIPSKEL9A,KNRIPSKEL9B,KNRIPSKEL9C +---> KNMOUTH3A,KNMOUTH4A,KNMOUTH5A,KNMOUTH6A +---> KNMOUTH8A,KNSKELEG1A,KNSKELEG1B +C:\VIDEO\SUPERMK3\IMG\NUMOUTH.IMG +---> KTMOUTH4,KTMOUTH5,KTMOUTH6,KTMOUTH8,KTSKELEG,SCMOUTH4,SCMOUTH5 +---> SCMOUTH6,SCMOUTH8,SCSKELEG +C:\VIDEO\supermk3\IMG\SKELFIRE.IMG +PON> +---> SBFIRE1,SBFIRE2 +---> ROBOFIRE1,ROBOFIRE7 +---> SKELFIRE1A +POF> +---> SKELFIRE2A,SKELFIRE3A,SKELFIRE4A,SKELFIRE5A,SKELFIRE6A +---> SKELFIRE7A,SKELFIRE7B,SKELFIRE8A,SKELFIRE8B,SKELFIRE9A,SKELFIRE9B +---> SKELFIRE10A,SKELFIRE10B,SKELFIRE11A,SKELFIRE11B,SKELFIRE12A +---> SKELFIRE12B,SKELFIRE13A,SKELFIRE13B,SKELFIRE14A,SKELFIRE14B +---> SKELFIRE15A,SKELFIRE15B,SKELFIRE16A,SKELFIRE16B,SKELFIRE17A +---> SKELFIRE17B,SKELFIRE18A,SKELFIRE18B,SKELFIRE19A,SKELFIRE20A +---> SKELFIRE21A,SKELFIRE22A,SKELFIRE23A,SKELFIRE24A +---> ROBOFIRE2,ROBOFIRE3,ROBOFIRE4,ROBOFIRE5,ROBOFIRE6 +ASM> MKKANO2.TBL +C:\VIDEO\supermk3\IMG\KANO11.IMG +PON> +---> LASEREYE1A +POF> +---> LASEREYE2A,LASEREYE3A,LASEREYE4A +---> LASEREYE5A,LASEREYE6A,LASEREYE7A,LASEREYE8A,LASEREYE9A,LASEREYE10A +---> LASEREYE11A,LASEREYE12A,LASEREYE13A,LASEREYE14A,LASEREYE15A +---> LASEREYE16A,LASEREYE17A,LASEREYE18A,LASEREYE19A +---> KNSCARED2A +ASM> MKSONYA2.TBL +C:\VIDEO\supermk3\IMG\BLADE11.IMG +PON> +---> SPARKISS1,KISSORB1 +POF> +---> SPARKISS2 +---> KISSORB2,KISSORB3,KISSORB4,KISSORB5 +---> KISSORB6,KISSORB7,KISSORB8,KISSORB9,KISSORB10,KISSORB11,KISSORB12 +---> KISSORB13,KISSORB14,KISSORB15,KISSORB16 +---> SBDEATHLEG1A,SBDEATHLEG1B,SBDEATHKISS1A,SBDEATHKISS2A,SBDEATHKISS3A +---> SBDEATHKISS4A,SBDEATHKISS5A,SBDEATHKISS6A,SBDEATHKISS7A,SBDEATHKISS8A +---> SBDEATHKISS9A,SBDEATHKISS10A,SBDEATHKISS10B,SBDEATHKISS11A,SBDEATHKISS11B +C:\VIDEO\supermk3\IMG\BLADE11.IMG +---> ENGBALL1,ENGBALL2,ENGBALL3,ENGBALL4,ENGBALL5,ENGBALL6,ENGBALL7 +---> ENGBALL8,ENGBALL9,ENGBALL10,ENGBALL11,ENGBALL12,ENGBALL13,ENGBALL14 +---> ENGBALL15A,ENGBALL15B,ENGBALL16,ENGBALL17,ENGBALL18 +---> GUTS +---> SBSCARED2A +; +; jax +; +ASM> MKJAX2.TBL +C:\VIDEO\supermk3\IMG\JAX9.IMG +---> JXSCARED1A +C:\VIDEO\supermk3\IMG\JAX11.IMG +---> JXSLICER1A,JXSLICER1B,JXSLICER2A,JXSLICER2B,JXSLICER3A,JXSLICER3B +---> JXSLICER4A,JXSLICER4B,JXSLICER5A,JXSLICER5B,JXSLICER6A,JXSLICER6B +---> JXSLICER7A,JXSLICER7B,JXSLICER8A,JXSLICER8B,JXSLICER9A,JXSLICER9B +---> JXSLICER10A,JXSLICER10B,JXSLICER11A,JXSLICER11B,JXSLICER12A +---> JXSLICER12B,JXSLICER12C,JXSLICER13A,JXSLICER13B,JXSLICER13C +---> JXSLICER14A,JXSLICER14B +---> JAXBIGBOOT +ZOF> +---> JAXGROWFINA,JAXGROWFINB +ZON> +; +; indian +; +ASM> MKIND3.TBL +C:\VIDEO\supermk3\IMG\INDIAN10.IMG +---> INSKYLIGHT2A,INSKYLIGHT2B,INSKYLIGHT4A,INSKYLIGHT4B,INSKYLIGHT5A +---> INSKYLIGHT5B,INSKYLIGHT6A,INSKYLIGHT6B,INSKYLIGHT7A,INSKYLIGHT7B +---> INSKYLIGHT8A,INSKYLIGHT8B,INSKYLIGHT9A,INSKYLIGHT9B +C:\VIDEO\supermk3\IMG\INDIAN11.IMG +PON> +---> ZAP2A +POF> +---> ZAP2B,ZAP2C,ZAP2D,ZAP2E,ZAP2F,ZAP2G,ZAP3A,ZAP3B,ZAP3C,ZAP3D +---> ZAP3E,ZAP3F,ZAP3G,ZAP3H,ZAP3I,ZAP3J,ZAP4A,ZAP4B,ZAP4C,ZAP4D,ZAP4E +---> ZAP4F,ZAP4G,ZAP4H,ZAP4I,ZAP4J,ZAP5A,ZAP5B,ZAP5C,ZAP5D,ZAP5E,ZAP5F +---> ZAP5G,ZAP5H,ZAP5I,ZAP6A,ZAP6B,ZAP6C,ZAP6D,ZAP6E,ZAP6F,ZAP6G,ZAP6H +---> ZAP6I,ZAP7A,ZAP7B,ZAP7C,ZAP7D,ZAP7E,ZAP7F,ZAP7G,ZAP7H,ZAP7I,ZAP8A +---> ZAP8B,ZAP8C,ZAP8D,ZAP8E,ZAP8F,ZAP8G,ZAP8H,ZAP8I,ZAP9A,ZAP9B,ZAP9C +---> ZAP9D,ZAP9E,ZAP9F,ZAP9G,ZAP9H,ZAP9I,ZAP10A,ZAP10B,ZAP10C,ZAP10D,ZAP10E +---> ZAP10F,ZAP10G,ZAP10H,ZAP10I,ZAP11A,ZAP11B,ZAP11C,ZAP11D,ZAP11E,ZAP11F +---> ZAP11G,ZAP11H,ZAP11I,ZAP12A,ZAP12B,ZAP12C,ZAP12D,ZAP12E,ZAP12F,ZAP12G +---> ZAP12H,ZAP12I,ZAP13A,ZAP13B,ZAP13C,ZAP13D,ZAP13E,ZAP13F,ZAP13G,ZAP13H +---> ZAP13I,ZAP13J,ZAP14A,ZAP14B,ZAP14C,ZAP14D,ZAP14E,ZAP14F,ZAP14G,ZAP14H +---> ZAP14I,ZAP15A,ZAP15B,ZAP15C,ZAP15D,ZAP15E,ZAP15F,ZAP15G +PON> +---> ZAPSKEL1A +POF> +---> ZAPSKEL1B,ZAPSKEL2A,ZAPSKEL2B,ZAPSKEL3A,ZAPSKEL3B,ZAPSKEL4A,ZAPSKEL4B +---> ZAPSKEL4C,ZAPSKEL4D,ZAPSKEL5A,ZAPSKEL5B,ZAPSKEL5C,ZAPSKEL5D,ZAPSKEL6A +---> ZAPSKEL6B,ZAPSKEL6C,ZAPSKEL6D,ZAPSKEL7A,ZAPSKEL7B,ZAPSKEL7C,ZAPSKEL7D +---> ZAPSKEL8A,ZAPSKEL8B,ZAPSKEL8C,ZAPSKEL8D,ZAPSKEL9A,ZAPSKEL9B,ZAPSKEL9C +---> ZAPSKEL10A,ZAPSKEL10B +---> ASH +C:\VIDEO\supermk3\IMG\INDIAN12.IMG +PON> +---> INLIGHTNG1A +POF> +---> INLIGHTNG1B,INLIGHTNG1C,INLIGHTNG2A,INLIGHTNG2B +---> INLIGHTNG2C,INLIGHTNG2D,INLIGHTNG3A,INLIGHTNG3B,INLIGHTNG4A +---> INLIGHTNG4B,INLIGHTNG5A,INLIGHTNG5B,INLIGHTNG5C,INLIGHTNG6A +---> INLIGHTNG6B,INLIGHTNG6C,INLIGHTNG7A,INLIGHTNG7B,INLIGHTNG7C +---> INLIGHTNG7D,INLIGHTNG8A,INLIGHTNG8B,INLIGHTNG8C,INLIGHTNG8D +---> INLIGHTNG9A,INLIGHTNG10A,INLIGHTNG11A,INLIGHTNG12A,INLIGHTNG12B +---> INLIGHTNG12C,INLIGHTNG12D,INLIGHTNG13A,INLIGHTNG14A +---> INAXEFATAL2A,INAXEFATAL2B +---> INAXEFATAL4A,INAXEFATAL4B,INAXEFATAL5A,INAXEFATAL5B,INAXEFATAL6A +---> INAXEFATAL6B,INAXEFATAL6C +C:\VIDEO\supermk3\IMG\INDIAN10.IMG +---> INSCARED2A +; +; subzero +; +ASM> MKSZ2.TBL +C:\VIDEO\supermk3\IMG\SUBZ10.IMG +---> SZSCARED2A +---> SZICEBREAK2A,SZICEBREAK2B,SZICEBREAK3A +---> SZICEBREAK3B,SZICEBREAK4A,SZICEBREAK4B,SZICEBREAK5A,SZICEBREAK5B +---> SZICEBREAK6A,SZICEBREAK6B,SZICEBREAK7A,SZICEBREAK7B,SZICEBREAK8A +---> SZICEBREAK8B +C:\VIDEO\supermk3\IMG\SUBZ11.IMG +---> TINYICE1,TINYICE2,TINYICE3,TINYICE4,TINYICE5 +---> TINYICE6,TINYICE7,TINYICE8,TINYICE9,TINYICE10,TINYICE11,TINYICE12 +PON> +---> ICEMAN1A +POF> +---> ICEMAN2A,ICEMAN3A,ICEMAN3B,ICEMAN4A,ICEMAN4B,ICEMANHIT1A +---> ICEMANHIT2A,ICEMANHIT3A,ICEMANHIT4A +PON> +---> ICEBLOW1A +POF> +---> ICEBLOW2A,ICEBLOW3A +---> ICEBLOW4A,ICEBLOW5A,ICEBLOW6A,ICEBLOW7A,ICEBLOW7B,ICEBLOW8A,ICEBLOW8B +---> ICEBLOW8C,ICEBLOW9A,ICEBLOW9B,ICEBLOW9C,ICEBLOW10A,ICEBLOW10B +---> ICEBLOW10C,ICEBLOW11A,ICEBLOW11B,ICEBLOW11C,ICEBLOW11D +PON> +---> ICETHUD1A +POF> +---> ICETHUD2A,ICETHUD2B,ICETHUD3A,ICETHUD3B,ICETHUD4A,ICETHUD4B,ICETHUD5A +---> ICETHUD5B,ICETHUD6A,ICETHUD6B,ICETHUD7A,ICETHUD7B,ICETHUD7C,ICETHUD7D +---> ICETHUD8A,ICETHUD8B,ICETHUD8C,ICETHUD8D,ICETHUD9A,ICETHUD9B,ICETHUD9C +---> ICETHUD9D +C:\VIDEO\supermk3\IMG\SUBZ7.IMG +---> SZBLOWICE1A,SZBLOWICE1B,SZBLOWICE2A,SZBLOWICE2B +; +; Swat +; +ASM> MKSWAT3.TBL +C:\VIDEO\supermk3\IMG\SWAT9.IMG +---> OBSCARED3A +---> OBSETBOMB1A,OBSETBOMB1B,OBSETBOMB2A,OBSETBOMB2B,OBSETBOMB3A +---> OBSETBOMB3B,OBSETBOMBLEG1A,OBSETBOMBLEG1B,OBSETBOMB4A,OBSETBOMB5A +---> OBSETBOMB6A +---> OBCOVEREAR2A,OBCOVEREAR2B,OBCOVEREAR4A,OBCOVEREAR4B +C:\VIDEO\supermk3\IMG\SWAT10.IMG +;PON> +;---> HUGEXPD01 +;---> WICK1 +;POF> +;---> WICK2,WICK3,WICK4,WICK5,WICK6,WICK7,WICK8,WICK9,WICK10 +;---> WICK11 +PON> +---> EXPLOSIVES1 +POF> +C:\VIDEO\supermk3\IMG\SWAT11.IMG +---> OBTAZAR4A,OBTAZAR4B,OBTAZAR5A,OBTAZAR5B,OBTAZAR6A,OBTAZAR6B,OBTAZAR7A +---> OBTAZAR7B,OBTAZAR7C,OBTAZAR8A,OBTAZAR8B +---> OBTAZAR10A,OBTAZAR10B,OBTAZAR10C +---> OBTAZAR11A,OBTAZAR11B,OBTAZAR11C +ASM> MKFATAL.TBL +; +; reduce here !!!! +; +C:\VIDEO\supermk3\IMG\MKSHOCK.IMG +PON> +---> TSBUZZ1 +POF> +---> TSBUZZ2,TSBUZZ3,TSBUZZ4,INBUZZ1,INBUZZ2,INBUZZ3,INBUZZ4 +---> SZBUZZ1,SZBUZZ2,SZBUZZ3,SZBUZZ4,TRBUZZ1,TRBUZZ2,TRBUZZ3,TRBUZZ4 +---> LIBUZZ1,LIBUZZ2,LIBUZZ3,LIBUZZ4,OBBUZZ1,OBBUZZ2,OBBUZZ3,OBBUZZ4 +---> RBBUZZ1,RBBUZZ2,RBBUZZ3,RBBUZZ4,JXBUZZ1,JXBUZZ2,JXBUZZ3,JXBUZZ4 +---> KLBUZZ1,KLBUZZ2,KLBUZZ3,KLBUZZ4,SBBUZZ1,SBBUZZ2,SBBUZZ3,SBBUZZ4 +---> SGBUZZ1,SGBUZZ2,SGBUZZ3,SGBUZZ4,KNBUZZ1,KNBUZZ2,KNBUZZ3,KNBUZZ4 +---> LUBUZZ1,LUBUZZ2,LUBUZZ3,LUBUZZ4 +C:\VIDEO\SUPERMK3\IMG\NUSHOCK.IMG +---> SCBUZZ1,SCBUZZ2,SCBUZZ3,SCBUZZ4,KTBUZZ1,KTBUZZ2,KTBUZZ3,KTBUZZ4 +; +; Lia +; +ASM> MKLIA3.TBL +C:\VIDEO\supermk3\IMG\LIA10.IMG +---> LISCARED3A +;********************************************************************** +;********************************************************************** +;********************************************************************** +;********************************************************************** +C:\VIDEO\supermk3\IMG\RIPFLESH.IMG +PON> +---> SMDRIP1 +---> SKELRIP1A +---> SGOROSKEL1A +POF> +---> SMDRIP2,SMDRIP3,SMDRIP4,SMDRIP5,SMDRIP6,SMDRIP7,SMDRIP8,SMDRIP9 +---> SKELRIP1B,SKELRIP2A,SKELRIP2B,SKELRIP3A,SKELRIP3B +---> SGOROSKEL1B,SGOROSKEL2A,SGOROSKEL2B,SGOROSKEL3A,SGOROSKEL3B +PON> +---> KLRIP1A +---> OBRIP1A +---> LARIP1A +---> SNRIP1A +---> KARIP1A +---> SGRIP1A +---> JXRIP1A +---> JXRIP4A +---> LURIP1A +---> TSRIP1A +---> TRRIP1A +---> INRIP1A +---> SZRIP1A +---> RBRIP1A +POF> +---> KLRIP1B +---> OBRIP1B +---> LARIP1B +---> SNRIP1B +---> KARIP1B +---> SGRIP1B +---> JXRIP1B +---> JXRIP4B +---> LURIP1B +---> TSRIP1B +---> TRRIP1B +---> INRIP1B +---> SZRIP1B +---> RBRIP1B +c:\video\supermk3\img\ripfles2.img +PON> +---> KTRIP1A +---> SCRIP1A +POF> +---> KTRIP1B +---> SCRIP1B +; +; Robo +; +ASM> MKROBO2.TBL +C:\VIDEO\supermk3\IMG\ROBO11.IMG +---> RBLAFF2A,RBLAFF2B,RBLAFF3A,RBLAFF3B,RBLAFF4A +---> RBLAFF4B,RBLAFF5A,RBLAFF5B,RBLAFF6A,RBLAFF6B +PON> +---> RBDISPLAY1A +POF> +---> RBDISPLAY1B +---> RBDISPLAY2A,RBDISPLAY2B,RBDISPLAY3A,RBDISPLAY3B,RBDISPLAY3C +---> RBDESTRUCT2A,RBDESTRUCT2B +---> RBDESTRUCT3A,RBDESTRUCT3B,RBDESTRUCT4A,RBDESTRUCT5A,RBDESTRUCT6A +---> RBDESTRUCT7A,HEADSPINBODY,HEADA1,HEADA2,HEADA3,HEADA4,HEADA5,HEADA6 +---> HEADA7,HEADA8,HEADB1,HEADB2,HEADB3,HEADB4,HEADB5,HEADB6,HEADB7,HEADB8 +---> HEADC1,HEADC2,HEADC3,HEADC4,HEADC5,HEADC6,HEADC7,HEADC8 +C:\VIDEO\supermk3\IMG\ROBO9.IMG +---> RBFLAMEON1A,RBFLAMEON1B,RBFLAMEON2A,RBFLAMEON2B,RBFLAMEON3A,RBFLAMEON3B +C:\VIDEO\supermk3\IMG\ROBO12.IMG +---> RBSCARED2A +; +; Lao +; +ASM> MKLAO3.TBL +C:\VIDEO\supermk3\IMG\LAO10.IMG +---> KLSCARED3A +C:\VIDEO\supermk3\IMG\LAO11.IMG +PON> +---> LAOTOP1A +POF> +---> LAOTOP2B,LAOTOP3C,LAOTOP4D,LAOTOP5E,LAOTOP6F +PON> +---> SLICEHAT1 +POF> +C:\VIDEO\supermk3\IMG\MKCUTUP.IMG +PON> +---> INCUTUP1A,INCUTUP1B,INCUTUP1C,INCUTUP1D,JXCUTUP1A,JXCUTUP1B,JXCUTUP1C +---> JXCUTUP1D,KLCUTUP1A,KLCUTUP1B,KLCUTUP1C,KLCUTUP1D,KNCUTUP1A,KNCUTUP1B +---> KNCUTUP1C,KNCUTUP1D,LICUTUP1A,LICUTUP1B,LICUTUP1C,LICUTUP1D,LUCUTUP1A +---> LUCUTUP1B,LUCUTUP1C,LUCUTUP1D,OBCUTUP1A,OBCUTUP1B,OBCUTUP1C,OBCUTUP1D +---> RBCUTUP1A,RBCUTUP1B,RBCUTUP1C,RBCUTUP1D,SBCUT1A,SBCUT1B,SBCUT1C +---> SBCUT1D,SHCUTUP1A,SHCUTUP1B,SHCUTUP1C,SHCUTUP1D,SZCUTUP1A,SZCUTUP1B +---> SZCUTUP1C,SZCUTUP1D,TRCUTUP1A,TRCUTUP1B,TRCUTUP1C,TRCUTUP1D,TSCUTUP1A +---> TSCUTUP1B,TSCUTUP1C,TSCUTUP1D +C:\VIDEO\SUPERMK3\IMG\NUCUTS.IMG +---> KTCAT1A,KTCAT1B,KTCAT1C,KTCAT1D,SCCUT1A,SCCUT1B,SCCUT1C,SCCUT1D +POF> +; +; Sheeva +; +ASM> MKSG2.TBL +C:\VIDEO\supermk3\IMG\FEMGORO9.IMG +---> SGBIGPOUND5A,SGBIGPOUND5B +---> SGBIGPOUND6A,SGBIGPOUND6B,SGBIGPOUND7A,SGBIGPOUND7B,SGBIGPOUND8A +---> SGBIGPOUND8B,SGBIGPOUND9A,SGBIGPOUND9B,SGBIGPOUND10A,SGBIGPOUND10B +---> SGBIGPOUND11A,SGBIGPOUND11B,SGBIGPOUND12A,SGBIGPOUND12B,SGBIGPOUND13A +---> SGBIGPOUND13B,SGBIGPOUND14A,SGBIGPOUND14B,SGBIGPOUND15A,SGBIGPOUND15B +---> SGBIGPOUND16A,SGBIGPOUND16B,SGBIGPOUND17A,SGBIGPOUND17B +---> SGRIPFLESH2A,SGRIPFLESH2B,SGRIPFLESH4A,SGRIPFLESH4B +---> SGRIPFLESH5A,SGRIPFLESH5B,SGRIPFLESH6A,SGRIPFLESH6B +---> SGRIPFLESH7A,SGRIPFLESH7B,SGRIPFLESH8A,SGRIPFLESH8B +---> SGSCARED2A +C:\VIDEO\supermk3\IMG\FEMGOR10.IMG +PON> +---> CRACK3A +POF> +;************************************************************************ +; +; Blood (cont) +; +;************************************************************************ +PPP> 0 +ASM> MKBLOOD2.TBL +c:\video\supermk3\img\MKGUTS.IMG +---> BOTARM02,BOTARM03,BOTARM04,BOTARM05,BOTARM06 +---> BOTARM07,BOTARM08,BOTARM09,BOTARM10,BOTARM11,BOTARM12 +;********************************************************************** +; +; Extra Images +; +;********************************************************************** +PPP> 0 +C:\VIDEO\supermk3\IMG\MKTEXT.IMG +PON> +---> FRIEN01 +POF> +---> FRIEN02,FRIEN03,FRIEN04,FRIEN05 +PON> +---> DSHIP01 +POF> +---> DSHIP02,DSHIP03,DSHIP04,DSHIP05 +PON> +---> BABALITY1,BABALITY2,BABALITY3,BABALITY4 +---> BABALITY5,BABALITY6,BABALITY7,BABALITY8 +---> ANIMALITY01 +POF> +---> ANIMALITY02,ANIMALITY03,ANIMALITY04,ANIMALITY05,ANIMALITY06 +---> ANIMALITY07,ANIMALITY08,ANIMALITY09,ANIMALITY10,ANIMALITY11,ANIMALITY12 +ASM> MKLIATMP.TBL +C:\VIDEO\supermk3\IMG\LIA9.IMG +PON> +---> LISIDEFLASH +---> LISIDESPIT1 +POF> +---> LISIDESPIT2,LISIDESPIT3,LISIDESPIT4,LISIDESPIT5 +---> LISIDESPIT6,LISIDESPIT7,LISIDESPIT8,LISIDESPIT9 +ASM> MKFATAL2.TBL +C:\VIDEO\supermk3\IMG\MKGAMES.IMG +PON> +---> MK1GAME,MK2GAME +POF> +C:\VIDEO\supermk3\IMG\MKMINI.IMG +PON> +---> TRTINYSTUN1A,TRTINYFALL1A,LITINYSTUN1A,LITINYFALL1A,SHTINYSTUN1A +---> SHTINYFALL1A,LKTINYSTUN1A,LKTINYFALL1A,SZTINYSTUN1A,SZTINYFALL1A +---> INTINYSTUN1A,INTINYFALL1A,OBTINYSTUN1A,OBTINYFALL1A,RBTINYSTUN1A +---> RBTINYFALL1A,JXTINYSTUN1A,JXTINYFALL1A,TSTINYSTUN1A,TSTINYFALL1A +---> KLTINYSTUN1A,KLTINYFALL1A,SBTINYSTUN1A,SBTINYFALL1A,KNTINYSTUN1A +---> KNTINYFALL1A +C:\VIDEO\SUPERMK3\IMG\MKMINI2.IMG +---> SCTINYFALL1A,SCTINYSTUN1A,KTTINYSTUN1A,KTTINYFALL1A +POF> +ASM> MKKENT.TBL +C:\VIDEO\supermk3\IMG\KENTART.IMG +PON> +---> expld1,expld2,expld3,expld4,expld5,expld6,expld7,expld8,ship1,ship2 +---> ship3,ship4,enemy1,enemy3,enemy5 +---> enemy9 +POF> +;********************************************************************** +; +; Define boonpal +; +;********************************************************************** +PPP> 0 +ASM> IMGTBL.ASM +PON> +C:\video\supermk3\img\boonpics.img +---> boonpic_a +;********************************************************************** +; +; Rain +; +;********************************************************************** +ZOF> +CON> +PPP> 3 +ASM> MKRAIN.TBL +c:\video\supermk3\img\RAIN.IMG +---> DROP1,DROP2,DROP3,DROP4,DROPHIT1,DROPHIT2 +ZON> +COF> +;********************************************************************** +; +; score area images +; +;********************************************************************** +PPP> 0 +ASM> MKSCORE.TBL +C:\VIDEO\supermk3\IMG\MKPOWER.IMG +COF> +PON> +;---> KOMBATZONE1 +---> INSERTCOIN +---> PUSHSTART +---> MEDAL1 +---> COUNTDOWN_0 +---> DANGER +---> damage_s,hits_s +POF> +---> COUNTDOWN_1,COUNTDOWN_2,COUNTDOWN_3,COUNTDOWN_4 +---> COUNTDOWN_5,COUNTDOWN_6,COUNTDOWN_7,COUNTDOWN_8,COUNTDOWN_9 +---> X_SHADWINS,X_SHADNUM1,X_SHADNUM2,X_SHADNUM3,X_SHADNUM4,X_SHADNUM5 +---> X_SHADNUM6,X_SHADNUM7,X_SHADNUM8,X_SHADNUM9,X_SHADNUM0 +---> PWRBAR_LA,PWRBAR_LB +---> PWRBAR_RA,PWRBAR_RB +---> N_JAX,N_KABAL,N_KANO,N_KINTARO,N_KUNGLAO,N_LIUKANG,N_MOTARO +---> N_NIGHTWOLF,N_SHANGTSUNG,N_SHAOKAHN,N_SHEEVA +---> N_SMOKE,N_SONYA,N_STRYKER,N_SUBZERO +---> N_SHAOKAHN,N_SINDEL,N_SEKTOR,N_CYRAX,N_NOOBSAIBOT +---> N_NAREB,N_KITANA,N_MILEENA,N_JADE,N_SCORPION,N_REPTILE,N_ERMAC +---> N_BOON,N_TOBIAS,N_BERAN,N_GOSKIE,N_VOGEL,N_MICHICICH,N_FORDEN +CON> +ASM> MKSEL2.TBL +PON> +;---> SMALLCOIN1 +---> MKCOIN_01 +POF> +;---> SMALLCOIN2,SMALLCOIN3,SMALLCOIN4,SMALLCOIN5,SMALLCOIN6 +;---> SMALLCOIN7,SMALLCOIN8,SMALLCOIN9 +---> MKCOIN_02,MKCOIN_03,MKCOIN_04,MKCOIN_05,MKCOIN_06,MKCOIN_07 +---> MKCOIN_08,MKCOIN_09 +PON> +c:\video\supermk3\img\boonpics.img +---> TXT_NOVICE,TXT_WARRIOR,TXT_MASTER +POF> +;********************************************************************** +; +; Text +; +;********************************************************************** +ZON> +COF> +PPP> 0 +ASM> MKTEXT.TBL +c:\video\supermk3\img\MKFONT.IMG +---> MK2FONTgrt,MK2FONTequ +C:\video\supermk3\img\FBFONT7.IMG +---> FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and +---> FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus +---> FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 +---> FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 +---> FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more,FONT7quest +---> FONT7line +---> FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H +---> FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P +---> FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X +---> FONT7Y,FONT7Z +C:\VIDEO\supermk3\IMG\MK3FONTS.IMG +PON> +---> BIGFONT_0,BIGFONT_1,BIGFONT_2,BIGFONT_3,BIGFONT_4,BIGFONT_5,BIGFONT_6 +---> BIGFONT_7,BIGFONT_8,BIGFONT_9 +POF> +---> BIGFONT_A,BIGFONT_B,BIGFONT_C,BIGFONT_D,BIGFONT_E,BIGFONT_F,BIGFONT_G +---> BIGFONT_H,BIGFONT_I,BIGFONT_J,BIGFONT_K,BIGFONT_L,BIGFONT_M,BIGFONT_N +---> BIGFONT_O,BIGFONT_P,BIGFONT_Q,BIGFONT_R,BIGFONT_S,BIGFONT_T,BIGFONT_U +---> BIGFONT_V,BIGFONT_W,BIGFONT_X,BIGFONT_Y,BIGFONT_Z +---> BIGFONT_PER,BIGFONT_COL,BIGFONT_COM,BIGFONT_EXC,BIGFONT_MIN +---> BIGFONT_PERC,BIGFONT_PR1,BIGFONT_PR2,BIGFONT_QUE,BIGFONT_SLA +C:\VIDEO\supermk3\IMG\MK3FONTS.IMG +---> SMALLFONT_A,SMALLFONT_B,SMALLFONT_C,SMALLFONT_D,SMALLFONT_E +---> SMALLFONT_F,SMALLFONT_G,SMALLFONT_H,SMALLFONT_I,SMALLFONT_J +---> SMALLFONT_K,SMALLFONT_L,SMALLFONT_M,SMALLFONT_N,SMALLFONT_O +---> SMALLFONT_P,SMALLFONT_Q,SMALLFONT_R,SMALLFONT_S,SMALLFONT_T +---> SMALLFONT_U,SMALLFONT_V,SMALLFONT_W,SMALLFONT_X,SMALLFONT_Y +---> SMALLFONT_Z,SMALLFONT_0,SMALLFONT_1,SMALLFONT_2,SMALLFONT_3 +---> SMALLFONT_4,SMALLFONT_5,SMALLFONT_6,SMALLFONT_7,SMALLFONT_8 +---> SMALLFONT_9 +---> SMALLFONT_PER,SMALLFONT_COL,SMALLFONT_COM,SMALLFONT_EXC,SMALLFONT_MIN +---> SMALLFONT_PERC,SMALLFONT_PR1,SMALLFONT_PR2,SMALLFONT_QUE,SMALLFONT_SLA +;************************************************************************ +; +; Old video game images +; +;************************************************************************ +ASM> MKDEF.TBL +c:\video\supermk3\img\DEFENDER.IMG +PON> +---> LANDER1,LANDER2,LANDER3,BAITER1,BAITER2,BAITER3,BAITER4,BAITER5 +---> BAITER6 +;c:\video\supermk3\img\BOONPICS.IMG +;---> PACMAN +c:\video\supermk3\img\robotron.img +---> grunt_1 +C:\VIDEO\supermk3\IMG\OSTRICH.IMG +---> ostrich1 +POF> +;************************************************************************ +; +; Fx images +; +;************************************************************************ +PPP> 0 +ASM> MKFX.TBL +C:\VIDEO\supermk3\IMG\MKROCKS.IMG +PON> +---> XPLODE01 +POF> +---> XPLODE02,XPLODE03,XPLODE04,XPLODE05,XPLODE06,XPLODE07 +---> XPLODE08,XPLODE09,XPLODE10,XPLODE11,XPLODE12 +PON> +---> SMALL01 +POF> +---> SMALL02,SMALL03,SMALL04,SMALL05,SMALL06 +---> SMALL07,SMALL08,SMALL09,SMALL10,SMALL11,SMALL12 +PON> +---> MEDIUM01 +POF> +---> MEDIUM02,MEDIUM03,MEDIUM04,MEDIUM05,MEDIUM06,MEDIUM07,MEDIUM08,MEDIUM09 +---> MEDIUM10,MEDIUM11,MEDIUM12 +PON> +---> LARGE01 +POF> +---> LARGE02,LARGE03,LARGE04,LARGE05,LARGE06,LARGE07,LARGE08,LARGE09 +---> LARGE10,LARGE11,LARGE12 +C:\VIDEO\supermk3\IMG\MKTEXT.IMG +PON> +---> FATALITY01,BDA_01 +---> MERCY_01 +POF> +---> FATALITY02,FATALITY03,FATALITY04,FATALITY05,FATALITY06 +---> FATALITY07,FATALITY08,FATALITY09,FATALITY10,FATALITY11,FATALITY12 +---> FATALITY13,FATALITY14,FATALITY15 +---> BDA_02,BDA_03,BDFLA_01 +---> BDFLA_02,BDFLA_03,BDFLA_04,BDFLA_05,BDFLA_06,BDFLA_07,BDFLA_08 +---> BDFLA_09,BDFLA_10,BDFLA_11,BDFLA_12,BDFLA_13 +---> MERCY_02,MERCY_03,MERCY_04,MERCY_05,MERCY_06,MERCY_07,MERCY_08,MERCY_09 +PON> +---> MERCY_10,MERCY_11,MERCY_12,MERCY_13 +POF> +c:\video\supermk3\img\ACID1.IMG +PON> +---> PUFF1 +POF> +---> PUFF2,PUFF3,PUFF4,PUFF5 +C:\VIDEO\supermk3\IMG\MKXPLODE.IMG +PON> +---> BIGXPLOD1A +POF> +---> BIGXPLOD2A,BIGXPLOD3A,BIGXPLOD4A,BIGXPLOD5A,BIGXPLOD6A +---> BIGXPLOD7A,BIGXPLOD8A,BIGXPLOD9A,BIGXPLOD10A,BIGXPLOD10B,BIGXPLOD11A +---> BIGXPLOD11B,BIGXPLOD12A,BIGXPLOD12B,BIGXPLOD13A,BIGXPLOD13B +---> BIGXPLOD14A,BIGXPLOD14B,BIGXPLOD15A,BIGXPLOD15B,BIGXPLOD16A,BIGXPLOD16B +PON> +---> SMALLXPD1 +POF> +---> SMALLXPD2,SMALLXPD3,SMALLXPD4,SMALLXPD5,SMALLXPD6,SMALLXPD7 +---> SMALLXPD8,SMALLXPD9,SMALLXPD10,SMALLXPD11,SMALLXPD12,SMALLXPD13 +---> SMALLXPD14,SMALLXPD15 +PON> +---> FLOORXPD1A +POF> +---> FLOORXPD3A,FLOORXPD4A,FLOORXPD6A +---> FLOORXPD8A,FLOORXPD10A,FLOORXPD11A,FLOORXPD11B +---> FLOORXPD11C,FLOORXPD12A,FLOORXPD12B,FLOORXPD13A,FLOORXPD13B +---> FLOORXPD14A,FLOORXPD14B +---> FLOORXPD16A,FLOORXPD16B,FLOORXPD16C,FLOORXPD17A,FLOORXPD17B +---> FLOORXPD17C,FLOORXPD17D,FLOORXPD18A,FLOORXPD18B +---> FLOORXPD20A,FLOORXPD20B +;PON> +;---> FLOORXPD1A +;POF> +;---> FLOORXPD2A,FLOORXPD3A,FLOORXPD4A,FLOORXPD5A,FLOORXPD6A +;---> FLOORXPD7A,FLOORXPD8A,FLOORXPD9A,FLOORXPD10A,FLOORXPD11A,FLOORXPD11B +;---> FLOORXPD11C,FLOORXPD12A,FLOORXPD12B,FLOORXPD13A,FLOORXPD13B +;---> FLOORXPD14A,FLOORXPD14B,FLOORXPD15A,FLOORXPD15B,FLOORXPD15C +;---> FLOORXPD16A,FLOORXPD16B,FLOORXPD16C,FLOORXPD17A,FLOORXPD17B +;---> FLOORXPD17C,FLOORXPD17D,FLOORXPD18A,FLOORXPD18B,FLOORXPD19A +;---> FLOORXPD19B,FLOORXPD20A,FLOORXPD20B,FLOORXPD21A,FLOORXPD21B +C:\VIDEO\supermk3\IMG\MKGUTS.IMG +PON> +---> ARM01,LEG01,ARM_B01,XLIMB01,BONE01,CAGE01,SKULL01,GOROARM01,LEG_B01 +POF> +---> ARM02,ARM03,ARM04,ARM05,ARM06,ARM07,ARM08,ARM09,ARM10,ARM11 +---> ARM12,ARM13,ARM14,ARM15,ARM16,ARM17,ARM18,ARM19 +---> ARM_B02,ARM_B03,ARM_B04,ARM_B05,ARM_B06,ARM_B07,ARM_B08,ARM_B09,ARM_B10 +---> ARM_B11,ARM_B12,LEG02,LEG03,LEG04,LEG05,LEG06,LEG07,LEG08,LEG09 +---> LEG10,LEG11,LEG12,LEG13,LEG14,LEG15,LEG16,LEG17,LEG18,LEG_B02 +---> LEG_B03,LEG_B04,LEG_B05,LEG_B06,LEG_B07,LEG_B08,LEG_B09,LEG_B10 +---> LEG_B11,LEG_B12,XLIMB02,XLIMB03,XLIMB04,XLIMB05,XLIMB06 +---> XLIMB07,XLIMB08,XLIMB09,XLIMB10,XLIMB11,XLIMB12 +---> BONE02,BONE03,BONE04,BONE05,BONE06 +;************************************************************************ +ASM> MKFREND3.TBL +C:\VIDEO\SUPERMK3\IMG\KITANA14.IMG +PON> +---> BUNNY1 +---> PUSSY1 +---> SKUNK1 +---> PUFF1 +POF> +---> BUNNY2,BUNNY3,BUNNY4,BUNNY5,BUNNY6 +---> PUSSY2,PUSSY3,PUSSY4 +---> PUSSY5,PUSSY6,PUSSY7,PUSSY8,PUSSY9,PUSSY10,PUSSY11,PUSSY12,PUSSY13 +---> PUSSY14,PUSSY15,PUSSY16,PUSSY17,PUSSY18,PUSSY19,PUSSY20,PUSSY21 +---> PUSSY22,PUSSY23,PUSSY24,PUSSY25,PUSSY26 +---> SKUNK2,SKUNK3,SKUNK4 +---> PUFF2,PUFF3,PUFF4,PUFF5 +;************************************************************************ +ASM> MKANIMA2.TBL +C:\VIDEO\SUPERMK3\IMG\SCORP12.IMG +PON> +---> MONKEY1,FROG1,FROGTUNG1,EGG1 +POF> +---> MONKEY2,MONKEY3,MONKEY4,MONKEY5 +---> FROG2,FROG3,FROG4,FROG5,FROG6,FROG7,FROG8 +---> PENGO1,PENGO2,PENGO3 +---> EGG2 +---> FROGTUNG2 +;************************************************************************ +;C:\VIDEO\SUPERMK3\IMG\MKCOINPG.IMG +;PON> +;---> TWO,ON,MORTAL,KOMBAT,PLAYER,TOURNAMENT +;---> CPNUM_0,CPNUM_1,CPNUM_2,CPNUM_3,CPNUM_4 +;---> CPNUM_5,CPNUM_6,CPNUM_7,CPNUM_8,CPNUM_9 +;POF> +;************************************************************************ +C:\VIDEO\SUPERMK3\IMG\MK3MORF2.IMG +PON> +---> MOFKIT1A +POF> +---> MOFKIT1B,MOFKIT2A,MOFKIT2B,MOFKIT3A,MOFKIT3B +PON> +---> MOFSCO1A +POF> +---> MOFSCO1B,MOFSCO2A,MOFSCO2B,MOFSCO3A,MOFSCO3B +;************************************************************************ +COF> +PPP> 0 +ASM> MKDMIL.TBL +C:\video\supermk3\img\boonpics.img +---> ENDMARKER + + \ No newline at end of file diff --git a/NEWLOAD2/MKFX2.TBL b/NEWLOAD2/MKFX2.TBL new file mode 100644 index 0000000..996a5bd --- /dev/null +++ b/NEWLOAD2/MKFX2.TBL @@ -0,0 +1,312 @@ + .DATA +BONE07: + .word 11,25,5,13 + .long 0a000000H + .word 06000H +BONE08: + .word 14,15,7,8 + .long 0a000672H + .word 06080H +BONE09: + .word 23,7,11,4 + .long 0a000a6eH + .word 06180H +BONE10: + .word 28,18,14,9 + .long 0a000d2eH + .word 06580H +BONE11: + .word 27,26,14,13 + .long 0a001202H + .word 06580H +BONE12: + .word 21,29,11,15 + .long 0a001986H + .word 06080H +CAGE02: + .word 29,23,17,8 + .long 0a00213aH + .word 06080H +CAGE03: + .word 29,20,18,9 + .long 0a002cf6H + .word 06080H +CAGE04: + .word 27,23,16,10 + .long 0a003852H + .word 06080H +CAGE05: + .word 24,25,14,11 + .long 0a004396H + .word 06080H +CAGE06: + .word 24,24,11,13 + .long 0a004eeaH + .word 06080H +CAGE07: + .word 29,25,14,14 + .long 0a005a72H + .word 06080H +CAGE08: + .word 30,22,14,12 + .long 0a006680H + .word 06080H +CAGE09: + .word 28,20,12,9 + .long 0a007276H + .word 06080H +CAGE10: + .word 27,24,12,12 + .long 0a007dbaH + .word 06080H +CAGE11: + .word 23,25,11,12 + .long 0a008918H + .word 06080H +CAGE12: + .word 22,25,13,10 + .long 0a0093d6H + .word 06080H +CAGE13: + .word 25,25,15,6 + .long 0a009ecaH + .word 06080H +CAGE14: + .word 28,25,16,1 + .long 0a00aa54H + .word 06080H +CAGE15: + .word 28,24,16,-5 + .long 0a00b5eaH + .word 06080H +CAGE16: + .word 29,22,17,-12 + .long 0a00c184H + .word 06080H +CAGE17: + .word 30,22,18,-18 + .long 0a00cd08H + .word 06080H +CAGE18: + .word 29,20,18,-24 + .long 0a00d8b0H + .word 06080H +CAGE19: + .word 30,19,18,-24 + .long 0a00e3f4H + .word 06080H +CAGE20: + .word 32,20,19,-24 + .long 0a00ef30H + .word 06480H +CAGE21: + .word 32,20,19,-24 + .long 0a00fb58H + .word 06080H +CAGE22: + .word 32,20,19,-24 + .long 0a01078cH + .word 06080H +CAGE23: + .word 32,20,19,-24 + .long 0a0113c0H + .word 06080H +CAGE24: + .word 32,21,19,-24 + .long 0a012018H + .word 06480H +SKULL02: + .word 21,16,11,9 + .long 0a012cdeH + .word 06080H +SKULL03: + .word 20,17,10,8 + .long 0a013304H + .word 06080H +SKULL04: + .word 18,18,8,9 + .long 0a013980H + .word 06080H +SKULL05: + .word 18,20,8,10 + .long 0a014022H + .word 06080H +SKULL06: + .word 19,19,10,9 + .long 0a014710H + .word 06080H +SKULL07: + .word 19,15,11,5 + .long 0a014ddeH + .word 06080H +SKULL08: + .word 21,16,11,6 + .long 0a0153d2H + .word 06080H +SKULL09: + .word 20,17,11,8 + .long 0a015a16H + .word 06080H +SKULL10: + .word 18,18,11,8 + .long 0a0160a4H + .word 06080H +SKULL11: + .word 18,20,11,9 + .long 0a016746H + .word 06080H +SKULL12: + .word 19,19,10,9 + .long 0a016e40H + .word 06080H +GOROARM02: + .word 29,26,16,8 + .long 0a01752cH + .word 06580H +GOROARM03: + .word 33,12,19,2 + .long 0a017d58H + .word 06480H +GOROARM04: + .word 30,18,19,5 + .long 0a018382H + .word 06180H +GOROARM05: + .word 23,32,16,13 + .long 0a018976H + .word 06080H +GOROARM06: + .word 12,40,9,19 + .long 0a019208H + .word 06080H +GOROARM07: + .word 23,38,14,21 + .long 0a019ca8H + .word 06080H +GOROARM08: + .word 37,27,19,16 + .long 0a01a6ccH + .word 06580H +GOROARM09: + .word 39,9,19,4 + .long 0a01af96H + .word 06480H +GOROARM10: + .word 34,26,16,12 + .long 0a01b65cH + .word 06580H +GOROARM11: + .word 24,41,10,18 + .long 0a01be34H + .word 06080H +GOROARM12: + .word 12,43,5,18 + .long 0a01c948H + .word 06080H +BLDXPD1A: + .word 28,47,28,24 + .long 0a01d4ccH + .word 06080H + .long BLDXPD_P +BLDXPD1B: + .word 28,47,0,24 + .long 0a01ecb2H + .word 06080H +BLDXPD2A: + .word 35,58,35,29 + .long 0a020498H + .word 06180H +BLDXPD2B: + .word 35,58,0,29 + .long 0a02289aH + .word 06480H +BLDXPD3A: + .word 42,69,42,34 + .long 0a024c9cH + .word 06180H +BLDXPD3B: + .word 42,69,0,34 + .long 0a027ddaH + .word 06480H +BLDXPD4A: + .word 48,78,48,39 + .long 0a02af18H + .word 06180H +BLDXPD4B: + .word 48,78,0,39 + .long 0a02ed34H + .word 06480H +BLDXPD5A: + .word 53,91,53,44 + .long 0a032b50H + .word 06280H +BLDXPD5B: + .word 53,91,0,44 + .long 0a037a8aH + .word 06880H +BLDXPD6A: + .word 60,101,60,48 + .long 0a03c9c4H + .word 06280H +BLDXPD6B: + .word 60,101,0,48 + .long 0a042896H + .word 06880H +BLDXPD7A: + .word 67,114,67,55 + .long 0a048744H + .word 06280H +BLDXPD7B: + .word 67,114,0,55 + .long 0a04fa6aH + .word 06880H +BLDXPD8A: + .word 75,125,74,60 + .long 0a056d60H + .word 06280H +BLDXPD8B: + .word 75,125,1,60 + .long 0a05f1a6H + .word 06880H +BLDXPD9A: + .word 82,137,81,65 + .long 0a0675c8H + .word 06280H +BLDXPD9B: + .word 82,137,1,65 + .long 0a07112aH + .word 06880H +BLDXPD10A: + .word 91,149,90,72 + .long 0a07ac86H + .word 06280H +BLDXPD10B: + .word 91,149,1,72 + .long 0a08652eH + .word 06980H +BLDXPD11A: + .word 102,163,101,80 + .long 0a092004H + .word 06780H +BLDXPD11B: + .word 102,163,1,80 + .long 0a09d940H + .word 06d80H +BLDXPD12A: + .word 114,168,114,81 + .long 0a0a9588H + .word 06b80H +BLDXPD12B: + .word 114,168,0,81 + .long 0a0b30c8H + .word 06f80H +BLDXPD13A: + .word 98,176,98,90 + .long 0a0bcea8H + .word 06b80H +BLDXPD13B: + .word 98,176,0,90 + .long 0a0c1088H + .word 06f80H + .TEXT + \ No newline at end of file diff --git a/NEWLOAD2/MKGMIL.LOD b/NEWLOAD2/MKGMIL.LOD new file mode 100644 index 0000000..f640181 --- /dev/null +++ b/NEWLOAD2/MKGMIL.LOD @@ -0,0 +1,29 @@ +;************************************************************** +; +; mk3: program area pics +; +;************************************************************** +;***> ffdf0000 +***> ffe78000 +ASM> MK3ZIP.TBL +FRM> ULT +FRM> E_KAN +FRM> E_SON +FRM> E_JAX +;FRM> E_IND +;FRM> E_SUB +;FRM> E_COP +;FRM> E_LIA +;FRM> E_SEK +;FRM> E_CYR +;FRM> E_LAO +;FRM> E_KAB +;FRM> E_SHE +;FRM> E_SHA +;FRM> E_LIU +;FRM> E_SMK +;FRM> GODS + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3cce7e8 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# nba-hangtime diff --git a/ROMS/7M_11L.U54 b/ROMS/7M_11L.U54 new file mode 100644 index 0000000..1cc81ca Binary files /dev/null and b/ROMS/7M_11L.U54 differ diff --git a/ROMS/7M_11L.U63 b/ROMS/7M_11L.U63 new file mode 100644 index 0000000..5525d53 Binary files /dev/null and b/ROMS/7M_11L.U63 differ diff --git a/ROMS/7M_11M.U54 b/ROMS/7M_11M.U54 new file mode 100644 index 0000000..f9d899a Binary files /dev/null and b/ROMS/7M_11M.U54 differ diff --git a/ROMS/7M_11M.U63 b/ROMS/7M_11M.U63 new file mode 100644 index 0000000..4089a62 Binary files /dev/null and b/ROMS/7M_11M.U63 differ diff --git a/ROMS/7M_12L.U54 b/ROMS/7M_12L.U54 new file mode 100644 index 0000000..664ee8f Binary files /dev/null and b/ROMS/7M_12L.U54 differ diff --git a/ROMS/7M_12L.U63 b/ROMS/7M_12L.U63 new file mode 100644 index 0000000..7b6cc53 Binary files /dev/null and b/ROMS/7M_12L.U63 differ diff --git a/ROMS/7M_12M.U54 b/ROMS/7M_12M.U54 new file mode 100644 index 0000000..4ddb10d Binary files /dev/null and b/ROMS/7M_12M.U54 differ diff --git a/ROMS/7M_12M.U63 b/ROMS/7M_12M.U63 new file mode 100644 index 0000000..fca452e Binary files /dev/null and b/ROMS/7M_12M.U63 differ diff --git a/ROMS/7M_13L.U54 b/ROMS/7M_13L.U54 new file mode 100644 index 0000000..e673692 Binary files /dev/null and b/ROMS/7M_13L.U54 differ diff --git a/ROMS/7M_13L.U63 b/ROMS/7M_13L.U63 new file mode 100644 index 0000000..f69c8bf Binary files /dev/null and b/ROMS/7M_13L.U63 differ diff --git a/ROMS/7M_13M.U54 b/ROMS/7M_13M.U54 new file mode 100644 index 0000000..95469b6 Binary files /dev/null and b/ROMS/7M_13M.U54 differ diff --git a/ROMS/7M_13M.U63 b/ROMS/7M_13M.U63 new file mode 100644 index 0000000..ded73ed Binary files /dev/null and b/ROMS/7M_13M.U63 differ diff --git a/ROMS/7M_CSUMS b/ROMS/7M_CSUMS new file mode 100644 index 0000000..8c05b97 --- /dev/null +++ b/ROMS/7M_CSUMS @@ -0,0 +1,30 @@ +ROM Checksums +------------- +7M_X10L.U54 - $7b58 +7M_X10L.U63 - $aff6 + +7M_X10M.U54 - $a42e +7M_X10M.U63 - $953a + +7M_X09L.U54 - $E23E +7M_X09L.U63 - $AA75 + +7M_13L.U54 - $D082 +7M_13L.U63 - $ABF3 + +7M_13M.U54 - $F5EB +7M_13M.U63 - $AA07 + + +7M_12L.U54 - $9D41 +7M_12L.U63 - $AAE6 + +7M_12M.U54 - $C2AA +7M_12M.U63 - $A8FA + + +7M_11L.U54 - $1AC1 +7M_11L.U63 - $B893 + +7M_11M.U54 - $5878 +7M_11M.U63 - $B4E3 diff --git a/ROMS/7M_X09L.U54 b/ROMS/7M_X09L.U54 new file mode 100644 index 0000000..714f583 Binary files /dev/null and b/ROMS/7M_X09L.U54 differ diff --git a/ROMS/7M_X09L.U63 b/ROMS/7M_X09L.U63 new file mode 100644 index 0000000..dee29ac Binary files /dev/null and b/ROMS/7M_X09L.U63 differ diff --git a/ROMS/7M_X10L.U54 b/ROMS/7M_X10L.U54 new file mode 100644 index 0000000..502ecc1 Binary files /dev/null and b/ROMS/7M_X10L.U54 differ diff --git a/ROMS/7M_X10L.U63 b/ROMS/7M_X10L.U63 new file mode 100644 index 0000000..b4f802f Binary files /dev/null and b/ROMS/7M_X10L.U63 differ diff --git a/ROMS/7M_X10M.U54 b/ROMS/7M_X10M.U54 new file mode 100644 index 0000000..9681aad Binary files /dev/null and b/ROMS/7M_X10M.U54 differ diff --git a/ROMS/7M_X10M.U63 b/ROMS/7M_X10M.U63 new file mode 100644 index 0000000..6bf9c16 Binary files /dev/null and b/ROMS/7M_X10M.U63 differ diff --git a/SRC/ADJUST.ASM b/SRC/ADJUST.ASM new file mode 100644 index 0000000..2adaa17 --- /dev/null +++ b/SRC/ADJUST.ASM @@ -0,0 +1,3745 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 1/22/92 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:31 +*.Last mod - 4/19/95 10:30 - for WWF UNIT +*.Last mod - 8/23/95 JBJ (added 'CREDITS FOR PLAYER DESIGN" adjustment) +************************************************************** + .file "adjust.asm" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" + .INCLUDE DIPSW.EQU + + + .text + + + .globl CLR_MAIN + .globl ADJ_INST + .globl CADJ_BOX + .globl CLR_CUR + + +* IN THIS MODULE + + .DEF GO_ADJ + .DEF DO_ADJH + .DEF BCDBIN + .DEF BINBCD + .DEF SET_COIN_ADJ, MEN_ADJ, CKDIP, TAMPEREDP + +* IN HSTD.ASM + + .REF CMOS_VAL + .REF P_FORK + .REF INIT_HSR + +* IN TEST.ASM + + .REF B_MENU,RED_BOX + .REF L_MESS,TOP_BOX + .REF LM_FINIS + .REF LM_SETUP + .REF AREUSURE + .REF ST_STICK + .REF GETSTICK + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF MENU_TOP + .REF DOBORDER + .REF BLNKHELP + .REF H_SLAVE +; .REF CK_DOOR + .REF COL_INST + .REF STD_BORD + .REF LD_CTAB + +* IN MENU.ASM + + .REF ANY_BUT + .REF MESS_MM + .REF GET_CSPT + +* IN AUDIT.ASM + + .REF GET_ADJ,HTOHXASC + .REF PUT_ADJ + .REF F_ADC_S + .REF CS_ENTS ;# OF HIGHEST IN COIN TABLE + .REF STRCAT + .REF NO_CREDS + .REF CRED_P + + +* OTHERS + + .REF RD15FONT,RD7FONT,STRCNRM,BLNKAREA,HEXTOASC + .REF STRRNRM,STRLNRM,CLR_SCRN, READ_DIP + + .ref _switch_map_mode + + +******************************** +* Adjustment menu requested.....make sure CMOS is ok! + +GO_ADJ + MOVI MEN_ADJ,A8 + +GEN_ADJUST + MOVE A8,-*A12,L ;PUSH MENU ON STACK + + CALLA CMOS_VAL ;CHECK OUT THE REGION + JRZ SET_OK ;ITS OK.....CONTINUE.... + + JSRP GET_FAC ;BRING TO FACTORY SETTINGS OR QUIT. + JSRP ANY_BUT + + CALLA CMOS_VAL ;CAN'T GO IF WE'RE NOT OK NOW + JRNZ GO_ADQ ;ITS NOT VALID....NO ADJUSTING! + +SET_OK + MOVK 1,A0 + MOVE A0,-*A12,W ;LIKE GEN_MENU...KEEP NUMBER ON STACK + +ADJ_LOOP + CALLA CLR_SCRN ;CLEAR THE SCREEN! + + MOVI ADJ_ADV,A8 + JSRP L_MESS ;PRINT THE NEW INSTRUCTIONS + + MOVE *A12(WORD_SIZE),A8,L ;GET THE MENU + JSRP MENU_TOP ;PRINT OUT THE TOP. + MOVI COLOR_RED,A9 + CALLA COL_INST ;PUT UP A DIFFERENT INSTR. BOX + + MOVE *A12,A9,W ;GET INDEX TO USE. + JSRP B_MENU ;FETCH THE ENTRY TO ADJUST. + +* EACH ADJUSTMENT HAS A STRUCTURE ASSOCIATED WITH IT. +* A9 RETURNS A STRUCTURE FOR THE ITEM SELECTED. + + MOVE A9,A9 ;0 IS RETURN TO MAIN MENU + JRZ GO_ADJX + +* A8 HAS THE MENU NUMBER.....UNLIKE GEN_MENU...DON'T STEP! + + MOVE A8,*A12,W ;PUT IT SAFELY ON OUR STACK. + + MOVE *A9(AD_ROUT),A0,L ;GET THE ROUTINE TO CALL FOR ACTIVATION + MOVI ADJ_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;"CALL THE ROUTINE (PASSING STRUCT IN A9) + +GO_ADJX + addk WORD_SIZE,a12 ;"pop" the position indicator +GO_ADQ + addk LONG_SIZE,a12 ;Pop menu + RETP ;OK...RETURN! + +************************************************************************** +* * +* PRICE_ADJ * +* * +* THIS IS EXECUTED WHEN THE "CUSTOM PRICING" ENTRY IS * +* SELECTED FOR ADJUSTMENT FROM THE ADJUSTMENT MENU. * +* * +* IT CREATES A WHOLE NEW ADJUSTMENT MENU CONTIAING: * +* * +* * +* LEFT SLOT UNITS * +* CENTER SLOT UNITS * +* RIGHT SLOT UNITS * +* UNITS / CREDIT * +* UNITS / BONUS * +* MINIMUM UNITS * +* CREDITS TO START * +* CREDITS TO CONTINUE * +* SHOW CREDIT FRACTIONS * +* COINS PER DOLLAR * +* FREE PLAY * +* MAXIMUM CREDITS * +* COIN PAGE HELP * +* * +************************************************************************** +PRICE_ADJ + MOVI MEN_CUST,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +MULT_ADJ + MOVI MEN_MULT,A8 ;HANDLE JUST LIKE MAIN ADJ. MENU + JAUC GEN_ADJUST + +************************************************************************** +* * +* GEN_ADJ * +* * +* THIS IS THE ROUTINE THAT IS EXECUTED TO DO * +* THE ADJUSTING ONCE A BUTTON IS CLICKED ON * +* AN ADJUSTMENT. * +* * +* A9 -> ADJUSTMENT STRUCTURE! * +* * +************************************************************************** +GEN_ADJ: + movk 2,a0 ;Adjusting switch mapping mode + move a0,@_switch_map_mode,L + MOVE A9,*A13(PDATA),L ;SAVE THE STRUCTURE POINTER + + MOVE A9,A8 ;GET TO GENERAL POINTING REGISTER + JSRP DO_IN_WHITE ;GO FROM LF TO WHITE RIGHT AWAY. + +; JSRP ADJ_DOOR ;CAN'T DO IT UNLESS DOOR IS OPEN. + MOVE A0,A0 + JRNZ ADJ_CAN ;CANCELLED +* + CALLR CLR_MAIN ;CLEAR OUT THE MAIN MENU REGION + CALLR ADJ_INST ;PUT INSTRUCTIONS AT BOTTOM. + JSRP ST_STICK ;LOCKOUT STUCK SWITCHES + + SLEEPK 2 ;STOP RACE ON INSTRUCTIONS +ADJ_CHNG + SLEEPK 1 ;NOW LOOP ON STICK...EXIT + + MOVI 31000H,A5 ;TYPOMATIC....BOT HALF SAYS DON'T TIME OUT +* ;TOP HALF IS TICKS PER HIT + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE *A13(PDATA),A8,L ;GET OUR POINTER + MOVE A0,A1 ;KEEP GETSTICK VALUE + JRZ ADJ_CHNG ;ITS ZERO....NO MORE WORK NEEDED + + MOVE *A8(AD_CMOS),A0,W ;GET ADJ NUMBER + MOVE A0,A2 ;COPY FOR LATER + + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + MOVE A0,A3 ;SAVE "OLD" VALUE +* +* A0 = ADJUSTMENT VALUE +* A1 = GET_STICK VALUE +* A2 = ADJUSTMENT NUMBER +* A3 = ADJUSTMENT VALUE READ! +* A8 = ADJUSTMENT STRUCTURE POINTER +* + CMPI 3,A1 ;BUTTON......BACK TO ADJ MENU! + JRZ ADJ_BUTT ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A1 + JRZ ADJ_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP.... +* + CALLR INC_ADJ ;INCREMENT IT + JRUC ADJ_JOIN + +ADJ_DOWN: + CALLR DEC_ADJ ;DECREMENT IT +ADJ_JOIN: + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLR GET_EADJ ;READ IT OUT (FIXING ZERO IF NEC) + CMP A0,A3 ;DID IT NOT CHANGE? + JRZ ADJ_CHNG ;NOPE....NO ACTION! +* +* IT CHANGED....WE NEED TO BEEP AND RE-PLOT LOWER +* PORTION TO REFLECT NEW SETTING. +* + .ref update_adj + SOUND1 update_adj ;MAKE A BEEP. + JSRP DO_IN_WHITE ;AND UPDATE THE ADJUSTMENT + + JRUC ADJ_CHNG ;AND LOOP! + +DO_IN_WHITE + CALLR CLR_CUR ;CLEAR OUT CURRENT SETTING + MOVI COLOR_WHITE,A11 ;THEY'RE STARING....NO HEADACHES + JAUC AD_CRVAL ;PRINT THE NEW VALUE + +ADJ_BUTT: + .ref adj_menu_ext + SOUND1 adj_menu_ext +ADJ_CAN: + movk 1,a0 + move a0,@_switch_map_mode,L + RETP + +************************************************************************** +* * +* DEC_ADJ * +* * +* THIS IS CALLED TO MOVE TO THE PREVIOUS VALUE. * +* A0 = VALUE READ FROM CMOS * +* A2 = ADJUSTMENT NUMBER (TO WRITE IT BACK) * +* A8 = ADJUSTMENT STRUCTURE POINTER. * +* * +* INC_ADJ IS USED TO STEP TO THE NEXT VALUE * +* * +************************************************************************** +DEC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC ;CHANGE RADIX FOR MATH IF NECESSARY + SUB A1,A0 ;REMOVE THIS FROM READ VALUE + JRUC FINISH_CHANGE ;GO TO COMMON ROUTINE TO WRAP IT UP + +INC_ADJ: + MMTM SP,A0,A1,A2,A3 + MOVE A0,A3 ;COPY ORIGINAL VALUE + MOVE *A8(AD_DELTA),A1,L ;GET UNITS BETWEEN VALUES + CALLR MAKE_BIN_IF_NEC + ADD A1,A0 ;REMOVE THIS FROM READ VALUE + +FINISH_CHANGE: + CALLR BCD_IF_NEC ;BACK TO BCD AFTER THE MATH + CALLR PUT_IN_RANGE ;ADJUST TO ACCOUNT FOR WRAP AND LIMITS + MOVE *A8(AD_ZEQU),A1,L ;This number becomes zero + CMP A0,A1 ;is this the number? + JRNZ FC_NZ ;NOPE...STORE IT! + CLR A0 ;USE ZERO IN PLACE OF THIS NUMBER! + +FC_NZ: + MOVE A0,A1 ;WRITING REG + MOVE A2,A0 ;ADJUSTMENT NUMBER + CALLA PUT_ADJ ;WRITE IT BACK +* +* SEE IF WE'RE DOING MASTER COINAGE. +* + CMP A1,A3 ;DID THE NUMBER CHANGE? + JRZ NOT_COIN ;NOPE...DON'T LOAD IT UP! +* +* AT THIS POINT WE KNOW THAT THE VALUE BEING ADJUSTED CHANGED. +* + CALLR DIRTY_IF_NEC ;IF ITS A COIN VALUE TAKE NOTE! + + CMPI ADJPRICE,A0 ;IS IT? + JRNZ NOT_COIN ;NOT COIN + + CALLA LD_CTAB ;BATCH WRITE THE VALUES IN! + CALLA NO_CREDS ;REMOVE CREDITS AND FRACTIONS WHEN + CALLA CRED_P ;LINK-OUT! +* ;MODE CHANGES + +NOT_COIN: + CALLA F_ADC_S ;MAKE CHECKSUM VALID! + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* DIRTY_IF_NEC * +* * +* THIS IS CALLED BY ALL ADJUSTMENTS WHEN THEY ACTUALLY * +* CHANGE THEIR VALUE. FOR THE COINAGE ADJUSTMENTS, * +* IF ANY OF THE 1ST 6 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJ1ST6 = ZERO. * +* * +* IF ANY OF THE 1ST 8 VALUES ARE TOUCHED WE NEED TO MAKE * +* * +* ADJVIRGIN = ZERO. * +* * +* THE AD_FLAGS FIELD IN THE ADJUSTMENT STRUCTURE HAVE BITS * +* INDICATING WHICH (IF ANY) SHOULD BE DIRTYED. * +* * +************************************************************************** +DIRTY_IF_NEC + + MMTM SP,A0,A1,A2 + MOVE *A8(AD_FLAGS),A2,W ;FETCH THE FLAGS + + BTST VIRG_BIT,A2 ;DOES CHANGING THIS SAY SET VIRG BIT. + JRZ NOT_1ST_8 ;NOPE + + movk ADJVIRGIN,a0 + CLR A1 + CALLA PUT_ADJ + +NOT_1ST_8 + BTST SIX_BIT,A2 ;1ST 6? + JRZ NOT_1ST_6 + + movk ADJ1ST6,a0 + CLR A1 + CALLA PUT_ADJ +NOT_1ST_6 + BTST HSR_BIT,A2 ;HIGH SCORE RESET NUM? + JRZ NOT_HSR ;NOPE + + CALLA INIT_HSR ;IT WAS CHANGED....STUFF THE VALUE! + +NOT_HSR + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* * +* MAKE_BIN_IF_NEC * +* * +* THIS IS CALLED AFTER THE A0 HAS THE ADJUSTMENT AND * +* A1 HAS THE AMOUNT TO ADD OR SUBTRACT. IF WE'RE * +* DOING BCD MATH THEN CONVERT BOTH A0 AND A1. * +* * +************************************************************************** +MAKE_BIN_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ MBINX ;NOPE + + CALLA BCDBIN ;CONVERT A0 TO BINARY + MOVE A0,A2 ;SAVE + MOVE A1,A0 ;NOW A1 + CALLA BCDBIN + MOVE A0,A1 + MOVE A2,A0 ;NOW PUT A0 BACK +MBINX: + MMFM SP,A2 + RETS + +************************************************************************** +* * +* BCD_IF_NEC * +* * +* A0 HAS A RESULT OF THE ADJUSTMENT.....IN BINARY. * +* CONVERT BACK TO BCD IF THAT'S THE MODE. * +* * +************************************************************************** +BCD_IF_NEC: + MMTM SP,A2 + MOVE *A8(AD_FLAGS),A2,W ;GET THE FLAGS + BTST BCD_BIT,A2 ;BCD? + JRZ BINX ;NOPE + + CALLA BINBCD ;BACK TO BCD + +BINX: + MMFM SP,A2 + RETS + +ADJ_CASH + .WORD >F7A5-10H,8,>8085,0 ;CASH REGISTER SOUND +ADJ_LBEEP +ADJ_BEEP .WORD >F3F7-10H,>20,>8081,0 ;BEEP TONE + +************************************************************************** +* * +* CLR_CUR * +* * +* THIS IS CALLED TO CLEAR OUT THE AREA WHERE THE * +* "CURRENT SETTING" IS BEING DISPLAYED. * +* * +************************************************************************** +CLR_CUR: + MMTM SP,A3,A4 + MOVI AM_HX,A3 ;THIS IS LEFT MARGIN OF HELP AREA + + MOVI CUR_LRX,A4 ;RIGHT X + SUB A3,A4 ;A4 HAS X DISTANCE + + ADDI ADJ_ULY*10000H,A3 ;UPPER LEFT Y + ADDI (256-ADJ_ULY)*10000H,A4 ;Y GOES TO BOTTOM OF SCREEN + CALLA BLNKAREA ;ITS BLANK NOW! + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* CLR_MAIN * +* * +* THIS IS CALLED TO CLEAR OUT THE ADJUSTMENT MENU AND * +* THE CYAN INSTRUCTIONS FOR THIS MENU. * +* * +************************************************************************** +CLR_MAIN + MMTM SP,A3,A4 + MOVI TIT_ULX,A3 ;LEFT EDGE + MOVI AM_HX,A4 ;UP TO THIS EDGE + SUB A3,A4 ;X'S ARE SET. + ADDI INST_ULY*10000H,A3 ;TOP Y + ADDI (400-INST_ULY)*10000H,A4 ;Y DISTANCE + CALLA BLNKAREA + MMFM SP,A3,A4 + RETS + +************************************************************************** +* * +* ADJ_DOOR * +* * +* PRINT MESSAGE THAT DOOR MUST BE OPENED TO CONTINUE. * +* HOLD CONTROL TILL BUTTON IS PRESSED (CANCELLING) * +* OR DOOR IS OPEN. * +* * +* RETURN A0 = 0 MEANS DOOR GOT OPENED. * +* A0 .NE 0 FOR BUTTON PRESSED. * +* * +************************************************************************** +;ADJ_DOOR: +; CALLA CK_DOOR ;IS THE DOOR OPEN? NZ=OPEN +; JRNZ DORET ;YEP.......RETURN A0=0 +; +; CALLA CLR_MAIN ;CLEAR THE SCREEN +; MOVI CUR_ULY,A10 ;PLOT TO SQUARE UP WITH "CURRENT SETTING" +; CALLA ADINBOX ;PUT A NICE BOX AROUND IT. +; MOVI MESS_OPEN_OR_CANCEL,A8 +; JSRP L_MESS ;GIVE INSTRUCTIONS +; JSRP ST_STICK ;GET "STARTING STATE" + +;WD1 +; SLEEPK 1 ;NAP A BIT + +; CALLA CK_DOOR +; JRNZ DORET ;ITS OPEN...RETURN OK + +; MOVI 40010H,A5 ;TYPOMATIC PARMS +; JSRP GETSTICK ;CHECK BUTTONS +; CMPI 3,A0 ;BUTTON? +; JRNZ WD1 ;NOT YET + +; SOUND1 ADJ_LBEEP ;MAKE A BEEP. +; MOVK 3,A0 ;RETURN A0 .NE. 0 +* +* RETURN A0=3 +* +; RETP + +* RETURN A0=0 (CONTINUE) +* +;DORET: +; CLR A0 +; RETP + + +* +************************************************************************** +* * +* ADJ_INST * +* * +* THIS IS CALLED TO PUT AN INSTRUCTION BOX OUT * +* WHILE ADJUSTMENT IS TAKING PLACE. * +* * +************************************************************************** +ADJ_INST: + MOVE *A13(PDATA),A8,L ;PASS THE ADJUSTMENT POINTER + MOVI ADJ_INST_P,A7 + CALLA P_FORK ;START IT UP! + RETS + +************************************************************************** +* * +* ADJ_INST_P * +* * +* THIS IS CALLED TO PUT INSTRUCTIONS FOR ADJUSTMENT * +* MODIFICAITION UP AND FLASH THE ARROW (IF ITS NOT * +* TOO ANNOYING) * +* * +************************************************************************** + +ADJ_INST_P: + JSRP ADJUSTING ;PUT UP "ADJUSTING DIFFICULTY" MESSAGE + + MOVE A10,A3 ;STASH # OF ARROWS WHERE IT WILL BE SAFE + CALLR ADINBOX ;PUT THE BOX OUT + + MOVI INST_TO_ADJ,A8 + JSRP L_MESS ;PRINT OUT INSTRUCTIONS + + MOVI ADJ_ARROW,A8 + JSRP L_MESS + + JAUC SUCIDE + +************************************************************************** +* * +* ADINBOX * +* * +* THIS PUTS A BOX AROUND THE ADJUSTMENT INSTRUCTIONS. * +* * +************************************************************************** +* +INBOX_HEIGHT EQU 7BH + +ADINBOX: + MMTM SP,A10 + MOVI CUR_ULY-2,A10 + SLL 16,A10 + MOVI TIT_ULX,A4 ;UPPER RIGHT X + MOVY A10,A4 ;UPPER RIGHT + + MOVI AM_RX,A5 + MOVY A10,A5 ;START WITH BASE Y + ADDI INBOX_HEIGHT*10000H,A5 + + CALLR WH_BORD + MMFM SP,A10 + RETS + +************************************************************************** +* * +* ADJUSTING * +* * +* THIS IS CALLED WHEN WE ENTER THE "ADJUSTING" PHASE * +* IT PUTS A BOX IN THE LEFT AREA TO SAY WHAT WE ARE ADJUSTING. * +* * +************************************************************************** +ADJUSTING: + MOVE A8,A2 ;PUT ADJUSTMENT BLOCK PTR WHERE ITS SAFE + MOVI (CUR_ULY-31H)*10000H,A4 ;FOR DO_BORDER + ADDI TIT_ULX,A4 ;A4 IS REASONABLY EASY + + MOVI ((CUR_ULY-2)+MB_YWID)*10000H,A5 ;OVERLAP THE ONE BELOW IT + ADDI AM_RX,A5 ;THIS IS RIGHT EDGE + + CALLR WH_BORD ;DO A WHITE BORDER + + MOVI MES_ADNAME,A8 ;PUT THE ADJUSTMENT NAME UP + CALLA LM_SETUP + MOVE *A2(AD_MAIN),A8,L ;GET THE MAIN MENU MESSAGE + JSRP LM_FINIS + + MOVI MES_ADJUSTING,A8 + JSRP L_MESS + RETP + +MULT_VAL + CLR A4 + movk 6,a1 ;Setup a box for our 3 lines + CALLR PADJ_BOX ;(a10 is set as y for the 3 lines) + + MOVI M_MULTVAL,A8 + MOVI COLOR_DECAY,A11 + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + ADDK 15,A10 + MOVI M_MULTVAL1,A8 + MOVI ADJLTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL2,A8 + MOVI ADJRTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL3,A8 + MOVI ADJCTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL4,A8 + MOVI ADJXTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + ADDK 11,A10 + MOVI M_MULTVAL5,A8 + MOVI ADJBTOTMULT,A0 + JSRP ADJ_LEFT_RIGHT + + RETP + + +************************************************************************** +* * +* PARAM_VAL * +* * +* This is called to summarize the values of the * +* important adjustments on the parameter page. * +* * +************************************************************************** +* +* WE WILL PRING OUT 3 LINES IN A BOX. +* +* 1) Pricing: +* 2) Free Play: yes/no +* 3) Maximum Credits: +* + +PDY EQU HELP_DY +PMARG EQU 6 + +PARAM_VAL + movk 5,a1 ;Setup a box for our 3 lines + CALLR ADJ_BOX ;(a10 is set as y for the 3 lines) + +; addk 6,a10 ;Push to center 5 lines in box + + CALLR GET_COIN_TITLE ;COIN MODE + MOVI MESS_GP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + MOVI M_NO,A2 ;ASSUME "NO" + movk ADJFREPL,a0 + CALLA GET_ADJ ;GET THE FREE PLAY ADJUSTMENT + JRZ NOT_FREE + MOVI M_YES,A2 + +NOT_FREE + MOVI MESS_FP,A8 + JSRP SMALL_LEFT_RIGHT ;PRINT THE LINES + + ADDI PDY,A10 ;PUSH TO NEXT LINE + + movk ADJMAXC,a0 + MOVI MESS_MAX,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* CREDITS TO START AND CONTINUE NEEDS TO HANDLE PLURAL ETC. +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCSTRT,a0 ;Get credits required to start + MOVI M_CTS_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE +* +* NOW THE CREDITS TO CONTINUE +* + ADDI PDY,A10 ;PUSH TO NEXT LINE + movk ADJCCONT,a0 ;Get credits required to continu + MOVI M_CTC_PL,A8 + JSRP ADJ_LEFT_RIGHT ;A0 = ADJUST A8 = MESSAGE + + RETP + +************************************************************************** +* * +* ADJ_LEFT_RIGHT * +* * +* A8 HAS MESSAGE * +* A0 HAS ADJUSTMENT * +* A10 HAS HEIGHT. * +* * +* LEFT JUSTIFY A8 MESSAGE * +* RIGHT JUSTIFY A0 ADJUSTMENT (AFTER READING IT) * +* * +************************************************************************** +ADJ_LEFT_RIGHT + MOVE A8,A3 ;STASH MESSAGE + + CALLA GET_ADJ + MOVE A0,A8 + CALLA HEXTOASC ;A8 POINTS TO NUMBER STRING + + MOVE A8,A2 + MOVE A3,A8 ;GET MESSAGE IN A8 + + JRUC SMALL_LEFT_RIGHT + +************************************************************************** +* * +* SMALL_LEFT_RIGHT * +* * +* THIS IS CALLED TO PRINT A LEFT AND RIGHT JUSTIFIED * +* PAIR OF STRINGS IN THE "CURRENT SETTING BOX" * +* * +* A2 = RIGHT JUSTIFIED STRING * +* A8 = LEFT JUSTIFIED STRING TO PRINT * +* A10 = Y VALUE * +* * +************************************************************************** +SMALL_LEFT_RIGHT + MMTM A12,A11,A6,A10,A9,A3 + + MOVI COLOR_WHITE,A6 ;SOLID WHITE FOR THESE MULTI-LINERS + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX+PMARG,A9 ;LEFT X IS INSIDE LEFT LINE + + MOVE A10,A3 ;SAVE Y IN A3 + SLL 16,A3 + MOVY A3,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRLNRM ;DO IT! + + MOVE A2,A8 ;GET RIGHT JUSTIFIED STRING + MOVI TIT_LRX-PMARG,A9 ;INSIDE RIGHT MARGIN + MOVY A3,A9 ;AT OUR Y + JSRP STRRNRM ;PRINT IT! + + MMFM A12,A11,A6,A10,A9,A3 + RETP + +************************************************************************** +* * +* COIN_SET * +* * +* THIS IS THE ROUTINE THAT IS CALLED TO DISPLAY THE CURRENT * +* COINAGE SETTINGS. * +* * +* A8 HAS POINTER TO ADJUSTMENT BLOCK * +* A11 HAS THE COLOR TO USE * +* * +************************************************************************** +COIN_SET + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ SBO ;YEP....SMALL BOX ONLY! + +; movk 8,a1 ;Big box for outside +; CALLR ADJ_BOX +;SBO +; movk 1,a1 ;Draw a box to hold 1 line +; CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + CALLR CLR_CUR + MOVI 6,A1 ;BIG BOX FOR OUTSIDE + MOVK 5,A4 ; GROSS KLUDGE TO OFFSET BOX + CALLR CADJ_BOX +SBO MOVI 1,A1 ;DRAW A BOX TO HOLD 1 LINE + CLR A4 + CALLR CADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE + + MOVI [ADJ_CULY+5,AM_HX+5],A3 + MOVI [21,185],A4 + CALLA BLNKAREA + MOVI [ADJ_CULY+31,AM_HX+5],A3 + MOVI [58,185],A4 + CALLA BLNKAREA + +* THE ABOVE 2 CALLS SHOULD CREATE A BOX LIKE: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º U.S.A. 1 º +* ºÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ +* º 1 COIN / 1 CREDIT º +* º º +* º º +* º 25c $1.00 25c º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* A10 HAS THE PLACE TO PLOT THE TITLE LINE. +* + SUBK 5,A10 + MOVE A10,A4 ;KEEP THE Y HANDY. + + + CALLR GET_COIN_TITLE ;GET TITLE FOR BIG BOX IN A2. + +* A2 HAS STRING +* A10 IS Y TO PRINT +* A11 IS COLOR + +COIN_TIT + JSRP DO_BIG_LINE ;PRINT THIS LINE! + + MOVI COLOR_WHITE,A11 ;DON'T GLOW INSIDE BOX IF THAT'S THE MODE + + CALLR TAMPEREDP ;HAS THE 1ST 6 COIN VALUE BEEN TAMPERED WITH? + JRZ NO_INFO ;YEP....JUST GIVE THE STARTS AND CONTINUES + + ADDK 11,A10 + SLL 16,A10 + PUSHP A10 ;SAVE Y POSITION + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_LIST),A2,L ;FETCH POINTER TO MESSAGE LIST + JRZ NO_HEADERS ;NO LIST! + + MOVI COIN_HEAD_Y,A10 ;AT THIS HEIGHT + +NEXT_HEADER + MOVE *A2+,A8,L + JRZ NO_HEADERS ;HEADERS ARE OUT...CONTINUE + + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + addk 12,a10 ;Push to next line + JRUC NEXT_HEADER + +NO_HEADERS + MOVI M_SLOTVAL,A8 + MOVI MESS_CTS,A10 ;SET Y FOR COIN SLOT LINE. + movi >1212,a11 ;Med blue + JSRP PRINT_SMALL_LINE ;HEADER FOR COIN SLOT VALUE + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVE *A6(CS_SLOTS),A8,L ;PRINT COIN SLOT INFO + addk 12,a10 ;Push y up for a gap + JSRP PRINT_SMALL_LINE ;PRINT THE LINE + + MOVI TOST_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCSTRT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOCONT_MESS,A8 + CALLA LM_SETUP + PUSH A0 + MOVE *A12,A0,L + MOVY A0,A9 + MOVI ADJCCONT,A0 ; CREDITS TO START + CALLA GET_ADJ + MOVE A0,A8 + PULL A0 + CALLA HEXTOASC + JSRP LM_FINIS + + MOVI TOSTOC_MESS,A8 + CALLA LM_SETUP + PULLP A3 + MOVY A3,A9 + JSRP LM_FINIS + + +NO_INFO + RETP ;DONE FOR NOW + +TOSTOC_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+116,0,COLOR_WHITE,STRCNRM,0 + .STRING "TO START. TO CONTINUE.",0 + .EVEN + +TOST_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+27,0,COLOR_WHITE,STRRNRM,0 + +TOCONT_MESS + MESS_MAC RD7FONT,SPACING07,AM_HX+110,0,COLOR_WHITE,STRRNRM,0 + +************************************************************************** +* * +* GET_COIN_TITLE * +* * +* THIS IS CALLED TO FETCH THE CHARACTER STRING MESSAGE * +* FOR THE CURRENT COIN MODE. IF ITS STANDARD, THEN * +* IT IS FETCHED BASED ON THE COIN SELECT TABLE. * +* * +* IF THE 1ST 6 PARAMETERS HAVE BEEN MODIFIED, THEN * +* IT RETURNS THE STRING "NON-STANDARD". * +* * +************************************************************************** +GET_COIN_TITLE + PUSH a6 + + CALLA GET_CSPT ;A6 POINTS AT THE CSELECT BLOCK + MOVI MESS_DIP,A2 + CALLR CKDIP + JRZ gctx + + MOVI MESS_TAMPERED,A2 + movk ADJ1ST6,a0 ;Non-standard title if 1st 6 modified + CALLA GET_ADJ + jrz gctx ;Changed? + MOVE *A6(CS_TITLE),A2,L ;GET THE CSELECT TITLE FOR ITS VALUES + +gctx PULL a6 + RETS + +************************************************************************** +* * +* TAMPEREDP * +* * +* HAVE THE COIN PARAMETERS BEEN TAMPERED WITH. * +* THIS IS NON-ZERO IF ANY OF THE 1ST 6 COIN * +* PARAMETERS HAVE BEEN ADJUSTED. * +* * +************************************************************************** +TAMPEREDP + PUSH a0 + movk ADJ1ST6,a0 ;Just check the 1st 6 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH (0 MEANS YES) + MMFM SP,A0 + RETS + +CKDIP + CALLA READ_DIP + ANDI DPUSECMOS,A0 + MOVE A0,A0 + RETS + +************************************************************************** +* * +* SET_COIN_ADJ * +* * +* SET THE COIN ADJUSTMENT STUFF FROM WHATEVER IS POINTED TO BY * +* A6 * +* * +* ENTRY * +* A6 POINTER TO THE FIRST 6 ADJUSTMENTS ( SORT OF ) * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +SET_COIN_ADJ: + MMTM SP,A0,A1,A6,A7 + MOVI ADJLMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJDBVMULT,A0 ; NEW ADDITION, FOLKS! + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJMUNIT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCSTRT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCCONT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCDIV,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJFRAC,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + CALLA F_ADC_S ; KEEP THE WORLD A HAPPY PLACE + + MMFM SP,A0,A1,A6,A7 + RETS + +************************************************************************** +* * +* PRINT_SMALL_LINE * +* * +* THIS IS CALLED TO PRINT A LINE IN THE "CURRENT SETTING" * +* BOX FOR THE COINAGE. * +* * +* A8 = STRING TO PRINT * +* A10 = Y VALUE * +* A11 = COLOR * +* * +* PRINT IN THE 7 POINT FONT WITH X CENTERED FOR THE * +* HELP SYSTEM. * +* * +************************************************************************** +PRINT_SMALL_LINE + MMTM A12,A11,A6,A10,A9 + + MOVE A11,A6 ;COLOR SET + MOVI RD7FONT,A11 ;USE BABY FONT + + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + + MOVE A10,A0 + SLL 16,A0 + MOVY A0,A9 ;POINTER SET! + + MOVI SPACING07,A10 + + CLR A0 + + JSRP STRCNRM ;DO IT! + + MMFM A12,A11,A6,A10,A9 + RETP + + +******************************** +* DO_ADJH +* +* THIS IS CALLED TO PLOT THE RIGHT HALF OF THE SCREEN +* FOR EACH ADJUSTMENT AS THE USER SELECTS THEM ON +* THE ADJUSTMENT MENU. +* +* THE FORMAT IS AS FOLLOWS: +* +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º A D J U S T M E N T M E N U º +* º NBA REVISION 1.4 º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º SELECT BLAH BLAH BLAH º º GAME DIFFICULTY º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º THIS CONTROLS THE OVERALL º +* º GAME PRICING º º DIFFICULTY OF GAME PLAY. º +* º=======GAME DIFFICULTY=======º º º +* º LIVES PER PLAY º º RANGE OF SETTINGS: 1-9 º +* º POWER-UPS PER PLAY º º º +* º EXTRA MAN EVERY º º EASIEST SETTING: 1 º +* º LAST EXTRA MAN º º HARDEST SETTING: 9 º +* º ATTRACT-MODE SOUND º º FACTORY SETTING: 3 º +* º AUTO HIGH SCORE RESET º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* º VIOLENCE LEVEL º +* º RETURN TO MAIN MENU º +* º º +* º º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +* º º º º +* º º º 9 - EXTRA HARD º +* º º º º +* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ +* +* +* ON ENTRY....A1 POINTS AT THE 3 WORDS FOR CURRENT +* MENU ENTRY. +* +DO_ADJH +* +* FIRST WE BLANK OUT THE AREA...WE NEED TO DO THIS FROM +* THE MENU PROCESS SINCE THE RIGHT EDGE IS DETERMINED BY +* MENU PDATA STUFF. IT WILL RETURN IN A9 THE MARGIN WE +* SHOULD WORK FROM. +* + CALLA BLNKHELP ;BLANK OUT THE AREA WE'RE PLOTTING! + MOVE A1,A8 ;PASS THE STRUCTURE POINTER TO NEW PROCESS! + MOVI AD_SLAVE,A7 + CALLA P_FORK ;THIS CREATES IT! + RETS ;NOW RETURN TO MENU HANDLER! + +************************************************************************** +* * +* AD_SLAVE * +* * +* THIS IS FORKED TO PLOT THE RIGHT SIDE...IT HAS * +* ITS OWN PDATA AREA FOR INFO STORAGE. * +* * +* A8 = POINTER TO THE MENU SELECTION 3 LONG-WORD ENTRY * +* A9 = LEFT X MARGIN FOR OUR WORK. * +* * +************************************************************************** +ADS_STRUCT EQU PDATA ;LONG-POINTER TO ADJUSTMENT STRUCTURE +ADS_LX EQU ADS_STRUCT+LONG_SIZE ;WORD-LEFT X TO WORK FROM +ADS_CX EQU ADS_LX+WORD_SIZE ;WORD-CENTER X FOR WORK + +AD_SLAVE: + MOVE *A8(MENU_ROUTINE),A11,L ;NOW WE HAVE OUR SPECIAL STRUCTURE! + MOVE A11,*A13(ADS_STRUCT),L ;STASH IT...WE'LL NEED IT + MOVE A9,*A13(ADS_LX),W ;ALSO THE X..... + + MOVE A9,A4 ;COPY LEFT FOR BORDER ROUT + CALLR LEFT_TO_CENTER + + MOVE A9,*A13(ADS_CX),W ;STASH THE CENTER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* + ADDI INST_ULY*10000H,A4 ;ADD IN THE Y + MOVI (INST_LRY*10000H)+TIT_LRX,A5 ;THIS IS OTHER EDGE. + MOVI COLOR_WHITE,A9 + CALLA STD_BORD ;ADJUSTMENT BORDER IS UP. + + MOVI ADJT_SETUP,A8 + CALLA LM_SETUP ;SETUP TO PRINT TITLE + + MOVE *A13(ADS_CX),A2,W ;GET THE X + MOVX A2,A9 ;SUBSTITUTE OUR X IN. + + MOVE *A13(ADS_STRUCT),A2,L ;GET STRUCTURE POINTER + MOVE *A2(AD_TITLE),A8,L ;GET MESSAGE POINTER + + JSRP LM_FINIS ;BOX AND TITLE ARE UP. + + MOVE *A2(AD_HELP),A8,L ;HELP STRUCTURE + CALLR CKDIP + JRNZ ADSSKIP + CMPI HELP_PRICE,A8 ; PRICING HELP + JRZ ADSDIP +;DJT Start + CMPI HELP_MULT,A8 ; MULTIPLIER HELP + JRZ ADSDIP +;DJT End + CMPI HELP_PARAM,A8 ; PARAMETER HELP + JRZ ADSDIP + CMPI HELP_FREE,A8 ; FREEPLAY HELP + JRNZ ADSSKIP +ADSDIP + MOVI HELP_DIP,A8 +ADSSKIP + + MOVE *A13(ADS_LX),A9,W ;LEFT X FOR HELP BOX + MOVI INST_LRY+BOX_YGAP,A10 ;THIS IS HELP BOX POSITION + ADDI 10000H,A10 ;FLAG THAT THIS IS TOP..NOT CENTER! + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID +* +* NOW WE NEED TO SHOW THE CURRENT SETTING ON THE LOWER HALF OF +* THE SCREEN. +* + MOVE *A13(ADS_STRUCT),A8,L ;GET THE ADJUSTMENT STRUCTURE + MOVI COLOR_LF,A11 ;INDICATE STANDARD COLOR. + JSRP AD_CRVAL ;PRINT SCREEN SHOWING THE CURRENT VALUE + + JAUC SUCIDE ;OUR JOB IS DONE!...EXIT + +************************************************************************** +* * +* LEFT_TO_CENTER * +* * +* THIS IS CALLED TO FIND THE CENTER POINT FOR A BOX BASED ON * +* THE LEFT PASSED IN A9. CENTER X RETURNED IN A9. * +* * +************************************************************************** +LEFT_TO_CENTER: + ADDI TIT_LRX,A9 ;FIND BOX CENTER + SRL 1,A9 ;NOW WE HAVE THE CENTER + ADDI C_KLUDGE,A9 ;MAKE IT CENTER CORRECTLY + RETS + +************************************************************************** +* * +* AD_CRVAL * +* * +* THIS IS CALLED TO PRINT THE CURRENT VALUE FOR ANY * +* ADJUSTMENT. THE VALUE SHOULD BE PRINTED AND BOXED * +* IN THE LOWER RIGHT REGION UNDER THE "CURRENT SETTING" * +* HEADER. * +* * +* A8 -> ADJUSTMENT STRUCTURE * +* A11 -> COLOR TO USE * +* ADJ_LEFX (GLOBAL RAM) CONTAINS LEFT MARGIN FOR THIS. * +* * +************************************************************************** + +AD_CRVAL: + MOVE *A8(AD_NAMEIT),A0,L ;FETCH THE "NAME-IT" ROUTINE + JUMP A0 ;AND "JSRP" THAT ROUTINE + +************************************************************************** +* * +* HEX_OR_MESS * +* * +* THIS IS CALLED FOR THE EXTRA MAN EVERY...AND * +* "LAST EXTRA MAN" ADJUSTMENTS. IT PRINTS OUT * +* THE HEX ADJUSTMENT WITH COMMAS, OR PRINTS * +* THE MESSAGE STORED AT A8(AD_NAMPTR) ON ITS LOWEST VALUE. * +* * +* ****** NOTE THAT "BIN_OR_MESS" (BELOW) USES PARTS OF THIS! * +* * +************************************************************************** +HEX_OR_MESS + PUSH a8 + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING + + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRNZ NOT_MIN ;NOPE + +AT_MIN MOVE *A8(AD_NAMPTR),A8,L ;GET THE MESSAGE POINTER + JRUC PRT_MIN + +NOT_MIN MOVE A0,A8 + MOVK 1,A3 ;INDICATE COMMAS ARE DESIRED + CALLA HTOHXASC ;CONVERT A8 TO THIS NUMBER + +PRT_MIN MOVE A8,A2 + PULL a8 + + JSRP DO_BIG_LINE ;NOW PRINT IT OUT + RETP ;AND RETURN + +************************************************************************** +* * +* BIN_OR_MESS * +* * +* THIS IS CALLED TO PRINT A BINARY NUMBER OR * +* A MESSAGE AT A8(AD_NAMPTR) IF IT IS AT MINIMUM. * +* * +************************************************************************** +BIN_OR_MESS: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM VALUE + CMP A0,A1 ;ARE WE AT MINIMUM? + JRZ AT_MIN ;YEP.....PRINT "OFF" + + CALLA BINBCD ;TURN TO BCD PLEASE + JRUC NOT_MIN ;AND NOW PRINT WITH COMMAS. + +************************************************************************** +* * +* JUST_BIN * +* * +* THIS IS CALLED TO PRINT OUT THE ADJUSTMENT * +* (STORED IN BINARAY) IN DECIMAL. * +* * +************************************************************************** +JUST_BIN: + MMTM SP,A8 ;PRESERVE A8 PLEASE + + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. +* +* NOW A0 HAS THE ADJUSTMENT....FORM THE C-STRING +* + CALLA BINBCD ;TURN IT TO BCD! + JRUC NOT_MIN + +************************************************************************** +* * +* LIST_1LINE * +* * +* THIS IS CALLED TO DO A 1 LINE LISTING OF MESSAGES * +* ASSOCAITED WITH THE CURRENT ADJUSTMENT. * +* A8 = STRUCTURE * +* A11 = COLOR OF TEXT INSIDE BOX. * +* * +************************************************************************** +LIST_1LINE + CALLR ADJ_STUFF ;GET THE REGGIES FIXED UP. + + MOVE *A8(AD_MAX),A1,L ;IS IT TOO HIGH? + CMP A1,A0 ;COMPARE TO ADJUSTMENT + JRLS L1L1 ;IN RANGE..... +* +* ADJUSTMENT IS TOO HIGH...DON'T GO THROUGH TABLE! +* + MOVI M_NULL,A2 ;USE NULL POINTER + JRUC L1L2 + +L1L1 + MOVE *A8(AD_MIN),A1,L ;GET THE LOWEST VALUE + SUB A1,A0 ;THIS IS OFFSET + MOVK LONG_SIZE,A1 ;THIS MANY LONG WORDS + MPYU A0,A1 ;THIS IS OFFSET INTO TABLE + MOVE *A8(AD_NAMPTR),A0,L ;THIS IS TABLE BASE + + CMPI DO_FREE,A8 ; IS IT A FREEPLAY ITEM + JRNZ LIGO + PUSH A0 + CALLA CKDIP ; CHECK FOR DIP SWITCH SETTING + MMFM SP,A0 + JRNZ LIGO + MOVI LIST_DIPNOYES,A0 +LIGO + + ADD A1,A0 ;A0 HAS THE TEXT OF THE SINGLE LINE + MOVE *A0,A2,L ;GET THE VECTOR +* +* TEXT POINTER IN A2 +* COLOR IN A11 +* Y IN A10 +* +L1L2 + JSRP DO_BIG_LINE ;PRINT OUT THIS LINE + RETP ;NOW RETURN + + + + MOVI ADJ_CULY+30,A10 + + +************************************************************************** +* * +* ADJ_STUFF * +* * +* THIS IS CALLED BY THE ROUTINES THAT DISPLAY * +* ADJUSTMENTS. IT PLOTS THE BOX AND RETURNS: * +* * +* A10 = HEIGHT FOR 15 POINT SINGLE TEXT LINE * +* A0 = ADJUSTMENT WITH ZERO SUBSTITUTION COMPLETED. * +* * +************************************************************************** +ADJ_STUFF + movk 1,a1 ;Indicate 2 puny lines (for our big one) + CALLR ADJ_BOX ;DRAW THE BOX....PASS BACK 1ST PLOT LINE +* +* A10 HAS Y HEIGHT OF 1ST ENTRY. +* + MOVE *A8(AD_CMOS),A0,W ;GET ADJUSTMENT NUMBER + CALLR GET_EADJ ;FETCH THE CURRENT VALUE. + + jruc PUT_IN_RANGE ;IF ITS OUT OF RANGE, FIX IT! + + +************************************************************************** +* * +* DO_BIG_LINE * +* * +* THIS IS CALLED TO DO A SINGLE LINE FOR AN ADJUSTMENT * +* "CURRENT ADJUSTMENT" BOX. * +* * +* A2 = POINTER TO TEXT * +* A10 = Y COORDINATE * +* A11 = COLOR * +* * +* X LEFT COORDINATE IS IN GLOBAL "ADJ_LEFX" * +* * +************************************************************************** +DO_BIG_LINE + MMTM A12,A10,A11,A8 ;SAVE STUFF FOR CALLER + MOVE A11,A6 + MOVI AM_HX,A9,W ;GET LEFT X + CALLR LEFT_TO_CENTER ;CONVERT IT + SLL 16,A10 ;SHIFT Y DOWN + MOVY A10,A9 ;X,Y SET + MOVE A2,A8 ;TEXT POINTER + CLR A0 ;NO SLEEP + MOVI SPACING20,A10 + MOVI RD7FONT,A11 + JSRP STRCNRM ;DO IT! + MMFM A12,A10,A11,A8 ;POP THE STUFF. + RETP + +************************************************************************** +* * +* GET_EADJ * +* * +* THIS IS LIKE GET_ADJ, HOWEVER IF ZERO COMES OUT, * +* WE CHECK TO SEE IF THERE IS A LOGICAL NUMBER TO * +* PASS OUT IN PLACE OF THE ZERO. * +* * +* A8 POINTS AT THE ADJUSTMENT STRUCTURE. * +* * +************************************************************************** +GET_EADJ + MMTM SP,A1 + CALLA GET_ADJ ;FETCH THE ADJUSTMENT + JRNZ GET_EA1 ;ITS NOT ZERO....RETURN +* +* ITS ZERO....SEE IF THERE'S A VALUE TO SUB +* + MOVE *A8(AD_ZEQU),A1,L ;IS THERE A SUB VALUE? + JRZ GET_EA1 ;NOPE...RETURN THE ZERO (AND FLAG) + + MOVE A1,A0 ;RETURN THE SUBSTITUTE VALUE +GET_EA1 + MMFM SP,A1 + RETS + +************************************************************************** +* * +* PUT_IN_RANGE * +* * +* THIS IS CALLED TO TAKE AN ADJUSTMENT AND MAKE SURE * +* IT HAS A VALID VALUE. IF ITS BETWEEN THE MIN AND MAX * +* (INCLUSIVE) ALLOWED, THEN WE RETURN WITH NO ACTION. * +* * +* IF ITS OUTSIDE, THEN WE SET IT ACCORDING TO THE * +* "WRAP_AROUND" PARAMETER. * +* * +* A0 HAS ADJUSTMENT VALUE * +* A8 POINTS AT ADJUSTMENT STRUCTURE. * +* * +* RETURN NEW VALUE IN A0. * +* * +************************************************************************** +PUT_IN_RANGE: + MMTM SP,A1,A2,A3 + MOVE *A8(AD_MIN),A1,L ;GET MINIMUM + MOVE *A8(AD_MAX),A2,L ;GET MAXIMUM + MOVE *A8(AD_FLAGS),A3,W ;ARE WE WRAPPING AROUND + BTST WRAP_BIT,A3 ;WELL? + JRNZ CK_WRAP ;YEP....USE A FANCY HANDLER. + + CMP A1,A0 ;ARE WE TOO LOW? + JRHS NOT_LO +* +* ITS TOO LOW.....USE MINIMUM +* +USE_LO: + MOVE A1,A0 + +* +* WE'RE NOT WRAPPING AROUNG....IF ITS MEGA-HIGH....KEEP IT +* AT THE LOW BOUNDARY. +* +NOT_LO: + CMPI 090000000H,A0 + JRHI USE_LO ;USE THE LOW VALUE! + + CMP A2,A0 + JRLS PIRX + +USE_HI: + MOVE A2,A0 + JRUC PIRX +* +* WE NEED TO WRAP FROM LOWEST TO HIGHEST +* +CK_WRAP: + CMPI 090000000H,A0 ;IN THIS RANGE, WE MUST HAVE WRAPPED DOWN + JRHI USE_HI ;SO USE HIGH VALUE + + CMP A1,A0 ;IS IT LOWER THAN LO? + JRLO USE_HI ;IT IS ....USE THE HIGH ONE. + + CMP A2,A0 ;IS IT TOO HIGH? + JRHI USE_LO ;IT IS....USE THE LOW ONE. + +PIRX: + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* * +* ADJ_BOX * +* * +* A1 HAS NUMBER OF LINES FOR ADJUSTMENT * +* RETURN A10 AT Y IF 1ST LINE OF BOX. * +* * +************************************************************************** +CADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_CULY,A10 + JRUC ADJ_ENT + +PADJ_BOX + MMTM SP,A4,A5,A0,A9 + MOVI ADJ_PULY,A10 + JRUC ADJ_ENT +ADJ_BOX MMTM SP,A4,A5,A0,A9 + MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX + CLR A4 + +ADJ_ENT + CMPI 2,A1 + JRNZ ADJ_ENT_NORMAL + MOVK 8,A5 ; 1 LINER KLUDGE + JRUC ADJ_ENT_GO +ADJ_ENT_NORMAL + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +ADJ_ENT_GO + ADD A4,A5 ; FIX IT UP A LITTLE + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 + +;ADJ_BOX +; MMTM SP,A4,A5,A0,A9 + +; MOVI HELP_DY,A5 ;DISTANCE PER ENTRY +; MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES +; ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +; MOVI ADJ_ULY,A10 ;THIS IS TOP OF BOX +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADDI AM_HX,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY +* +* A10 IS NOW SET FOR RETURN VALUE +* + MOVI COLOR_YELLOW,A9 ;MAKE THESE BOXES YELLOW + + CALLA STD_BORD + MMFM SP,A4,A5,A0,A9 + RETS + +WH_BORD + MMTM SP,A9 + MOVI COLOR_WHITE,A9 + CALLA STD_BORD + MMFM SP,A9 + RETS +; +************************************************************************** +* * +* BINBCD * +* * +* CONVERT BINARY NUMBER IN A0 TO BCD. * +* * +************************************************************************** +BINBCD MMTM SP,A1,A2,A3,A4,A5 + CMPI 99999999,A0 ;ARE WE TOO BIG? + JRLS BBIR ;IN RANGE + MOVI 99999999H,A0 ;RETURN THE LARGEST NUMBER WE HAVE! + JRUC BB_RET + +BBIR MOVK 10,A1 ;ALWAYS DIVIDE BY A0 + CLR A5 ;ACCUMULATE RESULT IN A5 + CLR A4 ;A4 HAS CURRENT SHIFT COUNT + MOVE A0,A3 ; HAS NUMERATOR +DO_BCD_AGAIN + CLR A2 + DIVU A1,A2 ;A2 HAS LEFTOVER...A3 HAS CURRENT DIGIT + SLL A4,A3 ;SHIFT IT CORRECT NUMBER OF TIMES + ADD A3,A5 ;ADD IT INTO RESULT REG + ADDK 4,A4 ;ADD 4 TO SHIFT COUNT + MOVE A2,A3 ;REFRESH NUMERATOR + JRNZ DO_BCD_AGAIN + + MOVE A5,A0 ;PUT OUT RESULT +BB_RET MMFM SP,A1,A2,A3,A4,A5 + RETS + +************************************************************************** +* * +* BCDBIN * +* * +* THIS TURNS A BCD NUMBER (IN A0) INTO A BINARY * +* NUMBER. * +* * +************************************************************************** +BCDBIN MMTM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + CLR A2 ;ACCUMULATE IN A2 + movk 1,a3 ;Current factor is 1. + movk 10,a4 ;Save some movi insts later + movk 16,a5 ;Divide it down by 16 at a time +BCBLOOP MOVE A0,A1 ;DIVIDEND IN + JRZ BCBDONE ;ALL UNITS EXHAUSTED! + CLR A0 + DIVU A5,A0 ;DIVIDE BY 10H...(REMAINDER IN A1) + MPYU A3,A1 ;TIMES POSITION FACTOR + ADD A1,A2 ;INTO ACCUMULATION REGISTER + MPYU A4,A3 ;NEXT DIGIT IS WORTH 10 TIMES THIS ONE + JRUC BCBLOOP + +BCBDONE MOVE A2,A0 ;RETURN RESULT IN A0 + MMFM SP,A1,A2,A3,A4,A5 ;WORK REGGIES. + RETS + + +**** DATA SECTION BEGINS **** + + .DATA +* +* GAME ADJUSTMENT +* +* THE FOLLOWING STRUCTURES ARE FOR EACH ADJUSTMENT +* +* AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +* AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +* AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +* AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +* AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +* AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +* AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +* AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE IN MEMORY AS ZERO +* AD_NAMEIT EQU AD_HYPER+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +* AD_WRAP EQU AD_NAMEIT+LONG_SIZE ;WORD...NON ZERO TO WRAP FROM HIGHEST TO LOWEST +* AD_NAMPTR EQU AD_WRAP+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +* +DO_PRICE + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + .LONG HELP_PRICE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG COIN_SET ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PRICE ;POINTER TO HEADER MESSAGE + +DO_MULT + .LONG MULT_ADJ ;ROUTINE TO RUN + .LONG MESS_MULT + .LONG HELP_MULT + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG MULT_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_MULT + +DO_PARAM + .LONG PRICE_ADJ ;ROUTINE TO RUN + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + .LONG HELP_PARAM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJPRICE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG CS_ENTS ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG PARAM_VAL ;Routine for showing current value + .WORD WRAP_VAL ;WRAP AROUND ON COIN MODES + .LONG 0 ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_PARAM ;POINTER TO HEADER MESSAGE + +*MECHANICAL COIN COUNTER ADJUST + +DO_CNTR + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + .LONG HELP_CNTR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCNTR ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_CNTR ;JUST SHOW THE NUMBER + .LONG MESS_CNTR ;POINTER TO HEADER MESSAGE + +DO_HEAD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + .LONG HELP_HEAD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHEADSZ ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 2 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_HEAD ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_HEAD ;POINTER TO HEADER MESSAGE + +DO_DIFF: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + .LONG HELP_DIFF ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDIFF ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_DIFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_DIFF ;POINTER TO HEADER MESSAGE + +DO_SPEEDS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + .LONG HELP_SPEEDS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJSPEED ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 5 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_SPEEDS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_SPEEDS ;POINTER TO HEADER MESSAGE + +DO_FULLG: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + .LONG HELP_FULLG ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFULLG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 4 ;MINIMUM VALUE + .LONG 16 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD 0 ;DON'T WRAP AROUND + .LONG LIST_FULLG ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FULLG ;POINTER TO HEADER MESSAGE + +DO_WINM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + .LONG HELP_WINM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJWINMODE ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE +; .LONG 3 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_WINM ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_WINM ;POINTER TO HEADER MESSAGE + +DO_COMPASS: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + .LONG HELP_COMPASS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCOMPASS ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_COMPASS ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_COMPASS ;POINTER TO HEADER MESSAGE + +DO_TOURNEY: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + .LONG HELP_TOURNEY ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOURNEY ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TOURNEY ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TOURNEY ;POINTER TO HEADER MESSAGE + +DO_AMODE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_AMOD2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AMODE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUSIC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_AMODE ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AMODE ;POINTER TO HEADER MESSAGE + +;DJT Start + .if TRIVCON + +DO_TRIVIA_CNTST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + .LONG HELP_TRIVIA ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTRIVIA ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;DON'T WRAP AROUND + .LONG LIST_TRIVIA ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_TRV_CNTST ;POINTER TO HEADER MESSAGE + + .endif ;TRIVCON +;DJT End + +DO_AHSRES: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_HSR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_AHSRES ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJHSRES ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 25000 ;MAXIMUM VALUE + .LONG 250 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL^HSR_VAL ;WRAP AROUND AND RESET HSC IF TOUCHED + .LONG MESS_OFF ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_AHSRES ;POINTER TO HEADER MESSAGE + +* +* THESE ARE ALL FOR THE CUSTOM PRICING MENU +* +COINBITS: EQU WRAP_VAL+VIRG_VAL+SIX_VAL + +DO_LCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LCU ;POINTER TO HEADER MESSAGE + .LONG HELP_LCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LCU ;POINTER TO HEADER MESSAGE + +DO_CCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CCU ;POINTER TO HEADER MESSAGE + .LONG HELP_CCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CCU ;POINTER TO HEADER MESSAGE + +DO_RCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RCU ;POINTER TO HEADER MESSAGE + .LONG HELP_RCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RCU ;POINTER TO HEADER MESSAGE +DO_XCOIN: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XCU ;POINTER TO HEADER MESSAGE + .LONG HELP_XCU ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XCU ;POINTER TO HEADER MESSAGE + +DO_TOTALIZER + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + .LONG HELP_TOTALIZER ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJTOTALIZER ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;NO EXTRA INFO NEEDED + .LONG M_TOTALIZER ;POINTER TO HEADER MESSAGE + +DO_LMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_LMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_LMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJLTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_LMULT ;POINTER TO HEADER MESSAGE +DO_RMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_RMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_RMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJRTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_RMULT ;POINTER TO HEADER MESSAGE +DO_CMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_CMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CMULT ;POINTER TO HEADER MESSAGE +DO_XMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_XMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJXTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_XMULT ;POINTER TO HEADER MESSAGE + +DO_DBVMULT + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + .LONG HELP_BMULT ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBTOTMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBVMULT ;POINTER TO HEADER MESSAGE + +DO_DBV: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_DBV ;POINTER TO HEADER MESSAGE + .LONG HELP_DBV ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJDBVMULT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_DBV ;POINTER TO HEADER MESSAGE + +DO_UC: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UC ;POINTER TO HEADER MESSAGE + .LONG HELP_UC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_UC ;POINTER TO HEADER MESSAGE + +DO_UB: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UB ;POINTER TO HEADER MESSAGE + .LONG HELP_UB ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJBUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOBONUS ;NO EXTRA INFO NEEDED + .LONG M_UB ;POINTER TO HEADER MESSAGE + +DO_UM: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_UM2 ;POINTER TO HEADER MESSAGE + .LONG HELP_UM ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMUNIT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG M_NOMIN ;NO EXTRA INFO NEEDED + .LONG M_UM ;POINTER TO HEADER MESSAGE + +CREDBITS: EQU VIRG_VAL + +DO_CST: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CST ;POINTER TO HEADER MESSAGE + .LONG HELP_CS ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCSTRT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CST ;POINTER TO HEADER MESSAGE + +DO_CONT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CONT2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CC ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCCONT ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 1 ;MINIMUM VALUE + .LONG 4 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD COINBITS ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_CONT ;POINTER TO HEADER MESSAGE + +DO_CRFR: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CRFR2 ;POINTER TO HEADER MESSAGE + .LONG HELP_CRFR ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFRAC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1 + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG M_CRFR ;POINTER TO HEADER MESSAGE + +DO_CPD: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_CPD ;POINTER TO HEADER MESSAGE + .LONG HELP_CPD ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJCDIV ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 20 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG BIN_OR_MESS ;JUST SHOW THE NUMBER + .WORD 0 ;NO WRAP AROUND + .LONG M_NO_COL ;NO EXTRA INFO NEEDED + .LONG M_CPD ;POINTER TO HEADER MESSAGE + +DO_MAX: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG M_MAX ;POINTER TO HEADER MESSAGE + .LONG HELP_MAX ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJMAXC ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 5 ;MINIMUM VALUE + .LONG 99 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG JUST_BIN ;JUST SHOW THE NUMBER + .WORD WRAP_VAL ;WRAP AROUND + .LONG 0 ;NO EXTRA INFO NEEDED + .LONG M_MAX ;POINTER TO HEADER MESSAGE + +DO_FREE: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + .LONG HELP_FREE ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJFREPL ;CMOS ADJUSTMENT WE'RE SETTING +* +* G_FREE: REPLACE ".LONG 0" WITH ".LONG 1" +* + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 250'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND +* +* G_FREE: REPLACE ".LONG LIST_NOYES" WITH ".LONG LIST_YESNO" +* + .LONG LIST_NOYES ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_FREE ;POINTER TO HEADER MESSAGE + +DO_CTIT: + .LONG GEN_ADJ ;ROUTINE TO RUN + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + .LONG CTIT_HELP ;POINTER TO HELP MESSAGES FOR RIGHT SIDE + .WORD ADJNOCPAG ;CMOS ADJUSTMENT WE'RE SETTING + .LONG 0 ;MINIMUM VALUE + .LONG 1 ;MAXIMUM VALUE + .LONG 1 ;MOVE UP AND DOWN BY 1'S + .LONG 0 ;DON'T SUB ZERO FOR ANY + .LONG LIST_1LINE ;MESSAGE LIST USED FOR VALUES. + .WORD WRAP_VAL ;WRAP AROUND + .LONG LIST_YESNO ;LIST OF MESSAGES FOR THIS ADJ. + .LONG MESS_CTIT ;POINTER TO HEADER MESSAGE + +* +* ADJUSTMENT MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +AM_BDY EQU -2 +AM_WID EQU 0A7H +AM_X EQU TIT_ULX+GAP+MB_XWID+(AM_WID/2)+C_KLUDGE +AM_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-AM_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +AM_RX EQU TIT_ULX+(2*GAP)+AM_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +AM_HX EQU AM_RX+BOX_XGAP + +MEN_ADJ: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_GADJ ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 12 + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG MESS_PRICE,DO_PRICE,ADJ_HELP + .LONG MESS_MULT,DO_MULT,ADJ_HELP + .LONG MESS_PARAM,DO_PARAM,ADJ_HELP + .LONG MESS_FREE,DO_FREE,ADJ_HELP ;FREE PLAY + .LONG MESS_HEAD,DO_HEAD,ADJ_HELP + .LONG MESS_DIFF,DO_DIFF,ADJ_HELP + .LONG MESS_SPEEDS,DO_SPEEDS,ADJ_HELP + .long MESS_FULLG,DO_FULLG,ADJ_HELP + .LONG MESS_WINM,DO_WINM,ADJ_HELP + .long MESS_COMPASS,DO_COMPASS,ADJ_HELP + .long MESS_TOURNEY,DO_TOURNEY,ADJ_HELP + .LONG MESS_AMODE,DO_AMODE,ADJ_HELP +;DJT Start + .if TRIVCON + .LONG MESS_TRV_CNTST,DO_TRIVIA_CNTST,ADJ_HELP + .endif ;TRIVCON +;DJT End + +; .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +MEN_CUST: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_CUSPRI ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_LCU,DO_LCOIN,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RCU,DO_RCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_CCU,DO_CCOIN,ADJ_HELP ;CENTER SLOT UNITS + .LONG M_XCU,DO_XCOIN,ADJ_HELP ;RIGHT SLOT UNITS + .LONG M_DBV,DO_DBV,ADJ_HELP ;DOLLAR BILL VALIDATOR + .LONG M_UC,DO_UC,ADJ_HELP ;UNITS FOR CREDIT + .LONG M_UB,DO_UB,ADJ_HELP ;UNITS FOR BONUS + .LONG M_UM,DO_UM,ADJ_HELP ;MINIMUM UNITS + .LONG M_CST,DO_CST,ADJ_HELP ;CREDITS REQUIRED TO START + .LONG M_CONT,DO_CONT,ADJ_HELP ;CREDITS REQUIRED TO CONTINUE + .LONG MESS_CTIT,DO_CTIT,ADJ_HELP ;COIN PAGE HELP LINE + .LONG M_CRFR,DO_CRFR,ADJ_HELP ;SHOW CREDIT FRACTIONS + .LONG M_CPD,DO_CPD,ADJ_HELP ;COINS PER DOLLAR + .LONG M_MAX,DO_MAX,ADJ_HELP ;MAXIMUM CREDITS + .LONG 0 + +MEN_MULT: + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG M_MULT ;TITLE + .WORD COLOR_BLUE ;COLOR OF TITLE + .WORD AM_X ;UL X + .WORD AM_Y ;UL Y + .WORD 11 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 12 ;HEIGHT OF SELECTION BAR + .WORD AM_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD AM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_AM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG M_TOTALIZER,DO_TOTALIZER,ADJ_HELP + .LONG M_LMULT,DO_LMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_RMULT,DO_RMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_CMULT,DO_CMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_XMULT,DO_XMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG M_DBVMULT,DO_DBVMULT,ADJ_HELP ;LEFT SLOT UNITS + .LONG 0 + +M_MULT + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN + +M_GADJ + .STRING "GAME ADJUSTMENT" + .BYTE 0 + .EVEN + +M_CUSPRI: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN + +MESS_FREE: + .STRING "FREE PLAY" + .BYTE 0 + .EVEN + +MESS_PRICE: + .STRING "STANDARD PRICING" + .BYTE 0 + .EVEN +MESS_MULT: + .STRING "CUSTOM MULTIPLIERS" + .BYTE 0 + .EVEN +MESS_PARAM: + .STRING "CUSTOM PRICING" + .BYTE 0 + .EVEN +MESS_DIFF + .byte "DRONE DIFFICULTY",0 + .EVEN +MESS_HEAD: + .STRING "PLAYER HEAD SIZE" + .BYTE 0 + .EVEN +MESS_SPEEDS: + .string "GAME TIMER SPEED",0 + .even +MESS_FULLG: + .string "CREDITS FOR FULLGAME",0 + .even +MESS_WINM: + .string "GAME WIN BONUS",0 + .even + +MESS_COMPASS: + .string "COMPUTER ASSISTANCE",0 + .even + +MESS_TOURNEY: + .string "TOURNAMENT MODE",0 + .even + +MESS_CNTR: + .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +MESS_CTIT: + .STRING "COIN PAGE HELP" + .BYTE 0 + .EVEN +;MESS_LIVES: +; .STRING "LIVES PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EASY: +; .STRING "EASY BUY-IN" +; .BYTE 0 +; .EVEN +;MESS_ROCKS: +; .STRING "POWER-UPS PER PLAY" +; .BYTE 0 +; .EVEN +;MESS_EXTRA: +; .STRING "EXTRA MAN EVERY" +; .BYTE 0 +; .EVEN +;MESS_LAST: +; .STRING "LAST EXTRA MAN" +; .BYTE 0 +; .EVEN +MESS_AMODE: + .STRING "ATTRACT-MODE SOUND" ;FOR MENU + .BYTE 0 + .EVEN +MESS_AMOD2: + .STRING "A-MODE SOUND" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +MESS_TRV_CNTST + .STRING "TRIVIA CONTEST" ;FOR TITLE BOX (SHORTER VER.) + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +MESS_AHSRES: + .STRING "AUTO HIGH SCORE RESET" ;FOR MENU + .BYTE 0 + .EVEN +MESS_HSR2: + .STRING "AUTO H.S. RESET" + .BYTE 0 + .EVEN + + +M_LCU: + .STRING "LEFT CHUTE (1) UNITS" + .BYTE 0 + .EVEN +M_CCU: + .STRING "CHUTE (3) UNITS" + .BYTE 0 + .EVEN +M_RCU: + .STRING "RIGHT CHUTE (2) UNITS" + .BYTE 0 + .EVEN +M_XCU: + .STRING "CHUTE (4) UNITS" + .BYTE 0 + .EVEN +M_TOTALIZER + .STRING "TOTALIZER MODE" + .BYTE 0 + .EVEN +M_LMULT + .STRING "CHUTE 1 TOTALIZER" + .BYTE 0 + .EVEN +M_RMULT + .STRING "CHUTE 2 TOTALIZER" + .BYTE 0 + .EVEN +M_CMULT + .STRING "CHUTE 3 TOTALIZER" + .BYTE 0 + .EVEN +M_XMULT + .STRING "CHUTE 4 TOTALIZER" + .BYTE 0 + .EVEN +M_DBVMULT + .STRING "DBV TOTALIZER" + .BYTE 0 + .EVEN +M_DBV: + .STRING "DBV UNITS" + .BYTE 0 + .EVEN +M_UC: + .STRING "UNITS / CREDIT" + .BYTE 0 + .EVEN +M_UB: + .STRING "UNITS / BONUS" + .BYTE 0 + .EVEN +M_UM: + .STRING "MIN. UNITS REQUIRED" + .BYTE 0 + .EVEN +M_UM2: + .STRING "MINIMUM UNITS" + .BYTE 0 + .EVEN +M_CST: + .STRING "CREDITS TO START" + .BYTE 0 + .EVEN +M_CONT: + .STRING "CREDITS TO CONTINUE" + .BYTE 0 + .EVEN +M_CONT2: + .STRING "CRED. TO CONTINUE" + .BYTE 0 + .EVEN +M_CRFR: + .STRING "SHOW CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CRFR2: + .STRING "CREDIT FRACTIONS" + .BYTE 0 + .EVEN +M_CPD: + .STRING "COINS PER DOLLAR" + .BYTE 0 + .EVEN +M_MAX: + .STRING "MAXIMUM CREDITS" + .BYTE 0 + .EVEN +MESS_AM: + .STRING "RETURN TO ADJ. MENU" + .BYTE 0 + .EVEN +* +* THIS IS THE ADJUSTMENT NAME IN THE UPPER RIGHT +* BOX +* +ADJT_Y EQU INST_ULY+9 ;CENTER IN THE BOX +ADJT_SETUP: + MESS_MAC RD7FONT,SPACING20,200,ADJT_Y,COLOR_LF,STRCNRM,0 + +CSET_Y EQU CUR_ULY+7 + .EVEN + +MOC_Y1 EQU CSET_Y+20 +MOC_Y2 EQU MOC_Y1+10 +MOC_Y3 EQU MOC_Y2+10 + +MESS_OPEN_OR_CANCEL + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y1,COLOR_LF,STRCNRM,0 + .STRING "OPEN COIN DOOR, OR" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y2,COLOR_LF,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING20,AM_X,MOC_Y3,COLOR_LF,STRCNRM,0 + .STRING "TO CANCEL" + .BYTE 0,0 + .EVEN + +IN_Y1 EQU CUR_ULY+32 +IN_Y2 EQU IN_Y1+12 +IN_Y3 EQU IN_Y2+39 +IN_Y4 EQU IN_Y3+12 + +INST_TO_ADJ + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y1,COLOR_WHITE,STRCNRM,0 + .STRING "MODIFY VALUE WITH" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y2,COLOR_WHITE,STRCNRM,0 + .STRING "JOYSTICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y3,COLOR_WHITE,STRCNRM,0 + .STRING "PRESS ANY BUTTON" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,IN_Y4,COLOR_WHITE,STRCNRM,0 + .STRING "WHEN VALUE IS CORRECT." + .BYTE 0,0 + .EVEN +* +* FOR THE WORD UNDER "ADJUSTING" WHILE THE ADJUSTING +* IS ACTUALLY BEING DONE +* +ADNOW_Y1 EQU CUR_ULY-35 +ADNOW_Y2 EQU ADNOW_Y1+12 + +MES_ADJUSTING + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y1,COLOR_LF,STRCNRM,0 + .STRING "ADJUSTING" + .BYTE 0,0 + .EVEN + +MES_ADNAME + MESS_MAC RD7FONT,SPACING07,AM_X,ADNOW_Y2,COLOR_LF,STRCNRM,0 + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +ADJ_ADV + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .STRING "SELECT WITH ANY STICK" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,AM_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .STRING "PRESS A BUTTON TO MODIFY" + .BYTE 0,0 + .EVEN + +AAY EQU IN_Y1+19H + +ADJ_ARROW + MESS_MAC RD7FONT,0FFFDH,AM_X,AAY,COLOR_LF,STRCNRM,0 + .STRING "-----> -----> -----> -----> ----->" + .BYTE 0,0 + .EVEN + +* IF COIN SETTINGS DON'T NEATLY FIT INTO +* A MODE + +MESS_TAMPERED + .STRING "CUSTOM" + .BYTE 0 + .EVEN + +MESS_DIP + .STRING "DIPSWITCH",0 + .EVEN + +M_MULTVAL + .STRING "MULTIPLIER VALUES" + .BYTE 0 + .EVEN +M_MULTVAL1 + .STRING "CHUTE 1 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL2 + .STRING "CHUTE 2 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL3 + .STRING "CHUTE 3 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL4 + .STRING "CHUTE 4 MULTIPLIER : " + .BYTE 0 + .EVEN +M_MULTVAL5 + .STRING "VALIDATOR MULTIPLIER : " + .BYTE 0 + .EVEN + +M_SLOTVAL + .STRING "COIN SLOT VALUES" + .BYTE 0 + .EVEN + +MESS_GP .STRING "GAME PRICING:" + .BYTE 0 + .EVEN +MESS_FP .STRING "FREE PLAY:" + .BYTE 0 + .EVEN +MESS_MAX .STRING "MAXIMUM CREDITS:" + .BYTE 0 + .EVEN + +M_CTS_PL .STRING "CREDITS TO START:" + .BYTE 0 + .EVEN +M_CTC_PL .STRING "CREDITS TO CONTINUE:" + .BYTE 0 + .EVEN + +************************************************************************** +* * +* HELP STRUCTURES FOR MAIN ADJUSTMENT MENU! * +* * +************************************************************************** +HELP_HEAD + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DHH_0 + .LONG DHH_1 + .LONG M_NULL + .LONG DHH_3 + .LONG DHH_4 + .LONG DHH_5 +HELP_DIFF + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG DH_0 + .LONG DH_1 + .LONG DH_2 + .LONG DH_3 + .LONG DH_4 + .LONG DH_5 +HELP_SPEEDS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG SH_0 + .LONG SH_1 + .LONG M_NULL + .LONG SH_3 + .LONG SH_4 + .LONG SH_5 +HELP_FULLG + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG FGH_0 + .LONG FGH_1 + .LONG FGH_2 +; .LONG M_NULL + .LONG FGH_3 + .LONG FGH_4 + .LONG FGH_5 +HELP_WINM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG WGH_0 + .LONG WGH_1 + .LONG WGH_3 + .LONG WGH_4 + .LONG M_NULL + .LONG WGH_5 +HELP_COMPASS + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CPH_0 + .LONG CPH_1 + .LONG CPH_2 + .LONG CPH_3 + .LONG CPH_3A + .LONG CPH_4 +HELP_TOURNEY + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG TRH_0 + .LONG TRH_1 + .LONG TRH_2 + .LONG TRH_3 + .LONG TRH_4 + .LONG TRH_5 + +HELP_CNTR + .WORD 1 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG CNTRH_0 + .LONG CNTRH_1 + .LONG M_NULL + .LONG CNTRH_3 + .LONG CNTRH_4 + .LONG CNTRH_5 + +HELP_PRICE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;5 ENTRIES + .LONG PH_0 + .LONG PH_1 + .LONG PH_2 + .LONG PH_3 + +HELP_MULT + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;5 ENTRIES + .LONG MH_0 + .LONG MH_1 + .LONG MH_2 + +HELP_DIP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_RED ;COLOR + .WORD 3 + .LONG DIH_0 + .LONG DIH_1 + .LONG DIH_2 + +HELP_PARAM + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;5 ENTRIES + .LONG PP_0 + .LONG PP_1 + .LONG PP_2 + .LONG PP_3 + .LONG PP_4 + .LONG PP_5 + +HELP_AMODE + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HAM_1 + .LONG HAM_2 + .LONG HAM_3 + .LONG M_NULL + .LONG HAM_4 + +;DJT Start + .if TRIVCON +HELP_TRIVIA + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 5 ;6 ENTRIES + .LONG HTRV_1 + .LONG HTRV_2 + .LONG HTRV_3 + .LONG M_NULL + .LONG HTRV_4 + .endif ;TRIVCON +;DJT End + + +HELP_AHSRES + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;6 ENTRIES + .LONG HAH_1 + .LONG HAH_2 + .LONG HAH_3 + .LONG HAH_4 + .LONG M_NULL + .LONG HAH_5 + +HELP_FREE + .WORD 0 + .WORD COLOR_BLUE + .WORD 6 + .LONG FP_M1 + .LONG FP_M2 + .LONG FP_M3 + .LONG FP_M4 + .LONG M_NULL + .LONG FP_M5 + +CTIT_HELP + .WORD 0 + .WORD COLOR_WHITE + .WORD 5 + .LONG CT_M1 + .LONG CT_M2 + .LONG CT_M3 + .LONG CT_M4 + .LONG CT_M5 + +HELP_LCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG LC_M5 + .LONG LC_M6 + +HELP_CCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG CC_M5 + .LONG LC_M6 + +HELP_RCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG RC_M5 + .LONG LC_M6 +HELP_XCU + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG XC_M5 + .LONG LC_M6 + +HELP_LMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C1 + +HELP_RMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C2 + +HELP_CMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C3 + +HELP_XMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_C4 + +HELP_BMULT + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MZ_M1 + .LONG MZ_M2 + .LONG MZ_DB + +HELP_TOTALIZER + .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG MR_M1 + .LONG MR_M2 + .LONG MR_M3 +HELP_DBV + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG LC_M1 + .LONG LC_M2 + .LONG LC_M3 + .LONG LC_M4 + .LONG DBV_M5 + .LONG LC_M6 + +HELP_UC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UC_M1 + .LONG UC_M2 + .LONG UC_M3 + +HELP_UB .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UB_M1 + .LONG UB_M2 + .LONG UB_M3 + +HELP_UM .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG UM_M1 + .LONG UM_M2 + .LONG UM_M3 + + +HELP_CS .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CS_M3 + +HELP_CC .WORD 0 + .WORD COLOR_WHITE + .WORD 3 + .LONG CS_M1 + .LONG CS_M2 + .LONG CC_M3 + +HELP_CRFR + .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG FR_M1 + .LONG FR_M2 + .LONG FR_M3 + .LONG M_NULL + .LONG FR_M4 + .LONG FR_M5 + +HELP_CPD .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG CPD_M1 + .LONG CPD_M2 + .LONG CPD_M3 + .LONG CPD_M4 + .LONG CPD_M5 + .LONG CPD_M6 + +HELP_MAX .WORD 0 + .WORD COLOR_WHITE + .WORD 6 + .LONG MC_M1 + .LONG MC_M2 + .LONG MC_M3 + .LONG MC_M4 + .LONG M_NULL + .LONG MC_M5 + + +************************************************************************** +* HELP MESSAGES FOR MAIN ADJUSTMENT MENU! * +************************************************************************** +CNTRH_0 .STRING "THIS CONTROLS MECHANICAL" + .BYTE 0 + .EVEN +CNTRH_1 .STRING "COIN COUNTER MODE" + .BYTE 0 + .EVEN +CNTRH_3 .STRING "CNTR1 = MULT OF LOW COIN: 1" + .BYTE 0 + .EVEN +CNTRH_4 .STRING "CNTR1 = 1 COUNT/COIN: 2" + .BYTE 0 + .EVEN +CNTRH_5 .STRING "CNTR1=LCOIN, CNTR2=RCOIN: 3" + .BYTE 0 + .EVEN + +DHH_0 .STRING "THIS CONTROLS HEAD SIZE",0 + .EVEN +DHH_1 .STRING "FOR PLAYERS IN THE GAME.",0 + .EVEN +DHH_3 .STRING "NORMAL SIZE: 1",0 + .EVEN +DHH_4 .STRING "LARGE SIZE: 2",0 + .EVEN +DHH_5 .STRING "FACTORY SETTING: 1",0 + .EVEN + + +DH_0 .byte "THIS CONTROLS THE SKILL" +M_NULL .byte 0 +DH_1 .byte "LEVEL OF THE COMPUTER",0 +DH_2 .byte "CONTROLLED PLAYERS.",0 +DH_3 .byte "EASIEST SETTING: 1",0 +DH_4 .byte "HARDEST SETTING: 5",0 +DH_5 .byte "FACTORY SETTING: 3",0 + .even + + +SH_0 .STRING "THIS CONTROLS THE OVERALL" + .BYTE 0 + .EVEN +SH_1 .STRING "GAME TIMER SPEED." + .BYTE 0 + .EVEN +SH_3 .STRING "SLOWEST SETTING: 1" + .BYTE 0 + .EVEN +SH_4 .STRING "FASTEST SETTING: 5" + .BYTE 0 + .EVEN +SH_5 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +CDSGN_0 .STRING "THE NUMBER OF ADDITIONAL" + .BYTE 0 + .EVEN +CDSGN_1 .STRING "CREDITS NEEDED TO SELECT" + .BYTE 0 + .EVEN +CDSGN_2 + .STRING "THE " + .BYTE ASCII_DQ ;" + .STRING "CREATE PLAYER" + .BYTE ASCII_DQ ;" + .STRING " OPTION" + .BYTE 0 + .EVEN +CDSGN_3 .STRING "AT BEGINING OF GAME." + .BYTE 0 + .EVEN +CDSGN_4 .STRING "MINIMUM CREDITS: 0" + .BYTE 0 + .EVEN +CDSGN_5 .STRING "MAXIMUM CREDITS: 2" + .BYTE 0 + .EVEN + +FGH_0 .STRING "ALLOWS PURCHASING A FULL" + .BYTE 0 + .EVEN +FGH_1 .STRING "GAME AT A DISCOUNT FROM" + .BYTE 0 + .EVEN +FGH_2 .STRING "NORMAL START/BUYIN PRICING." + .BYTE 0 + .EVEN +FGH_3 .STRING "MINIMUM CREDITS: 4" + .BYTE 0 + .EVEN +FGH_4 .STRING "MAXIMUM CREDITS: 16" + .BYTE 0 + .EVEN +FGH_5 .STRING "FACTORY SETTING: 8" + .BYTE 0 + .EVEN + +WGH_0 .STRING " IF ON, THE WINNING TEAM",0 + .EVEN +WGH_1 .STRING "PLAYS THE NEXT GAME FOR",0 + .EVEN +WGH_3 .STRING "FREE. ONLY THE CHALLENGING",0 + .EVEN +WGH_4 .STRING "TEAM PAYS.",0 + .EVEN +WGH_5 .STRING "FACTORY SETTING: ON",0 + .EVEN + + +CPH_0 .string "WHEN ENABLED, COMPUTER",0 + .even +CPH_1 .string "KEEPS GAME CLOSE. HOWEVER,",0 + .even +CPH_2 .string "EXPERIENCED ARCADE PLAYERS",0 + .even +CPH_3 .string "PREFER GAMES OF PURE SKILL.",0 + .even +CPH_3A .string "LOCATIONS MAY VARY.",0 + .even +CPH_4 .string "FACTORY SETTING: ENABLED",0 + .even + +;DJT Start +MH_0 .STRING "CUSTOMIZE THE INTERNAL" +;DJT End + .BYTE 0 + .EVEN +MH_1 .STRING "COIN CHUTE MULTIPLIERS" + .BYTE 0 + .EVEN +MH_2 .STRING "FOR EACH CHUTE." + .BYTE 0 + .EVEN +;MH_3 .STRING "CALCULATIONS" +; .BYTE 0 +; .EVEN + + +TRH_0 .string "WHEN IN TOURNAMENT MODE,",0 + .even +TRH_1 .string "CPU ASSISTANCE IS TURNED",0 + .even +TRH_2 .string "OFF AND NO POWERUPS OR",0 + .even +TRH_3 .string "SPECIAL GUESTS ARE",0 + .even +TRH_4 .string "ALLOWED! NO CHEATING!",0 + .even +TRH_5 .string "FACTORY SETTING: DISABLED",0 + .even + + +PH_0 .STRING "SELECT BUILT-IN PRICING" + .BYTE 0 + .EVEN +PH_1 .STRING "MODE, SELECTING COINS" + .BYTE 0 + .EVEN +PH_2 .STRING "PER CREDIT, AND" + .BYTE 0 + .EVEN +PH_3 .STRING "COIN SLOT VALUE." + .BYTE 0 + .EVEN + +DIH_0 .STRING "THIS OPTION IS BEING",0 + .EVEN +DIH_1 .STRING "ADJUSTED FROM DIPSWITCH",0 + .EVEN +DIH_2 .STRING "SETTINGS.",0 + .EVEN + +* + +LH_0 .STRING "THE NUMBER OF LIVES" + .BYTE 0 + .EVEN +LH_1 .STRING "A PLAYER RECEIVES" + .BYTE 0 + .EVEN +LH_2 .STRING "EACH TIME HE STARTS" + .BYTE 0 + .EVEN +LH_3 .STRING "OR CONTINUES A GAME." + .BYTE 0 + .EVEN +LH_4 .STRING "FACTORY SETTING: 3" + .BYTE 0 + .EVEN + +;EXH_0 .STRING "PLAYERS RECEIVE AN" +; .BYTE 0 +; .EVEN +;EXH_1 .STRING "EXTRA LIFE EACH" +; .BYTE 0 +; .EVEN +;EXH_2 .STRING "TIME THEY SCORE" +; .BYTE 0 +; .EVEN +;EXH_3 .STRING "THIS MANY POINTS." +; .BYTE 0 +; .EVEN +;EXH_4 .STRING "FACTORY SETTING: 100,000" +; .BYTE 0 +; .EVEN + +;LMH_0 .STRING "ONCE A SCORE REACHES" +; .BYTE 0 +; .EVEN +;LMH_1 .STRING "THIS LEVEL, NO EXTRA" +; .BYTE 0 +; .EVEN +;LMH_2 .STRING "MEN WILL BE AWARDED." +; .BYTE 0 +; .EVEN +;LMH_3 .STRING "FACTORY SETTING: OFF" +; .BYTE 0 +; .EVEN +;LMH_4 .STRING "(NO LIMIT ON EXTRA MEN)" +; .BYTE 0 +; .EVEN + +HAM_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HAM_2 .STRING "THE GAME WILL MAKE SOUNDS" + .BYTE 0 + .EVEN +HAM_3 .STRING "IN THE ATTRACT MODE." + .BYTE 0 + .EVEN +HAM_4 .STRING "FACTORY SETTING: OFF" + .BYTE 0 + .EVEN + +;DJT Start + .if TRIVCON +HTRV_1 .STRING "THIS DETERMINES WHETHER" + .BYTE 0 + .EVEN +HTRV_2 .STRING "THE GAME WILL ALLOW THE" + .BYTE 0 + .EVEN +HTRV_3 .STRING "TRIVIA CONTEST AT GAME OVER." + .BYTE 0 + .EVEN +HTRV_4 .STRING "FACTORY SETTING: ON" + .BYTE 0 + .EVEN + .endif ;TRIVCON +;DJT End + +HAH_1 .STRING "THE ALL TIME HIGH SCORE" + .BYTE 0 + .EVEN +HAH_2 .STRING "TABLE WILL BE RESET TO" + .BYTE 0 + .EVEN +HAH_3 .STRING "FACTORY VALUES EACH TIME" + .BYTE 0 + .EVEN +HAH_4 .STRING "THIS MANY PLAYS OCCURS." + .BYTE 0 + .EVEN +HAH_5 .STRING "FACTORY SETTING: 5000" + .BYTE 0 + .EVEN +HG_1 .STRING "THIS ALLOWS THE GRAPHIC" + .BYTE 0 + .EVEN +HG_2 .STRING "VIOLENCE SHOWN ON SCREEN" + .BYTE 0 + .EVEN +HG_3 .STRING "TO BE ADJUSTED." + .BYTE 0 + .EVEN +HG_4 .STRING "FACTORY SETTING: NORMAL" + .BYTE 0 + .EVEN + +FP_M1 .STRING "SETTING FREE PLAY TO" + .BYTE 0 + .EVEN +FP_M2 .BYTE ASCII_DQ + .STRING "YES" + .BYTE ASCII_DQ + .STRING " ALLOWS UNLIMITED" + .BYTE 0 + .EVEN +FP_M3 .STRING "PLAY WITHOUT INSERTING" + .BYTE 0 + .EVEN +FP_M4 .STRING "ANY COINS." + .BYTE 0 + .EVEN +FP_M5 .STRING "FACTORY SETTING: NO" + .BYTE 0 + .EVEN +CT_M1 .STRING "WHENEVER STANDARD PRICING" + .BYTE 0 + .EVEN +CT_M2 .STRING "IS USED, A CORRESPONDING" + .BYTE 0 + .EVEN +CT_M3 .STRING "MESSAGE IS DISPLAYED ON THE" + .BYTE 0 + .EVEN +CT_M4 .STRING "CREDITS SCREEN. SETTING THIS" + .BYTE 0 + .EVEN +CT_M5 .STRING "TO " + .BYTE ASCII_DQ + .STRING "NO" + .BYTE ASCII_DQ + .STRING " DISABLES THE MESSAGE." + .BYTE 0 + .EVEN + +PP_0 .STRING "THIS ALLOWS ADJUSTMENT" + .BYTE 0 + .EVEN +PP_1 .STRING "OF PRICING PARAMETERS" + .BYTE 0 + .EVEN +PP_2 .STRING "(FOR NON-STANDARD MODES)," + .BYTE 0 + .EVEN +PP_3 .STRING "FREE PLAY, MAXIMUM CREDITS," + .BYTE 0 + .EVEN +PP_4 .STRING "CREDITS REQUIRED TO START" + .BYTE 0 + .EVEN +PP_5 .STRING "AND CREDITS TO CONTINUE." + .BYTE 0 + .EVEN + +;EH_0 .STRING "SETTING NOT YET" +; .BYTE 0 +; .EVEN +;EH_1 .STRING "ESTABLISHED" +; .BYTE 0 +; .EVEN +;EH_2 .STRING "FACTORY SETTING: ???" +; .BYTE 0 +; .EVEN + +LC_M1 .STRING "EACH COIN INSERTED ADDS TO" + .BYTE 0 + .EVEN +LC_M2 .STRING "COIN UNITS. THIS ADJUSTMENT" + .BYTE 0 + .EVEN +LC_M3 .STRING "SPECIFIES THE NUMBER OF COIN" + .BYTE 0 + .EVEN +LC_M4 .STRING "UNITS GIVEN FOR EACH" + .BYTE 0 + .EVEN +LC_M5 .STRING "COIN IN LEFT COIN CHUTE." + .BYTE 0 + .EVEN +LC_M6 .STRING "(SEE " + .BYTE ASCII_DQ + .STRING "UNITS / CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN +CC_M5 .STRING "COIN IN THIRD COIN CHUTE." + .BYTE 0 + .EVEN +RC_M5 .STRING "COIN IN RIGHT COIN CHUTE." + .BYTE 0 + .EVEN +XC_M5 .STRING "COIN IN FOURTH COIN CHUTE." + .BYTE 0 + .EVEN +MZ_M1 .STRING "MODIFIY TOTALIZING" + .BYTE 0 + .EVEN +MZ_M2 .STRING "MULTIPLER VALUE FOR" + .BYTE 0 + .EVEN +MZ_C1 .STRING "CHUTE 1." + .BYTE 0 + .EVEN +MZ_C2 .STRING "CHUTE 2." + .BYTE 0 + .EVEN +MZ_C3 .STRING "CHUTE 3." + .BYTE 0 + .EVEN +MZ_C4 .STRING "CHUTE 4." + .BYTE 0 + .EVEN + +MR_M1 .STRING "TOTALIZER MODE, EITHER." + .BYTE 0 + .EVEN + +MR_M2 .STRING "STANDARD TOTALIZER MODE (NO)" + .BYTE 0 + .EVEN + +MR_M3 .STRING "CUSTOM TOTALIZER MODE (YES)." + .BYTE 0 + .EVEN + +MZ_DB +DBV_M5 .STRING "BILL VALIDATOR." + .BYTE 0 + .EVEN +UC_M1 .STRING "THIS IS THE NUMBER OF COIN" + .BYTE 0 + .EVEN +UC_M2 .STRING "UNITS REQUIRED TO BUY ONE" + .BYTE 0 + .EVEN +UC_M3 .STRING "CREDIT." + .BYTE 0 + .EVEN +UB_M1 .STRING "1 BONUS CREDIT IS AWARDED" + .BYTE 0 + .EVEN +UB_M2 .STRING "AFTER THIS MANY COIN UNITS" + .BYTE 0 + .EVEN +UB_M3 .STRING "HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +UM_M1 .STRING "NO CREDITS WILL BE AWARDED" + .BYTE 0 + .EVEN +UM_M2 .STRING "UNTIL THIS MANY COIN" + .BYTE 0 + .EVEN +UM_M3 .STRING "UNITS HAVE ACCUMULATED." + .BYTE 0 + .EVEN + +CS_M1 .STRING "EACH PLAYER NEEDS THIS" + .BYTE 0 + .EVEN +CS_M2 .STRING "MANY CREDITS TO" + .BYTE 0 + .EVEN +CS_M3 .STRING "BEGIN PLAY." + .BYTE 0 + .EVEN + +CC_M3 .STRING "CONTINUE A GAME." + .BYTE 0 + .EVEN + +FR_M1 .STRING "WHEN SET TO YES," + .BYTE 0 + .EVEN +FR_M2 .STRING "FRACTIONAL CREDITS WILL BE" + .BYTE 0 + .EVEN +FR_M3 .STRING "SEEN ON THE CREDITS SCREEN." + .BYTE 0 + .EVEN +FR_M4 .STRING "FRACTION SHOWN IS:" + .BYTE 0 + .EVEN +FR_M5 .STRING "(COIN UNITS / " + .BYTE ASCII_DQ + .STRING "UNITS/CREDIT" + .BYTE ASCII_DQ + .STRING ")" + .BYTE 0 + .EVEN + +CPD_M1 .STRING "THE DETAILED BOOKKEEPING" + .BYTE 0 + .EVEN +CPD_M2 .STRING "SCREEN SHOWS TOTAL" + .BYTE 0 + .EVEN +CPD_M3 .STRING "COLLECTIONS BASED ON THIS" + .BYTE 0 + .EVEN +CPD_M4 .STRING "MANY COINS PER DOLLAR." + .BYTE 0 + .EVEN +CPD_M5 .STRING "(SET TO ZERO TO DISABLE THE" + .BYTE 0 + .EVEN +CPD_M6 .STRING "DISPLAY OF MONEY TOTALS.)" + .BYTE 0 + .EVEN + +MC_M1 .STRING "THIS IS THE LIMIT FOR" + .BYTE 0 + .EVEN +MC_M2 .STRING "THE CREDITS COUNTER." + .BYTE 0 + .EVEN +MC_M3 .STRING "ADDITIONAL COINS INSERTED" + .BYTE 0 + .EVEN +MC_M4 .STRING "WILL BE LOST." + .BYTE 0 + .EVEN +MC_M5 .STRING "FACTORY SETTING: 50" + .BYTE 0 + .EVEN + +* +* ADJUSTMENT ENUMERATION STRINGS +* +LIST_CNTR + .LONG CNTR_1,CNTR_2,CNTR_3 +LIST_HEAD + .long HEAD_1,HEAD_2 +LIST_DIFF + .LONG DIFF_1,DIFF_2,DIFF_3,DIFF_4,DIFF_5 +; .LONG DIFF_6,DIFF_7,DIFF_8,DIFF_9,DIFF_10 + +LIST_SPEEDS + .long SPEED_1,SPEED_2,SPEED_3 + .long SPEED_4,SPEED_5 + +LIST_FULLG + .long N_4,N_5,N_6,N_7 + .long N_8,N_9,N_10,N_11 + .long N_12,N_13,N_14,N_15 + .long N_16 + +LIST_WINM +; .long WG_NONE,WG_ALL,WG_2FREE,WG_4FREE + .long WG_NONE,WG_4FREE +WG_NONE .string "OFF (NO FREE GAMES)",0 + .even +;WG_2FREE .string "PLAYER VS. PLAYER",0 +; .even +WG_4FREE .string "ON (AFTER 4 PLAYER GAME)",0 + .even +;WG_ALL .string "ALL GAMES",0 +; .even + +LIST_COMPASS +LIST_TOURNEY +;DJT Start + .if TRIVCON +LIST_TRIVIA + .endif ;TRIVCON +;DJT End + .long CP_ENABLED + .long CP_DISABLED + +CP_ENABLED .string "ENABLED",0 + .even +CP_DISABLED .string "DISABLED",0 + .even + +;LIST_LIVES +; .LONG LIVE_1,LIVE_2,LIVE_3,LIVE_4,LIVE_5 +; .LONG LIVE_6,LIVE_7 + +;LIST_ROCKS +; .LONG ROCK_1,ROCK_2,ROCK_3,ROCK_4,ROCK_5 +; .LONG ROCK_6,ROCK_7,ROCK_8,ROCK_9,ROCK_10 + +LIST_AMODE + .LONG M_AMS,M_NOAMS + +LIST_NOYES + .LONG M_NO,M_YES + +LIST_YESNO + .LONG M_YES,M_NO + +LIST_DIPNOYES + .LONG M_DNO, M_DYES + +M_NO .STRING "NO" + .BYTE 0 + .EVEN + +M_YES .STRING "YES" + .BYTE 0 + .EVEN + +M_DYES .STRING "DIPSWITCH - YES",0 + .EVEN + +M_DNO .STRING "DIPSWITCH - NO",0 + .EVEN + +CNTR_1 .STRING "1 (PROPORTIONAL)" + .BYTE 0 + .EVEN +CNTR_2 .STRING "2 (1 COUNT/COIN)" + .BYTE 0 + .EVEN +CNTR_3 .STRING "3 (2 COUNTERS)" + .BYTE 0 + .EVEN + +SPEED_1 .string "1 (EXTRA SLOW)",0 + .even +SPEED_2 .string "2 (SLOW)",0 + .even +SPEED_3 .string "3 (NORMAL)",0 + .even +SPEED_4 .string "4 (FAST)",0 + .even +SPEED_5 .string "5 (EXTRA FAST)",0 + .even + +N_4 .string "4",0 +N_5 .string "5",0 +N_6 .string "6",0 +N_7 .string "7",0 +N_8 .string "8 (DEFAULT)",0 +N_9 .string "9",0 +N_10 .string "10",0 +N_11 .string "11",0 +N_12 .string "12",0 +N_13 .string "13",0 +N_14 .string "14",0 +N_15 .string "15",0 +N_16 .string "16",0 + .even + +HEAD_1 .string "1 (NORMAL)",0 + .even +HEAD_2 .string "2 (LARGE)",0 + .even + +DIFF_1 .STRING "1 (EXTRA EASY)" + .BYTE 0 + .EVEN +DIFF_2 .STRING "2 (EASY)" + .BYTE 0 + .EVEN +DIFF_3 .STRING "3 (NORMAL)" + .BYTE 0 + .EVEN +DIFF_4 .STRING "4 (HARD)" + .BYTE 0 + .EVEN +DIFF_5 .STRING "5 (EXTRA HARD)" + .BYTE 0 + .EVEN + + +;LIVE_1 .STRING "1 LIFE" +; .BYTE 0 +; .EVEN +;LIVE_2 .STRING "2 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_3 .STRING "3 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_4 .STRING "4 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_5 .STRING "5 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_6 .STRING "6 LIVES" +; .BYTE 0 +; .EVEN +;LIVE_7 .STRING "7 LIVES" +; .BYTE 0 +; .EVEN + +;ROCK_1 .STRING "1 POWER-UP" +; .BYTE 0 +; .EVEN +;ROCK_2 .STRING "2 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_3 .STRING "3 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_4 .STRING "4 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_5 .STRING "5 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_6 .STRING "6 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_7 .STRING "7 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_8 .STRING "8 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_9 .STRING "9 POWER-UPS" +; .BYTE 0 +; .EVEN +;ROCK_10 .STRING "10 POWER-UPS" +; .BYTE 0 +; .EVEN + +M_AMS .STRING "ON" + .BYTE 0 + .EVEN +M_NOAMS .STRING "OFF" + .BYTE 0 + .EVEN +;M_NORM .STRING "NORMAL" +; .BYTE 0 +; .EVEN +;M_LESS .STRING "LESS VIOLENT" +; .BYTE 0 +; .EVEN +* +* FOR EXTRA MAN EVERY AND LAST EXTRA MAN +* +MESS_OFF .STRING "OFF" + .BYTE 0 + .EVEN + +M_NOBONUS .STRING "NO BONUS CREDIT" + .BYTE 0 + .EVEN + +M_NOMIN .STRING "NO MINIMUM" + .BYTE 0 + .EVEN + +M_NO_COL .STRING "NO MONEY TOTALS" + .BYTE 0 + .EVEN + +****************************************************************************** + + .end + + diff --git a/SRC/ARC/APUNZIP.ASM b/SRC/ARC/APUNZIP.ASM new file mode 100644 index 0000000..21d13eb --- /dev/null +++ b/SRC/ARC/APUNZIP.ASM @@ -0,0 +1,897 @@ + .MLIB "APMACS.LIB" + .FILE "APUNZIP.ASM" + .TITLE "<<< AMUSEMENT PARK - UNZIPPER WBD 9/3/91 >>>" + .WIDTH 132 + .OPTION B,D,L,T + .MNOLIST + +************************************************************************** +* * +* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + .INCLUDE "AP.H" + .INCLUDE "STRING.H" + .INCLUDE "IMGTBL.GLO" + +* from AP.ASM + .REF MOVIE_KILL, DUXNOFADE, SLEEP_SWITCHX +* from APPALL.ASM + .ref PALSET, FREEPALCNT +* from APFADE.ASM + .ref FADEINS,FADEBLAK,FADE_256_OUT,FADEFULL_TEXT,FADEOUT + .ref FADEBLAK_TEXT,FADEOUT_TEXT,FADEIN_TEXT,FADEIN_TEXTSLW, FADEIN + .ref FADE_64_BLAK,FADE_64_IN,FADEOUTRED + .ref FADE_256_BLAK,FADE_256_IN + +STILNOFADE: + .long T2FIXED, BLUPLAYR, REDPLAYR, 0 + +* +* MONTENT clipname,scrnX,scrnY,Text,Sndtable +* +MONTENT .MACRO P1,P2,P3,P4,P5 + .long :P1: + .long (:P2:*8)+(:P3:*SCRN_PTCH) + .long :P5:,:P4: + .ENDM + +* +* GOOM clipname,scrnX,scrnY +* +GOOMENT .MACRO P1,P2,P3,P4 + .long :P1: + .long (:P2:*8)+(:P3:*SCRN_PTCH) + .long :P4: + .ENDM + + +LINE .set 1 +ART .set 0 +PREVIEW .set 0 + + .if ART +COLORPAL .set 01800000h + .else +COLORPAL .set 01810000h + .endif +DMAPAL .set 1a80080h + +BPP .set 3 +RAMBUFSIZ .set (4*1024)*8 ; << BPP +SCRN_ST .set (170*SCRN_PTCH)+(150*8) +PXLS_PR_TIK .set 10000 + + + .if DEBUG + .bss NUM_LINES,32 + .endif + + .bss FRAMENUM,16 + .bss CLIPSND,32 + .bss HOLDFADE,16 ; time to hold first frame + + .text + +* +* started from STILL +* +DELAYFADE: + sleep 6 + movi DUXNOFADE,a0 + dec a11 + jrz slfade + calla FADEIN + DIE + +slfade: + calla FADEINS + DIE + + +* a8 = ptr to frames +* a10 = screen dest +* a11 = controlling process (0 if none) +MOVIE_PROC + mmtm a12,a11 + clr a14 + move a14,@FRAMENUM + JSRP MOVIE +* +* Tell Montage Process to continue +* + mmfm a12,a11 + move a11,a11 ; is there a controlling process? + jrz nomontage + clr a14 ; if yes, get clr reg a11 of that process + move a14,*a11(PA11),L ; (to tell it we are done) + move *a13(PTEMP1+16),*a11(PA10),L ; and put last palette slot in reg a10 +nomontage: + + DIE + + +* +* a8 = start of compressed picture data +* a10 = screen address of picture start +* +MOVIE: + move @PAGE,a14 + jrnz nopgchg + addi PAGE1ADR,a10 ; start in page 1 if page 0 is currently displayed +nopgchg: + + callr ParseHeader + callr ALLOCPALS + jrz nostill ; and return... + ; a6 = X size + ; b3 = Y size + ; a4 = # frames + ; b4 = strtpal + ; (if hi bit set, means single pal) + MOVIM 07fffh,*a13(PTEMP1),W + JSRP DECOMPRESS + setf 32,0,1 + setf 16,1,0 + + RETP + +* +* a10 = 0 if you want to center still in Y +* a8 = start of compressed picture data +* a11 = 1 start faded do slow fade, +* 2 start faded, do normal fade +* 0 no fade +* +STILL: + CLRM @HOLDFADE,W + callr ParseHeader + move a10,a10 + jrnz nocentery + movi SCRHGHT,a10 + sub a10,a1 + neg a1 + srl 1,a1 + sub a1,a10 + dec a10 +nocentery: + sll 12,a10 ; shift over to make address + + movi SCRWIDTH,a14 + sub a6,a14 + addk 5,a14 + srl 2,a14 + sll 4,a14 ; get bit address + add a14,a10 ; center based on X size of picture + +* +* ColorPalette... Start of Palette data in a8, Number of colors in a7 +* + callr ALLOCPALS + jrz nostill ; and return... + ; a6 = X size + ; b3 = Y size + ; a4 = # frames + ; b4 = strtpal + ; (if hi bit set, means single pal) + move a11,a11 + jrz nofade + move b3,a2 + move b4,a3 + mmtm a12,a2,a3,a4,a6 + clr a0 + calla FADEBLAK + SLEEP 1 + CREATE PFADEPID,DELAYFADE + mmfm a12,a2,a3,a4,a6 + move a2,b3 + move a3,b4 + move a6,b9 +nofade: + MOVIM PXLS_PR_TIK,*a13(PTEMP1),W + JSRP DECOMPRESS +nostill: + setf 32,0,1 + setf 16,1,0 + RETP + + + +************************************************************************** +* * +* ALLOCPALS - ALLOCATES A PALETTES FOR MOVIE FOOTAGE * +* A8 = ADDRESS OF COLOR DATA * +* A7 = NUMBER OF COLORS +* RETURNS: * +* Z = FAILURE, NO PALETTES FREE * +* A0 = 0 * +* NZ = PALETTE ALLOCATED * +* A0 = STARTING COLOR MAP (0000 - 0F0F) * +* * +************************************************************************** +ALLOCPALS: +*CHECK FOR A SPARE PALETTE + MOVI NUMPAL,A3 + MOVI PALRAM,A5 +ALLPL1: + MOVE *A5(PALCNT),A2,W + JRNE CKNXTPAL ;PALETTE NOT EMPTY + + ;CHECK TIME WHEN FREED, CAN'T REALLOCATE ON SAME TIK + MOVE *A5(PALTIME),A2,W + JRZ ALLPAL2 + MOVE @WAVEIRQS,A14,W ;ONLY NEED THE BOTTOM 16 BITS + CMP A2,A14 + JRNE ALLPAL2 ;PALETTE OK TO GRAB +CKNXTPAL + ADDI PALRSIZ,A5 + DSJS A3,ALLPL1 + + CLR A0 ;NO PALETTES DEFAULT 0 AND + JRUC uzabt ;SPLIT + +*SETUP YOUR NEW PALETTE +ALLPAL2: +; move a7,a14 +; sll 8,a7 +; add a7,a14 +; move a14,b4 +; srl 8,a7 +; jrnz donxt +; ori 80000000h,b4 +;donxt: +; move *a8+,a2 ; number of colors in this palette + + move a7,a2 ; number of colors in palette + ori 80000000h,b4 + CALLA SET1PAL ; SETUP PALETTE TRANSFER + jreq uzabt ; abort + sll 4,a2 + add a2,a8 ; adjust condensed pointer accordingly +; dec a7 +; jrge donxt + + move a0,b14 ; adjust start palette +; subxy b4,b14 + movx b14,b4 + inc b14 ; clear z flg +uzabt: + rets + + +SET1PAL: + MOVE *A5(PALCNT),A14,W + JRNE ALLPLX ;PALETTE NOT EMPTY + + DECM @FREEPALCNT,W + + MOVE A3,A1 ;PALETTE # + SUBI NUMPAL,A1 ;COMPUTE PALETTE # + NEG A1 + move a1,*a13(PTEMP1+16) ; save slot number + +; .IF YUNIT +; MOVE A1,A14 ;MOVE BITS 4,5 TO 6,7 FOR YUNIT +; SLL 28,A1 ;STRIP OFF BITS 4,5 +; SRL 28,A1 +; SRL 4,A14 +; SLL 6,A14 +; ADD A14,A1 +; .ENDIF + + SLL 8,A1 ;X 256 + + move a8,a0 + calla PALSET + jreq ALLPLX +; subk 16,a0 ; include word with num colors + MOVE A0,*A5,L ;STUFF PALETTE I.D. +ALLPL3: + move a1,a0 + srl 8,a0 + add a1,a0 + + MOVE *A5(PALCNT),A14,W ;INCREMENT COUNT + ADDK 1,A14 ;SET NE FOR SUCCESS + MOVE A14,*A5(PALCNT),W + dec a3 + addi PALRSIZ,a5 +ALLPLX: + RETS + + + + +**************************************************************** +* +* a8 = Ptr to compressed data +* +* Returns: a6 and b9 = X +* b3 = Y +* a4 = # frames +* a7 = # colors in palette +* +ParseHeader: + move *a8+,a6 ; X size of frames + move *a8+,a1 ; Y size of frames + move *a8+,a4 ; number of frames + move *a8+,a7 ; number of colors + move a1,b3 + move a6,b9 + rets + +;LengthTree .set RamBuffer+RAMBUFSIZ +;DistTree .set LengthTree+(256*32) +;MinPtrTbl .set DistTree+(256*32) +; .bss RamBuffer,RAMBUFSIZ + +RamBuffer .set 1000000h + .bss LengthTree,256*32 + .bss DistTree,256*32 + .bss MinPtrTbl,256*32 + + + .sect "UNZIP" + +* +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* b5 = used for outputting pal bits to DMAPAL +* b6 = pixel sleep count +* b7 = constant mask for pxl palette split +* b8 = DMAPAL +* b9 = Master X storage +* b0 = Ptr to Length tree +* b1 = Ptr to Distance tree +* b3 = start of line +* b4 = start palette duped to fill 16 bits +* (bit 31 set if only 1 palette used) +* b14 = temp storage in ReadTree and UncompressTree +* + + +**************************************************************** +* +* a8 = Ptr to compressed data +* a7 = Ptr to tree table +* +UncompressTree: +* +* Determine how many codes of each bit length +* + setf 8,0,0 + move *a8+,a0 ; # compressed bytes to describe tree - 1; + inc a0 + movk 0fh,a3 ; constant 0xF + clr a6 ; total number of codes in tree + move a7,a5 ; save start of tree +* +utr0: + move *a8+,a1 ; (# codes - 1 << 4) | bit lngth - 1 + move a1,a2 + srl 4,a2 + inc a2 ; number of codes of this bit length + add a2,a6 ; adjust total + and a3,a1 + inc a1 ; bit length + move a1,a11 + sll 16,a11 + movy a11,a1 ; duplicate bit length for sort +utr1: + move a1,*a7+,L + dsjs a2,utr1 ; fill table + + dsjs a0,utr0 ; a6 now contains size of tree + setf 16,1,0 +* +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. +* + movi MinPtrTbl,a0 ; for placing translation ptrs + move a6,a9 ; outer loop count (# entries in tree table) +* +* Outer loop, after each pass, we have found the next minimum +* +utr2: + move a5,a7 ; restore start of tree + movi 06543h,a14 ; current minimum + move a6,b14 ; inner loop count + movi 07654h,a1 ; constant +* +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. +* +utr3: + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a11 ; save pointer to minimum +nonewmin: + addk 32,a7 ; point to next entry + dsjs b14,utr3 +* +* end of inner loop: min is in a14, ptr to min is in a7 +* + move a1,*a11 ; set this minimum high. + move a11,*a0+,L ; place translation ptr in MinPtrTbl. + + dsjs a9,utr2 +* +* END OF SORT, Now compute the codes +* + clr a11 ; Code + clr a1 ; CodeInc + clr a2 ; LastBitLength + move a6,a14 ; loop counter +utr4: + move *-a0,a7,L ; translated pointer + add a1,a11 + movb *a7(16),a3 ; bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ; set new LastBitLength + movk 16,a3 + sub a2,a3 ; 16-LastBitLength + movk 1,a1 + sll a3,a1 ; CodeInc = 1 << (16-LastBitLength) +samebitlng: + move a11,a5 ; copy of Code in a5 + movk 16,a9 ; reverse bit loop count +rvrsbts: + sll 1,a5 ; Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a9,rvrsbts + + move a3,*a7 ; store code with bits reversed + dsjs a14,utr4 + + rets + + +* a8 = (sgn bit = 1, 1 pal, otherwise 4 pals) +* (low 16 bits contain repeated palette slot number +* +HOLD_FADE_PROC: + move a8,a9 + sll 24,a9 + srl 24,a9 ; save 8 bits only + sleep 2 ; let palette get loaded + move a9,a0 + move a8,a8 + jrn unoout + calla FADE_256_BLAK ; bring to zero + jruc hfphk1 +unoout: + calla FADE_64_BLAK +hfphk1: + sleep 4 ; let it fade + move a9,a0 + move a8,a8 + jrn unoin + calla FADE_256_IN ; fade in + jruc hfphk2 +unoin: + calla FADE_64_IN +hfphk2: + DIE + + +SetConstants: + movi LengthTree,b0 + movi DistTree,b1 +SetConstX: + movi RamBuffer+RAMBUFSIZ-1,a0 ; mask for rambuf ptr + movi RamBuffer,a6 ; used for negative wraparound + movi 0c0c0h,b7 ; for blowing words of + movi DMAPAL,b8 + move *a13(PTEMP1),a14 ; pixels between sleep + move a14,b6 + movi BlowLine,b10 + rets + + +MovieSleep: + movk 1,a0 ; assume a 1 tick sleep + move @FRAMENUM,a14 ; if 1st frame, check for hold + jrz chk4hold + dec a14 + jrnz nonono + move @HOLDFADE,a14 ; on second frame, wait for hold time + add a14,a0 + jruc nonono + +chk4hold: + move @HOLDFADE,a14 + jrz nonono ; if need to hold, create fade process + PUSH a8 + move b4,a8 + CREATE PID_IND,HOLD_FADE_PROC + PULLQ a8 + movk 6,a0 ; sleep longer if we are fading palette +nonono: + movi swappg,a14 + jruc GoToSleep +swappg: + move @VCOUNT,a4 + cmpi 200,a4 + jrle swappg + mmfm a12,a4,a10 +* +* Swap Display Pages between frames +* + PUSH a0 + clr a3 + movi DPYSTRT0,a14 + movi PAGE1ADR,a0 ; change screen address for swap + btst 20,a10 ; which page are we on? + jrz onp1 + neg a0 + movi DPYSTRT1,a14 + movk 1,a3 +onp1: + add a0,a10 + setf 16,1,0 + move A14,@DPYSTRT,W + move a3,@PAGE,W + + move @FRAMENUM,a14 ; sound only on first frame + jrnz no + move @CLIPSND,a0,L ; sound from sound table + jrz no + calla ONESND +no: + PULLQ a0 + inc a14 + move a14,@FRAMENUM ; save next frame number + + move *a13(PTEMP3),a14,L ; number of pixels in a frame + add a14,a11 ; adjust by extra pixels done last time + + cmpi 2,a4 + jrne nxtfrm + movi BlowLineLastFrm,b10 + jruc nxtfrm + + + +StillSleep: + movk 1,a0 + movi us0,a14 ; return address +GoToSleep: + getst b2 + move a12,b14 + mmtm b14,b2,b3,b4,b5,b9 + move b14,a12 + setf 32,0,1 + setf 16,1,0 + move a14,*a13(PTEMP2),L + calla PRCSLP + + move a12,b14 + mmfm b14,b2,b3,b4,b5,b9 + move b14,a12 + + callr SetConstants + move *a13(PTEMP2),a14,L + + putst b2 + exgpc a14 + + +* +* ENTERING: +* a4 = Number of frames +* a8 = Ptr to Compressed Data Table +* b3 = Y size +* b4 = strt pal +* b9 = X size +* +DECOMPRESS: + movi LengthTree,b0 + movi DistTree,b1 + + move b0,a7 ; Length Tree + callr UncompressTree + + move b1,a7 ; Distance Tree + callr UncompressTree +* +* clear upper 4K of RamBuffer to take care of initial wraparound +* + movi RamBuffer+RAMBUFSIZ,a1 ; end of buffer + movi 1024,a2 ; 4K bytes = 1K long words + clr a3 +clrbuf: + move a3,*-a1,L + dsjs a2,clrbuf +* +* Do some initializing +* + mpyu b9,b3 + move b3,a11 ; total # bytes in frame in a11 + move a11,*a13(PTEMP3),L + callr SetConstX + move a6,a9 ; Where to uncompress to + move a9,b3 ; first frame start + clr b5 ; pixel count for Stills only + cmpi 1,a4 + jreq UncompressFrame +* .align +nutha1: + .if DEBUG + CLRM @NUM_LINES,L + .endif + mmtm a12,a4,a10 + JSRP UncompressFrame ; a7 is available + jruc MovieSleep ; to swap display pages and sleep +nxtfrm: + dsjs a4,nutha1 ; loop once for each frame + + RETP + + +******************************************************************* +* +* Entry: Table in a5 +* Compressed data ptr in a8 +* +* Uses: a2 = bits read +* a3 = Code +* a4 = Blngth +* a14 = temp storage +* a7 = data parsed from input stream +* +* Must preserve: +* a9, a1, a6, a11, a8, a0, a10 +* +ReadTree: + movk 1,a2 ; bits_read + clr b14 ; result + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit +rtlp: + move *a5,a3,L ; Code in a3 + move *a5(16),a4,L ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +rtlp2: + cmpxy a3,a7 + jryz ident + addk 32,a5 + inc b14 + jruc rtlp +ident: + cmp a2,a4 + jrz finis + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc rtlp2 + +finis: + move b14,a7 ; leave result in a7 + rets ; Result returned in a7 + + + +****************************************************************************** +* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* +BlowLine: + .if DEBUG + INCM @NUM_LINES,L + .endif + move a10,a3 ; where on screen to put + move b3,a1 ; start of line + move b9,a5 ; X size + srl 1,a5 ; X/2 = loop counter + + move b4,b4 + jrn SglPalBlowLine + move b7,a2 ; mask + +BlowL1: + move *a1+,a14,L + and a0,a1 + move a14,b14 + andn a2,a14 + and b7,b14 + srl 6,b14 + add b4,b14 + move b14,*b8,L ; write palette register + move a14,*a3+,L ; write data to screen + dsjs a5,BlowL1 + +EndBlowLine: + subi SCRN_PTCH,a10 + move a1,b3 ; save for next frame + sub b9,b5 ; readjust pixels for next line + CMP B9,B5 ; ADDED 6/92. If there are enough pixels + JRGE NUTHER ; left to do another line, do it. + sub b9,b6 ; pixel sleep count + jrgt noslp + clr b6 ; set zero flag to indicate sleepytime +noslp: + rets + +NUTHER: + SUB B9,B6 + JRUC BlowLine + +SglPalBlowLine: + move b4,*b8,L ; Set Pallette Register +SPBlowL1: + move *a1+,*a3+,L ; write into both screens + and a0,a1 + dsjs a5,SPBlowL1 + + jruc EndBlowLine + + + +**************************************************************** +* +* a8 = Ptr to compressed data +* a9 = Where to put uncompressed bytes +* a11 = How many to place before returning. +* a0 = mask for a9 +* +* Uses: a4 = Length +* a1 = Distance +* a2 = ptr to leftover data if there is any +* +* ReadTree uses a2-a5,a7,a14 +* Need to Preserve: B9-B13 +* a0 = Ram Buffer addr mask +UncompressFrame: + setf 16,0,1 ; FIELD 1 IS 16 BITS!!! +UncFr0: + setf 1,0,0 + move *a8+,a14 ; if bit = 1, read 8 bits and copy + jrz decode_still + setf 8,0,0 + + move *a8+,*a9+ + and a0,a9 + + inc b5 ; pixel count + dec a11 +us1: + cmp b5,b9 ; have we filled a line yet? + jrgt us0 + call b10 ; Blow Line Routine + jrz StillSleep +us0: + move a11,a11 + jrgt UncFr0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + move b1,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll BPP,a1 ; turn it into a pointer + + move b0,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + move a7,a4 + cmpi 63,a4 + jrne notmaxs + setf 8,0,0 ; If length is 63, + move *a8+,a3 ; get next byte, and + add a3,a4 ; add it to the length +notmaxs: + addk 2,a4 ; add MML, LENGTH in a4 + setf 8,0,0 +* +* We now have Length and Distance, now determine where to copy from +* + move a9,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a6,a2 +* +* COPY POINTER is now in a2, do the copying +* + move a4,a14 +copys: + move *a2+,*a9+ + and a0,a9 + and a0,a2 + dsjs a14,copys + + move a4,b14 + add b14,b5 ; adjust pixel counter for this line + sub a4,a11 ; adjust total pixel count + jruc us1 + + +****************************************************************************** +* +* Same as BlowLine, but blows to both screens +* +BlowLineLastFrm: + move a10,a3 ; where on screen to put + move a3,a4 + xori PAGE1ADR,a4 + move b3,a1 ; start of line + move b9,a5 ; X size + srl 1,a5 ; X/2 = loop counter + + move b4,b4 + jrn SglPalBLLF + move b7,a2 ; mask + + +BlowL1LF: + move *a1+,a14,L + and a0,a1 + move a14,b14 + andn a2,a14 + and b7,b14 + srl 6,b14 + add b4,b14 + move b14,*b8,L ; write palette register + move a14,*a3+,L ; write data to screen + move a14,*a4+,L ; write data to screen + + dsjs a5,BlowL1LF + jruc EndBlowLine + + +SglPalBLLF: + move b4,*b8,L ; Set Pallette Register +SPBL1: + move *a1+,a14,L ; write into both screens + move a14,*a3+,L + move a14,*a4+,L ; write into both screens + and a0,a1 + dsjs a5,SPBL1 + + jruc EndBlowLine + + + + \ No newline at end of file diff --git a/SRC/ARC/COLL2.ASM b/SRC/ARC/COLL2.ASM new file mode 100644 index 0000000..02b725f --- /dev/null +++ b/SRC/ARC/COLL2.ASM @@ -0,0 +1,1051 @@ +************************************************************** +* +* Software: George Petro, Todd Allen +* Initiated: 1989? +* +* Modified: Mark Turmell, 7/17/90 -Total Carnage +* Shawn Liptak, 7/?/91 -Speed improvements +* Shawn Liptak, 7/?/91 -SL type stuff +* Shawn Liptak, 8/30/91 -New collision loop +* Shawn Liptak, 9/18/91 -Pixscan improvements +* Shawn Liptak, 2/11/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 5/5/92 10:40 +************************************************************** + .file "coll2.asm" + .title "collision routines" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "shawn.hdr" + +;sounds + + + +;refs + .ref PCNT + .ref ball_hit + +;defs + + +;ram + + BSSX coll_stop ,16 ;!0=Stop scan on current obj + .bss PList ,32*(NOBJ+1) ;List of objs of class player + .bss NList ,32*(NOBJ+1) ;List of objs of class neutral + .bss EList ,32*(NOBJ+1) ;List of objs of class enemy + +;NOBJ=# objects to display + + + +**************************************************************************** +* When writing collision routines which are to be called from the collision +* scanner in this file, the following things should be taken into +* consideration: +* The collision routines are called, not created.. +* The collision routine receives a ptr to the victims OBJ in A8 +* The collision routine receives a ptr to the killers OBJ in A0 +* The collision routine can destroy A0,A8,A14,B0,B1. +* Other registers must be preserved! +* +* When OBJ1,OBJ2 collide, two routines are called, one with +* OBJ1 in A8 and the other with OBJ2 in A8. A collision routine +* should only affect the victim, and not the killer. +* If a victim object is deleted, it will not be scanned futher. +* If any other object is deleted, the collision scan will be aborted. +* To prevent multiple simultaneous collisions of the same victim +* object, the object ID of the victim object should be modified +* by the collision routine, if the victims nature is changed. + + + +**************************************************************************** +* Old collision loop + + .if 0 ;Not used!! + .def debugtime + .def debugtimem + .bss debugtime ,16 + .bss debugtimem ,16 + + SUBR COLLISIONS + + SLEEPK 1 + move @VCOUNT,b5 + + move @WORLDTLX+16,A6 ;* COLLISION SCAN FOR OBJECTS ON SCREEN + movi 400,A14 ;End of Scan area + +coll1 move A6,A7 ;A7 Sector Xmin + addi 128,A6 ;A6 Sector Xmax + + subi 128,A14 + jrnn XmaxOk + add A14,A6 + +XmaxOk movi OBJLST,a0 ;Object list to check + callr cscnrng + + move A14,A14 + jrp coll1 + + + move @VCOUNT,b0 + sub b5,b0 + jrhs coll10 + addi >120,b0 ;VTOTAL +coll10 move @debugtime,b1 + add b0,b1 + srl 1,b1 + move b1,@debugtime + move @debugtimem,b2 + cmp b1,b2 + jrge coll20 + move b1,@debugtimem ;New max +coll20 jruc COLLISIONS + + +******************************** +*A0 * to obj list to scan +*A6 Xmax +*A7 Xmin +*Scan OBJ list, any collideable OBJ overlapping Xmin-Xmax put on +*either EList,PList or NList depending on class +*Call ColLists with each pair of lists + +cscnrng + mmtm sp,a6,a7,a14 + + movi PList,A9 ;Build collision lists + move a9,a4 + movi EList,A10 + movi NList,A11 + jruc MkLists + +csr20 move a0,*a10+,L ;Insert obj on enemy list +MkLists move *a0,a0,L ;Get next obj + jrz GotLists + + move *a0(OXPOS),a1 ;OBJ CAN LIE ON max/min boundary + cmp a6,a1 + jrhi MkLists + + move *a0(OSIZEX),a2 + add a2,a1 + cmp a7,a1 + jrlo MkLists ;Out of range? + + movb *a0(OFLAGS+B_NOCOLL-7),a2 + jrn MkLists ;Not collideable? + + move *a0(OID),a2 ;Check Class + jrn csr20 ;Enemy? + btst 14,a2 + jrnz csr40 ;Player? + + move a0,*a11+,L ;Insert obj on neutral list + jruc MkLists + +csr40 move a0,*a9+,L ;Insert obj on player list + jruc MkLists + +GotLists + clr a0 ;Null terminate each list + move a0,*a9,L + move a0,*a10,L + move a0,*a11,L + + move *A4,A0,L + jrz NoPList ;Nothing on player list? + + movi EList,A3 ;E/P + callr ColLists + + movi NList,A3 ;N/P + movi PList,A4 + callr ColLists + +NoPList + +ScnRngX mmfm sp,a6,a7,a14 + rets + .endif + + + +**************************************************************************** +* Collision loop (New version) + + SUBR collisions + + SLEEPK 1 + + move @WORLDTLX+16,a6 ;A6=Xmin + move a6,a7 + addi 100,a7 ;A7=Xmax + move a7,b3 + callr collx + + move b3,a6 + move a6,a7 + addi 100,a7 + move a7,b3 + callr collx + + move b3,a6 + move a6,a7 + addi 100,a7 + move a7,b3 + callr collx + + move b3,a6 + move a6,a7 + addi 100,a7 + callr collx + + jruc collisions + +******************************** +* Build lists and collide based on X +* A6=XMin +* A7=XMax (+1) + +collx + movi OBJLST,a0 ;Object list to check + + movi PList,a9 ;Build collision lists + move a9,b4 ;Set A5/B4 for 1st collision call + movi EList,a10 + move a10,a5 + movi NList,a11 + jruc mklists + +csr20 move a0,*a10+,L ;Insert on enemy list +mklists move *a0,a0,L ;Get next obj + jrz gotlists + + movb *a0(OFLAGS+B_NOCOLL-7),a2 + jrn mklists ;Not collideable? + + move *a0(OXPOS),a1 ;Obj can lie on max/min boundary + cmp a7,a1 + jrge mklists ;Out of range? + + move *a0(OSIZEX),a2 + add a2,a1 + cmp a6,a1 + jrle mklists ;Out of range? + + move *a0(OID),a2 ;Check Class + jrn csr20 ;Enemy? + btst 14,a2 + jrnz csr40 ;Player? + + move a0,*a11+,L ;Insert on neutral list + jruc mklists + +csr40 move a0,*a9+,L ;Insert on player list + jruc mklists + +gotlists + move a0,*a9,L ;Null terminate each list + move a0,*a10,L + move a0,*a11,L + + callr ColLists ;Collide enemy to player + + movi NList,a5 + movi PList,b4 +; jruc ColLists ;Collide neutral to player + ;Fall through + +******************************** +* Collide objects on list A5 with those on LIST B4 +* A5,B4=ptrs to null terminated tables of object ptrs + +ColLists +CLstsLp0 + move *a5+,a1,L + jrz scndone + ;Load up coors of obj from first list + move *a1(OXPOS),a9 ;A9=OBJ1 Xmin + jrz CLstsLp0 ;Deleted? + move *a1(OSIZEX),a10 ;A10=OBJ1 Xmax (+1) + add a9,a10 + move *a1(OYPOS),a7 ;A7=OBJ1 Ymin + move *a1(OSIZEY),a11 ;A11=OBJ1 Ymax (+1) + add a7,a11 + + move b4,a6 ;Load head of second list + +PScnLp1 move *a6+,a2,L + jrz CLstsLp0 + + movb *a2(OFLAGS+B_3D-7),a0 + jrn #3d ;3D mode? (Maybe all????) + + move *a2(OYPOS),a0 ;Check objs A1,A2 for intersection + cmp a11,a0 + jrge PScnLp1 ;Y2Min >= Y1Max? + move *a2(OSIZEY),a14 + add a14,a0 + cmp a7,a0 + jrle PScnLp1 ;Y2Max <= Y1Min? + +#3d move *a2(OXPOS),a0 ;Signed compares because objs may lie on 0 + jrz PScnLp1 ;Deleted? + cmp a10,a0 + jrge PScnLp1 ;X2Min >= X1Max? + move *a2(OSIZEX),a14 + add a14,a0 + cmp a9,a0 + jrle PScnLp1 ;X2Max <= X1Min? + + callr ColFunc ;>Call colfunc for obj A1 and A2 + move b0,b1 ;B1=*Collision routine for obj A1 + SWAP a1,a2 + callr ColFunc + SWAP a1,a2 + move b0,b2 ;B2=*Collision routine for obj A2 + or b1,b0 ;Set z flag if both are zero + jrz PScnLp1 + + movb *a1(OFLAGS+B_PIXSCAN-7),a14 ;Is PIXSCAN ON + jrn DoPScn0 + movb *a2(OFLAGS+B_PIXSCAN-7),a14 ;Is PIXSCAN ON + jrnn SkPxScn0 +DoPScn0 callr PIXSCAN + jrnc PScnLp1 ;BR=THIS WASN'T REALLY A COLLISION +SkPxScn0 + + clr a0 + move a0,@coll_stop ;Clr flag + + move b1,b1 + jrz PObj2Col + move a1,a8 + move a2,a0 + call b1 ;Call collision for A1 + +PObj2Col + move b2,b2 + jrz PCkFree + move a2,a8 + move a1,a0 + call b2 ;Call collision for A2 + +PCkFree move @coll_stop,a0 + jrz PScnLp1 ;Continue scan? + jruc CLstsLp0 + +scndone rets + + +**************************************************************************** +* Return in B0 routine for obj A1 struck by obj A2 +* Trashes A3-A4 + +ColFunc + movb *a1(OID+8),a3 + movb *a2(OID+8),a4 + sll 32-5,a3 + srl 17,a3 ;32 Long Word Align + sll 32-5,a4 + srl 22,a4 ;Long Align + add a4,a3 + addi TypeTbl,a3 + + move *a3,a3,L + jump a3 ;Routine can trash A0/A3/A4/A8/A14 + + +**************************************************************************** +* These are the COLLISION FUNCTIONS +* A collision function is selected by the routine ColFunc +* which uses the TYPE field of the victims OID to select a subtable +* and indexes the subtable with the TYPE field of the killer. +* This gives a ptr to a COLLISION FUNCTION which returns +* the COLLISION ROUTINE to be called for the victim in B0. +* The COLLISION FUNCS can destroy registers A0,A3,A4,A8 +**************************************************************************** + +TypeTbl +;0000 +;NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;100 +;Player + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;200 +;Basketball + .LONG NULL, BBPL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;300 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;400 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;500 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;600 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;700 +;Text + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;800 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;900 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;a00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;b00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;c00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;d00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;e00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;f00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1000 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1100 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1200 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1300 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1400 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1500 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1600 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1700 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1800 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1900 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1a00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1b00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1c00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1d00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1e00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1f00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + + +******************************** +* Shawn's enemy type collisons + +;SLPL movb *a1(OID),a0 +; cmpi SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +; subk SUBMSL,a0 +; jreq slpl5 ;Missile? +; movb *a2(OID),a0 ;Player ring +; subk 3,a0 +; jrne NULL +;slpl5 +;; movi slt_ringhit,b0 +; rets +; +;SLBL movb *a1(OID),a0 +; subk SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +;; movi slt_hit,b0 ;Bullet +; rets +; +;SLBB movb *a1(OID),a0 +; subk SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +;; movi slt_bbhit,b0 ;Blade, bomb +; rets +; +;BLSL movb *a2(OID),a0 +; subk SUBMSL,a0 +;; jrne BLHU ;!Missile? +;; movi KILL_BULL2,b0 +; rets + + + + +NULL clr b0 + rets + + +BBPL + move *a1(OZPOS),a0 + move *a2(OZPOS),a14 + sub a14,a0 + move a0,a3 + abs a3 + cmpi 30,a3 + jrhi NULL ;Not in range? + + movi ball_hit,b0 + rets + + + +**************************************************************************** +*COLLISION ROUTINE +*A1=OBJECT ONE +*A2=OBJECT TWO +*RETURNS: CS= COLLISION, CC= NO COLLISION +* +* CLOBBERS A14 +*CREATE TIME SLICE WHILE LOCKING OUT INTERRUPTS + +PIXSCAN + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13 + mmtm sp,b0,b1 + + move a1,a10 ;A10=*Obj0 + move a2,a8 ;A8=*Obj1 + dint + move *a10(OXPOS),a3 ;Set up object box TLX,TLY + move *a10(OYVAL),a14,L + movy a14,a3 ;A3=Obj0 Y:X + + move *a8(OXPOS),a4 + move *a8(OYVAL),a14,L + movy a14,a4 ;A4=Obj1 Y:X + + move *a10(OCTRL),a6 + move a6,b0 ;B0=flags object 0 + move *a8(OCTRL),a6 + move a6,b1 ;B1=flags object 1 + + move *a10(OIMG),a9,L ;A9=*Image 0 + move *a8(OIMG),a7,L ;A7=*Image 1 + eint + + move *a9,a5,L ;ISIZE + move *a7,a6,L ;ISIZE + addxy a3,a5 ;A5=Obj0 lower rgt Y:X + addxy a4,a6 ;A6=Obj1 lower rgt Y:X + cmpxy a6,a3 ;compare (lrx1,lry1) to (tlx0,tly0) + JRXGE CSFAIL + JRYGE CSFAIL + cmpxy a4,a5 ;compare (tlx1,tly1) to (lrx0,lry0) + JRXLE CSFAIL + JRYLE CSFAIL + + +*A11=XOFF0 +*A12=XOFF1 + move a3,a2 ;>Calc XOFF0,XOFF1,XSCAN + subxy a4,a2 + sext a2 + jrnn clx1 + neg a2 + move a2,a11 ;object 1 to the right + clr a12 + move a4,a13 ;rightmost top left + jruc clx2 + +clx1 move a2,a12 ;object 0 to the right + clr a11 + move a3,a13 ;rightmost top left +clx2 cmpxy a5,a6 ;find leftmost lower right + jrxn clx3 + subxy a5,a13 + jruc clx4 + +clx3 subxy a6,a13 +clx4 sext a13 + neg a13 ;A13=XSCAN + + ;>Calc YOFF0,YOFF1,YSCAN + sra 16,a3 ;Kill X half + sra 16,a4 + sra 16,a5 + sra 16,a6 + move a3,a2 ;A3=YOFF1 + sub a4,a2 ;A2=YOFF0 + jrnn cly1 + neg a2 + clr a3 ;object 1 to the right + move a4,a14 ;rightmost top left + jruc cly2 + +cly1 move a3,a14 ;object 0 to the right + move a2,a3 + clr a2 +cly2 cmp a5,a6 ;find leftmost lower right + jrn cly3 + sub a5,a14 + jruc cly4 +cly3 sub a6,a14 +cly4 neg a14 ;A14=YSCAN + +*A2=YOFF0 +*A3=YOFF1 +*A4=IMAGE SOURCE ADDRESS TEMP +*A5=WIDTH TEMP +*A7=IMAGE 1 DATA HEADER POINTER +*A8=IMAGE 1 OBJECT POINTER +*A9=IMAGE 0 DATA HEADER POINTER +*A10=IMAGE 0 OBJECT POINTER +*A11=XOFF0 +*A12=XOFF1 +*A13=XSCAN +*A14=YSCAN + +*CALCULATE OBJECT 0 STARTAD, HINC0, VINC0 + + move *a9(ISAG),a4,L ;Get image source address + move *a9,a5 ;Get ISIZEX + addk 3,a5 ;correct erroneous width (thanx, warren) + srl 2,A5 + sll 2,A5 + +*CHECK OBJECT 0 FLIPS + + btst B_FLIPH,b0 + jrnz CL0HF ;HORIZONTAL FLIP + btst B_FLIPV,b0 + jrnz CL0VF ;VERTICAL FLIP + + ;NO FLIP CASE + move a5,a1 ;Get width + mpyu a2,a1 ;Mult width x yoff + add a11,a1 ;Add in x offset + sll 3,a1 ;Correct for byte addressing + add a1,a4 ;A4=STARTAD0=IMAGEAD0+(YOFF0 X W0) + XOFF + sub a13,a5 ;A5=VINC0=W0-XScan + sll 3,a5 ;Correct for pixel addressing + movk 8,a2 ;A2=HINC0 + jruc CLOBJ1 + + +CL0HF BTST B_FLIPV,B0 ;VERT FLIP TOO? + JRNE CL0HVF ;HORIZ AND VERT FLIP + ;HORIZONTAL FLIP + MOVE A5,A1 ;GET WIDTH + MPYU A2,A1 ;MULT WIDTH X Y OFFSET + ADD A5,A1 ;ADD IN WIDTH + SUB A11,A1 ;SUBTRACT X OFFSET + DEC A1 ;-1 MORE + SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING + ADD A1,A4 ;A4=STARTAD0=IMAGEAD0+(YOFF0*W0)+W0-XOFF0-1 + MOVI -8,A2 ;A2=HINC0 + ADD A13,A5 ;A5=VINC0=W0+XSCAN + SLL 3,A5 ;CORRECT FOR PIXEL ADDRESSING + JRUC CLOBJ1 + + ;VERTICAL FLIP +CL0VF MOVE *A9(ISIZEY),A1 ;GET HEIGHT + SUB A2,A1 ;SUBTRACT YOFF0 + DEC A1 + MPYU A5,A1 ;MULTIPLY BY WIDTH + ADD A11,A1 ;ADD IN X OFFSET + SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING + ADD A1,A4 ;A4=STARTAD0=IMAGEAD0+(H0-YOFF0-1)W0+XOFF0 + NEG A5 ;-W0 + SUB A13,A5 ;-XSCAN + SLL 3,A5 ;A5=VINC0=-W0-XSCAN + MOVK 8,A2 ;A2=HINC0 + JRUC CLOBJ1 + + ;VERTICAL AND HORIZONTAL FLIP +CL0HVF MOVE *A9(ISIZEY),A1 ;GET HEIGHT + SUB A2,A1 ;SUBTRACT YOFF0 + DEC A1 + MPYU A5,A1 ;MULTIPLY BY WIDTH + ADD A5,A1 ;ADD IN WIDTH (W0) + SUB A11,A1 ;SUBTRACT XOFF0 + DEC A1 + SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING + ADD A1,A4 ;A4=STARTAD0=(H0-YOFF0-1)W0+W0-XOFF0-1 + NEG A5 ;-W0 + ADD A13,A5 ;+XSCAN + SLL 3,A5 ;A5=VINC0=-W0-XSCAN + MOVI -8,A2 ;A2=HINC0 + + +*CALCULATE OBJECT 1 STARTAD, HJUMP, VJUMP + +*A2=HINC0 +*A3=YOFF1, HINC1 +*A4=STARTAD0 +*A5=VINC0 +*A6=STARTAD1 +*A7=IMAGE 1 DATA HEADER POINTER +*A8=IMAGE 1 OBJECT POINTER +*A9=IMAGE 0 DATA HEADER POINTER +*A10=IMAGE 0 OBJECT POINTER +*A11=W1, VINC1 +*A12=XOFF1 +*A13=XSCAN +*A14=YSCAN + +CLOBJ1 move *a7(ISAG),a6,L ;Get image source address + move *a7,a11 ;Get ISIZEX + addk 3,a11 ;correct erroneous width (thanx, warren) + srl 2,A11 + sll 2,A11 + + BTST B_FLIPH,B1 ;CHECK OBJECT 1 FLIPS + JRNE CL1HF ;HORIZONTAL FLIP + BTST B_FLIPV,B1 + JRNE CL1VF ;VERTICAL FLIP + +*NO FLIP CASE +*A3=HINC1=8 (BYTE AT A TIME) +*A11=VINC1=W1-XSCAN +*A6=STARTAD1=IMAGEAD1+(YOFF1 X W1) + XOFF1 + + MOVE A11,A1 ;GET WIDTH + MPYU A3,A1 ;MULT WIDTH X YOFF + ADD A12,A1 ;ADD IN X OFFSET + SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING + ADD A1,A6 ;ADD TO SOURCE ADDRESS + MOVK 8,A3 ;HINC1 + SUB A13,A11 ;VINC1=W1-XSCAN + SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING + JRUC CSH + +*HORIZONTAL FLIP +*A3=HINC1=-8 +*A11=VINC1=W1+XSCAN +*A6=STARTAD1=IMAGEAD1+(YOFF1 X W1) + W1-XOFF1-1 +CL1HF BTST B_FLIPV,B1 ;VERT FLIP TOO? + JRNE CL1HVF ;HORIZ AND VERT FLIP + MOVE A11,A1 ;GET WIDTH + MPYU A3,A1 ;MULT WIDTH X Y OFFSET + ADD A11,A1 ;ADD IN WIDTH + SUB A12,A1 ;SUBTRACT X OFFSET + DEC A1 ;-1 MORE + SLL 3,A1 ;CORRECT FOR BYTE ADDRESSING + ADD A1,A6 + MOVI -8,A3 ;HINC1 + ADD A13,A11 ;VINC1=W1+XSCAN + SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING + JRUC CSH + +*VERTICAL FLIP +*A3=HINC1=8 +*A11=VINC1=-W1-XSCAN +*A6=STARTAD1=IMAGEAD1+(H1-YOFF1-1)W1+XOFF1 +CL1VF MOVE *A7(ISIZEY),A1 ;GET HEIGHT + SUB A3,A1 ;SUBTRACT YOFF1 + DEC A1 + MPYU A11,A1 ;MULTIPLY BY WIDTH + ADD A12,A1 ;ADD IN X OFFSET + SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING + ADD A1,A6 ;ADD TO SOURCE ADDRESS + NEG A11 ;-W1 + SUB A13,A11 ;-XSCAN + SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING + MOVK 8,A3 ;HINC1 + JRUC CSH + +*VERTICAL AND HORIZONTAL FLIP +*A3=HINC1=-8 +*A11=VINC1=-W1-XSCAN +*A6=STARTAD1=(H1-YOFF1-1)W1+W1-XOFF1-1 +CL1HVF MOVE *A7(ISIZEY),A1 ;GET HEIGHT + SUB A3,A1 ;SUBTRACT YOFF1 + DEC A1 + MPYU A11,A1 ;MULTIPLY BY WIDTH + ADD A11,A1 ;ADD IN WIDTH (W1) + SUB A12,A1 ;SUBTRACT XOFF1 + DEC A1 + SLL 3,A1 ;CORRECT FOR PIXEL ADDRESSING + ADD A1,A6 ;ADD TO SOURCE ADDRESS + NEG A11 ;-W1 + ADD A13,A11 ;+XSCAN + SLL 3,A11 ;CORRECT FOR PIXEL ADDRESSING + MOVI -8,A3 ;HINC1 + +*A1= WIDTH COUNTER XSCAN +*A2=H INCREMENT IMAGE 0 +*A3=H INCREMENT IMAGE 1 +*A4=INDEX TO IMAGE 0 +*A5=V INCREMENT IMAGE 0 +*A6=INDEX TO IMAGE 1 +*A7=IMAGE 1 DATA HEADER POINTER +*A8=IMAGE 1 OBJECT POINTER +*A9=IMAGE 0 DATA HEADER POINTER +*A10=IMAGE 0 OBJECT POINTER +*A11=V INCREMENT IMAGE 1 +*A13=WIDTH COUNT XSCAN +*A14=HEIGHT COUNT YSCAN + +CSH cmpi >80,a14 ;no scan if xscan, yscan values out of range + jrhs CSFAIL + cmpi >80,a13 + jrhs CSFAIL + + dint + move @INTENB,a0 + andni X1E,a0 + move a0,@INTENB + eint + +csh0 move @DMACTRL,a0 + jrn csh0 ;DMA busy? + + .if YUNIT + setf 6,0,0 ;6 bit field + .else + setf 8,0,0 ;8 bit field + .endif + +csh1 move a13,a1 ;load line countdown horiz counter + +cshl move *a4,a0 ;Check image 0 corresponding non zeroes + jrz csnxh ;No hit? + + move *a6,a0 ;check image 1 + jrnz pshit ;Hit? + +csnxh add a2,a4 ;Add horiz increments + add a3,a6 + dsjs a1,cshl ;Loop horizontal + + add a5,a4 ;Add vert increments + add a11,a6 + dsjs a14,csh1 ;Loop vert + + setf 16,1,0 ;Normal field + +CSFAIL move b13,b13 + jrz psnodma ;Skip DMA restart? + dint + move @INTENB,a0 + ori X1E,a0 + move a0,@INTENB + eint +psnodma clrc ;No hit + jruc psx ;Exit + + +pshit setf 16,1,0 ;Normal field + move b13,b13 + jrz csflags ;Skip DMA restart? + dint + move @INTENB,a0 + ori X1E,a0 + move a0,@INTENB + eint +csflags setc ;Hit + +psx mmfm sp,b0,b1 + mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13 + rets + + + +******************************** +*PLAYER HAS BEEN COLLIDED WITH +*TELL THIS COLLISION CHECK THAT PLAYER IS REALLY SHORTER THAN HE IS +*THEN RETURN CARRY SET IF STILL A HIT, CARRY CLEAR IF THIS SHOULD NOT BE +*A COLLISION. +*A0=OBJECT THAT HIT PLAYER +*A8=PLAYER LEGS IMAGE PTR + +;SHORT_PLYR +; MOVE *A8(OYPOS),A7 ;A7 - OBJ1 Ymin +; ADDK 3,A7 ;ADDI 0 +; MOVE *A0(OID),A11 +; zext a11 +;; CMPI CLSENMY|TYPORB,A11 +;; JRNE SP0 +;; SUBK 5,A7 +;; MOVE *A8(OSIZEY),A11,W ;A11 - OBJ1 Ymax +;; SUBK 8,A11 ;MAKE LEGS SHORTER IN LENGTH! +;; JRUC SP2 +;;SP0 +; CMPI CLSNEUT|TYPMINE,A11 +; JRNE SP1 +; ADDK 12,A7 ;15 +; MOVE *A8(OSIZEY),A11 ;A11 - OBJ1 Ymax +; SUBK 19,A11 ;MAKE LEGS SHORTER IN LENGTH! ;21 +; JRUC SP2 +;SP1 +; move *A8(OSIZEY),A11 ;A11 - OBJ1 Ymax +; SUBK 20,A11 ;19 ;SUBI 13 16 ;MAKE LEGS SHORTER IN LENGTH! +;SP2 add A7,A11 +; move *A0(OYPOS),A6 ;CHECK OBJS A0,A8 for intersection +; cmp A11,A6 +; jrgt CLRCR ;Y2Min > Y1Max +; move *A0(OSIZEY),A11 +; add A11,A6 +; cmp A7,A6 +; jrlt CLRCR ;Y2Max < Y1Min +; +;;NOW X CHECK +; +; move *A8(OXPOS),A7 ;A9 - OBJ1 Xmin +; addk 6,a7 +; move *A8(OSIZEX),A11 ;A10 - OBJ1 Xmax +; subk 6,a11 +; add A7,A11 +; move *A0(OXPOS),A6 ;USE SIGNED COMPARES BECAUSE OBJS MAY LIE ON ZERO +; cmp A11,A6 +; jrgt CLRCR ;X2Min > X1Max +; move *A0(OSIZEX),A11 +; add A11,A6 +; cmp A7,A6 +; jrlt CLRCR ;X2Max < X1Min +; +; move @PCNT,a6 +; btst 0,a6 +; JRZ CLRCR +; SETC ;GOT A BOX INTERSECTION +; RETS +;CLRCR CLRC +; RETS + + + + + + .end + \ No newline at end of file diff --git a/SRC/ARC/D3.ASM b/SRC/ARC/D3.ASM new file mode 100644 index 0000000..324e68d --- /dev/null +++ b/SRC/ARC/D3.ASM @@ -0,0 +1,2951 @@ +************************************************************** +* +* Software: Shawn Liptak +* Initiated: Jan 31,1992 +* +* Modified: ! +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 20:50 +************************************************************** + .file "3d.asm" + .title "Mega 3d polygon code" + .width 132 + .option b,d,l,t + .mnolist + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include shawn.hdr + .include game.equ + .include imgtbl.glo + + +;sound headers used + +tankexpsnd .word >fcc0,15,>8153,0 ;Tank explosion +plfiresnd .word >f450,20,>8129,0 ;Player cannon +enfiresnd .word >f460,20,>811d,0 ;Enemy cannon +plhit_snd .word >fcf5,05,>8138,0 ;Hit backboard + +;symbols externally defined + + .ref _3dstat,gndstat + .ref IRQSKYE + .ref pal_getf,osgfont_t,STRCNRMO_1 + .ref game_over + + +;symbols defined in this file + +; .def rocketptx_t ;For TV + + +;uninitialized ram definitions + +D3NUMO .equ 200 + +*struct APTR +OBJPTR .equ 0 ;UHL +*endstruct +*struct WORD +OBJPTR .equ 0 ;UHW +*endstruct +*struct XYZ +PTX .equ 0 ;SDW +PTY .equ >10 ;SDW +PTZ .equ >20 ;SDW +*endstruct + +*struct D3OBJ +D3LINK .equ 0 ;UHL *Next object or 0 +D3X .equ >20 ;SHL X pos 24:8 +D3Y .equ >40 ;SHL Y ^ +D3Z .equ >60 ;SHL Z ^ +D3XV .equ >80 ;SHL X vel 24:8 +D3YV .equ >a0 ;SHL Y ^ +D3ZV .equ >c0 ;SHL Z ^ +D3XA .equ >e0 ;UHW X angle 0-255 +D3YA .equ >f0 ;UHW Y ^ +D3ZA .equ >100 ;UHW Z ^ +D3ID .equ >110 ;UHW Type ID +D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) +D3FACE .equ >160 ;UHL *Face data +D3ZTEMP .equ >180 ;SHW View relative Z for sorting +D3PLINK .equ >190 ;UHL *Process that owns +D3HDSZ .equ >1b0 +*endstruct + + +XPTMSZ .equ (16*3*11*D3NUMO/4)&>fffff0 + + BSSX d3vis_p ,32 ;*1st in chain of visable objs + BSSX d3free_p ,32 ;*1st in chain of free objs + + STRUCT >1100000 + STRUC d3objmem ,D3HDSZ*D3NUMO ;Object header mem + STRUC d3xptmem ,XPTMSZ ;Xformed pts mem + + BSSX d3world_t ,32*(D3NUMO+1) ;World_t of * to polygon objs + BSSX d3gnd_t ,32*100 ;Ground_t of * to polygon objs + + + BSSX viewx ,32 ;X view position (24:8) + BSSX viewy ,32 ;Y ^ + BSSX viewz ,32 ;Z ^ + + BSSX viewxa ,16 ;X view angle 0-255 + BSSX viewya ,16 ;Y ^ + BSSX viewza ,16 ;Z ^ + + .bss d3collstop ,16 ;!0=Stop scan on current obj + .bss pcoll_t ,32*(D3NUMO+1) ;List of objs of class player + .bss ncoll_t ,32*(D3NUMO+1) ;List of objs of class neutral + .bss ecoll_t ,32*(D3NUMO+1) ;List of objs of class enemy + + .bss shield ,16 ;Shield strength + + +TYPPSHOT .equ 0200h ;Players shots +TYPGND .equ 0300h ;Ground obstacle +TYPTANK .equ 0400h ;Tank +TYPSHELL .equ 0500h ;Type shell + + +BOGRATE .equ 4 + + .text + + +******************************** +* 3D point format. Label is shown on + end of axis. +* +---------+ +* | Y / | Z goes negative into screen +* | |/ | +* | ---+--X | +* | /| | +* | Z | | +* +---------+ + +******************************** +* Test 3D code (Process) + + SUBR _3d_test + + + clr a1 ;All procs + calla KILALL + movi -1,a1 ;All objs + calla obj_delc + + + movk 6,a0 + move a0,@IRQSKYE + + + movi d3objmem,a1 ;>Init free list + move a1,@d3free_p,L + movi D3NUMO,b0 ;# of object blocks + +#olp move a1,a14 + addi D3HDSZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + clr a0 + move a0,*a14,L ;Null end + move a0,@d3world_t,L + move a0,@d3gnd_t,L + + + + + movi #init_t,a10 ;>Get objects and init + jruc dt40 + +dtlp callr _3d_getobj + movi CLSNEUT|TYPGND,a0 + move a0,*a8(D3ID) + move a6,*a8(D3PTS),L + move *a10+,a1,L + move a1,*a8(D3FACE),L + + move a8,a1 + addk D3X,a1 + movk 3,a7 +#cxyz move *a10+,a3 ;Copy starting XYZ + sll 8,a3 + move a3,*a1+,L + dsj a7,#cxyz + + clr a2 + movk 3*2+3,a7 +#clrva move a2,*a1+ ;Clr XYZ vel & angle + dsj a7,#clrva + +dt40 move *a10+,a6,L + jrnz dtlp + + + + movi #gndinit_t,a10 ;>Get ground objects and init + jruc #gndi + +#gndlp callr _3d_getgndobj + move a6,*a8(D3PTS),L + move *a10+,a1,L + move a1,*a8(D3FACE),L + + move a8,a1 + addk D3X,a1 + movk 3,a7 +#cxyz2 move *a10+,a0,L ;Copy starting XYZ + sll 8,a0 + move a0,*a1+,L + dsj a7,#cxyz2 + + clr a2 + movk 3*2+3,a7 +#cva move a2,*a1+ ;Clr XYZ vel & angle + dsj a7,#cva + +#gndi move *a10+,a6,L + jrnz #gndlp + + + + + + clr a0 +; movi d3xptmem,a11 +; move a0,*a11 + move a0,@d3vis_p ;Null visable list + move a0,@gndstat ;Off + movk 1,a0 + move a0,@_3dstat ;On + + + + CREATE0 plyr_readbut + movi -8000<<8,a10 ;X + movi -8000<<8,a11 ;Z + CREATE0 en_tank + CREATE0 en_tank + movi 8000<<8,a10 + movi -8000<<8,a11 + CREATE0 en_tank + CREATE0 en_tank + movi -8000<<8,a10 + movi 8000<<8,a11 + CREATE0 en_tank + CREATE0 en_tank + movi 8000<<8,a10 + movi 8000<<8,a11 + CREATE0 en_tank + CREATE0 en_tank + + CREATE0 en_spawner + + movi 100<<8,a0 + move a0,@viewy,L + clr a0 + move a0,@viewx,L + move a0,@viewz,L + move a0,@viewxa + move a0,@viewya + move a0,@viewza + + movk 7,a0 + move a0,@shield + + SLEEPK 2 + clr a0 + move a0,@_3dstat ;Off + JSRP scrn_scalein + movk 1,a0 + move a0,@_3dstat ;On + + + SLEEP TSEC*7/BOGRATE + + + move @SWITCH,a0 + andi >5808,a0 ;P1/2 sticks rgt and P2 but 1&3 down + jrnz #slp + + CREATE0 copyright_prtmsg +#slp + SLEEP TSEC*70/BOGRATE + + + movi GOLD,a0 + calla pal_getf + move a0,a6 + + movi #surv_s,a8 + clr a0 + movi [80,200],a9 + movk 1,a10 + movi osgfont_t,a11 + JSRP STRCNRMO_1 + + + SLEEP TSEC*3/BOGRATE + + movk 1,a0 + move a0,@show_shot + + movi >eaea,a0 + move a0,@plyrbighead + + movk 8,a0 + move a0,@p1taps + move a0,@p1taps+16 + move a0,@p1taps+32 + move a0,@p1taps+48 + + .ref show_shot + .ref from_3d + .ref p1taps + .ref plyrbighead + + +pldead + clr a1 ;All procs + move a1,@_3dstat ;Off + calla KILALL + movi -1,a1 ;All objs + calla obj_delc + + jauc from_3d + + +#surv_s .byte "ALL PLAYERS POWERUP!",0 + .even + + + +#init_t ;World init + .long rocket_pts,rocketline_t + .word 0,200,0 + + .long cube_pts,cubeline_t + .word -5000,400,-5000 + .long cube_pts,cubeline_t + .word 5000,400,-5000 + .long cube_pts,cubeline_t + .word -5000,400,5000 + .long cube_pts,cubeline_t + .word 5000,400,5000 + .long cube_pts,cubeline_t + .word -10000,400,-10000 + .long cube_pts,cubeline_t + .word 10000,400,-10000 + .long cube_pts,cubeline_t + .word -10000,400,10000 + .long cube_pts,cubeline_t + .word 10000,400,10000 + .long cube_pts,cubeline_t + .word -3000,400,-3000 + .long cube_pts,cubeline_t + .word 3000,400,-3000 + .long cube_pts,cubeline_t + .word -3000,400,3000 + .long cube_pts,cubeline_t + .word 3000,400,3000 + .long cube_pts,cubeline_t + .word -5000,400,-5000 + .long cube_pts,cubeline_t + .word 2000,400,-2000 + .long cube_pts,cubeline_t + .word -2000,400,2000 + .long cube_pts,cubeline_t + .word 2000,400,2000 + .long pyr_pts,pyrline_t + .word -8000,300,-8000 + .long pyr_pts,pyrline_t + .word 8000,300,-8000 + .long pyr_pts,pyrline_t + .word -8000,300,8000 + .long pyr_pts,pyrline_t + .word 8000,300,8000 + + .long pyr_pts,pyrline_t + .word 0,300,-5000 + .long pyr_pts,pyrline_t + .word 0,300,5000 + .long pyr_pts,pyrline_t + .word -5000,300,0 + .long pyr_pts,pyrline_t + .word 5000,300,0 + + .long 0 + + + +rocket_pts + .word 17 + .word -200,200,800 + .word 200,200,800 + .word 300,100,800 + .word 300,-100,800 + .word 200,-200,800 + .word -200,-200,800 + .word -300,-100,800 + .word -300,100,800 + .word -200,200,-600 + .word 200,200,-600 + .word 300,100,-600 + .word 300,-100,-600 + .word 200,-200,-600 + .word -200,-200,-600 + .word -300,-100,-600 + .word -300,100,-600 + .word 0,0,-1100 + +rocketline_t + .word >101,0,1*48,2*48,3*48,4*48,5*48,6*48,7*48,-1 + .word >202,0,8*48,9*48,1*48,-1 + .word >303,1*48,9*48,10*48,2*48,-1 + .word >202,2*48,10*48,11*48,3*48,-1 + .word >303,3*48,11*48,12*48,4*48,-1 + .word >202,4*48,12*48,13*48,5*48,-1 + .word >303,5*48,13*48,14*48,6*48,-1 + .word >202,6*48,14*48,15*48,7*48,-1 + .word >303,7*48,15*48,8*48,0*48,-1 + .word >404,9*48,8*48,16*48,-1 + .word >504,10*48,9*48,16*48,-1 + .word >404,11*48,10*48,16*48,-1 + .word >504,12*48,11*48,16*48,-1 + .word >404,13*48,12*48,16*48,-1 + .word >504,14*48,13*48,16*48,-1 + .word >404,15*48,14*48,16*48,-1 + .word >504,8*48,15*48,16*48,-1 + .word -1 ;End + + +cube_pts + .word 8 + .word 400,400,200 + .word 400,-400,200 + .word -400,-400,200 + .word -400,400,200 + .word 400,400,-200 + .word 400,-400,-200 + .word -400,-400,-200 + .word -400,400,-200 + +cubeline_t + .word >101,0,1*48,2*48,3*48,-1 + .word >202,7*48,6*48,5*48,4*48,-1 + .word >303,3*48,2*48,6*48,7*48,-1 + .word >303,4*48,5*48,1*48,0,-1 + .word >404,5*48,6*48,2*48,1*48,-1 + .word >404,7*48,4*48,0,3*48,-1 + .word -1 ;End + + +pyr_pts ;Pyramid + .word 5 + .word -200,-300,200 ;Base + .word -200,-300,-200 + .word 200,-300,-200 + .word 200,-300,200 + .word 0,300,0 ;Tip + +pyrline_t + .word >2626,0,4*48,3*48,-1 + .word >2a2a,1*48,4*48,0,-1 + .word >2626,2*48,4*48,1*48,-1 + .word >2a2a,3*48,4*48,2*48,-1 + .word -1 ;End + + +pmsl_pts + .word 5 + .word -40,40,200 ;Back + .word 40,40,200 + .word 40,-40,200 + .word -40,-40,200 + .word 0,0,-200 ;Tip + +pmslline_t + .word >f0f,0,1*48,2*48,3*48,-1 + .word >1111,0,4*48,1*48,-1 + .word >1313,1*48,4*48,2*48,-1 + .word >1111,2*48,4*48,3*48,-1 + .word >1313,3*48,4*48,0*48,-1 + .word -1 ;End + + +enmsl_pts + .word 9 + .word 0,50,200 ;Back + .word 35,35,200 + .word 50,0,200 + .word 35,-35,200 + .word 0,-50,200 + .word -35,-35,200 + .word -50,0,200 + .word -35,35,200 + .word 0,0,-200 ;Tip + +enmslline_t + .word >0f0f,0,1*48,2*48,3*48,4*48,5*48,6*48,7*48,-1 + .word >1111,0*48,8*48,1*48,-1 + .word >1313,1*48,8*48,2*48,-1 + .word >1111,2*48,8*48,3*48,-1 + .word >1313,3*48,8*48,4*48,-1 + .word >1111,4*48,8*48,5*48,-1 + .word >1313,5*48,8*48,6*48,-1 + .word >1111,6*48,8*48,7*48,-1 + .word >1313,7*48,8*48,0*48,-1 + .word -1 ;End + + +tanklow_pts + .word 8 + .word -100,40,200 + .word 100,40,200 + .word 100,-40,200 + .word -100,-40,200 + .word -100,5,-200 + .word 100,5,-200 + .word 100,-40,-200 + .word -100,-40,-200 + +tanklowline_t + .word >505,0,1*48,2*48,3*48,-1 ;Back + .word >202,1*48,5*48,6*48,2*48,-1 ;R + .word >303,5*48,4*48,7*48,6*48,-1 ;F + .word >202,4*48,0,3*48,7*48,-1 ;L + .word >404,4*48,5*48,1*48,0,-1 ;Top + .word >101,3*48,2*48,6*48,7*48,-1 ;Bot + .word -1 ;End + + + +tanktur_pts + .word 8 + .word -80,40,100 + .word 80,40,100 + .word 80,-40,100 + .word -80,-40,100 + .word -80,5,-100 + .word 80,5,-100 + .word 80,-40,-100 + .word -80,-40,-100 + +tankturline_t + .word >2626,0,1*48,2*48,3*48,-1 ;Back + .word >2a2a,1*48,5*48,6*48,2*48,-1 ;R + .word >2626,5*48,4*48,7*48,6*48,-1 ;F + .word >2a2a,4*48,0,3*48,7*48,-1 ;L + .word >404,4*48,5*48,1*48,0,-1 ;Top + .word >101,3*48,2*48,6*48,7*48,-1 ;Bot + .word -1 ;End + + +#gndinit_t ;Ground init + .long gnd_pts,gndline_t,0,0,0 + .long gnd_pts,gndline_t,0,0,-21000 + .long gnd_pts,gndline_t,-21000,0,0 + .long gnd_pts,gndline_t,21000,0,0 + .long gnd_pts,gndline_t,0,0,21000 + + .long 0 + +gnd_pts + .word 8 + .word -9000,0,-9000 + .word 9000,0,-9000 + .word 9000,0,9000 + .word -9000,0,9000 + .word -1000,0,-1000 + .word 1000,0,-1000 + .word 1000,0,1000 + .word -1000,0,1000 + +gndline_t + .word >2020,0,1*48,2*48,3*48,-1 + .word >2323,4*48,5*48,6*48,7*48,-1 + .word -1 ;End + + + +#******************************* +* DEBUG + +check_vislist + + movi d3vis_p,a1 + move *a1,a0,L + jrz #x +#debug move a1,a0 + move *a0,a1,L + jrnz #debug + move *a0(D3PTS),a1,L + jrz #err ;ERROR!!! +#x rets + +#err + LOCKUP + jruc #x + +#******************************* +* Get a object from 3D free list +* >A8=*Object or 0 +* Trashes scratch + + SUBRP _3d_getobj + + movi d3free_p,a0 + move *a0,a8,L + jrz #err + move *a8,*a0,L ;Unlink + + movi d3world_t,a0 ;>Add to end +#lp move *a0+,a1,L + jrnz #lp + move a1,*a0,L + move a8,-*a0,L + +#x rets + +#err + LOCKUP + jruc #x + + +#******************************* +* Get a object from 3D free list +* >A8=*Object or 0 +* Trashes scratch + + SUBRP _3d_getgndobj + + movi d3free_p,a0 + move *a0,a8,L + jrz #err + move *a8,*a0,L ;Unlink + + movi d3gnd_t,a0 ;>Add to end +#lp move *a0+,a1,L + jrnz #lp + move a1,*a0,L + move a8,-*a0,L + +#x rets + +#err + LOCKUP + jruc #x + + +#******************************* +* Put an object on 3D free list +* A8=*Object +* Trashes scratch + + SUBRP _3d_freeobj + + movi d3world_t,a0 ;>Find +#lp move *a0+,a1,L + jrz #free + cmp a1,a8 + jrne #lp ;No match? + +#lp3 move *a0+,a1,L ;>Move end up + move a1,*a0(-64),L + jrnz #lp3 + + +#free move @d3free_p,*a8+,L + subk 32,a8 + move a8,@d3free_p,L + rets + + +#******************************* +* Get object from 3D free list and init +* A0=X (24:8) +* A1=Y +* A2=Z +* A3=XA +* A4=YA +* A5=ZA +* A6=*Points +* A7=*Face data +* >A8=*Object or 0 +* Trashes scratch + + SUBRP _3d_beginobj + + movi d3free_p,a14 + move *a14,a8,L + jrz #error + move *a8,*a14,L ;Unlink + + move a8,a14 + addk D3X,a14 + move a0,*a14+,L ;X + move a1,*a14+,L ;Y + move a2,*a14+,L ;Z + clr a0 + move a0,*a14+,L ;XV + move a0,*a14+,L ;YV + move a0,*a14+,L ;ZV + move a3,*a14+ ;XA + move a4,*a14+ ;YA + move a5,*a14+ ;ZA + move a6,*a8(D3PTS),L + move a7,*a8(D3FACE),L + move a13,*a8(D3PLINK),L + + movi d3world_t,a14 ;>Add to end +#lp move *a14+,a1,L + jrnz #lp + move a1,*a14,L + move a8,-*a14,L + +#x rets + + +#error LOCKUP + jruc #x + + + + +******************************** +* Build 3D view, called by display interrupt + + SUBR _3d_build + + PUSH a4,a13,a14 + PUSH b2,b3,b4,b5,b6,b7,b8,b9,b10 + + movi d3world_t,a7 ;>Add velocity to position + jruc #move + +#lpmv addk D3X,a0 + mmfm a0,a1,a2,a3,a4,a5,a6 ;A6-A4=XYZ, A3-A1=XYZV + + subi 32*3,a0 ;Flip POS & VEL ??? + add a1,a4 ;Add ZVEL to Z + move a4,-*a0,L + add a2,a5 ;Add YVEL to Y (Uses hidden cycle!) + move a5,-*a0,L + add a3,a6 ;Add XVEL to X ^ + move a6,-*a0,L + +#move move *a7+,a0,L + jrnz #lpmv ;More? + + + PUSH a11 + callr _3d_buildvislist + callr _3d_addgndvislist + PULL a11 + + + move @viewx,b2,L ;24:8 + move @viewy,b3,L + move @viewz,b4,L + + movi d3vis_p,b8 ;>Xform objs about center + jruc dt500 + +dtlp5 move b8,a8 + move *a8(D3PTS),a0,L + move *a8(D3XPTS),a1,L + move a8,a2 + addk D3X,a2 + + move *a2+,a12,L ;XPos (24:8) + move *a2+,a13,L ;YPos + move *a2+,a14,L ;ZPos + addi 32*3,a2 + move *a2+,a9 ;XAngle + move *a2+,a10 ;YA + move *a2+,a8 ;ZA + + move b2,a3 + sub a3,a12 + move b3,a3 + sub a3,a13 + move b4,a3 + sub a3,a14 + + sra 8,a12 ;Remove fraction + sra 8,a13 + sra 8,a14 + callr _3d_xformoffset + +dt500 move *b8,b8,L + jrnz dtlp5 + + + + callr _3d_xformrelview ;Could do with step above??? + + + ;>Scale for display + movi d3vis_p,b8 + jruc #2000 + +#lp9 move b8,a4 + move *a4(D3XPTS),a0,L + callr _3d_scalexy +#2000 move *b8+,b8,L + jrnz #lp9 + + + + callr _3d_collide + + + + .if TUNIT + + .if DEBUG + move @SWITCH,a7 + move @SWITCH2,a0 + sll 24,a0 + movy a0,a7 + .else + move @SWITCH,a7 + sll 24,a7 + .endif + + .else + move @SWITCH,a7,L + .endif + + + move @viewza,a0 ;>Turn z view angle + btst 10,a7 + jrnz dt6000 ;!L joy2? + addk 1,a0 +dt6000 btst 11,a7 + jrnz dt6100 ;!R joy2? + subk 1,a0 +dt6100 move a0,@viewza + + move @viewya,a0 ;>Turn y view angle + btst 26,a7 + jrnz dt6300 ;!L joy3? + subk 1,a0 + btst 30,a7 + jrnz dt6300 ;!But3? + subk 1,a0 + +dt6300 btst 27,a7 + jrnz dt6400 ;!R joy3? + addk 1,a0 + btst 30,a7 + jrnz dt6400 ;!But3? + addk 1,a0 +dt6400 move a0,@viewya + + move @viewxa,a0 ;>Turn x view angle + btst 8,a7 + jrnz dt6600 ;!U joy2? + addk 1,a0 +dt6600 btst 9,a7 + jrnz dt6700 ;!D joy2? + subk 1,a0 +dt6700 move a0,@viewxa + + + btst 24,a7 + jrnz dt7000 ;!Up joy3? + + move @viewya,a0 ;>Move forward + callr sinecos_get + + btst 30,a7 + jrnz #noturb ;!P3 but3 + sll 1,a0 ;*2 + sll 1,a1 + +#noturb move @viewx,a2,L + add a0,a2 + move a2,@viewx,L + + move @viewz,a2,L + sub a1,a2 + move a2,@viewz,L + + +dt7000 btst 25,a7 + jrnz dt7500 ;!Dn joy3? + + move @viewya,a0 ;>Move back + callr sinecos_get + + move @viewx,a2,L + sub a0,a2 + move a2,@viewx,L + + move @viewz,a2,L + add a1,a2 + move a2,@viewz,L +dt7500 + + PULL b2,b3,b4,b5,b6,b7,b8,b9,b10 + PULL a4,a13,a14 + rets + + + + +#******************************* +* Check distance and visability of objs center point +* Adds to d3vis_p if visable +* >A11=*Next free xform mem +* Trashes A0-A7,B0-B1 + +;x=x*cos(az)-y*sin(az) +;y=x*sin(az)+y*cos(az) + +;y=y*cos(ax)-z*sin(ax) +;z=y*sin(ax)+z*cos(ax) + +;z=z*cos(ay)-x*sin(ay) +;x=z*sin(ay)+x*cos(ay) + +COSAZ .equ b0 +SINAZ .equ b1 +COSAX .equ b2 +SINAX .equ b3 +COSAY .equ b4 +SINAY .equ b5 + + + SUBR _3d_buildvislist + + PUSH a8,a9,a10 + PUSH b2,b3,b4,b5,b6 + + + move @viewza,a0 + callr sinecos_get + move a1,COSAZ ;B0=Cos AZ + move a0,SINAZ ;B1=Sine AZ + + move @viewxa,a0 + callr sinecos_get + move a1,COSAX ;B2=Cos AX + move a0,SINAX ;B3=Sine AX + + move @viewya,a0 + callr sinecos_get + move a1,COSAY ;B4=Cos AY + move a0,SINAY ;B5=Sine AY + + + + move @viewx,a12,L ;24:8 + move @viewy,a13,L + move @viewz,a14,L + + movi d3world_t,a4 ;>Build table of visable objs + clr a0 + move a0,@d3vis_p,L ;Null end + movi >600000,a10 ;A10=Range limit + movi d3xptmem,a11 + jruc #next + +#lp + move a6,a0 + addk D3X,a0 + + move *a0+,a1,L ;XPos (24:8) + sub a12,a1 + move a1,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + move *a0+,a5,L ;YPos + sub a13,a5 + move a5,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + move *a0+,a9,L ;ZPos + sub a14,a9 + move a9,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + + sra 8,a1 ;Remove fraction + sra 8,a5 + sra 8,a9 + + + move a1,a3 + move COSAZ,a0 + mpys a0,a1 ;Cos*X + + move a5,a7 + move SINAZ,a2 + mpys a2,a5 ;Sine*Y + sub a5,a1 + sra 16,a1 ;X about Z + + mpys a2,a3 ;Sine*X + mpys a0,a7 ;Cos*Y + add a7,a3 + sra 16,a3 ;Y about Z + + + move a3,a7 + move COSAX,a0 + move SINAX,a2 + mpys a0,a3 ;Cos*Y + mpys a2,a7 ;Sin*Y + + move a9,a5 + mpys a2,a9 ;Sin*Z + mpys a0,a5 ;Cos*Z + + sub a9,a3 + sra 16,a3 ;Y about X + add a5,a7 + sra 16,a7 ;Z about X + + + move COSAY,a0 + move SINAY,a2 + move a7,a9 + move a1,a5 + mpys a0,a7 ;Cos*Z + mpys a2,a5 ;Sin*X + sub a5,a7 + jrgt #next ;Z behind me? + sra 16,a7 ;Z about Y + + mpys a2,a9 ;Sin*Z + mpys a0,a1 ;Cos*X + add a9,a1 + sra 16,a1 ;X about Y + + + move a7,*a6(D3ZTEMP) + move a11,*a6(D3XPTS),L + addk 16,a11 + move *a6(D3PTS),a2,L + move *a2,a2 ;#Pts + sll 4,a2 ;*16 + add a2,a11 ;*48 + add a2,a11 + add a2,a11 + + movi d3vis_p,a8 ;>Find spot in list based on Z +#lp2 move a8,a2 + move *a8,a8,L + jrz #atend ;End? + move *a8(D3ZTEMP),a1 + cmp a1,a7 + jrgt #lp2 ;Higher? + +#atend move a6,*a2,L ;Point last to me + move a8,*a6,L ;Point me to next + + +#next move *a4+,a6,L + jrnz #lp + + + PULL b2,b3,b4,b5,b6 + PULL a8,a9,a10 + rets + + + + + +#******************************* +* Check distance and visability of gnd objs +* Adds to d3vis_p if visable +* A11=*Next free xform mem +* Trashes A0-A7,B0-B1 + + + SUBR _3d_addgndvislist + + PUSH a8,a9,a10 + PUSH b2,b3,b4,b5,b6 + + + move @viewza,a0 + callr sinecos_get + move a1,COSAZ ;B0=Cos AZ + move a0,SINAZ ;B1=Sine AZ + + move @viewxa,a0 + callr sinecos_get + move a1,COSAX ;B2=Cos AX + move a0,SINAX ;B3=Sine AX + + move @viewya,a0 + callr sinecos_get + move a1,COSAY ;B4=Cos AY + move a0,SINAY ;B5=Sine AY + + + move @viewx,a12,L ;24:8 + move @viewy,a13,L + move @viewz,a14,L + + movi d3gnd_t,a4 ;>Build table of visable objs + movi >600000,a10 ;A10=Range limit + jruc #next + +#lp + move a6,a0 + addk D3X,a0 + + move *a0+,a1,L ;XPos (24:8) + sub a12,a1 + move a1,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + move *a0+,a5,L ;YPos + sub a13,a5 + move a5,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + move *a0+,a9,L ;ZPos + sub a14,a9 + move a9,a3 + abs a3 + cmp a10,a3 + jrhs #next ;Out of range? + + +; sra 8,a1 ;Remove fraction +; sra 8,a5 +; sra 8,a9 +; +; +; move a1,a3 +; move COSAZ,a0 +; mpys a0,a1 ;Cos*X +; +; move a5,a7 +; move SINAZ,a2 +; mpys a2,a5 ;Sine*Y +; sub a5,a1 +; sra 16,a1 ;X about Z +; +; mpys a2,a3 ;Sine*X +; mpys a0,a7 ;Cos*Y +; add a7,a3 +; sra 16,a3 ;Y about Z +; +; +; move a3,a7 +; move COSAX,a0 +; move SINAX,a2 +; mpys a0,a3 ;Cos*Y +; mpys a2,a7 ;Sin*Y +; +; move a9,a5 +; mpys a2,a9 ;Sin*Z +; mpys a0,a5 ;Cos*Z +; +; sub a9,a3 +; sra 16,a3 ;Y about X +; add a5,a7 +; sra 16,a7 ;Z about X +; +; +; move COSAY,a0 +; move SINAY,a2 +; move a7,a9 +; move a1,a5 +; mpys a0,a7 ;Cos*Z +; mpys a2,a5 ;Sin*X +; sub a5,a7 +; jrgt #next ;Z behind me? +; sra 16,a7 ;Z about Y +; +; mpys a2,a9 ;Sin*Z +; mpys a0,a1 ;Cos*X +; add a9,a1 +; sra 16,a1 ;X about Y + + +; move a7,*a6(D3ZTEMP) + move a11,*a6(D3XPTS),L + addk 16,a11 + move *a6(D3PTS),a2,L + move *a2,a2 ;#Pts + sll 4,a2 ;*16 + add a2,a11 ;*48 + add a2,a11 + add a2,a11 + + movi d3vis_p,a8 + move *a8,*a6,L ;Point me to next + move a6,*a8,L ;Point head to me + + +#next move *a4+,a6,L + jrnz #lp + + + PULL b2,b3,b4,b5,b6 + PULL a8,a9,a10 + rets + + + + + + +#******************************* +* Xform objects on visable list relative to view point + + + SUBRP _3d_xformrelview + + PUSH a8,a9,a10 + PUSH b2,b3,b4,b5,b6,b7,b8 + + + move @viewx,a12,L + move @viewy,a13,L + move @viewz,a14,L + sra 8,a12 + sra 8,a13 + sra 8,a14 + + + move @viewza,a0 + callr sinecos_get + move a1,COSAZ ;B0=Cos AZ + move a0,SINAZ ;B1=Sine AZ + + move @viewxa,a0 + callr sinecos_get + move a1,COSAX ;B2=Cos AX + move a0,SINAX ;B3=Sine AX + + move @viewya,a0 + callr sinecos_get + move a1,COSAY ;B4=Cos AY + move a0,SINAY ;B5=Sine AY + + + movi d3vis_p,b8 + jruc #next + + + +#lp move b8,a4 + move *a4(D3XPTS),a4,L ;A4=*Orig pts + move *a4+,a0 ;Get # points + move a4,a6 ;A6=*Dest pts + move a0,b6 + + +#objlp + move *a4+,a1 ;X + move a1,a3 + move COSAZ,a0 + mpys a0,a1 ;Cos*X + + move *a4+,a5 ;Y + move a5,a7 + move SINAZ,a2 + mpys a2,a5 ;Sine*Y + sub a5,a1 + sra 16,a1 ;X about Z + + mpys a2,a3 ;Sine*X + mpys a0,a7 ;Cos*Y + add a7,a3 + sra 16,a3 ;Y about Z + + + move a3,a7 + move COSAX,a0 + move SINAX,a2 + mpys a0,a3 ;Cos*Y + mpys a2,a7 ;Sin*Y + + move *a4+,a9 ;Z + move a9,a5 + mpys a2,a9 ;Sin*Z + mpys a0,a5 ;Cos*Z + + sub a9,a3 + sra 16,a3 ;Y about X + add a5,a7 + sra 16,a7 ;Z about X + + + move COSAY,a0 + move SINAY,a2 + move a7,a9 + move a1,a5 + mpys a0,a7 ;Cos*Z + mpys a2,a5 ;Sin*X + sub a5,a7 + sra 16,a7 ;Z about Y + mpys a2,a9 ;Sin*Z + mpys a0,a1 ;Cos*X + add a9,a1 + sra 16,a1 ;X about Y + + + move a1,*a6+ ;New X + move a3,*a6+ ;New Y + move a7,*a6+ ;New Z + + dsj b6,#objlp + + +#next move *b8+,b8,L + jrnz #lp + + + PULL b2,b3,b4,b5,b6,b7,b8 + PULL a8,a9,a10 + rets + + + +#******************************* +* Transform a set of XYZ points then add offset +* A0=*Obj 3D Points +* A1=*Mem for xformed pts +* A8=Angle 0-255 about Z +* A9=Angle 0-255 about X +* A10=Angle 0-255 about Y +* A12-A14=XYZ offsets after xform +* Trashes A0-A7,B0-B1 + +;x=x*cos(az)-y*sin(az) +;y=x*sin(az)+y*cos(az) + +;y=y*cos(ax)-z*sin(ax) +;z=y*sin(ax)+z*cos(ax) + +;z=z*cos(ay)-x*sin(ay) +;x=z*sin(ay)+x*cos(ay) + +;COSAZ .equ b0 +;SINAZ .equ b1 +;COSAX .equ b2 +;SINAX .equ b3 +;COSAY .equ b4 +;SINAY .equ b5 + + + SUBR _3d_xformoffset + + PUSH a8,a9 + PUSH b2,b3,b4,b5,b6 + + move a0,a4 ;A4=*Orig pts + move a1,a6 ;A6=*Dest pts + move *a4+,a0 ;Get # points + move a0,*a6+ ;Copy # + move a0,b6 + + +;Quicker!! + move a8,a0 + callr cos_get + move a0,COSAZ ;B0=Cos AZ + move a8,a0 + callr sine_get + move a0,SINAZ ;B1=Sine AZ + move a9,a0 + callr cos_get + move a0,COSAX ;B2=Cos AX + move a9,a0 + callr sine_get + move a0,SINAX ;B3=Sine AX + move a10,a0 + callr cos_get + move a0,COSAY ;B4=Cos AY + move a10,a0 + callr sine_get + move a0,SINAY ;B5=Sine AY + +#lp + move *a4+,a1 ;X + move a1,a3 + move COSAZ,a0 + mpys a0,a1 ;Cos*X + + move *a4+,a5 ;Y + move a5,a7 + move SINAZ,a2 + mpys a2,a5 ;Sine*Y + sub a5,a1 + sra 16,a1 ;X about Z + + mpys a2,a3 ;Sine*X + mpys a0,a7 ;Cos*Y + add a7,a3 + sra 16,a3 ;Y about Z + + + move a3,a7 + move COSAX,a0 + move SINAX,a2 + mpys a0,a3 ;Cos*Y + mpys a2,a7 ;Sin*Y + + move *a4+,a9 ;Z + move a9,a5 + mpys a2,a9 ;Sin*Z + mpys a0,a5 ;Cos*Z + + sub a9,a3 + sra 16,a3 ;Y about X + add a5,a7 + sra 16,a7 ;Z about X + + + move COSAY,a0 + move SINAY,a2 + move a7,a9 + move a1,a5 + mpys a0,a7 ;Cos*Z + mpys a2,a5 ;Sin*X + sub a5,a7 + sra 16,a7 ;Z about Y + mpys a2,a9 ;Sin*Z + mpys a0,a1 ;Cos*X + add a9,a1 + sra 16,a1 ;X about Y + + + add a12,a1 ;>Add position offset + add a13,a3 + add a14,a7 + move a1,*a6+ ;New X + move a3,*a6+ ;New Y + move a7,*a6+ ;New Z + + + dsj b6,#lp + + + PULL b2,b3,b4,b5,b6 + PULL a8,a9 + rets + + + + +#******************************* +* Transform a set of XYZ points relative to 0,0,0 +* A0=*Obj 3D Points +* A1=*Mem for xformed pts +* A8=Angle 0-255 about Z +* A9=Angle 0-255 about X +* A10=Angle 0-255 about Y +* Trashes A0-A7,B0-B1 + + + SUBR _3d_xformrel0 + + PUSH a8,a9 + PUSH b2,b3,b4,b5,b6 + + move a0,a4 ;A4=*Orig pts + move a1,a6 ;A6=*Dest pts + move *a4+,a0 ;Get # points + move a0,*a6+ ;Copy # + move a0,b6 + + +;Quicker!! + move a8,a0 + callr cos_get + move a0,COSAZ ;B0=Cos AZ + move a8,a0 + callr sine_get + move a0,SINAZ ;B1=Sine AZ + move a9,a0 + callr cos_get + move a0,COSAX ;B2=Cos AX + move a9,a0 + callr sine_get + move a0,SINAX ;B3=Sine AX + move a10,a0 + callr cos_get + move a0,COSAY ;B4=Cos AY + move a10,a0 + callr sine_get + move a0,SINAY ;B5=Sine AY + +#lp + + move *a4+,a1 ;X + move a1,a3 + move COSAZ,a0 + mpys a0,a1 ;Cos*X + + move *a4+,a5 ;Y + move a5,a7 + move SINAZ,a2 + mpys a2,a5 ;Sine*Y + sub a5,a1 + sra 16,a1 ;X about Z + + mpys a2,a3 ;Sine*X + mpys a0,a7 ;Cos*Y + add a7,a3 + sra 16,a3 ;Y about Z + + + move a3,a7 + move COSAX,a0 + move SINAX,a2 + mpys a0,a3 ;Cos*Y + mpys a2,a7 ;Sin*Y + + move *a4+,a9 ;Z + move a9,a5 + mpys a2,a9 ;Sin*Z + mpys a0,a5 ;Cos*Z + + sub a9,a3 + sra 16,a3 ;Y about X + add a5,a7 + sra 16,a7 ;Z about X + + + move COSAY,a0 + move SINAY,a2 + move a7,a9 + move a1,a5 + mpys a0,a7 ;Cos*Z + mpys a2,a5 ;Sin*X + sub a5,a7 + sra 16,a7 ;Z about Y + mpys a2,a9 ;Sin*Z + mpys a0,a1 ;Cos*X + add a9,a1 + sra 16,a1 ;X about Y + + + move a1,*a6+ ;New X + move a3,*a6+ ;New Y + move a7,*a6+ ;New Z + + + dsj b6,#lp + + + PULL b2,b3,b4,b5,b6 + PULL a8,a9 + rets + + + +******************************** +* Transform a set of XYZ points relative to an XYZ pt +* A0=*Obj 3D Points +* A1=*Mem for xformed pts +* A8=Angle 0-255 about Z +* A9=Angle 0-255 about X +* A10=Angle 0-255 about Y +* A12-A14=XYZ relative pt +* Trashes A0-A7,B0-B1 + + + + SUBR _3d_xformrel + + PUSH a8,a9 + PUSH b2,b3,b4,b5,b6 + + move a0,a4 ;A4=*Orig pts + move a1,a6 ;A6=*Dest pts + move *a4+,a0 ;Get # points + move a0,*a6+ ;Copy # + move a0,b6 + + +;Quicker!! + move a8,a0 + callr cos_get + move a0,COSAZ ;B0=Cos AZ + move a8,a0 + callr sine_get + move a0,SINAZ ;B1=Sine AZ + move a9,a0 + callr cos_get + move a0,COSAX ;B2=Cos AX + move a9,a0 + callr sine_get + move a0,SINAX ;B3=Sine AX + move a10,a0 + callr cos_get + move a0,COSAY ;B4=Cos AY + move a10,a0 + callr sine_get + move a0,SINAY ;B5=Sine AY + +dxrlp + + move *a4+,a1 ;X + sub a12,a1 ;-Base X + move a1,a3 + move COSAZ,a0 + mpys a0,a1 ;Cos*X + + move *a4+,a5 ;Y + sub a13,a5 ;-Base Y + move a5,a7 + move SINAZ,a2 + mpys a2,a5 ;Sine*Y + sub a5,a1 + sra 16,a1 ;X about Z + + mpys a2,a3 ;Sine*X + mpys a0,a7 ;Cos*Y + add a7,a3 + sra 16,a3 ;Y about Z + + + move a3,a7 + move COSAX,a0 + move SINAX,a2 + mpys a0,a3 ;Cos*Y + mpys a2,a7 ;Sin*Y + + move *a4+,a9 ;Z + sub a14,a9 ;-Base Z + move a9,a5 + mpys a2,a9 ;Sin*Z + mpys a0,a5 ;Cos*Z + + sub a9,a3 + sra 16,a3 ;Y about X + add a5,a7 + sra 16,a7 ;Z about X + + + move COSAY,a0 + move SINAY,a2 + move a7,a9 + move a1,a5 + mpys a0,a7 ;Cos*Z + mpys a2,a5 ;Sin*X + sub a5,a7 + sra 16,a7 ;Z about Y + mpys a2,a9 ;Sin*Z + mpys a0,a1 ;Cos*X + add a9,a1 + sra 16,a1 ;X about Y + + + move a1,*a6+ ;New X + move a3,*a6+ ;New Y + move a7,*a6+ ;New Z + + + dsj b6,dxrlp + + + PULL b2,b3,b4,b5,b6 + PULL a8,a9 + rets + + + + + +#******************************* +* Scale XY by Z and adjust for display +* A0=*Xformed XYZ Points +* Trashes A0-A7 + + SUBRP _3d_scalexy + + PUSH a8,a9 + + move *a0+,a7 ;Get # points + jrle #x ;Necessary??? + + move a0,a2 + move a7,a3 +#lp addk 16*2,a2 + move *a2+,a1 ;Z + jrlt #avis ;Any visable? + dsj a3,#lp + move a3,-*a0 ;Set # pts 0 so it won't be shown + jruc #x ;No pts visable + +#avis + movi >7fff,a8 + movi ->7fff,a9 +#lp2 + move a0,a6 + move *a0+,a1 ;X + move *a0+,a3 ;Y + neg a3 ;Flip Y + move *a0+,a2 ;Z + jrn #vis ;Visable? + + addi 512,a2 + mpys a2,a1 + mpys a2,a3 + sra 9,a1 ;/512, make big + sra 9,a3 + cmp a8,a1 + jrle #xhok ;Not maxed? + move a8,a1 +#xhok + cmp a9,a1 + jrge #xlok ;Not mined? + move a9,a1 +#xlok + jruc #set + +#vis abs a2 + addi 512,a2 + + sll 9,a1 ;*512 + sll 9,a3 + + divs a2,a1 ;Scale down for Z distance + divs a2,a3 + +#set addi 127,a3 ;Center Y + + move a1,*a6+ ;New X + move a3,*a6+ ;New Y + + + dsj a7,#lp2 + + +#x PULL a8,a9 + rets + + + +; movi 4000,a4 ;Vanishing pt +; add a2,a4 +; jrgt dsxy50 +; clr a1 +; clr a3 +; jruc dsxy100 +;dsxy50 +; mpys a4,a1 ;Scale down for Z distance +; mpys a4,a3 +; sra 10,a1 ;/4096 +; sra 10,a3 + + + + + + + +#******************************* +* Read players button (Process) + + SUBRP plyr_readbut + +#lp SLEEPK 1 + move @shield,a0 + jrn #dead + + .if TUNIT + move @SWITCH,a0 + btst 4,a0 + .else + move @SWITCH+16,a0 + btst 12,a0 + .endif + jrnz #lp ;No joy1 but1? + + + CREATE0 plyr_msl + + SLEEPK 5 + jruc #lp + +#dead + movi REDPAL,a0 + calla pal_getf + move a0,a6 + + movi #dead_s,a8 + clr a0 + movi [100,200],a9 + movk 1,a10 + movi osgfont_t,a11 + JSRP STRCNRMO_1 + + + SLEEP TSEC*3/BOGRATE + + jruc pldead + + +#dead_s .byte "YOU ARE DEAD!",0 + .even + + +#******************************* +* Fire a missile from player (Process) + + SUBRP plyr_msl + + movi plfiresnd,a0 + calla snd_play1 + + move @viewx,a0,L ;24:8 + move @viewy,a1,L + move @viewz,a2,L + move @viewxa,a3 + move @viewya,a4 + not a4 + move @viewza,a5 + movi pmsl_pts,a6 + movi pmslline_t,a7 + callr _3d_beginobj ;Get shell + + + movi CLSPLYR|TYPPSHOT,a0 + move a0,*a8(D3ID) + + move @viewya,a0 ;>Move forward + callr sinecos_get + move a0,*a8(D3XV),L + neg a1 + move a1,*a8(D3ZV),L + + + SLEEP 60*2 + + callr _3d_freeobj + + + DIE + +#******************************* +* Player shot hit an obj +* A8=*3D object + + SUBRP pl_shot_hit + + move *a8(D3PLINK),a14,L + movk 1,a0 + move a0,*a14(PTIME) ;Wake it up so it can die + + rets + + +#******************************* +* Create random enemies (Process) + + SUBRP en_spawner + +#lp + movi -1000<<8,a10 + movi 12000<<8,a11 + CREATE0 en_tank + + SLEEP TSEC*8/BOGRATE + jruc #lp + + +#******************************* +* Enemy fire randomly (Process) + + SUBRP en_fire + +;#lp SLEEPK 5 +; movk 2,a0 +; callr rndrng0 +; move a0,a0 +; jrnz #lp ;Wait? +; +; +; CREATE0 en_msl +; +; SLEEPK 5 +; jruc #lp + + +#******************************* +* Fire a shell from an enemy (Process) +* A8=*3D object +* A10=Dir (0-255) + + STRUCTPD + WORD ens_hit ;!0=Shell collided with obj + +HITRNG .equ 450<<8 + + SUBRP en_shell + + movi enfiresnd,a0 + calla snd_play1 + + clr a0 + move a0,*a13(ens_hit) + + move *a8(D3X),a0,L + move *a8(D3Y),a1,L + move *a8(D3Z),a2,L + clr a3 + move a10,a4 + not a4 + clr a5 + movi enmsl_pts,a6 + movi enmslline_t,a7 + callr _3d_beginobj ;Get shell + + movi CLSENMY|TYPSHELL,a0 + move a0,*a8(D3ID) + + move a10,a0 + callr sinecos_get + + sll 1,a0 ;*2 + move a0,*a8(D3XV),L + + neg a1 + sll 1,a1 ;*2 + move a1,*a8(D3ZV),L + + + movi TSEC*2/2,a11 + +#slp SLEEPK 2 + + move *a13(ens_hit),a0 + jrnz #xpld ;Hit something? + + move *a8(D3X),a0,L + move @viewx,a1,L + sub a0,a1 + abs a1 + cmpi HITRNG,a1 + jrgt #nxt + + move *a8(D3Z),a0,L + move @viewz,a1,L + sub a0,a1 + abs a1 + cmpi HITRNG,a1 + jrle #hitpl ;Nail player +#nxt + dsj a11,#slp + +#xpld + callr _3d_freeobj + + + DIE + +#hitpl + callr _3d_freeobj + + move @shield,a0 + subk 1,a0 + move a0,@shield + + movi plhit_snd,a0 + calla snd_play1 + + movi -1,a0 + move a0,@IRQSKYE + SLEEPK 3 + movk 6,a0 + move a0,@IRQSKYE + + DIE + + +#******************************* +* Enemy shell hit an obj +* A8=*3D object + + SUBRP en_shell_hit + + move *a8(D3PLINK),a14,L + movk 1,a0 +; move a0,*a14(PTIME) ;Wake it up so it can die + move a0,*a14(ens_hit) + + rets + + +#******************************* +* Enemy tank (Process) +* A10=X (24:8) +* A11=Z + + STRUCTPD + WORD tnk_dir ;Dir 0-255 + WORD tnk_sdir ;Seek dir 0-255 + + + SUBRP en_tank + + move a10,a0 + movi 80<<8,a1 + move a11,a2 + clr a3 + clr a4 + clr a5 + movi tanktur_pts,a6 + movi tankturline_t,a7 + callr _3d_beginobj ;Get turret + move a8,a9 + + movi CLSENMY|TYPTANK,a0 + move a0,*a8(D3ID) + + move a10,a0 + movi 40<<8,a1 + movi tanklow_pts,a6 + movi tanklowline_t,a7 + callr _3d_beginobj ;Get chassie + + movi CLSENMY|TYPTANK,a0 + move a0,*a8(D3ID) + + movk 3,a0 + callr rndrng0 + addk 1,a0 + move a0,a11 ;A11=Turn speed +#lp + movi >1f,a0 + callr rnd + jrnz #noseek + + move @viewx,a6,L ;24:8 + move @viewz,a7,L + callr seekob_dir256 + move a0,*a13(tnk_sdir) + +#noseek + move *a13(tnk_sdir),a0 + move *a13(tnk_dir),a7 + + sub a7,a0 ;A0=Difference + jrz #noturn + + move a0,a1 + abs a0 + move a0,a14 + subi 128,a0 + jrle #350 + neg a1 +#350 + cmp a11,a14 + jrge #big + add a1,a7 + jruc #mskt +#big + move a1,a1 + jrnn #360 + sub a11,a7 + jruc #mskt +#360 add a11,a7 +#mskt + sll 32-8,a7 ;Make 0-255 + srl 32-8,a7 + move a7,*a13(tnk_dir) + + move a7,a0 + + callr sinecos_get + sra 1,a0 ;/2 + move a0,*a8(D3XV),L + move a0,*a9(D3XV),L + + sra 1,a1 ;/2 + neg a1 + move a1,*a8(D3ZV),L + move a1,*a9(D3ZV),L + + not a7 + move a7,*a8(D3YA) + move a7,*a9(D3YA) + + +#noturn + movk >7,a0 + callr rnd + jrnz #nofire + + move @viewx,a6,L ;24:8 + move @viewz,a7,L + callr seekob_dir256 + move *a13(tnk_dir),a10 + cmp a0,a10 + jrne #nofire ;!Facing player? + CREATE0 en_shell + +#nofire SLEEPK 1 + + jruc #lp + + +#******************************* +* Kill enemy tank (Process) +* A8=*Tank chassie obj +* A9=*Tank turret obj + + SUBRP en_tank_die + + movi tankexpsnd,a0 + calla snd_play1 + + movi 130<<8,a0 + move a0,*a8(D3YV),L + movi 150<<8,a0 + move a0,*a9(D3YV),L + + movk 30,a11 + +#lp move *a8(D3XA),a0 + addk 30,a0 + move a0,*a8(D3XA) + move *a8(D3YA),a0 + addk 20,a0 + move a0,*a8(D3YA) + move *a8(D3ZA),a0 + addk 15,a0 + move a0,*a8(D3ZA) + + move *a8(D3YV),a0,L + subi 10<<8,a0 + move a0,*a8(D3YV),L + move *a9(D3YV),a0,L + subi 10<<8,a0 + move a0,*a9(D3YV),L + + SLEEPK 1 + + dsj a11,#lp + + + callr _3d_freeobj + move a9,a8 + callr _3d_freeobj + + DIE + + +#******************************* +* Enemy tank hit an obj +* A8=*Tank object + + SUBRP en_tank_hit + + move *a8(D3PLINK),a14,L + movi en_tank_die,a0 + move a0,*a14(PWAKE),L ;Death routine + clr a0 + move a0,*a14(PROCID) + + rets + + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Get velocity to move towards an object + + SUBRP seekob_vel ;A0=*Dest obj, A3=Vel, A8=*Src obj + + PUSH a0 + + move *a0(OXPOS),a6 ;Get X + move *a0(OSIZEX),a2 + srl 1,a2 + add a2,a6 ;Center X + move *a0(OYPOS),a7 ;Get Y + move *a0(OSIZEY),a2 + srl 1,a2 + add a2,a7 ;Center Y + sll 16,a6 + sll 16,a7 + + move *a8(OXPOS),a0 ;Get X + move *a8(OSIZEX),a2 + srl 1,a2 + add a2,a0 ;Center X + move *a8(OYPOS),a1 ;Get Y + move *a8(OSIZEY),a2 + srl 1,a2 + add a2,a1 ;Center Y + sll 16,a0 + sll 16,a1 + + sub a0,a6 ;DestX-SrcX + sub a1,a7 ;DestY-SrcY + + +sov60 sra 1,a6 ;>Scale down to A3 + sra 1,a7 + move a6,a2 + abs a2 + cmp a3,a2 ;A6&A7 < A3 + jrgt sov60 + move a7,a2 + abs a2 + cmp a3,a2 + jrgt sov60 + + move a6,a4 ;>Fine scale up to A3 + move a7,a5 + sra 4,a4 ;/16 + sra 4,a5 + jrnz sov150 + move a4,a4 + jrz sov200 ;Both 0 then skip +sov150 add a4,a6 + add a5,a7 + move a6,a2 + abs a2 + cmp a3,a2 + jrgt sov200 + move a7,a2 + abs a2 + cmp a3,a2 + jrle sov150 + +sov200 + PULL a0 + rets ;>A6=XV, A7=YV + + +#******************************* +* Get dir to face an object +* A6=Dest X +* A7=Dest Z +* A8=*Source 3D obj +* >A0=0-255 +* Trashes A0-A2,A14 + + SUBRP seekob_dir256 + + move *a8(D3X),a0,L ;Get SX + move *a8(D3Z),a1,L ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #100 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #oct01 + movk 8,a2 ;Oct 2-3 + abs a1 + jruc #160 + +#100 movk 16,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #200 + movk 16+8,a2 ;Oct 6-7 +#160 SWAP a0,a1 + +#200 sll 3,a2 ;Oct*8 +#oct01 clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 2+3,a1 ;Bigger/32 + jruc #250 +#lp1 addk 1,a2 ;Next 1/32 oct + add a1,a14 ;+1/32 +#250 cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 addi 63,a2 ;End of next octant + srl 2+3,a0 ;Bigger/32 + jruc #350 +#lp2 subk 1,a2 ;Next 1/32 oct + add a0,a14 ;+1/32 +#350 cmp a1,a14 + jrlo #lp2 + + +#x movi >ff,a0 + and a2,a0 + rets + + +******************************** +* Get sine or cosine +* A0=Angle (0-255) +* >A0=0-16384*4 + + SUBRP cos_get + + sll 32-8,a0 + srl 32-8-4,a0 ;*16 + addi cos_t,a0 + move *a0,a0 + sll 2,a0 ;*4 + rets + + SUBRP sine_get + + sll 32-8,a0 + srl 32-8-4,a0 ;*16 + addi sine_t,a0 + move *a0,a0 + sll 2,a0 ;*4 + rets + + +******************************** +* Get sine and cosine +* A0=Angle (0-255) +* >A0=Sine (0-16384*4) +* >A1=Cos (0-16384*4) + + SUBRP sinecos_get + + sll 32-8,a0 + srl 32-8-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + sll 2,a0 ;*4 + sll 2,a1 ;*4 + rets + + + +sine_t + .word 0,402,803,1205,1605,2005,2404,2801 + .word 3196,3589,3981,4369,4756,5139,5519,5896 + .word 6270,6639,7005,7366,7723,8075,8423,8765 + .word 9102,9434,9760,10080,10394,10701,11003,11297 + .word 11585,11866,12140,12406,12665,12916,13160,13395 + .word 13623,13842,14053,14255,14449,14635,14811,14978 + .word 15137,15286,15426,15557,15678,15790,15893,15986 + .word 16069,16143,16207,16261,16305,16340,16364,16379 +cos_t + .word 16384,16379,16364,16340,16305,16261,16207,16143 + .word 16069,15986,15893,15791,15679,15557,15426,15286 + .word 15137,14978,14811,14635,14449,14256,14053,13842 + .word 13623,13395,13160,12916,12665,12406,12140,11866 + .word 11585,11297,11003,10702,10394,10080,9760,9434 + .word 9102,8765,8423,8076,7723,7366,7005,6639 + .word 6270,5896,5519,5139,4756,4370,3981,3590 + .word 3196,2801,2404,2005,1606,1205,804,402 + .word 0,-401,-803,-1205,-1605,-2005,-2403,-2800 + .word -3196,-3589,-3980,-4369,-4755,-5139,-5519,-5896 + .word -6269,-6639,-7005,-7366,-7723,-8075,-8423,-8765 + .word -9102,-9434,-9760,-10080,-10394,-10701,-11002,-11297 + .word -11585,-11866,-12139,-12406,-12665,-12916,-13160,-13395 + .word -13623,-13842,-14053,-14255,-14449,-14634,-14811,-14978 + .word -15137,-15286,-15426,-15557,-15678,-15790,-15893,-15986 + .word -16069,-16143,-16207,-16261,-16305,-16340,-16364,-16379 + .word -16384,-16379,-16364,-16340,-16305,-16261,-16207,-16143 + .word -16069,-15986,-15893,-15791,-15679,-15557,-15426,-15286 + .word -15137,-14979,-14811,-14635,-14449,-14256,-14053,-13842 + .word -13623,-13395,-13160,-12916,-12665,-12406,-12140,-11866 + .word -11585,-11298,-11003,-10702,-10394,-10080,-9760,-9434 + .word -9103,-8765,-8423,-8076,-7723,-7366,-7005,-6640 + .word -6270,-5897,-5520,-5139,-4756,-4370,-3981,-3590 + .word -3196,-2801,-2404,-2006,-1606,-1205,-804,-402 + .word 0,402,803,1205,1605,2005,2404,2801 + .word 3196,3589,3981,4369,4756,5139,5519,5896 + .word 6270,6639,7005,7366,7723,8075,8423,8765 + .word 9102,9434,9760,10080,10394,10701,11003,11297 + .word 11585,11866,12140,12406,12665,12916,13160,13395 + .word 13623,13842,14053,14255,14449,14635,14811,14978 + .word 15137,15286,15426,15557,15678,15790,15893,15986 + .word 16069,16143,16207,16261,16305,16340,16364,16379 + + + + + + +#******************************* +* Build lists and collide based on X +* A6=XMin +* A7=XMax (+1) + + SUBRP _3d_collide + + movi d3world_t,a3 ;World table to check + + movi pcoll_t,a9 ;Build collision lists + movi ecoll_t,a10 + movi ncoll_t,a11 + move a9,b4 ;Set A5/B4 for 1st collision call + move a10,a5 + jruc #next + +#enmy move a0,*a10+,L ;Insert on enemy list +#next move *a3+,a0,L ;Get next obj + jrz #end + + move *a0(D3ID),a14 + jrz #next ;Not collideable? + +; move *a0(OXPOS),a1 ;Obj can lie on max/min boundary +; cmp a7,a1 +; jrge #next ;Out of range? +; +; move *a0(OSIZEX),a2 +; add a2,a1 +; cmp a6,a1 +; jrle #next ;Out of range? + + move a14,a14 ;Check Class + jrn #enmy ;Enemy? + btst 14,a14 + jrnz #plyr ;Player? + + move a0,*a11+,L ;Insert on neutral list + jruc #next + +#plyr move a0,*a9+,L ;Insert on player list + jruc #next + +#end move a0,*a9,L ;Null terminate each list + move a0,*a10,L + move a0,*a11,L + + callr collidelists ;Collide enemy to player + + movi ncoll_t,a5 + movi ecoll_t,b4 + callr collidelists ;Collide neutral to enemy + + movi ncoll_t,a5 + movi pcoll_t,b4 +; jruc collidelists ;Collide neutral to player + ;Fall through + +#******************************* +* Collide objects on list A5 with those on LIST B4 +* A5,B4=ptrs to null terminated tables of object ptrs + +collidelists + +#lp move *a5+,a1,L + jrz #x + ;Load up coors of obj from first list + move *a1(D3X),a9,L ;A9=OBJ1 Xmin +; jrz #lp ;Deleted? + subi 100<<8,a9 +; move *a1(D3XS),a10 ;A10=OBJ1 Xmax (+1) + movi 200<<8,a10 + add a9,a10 + move *a1(D3Z),a7,L ;A7=OBJ1 Ymin + subi 100<<8,a7 +; move *a1(OSIZEY),a11 ;A11=OBJ1 Ymax (+1) + movi 200<<8,a11 + add a7,a11 + + move b4,a6 ;Load head of second list + +#lp2 move *a6+,a2,L + jrz #lp + + + move *a2(D3Z),a0,L ;Check objs A1,A2 for intersection + subi 100<<8,a0 + cmp a11,a0 + jrge #lp2 ;Y2Min >= Y1Max? + movi 200<<8,a14 +; move *a2(OSIZEY),a14 + add a14,a0 + cmp a7,a0 + jrle #lp2 ;Y2Max <= Y1Min? + + move *a2(D3X),a0,L ;Signed compares because objs may lie on 0 +; jrz #lp2 ;Deleted? + subi 100<<8,a0 + cmp a10,a0 + jrge #lp2 ;X2Min >= X1Max? + movi 200<<8,a14 +; move *a2(OSIZEX),a14 + add a14,a0 + cmp a9,a0 + jrle #lp2 ;X2Max <= X1Min? + + callr ColFunc ;>Call colfunc for obj A1 and A2 + move b0,b1 ;B1=*Collision routine for obj A1 + SWAP a1,a2 + callr ColFunc + SWAP a1,a2 + move b0,b2 ;B2=*Collision routine for obj A2 + or b1,b0 ;Set z flag if both are zero + jrz #lp2 + + + clr a0 + move a0,@d3collstop ;Clr flag + + move b1,b1 + jrz pobj2col + move a1,a8 + move a2,a0 + call b1 ;Call collision for A1 + +pobj2col + move b2,b2 + jrz pckfree + move a2,a8 + move a1,a0 + call b2 ;Call collision for A2 + +pckfree move @d3collstop,a0 + jrz #lp2 ;Continue scan? + jruc #lp + +#x rets + + +**************************************************************************** +* Return in B0 routine for obj A1 struck by obj A2 +* Trashes A3-A4 + +ColFunc + movb *a1(D3ID+8),a3 + movb *a2(D3ID+8),a4 + sll 32-5,a3 + srl 17,a3 ;32 Long Word Align + sll 32-5,a4 + srl 22,a4 ;Long Align + add a4,a3 + addi typetbl,a3 + + move *a3,a3,L + jump a3 ;Routine can trash A0/A3/A4/A8/A14 + + +**************************************************************************** +* These are the COLLISION FUNCTIONS +* A collision function is selected by the routine ColFunc +* which uses the TYPE field of the victims OID to select a subtable +* and indexes the subtable with the TYPE field of the killer. +* This gives a ptr to a COLLISION FUNCTION which returns +* the COLLISION ROUTINE to be called for the victim in B0. +* The COLLISION FUNCS can destroy registers A0,A3,A4,A8 +**************************************************************************** + +typetbl +;0000 +;NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;100 +;Player + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;200 +;Player shot + .LONG NULL, NULL, NULL, PSGO, PSTK, PSSH, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;300 +;Ground obstacle + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;400 +;Tank + .LONG NULL, NULL, TKPS, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;500 +;Shell + .LONG NULL, NULL, SHPS, SHGO, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;600 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;700 +;Text + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;800 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;900 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;a00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;b00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;c00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;d00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;e00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;f00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1000 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1100 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1200 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1300 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1400 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1500 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1600 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1700 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1800 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1900 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1a00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1b00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1c00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1d00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1e00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +;1f00 +;Free + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + .LONG NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + + +******************************** +* Shawn's enemy type collisons + +;SLPL movb *a1(OID),a0 +; cmpi SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +; subk SUBMSL,a0 +; jreq slpl5 ;Missile? +; movb *a2(OID),a0 ;Player ring +; subk 3,a0 +; jrne NULL +;slpl5 +;; movi slt_ringhit,b0 +; rets +; +;SLBL movb *a1(OID),a0 +; subk SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +;; movi slt_hit,b0 ;Bullet +; rets +; +;SLBB movb *a1(OID),a0 +; subk SUBSHRAP,a0 +; jreq NULL ;Shrapnel? +;; movi slt_bbhit,b0 ;Blade, bomb +; rets +; +;BLSL movb *a2(OID),a0 +; subk SUBMSL,a0 +;; jrne BLHU ;!Missile? +;; movi KILL_BULL2,b0 +; rets + + + + +NULL clr b0 + rets + + +PSGO +PSTK +PSSH + movi pl_shot_hit,b0 + rets + +TKPS + movi en_tank_hit,b0 + rets + +SHPS +SHGO + movi en_shell_hit,b0 + rets + + +; move *a1(OZPOS),a0 +; move *a2(OZPOS),a14 +; sub a14,a0 +; move a0,a3 +; abs a3 +; cmpi 30,a3 +; jrhi NULL ;Not in range? +; +; movi ball_hit,b0 +; rets + + + + +#*************************************************************** +* Display secret embedded copyright notice (Process) + + STRUCTPD + STRUC cpm_s ,8*80 + + SUBRP copyright_prtmsg + + movi #cr1_s,a1 + movi [50,200],a9 + JSRP copyright_prt + + movi #cr2_s,a1 + movi [80,200],a9 + JSRP copyright_prt + + movi #cr3_s,a1 + movi [110,200],a9 + JSRP copyright_prt + + movi #cr4_s,a1 + movi [140,200],a9 + JSRP copyright_prt + + SLEEP TSEC*20/BOGRATE + + jruc pldead + + + +copyright_prt + + movk 2,a3 ;>Decode string + move a13,a2 + addi cpm_s,a2 + setf 8,0,0 +#lp + move *a1+,a0 + sub a3,a0 ;-encode value + move a0,*a2+ + addi 37,a3 + sll 32-8,a0 + jrnz #lp + + setf 16,1,0 + + movi GOLD,a0 ;>Print string + calla pal_getf + move a0,a6 + + move a13,a8 + addi cpm_s,a8 + clr a0 + movk 1,a10 + movi osgfont_t,a11 + JSRP STRCNRMO_1 + + RETP + + + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 2,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+37,e + .endloop + .byte 0ffh & :e: + + .endm + + +#cr1_s ASCIIE "NBA-JAM" +#cr2_s ASCIIE "COPYRIGHT-1993" +#cr3_s ASCIIE "MIDWAY-MANUFACTURING-COMPANY" +#cr4_s ASCIIE "ALL-RIGHTS-RESERVED" + + + + + .end + \ No newline at end of file diff --git a/SRC/ARC/DRONE.ASM b/SRC/ARC/DRONE.ASM new file mode 100644 index 0000000..b1d3484 --- /dev/null +++ b/SRC/ARC/DRONE.ASM @@ -0,0 +1,2290 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/31/96 22:15 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + + move *a13(plyr_d_seekcnt),a0 + cmpi TSEC*4/2,a0 + jrle #_skok + LOCKUP +#_skok + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 + ori BUT3_M,a0 ;Push turbo + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 +; cmpi 65,a3 + cmpi 85,a3 + jrle #noalyo ;Too close? +; cmpi 180,a3 + cmpi 190,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + +;DJT Start + sll 2,a2 ;1 DJT ;% * 2 +;DJT End +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + +; cmpi 80,a3 + cmpi 90,a3 + jrle #noalyo ;Too close? + + movi 100,a0 + calla RNDPER + jrls #noalyo + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrz #nofire ;We not on fire? + movi 128,a14 ;50% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodnk + + cmpi 35,a14 + jrle #tryblk +#nodnk + btst SHOOT_B,a0 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + move a0,a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + move a10,a10 + jrgt #blk ;Nasty on? + + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + movi 190,a0 + move a0,*a2(pld_d_grddist) + + movk 4,a0 + callr rndrng0 + addk 5,a0 + move a0,*a2(pld_d_lowsecagr) ;5-9 + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 + .word 0,Z + .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + movi CZMID,a1 +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball + +;FIX! better ball dist chk!!! + + move *a13(plyr_balldist),a2 + cmpi 50,a2 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 130-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + jrgt #skipp ;Ball too high? + + addi 40,a1 + jrge #skipp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#skipp +;FIX! + jruc #nojmp + +; subi 40,a0 +; jrgt #nojmp ;Ball too high? +; +; movk 7,a0 +; callr rnd +; jrnz #nojmp ;87%? +; +; move @game_time,a1,L +; cmpi >300,a1 +; jrgt #j ;More than 3 secs? +; ;>Don't take our own shots off the rim +; move *a13(plyr_num),a0 +; move @ballpnumshot,a1 +; srl 1,a0 +; srl 1,a1 +; cmp a0,a1 +; jreq #nojmp ;My team? +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + diff --git a/SRC/ARC/DRONE2.ASM b/SRC/ARC/DRONE2.ASM new file mode 100644 index 0000000..ce3557d --- /dev/null +++ b/SRC/ARC/DRONE2.ASM @@ -0,0 +1,2078 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/29/96 18:42 +************************************************************** + .file "drone2.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + +;equates for this file + + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone2_main + + + move *a13(plyr_d_seekcnt),a0 + cmpi TSEC*4/2,a0 + jrle #_skok + LOCKUP +#_skok + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + move *a13(plyr_d_skill),a14 + cmpi -11-3,a14 + jrle #noturb2 + ori BUT3_M,a0 ;Push turbo + move a0,*a11 +#noturb2 + + move @game_time,a1,L + cmpi >200,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + cmpi >200,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 70,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 10,a0 + jrle #zz ;Too little time in dir? + + movk 3,a0 ;25% spin move + callr rnd + jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + XORK 1,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + cmpi -11-3,a14 + jrle #tryshot + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + movi 50,a0 + move *a13(plyr_d_skill),a14 + cmpi -8,a14 + jrgt #rndsht + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #x ;Less than 2 secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + move *a13(plyr_num),a1 + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp on fire? + + XORK 2,a1 + + move @PSTATUS,a0 ;Plyr start bits 0-3 +; XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a1 + cmpi 100,a1 + jrlt #noalyo ;Too close? + cmpi 200,a1 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + move *a13(plyr_ohoopx),a0 + movi CZMID,a1 + callr drone_seekxy +; move *a13(plyr_d_skill),a14 +; cmpi -11-3,a14 +; jrle #noturb2 + ori BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + movi >7f,a0 + callr rnd + jrz #newseek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek + move *a13(plyr_newdir),a0 + jrnn #contsk ;Turning? + + movk 16-1,a0 + + move a4,a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + move a4,a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-155, 80,Z-155, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + subk 1,a0 ;-1 + move a0,*a13(plyr_d_mode) + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + movk 2,a10 + move @game_time,a14,L + + cmpi >800,a14 + jrlt #nasty ;Less than 8 secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + cmpi >30000,a14 + jrlt #nasty ;Less than 30 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + subk 5,a14 + jrlt #nasty ;Less than 5 secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + TEST a10 + jrgt #setseek ;Nasty on? + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrnz #setseek ;Starting a shot? + + move *a13(plyr_myhoopx),a2 ;>Stay near oplyr between my basket + movi CZMID,a3 + + move *a13(plyr_num),a6 + move @plyr_onfire,a14 + btst a6,a14 + jrz #nofire ;I'm not on fire? + + add a2,a0 + add a3,a1 + sra 1,a0 ;/2 + sra 1,a1 ;/2 + jruc #setseek + +#nofire + sub a2,a0 + sub a3,a1 + + movi 190,a14 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodnk + + cmpi 35,a14 + jrle #tryblk +#nodnk + btst SHOOT_B,a0 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + move a0,a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + move a10,a10 + jrgt #blk ;Nasty on? + + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+15,N+13,N+12,N+11,N+10 + .word N+09,N+08,N+07,N+06,N+05 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone2_setuptob + + PUSH a2,a3,a4,a13 + + movk 4,a4 + movi plyrproc_t,a3 + +#lp move *a3+,a13,L + move *a13(PA9),a2,L + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob move a0,*a13(plyr_d_mode) + + movi TSEC,a0 + callr rndrng0 + addk 5,a0 +; move a0,*a2(pld_d_tobskcnt) ;Guy with ball + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + + clr a0 + move a0,*a2(pld_d_nastycnt) + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a0,a2 + + movk 1,a0 + callr rnd + jrnz #sk + srl 1,a2 +#sk + move a2,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + + PULL a2,a3,a4,a13 + rets + + + .asg CZMID,Z +#seek_t + .word -280,Z-160, -200,Z-160, -100,Z-160, -50,Z-160 + .word 0,Z + .word -280,Z+160, -200,Z+160, -100,Z+160, -50,Z+160 + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammates staggered? +#tmok + movi CZMID,a1 + + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + ORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-3,a14 ;8 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-3,a14 ;8 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball + + move *a13(plyr_balldist),a2 + cmpi 50,a2 + jrgt #nojmp + + move @ballobj_p,a5,L + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrz #nofire ;I'm not on fire? + + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 120-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + jrgt #skipp ;Ball too high? + + addi 40,a1 + jrge #skipp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#skipp +;FIX! + jruc #nojmp + +; subi 40,a0 +; jrgt #nojmp ;Ball too high? +; +; movk 7,a0 +; callr rnd +; jrnz #nojmp ;87%? +; +; move @game_time,a1,L +; cmpi >300,a1 +; jrgt #j ;More than 3 secs? +; ;>Don't take our own shots off the rim +; move *a13(plyr_num),a0 +; move @ballpnumshot,a1 +; srl 1,a0 +; srl 1,a1 +; cmp a0,a1 +; jreq #nojmp ;My team? +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 70,70,70,70,70 ;Up 15-11 + .word 70,70,60,55,50 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone2_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;Drone v2 is level 2-5 + subk 4,a0 ;-2 to 2 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #tminok ;Teammate is human? + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok + + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1,0,0 + .word 0 + .word 0,1,1,2,2 + .word 3,3,4,4,5 + .word 5,6,6,6,7 + +#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro + .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;ATL (11) + TMDIFF ;BOS + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA (14) + .byte 6,7,7, 8,9,9, 10,10,11, 11,13,12 ;CHI (1) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE (10) + TMDIFF ;DAL + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN (20) + .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET (12) + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL (18) + .byte -1,-1,0, 1,1,1, 2,2,2, 3,4,3 ;HOU (6) + .byte -4,-3,-3, -2,-1,-1, 0,0,0, 1,2,1 ;IND (8) + TMDIFF ;LAC + .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0,1,0 ;LAL (9) + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI (17) + TMDIFF ;MIL + TMDIFF ;MIN + TMDIFF ;NJ + .byte -3,-2,-2, -1,0,0, 1,1,1, 2,3,2 ;NY (7) + .byte 4,4,4, 4,4,5, 5,5,7, 7,8,7 ;ORL (3) + TMDIFF ;PHI + .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX (16) + .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR (15) + .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC (13) + .byte 1,1,1, 2,2,2, 3,3,3, 4,5,4 ;SAN (5) + .byte 4,4,5, 5,6,6, 7,7,7, 7,9,8 ;SEA (2) + TMDIFF ;TOR + .byte 2,2,2, 3,3,3, 4,4,4, 5,6,5 ;UTA (4) + TMDIFF ;VAN + .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS (19) + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + \ No newline at end of file diff --git a/SRC/ARC/DUNKS.ASM b/SRC/ARC/DUNKS.ASM new file mode 100644 index 0000000..2e2ca25 --- /dev/null +++ b/SRC/ARC/DUNKS.ASM @@ -0,0 +1,837 @@ +;One for every dunk + SEQ DUNKA_SEQ ,dunka_t + SEQ DUNKAH_SEQ ,dunkah_t + SEQ DUNKB_SEQ ,dunkb_t + SEQ DUNKC_SEQ ,dunkc_t + SEQ DUNKD_SEQ ,dunkd_t + SEQ DUNKE_SEQ ,dunke_t + SEQ DUNKF_SEQ ,dunkf_t + SEQ DUNKG_SEQ ,dunkg_t + SEQ DUNKH_SEQ ,dunkh_t + SEQ DUNKI_SEQ ,dunki_t + SEQ DUNKJ_SEQ ,dunkj_t + SEQ DUNKK_SEQ ,dunkk_t + SEQ DUNKL_SEQ ,dunkl_t + SEQ DUNKM_SEQ ,dunkm_t + + +;Direction tables for short range dunks +#dunks_t + .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +;Direction tables for long range dunks +#dunkl_t + .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + + +;List of dunks that can happen in these dirs if plyr is near hoop +#d1s_t .word 1-1,DUNKB_SEQ,DUNKF_SEQ,DUNKJ_SEQ +#d2s_t .word 1-1,DUNKB_SEQ,DUNKF_SEQ,DUNKI_SEQ,DUNKJ_SEQ +#d3s_t .word 1-1,DUNKB_SEQ,DUNKC_SEQ,DUNKE_SEQ,DUNKH_SEQ,DUNKI_SEQ +#d4s_t .word 1-1,DUNKC_SEQ,DUNKE_SEQ,DUNKG_SEQ,DUNKH_SEQ +#d5s_t .word 1-1,DUNKH_SEQ + +;List of dunks that can happen in these dirs if plyr is far away from hoop +#d1l_t .word 1-1,DUNKA_SEQ,DUNKB_SEQ,DUNKF_SEQ,DUNKJ_SEQ +#d2l_t .word 1-1,DUNKA_SEQ,DUNKB_SEQ,DUNKF_SEQ,DUNKI_SEQ,DUNKJ_SEQ + .word DUNKK_SEQ +#d3l_t .word 1-1,DUNKA_SEQ,DUNKAH_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKH_SEQ,DUNKI_SEQ,DUNKL_SEQ,DUNKM_SEQ +#d4l_t .word 1-1,DUNKC_SEQ,DUNKD_SEQ,DUNKE_SEQ,DUNKG_SEQ,DUNKH_SEQ +#d5l_t .word 1-1,DUNKH_SEQ + + + +;Sequence header table +dunka_t + .word DUNK_M|JUMP_M ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #da2_l,#da2_l,#da3_l,#DD ;Dirs 1-8 + .long #DD,#DD,#da3f_l,#da2f_l + +;Sequence list for animation - will happen only in the 1 dir +#da3_l + .asg 7,N ;ticks per frame + WLW N,w3spdu1,F ;Flags + +#da2_l + WLW N,w3spdu2,F + WLLW -1,seq_strtdunk,w3spdu7,N*4+1 ;Next frame begins elevation + ;Last frame before releasing + ;ball, the last frame with + ;Last # is total ticks until + ;player is at rim + WLW N,w3spdu3,F + WLW N,w3spdu4,F + WLW N,w3spdu5,F + WLW N,w3spdu6,F + WLW 1,w3spdu7,F + WLW -1,seq_slamball,0 ;Ball centers in hoop at + ;display of next frame + ;Last cnt is total hang cnt + WLW 5,w3spdu7,F + WLW 4,w3spdu8,F + WLW 4,w3spdu9,F + WLW 30,w3spdu10,F ;Lands on ground +#DD W0 + + + +#da3f_l + .asg 7,N ;ticks per frame + WLW N,w3spdu1,FF + +#da2f_l + WLW N,w3spdu2,FF + WLLW -1,seq_strtdunk,w3spdu7,N*4+1 + WLW N,w3spdu3,FF + WLW N,w3spdu4,FF + WLW N,w3spdu5,FF + WLW N,w3spdu6,FF + WLW 1,w3spdu7,FF + WLW -1,seq_slamball,0 + + WLW 5,w3spdu7,FF + WLW 4,w3spdu8,FF + WLW 4,w3spdu9,FF + WLW 30,w3spdu10,FF + W0 + +******************************** + + +dunkah_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dah3_l,#DD + .long #DD,#DD,#dah3f_l,#DD + + +#dah3_l + .asg 7,N + WLW N,w3spdu1,F + WLW N,w3spdu2,F + WLLW -1,seq_strtdunk,w3spdu7,N*4+1 + + WLW N,w3spdu3,F + WLW N,w3spdu4,F + WLW N,w3spdu5,F + WLW N,w3spdu6,F + WLW 1,w3spdu7,F + + .asg 5,N + WLW -1,seq_slamball,N*4+2 ;hang time on rim before drop + + WLW 3,w3spdu7,F + WLW N,w3hang1,F + WLW N,w3hang2,F + WLW N,w3hang3,F + WLW N,w3hang4,F + WLW N,w3hang5,F + WLW N,w3hang6,F + WLW N,w3hang7,F + WL -1,seq_stand4 ;Force a stand in 4 dir + W0 + + + +#dah3f_l + .asg 7,N + WLW N,w3spdu1,FF + WLW N,w3spdu2,FF + WLLW -1,seq_strtdunk,w3spdu7,N*4+1 + + WLW N,w3spdu3,FF + WLW N,w3spdu4,FF + WLW N,w3spdu5,FF + WLW N,w3spdu6,FF + WLW 1,w3spdu7,FF + + .asg 5,N + WLW -1,seq_slamball,N*4+2 + + WLW 3,w3spdu7,FF + WLW N,w3hang1,FF + WLW N,w3hang2,FF + WLW N,w3hang3,FF + WLW N,w3hang4,FF + WLW N,w3hang5,FF + WLW N,w3hang6,FF + WLW N,w3hang7,FF + WL -1,seq_stand7 + W0 + + +******************************** + +dunkb_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #db2_l,#db2,#db3_l,#DD + .long #DD,#DD,#db3f_l,#db2f_l + + +#db2_l + .asg 7,N + WLW N,w1stdu1,F + WLLW -1,seq_strtdunk,w1stdu6,N*4+1 + WLW N,w1stdu2,F + WLW N,w1stdu3,F + WLW N,w1stdu4,F + WLW N,w1stdu5,F + WLW 1,w1stdu6,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 3,w1stdu6,F + WLW N,w1stdu7,F + WLW N,w1stdu8,F + WLW N,w1stdu9,F + WLW 30,w1stdu10,F + WL -1,seq_stand5 + W0 + +#db2f_l + .asg 7,N + WLW N,w1stdu1,FF + WLLW -1,seq_strtdunk,w1stdu6,N*4+1 + WLW N,w1stdu2,FF + WLW N,w1stdu3,FF + WLW N,w1stdu4,FF + WLW N,w1stdu5,FF + WLW 1,w1stdu6,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 3,w1stdu6,FF + WLW N,w1stdu7,FF + WLW N,w1stdu8,FF + WLW N,w1stdu9,FF + WLW 30,w1stdu10,FF + WL -1,seq_stand5 + W0 + + +#db3_l + .asg 7,N + WLW N,w3spdu1,F + WLW N,w3spdu2,F + WLLW -1,seq_strtdunk,w1stdu6,N*4+1 + WLW N,w1stdu2,F + WLW N,w1stdu3,F + WLW N,w1stdu4,F + WLW N,w1stdu5,F + WLW 1,w1stdu6,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 3,w1stdu6,F + WLW N,w1stdu7,F + WLW N,w1stdu8,F + WLW N,w1stdu9,F + WLW 30,w1stdu10,F + WL -1,seq_stand5 + W0 + +#db3f_l + .asg 7,N + WLW N,w3spdu1,FF + WLW N,w3spdu2,FF + WLLW -1,seq_strtdunk,w1stdu6,N*4+1 + WLW N,w1stdu2,FF + WLW N,w1stdu3,FF + WLW N,w1stdu4,FF + WLW N,w1stdu5,FF + WLW 1,w1stdu6,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 3,w1stdu6,FF + WLW N,w1stdu7,FF + WLW N,w1stdu8,FF + WLW N,w1stdu9,FF + WLW 30,w1stdu10,FF + WL -1,seq_stand5 + W0 + +******************************** + + +dunkc_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dc3_l,#dc3_l + .long #DD,#dc3f_l,#dc3f_l,#DD + + +#dc3_l + .asg 7,N + WLW N,w4modu1,F + WLW N,w4modu2,F + WLLW -1,seq_strtdunk,w4modu5,N*3+1 + WLW N,w4modu3,F + WLW N,w4modu4,F + WLW 1,w4modu5,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w4modu5,F + WLW N,w4modu6,F + WLW 30,w4modu7,F + WL -1,seq_stand3 + W0 + +#dc3f_l + .asg 7,N + WLW N,w4modu1,FF + WLW N,w4modu2,FF + WLLW -1,seq_strtdunk,w4modu5,N*3+1 + WLW N,w4modu3,FF + WLW N,w4modu4,FF + WLW 1,w4modu5,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w4modu5,FF + WLW N,w4modu6,FF + WLW 30,w4modu7,FF + WL -1,seq_stand7 + W0 + + +******************************** + + +dunkd_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dd3_l,#dd3_l + .long #DD,#dd3f_l,#dd3f_l,#DD + + +#dd3_l + .asg 7,N + WLW N,w3ondu1,F + WLW N,w3ondu2,F + WLLW -1,seq_strtdunk,w3ondu6,N*3+1 + WLW N,w3ondu3,F + WLW N,w3ondu4,F + WLW N,w3ondu5,F + WLW 1,w3ondu6,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3ondu6,F + WLW N,w3ondu7,F + WLW 30,w4modu8,F + WL -1,seq_stand3 + W0 + + +#dd3f_l + .asg 7,N + WLW N,w3ondu1,FF + WLW N,w3ondu2,FF + WLLW -1,seq_strtdunk,w3ondu6,N*3+1 + WLW N,w3ondu3,FF + WLW N,w3ondu4,FF + WLW N,w3ondu5,FF + WLW 1,w3ondu6,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3ondu6,FF + WLW N,w3ondu7,FF + WLW 30,w4modu8,FF + WL -1,seq_stand7 + W0 + + +******************************** + + +dunke_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#de3_l,#de3_l + .long #DD,#de3f_l,#de3f_l,#DD + + +#de3_l + .asg 7,N + WLW N,w3twdu1,F + WLW N,w3twdu2,F + WLLW -1,seq_strtdunk,w3twdu7,N*4+1 + WLW N,w3twdu3,F + WLW N,w3twdu4,F + WLW N,w3twdu5,F + WLW N,w3twdu6,F + WLW 1,w3twdu7,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3twdu7,F + WLW N,w3twdu8,F + WLW 30,w3hang7,F + WL -1,seq_stand4 + W0 + + +#de3f_l + .asg 7,N + WLW N,w3twdu1,FF + WLW N,w3twdu2,FF + WLLW -1,seq_strtdunk,w3twdu7,N*4+1 + WLW N,w3twdu3,FF + WLW N,w3twdu4,FF + WLW N,w3twdu5,FF + WLW N,w3twdu6,FF + WLW 1,w3twdu7,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3twdu7,FF + WLW N,w3twdu8,FF + WLW 30,w3hang7,FF + WL -1,seq_stand4 + W0 + + +******************************** + + +dunkf_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #df2_l,#df2_l,#DD,#DD + .long #DD,#DD,#DD,#df2f_l + + +#df2_l + .asg 7,N + WLW N,w1spdu1,F + WLW N,w1spdu2,F + WLW N,w1spdu3,F + WLLW -1,seq_strtdunk,w1spdu9,N*5+1 + WLW N,w1spdu4,F + WLW N,w1spdu5,F + WLW N,w1spdu6,F + WLW N,w1spdu7,F + WLW N,w1spdu8,F + WLW 1,w1spdu9,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w1spdu9,F + WLW N,w1spdu10,F + WLW 30,w1spdu11,F + WL -1,seq_stand1 + W0 + +#df2f_l + .asg 7,N + WLW N,w1spdu1,FF + WLW N,w1spdu2,FF + WLW N,w1spdu3,FF + WLLW -1,seq_strtdunk,w1spdu9,N*5+1 + WLW N,w1spdu4,FF + WLW N,w1spdu5,FF + WLW N,w1spdu6,FF + WLW N,w1spdu7,FF + WLW N,w1spdu8,FF + WLW 1,w1spdu9,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w1spdu9,FF + WLW N,w1spdu10,FF + WLW 30,w1spdu11,FF + WL -1,seq_stand1 + W0 + + + +******************************** + + +dunkg_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#DD,#dg4_l + .long #DD,#dg4f_l,#DD,#DD + + +#dg4_l + .asg 7,N + WLW N,w4modu1,F + WLW N,w4modu2,F + WLLW -1,seq_strtdunk,w4stdu8,N*5+1 + WLW N,w4stdu3,F + WLW N,w4stdu4,F + WLW N,w4stdu5,F + WLW N,w4stdu6,F + WLW N,w4stdu7,F + WLW 1,w4stdu8,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w4stdu8,F + WLW N,w4stdu7,F + WLW N,w4stdu6,F + WLW 30,w4stdu5,F + WL -1,seq_stand4 + W0 + + +#dg4f_l + .asg 7,N + WLW N,w4modu1,FF + WLW N,w4modu2,FF + WLLW -1,seq_strtdunk,w4stdu8,N*5+1 + WLW N,w4stdu3,FF + WLW N,w4stdu4,FF + WLW N,w4stdu5,FF + WLW N,w4stdu6,FF + WLW N,w4stdu7,FF + WLW 1,w4stdu8,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w4stdu8,FF + WLW N,w4stdu7,FF + WLW N,w4stdu6,FF + WLW 30,w4stdu5,FF + WL -1,seq_stand4 + W0 + + + +******************************** + + +dunkh_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dh3_l,#dh3_l + .long #dh3_l,#dh3f_l,#dh3f_l,#DD + + +#dh3_l + .asg 7,N + WLW N,w5uhdu1,F + WLLW -1,seq_strtdunk,w5uhdu7,N*5+1 + WLW N,w5uhdu2,F + WLW N,w5uhdu3,F + WLW N,w5uhdu4,F + WLW N,w5uhdu5,F + WLW N,w5uhdu6,F + WLW 1,w5uhdu7,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w5uhdu7,F + WLW N,w5uhdu8,F + WLW 30,w5uhdu9,F + WL -1,seq_stand6 ;4 flipped! + W0 + + +#dh3f_l + .asg 7,N + WLW N,w5uhdu1,FF + WLLW -1,seq_strtdunk,w5uhdu7,N*5+1 + WLW N,w5uhdu2,FF + WLW N,w5uhdu3,FF + WLW N,w5uhdu4,FF + WLW N,w5uhdu5,FF + WLW N,w5uhdu6,FF + WLW 1,w5uhdu7,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w5uhdu7,FF + WLW N,w5uhdu8,FF + WLW 30,w5uhdu9,FF + WL -1,seq_stand4 + W0 + + + +******************************** + + +dunki_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#di3_l,#di3_l,#DD + .long #DD,#DD,#di3f_l,#di3f_l + + +#di3_l + .asg 7,N + WLW N,w3sp2du1,F + WLLW -1,seq_strtdunk,w3spdu8,N*6+1 + WLW N,w3sp2du2,F + WLW N,w3sp2du3,F + WLW N,w3sp2du4,F + WLW N,w3sp2du5,F + WLW N,w3sp2du6,F + WLW N,w3sp2du7,F + WLW 1,w3sp2du8,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 8,w3sp2du8,F + WLW 30,w3sp2du9,F + WL -1,seq_stand3 + W0 + +#di3f_l + .asg 7,N + WLW N,w3sp2du1,FF + WLLW -1,seq_strtdunk,w3spdu8,N*6+1 + WLW N,w3sp2du2,FF + WLW N,w3sp2du3,FF + WLW N,w3sp2du4,FF + WLW N,w3sp2du5,FF + WLW N,w3sp2du6,FF + WLW N,w3sp2du7,FF + WLW 1,w3sp2du8,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 8,w3sp2du8,FF + WLW 30,w3sp2du9,FF + WL -1,seq_stand7 + W0 + + + +******************************** + + +dunkj_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #dj2_l,#dj2_l,#DD,#DD + .long #DD,#DD,#DD,#dj2f_l + + +#dj2_l + .asg 7,N + WLW N,w2swdu1,F + WLLW -1,seq_strtdunk,w2swdu6,N*4+1 + WLW N,w2swdu2,F + WLW N,w2swdu3,F + WLW N,w2swdu4,F + WLW N,w2swdu5,F + WLW 1,w2swdu6,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w2swdu6,F + WLW N,w2swdu7,F + WLW N,w2swdu8,F + WLW 30,w2swdu9,F + WL -1,seq_stand1 + W0 + + +#dj2f_l + .asg 7,N + WLW N,w2swdu1,FF + WLLW -1,seq_strtdunk,w2swdu6,N*4+1 + WLW N,w2swdu2,FF + WLW N,w2swdu3,FF + WLW N,w2swdu4,FF + WLW N,w2swdu5,FF + WLW 1,w2swdu6,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w2swdu6,FF + WLW N,w2swdu7,FF + WLW N,w2swdu8,FF + WLW 30,w2swdu9,FF + WL -1,seq_stand1 + W0 + + +******************************** + + +dunkk_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#dk2_l,#DD,#DD + .long #DD,#DD,#DD,#dk2f_l + + +#dk2_l + .asg 7,N + WLW N,w2jamdu1,F + WLLW -1,seq_strtdunk,w2jamdu5,N*3+1 + WLW N,w2jamdu2,F + WLW N,w2jamdu3,F + WLW N,w2jamdu4,F + WLW 1,w2jamdu5,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w2jamdu5,F + WLW 30,w2jamdu6,F + WL -1,seq_stand2 + W0 + +#dk2f_l + .asg 7,N + WLW N,w2jamdu1,FF + WLLW -1,seq_strtdunk,w2jamdu5,N*3+1 + WLW N,w2jamdu2,FF + WLW N,w2jamdu3,FF + WLW N,w2jamdu4,FF + WLW 1,w2jamdu5,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w2jamdu5,FF + WLW 30,w2jamdu6,FF + WL -1,seq_stand8 + W0 + + +******************************** + + +dunkl_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dl3_l,#DD + .long #DD,#DD,#dl3f_l,#DD + + +#dl3_l + .asg 7,N + WLW N,w3flydu1,F + WLLW -1,seq_strtdunk,w3flydu7,N*5+1 + WLW N,w3flydu2,F + WLW N,w3flydu3,F + WLW N,w3flydu4,F + WLW N,w3flydu5,F + WLW N,w3flydu6,F + WLW 1,w3flydu7,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3flydu7,F + WLW N,w3flydu8,F + WLW 30,w3flydu9,F + WL -1,seq_stand3 + W0 + +#dl3f_l + .asg 7,N + WLW N,w3flydu1,FF + WLLW -1,seq_strtdunk,w3flydu7,N*5+1 + WLW N,w3flydu2,FF + WLW N,w3flydu3,FF + WLW N,w3flydu4,FF + WLW N,w3flydu5,FF + WLW N,w3flydu6,FF + WLW 1,w3flydu7,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 4,w3flydu7,FF + WLW N,w3flydu8,FF + WLW 30,w3flydu9,FF + WL -1,seq_stand7 + W0 +******************************** + + +dunkm_t + .word DUNK_M|JUMP_M + .long seq_stand + .long #DD,#DD,#dm3_l,#DD + .long #DD,#DD,#dm3f_l,#DD + + +#dm3_l + .asg 7,N + WLW N,w3twdu1,F + WLW N,w3twdu2,F + WLLW -1,seq_strtdunk,w3twdu10,N*7+1 + WLW N,w3twdu3,F + WLW N,w3twdu4,F + WLW N,w3twdu5,F + WLW N,w3twdu6,F + WLW N,w3twdu7,F + WLW N,w3twdu8,F + WLW N,w3twdu9,F + WLW 1,w3twdu10,F + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 6,w3twdu10,F + WLW N,w3twdu11,F + WL -1,seq_stand4 + W0 + +#dm3f_l + .asg 7,N + WLW N,w3twdu1,FF + WLW N,w3twdu2,FF + WLLW -1,seq_strtdunk,w3twdu10,N*7+1 + WLW N,w3twdu3,FF + WLW N,w3twdu4,FF + WLW N,w3twdu5,FF + WLW N,w3twdu6,FF + WLW N,w3twdu7,FF + WLW N,w3twdu8,FF + WLW N,w3twdu9,FF + WLW 1,w3twdu10,FF + + .asg 5,N + WLW -1,seq_slamball,0 + WLW 6,w3twdu10,FF + WLW N,w3twdu11,FF + WL -1,seq_stand6 + W0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SRC/ARC/MAKEP.ASM b/SRC/ARC/MAKEP.ASM new file mode 100644 index 0000000..57e28c5 --- /dev/null +++ b/SRC/ARC/MAKEP.ASM @@ -0,0 +1,1355 @@ +;----------------------------------------------------------------------------- +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 5/9/95 +;----------------------------------------------------------------------------- + .file "makeplyr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "mac2.asm" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "shawn.hdr" + .include "plyrseq.tbl" + + +NUM_ICONS equ 8 +NUM_ATTRIBS equ 8 + + + .global player1_data,player2_data,player3_data,player4_data + + .def create_modify_player + .def in_create_plyr + + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref player_heads ;table addr. + .ref player_names ;table addr. + .ref our_names ;table addr. + .ref guyhds ;table addr. + .ref our_heads ;table addr. + .ref player_attribs ;table addr. + .ref logos + .ref city_tbl + .ref KILBGND,WIPEOUT + .ref pal_clean + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref osgemd_ascii,delete_text + .ref sgmd8_ascii + .ref dpageflip + .ref get_but_val_cur + .ref get_but_val_down + .ref get_stick_val_cur + .ref get_stick_val_down + .ref pal_getf + .ref button_actions + .ref get_player_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu,create_name_objs + + .bss plyr_drib_cnt,16 + .bss plyr_dribble_obj,32 + .bss in_create_plyr,16 + .bss timer,16 + .bss timer_img_ptr,32*2 + .bss icon_cursor_pos,16 + .bss joy_pos,16 + .bss icon_objs,32*NUM_ICONS ;8 icons on screen + + .bss speed_points,16 ;0-100 attribute amount + .bss power_points,16 ;0-100 attribute amount + .bss shoot_points,16 ;0-100 attribute amount + .bss dunks_points,16 ;0-100 attribute amount + .bss steal_points,16 ;0-100 attribute amount + .bss block_points,16 ;0-100 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;60 points max (perfect plyr) + + .bss attribute_bar_objs,32*NUM_ATTRIBS + .bss attrib_cur_pos,16 + .bss processing_icon,16 ;1=performing icon action + .bss button_pos,16 + .bss attribute_name_objs,32*NUM_ATTRIBS + + .text + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_modify_player + + movk 1,a0 + move a0,@in_create_plyr + movk 1,a0 ;set cause must wait for plyr + move a0,@processing_icon ;to enter inits. & pin nbr + +;set defaults + movi 50,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points + move a0,@height_points + move a0,@weight_points + movi 50,a0 + move a0,@total_points + +;setup new background + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a1 ;kill all processes + calla KILALL + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + calla create_icons + + CREATE0 player_dribbing_ball + + CREATE0 timedown_create_player_timer + CREATE0 icon_cursor_control + + movk 3,a10 + CREATE0 enter_create_plyr_initials + +; movi create_strs_setup,a2 +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movk 22,a0 +; move a0,@mess_line_spacing +; movi create_strs,a4 +; calla print_string_C2 + +rept_1 + sleep 4 + jruc rept_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_icons + +; +; Create information box +; + movi SCRB_TX,a2,L + movi [128,0],a0 ;X coor. + movi [10,0],a1 ;Y coor. + movi 7,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi SCRB_P,b0 ;pal. to use for city imgs. + calla BEGINOBJP2 +; +; Now create icons +; + movi icon_setup_table,a14,L + movi icon_objs,a9,L + clr a0 ;counter of icons blitted +icons_1 + PUSH a0,a14 + move *a14+,a0,L ;X coor. + move *a14+,a1,L ;Y coor. + move *a14,a2,L ;ptr. to img + + movi 7,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICONS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi SCRB_P,b0 ;pal. to use for city imgs. + calla BEGINOBJP2 + move a8,*a9+,L ;save obj. ptrs to icons + + PULL a0,a14 + addi 32*3,a14 ;point to next line in table + inc a0 + cmpi NUM_ICONS-1,a0 + jrls icons_1 ;br=more icons to blit + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +icon_cursor_control + clr a0 + move a0,@icon_cursor_pos + move a0,@joy_pos +; move a0,@button_pos +; +; Read joystick +; +redj_1 + SLEEPK 5 + + move @processing_icon,a0 ;are in ICON action routine ? + jrnz redj_1 ;br=yep...wait + + movk 3,a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @joy_pos,a14 + cmp a14,a0 + jreq jnon_1 ;br=no auto repeat... + move a0,@joy_pos + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @icon_cursor_pos,a0 + dec a0 + jruc jl_1 ;fake 2 LEFT movements + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @icon_cursor_pos,a0 + inc a0 + jruc jr_1 ;fake 2 RIGHT movements + +jndn_1 cmpi JOY_LEFT,a0 ;joystick left ? + jrne jnl_1 + move @icon_cursor_pos,a0 +jl_1 dec a0 + jrnn jl_2 + movk NUM_ICONS-1,a0 ;reset cursor position +jl_2 move a0,@icon_cursor_pos + + +jnl_1 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne jnon_1 + move @icon_cursor_pos,a0 +jr_1 inc a0 + cmpi NUM_ICONS,a0 ;number of icons + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@icon_cursor_pos + jruc jnon_1 +; +; Read buttons +; +jnon_1 + movk 3,a0 + calla get_but_val_cur + + move @button_pos,a14 + cmp a14,a0 + jreq adicon_0 ;br=no auto repeat... + move a0,@button_pos + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne adicon_0 ;br=no joystick or buttons +; +; Maybe call action routine for ICON (based on table) +; +but_1 + move @icon_cursor_pos,a0,L ;get hi-lited icon nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi icon_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + call a0 + jruc redj_1 +; +; re-adjust palettes for icons +; +adicon_0 + clr a14 ;count of icons re-adjusted + movi icon_objs,a9,L ;pt. at 1st icon in array +adicon_1 + move *a9+,a8,L ;ptr. to icon + + movi SCRB_P,a0,L + move @icon_cursor_pos,a2 + cmp a14,a2 ;is this icon to-be hi-lited ? + jrne npal_1 ;br=no, normal palette + movi CREDBAL_P,a0,L +npal_1 + calla pal_getf + move a0,*a8(OPAL) + + inc a14 + cmpi NUM_ICONS,a14 + jrls adicon_1 + jruc redj_1 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_dribbing_ball + + movi STVDRB01,a2,L + movi [327,0],a0 ;X coor. + movi [170,0],a1 ;Y coor. + movi 9,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,@plyr_dribble_obj,L + + clr a0 + move a0,@plyr_drib_cnt +pdb_1 + move @plyr_drib_cnt,a0 + sll 5,a0 ;compute offset into table + addi player_dribble_table,a0 ;add addr. of table start + move *a0,a0,L ;get img. pointer +; +; Change frame of player dribbling ball +; + move @plyr_dribble_obj,a8,L + +; move a0,*a8(OIMG),L +; move *a0(0),*a8(OSIZE),L +; move *a0(ISAG),*a8(OSAG),L +;;;; move *a0(IANIOFF),*a8(OXANI),L ;update animation point + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + + SLEEPK 4 + + move @plyr_drib_cnt,a0 + inc a0 + cmpi (player_dribble_table_end-player_dribble_table)/32,a0 + jrlo pdb_2 + clr a0 +pdb_2 move a0,@plyr_drib_cnt + jruc pdb_1 + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE player section +;----------------------------------------------------------------------------- +timedown_create_player_timer + + movi BigLED_9,a2,L + movi [345,0],a0 ;X coor. + movi [4,0],a1 ;Y coor. + movi 1600,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,@timer_img_ptr,L + + movi BigLED_0,a2,L + movi [370,0],a0 ;X coor. + movi [4,0],a1 ;Y coor. + movi 1600,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,@timer_img_ptr+20h,L + + movi 90,a14 + move a14,@timer + +cpt_1 SLEEP 60 + move @timer,a14 + dec a14 + move a14,@timer +; +; Seperate the TIMER into two digits +; + clr a0 ;1st digit init. value + move @timer,a14 + cmpi 10,a14 + jrlt div_dne ;timer < 10 sec. (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + + movi timer_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a14,L ;a14 = img. pointer of 2nd digit +; +; Change first digit of timer +; + move @timer_img_ptr,a8,L + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L +; +; Change second digit of timer +; + move @timer_img_ptr+20h,a8,L + move a14,*a8(OIMG),L + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L + + move @timer,a14 + jrnz cpt_1 + DIE + + +#***************************************************************************** +* This is the first action player must complete...in CREATE PLAYER +****************************************************************************** + SUBRP enter_create_plyr_initials + + move a10,*a13(PC_PLAYNUM) +#resart_cursor +; movk 1,a0 +; move *a13(PC_PLAYNUM),a1 +; sll a1,a0 + +; 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 player1_data,a1,L + + 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) + + movi 160,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC + movk 10h,a1 ;mask (bits to remove) + calla obj_delc + +; SLEEPK 1 +; move @force_selection,a0 +; jrnz #youre_out + +; 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 7,a3 ;z pos +;;;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMACAL|M_SCRNREL,a4 ;DMA flags +; 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 + + movi create_player_menus,a0,L + move a0,*a13(PC_MENUBASE),L + clr a0 ;menu number + move a0,*a13(PC_MENULEVEL) + calla create_menu +; calla create_heading + calla update_cursor + + SLEEPK 1 +#loop + movi 22,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 *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 2,a0 ;nbr. of menu levels + 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 15,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 + + movi player1_data,a0,L + 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_special_initials ;look for designer heads...etc + +; calla print_player_stats + +; 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 +; +;#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 NUM_TEAMS,a0 +; jreq #defeated_all +;; 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 + + clr a0 + move a0,@processing_icon ;not in ICON action routine + DIE + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR change_initials_and_pin_number + rets + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR pick_player_head + + movk 1,a0 + move a0,@processing_icon ;in ICON action routine + calla create_icon_instructions + calla create_dribbling_player_head + calla create_pick_plyr_heads ;create 5 visable heads + calla create_pick_plyr_heads_palettes ;create 5 visable palette objs + CREATE0 pick_plyr_head_cursor_control + rets + + + + .bss plyr_head_objs,32*5 ;5 visable heads + .bss plyr_head_pal_objs,32*5 ;5 visable flestone objs. + .bss plyr_dribble_head_obj,32 + .bss plyr_dribble_head_pal,32 + +plyr_head_table + .long Hrdaway5 + .long HarpMav5 +;last two first for wrap around + .long ewing5 + .long stock5 + .long shiek5 + .long rharp5 + .long kmalone5 + .long Person5 + .long Augmon5 + .long Benja5 + .long Barkley5 + .long Cole5 + .long Drex5 + .long Ellis5 + .long Elliot5 + .long Hrdaway5 + .long HarpMav5 +;repeat first two for wrap around + .long ewing5 + .long stock5 + + +plyr_fleshtone_table + .long pal9 + .long pal10 +;last two first for wrap around + .long pal1 + .long pal2 + .long pal3 + .long pal4 + .long pal5 + .long pal6 + .long pal7 + .long pal8 + .long pal9 + .long pal10 +;repeat first two for wrap around + .long pal1 + .long pal2 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_dribbling_player_head + + movi [150,0],a0 ;x val + movi [100,0],a1 ;y val + move ewing5,a2,L ;* head image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_plyr_heads + + movi plyr_head_objs,a9,L + movi plyr_head_table,a10,L ;addr. of begining of table + movk 5,a3 ;nbr. of heads to create + movi [165,0],a0 ;x val of first head +cpph_1 + PUSH a0,a3 + + movi [75,0],a1 ;y val + move *a10+,a2,L ;* head image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,*a9+,L + + PULL a0,a3 + addxyi 000A0000h,a0 ;add to X position (spacing) + dec a3 ;more heads ? + jrne cpph_1 ;br=yes + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_plyr_heads_palettes + movi plyr_head_pal_objs,a9,L + movi plyr_fleshtone_table,a10,L ;addr. of begining of table + movk 5,a3 ;nbr. of heads to create + movi [165,0],a0 ;x val of first head +cpphp_1 + PUSH a0,a3 + + movi [130,0],a1 ;y val + movi ,a2,L ;* head image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + move *a10+,b0,L ;get palette from table + calla BEGINOBJP2 + move a8,*a9+,L + + PULL a0,a3 + addxyi 000A0000h,a0 ;add to X position (spacing) + dec a3 ;more fleshtone objs. ? + jrne cpphp_1 ;br=yes + rets + +;----------------------------------------------------------------------------- +; This PROCESS controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- +pick_plyr_head_cursor_control + clr a0 + move a0,@head_cur_pos + move a0,@joy_pos +; +; Read joystick +; +pph_1 + SLEEPK 5 + + movk 3,a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @joy_pos,a14 + cmp a14,a0 + jreq pph_5 ;br=no auto repeat... + move a0,@joy_pos +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne pph_2 ;br=nope + move @head_cur_pos,a0 + dec a0 + jrnn pph_2a + movk 2,a0 ;reset cursor position (save & exit) +pph_2a move a0,@head_cur_pos + jruc pph_5 +; +; Down ? +; +pph_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pph_3 ;br=nope + move @head_cur_pos,a0 + inc a0 + cmpi 2,a0 ;nbr of fields + jrlo pph_3a + clr a0 ;reset cursor position +pph_3a move a0,@head_cur_pos + jruc pph_5 +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + move @head_cur_pos,a0 ;determine which field cursor is on + jrnz pph_3a ;br=not player head field + + jruc pph_5 + + +pph_3a cmpi 1,a0 ;fleshtone field ? + jrne pph_5 ;br=no...save & exit field (do nothin) + + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppg_5 + + move @head_cur_pos,a0 ;use as index into table + sll 6,a0 ;mult. by 64 (2 longs) + move @head_cur_pos,a1 + sll 5,a1 ;mult. by 32 (1 long) + add a1,a0 ;offset by 3 longs + addi attribute_cursor_table,a0,L + +; +; Read buttons (for exit) +; +pph_5 + movk 3,a0 + calla get_but_val_cur + + move @button_pos,a14 + cmp a14,a0 + jreq pph_1 ;br=no auto repeat... + move a0,@button_pos + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this icon action (return to icon control) +; +pph_6 clr a0 + move a0,@processing_icon ;in ICON action routine + + movi ICON_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_delc + DIE + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR adjust_player_attributes + + PUSH a11 + movk 1,a0 + move a0,@processing_icon ;in ICON action routine + + calla create_icon_instructions +; +; plot attribute name and bars from table +; + movi (attribute_setup_end-attribute_setup_table)/(32*6),a14 ;get count + movi attribute_setup_table,a9,L + movi attribute_bar_objs,a10,L ;array for BAR objects + movi attribute_name_objs,a11,L ;array for attrib. names objs. +nxatt_1 + PUSH a14 +;plot name of bar + move *a9+,a0,L ;x val. + move *a9+,a1,L ;y val. + move *a9+,a2,L ;* image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHARAC02P,b0 ;pal. to use for city imgs. + calla BEGINOBJP2 + move a8,*a11+,L + +;now plot bar + move *a9+,a0,L ;x val. + move *a9+,a1,L ;y val. + move *a9+,a2,L ;* image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + move a8,*a10+,L ;save obj. pointers + PULL a14 + dec a14 + jrne nxatt_1 ;br=more to plot + + CREATE0 attribute_cursor_control + PULL a11 + rets + +;----------------------------------------------------------------------------- +; Change/Update palettes on attribute NAME images +;----------------------------------------------------------------------------- + SUBR update_attribute_name_pals + + movi attribute_name_objs,a2,L ;pt. to begining of array + clr a4 +uanp_1 + move *a2+,a3,L ;get img. ptr. + movi CHARAC02P,a0,L ;default pallete + move @attrib_cur_pos,a1 + cmp a1,a4 ;hi-lite this image ? + jrne uanp_2 ;br=nope... + movi CITIESY_P,a0,L ;new pallette for hilited name +uanp_2 + calla pal_getf + move a0,*a3(OPAL) + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uanp_1 ;br=yes + rets + + +;----------------------------------------------------------------------------- +; This PROCESS controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- +attribute_cursor_control + clr a0 + move a0,@attrib_cur_pos + move a0,@joy_pos + calla update_attribute_name_pals +; +; Read joystick +; +acc_1 + SLEEPK 5 + + movk 3,a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @joy_pos,a14 + cmp a14,a0 + jreq acc_5 ;br=no auto repeat... + move a0,@joy_pos +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attribute_name_pals + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + inc a0 + cmpi NUM_ATTRIBS,a0 ;number of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attribute_name_pals + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 6,a0 ;mult. by 64 (2 longs) + move @attrib_cur_pos,a1 + sll 5,a1 ;mult. by 32 (1 long) + add a1,a0 ;offset by 3 longs + addi attribute_cursor_table,a0,L + + move *a0(40h),a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + addi 2,a2 + move a2,*a1,W + +;adjust total attribute points + move @total_points,a0 + subi 2,a0 + move a0,@total_points + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + + move @attrib_cur_pos,a0 ;use as index into table + sll 6,a0 ;mult. by 64 (2 longs) + move @attrib_cur_pos,a1 + sll 5,a1 ;mult. by 32 (1 long) + add a1,a0 ;offset by 3 longs + addi attribute_cursor_table,a0,L + + move *a0(40h),a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + subi 2,a2 + move a2,*a1,W + +;adjust total attribute points + move @total_points,a0 + addi 2,a0 + move a0,@total_points + +; +; Read buttons (for exit) +; +acc_5 + movk 3,a0 + calla get_but_val_cur + + move @button_pos,a14 + cmp a14,a0 + jreq acc_1 ;br=no auto repeat... + move a0,@button_pos + + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this icon action (return to icon control) +; +acc_6 clr a0 + move a0,@processing_icon ;in ICON action routine + + movi ICON_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_delc + DIE + + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR pick_uniform_color + rets + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR choose_players_nickname + rets + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR pick_personal_sound_call + rets + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR try_player_in_game + rets + +;----------------------------------------------------------------------------- +; action routine for ICON +;----------------------------------------------------------------------------- + SUBR save_and_exit + rets + + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited ICON +;----------------------------------------------------------------------------- + SUBR create_icon_instructions + + move @icon_cursor_pos,a9 + move a9,a0 + sll 7,a9 ;mult. by 128 + sll 6,a0 ;mult by 64 + add a0,a9 ; 196 (size of table line) + addi icon_instructions_table,a9,L ;index to instructions +; +; First instruction +; + move *a9+,a0,L ;x val. + move *a9+,a1,L ;y val. + move *a9+,a2,L ;* image + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +; +; Second instruction (if nesscary) +; + move *a9+,a0,L ;x val. + move *a9+,a1,L ;y val. + move *a9,a2,L ;* image + jrn cintr_1 ;br=-1 means no plot + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ICON_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 +cintr_1 + rets + + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains: +; +; 1) X,Y for 1st instruction img +; 2) X,Y for 2nd instruction img (-1 for img. ptr. if none) +; +icon_instructions_table + .long 130<<16,20<<16,instr01, 130<<16,33<<16,instr04 + .long 130<<16,20<<16,instr12, 130<<16,33<<16,instr13 + .long 130<<16,20<<16,instr05, 130<<16,33<<16,-1 + .long 130<<16,20<<16,instr06, 130<<16,33<<16,instr07 + .long 130<<16,20<<16,instr08, 130<<16,33<<16,-1 + .long 130<<16,20<<16,instr09, 130<<16,33<<16,-1 + .long 130<<16,20<<16,instr10, 130<<16,33<<16,-1 + .long 130<<16,20<<16,instr11, 130<<16,33<<16,-1 + + +; +; This table contains: +; +; 1) X,Y position of cursor +; 2) Value to update (when read a joystick LEFT or RIGHT) +; +attribute_cursor_table + .long 167<<16,30<<16,height_points + .long 167<<16,40<<16,weight_points + .long 167<<16,50<<16,speed_points + .long 167<<16,60<<16,power_points + .long 167<<16,70<<16,shoot_points + .long 167<<16,80<<16,dunks_points + .long 167<<16,90<<16,steal_points + .long 167<<16,100<<16,block_points +attribute_cursor_table_end + + +; +; This table contains the following info: +; +; 1) X pos. +; 2) Y pos. +; 3) ptr. to Attribute name img +; 4) X pos. +; 5) Y pos. +; 6) ptr. to Attribute bar img +; +attribute_setup_table + .long 145<<16,53<<16,height, 146<<16,64<<16,bar01 + .long 145<<16,78<<16,weight, 146<<16,89<<16,bar01 + .long 145<<16,103<<16,speed, 146<<16,114<<16,bar01 + .long 145<<16,128<<16,power, 146<<16,139<<16,bar01 + .long 145<<16,153<<16,shoot, 146<<16,164<<16,bar01 + .long 145<<16,178<<16,dunks, 146<<16,189<<16,bar01 + .long 145<<16,203<<16,steal, 146<<16,214<<16,bar01 + .long 145<<16,228<<16,block, 146<<16,239<<16,bar01 +attribute_setup_end + + + +; +; Routines to dispatch when ICON is selected +; +icon_routine_table + .long change_initials_and_pin_number + .long pick_player_head + .long adjust_player_attributes + .long pick_uniform_color + .long choose_players_nickname + .long pick_personal_sound_call + .long try_player_in_game + .long save_and_exit + + +; +; For player dribbing ball +; +player_dribble_table + .long STVDRB01 + .long STVDRB02 + .long STVDRB03 + .long STVDRB04 + .long STVDRB05 + .long STVDRB06 + .long STVDRB07 +player_dribble_table_end + + +;for entering initials during CREATE PLAYER +create_player_menus + .long cpm1 + .long cpm2 +cpm1 + .word 0 ;palette + .word 142,15 ;x,y start + .long name_table ;table +cpm2 + .word 0 ;palette + .word 142,54 ;x,y start + .long pin_nbr_table + + +timer_table + .long BigLED_0 + .long BigLED_1 + .long BigLED_2 + .long BigLED_3 + .long BigLED_4 + .long BigLED_5 + .long BigLED_6 + .long BigLED_7 + .long BigLED_8 + .long BigLED_9 + + +; +; This table contains the following info: +; +; 1. X position +; 2. Y position +; 3. pointer to icon img +; +icon_setup_table + .long 8<<16,13<<16,SCRB_IN + .long 62<<16,13<<16,SCRB_HD + .long 8<<16,73<<16,SCRB_AT + .long 62<<16,73<<16,SCRB_JR + .long 8<<16,132<<16,SCRB_NM + .long 62<<16,132<<16,SCRB_SC + .long 8<<16,193<<16,SCRB_ME + .long 62<<16,193<<16,SCRB_EX +icon_setup_table_end + + +create_strs_setup + RJR_STR sgmd8_ascii,10,0,199,5,PURPLE,0 + +create_strs + .string "create player",0 + .even + + +create_player_mod + .long WOODFLBMOD ;team selection map + .word 0,512 + .long 0 + + + + + + +****************************************************************************** + + .end + \ No newline at end of file diff --git a/SRC/ARC/NDSP1.ASM b/SRC/ARC/NDSP1.ASM new file mode 100644 index 0000000..2a9e13a --- /dev/null +++ b/SRC/ARC/NDSP1.ASM @@ -0,0 +1,3430 @@ +************************************************************************** +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.3" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include shawn.hdr + .include court.tbl + .include imgtbl.glo + .include GAME.EQU + + + .if DEBUG + .ref SLDEBUG + .endif + + + + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + .def scale74f_t,scale59_t,scale61f_t,scale63f_t + .def scale57_t,scale58_t,scale60_t + .def scale61_t,scale61t_t,scale62_t + .def scale62t_t,scale63_t,scale64_t,scale64t_t + .def scale65_t,scale65t_t,scale65f_t + .def scale66_t,scale66t_t,scale66f_t + .def scale67_t,scale67t_t,scale67f_t + .def scale68_t,scale68t_t,scale68f_t + .def scale69_t,scale69t_t,scale69f_t + .def scale610_t,scale610t_t,scale610f_t + .def scale611_t,scale611t_t,scale611f_t + .def scale70_t,scale70t_t,scale70f_t + .def scale71_t,scale72_t,scale72f_t + .def scale74_t,scale76et_t + + +;global variables + + .sect "OFIXED" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + + +; moved to game.equ +;;GND_Y .equ 116-40 +;;GNDI_Y .equ 116 +;;GNDI_W .equ 1277 +;;GNDI_H .equ 138 +;;GND_H .equ GNDI_H+40 +;;GZBASE .equ 894 + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + .bss DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + + .text + + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + addi >c0,b12 ;DMAREGS (End of DMA) + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + move *a0(OYVAL),a10,L ;Get int Y + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl move b7,a5 ;A5=Y:X scale + + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPV,a12 + jrz #nofv2 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 +#nofv2 +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 +#nofh2 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrle #strtdma ;DMA not going? + +#nxt +dma_objlst + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + + +#3d ;>3D + move *a0(OXVAL),a7,L ;X + move b4,a2 + subxy a2,a10 ;-World Y + move b6,a2 + sub a2,a7 ;-World center X + move *a0(OXANI),a5,L ;X anipt + add a5,a7 + sra 16-5,a7 ;/2048 (leave 5 bits frac) + + move *a0(OZPOS),a2 ;894 to 1379 (Z range 486) + move *a0(OMISC),a3 ;Z offset + add a3,a2 + move a2,a6 + + addi (819-GZBASE),a2 ;768 to ? + mpys a2,a7 + move a7,a3 + sra 2,a3 ;/4 + sub a3,a7 + sra 1,a3 ;/2 + sub a3,a7 + sra 14,a7 ;/16k + addi 200,a7 + sra 16,a5 + sub a5,a7 ;-X anipt + movx a7,a10 + + subi GZBASE,a6 ;-Base + jrge #zok + clr a6 +#zok move a6,a2 + move a6,a3 + sra 1,a6 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a6 ;=Z/2.667 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 ;+Z + + btst B_NOSCALE,a1 + jrnz #noscl ;Scale off? + + btst B_SHAD,a1 + jrz #nots + srl 1,a10 + move @PCNT,a5 ;Set X to even or odd + srl 1,a5 + addc a10,a10 + jruc #noscl + +#nots + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 + addxy a9,a3 + cmpxy a14,a3 + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;/16 + sll 6,a2 ;*64 + + move *a0(ODATA_p),a5,L ;*Scale_t + add a2,a5 + move *a5,a5,L ;A5=Y:X scale + + jruc #chkhflip ;Visable + + + +#strtdma ;>Start DMA if necessary + dint + + setf 1,0,0 ;Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint + .if DEBUG + addk 1,b3 ;Restart cnt + .endif + jruc #nxt + + + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*5/4,X + .eval Y+YA*5/4,Y + .endloop + .endm + + + ;>Generate scale tables +scale57_t +scale58_t +scale59_t + SCLT 594,594,37,37 ;5'8 (68) + SCLT 507,507,31,31 + SCLT 360,360,20,20 +scale60_t +scale61_t +scale61t_t + SCLT 629,629,39,39 ;6'0 (72) + SCLT 537,537,34,34 + SCLT 360,360,20,20 +scale61f_t +scale62_t +scale63f_t +scale63_t + SCLT 646,646,41,41 ;6'2 (74) + SCLT 552,552,35,35 + SCLT 360,360,20,20 +scale62t_t + SCLT 607,646,39,41 ;6'2 (74) thin (.94) + SCLT 519,552,33,35 + SCLT 360,360,20,20 +scale64_t +scale65_t + SCLT 664,664,42,42 ;6'4 (76) + SCLT 567,567,35,35 + SCLT 360,360,20,20 +scale64t_t +scale65t_t + SCLT 624,664,39,42 ;6'4 (76) thin (.94) + SCLT 533,567,33,35 + SCLT 360,360,20,20 +scale65f_t + SCLT 730,664,46,42 ;6'4 (76) fat (1.10) + SCLT 624,567,39,35 + SCLT 360,360,20,20 +scale66_t +scale67_t + SCLT 681,681,43,43 ;6'6 (78) + SCLT 582,582,36,36 + SCLT 360,360,20,20 +scale66t_t +scale67t_t + SCLT 640,681,40,43 ;6'6 (78) thin (.94) + SCLT 547,582,34,36 + SCLT 360,360,20,20 +scale66f_t +scale67f_t + SCLT 749,681,47,43 ;6'6 (78) fat (1.10) + SCLT 640,582,40,36 + SCLT 360,360,20,20 +scale68_t +scale69_t + SCLT 698,698,44,44 ;6'8 (80) + SCLT 597,597,37,37 + SCLT 360,360,20,20 +scale68t_t +scale69t_t + SCLT 656,698,41,44 ;6'8 (80) thin (.94) + SCLT 561,597,35,37 + SCLT 360,360,20,20 +scale68f_t +scale69f_t + SCLT 768,698,48,44 ;6'8 (80) fat (1.10) + SCLT 657,597,41,37 + SCLT 360,360,20,20 +scale610_t +scale611_t + SCLT 715,715,45,45 ;6'10 (82) + SCLT 611,611,38,38 + SCLT 360,360,20,20 +scale610t_t +scale611t_t + SCLT 672,715,42,45 ;6'10 (82) thin (.94) + SCLT 574,611,36,38 + SCLT 360,360,20,20 +scale610f_t +scale611f_t + SCLT 801,715,50,45 ;6'10 (82) fat (1.12) + SCLT 684,611,43,38 + SCLT 360,360,20,20 +scale70_t + SCLT 733,733,46,46 ;7'0 (84) + SCLT 627,627,39,39 + SCLT 360,360,20,20 +scale70t_t + SCLT 689,733,43,46 ;7'0 (84) thin (.94) + SCLT 589,627,37,39 + SCLT 360,360,20,20 +scale70f_t + SCLT 806,733,51,46 ;7'0 (84) fat (1.10) + SCLT 690,627,43,39 + SCLT 360,360,20,20 +scale71_t +scale72_t + SCLT 751,751,47,47 ;7'2 (86) + SCLT 642,642,40,40 + SCLT 360,360,20,20 +scale72f_t + SCLT 841,751,53,47 ;7'2 (86) fat (1.12) + SCLT 719,642,45,40 + SCLT 360,360,20,20 +scale74_t +scale74f_t + SCLT 768,768,49,49 ;7'4 (88) + SCLT 657,657,41,41 + SCLT 360,360,20,20 +scale76et_t + SCLT 628,786,40,50 ;7'6 (90) extra thin (.80) + SCLT 538,672,34,42 + SCLT 360,360,20,20 + + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi DMAREGS,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 + move @_3dstat,a0 + jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +#80 + + move @dtype,a1 + jrnz #3dtype + + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff + + +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x + + +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst + + + +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int + +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + + move @HALT,a0 + jrnz #novel ;Skip vel update? + movi OBJLST,a0 + callr vel_add +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + + rets + + +;Null dma data +nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Velocity add loop +* A0=*Obj list +* Trashes A0-A7 + +#lp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + +vel_add move *a0,a0,L + jrnz #lp ;!End? + rets + + + +#******************************* +* Fill DMAQ with ground data for each line +* A4=*DMAQ next free spot +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B11=*DMACTRL +* Trashes A0-A3,A5-A12,B0-B1 +* >A4=*DMAQ next free spot + + SUBRP gnd_dodma + + PUSH a13,a14 + + +; movb @IROM,a0 +; cmpi >3f,a0 +; jreq nofix ;Already fixed? +; +; dint +; +; move @crt1+ISAG,a1,L +; move a1,a10 ;A10=*Dest +; move a1,a2 +; addi >1800000,a2 +; move a2,a6 +; movi GNDI_W*GNDI_H/4,a7 +;copy move *a1+,*a2+,L +; dsj a7,copy +; +; +; move @crt2+ISAG,a7,L +; addi >1800000,a7 +; move @crt2f+ISAG,a8,L +; addi >1800000,a8 +; move @crt1f+ISAG,a9,L +; addi >1800000,a9 +; move @crt1+ISIZEY,a2 +; +; setf 6,1,1 ;Field1 +; +;copylp move @crt1,a1 ;ISIZEX +;copy2 move *a6+,*a10+,1 +; dsj a1,copy2 +; +; move @crt2,a1 ;ISIZEX +;copy3 move *a7+,*a10+,1 +; dsj a1,copy3 +; +; move @crt2f,a1 ;ISIZEX +;copy4 move *a8+,*a10+,1 +; dsj a1,copy4 +; +; move @crt1f,a1 ;ISIZEX +;copy5 move *a9+,*a10+,1 +; dsj a1,copy5 +; +; dsj a2,copylp +; +; setf 32,0,1 ;Field1 +; +; +;; movi IROM+(GNDI_W/2-100)*8,a6 +;; movi IROM+GNDI_W/2*8,a7 ;A7=*Middle of img line +;; movi IROM+(GNDI_W/2+100)*8,a8 +;; movk 1,a0 +;; movi GNDI_H,a1 +;;fill2 movb a0,*a6 +;; movb a0,*a7 +;; movb a0,*a8 +;; addi GNDI_W*6,a6 ;Next line +;; addi GNDI_W*6,a7 ;Next line +;; addi GNDI_W*6,a8 ;Next line +;; btst 0,a1 +;; jrnz fill2b +;; subk 8,a6 +;; addk 8,a8 +;;fill2b dsj a1,fill2 +; +; +; movi >3f,a0 +; move a0,@IROM +; +; eint +;nofix + + + + move @gndx,a14,L ;16:16 + + + movi gndpos_t,a0 ;>Calc gnd x positions + movi GND_H,a7 + move a14,a1 + movi >120,a2 + divs a2,a1 +#glp move a14,a8 + sra 16,a8 +; sra 15,a8 +; addk 1,a8 ;Round off +; sra 1,a8 + move a8,*a0+ + add a1,a14 + dsj a7,#glp + + + move @crt_colors,a0,L + calla pal_getf + move a0,a8 ;A8=Const:palette + + movi gndpos_t+40*16,a0 ;Start on 1st court pos + movi GNDI_H,a7 + move b4,a1 + sra 16,a1 + add a1,a7 + jrle #x ;No lines visable? + movi [1,400],a9 ;A9=VSIZE:HSIZE + move b2,a10 + sll 16,a1 + subxy a1,a10 + addi [GNDI_Y,0],a10 ;A10=Dest Y:X + + movi >1000100,a5 ;A5=Y:X scale +;djt movi COURT-039bbd00h+(GNDI_W/2-200)*8,a6 ;A6=*Middle of img line + movi COURT-02000000h+(GNDI_W/2-200)*8,a6 ;A6=*Middle of img line +; movi COURT+(GNDI_W/2-200)*6,a6 ;A6=*Middle of img line + movi (>8000|DMAWNZ)<<16,a12 ;A12=OFFSET:CONTROL +; movi (>e000|DMAWNZ)<<16,a12 ;A12=OFFSET:CONTROL + + + movi GNDI_W*8,a2 ;Const: Next line +; movi GNDI_W*6,a2 ;Const: Next line + movi [1,0],a3 ;Const: Next Y + +#lp move *a0+,a11 + sll 3,a11 ;*8 +; sll 1,a11 ;>*6 +; move a11,a1 +; sll 1,a11 +; add a1,a11 + add a6,a11 ;A11=*Image data + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrle #strtdma ;DMA not going? + +#next + add a2,a6 ;SAG+1 line + add a3,a10 ;Next Y + +; addi >1,a5 ;Scale DEBUG + + dsj a7,#lp + + +#x PULL a13,a14 + rets + + + .align +#strtdma ;>Start DMA if necessary + dint + setf 1,0,0 ;Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int +#dmaok eint + .if DEBUG + addk 1,b3 ;DEBUG cnt + .endif + jruc #next + + + + .if 0 + +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + + .endif + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + +QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg SCRATCH+8*128*1024,STARBUF +NSTARS .equ 900 +STARSIZE .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSIZE,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSIZE,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSIZE),L + jruc #nxt +#plot + move a10,*a8(-STARSIZE),L + move a9,*a8(-STARSIZE+32),L + move a6,*a8(-STARSIZE+32*2),L + move a5,*a8(-STARSIZE+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x +#cmp move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi IROM,a6 + jrge #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +#******************************* +* Scale screen out (JSRP) + +;DJT .asg SCRATCH+8*256*1024,SCRNBUF + .asg SCRATCH+8*192*1024,SCRNBUF + .asg SCRNBUF+8*128*1024,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 +;;JBJ start + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + move a0,@SYSCTRL +;JBJ end + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + +;JBJ start + move @SYSCOPY,a0 + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + move a0,@SYSCTRL +;JBJ end + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + + + + .end + diff --git a/SRC/ARC/NEWSELCT.ASM b/SRC/ARC/NEWSELCT.ASM new file mode 100644 index 0000000..d19ddbf --- /dev/null +++ b/SRC/ARC/NEWSELCT.ASM @@ -0,0 +1,617 @@ +**************************************************************** +* +* Software: Jeff Johnson +* Initiated: 4-26-95 +* +* Modified: +* +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/26/95 +**************************************************************** + .file "newselct.asm" + .title "select screen" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "mac2.asm" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "shawn.hdr" + .include "link.equ" + .include "imgtbl2.glo" + .include "plyrseq.tbl" + .include "imgtblm.glo" + .include "mugshot.tbl" + + + .def team1ptr,team2ptr + .def cityY,cityY2 + .def curjoypos1,curjoypos2 + .def lastjoypos1,lastjoypos2 + + .ref IRQSKYE,DISPLAYON,WIPEOUT + .ref display_blank,obj_del1c + .ref dpageflip + .ref BEGINOBJ2 + .ref GAMSTATE + .ref PCNT,HALT + .ref CRED_P + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_stick_val_cur + .ref challenger2,our_names + .ref challenger + .ref team1,team2 + .ref team1_control,team2_control + .ref defeated,in_team_select + .ref force_selection,exit_status + .ref del_offscreen_bobjs + .ref create_player_names,update_player_names + .ref plaque_xs + .ref fullgame_purchased + .ref timeout,timeout2,timeout3 + .ref update_player_heads + .ref delete_text + .ref suckup_credits + .ref check_suckup + + .bss team1ptr,32 ;ptrs. to 'select_screen_info_table' + .bss team2ptr,32 + .bss cityY,32 + .bss cityY2,32 + .bss tm1cityObjPtrs,32*7 ;team 1 (left side) city img. ptrs + .bss tm2cityObjPtrs,32*7 ;team 2 (right side) city img. ptrs + .bss curjoypos1,16 + .bss lastjoypos1,16 + .bss curjoypos2,16 + .bss lastjoypos2,16 + .bss joyholdcnt1,32 + .bss joyholdcnt2,32 + + .text + .even + +#**************************************************************** +JOY_NONE equ 0 +JOY_UP equ 1 +JOY_DOWN equ 2 +JOY_LEFT equ 4 +JOY_RIGHT equ 8 +JOY_UP_LEFT equ 5 +JOY_UP_RIGHT equ 9 +JOY_DOWN_RIGHT equ 0Ah +JOY_DOWN_LEFT equ 6 +#**************************************************************** + +#**************************************************************** +* New team selection +* + SUBR new_team_select_screen + +; clr a0 +; move a0,@IRQSKYE ;background color +; calla display_blank +; calla WIPEOUT +; movk 1,a0 +; move a0,@dpageflip +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank + + movk 1,a0 + move a0,@in_team_select + clr a0 + move a0,@exit_status + move a0,@force_selection + move a0,@HALT + + calla del_offscreen_bobjs + calla create_player_names + calla update_player_names + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + CREATE TEAM1_SEL_PID,display_team_1_city_names + CREATE TEAM2_SEL_PID,display_team_2_city_names + +;;;; CREATE0 fullgame_purchased + + SLEEPK 1 + + +;;;; move @team1_control,a0 ;player selecting team 1 +;;;; move @team2_control,a0 ;player selecting team 1 + + movk 15,a0 + move a0,@team1 + movk 24,a0 + move a0,@team2 + + +; +; HUH ? +; + 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_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_player_names + 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_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + + RETP + +;----------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------- +display_team_1_city_names + movi city_img_table_start,a0,L + move a0,@team1ptr,L ;init ptr. + clr a0 + move a0,@curjoypos1 ;no joystick data..yet + move a0,@joyholdcnt1 +; +; First delete previous city names... +; +#dsp_t_1 + movi TEAM1CITY,a0 ;object class to delete + calla obj_del1c +; +; Reset (init) ptr to city name img ptr array +; + movi tm1cityObjPtrs,a9,L ;a9 = start of array +; +; Plot city names +; + movk 7,a12 ;nbr. team names to plot + movi [8,0],a1 ;starting Y val + move a1,@cityY,L ;save Y value + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM1CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move @team1ptr,a11,L ;a11=ptr. to city img table +#dt1cn + move *a11,a2,L ;ptr. to city name image + addi TABLE_LINE_SIZE,a11 ;ptr. next city img. (skip logo) + move @cityY,a1,L ;get Y value + addi >c0000,a1 ;add 12 decimal (spacing) + move a1,@cityY,L ;save Y value + movi [15,0],a0 ;x val + movi CITIESP,b0 ;pal. to use for city imgs. + calla BEGINOBJP2 + move a8,*a9+,L ;save obj. ptr in array + dec a12 ;more name img. to plot ? + jrne #dt1cn ;br=yes +; +; Now plot the team logo (based on hi-lighted team city) +; + move @team1ptr,a1,L ;pt. curren pos in img tbl + addi HILITED_CITY_LOGO_OFFST,a1 ;pt. to hilighted city logo + move *a1,a2,L ;4th obj. is hi-lighted + movi [130,0],a0 ;x val + movi [100,0],a1 ;starting Y val + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM1CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ +; +; Now read joystick (up,down,left or right) +; +#rj_1 + move @curjoypos1,a0 ;save current joystick pos. + move a0,@lastjoypos1 + + sleep 2 + movk 1,a0 ;input:player number (0-3) + calla get_stick_val_cur ;ret. a0=joy switch value + + move a0,@curjoypos1 ;save current joystick pos. + + cmpi JOY_UP,a0 ;joystick up ? + jreq #joy_up1 ;br=yes + cmpi JOY_DOWN,a0 ;joystick down ? + jreq #joy_dwn1 ;br=yes + cmpi JOY_LEFT,a0 ;joystick left ? + jreq #joy_left1 ;br=yes + cmpi JOY_RIGHT,a0 ;joystick right ? + jreq #joy_right1 ;br=yes + jruc #rj_1 ;br=wait... +; +; Joystick up (team 1) +; +#joy_up1 + move @lastjoypos1,a0 ;get last joystick pos. + move @curjoypos1,a1 ;get current joystick pos. + cmp a0,a1 ;same ? + jreq #msu_1 ;br=yes, maybe start scrolling + clr a0 + move a0,@joyholdcnt1 ;reset hold count + jruc #msu_1a ;update city imgs. +; +; start scrolling ? +; +#msu_1 + move @joyholdcnt1,a0 ;get hold count + inc a0 ;inc count to start repeat + move a0,@joyholdcnt1 ;save it + cmpi DELAY_B4_SCROLL,a0 ;held for 40 ticks ? + jrlo #dsp_t_1 ;br=nope...dont't move + btst 0,a0 ;every 2 wake up...move + jrnz #dsp_t_1 ;dont move...yet +#msu_1a + move @team1ptr,a11,L + subi TABLE_LINE_SIZE,a11 ;pt. to prev. team name (skip logo) + cmpi city_img_table_start,a11 ;about to wrap around ? + jrhs #adrok1 ;br=ptr still valid (in range) upwards + movi city_img_tbl_wrap,a11,L +#adrok1 move a11,@team1ptr,L + jruc #dsp_t_1 ;redraw city names + + +; +; Joystick down +; +#joy_dwn1 + move @lastjoypos1,a0 ;get last joystick pos. + move @curjoypos1,a1 ;get current joystick pos. + cmp a0,a1 ;same ? + jreq #msd_1 ;br=yes, maybe start scrolling + clr a0 + move a0,@joyholdcnt1 ;reset hold count + jruc #msd_1a ;update city imgs. +; +; start scrolling ? +; +#msd_1 + move @joyholdcnt1,a0 ;get hold count + inc a0 ;inc count to start repeat + move a0,@joyholdcnt1 ;save it + cmpi DELAY_B4_SCROLL,a0 ;held for 20 ticks ? + jrlo #dsp_t_1 ;br=nope...dont't move + btst 0,a0 ;every 2 wake up...move + jrnz #dsp_t_1 ;dont move...yet +#msd_1a + move @team1ptr,a11,L + addi TABLE_LINE_SIZE,a11 ;pt. to next team name (skip logo) + cmpi city_img_tbl_wrap,a11 ;about to wrap around ? + jrls #adrok2 ;br=ptr still valid (in range) dwnward + movi city_img_table_start,a11,L +#adrok2 move a11,@team1ptr,L + jruc #dsp_t_1 ;redraw city names + +#joy_left1 +#joy_right1 + jruc #dsp_t_1 ;redraw city names + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- +display_team_2_city_names + movi city_img_table_start,a0,L + move a0,@team2ptr,L ;init ptr. + clr a0 + move a0,@curjoypos2 ;no joystick data..yet + move a0,@joyholdcnt2 +; +; First delete previous city names... +; +#dsp_t_2 + movi TEAM2CITY,a0 ;object class to delete + calla obj_del1c +; +; Reset (init) ptr to city name img ptr array +; + movi tm2cityObjPtrs,a9,L ;a9 = start of array +; +; Plot city names +; + movk 7,a12 ;nbr. team names to plot + movi [8,0],a1 ;starting Y val + move a1,@cityY2,L ;save Y value + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM2CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move @team2ptr,a11,L ;a11=ptr. to city img table +#dt2cn + move *a11,a2,L ;ptr. to city name image + addi TABLE_LINE_SIZE,a11 ;ptr. next city img. (skip logo) + move @cityY2,a1,L ;get Y value + addi >c0000,a1 ;add 12 decimal (spacing) + move a1,@cityY2,L ;save Y value + movi [300,0],a0 ;x val + movi CITIESP,b0 ;pal. to use for city imgs. + calla BEGINOBJP2 + move a8,*a9+,L ;save obj. ptr in array + dec a12 ;more name img. to plot ? + jrne #dt2cn ;br=yes +; +; Now plot the team logo (based on hi-lighted team city) +; + move @team2ptr,a1,L ;pt. curren pos in img tbl + addi HILITED_CITY_LOGO_OFFST,a1 ;pt. to hilighted city logo + move *a1,a2,L ;4th obj. is hi-lighted + movi [250,0],a0 ;x val + movi [100,0],a1 ;starting Y val + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM2CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ +; +; Plot (3) heads (middle head first, then left and right) +; + movi RAD_MK2,a2 + movi [260,0],a0 ;x val + movi [205,0],a1 ;starting Y val + movi 19000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM2CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + movi SCO_MK2,a2 + movi [200,0],a0 ;x val + movi [200,0],a1 ;starting Y val + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM2CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + movi REP_MK2,a2 + movi [320,0],a0 ;x val + movi [200,0],a1 ;starting Y val + movi 19999,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM2CITY,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +; +; Now read joystick (up,down,left or right) +; +#rj_2 + move @curjoypos2,a0 ;save current joystick pos. + move a0,@lastjoypos2 + + sleep 2 + movk 3,a0 ;input:player number (0-3) + calla get_stick_val_cur ;ret. a0=joy switch value + + move a0,@curjoypos2 ;save current joystick pos. + + cmpi JOY_UP,a0 ;joystick up ? + jreq #joy_up2 ;br=yes + cmpi JOY_DOWN,a0 ;joystick down ? + jreq #joy_dwn2 ;br=yes + cmpi JOY_LEFT,a0 ;joystick right ? + jreq #joy_left2 ;br=yes + cmpi JOY_RIGHT,a0 ;joystick left ? + jreq #joy_right2 ;br=yes + jruc #rj_2 ;br=wait... + +; +; Joystick up (team 2) +; +#joy_up2 + move @lastjoypos2,a0 ;get last joystick pos. + move @curjoypos2,a1 ;get current joystick pos. + cmp a0,a1 ;same ? + jreq #msu_2 ;br=yes, maybe start scrolling + clr a0 + move a0,@joyholdcnt2 ;reset hold count + jruc #msu_2a ;update city imgs. +; +; start scrolling ? +; +#msu_2 + move @joyholdcnt2,a0 ;get hold count + inc a0 ;inc count to start repeat + move a0,@joyholdcnt2 ;save it + cmpi DELAY_B4_SCROLL,a0 ;held for 40 ticks ? + jrlo #dsp_t_2 ;br=nope...dont't move + btst 0,a0 ;every 2 wake up...move + jrnz #dsp_t_2 ;dont move...yet +#msu_2a + move @team2ptr,a11,L + subi TABLE_LINE_SIZE,a11 ;pt. to prev. team name (skip logo) + cmpi city_img_table_start,a11 ;about to wrap around ? + jrhs #adrok3 ;br=ptr still valid (in range) upwards + movi city_img_tbl_wrap,a11,L +#adrok3 move a11,@team2ptr,L + jruc #dsp_t_2 + + + +; +; Joystick down +; +#joy_dwn2 + move @lastjoypos2,a0 ;get last joystick pos. + move @curjoypos2,a1 ;get current joystick pos. + cmp a0,a1 ;same ? + jreq #msd_2 ;br=yes, maybe start scrolling + clr a0 + move a0,@joyholdcnt2 ;reset hold count + jruc #msd_2a ;update city imgs. +; +; start scrolling ? +; +#msd_2 + move @joyholdcnt2,a0 ;get hold count + inc a0 ;inc count to start repeat + move a0,@joyholdcnt2 ;save it + cmpi DELAY_B4_SCROLL,a0 ;held for 20 ticks ? + jrlo #dsp_t_2 ;br=nope...dont't move + btst 0,a0 ;every 2 wake up...move + jrnz #dsp_t_2 ;dont move...yet +#msd_2a + move @team2ptr,a11,L + addi TABLE_LINE_SIZE,a11 ;pt. to next team name (skip logo) + cmpi city_img_tbl_wrap,a11 ;about to wrap around ? + jrls #adrok4 ;br=ptr still valid (in range) dwnward + movi city_img_table_start,a11,L +#adrok4 move a11,@team2ptr,L + jruc #dsp_t_2 ;redraw city names + +#joy_left2 +#joy_right2 + jruc #dsp_t_2 ;redraw city names + + +DELAY_B4_SCROLL equ 15 +TABLE_LINE_SIZE equ 32+32 ;2 longs +HILITED_CITY_NAME_OFFST equ TABLE_LINE_SIZE*3 ;7 cites shown +HILITED_CITY_LOGO_OFFST equ (TABLE_LINE_SIZE*3)+32 ; 4th is hi-lighted + +;----------------------------------------------------------------------------- +; This TABLE has the following format: +; ptr. to city name img, ptr. team logo,X,Y of logo, ptr. to team heads +; pointer to head names, and attributes. +;----------------------------------------------------------------------------- +city_img_table_start + .long CIT_UTA,T_JAZZ ;for wrap around case + .long CIT_VAN,T_JAZZ + .long CIT_WAS,T_BULTS + .long CIT_ATL,T_HAWKS + .long CIT_BOS,T_CELTS + .long CIT_CHA,T_HORS + .long CIT_CHI,T_BULLS + .long CIT_CLE,T_CAVS + .long CIT_DAL,T_MAVS + .long CIT_DEN,T_NUGS + .long CIT_DET,T_PISS + .long CIT_GLD,T_WARS + .long CIT_HOU,T_ROCKS + .long CIT_IND,T_PACER + .long CIT_LAC,T_CLIPS + .long CIT_LAL,T_LAKS + .long CIT_LOS,T_ROCKS + .long CIT_MIA,T_HEAT + .long CIT_MIL,T_BUCKS + .long CIT_MIN,T_TWOLV + .long CIT_NJR,T_NETS + .long CIT_NYK,T_KNIKS + .long CIT_ORL,T_MAGIC + .long CIT_PHI,T_76RS + .long CIT_PHO,T_SUNS + .long CIT_POR,T_BLAZ + .long CIT_SAC,T_KINGS + .long CIT_SAN,T_SPURS + .long CIT_SEA,T_SONICS +city_img_tbl_wrap + .long CIT_TOR,T_CAVS + .long CIT_UTA,T_JAZZ + .long CIT_VAN,T_LAKS + .long CIT_WAS,T_BULTS + .long CIT_ATL,T_HAWKS ;for wrap-around + .long CIT_BOS,T_CELTS + .long CIT_CHA,T_HORS +city_img_table_end + + + + .even + + .end + \ No newline at end of file diff --git a/SRC/ARC/RACKUP.ASM b/SRC/ARC/RACKUP.ASM new file mode 100644 index 0000000..f581efe --- /dev/null +++ b/SRC/ARC/RACKUP.ASM @@ -0,0 +1,2248 @@ +************************************************************** +* +* Software: Shawn Liptak +* Initiated: June 6,1991 (Total Carnage) +* +* Modified: Shawn Liptak, 2/11/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 7/23/92 18:42 +************************************************************** + .file "rackup.asm" + .title "total carnage game program" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "audit.equ" + .include "shawn.hdr" ;My macros + + + +;sound headers used + + .ref GLSEXP,NOWAY,SETDWN,TUNE3,TUNE2,STATSND + +CVSDOFF .word >F0F0,10,>807D,0 ;SPEECH OFF +TUNE4 .word >f3fe,10,>8007,0 ;Rackup tune +racksup .word >f280,1,>80b3,0 ;Rackup bonus sweep up +rackoff .word >fa81,1,>80a7,0 ;Rackup bonus off +kilfgnd .word >f000,1,>807f,0 ;Kill foregnd snds +rackp1p .word >fa80,1,>80b4,0 ;Rackup P1 gets 1000 pts +rackp2p .word >fa80,1,>80b5,0 ;^ P2 +stats1 .word >f280,1,>8100,0 ;Rackup stat line snd +stats2 .word >f280,1,>8101,0 ;^ +stats3 .word >f280,1,>8102,0 ;^ +stats4 .word >f280,1,>8103,0 ;^ +stats5 .word >f280,1,>8104,0 ;^ +stats6 .word >f280,1,>8105,0 ;^ +stats7 .word >f280,1,>8106,0 ;^ +stats8 .word >f280,1,>8107,0 ;^ +stats9 .word >f280,1,>8108,0 ;^ +stats10 .word >f280,1,>8109,0 ;^ +stats11 .word >f280,1,>810a,0 ;^ +stats12 .word >f280,1,>810b,0 ;^ +txtssnd .word >f3f7,8,>80b1,0 ;Text shrink +shout .word >f1a0,60,>80fe,0 ;Rackup victory shout +rackgun .word >fca0,4,>8030,0 ;Player shoots gun +gigle1 .word >f9a0,60,>80f3,0 ;Rackup winner laughs +ahkb1 .word >f9a0,10,>80eb,0 ;Akhboob speech +ahkb2 .word >f9a0,10,>80ec,0 ;^ +ahkb3 .word >f9a0,10,>80ed,0 ;^ +ahkbsta .word >f9a0,10,>80ee,0 ;^ start angry +ahkbang .word >f9a0,10,>80ef,0 ;^ angry +DOLLAR .WORD >F9F7,>50,>814E,0 ;BUY 4 DOLLAR +yousuck .word >f9a0,10,>80c5,0 ;You suck at this game! +fisthit .word >fca0,10,>803c,0 ;Ahkboob hits desk +ermtune .word >f3f0,10,>8004,0 ;Electrocution tune +fshock .word >f540,20,>80bb,0 ;Electric chair shocks +fburn .word >f048,30,>80d7,0 ;^ burn +fpain1 .word >f965,20,>80f6,0 ;Player in pain +fpain2 .word >f160,20,>80f7,0 ;^ +fpain3 .word >f160,20,>80fd,0 ;^ +fskullb .word >f460,20,>8040,0 ;Skull bounce +fryexp .word >fc50,6,>803e,0 ;Fry explosion +fryexp2 .word >fd50,8,>80d9,0 ;^ +totcarn .word >f980,30,>80cf,0 ;Total carnage! +gluck .word >f1f7,>40,>80e5,0 ;"Good luck" +TXTSND1 .WORD >F3F7,>8,>80AE,0 + + +;symbols externally defined + + .ref anim_script,anim_kilslp,animscnt,anim_killall,anim_wait + .ref CYCLE_TABLE,AIRSCRM + .ref pal_set,pal_find,pal_getf,PCNT,WAVE + .ref IRQSKYE,ERASE_TXT,HEXTOASC,FRANIM,HALT + .ref CRMP,BCDBIN,BINBCD + .ref WSPEED,PSTATUS + .ref COLCYC,BGND_UD1,BAKMODS,WNDWON,WNDWOFF,NO_START,WRLD + .ref KILBGND + .ref STRCNRMO,STRCNRMO_1,STRCNRM,LOWZ + .ref RD15FONT,RD7FONT + + .ref P1DATA,P2DATA + + .if DEBUG + .ref SLDEBUG + .endif + + .ref timerp1,timerp2 + .ref palfmin + .ref RNDRNG,RNDRNG0 + .ref FRANIMQ + .ref CYCSPECT + .ref GET_ADJ,aud_addnumplyrs,AUD + .ref ZERO_BITS + .ref wbmcolor_t + +;symbols defined in this file + + .def DEATHS + +;uninitialized ram definitions + + .bss cycmem ,5*16*2 ;Allocate 2 x color area in ram + .bss statspal ,31*16 ;Statistics palette + .bss boanimdeath1 ,16 ;CntDn for bonus anim procs to die + .bss boanimdeath2 ,16 ;^ + .bss scoredie ,16 ;>0=Score processes die + .bss hitpercent1 ,16 ;Player1 % + .bss hitpercent2 ,16 ;Player2 % + .bss hitsmin1 ,16 ;Player1 hits per minute + .bss hitsmin2 ,16 ;Player2 ^ + .bss score1old ,32 ;P1 score before bonuses + .bss score2old ,32 ;P2 ^ + + .bss bonusstat ,16 ;Status of bonus + + .bss fryp1palmem ,65*16 ;P1 mem for pallette pulse + .bss fryp2palmem ,65*16 ;P2 ^ + + .bss DEATHS ,16 ;DEATH STATUS 0,1,2, OR 3 WHEN DONE + + + .text + + + +******************************** +* Print incoming trans text + + SUBR INCOM_TRAN ;A1=Rackup # (0-2) + + PUSH a1 + move a1,a2 + movi incom_st,a0 ;*Text + subk 1,a2 + jrlt it20 ;0? + jreq it10 ;1? + movi [0,>fcbd],a1 ;Fix X for purple guy eating + jruc it20 +it10 movi [0,-40],a1 ;Fix X +it20 clr a2 + move a2,@WRLD ;Do world adj + callr prt_xy + + PULL A1 + move a1,a2 + movi incom_st2,a0 ;*Text + subk 1,a2 + jrlt Mit20 ;0? + jreq Mit10 ;1? + movi [0,>fcbd],a1 ;Fix X for purple guy eating + jruc Mit20 +Mit10 movi [0,-40],a1 ;Fix X +Mit20 clr a2 + move a2,@WRLD ;Do world adj + callr prt_xy + RETS + +incom_st + XYTXT PRTF15,652,55,1,"INCOMING TRANSMISSION" + .word -1 + +incom_st2 + XYTXT 0,652,45,1,"UNITED NATIONS" + .word -1 + + +******************************** +* Rack it up! + + SUBR DO_RACKUP + + calla STOPOBJS ;Keep all objs still + + movk 1,a0 ;Delay start of a 2nd plyr flag + move a0,@NO_START + clr a0 + move a0,@IRQSKYE + + movi TUNE4,a0 + calla snd_play1 + + SLEEP 96 + + clr a0 + move a0,@HALT + ;>Make tiles +; movk 8*4,a1 ;# Panels +; movi -4*>25800+>12c00,a2 ;Velocity +; movk 10,a3 +; movi 200,a5 +;rp20 movi panel_t,a14 +; calla GPALOBJ ;Get palette & obj +; calla STFOBJ ;Stuff object data +; move a2,*a0(OXVEL),L ;Set XVEL +; move a3,*a0(OYPOS) ;New Y +; addi 46,a3 +; move a5,*a0(OZPOS) +; movk 3,a4 +; and a1,a4 +; subk 1,a4 +; jrne rp30 +; addi >25800,a2 +; movk 10,a3 +; movk 1,a4 +; xor a4,a5 ;Toggle 0 Bit +;rp30 calla ADJSTWTL ;Adjust into world +; calla INSOBJ ;Insert obj +; dsj a1,rp20 +; +; SLEEPK 20 + + calla STOPOBJS ;Stop tiles + + callr scores_bcdbin + +; move @P1DATA+THITS,a1 ;>Calc P1 % & hitsmin +; move a1,a3 +; movi 100,a0 +; mpyu a0,a1 +; move @P1DATA+TSHOTS,a2 +; divu a2,a1 +; move a1,@hitpercent1 +; +; movi 60,a0 +; mpyu a0,a3 +; move @timerp1,a2 +; divu a2,a3 +; move a3,@hitsmin1 +; +; move @P2DATA+THITS,a1 ;>Calc P2 % & hitsmin +; move a1,a3 +; movi 100,a0 +; mpyu a0,a1 +; move @P2DATA+TSHOTS,a2 +; divu a2,a1 +; move a1,@hitpercent2 +; +; movi 60,a0 +; mpyu a0,a3 +; move @timerp2,a2 +; divu a2,a3 +; move a3,@hitsmin2 + + movi [2,30],a8 ;Color 2, 30 colors + movi SCOREPAL,a9 + movi wbmcolor_t,a10 ;Color table + movk 7,a11 ;Rate of cycle + CREATE CYCPID,CYCLE_TABLE + movi [1,1],a8 + movi SCOREPAL,a9 + movi statscolor_t,a10 + movk 3,a11 + CREATE CYCPID,CYCLE_TABLE + movi [32,2],a8 + movi SCOREPAL,a9 + movi statscolor_t,a10 + movk 5,a11 + CREATE CYCPID,CYCLE_TABLE + + CREATE0 score_prt + SLEEPK 1 + CREATE0 scorebonus_prt + +; JSRP bonus_main + +; JSRP player_showstats + + movk 1,a0 + move a0,@scoredie ;Kill score processes + SLEEPK 8 + + movk 5,a11 + JSRP text_shrink + +; JSRP player_bonuswin ;Show bonus winner! + + + movi 60*7,a0 + callr sleep_var + + + callr scores_binbcd + + movi CYCPID,a0 + calla KIL1C + +debug + movi TUNE3,a0 ;Turn on dictator taunt music + calla snd_play1 + + SLEEPK 25 + + movi SCOREPAL,a0 ;*Color + clr a1 ;Palette 0, Color 0 + move *a0+,a2 ;# Colors + calla pal_set +; movi DESRTPL,a0 ;*Color +; move *a0,a2 ;# Colors +; calla pal_getf +; srl 8,a0 +; sll 8,a0 +; move a0,a1 +; movi DESRTPL+16,a0 ;*Color +; calla pal_set + + movi 2*32*32+2*32+2,a0 + move a0,@IRQSKYE ;Dark grey background behind dictator + + calla ERASE_TXT + calla anim_killall + + movk 3,a0 +; move a0,@TAUNTOUT ;Taunt over + DIE + + + +;panel_t .long [177,0],[0,0],RACKBLK ;x,y,img name +; .word 200,DMAWNZ+M_NOCOLL,CLSDEAD ;zpos,flags,oid +; .long 0,0 ;xvel,yvel + +statscolor_t + COLORW 16,0,0 + COLORW 20,00,08, 24,00,12, 28,00,16, 31,00,20 + COLORW 28,00,24, 24,00,28, 20,00,31, 16,00,28 + COLORW 08,20,00, 16,24,00, 24,28,00, 31,31,00 + COLORW 20,28,00, 12,24,00, 08,20,00, 02,16,00 + COLORW 00,08,20, 00,16,24, 00,24,28, 00,31,31 + COLORW 00,20,28, 00,10,24, 00,00,20, 00,00,16 + COLORW 16,0,0 + .word -1 + +engtran_s + .byte "ENGLISH TRANSLATION",0 + .even + + +******************************** +* Print XY sting set if player in game +* Trashes A2-A6 + + SUBRP printifp_xy ;A0=*Plyr1 string, A1=*Plyr2 string + + PUSH a8 + move a1,a8 + + move @PSTATUS,a1 + btst 0,a1 + jrz pipx10 + calla prt0_xy ;P1 + +pipx10 move @PSTATUS,a1 + btst 1,a1 + jrz pipx20 + move a8,a0 + calla prt0_xy ;P2 + +pipx20 PULL a8 + rets + +******************************** +* Print an XY string set +* A0=*XY text +* A1=Y:X offset +* Trashes A1-A5 +* Rets: A0=*Next XY or End + + SUBR prt0_xy + + clr a1 ;No offset + + SUBRP prt_xy + + PUSH a6,a7,a8,a9,a10,a11 + + move a0,a8 ;A8=*Txt data + move a1,a3 ;A3=Y:X offset +prtxy5 move *a8+,a1 ;Mode word + move *a8+,a9,L ;Scrn Y:X + addxy a3,a9 ;+Offset + btst PRTOBJB,a1 + jrnz pxy300 + + movk [0,1],a10 ;Char Y:X spacing + movi RD7FONT,a11 ;*Font + btst PRTF15B,a1 + jrz prtxy10 + movi RD15FONT,a11 ;*Font +prtxy10 move *a8+,a6 ;Color + move a6,a0 + sll 8,a6 + or a0,a6 + + btst PRTDECB,a1 + jrz prtxy30 + move *a8+,a2,L ;Binary mode + PUSH a8 + move *a2,a8 ;Get word + btst PRTLB,a1 + jrz prtxy20 + move *a2,a8,L ;Get long +prtxy20 calla HEXTOASC + jruc prtxy40 + +prtxy30 btst PRTBCDB,a1 + jruc prtxy70 +; jrz prtxy70 +; move *a8+,a0,L ;BCD mode +; move *a0,a0,L +; callr bcdtoasc +; PUSH a8 +; move a0,a8 +prtxy40 clr a0 + JSRP STRCNRMO + PULL a8 + jruc pxy80 + +prtxy70 ;>String mode + btst PRTF8B,a1 + jrz prtxy74 + LOCKUP +; movi BLLNP5,a0 +; calla pal_find +; move a0,a6 +; movi RD8FONT,a11 +; clr a0 +; JSRP STRCNRMO_1 ;Full color font + jruc prtxy77 + +prtxy74 clr a0 ;Sleep time + JSRP STRCNRMO ;Print string, objects +prtxy77 addk 8,a8 ;Round up + srl 4,a8 + sll 4,a8 +pxy80 move *a8,a0 ;-=End + jrge prtxy5 + + move a8,a0 + PULL a6,a7,a8,a9,a10,a11 + rets + +pxy300 move a3,a10 ;>Print obj + move *a8+,a3 ;Z + move *a8+,a2,L ;*Img + move *a2,a1 ;Get ISIZEX + srl 1,a1 ;/2 + move a9,a0 + sub a1,a0 ;Center + sll 16,a0 ;X + clr a1 + movy a9,a1 ;Y + movi DMAWNZ+M_NOCOLL,a4 + movi CLSNEUT|TYPTEXT|SUBTXT,a5 + clr a6 + clr a7 + move a8,a9 + calla BEGINOBJ + move a9,a8 + move a10,a3 + jruc pxy80 + + +******************************** +* Print an XY string set number with no objects +* Trashes A2-A7 + + NOTINUSE + SUBRP prtnobj_xy ;A0=*XY Text + + PUSH a8,a9,a10,a11 + + move a0,a8 +pdnox5 movk [0,1],a10 ;Char y,x spacing + movi RD7FONT,a11 ;*Font + move *a8+,a1 ;Mode word + btst PRTF15B,a1 + jrz pdnox10 + movi RD15FONT,a11 ;*Font +pdnox10 move *a8+,a9,L ;Scrn y/x + move *a8+,a6 ;Color + move a6,a2 + sll 8,a6 + or a2,a6 + + btst PRTDECB,a1 + jrz pdnoxx + move *a8+,a2,L ;Binary mode + move *a2,a0 ;Get word + btst PRTLB,a1 + jrz pdnox20 + move *a2,a0,L ;Get long +pdnox20 PUSH a8 + move a0,a8 + calla HEXTOASC + clr a0 + JSRP STRCNRM + PULL a8 + + move *a8,a0 ;-=End + jrge pdnox5 + +pdnoxx PULL a8,a9,a10,a11 + rets + .endif + +******************************** +* Vertically shrink text +* Trashes A0-A10 + + SUBRP text_shrink ;A11=Sleep time + + movi txtssnd,a0 + calla snd_play1 + + movk 8,a10 ;Size for x2 shrinkage +txs20 move a11,a0 + calla PRCSLP + clr a8 + move @OBJLST,a9,L ;>Find and shrink +txs40 move *a9(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBTXT,a0 + jrne txs70 + move *a9(OSIZEY),a0 + subk 1,a0 ;Shrink + jrz txs70 ;Min of 1 + cmp a10,a0 + jrlt txs50 + subk 1,a0 ;Shrink again + cmpi 15,a0 + jrlt txs50 + subk 5,a0 ;Shrink x7 +txs50 move a0,*a9(OSIZEY) + movk 1,a8 +txs70 move *a9,a9,L + jrnz txs40 + + subk 1,a10 ;Lower x2 min + move a8,a8 + jrnz txs20 + + calla ERASE_TXT + + RETP + + +******************************** +* Delete text at a ZPOS +* Trashes A0-A3,A14 + + SUBRP text_delz ;A0=ZPOS + + move a0,a2 + + move @OBJLST,a0,L +tdz40 move *a0(OID),a1 + cmpi CLSNEUT|TYPTEXT|SUBTXT,a1 + jrne tdz70 + move *a0(OZPOS),a1 + cmp a2,a1 + jrne tdz70 + move *a0,a3,L ;Get * next + calla DELOBJ + move a3,a0 + jruc tdz80 +tdz70 move *a0,a0,L +tdz80 jrnz tdz40 ;Continue? + rets + + +******************************** +* Delete text in a Y range +* Trashes A0-A3,A14 + + SUBRP text_delyrng ;A0=Lower Y, A1=Upper Y + + move @WORLDTLY+16,a2 + add a2,a1 ;A1=World adjusted upper Y + add a0,a2 ;A2=^ lower Y + + move @OBJLST,a0,L +tdy40 move *a0(OID),a3 + cmpi CLSNEUT|TYPTEXT|SUBTXT,a3 + jrne tdy70 + move *a0(OYPOS),a3 + cmp a2,a3 + jrlt tdy70 + cmp a1,a3 + jrgt tdy70 + move *a0,a3,L ;Get * next + calla DELOBJ + move a3,a0 + jruc tdy80 +tdy70 move *a0,a0,L +tdy80 jrnz tdy40 ;Continue? + rets + + +******************************** +* Print text in rackup window (Process) + + SUBR prt_inrackwin ;A8=*Text, A9=#Loops + + move a9,*a13(PDATA) + SLEEPK 30 + movk 1,a10 ;Y:X spacing + movi RD7FONT,a11 ;font table + +pirw10 SLEEPK 10 + movi -210,a0 + move a0,@LOWZ + movi [187,198],a9 ;Y:X + movi >2525,a6 + clr a0 + PUSH a8 + JSRP STRCNRMO + PULL a8 + SLEEPK 10 + movi 20000-210,a0 + callr text_delz + move *a13(PDATA),a0 + subk 1,a0 + move a0,*a13(PDATA) + jrgt pirw10 + DIE + +******************************** +* Convert scores to binary + + SUBRP scores_bcdbin + + move @P1DATA+PSCORE,a0,L + calla BCDBIN + move a0,@P1DATA+PSCORE,L + move a0,@score1old,L + move @P2DATA+PSCORE,a0,L + calla BCDBIN + move a0,@P2DATA+PSCORE,L + move a0,@score2old,L + rets + +******************************** +* Convert scores to BCD + + SUBRP scores_binbcd + + move @P1DATA+PSCORE,a0,L + calla BINBCD + move a0,@P1DATA+PSCORE,L + move @P2DATA+PSCORE,a0,L + calla BINBCD + move a0,@P2DATA+PSCORE,L + rets + + +******************************** +* Print players score (Process) + + LONGPD scorecopy1 ,0 ;Last P1 score + LONGPD scorecopy2 ,2 ;^ P2 + + SUBRP score_prt + + clr a0 + move a0,@scoredie + subk 1,a0 + move a0,*a13(scorecopy1),L ;-1 + move a0,*a13(scorecopy2),L + +scp20 move @PSTATUS,a8 + + btst 0,a8 + jrz scp50 + move *a13(scorecopy1),a0,L + move @P1DATA+PSCORE,a1,L + cmp a0,a1 + jreq scp50 + move a1,*a13(scorecopy1),L + movi 305,a0 + callr text_delz + movi 305-20000,a0 + move a0,@LOWZ + movi score1_st,a0 + calla prt0_xy ;P1 + +scp50 SLEEPK 3 + btst 1,a8 + jrz scp80 + move *a13(scorecopy2),a0,L + move @P2DATA+PSCORE,a1,L + cmp a0,a1 + jreq scp80 + move a1,*a13(scorecopy2),L + movi 306,a0 + callr text_delz + movi 306-20000,a0 + move a0,@LOWZ + movi score2_st,a0 + calla prt0_xy ;P2 + +scp80 SLEEPK 3 + move @scoredie,a0 + jrle scp20 + DIE + +score1_st + XYNUM PRTDEC+PRTL+PRTF15,85,16,32,P1DATA+PSCORE + .word -1 +score2_st + XYNUM PRTDEC+PRTL+PRTF15,315,16,33,P2DATA+PSCORE + .word -1 + + +******************************** +* Print players bonus score (Process) + + SUBRP scorebonus_prt + + movi -1,a0 + move a0,*a13(scorecopy1),L + move a0,*a13(scorecopy2),L + + movk [0,1],a10 ;Spacing + movi RD7FONT,a11 + +scbp20 move @PSTATUS,a2 + btst 0,a2 + jrz scbp50 + move @P1DATA+PSCORE,a8,L ;>Calc bonus score + move *a13(scorecopy1),a0,L + cmp a0,a8 + jreq scbp50 + move a8,*a13(scorecopy1),L + movi 300,a0 + callr text_delz + move @score1old,a0,L + movi 300-20000,a1 + movi >2020,a6 + movi [35,85],a9 ;Scrn y/x + callr scoreb_prt2 + +scbp50 SLEEPK 3 + move @PSTATUS,a2 + btst 1,a2 + jrz scbp80 + move @P2DATA+PSCORE,a8,L ;>Calc bonus score + move *a13(scorecopy2),a0,L + cmp a0,a8 + jreq scbp80 + move a8,*a13(scorecopy2),L + movi 301,a0 + callr text_delz + move @score2old,a0,L + movi 301-20000,a1 + movi >2121,a6 + movi [35,315],a9 ;Scrn y/x + callr scoreb_prt2 + +scbp80 SLEEPK 3 + move @scoredie,a0 + jrle scbp20 + DIE + + +scoreb_prt2 + move a1,@LOWZ + sub a0,a8 + calla HEXTOASC + clr a0 ;No sleep + JSRP STRCNRMO ;Print + rets + + +******************************** +* Variable sleep (call it) + + SUBR sleep_var ;A0=Sleep time + + PUSHP a8,a9 + PULL a8 + move a0,a9 +sv20 SLEEPK 1 + move @SWITCH+16,a1 ;Chk for impatience + not a1 + andi >24,a1 + jrnz sv50 + dsj a9,sv20 +sv50 move a8,a0 + PULLP a8,a9 + jump a0 + + + + + +******************************** + + + NOTINUSE + + +******************************** +* Give collection bonus + + + .bss bonuscnt ,32 ;P1/P2 item cnt (word*2) + + SUBRP bonus_main + +; movk 3,a0 +; move a0,@PSTATUS ;DEBUG +; +; movi 200,a0 ;>DEBUG +; calla RNDRNG0 +; move a0,@P1DATA+TFLAGS +; movi 200,a0 +; calla RNDRNG0 +; move a0,@P2DATA+TFLAGS +; +; movi 200,a0 +; calla RNDRNG0 +; move a0,@P1DATA+CASHCNT +; movi 200,a0 +; calla RNDRNG0 +; move a0,@P2DATA+CASHCNT +; +; movi 200,a0 +; calla RNDRNG0 +; move a0,@P1DATA+THSTGS +; movi 200,a0 +; calla RNDRNG0 +; move a0,@P2DATA+THSTGS + + movi collectb_s,a8 + movi 100,a9 + CREATE0 prt_inrackwin + move a0,-*a12,L + + movi -1,a0 + move a0,@bonusstat + + movi bonus_st,a0 + calla prt0_xy + + move @PSTATUS,a6 + cmpi 3,a6 + jreq bm15 ;Two plyrs? + + movi 115,a1 + btst 0,a6 + jrz bm10 ;P1 off? + movi 285,a1 +bm10 movi joinin_st,a0 + calla prt_xy + +bm15 btst 0,a6 + jrz bm20 + movi bonusp1_as,a8 + CREATE ANIMPID,anim_script ;P1 + +bm20 btst 1,a6 + jrz bm40 + movi bonusp2_as,a8 + CREATE ANIMPID2,anim_script ;P2 +bm40 + movi bonus1p1_st,a0 + movi bonus1p2_st,a1 + movi 210,a2 + movi [70,116],a9 ;YX + movi 60,a10 + movi TFLAGS,a11 + JSRP bonus_cntup ;Flags + + clr a0 + move a0,@bonusstat + + movi bonus2p1_st,a0 + movi bonus2p2_st,a1 + movi 211,a2 + movi [108,116],a9 ;YX + movi 40,a10 + movi CASHCNT,a11 + JSRP bonus_cntup ;Crystals + + movk 1,a0 + move a0,@bonusstat + + movi bonus3p1_st,a0 + movi bonus3p2_st,a1 + movi 212,a2 + movi [146,116],a9 ;YX + movi 100,a10 + movi THSTGS,a11 + JSRP bonus_cntup ;Hostages + + movi 60*2,a0 ;4 + callr sleep_var + + move *a12+,a0,L + clr a1 + move a1,*a0(PDATA) ;Stop window text + + movk 2,a0 + move a0,@bonusstat + movi 55,a0 + movi 200,a1 + callr text_delyrng + SLEEPK 30 + + RETP + +collectb_s + .byte "COLLECTION BONUS",0 + .even +joinin_st + XYTXT PRTF15,0,104,3,"HELP!" + XYTXT PRTF15,0,86,3,"JOIN IN!" +; XYTXT PRTF15,0,86,3,"JOIN IN" +; XYTXT PRTF15,0,104,3,"SCUM!" + .word -1 + + + + SUBRP bonus_cntup ;A0=*P1_st, A1=*P2_st, A2=Z + ;A9=Base YX, A10=Pts each, A11=Plyr data offset + move @PSTATUS,a3 + subk 3,a3 + jrnz bcu10 + sll 1,a10 ;*2 pts for two players + +bcu10 PUSH a2 + callr printifp_xy + + movi bonuscnt,a8 + CREATE0 bonus_prtitem ;Display + move a0,-*a12,L + PULL a2 + move a2,*a0(bonusz) + + clr a0 + move a0,*a8,L ;Cnt=0 + + movi racksup,a0 + calla snd_play1 + +bcu20 move @SWITCH+16,a1 ;Chk for impatience + not a1 + andi >24,a1 + jrnz bcu25 + SLEEPK 1 + +bcu25 move @PSTATUS,a2 + clr a3 + + btst 0,a2 + jrz bcu30 + move *a8,a0 + movi P1DATA,a1 + add a11,a1 + move *a1,a1 + cmp a1,a0 + jrge bcu30 ;Count maxed? + addk 1,a0 + move a0,*a8 + movk 1,a3 + move @P1DATA+PSCORE,a0,L + add a10,a0 + move a0,@P1DATA+PSCORE,L + +bcu30 btst 1,a2 + jrz bcu60 + move *a8(16),a0 + movi P2DATA,a1 + add a11,a1 + move *a1,a1 + cmp a1,a0 + jrge bcu60 ;Count maxed? + addk 1,a0 + move a0,*a8(16) + movk 1,a3 + move @P2DATA+PSCORE,a0,L + add a10,a0 + move a0,@P2DATA+PSCORE,L + +bcu60 move a3,a3 + jrnz bcu20 ;More to do? + + movi rackoff,a0 ;End + calla snd_play1 + SLEEPK 5 + + move *a8+,a1 ;P1 + move *a8,a2 ;P2 + move @WORLDTLX+16,a10 + cmp a2,a1 + jrhi bcu200 ;P1 won? + jrlo bcu180 ;P2 won? + move @P1DATA+PSCORE,a0,L ;Tie! + move @P2DATA+PSCORE,a1,L + cmp a1,a0 + jrhs bcu200 ;P1 won? +bcu180 addi 190,a10 ;Min X of tiles +bcu200 movi 190,a11 ;X range of tiles + movk 3,a8 +bcu220 movi DMACNZ+M_NOCOLL,a3 + callr bonus_flashblk + SLEEPK 2 + movi DMAWNZ+M_NOCOLL,a3 + callr bonus_flashblk + SLEEPK 8 + dsj a8,bcu220 + + move *a12+,a0,L + calla KILL + movi 60*1,a0 + callr sleep_var + + RETP + + +******************************** +* Print bonus item count & score (Process) + + WORDPD bonusz ,0 ;ZPOS for text, set by creator + + + SUBRP bonus_prtitem ;A8=*P1/2 item cnt, A9=Y:X, A10=Pts each + + movi RD7FONT,a11 + +bpilp move *a13(bonusz),a0 + callr text_delz + + move @PSTATUS,a2 + move a10,a4 ;A4=Pts + movk [0,1],a10 ;Spacing + + btst 0,a2 + jrz bpi50 + + PUSH a8,a9 + move *a8,a8 ;Get P1 cnt + move a8,a3 + movi >2525,a6 + callr strcnrmo_nosleep ;Print cnt + callr strcnrmo_nosleep2 ;Print score + PULL a8,a9 + +bpi50 btst 1,a2 + jrz bpi80 + + PUSH a8,a9 + addi 160,a9 ;+X + move *a8(16),a8 ;Get P2 cnt + move a8,a3 + movi >2525,a6 + callr strcnrmo_nosleep ;Print cnt + callr strcnrmo_nosleep2 ;Print score + PULL a8,a9 + +bpi80 move a4,a10 + SLEEPK 2 + jruc bpilp + + + SUBRP strcnrmo_nosleep2 + mpyu a4,a3 + move a3,a8 + addi 45,a9 ;+X + + SUBRP strcnrmo_nosleep + + PUSH a9 + calla HEXTOASC + move *a13(bonusz),a0 + subi 20000,a0 + move a0,@LOWZ + clr a0 ;No sleep + JSRP STRCNRMO + PULL a9 + rets + + +bonusp2_as ;Scripts + ASBXY 160,0 +bonusp1_as + ASADDW 1,animscnt + ASNEW bonusflag_t + ASFRA flag_l,>20,100 + +bas10 ASSLP 2 + ASJMPEQ -1,bonusstat,bas10 + + ASNEW bonusgem_t + ASFRA gems_l,>21,100 + +bas20 ASSLP 2 + ASJMPEQ 0,bonusstat,bas20 + + ASNEW bonushstg_t + +bas30 ASSLP 2 + ASJMPEQ 1,bonusstat,bas30 + + ASKIL 0,>ff + ASDELM 0,>ff + + ASADDW -1,animscnt + ASEND + +bonus_st + XYOBJ PRTOBJ,200,16,500,TSCORE + .word -1 + +bonus1p1_st + XYTXT 0,116,70,35,"X =" + .word -1 +bonus1p2_st + XYTXT 0,276,70,35,"X =" + .word -1 + +bonus2p1_st + XYTXT 0,116,108,35,"X =" + .word -1 +bonus2p2_st + XYTXT 0,276,108,35,"X =" + .word -1 + +bonus3p1_st + XYTXT 0,116,146,35,"X =" + .word -1 +bonus3p2_st + XYTXT 0,276,146,35,"X =" + .word -1 + +bonusflag_t + ASITEMN 50,55,FLG1,220,DMAWNZ,>20 + .word -1000 +bonusgem_t + ASITEMN 50,90,GEMS1,220,DMAWNZ,>21 + .word -1000 +bonushstg_t + ASITEMN 50,130,HSTGHD,220,DMAWNZ,>21 + .word -1000 + + +flag_l LW FLG1,5 + LW FLG2,5 + LW FLG3,5 + LW FLG4,5 + LWL0 FLG5,5 + +gems_l LW GEMS1,4 + LW GEMS2,4 + LW GEMS3,4 + LW GEMS4,4 + LW GEMS3,4 + LW GEMS2,4 + LWL0 GEMS1,4 + + + SUBRP bonus_flashblk ;A3=OFLAGS, A10=XMin, A11=XWidth + + rets + + move @OBJLST,a1,L +bfb20 move *a1(OZPOS),a0 + subi 200,a0 + subk 1,a0 + jrhi bfb30 ;Not 200-201? + move *a1(OXPOS),a0 + sub a10,a0 + cmp a11,a0 + jrhi bfb30 + move a3,*a1(OCTRL) ;FIX + movi >909,a0 + move a0,*a1(OCONST) +bfb30 move *a1,a1,L + jrnz bfb20 + rets + + +******************************** +* Show player stats and give bonuses + + SUBRP player_showstats + + movi gamestat_s,a8 + movi 100,a9 + CREATE0 prt_inrackwin + move a0,-*a12,L + + clr a7 ;A7=Bonus pts Y:X offset + + move @PSTATUS,a0 + subk 3,a0 + jrne pst20 + movi statsbo_st,a0 + calla prt0_xy + +pst20 movi statssnd_t,a8 + movi stats_st,a9 + movi statsp1_st,a10 + movi statsp2_st,a11 + +pst50 move *a8+,a0,L + calla snd_play1 + move @PSTATUS,a6 + move a9,a0 + calla prt0_xy + move a0,a9 + btst 0,a6 ;P1 + jrz pst300 + move a10,a0 + calla prt0_xy + move a0,a10 +pst300 btst 1,a6 ;P2 + jrz pst310 + + movi -400,a0 ;So general is above number + move a0,@LOWZ + + move a11,a0 + calla prt0_xy + move a0,a11 + +pst310 cmpi 3,a6 + jrne pst400 ;Not 2 plyrs? + move *a10(-32),a2,L + move *a11(-32),a3,L + cmpi P1DATA+TMINEDTH,a2 + jrne pst330 ;Normal compare? + SWAP a2,a3 +pst330 move *a2,a2 + move *a3,a3 + movi P1DATA+PSCORE,a4 +; movi rackp1p,a0 + clr a1 + cmp a3,a2 + jrz pst380 ;Same stats? + jrhi pst350 ;P1 higher? + movi P2DATA+PSCORE,a4 +; movi rackp2p,a0 + addi 300,a7 ;P2 offset +pst350 move *a4,a2,L ;Give points + addi 1000,a2 + move a2,*a4,L +; calla snd_play1 + movi statspts_st,a0 + move a7,a1 + calla prt_xy +pst380 srl 16,a7 ;X=0 + addk 10,a7 ;Y=Y+10 + sll 16,a7 + +pst400 move a7,-*a12,L + SLEEPK 4 + movk 9,a0 + callr sleep_var + move *a12+,a7,L + move *a9,a0 + addk 1,a0 + jrnz pst50 ;End? + + movi 60*6,a0 + callr sleep_var + + move *a12+,a0,L + clr a1 + move a1,*a0(PDATA) ;Stop window text + + RETP + + +gamestat_s + .byte "GAME STATISTICS",0 + .even +statssnd_t + .long stats1,stats2,stats3,stats4,stats5,stats6,stats7,stats8 + .long stats9,stats10,stats11,stats12 + +SY .equ 55 + +statsbo_st + XYOBJ PRTOBJ,50,45,280,BWORD + XYOBJ PRTOBJ,350,45,280,BWORD + .word -1 +statspts_st + XYOBJ PRTOBJ,50,SY,280,FIVE + .word -1 +stats_st + XYTXT 0,200,SY,2,"SHOTS FIRED" + XYTXT PRTE,200,SY+10,3,"ENEMY HITS" + XYTXT PRTE,200,SY+20,4,"HIT PERCENTAGE" +; XYTXT PRTE,200,SY+30,5,"HITS PER MINUTE" + XYTXT PRTE,200,SY+30,5,"WEAPONS PICKED UP" + XYTXT PRTE,200,SY+40,6,"BOMBS USED" + XYTXT PRTE,200,SY+50,7,"MISSILE STRIKES" + XYTXT PRTE,200,SY+60,8,"BIG STUFF DESTROYED" + XYTXT PRTE,200,SY+70,9,"EXTRA MEN COLLECTED" + XYTXT PRTE,200,SY+80,10,"MINES STEPPED ON" + XYTXT PRTE,200,SY+90,11,"KEYS COLLECTED" + .word -1 ;End + +statsp1_st + XYNUM PRTDEC,95,SY,2,P1DATA+TSHOTS + XYNUM PRTDEC+PRTE,95,SY+10,3,P1DATA+THITS + XYNUM PRTDEC+PRTE,95,SY+20,4,hitpercent1 +; XYNUM PRTDEC+PRTE,95,SY+30,5,hitsmin1 + XYNUM PRTDEC+PRTE,95,SY+30,5,P1DATA+TWPNS + XYNUM PRTDEC+PRTE,95,SY+40,6,P1DATA+BMBSUSED + XYNUM PRTDEC+PRTE,95,SY+50,7,P1DATA+TMISLS + XYNUM PRTDEC+PRTE,95,SY+60,8,P1DATA+TBIGSTF + XYNUM PRTDEC+PRTE,95,SY+70,9,P1DATA+TEARNED + XYNUM PRTDEC+PRTE,95,SY+80,10,P1DATA+TMINEDTH + XYNUM PRTDEC+PRTE,95,SY+90,11,P1DATA+TKEYS + .word -1 + +statsp2_st + XYNUM PRTDEC,305,SY,2,P2DATA+TSHOTS + XYNUM PRTDEC+PRTE,305,SY+10,3,P2DATA+THITS + XYNUM PRTDEC+PRTE,305,SY+20,4,hitpercent2 +; XYNUM PRTDEC+PRTE,305,SY+30,5,hitsmin2 + XYNUM PRTDEC+PRTE,305,SY+30,5,P2DATA+TWPNS + XYNUM PRTDEC+PRTE,305,SY+40,6,P2DATA+BMBSUSED + XYNUM PRTDEC+PRTE,305,SY+50,7,P2DATA+TMISLS + XYNUM PRTDEC+PRTE,305,SY+60,8,P2DATA+TBIGSTF + XYNUM PRTDEC+PRTE,305,SY+70,9,P2DATA+TEARNED + XYNUM PRTDEC+PRTE,305,SY+80,10,P2DATA+TMINEDTH + XYNUM PRTDEC+PRTE,305,SY+90,11,P2DATA+TKEYS + .word -1 + + +******************************** +* Player bonus winner animations + + + SUBRP player_bonuswin + + movi plbwp1o_as,a8 ;P1 only initial script + clr a9 ;A9=Winner message # + move @PSTATUS,a0 + btst 1,a0 + jrz pbw90 + + movi plbwp2o_as,a8 ;P2 only initial script + movk 1,a9 + btst 0,a0 + jrz pbw90 + + movi plbwp1w_as,a8 ;P1 win initial script + movk 2,a9 + + move @P1DATA+PSCORE,a0,L + move @P2DATA+PSCORE,a1,L + cmp a1,a0 ;P1 score > P2 score? + jrhi pbw90 + jrlo pbw80 ;P1sc < P2sc + move @score1old,a3,L + move @score2old,a4,L + cmp a4,a3 ;Score same! + jrlo pbw90 ;P1 old < P2 old? + +pbw80 movi plbwp2w_as,a8 ;P2 win initial script + movk 3,a9 + +pbw90 CREATE ANIMPID,prt_winnertxt + CREATE ANIMPID,anim_script + + movi 1*32*32+15*32+27,a0 ;Bkgnd color + move a0,@IRQSKYE + + move @OBJLST,a1,L ;>Tiles fly away +pbw200 move *a1(OZPOS),a0 + subi 200,a0 + subk 1,a0 + jrhi pbw230 + movk 8,a2 ;Vel + btst 0,a0 + jrnz pbw220 + neg a2 ;-Vel +pbw220 move a2,*a1(OYVEL+16) + +pbw230 move *a1,a1,L + jrnz pbw200 + + SLEEP 60 + + move @OBJLST,a0,L ;>Delete tiles +pbw300 move *a0(OZPOS),a2 + subi 200,a2 + subk 1,a2 + jrhi pbw330 + move *a0,a2,L ;Get * to next obj + calla DELOBJ ;Kill + move a2,a0 + jruc pbw340 +pbw330 move *a0,a0,L +pbw340 jrnz pbw300 + + movi 200,a0 + callr sleep_var + +; movi plbwpal_t,a0 ;*Palette list +; movk 5,a1 +; movi >40,a2 +; move a2,@palfmin +; calla FADEOUT2 +; +; SLEEPK 30 + + RETP + + +******************************** +* A9=Message # 0-3 (Process) +* 0=PLYR 1 ONLY +* 1=PLYR 2 ONLY +* 2=PLYR 1 WINS OVER PLYR 2 +* 3=PLYR 2 WINS OVER PLYR 1 + + SUBRP prt_winnertxt + + sll 5,a9 + addi winmsgs,a9 + move *a9,a8,L ;*Message + movi 34,a9 + jruc prt_inrackwin + +winmsgs .long win0_s,win1_s,win2_s,win3_s + +;COME UP WITH MORE CLEVER TEXT HERE! +win0_s .byte "PLAYER ONE IS GREAT!",0 +win1_s .byte "PLAYER TWO IS GREAT!",0 +win2_s .byte "PLAYER ONE KICKED BUTT!",0 +win3_s .byte "PLAYER TWO KICKED BUTT!",0 + .even + + +;plbwpal_t +; .long 0,BIGPL1,GUNSP1,CLDS9,DESRTPL,BIGPL2,GUNSP2,0 + + +plbwp1o_as + ASNEW plyr1wnew_t + ASXY >40,>1f,70,0 + ASJMP plbw_as + +plbwp2o_as + ASNEW plyr2wnew_t + ASXY >40,>1f,-50,0 + ASSVL BIGPL2 + ASPAL >41 + ASPAL >54 + ASPAL >55 + ASSVL GUNSP2 + ASPAL >42 + ASPAL >48 + ASJMP plbw_as + +plbwp1w_as + ASNEW plyr1wnew_t + ASNEW plyr2lnew_t + ASSVL BIGPL2 + ASPAL >81 + ASSVL GUNSP2 + ASPAL >82 + ASPAL >88 + ASRUN plbw2txt_as + ASJMP plbw_as + +plbwp2w_as + ASNEW plyr1lnew_t + ASNEW plyr2wnew_t + ASSVL BIGPL2 + ASPAL >41 + ASPAL >54 + ASPAL >55 + ASSVL GUNSP2 + ASPAL >42 + ASPAL >48 + ASRUN plbw1txt_as + +plbw_as + ASADDW 1,animscnt + ASNEW plyrbgnew_t + ASFRA ribbonb_l,>48,-1 + ASFRA ribbonl_l,>88,-1 + + ASRUN pbwcloud1_as + ASRUN pbwcloud2_as + ASRUN pbwcloud3_as + ASRUN pbwsnd_as + ASSLP 90 + ASFRA plhdcc_l,>4c,1 + ASFRA plhdmm_l,>4d,1 + ASLAB 5 + ASXY 0,>ff,0,1 ;Pan up + ASDSJS1 + ASLAB 20 + ASXY 0,>ff,0,2 + ASDSJS1 + ASLAB 5 + ASXY 0,>ff,0,1 + ASDSJS1 + + ASANI LBOW2,>54 + ASANI WRISTBND2,>50 + ASANI HAND2,>55 + ASANI GUN2,>51 + ASXY >44,1,-1000,0 ;Put middle strap on screen + ASSLP 4 + ASANI LBOW1,>54 + ASANI WRISTBND1,>50 + ASANI HAND1,>55 + ASANI GUN1,>51 + ASXY >44,1,-1000,0 ;Straps off screen + + ASLAB 40 + ASSND rackgun + ASLAB 2 + ASXY >50,>7,0,1 ;Shake gun + ASXY >56,0,-1000,0 ;Show flame + ASDSJS1 + ASLAB 2 + ASXY >50,>7,0,-1 + ASXY >56,0,1000,0 ;Hide flame + ASDSJS1 + ASDSJ + + ASSLP 30 + ASLAB 5 + ASXY 0,>ff,0,-1 ;Pan down + ASDSJS1 + ASLAB 20 + ASXY 0,>ff,0,-2 + ASDSJS1 + ASLAB 5 + ASXY 0,>ff,0,-1 + ASDSJS1 + + ASSLP 20 + ASANI LBOW2,>54 + ASANI WRISTBND2,>50 + ASANI HAND2,>55 + ASANI GUN2,>51 + ASXY >44,1,1000,0 ;Middle strap on screen + ASSLP 4 + ASANI LBOW3,>54 + ASANI WRISTBND3,>50 + ASANI HAND3,>55 + ASANI GUN3,>51 + ASXY >44,1,1000,0 ;1st strap on screen + ASADDW -1,animscnt + ASEND + + +pbwcloud1_as + ASLAB 4 + ASLAB 188 + ASXY >10,0,1,0 + ASSLP 4 + ASDSJ + ASXY >10,0,-188,0 + ASDSJ + ASEND +pbwcloud2_as + ASLAB 4 + ASLAB 188 + ASXY >11,0,1,0 + ASSLP 5 + ASDSJ + ASXY >11,0,-188,0 + ASDSJ + ASEND +pbwcloud3_as + ASLAB 4 + ASLAB 188 + ASXY >12,0,1,0 + ASSLP 6 + ASDSJ + ASXY >12,0,-188,0 + ASDSJ + ASEND + + +pbwsnd_as ;Sounds + ASSLP 130 + ASSND shout + ASSLP 170 + ASSND gigle1 + ASEND + + +CLY .equ 142 + +plyrbgnew_t ;X,Y,img name,Z,flags,oid + + ASITEMN 12,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 + ASITEMN 200,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 + ASITEMN 388,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 + ASITEMN 12,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 + ASITEMN 200,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 + ASITEMN 388,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 + ASITEMN -178,20,CLOUD,23,DMAWNZ,>12 + ASITEMN 10,20,CLOUD,23,DMAWNZ,>12 + ASITEMN 198,20,CLOUD,23,DMAWNZ,>12 + ASITEMN 10,CLY,CLIFF3A,30,DMAWNZ,8 + ASITEMN 128,CLY,CLIFF3A,30,DMAWNZ+M_FLIPH,8 + ASITEMN 129,CLY+6,CLIFF2A,30,DMAWNZ,8 + ASITEMN 186,CLY-1,CLIFF3A,30,DMAWNZ,8 + ASITEMN 304,CLY-1,CLIFF3A,30,DMAWNZ+M_FLIPH,8 + ASITEMN 355,CLY+7,CLIFF2A,30,DMAWNZ+M_FLIPH,8 + ASITEMN 356,CLY+1,CLIFF3A,30,DMAWNZ,8 + .word -1000 + +P1X .equ 120 +P1Y .equ 23 +P1LX .equ 70 +P1LY .equ 30 +P2X .equ 260 +P2Y .equ 23 +P2LX .equ 305 +P2LY .equ 30 + +plyr1wnew_t + ASITEMN P1X,P1Y,CCHED1,51,DMAWNZ,>4c + ASITEMN P1X,P1Y,RIB1,45,DMAWNZ,>48 + ASITEMN P1X,P1Y,BDBOD1,50,DMAWNZ,>40 + ASITEMN P1X,P1Y,BDBOD2,50,DMAWNZ,>40 + ASITEMN P1X,P1Y,RTARMBND,51,DMAWNZ,>40 + ASITEMN P1X,P1Y,RTLBOW1,52,DMAWNZ,>40 + ASITEMN P1X,P1Y,RTWRISTBND,53,DMAWNZ,>40 + ASITEMN P1X,P1Y,RTHAND1,53,DMAWNZ,>40 + ASITEMN P1X,P1Y,LFTARMBND,52,DMAWNZ,>40 + ASITEMN P1X,P1Y,LBOW3,51,DMAWNZ,>54 + ASITEMN P1X,P1Y,WRISTBND3,52,DMAWNZ,>50 + ASITEMN P1X,P1Y,HAND3,54,DMAWNZ,>55 + ASITEMN P1X,P1Y,GUN3,53,DMAWNZ,>51 + ASITEMN P1X,P1Y,STRAP,51,DMAWNZ,>44 + ASITEMN P1X+1000,P1Y,STRAPA,51,DMAWNZ,>45 + ASITEMN P1X+1054,P1Y-33,T72BLAST1,55,DMAWNZ+M_FLIPV,>56 + ASITEMN P1X+2054,P1Y-33,T72BLAST2,55,DMAWNZ+M_FLIPV,>56 + .word -1000 + +plyr2wnew_t + ASITEMN P2X,P2Y,MMHED1,51,DMAWNZ+M_FLIPH,>4d + ASITEMN P2X,P2Y-5,RIB1,45,DMAWNZ,>48 + ASITEMN P2X,P2Y,BDBOD1,50,DMAWNZ+M_FLIPH,>41 + ASITEMN P2X,P2Y,BDBOD2,50,DMAWNZ+M_FLIPH,>42 + ASITEMN P2X,P2Y,RTARMBND,51,DMAWNZ+M_FLIPH,>40 + ASITEMN P2X,P2Y,RTLBOW1,52,DMAWNZ+M_FLIPH,>41 + ASITEMN P2X,P2Y,RTWRISTBND,53,DMAWNZ+M_FLIPH,>40 + ASITEMN P2X,P2Y,RTHAND1,53,DMAWNZ+M_FLIPH,>41 + ASITEMN P2X,P2Y,LFTARMBND,52,DMAWNZ+M_FLIPH,>40 + ASITEMN P2X,P2Y,LBOW3,51,DMAWNZ+M_FLIPH,>54 + ASITEMN P2X,P2Y,WRISTBND3,52,DMAWNZ+M_FLIPH,>50 + ASITEMN P2X,P2Y,HAND3,54,DMAWNZ+M_FLIPH,>55 + ASITEMN P2X,P2Y,GUN3,53,DMAWNZ+M_FLIPH,>51 + ASITEMN P2X,P2Y,STRAP,51,DMAWNZ+M_FLIPH,>44 + ASITEMN P2X+1000,P2Y,STRAPA,51,DMAWNZ+M_FLIPH,>45 + ASITEMN P2X+945,P2Y-33,T72BLAST1,55,DMAWNZ+M_FLIPV,>56 + ASITEMN P2X+1945,P2Y-33,T72BLAST2,55,DMAWNZ+M_FLIPV,>56 + .word -1000 + +plyr1lnew_t + ASITEMN P1LX,P1LY,SMHEAD1,40,DMAWNZ+M_FLIPH,>80 + ASITEMN P1LX-10,P1LY,LILRIB1,35,DMAWNZ,>88 + ASITEMN P1LX,P1LY,SMBOD1,40,DMAWNZ+M_FLIPH,>81 + ASITEMN P1LX,P1LY,SMBOD2,40,DMAWNZ+M_FLIPH,>82 + ASITEMN P1LX,P1LY,SMARMBND,41,DMAWNZ+M_FLIPH,>80 + ASITEMN P1LX,P1LY,SMWRISTS,41,DMAWNZ+M_FLIPH,>80 + .word -1000 + +plyr2lnew_t + ASITEMN P2LX,P2LY,SMHEAD2,40,DMAWNZ,>80 + ASITEMN P2LX-1,P2LY-3,LILRIB1,35,DMAWNZ,>88 + ASITEMN P2LX,P2LY,SMBOD1,40,DMAWNZ,>81 + ASITEMN P2LX,P2LY,SMBOD2,40,DMAWNZ,>82 + ASITEMN P2LX,P2LY,SMARMBND,41,DMAWNZ,>80 + ASITEMN P2LX,P2LY,SMWRISTS,41,DMAWNZ,>80 + .word -1000 + + +ribbonb_l + LW RIB1,4 + LW RIB2,4 + LW RIB3,4 + LW RIB4,4 + LWL0 RIB5,4 + +ribbonl_l + LW LILRIB1,3 + LW LILRIB2,4 + LW LILRIB3,3 + LW LILRIB4,4 + LWL0 LILRIB5,4 + +plhdcc_l + LW CCHED1,30 + LW CCHED2,8 + LW CCHED3,8 + LW CCHED4,60 + LW CCHED3,5 + LW CCHED2,5 + LW CCHED1,70 + LW CCHED5,5 + LWL0 CCHED6,15 + +plhdmm_l + LW MMHED1,30 + LW MMHED2,8 + LW MMHED3,8 + LW MMHED4,60 + LW MMHED3,5 + LW MMHED2,5 + LW MMHED1,70 + LW MMHED5,5 + LWL0 MMHED6,15 + +plbw1txt_as + ASSLP 140 + ASNEW plbw1balloon_t + ASTXTR plbw1ltxt_t + ASJMP plbw280 + +plbw2txt_as + ASSLP 140 + ASNEW plbw2balloon_t + ASTXTR plbw2ltxt_t +plbw280 ASSLP 140 + ASDEL 2 + ASTXTK + ASEND + +plbw1balloon_t + ASITEMN P1LX+0,P1LY+8-20,BLLN1,46,DMAWNZ,2 + ASITEMN P1LX+20,P1LY+8-20,BLLN2,46,DMAWNZ,2 + ASITEMN P1LX+40,P1LY+8-20,BLLN2,46,DMAWNZ,2 + ASITEMN P1LX+80,P1LY+8-20,BLLN1,46,DMAWNZ+M_FLIPH,2 + ASITEMN P1LX+40,P1LY+40-20,BOON2B,47,DMAWNZ+M_FLIPH,2 + .word -1000 + +plbw2balloon_t + ASITEMN P2LX-80,P2LY+8-20,BLLN1,46,DMAWNZ,2 + ASITEMN P2LX-60,P2LY+8-20,BLLN2,46,DMAWNZ,2 + ASITEMN P2LX-40,P2LY+8-20,BLLN2,46,DMAWNZ,2 + ASITEMN P2LX+0,P2LY+8-20,BLLN1,46,DMAWNZ+M_FLIPH,2 + ASITEMN P2LX-40,P2LY+40-20,BOON2B,47,DMAWNZ,2 + .word -1000 + +plbw1ltxt_t ;Lost + .word 10 + .long plbw1l1_st,plbw1l2_st,plbw1l3_st,plbw1l4_st + .long plbw1l5_st,plbw1l6_st,plbw1l7_st + .long plbw1l8_st,plbw1l9_st,plbw1l10_st +plbw1l1_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I SUCK AT" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"THIS GAME" + .word -1 +plbw1l2_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I WILL" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"FEAST NOW" + .word -1 +plbw1l3_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I NEED" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"MORE CASH." + .word -1 +plbw1l4_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"HE IS A" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"DOG" + .word -1 +plbw1l5_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"PLAYER 2" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"IS A JERK" + .word -1 +plbw1l6_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"THAT SCUM" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"CHEATED" + .word -1 +plbw1l7_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"HOW DOES" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"HE DO IT?" + .word -1 +plbw1l8_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"PUNCH" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"PLAYER 2" + .word -1 +plbw1l9_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I NEED" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"A DRINK..." + .word -1 +plbw1l10_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I WANT MY" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"MOMMY" + .word -1 +plbw1l11_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I SWEAT" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"LIKE A PIG" + .word -1 + +plbw2ltxt_t ;Lost + .word 10 + .long plbw2l1_st,plbw2l2_st,plbw2l3_st,plbw2l4_st + .long plbw2l5_st,plbw2l6_st,plbw2l7_st + .long plbw2l8_st,plbw2l9_st,plbw2l10_st +plbw2l1_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"PLAYER 1" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"IS A DORK" + .word -1 +plbw2l2_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"THAT BOY" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"IS GOOD..." + .word -1 +plbw2l3_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"HOW CAN I" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"BEAT HIM?" + .word -1 +plbw2l4_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"I NEED" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"MUSCLES" + .word -1 +plbw2l5_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"PLAYER 1" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"WAS LUCKY" + .word -1 +plbw2l6_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"THAT GUY'S" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"A BIG JERK" + .word -1 +plbw2l7_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"I SUCK AT" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"ALL GAMES" + .word -1 +plbw2l8_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"I CAN'T" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"BEAT HIM" + .word -1 +plbw2l9_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"I CAN" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"PLAY PONG" + .word -1 +plbw2l10_st + XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"I SUCK" + XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"BIG TIME" + .word -1 +plbw2l11_st + XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I SUCK AT" + XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"THIS GAME" + .word -1 + + + + + .endif + + + + + + +******************************** +******************************** +* Extra junk!!! + + NOTINUSE + +******************************** +* Calls DO_RACKUP + + .ref KILALL + + SUBRP rackcaller + +rc10 SLEEPK 30 + move @SLDEBUG,a0 + btst 0,a0 + jrz rc10 + + + calla KILBGND + clr a0 + clr a1 + calla KILALL + clr a0 + clr a1 + calla KILOBJ + clr a0 + move a0,@WORLDTLX+16 + movi >35b,a0 + move a0,@WORLDTLY+16 + jruc DO_RACKUP + + + + movi statspal,a0 ;>Cycle color loop + movk 31,a1 + clr a2 +rp45 move a2,*a0+ + addk 16,a2 + dsj a1,rp45 + + movi 60*4,a8 + clr a9 + clr a10 + +rp50 move @PCNT,a0 + sll 32-2,a0 + srl 32-2,a0 + jrnz rp70 ;Skip cycle + + movi 31*32*32+ 31*32+ 1,a0 + movi colorbuf,a1 + move a0,*a1+ ;Set 1st color + movi statspal,a2 + movk 30,a4 +rp55 move *a2,a3 ;Get color # + addk 16,a3 + movi statscolor_t,a0 + add a3,a0 + move *a0(16),a5 ;Next is end? + jrge rp60 + clr a3 ;Restart +rp60 move *a0+,*a1+ + move a3,*a2+ + dsj a4,rp55 + + callr setpal0 + +rp70 SLEEPK 1 ;Sleep 4?? + dsj a8,rp50 + + +******************************** +* Set palette 0 from buffer + + .bss colorbuf ,16*31 ;31 Color buffer + + SUBRP setpal0 + + PUSH a1,a2 + movi colorbuf,a0 ;*Color + movk 1,a1 ;Palette 0, Color 1 + movk 31,a2 ;# Colors + calla pal_set + PULL a1,a2 + rets + +******************************** +* Convert BCD to ASCII + + .bss scorebuf ,12*8 ;11 char_s + + SUBRP bcdtoasc ;A0.L=BCD + + PUSH a1,a2,a3 + movi scorebuf+11*8,a1 + clr a2 + movb a2,*a1 + movk 4,a3 +bcd5 dsj a3,bcd10 ;Convert BCD + movk 3,a3 + movi ',',a2 + subk 8,a1 + movb a2,*a1 +bcd10 movk >f,a2 + and a0,a2 + addi '0',a2 + subk 8,a1 + movb a2,*a1 + srl 4,a0 + jrne bcd5 + move a1,a0 + PULL a1,a2,a3 + rets + + +******************************** +* Read joysticks + + SUBRP joy_read + move @SWITCH,a0 + not a0 + rets ;Pass CC + +******************************** + +; movi bonush_st,a0 ;>Rackup items +; movi hostage_l,a1 +; move @P1DATA+THSTGS,a2 +; move @P2DATA+THSTGS,a3 +; movk 5,a4 +; JSRP bonus_showrack +; +; movi bonusf_st,a0 +; movi flag_l,a1 +; move @P1DATA+TFLAGS,a2 +; move @P2DATA+TFLAGS,a3 +; movk 6,a4 +; JSRP bonus_showrack +; +; movi bonusg_st,a0 +; movi gems_l,a1 +; move @P1DATA+CASHCNT,a2 +; move @P2DATA+CASHCNT,a3 +; movk 3,a4 +; JSRP bonus_showrack + + + +******************************** +* Do a bonus rack + + APTRPD BONUSLP,0 ;*Bonus anim list + WORDPD BONUSC1,2 ;Play 1 # items + WORDPD BONUSC2,3 ;Play 2 ^ + WORDPD BONUSPT,4 ;Points per item + + + SUBRP bonus_showrack ;A0=*XY text, A1=*Anim list, A2=1Cnt, A3=2Cnt + ;A4=Points per item + + move @PSTATUS,a8 + btst 0,a8 + jrnz bsr20 + clr a2 +bsr20 btst 1,a8 + jrnz bsr25 + clr a3 +bsr25 + move a1,*a13(BONUSLP),L + move a2,*a13(BONUSC1) + move a3,*a13(BONUSC2) + move a4,*a13(BONUSPT) + + calla prt0_xy + + movi racksup,a0 + calla snd_play1 + + movk 10,a0 + move a0,@boanimdeath1 + move a0,@boanimdeath2 + + movi hostxy_t,a8 ;A8=*Next XY + clr a9 ;A9=Play1 cnt + clr a10 ;A10=Play2 cnt + clr a11 ;A11=P1/2 Death delay bits + + +bsr40 move *a13(BONUSC1),a0 + cmp a0,a9 + jrlo bsr70 ;Cnt up? + move @boanimdeath1,a0 + jrle bsr90 + btst 0,a11 + jrnz bsr60 + addk 1,a11 ;Set bit 0 + PUSH a0,a8,a9 + move a13,a8 + clr a9 + CREATE0 bonus_flashwinblk + PULL a0,a8,a9 + addk 14,a0 ;Add delay +bsr60 subk 1,a0 + move a0,@boanimdeath1 + jruc bsr90 + +bsr70 addk 1,a9 + move @P1DATA+PSCORE,a0,L + move *a13(BONUSPT),a1 + add a1,a0 ;Add bonus + move a0,@P1DATA+PSCORE,L + movi rack1it,a0 + calla snd_play1 + move *a8,a1 ;Get X + jrn bsr90 + PUSH a9,a10,a11 + move *a13(BONUSLP),a9,L + clr a10 + movi boanimdeath1,a11 + CREATE0 bonus_anim + PULL a9,a10,a11 +bsr90 + move *a13(BONUSC2),a0 + cmp a0,a10 + jrlo bsr120 + move @boanimdeath2,a0 + jrle bsr150 + btst 1,a11 + jrnz bsr100 + addk 2,a11 ;Set bit 1 + PUSH a0,a8,a9 + move a13,a8 + movk 1,a9 + CREATE0 bonus_flashwinblk + PULL a0,a8,a9 + addk 14,a0 ;Add delay +bsr100 subk 1,a0 + move a0,@boanimdeath2 + jruc bsr150 + +bsr120 addk 1,a10 + move @P2DATA+PSCORE,a0,L + move *a13(BONUSPT),a1 + add a1,a0 ;Add bonus + move a0,@P2DATA+PSCORE,L + movi rack1it,a0 + calla snd_play1 + move *a8,a1 ;Get X + jrn bsr150 + PUSH a9,a10,a11 + move *a13(BONUSLP),a9,L + movi 184,a10 ;X offset + movi boanimdeath2,a11 + CREATE0 bonus_anim + PULL a9,a10,a11 + +bsr150 + move *a8,a0 + jrn bsr180 + addk 32,a8 ;Next XY +bsr180 movk 3,a0 + callr sleep_var + move @boanimdeath1,a0 ;Both done? + jrgt bsr40 + move @boanimdeath2,a0 + jrgt bsr40 + + movi kilfgnd,a0 + calla snd_play1 + + calla ERASE_TXT + + RETP + +hostxy_t + .word 30,45, 60,45, 90,45, 120,45, 150,45 + .word 45,65, 75,65, 105,65, 135,65 + .word 30,85, 60,85, 90,85, 120,85, 150,85 + .word 45,105, 75,105, 105,105, 135,105 + .word -1 + + + +******************************** +* Flash other players blocks if he won + + SUBRP bonus_flashwinblk ;A8=*Creators process, A9=P1 or P2 (0-1) + + move *a8(BONUSC1),a1 + move *a8(BONUSC2),a2 + move @WORLDTLX+16,a10 + move a9,a9 + jrnz bfwb70 + SWAP a1,a2 + addi 190,a10 ;A10=Min X of tiles +bfwb70 cmp a2,a1 + jrlo bfwbx ;Win round? + movi 190,a11 ;A11=X range of tiles + + movk 3,a8 +bfwb80 movi DMACNZ+M_NOCOLL,a3 + callr bonus_flashblk + SLEEPK 2 + movi DMAWNZ+M_NOCOLL,a3 + callr bonus_flashblk + SLEEPK 8 + dsj a8,bfwb80 + +bfwbx DIE + + + SUBRP bonus_flashblk ;A3=OFLAGS, A10=XMin, A11=XWidth + + move @OBJLST,a1,L +bfb20 move *a1(OZPOS),a0 + subi 200,a0 + subk 1,a0 + jrhi bfb30 ;Not 200-201? + move *a1(OXPOS),a0 + sub a10,a0 + cmp a11,a0 + jrhi bfb30 + move a3,*a1(OFLAGS) + movi >909,a0 + move a0,*a1(OCONST) +bfb30 move *a1,a1,L + jrnz bfb20 + rets + + +******************************** +* Animation of a bonus item (Process) + + SUBRP bonus_anim ;A8=*XY, A9=*FRANIM table, A10=X offset + ;A11=*boanimdeath var + move *a8+,a0 ;Get X + move *a8+,a1 ;Get Y + move *a11,a2 + move a2,*a13(PDATA) ;Save death # + addk 1,a2 ;+1 + move a2,*a11 + add a10,a0 + sll 16,a0 + sll 16,a1 + move *a9,a2,L + movi 220,a3 + movi DMAWNZ+M_NOCOLL,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a13(PDATA+16),L +bo40 movk 4,a1 ;Do one, no sleep + JSRP FRANIM + jrnc bo60 + move *a13(PDATA+16),a9,L + jruc bo40 +bo60 move a0,a10 +bo80 SLEEPK 1 + move *a11,a0 ;Get death # + move *a13(PDATA),a1 + cmp a0,a1 + jrgt bo90 + dsj a10,bo80 + jruc bo40 +bo90 move a8,a0 + calla DELOBJ + DIE + + + +******************************** + .endif + + + .end + + \ No newline at end of file diff --git a/SRC/ARC/SCREAM.ASM b/SRC/ARC/SCREAM.ASM new file mode 100644 index 0000000..7fe3bac --- /dev/null +++ b/SRC/ARC/SCREAM.ASM @@ -0,0 +1,29 @@ +scream_snd + movi scrm1_snd,a0 + calla snd_play1 + SLEEP 85 + movi scrm2_snd,a0 + calla snd_play1 + SLEEP 85 + movi scrm3_snd,a0 + calla snd_play1 + SLEEP 85 + movi scrm4_snd,a0 + calla snd_play1 + SLEEP 85 + jruc scream_snd + +;scrm1_snd .word >f898,10,>8144,0 ;Quick cheer +;scrm2_snd .word >fd84,80,>810f,0 ;Long cheer +;scrm3_snd .word >f894,80,>8144,0 ;Long cheer +;scrm4_snd .word >fc84,120,>814e,0 ;Long cheer +;boo1_snd .word >f884,120,>814a,0 ;Boo + +;RJR scrm1_snd .word >f380,10,>810c,0 +scrm1_snd .word >f380,10,>813d,0 + +scrm2_snd .word >f080,10,>814b,0 +scrm3_snd .word >f480,10,>815e,0 +scrm4_snd .word >f180,10,>815f,0 + + \ No newline at end of file diff --git a/SRC/ARC/SHELL.ASM b/SRC/ARC/SHELL.ASM new file mode 100644 index 0000000..54049ad --- /dev/null +++ b/SRC/ARC/SHELL.ASM @@ -0,0 +1,42 @@ +************************************************************** +* +* Owner: Thompson +* +* Software: Daniel Thompson +* Initiated: 11/95 +* +* Modified: Daniel Thompson, 11/16/95 -Started +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 13:49 +************************************************************** + .file "shell.asm" + .title "Assembly-File Shell" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "disp.equ" + .include "macros.hdr" + .include "game.equ" + + +;-------------------- +; Globals defined elsewhere + + +;-------------------- +; Globals defined here + + +;-------------------- +; Code start + + + .end diff --git a/SRC/ARC/UNZIP_ED.ASM b/SRC/ARC/UNZIP_ED.ASM new file mode 100644 index 0000000..a7fe632 --- /dev/null +++ b/SRC/ARC/UNZIP_ED.ASM @@ -0,0 +1,873 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" + + .include "bbvda.tbl" + + +scrn_ptch equ SCRN_PTCH +xpadding equ SCRNXP +dmactrl equ DMACTRL +dmacmap equ DMACMAP +prcslp equ PRCSLP + + +; .include dispequ.asm ;Display proc equates +; .include sysequ.asm +; .include mainequ.asm +; .include macros.hdr +; .include stringh.asm + +; .include mk3zip.tbl + +; .include mk3end.tbl +; .include mk3bio.tbl + +; .include ram.glo + + + .ref syscopy + +BPP .set 3 +RAMBUFSIZ .set (4*1024)*8 ; << BPP +;SCRN_ST .set (170*scrn_ptch)+(150*8) +;PXLS_PR_TIK .set 10000 + +;PAGE1ADR .equ PAGE1YO*512*8 + +page_1_address .set >100000 ; = PAGE1YO*512*8 + +CARYTEST .equ 0 ;1 for Cary's board testing +DEBUGPORT .equ >1d01010 +TUNITDB .equ 0 + + +PTEMP1 .equ p_store1 +PIXPERFRM .set p_store2 + + +RamBuffer .usect "unzip",RAMBUFSIZ + + .bss lengthtree ,256*32 + .bss disttree ,256*32 + .bss minptrtbl ,256*32 + + .def lengthtree + .text + + + +;display_zipped_pic +; move a0,a1 +; sll 5,a0 +; sll 4,a1 +; add a1,a0 +; addi zipped_pics,a0 +; move *a0+,a1,w ; bank ?? +; cmpi 2,a1 +; jrne dzp3 +; +; move @syscopy,a1,w ; ram copy !! +; andi 1111110011111111b,a1 ; clear image bank bits +; ori 0000001000000000b,a1 ; set bank 2 bit +; move a1,@sysctrl,w +; move a1,@syscopy,w ; keep a copy in ram +; jruc dzp9 +; +;dzp3 cmpi 1,a1 +; jrne dzp4 +; +; move @syscopy,a1,w ; ram copy !! +; andi 1111110011111111b,a1 ; clear image bank bits +; ori 0000000100000000b,a1 ; set bank 2 bit +; move a1,@sysctrl,w +; move a1,@syscopy,w ; keep a copy in ram +; jruc dzp9 +; +;dzp4 cmpi 0,a1 +; jrne dzp9 +; +; move @syscopy,a1,w ; ram copy !! +; andi 1111110011111111b,a1 ; clear image bank bits +; move a1,@sysctrl,w +; move a1,@syscopy,w ; keep a copy in ram +; +;dzp9 move *a0,a8,l +; jruc movie_run +; +; +;zipped_pics +; .word 1 +;; .long MK3TITLE ; 0 = title screen +; .long ULT ; 0 = title screen + + +******************************************************* +******************************************************* +******************************************************* + + +******************************* +* Run movie footage (jsrp) +* A8=* compressed picture data +* A9=Mode (0=Normal, 1=x2) +* A10=Screen * for top left of picture +* Trashes scratch, A2-A11,B2-B10 + +movie_run + clr a9 ; always normal !! + + addi xpadding*8,a10 ;+XPad offset + +;******************* + move @pageaddr,a14,l ; what page did we just plot to ?? + cmpi page0adr+xpadding,a14 + jreq p2 +; move @dpage,a14 +; jrnz p2 +;******************* + + addi page_1_address,a10 ;Start in page 1 if page 0 is being displayed +p2 + + +;**************** +; +; stream line coded (ejb) +; +; callr movie_w aitdma +mwait move b13,b13 ;Wait for DMAQ empty + jrgt mwait + move @dmactrl,a14 + jrn mwait +; +;**************** + + callr movie_parsehdr + jrnz error1 + + move b3,a14 ;Height + subk 1,a14 + movi scrn_ptch,a1 + mpys a14,a1 + add a1,a10 ;* to bottom left + + callr movie_getpal + jrz error1 + ;A4= frames + ;A6=X size + ;B3=Y size + ;B4=strtpal + movi blowline,b10 + move a9,a9 + jrz mode0 + movi blowlinex2,b10 +mode0 JSRP movie_unzip + +x0 setf 16,1,0 + setf 32,0,1 + RETP + +error1 + clr a14 + move a14,@DEBUGPORT + + LOCKUP ;7 + jruc x0 + + +******************************* +* Get a movie palette +* A7= of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + +movie_getpal + + move a8,a0 + subk 16,a0 ;Point to colors + +;************* + calla pal_getf +; calla getfpal +;************* + + jrz x3 + + move a7,a1 + sll 4,a1 ;*16 + add a1,a8 + + move a0,b4 + addk 1,a1 ;Clr Z + +x3 rets + + + +******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A4= frames +* >A6/B9=X +* >A7= colors in palette +* >B3=Y +* Trashes scratch + +movie_parsehdr + move a8,a14 + movk 30,a0 ; retries + +;rd + move *a8+,a6 ;X size of frames + move *a8+,a1 ;Y size of frames +; movi 200,a1 + move *a8+,a4 ; of frames + move *a8+,a7 ; of colors + move a1,b3 + move a6,b9 + clr a0 + rets + + + + .sect "UNZIP" + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* frames (1 byte) +* colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + + +******************************* +* Uncompress a tree +* A7=* to tree table +* A8=* to compressed data +* >A0=!0 if error (CC) + +UncompressTree: + + PUSH a4,a5 + + move a7,a5 ;Save start of tree + + clr a4 + PUSH a8 + ;>Determine how many codes of each bit length + setf 8,0,0 + move *a8+,a0 ; compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Constant + clr a6 ;Total number of codes in tree +utr0 + move *a8+,a1 ;( codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;number of codes of this bit length + add a2,a6 ;adjust total + and a3,a1 + addk 1,a1 ;bit length + move a1,a11 + sll 16,a11 + movy a11,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,l + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + + PULL a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ; compressed bytes to describe tree - 1 + addk 1,a0 +chklp move *a8+,a1 + add a1,a2 + dsj a0,chklp + + setf 16,1,0 + + cmp a2,a4 + jrne error3 ;Chksums don't match? + + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a9 ; outer loop count ( entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move a5,a7 ; restore start of tree + movi 06543h,a14 ; current minimum + move a6,b6 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a11 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj b6,utr3 + +; end of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a11 ; set this minimum high. + move a11,*a0+,l ; place translation ptr in MinPtrTbl. + + dsjs a9,utr2 + ;>Compute the codes + clr a11 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength + move a6,a14 ;loop counter +utr4 + move *-a0,a7,l ;translated pointer + add a1,a11 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a11,a5 ;copy of Code in a5 + movk 16,a9 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a9,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a14,utr4 + + clr a0 + +x4 PULL a4,a5 + move a0,a0 + rets + + +error3 + movk 1001b,a14 + move a14,@DEBUGPORT + + LOCKUP ;8 + movk 1,a0 ;Error! + jruc x4 + +******************************** + +SetConstants: + movi lengthtree,b0 + movi disttree,b1 +SetConstX + movi RamBuffer+RAMBUFSIZ-1,a0 ;mask for rambuf ptr + movi RamBuffer,a6 ;used for negative wraparound + movi 0c0c0h,b7 ;for blowing words of + movi dmacmap,b8 +; movi blowline,b10 + rets + +******************************* +* Initialize and run unzip loop (jsrp) +* A4= of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + +movie_unzip + movi lengthtree,b0 + movi disttree,b1 + + movk 10,a5 +ltlp move b0,a7 ;Length Tree + move a8,b2 + callr UncompressTree + jrz ltok ;OK? + move b2,a8 + dsj a5,ltlp + jruc error +ltok + + movk 10,a5 +dtlp move b1,a7 ;Distance Tree + move a8,b2 + callr UncompressTree + jrz dtok ;OK? + move b2,a8 + dsj a5,dtlp + jruc error +dtok + + +debugstrt + + ;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi 1024,a2 ;4K + clr a3 +clrbuf + move a3,*-a1,l + dsj a2,clrbuf + + ;Do some initializing + mpyu b9,b3 + move b3,a11 ;total bytes in frame in a11 + move a11,*a13(PIXPERFRM),l + callr SetConstX + move a6,a9 ;Where to uncompress to + move a9,b3 ;first frame start + clr b5 ;pixel count for Stills only + + +lp5 mmtm a12,a4,a10 + + callr movie_waitdma + +; clr b2 +; move b2,@tick,w ; start tick = 0 + +; cmpi >c000,a11 +; jrlo pic_not_too_big +; move a11,b2 +; movi >4000,a11 +; subi >4000,b2 +; jsrp UncompressFrame +; move b2,a11 +; movk 1,a0 ; 1 tick sleep +; movi toobig3,a14 +; jruc GoToSleep +;toobig3 +; +; move a11,b2 +; movi >4000,a11 +; subi >4000,b2 +; jsrp UncompressFrame +; move b2,a11 +; movk 1,a0 ; 1 tick sleep +; movi toobig4,a14 +; jruc GoToSleep +;toobig4 move b2,a11 +; +; +;pic_not_too_big + + JSRP UncompressFrame + +; ********************************* rev1.1 change + move @f_zipabort,a14,w + jrne uncompress_ok ; yes + mmfm a12,a4,a10 + setf 16,1,0 ; word sign extend + setf 32,1,1 ; long word + RETP +uncompress_ok +; ********************************* rev1.1 change + + clr a0 + move a0,@DEBUGPORT + movk 1,a0 ; 1 tick sleep + movi swappg,a14 + jruc GoToSleep + +swappg mmfm a12,a4,a10 + xori page_1_address,a10 ; Flip to other page + + setf 16,1,0 + move *a13(PIXPERFRM),a14,l ; number of pixels in a frame + add a14,a11 ; adjust by extra pixels done last time + + dsj a4,lp5 ; Loop once for each frame + + callr movie_waitdma + +x5 RETP + +error LOCKUP ;9 + jruc x5 + +******************************** rev1.1 change + +coin_switch_bits .set >1c30000 ; coin switch spots ! + +******************************** rev1.1 change + + +GoToSleep + getst b2 + move a12,b6 + mmtm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + setf 16,1,0 + setf 32,0,1 + move a14,*a13(PTEMP1),l + calla prcslp + + move a12,b6 + mmfm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + callr SetConstants + move *a13(PTEMP1),a14,l + + putst b2 + exgpc a14 ;Return + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + movi >4000,b2 ; watch dog counter + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move b4,*b8,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ; if bit = 1, read 8 bits and copy + + jrz decode_still + setf 8,0,0 + + move *a8+,*a9+ + and a0,a9 + + addk 1,b5 ; pixel count + subk 1,a11 +us1 + cmp b5,b9 ; have we filled a line yet? + jrgt us0 + + call b10 ; Blow Line Routine + +us0 + +;**************** rev1.1 change + setf 32,1,0 ; long word + move @switch+32,a14,w + setf 8,0,0 ; back 2 how it wuz + not a14 + andi coin_switch_bits,a14 ; any coin switches ?? + jrne coin_switch_abort + dec b2 + jrne dont_feed_dog + movi >4000,b2 ; watch dog counter + move b2,@watchdog,w ; feed the watchdog +dont_feed_dog +;**************** rev1.1 change + + move a11,a11 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +;**************** rev1.1 change +coin_switch_abort + setf 16,1,0 + setf 32,0,1 + movk 1,a14 + move a14,@f_zipabort,w ; flag: ABORTED !!! + RETP +;**************** rev1.1 change + + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + move b1,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll BPP,a1 ; turn it into a pointer + + move b0,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a9,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a6,a2 ;copy pointer is now in a2 + + sub a7,a11 ;Adjust total pixel count + move a7,b6 + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a9+ ;>Copy + and a0,a2 + and a0,a9 + dsj a7,copys + + jruc us1 + + +******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc strt +lp6 + addk 1,b6 +strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +lp2 + cmpxy a3,a7 + jrynz lp6 + + cmp a2,a4 + jreq x6 + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc lp2 + +x6 + move b6,a7 + rets ;Result returned in a7 + + + +******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + +blowline + +; setf 32,0,0 + + move a10,a2 ;* screen + + move b3,a1 ;Start of line + move b9,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc by4 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 +by4 +lp7 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + dsj a5,lp7 + + +endblowline + subi scrn_ptch,a10 + move a1,b3 ;save for next frame + sub b9,b5 ;readjust pixels for next line + cmp b9,b5 ;added 6/92. if there are enough pixels + jrge nuther1 ;left to do another line, do it. + + rets + +nuther1 + jruc blowline + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + + +******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +blowlinex2 + move a10,a2 ;* screen + move a10,a3 + addi scrn_ptch,a3 + + move b3,a1 ;start of line + move b9,a5 ;X size + + setf 8,0,0 +lp8 + move *a1+,a14 ;Get 8 bits + move a14,a4 + sll 8,a4 + or a4,a14 + move a14,*a2+,1 ;16 bits + move a14,*a3+,1 + and a0,a1 + dsjs a5,lp8 + + subi scrn_ptch*2,a10 + move a1,b3 ; save for next frame + sub b9,b5 ; readjust pixels for next line + cmp b9,b5 ; added 6/92. if there are enough pixels + jrge nuther2 ; left to do another line, do it. + + rets + +nuther2 + jruc blowlinex2 + +************************************************************************** +* * +* Wait for DMA activity to stop * +* Trashes A14 * +* * +************************************************************************** +movie_waitdma + move b13,b13 ;Wait for DMAQ empty + jrgt movie_waitdma + move @dmactrl,a14 + jrn movie_waitdma + rets + +;********************************************************************** + + + + .end + diff --git a/SRC/ATTRACT.ASM b/SRC/ATTRACT.ASM new file mode 100644 index 0000000..69de37a --- /dev/null +++ b/SRC/ATTRACT.ASM @@ -0,0 +1,7355 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak 8/6/91 - Hiscore display and entry (Total carnage) +* Shawn Liptak 11/9/91 - Title screen +* Shawn Liptak 2/7/92 - Stripped for basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:24 +**************************************************************** + .file "attract.asm" + .title "attract mode" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "link.equ" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "bgndtbl7.asm" + .include "bgndpal7.asm" + .include "bgndtbl7.glo" + + .def COLTAB + .def creditscreen + + .ref tuneend_snd,bounce_snd + .ref tuneq1_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd +;DJT Start +; .ref QSNDRST +;DJT End + +;DJT ref moved down to reference + .ref drw_chicks + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref COLTAB2 + .ref get_all_buttons_down,get_all_buttons_cur2 + .ref fade_up,fade_down + .ref bast7t_ascii,bast8_ascii,bast8t_ascii,bast10_ascii + .ref bast7tcyc_ascii,bast8tcyc_ascii + .ref brush20_ascii,inga16_ascii + .ref brush10_ascii + .ref special_heads + .ref our_heads,our_names + .ref get_opponent_team + .ref winningteam + .ref credits2,credits3 + .ref show_hiscore,WNDWOFF + .ref player1_data,player2_data,player3_data,player4_data + .ref player_names,player_heads +;DJT Start +;DJT .ref removed +;DJT End + .ref GAMSTATE,HALT,KILBGND + .ref process_init + .ref tvpanelon,gndstat + .ref BAKMODS,BGND_UD1,CLR_SCRN + .ref CR_CONTP,P_CONT,CR_STRTP,P_START,WSPEED + .ref WNDWON,CRD_SCRN2,IRQSKYE + .ref pal_clean,pal_getf,dmaq_wait,display_init,AUD1 + .ref GET_ADJ + .ref conttimers + .ref GETHIGH,pal_set,PALFRAM + .ref COLCYC,COLRPRC +;DJT Start +;DJT .refs removed +;DJT End + .ref GET_AUD,DEF_PAGE + .ref PSTATUS,PSTATUS2 + .ref dirqtimer,dirq_wait + .ref dpageflip,dpageflip_off + .ref WIPEOUT + .ref demogame_start + .ref system_savegame,system_restoregame + .ref create_stat_titles + .ref do_scrn_transition + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horz_comb + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref scores + .ref print_string,print_string2,print_string_C,print_string_C2 + .ref message_palette + .ref message_ascii,mess_spacing,mess_objid,mess_cursx,mess_cursy + .ref mess_cursx2,mess_justify,kern_chars,print_string2b + .ref setup_message + .ref message_buffer + .ref dec_to_asc,dec_to_pct + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref print_string_R,print_string_R2 + .ref FADERAM,RNDRNG0 + .ref player_stats +; .ref get_stick_val_cur + .ref new_team_select_screen + .ref get_name_string + .ref bast18_ascii,brush12_ascii +; .ref create_heads + .ref create_names,create_plyrs_name + .ref create_name_backplates + .ref create_title_bar + .ref anim_fire_for_best_plyr + .ref kill_fire_anim + .ref create_player_head_backdrops + .ref create_score_backdrop +;DJT Start +; .ref set_volume_for_amode +;DJT End + .ref team1,team2 + .ref tick_snd + .ref best_plyr_speech + .ref un_wipe_horizontal,wipe_horizontal + .ref mess_line_spacing + .ref CYCLE_TABLE,BSTCYCB_P +; .ref p1taps,p2taps,p3taps,p4taps + .ref result_screen + .ref kp_team1,kp_scores,kp_team2 + .ref SOUNDSUP + .ref STRCNRMO + .ref ADJ_PAGE,RC_BYTEI + .ref RD7FONT + .ref STRLNRMO_1 + .ref STRCNRMO_1 + .ref octopus2 + .ref prt_credits + .ref start_msgs + .ref fix_dropout_msgs + .ref sc_proc + .ref buyin_screen +;DJT Start + + .if TRIVCON + .ref trivia_game + .endif ;TRIVCON + +;DJT End + .ref gmqrtr + .ref start_teams + .ref create_heading2 + .ref flash_bigtxt2 + .ref bast8_2_ascii,hangfnt38_ascii + .ref HANGF_R_P + .ref crwdbed_kill + .ref kill_flsh_txt_proc + .ref change_pal_on_text + .ref plyr_onfire +;DJT Start + .ref BASTC_W_P,B8TCYC_PER +;DJT End + .ref create_player_nubs + .ref create_player_heads + .ref update_player_heads + .ref award_plr_attrib_pts + + .ref pup_showshotper,pup_noassistance + .ref pup_court,pup_aba + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr +;DJT Start + .ref logos,name_sort + .ref BALLBAK1 +;DJT End + .ref city_names_str_tbl + + .ref JEF_MUG + .ref SAL_MUG + .ref TUR_MUG + .ref DAN_MUG + .ref EUG_MUG + .ref JMC_MUG + .ref JEN_MUG + .ref HEY_MUG + .ref WIL_MUG + .ref BAR_MUG + .ref MIN_MUG + .ref KIM_MUG + .ref NEI_MUG + .ref MDOC_MUG + .ref MAR_MUG + .ref JAB_MUG + +;ram + BSSX ENTERON ,16 ;INITIALS BEING ENTERD FLAG + + BSSX hisclong ,16 ;!0=Show hiscore table longer + +;DJT Start +; .bss cycram ,16*2*16 ;Palette cycle mem +;DJT End +;; .bss RAMLST,32*40 ;35 ;IMG PNTRS FOR DELETION WHILE SCROLL + +;RAMLST .bss RAMLST ,8*2*16 ;Temp obj ram + +; +; .bss cycram2 ,8*2*16 ;^ +; .bss cycram3 ,7*2*16 ;^ +; .bss cycram4 ,7*2*16 ;^ +; .bss cycram5 ,7*2*16 ;^ +; .bss cycram6 ,7*2*16 ;^ +; .bss cycram7 ,9*2*16 ;^ + + .bss team_cnts ,32 ;left team cnt, +16=rgt team cnt + .bss stick ,32 ;stick ram for team selection + +;DJT Start + BSSX amodeloop ,16 ;Cntr for when to show design team +;DJT End + .bss otdloop ,16 ;Cntr for when to show outdoor crt + .bss tmnbr ,16 + .bss tmloop ,16 + + + + .text + +******************************** +* Attract mode start up routine (Process) + + +#slp SLEEPK 1 + + SUBR amode_start + +;DJT Start +;BAD!! VERY BAD!! ;let the sound board reset finish up. +;BAD!! VERY BAD!! SLEEPK 8 + + .ref set_game_snd + move @SOUNDSUP,a0 + clr a14 + move a14,@SOUNDSUP + calla set_game_snd + move a0,@SOUNDSUP + +;DJT End + +; clr a3 +; calla SNDSND + + movi ACTIVE,a0 ;>Look for indestructables + jruc #nxt + +#ilp move *a0(PROCID),a14 + jrn #slp ;Found? +#nxt move *a0,a0,L + jrnz #ilp + + calla process_init ;Init process list + + move @FREE,a13,L ;Get 1st free + move *a13,a0,L + move a0,@FREE,L + clr a0 + move a0,*a13,L + move a13,@ACTIVE,L ;Put me on active list + + move a13,a12 + addi PRCSIZ,a12 + + movi AMODE_PID,a0 + move a0,*a13(PROCID) + + movi -1,a0 + move a0,@winningteam + + movk 1,a0 + move a0,@dpageflip + +; move @GAMSTATE,a0 +; jan SUCIDE ;INDIAG? + + movk INAMODE,a0 + move a0,@GAMSTATE + calla COLRPRC + movi AMODE_PID,a1 + movi amode,a7 + calla GETPRC + + clr a0 + move a0,@HALT + move a0,@ENTERON +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps + +;Fall through + +******************************** +* Attract mode loop (Process) + + + SUBRP amode + +#lp + movi AMODE_PID,a0 + move a0,*a13(PROCID) + +;DJT Start +;Temp - non stop gameplay in attract +;; JSRP demogame +;; jruc #lp +;; +;; JSRP show_nba_plyrs +;; JSRP show_designteam +;; +;; .ref found_champ +;; JSRP found_champ +;; +;; .ref show_trophy +;; JSRP show_trophy +;; calla set_volume_for_amode + + JSRP show_title + +; .ref get_all_records +; calla get_all_records + + JSRP new_page + JSRP amode_design + JSRP show_nba_plyrs + JSRP show_hiscore + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP hint_page2 + JSRP show_hiscore + .if TRIVCON + .ref show_prizes + JSRP show_prizes + .endif ;TRIVCON + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + JSRP result_screen + JSRP show_nba_plyrs + JSRP new_page + JSRP show_title + JSRP show_copyright + .if OPERMES + JSRP show_operatormsg + .endif ;OPERMES + JSRP creditscreen + JSRP demogame + SOUND1 tuneend_snd + + move @amodeloop,a0 + inc a0 + move a0,@amodeloop + srl 1,a0 + jrnc #no_aama + JSRP show_aama +#no_aama + move @amodeloop,a0 + andi 3,a0 + subk 2,a0 ;Show on non-zero loop count + jrnz #chknxt + JSRP show_designteam +#chknxt + .if TRIVCON + move @amodeloop,a0 + andi >3f,a0 + jrnz #lp + JSRP trivia_rules + .endif ;TRIVCON +;DJT End + jruc #lp + + + .def pObj + .bss pObj,32 + + +;DJT Start +#**************************************************************** +* Attract design player screen + + .ref design_player_proc_amode,done_creating + .ref get_all_records,sort_wins + BSSX stick_amode_mkplr,16 + +amode_design + + calla WIPEOUT + movk 1,a0 + move a0,@dpageflip + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP + + movk 1,a0 + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc_amode + + movi 2*TSEC,a11 + movi #stick_t,a8 +#lp + move *a8+,a10 + jrn #xb + move *a8+,a0 +#lp1a + move a0,@stick_amode_mkplr +#lp1 + SLEEPK 1 + move a11,a11 + jrnz #nob + + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + subk 1,a11 +#nob1 + clr a0 + dsj a10,#lp1a + jruc #lp + +#xb + clr a0 + move a0,@stick_amode_mkplr + + movi CYCPID,A0 + calla KIL1C + calla pal_clean + + .asg 16,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 tuneend_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + calla WIPEOUT + RETP + +#stick_t + .word 110,0000000b + .word 8, 0000010b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0000010b + .word 25, 0010000b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000100b + .word 8, 0000100b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0000001b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000010b + .word 8, 0000010b + .word 70, 0010000b + + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 25, 0010000b + .word 8, 0001000b + .word 8, 0001000b + .word 25, 0010000b + .word 8, 0000010b + .word 8, 0000100b + .word 140,0010000b + + .word 50, 0010000b + .word 40, 0000010b + .word 70, 0010000b + + .word 30, 0000100b + .word 60, 0000100b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 30, 0001000b + .word 60, 0001000b + .word 30, 0000100b + .word 30, 0000100b + .word 70, 0000100b + .word 40, 0010000b + + .word 20, 0000010b + .word 40, 0000010b + .word 70, 0010000b + + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 40, 0001000b + .word 20, 0000100b + .word 20, 0000100b + .word 40, 0000100b + .word 15, 0000010b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0001000b + .word 40, 0001000b + .word 25, 0000010b + .word 20, 0000100b + .word 40, 0000100b + .word 25, 0000010b + .word 20, 0001000b + .word 20, 0001000b + .word 80, 0001000b + .word 40, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 50, 0000100b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 50, 0000100b + .word 15, 0000010b + .word 15, 0000010b + .word 100,0000100b + .word 50, 0010000b + + .word 40, 0000010b + .word 60, 0010000b + + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 25, 0000010b + .word 40, 0001000b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 50, 0010000b + + .word 20, 0000001b + .word 20, 0000001b + .word 40, 0000001b + .word 60, 0010000b + + .word 15, 0000001b + .word 40, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 15, 0000001b + .word 50, 0000001b + .word 40, 0010000b + + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 15, 0000010b + .word 80, 0000010b + + .word -1 + +;DJT End + +#**************************************************************** +* Title screen + +show_title + + calla display_blank + calla WIPEOUT + +;DJT Start +; .bss junk,140*16 ;quick rndper loop for hotspot +; +; movi junk,a8,L +; movi 140,a9 +;#llpp +; SLEEPK 1 +; movk 20,a0 +; calla RNDRNG0 +; move a0,*a8+,W +; dsj a9,#llpp +; jruc $ +; +;DJT End + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi title_scr_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram2,a9 +; movi [21,27],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram3,a9 +; movi [28,34],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram4,a9 +; movi [35,41],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram5,a9 +; movi [42,48],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram6,a9 +; movi [49,55],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi P_STATIC,a8 +; movi cycram7,a9 +; movi [56,63],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC + + + movi 6*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;DJT Start + movi CYCPID,A0 + calla KIL1C + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + calla WIPEOUT + RETP + +title_scr_mod + .long maximBMOD + .word 0,0 + .long 0 +; .long hangtimeBMOD +; .word 0,0 +; .long 0 +;DJT End + + +ttl_setscl + move *a8(OIMG),a2,L + movi [>100,0],a3 + clr a14 + movx a10,a14 + divu a14,a3 +; move *a2(IANIOFFX),a1 + movi -106,a1 + mpys a3,a1 + sra 16,a1 + addi 200,a1 ;X base + move a1,*a8(OXPOS) +; move *a2(IANIOFFY),a1 + movi -98,a1 + mpys a3,a1 + sra 16,a1 + addi 124,a1 ;Y base + move a1,*a8(OYPOS) + move a10,*a8(ODATA_p),L ;Set scale value + rets + + +#**************************************************************** +* Show an operator message if one has been entered + +;FIX!!! +;DJT Start + .if OPERMES +;DJT End + + STRUCTPD + WORD som_string + + + SUBR show_operatormsg + + + calla ADJ_PAGE + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 +#cmlp + calla RC_BYTEI + jrnz #msg + addi CMESS_LINE_SIZE,a7 + dsj a2,#cmlp + jruc #x +#msg + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + move a0,@DISPLAYON + calla display_2dsclstarmodeon + + movk 10,a0 + move a0,@WORLDTLX+16 + movi 1000,a0 + move a0,@WORLDTLY+16 + + SLEEPK 2 + + calla display_unblank + + CREATE0 showdt_scl + + + movk CMESS_LINES,a2 ;>Check for a message + movi CUSTOM_MESSAGE,a7 + movi [50,200],a9 +#prtlp + PUSHP a2,a7 + + calla ADJ_PAGE + + move a13,a2 + addi som_string,a2 +#getlp calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + move a0,a0 + jrnz #getlp + + + movi INGA_Y_P,a0 + calla pal_getf + move a0,a6 + + move a13,a8 + addi som_string,a8 + clr a0 + movk 1,a10 + movi inga16_asc_tbl,a11 + PUSHP a9 + JSRP STRCNRMO_1 + PULLP a9 + + movi OBJLST,a14 + +#olp move *a14,a14,L ;A14=*Next + jrz #oend + move *a14(ODATA_p),a0,L + jrnz #olp + movi [>320,>320],a1 + move a1,*a14(ODATA_p),L + jruc #olp +#oend + + PUSHP a6 + SLEEPK 30 + PULLP a6 + PULLP a2,a7 +#nxt + addi [45,0],a9 + + addi CMESS_LINE_SIZE,a7 + dsj a2,#prtlp + + + + SLEEP TSEC*6 + +; clr a0 +; movi -1,a1 +; calla obj_delc +; +; movi #thanx_t,a8 +; JSRP prt_dt +; +; SLEEP TSEC*2+20 + + JSRP scrn_scaleout + + calla WIPEOUT + +#x RETP +;End of FIX +;DJT Start + .endif ;OPERMES +;DJT End + +#* + + SUBRP show_copyright + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi our_legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi our_legal_msg_str,a4 + calla print_string_C2 + + movi [0a8h,0],a0 + movi [03bh,0],a1 + .ref hang_logo + movi hang_logo,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 1*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + movi CLSDEAD,a0 + calla obj_del1c + movi TYPTEXT,a0 + calla obj_del1c + + movi legal_msg_setup,a2 + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi legal_msg_str,a4 + calla print_string_C2 + + movi [200,0],a0 + movi [107,0],a1 + .ref OFFNBA + movi OFFNBA,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a10 + movk 8,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +our_legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,140,BAST_W_P,0 + + +our_legal_msg_str + .string "(C) 1996 MIDWAY MANUFACTURING COMPANY",1 + .string "ALL RIGHTS RESERVED",0 + .even + +legal_msg_setup + PRINT_STR bast8t_ascii,4,0,200,132,BAST_W_P,0 + +legal_msg_str + .string "THE NBA AND INDIVIDUAL NBA TEAM IDENTIFICATIONS USED",1 + .string "ON OR IN THIS PRODUCT ARE TRADEMARKS, COPYRIGHTED",1 + .string "DESIGNS AND OTHER FORMS OF INTELLECTUAL PROPERTY OF",1 + .string "NBA PROPERTIES, INC. AND THE RESPECTIVE TEAMS AND MAY",1 + .string "NOT BE USED, IN WHOLE OR IN PART, WITHOUT THE PRIOR",1 + .string "WRITTEN CONSENT OF NBA PROPERTIES, INC.",1 + .string "(C) 1996 NBA PROPERTIES, INC.",1 + .string "ALL RIGHTS RESERVED",1 + .string "ALL NBA TEAM ROSTERS ACCURATE AS OF 11/1/96",0 + .even + +;DJT Start + +#**************************************************************** + + SUBRP show_aama + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 2 + + movk 31,a0 + move a0,@mess_line_spacing + + movi aama_title_setup,a2,L + calla setup_message + movi aama_title_str,a4,L + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi aama_rating_setup,a2,L + calla setup_message + movi aama_rating_str,a4,L + calla print_string_C2 + + .ref HTSTAT03 + movi [200-5-44-88,0],a0 + movi [78,0],a1 + movi HTSTAT03,a2 ;* image + movi 20000,a3 + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi [200-5-44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + movi [200-5+44,0],a0 + movi [78,0],a1 + calla BEGINOBJ2 + +; clr a10 +; movk 8,a11 +; CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 4*TSEC,a10 +#lp0 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob0 + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb0 +#nob0 + dsj a10,#lp0 +#xb0 + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +aama_title_setup + PRINT_STR bast18_ascii,11,0,200,56,BSTGYG_P,0 + +aama_rating_setup + PRINT_STR bast10_ascii,6,0,200,110,BAST_W_P,0 + +aama_title_str + .string "AAMA Parental Advisory",1 + .string "K-A RATING",0 + +aama_rating_str + .string "Suitable for All Ages",1,1 + .string "The content of this game is",1 + .string "appropriate for players of",1 + .string "all ages.",0 + .even + + +#**************************************************************** +* Show design team names and messages + + SUBR show_designteam + + calla display_blank + calla WIPEOUT + + movk 1,a0 + move a0,@dpageflip + +; move a0,@DISPLAYON +; calla display_2dsclstarmodeon +; movk 10,a0 +; move a0,@WORLDTLX+16 +; movi 1000,a0 +; move a0,@WORLDTLY+16 + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + move *a13(PROCID),a0 + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #notocto + + .ref READ_DIP + calla READ_DIP ;Read the dipswitches + btst 5,a0 ;Is octopus bypass switch on? + jrnz #notocto ; br=don't do audit/volume octopus + CREATE0 ck_octopus2 +#notocto + + movi design_tm_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + +;design team + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #design_tm_str,a4 + calla print_string_C2 + + callr create_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 2 + calla display_unblank + + move *a13(PROCID),a0 + cmpi GRANDCHAMP_PID,a0 + jrne #notgc + movk INAMODE,a0 + move a0,@GAMSTATE +#notgc + movi TSEC*6+12,a10 + JSRP time_delay ;SLEEP 30 + + move *a13(PROCID),a0 + cmpi DIAG_PID,a0 + jreq #sclout ;Called from octopuss? + +;additional design + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #addition_desgn_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #addition_desgn_str_setup2,a2,L + calla setup_message + movi #other_gme_dsgnrs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;sound & music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #snd_music_str,a4 + calla print_string_C2 + + movi #snd_desgn_str_setup2,a2,L + calla setup_message + movi #snd_dudes_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4-30+11,a10 + JSRP time_delay ;SLEEP 30 + +;music + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #music_str,a4 + calla print_string_C2 + + movi #song_names_str_setup,a2,L + calla setup_message + movi #song_names_str,a4 + calla print_string_C2 + + movk 17,a0 + move a0,@mess_line_spacing + + movi #snd_desgn_str_setup3,a2,L + calla setup_message + movi #snd_dudes_str2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;actors + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #actors_str,a4 + calla print_string_C2 + + callr create_actor_mugs_and_names + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;hardware support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #hardware_str,a4 + calla print_string_C2 + + movk 22,a0 + move a0,@mess_line_spacing + + movi #hardware_str_setup2,a2,L + calla setup_message + movi #hardware_people_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;nba support + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #nba_help_str,a4 + calla print_string_C2 + + movi #nba_help_setup2,a2,L + calla setup_message + movi #nba_dudes_strs,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;sweepstakes + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #sweepstks_str,a4 + calla print_string_C2 + + movi #sponsor_str_setup,a2,L + calla setup_message + movi #sponsor_str,a4 + calla print_string_C2 + movi BSTGYO_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGWWOP,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi BSTGYG_P,a14,L + move a14,@message_palette,L + addk 8,a4 + calla print_string_C2 + movi #sponsor_str_setup2,a2,L + calla setup_message + addk 8,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup3,a2,L + calla setup_message + movi #gme_tstrs_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*3+11,a10 + JSRP time_delay ;SLEEP 30 + +;additional testers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #gme_tester_str2,a4 + calla print_string_C2 + + movi #gme_tsters_str_setup2,a2,L + calla setup_message + movi #gme_tstrs_str2,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + +;special thanks + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #thanks_str,a4 + calla print_string_C2 + + movk 13,a0 + move a0,@mess_line_spacing + + movi #thanks_str_setup2,a2,L + calla setup_message + movi #thanx_you_strs,a4 + calla print_string2 + + movi #thanks_str_setup3,a2,L + calla setup_message + movi #thanx_you_strs2,a4 + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*6+11,a10 + JSRP time_delay ;SLEEP 30 + +;executive producers + + clr a0 + move a0,@DISPLAYON + + clr a0 + movi -1,a1 + calla obj_delc + + movk 1,a0 + calla create_title_bar + + movi #title_str_setup,a2,L + calla setup_message + movi #exec_producers_str,a4 + calla print_string_C2 + + movk 25,a0 + move a0,@mess_line_spacing + + movi #exec_producers_str_setup2,a2,L + calla setup_message + movi #producers_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + movi TSEC*4+11,a10 + JSRP time_delay ;SLEEP 30 + + +#sclout + clr a0 + movi -1,a1 + calla obj_delc + + RETP + + +#title_str_setup + PRINT_STR brush20_ascii,11,0,200,7,BRSHGYGP,0 + + +#addition_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,60,BSTGWWOP,0 + +#snd_desgn_str_setup2 + PRINT_STR bast18_ascii,11,0,200,85,BSTGWWOP,0 + +#snd_desgn_str_setup3 + PRINT_STR bast10_ascii,6,0,30,90,BAST_W_P,0 + +#song_names_str_setup + PRINT_STR bast10_ascii,6,0,200,40,BAST_G_P,0 + +#hardware_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#nba_help_setup2 + PRINT_STR bast18_ascii,11,0,200,100-30,BSTGWWOP,0 + +#sponsor_str_setup + PRINT_STR bast18_ascii,11,0,200,65,BST18T_P,0 + +#sponsor_str_setup2 + PRINT_STR bast10_ascii,11,0,284,152,BAST_Y_P,0 + +#gme_tsters_str_setup2 + PRINT_STR bast18_ascii,11,0,200,45,BSTGWWOP,0 + +#gme_tsters_str_setup3 + PRINT_STR bast18_ascii,11,0,200,100,BSTGWWOP,0 + +#thanks_str_setup2 + PRINT_STR bast10_ascii,5,0,35,52,BAST_W_P,0 + +#thanks_str_setup3 + PRINT_STR bast10_ascii,5,0,225,52,BAST_W_P,0 + +#exec_producers_str_setup2 + PRINT_STR bast18_ascii,11,0,200,75,BSTGWWOP,0 + + +#design_tm_str + .string "DESIGN TEAM:",0 + +#addition_desgn_str + .string "ADDITIONAL DESIGN:",0 + +#snd_music_str + .string "SOUND AND MUSIC:",0 + +#music_str + .string "MUSIC:",0 + +#actors_str + .string "ACTORS:",0 + +#hardware_str + .string "HARDWARE SUPPORT:",0 + +#nba_help_str + .string "NBA SUPPORT:",0 + +#sweepstks_str + .string "MAXIMUM SWEEPSTAKES:",0 + +#gme_tester_str + .string "GAME TESTERS:",0 + +#gme_tester_str2 + .string "ADDITIONAL TESTERS:",0 + +#thanks_str + .string "SPECIAL THANKS:",0 + +#exec_producers_str + .string "EXECUTIVE PRODUCERS:",0 + + .even +;DJT End + + +***************************************************************** +***************************************************************** + SUBRP create_mugs_and_names + + movi #mugs_t,a9,L +cm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #mugs_t_end,a9 + jrlo cm_1 + +;create our names + movi #name_tm_str_setup,a2,L + calla setup_message + + movk 10,a0 + move a0,@mess_line_spacing + + movi #mugs_names_t,a9 +cm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #mugs_names_t_end,a9 + jrlo cm_2 + +;create logo +; movi [170,0],a0 +; movi [108,0],a1 +; movi hang_logo,a2 ;* image +; movi 3000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 + rets + + +#mugs_t + LWW JEF_MUG,35,110 + LWW TUR_MUG,120,110 + LWW SAL_MUG,205,110 + LWW DAN_MUG,290,110 + + LWW EUG_MUG,35,220 + LWW JEN_MUG,120,220 + LWW JMC_MUG,205,220 + LWW HEY_MUG,290,220 +#mugs_t_end + +#mugs_names_t + WWL 65,113,#jeff_j + WWL 153,113,#mark_t + WWL 237,113,#sal_d + WWL 320,113,#dan_t + + WWL 67,223,#eug_g + WWL 152,223,#jen_h + WWL 235,223,#john_c + WWL 320,223,#jon_h +#mugs_names_t_end + + +#name_tm_str_setup + PRINT_STR bast8t_ascii,4,0,200,7,BAST_Y_P,0 + + +#mark_t + .string "MARK",1 + .string "TURMELL",0 +#sal_d + .string "SAL",1 + .string "DIVITA",0 +#jeff_j + .string "JEFF",1 + .string "JOHNSON",0 +#dan_t + .string "DAN",1 + .string "THOMPSON",0 +#eug_g + .string "EUGENE",1 + .string "GEER",0 +#john_c + .string "JOHN",1 + .string "CARLTON",0 +#jen_h + .string "JENNIFER",1 + .string "HEDRICK",0 +#jon_h + .string "JON",1 + .string "HEY",0 + .even + + +***************************************************************** +***************************************************************** + SUBRP create_actor_mugs_and_names + + movi #actor_mugs_t,a9,L +acm_1 + move *a9+,a2,L + move *a9+,a0,W + move *a9+,a1,W + PUSH a0,a1 + sll 16,a0 ;X + sll 16,a1 ;Y + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + PULL a0,a1 + + subk 25,a0 ;26 + sll 16,a0 ;X + subk 10,a1 + sll 16,a1 ;Y + + movi MUGPLAT,a2 + movi 400,a3 ;z pos + calla BEGINOBJ2 + + cmpi #actor_mugs_t_end,a9 + jrlo acm_1 + +;create names + movi #name_tm_str_setup,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + + movi #actor_names_t,a9,L +acm_2 + move *a9+,a0,W + move a0,@mess_cursx + move *a9+,a0,W + move a0,@mess_cursy + move *a9+,a4,L + calla print_string_C2 + cmpi #actor_names_t_end,a9 + jrlo acm_2 + rets + + +#actor_mugs_t + LWW WIL_MUG, 74,110 + LWW BAR_MUG,159,110 + LWW MIN_MUG,244,110 +; LWW NEI_MUG,290,110 + +; LWW MDOC_MUG,35,220 +; LWW JAB_MUG,120,220 + LWW MAR_MUG,120,220 + LWW KIM_MUG,205,220 +#actor_mugs_t_end + + +#actor_names_t + WWL 104,113,#willy_m + WWL 192,113,#steve_b + WWL 276,113,#minifee +; WWL 320,113,#neil_f + +; WWL 67,223,#mdoc +; WWL 152,223,#jabbal + WWL 152,223,#cherldr1 + WWL 235,223,#cherldr2 +#actor_names_t_end + + +#willy_m + .string "WILLIE",1 + .string "MORRIS JR.",0 +#steve_b + .string "STEVE",1 + .string "BARDO",0 +#minifee + .string "MARCUS",1 + .string "MINIFEE",0 +#mdoc + .string "M.DOC",0 +#jabbal + .string "JABBAL",0 +#neil_f + .string "NEIL",1 + .string "FUNK",0 +#cherldr2 + .string "KIM",1 + .string "KELLER",0 +#cherldr1 + .string "MARY JANE",1 + .string "LEE",0 +;DJT Start + + +#other_gme_dsgnrs + .string "SHAWN LIPTAK",1 + .string "JAMIE RIVETT",1 + .string "PAT FITZGERALD",1 + .string "JOHN ROOT",1 + .string "MARTY MARTINEZ",1 + .string "CARLOS PESINA",1 + .string "NICK ERHLICH",0 + +#snd_dudes_str + .string "JON HEY",1 + .string "KEVIN QUINN",1 + .string "NEIL FUNK",0 + +#song_names_str + .string "'GET UP GET UP'",1 + .string "'HANGTIME - WHATCHA GONNA DO'",0 + .even + +#snd_dudes_str2 + .string "MUSIC PRODUCED BY:",1 + .string " M.DOC OF INDASOUL PRODUCTIONS",1 + .string "SONGS WRITTEN BY: RHYME",1 + .string "RAP BY: RHYME",1 + .string "BACKGROUNDS BY: M.DOC AND BELOW ZERO",1 + .string "VOX ON DANCE TRACK BY: M.DOC",1 + .string "MIX ENGINEER: JOEY 'THE DON' DONATELLO",1 + .string "INDASOUL CONTACT: JABBAR STEVENSON",1 + .string " (312) 280-8449",0 + +#hardware_people_str + .string "MARK LOFFREDO",1 + .string "SHERIDAN OURSLER",1 + .string "PAT COX",1 + .string "AL LASKO",1 + .string "JEFF PETERS",1 + .string "CARY MEDNICK",1 + .string "RAY GAY",1 + .string "STEVE CORREL",1 + .string "JOHN LOWES",0 + +#nba_dudes_strs + .string "GREG LASSEN",1 + .string "JOE AMATI",1 + .string " ",1 + .string "UNITED CENTER",1 + .string "JONATHAN ZIRIN",0 + +#sponsor_str + .string "MAXIMUM",1,0 + .string "NBA HANGTIME",1,0 + .string "SWEEPSTAKES",1 + .string "IS CO-SPONSORED BY",1 + .string "AND",0 + .string "EGM EGM",0 + .string "2",0 + +#gme_tstrs_str + .string "MIKE VINIKOUR",1 + .string "EDDIE FERRIER",0 + +#gme_tstrs_str2 + .string "KEVIN DAY",1 + .string "BUD FLETCHER",1 + .string "ERIC C. WARD",1 + .string "MIKE MALLARD",1 + .string "SEAN JENNINGS",1 + .string "ROB GORSKI",1 +; .string "DIMITRI",1 + .string "ALFRED MONTEGUE",1 + .string "QUIANA LAHORI",1 + .string "MARIUS MATEESCU",0 + +#thanx_you_strs + .string "EUGENE JARVIS",1 + .string "ED BOON",1 + .string "GEORGE PETRO",1 + .string "TONY GOSKIE",1 + .string "JOHN TOBIAS",1 + .string "STEVE BERAN",1 + .string "TODD ALLEN",1 + .string "WARREN DAVIS",1 + .string "RAY KIRKLAND",1 + .string "BETTY PURCELL",1 + .string "DR. AUSMAN",1 + .string "DR. ABOOD",1 + .string "JOSH TSUI",0 + +#thanx_you_strs2 + .string "MIKE LYNCH",1 + .string "JASON SKILES",1 + .string "L.E.D.",1 + .string "JIM GREENE",1 + .string "ART TIANIS",1 + .string "JIM TIANIS",1 + .string "ANDY LYCKE",1 + .string "JOAN FAUX",1 + .string "CHRISTA WOSS",1 + .string "CLAUDIA RIEDENER",1 + .string "FELECIA TURMELL",1 + .string "LAURIE THOMPSON",1 + .string "CHRISTINE JOHNSON",0 + +#producers_str + .string "NEIL NICASTRO",1 + .string "KEN FEDESNA",1 + .string "PAUL DUSSAULT",1 + .string "ROGER SHARPE",0 + + .even + +;DJT End +; .string "MANY INTERNET USERS",0 +; .string "RANDOLPH VANCE",0 +; .string "WILLIAM HENDERSON",0 +; .string "RAY KIRKLAND",0 +; .string "MIKE DAVIDSON",0 +; .string "LEWIS PODLASZEWSKI",0 +; .string "ANDREW PODLASZEWSKI",0 +; .string "SEAN STEWART",0 +; .string "CHRIS JOHNSON",0 +; .string "CHRIS CANIANO",0 +; .string "ERIC HOLMA",0 +; .string "MIKE OVERBY",0 +; .string "CASEY",0 +; .string "VINCE FIELDS",0 +; .string "DAVE EDENZON",0 +; .string "RIC RORSCHACH",0 +; .string "DARYL GREEN",0 +; .string "JERRY CATTELL",0 +; .string "SHAWN PETREN",0 +; .string "CHUCK HOROWITZ",0 +; .string "MACE",0 +; .string "JIM HSU",0 +; .string "JASON DRISKO",0 +; .string "CARL CHAVEZ",0 +; .even + +design_tm_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi bast10_ascii,a11 +; PUSHP a9 +; +; cmpi thanx_t,a8 +; jrge #cn +; +; move *a8+,a0,W +; move a0,@mess_cursx +; move *a8+,a0,W +; move a0,@mess_cursy +; move *a8+,a4,L +; calla print_string_C2 +;; JSRP STRLNRMO_1 +; jruc #cnx +; +;#cn +; move a8,a4 +; calla print_string_C2 +;; JSRP STRCNRMO_1 +;#cnx +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [30,0],a9 +; cmpi thanx_t,a8 +; jrge #cn2 +; addi [0,15],a9 +;#cn2 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 20 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +;#******************************* +;* A8=*Data +; +; SUBRP prt_dt2 +; jruc #nxt +; +;#prtlp +; cmpi -1,a0 +; jrne #nopal +; +; move *a8+,a0,L ;>Change pal +; calla pal_getf +; move a0,a6 +; jruc #nxt +; +;#nopal +; cmpi -2,a0 ;>New XY +; jrne #noxy +; move *a8+,a9,L +; jruc #nxt +; +;#noxy +; subk 16,a8 +; clr a0 +; movk 1,a10 +; movi brush20_ascii,a11 +; PUSHP a9 +; +; +; JSRP STRLNRMO_1 +;; JSRP STRCNRMO_1 +; PULLP a9 +; +; addk 15,a8 +; srl 4,a8 +; sll 4,a8 +; move *a8+,a2,L +; jrz #noobj ;No object? +; +; move *a8+,a0,L +; PUSH a6,a8 +; +; addxy a9,a0 +; clr a1 +; movy a0,a1 ;Y +; sll 16,a0 ;X +; movi 500,a3 ;Z +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; PULL a6,a8 +;#noobj +; addi [15,0],a9 +; +;; movi OBJLST,a14 +;; +;;#olp move *a14,a14,L ;A14=*Next +;; jrz #oend +;; move *a14(ODATA_p),a0,L +;; jrnz #olp +;; movi [>320,>320],a1 +;; move a1,*a14(ODATA_p),L +;; jruc #olp +;;#oend +; +; PUSHP a6 +; SLEEPK 10 +; PULLP a6 +;#nxt +; move *a8+,a0 +; jrnz #prtlp +; RETP + + +; +; Font table for OPERATOR MESSAGE +; + .def inga16_asc_tbl +inga16_asc_tbl + .long INGA16EXC,INGA16APO,INGA16NUM,INGA16DOL ;!"#$ + .long INGA16PCT,INGA16SPC,INGA16APO,INGA16PRL ;%&'( + .long INGA16PRR,INGA16SPC,INGA16ADD,INGA16COM ;)*+, + .long INGA16SUB,INGA16PER,INGA16SLS ;-./ + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4 + .long INGA16_5,INGA16_6,INGA16_7,INGA16_8,INGA16_9 + .long INGA16COL,INGA16SPC,INGA16SPC,INGA16SPC ;:;<= + .long INGA16SPC,INGA16QUE,INGA16SPC ;>?@ + .long INGA16_A,INGA16_B,INGA16_C,INGA16_D + .long INGA16_E,INGA16_F,INGA16_G,INGA16_H + .long INGA16_I,INGA16_J,INGA16_K,INGA16_L + .long INGA16_M,INGA16_N,INGA16_O,INGA16_P + .long INGA16_Q,INGA16_R,INGA16_S,INGA16_T + .long INGA16_U,INGA16_V,INGA16_W,INGA16_X + .long INGA16_Y,INGA16_Z + .long INGA16SPC,INGA16SPC,INGA16SPC,INGA16END ;[\]^ + .long INGA16DEL,INGA16APO,BAST10SPC ;_` +; .endif +; .def inga16_asc_tbl +;inga16_asc_tbl + + + +#******************************* +* Look at the buttons, read a sequence table, +* and set octopus2 flag if sequence successful + + +ck_octopus2 + + clr a10 + movi butn_lst,a9 + +#lp SLEEPK 1 + + move @SWITCH,a0 + zext a0 + cmpi >ffff,a0 + jrnz #tag1 + clr a11 + jruc #lp + +#tag1 move a11,a11 + jrnz #lp + + inc a11 + + move *a9,a1,W + zext a1 + cmp a0,a1 + jrz #yes + movi butn_lst,a9 + jruc #lp +#yes addk 16,a9 + move *a9,a0 + jrnz #lp + movk 1,a0 + move a0,@octopus2 + + DIE + +butn_lst + +;Buttons required for 2nd octopus: +;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo +;p2turbo,p1turbo,p1turbo,p1turbo,p1turbo + + .word >ffbf,>ffbf,>efff,>efff,>efff,>dfff,>dfff + .word >ffef,>ffdf,>bfff,>bfff,>ffbf,>ffbf,>ffbf,>ffbf,0 + + +;#******************************* +; +;showdt_scl +;#lp +; movi OBJLST,a14 +; +;#olp move *a14,a14,L ;A14=*Next +; jrz #oend +; move *a14(ODATA_p),a0,L +; cmpi [>100,>100],a0 +; jrle #olp +; subi [>10,>10],a0 +; move a0,*a14(ODATA_p),L +; jruc #olp +;#oend +; SLEEPK 1 +; jruc #lp + + +#***************************************************************************** + + .if 0 + + SUBRP drw_love + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi #love_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 4*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + +#love_mod + .long loveBMOD + .word 1ch,14h + .long 0 + + +#***************************************************************************** + + SUBRP drw_school + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 2 + + movi [200,0],a0 + movi [60-26,0],a1 + movi stay,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + clr a10 + movk 16,a11 + CREATE0 fade_up + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + SLEEP 1*TSEC+30 + + movi 3*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 + + RETP + + .endif + + + + + +#*************************************************************** +* Show some gameplay + + SUBRP demogame + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + +;DJT Start + movi -1,a0 + .ref t1ispro,t2ispro + move a0,@t1ispro + move a0,@t2ispro +;DJT End + move a0,@special_heads,L + move a0,@special_heads+20h,L + clr a0 + move a0,@pup_showshotper + move a0,@pup_noassistance + + movk NUM_TEAMS-1,a0 + calla RNDRNG0 +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team1 ;Team controlled by plyrs 1 & 2 + move a0,a8 +#agn movk NUM_TEAMS-1,a0 + calla RNDRNG0 + cmp a0,a8 + jreq #agn +;TEMP!!! +;DJT Start +; movk 19,a0 ;Team # +;DJT End + move a0,@team2 ;Team controlled by plyrs 3 & 4 + +;DJT Start + move @otdloop,a14 + move a14,a0 + addk 1,a0 + cmpi NUM_DEMOPUPS,a0 + jrlo #otd + clr a0 +#otd + move a0,@otdloop + sll 4,a14 + addi demopups,a14,L + move *a14,a14 + + movk 1,a0 + and a14,a0 + move a0,@pup_court + + srl 1,a14 + movk 1,a0 + and a14,a0 + move a14,@pup_aba + + movk 15,a0 +; calla RNDRNG0 + .ref pup_showhotspots + move a0,@pup_showhotspots + + movi player1_data,a2,L + callr demo_cp_rndper + movi player2_data,a2,L + callr demo_cp_rndper + movi player3_data,a2,L + callr demo_cp_rndper + movi player4_data,a2,L + callr demo_cp_rndper + + SOUND1 tuneend_snd + + ADJUST ADJMUSIC ;Get demo sound on/off adj + move a0,@SOUNDSUP +;DJT End + JRNZ NONO1 + CREATE0 sndstrt +NONO1 + + CREATE0 demogame_start + +; CREATE0 drwnbalogo + + SLEEPK 5 + calla update_insert + + SLEEP 3*TSEC + +#loop +;FIX!!! + movi 27*60,a10 +; movi 50*60,a10 +#lp SLEEPK 2 + calla get_all_buttons_cur2 + jrz #nob + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #xb +#nob + dsj a10,#lp +#xb +;2/9/93 +; jruc #loop + + movi CYCPID,a0 + calla KIL1C + calla pal_clean + SLEEPK 1 + + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + + movk 1,a0 + move a0,@dpageflip + + calla COLRPRC ;Init fixed pal 0 and maybe 2nd pal + movi AMODE_PID,a0 + move a0,*a13(PROCID) + RETP + + +sndstrt SLEEP 3*60 + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + addi tunes_t,a0 + move *a0,a0,L + calla snd_play1 + DIE + +tunes_t + .long tuneq1_snd + .long tuneq2_snd + .long tuneq3_snd + .long tuneq4_snd + +;DJT Start + .ref RNDPER + + SUBRP demo_cp_rndper + + clr a0 + movi PR_SIZE/16,a1 +#nhd + move a0,*a2+ + dsj a1,#nhd + subi PR_SIZE,a2 + + movi 140,a0 ;!!! + calla RNDPER + jrlo #ndh0 + + movk NUM_DEMOHEADS-1,a0 + calla RNDRNG0 + sll 4,a0 + addi demoheads,a0,L + move *a0,a0 + move a0,*a2(PR_HEAD_NBR) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_HEIGHT_PTS) + movk 10,a0 ;!!! + calla RNDRNG0 + move a0,*a2(PR_WEIGHT_PTS) + + movk 1,a0 + move a0,*a2(PR_CREATED_PLYR) +#ndh0 + rets + + +;Bit order: 1-ABA 0-Outdoor +demopups + .word 01b,11b,01b,00b,11b,01b,10b +NUM_DEMOPUPS .equ ($-demopups)/16 + +demoheads + .word 0, 1, 3, 5, 6,10,11,13 + .word 16,18,20,22,24,25,26,28 + .word 30 +NUM_DEMOHEADS .equ ($-demoheads)/16 + .word 0,0,0,0 ;Just in case! +;DJT End + +#******************************* + +update_insert + + calla CR_STRTP ;Credits to start + jrlo #x ;No? + movi start,a1 + movi OBJLST,a8 + +#lp move *a8,a8,L + jrz #x ;End? + move *a8(OIMG),a0,L + cmpi insert,a0 + jrne #lp ;No match? + move *a8(OFLAGS),a4 +;DJT Start + btst B_CHARGEN,a4 ;But don't change it if its a chargen name + jrnz #lp +;DJT End + calla ANI + jruc #lp +#x rets + + + +**************************************************************** +* Show credits screen + + SUBRP creditscreen + + calla pal_clean + + movk 1,a10 + JSRP CRD_SCRN2 + movi AMODE_PID,a0 + move a0,*a13(PROCID) +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + + RETP + + + +**************************************************************** +* THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ +* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE +* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED +* AND IT WILL RETURN. +* A1 = RETURN ADDRESS OF CALLING ROUTINE +* A2 = ERROR CODE + +ERRORLOG + MMTM SP,A2,A3,A4,A5,A6,A7 +; SLL 16,A2 +;ERRLOGG ;A8 IS IN A8 +; +; MOVE A13,A7 ;PROC. BLOCK IN A7 +; MOVE *A7(PROCID),A6 +; SLL 16,A6 +; MOVE *A8(OID),A3 +; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] +; +;; MOVE @CIRCUIT,A5 +;; SLL 16,A5 +;; MOVE @WAVE,A3 +; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] +; +; MOVI AUD1STRT,A4 ;PLAY # +; callr GETAUD4 +; +; SLL 16,A4 +; MOVE *A0(OID),A3 ;A4 = [STRT#:*A0(OID)] +; MOVX A3,A4 +; +; MOVE @GAMSTATE,A3 ;A2 = [PSTATUS:GAMSTATE] +; MOVX A3,A2 +; +; MOVE @PSTATUS,A3 ;A2 = [ERROR CODE:PSTATUS] +; MOVX A3,A2 +; +; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS +; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS +;; CALLA ADD_DUMP + + MMFM SP,A2,A3,A4,A5,A6,A7 + RETS + + +******************************** +* Get an audit +* A4=Audit # +* >A4=Audit + +GETAUD4 + mmtm sp,a0,a1 + move a4,a0 + calla GET_AUD + calla DEF_PAGE ;POINT AT DEFAULT PAGE. + move a1,a4 + mmfm sp,a0,a1 + rets + +#***************************************************************************** + .asg 16,YSPACE + + SUBR show_create_plyr_info + + movk INAMODE,a0 + move a0,@GAMSTATE + + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + clr a1 ;kill all processes + calla KILALL + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #caplr_heading,a4 + calla print_string_C2 + + movi caplr_str_setup,a2 + calla setup_message + movi #caplr_info_str,a4 + calla print_string_C2 + + movi caplr_str_setup2,a2 + calla setup_message + movk 13,a0 + move a0,@mess_line_spacing + movi #caplr_info_str2,a4 + calla print_string2 + + SLEEPK 1 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEP 1*TSEC + + movi 14*TSEC,a10 +#capi1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #capi2 + dsj a10,#capi1 +#capi2 + SOUND1 bounce_snd + + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page2 + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 1 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 2*TSEC + + movi 7*TSEC,a10 +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #butp1 + SOUND1 bounce_snd + jruc #butp2 +#butp1 + dsj a10,#butp +#butp2 + + movi CYCPID,a0 + calla KIL1C + RETP + + + +***************************************************************************** + .asg 16,YSPACE + + SUBR hint_page + + movi 4*60,a10 +#lp + SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #lp + +#tvout + callr kill_tvpanel + + SOUND1 bounce_snd + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hintpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + move a0,@IRQSKYE + + movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 1,a0 + calla create_title_bar + + movi heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi YSPACE,a0 + move a0,@mess_line_spacing + + movi heading2_setup,a2 + calla setup_message + +; movk 26,a0 + movi 44,a0 + calla RNDRNG0 ;0-7 + sll 5,a0 ;x 32 bits + move a0,a9 + addi #random_hints,a0 + move *a0,a4,L + calla print_string_C2 + + movi LN1_setup,a2 + calla setup_message + + addi #random_hints2,a9 + move *a9,a4,L + calla print_string2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP TSEC*2 + + movi 7*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + + SOUND1 bounce_snd + + JSRP buyin_screen + + movi CYCPID,a0 + calla KIL1C + clr a0 + move a0,@IRQSKYE ;background color + move a0,@DISPLAYON + + SLEEPK 1 ;2 + + calla system_restoregame + +; movk INGAME,a0 +; move a0,@GAMSTATE + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + CREATE0 start_msgs + calla fix_dropout_msgs + RETP + + +kill_tvpanel + movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + + move @tvpanelon,a0,L + jrz #x1 + calla KILL + clr a0 + move a0,@tvpanelon,L +#x1 + rets + + +#hintpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + + .asg 20,LN0 + .asg 120,LN1 + +heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +heading2_setup + PRINT_STR bast18_ascii,8,0,200,LN0+45,BST18B2_P,0 +LN1_setup + PRINT_STR bast10_ascii,6,0,44,LN1-10,BAST_D_P,0 + + +#str_heading + .string "coaching tips",0 + .even + +#caplr_heading + .string "created player info",0 + .even + + +caplr_str_setup + PRINT_STR bast10_ascii,8,0,200,45,BAST_G_P,0 + +caplr_str_setup2 + PRINT_STR bast10_ascii,8,0,20,80,BAST_W_P,0 + +hve_fun_str_setup + PRINT_STR brush20_ascii,8,0,200,220,BRSHGYGP,0 + +#caplr_info_str + .string "thank you for creating a character!!",0 + .even + +#caplr_info_str2 + .string "1) you can earn extra attribute points",1 + .string " by winning 3 games!",1 + .string "",1 + .string "2) you can reenter 'create player',",1 + .string " using your players' name and",1 + .string " pin number!",1 + .string "",1 + .string "3) find the best combination of attributes",1 + .string " and privileges!",1 + .string "",1 + .string "4) you have special abilities that normal",1 + .string " players don't!",0 + .even + + + .asg 1,CR + +#random_hints + .long #str_h0,#str_h1,#str_h2,#str_h3,#str_h4 + .long #str_h5,#str_h6,#str_h7,#str_h8 + .long #str_h9,#str_h10,#str_h11,#str_h12 + .long #str_h13,#str_h14,#str_h15,#str_h16,#str_h17,#str_h18 + .long #str_h19,#str_h20,#str_h21,#str_h22,#str_h23,#str_h24 + .long #str_h25,#str_h26,#str_h27 + + .long #str_h28,#str_h29,#str_h30 + .long #str_h31,#str_h32,#str_h33 + .long #str_h34,#str_h35,#str_h36 + .long #str_h37,#str_h38 + .long #str_h39,#str_h40 + .long #str_h41 + .long #str_h42 + .long #str_h43 + .long #str_h44 + + +#random_hints2 + .long #str_h0a,#str_h1a,#str_h2a,#str_h3a,#str_h4a + .long #str_h5a,#str_h6a,#str_h7a,#str_h8a + .long #str_h9a,#str_h10a,#str_h11a,#str_h12a + .long #str_h13a,#str_h14a,#str_h15a,#str_h16a,#str_h17a,#str_h18a + .long #str_h19a,#str_h20a,#str_h21a,#str_h22a,#str_h23a,#str_h24a + .long #str_h25a,#str_h26a,#str_h27a + + .long #str_h28a,#str_h29a,#str_h30a + .long #str_h31a,#str_h32a,#str_h33a + .long #str_h34a,#str_h35a,#str_h36a + .long #str_h37a,#str_h38a + .long #str_h39a,#str_h40a + .long #str_h41a + .long #str_h42a + .long #str_h43a + .long #str_h44a + + +#str_h0 + .string "hook shots",0 +#str_h0a + .string "When you're running perpendicular,",1 + .string "near the hoop, press the shoot button.",1 + .string " ",1 + .string "pressing turbo and shoot will give",1 + .string "the ball a higher arc!",0 + +#str_h1 + .string "super dunks",0 +#str_h1a + .string "press the turbo and Shoot buttons",1 + .string "while running toward the basket.",1 + .string " ",1 + .string "remember, some players have more",1 + .string "spectacular dunks than others!",0 + +#str_h2 + .string "head fakes",0 +#str_h2a + .string "tap the Shoot button once. However,",1 + .string "this also causes you to pick up your",1 + .string "dribble.",1 + .string " ",1 + .string "Try faking out CPU Drones!",0 + +#str_h3 + .string "jump shot pass",0 +#str_h3a + .string "Press and hold the shoot button,",1 + .string "then press the pass button. This",1 + .string "allows you to dish off to your",1 + .string "teammate.",1 + .string " ",1 + .string "this is most effective when you are",1 + .string "about to be rejected!",0 + +#str_h4 + .string "accurate jump shots",0 +#str_h4a + .string "increase the chances of a jump",1 + .string "shot going in by releasing the Shoot",1 + .string "button at the peak of your jump.",1 + .string " ",1 + .string "Avoid being rejected by holding on",1 + .string "to the ball until the defender is",1 + .string "out of position.",0 + +#str_h5 + .string "spin move",0 +#str_h5a + .string "When running, quickly tap the",1 + .string "turbo button twice. This will cause",1 + .string "you to spin around your opponent.",1 + .string " ",1 + .string "while spinning you're less likely to",1 + .string "get cleared out by an opponent!",0 + +#str_h6 + .string "clearing out",0 +#str_h6a + .string "when facing your opponent, press the",1 + .string "turbo and pass buttons at the same",1 + .string "time. This will clear him out!",1 + .string " ",1 + .string "remember, small players can't clear",1 + .string "out big players!",0 + +#str_h7 + .string "protect the ball",0 +#str_h7a + .string "When standing in position with the",1 + .string "ball, quickly tap the turbo button.",1 + .string "this will cause the player to protect",1 + .string "the ball!",0 + +#str_h8 + .string "turbo pass",0 +#str_h8a + .string "press the turbo and pass buttons at",1 + .string "the same time for a fast pass.",1 + .string " ",1 + .string "Turbo passes are less likely to be",1 + .string "intercepted by the defense!",0 + +#str_h9 + .string "super jumps",0 +#str_h9a + .string "jump extra high when shooting,",1 + .string "blocking, or rebounding by pressing",1 + .string "the turbo and shoot buttons at the",1 + .string "same time!",0 + +#str_h10 + .string "dunk pass",0 +#str_h10a + .string "to avoid having your dunk blocked,",1 + .string "pass off to your teammate.",1 + .string " ",1 + .string "This is most effective when your",1 + .string "teammate is open for a three point",1 + .string "shot!",0 + +#str_h11 + .string "layups",0 +#str_h11a + .string "When running at the hoop, quickly",1 + .string "press the turbo and shoot buttons!",1 + .string " ",1 + .string "Holding the shoot button delays",1 + .string "the release of the ball. Use this",1 + .string "to fake out your opponent!",0 + +;Fix!!! Put in for maximum version! +;#str_h12 +; .string "hotspots",0 +;#str_h12a +; .string "if a player makes 3 jump shots",1 +; .string "from the same spot on the court,",1 +; .string "then that spot becomes his hotspot!",1 +; .string " ",1 +; .string "shooting from a hotspot dramatically",1 +; .string "increases the shot percentage!!",0 + +#str_h12 +#str_h13 + .string "lean-out jumper",0 +#str_h12a +#str_h13a + .string "If you are facing straight up or",1 + .string "down, pull the joystick to the left",1 + .string "or right!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h14 + .string "hot streak",0 +#str_h14a + .string "When a player scores 3 consecutive",1 + .string "baskets, he is on fire!",1 + .string " ",1 + .string "When a player goes on a hot streak,",1 + .string "give him the ball! he will remain",1 + .string "hot for several shots or until the",1 + .string "other team scores.",0 + +#str_h15 + .string "double-dunks",0 +#str_h15a + .string "When a player is in a dunk, his",1 + .string "teammate can also start a dunk.",1 + .string "The player with the ball can then",1 + .string "press the pass button to lob the",1 + .string "the ball to his teammate.",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h16 + .string "drone control",0 +#str_h16a + .string "Cause a teammate controlled by the",1 + .string "CPU to shoot or pass by pressing",1 + .string "your own shoot or pass buttons.",1 + .string " ",1 + .string "pass to your drone when he is under",1 + .string "the hoop for a quick dunk.",0 + +#str_h17 + .string "fade-away jumper",0 +#str_h17a + .string "Just as you jump up for a shot, pull",1 + .string "the joystick in the opposite direction",1 + .string "your player is facing.",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h18 + .string "Player Attributes",0 +#str_h18a + .string "For maximum success, pay attention",1 + .string "to your player's strengths and",1 + .string "weaknesses. Play big guys near the",1 + .string "hoop, and small guys outside.",1 + .string " ",1 + .string "Big guys are poor 3 point shooters!",0 + +#str_h19 + .string "power attribute",0 +#str_h19a + .string "The greater a player's Power rating,",1 + .string "the harder it is to clear him out",1 + .string "or to block his dunks. Try to avoid",1 + .string "size mismatches. ",1 + .string " ",1 + .string "powerful guys tend to hold onto",1 + .string "the ball when cleared out!",0 + +#str_h20 + .string "alley-oop play",0 +#str_h20a + .string "When your teammate has the ball,",1 + .string "drive the open lane toward the hoop",1 + .string "and press turbo and shoot.",1 + .string "Once airborne, your teammate must",1 + .string "quickly pass you the ball!",1 + .string "",1 + .string "Try for 3 in a row!",0 + +#str_h21 + .string "teamwork",0 +#str_h21a + .string "A combination of 3 consecutive",1 + .string "alley-oops or double-dunks will",1 + .string "put your team in the zone!",1 + .string " ",1 + .string "Don't be a ball hog!",0 + +#str_h22 + .string "steal attribute",0 +#str_h22a + .string "The greater a player's steal rating,",1 + .string "the more effective his swiping",1 + .string "becomes. He will also intercept more",1 + .string "passes!",1 + .string " ",1 + .string "Smaller, quicker players are very",1 + .string "skilled at stealing the ball.",0 + +#str_h23 + .string "dunk attribute",0 +#str_h23a + .string "The greater a player's dunk rating,",1 + .string "the more spectacular his dunks. a",1 + .string "player with a zero dunk rating will",1 + .string "perform just layups.",1 + .string " ",1 + .string "Layups are generally less successful",1 + .string "than dunks.",0 + +#str_h24 + .string "speed attribute",0 +#str_h24a + .string "The greater a player's speed rating,",1 + .string "the faster he moves. Usually, the",1 + .string "faster players are less powerful",1 + .string "and therefore get cleared out more.",1 + .string " ",1 + .string "Match speed against speed.",0 + +#str_h25 + .string "create player",0 +#str_h25a + .string "At start of a game, choose the",1 + .string "'create player' option and",1 + .string "customize a player to fit your",1 + .string "individual playing style.",1 + .string " ",1 + .string "created players can earn extra",1 + .string "attribute points with 3 wins!",0 + +#str_h26 + .string "power-ups",0 +#str_h26a + .string "On the versus screen, press the",1 + .string "turbo, shoot and pass buttons to",1 + .string "select a combination. In order",1 + .string "to activate some power-ups, all",1 + .string "players must enter the same",1 + .string "combination!",1 + .string "",1 + .string "enter '111' for tournament mode!",0 + +#str_h27 + .string "lean-in jumper",0 +#str_h27a + .string "Just as you jump up for a shot, push",1 + .string "the joystick in the direction your",1 + .string "player is facing!",1 + .string " ",1 + .string "holding the shoot button delays the",1 + .string "release of the ball!",0 + +#str_h28 + .string "Smart turbo useage",0 +#str_h28a + .string "The amount of turbo remaining is",1 + .string "displayed at the top of the screen.",1 + .string " ",1 + .string "all turbo actions deplete this",1 + .string "amount, so conserve just enough for",1 + .string "that all important next move!",0 + +#str_h29 + .string "Substitutions",0 +#str_h29a + .string "Some players may become fatigued",1 + .string "during the second half! Try",1 + .string "substituting those players with",1 + .string "fresh players at halftime.",1 + .string " ",0 + +#str_h30 + .string "Burst of speed",0 +#str_h30a + .string "avoid pesky defenders and increase",1 + .string "the speed of your player by holding",1 + .string "down the Turbo button.",0 + +#str_h31 + .string "Court awareness",0 +#str_h31a + .string "locate a player's position when he",1 + .string "is off screen by watching for his",1 + .string "arrow. Try to anticipate his moves.",1 + .string " ",1 + .string "When off screen, try to stay away",1 + .string "from opposing players.",0 + +#str_h32 + .string "Smart play",0 +#str_h32a + .string "An open player is more likely to",1 + .string "make a basket, so pass to your open",1 + .string "teammate whenever possible!",1 + .string " ",1 + .string "Try to anticipate your opponent's next",1 + .string "move before he makes it!",0 + +#str_h33 + .string "Secret power-ups",0 +#str_h33a + .string "Ball Players can be powered up with",1 + .string "super human abilities. Try special",1 + .string "joystick/button moves during the",1 + .string "team matchup screen!",0 + +#str_h34 + .string "Strong defense",0 +#str_h34a + .string "decrease the chance of an opponent's",1 + .string "shot going in the basket by getting",1 + .string "up real close to him!",1 + .string " ",1 + .string "clear him out, steal the ball!",0 + +#str_h35 + .string "Hidden Passing attribute",0 +#str_h35a + .string "The greater a player's hidden pass",1 + .string "rating, the faster he passes.",1 + .string " ",1 + .string "It is more difficult to intercept a",1 + .string "quick pass than a slow pass. You",1 + .string "should always try a turbo pass.",0 + +#str_h36 + .string "Blocking attribute",0 +#str_h36a + .string "The greater a player's block",1 + .string "rating, the better he is at blocking",1 + .string "dunks and regular jump shots.",1 + .string " ",1 + .string "It is also harder for someone to",1 + .string "drive by him for a dunk.",0 + +#str_h37 + .string "Hidden Clutch attribute",0 +#str_h37a + .string "The greater a player's hidden clutch",1 + .string "rating, the more chance that he will",1 + .string "make a great play during the last 10",1 + .string "seconds of any period.",0 + +#str_h38 + .string "Stats pages",0 +#str_h38a + .string "On the stats page, the steals",1 + .string "category includes slap aways and",1 + .string "clear outs of ball carriers.",1 + .string " ",1 + .string "The injured category represents how",1 + .string "many times you were cleared out!",0 + +#str_h39 + .string "Layup out of dunks",0 +#str_h39a + .string "When a player is in a dunk, he can",1 + .string "press the shoot button to lob the",1 + .string "the ball toward the hoop.",1 + .string "",1 + .string "This is most effective if your dunk",1 + .string "is about to get blocked.",0 + +#str_h40 + .string "On demand layups",0 +#str_h40a + .string "run toward the basket without",1 + .string "holding down the turbo button.",1 + .string "then press the turbo and Shoot",1 + .string "buttons. Release shoot button",1 + .string "to layup the ball.",0 + +#str_h41 + .string "strengthen created player",0 +#str_h41a + .string "Each time a created player wins",1 + .string "3 games, he is awarded additional",1 + .string "attribute points. As you increase",1 + .string "your players strength, hidden",1 + .string "features will become accessible",1 + .string "for that player!",0 + +#str_h42 + .string "shot swatting",0 +#str_h42a + .string "When swatting at a jump shot, hold",1 + .string "the block button down until your",1 + .string "opponent releases the ball, then",1 + .string "release the block button to follow",1 + .string "through with the swat.",0 + +#str_h43 + .string "Hidden rebound attribute",0 +#str_h43a + .string "The greater a player's hidden rebound",1 + .string "rating, the more chance that he will",1 + .string "snag the rebound from a crowd of",1 + .string "players. He will also jump higher",1 + .string "when trying to rebound.",0 + +#str_h44 + .string "successful rebounding",0 +#str_h44a + .string "Wait until the ball has hit the rim",1 + .string "before pressing the block button.",1 + .string "",1 + .string "Auto rebounding may also occur when",1 + .string "the ball is directly above your head.",0 + + .even + +;What's new about the game? +#***************************************************************************** + .asg 17,YSPACE + + SUBR new_page + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + SLEEPK 1 + + movi #newpage_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + calla display_unblank + + movi #str_tbl,a9,L +#lp + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + move *a9+,a4,L + calla print_string_C2 + + CREATE CYCPID,flash_bigtxt3 + + move *a9,a14 + cmpi 4000,a14 + jrz #cont0 + + SLEEP 40 + + movi 1*TSEC,a10 +#whopper_with_chees + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exi + dsj a10,#whopper_with_chees +#exi move a10,a10 + jrz #contz + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + + jruc #cont +#contz + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi [15,0],a0 + move a0,*a10(OYVEL),L ;Fall off scrn +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + SLEEPK 17 + + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + calla obj_del1c + jruc #lp + +#cont0 + SLEEP 2*TSEC +#cont + movi CYCPID,A0 + calla KIL1C + +;DJT Start + .asg 12,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 +;DJT End + + RETP + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +LN1b_setup + PRINT_STR brush50_ascii,24,0,200,62,BRSH50R_P,0 +LN2b_setup + .ref brush50_ascii + PRINT_STR brush50_ascii,24,0,200,133,BRSH50R_P,0 + +#newpage_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +;DJT Start +#str_tbl + .long #str_h0 + .long #str_h0a + .long #str_h1 + .long #str_h1a + .long #str_h2 + .long #str_h2a + .long #str_h3 + .long #str_h3a + .long #str_h4 + .long #str_h4a + .long #str_h5 + .long #str_h5a + .long #str_h6 + .long #str_h6a + .long #str_h7 + .long #str_h7a + .if TRIVCON + .long #str_h8 + .long #str_h8a + .endif ;TRIVCON + .long #str_h9 + .long #str_h9a + .long #str_h10 + .long #str_h10a + .long 4000,4000 + + +#str_heading + .string "HANGTIME MAXIMIZED!",0 +; .string "HANGTIME HIGHLIGHTS",0 + .asg 1,CR + +#str_h0 + .string "1997",0 +; .string "150 NBA",0 +#str_h0a + .string "LINEUPS",0 +; .string "PLAYERS",0 + +#str_h1 + .string "COLLEGE",0 +; .string "CREATE",0 +#str_h1a + .string "ROOKIES",0 +; .string "PLAYER",0 + +#str_h2 + .string "HOT",0 +; .string "ALLEY",0 +#str_h2a + .string "SPOTS",0 +; .string "OOPS",0 + +#str_h3 + .string "TEAM",0 +; .string "DOUBLE",0 +#str_h3a + .string "FIRE",0 +; .string "DUNKS",0 + +#str_h4 + .string "SIZZLING",0 +; .string "ROOF TOP",0 +#str_h4a + .string "FINALE",0 +; .string "COURT",0 + +#str_h5 + .string "SMARTER",0 +; .string "SPIN",0 +#str_h5a + .string "DRONES",0 +; .string "MOVES",0 + +#str_h6 + .string "RADICAL",0 +; .string "DIGITAL",0 +#str_h6a + .string "DUNKS",0 +; .string "SOUND",0 + +#str_h7 + .string "BETTER",0 +; .string "M DOC",0 +#str_h7a + .string "GAMEPLAY",0 +; .string "RAPS",0 + + .if TRIVCON +#str_h8 + .string "TRIVIA",0 +#str_h8a + .string "CONTEST",0 + .endif ;TRIVCON + +#str_h9 + .string "NEW",0 +; .string "MEGA",0 +#str_h9a + .string "POWERUPS",0 +; .string "SECRETS",0 + +#str_h10 + .string "AND NEW",0 +; .string "AND",0 +#str_h10a + .string "SECRETS!",0 +; .string "MORE!",0 + + .even + +#***************************************************************************** + .ref fontram + + SUBR flash_bigtxt3 +;DJT End + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + + +#x movk 3,a10 + .ref white_pal +#top movi white_pal,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH50R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + dsj a10,#top + DIE + +#***************************************************************************** + + +time_delay + SLEEPK 30 +td_1 + SLEEPK 1 + move *a13(PROCID),a0 +;DJT Start + andni 1,a0 + cmpi GRANDCHAMP_PID,a0 + jreq #lpt ;Called from grand champion? +;DJT End + cmpi DIAG_PID,a0 + jreq #lpt ;Called from octopuss? + calla get_all_buttons_cur2 + jrz #lpt + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + RETP +#lpt + dsj a10,td_1 + RETP + + +;#txt +; move a9,a0 +; sll 5,a0 +; addi #random_hints,a0 +; move *a0,a4,L +; calla print_string2 +; +; move a9,a0 +; sll 5,a0 +; addi #random_hints2,a0 +; move *a0,a4,L +; calla print_string2 +; +; move @mess_cursy,a0 +; addk 30,a0 +; move a0,@mess_cursy +; +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; SOUND1 tick_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; +;#NONO1 rets + + + + +#***************************************************************************** +* INPUT: a0 = 0 (1st half stats) +* a0 = 1 (final game stats) +*----------------------------------------------------------------------------- + + STRUCTPD + WORD HTS_STARTX + WORD HTS_STARTY + APTR HTS_STATSADDR + APTR HTS_PALETTE1 ;2 pts + APTR HTS_PALETTE2 ;3 pts. + APTR HTS_PALETTE3 ;turnovers + APTR HTS_PALETTE4 ;points + APTR HTS_PALETTE5 ;dunks + APTR HTS_PALETTE6 ;assists + APTR HTS_PALETTE7 ;steals + APTR HTS_PALETTE8 ;blocks + APTR HTS_PALETTE9 ;rebounds + APTR HTS_PALETTEa ;injured + + + .asg 11,STARTX1 + .asg 90,STARTY1 + .asg 128,STARTX2 + .asg 90,STARTY2 + .asg 205,STARTX3 + .asg 90,STARTY3 + .asg 323,STARTX4 + .asg 90,STARTY4 + .asg 11,YSPACING1 + + SUBR stats_page2 + + PUSHP a0 + jruc #tvout + + SUBR stats_page + + PUSHP a0 + + movi 4*60,a10 + +#stop SLEEPK 1 + dec a10 + jrz #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + callr kill_tvpanel + + calla display_blank + calla system_savegame + + clr a0 + move a0,@dtype ;2D + +;; movi 4<<10+4<<5+7,a0 + clr a0 + move a0,@IRQSKYE ;background color + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #halftime_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + movi #halftime_mod2,a0 +#4_plyrs + move a0,@BAKMODS,L + calla BGND_UD1 + + movi #heading_setup,a2 + calla setup_message + PULLP a0 + movi #str_heading1,a4 + move a0,a0 + jrz #1st_half + movi #str_heading2,a4 +#1st_half + calla print_string_C2 + + move @special_heads,a1,L +; move @player_toggle1,a0 + PUSH a0,a1 + + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrsb + + move @special_heads,a0 + move @special_heads+10h,a1 + + move a1,@special_heads + move a0,@special_heads+10h + +#4_plyrsb + movk 2,a0 + calla create_title_bar + calla create_stat_titles + clr a0 + calla create_score_backdrop ;for the scores + movk 1,a0 + calla create_score_backdrop ;for the scores + + movk 4,a0 + calla create_player_heads + calla update_player_heads + + clr a10 + calla create_player_nubs + + movi 105,a1 ;Y position + calla create_names + + calla create_plyrs_name + calla create_name_backplates + PULL a0,a1 + move a1,@special_heads,L + + callr print_scores + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_R_P,a9 ;PAL NAME + movi BASTCYCRP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + +*********************************************** +* player 1 + + movi player_stats+(0*PS_SIZE*10h),a2 + movi player_stats+(1*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 0*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX1,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY1+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps1 + movi STARTY1+29,a0 +#4_plyrs_ps1 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 2 + + movi player_stats+(1*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(2*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 1*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX2,a0 + move a0,*a13(HTS_STARTX) + + movi STARTY2+29,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs_ps2 + movi STARTY2+29,a0 +#4_plyrs_ps2 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 3 + + movi player_stats+(2*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(3*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 2*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX3,a0 + move a0,*a13(HTS_STARTX) + movi STARTY3+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** +* player 4 + + movi player_stats+(3*PS_SIZE*10h),a2 + movi player_stats+(0*PS_SIZE*10h),a3 + movi player_stats+(1*PS_SIZE*10h),a4 + movi player_stats+(2*PS_SIZE*10h),a5 + callr highlight_best + + movi player_stats + 3*PS_SIZE*10h,a0 + move a0,*a13(HTS_STATSADDR),L + movi STARTX4,a0 + move a0,*a13(HTS_STARTX) + movi STARTY4+29,a0 + move a0,*a13(HTS_STARTY) + callr print_pstats + +*********************************************** + + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movi STAT_TEXT_ID,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + + move @plyr_onfire,a10 + jrz #nofire + srl 1,a10 + jrnc #nop1 + clr a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop1 srl 1,a10 + jrnc #nop2 + movk 1,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop2 srl 1,a10 + jrnc #nop3 + movk 2,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr + +#nop3 srl 1,a10 + jrnc #nofire + movk 3,a11 + CREATE FIRE_ANIM_PID,anim_fire_for_best_plyr +#nofire + + SLEEPK 20 + + calla get_best_player + calla best_plyr_speech + move a0,a8 + .ref flash_plyrs_mugshot + CREATE CYCPID,flash_plyrs_mugshot + + movi 21*TSEC,a10 + +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 3 + + calla kill_fire_anim + calla kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + move @gmqrtr,a0 + cmpi 4,a0 + jrlo #noat + JSRP award_plr_attrib_pts + +#noat + SOUND1 bounce_snd + + move @gmqrtr,a0 + cmpi 2,a0 + jrnz #noth + JSRP plyr_subs + clr a0 + .ref in_team_select + move a0,@in_team_select +#noth + JSRP buyin_screen +;DJT Start + .if TRIVCON +;TRIVIA + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notriv + JSRP trivia_game +#notriv +;TRIVIA + .endif ;TRIVCON +;DJT End + + clr a0 + move a0,@DISPLAYON + +; JSRP QSNDRST + + SLEEPK 2 + + calla system_restoregame + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;kill credit/qrtr imgs + + calla prt_credits + + CREATE0 start_msgs + calla fix_dropout_msgs + + move @gmqrtr,a0 + cmpi 4,a0 + jrlt #notn + SOUND1 crwdbed_kill +#notn + + RETP + + +****************************************************************************** +* +* RETURNS: a0 - best player (based on stats) +****************************************************************************** + SUBR get_best_player + + movi player_stats+(0*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a3 + movi player_stats+(1*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a4 + movi player_stats+(2*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a5 + movi player_stats+(3*PS_SIZE*10h),a2 + callr add_plyr_stats + move a14,a2 + + clr a0 + cmp a4,a3 + jrhi #pl2 ;br=plr 2 is better + move a4,a3 + movk 1,a0 +#pl2 + cmp a5,a3 + jrhi #pl3 ;br=plr 2 is better + move a5,a3 + movk 2,a0 +#pl3 + cmp a2,a3 + jrhi #pl4 ;br=plr 2 is better + move a2,a3 + movk 3,a0 +#pl4 + rets + + +****************************************************************************** +* This routine add some of the players stats together +* +* INPUT: reg a2 - ptr to plyr stat ram +* RETURN: reg a14 - stat additive +****************************************************************************** + SUBR add_plyr_stats + + move *a2(PS_2PTS_MADE*10h),a14 + move *a2(PS_3PTS_MADE*10h),a1 + add a1,a14 + sll 1,a14 ;x 2 + add a1,a14 ;3 pts + + move a14,a1 + srl 1,a1 ;double value + add a1,a14 + + move *a2(PS_ASSISTS*10h),a1 + add a1,a14 + move *a2(PS_BLOCKS*10h),a1 + add a1,a14 + move *a2(PS_STEALS*10h),a1 + add a1,a14 + rets + + +BASTC_G_P: + .word 16 + .word 00000h,00000h,00280h,003e0h,003e0h,003e0h,003c0h,003a0h + .word 003a0h,00380h,00360h,00340h,00320h,00300h,002e0h,07fffh + +BASTCYCGP: + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + + .word 003e0h,003c0h,003a0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,00300h,00320h,00340h,00360h,00380h,003a0h + .word 003c0h,003c0h,003a0h,00380h,00340h,00320h,00340h,00380h + .word 003a0h,003c0h,003a0h,00380h,00360h,00340h,00300h,002e0h + .word 00300h,00300h,00320h,00340h,00340h,00360h,00360h,00380h + .word 003a0h,003a0h,003c0h,003e0h + .word -1 + .even + + +BASTC_R_P: + .word 16 + .word 00000h,00000h,05000h,07c00h,07c00h,07c00h,07c00h,07800h + .word 07800h,07400h,07000h,06c00h,06800h,06400h,06000h,07fffh + + + +BASTCYCRP: + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + + .word 07c00h,07800h,07800h,07400h + .word 07000h,06c00h,06800h,06400h,06000h,06400h,06800h,06c00h + .word 07000h,07400h,07800h + .word 07800h,07400h,06c00h,06800h,06c00h,07000h,07400h,07800h + .word 07400h,06c00h,06800h,06400h,06000h,06400h,06400h,06800h + .word 06c00h,06c00h,07000h,07000h,07400h,07800h,07800h,07c00h + .word -1 + .even + + +*********************************************** +*********************************************** + SUBR plyr_subs + +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + +; movi CYCPID,a0 +; calla KIL1C + + JSRP start_teams + RETP + + + +RGB .macro R,G,B + .word (:R:<<10) | (:G:<<5) | :B: + .endm + +COLTAB + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + + .word 07fffh,07bffh,077ffh,073ffh,06fffh + .word 06bffh,067deh,063deh,05fdeh,05bdeh,057deh,043bdh,033bdh + .word 01f9ch,00f7bh,0037bh,00f7bh,01b9ch,02b9ch,03bbdh,04bbdh + .word 05fdeh,063deh,067deh,06bdeh,06fffh,077ffh,07bffh,07fffh + .word -1 + +COLTABRED + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + + .word 07d2ah,07d08h,07cc6h,07ca5h,07c63h,07c42h,07c00h + .word 07c00h,07c00h,07c42h,07c63h,07c84h,07ca5h,07ce7h,07d08h + .word 07d29h,07d4ah,07d8ch,07dadh,07dceh,07e10h,07defh,07dceh + .word 07d8ch,07d6bh,07d4ah,07d29h,07d08h,07ce7h,07cc6h,07ca5h + .word 07c84h,07c63h,07c42h,07c21h,07c00h,07c00h,07c21h,07c63h + .word 07ca5h,07ce7h,07d29h,07d6bh,07dadh,07defh,07e31h,07e73h + .word 07eb5h,07ef7h,07f39h,07f7bh,07fbdh,07fffh,07f9ch,07f39h + .word 07ef7h,07e94h,07e31h,07defh,07d8ch,07d2ah + .WORD -1 + +#halftime_mod + .long HTSTATSBMOD + .word 0,0 + .long 0 + + +#halftime_mod2 + .long HTSTATSBMOD + .word 0,0 + .long 0 + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,0 +#str_heading1 + .string "1st half stats",0 +#str_heading2 + .string "end game stats",0 + + .even + +#***************************************************************************** + + .asg 44,SX1 + .asg 359,SX2 + + SUBRP print_scores + + movi #score_setup,a2 + calla setup_message + + movi SX1,a0 + move a0,@mess_cursx + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + movi SX2,a0 + move a0,@mess_cursx + move @scores+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + rets + +#score_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSH_Y_P,0 + +#***************************************************************************** +* +* INPUT: a2 = * player to check +* a3 = * other player 1 +* a4 = * other player 2 +* a5 = * other player 3 +* +* message_palette = BAST_Y_P default +* = BAST_W_P if highest stat +* +*----------------------------------------------------------------------------- + SUBRP highlight_best + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + jrz #not_best1 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best1 + movi BASTC_G_P,a6 +#not_best1 + move a6,*a13(HTS_PALETTE1),L + + movi BASTC_W_P,a6 + move *a2(PS_3PTS_MADE*10h),a0 + jrz #not_best2 + move *a3(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a4(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + move *a5(PS_3PTS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best2 + movi BASTC_G_P,a6 +#not_best2 + move a6,*a13(HTS_PALETTE2),L + + movi BASTC_W_P,a6 + move *a2(PS_2PTS_MADE*10h),a0 + move *a2(PS_3PTS_MADE*10h),a7 + add a7,a0 + sll 1,a0 ;x 2 + add a7,a0 ;3 pts + jrz #not_best4 + + move *a3(PS_2PTS_MADE*10h),a1 + move *a3(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a4(PS_2PTS_MADE*10h),a1 + move *a4(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + move *a5(PS_2PTS_MADE*10h),a1 + move *a5(PS_3PTS_MADE*10h),a7 + add a7,a1 + sll 1,a1 ;x 2 + add a7,a1 ;3 pts + cmp a1,a0 + jrlo #not_best4 + + movi BASTC_G_P,a6 +#not_best4 + move a6,*a13(HTS_PALETTE4),L + + + movi BASTC_W_P,a6 + move *a2(PS_DUNKS_MADE*10h),a0 + jrz #not_best5 + move *a3(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a4(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + move *a5(PS_DUNKS_MADE*10h),a1 + cmp a1,a0 + jrlo #not_best5 + movi BASTC_G_P,a6 +#not_best5 + move a6,*a13(HTS_PALETTE5),L + + + movi BASTC_W_P,a6 + move *a2(PS_ASSISTS*10h),a0 + jrz #not_best6 + move *a3(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a4(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + move *a5(PS_ASSISTS*10h),a1 + cmp a1,a0 + jrlo #not_best6 + movi BASTC_G_P,a6 +#not_best6 + move a6,*a13(HTS_PALETTE6),L + + + movi BASTC_W_P,a6 + move *a2(PS_STEALS*10h),a0 + jrz #not_best7 + move *a3(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a4(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + move *a5(PS_STEALS*10h),a1 + cmp a1,a0 + jrlo #not_best7 + movi BASTC_G_P,a6 +#not_best7 + move a6,*a13(HTS_PALETTE7),L + + + movi BASTC_W_P,a6 + move *a2(PS_BLOCKS*10h),a0 + jrz #not_best8 + move *a3(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a4(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + move *a5(PS_BLOCKS*10h),a1 + cmp a1,a0 + jrlo #not_best8 + movi BASTC_G_P,a6 +#not_best8 + move a6,*a13(HTS_PALETTE8),L + + + movi BASTC_W_P,a6 + move *a2(PS_OFF_REB*10h),a0 + move *a2(PS_DEF_REB*10h),a7 + add a7,a0 + jrz #not_best9 + + move *a3(PS_OFF_REB*10h),a1 + move *a3(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a4(PS_OFF_REB*10h),a1 + move *a4(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + move *a5(PS_OFF_REB*10h),a1 + move *a5(PS_DEF_REB*10h),a7 + add a7,a1 + cmp a1,a0 + jrlo #not_best9 + movi BASTC_G_P,a6 +#not_best9 + move a6,*a13(HTS_PALETTE9),L + + + movi BASTC_W_P,a6 + move *a2(PS_INJURY*10h),a0 + jrz #not_besta + move *a3(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a4(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + move *a5(PS_INJURY*10h),a1 + cmp a1,a0 + jrlo #not_besta + movi BASTC_R_P,a6 +#not_besta + move a6,*a13(HTS_PALETTEa),L + + +;check turnovers + movi BASTC_W_P,a6 + move *a2(PS_TURNOVERS*10h),a0 + jrz #not_bestb + move *a3(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a4(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + move *a5(PS_TURNOVERS*10h),a1 + cmp a1,a0 + jrlo #not_bestb + movi BASTC_R_P,a6 +#not_bestb + move a6,*a13(HTS_PALETTE3),L + rets + + +#***************************************************************************** + + .asg 18,COLOFF1 + .asg 67,COLOFF2 + + SUBRP print_pstats + + movi #stats_setup,a2 + calla setup_message + + movi STAT_TEXT_ID,a0 + move a0,@mess_objid + +*** all shots made / all shots taken percentage + + move *a13(HTS_PALETTE1),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_MADE*10h),a0 + move *a10(PS_3PTS_MADE*10h),a2 + add a2,a0 + PUSH a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a3 + add a3,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + PULL a3 ;total points scored + movi 100,a0 + mpyu a0,a3 + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_2PTS_TRY*10h),a0 + move *a10(PS_3PTS_TRY*10h),a1 + add a1,a0 + jrz #zippo1 + divu a0,a3 + move a3,a0 +#zippo1 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** 3pt shots made / 3pt shots taken percentage + + move *a13(HTS_PALETTE2),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 1*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_TRY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + move *a13(HTS_STARTX),a0 + addi COLOFF2-3,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_3PTS_MADE*10h),a3 + movi 100,a0 + mpyu a0,a3 + move *a10(PS_3PTS_TRY*10h),a0 + jrz #zippo2 + divu a0,a3 + move a3,a0 +#zippo2 + movi 100,a1 ;max value + calla dec_to_asc + calla copy_string + movi #str_pct,a4 + calla concat_rom_string + calla print_string_R + +*** total points + + move *a13(HTS_PALETTE4),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 2*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + clr a6 + move *a10(PS_2PTS_MADE*10h),a0 + sll 1,a0 ;X 2 + add a0,a6 + move *a10(PS_3PTS_MADE*10h),a0 + add a0,a6 + sll 1,a0 ;X 2 + add a6,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** dunks + + move *a13(HTS_PALETTE5),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 3*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DUNKS_MADE*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** assists + + move *a13(HTS_PALETTE6),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 4*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_ASSISTS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** steals + + move *a13(HTS_PALETTE7),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 5*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_STEALS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** blocks + + move *a13(HTS_PALETTE8),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 6*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_BLOCKS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** rebounds + + move *a13(HTS_PALETTE9),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 7*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_OFF_REB*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + + move *a13(HTS_STARTX),a0 + addi COLOFF1,a0 + move a0,@mess_cursx + movi #str_slash,a4 + calla print_string2 + + move *a13(HTS_STARTX),a0 + addi COLOFF1+6,a0 + move a0,@mess_cursx + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_DEF_REB*10h),a0 + move *a10(PS_OFF_REB*10h),a1 + add a1,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + +*** injury + + move *a13(HTS_PALETTEa),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 8*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_INJURY*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +*** turnovers + + move *a13(HTS_PALETTE3),a0,L + move a0,@message_palette,L + + move *a13(HTS_STARTY),a0 + addi 9*YSPACING1,a0 + move a0,@mess_cursy + + move *a13(HTS_STARTX),a0 + addi COLOFF1+8,a0 + move a0,@mess_cursx + + move *a13(HTS_STATSADDR),a10,L + move *a10(PS_TURNOVERS*10h),a0 + movi 99,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + rets + + +#stats_setup + PRINT_STR bast7tcyc_ascii,4,0,200,LN0,BASTC_W_P,0 + +#str_slash + .string "/",0 +#str_pct + .string "%",0 + .even + + + + + + .asg 15,OBJID + .asg 16,NAME_ID + .asg 300,LOGO_X + .asg 80,LOGO_Y + .asg -10,HD_X + .asg 75,HD_DX + .asg 190,HD_Y + +#***************************************************************************** +;DJT Start + +;ATLANTA + .ref BLY_ATL,ATLNBLA,MUT_DEN,DENNMUT,SMI_ATL,ATLNSMI + .ref LAE_ATL,ATLNLAE,NOR_ATL,ATLNNOR +;BOSTON + .ref BRO_BOS,BOSNBRO,HAM_COL, HAMER ,BAR_BOS,BOSNBAR + .ref RAD_BOS,BOSNRAD,FOX_BOS,BOSNFOX +;CHARLOTTE + .ref RCE_CHA,CHANRIC,MAS_NEY,NWYNMAS,DIV_LAK,LALNDIV + .ref ZID_CHA,CHANZID,CUR_CHA,CHANCUR +;CHICAGO + .ref PIP_CHI,CHINPIP,ROD_CHI,CHINROD,KUK_CHI,CHINKUK + .ref LON_CHI,CHINLON,KER_CHI,CHINKER +;CLEVLAND + .ref HIL_CLE,CLENHIL,MIL_CLE,CLENMIL,PHL_CLE,CLENPHI + .ref BRA_CLE,CLENBRA,FER_CLE,CLENFER +;DALLAS + .ref KID_DAL,DALNKID,HPR_NEY,NWYNHAR,JAC_DAL,DALNJAC + .ref MON_BOS,BOSNMON,MAS_DAL,DALNMAS +;DENVER + .ref MCD_DEN,DENNMcD,MAR_SAC,SACNMAR,JAC_IND,INDNJAC + .ref ELL_DEN,DENNELL +;DETROIT +; .ref HIL_DET,DETNHIL,RIL_COL, RILEY ,DUM_DET,DETNDUM + .ref HIL_DET,DETNHIL,DUM_DET,DETNDUM + .ref THR_DET,DETNTHO,AUG_ATL,ATLNAUG +;GOLDEN STATE + .ref SPR_GLD,GOLNSPR,KON_ORL,ORLNKON,SMI_GLD,GOLNSMI + .ref MUL_GLD,GOLNMUL +;HOUSTON + .ref OLA_HOU,HOUNOLA,HAR_COL, HRNGTON ,DRX_HOU,HOUNDRE + .ref WLS_GLD,GOLNWIL +;INDIANA + .ref MIL_IND,INDNMIL,DAM_COL, DAMPIER ,ROS_DEN,DENNROS + .ref SMI_IND,INDNSMI,DAV_IND,INDNDAV +;L.A. CLIPPERS + .ref VAU_CLP,LACNVAU,ROG_CLP,LACNROG,MUR_CLP,LACNMUR + .ref RCH_CLP,LACNRIC,BAR_CLP,LACNBAR +;L.A. LAKERS + .ref VAN_LAK,LALNEXE,CEB_LAK,LALNCEB,SCO_VAN,VANNSCO + .ref CAM_LAK,LALNCAM,JON_LAK,LALNJON +;MIAMI + .ref MOU_MIA,MIANMOU,HRD_MIA,MIANHAR,DAN_MIA,MIANDAN +;MILWAUKEE + .ref BAK_MLW,MILNBAK,ALL_COL, ALLEN ,LNG_MIN,MINNLAN + .ref ROB_MLW,MILNROB,RES_MLW,MILNRES +;MINNESOTA + .ref GUG_MIN,MINNGUG,MAR_COL, MARBURY ,GAR_MIN,MINNGAR +;NEW JERSEY + .ref GLL_NEJ, NWJNGIL ,KIT_COL, KITTLES ,PAC_WAS,WASNPAC + .ref BRA_NEJ,NWJNBRA,OBA_NEJ,NWJNOBA +;NEW YORK + .ref EWG_NEY,NWYNEWI,WAL_COL, WALLACE ,JON_CHA,CHANJOH + .ref STA_NEY,NWYNSTA,HOU_DET,DETNHOU +;ORLANDO + .ref HAR_ORL,ORLNHAR,SKL_GLD,GOLNSEI,GRT_ORL,ORLNGRA + .ref AND_ORL,ORLNAND,SCO_ORL,ORLNSCO +;PHILADELPHIA +; .ref IVE_COL, IVERSON ,MIN_COL, MINOR ,STA_PHL,PHINSTA + .ref IVE_COL, IVERSON ,STA_PHL,PHINSTA + .ref COL_PHL,PHINCOL,WEA_PHL,PHINWEA +;PHOENIX + .ref JOH_PHX,PHONJOH,TIS_PHX,PHONTIS,MAN_PHX,PHONMAN + .ref HOR_HOU,HOUNHOR,CAS_HOU,HOUNCAS +;PORTLAND + .ref ROB_PRT,PORNROB,RID_MIN,MINNRID,SAB_PRT,PORNSAB + .ref AND_CHA,CHANAND,CHI_PRT,PORNCHI +;SACRAMENTO + .ref OWE_SAC,SACNOWE,RAF_DEN,DENNRAU,RIC_SAC,SACNRIT + .ref GRA_SAC,SACNGRA,EDN_SAC,SACNEDN +;SAN ANTONIO + .ref ELL_SAN,SANNELL,ROB_SAN,SANNROB,MAX_PHL,PHINMAX + .ref JON_SAN,SANNJOH,DEL_SAN,SANNNEG +;SEATTLE + .ref KMP_SEA,SEANKEM,PAY_SEA,SEANPAY,SCH_SEA,SEANSCH + .ref HWK_SEA,SEANHAW,FOR_SEA,SEANFOR +;TORONTO + .ref ROG_TOR,TORNROG,CAM_COL, CAMBY ,STO_TOR,TORNSTO + .ref JON_DAL,DALNJON,WIL_MIA,MIANWIL +;UTAH + .ref STK_UTA,UTANSTO,MLN_UTA,UTANMAL,HRN_UTA,UTANHOR + .ref MOR_UTA,UTANMOR +;VANCOUVER + .ref ANT_VAN,VANNANT,EDW_VAN,VANNEDW,REV_VAN,VANNREE +;WASHINGTON + .ref STR_PRT,PORNSTR,WEB_WAS,WASNWEB,HWD_WAS,WASNHOW + .ref MUR_WAS,WASNMUR,CHE_WAS,WASNCHE + +K_GILL .equ WALLACE+1 + +****************************************************************************** + + SUBRP show_nba_plyrs + + calla display_blank + calla WIPEOUT + calla pal_clean + + movk 1,a0 + move a0,@dpageflip + + clr a0 + move a0,@dtype ;2D + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + movi #players_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi #heading_setup,a2 + calla setup_message + + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi 78,a0 + move a0,@mess_cursx2 + + movi #str_staring,a4 + calla print_string2b + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +;create logo backdrop + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi BALLBAK1,a2 ;*img + movi 1900,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + clr a5 ;id + calla BEGINOBJ2 + + clr a0 ;x + clr a1 ;y + movi B8TCYC_PER,a2 ;*img + movi BASTC_G_P,b0,L ;*pal + calla BEGINOBJP2 + + movi [2,14],a8 ;START AT COLOR 2, CYCLE 15 COLORS + movi BASTC_G_P,a9 ;PAL NAME + movi BASTCYCGP,a10 + movk 3,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movk 4,a0 ;# of passes+1 + move @tmnbr,a8 + jruc #botlp + +;top of loop + +#toplp + sll 6,a8 + addi city_names_str_tbl,a8 + move *a8+,a4,L + + movi #tm_nme_str_setup,a2 + calla setup_message + + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 ;city of team + + move @mess_cursy,a0 + addk 23,a0 + move a0,@mess_cursy + + move *a8,a4,L + calla print_string_C2 ;name of team + +;create team logo + move @tmnbr,a2 + sll 5,a2 + addi logos,a2,L + move *a2,a2,L ;*img + + movi [LOGO_X,0],a0,L ;x + movi [LOGO_Y,0],a1,L ;y + movi 1901,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id + calla BEGINOBJ2 + + move @tmnbr,a11 ;get ptr & cnt + sll 5,a11 + addi #tm_plyr_idxcnt,a11,L + move *a11,a10,L + movx a10,a11 + zext a11 + addi #tm_plyr_headname,a11,L + + movi (HD_X+HD_DX)*2,a9 ;figure X (*2 for odd DX) + sra 16,a10 ;pull down cnt -=4 + jrn #x3 + jrz #x4 + subi HD_DX,a9 +#x4 + subi HD_DX,a9 +#x3 + sll 16-1,a9 + subk 2,a10 ;make cnt -=6 + +#hdlp + movk NAME_ID,a0 + calla obj_del1c + + movi DMAWNZ|M_SCRNREL,a4 ;DMA + movk OBJID,a5 ;id - plate,head + clr a6 ;xvel + clr a7 ;yvel + + move a9,a0 ;x + movi [HD_Y,0],a1,L ;y + movi MUGPLAT,a2,L ;*img + movi 1900,a3 ;z + calla BEGINOBJ2 + + movi [26,0],a0,L + add a9,a0 ;x + movi [HD_Y+10,0],a1,L ;y + move *a11+,a2,L ;*img - head + addk 32,a3 ;z pos + calla BEGINOBJ2 + + move *a11+,a2,L ;*img - name + jrn #nl0 + + cmpi K_GILL,a2 + jrz #nork + movi rookie_setup,a2,L + calla setup_message + + move a9,a0 + srl 16,a0 + addi 59,a0 + move a0,@mess_cursx + + movi s_rookie,a4,L + movk OBJID,a0 + move a0,@mess_objid + calla print_string_C2 +#nork + movi str_name_ptrs,a4,L ;is text string name + move *a11(-32),a2,L ;*img - name + sll 5,a2 + add a2,a4 + move *a4,a4,L ;*name + + movi str_name_setup,a2,L + calla setup_message + + movk NAME_ID,a0 + move a0,@mess_objid + calla print_string_C2 + jruc #nl1 +#nl0 + movi 200,a0 + move *a2(ISIZEX),a1 + srl 1,a1 + sub a1,a0 + sll 16,a0 ;x + movi [222,0],a1,L ;y + movk NAME_ID,a5 ;id - name + calla BEGINOBJ2 +#nl1 + SLEEPK 1 + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + +; movi TSEC+10,a8 ;dbg + movi TSEC-10,a8 ;-20 +#wtlp1 + SLEEPK 1 + move a10,a10 + jrn #wtlp2 + calla get_all_buttons_cur2 +; jrnz #o2 ;dbg + jrnz #mksnd +#wtlp2 + dsj a8,#wtlp1 +#o2 + addi [HD_DX,0],a9,L + subk 1,a10 + jrz #done + jrnn #hdlp + addk 6,a10 + jruc #hdlp +#done + movk 15,a8 +#wtlp3 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #o3 ;dbg +; jrnz #mksnd + dsj a8,#wtlp3 +#o3 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movk OBJID,a0 + calla obj_del1c + + move @tmloop,a0 + move @tmnbr,a8 + inc a8 +#botlp + cmpi NUM_TEAMS,a8 + jrlo #tmok + clr a8 +#tmok + move a8,@tmnbr + dec a0 + move a0,@tmloop +; jruc #toplp ;FOR DEBUGING + jrnz #toplp + jruc #xb +#mksnd + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off +#xb + movi CYCPID,a0 + calla KIL1C +;; calla pal_clean + + .asg 32,FRATE + clr a10 + movk FRATE,a11 + CREATE0 fade_down + + SLEEP 1+(256/FRATE)+3 + + RETP + + +#tm_nme_str_setup + PRINT_STR brush20_ascii,8,0,125,59,BRSHGWKP,0 + + +#heading_setup + PRINT_STR brush20_ascii,8,0,200,7,BRSHGYOP,kern_chars + + +#str_staring + .string "RO",1,-1,"ST",1,-1,"E",1,1,"RS F",1,-3,"OR '97!",0 + .even + + +#players_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + + +#tm_plyr_idxcnt + .long [5 -4, 000 *2*32] ;ATLANTA + .long [5 -4, 005 *2*32] ;BOSTON + .long [5 -4, 010 *2*32] ;CHARLOTTE + .long [5 -4, 015 *2*32] ;CHICAGO + .long [5 -4, 020 *2*32] ;CLEVLAND + .long [5 -4, 025 *2*32] ;DALLAS + .long [4 -4, 030 *2*32] ;DENVER + .long [4 -4, 034 *2*32] ;[5 -4, ;DETROIT + .long [4 -4, 038 *2*32] ;GOLDEN STATE + .long [4 -4, 042 *2*32] ;HOUSTON + .long [5 -4, 046 *2*32] ;INDIANA + .long [5 -4, 051 *2*32] ;L.A. CLIPPERS + .long [5 -4, 056 *2*32] ;L.A. LAKERS + .long [3 -4, 061 *2*32] ;MIAMI + .long [5 -4, 064 *2*32] ;MILWAUKEE + .long [3 -4, 069 *2*32] ;MINNESOTA + .long [5 -4, 072 *2*32] ;NEW JERSEY + .long [5 -4, 077 *2*32] ;NEW YORK + .long [5 -4, 082 *2*32] ;ORLANDO + .long [4 -4, 087 *2*32] ;[5 -4, ;PHILADELPHIA + .long [5 -4, 091 *2*32] ;PHOENIX + .long [5 -4, 096 *2*32] ;PORTLAND + .long [5 -4, 101 *2*32] ;SACRAMENTO + .long [5 -4, 106 *2*32] ;SAN ANTONIO + .long [5 -4, 111 *2*32] ;SEATTLE + .long [5 -4, 116 *2*32] ;TORONTO + .long [4 -4, 121 *2*32] ;UTAH + .long [3 -4, 125 *2*32] ;VANCOUVER + .long [5 -4, 128 *2*32] ;WASHINGTON + + +#tm_plyr_headname + ;ATLANTA + .long BLY_ATL,ATLNBLA + .long MUT_DEN,DENNMUT + .long SMI_ATL,ATLNSMI + .long LAE_ATL,ATLNLAE + .long NOR_ATL,ATLNNOR + ;BOSTON + .long BRO_BOS,BOSNBRO + .long HAM_COL, HAMER ;new + .long BAR_BOS,BOSNBAR + .long RAD_BOS,BOSNRAD + .long FOX_BOS,BOSNFOX + ;CHARLOTTE + .long RCE_CHA,CHANRIC + .long MAS_NEY,NWYNMAS + .long DIV_LAK,LALNDIV + .long ZID_CHA,CHANZID + .long CUR_CHA,CHANCUR + ;CHICAGO + .long PIP_CHI,CHINPIP + .long ROD_CHI,CHINROD + .long KUK_CHI,CHINKUK + .long LON_CHI,CHINLON + .long KER_CHI,CHINKER + ;CLEVLAND + .long HIL_CLE,CLENHIL + .long MIL_CLE,CLENMIL + .long PHL_CLE,CLENPHI + .long BRA_CLE,CLENBRA + .long FER_CLE,CLENFER + ;DALLAS + .long KID_DAL,DALNKID + .long HPR_NEY,NWYNHAR + .long JAC_DAL,DALNJAC + .long MON_BOS,BOSNMON + .long MAS_DAL,DALNMAS + ;DENVER + .long MCD_DEN,DENNMcD + .long MAR_SAC,SACNMAR + .long JAC_IND,INDNJAC + .long ELL_DEN,DENNELL + ;DETROIT + .long HIL_DET,DETNHIL +;; .long RIL_COL, RILEY ;new + .long DUM_DET,DETNDUM + .long THR_DET,DETNTHO + .long AUG_ATL,ATLNAUG + ;GOLDEN STATE + .long SPR_GLD,GOLNSPR + .long KON_ORL,ORLNKON + .long SMI_GLD,GOLNSMI + .long MUL_GLD,GOLNMUL + ;HOUSTON + .long OLA_HOU,HOUNOLA + .long HAR_COL, HRNGTON ;new + .long DRX_HOU,HOUNDRE + .long WLS_GLD,GOLNWIL + ;INDIANA + .long MIL_IND,INDNMIL + .long DAM_COL, DAMPIER ;new + .long ROS_DEN,DENNROS + .long SMI_IND,INDNSMI + .long DAV_IND,INDNDAV + ;L.A. CLIPPERS + .long VAU_CLP,LACNVAU + .long ROG_CLP,LACNROG + .long MUR_CLP,LACNMUR + .long RCH_CLP,LACNRIC + .long BAR_CLP,LACNBAR + ;L.A. LAKERS + .long VAN_LAK,LALNEXE + .long CEB_LAK,LALNCEB + .long SCO_VAN,VANNSCO + .long CAM_LAK,LALNCAM + .long JON_LAK,LALNJON + ;MIAMI + .long MOU_MIA,MIANMOU + .long HRD_MIA,MIANHAR + .long DAN_MIA,MIANDAN + ;MILWAUKEE + .long BAK_MLW,MILNBAK + .long ALL_COL, ALLEN ;new + .long LNG_MIN,MINNLAN + .long ROB_MLW,MILNROB + .long RES_MLW,MILNRES + ;MINNESOTA + .long GUG_MIN,MINNGUG + .long MAR_COL, MARBURY ;new + .long GAR_MIN,MINNGAR + ;NEW JERSEY + .long GLL_NEJ, K_GILL ;fix + .long KIT_COL, KITTLES ;new + .long PAC_WAS,WASNPAC + .long BRA_NEJ,NWJNBRA + .long OBA_NEJ,NWJNOBA + ;NEW YORK + .long EWG_NEY,NWYNEWI + .long WAL_COL, WALLACE ;new + .long JON_CHA,CHANJOH + .long STA_NEY,NWYNSTA + .long HOU_DET,DETNHOU + ;ORLANDO + .long HAR_ORL,ORLNHAR + .long SKL_GLD,GOLNSEI + .long GRT_ORL,ORLNGRA + .long AND_ORL,ORLNAND + .long SCO_ORL,ORLNSCO + ;PHILADELPHIA + .long IVE_COL, IVERSON ;new +;; .long MIN_COL, MINOR ;new + .long STA_PHL,PHINSTA + .long COL_PHL,PHINCOL + .long WEA_PHL,PHINWEA + ;PHOENIX + .long JOH_PHX,PHONJOH + .long TIS_PHX,PHONTIS + .long MAN_PHX,PHONMAN + .long HOR_HOU,HOUNHOR + .long CAS_HOU,HOUNCAS + ;PORTLAND + .long ROB_PRT,PORNROB + .long RID_MIN,MINNRID + .long SAB_PRT,PORNSAB + .long AND_CHA,CHANAND + .long CHI_PRT,PORNCHI + ;SACRAMENTO + .long OWE_SAC,SACNOWE + .long RAF_DEN,DENNRAU + .long RIC_SAC,SACNRIT + .long GRA_SAC,SACNGRA + .long EDN_SAC,SACNEDN + ;SAN ANTONIO + .long ELL_SAN,SANNELL + .long ROB_SAN,SANNROB + .long MAX_PHL,PHINMAX + .long JON_SAN,SANNJOH + .long DEL_SAN,SANNNEG + ;SEATTLE + .long KMP_SEA,SEANKEM + .long PAY_SEA,SEANPAY + .long SCH_SEA,SEANSCH + .long HWK_SEA,SEANHAW + .long FOR_SEA,SEANFOR + ;TORONTO + .long ROG_TOR,TORNROG + .long CAM_COL, CAMBY ;new + .long STO_TOR,TORNSTO + .long JON_DAL,DALNJON + .long WIL_MIA,MIANWIL + ;UTAH + .long STK_UTA,UTANSTO + .long MLN_UTA,UTANMAL + .long HRN_UTA,UTANHOR + .long MOR_UTA,UTANMOR + ;VANCOUVER + .long ANT_VAN,VANNANT + .long EDW_VAN,VANNEDW + .long REV_VAN,VANNREE + ;WASHINGTON + .long STR_PRT,PORNSTR + .long WEB_WAS,WASNWEB + .long HWD_WAS,WASNHOW + .long MUR_WAS,WASNMUR + .long CHE_WAS,WASNCHE + +; Removed +;DALNMcC,DETNMIL,HOUNSMI,INDNMcK,MIANCHA,MILNBEN,MILNDOU,MINNWEB +;NWJNGIL,NWJNEDW,NWYNOAK,PHINRUF,PHONPER,PHONFIN,PORNWIL,SANNPER +;TORNROB,TORNMIL,TORNMUR,UTANBEN,VANNSCO,VANNMUR + + +s_allen + .string "Ray Allen",0 +s_camby + .string "Marcus Camby",0 +s_dampier + .string "Eric Dampier",0 +s_hamer + .string "Steve Hamer",0 +s_harrington + .string "Othella Harrington",0 +s_iverson + .string "Allen Iverson",0 +s_kittles + .string "Kerry Kittles",0 +s_marbury + .string "Stephon Marbury",0 +s_minor + .string "Ryan Minor",0 +s_riley + .string "Ron Riley",0 +s_wallace + .string "John Wallace",0 + +s_gill + .string "Kendall Gill",0 + +s_rookie + .string "Rookie",0 + .even + +rookie_setup + PRINT_STR bast8tcyc_ascii,8,0,200,HD_Y+6,BASTC_G_P,0 + +str_name_setup + PRINT_STR bast18_ascii,8,0,200,213,BST18W_P,0 + +str_name_ptrs + .long 0 + .long s_allen,s_camby,s_dampier,s_hamer + .long s_harrington,s_iverson,s_kittles,s_marbury + .long s_minor,s_riley,s_wallace + .long s_gill + +;DJT End + +#***************************************************************************** + + .asg 8,#NOINITOFF + .asg 21,#OFF1 + .asg 12,#SGMDYSPC + .asg 33,#WLOFF + .asg 160,#COL1 + .asg 210,#COL2 + .asg 4,#ROFF1 + + SUBR rank_screen + + + move @PSTATUS,a0 ;if nobody has entered their + btst 0,a0 ;initials, then skip this + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrgt #have_initials +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrgt #have_initials +#nop2 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrgt #have_initials +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrgt #have_initials +#nop4 + RETP + + +#have_initials + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@IRQSKYE ;background color + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2a + movi #rank_kit_mod,a0 +#not_2a + move a0,@BAKMODS,L + calla BGND_UD1 + +;;; 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 CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + CREATE0 credits3 + + movk 1,a10 + callr print_column + movk 2,a10 + callr print_column + +; movi #rank_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz #is_2 + + clr a10 + callr print_column + movk 3,a10 + callr print_column +#is_2 + SLEEPK 2 + calla display_unblank + + SLEEP TSEC + movi 9*TSEC,a10 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + dsj a10,#whopper_with_cheese +#exit + SLEEPK 1 + + RETP + + + + + +#rank_mod + .long ENTER4BMOD + .word 0,0 + .long ATRIBUTEBMOD ;NEW stats box map + .word 0,178 ;x,y + .long 0 + + +#rank_kit_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + + + + + .asg 25,RANKY + .asg 40,RECY + .asg 51,WLY + .asg 62,PCTY + + .asg 78,STREAKY1 + .asg 88,STREAKY2 + + .asg 106,HAVDEFY1 + .asg 116,HAVDEFY2 + .asg 126,HAVDEFY3 + + .asg 144,NEXTY1 + .asg 154,NEXTY2 + .asg 164,NEXTY3 + + .asg 204,INITY + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,6,BST18G_P,0 +#rank_setup1 + PRINT_STR bast8t_ascii,3,0,0,RANKY,BAST_W_P,0 +#initials_setup1 + PRINT_STR bast8_ascii,5,0,94,6,BAST_W_P,0 + +stat_title_tbl + .long #stats_setup1 + .long #stats_setup2 + .long #stats_setup3 + .long #stats_setup4 + +#stats_setup1 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup2 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup3 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 +#stats_setup4 + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + + +#str_cpu + .string "CPU",0 +#str_rank + .string "RANK: #",0 ;"RANK #" +#str_record +; .string 81h,0 ;"RECORD: " +;#str_w .string 8ah," - ",0 ;" (W) - " +;#str_l .string 8bh,0 ;"(L)" + .string "RECORD",0 ;"RECORD: " +#str_w .string "(W) - ",0 ;" (W) - " +#str_l .string "(L)",0 ;"(L)" + +#str_pct + .string "PCT: .",0 ;"PCT: ." +; .string 83h," .",0 ;"PCT: ." +#str_pct100 + .string "PCT: 1.000",0 ;"PCT: 1.000" +; .string 83h," 1.000",0 ;"PCT: 1.000" +#str_streak + .string "STREAK",0 +#str_win + .string " WIN",0 +#str_wins + .string " WINS",0 +#str_none + .string "NONE",0 +#str_next + .string "next cpu",0 +#str_vs + .string "opponent",0 + +;#str_hd0 .string 87h,0 ;"YOU HAVE" +;#str_hd1 .string 85h,' ',0 ;"DEFEATED XX" +;#str_hd2 .string 88h,0 ;"OF THE 29" +;#str_hd3 .string 89h,0 ;"NBA TEAMS" +;#str_all .string " ",8ch,0 ;" ALL" +#str_hd1 .string "DEFEATED ",0 ;"DEFEATED XX" +#str_hd2 .string "OF THE 29",0 ;"OF THE 29" +#str_hd3 .string "NBA TEAMS",0 ;"NBA TEAMS" +;#str_all .string " ALL",0 ;" ALL" +#str_all .string " 29",0 ;" ALL" +#str_dash .string "-",0 + + + .even + +#pdatas + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +#center_xs + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + + +;----------------------------------------------------------------------------- +;a10 = player number (0-3) +;----------------------------------------------------------------------------- +print_column + + move @PSTATUS2,a0 + btst a10,a0 + jrz #cpu_player + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #pdatas,a0 + move *a0,a11,L + + move *a11(PR_NAME1),a0 + jrle #no_initials + + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs+10h,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2c + addi 10h,a0 +#not_2c + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi message_buffer,a3 + move a11,a4 + addi PR_NAME1,a4 + calla get_name_string + calla print_string_C + +;print 'stats' title + calla create_heading2 + +; move a10,a2 +; sll 5,a2 +; addi stat_title_tbl,a2 +; move *a2,a2 +; calla setup_message +; movi stats_str,a4,L +; calla print_string_C2 + + movi #rank_setup1,a2 + calla setup_message + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2d + addi 20h,a0 +#not_2d + move *a0,a0 + move a0,@mess_cursx + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi #str_rank,a4 + callr copy_rom_string + move *a11(PR_RANK),a0 ;rank + cmpi 10,a0 + jrgt #notten + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L +#notten + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C ;centered + + movi BAST_Y_P,a0 ;highlight cycle colour + move a0,@message_palette,L + + movi RECY,a0 + move a0,@mess_cursy + movi #str_record,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi WLY,a0 + move a0,@mess_cursy + move *a11(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi #str_w,a4 + callr concat_rom_string + move *a11(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string + movi #str_l,a4 + callr concat_rom_string + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi PCTY,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi #str_pct,a4 ;"PCT: ." + callr copy_rom_string + move *a11(PR_LOST),a2 ;games lost + move *a11(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi #str_pct100,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered +#skip_loss + + movi BAST_Y_P,a0 + move a0,@message_palette,L + +; move *a11(PR_WINSTREAK),a0 ;no. consecutive wins +; cmpi 3,a0 +; jrlt #no_hilght +; movi BAST_W_P,a1 ;highlight cycle colour +; move a1,@message_palette,L +;#no_hilght + movi STREAKY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi STREAKY2,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi #str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi #str_wins,a4 + dec a0 + jrnz #iswins + movi #str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi HAVDEFY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd1,a4 ;"DEFEATED NN" + callr copy_rom_string + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi #str_all,a4 ;" ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi HAVDEFY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd2,a4 ;"OF THE 30" + callr print_string_C2 ;centered + + movi HAVDEFY3,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_hd3,a4 ;"NBA TEAMS" + callr print_string_C2 ;centered + + move *a11(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jreq #defeated_all + + movi BAST_Y_P,a0 + move a0,@message_palette,L + + movi NEXTY1,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_next,a4 + callr print_string_C2 + + movi NEXTY2,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_vs,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi NEXTY3,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a11(PR_TEAMSDEF),a1,L + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +#defeated_all +#no_initials + rets + + +#cpu_player + + .if 0 + movi #initials_setup1,a2 + calla setup_message + + move a10,a0 + sll 5,a0 ;x16x2 + addi #center_xs+10h,a0 + move *a0,a0 + move a0,@mess_cursx + + movi INITY,a0 + move a0,@mess_cursy + movi #str_cpu,a4 + calla print_string_C2 + + .endif + + rets + + +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +; +; +;deloff SLEEP 1ch +; callr deloffbot +; jruc deloff +; +;deloffbot: +;;delete foreground objects that are off bottom of screen +; move @WORLDTLY,a1,L +; addi [260,0],a1 +; srl 16,a1 +; movi RAMLST,a3 +; clr a0 +; move a0,*a3,L +; movi OBJLST,a0 +;sobjs1 +; move *a0,a0,L +; jreq sobjsx +; move *a0(OYPOS),a2 +; cmp a2,a1 +; jrnc sobjs1 +;contab +; move a0,*a3+,L ;img to be deleted +; clr a4 +; move a4,*a3,L ;zero next entry +; move a4,*a3(32),L ;zero next entry +; jruc sobjs1 +;sobjsx +; movi RAMLST,a1 +;delt move *a1+,a0,L +; jrz delx +; PUSH a1 +; calla DELOBJ +; PULL a1 +; jruc delt +;delx rets + + +#******************************** + + SUBR winning_msg + + movi LN0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + move @team1,a14 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrlt #ok + move @team2,a14 +#ok + move a14,a10 + sll 5,a14 + addi strings,a14 + move *a14,a4,L + move *a4+,a0 + move a0,@mess_cursx2 + + calla print_string2b + + movi #swin,a4 + subk 30-1,a10 + jrnz #ok1 + movi #swina,a4 +#ok1 + move *a4+,a0 + move a0,@mess_cursx2 + movi 114,a0 + move a0,@mess_cursy + + calla print_string2b + + CREATE0 flash_bigtxt2 + move a0,a9 + + SLEEP 3*60 + + move a9,a0 + calla KILL + + movi TYPTEXT,a0 + calla obj_del1c + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +LN0_setup + PRINT_STR hangfnt38_ascii,14,0,200,60,HANGF_R_P,kern_chars + .even + +strings .long #s1,#s2,#s3,#s4,#s5,#s6,#s7,#s8,#s9,#s10 + .long #s11,#s12,#s13,#s14,#s15,#s16,#s17,#s18,#s19,#s20 + .long #s21,#s22,#s23,#s24,#s25,#s26,#s27,#s28 + .long #s29,#s30 + +#s1 .word 96 + .string "H",1,-6,"A",1,4,"W",1,-5,"K",1,-5,"S",0 +#s2 .word 85 + .string "C",1,-4,"E",1,-5,"L",1,6,"T",1,-3,"I",1,-1,"C",1,-2,"S",0 +#s3 .word 74 + .string "H",1,-3,"O",1,-2,"R",1,-3,"N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s4 .word 113 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,2,"S",0 +#s5 .word 49 + .string "C",1,-5,"A",1,4,"V",1,-10,"A",1,3,"L",1,3,"I",1,-3,"E",1,-4,"R",1,-2,"S",0 +#s6 .word 40 + .string "M",1,-6,"A",1,4,"V",1,-7,"E",1,-4,"R",1,-1,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s7 .word 76 + .string "N",1,-3,"U",1,-3,"G",1,-1,"G",1,-4,"E",1,1,"T",1,-5,"S",0 +#s8 .word 80 + .string "P",1,-1,"I",1,-1,"S",1,2,"T",1,-4,"O",1,-3,"N",1,-4,"S",0 +#s9 .word 55 + .string "W",1,-8,"A",1,3,"R",1,-3,"R",1,-1,"I",1,-1,"O",1,-2,"R",1,-2,"S",0 +#s10 .word 75 + .string "R",1,-2,"OC",1,-3,"K",1,-6,"E",1,1,"T",1,-5,"S",0 +#s11 .word 94 + .string "P",1,-7,"A",1,3,"C",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s12 .word 68 + .string "C",1,-4,"L",1,3,"I",1,-2,"P",1,-3,"P",1,-4,"E",1,-4,"R",1,-2,"S",0 +#s13 .word 93 + .string "L",1,1,"A",1,2,"K",1,-6,"E",1,-4,"R",1,-2,"S",0 +#s14 .word 130 + .string "H",1,-6,"E",1,-5,"A",1,3,"T",0 +#s15 .word 108 + .string "B",1,-1,"U",1,-3,"C",1,-3,"K",1,-5,"S",0 +#s16 .word 68 + .string "T",1,3,"'",1,1,"W",1,-4,"O",1,-3,"L",1,6,"V",1,-7,"E",1,-3,"S",0 +#s17 .word 129 + .string "N",1,-5,"E",1,1,"T",1,-5,"S",0 +#s18 .word 92 + .string "K",1,-5,"N",1,-3,"I",1,-1,"C",1,-3,"K",1,-5,"S",0 +#s19 .word 109 + .string "M",1,-6,"A",1,2,"G",1,-1,"I",1,-1,"C",0 +#s20 .word 113 + .string "7",1,-3,"6",1,-1,"E",1,-4,"R",1,-2,"S",0 +#s21 .word 126 + .string "S",1,-1,"U",1,-5,"N",1,-4,"S",0 +#s22 .word 77 + .string "B",1,-4,"L",1,1,"A",1,2,"Z",1,-5,"E",1,-4,"R",1,-2,"S",0 +#s23 .word 112 + .string "K",1,-4,"I",1,-4,"N",1,-3,"G",1,-2,"S",0 +#s24 .word 110 + .string "S",1,-3,"P",1,-1,"U",1,-4,"R",1,-2,"S",0 +#s25 .word 96 + .string "SO",1,-3,"N",1,-2,"I",1,-1,"C",1,-2,"S",0 +#s26 .word 73 + .string "R",1,-3,"A",1,2,"P",1,3,"T",1,-4,"O",1,-2,"R",1,-2,"S",0 +#s27 .word 128 + .string "J",1,-7,"A",1,2,"Z",1,-6,"Z",0 +#s28 .word 58 + .string "G",1,-3,"R",1,-1,"I",1,-3,"Z",1,-6,"Z",1,-5,"L",1,3,"I",1,-3,"E",1,-3,"S",0 +#s29 .word 83 + .string "B",1,-1,"U",1,-5,"L",1,1,"L",1,1,"E",1,1,"T",1,-5,"S",0 +#s30 .word 29 + .string "T",1,-6,"H",1,-6,"E C",1,-4,"H",1,-6,"A",1,2,"M",1,-5,"P",1,-2,"S",0 + +#swina .word 49 + .string "W",1,-5,"I",1,-4,"N A",1,2,"G",1,-4,"A",1,3,"I",1,-5,"N",0 +#swin .word 144 + .string "W",1,-5,"I",1,-4,"N",0 + .even + + +#***************************************************************************** +;DJT Start + .if TRIVCON + SUBR trivia_rules + + movk ADJTRIVIA,a0 ;Get difficulty level + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrnz #notriv + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + move a0,@DISPLAYON + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + + calla display_unblank + + SLEEPK 1 ;Make sure page is clear + + movi #strops,a11 +#lp + clr a0 + move a0,@DISPLAYON + move a0,@dpageflip + SLEEPK 1 + + movi #rules_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movk 24,a0 + move a0,@mess_line_spacing + + movi #heading_setup,a2 + calla setup_message + movi #str_heading,a4 + calla print_string_C2 + + movi #nopurch_setup,a2 + calla setup_message + movi #str_nopurch,a4 + calla print_string_C2 + + movi #rules_setup,a2 + calla setup_message + movk 9,a0 + move a0,@mess_line_spacing + + jruc #nxt + +#dostr + move *a11+,a0 + move *a11+,a1,L + move a0,@mess_cursx + move a1,@message_palette,L + calla print_string_C2 +#nxt + move *a11+,a4,L + jrnz #dostr + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + clr a0 + move a0,@DISPLAYON + + clr a1 + dec a1 + calla obj_delc + calla KILBGND + + move *a11+,a4,L + jrn #dostr + + move a4,a10 + + movk 1,a0 + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip +#butp + SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a10,#butp + +#butp2 + move *a11,a4,L + jrnz #lp + + clr a10 + movk 8,a11 + CREATE0 fade_down + + SLEEP 40 +#notriv + RETP + + +#strops + LWL #rules_str1, 87,#bas7_alt + LWL #rules_str1a, 245,#bas7_white + LWL #rules_str1b, 200,#bas7_white + .long 0 + LWL #rules_str2, 64,#bas7_alt + LWL #rules_str2a, 226,#bas7_white + LWL #rules_str2b, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str3, 48,#bas7_alt + LWL #rules_str3a, 226,#bas7_white + LWL #rules_str3b, 200,#bas7_white + .long 0 + LWL #rules_str4, 121,#bas7_alt + LWL #rules_str4a, 273,#bas7_white + LWL #rules_str4b, 200,#bas7_white + .long 0 + LWL #rules_str5 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str6 , 200,#bas7_white + .long 0 + LWL #rules_str7 , 200,#bas7_white + .long 0 + LWL #rules_str8 , 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str9 , 200,#bas7_white + .long 0 + .long TSEC*15 + + LWL #rules_str10, 116,#bas7_alt + LWL #rules_str10a,284,#bas7_white + LWL #rules_str10b,200,#bas7_white + .long 0 + LWL #rules_str11, 200,#bas7_white + .long 0 + LWL #rules_str12, 200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str13, 200,#bas7_alt + LWL #rules_str14, 82,#bas7_alt + LWL #rules_str14a,243,#bas7_white + LWL #rules_str14b,200,#bas7_white + .long 0 + LWL #rules_str15, 200,#bas7_white + .long 0 + LWL #rules_str16, 80,#bas7_alt + LWL #rules_str16a,242,#bas7_white + LWL #rules_str16b,200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str17, 93,#bas7_alt + LWL #rules_str17a,250,#bas7_white + LWL #rules_str17b,200,#bas7_white + LWL #rules_str18, 130,#bas7_alt + LWL #rules_str18a,251,#bas7_white + LWL #rules_str18b,200,#bas7_white + LWL #rules_str19, 170,#bas7_alt + LWL #rules_str19a,285,#bas7_white + .long 0 + LWL #rules_str20, 46,#bas7_alt + LWL #rules_str20a,217,#bas7_white + LWL #rules_str21, 58,#bas7_alt + LWL #rules_str21a,230,#bas7_white + LWL #rules_str21b,200,#bas7_white + .long 0 + .long TSEC*25 + + LWL #rules_str22, 76,#bas7_alt + LWL #rules_str22a,238,#bas7_white + LWL #rules_str22b,200,#bas7_white + .long 0 + LWL #rules_str23, 200,#bas7_white + .long 0 + .long TSEC*20 + + LWL #rules_str24, 200,#bas7_white + .long 0 + LWL #rules_str25, 91,#bas7_alt + LWL #rules_str25a,239,#bas7_white + LWL #rules_str25b,200,#bas7_white + LWL #rules_str25c,200,#bas7_alt + LWL #rules_str25d,200,#bas7_white + .long 0 + .long TSEC*20 + + .long 0 + +#rules_mod + .long BKGDBMOD + .word 0,0 + .long 0 + +#bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + +#bas7_white + .word 3 + .word 0,0,(1fh*32+1fh)*32+1fh + +#heading_setup + PRINT_STR bast18_ascii,8,0,200,7,BSTGYO_P,0 + +#str_heading + .string "NBA HANGTIME SWEEPSTAKES",1 + .string "OFFICIAL RULES",0 + .even + +#nopurch_setup + PRINT_STR bast10_ascii,8,0,200,59,BAST_G_P,0 + +#str_nopurch + .string "NO PURCHASE NECESSARY",0 + .even + +#rules_setup + PRINT_STR bast7t_ascii,5,0,200,76,#bas7_alt,0 + +#rules_str1 + .string "Who May Enter: ",0 +#rules_str1a + .string "The NBA HANGTIME SWEEPSTAKES is open to",1,0 +#rules_str1b + .string "all legal residents of the United States, except residents",1 + .string "of Arizona, New York, Vermont and Washington, employees",1 + .string "of WMS Industries, the National Basketball Association,",1 + .string "related parties and their immediate families. All federal,",1 + .string "state and local laws apply. Void where prohibited.",1 + .string "Contest sponsored by Midway Manufacturing Company,",1 + .string "3401 N. California, Chicago, IL 60618.",1,1,0 + +#rules_str2 + .string "Deadline: ",0 +#rules_str2a + .string "The NBA HANGTIME SWEEPSTAKES begins on April 10,",1,0 +#rules_str2b + .string "1996. To be eligible, all entries must be received no later",1 + .string "than 11:59 p.m. Eastern Standard Time on September 13, 1996.",1 + .string "Sponsor is not responsible for lost, stolen, late or",1 + .string "misdirected mail, mechanical errors, typographical or",1 + .string "printing errors, third party interference or electrical,",1 + .string "network, computer, hardware or software malfunctions.",0 + +#rules_str3 + .string "To Enter: ",0 +#rules_str3a + .string "Participants may enter the NBA HANGTIME SWEEPSTAKES",1,0 +#rules_str3b + .string "after answering NBA HANGTIME trivia questions worth 100",1 + .string "points. A participant may reach 100 points in two ways:",1,1,0 + +#rules_str4 + .string "(1) GAME METHOD OF ENTRY: ",0 +#rules_str4a + .string "Each player who purchases a",1,0 +#rules_str4b + .string "full, four-quarter length game of NBA HANGTIME will have",1 + .string "the option of establishing a Personal Identification",1 + .string "Number (PIN). After each full, four-quarter length game",1 + .string "of NBA HANGTIME, PLAYED ON ONE SPECIFIC MACHINE, IN ONE",1 + .string "PARTICULAR LOCATION, in which one or more participants",1 + .string "have entered his or her PIN number, the NBA HANGTIME TRIVIA",1 + .string "GAME will be activated for those participant(s).",1,1,0 + +#rules_str5 + .string "When activated, the player will see a trivia contest",1 + .string "screen that explains the contest rules.",0 + +#rules_str6 + .string "A second screen will then appear with a multiple choice",1 + .string "trivia question. Beside each question will be a point value",1 + .string "that can be earned for answering that question correctly.",1 + .string "Each question has a constant point value, specific to that",1 + .string "question. Each player will have 10 seconds to answer the",1 + .string "question. If answered correctly, the point value of that",1 + .string "question will be stored in the machine, cross-referenced",1,0 + +#rules_str7 + .string "with the participant's PIN number. The point value of each",1 + .string "subsequent, correctly answered question submitted under",1 + .string "that PIN number will be added to the participant's point",1 + .string "total, and the machine will keep a running score of each",1 + .string "player's total points, for each player with a PIN number",1 + .string "assigned to that machine. PIN numbers may only be used on",1 + .string "one, specific machine. A participant's point total will not",1,0 + +#rules_str8 + .string "include points earned in games played on other NBA HANGTIME",1 + .string "machines played at other locations. ",0 + +#rules_str9 + .string "Once a player reaches a total of 100 points, they will be",1 + .string "designated an 'NBA Trivia Champion.' A screen will then",1 + .string "appear with a password. NBA Trivia Champions must then send",1 + .string "their password, along with their name, age, address and",1 + .string "phone number, printed or typed legibly, to NBA HANGTIME",1 + .string "TRIVIA GAME Entries, P.O. Box 52990, Dept. 7526, Phoenix,",1 + .string "Arizona 85072-2990 to be entered in the NBA HANGTIME",1 + .string "SWEEPSTAKES drawing.",0 + +#rules_str10 + .string "(2) WRITE-IN METHOD OF ENTRY: ",0 +#rules_str10a + .string "Participants may send a self-",1,0 +#rules_str10b + .string "addressed, stamped envelope to NBA HANGTIME TRIVIA GAME",1 + .string "Winners List/Rules Requests, P.O. Box 52912, Dept. 7527,",1 + .string "Phoenix, Arizona 85072-2912. They will then receive, by",1 + .string "mail, a complete set of trivia questions identical to the",1 + .string "trivia questions that appear in the NBA HANGTIME arcade",1 + .string "game, with identical point values, and a complete set of",1,0 + +#rules_str11 + .string "these Rules. After answering the questions provided to the",1 + .string "best of the participant's ability, spending no more time",1 + .string "than one minute answering each question, the answers must",1 + .string "be sent to NBA HANGTIME TRIVIA GAME Entries, P.O. Box 52990,",1 + .string "Dept. 7526, Phoenix, Arizona 85072-2990 for scoring, along",1 + .string "with the participant's name, age, address and phone number,",1 + .string "printed or typed legibly. Participants who correctly answer",1,0 + +#rules_str12 + .string "enough of the questions provided to achieve a point total of",1 + .string "at least 100 points will be designated 'NBA Trivia Champion'",1 + .string "and will be entered in the NBA HANGTIME SWEEPSTAKES drawing.",0 + +#rules_str13 + .string "Prizes:",1,1,0 + +#rules_str14 + .string "Grand prize (1): ",0 +#rules_str14a + .string "A trip for two to any one regular season",1,0 +#rules_str14b + .string "NBA game during the 1996-97 NBA season. The winner may",1 + .string "choose any regular season game. The prize package includes",1 + .string "airfare for two to the city in which the game is played,",1 + .string "two tickets to the game, two nights hotel accommodations",1 + .string "for two, double occupancy, and $500.00 to cover meals and",1 + .string "transportation to and from the airport. The winner will be",1,0 + +#rules_str15 + .string "provided a schedule of games by October 15, 1996. They",1 + .string "must then notify Midway Manufacturing of their choice by",1 + .string "October 31, 1996. (Approximate Retail Value: $5,300.00)",1,1,0 + +#rules_str16 + .string "First Prize (1): ",0 +#rules_str16a + .string "An NBA HANGTIME coin-operated arcade game",1,0 +#rules_str16b + .string "(Approximate Retail Value: $5,000.00)",0 + +#rules_str17 + .string "Second Prize (25): ",0 +#rules_str17a + .string "An Official NBA Champion Brand Jersey.",1,0 +#rules_str17b + .string "Winners will receive either a Scottie Pippen, Anfernee",1 + .string "Hardaway, Shawn Kemp, Magic Johnson, Grant Hill or Jason",1 + .string "Kidd jersey. Winners will not be able to select which",1 + .string "jersey they receive (Approximate Retail Value: $125.00 each)",1,1,0 + +#rules_str18 + .string "Third Prize (1,000): ",0 +#rules_str18a + .string "An NBA HANGTIME T-shirt",1,0 +#rules_str18b + .string "(Approximate Retail Value: $10.00)",1,1,0 + +#rules_str19 + .string "Total approximate prize value: ",0 +#rules_str19a + .string "$23,425.00",1,1,0 + +#rules_str20 + .string "Odds: ",0 +#rules_str20a + .string "Odds are dependent upon the number of entries received.",1,1,0 + +#rules_str21 + .string "Selection: ",0 +#rules_str21a + .string "Winners will be randomly selected by Continental",1,0 +#rules_str21b + .string "Promotion Group Inc., an independent judging and fulfillment",1 + .string "agency, on or about September 18, 1996. All decisions of the",1 + .string "judges are final and binding in all respects.",1,1,0 + +#rules_str22 + .string "Notification: ",0 +#rules_str22a + .string "Winners will be notified by overnight courier",1,0 +#rules_str22b + .string "and/or telephone on or about September 22, 1996. ",1 + .string 1 + .string "Only one entry per participant. No entries by facsimile",1 + .string "or electronic transmission. Winners will be required to",1 + .string "complete affidavit of eligibility, waiver of liability and",1 + .string "publicity release, which must be returned within 15 days of",1 + .string "receipt or any prize award will be void. If winner is under",1,0 + +#rules_str23 + .string "the age of 18, winner must provide signed parental consent,",1 + .string "in a form provided by the Sponsor, in order to receive prize.",1 + .string "Limit one prize per household.",1 + .string 1 + .string "All prizes will be awarded. No substitution or transfer of",1 + .string "prizes. Taxes are the responsibility of winners.",0 + +#rules_str24 + .string "By participating winners consent to use of their name,",1 + .string "address and likeness for advertising, promotional and",1 + .string "publicity purposes without additional compensation, except",1 + .string "where prohibited by law. All entries become the property",1 + .string "of sponsor and will not be returned.",1,1,0 + +#rules_str25 + .string "Winners List: ",0 +#rules_str25a + .string "For a winners list, please send a self-",1,0 +#rules_str25b + .string "addressed, stamped envelope by September 22, 1997 to:",1,1,0 +#rules_str25c + .string "NBA HANGTIME TRIVIA GAME Winners List/Rules Requests",1,0 +#rules_str25d + .string "P.O. Box 52912, Dept. 7527, Phoenix, Arizona 85072-2912",0 + .even + .endif ;TRIVCON +;DJT End + + + + .if 0 + +#**************************************************************** +* Title screen + +; SUBRP show_title2 +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi #ttl_t,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 startcyc +; +; clr a10 +; movk 16,a11 +; +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; calla display_unblank +; +; SLEEP 1*TSEC+30 +; +; movi 7*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; movi CYCPID,a0 +; calla KIL1C +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + +;#ttl_t +; .long ttitleBMOD +; .word 23,25 +; .long 0 + +;startcyc +; SLEEPK 9 +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,8],a10 ;1st,last color +; movk 2,a11 ;Rate +; CREATE CYCPID,COLCYC +; DIE + + .endif + + +#***************************************************************************** + +; SUBRP drw_stars +; +; calla display_blank +; calla WIPEOUT +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; move a0,@IRQSKYE +; +; SLEEPK 2 +; +; movi coinin_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +; movk 1,a0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO +; MOVE A0,A0 +; JRNZ #NONO1 +; CLR A0 +; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON +; +; movi tuneend1_snd,a0 +; calla snd_play1ovr +; +;#NONO1 +; +; .ref starring +; JSRP starring +; +;; movk 8,a11 +;; .ref FADE_DOWN +;; CREATE0 FADE_DOWN +; +; SLEEP 30 +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; movi musicoff_snd,a0 +; calla snd_play1ovr +; +; RETP + + +;coinin_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + +#***************************************************************************** + +; SUBRP drw_ladder +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; move a0,@HALT +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; movi [13*360-8,0],a0 +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #ladder_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; CREATE0 deloff +; +; CREATE0 drw_teams +; +; SLEEPK 2 +; +; clr a10 +; movk 16,a11 +; CREATE0 fade_up +; +; movk 1,a0 +; move a0,@DISPLAYON +; SLEEPK 2 +; calla display_unblank +; +; +; SLEEP 2*60 +; +; CREATE0 drwnbalogoUP +; +; movi >772-4,a10 +;#lp SLEEPK 1 +; move @WORLDTLY,a0,L +; subi [2,8000h],a0 +; move A0,@WORLDTLY,L +; calla BGND_UD1 +; +; +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob dsj a10,#lp +; +; SLEEP 4*64 +; +;#xb +; +;;delete foreground objects that are not within visible screen area +;;init object ram stack +; clr a1 +; movi FADERAM,a2 +; +; movi 100,a0 ;uhl to clear +;clrlup: +; move a1,*a2+,L +; dsjs a0,clrlup +; +; movi FADERAM,a9 +; move @OBJLST,a8,L ;look through the fgndlist +; jreq ofail ;does not exist! indicate error +;chkfobj: +; calla SCRTST ;test for object on screen +; jreq onscrn ;object is definitely on screen! +; move a8,*a9+,L ;dump into ram stack +;onscrn: +; move *a8(OLINK),a8,L ;let's search for another +; jrne chkfobj +; clr a0 +; move a0,*a9,L ;terminate table +; +;objpull: +; movi FADERAM,a9 +;lupobj: +; move *a9+,a0,L +; jrz ofail ;no object list exits! +; calla DELOBJ ;delete object from list +; jruc lupobj +; +;ofail: +; +; calla pal_clean +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 22h +; RETP + + +;drwnbalogoUP +; +; SLEEP 1*60 +;#drw +; movi [60,0],a11 +;; movi nbalogo,a9 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; SLEEP 15*60 +; movi [60,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; movi [334,0],a11 +; movi TSMLOGO,a9 +; CREATE0 logo_drift +; DIE +; +;logo_drift +; +; move a11,a0 +; movi [248+48,0],a1 +; movi >7591,a3 ;Z +; movi DMAWNZ|M_NOCOLL,a4 +; move a9,a2 +; movi CLSDEAD,a5 +; clr a6 +; movi [-3,0],a7 +; calla BEGINOBJ +; +; SLEEP 25*60 +; jauc DELOBJDIE + + + +;drw_teams +; +; .ref ladder_imgs0,ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 +; .ref ladder_imgs5,ladder_imgs6 +; +; movi ladder_imgs0,a9 +; callr #drlp +; SLEEP 90 +; movi ladder_imgs1,a9 +; callr #drlp +; SLEEP 140h +; callr deloffbot +; movi ladder_imgs2,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs3,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs4,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs5,a9 +; callr #drlp +; SLEEP 110h +; callr deloffbot +; movi ladder_imgs6,a9 +; callr #drlp +; DIE + + +;#drlp move *a9+,a2,L +; jrz #x +; +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +;; movi DMAWNZ|M_FLIPH|M_NOCOLL,a4 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; callr #clippit +; +; move *a9+,a2,L +; move *a9+,a0,L +; move *a9+,a1,L +; sll 16,a0 +; sll 16,a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; jruc #drlp +;#x rets + + +; .asg 65,HEAD_WIDTH +;#clippit +; move *a8(OSIZEX),a0 +; subi HEAD_WIDTH,a0 +; jrb #no_clip +; move a0,*a8(OFSET) +;#no_clip +; rets + + +;#ladder_mod +; .long dabullBMOD +; .word >ff4b+5,>ffa1+3 +; .long ladderBMOD +; .word 0+5,-92+360 +; .long ladderBMOD +; .word 0+5,-92+360*2 +; .long ladderBMOD +; .word 0+5,-92+360*3 +; .long ladderBMOD +; .word 0+5,-92+360*4 +; .long ladderBMOD +; .word 0+5,-92+360*5 +; .long ladderBMOD +; .word 0+5,-92+360*6 +; .long ladderBMOD +; .word 0+5,-92+360*7 +; .long ladderBMOD +; .word 0+5,-92+360*8 +; .long ladderBMOD +; .word 0+5,-92+360*9 +; .long ladderBMOD +; .word 0+5,-92+360*10 +; .long ladderBMOD +; .word 0+5,-92+360*11 +; .long ladderBMOD +; .word 0+5,-92+360*12 +; .long ladderBMOD +; .word 0+5,-92+360*13 +; .long 0 + + + +#**************************************************************** + +; SUBRP drw_cutaway +; +; calla display_blank +; calla WIPEOUT +; calla pal_clean +; +; clr a0 +; move a0,@dtype ;2D +; +; movk 1,a0 ;page flipping on +; move a0,@dpageflip +; +; movi SCRNEND,a0 ;[256,405] +; move a0,@SCRNLR,L +; +; clr a0 +; move a0,@WORLDTLX,L +; move a0,@WORLDTLY,L +; +; SLEEPK 2 +; +; movi #cut_mod,a0 +; move a0,@BAKMODS,L +; calla BGND_UD1 +; +; movk 1,a0 +; move a0,@DISPLAYON +; +; SLEEPK 2 +; +; calla display_unblank +; +;; CREATE0 drw_cards +;; SLEEP 4*64 +;; clr a0 +;; move a0,@DISPLAYON +; +; SLEEP 1*TSEC+30 +; +; movi 3*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; +; clr a10 +; movk 8,a11 +; CREATE0 fade_down +; +; SLEEP 40 +; +; RETP + + +;#cut_mod +; .long viewfrtBMOD +; .word 0,5 +; .long 0 + + + .end + + diff --git a/SRC/AUDIT.ASM b/SRC/AUDIT.ASM new file mode 100644 index 0000000..86e2a60 --- /dev/null +++ b/SRC/AUDIT.ASM @@ -0,0 +1,3544 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage) +* Shawn Liptak, 11/1/91 -Clean up +* Shawn Liptak, 2/11/91 -Started basketball +* Shawn Liptak, 11/6/92 -L_TIMER clean up +* GEORGE PETRO, 1/17/93 -NBA JAM +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:08 +*.Last mod - 4/19/95 10:30 JBJ +************************************************************** + .file "audit.asm" + .title "audits and ajustments handling" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;mproc equates + .include "disp.equ" ;display proc. equates + .include "sys.equ" ;z unit system equates + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" ;link equates + .include "menu.equ" ;menu equates + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "bgndtbl.glo" + + .include "powertxt.glo" + + +* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS +* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1 +* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION +* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN +* AN AUDIT IS CHANGED. + + .BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!) + .bss playtimer ,16 ;timer units for game + .BSS C_FRAC ,16 ;TIME 10 SECONDS TO + ;INDICATE COIN ACTIVITY +;; .BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE + .BSS C_FLAGS ,5*32 ;INTERRUPT COIN BOUNCE + .BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS +COINCNT1 .EQU COINCNTR +COINCNT2 .EQU COINCNTR+8 +* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15 + .BSS OCT_FLG,16 ;!0=Did 1st part + + +* IN THIS MODULE +; .def ADD_DUMP + .def ADJ_PAGE + .def BAD_AUD + .def C_FRAC,COINCNTR + .def C_FLAGS + .def L_MESS,AUD,AUD1,GET_ADJ + .def GET_AUD,SLAM_SW,STORE_AUDIT + .def CAT_A0 + .def CCCC + .def CK_MAX +; .def CLRSWPRC + .def CLR_AUD,FAC_SET + .def CLR_AUDR +; .def CLR_SUBS + .def CMOS_VAL + .def COIN_PAG +; .def COINIRQ + .def CR_STRTP + .def CR_CONTP + .def CRD_SCRN + .def CRED_P + .def DEF_PAGE +; .def DUMP_FS + .def FORM_ADC + .def F_ADC_S + .def GET_CREDITS + .def GET_CSTR + .def HTOHXASC +; .def KILL_CRD + .def L_TIMER + .def LD_CTAB + .def LM_SETUP + .def LM_FINIS + .def NO_CREDS + .def P_START + .def P_CONT + .def PUT_ADJ + .def ROM_NAME + .def STRCAT + .def UNIT_CLR + .def WAIT_MUT + .DEF KILL_AUD + + .def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN + .DEF DBV + + .ref brush20_ascii,hangfnt38_ascii + .ref HANGF_W_P,HANGF_G_P + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref bast18_ascii + .ref mess_cursx,mess_cursy + .ref mess_line_spacing + .ref message_palette + + .ref print_string2b,kern_chars,mess_justify,mess_cursx2 + .ref print_message,setup_message + .ref print_string_C,print_string_C2 + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string,concat_rom_string + .ref BAKMODS + .ref KILBGND + .ref BGND_UD1 + .ref COLRTEMP + .REF COUNTER_MODE + + .GLOBAL SYNCHALF,WDOGDIS,GAMSTATE + + .REF IRQSKYE + .ref dpageflip_off + .ref WFLG,BTIME + .REF PSTATUS,WRLD + +;sounds + .ref coin_snd,beep2_snd + + +* IN HSTD.ASM + + .REF SET_PAGE + .REF P_FORK + .REF DEC_HSR,INIT_HSR + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI + +* IN MENU.ASM + + .REF GET_CSPT + .REF STR_OBJ + .REF STR_FREE + .REF CKPROMPT + .REF TWO_TS,TWO_TP + .REF BUILD_ST + .REF HID_P + .REF DIAG + .REF CS_ENTS + +* IN ROBOATT.ASM + + .REF WIPEOUT + + +* IN TEST.ASM + +; .REF CK_DOOR +; .REF WT_ADV,WW_ADV + .REF WAIT_BUT + .REF FORM_SWS +;DJT ref moved down to reference + + + +* OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + +; .ref plyr_strtb1,plyr_strtb2 + .ref conttimers + .ref dirqtimer + .ref SOUNDSUP + .ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM + .ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC + .ref CLR_SCRN + .ref KILALL + .ref GETPRC,SUCIDE + .ref amode_start + .ref dpageflip + .ref snd_play1ovr + .ref update_scorebrd + .ref TAMPEREDP + .ref _coin_addr + .ref _dipswitch_addr + + + .text + +************************************************************************** +* +* COIN HANDLING +* +************************************************************************** + +************************************************************************** +* +* L_TIMER +* +* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP +* BEFORE TIMER IS CLEARED. IT DOES NOTHING +* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS +* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER +* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING. +* +************************************************************************** +FIVE_SEC equ TSEC*5 + +L_TIMER + move @GAMSTATE,a0 + jrn douptime ;In diagnostics? + subk INAMODE,a0 +;FIXed!!! + jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS! + subk INGAMEOV-INAMODE,a0 + jreq douptime + + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + move a0,@playtimer + jrgt #not5 ;Under 5 seconds? + + move @PSTATUS,a2 + jrz audup + + movi AUD_1PLAYTIME-1,a0 + movk 4,b0 +#plp srl 1,a2 + jrnc #nop + addk 1,a0 ;+1 plyr +#nop dsj b0,#plp + + callr AUD1 + + movi AUD_PLTIME,a0 + callr AUD1 + +audup + movi AUD_UPTIME,a0 + callr AUD1 + + movi FIVE_SEC,a0 +#not5 move a0,@playtimer + rets + + +******************************** + +douptime + move @dirqtimer,a1 ;get elapsed time + move @playtimer,a0 ;get play timer + sub a1,a0 ;add elapsed time + jrle audup ;Under 5 seconds? + move a0,@playtimer + rets + +#******************************* +* ITS A-MODE...CHECK OCTOPUS! + +CK_OCTO + move @SWITCH,a0 + not a0 + andi >7f7f,a0 ;Get sticks 'n starts + move @OCT_FLG,a1 + jrgt #p2 ;Got part one? + + cmpi >7171,a0 ;P1&P2 all buts down & both sticks up + jrne #x ;Wrong? + movi TSEC,a1 ;One sec to get part two +#p2 + subk 1,a1 + move a1,@OCT_FLG + jrgt #x ;Still counting? + cmpi >202,a0 + jrne #x ;Wrong? + + movi ACTIVE,a13 + movi HID_P,a7 ;Start the process! + movi DIAG_PID,a1 + calla GETPRC + .ref robo_1_snd + SOUND1 robo_1_snd +; movi MAW,A0 +; calla snd_play1 + +#x jruc douptime + + +;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW + + +#******************************* +* Give him a service credit + +SERVICE + move @GAMSTATE,a0 + jrn #x ;In diagnostics? + move @_coin_addr,a0,L ;Get COIN inputs + move *a0,a0 + btst CDI_BIT,a0 ;Coin Door Closed ? + jrz #x ;Yes - Then NO Service Credits Allowed + + callr CCCC ;MAKE SURE THINGS ARE IN TACT + + movk AUDSERV,a0 + callr AUD1 ;CHALK UP A SERVICE CREDITS! + +;DJT Start + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + + JSRP getcoin +; callr getcoin +;DJT End + + movk 10,a0 + move a0,@BTIME ;Restuff buyin timer + + callr conttimers_set + + callr GET_CREDITS + addk 1,a0 ;Add in the new ones + callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + callr FORM_COIN_CKSUM_AND_STORE + + calla update_scorebrd ;redraw scoreboard credits message + + jruc CREDSP + +#x DIE + + +******************************** +* THE FOLLOWING COIN ROUTINES ARE PROCESSES! + +LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST + MOVI LC_FLAG,A10 ;LEFT COIN FLAG + MOVI AUDLCOIN,A11 ;AUDIT NUMBER + JRUC VALID_COIN + +CCOIN MOVK ADJCMULT,A8 + MOVI CC_FLAG,A10 ;CENTER COIN FLAG + MOVI AUDCCOIN,A11 + JRUC VALID_COIN + +RCOIN MOVK ADJRMULT,A8 + MOVI RC_FLAG,A10 ;RYTE COIN FLAG + MOVI AUDRCOIN,A11 + JRUC VALID_COIN + +XCOIN MOVK ADJXMULT,A8 + MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUDXCOIN,A11 + JRUC VALID_COIN + +DBV MOVK ADJDBVMULT,A8 + MOVI DBV_FLAG,A10 ;XTRA (FOURTH) COIN FLAG + MOVI AUD_DBV,A11 + JRUC VALID_COIN +; +; COIN CONTROL EQUATES +; +LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN +RC_FLAG .EQU C_FLAGS+8 ;UHB RGT " +CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR " +XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA " +DBV_FLAG .EQU C_FLAGS+32 ;UHB DOLLAR BILL VALIDATOR +; +; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID +; ENTRY +;PARAMS REQUIRED: +; A8 = MULTIPLIER FOR THAT SWITCH. +; A10 = RAM TIMER/FLAG +; A11 = BASE AUDIT NUMBER + +VALID_COIN + move @GAMSTATE,a0 + jrn CRX ;In diagnostics? + + MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0 + CALLA GET_ADJ ;FETCH IT + MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE? + JRZ CRX ;NOPE....DON'T WASTE THE TIME! + + CALLR SLAM_P ;SLAM AROUND? + JRNZ CRX ;THEN NO ACTION + MOVI LC_PID,A0 ;ALL 4 SLOTS USE THIS ID NOW + MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG) + +; movb *a10,a0 ;get flag byte +; jrz #fok +; LOCKUP +;#fok + MOVB *A10,A0 ;GET FLAG BYTE + JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE! + +;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING + + movk 5,a0 ;Wait a few ticks + movb a0,*a10 + +COIN_LOOP + SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL + MOVB *A10,A0 ;GET THE TIMER + JRGT COIN_LOOP + + CALLR SLAM_P ;SLAM? + JRNZ CRX ;THEN WE'RE OUT OF HERE + +; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP + + CLR A0 + MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR) + +;DJT Start + JSRP getcoin +; callr getcoin +;DJT End + + MOVK 20,A0 + MOVE A0,@BTIME ;RESTUFF BUYIN TIMER + callr conttimers_set + + MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN + MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20) + + MOVE A11,A0 + CALLR AUD1 ;CHALK THE DIRECT AUDIT + +*HIT THE MECHANICAL COIN COUNTERS + MOVE @COUNTER_MODE,A0,W + CMPI 1,A0 + JRNE MECH20 + MOVI ADJTOTALIZER,A0 + CALLA GET_ADJ + JRZ NORMAL_TOTALIZER + MOVI ADJTOTALIZER,A0 + ADD A11,A0 + CALLA GET_ADJ + MOVE A0,A2 + MOVI COINCNT1,A1 + JRUC RE_ENTER_FROM_CUST_TOTALIZER +NORMAL_TOTALIZER + +*MULTIPLE OF LEAST VALUE COIN MODE + CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; MOVK 4,A1 ;CHECK ALL CHUTES +; ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES +; MOVE A6,A5 ;SAVE A6 +; CLR A2 +; NOT A2 +;MECH1L +; MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST +; JRZ MECH_SKIPZ +; CMP A2,A0 +; JRHI MECH_SKIPZ +; MOVE A0,A2 ;A NEW LOW! +;MECH_SKIPZ +; DSJS A1,MECH1L + + ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES + DEC A11 ;GET YOUR CLICK COUNT + SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT + ADD A11,A6 + MOVE *A6,A2 ;GET MONEY VALUE + MOVE A2,A2 + JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE + +RE_ENTER_FROM_CUST_TOTALIZER +; CALLA GET_CSPT ;POINT TO COIN TABLE A6 +; DEC A11 ;GET YOUR CLICK COUNT +; SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT +; ADD A11,A6 +; MOVE *A6,A1 ;GET MONEY VALUE +; JRZ MECH10 ;WIERDNESS, JUST ONE CLICK +; DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR +; MOVE A1,A2 ;RESULT TO KEEP COMPAT + MOVI COINCNT1,A1 + JRUC MECH3B +MECH10 + MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK +MECH20 + MOVI COINCNT1,A1 + CMPI 2,A0 + JREQ MECH3A ;CLICK COUNTER 1 MODE + + CMPI AUDLCOIN,A11 + JREQ MECH3A + CMPI AUDRCOIN,A11 + JRNE MECH4 + ADDK 8,A1 +MECH3A + MOVK 1,A2 +MECH3B + DINT + MOVB *A1,A0 + ADD A2,A0 + MOVB A0,*A1 + EINT +MECH4 + MOVE A8,A8 ;NO CREDIT UNITS? + JRZ CRX ;THEN NO MORE WORK TO DO. + CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY. + CALLR DEF_PAGE ;POINT PAGE AWAY! + + calla update_scorebrd ;redraw scoreboard credits message + + +; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH +; HAVE BEEN DROPPED +; +; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN +CREDSP +; MOVE @GAMSTATE,A0 +; CMPI INAMODE,A0 +; JRNZ NOZERO +;NOZERO + MOVE @PSTATUS,A0 + JRNZ CRX + move @GAMSTATE,a0 + subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY! + jrne CRX + +CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN + +CRX JAUC SUCIDE + + +******************************** +* Set active continue timers +* A0=New value + +conttimers_set + + PUSH a2,a3 + movi conttimers,a2 + movk 4,a3 + +ctslp move *a2,a1 + jrz cts50 ;None? + move a0,*a2 +cts50 addk 16,a2 + dsj a3,ctslp + + PULL a2,a3 + rets + + +******************************** +* Make all switch process dumdie entries + +;CLRSWPRC +; MMTM SP,A0,A1,A3 +; +; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC +; MOVE @SWSTACK,A3,L +;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START? +; JREQ CLRSTKX ;YES, EXIT +; MOVE *A3+,A0 +; CMPI 31,A0 +; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH +; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL +; JRUC CLRSTKL +; +;CLRSTKX MMFM SP,A0,A1,A3 +; RETS + + +******************************** +* CR_STRTP - ARE THERE ENOUGH CREDITS TO START +* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE +* P_START - PLAYER STARTED...DEDUCT CREDITS +* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS +* CRED_P - HOW MANY CREDITS +* +* JRHS FOR OK TO START! + +CR_STRTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? + +CR_STX MMFM SP,A0,A1 + RETS + +CR_CONTP + PUSH a0,a1 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;ARE WE IN FREE PLAY? + CMPI 1,A0 ;WE ARE IF ITS NOT ZERO. + JRHS CR_STX1 + + CALLR CCCC ;MAKE SURE THINGS ARE IN TACT + CALLR COIN_PAG + CALLR GET_CREDITS ;GET CURRENT CREDITS + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CMP A0,A1 ;DO WE HAVE ENOUGH TO START? +CR_STX1 + MMFM SP,A0,A1 + RETS + +P_START + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCSTRT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + + calla update_scorebrd ;redraw scoreboard credits message + + movi AUD_TOTSTARTS,a0 + calla AUD1 + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #doit + subk ININTRO-INAMODE,a0 + jrne #nope +#doit + movi AUD_PRESTARTS,a0 + calla AUD1 +#nope + MMFM SP,A0,A1 + RETS + +P_CONT + MMTM SP,A0,A1 + CALLR CRED_P + MOVE A0,A1 + MOVK ADJCCONT,A0 + CALLR GET_ADJ ;GET NUMBER NEEDED + CALLR REMOVE_CREDITS + CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER + MMFM SP,A0,A1 + RETS + +REMOVE_CREDITS + SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE + JRHS PS1 ;WE'RE OK. + + CLR A1 ;IT WENT NEGATIVE....MAKE ZERO. +PS1 CALLR COIN_PAG + MOVI CREDITS,A7 + MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE + CALLA WC_BYTE ;WRITE THE NEW AMOUNT + + CALLR FORM_COIN_CKSUM_AND_STORE + CALLR DEF_PAGE ;POINT AT DEFAULT PAGE. + RETS + +************************************************************************** +* +* NO_CREDS +* +* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS +* FROM THE MACHINE. +* +************************************************************************** +NO_CREDS + MMTM SP,A0,A1,A7 + CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + INC A0 ;MAKE THE CKSUM BAD! + CALLA WC_BYTE + MMFM SP,A0,A1,A7 + RETS +************************************************************************** +* +* CHALK_COIN +* +* A11 contains the base audit number. Chalk the audit for +* 1 more coin hit there! +* +* 3 away from the base is the "door-closed" counter +* 3 away from that is the "sub-total". +* 3 away from that is the "door-closed" sub-total. +* +************************************************************************** +;CHALK_COIN +; MMTM SP,A0 +; MOVE A11,A0 +;* +;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT" +;* +; +;CCC01 +; CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* CHALK_FOR_A0 +* +* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. +* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. +* +************************************************************************** +;CHALK_FOR_A0 +; MMTM SP,A0 +; CALLR AUD1 ;CHALK THE DIRECT AUDIT + +; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL" +; CALLR AUD1 + +; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL +; CALLR AUD1 +; +; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL +; CALLR AUD1 + +;CKCN1 +; MMFM SP,A0 +; RETS + +************************************************************************** +* +* ADJUST_CREDITS +* +* This is the routine that turns the coin switch hit +* into a tangable (if you could say that) reward. +* +* The coin chute multiplier is in A8. +* +************************************************************************** +ADJUST_CREDITS + + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS? + JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT! + + CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!) + + CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM + +* A2 = REQUIRED FOR CREDIT +* A3 = FOR BONUS +* A4 = MINIMUM + + CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS + MOVE A3,A3 ;BONUS EFFECTIVE? + JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER! + + CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS + +NO_BUNITS + MOVE A4,A4 ;MINIMUM REQUIRED? + JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE. + + MOVI MINUNITS,A7 ;POINT AT MINIMUM + CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED + ADD A8,A0 ;ADD AMOUNT RECEIVED + CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH. + + SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT? + JRLO ADCRX ;NOPE....NO CREDITS YET! + + CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT! + CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM. + +NO_MINIMUM + CLR A6 ;COUNT ACCUMULATED CREDITS IN A6 + CLR A10 ;IN CASE NO BONUS! + + CLR A8 + MOVI BUNITS,A7 + CALLA RC_WORD ;GET THE NUMBER OF BUNITS + MOVE A0,A9 ;INTO A9 + + MOVE A3,A3 ;DON'T DIVIDE BY ZERO! + JRZ NO_BU_BU + DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS + + MOVE A9,A0 ;WRITE REMAINDER BACK + CALLA WC_WORD + + MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED. + MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED! + +NO_BU_BU + CLR A8 + CALLR GET_CUNITS ;READ IN THE CUNITS + MOVE A0,A9 + + MOVE A2,A2 ;DON'T DIVIDE BY ZERO. + JRZ NO_CR + + DIVU A2,A8 ;GET CREDITS! + MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS + CALLR PUT_CUNITS + ADD A8,A6 ;A6 HAS WHAT WE'VE WON! + +NO_CR + MOVE A6,A1 + MOVI AUDPAIDC,A0 + CALLA AUD ;CHALK UP THE EARNED CREDITS! + + CALLR GET_CREDITS + ADD A6,A0 ;ADD IN THE NEW ONES. + CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX) + + MOVE A10,A10 ;WAS THE BONUS EARNED? + JRZ ADCRX ;NOPE...EXIT! +* +* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER! +* + CALLR CLEAR_UNITS + +ADCRX CALLR FORM_COIN_CKSUM_AND_STORE + +ADCRXX MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11 + RETS + +************************************************************************** +* +* PUT_CREDITS +* +* STORE CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS. +* +************************************************************************** +PUT_CREDITS + MMTM SP,A0,A6,A7 + CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE + CMP A1,A0 ;SEE HOW WE STACK UP. + JRLO USE_A0 ;WE'RE LOWER...JUST STORE. +* +* WE'RE AT (OR OVER) MAXIMUM CREDITS +* + CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS. + MOVE A1,A0 ;USE MAXIMUM + +USE_A0 MOVI CREDITS,A7 + CALLA WC_BYTE ;WRITE THE CREDITS OUT. + MMFM SP,A0,A6,A7 + RETS + +************************************************************************** +* +* GET_MAX +* +* GET MAXIMUM CREDITS IN A1. +* +* THIS LEAVES YOU ON COIN PAGE. +* +************************************************************************** +GET_MAX + PUSH a0 + MOVK ADJMAXC,A0 + CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE) + MOVE A0,A1 + MMFM SP,A0 + RETS + +************************************************************************** +* +* CK_MAX +* +* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS. +* .HS. MEANS WE ARE AT MAXIMUM CREDITS. +* +************************************************************************** +CK_MAX + MMTM SP,A0,A1 + CALLR GET_MAX ;GET MAXIMUM IN A1 + CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY) + CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS! + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* UNIT_CLR +* +* THIS IS CALLED AT GAME OVER. IT CLEARS +* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE +* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO +* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES. +* +* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT +* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN +* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS +* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE +* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS. +* +************************************************************************** +UNIT_CLR + PUSH a0 + MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE? + JRNZ UC1 ;YEP! + CALLR CCCC ;VALIDATE COINAGE + CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS + CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD. +UC1 + MMFM SP,A0 + RETS + +CLEAR_UNITS + MMTM SP,A0,A7 + CLR A0 + MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS + CALLA WC_WORDI + CALLA WC_WORDI + CALLA WC_WORD + MMFM SP,A0,A7 + RETS + +* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF +* CREDITS EXIST OR IN FREE PLAY. + +CRED_P + CALLR CCCC ;CHECK TO SEE IF DATA IS OK. + +GET_CREDITS + PUSH a7 + CALLR COIN_PAG + MOVI CREDITS,A7 ; + CALLA RC_BYTE ;READ CURRENT CREDITS + JRNZ GC1 ;WE GOT SOME! + + ;PUSH THE ZERO! + PUSH a0 + MOVK ADJFREPL,A0 + CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + MMFM SP,A0 ;RESTORE A0 + +GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY + MMFM SP,A7 + RETS + +ADD_TO_CUNITS + MMTM SP,A0,A7 + CALLR GET_CUNITS + ADD A8,A0 + CALLR PUT_CUNITS + MMFM SP,A0,A7 + RETS + +GET_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA RC_WORD + MMFM SP,A7 + RETS + +PUT_CUNITS + PUSH a7 + MOVI CUNITS,A7 + CALLA WC_WORD + MMFM SP,A7 + RETS + +ADD_TO_BUNITS + MMTM SP,A7,A0 + MOVI BUNITS,A7 + CALLA RC_WORD + ADD A8,A0 + CALLA WC_WORD + MMFM SP,A7,A0 + RETS + + +****************************************************************************** + +CRD_SCRN + + CLR a10 ;Sleep 7 secs + + SUBR CRD_SCRN2 ;Entry pnt for shorter sleep + + MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1 + MOVE A0,*A13(PROCID) + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz #exists ;credit page up, so reprint text only + +; JSRP scrn_scaleininit ;Hide display + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi coinin_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON ;Display processor on + + callr crd_updatetxt + + SLEEPK 2 + +; JSRP scrn_scalein + + movi 4<<10+4<<5+7,a0 + move a0,@IRQSKYE + + SLEEPK 2 + calla display_unblank + + jruc #cont + + +#exists + move @HEBLNK,a0 + cmpi HEBLNKINIT,a0 + jrne #inscl + move @dtype,a0 + jrge #notinscl +#inscl move a10,a10 + jrnz KILL_CRD2 + jruc #die +#notinscl + SLEEPK 3 +#cont + callr crd_updatetxt ;Display players per credit messages + + movi HEBLNKINIT,a0 ;Display on (just in case) + move a0,@HEBLNK + + + SLEEP 1*TSEC + + + movi 4*TSEC,a11 +#lp SLEEPK 1 + .ref get_all_buttons_cur2 + calla get_all_buttons_cur2 + jrz #nob + + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + + + move a10,a10 + jrnz KILL_CRD2 + jruc KILL_CRD +#nob + dsj a11,#lp + +#ck2 + move a10,a10 + jrnz KILL_CRD2 + + movi 10*TSEC,a11 +#lp1 SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob1 + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + SLEEPK 10 + + jruc KILL_CRD +#nob1 + dsj a11,#lp1 + +KILL_CRD + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + SLEEPK 1 + jauc amode_start + +#die DIE + + + .ref bounce_snd +;bounce_snd .word >fc80,10,>8129,0 ;Ball bounce + +KILL_CRD2 + RETP + +coinin_mod + .long BKGDBMOD +; .long empjambBMOD + .word 0,0 + .long 0 + + +******************************** + + SUBRP crd_updatetxt + + movi CP_PID1,a0 ;PID + movi 0ffffh,a1 ;mask bits + calla KILALL ;kill all CP_PID1 procs except self + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc ;delete existing text + +; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE + + PUSH A10 + callr credits_string + PULL A10 + rets + +#***************************************************************************** + + .asg 25,YSPACE + .asg 17,YSPACE0 + + .asg 40,LN0 + .asg 70,LN1 + .asg 100,LN2 + .asg 130,LN3 + .asg 60,LN3x + .asg 160,LN4 + .asg 190,LN5 + .asg 220,LN6 + + +CM_Y_GAP EQU 13 +CM_Y_GAP2 EQU 80 +CM_Y_ADDGAP EQU [CM_Y_GAP,200] + +credits_string + + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ #not_freeply + + movi LN3x_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_freeply,a4 + calla print_string2b + + movi LN3y_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi #str_start_fp,a4 + calla print_string2b + rets + +#not_freeply + move @_dipswitch_addr,a0,L + move *a0,a0 + btst 6,a0 ;SW1 switch 7 + jrnz #notfair ;OFF? + +;Yes, a dollar bill acceptor is hooked up! + + MOVI dollar_mes,a2 ;Dollar bill message + calla print_message +#notfair + +;print "BEST VALUE" +; movi LN0a_setup,a2 +; calla setup_message +; movi #str_value,a4 +; calla print_string_C2 + + +;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!" + movi LN0_setup,a2 + calla setup_message + movi #str_fullg1,a4 + calla print_string_C2 + + movk ADJCCONT,a0 + calla GET_ADJ + move a0,a10 + add a0,a10 + add a0,a10 + movk ADJCSTRT,a0 + calla GET_ADJ + add a0,a10 + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + movi ADJFULLG,a0 + calla GET_ADJ ;# credits for full game + cmp a0,a10 + jrge #ok + move a10,a0 +#ok + movi 20,a1 ;max string value + + calla dec_to_asc + calla copy_string + movi #str_fullg2,a4 + calla concat_rom_string + calla print_string_C + + calla GET_CSPT ;a6 = * current pricing table + movk 2,a10 ;min number strings to print + move *a6(CS_LIST),a11,L ;a11 = * string list + jrz #no_strings + + move a11,a2 +#next_string + move *a2+,a0,L ;count up number of strings + jrz #last + inc a10 + jruc #next_string +#last +#no_strings + callr CRED_P ;get number credits + move a0,a3 + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_enough1 + inc a10 ;+1 string (READY FOR...) +#not_enough1 + + +;print "CREDITS : N" + + movi LN1_setup,a2 + calla setup_message + + callr CRED_P ;# credits in a0 + PUSH a0 + + movi #crd_str,a4 + calla copy_rom_string + + PULL a0 + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla concat_string + + MOVK ADJMAXC,a0 + calla GET_ADJ_FOR_COIN ;a0 = max credits + PULL a1 + cmp a0,a1 + jrlo #not_max_crds + movi #str_max,a4 ;max credits + calla concat_rom_string +#not_max_crds + calla print_string_C ;"CREDITS : NN" + + +;print 0-3 strings from current pricing table + + movi LN2_setup,a2 + calla setup_message + + movi 140,a0 + movi YSPACE0,a1 + mpyu a10,a1 ;# strings * Y spacing + srl 1,a1 ;/2 + sub a1,a0 + move a0,@mess_cursy ;centered Y + + calla TAMPEREDP + JRZ #done + +#next_string2 + move *a11+,a4,L ;* next string + jrz #done + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + calla print_string_C2 + + jruc #next_string2 +#done + + +;print "N CREDITS TO START" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVK ADJCSTRT,a0 + callr GET_ADJ ;# credits to start + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + + movi #crd_2start,a4 + PULL a0 + dec a0 + jrz #1credit + movi #crd_2starts,a4 +#1credit + calla concat_rom_string + calla print_string_C + + +;print "N CREDITS TO CONTINUE" + + move @mess_cursy,a0 + addi YSPACE0,a0 + move a0,@mess_cursy + + MOVI ADJCCONT,a0 ;# credits to continue + callr GET_ADJ + PUSH a0 + movi 99,a1 ;max string value + calla dec_to_asc + calla copy_string + movi #crd_2cont,a4 + PULL a0 + dec a0 + jrz #1_creditb + movi #crd_2conts,a4 +#1_creditb + calla concat_rom_string + calla print_string_C + + +;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages + movi LN5_setup,a2 + calla setup_message + + callr CRED_P ;get number credits + move a0,a3 + + MOVK ADJCSTRT,A0 + callr GET_ADJ ;# credits to start + + divu a0,a3 ;credits / credits to start + move a3,a3 + jrz #not_ready + dec a3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + + cmpi 2,a3 + jrlo #not_max + movi 1,a3 + +#4_plyrs + cmpi 4,a3 + jrlo #not_max + movi 3,a3 +#not_max + sll 5,a3 ;x 32 bits + addi #ready_for_lookup,a3 + move *a3,a4,L +; move @mess_cursy,a0 +; addi YSPACE,a0 +; move a0,@mess_cursy + calla print_string_C2 + + movi #str_start,a4 + jruc #ready + +#not_ready +;Turmell +; movi RUBYPAL,a0 ;redpal +; move a0,@message_palette + movi #str_insert,a4 +#ready + move @mess_cursy,a0 + addi YSPACE,a0 + move a0,@mess_cursy + + calla print_string_C2 + + rets + + + +LN0_setup + PRINT_STR bast10_ascii,5,0,200,LN0-YSPACE,BAST_W_P,0 + .even +LN1_setup + PRINT_STR bast18_ascii,10,0,200,LN1+4,BSTGYG_P,0 + .even +LN2_setup + PRINT_STR bast10_ascii,5,0,200,LN2,BAST_Y_P,0 + .even +LN3_setup + PRINT_STR bast8_ascii,5,0,200,LN3,BST18G_P,0 + .even +LN3x_setup + PRINT_STR hangfnt38_ascii,14,0,54,80,HANGF_G_P,kern_chars + .even +LN3y_setup + PRINT_STR hangfnt38_ascii,14,0,14,145,HANGF_G_P,kern_chars + .even +LN5_setup + PRINT_STR bast18_ascii,10,0,200,LN5+10,BSTGYG_P,0 + .even + +#str_value + .string "BEST VALUE:",0 +#str_fullg1 + .string "PURCHASE FULL GAMES FOR ONLY ",0 +#str_fullg2 + .string " CREDITS PER PLAYER!",0 +#str_max + .string " (MAXIMUM)",0 +#crd_str + .string "CREDITS : ",0 +#crd_2start + .string " CREDIT TO START",0 +#crd_2starts + .string " CREDITS TO START",0 +#crd_2cont + .string " CREDIT TO CONTINUE",0 +#crd_2conts + .string " CREDITS TO CONTINUE",0 +#str_freeply + .string "F",1,-5,"R",1,-3,"E",1,-5,"E P",1,-4,"L",1,1,"A",1,4,"Y",0 +#str_start_fp + .string "P",1,-2,"R",1,-3,"E",1,-3,"S",1,-1,"S " + .string "S",1,2,"T",1,-10,"A",1,3,"R",1,3,"T",0 +#str_start + .string "PRESS START",0 +#str_insert + .string "INSERT COINS",0 + .even +#ready_for_lookup + .long #str_1p,#str_2p + .long #str_3p,#str_4p +#str_1p .string "READY FOR 1 PLAYER",0 +#str_2p .string "READY FOR 1 - 2 PLAYERS",0 +#str_3p .string "READY FOR 1 - 3 PLAYERS",0 +#str_4p .string "READY FOR 1 - 4 PLAYERS",0 + .even + + + .if 0 + +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +;OUTPUT_CUSTOM + + + CALLA ADJ_PAGE + MOVI VALID_CUSTOM,A7 + CALLA RC_WORD + CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID + JRNZ #zippo + + + movi CM_LINE3,A10 ;CHECK LINE 3 + callr CK_LINE ;3 VALID LINES? + jrz GO_FOR_2 + movi LN2_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_2 + movi CM_LINE2,A10 ;CHECK LINE 2 + callr CK_LINE ;2 VALID LINES? + jrz GO_FOR_1 + movi LN3_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +GO_FOR_1 + movi CM_LINE1,A10 ;CHECK LINE 1 + callr CK_LINE ;1 VALID LINES? + jrz #zippo + movi LN4_setup,a2 + calla setup_message + movi STRNGRAM,a4 + calla print_string_C2 +#zippo + .endif + +#***************************************************************************** + +;open up window stating winners of a 4 player game get next game free + + .asg 8,Y0 + .asg 129-38,Y1 + .asg 159-38,Y2 + .asg 16,SPACING + + .ref mess_objid + .ref flash_bigtxt + + .ref pal_getf + + SUBR winner_stays_msg + + .ref cheer4_snd + SOUND1 cheer4_snd + + movk ADJFREPL,a0 ;ARE WE IN FREE PLAY? + calla GET_ADJ + jrnz #exit + + movi ADJWINMODE,a0 + calla GET_ADJ + jrz #exit ;disabled? + + sll 5,a0 + addi winer_sty_img_tbl,a0 + move *a0,a2,L + jrz #exit + + PUSH b0 + movi BAST_W_P,b0 + movi [200,0],a0 ;x val + movi [169,0],a1 ;y val + movi 1200,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi WIN_STAY_MSG,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + PULL b0 + + SLEEP TSEC*1 + + movk 10,a11 +wsm_1 + movi BAST_R_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + movi BAST_W_P,a0 + calla pal_getf + move a0,*a8(OPAL),L ;Set pallette & constant + SLEEPK 4 + dsj a11,wsm_1 + + SLEEP TSEC*2 + + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +#exit DIE + + + + +winer_sty_img_tbl + .long 0 ;padding + .long WIN4FREE ;msg for '4 players' option + +; .long 0 ;padding +; .long WNRSSTAY ;msg for 'all games' option +; .long WINSTAY ;msg for 'player vs. player' option +; .long WIN4FREE ;msg for '4 players' option + + +#***************************************************************************** + + + .if 0 +HELP_TAB + .LONG L_MESS ;0 SAYS USE L_MESS + .LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY + .LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START + .LONG LINE_TWO_PLUS ;3 + .LONG LINE_THREE_PLUS ;4 + .LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER + .LONG LINE_TWO_PLUS_2 ;6 + .LONG LINE_THREE_PLUS_2 ;7 + .LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE! + +JUST_LIST + MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE + MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY? + JRZ JUST_ONE ;YEP....CENTER IT NICELY +* +* there's a 2nd line...check for 3rd! +* + MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE? + JRZ JUST_TWO ;NOPE + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_A2 + + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE + JRUC FIRST_LINE + +JUST_TWO + MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2 + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_A2 + + MOVI SETUP_1_OF_2,A8 + +FIRST_LINE + MOVE *A3,A2,L + JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN + +JUST_ONE + MOVI SETUP_1_OF_1,A8 + JRUC FIRST_LINE ;DO TOP LEN AND RETURN + +* +* OUTPUT THE CUSTOM MESSAGE +* +CM_LINE1 EQU CUSTOM_MESSAGE +CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE +CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE) + +OUTPUT_CUSTOM + MOVI CM_LINE3,A10 ;CHECK LINE 3 + CALLR CK_LINE ;3 VALID LINES? + JRZ GO_FOR_2 + + MOVI SETUP_3_OF_3,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE2,A10 + MOVI SETUP_2_OF_3,A8 + JSRP SET_THEN_STRNGRAM + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_3,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_2 + MOVI CM_LINE2,A10 ;CHECK LINE 2 + CALLR CK_LINE ;2 VALID LINES? + JRZ GO_FOR_1 + + MOVI SETUP_2_OF_2,A8 + JSRP SET_THEN_STRNGRAM ;PUT IT OUT + + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_2,A8 + JRUC SET_THEN_STRNGRAM + +GO_FOR_1 + MOVI CM_LINE1,A10 + MOVI SETUP_1_OF_1,A8 + JRUC SET_THEN_STRNGRAM + + .endif + +************************************************************************** +* +* SET_THEN_A2 +* +* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS. +* +* IT SETS UP WITH THE STRING IN A8, THEN FINSHES +* ON THE STRING IN A2. +* +* JSRP THIS ROUTINE! +* +************************************************************************** +SET_THEN_A2 + CALLA LM_SETUP + MOVE A2,A8 + JAUC LM_FINIS ;THAT DOES LINE 3 + +************************************************************************** +* +* SET_THEN_STRNGRAM +* +* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE. +* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS +* STRING OUT. CONVERT FROM CMOS TO STRNGRAM +* AND PRINT ON THE STRING. +* +************************************************************************** +SET_THEN_STRNGRAM + CALLR CK_LINE ;TRANSFER TO STRNGRAM + CALLR LM_SETUP + MOVI STRNGRAM,A8 + JAUC LM_FINIS + +************************************************************************** +* +* CK_LINE +* +* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING +* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO +* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM +* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES. +* +************************************************************************** +CK_LINE + MMTM SP,A0,A7,A1,A2,A10 + MOVE A10,A7 ;INPUT POINTER TO CMOS + MOVE A13,A10 ;OUR PDATA AREA + ADDI PDATA,A10 ;A10 IS DESTINATION. + MOVE A10,A2 ;ITERATE TO LOAD IT UP. + + MOVI CMESS_CHARS,A1 ;COUNTER + CALLA ADJ_PAGE ;POINT THE PAGE + +CK_LOOP + CALLA RC_BYTEI ;FETCH A BYTE + MOVB A0,*A2 ;STORE + ADDK BYTE_SIZE,A2 + DSJS A1,CK_LOOP + + CALLA DEF_PAGE ;POINT AWAY NOW + CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC) + MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES. + RETS + + + + +LINE_ONE_PLUS + MOVE *A8,A2,L ;GET LINE 1 +LOP_1 + MOVI SETUP_1_OF_3,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_2 + MOVI TWO_TS,A8 ;TWO TO START STUFF + JAUC L_MESS ;PRINT IT AND RETURN + +* +* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE +* +LINE_THREE_PLUS + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_2 ;NOTHING ON LINE 3 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_TWO_PLUS + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_2 ;NOTHING ON LINE 2 + JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE! + +LINE_ONE_PLUS_2 + MOVE *A8,A2,L ;GET LINE 1 +LOP_12 + MOVI SETUP_1_OF_2,A8 + CALLR LM_SETUP + MOVE A2,A8 ;SWAP IN TEXT POINTER + JSRP LM_FINIS ;PRINT IT + +LOP_22 + MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER + JAUC L_MESS ;PRINT IT AND RETURN + +LINE_TWO_PLUS_2 + MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2 + JRZ LOP_22 ;NOTHING ON LINE 2 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +LINE_THREE_PLUS_2 + MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3 + JRZ LOP_22 ;NOTHING ON LINE 3 + JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE! + +************************************************************************** +* +* SELECT_SETUP +* +* THIS IS CALLED TO SELECT A SETUP STRING FOR THE +* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE +* DROP IT DOWN....ELSE WE PRINT IT CENTERED. +* +************************************************************************** +SELECT_SETUP + PUSH a0 + MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT + + CALLA CKPROMPT ;IS THERE ONE? + JRZ NO_EXTRA + + MOVI MESS_LOWNUM,A8 +NO_EXTRA + MMFM SP,A0 + RETS + +************************************************************************** +* +* FETCH_REQ +* +* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED +* FOR CREDIT, BONUS AND MINIMUM: +* +* A2 = REQ FOR CREDITS +* A3 = REQ FOR BONUS +* A4 = MINIMUM +* +************************************************************************** +FETCH_REQ + PUSH a0 + MOVK ADJCUNIT,A0 + CALLR GET_ADJ + MOVE A0,A2 + + MOVK ADJBUNIT,A0 + CALLR GET_ADJ + MOVE A0,A3 + + MOVK ADJMUNIT,A0 + CALLR GET_ADJ_FOR_COIN + MOVE A0,A4 + MMFM SP,A0 + RETS + +************************************************************************** +* +* SLAM_P +* +* IS THERE A SLAM PROCESS RUNNING? +* +* .EQ. NO +* .NE. YES +* +************************************************************************** +SLAM_P + MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE? + MOVI 0FFFFH,A1 + jauc EXISTP + +SLAM_SW + movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables + move a0,*a13(PROCID) ;Set our ID + calla KIL1C ;Kill others + + SLEEP TSEC ;1 second of coin ignoring + jauc SUCIDE + +************************************************************************** +* +* FORM_COIN_CKSUM +* +* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS +* CHECKSUM. THE CHECKSUM IS RETURNED IN A1. +* +* Z IT MATCHES WHATS THERE +* NZ IT DOESN'T MATCH +* +************************************************************************** +FORM_COIN_CKSUM + MMTM SP,A0,A7,A2 + CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE. + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK + MOVI COIN_CKSUM_BYTES,A2 + CLR A1 ;CLEAR OUT CHECKSUM + +CN_SUM + CALLA RC_BYTEI ;FETCH A BYTE IN A0 + ADD A0,A1 ;ADD TO SUM + DSJS A2,CN_SUM ;TILL WE HAVE EM ALL + + NOT A1 ;COMPLEMENT OF COURSE + sll 32-8,a1 + srl 32-8,a1 + + MOVI COIN_CKSUM,A7 + CALLA RC_BYTE ;FETCH THE CURRENT CKSUM + CMP A0,A1 ;COMPARE TO THIS + MMFM SP,A0,A7,A2 + RETS + +FORM_COIN_CKSUM_AND_STORE + MMTM SP,A1,A7,A0 + CALLR FORM_COIN_CKSUM + MOVI COIN_CKSUM,A7 + MOVE A1,A0 + CALLA WC_BYTE + MMFM SP,A1,A7,A0 + RETS + +************************************************************************** +* +* CCCC +* +* Check_Coin_and_Clear_on_bad_Checksum. +* +* This is called before operations that deal with +* the coinage and credits values. +* +* It checks to see if the area is in tact. If it +* is, then no action is performed. +* +* Else, it clears our all values (credits, etc.) +* so that nothing is given away erroneously. +* +************************************************************************** +CCCC + MMTM SP,A0,A1,A7,A2 + CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE! + JRZ CCCCX ;ALL IS OK! + + MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE + MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR + CLR A0 + +CCCC_LOOP + CALLA WC_BYTEI ;WRITE A BYTE + DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE! + + CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID + +CCCCX + MMFM SP,A0,A1,A7,A2 + RETS + +************************************************************************** +* +* COIN_PAG +* +* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS +* +************************************************************************** +COIN_PAG + PUSH a1 + MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +******************************** +* Add the # of players to the audit +* A0=Audit # +* Trashes A0-A1,B0-B1 + + SUBR aud_addnumplyrs + + movk 1,a1 ;1 plyr + move @PSTATUS,b0 + subk 3,b0 + jrne aanp50 ;Only 1? + movk 2,a1 ;2 plyrs +aanp50 jruc AUD + + +************************************************************************** +* +* AUDIT HANDLING +* +************************************************************************** +* +* POINT_AT_AUDIT +* +* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY +* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED +* POINTING AT THE BEGINNING OF THE AUDIT. +* +************************************************************************** +POINT_AT_AUDIT + PUSH a1 + CALLR AUDIT_PAGE + + MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT + MPYU A0,A7 ;A1 NOW HAS OFFSET + ADDI AUDITORG,A7 ;ADD BASE + MMFM SP,A1 + RETS + +AUDIT_PAGE + PUSH a1 + MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT +* SPECIFIED IN A0. +* +* A1 RETURNS THE CHECKSUM. +* +* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE. +* +************************************************************************** +FORM_AUD_CKSUM + MMTM SP,A0,A4,A7 + CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE + CALLA RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW WORD + ZEXT A1 +; ANDI WORD_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + CALLA RC_WORD ;READ IN THE CKSUM + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* STORE_AUD_CKSUM +* +* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE +* AUDIT NUMBER SPECIFIED BY A0. +* +************************************************************************** +STORE_AUD_CKSUM + MMTM SP,A7,A0 ;POINTING REGISTER + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE IN A0 + CALLA WC_WORD ;WRITE THE CKSUM + MMFM SP,A7,A0 ;POINTING REGISTER + RETS + +************************************************************************** +* +* FORM_AUD_CKSUM_AND_STORE +* +* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE +* THE CORRECT OR INCORRECT VALUE! +* +* A0 = AUDIT NUMBER +* +************************************************************************** +FORM_AUD_CKSUM_AND_STORE + MMTM SP,A1,A2 ;SAVE A1! + CALLR FORM_AUD_CKSUM + MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD + XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD + CALLR STORE_AUD_CKSUM + MMFM SP,A1,A2 + RETS + +************************************************************************** +* +* GET_AUD +* +* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT +* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE +* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE +* SET TO 1. +* +************************************************************************** +GET_AUD + MMTM SP,A0,A7 + CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK + JRZ FETCH_AUDIT_1 ;ITS OK.... + + MOVK 1,A1 ;CHECKSUM IS BAD + MOVE A1,@BAD_AUD ;SET THE FLAG! + +FETCH_AUDIT_1 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + CALLA RC_LONG ;FETCH THE LONG WORD TO A0 + MOVE A0,A1 ;RETURN IN A1 + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* STORE_AUDIT +* +* A0 = AUDIT NUMBER TO STORE VALUE FOR +* A1 = VALUE TO STORE. +* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED. +* +************************************************************************** +STORE_AUDIT + + MMTM SP,A0,A7 + CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT + ADDI AUD_DATA,A7 ;ADD ZERO OFFSET + MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER + CALLA WC_LONG ;WRITE THE DATA BACK + MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK + JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED + ;ON BAD_AUD + +************************************************************************** +* +* CLR_SUBS +* +* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS. +* +************************************************************************** +;CLR_SUBS +; MOVI FRST_SUB,A0 +; MOVI LAST_SUB,A1 +; CALLR CLR_AUDR ;CLEAR EM OUT! +; RETP +; +************************************************************************** +* +* CLR_AUDR +* +* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS. +* A0 = 1ST AUDIT NUMBER +* A1 = LAST AUDIT NUMBER (INCLUSIVE) +* +************************************************************************** +CLR_AUDR + MMTM SP,A0,A1,A2 + MOVE A1,A2 ;MOVE "LAST" TO A2 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING +CAR1 + CALLR STORE_AUDIT ;STORE THIS AUDIT + INC A0 ;KICK TO NEXT AUDIT + CMP A2,A0 + JRLS CAR1 + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CLR_DUMP_AUD +* +* This is called by both joysticks down while looking +* at dump page. It clears out the audits associated +* with that page. +* +************************************************************************** +;CLR_DUMP_AUD +; MOVI AUDDOGGY,A0 +; CALLR KILL_AUD +; MOVI AUDLOCK,A0 +; CALLR KILL_AUD +; MOVI AUDTRAP,A0 +; CALLR KILL_AUD +; MOVI AUDSURV,A0 +; CALLR KILL_AUD +; MOVI AUDBONE,A0 +; CALLR KILL_AUD +; RETS + +************************************************************************** +* +* KILL_AUD +* +* This is called to clear out an audit. +* +* A0 = audit number. +* +************************************************************************** +KILL_AUD + PUSH a1 + CLR A1 ;WE'LL STORE ZEROS + MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING + CALLR STORE_AUDIT ;STORE THIS AUDIT + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUD +* +* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD. +* +************************************************************************** +AUD + MMTM SP,A1,A2 + CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN! + MOVE A2,@BAD_AUD ;ITS GOOD. + MOVE A1,A2 ;COPY OUR COUNT + CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER + ADD A2,A1 ;ADD THE NEW COUNT + CALLR STORE_AUDIT ;STORE IT BACK + CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA! + MMFM SP,A1,A2 + RETS + +AUD1 + PUSH a1 + MOVK 1,A1 + CALLR AUD + MMFM SP,A1 + RETS + +************************************************************************** +* +* CLR_AUD +* +* This is called to clear out all of the audits. +* +* A relatively easy task given the primitives available. +* +************************************************************************** +CLR_AUD + MMTM SP,A0,A1 + MOVK 1,A0 ;START AT AUDIT 1 + MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED + CALLR CLR_AUDR + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +************************************************************************** +* +* CMOS_VAL +* +* ARE ADJUSTMENTS AND NAME/REV OK? +* +* .EQ. MEANS YES +* .NE. MEANS NO +* +************************************************************************** +CMOS_VAL + CALLR FORM_ADC ;SEE IF CKSUM IS OK. + JRNZ CMOS_BAD ;NOPE....RETURN .NE. + + CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV? +CMOS_BAD + RETS + +************************************************************************** +* +* Adjustments are all stored as long words in CMOS. +* They are referenced by adjustment number. Stuff +* adjustment number in A0. Call GET_ADJ and the +* value is returned in A0. +* +************************************************************************** +************************************************************************** +* +* FORM_ADC +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS +* AREA. IT IS RETURNED IN A1. +* +* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK. +* +************************************************************************** +FORM_ADC + MMTM SP,A7,A0,A6 + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE + MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES + CLR A1 ;ACCUMULATE CKSUM HERE + +ADJ_C1 + CALLA RC_BYTEI ;READ A BYTE + ADD A0,A1 ;ADD THE BYTE TO THE SUM + DSJS A6,ADJ_C1 + NOT A1 ;COMPLEMENT THE SUM + ZEXT A1 + MOVI ADJ_CKSUM,A7 + CALLA RC_WORD ;FETCH THE CHECKSUM + CMP A0,A1 ;COMPARE TO FETCHED VALUE + MMFM SP,A7,A0,A6 + RETS + +************************************************************************** +* +* F_ADC_S +* +* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE +* NEW VALUE. +* +************************************************************************** +F_ADC_S + MMTM SP,A0,A1,A7 + CALLR FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + CALLA WC_WORD ;AND STORE IT + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* +* GET_ADJ +* +* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT. +* +* THE ADJUSTMENT NUMBER IS GIVEN IN A0. +* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0. +* +************************************************************************** +GET_ADJ + PUSH a1,a7 + CALLR ADJPOINT ;POINT AT ADJUSTMENT + CALLA RC_LONG ;FETCH THE ADJUST PLEASE + CALLR DEF_PAGE + PULL a1,a7 + MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT! + RETS + +************************************************************************** +* +* PUT_ADJ +* +* ADJUST NUMBER IN A0. +* VALUE IN A1. +* STORE IT!........ +* +* ****************** THIS IS A UTILITY......IT DOES NOT +* CORRECT ANY CHECKSUM CHANGE THAT +* MAY OCCUR!! +* +************************************************************************** +PUT_ADJ + PUSH a0,a7 + CALLR ADJPOINT ;POINT AT REQUESTED ADJ. + MOVE A1,A0 ;GET VALUE IN WRITING REGGIE! + CALLA WC_LONG ;WRITE THE ADJUSTMENT + CALLR DEF_PAGE ;SWAP PAGE AWAY. + MMFM SP,A7,A0 + RETS + +ADJPOINT + CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS + MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7 + MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED. + ADDI ADJUSTORG,A7 ;ADD TO BASE + RETS + +GET_ADJ_FOR_COIN + CALLR GET_ADJ ;GET THE ADJUSTMENT + JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE! + +************************************************************************** +* +* CHECK_NAME_AND_REV +* +* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS +* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY +* FACTORY SET. Z MEANS OK! +* +************************************************************************** +CHECK_NAME_AND_REV + MMTM SP,A0,A1,A2,A3,A7 + CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LET1 + CALLA RC_BYTEI ;FETCH A BYTE + MOVB *A1,A3 ;GET 1 FROM ROM + SLL 24,A3 + SRL 24,A3 + + CMP A3,A0 ;THEY BETTER BE THE SAME + JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.) + + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + MOVE A0,A0 ;WAS IT A ZERO? + JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.) + DSJS A2,NEXT_LET1 + CLR A0 ;RETURN .EQ. + +RETURN_NOW + MMFM SP,A0,A1,A2,A3,A7 + RETS + +************************************************************************** +* +* ADJ_PAGE +* +* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS. +* +************************************************************************** +ADJ_PAGE + PUSH a1 + MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + + +************************************************************************** +* +* DEF_PAGE +* +* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT +* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH +* MOST IN THE CASE OF A CRASH. AFTER MOST +* PROCESSING, WE SWITCH TO THIS PAGE! +* +************************************************************************** +DEF_PAGE + .if 0 + PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED + PUSH a1 + MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE + CALLA SET_PAGE ;SET IT PLEASE + PULL a1 + POPST + .endif + RETS + +************************************************************************** +* FAC_SET - Restores the factory settings to the adjustments +* A0=Mode (0=All adjustments, 1=Only coinage) + +FAC_SET + PUSH a1,a2,a7 + + move a0,-*sp + subk 1,a0 + jreq fs20 ;Just coinage? + +;FIX!!! TEMP +; COMMENTED these out to avoid clear when change REV. number (in test games) + .ref clear_player_records + calla clear_player_records + + .ref clear_team_records + calla clear_team_records + + .ref reset_world_records + calla reset_world_records +;TEMP! + +;DJT Start + .if OPERMES + .ref opmsg_clr + calla opmsg_clr + .endif ;OPERMES +;DJT End + +;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY +;;; (stomps on player records) + + + CALLR NO_CREDS ;REMOVE ANY COINS + CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY + + MOVI FACTORY_TABLE,A1 ;ROM + MOVI ADJUSTORG,A7 ;CMOS + MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED + +FACS1 + MOVE *A1+,A0 ;FETCH A ROM LONG WORD + ZEXT A0 + CALLA WC_LONGI ;WRITE THE WORD TO CMOS + DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST +fs20 +; .if YUNIT +; move @SWITCH+>30,a1 +; btst 6,a1 +; jrnz fs80 +; not a1 +; sll 32-5,a1 +; srl 32-5-3,a1 ;*8 +; cmpi (dctend-dipcoinage_t),a1 +; jrhs fs50 ;Illegal setting? +; addi dipcoinage_t,a1 +; movb *a1,a1 +; movk ADJPRICE,a0 ;Master priceing +; callr PUT_ADJ +;fs50 +; movk ADJFREPL,a0 ;Free play +; clr a1 ;Off +; callr PUT_ADJ +;fs80 +; .endif + + callr LD_CTAB ;EXPAND THE CSELCT VALUE + callr F_ADC_S ;MAKE THE CHECKSUM CORRECT. + + move *sp+,a0 + subk 1,a0 + jreq fsx ;Only coinage? + +* NOW STORE THE GAME NAME AND REVISION INFO + + MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE + MOVI ROM_NAME,A1 ;POINT AT OUR VERSION + MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE + +NEXT_LETTER + MOVB *A1,A0 ;FETCH A BYTE + CALLA WC_BYTEI ;WRITE IT TO CMOS + ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER + move a0,a0 + jrz fsx ;End? + DSJS A2,NEXT_LETTER + +fsx PULL a1,a2,a7 + rets + +;dipcoinage_t +; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37 +; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55 +;dctend + .even + +************************************************************************** +* +* SWITCH_FOR_JUMPER +* +* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE. +* IT CHECKS FOR JUMPER COMBINATIONS INDICATING +* GERMAN OR FRENCH GAMES. +* +* THE JUMPERS ARE CONNECTED AS FOLLOWS: +* +* GERMAN JUMPER = BIT 15 OF "COINS" +* FRENCH JUMPER = BIT 14 OF "COINS" +* +* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN +* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE. +* +* IF GERMAN IS MISSING (READ AS A 1) THEN USE +* GERMAN 1 COINAGE. +* +* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE. +* +************************************************************************** +;SWITCH_FOR_JUMPER +; MMTM SP,A0 +; MOVE @COINS,A0 ;GET THE 16 BITS +; ANDI JUMPERS,A0 ;JUST KEEP THE BITS +; JRZ USA ;BOTH ARE IN...US! +; +; CMPI JUMPERS,A0 ;ARE BOTH MISSING? +; JRZ USA ;YEP....US. +; +; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING? +; JRNZ NOGERM ;NOPE +; +; CALLR DO_GERMAN ;DO THE GERMAN STUFF +; JRUC SFJX ;AND EXIT +;* +;* MUST BE FRENCH +;* +;NOGERM +; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT. +;USA +;SFJX +; MMFM SP,A0 +; RETS +; +;DO_FRENCH +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI F1SEL,A1 ;USE FRENCH SELECTOR +; CALLA PUT_ADJ +; MMFM SP,A0,A1 +; RETS +; +;DO_GERMAN +; MMTM SP,A0,A1 +; MOVK ADJPRICE,A0 ;AS MASTER PRICER. +; MOVI G1SEL,A1 ;USE GERMAN SELECTOR +; CALLA PUT_ADJ +; +; MOVK ADJDIFF,A0 +; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS +; CALLA PUT_ADJ +; +; MOVK ADJBUYIN,A0 +; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS +; CALLA PUT_ADJ +; +; MMFM SP,A0,A1 +; RETS + +************************************************************************** +* +* LD_CTAB +* +* THIS IS CALLED TO STORE THE CSELCT VALUES FOR +* THE COIN SELECTOR STORED AS ADJPRICE. +* +************************************************************************** +LD_CTAB + mmtm sp,a0,a6,a1 + + calla GET_CSPT ;A6=CSELCT table + +;{ + .IF 0 + movk 1,a1 + move *a6(16*4),a0 + jrnn lct5 ;Normal 1 credit to start? + movk 2,a1 +lct5 movk ADJCSTRT,a0 + callr PUT_ADJ + movk 1,a1 + movk ADJCCONT,a0 + callr PUT_ADJ + + movk ADJC1,a0 ;1st one to store +lct8 move *a6+,a1 ;Get word + abs a1 + callr PUT_ADJ ;Write this one to memory + addk 1,a0 + cmpi ADJCX,a0 + jrls lct8 + + .ENDIF + +;} + + movi ADJLMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJRMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJXMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJDBVMULT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJBUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJMUNIT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCSTRT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCCONT,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJCDIV,a0 + move *a6+,a1 + calla PUT_ADJ + + movi ADJFRAC,a0 + move *a6+,a1 + calla PUT_ADJ + + PUSH A6 + MOVI ADJLTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJCTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJRTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJXTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + MOVI ADJBTOTMULT,A0 + MOVE *A6+,A1,W + CALLA PUT_ADJ + PULL A6 + + movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ + + movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED. + movk 1,a1 + callr PUT_ADJ ;DONE! + + mmfm sp,a0,a6,a1 + rets + +************************************************************************** +* +* CC_COIN +* MMTM SP,A7 +* CALLR COIN_PAG +* MOVI HSR_C,A7 +* CALLA RC_LONG ;GET THE TABLE COUNTER +* JRZ CCC_X ;ITS DOWN +* DEC A0 ;1 LESS +* CALLA WC_LONG +* CCC_X MMFM SP,A7 +* RETS +* +************************************************************************** + +************************************************************************** +* +* L_MESS +* +* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT. +* POP ALL REGGIES LEAVING A8 POINTING AT TEXT. +* AND JUMP TO THE TEXT PROCESSOR! +* +* THE MMFM POPS THE ROUTINE TO CALL INTO A1. +* +* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO +* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER! +* +************************************************************************** +L_MESS_LOOP + addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE +L_MESS addk >f,a8 ;Round up word + srl 4,a8 + sll 4,a8 + + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;NEVER SLEEP! + + MOVI L_RET,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A1 ;JUMP TO THE ROUTINE. +L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE. + JRNZ L_MESS_LOOP + RETP + +************************************************************************** +* +* LM_SETUP +* +* THIS IS CALLED TO SETUP THE WORLD FOR A STRING +* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL. +* +* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL. +* +* LM_FINIS +* +* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE! +* +************************************************************************** +LM_SETUP + MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8. + CLR A0 ;DON'T SLEEP + RETS + +LM_FINIS + JUMP A1 ;THIS RUNS ROUTINE AND + +************************************************************************** +* +* GET_CSTR +* +* HERE WE FORM THE CREDITS STRING AND +* RETURN IT IN THE STRING BUFFER. +* WE RETURN A8 POINTING AT THIS BUFFER. +* +* WE ALSO PUT APPROPRIATE FRACTION ON THE +* END IF ADJUSTED ACCORDINGLY. +* +************************************************************************** +GET_CSTR + MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY? + CALLA GET_ADJ + JRZ NOT_FREE + + MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE + JRUC GET_CX + +NOT_FREE + CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE + JRC NO_SOBJ ;NONE TO USE! + + MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART + CALLA STRCAT ;BUILD THIS IN. + CALLR CRED_P + MOVE A0,A10 ;SAVE CREDITS + CALLR CAT_A0 +* +* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION. +* + MOVK ADJFRAC,A0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRZ NSFRAC ;DON'T SHOW IT! +* +* ADD ANY FRACTION WE HAVE. +* + CALLR COIN_PAG ;PUT US ON COIN PAGE + CALLR GET_CUNITS ;A0 HAS CUNITS + CALLR DEF_PAGE ;FLIP CMOS AWAY + MOVE A0,A0 ;ZERO? + JRZ NSFRAC ;THEN NO FRACTION. +* +* WE HAVE A FRACTION...WERE THE CREDITS ZERO? +* + MOVE A10,A10 ;WE SAVED EM IN A10 + JRNZ NZM ;NON ZERO MANTISSA + + MOVE A7,A8 ;WALK DOWN STRING LOOKING FOR THE "ZERO" +KILL_Z + MOVB *A8,A1 ;GET A BYTE + JRZ NZM ;COULDN'T FIND IT....GO ON. + + CMPI LET_0,A1 ;IS THIS THE ZERO? + JRZ GOT_ZERO + + ADDK BYTE_SIZE,A8 + JRUC KILL_Z + +GOT_ZERO + CLR A1 + MOVB A1,*A8 ;KILL THE ZERO + +NZM + MOVI MESS_2SPACE,A8 ;SPACE BET. MANTISSA AND DENMO + CALLA STRCAT + +NOT_ZM + CALLR CAT_A0 ;ADD A0 ONTO FRACTION + + MOVI MESS_SLASH,A8 + CALLA STRCAT ;ADD SLASH + + MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT + CALLA GET_ADJ + CALLR CAT_A0 ;DENOMINATOR + +NSFRAC + MOVE A7,A8 ;MOVE "OBJECT" TO A8 + MOVI STRNGRAM,A7 ;POINT AT STRING RAM + CLR A0 + MOVB A0,*A7 ;STRINGRAM IS NULL + CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK + MOVE A7,A8 + CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK + +GET_CX + CLRC ;RETURN OK +GET_CXX + RETS +* +* NO OBJECTS AVAILABLE TO FORM STRING +* +NO_SOBJ + MOVI MESS_NULL,A8 + SETC + JRUC GET_CXX ;RETURN BLANK STRING! + +************************************************************************** +* +* CAT_A0 +* +* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING +* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. * +* +************************************************************************** +CAT_A0 + PUSH a8 + MOVE A0,A8 ;CREDIT COUNT IN A8 + CALLA HEXTOASC ;STRING + CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER. + MMFM SP,A8 + RETS + +************************************************************************** +* +* ADD_PROMPT +* +* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF +* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE +* CORRECT MESSAGES AND BLINKS THEM. +* +************************************************************************** +ADD_PROMPT + MOVI PROMPT_PROC,A7 + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! + RETP + +PROMPT_PROC + MOVK ADJFREPL,A0 + CALLA GET_ADJ + JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS! + + CALLR CRED_P + JRZ PP1 + + MOVE A0,A1 ;PUT CREDITS IN A1 + MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START. + CALLA GET_ADJ + CMP A0,A1 ;ARE THERE ENOUGH TO START? + JRLO PP1 ;NOPE...."INSERT COIN" +* +* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2? +* + jrz PP2 + move a0,a2 + add a2,a2 + cmp a1,a2 + jrz RF2 + jrhi PP2 + add a0,a2 + cmp a1,a2 + jrhi RF2 + add a0,a2 + cmp a1,a2 + jrhi rf3 + + +* +* >1 = READY FOR 2 PLAYERS. PRESS START. +* +rf4 + MOVI MESS_READY_4,A1 + JRUC RED_1 +rf3 + MOVI MESS_READY_3,A1 + JRUC RED_1 +RF2 + MOVI MESS_READY_2,A1 + JRUC RED_1 + +PP1 + MOVI MESS_INS_COIN,A0 + CLR A1 + JRUC RED_2 + +PP2 + MOVI MESS_READY_1,A1 +RED_1 + MOVI MESS_PRESS_START,A0 +RED_2 + MOVE A0,*A13(PDATA),L ;HOLD MESSAGES + MOVE A1,*A13(PDATA+LONG_SIZE),L + +BLINK_LOOP + MOVE *A13(PDATA),A8,L ;FIRST MESSAGE + JSRP L_MESS + MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE + JRZ BL1 ;NOT HOME! + + JSRP L_MESS + +BL1 + SLEEPK 10H + + MOVE *A13(PDATA),A8,L + CALLR LM_SETUP + CLR A6 ;BLACK + JSRP LM_FINIS + +BL2 + SLEEPK 10H + JRUC BLINK_LOOP + +************************************************************************** +* +* MESSAGE SECTION +* +************************************************************************** +ROM_NAME +;Current checked string length (before ending 0) = NAME_REV_SIZE = 30 + +;DJT Start + .byte "MAX HANGTIME - VER M1.0 11/08/96",0 ;Last 8K CMOS v# +; .byte "MAX HANGTIME - VER L1.0 11/08/96",0 ;Last dedicated v# +;DJT End + + .even + +FACTORY_TABLE + + .word 0 ;ADJNULL 0 + .word 1 ;ADJPRICE 1 ;MASTER PRICING + .word 1 ;ADJLMULT 2 + .word 4 ;ADJCMULT 3 + .word 1 ;ADJRMULT 4 + .word 0 ;ADJXMULT 5 + .word 0 ;ADJDBVMULT 6 ;DOLLR BILL VALIDATOR + .word 1 ;ADJCUNIT 7 + .word 0 ;ADJBUNIT 8 + .word 0 ;ADJMUNIT 9 + .word 4 ;ADJCDIV 10 + .word 1 ;ADJFRAC 11 ;NON ZERO SAYS SHOW HALF CREDITS + .word 2 ;ADJCSTRT 12 ;CREDITS REQUIRED TO START + .word 2 ;ADJCCONT 13 ;CREDITS REQUIRED TO CONTINUE + + .word 3 ;ADJDIFF 14 ;Difficulty + + .word 0 ; 15 + .word 0 ; 16 + .word 1 ;ADJMUSIC 17 ;attract mode music = off + .word 50 ;ADJMAXC 18 ;MAXIMUM CREDITS + .word 0 ;ADJFREPL 19 ;NON-ZERO MEANS FREE PLAY + .word 1 ;ADJVIRGIN 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED + .word 8 ;ADJFULLG 21 ;credits needed to purchase full game (4-16) + .word 1 ;ADJ1ST6 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. + .word 0 ;ADJNOCPAG 23 + .word 1 ;ADJCNTR 24 ;COIN COUNTER MODE + .word 3 ;ADJSPEED 25 ;game timer speed (1-5) + .word 1 ;ADJHEADSZ 26 ;player head sizes (1-2) + .word 1 ;ADJWINMODE 27 ;(winners stays free) +; .word 3 ;ADJWINMODE 27 ;(winner stays free) + .word 0 ;ADJCOMPASS 28 ;computer assistance (0=on) + .word 1 ;ADJTOURNEY 29 ;Tournament mode (0=on) + .word 30 ;ADJVOLUME 30 ;sound volume (4-255) + .word 30 ;ADJAVOLUME 30 ;sound volume (4-255) + .word 0 ;ADJTRIVIA + .WORD 0 ;CUSTOM TOTALIZER 31 + .WORD 1 ;TOTALIZER CHUTE 1 32 + .WORD 1 ;TOTALIZER CHUTE 2 33 + .WORD 1 ;TOTALIZER CHUTE 3 34 + .WORD 1 ;TOTALIZER CHUTE 4 35 + .WORD 1 ;TOTALIZER DBV 36 + +** + .if 0 + .word 0 ;ADJ_UNUSED 0 + .word 2 ;ADJ_PRICING 1 ;MASTER PRICING + .word 1 ;ADJ_LEFT_MULT 2 + .word 1 ;ADJ_RIGHT_MULT 4 + .word 4 ;ADJ_CENTER_MULT 3 + .word 0 ;ADJ_EXTRA_MULT 5 + .word 1 ;ADJ_UNITS_CREDIT 6 + .word 0 ;ADJ_UNITS_BONUS 7 + .word 0 ;ADJ_MIN_UNITS 8 + .word 4 ;ADJCDIV 9 ;COINS PER DOLLAR + .word 1 ;SHOW FRACTIONS 10 + .word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START + .word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE + .word 3 ;ADJ_DIFFICULTY 13 + .word 5000 ;ADJ_HSRESET 14 + .word 3 ;ADJ_LIVES 15 + .word 0 ;ADJ_AMODE_MUSIC 16 + .word 50 ;MAXIMUM CREDITS 17 + .word 0 ;FREE PLAY 18 + .word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19 + .word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20 + .word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21 + .word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21 + .word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER + .endif + +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = STRING POINTER +* A9 = SCREEN ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* + +MESS_CREDITS + .byte "CREDITS: ",0 + .even + +* NORMAL CREDITS SETUP STRING +* +MESS_CNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 +* +* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING +* IS BEING ADDED. +* +MESS_LOWNUM + MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0 + +MESS_FREEP + .byte "FREE PLAY",0,0 + .even + +MESS_READY_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 PLAYER",0,0 + .even + +MESS_READY_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 2 PLAYERS",0,0 + .even + +MESS_READY_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 3 PLAYERS",0,0 + .even + +MESS_READY_4 + MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0 + .byte "READY FOR 1 - 4 PLAYERS",0,0 + .even + +MESS_INS_COIN + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "INSERT COINS",0,0 + .even + +MESS_PRESS_START + MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0 + .byte "PRESS START",0,0 + .even + + .if 0 + +************************************************************************** +* +* DUMPING SOFTWARE +* +************************************************************************** +DUMP_FS + CALLR DUMP_PAGE + CLR A0 + MOVI DUMP_PTR,A7 + CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO + RETS + +************************************************************************** +* +* ADD_DUMP +* +* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE +* RECORDED IN MEMORY. +* +************************************************************************** +DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS. +DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page! +MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE + +ADD_DUMP + MMTM SP,B0,B1,B2 + MMTM SP,A0,A1,A7 + CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY. + MOVE A0,B0 + MOVE A7,B2 ;SAVE THESE! + MOVE A1,B1 + + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + MOVI DUMP_SIZE,A1 + MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! + CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER? + JRHS NO_DUMP ;YEP....SKIP IT + + INC A0 ;1 MORE OUT THERE! + CALLA WC_WORD ;CHALK IT! + + MOVE A1,A7 ;THIS IS POINTER TO STORE DATA. + MOVE B0,A0 ;THIS IS A0 + CALLA WC_LONGI + MOVE B1,A0 ;THIS IS A1 + CALLA WC_LONGI + MOVE A2,A0 ;THIS IS A2 + CALLA WC_LONGI + MOVE A3,A0 ;THIS IS A3 + CALLA WC_LONGI + MOVE A4,A0 ;THIS IS A4 + CALLA WC_LONGI + MOVE A5,A0 ;THIS IS A5 + CALLA WC_LONGI + MOVE A6,A0 ;THIS IS A6 + CALLA WC_LONGI + MOVE B2,A0 ;THIS IS A7 + CALLA WC_LONGI + MOVE A8,A0 ;THIS IS A8 + CALLA WC_LONGI + MOVE A9,A0 ;THIS IS A9 + CALLA WC_LONGI +NO_DUMP + MMFM SP,A0,A1,A7 + MMFM SP,B0,B1,B2 + RETS + +DUMP_PAGE + PUSH a1 + MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE + CALLA SET_PAGE ;SET IT PLEASE + MMFM SP,A1 + RETS + +DISPDUMP + CALLR DUMP_PAGE + MOVI DUMP_PTR,A7 + CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY. + JRZ NOTHIN_TO_DUMP + + CLR A9 ;THIS IS CURRENT ONE + MOVE A0,A8 ;THIS IS THE LAST ONE TO DO + +DO_ANOTHER_DPAGE + CALLA CLR_SCRN ;CLEAR SCREEN + CALLR DUMP_PAGE + movk 20,a10 ;This is y coordiante of current one! + MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE. + +DO_ANOTHER_DUMP + JSRP DO_DUMP + addk 30,a10 ;Kick y up + INC A9 ;KICK TO NEXT DUMP + CMP A8,A9 ;UNTIL THEY'RE ALL DONE! + JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET! + + DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER! + + JSRP WAIT_MUT ;WATCH FOR STICKS! + JRUC DO_ANOTHER_DPAGE + + .endif + +************************************************************************** +* +* WAIT_MUT +* +* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT +* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED +* DOWN. +* +************************************************************************** +WAIT_MUT + CALLA FORM_SWS ;1ST STATE DOESN'T COUNT +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* +WB1 + SLEEPK 1 + + CALLA FORM_SWS + MOVE A0,A2 + ANDI 2002H,A2 + CMPI 2002H,A2 + JRNZ WB2 ;NOT "CLEAR" + +; .REF GETSPEAK +; CALLA GETSPEAK + +; SOUND1 COINSND +; MOVK 10,A0 +; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER +; callr conttimers_set + + +; CALLR DUMP_FS ;CLEAR OUT THE DUMPS! +; CALLR CLR_DUMP_AUD + JRUC WB1 + +getcoin +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrne gc1 + .ref tuneend_snd + SOUND1 tuneend_snd + SLEEPK 1 +; movi ACTIVE,a0,L +; move *a0(PROCID),a0 +; cmpi GRANDCHAMP_PID,a0 +; jrne gc1 +; .ref hangtime_snd +; SOUND1 hangtime_snd +gc1 + SOUND1 coin_snd + RETP +; movi coin_snd,a0 +; jauc snd_play1 +;DJT End + + +WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + +;DO NEW SOUND CALL HERE + + SOUND1 beep2_snd + RETP + + +DUMP_DONE + RETP ;AND RETURN TO CALLER! + +NOTHIN_TO_DUMP + CALLA CLR_SCRN ;PRINT SOMETHING PLEASE + MOVI MESS_NODUMP,A8 + JSRP L_MESS + RETP + +************************************************************************** +* DO_DUMP +* A9=DUMP NUMBER TO DO +* A10=Y POSITION. + + .if 0 +DO_DUMP + MMTM A12,A8,A9,A10,A11 + + MOVI DUMP_SIZE,A7 + MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY! + + ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA! +* +* Y IS IN A10 +* + MOVE A10,A3 ;Y IN A3 + MOVK 30,A2 ;STORE X IN A2 + MOVK 10,A5 ;NUMBER OF WORDS TO DUMP +NEXT_ELE + CALLA RC_LONGI ;GET A WORD + MOVE A0,A4 ;HEX IN A4 + + MOVE A7,*A13(PDATA),L + MOVE A2,*A13(PDATA+LONG_SIZE),L + MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L + MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L + + JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA +* A10 = Y +* A11 = X + MOVE *A13(PDATA),A7,L + MOVE *A13(PDATA+LONG_SIZE),A2,L + MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L + MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L + + ADDI 48H,A2 + + CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE + JRNZ NO_SKIP_NOW + + ADDK 12,A3 ;PUSH TO 2ND LINE + MOVI 33,A2 ;RE-MARGIN OVER. (30) + +NO_SKIP_NOW + DSJ A5,NEXT_ELE + + MMFM A12,A8,A9,A10,A11 + RETP + + .endif + +************************************************************************** +* +* WRITE_HEX +* +* A4 = DATA +* A3 = Y +* A2 = X +* +************************************************************************** +WRITE_HEX + MOVI MESS_DUMP,A8 + CALLR LM_SETUP ;SETUP FOR A DUMP! + MOVE A3,A9 ;MOVE Y DOWN + SLL 16,A9 ;SHIFT Y INTO PLACE + ADD A2,A9 ;ADD IN X + + MOVE A4,A8 + CLR A3 ;NO COMMAS! + CALLR HTOHXASC ;CONVERT PLEASE! + JSRP LM_FINIS + RETP + +************************************************************************** +* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0 +* A3=NON ZERO IF COMMAS ARE TO BE ADDED! +* A8=HEX # +* Rets: +* A8=PTR TO THE STRING + +HTOHXASC + MMTM SP,A1,A2,A9 + CLR A1 + CLR A2 ;COMMA COUNT + MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR + MOVK 16,A1 ;DIVISOR FOR HEX + MOVE A8,A9 +HEXTASC2 + CLR A8 + DIVU A1,A8 + ADDI '0',A9 ;MAKE THE REMAINDER ASCII + CMPI '9',A9 ;IS IT IN A-F RANGE? + JRLS HHH1 + ADDI 7,A9 ;MAKE ALPHA! +HHH1 + MOVE A9,-*SP ;SAVE HERE + MOVE A8,A9 + JRZ HEXTASC3 ;BR = DONE! + INC A2 + CMPI 3,A2 ;COMMA CHECK + JRLO HEXTASC2 ;BR = NO COMMA +* +* SEE IF WE'RE DOING COMMAS +* + MOVE A3,A3 ;COMMAS? + JRZ HEXTASC2 ;NOPE....IGNORE! + + MOVI ',',A2 + MOVE A2,-*SP ;STUFF A COMMA + CLR A2 + JRUC HEXTASC2 +HEXTASC3 + MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT + MOVE A1,A8 + +HEXTASC4 + MOVE *SP+,A9 + MOVB A9,*A1 + ADDK 8,A1 + MOVE A9,A9 + JRNZ HEXTASC4 + MMFM SP,A1,A2,A9 + RETS + +************************************************************************** +* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS. +* A7 <--- +* THAT IS.......CONCATONATE A8 ONTO THE END OF A7. + +STRCAT + MMTM SP,A7,A0,A8 +STRC2 + MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO. + JRZ STRC1 ;WE'RE THERE! + + ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE + JRUC STRC2 +* +* NOW A7 POINTS AT ITS ZERO. +* +STRC1 + MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING + MOVB A0,*A7 ;ADD THIS TO 1ST STRING + ADDK BYTE_SIZE,A7 + ADDK BYTE_SIZE,A8 + MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR? + JRNZ STRC1 ;NOPE...MOVE ANOTHER + + MMFM SP,A7,A0,A8 + RETS + +MESS_DUMP + MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0 + +MESS_NODUMP + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0 + .byte "NOTHING HERE....PRESS ADVANCE!",0,0 + .even + +MESS_SLASH + .byte "/",0 + .even + +MESS_2SPACE .byte " " +MESS_NULL .byte 0 + .even + +SETUP_1_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0 +SETUP_2_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 +SETUP_3_OF_3 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + +SETUP_2_OF_2 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + +SETUP_1_OF_1 + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + +dollar_mes + PRINT_STR bast10_ascii,5,0,200,53,BAST_R_P,print_string_C2 + .byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0 + .even + +CPYR_MES + PRINT_STR bast8_ascii,5,0,200,240,BAST_Y_P,print_string_C2 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0 + .byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0 + .even + + +****************************************************************************** + + .end + diff --git a/SRC/AUDIT.EQU b/SRC/AUDIT.EQU new file mode 100644 index 0000000..680e4b4 --- /dev/null +++ b/SRC/AUDIT.EQU @@ -0,0 +1,188 @@ +* +* AUDITS +* +* AUDITS ARE HANDLED BY AUDITS NUMBER OFF OF THE BASE +* OF THE AUDIT REGION +* +* IF "CHUTES" VALUE IS CHANGED....EXTRA VALUES MUST +* BE PUT IN THIS TABLE. (AND ADJUSTMENT TABLE OF COURSE) +* +AUDNULL equ 0 +AUDLCOIN equ 1 ;TOTAL COINS IN LEFT CHUTE +AUDCCOIN equ 2 ;Center +AUDRCOIN equ 3 ;Right +AUDXCOIN equ 4 ;4TH CHUTE +AUD_DBV EQU 5 ;BILL VALIDATOR +AUDSERV equ 6 ;SERVICE CREDITS +AUDPAIDC equ 13 +* +* +FRST_C equ AUDLCOIN ;FOR CLEARING COINS +LAST_C equ AUDPAIDC +* +AUD1STRT equ 14 +AUD2STRT equ 15 +AUD1CONT equ 16 +AUD2CONT equ 17 +AUD1TIME equ 18 ;5 SECOND CHUNKS. (700 YEARS WORTH) +AUD2TIME equ 19 ;5 SECOND CHUNKS. +AUDEXTRA equ 20 ;Extra men + +AUDBEGIN equ 21 ;Started at beginning + +AUDFULLGAMES equ 22 ; + +AUDAUTO equ 23 ;AUTO CYCLE PASSES +AUDSTAT equ 24 ;CMOS GAME STATE +AUDTRAP equ 25 ;UNUSED TRAP INSTRUCTION +AUDSURV equ 26 ;SURVIVED LOCKUPS +AUDBONE equ 27 ;GAMES NOT FINISHED +AUDLOCK equ 28 ;LOCKUPS + +AUD_UPTIME equ 30 +AUD_PLTIME equ 31 +AUD_TOTPLYS equ 32 +AUD_INITENTRD equ 33 +AUD_PURCHASED equ 34 +AUD_1PLAYTIME equ 35 +AUD_2PLAYTIME equ 36 +AUD_3PLAYTIME equ 37 +AUD_4PLAYTIME equ 38 +AUD_1STQUARTR equ 39 +AUD_HALFTIME equ 40 +AUD_3RDQUARTR equ 41 +AUD_COMPLETED equ 42 +AUD_OVERTIME equ 43 + +AUD_CONTOFFERED equ 44 +AUD_CONTTAKEN equ 45 + +AUD_TOTSTARTS equ 46 ;starts anywhere +AUD_PRESTARTS equ 47 ;starts before actual game + +AUD_WIN_SCORE equ 48 ;winning score total +AUD_LOS_SCORE equ 49 ;losing score total + +AUD_CPUWINS equ 50 ;# CPU victories +AUD_CPUWINMARG equ 51 ;greatest CPU win margin +AUD_CPULOSMARG equ 52 ;greatest CPU loss margin +AUD_NUMDROPOUT equ 53 ;number of droppouts in game (to game over) +AUD_DROPVSCPU equ 54 ;dropouts vs cpu +AUD_DROPVSHUM equ 55 ;dropouts vs human +AUD_DROPDIFF equ 56 ;score differential at dropout + +AUD_CPUGAMES equ 57 ;number cpu games +AUD_CPUSCORES equ 58 ;total cpu scores + +AUD_ATL equ 60 +AUD_BOS equ 61 +AUD_CHA equ 62 +AUD_CHI equ 63 +AUD_CLE equ 64 +AUD_DAL equ 65 +AUD_DEN equ 66 +AUD_DET equ 67 +AUD_GLD equ 68 +AUD_HOU equ 69 +AUD_IND equ 70 +AUD_LAC equ 71 +AUD_LAL equ 72 +AUD_MI equ 73 +AUD_MIL equ 74 +AUD_MIN equ 75 +AUD_NJ equ 76 +AUD_JY equ 77 +AUD_ORL equ 78 +AUD_PHI equ 79 +AUD_PHX equ 80 +AUD_POR equ 81 +AUD_SAC equ 82 +AUD_SAN equ 83 +AUD_SEA equ 84 +AUD_TOR equ 85 +AUD_UTA equ 86 +AUD_VAN equ 87 ;3 new nba teams +AUD_WAS equ 88 +;AUD_LOS equ 89 + +AUD_HUMGAMES equ 89 ;number human games +AUD_HUMSCORES equ 90 ;total human scores +AUD_4THQUARTR equ 91 +AUD_NUMHOTSTRK equ 92 +AUD_HOTSTRKPTS equ 93 +AUD_LOCKUP equ 94 +AUD_SNDERR equ 95 + +AUD_HUMANVSHUMAN equ 96 ;# of human vs. human games played to completion +AUD_WINSONLEFT equ 97 ;Win % on left side +AUD_CREATED_PLR equ 98 +AUD_ALLEYOOPS equ 99 +AUD_DBLE_DNKS equ 100 +AUD_TM_FIRE equ 101 +AUD_TM_FIRE_PTS equ 102 +AUD_CREATED_PLR_STARTS equ 103 +AUD_SPARE2 equ 104 +AUD_SPARE3 equ 105 +AUD_SPARE4 equ 106 + +* +LAST_AUDIT equ 107 +* + +* +FRSTGAUD equ AUD1STRT +LASTGAUD equ LAST_AUDIT +* +* ADJUSTMENTS ARE ALL LONG WORDS REFERENCED BY ADJUSTMENT +* NUMBER. +* +ADJNULL equ 0 +ADJPRICE equ 1 ;MASTER PRICING +ADJLMULT equ 2 +ADJC1 equ ADJLMULT ;FIRST COIN TABLE ADJUSTMENT +ADJCMULT equ 3 +ADJRMULT equ 4 +ADJXMULT equ 5 +ADJDBVMULT equ 6 +ADJCUNIT equ 7 +ADJBUNIT equ 8 +ADJMUNIT equ 9 +ADJCDIV equ 10 +ADJFRAC equ 11 ;NON ZERO SAYS SHOW HALF CREDITS +ADJCSTRT equ 12 ;CREDITS REQUIRED TO START +ADJCCONT equ 13 ;CREDITS REQUIRED TO CONTINUE +ADJCX equ ADJCCONT ;LAST COIN TABLE ADJUSTMENT + +ADJDIFF equ 14 +ADJHSRES equ 15 +ADJLIVES equ 16 +ADJMUSIC equ 17 +ADJMAXC equ 18 ;MAXIMUM CREDITS +ADJFREPL equ 19 ;NON-ZERO MEANS FREE PLAY +ADJVIRGIN equ 20 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED +**********************************;ADJVIRGIN IS MAINTAINED...BUT NOT USED +ADJFULLG equ 21 ;credits needed to purchase full game (4-16) +ADJ1ST6 equ 22 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. +ADJNOCPAG equ 23 +ADJCNTR equ 24 ;COIN COUNTER MODE +ADJSPEED equ 25 ;game timer speed (1-5) +ADJHEADSZ equ 26 ;player head sizes (1-5) +ADJWINMODE equ 27 ;4 player winner mode (1-3) +ADJCOMPASS equ 28 ;computer assistance (0-1) +ADJTOURNEY equ 29 ;Tournament mode (0-1) +ADJVOLUME equ 30 ;default sound volume for game play +ADJAVOLUME equ 31 ;default sound volume for attract mode +ADJTRIVIA equ 32 ;default sound volume +ADJTOTALIZER EQU 33 +ADJLTOTMULT EQU 34 +ADJCTOTMULT EQU 35 +ADJRTOTMULT EQU 36 +ADJXTOTMULT EQU 37 +ADJBTOTMULT EQU 38 +LAST_ADJUST equ 38 + +****************************************************************************** +;end + + + diff --git a/SRC/BAKGND.ASM b/SRC/BAKGND.ASM new file mode 100644 index 0000000..38ab8e6 --- /dev/null +++ b/SRC/BAKGND.ASM @@ -0,0 +1,778 @@ +************************************************************** +* +* Owner: none +* +* Software: Todd Allen, Mark Turmell, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 9/16/91 -Minor improvements (Total carnage) +* Shawn Liptak, 11/15/91 -CREATE0 +* Shawn Liptak, 2/10/92 -Started basketball +* Shawn Liptak, 5/4/92 -Works with DMA2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/23/92 12:26 +************************************************************** + .file "bakgnd.asm" + .title "background handlers" + .option b,d,l + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "bgndtbl.glo" ;background equates + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + + +;refs + + .if NMBPAL + .ref pal_getb + .endif + .ref pal_getf + + .ref BAKLST + + +;defs + + + +;uninitialized ram definitions + + + .bss BGNDPALTBL ,32 + .bss MOD_POS ,32 + BSSX BAKBITS ,10000 + + BSSX BAKMODS ,32 + + + .text + +******************************** + +*BACKGROUND UPDATER EQUATES +BLSTSTRT .EQU >8000 +BLSTEND .EQU >8001 + +************* LOCAL CONSTANTS FOR UPD ************** +DISP_PAD .SET [20h,20h] ;Y:X +DISP_PAD2 .SET [80h,20h] ;Y:X +WIDEST_BLOCK .SET 250 + +* MUST KEEP THE SIZE OF THESE STRUCTURES A MULTIPLE OF 16 +;MAP_ZFLAGSPAL .SET 0 +MAP_PAL .SET 0 ;SIZE 4 - PALETTE SELECT +MAP_FLAGS .SET 4 ;SIZE 4 - BIT 0 HFLIP, BIT 1 YFLIP +MAP_Z .SET 8 ;SIZE 8 +MAP_X .SET 16 ;SIZE 16 +MAP_Y .SET 32 ;SIZE 16 +MAP_HDR .SET 48 ;SIZE 16 - OFFSET IN LONG WORDS FROM BLOCK_HDR_TBL + ; BITS 12-15 ARE BITS 4-7 OF PAL + ; MAP_HDR SET TO >FFFF IF BLOCK IS NOT ALLOCATED +BLOCK_SIZE .SET 64 ;Uses shifts! + +* Offsets for a BLOCK HDR structure +;MAP_SIZE .set 0 +MAP_W .set 0 ;Word +MAP_H .set 16 ;Word +MAP_DATAPTR .set 32 ;Long +MAP_CTRL .equ 64 ;DMA ctrl word +;BLOCK_HDR_SIZE .set 80 + + +************************************************************************ +* SCAN A MODULE LIST TO FIND OUT WHICH MODULE CONTAINS BLOCKS +* WHICH NEED TO BE CHECKED +* A0=XPOS FOR WHICH HEIGHT OF BACKGROUND NEEDS TO BE DETERMINED +*RETURNS A0 - +* MINIMUM YPOS (MAX HEIGHT) OF PRIMARY BACKGROUND WHICH OVERLAPS +* SPECIFIED XPOS +* A0 = 0 IF XPOS IS INVALID + +BGNDHGHT + MMTM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + MOVE A0,A1 + + CLR A10 ;INIT PACKED Y:X STARTING POSITION + CLR A11 + + MOVE @BAKMODS,A0,L ;* A0- PTR TO THE MODULE LIST +MODLP0 MOVE *A0+,A8,L ;LOAD MODULE PTR + jrz MODX0 ;End? + MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE + + MOVE *A0+,A3 ;X START POSITION + ZEXT A3 + CMPI BLSTSTRT,A3 + JRNZ NOTLSTSTRTX + MOVE A11,A3 + SUBXY A9,A3 + JRUC GOTNEWX0 +NOTLSTSTRTX + CMPI BLSTEND,A3 + JRNZ GOTNEWX0 + MOVE A11,A3 +GOTNEWX0 + MOVE *A0+,A4 ;Y START POSITION + ZEXT A4 + CMPI BLSTSTRT,A4 + JRNZ NOTLSTSTRTY + MOVE A11,A4 + SUBXY A9,A4 + JRUC GOTNEWY0 +NOTLSTSTRTY + CMPI BLSTEND,A4 + JRNZ NOTLSTENDY + MOVE A11,A4 + JRUC GOTNEWY0 +NOTLSTENDY + SLL 16,A4 +GOTNEWY0 + MOVY A4,A3 + MOVE A3,A10 + +; CMPXY A10,A1 +; JRV MODX0 ;JUMP TO EXIT LOOP IF MOD START X > X SOUGHT + + ;IF MOD END X < X SOUGHT KEEP SEARCHING MOD LIST + MOVE A10,A11 + ADDXY A9,A11 ;A11 IS MODULE Y:X END + + MOVE *A8+,A9 ;LOAD # OF BLOCKS + ADD A9,A7 ;A7 IS NEW BAKBITS PTR + CMPXY A11,A1 + JRNV MODLP0 ;SKIP IF AX < BX + + MOVE A10,A0 + SRL 16,A0 + JRUC GOTHGHT + +MODX0 CLR A0 +GOTHGHT MMFM SP,A1,A2,A3,A4,A7,A8,A9,A10,A11 + RETS + + +******************************** +* PARMS +* A0=XPos of block +* A1=*Start of bkgnd block table +* A2=*End of block table +* >A0=ADDRESS OF FIRST BLOCK WITH X COORDINATE >= PARM +* IF NEW X IS HIGHEST RETURNS NEXT EMPTY BLOCK +* IF NO BLOCKS WITH >= X, RETURN 0 + +* A1 = BLOCK TABLE BASE + OFFSET TO X VAL +* A14 - THRESHHOLD FOR SWITCHING FROM BINARY TO LINEAR SEARCH +* A9 = LOW # -- # GREATEST BACKGROUND BLOCK +* A10 = MID # -- (HIGH + LOW) >> 1 +* A2 = HIGH # -- # OF LOWEST BACKGROUND BLOCK + + SUBRP bgnd_get1stx + + PUSH a1,a2,a8,a9,a10 + + clr a9 ;set low = 0 + sub a1,a2 + srl 6,a2 ;div by size of block (64) + addi MAP_X,a1 ;block tbl base + x offset + movk 5,a14 ;threshhold for switching from binary to linear search + +#lp move a2,a10 + sub a9,a10 ;if (high - low) <= 5 finish with linear search + cmp a14,a10 + jrle lsrch + + srl 1,a10 ;/2 + add a9,a10 + + move a10,a8 ;Get mid X + sll 6,a8 ;multiply by block size (64) + add a1,a8 + move *a8,a8 ;get x coor of the block + cmp a0,a8 + jrlt blow + + move a10,a2 ;high = mid + jruc #lp +blow move a10,a9 ;low = mid + jruc #lp + +lsrch + ;* FINISH WITH A LINEAR SEARCH OF BLOCK TABLE FROM LOW TO HIGH + ;* ENDING WITH FIRST BLOCK X COOR THAT IS >= A0 + ;* A0 = X VAL BEING SEARCHED FOR + ;* A9 = LOW ADDRESS -- PTS TO X OFFSET OF BLOCK + ;* A2 = HIGH ADDRESS -- PTS TO X OFFSET OF BLOCK + + SLL 6,A9 ;LOW BLOCK # TO LOW BLOCK OFFSET + SLL 6,A2 ;HIGH BLOCK # TO HIGH BLOCK OFFSET + ADD A1,A9 + ADD A1,A2 + MOVI BLOCK_SIZE,A8 +#linlp + MOVE *A9,A10 ;X COOR + CMP A0,A10 + JRGE GOTB ;IF LOW->X >= A0 GOTO FOUND + ADD A8,A9 + CMP A2,A9 + jrle #linlp + clr a0 ;block not found, return 0 + jruc #x + +GOTB + move a9,a0 ;return a ptr to the block + subi MAP_X,a0 + +#x + PULL a1,a2,a8,a9,a10 + rets + + +*********************** BAK END ******************************* +;* SCAN A MODULE LIST AND RETURN THE PACKED Y:X END POINT +;PARMS + ;A0 - MODULE LIST +;RETURNS + ;A0 - PACKED Y:X END OF WAVE +;BAK_END +; MMTM SP,A3,A4,A8,A9,A10,A11 +; +; CLR A10 ;CLR PACKED Y:X STARTING POSITION +; CLR A11 +; +; +;WEMODLP +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WEMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WENOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WEGOTNEWX +;WENOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WEGOTNEWX +; MOVE A11,A3 +;WEGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WENOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WEGOTNEWY +;WENOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WENOTLASTENDY +; MOVE A11,A4 +; JRUC WEGOTNEWY +;WENOTLASTENDY +; SLL 16,A4 +;WEGOTNEWY +; MOVY A4,A3 +; MOVE A3,A10 +; +; MOVE A10,A11 +; ADDXY A9,A11 ;A11 IS MODULE Y:X END +; +; JRUC WEMODLP +; +;WEMODX +; MOVE A11,A0 +; MMFM SP,A3,A4,A8,A9,A10,A11 +; RETS + + +*********************** BAK START ******************************* +* SCAN A MODULE LIST AND RETURN THE PACKED Y:X STARTING POINT +*PARMS +*A0 - MODULE LIST +*RETURNS +*A0 - PACKED Y:X START OF WAVE +;BAK_STRT +; MMTM SP,A3,A4,A8,A9,A11 +; +; CLR A11 +; MOVE *A0+,A8,L ;LOAD MODULE PTR +; JRZ WSMODX ;END OF THE MODULE TBL +; MOVE *A8+,A9,L ;LOAD PACKED Y:X SIZE +; +; MOVE *A0+,A3,W ;X START POSITION +; ZEXT A3,W +; CMPI BLSTSTRT,A3 +; JRNZ WSNOTLASTSTARTX +; MOVE A11,A3 +; SUBXY A9,A3 +; JRUC WSGOTNEWX +;WSNOTLASTSTARTX +; CMPI BLSTEND,A3 +; JRNZ WSGOTNEWX +; MOVE A11,A3 +;WSGOTNEWX +; MOVE *A0+,A4,W ;Y START POSITION +; ZEXT A4,W +; CMPI BLSTSTRT,A4 +; JRNZ WSNOTLASTSTARTY +; MOVE A11,A4 +; SUBXY A9,A4 +; JRUC WSGOTNEWY +;WSNOTLASTSTARTY +; CMPI BLSTEND,A4 +; JRNZ WSNOTLASTENDY +; MOVE A11,A4 +; JRUC WSGOTNEWY +;WSNOTLASTENDY +; SLL 16,A4 +;WSGOTNEWY +; MOVY A4,A3 +; MOVE A3,A0 +; +;WSMODX +; MMFM SP,A3,A4,A8,A9,A11 +; RETS + + +**************************************************************** +* Update disp list for main bakgnd +* Deletes all display objects which are not on the screen +* Insures all background blocks on screen are on the disp list +* Input: WORLDTL, SCRNTL, SCRNLR, BAKLST, BAKBITS, BAKMODS +* Trashes scratch + + SUBR BGND_UD1 + + PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + PUSH b2 + + move @WORLDTL,a3,L + move a3,a4 + move @SCRNTL,a0,L + addxy a0,a3 + move @SCRNLR,a0,L + addxy a0,a4 + + movi DISP_PAD,a0 ;XY border pad + + subxy a0,a3 ;A3=DISP_TL + addxy a0,a4 ;A4=DISP_LR + movi BAKLST,a8 ;A8=*bakgnd list + callr bgnd_delnonvis + + move @BAKMODS,a0,L ;*Module list + movi BAKBITS,a7 ;Bit table for block being on disp list + movi INSBOBJ,b2 ;*Insert routine + callr bgnd_scanmod + + PULL b2 + PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#******************************* +* Scan a module list to find out which modules contain blocks +* which need to be checked for addition to the display list. +* A0=*Module list +* A3=DISP_TL +* A4=DISP_LR +* A7=*Bakbits table +* B2=*Insert routine +* Trashes A0-A2,A5,A6,A8-A11,A14,B0-B1 + + SUBRP bgnd_scanmod + + move a7,a6 ;a6 will point to bakbits after mod + jruc #next + +#lp + move *a0+,a9,L ;Y:X start + + move *a8+,a11,L ;Mod Y:X size + addxy a9,a11 ;Mod Y:X end + + move *a8+,a2 ;# of blocks + add a2,a6 ;A6=*Next bakbits + + cmpxy a3,a11 + jrxlt #next ;Mod x end < tl x ? + jrylt #next ;Mod y end < tl y ? + + cmpxy a9,a4 + jrxlt #next ;Mod x start > br x ? + jrylt #next ;Mod y start > br y ? + + sll 6,a2 ;*64 (each block is 4 words) + move *a8+,a1,L ;A1=*block table + add a1,a2 ;A2=*block table end + + move *a8+,a5,L ;A5=*hdrs + move *a8+,a10,L ;A10=*PAL table + subxy a9,a3 + subxy a9,a4 + callr bgnd_addmod + addxy a9,a3 + addxy a9,a4 + +#next move a6,a7 + move *a0+,a8,L ;* module + jrnz #lp ;!End? + + +#x rets + + +#******************************* +* This function adds all module blocks in the given range of module +* relative coors to the display list. +* The boundries are included in the group to add. +* +* A1=*Bakgnd block table +* A2=*Bakgnd block table end +* A3=DISP_TL relative to the module start pos +* A4=DISP_LR ^ +* A5=*Bakgnd hdr table +* A7=*Bakbits table +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Bakground insert routine primary|secondary +* +* Trashes A1,A8,A14,B0-B1 + + SUBRP bgnd_addmod + + PUSH a0,a6,a7 + + movx a3,a0 ;find 1st universe block with x >= a9 + sext a0 + subi WIDEST_BLOCK,a0 ;1st x coordinate of a block + callr bgnd_get1stx + jrz #x ;no blocks with > X ? + + movi BLOCK_SIZE,a6 + + move a0,a8 ;A0=*Block + sub a1,a8 ;subtract off start of table + srl 6,a8 ;divide by block size (64) + add a7,a8 ;a8=ptr to bit which indicates block on list + subk 8,a8 ;after inc a8, use movb *a8 to load sign bit + sub a6,a0 ;subtract block size + move a0,a7 + +#sclp1 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp1 ;Already displayed? + + move *a7(MAP_X),a1 + cmpxy a3,a1 + JRXGE #qscanstrt ;Block X >= TL X ? (Do quicker scan) + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14,a0 ;MAP_W + add a0,a1 + cmpxy a3,a1 + JRXLT #sclp1 ;Block X+W < TL X ? (not in range) + + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp1 ;Block Y >= BR Y ? + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp1 ;Block Y+H < TL Y ? + + callr bgnd_addblk + jrnc #sclp1 + + jruc #x ;No more blocks! + + +* Since blocks are sorted from left to right, we can do a quicker scan +* once block left > display left + +#sclp2 + addk 1,a8 + add a6,a7 ;Next block + cmp a2,a7 + jrge #x ;End? + + movb *a8,a0 ;Check bakbit + jrn #sclp2 ;Already displayed? + +#qscanstrt + move *a7(MAP_Y),a1 + sll 16,a1 + cmpxy a4,a1 + JRYGE #sclp2 ;Block Y >= BR Y ? + + move *a7(MAP_HDR),a14 + sll 32-12,a14 ;Bits 0-11 are hdr offset + srl 32-12-4,a14 ;*16 + move a14,a0 ;>*5 + sll 2,a0 + add a0,a14 + add a5,a14 ;A14=*Img hdr + + move *a14(MAP_H),a0 + sll 16,a0 + add a0,a1 + cmpxy a3,a1 + JRYLT #sclp2 ;Block Y+H < TL Y ? + + move *a7(MAP_X),a1 + cmpxy a4,a1 + JRXGE #x ;BLOCK X > BR X ? + + callr bgnd_addblk + jrnc #sclp2 + + +#x PULL a0,a6,a7 + rets + + +#******************************* +* Add a block (object) to a list +* A5=*Base of background block hdr +* A7=*Background block +* A8=*Bakbit for obj +* A9=Module start position Y:X +* A10=*Palette table for new block +* B2=*Ins routine +* Trashes A1,A14,B0-B1 +* C set if getobj fails + + SUBRP bgnd_addblk + + PUSH a0,a2,a3,a4 + + + calla GETOBJ + jrz #x + + movb *a8,a14 ;set bit in bitmap for block on list + ori >80,a14 + movb a14,*a8 + + move a8,*a0(OPLINK),L ;OPLINK = *Bakbit for obj + + clr a1 + move a1,*a0(OID) + move a1,*a0(OFLAGS) + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + movi 01000100H,a1 + move a1,*a0(OSCALE),L + + move *a7(MAP_X),a1,L ;A1=ypos:xpos of block from mod base + addxy a9,a1 ;+module base position + move a1,*a0(OXPOS) + srl 16,a1 + move a1,*a0(OYPOS) + move *a7,a4 ;A4=map_z,8:map_flags,4:map_pal,4 + move a4,a3 + zext a3 + srl 8,a3 + move a3,*a0(OZPOS) + + move *a7(MAP_HDR),a1 + movx a1,a14 + sll 32-16,a14 + srl 32-4,a14 + sll 4+5,a14 ;Bits 12-15 are bits 4-7 of pal index *32 + + sll 32-12,a1 ;Bits 0-11 are hdr offset + srl 32-12-4,a1 ;*16 + move a1,a3 ;>*5 + sll 2,a1 + add a3,a1 + + add a5,a1 ;A1=*Img hdr + + move a4,a3 ;A4=Map_z,8: map_flags,4: map_pal,4 + sll 32-4,a4 ;Last four bits for *pal + srl 32-4-5,a4 ;*32 + add a14,a4 + add a10,a4 ;+Pal_t base + move a0,a2 ;Save A0 + move *a4,a0,L ;Get *PAL + move a1,a4 + .if NMBPAL + calla pal_getb + .else + calla pal_getf + .endif + jrnz bsetpal ;No PAL? + clr a0 +bsetpal + zext a0 + move a0,*a2(OPAL),L + move a2,a0 ;Restore A0 + move a4,a1 ;^ A1 + move a1,*a0(OIMG),L ;A1=Data block pointer + + move *a1(MAP_CTRL),a4 ;Get DMA ctrl + ori >8002,a4 ;A4=flags (>8000 dma go, 2) + srl 4,a3 ;remove palette bits + sll 32-2,a3 + jrc #trans ;Transparent? + addk 1,a4 +#trans srl 26,a3 ;Line up flip bits + or a3,a4 + + move *a1+,a2,L ;ISIZE + move *a1,a3,L ;Get SAG + zext a4 ;Zero offset in A4 + + move a0,a1 + addi OSIZE+32,a1 + mmtm a1,a2,a3,a4 ;Stuff OSIZE,OSAG,OFFSET,OCTRL + + move *a0(OZPOS),a4 + subi 80,a4 ;> 80? + jrlt #normz ;Normal? + +; sll 5,a4 ;*32 +; addi z_t,a4 +; move *a4,a4,L +; call a4 ;Call special code + + move a4,*a0(OZPOS) + + subi 20,a4 ;> 100? + jrgt #no_rel + move *a0(OFLAGS),a4 + ori M_SCRNREL,a4 + move a4,*a0(OFLAGS) + move *a0(OYPOS),a4 + andi 0ffh,a4 + move a4,*a0(OYPOS) +#no_rel + + clr a4 + move a4,*a0(OXVEL),L + move a4,*a0(OYVEL),L + + calla INSOBJ ;Put on objlst + clrc + PULL a0,a2,a3,a4 + rets + +#normz call b2 ;Call insert routine + clrc + PULL a0,a2,a3,a4 + rets + +#x setc ;failure to get object + PULL a0,a2,a3,a4 + rets + + +******************************** +* These functions are called when a block has the appropriate Z +* A0=*Obj +* You can trash A1-A4,A14,B0,B1 + +z_t +;80 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null +;90 + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null,bak_null,bak_null,bak_null + .long bak_null,bak_null + + +bak_null + + rets + + + +#******************************* +* This function deletes all objs outside the given range +* of coors from the display list. +* The boundries are not included in the group to delete. +* A3=DISP_TL +* A4=DISP_LR +* A8=*Bakgnd list +* Trashes A0,A6-A9 + + SUBR bgnd_delnonvis + +#lp move a8,a9 ;ptr to prev in a9 + move *a8,a8,L ;ptr to next in a8 + jrz #x ;End? + +#lp2 MOVE *A8(OXPOS),A7 + CMPXY A7,A4 + JRXLT DEL_IT ;JUMP IF BR X < BLOCK X + + MOVE *A8(OYPOS),A0 + SLL 16,A0 + CMPXY A0,A4 + JRYLT DEL_IT ;JUMP IF BR Y < BLOCK Y + + MOVE *A8(OIMG),A1,L + MOVE *A1,A6 ;A6 BLOCK WIDTH + ADD A6,A7 + CMPXY A3,A7 + JRXLT DEL_IT ;JUMP IF TL X > BLOCK X+W + + MOVE *A1(MAP_H),A7 ;A7 BLOCK HEIGHT + SLL 16,A7 + ADD A7,A0 + CMPXY A3,A0 + JRYGE #lp ;JUMP IF TL Y <= BLOCK Y+H + +DEL_IT + move *a8(OPLINK),a0,L ;>Clr the on display list bit + movb *a0,a7 + sll 32-7,a7 + srl 32-7,a7 + movb a7,*a0 + + move *a8,*a9,L ;Unlink + move @OFREE,a0,L + move a0,*a8,L + move a8,@OFREE,L ;Put on free list + move *a9,a8,L ;A8=*Next obj + jrnz #lp2 ;More? + +#x rets + + + + + + + .end + diff --git a/SRC/BB.ASM b/SRC/BB.ASM new file mode 100644 index 0000000..ad2c085 --- /dev/null +++ b/SRC/BB.ASM @@ -0,0 +1,3576 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 14:35 +************************************************************** + .file "bb.asm" + .title "NBA JAM Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "credturb.tbl" + .include "credturb.glo" + + .include "hoop.tbl" + .include "hoop.glo" + + .include "outdoor.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + + .asg 0,SEQT + .include "plyr.equ" + + .ref initcrowd_ani + .ref game_initobjs + +;sounds external + + .ref snd_update + .ref SOUNDSUP +;DJT Start +; .ref QSNDRST +;DJT End + + .ref heres_tip_sp,eat_snd + .ref start_crowd_noise + + + +;symbols externally defined + + .ref pup_court,pup_aba + + .ref DBV + .ref VOLBTN_PRESS + .ref pup_tournament +; .ref RA_H +; .ref EB_H,JTO_H ;RA_H +;DJT Start +;.ref removed +;DJT End +; .ref fire_flags + +; .ref pal_find + .ref RNDPER + .ref TWOPLAYERS + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref team1_control + .ref team2_control + .ref BTIME + .ref plyr_onfire + + .ref last_name_time + .ref player_names + .ref CYCLE_TABLE + .ref pleasewt + .ref prt_credits + .ref clock_speed + .ref _4plyrsingame + .ref snd_play1ovr + .ref winningteam + + .ref idiot_bits + .ref cntl_team,cntl_team_last,idiot_box + .ref bracket_drw + .ref sc_proc + .ref ballpnumlast + .ref ballprcv_p + .ref inbound + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + +; .ref LED_00,LED_MAX + + .ref QUARTR01 + .ref process_dispatch,cntrs_delay + .ref gmqrtr,refill_turbo + .ref plyr_lost + .ref tm1set,tm2set + + .ref CCOIN,RCOIN,SERVICE,SLAM_SW,XCOIN,LCOIN,DIAG + + .ref CR_STRTP,CR_CONTP,P_START,P_CONT,GET_ADJ + .ref dpageflip + .ref conttimers + .ref WIPEOUT,cr_cntrs_update + .ref ENTERON + + .ref LOWZ,BAKBITS + .ref FONT7A,PALFRAM + .ref UNIT_CLR + .ref initials_entry + .ref ISHSTD + .ref hisclong + + .ref gndstat + .ref STRCNRM + .ref WDOGRAM + .ref BAKMODS + .ref STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT +;DJT Start + .ref RD7FONT +;DJT End + .ref RNDRNG0 + .ref INIT_TAB + .ref IRQSKYE + .ref init_all,GET_AUD + .ref READ_DIP + .ref POWERTST +;DJT Start +;DJT .refs removed +;DJT End + .ref OBJOFF,OBJON,pal_getf +;DJT Start + .ref BGND_UD1 +;DJT End + .ref AUD,AUD1,aud_addnumplyrs +; .ref _3d_test + + .ref PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA + .if DRONES_2MORE + .ref P5DATA,P6DATA + .endif + .ref plyrobj_t,plyrproc_t + + .ref scores,game_time,prt_top_scores + .ref clock_strt + .ref update_scorebrd + .ref clear_player_stats,inc_player_stat +; .ref winner_stays_box + + .ref plyr_start + .ref joy_read + .ref ball_main +; .ref gndx + .ref team1,team2 +; .ref oteam1 + .ref game_purchased +;DJT Start +;DJT .ref moved down +;DJT End + .ref assist_delay,assist_plyr + + .ref CKDIAG,POWERCMOS,amode_start + .ref dirqtimer + +; .ref clipsrunning +; .ref plyr_eoq_lockcont,cliplockretp + .ref system_restoregame,io_init + .ref slide_info_box_on_off + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref creditscreen + .ref dronesmrt + + .if CRTALGN + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .endif + +;symbols defined in this file + +; .def qrtr1,qrtr2,qrtr3,qrtr4 +; .def wbmcolor_t + .def init_t1a,init_t2a,init_t3a,init_t4a + .def timertcnt,PSTATUS2,COLRPRC + .def OWINDOW,CWINDOW + .def swstacktop, swstack_p + + +;uninitialized ram definitions + + .if DEBUG + BSSX SLDEBUG ,16 ;Shawn's debug + BSSX slowmotion ,16 ;!0=Frames of delay for slow motion + .endif + + ;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of + ; coding checks for the wraparound case, which happens every ten + ; minutes or so. Since it's always treated as an unsigned value + ; anyway, it's perfectly safe to continue using it as a word. - JS + .even + BSSX PCNT ,32 ;Main loop cnt +;;;; BSSX PCNT ,16 ;Main loop cnt + + BSSX swstack_p ,32 ;*Stack position + BSSX swstackbot ,16*64 ;Bottom of stack + .bss swstacktop ,0 ;Top of stack + + BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS + + BSSX GAMSTATE ,16 ;Game state: See game.equ + + BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE) + BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. + + BSSX PSTATUS2 ,16 ;Player has started game bits (0-3) + ;used to decide if this player must + ;pay 2 credits or just 1 credit to + ;start! + + BSSX WSPEED ,16 + BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON + .bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW + BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT + + + .bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM + + + BSSX crplate_ptr ,32 ;credit plate ptr + BSSX tm1_turbo ,32 ;team turbo *objs + BSSX tm2_turbo ,32 + BSSX msg_ram ,32*NUMPLYRS ;temp ram for flopping message/meters + BSSX name_cnt ,16 ;Cntr for flopping to player names + BSSX name_flop ,16 ;Flop name/buyin message 0 or 1 +;DJT Start + BSSX names ,32*NUMPLYRS ;plyr name *imgs -MUST PRECEED + BSSX original_names ,32*NUMPLYRS ;plyr name *imgs -MUST FOLLOW +;DJT End + + BSSX crt_colors ,32 ;Random pal for court - NDSP1.ASM + BSSX bkcrt_colors ,32 +;; BSSX refcrt_colors ,32 + BSSX steals_off ,16 ;!0=ticks until steals can happen + BSSX pushing_delay ,16 ;!0=keep ball if pushed + BSSX pass_off ,16 ;!0=Don't allow passing + BSSX rebound_delay ,16 ;!0=Give rebound stat +;; BSSX crowd_aniflag ,16 ;!0=Allow crowd animations +;; BSSX bench_aniflag ,16 ;!0=Allow bench animations + +; Timer variables. Must stay in order!! + + BSSX timertcnt ,16 ;Tick count + + BSSX qtr_purchased ,16*4 ;# game qtrs credit each player has + + BSSX newptr ,32 + BSSX newplyrs ,(32+16)*5 + +; .bss played3d ,16 + + + .ref _serial_number + .ref _man_date + .ref InitPIC + .ref RemapIO + .ref SecFuncCheck + + BSSX _coin_addr,32 + BSSX _switch_addr,32 + BSSX _switch2_addr,32 + BSSX _watchdog_addr,32 + BSSX _dipswitch_addr,32 + BSSX _sound_addr,32 + BSSX _soundirq_addr,32 + BSSX _coin_counter_addr,32 + +;; BSSX tm1_meter_cnt, 16 +;; BSSX tm1_meter_obj, 32 +;; BSSX tm2_meter_cnt, 16 +;; BSSX tm2_meter_obj, 32 + +;equates for this file + + + .text + + +**************************************************************** +* Reset entry point + + SUBR init_prog + + .if 0 + +========================== +=;;; Old startup code ;;;= + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + movi STCKST,sp ;Top of stack + + calla InitPIC + +; .if DEBUG +; move a0,@>1e00000 ;Clr FPGA rom protect +; .endif + +; Moved to PU DIAGS +; movi 0fe00h,a0 ;Hit reset bit +; move a0,@SOUND +; movi 100,a0 ;Wait for it to catch +; dsj a0,$ +; movi 0ff00h,a0 ;Let it go +; move a0,@SOUND + + move @WDOGRAM,a0,L + cmpi WDOGNUM,a0 + jrne initp50 ;Powerup? + + move @dirqtimer,a0 + cmpi 400,a0 + jrhs #lockup ;Main loop died? + + + .if TUNIT + move @TALKPORT,a0 ;Check if watchdog was real + btst B_WDOG,a0 ;Bit should be low if dog fired + jrnz #cont ;No watchdog? + .endif + + movk AUDLOCK,a0 ;Watchdog + jruc #aud + +#lockup + + movi AUD_LOCKUP,a0 ;Main loop lockup +#aud calla AUD1 + +#cont + +; move @clipsrunning,a0,L ;>Restore game if clips crashed +; cmpi >12345678,a0 +; jrne #notclip ;Not a clip reset? +; +; calla io_init ;Initialize the I/O regs +; movi DIE+X2E,a0 +; move a0,@INTENB ;Display int on, DMA int off +; +; movi AUD_CLIPLOCK,a0 +; calla AUD1 +; movi ACTIVE,a13 +; clr a1 +; move a1,@clipsrunning,L +; calla KILALL +; +; CREATE0 #proc +; +; eint +; jruc mainlp +; +;#proc calla display_blank +; calla system_restoregame ;Restore the saved game +; movi cliplockretp,a0 ;Return addr for eoq +; PUSHP a0 +; jauc plyr_eoq_lockcont +; +;#notclip + + movk AUDSTAT,a0 + calla GET_AUD ;0=AMode, 1=Game + move a1,a1 + jrz WARMSET ;Attract mode glitch? + +initp50 + calla READ_DIP ;skip if UJ2 bit 6 set + btst 6,a0 + jrnz #nopt + jauc POWERTST ;board test etc... +#nopt + +=;;; End of old startup code ;;;= +================================= + + .else + + dint ;Interrupts OFF + setf 16,1,0 ;Word sign extend + setf 32,1,1 ;Long word sign extend + movi STCKST,sp ;Setup the stack pointer + + clr a0 ;Initial mode for VMUX chip + move a0,@VMUX_CONTROL,W + + movi 00030h,a0 ;Hit sound reset bit + move a0,@COIN_COUNTERS ;This is where reset bit is + movi 100,a0 ;Wait for it to catch + dsjs a0,$ + movi 00020h,a0 ;Let it go + move a0,@COIN_COUNTERS + + + move @SOUNDIRQ,a0 ;Read watchdog status + btst 8,a0 ;Is this reset from a watchdog? +;DJT Start + jrnz #cont ; br=no + + movk AUDLOCK,a0 ;Audit a Dog + jruc #aud +#cont + move @WDOGRAM,a0,L ;Has machine been initialized? + cmpi WDOGNUM,a0 + jrne initp50 ; br=no, must be powerup + + move @dirqtimer,a0 ;Did we have a process KO? + cmpi 400,a0 + jrlo initp50 ; br=no, continue regular startup + + movi AUD_LOCKUP,a0 ;Audit a proc KO +#aud +;DJT End + calla AUD1 + +;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC +;here instead of one above before the read for the watchdog status and it may +;be tempting to move the InitPIC call to before the watchdog status read BUT +;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized +;or the status of the watchdog will be reset. + +initp50 + calla InitPIC ;Init PIC and I/O system + + move a0,@WATCHDOG ;Kill the dog fer yucks + calla READ_DIP ;Read the dipswitches + btst 6,a0 ;Is power-up test bypass switch on? + jaz POWERTST ; br=do power-up tests; go to WARMSET + + calla InitPIC ;Reinit PIC and I/O system + + .endif + + +#******************************** +* + + SUBR WARMSET + + dint + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long zero extend + movi STCKST,sp ;Top of stack + + calla InitPIC ;Reinit PIC and I/O system +; +; Enabled 3/19/96 ;MJL + +;FIX!!!! Keep in for ship.... + jauc POWERCMOS ;Do CMOS power-up chk; go to PCMOSRET + + + SUBR PCMOSRET + + calla init_all ;Init hardware + + move b5,@_serial_number,L + move b6,@_man_date,L + calla SecFuncCheck ;Make sure security functions haven't + ; been mucked with + calla INIT_TAB ;Reset todays high score table + +; movk 1,a0 +; move a0,@>fff80000,L + + .if DEBUG + callr testcode + .endif + +;;;; CREATE SNDMON_PID,dcs_watchdog + + calla CKDIAG + jrz #main_go ;No diag switches closed? + + CREATE DIAG_PID,DIAG ;Fire off the diag process + jruc mainlp + +#main_go + .if HEADCK + .ref debug_plyr_num + clr a0 + move a0,@debug_plyr_num + .endif + + CREATE0 amode_start ;Fire up the attract mode + + +#******************************* +* Main loop + + SUBR mainlp + + calla process_dispatch + + move a13,a13 + jrz mainpok + .if DEBUG + LOCKUP + eint + .else + CALLERR 10,0 + .endif +mainpok + + move @RAND,a1,L ;>Randomize + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + calla cr_cntrs_update ;And blink the top messages + callr switch_unstack + calla snd_update ;Update the sound calls + calla joy_read + +;DJT Start + .ref passfudge + .ref ballpnum + move @passfudge,a0 + jrle #fok + subk 1,a0 + move a0,@passfudge + jrnz #fok + move @ballpnum,a14 + jrnn #fok + move a0,@ballprcv_p,L + .if DEBUG + LOCKUP + .endif ;DEBUG +#fok +;DJT End + move @steals_off,a0 + jrle #ok + subk 1,a0 + move a0,@steals_off +#ok + move @pushing_delay,a0 + jrle #ok2 + subk 1,a0 + move a0,@pushing_delay +#ok2 + move @pass_off,a0 + jrle #ok3 + subk 1,a0 + move a0,@pass_off +#ok3 + + move @assist_delay,a0 + jrle #ok4 + subk 1,a0 + move a0,@assist_delay + jrnz #ok4 + clr a1 + move a1,@assist_plyr +#ok4 + move @rebound_delay,a0 + jrle #ok5 + subk 1,a0 + move a0,@rebound_delay +;Why... +; jrnz #ok5 +; clr a1 +; move a1,@rebound_delay + +#ok5 +;Used for disallowing swats off of rim... + .ref in_cylinder + move @in_cylinder,a0 + jrle #ok6 + subk 1,a0 + move a0,@in_cylinder +#ok6 +;Used for converting rejection art into rebound art if ball just hit rim + .ref must_rebound + move @must_rebound,a0 + jrle #ok7 + subk 1,a0 + move a0,@must_rebound +#ok7 + + + + .if DEBUG +; .bss last_snd_st,16 +; move @_soundirq_addr,a0 +; move *a0,a0 +; andi >400,a0 +; move @last_snd_st,a14 +; cmp a0,a14 +; jrz wsr_1 +; LOCKUP +;wsr_1 +; move a0,@last_snd_st + callr cputime_calcfree + .endif + + move @HALT,a0 + jrnz #skipit + move @last_name_time,a0 + inc a0 + move a0,@last_name_time ;# ticks since player name called +#skipit + + ;update all 32 bits of PCNT + move @PCNT,a0,L + addk 1,a0 + move a0,@PCNT,L + +; move @PCNT,a0 +; addk 1,a0 +; move a0,@PCNT + + movb @DIPSWITCH-7,a0 + jrn mainlp + + movi ACTIVE,a13 ;*Proc list + CREATE DIAG_PID,DIAG + jruc mainlp + + + +#*************************************************************** +* Unstack switch queue + + + SUBRP switch_unstack + +; clr a4 +; +;#lp move @swstack_p,a3,L +; cmpi swstacktop,a3 ;Stack at start? +; jreq #x ;Empty? +; move @FREE,a0,L +; jrz #x ;No processes left? +; +; move *a3+,a0 ;Get entry +; move a3,@swstack_p,L ;Update stack +; sll 32-5,a0 ;Max switch # 31 +; srl 32-5-4,a0 ;*16 +; move a0,a2 +; add a0,a2 +; add a0,a2 ;*3 +; addi switch_t,a2 +; move *a2+,a1 +; jrz #lp ;No PID? +; move *a2+,a7,L ;*Code +; movi ACTIVE,a13 ;*Proc list +; calla GETPRC +; addk 1,a4 +; jruc #lp +;#x subk 1,a4 +; jrle #xx +; LOCKUP +;#xx rets + +#lp move @swstack_p,a3,L + cmpi swstacktop,a3 ;Stack at start? Yes if = + jreq #x + move @FREE,a0,L ;Any procs left? No if 0 + jrz #x + + move *a3+,a0 ;Get entry + move a3,@swstack_p,L ;Update stack ptr + sll 32-4,a0 ;Clr bits above max (15) value + srl 32-4-4,a0 ;*16 for look-up calc + move a0,a2 + add a0,a2 + add a0,a2 ;*3 for tbl offset from + addi switch_t,a2 ; table start + move *a2+,a1 ;Get switch PID; none if 0 + jrz #lp + move *a2+,a7,L ;*Switch code + movi ACTIVE,a13 ;*Proc list + calla GETPRC + jruc #lp + +#x rets + +switch_t ;(Process ID or 0, *Routine) ;Put in audit?? + + WL LC_PID, LCOIN ;S0 - LEFT COIN (1) + WL RC_PID, RCOIN ;S1 - RIGHT COIN (2) + WL PSWPID, plyr_strtb1 ;S2 - START 1 + WL SLAM_PID, SLAM_SW ;S3 - SLAM TILT + WL DIAG_PID, DIAG ;S4 - TEST + WL PSWPID, plyr_strtb2 ;S5 - START 2 + WL DIAG_PID, SERVICE ;S6 - SERVICE CREDIT + WL CC_PID, CCOIN ;S7 - CENTER COIN (3) + WL CC_PID, XCOIN ;S8 - COIN 4 + WL PSWPID, plyr_strtb3 ;S9 - START 3 + WL PSWPID, plyr_strtb4 ;S10 - START 4 + WL VOLBTN_PID,VOLBTN_PRESS ;S11 - VOLUME DOWN + WL VOLBTN_PID,VOLBTN_PRESS ;S12 - VOLUME UP + WL 0,0 ;S13 + WL 0,0 ;S14 + WL CC_PID, DBV ;S15 - DOLLAR BILL VALIDATOR + +;old 32bit switch stack procs +; WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4 +; WL 0,0 ;S1 +; WL 0,0 ;S2 +; WL 0,0 ;S3 +; WL 0,0 ;S4 +; WL 0,0 ;S5 +; WL 0,0 ;S6 +; WL PSWPID,plyr_strtb3 ;S7 - START 3 +; WL 0,0 ;S8 +; WL 0,0 ;S9 +; WL 0,0 ;S10 +; WL 0,0 ;S11 +; WL 0,0 ;S12 +; WL 0,0 ;S13 +; WL 0,0 ;S14 +; WL CC_PID,XCOIN ;S15 - COIN 4 +; WL LC_PID,LCOIN ;S16 - LEFT COIN (1) +; WL RC_PID,RCOIN ;S17 - RIGHT COIN (2) +; WL PSWPID,plyr_strtb1 ;S18 - START 1 +; WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT +; WL DIAG_PID,DIAG ;S20 - TEST +; WL PSWPID,plyr_strtb2 ;S21 - START 2 +; WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT +; WL CC_PID,CCOIN ;S23 - CENTER COIN (3) +; WL 0,0 ;S24 +; WL 0,0 ;S25 +; WL 0,0 ;S26 +; WL 0,0 ;S27 +; WL 0,0 ;S28 +; WL 0,0 ;S29 +; WL 0,0 ;S30 - Snd IRQ +; WL 0,0 ;S31 + + +**************************************************************** +* plyr_strtbx - Process player start button (Process) + + SUBR plyr_strtb1 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb2 + + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p1_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P1_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb2 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #strtb3 +#strtb2 + movk 1,a8 + movi P2DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p2_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P2_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb3 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x +#strtb3 + movk 2,a8 + movi P3DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p3_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P3_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;------------------- +;------------------- + SUBR plyr_strtb4 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #psb_x + + movk 3,a8 + movi P4DATA,a11 + + move @GAMSTATE,a0 + cmpi IN_PRE_PLYR_DESIGN,a0 + jreq #psb_x ;br=dont take credits (entering CREATE PLAYER) + cmpi INPLYRDESIGN,a0 ;player designing character ? + jrne plyr_strtbut ;br=no + + move @p4_slide_box_flag,a0 + jrnz #psb_x ;br=process EXISTS...dont allow + CREATE P4_BOX_SLIDE_PID,slide_info_box_on_off ;br=tell player -CREDIT NOT TAKEN + jruc #psb_x ;dont process further + + +;-------------------- +; Common start button process + +plyr_strtbut + movk 1,a0 + move a0,@BTIME + + move @GAMSTATE,a1 + cmpi INAMODE,a1 ;In attract? No if != + jrne #chkstrt + calla CR_STRTP ;Yes. Have credits to start? Yes if >= + jrhs #chkstrt + + MOVI CP_PID1,A0 + MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP + CALLA EXISTP + jrnz SUCIDE ;br=yes, go die + +;DJT Start + move @SOUNDSUP,a0 + PUSH a0 + clr a0 + move a0,@SOUNDSUP + .ref tuneend_snd + SOUND1 tuneend_snd + PULL a0 + move a0,@SOUNDSUP + +;DJT End + JSRP creditscreen ;No. Show credits screen & restart +; calla display_blank ; attract +; calla WIPEOUT ;CLEAN SYSTEM OUT +; SLEEPK 1 + jauc amode_start + +#chkstrt + cmpi INPLYRINFO,a1 ;No start if on plyr info scrn + jreq #psb_x + + move @WFLG,a0 ;No start if window is growing + jrnz #psb_x + move @ENTERON,a0 ;No start if initials being entered + jrnz #psb_x + + move @pleasewt,a0 ;No start if plyr should be waiting + btst a8,a0 ;(bit #=plyr #) + jrnz #psb_x + + move @PSTATUS,a0 ;Chk plyr status. Already in game? + btst a8,a0 ;(bit #=plyr #) + jrz #startplyr ;No if 0 + + move @game_purchased,a0 ;Yes. Already bought whole game? + btst a8,a0 ;(bit #=plyr #) + jrz #chkaddmore +;Yes. Show max'd message here & die + DIE + +#chkaddmore + cmpi INGAME,a1 ;Don't add more during game play + jrz #psb_x + + calla CR_CONTP ;Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + + callr add_plyr_time ;Add more to this players play time + + movk ADJCCONT,a0 ;Get # credits req'd to continue + calla GET_ADJ + + callr paidcreds_add ;Update everything & die + calla update_scorebrd + jruc #psb_x + + +;-------------------- +; Start new player + +#startplyr + move @GAMSTATE,a1 + jrn #psb_x ;In diagnostics? Yes if - (go die) + cmpi INGAMEOV,a1 ;In game over? Yes if = (go die) + jreq #psb_x + + cmpi INAMODE,a1 ;New start from attract? Yes if = + jreq game_start + cmpi INFREEPRICE,a1 ;New start on winners scrn? + jreq game_start2 + + cmpi ININTRO,a1 ;New start on stats scrn? Yes if = + jreq #psbstart + + move @game_time,a14,L ;Chk game clk. Do start if 0 + jrnz #notz + cmpi INGAME,a1 + jrnz #psbstart + .if DEBUG + LOCKUP + .endif + DIE +#notz + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrge #psbstart + + movk ADJFREPL,a0 ;Well into qrtr but do start if in + calla GET_ADJ ; free play (is !0) + jrnz #psbstart + + move @PSTATUS2,a0 ;Not free. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #isnew ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jalo SUCIDE ;No if < (go die) + jruc #dowaitmes +#isnew + calla CR_STRTP ;Hasn't. Have credits to start? + jalo SUCIDE ;No if < (go die) +#dowaitmes + movk 1,a0 + sll a8,a0 + move @pleasewt,a14 ;Wants to start but can't. Set + or a0,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +;-------------------- +#psbstart + move a8,a14 ;Make team # (0 or 1) from plyr # + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 ;Was plyr on winning team? + jreq #psbfree ;Yes if = (start is free) + + move @PSTATUS2,a0 ;No. Chk for previous start + btst a8,a0 ;(bit #=plyr #) + jrz #psbcred ;Player never started? Never if 0 + + calla CR_CONTP ;Has. Have credits to continue? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_CONT ;Yes. Take credits to continue + + SOUND1 eat_snd + +#psbfree + callr add_plyr_time ;Add more to this players play time + + movk AUD1CONT,a0 ;Audit a continue + calla AUD1 + jruc #dostart + +#psbcred + calla CR_STRTP ;Hasn't. Have credits to start? + jrlo conttimers_cnt ;No if < (do continue timers & die) + calla P_START ;Yes. Take credits to start + + SOUND1 eat_snd + + callr add_plyr_time ;Add more to this players play time + + move @GAMSTATE,a1 + subk ININTRO,a1 ;Don't audit a start if in intro?!!! + jreq #dostart + + movk AUD1STRT,a0 ;Audit a start + calla AUD1 + +;-------------------- +#dostart + move @GAMSTATE,a1 ;Set common Ks + movk 1,a7 + sll a8,a7 + + cmpi ININTRO,a1 ;If in intro, do regular start + jreq #do_psb_intro + + movk ADJFREPL,a0 ;If in free play, do free play start + calla GET_ADJ + jrnz #do_psb_free + + move @game_time,a14,L ;In-game start. Chk game clk + cmpi 2020000h,a14 ;!!!Do start if >= 2:20.0 remain + jrgt #do_psb_free + + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb1 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb1 + calla GET_ADJ + callr paidcreds_add + + move @pleasewt,a14 ;Wants to start but can't. Set + or a7,a14 ; is-waiting bit. + move a14,@pleasewt + + callr plyr_ingame_wait ;Show "please wait" & die + DIE + +#do_psb_intro + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb2 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb2 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + move @gmqrtr,a0 + jrz #inintro_x + + move @newptr,a0,L + move a11,*a0+,L ;Save PnDATA ptr + move a8,*a0+ ;Save plyr # (0,1,2,3) + clr a1 ;Clr next long + move a1,*a0,L + move a0,@newptr,L + + jruc #inintro_x + +#do_psb_free + movk ADJCSTRT,a0 ;Get # credits req'd to start + move @PSTATUS2,a14 ;Want start or continue credits? + btst a8,a14 ;(bit #=plyr #) + jrz #psb3 ;New start if 0 + movk ADJCCONT,a0 ;Get # credits req'd to continue +#psb3 + calla GET_ADJ + callr paidcreds_add + + move @PSTATUS,a14 ;Set plyr in-game bit + or a7,a14 + move a14,@PSTATUS + + move @PSTATUS2,a14 ;Set plyr has-started bit + or a7,a14 + move a14,@PSTATUS2 + + +;-------------------- +; Plyr name & turbo init; also created in below +; A8=plyr # (0,1,2,3) +; A11=PnDATA ptr + +#frepl + movk 1,a0 ;Init flop cntr & state flag + move a0,@name_cnt + clr a0 + move a0,@name_flop + + move @GAMSTATE,a14 + subk ININTRO,a14 ;In intro? No credit imgs to update + jrz #frp_1 ; if so (if 0) + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + calla prt_credits ;Do updated credit imgs +#frp_1 + move *a11(ply_messages),a0,L ;Any insert|press|please msg? + jrz #imgson_x ;Done with setup if not (if 0) + + calla DELOBJ ;Kill the msg obj + clr a0 + move a0,*a11(ply_messages),L + + PUSH a8,a11 + + move a11,a9 + addi ply_meter_imgs,a9 + + move a8,a0 + sll 5,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #4_plyrs + addi 4*32,a0 +#4_plyrs + addi #cr_box,a0 + move *a0,a11,L + + move *a11(16),a14 + move *a9+,a0,L + move a14,*a0(OYPOS) + addi 16+16+16+32,a11 + + move *a9,a0,L + jrz #cv + calla DELOBJ +#cv + callr prt_status + + PULL a8,a11 + + calla refill_turbo + +; movi scorep,a0 +; calla pal_getf +; move a0,a5 +; +; move a8,a0 +; sll 5,a0 +;; move a0,a9 ;Put away for next segment +; addi names,a0 +; move *a0,a0,L +; move *a11(ply_meter_imgs),a8,L ;change box to name +; move a5,*a8(OPAL) +; movi MSGOCTRL,a1 +; calla obj_aniq_cnoff +; +; addi plyr_data_tbl,a9 ;>Setup for created plyr name +; move *a9,a0,L +; move *a0(PR_CREATED_PLYR),a14 +; jrz #inintro ;!!!Wanna go here? +; addi PR_NAME1,a0 +; movi [END_CHAR,END_CHAR],a14 +; move *a0,a1,L +; cmpxy a14,a1 +; jrxz #inintro +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME3),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move *a0(PR_NAME5),a1,L +; cmpxy a14,a1 +; jrxgt #inintro +; jrygt #inintro +; move a0,*a8(ODATA_p),L +; clr a14 +; move a14,*a8(OMISC) +; move *a8(OFLAGS),a14 +; addi M_CHARGEN,a14,W +; move a14,*a8(OFLAGS) + + +; PUSH a6,a8,a11 +;;;;;;; calla prt_cr_timers <- Did nothing! +; PULL a6,a8,a11 + +#imgson_x +; callr plyr_ingame_wait + +#inintro_x +;Use player name as a sound call + +#psb_x + DIE + + +#cr_box .long init_t1,init_t2,init_t3,init_t4 + .long init_t1,init_t2kit,init_t3kit,init_t4 + +sticklst + .word p1stickid,p2stickid,p3stickid,p4stickid + + +;---------- +; + + SUBR start_msgs + + movi newplyrs,a10 + move a10,@newptr,L + move a10,a2 + + movk 4,a9 +start1 + move *a10+,a11,L + jrz #done + move *a10+,a8 + CREATE0 #frepl + dsj a9,start1 +#done + clr a0 + movk 5,a14 +#clp + move a0,*a2+,L + move a0,*a2+,W + dsjs a14,#clp + + DIE + + +******************************** +* A0=Units to add +* A8=Pnum (0-3) +* Trashes A0 + +paidcreds_add + + PUSH a1,a2 + + move a8,a1 + sll 5,a1 + addi paid_t,a1 + move *a1,a1,L + + move a8,a14 + srl 1,a14 + move @winningteam,a2 + cmp a14,a2 + jrnz #nothalf + sll 3,a0 ;Double paid credits + +#nothalf + move *a1,a2 + add a0,a2 + move a2,*a1 + + move a8,a1 + sll 4,a1 ;x 16 bits + addi qtr_purchased,a1 + move *a1,a14 + inc a14 + move a14,*a1 + + move @gmqrtr,a1 + cmpi 3,a1 + jrge #full + movk 4,a2 + sub a1,a2 + cmp a2,a14 + jrlt #no + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jreq #no + move @gmqrtr,a14 + jrnz #full +;If matchup scrn is on, still do this! + .ref inmatchup + move @inmatchup,a0 + jrz #no + +#full + move @game_purchased,a0 ;set purchased bit + move a8,a14 + sll 4,a14 + addi or_t,a14 + move *a14,a14 + or a14,a0 ;for player + move a0,@game_purchased + +#no + PULL a1,a2 + rets + +;needed .word 6,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + +******************************** +* Set "please wait" message +* A11=*PxDATA + + SUBRP plyr_ingame_wait + + PUSH a8 + + move *a11(ply_messages),a8,L + movi please,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + calla update_scorebrd + + move *a11(ply_meter_imgs),a0,L + calla OBJOFF + move *a11(ply_meter_imgs+32),a0,L + calla OBJOFF + + PULL a8 + rets + + +#******************************** +* A0=units to add + +add_plyr_time + + movi 3500,a1 + move a1,*a11(ply_time) + + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk ININTRO,a0 + jreq #x + move *a11(ply_meter_imgs),a0,L + jrz #nxt + + move *a11(ply_meter_imgs+32),a0,L + move *a0(OIMG),a1,L + cmpi start,a1 + jrnz #nxt + movk 9,a1 + move a1,*a0(OYPOS) +#nxt +;;;;;;; jauc prt_cr_timers <- Did nothing! +#x + rets + + +or_t .word 1,2,4,8 + + +******************************** +* Add count to continue timers (Process) + + SUBRP conttimers_cnt + + DIE + + +#*************************************************************** +* Start game from INFREEPRICE mode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + +game_start2 + move a8,a14 + srl 1,a14 + move @winningteam,a0 + cmp a14,a0 + jrz gs2 + + +#*************************************************************** +* Start game from amode (Process) +* A8=Plyr # (0-3) +* A11=*PxDATA + + SUBR game_start + + calla CR_STRTP + jalo SUCIDE ;Not enough credits? + calla P_START ;Take credits + + .ref set_game_snd + calla set_game_snd +;;;;;;; JSRP QSNDRST ;Kill sleeps which made credit-eater bug! + +gs2 + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + clr a0 + move a0,@gmqrtr + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + move a0,@inmatchup + move a0,@pup_tournament + move a0,@pup_court ;default=INDOOR court + move a0,@pup_aba ;default=regular ball + move a0,@dronesmrt + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + +; .ref gme_strt_snd +; SOUND1 gme_strt_snd + + callr add_plyr_time ;add time to this players play time + + movi AUDBONE,a0 ;+1 games started from amode + calla AUD1 + + movi AUD_TOTPLYS,a0 + calla AUD1 + + movk 1,a0 + sll a8,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + + movk ADJCSTRT,a0 ;credits required to start + calla GET_ADJ ;returns 1,2 + + callr paidcreds_add + +;DJT Start + movi INTRO_PID,a0 ;>Intro state + move a0,*a13(PROCID) + move @GAMSTATE,a1 + movi INPLYRINFO,a0 ;>START button lock-out + move a0,@GAMSTATE + subk INAMODE,a1 + jrne #notnew + + calla display_blank + calla WIPEOUT + clr a0 + move a0,@dtype ;2D + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@IRQSKYE + movk 1,a0 ;page flipping on + move a0,@dpageflip + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + .ref setup_message,print_string_C2,mess_objid + movi #maxstr_setup,a2,L + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #maxstr,a4,L + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + SLEEPK 5 + + .ref rim_fire_snd ;combo_lock1 + SOUND1 rim_fire_snd + .ref max_hngtm_sp + SOUND1 max_hngtm_sp + .ref tm_fire_tune + SOUND1 tm_fire_tune + + .ref flash_bigtxt3 + CREATE CYCPID,flash_bigtxt3 + + SLEEP 20 + movi ((31*32)+31)*32+31,a0 + move a0,@IRQSKYE + SLEEPK 4 + clr a0 + move a0,@IRQSKYE +#notnew + movk ININTRO,a0 + move a0,@GAMSTATE + +;DJT End + calla display_blank + calla WIPEOUT + + +;------------------------------- + + movi 10*60,a0 + move a0,@cntrs_delay + + SLEEPK 1 + + clr a0 + move a0,@team1 + move a0,@team2 + move a0,@SOUNDSUP + + + .ref special_heads + + movi -1,a0 + move a0,@special_heads,L + move a0,@special_heads+20h,L + + .ref dtype + + clr a0 + move a0,@dtype + + .ref monitor_fullgame + CREATE0 monitor_fullgame + + move @winningteam,a1 + jrnn #skip + + movk 1,a0 + move a0,@HALT + +; JSRP winner_stays_box + + clr a0 + move a0,@HALT + move a0,@gmqrtr + +;For debugging certain teams, change these: + +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + + + clr a0 ;team # + move a0,@team1 + movk 3,a0 ;Team # + move a0,@team2 + +#skip + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; clr a1 +; move a1,@TRIVIA_TEST +; move a8,a0 +; .ref get_stick_val_cur +; calla get_stick_val_cur +; subk 1,a0 +; jrnz #noqktriv +; move a8,a0 +; .ref get_but_val_cur +; calla get_but_val_cur +; subk 7,a0 +; jrnz #noqktriv +; movk 1,a0 +; move a0,@TRIVIA_TEST +; jruc #redo +;#noqktriv +;;FIXX!!! end + + .if DEBUG + .ref RIM_STEP + .ref CLOCK_OFF + .ref QUICK_TIP + .ref pup_showshotper + .ref get_all_sticks_cur2 + .ref get_all_buttons_cur2 + calla get_all_sticks_cur2 + move a0,a2 + calla get_all_buttons_cur2 +;If stick held up at start, show outdoor court + btst 0,a2 + jrz #nooutdoor + move a2,@pup_court +#nooutdoor +;If pass button is pressed at start, allow rim-detect single-stepping + clr a1 + move a1,@RIM_STEP + btst 1,a0 + jrz #norimstep + move a0,@RIM_STEP +#norimstep +;If turbo button is pressed at start, turn off clock + clr a1 + move a1,@CLOCK_OFF + btst 2,a0 + jrz #noclkoff + move a0,@CLOCK_OFF +#noclkoff +;If shoot button is pressed at start, skip initials & go to game + clr a1 + move a1,@QUICK_TIP + btst 0,a0 + jrz #normal + move a0,@QUICK_TIP + move a0,@pup_showshotper + + move a8,a8 + jrz #p1bp + CREATE0 plyr_strtb1 +#p1bp + cmpi 1,a8 + jrz #p2bp + CREATE0 plyr_strtb2 +#p2bp + cmpi 2,a8 + jrz #p3bp + CREATE0 plyr_strtb3 +#p3bp + cmpi 3,a8 + jrz #p4bp + CREATE0 plyr_strtb4 +#p4bp + + SLEEPK 1 + + movk >f,a0 + move a0,@PSTATUS + move a0,@PSTATUS2 ;Player has started bit flags + + jruc #skip_entry ;Button pressed? + +#normal + .endif + +#redo + JSRP initials_entry + move a0,a0 ;is plyr coming from CREATE PLAYER ? + jrz #ok ;br=no + jauc amode_start ;Start attract mode +;;;; jrne #redo + + .if DEBUG +#skip_entry + .endif +#ok + move @team1,a0 + move @team2,a1 + and a0,a1 + move a1,a1 + jrnn #bomb_out ;restart attract mode etc... + + jauc amode_start ;Start attract mode + +paid_t .long P1DATA+crds_paid,P2DATA+crds_paid,P3DATA+crds_paid + .long P4DATA+crds_paid + +#bomb_out + +;------------------------------- + +; clr a0 +; move a0,@played3d + +; SUBR from_3d + + clr a0 + move a0,@cntrs_delay +;DJT Start + .ref ballnumscored,balltmshotcnt,hotspot_count + move a0,@ballnumscored + move a0,@balltmshotcnt + move a0,@hotspot_count+00,L + move a0,@hotspot_count+32,L +;DJT End + + .ref start_qrtr_tune + calla start_qrtr_tune + + +;;;; JSRP scrn_scaleout +; movi zoom_snd,a0 +; calla snd_play1 +;;;; JSRP scrn_scaleininit + + calla WIPEOUT ;CLEAN SYSTEM OUT + + + SUBR demogame_start ;Demo mode entry + +; movi zoom_snd,a0 +; calla snd_play1 + + JSRP scrn_scaleininit ;Hide display + +; ** JBJ commented out on 4-13-95 +;DJT Start +;;;; .ref security_chk +;DJT End +;;;; movi security_chk->1df60,a8 + + movk 1,a0 + move a0,@dpageflip ;ON + move a0,@dtype ;3D + + calla COLRPRC ;Init fixed pal 0 + + + + movi [WRLDMID-200,0],a0 + move a0,@WORLDTLX,L + clr a0 + move a0,@WORLDTLY,L + + SLEEPK 2 + + + movk 1,a0 ;delay start of a second plyr flag + move a0,@NO_START + + movi QRTRTIME,a0 ;3 minutes, 0 secs, 0 tenths +; +; movi 10,a0 +; + move a0,@game_time,L + clr a0 + move a0,@clock_speed + +; .ref drone_alley_cnt +; move a0,@drone_alley_cnt ;3 successful drone alley oops/period + +; ** JBJ commented out on 4-13-95 +;----------- +;This is checksummed! +;seccall1 +; move a8,a1 ;>Check security +; addi >1df60,a1 +; getpc a7 +; addi >40,a7 +; move a7,-*sp,L +; jump a1 ;Rets: A0=0 if OK! +;seccall1end +; +;----------- +; ** JBJ commented out on 4-13-95 + + clr a0 + move a0,@BTIME + move a0,@idiot_bits + move a0,@HALT + move a0,@_4plyrsingame + + .ref _2plyr_competitive + move a0,@_2plyr_competitive + + movi scores,a1 + move a0,*a1+,L ;Team 1 + move a0,*a1+,L ;Team 2 + move a0,@timertcnt + move a0,@sc_proc,L +; move a0,@already_on,L ;arw on hd 0=no or proc pntr +; move a0,@already_on+32,L +; move a0,@already_on+64,L +; move a0,@already_on+96,L +; move a0,@intercept_delay +; move a0,@fire_flags + move a0,@steals_off + move a0,@pass_off + move a0,@ballprcv_p,L +;; move a0,@crowd_aniflag +;; move a0,@bench_aniflag + move a0,@name_flop + move a0,@gmqrtr + move a0,@plyr_onfire + .ref SHK_ON + move a0,@SHK_ON + move a0,@ballnumscored + move a0,@balltmshotcnt + +;; move a0,@tm1_meter_cnt +;; move a0,@tm2_meter_cnt + + movi 1 ,a0 + move a0,@name_cnt + +; move a0,@gmqrtr + + + movi -1,a0 + move a0,@winningteam + move a0,@ballpnumlast ;last player who had ball + move a0,@inbound + move a0,@cntl_team + move a0,@cntl_team_last + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + +; movk 6,a0 +; move a0,@next_call + +; .ref sounds_list ;16 * 16 bits +; movi 0ffffh,a0 +; +; movi 32,a2 +; movi sounds_list,a1 +;#slp +; move a0,*a1+ +; dsj a2,#slp + + + move @pup_court,a14 ;Outdoor court? + jrz #nootd ; br=no + movk OTD_CNT-1,a0 + calla RNDRNG0 + sll 5,a0 + addi otd_pal_objs,a0 + move *a0,a2,L + move *a2(ICMAP),a0,L + move a0,@crt_colors,L + clr a0 + clr a1 + clr a3 + movi >8000,a4 + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + jruc #crtpset +#nootd + move @team1,a0 + sll 6,a0 +;; sll 5,a0 +;; move a0,a14 +;; add a0,a0 +;; add a14,a0 + addi crt_pals,a0 + move *a0+,a14,L + move a14,@crt_colors,L +;; move *a0+,a14,L + move *a0,a14,L + move a14,@bkcrt_colors,L +;; move *a0,a14,L +;; move a14,@refcrt_colors,L + +#crtpset + +;Team 1 +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + + .ref special_heads + .ref our_names + + + callr set_names +;DJT Start +;DJT ops removed to set_names +;DJT End + + .ref setup_speech + calla setup_speech + + movk 1,a0 + move a0,@gndstat ;On + + +; jruc #skip3d +; CREATE0 _3d_test +;#skip3d + + + move @GAMSTATE,a0 + subk INAMODE,a0 + jreq #demo + + movk INGAME,a0 + move a0,@GAMSTATE + +#demo + clr a0 + move a0,@NO_START + move a0,@inmatchup + +; CREATE0 team_meters + CREATE STAT_PID,status_display + SLEEPK 1 + + + .if IMGVIEW + .ref anipts_debug + clr a8 + CREATE0 anipts_debug + movk 3,a8 + CREATE0 anipts_debug + .endif + + calla game_initobjs + + .if CRTALGN + .ref gnd_aligndots + CREATE0 gnd_aligndots + .endif + + CREATE0 ball_main +;DJT Start + .ref plyr_showhotspots + CREATE0 plyr_showhotspots +;DJT End + CREATE gclockid,clock_strt ;start clock + CREATE0 bracket_drw + +; .ref plyr_camflash +; CREATE0 plyr_camflash1 + + CREATE0 close + + calla clear_player_stats + +;TEMP!!! + .if DEBUG + .ref sound_watchdog + CREATE0 sound_watchdog + .endif + + .ref name_call + CREATE0 name_call + + calla start_crowd_noise +; CREATE0 scream_snd + CREATE0 check_idiot + + .ref doflshs + CREATE0 doflshs + + MOVI [62,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR + MOVI scorep,A9 ;PAL NAME + MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH + MOVK 3,A11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + callr start_arws + +; move @SWITCH,a0 +; andi >7072,a0 +; jrnz #no3d +; +; move @GAMSTATE,a0 +; subk INAMODE,a0 +; jreq #no3d +; +; move @played3d,a0 +; jrnz #no3d +; +; movk 1,a0 +; move a0,@played3d +; jauc _3d_test +;#no3d + + +; movk 1,a0 +; move a0,@gmqrtr +; move a0,@game_time,L + + jauc plyr_start + + SUBR join_cyc + .ref COLTAB + movi [1,1],A8 ;START AT COLOR 1, CYCLE 1 COLOR + movi JOININ_P,A9 + movi COLTAB,A10 ;TABLE TO CYCLE WITH + movk 3,A11 ;RATE OF CYCLE IN TICKS + CREATE JOIN_CYCLE_PID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + rets + +;DJT Start +#maxstr_setup + .ref brush50_ascii,BRSH50R_P + PRINT_STR brush50_ascii,24,0,200,100,BRSH50R_P,0 +#maxstr + .string "MAXIMUM!",0 + .even + +;DJT End +;-------------------- + +COLTAB_RNBW + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H +;NEED A DUPLICATE SET + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +;-------------------- +; Team court palettes + +otd_pal_objs + .long outdr1,outdr2,outdr3,outdr4,outdr5,outdr6 + .long outdr7,outdr8,outdr9,outdr10,outdr11,outdr12 +OTD_CNT .equ ($-otd_pal_objs)/32 + +crt_pals + .long CRT_ATL_p,BK_ATL_P,CRT_BOS_p,BK_BOS_P + .long CRT_CHA_p,BK_CHA_P,CRT_CHI_p,BK_CHI_P + .long CRT_CLE_p,BK_CLE_P,CRT_DAL_p,BK_DAL_P + .long CRT_DEN_p,BK_DEN_P,CRT_DET_p,BK_DET_P + .long CRT_GLD_p,BK_GLD_P,CRT_HOU_p,BK_HOU_P + .long CRT_IND_p,BK_IND_P,CRT_LAC_p,BK_LAC_P + .long CRT_LAL_p,BK_LAL_P,CRT_MIA_p,BK_MIA_P + .long CRT_MIL_p,BK_MIL_P,CRT_MIN_p,BK_MIN_P + .long CRT_NEJ_p,BK_NEJ_P,CRT_NEY_p,BK_NEY_P + .long CRT_ORL_p,BK_ORL_P,CRT_PHI_p,BK_PHI_P + .long CRT_PHO_p,BK_PHO_P,CRT_POR_p,BK_POR_P + .long CRT_SAC_p,BK_SAC_P,CRT_SAN_p,BK_SAN_P + .long CRT_SEA_p,BK_SEA_P,CRT_TOR_p,BK_TOR_P + .long CRT_UTA_p,BK_UTA_P,CRT_VAN_p,BK_VAN_P + .long CRT_WAS_p,BK_WAS_P + +;crt_pals +; .long CRT_ATL_P,BK_ATL_P,REF_DET_P,CRT_BOS_P,BK_BOS_P,REF_DET_P +; .long CRT_CHA_P,BK_CHA_P,REF_DET_P,CRT_CHI_P,BK_CHI_P,REF_DET_P +; .long CRT_CLE_P,BK_CLE_P,REF_DET_P,CRT_DAL_P,BK_DAL_P,REF_DET_P +; .long CRT_DEN_P,BK_DEN_P,REF_DET_P,CRT_DET_P,BK_DET_P,REF_DET_P +; .long CRT_GLD_P,BK_GLD_P,REF_DET_P,CRT_HOU_P,BK_HOU_P,REF_DET_P +; .long CRT_IND_P,BK_IND_P,REF_DET_P,CRT_LAC_P,BK_LAC_P,REF_DET_P +; .long CRT_LAL_P,BK_LAL_P,REF_LAL_P,CRT_MIA_P,BK_MIA_P,REF_DET_P +; .long CRT_MIL_P,BK_MIL_P,REF_DET_P,CRT_MIN_P,BK_MIN_P,REF_DET_P +; .long CRT_NEJ_P,BK_NEJ_P,REF_DET_P,CRT_NEY_P,BK_NEY_P,REF_DET_P +; .long CRT_ORL_P,BK_ORL_P,REF_DET_P,CRT_PHI_P,BK_PHI_P,REF_DET_P +; .long CRT_PHO_P,BK_PHO_P,REF_DET_P,CRT_POR_P,BK_POR_P,REF_DET_P +; .long CRT_SAC_P,BK_SAC_P,REF_DET_P,CRT_SAN_P,BK_SAN_P,REF_DET_P +; .long CRT_SEA_P,BK_SEA_P,REF_DET_P,CRT_TOR_P,BK_TOR_P,REF_DET_P +; .long CRT_UTA_P,BK_UTA_P,REF_DET_P,CRT_VAN_P,BK_VAN_P,REF_DET_P +; .long CRT_WAS_P,BK_WAS_P,REF_DET_P + + .def crt_pals_z +crt_pals_z + .long CRT_ATL_p+32,CRT_BOS_p+32,CRT_CHA_p+32,CRT_CHI_p+32 + .long CRT_CLE_p+32,CRT_DAL_p+32,CRT_DEN_p+32,CRT_DET_p+32 + .long CRT_GLD_p+32,CRT_HOU_p+32,CRT_IND_p+32,CRT_LAC_p+32 + .long CRT_LAL_p+32,CRT_MIA_p+32,CRT_MIL_p+32,CRT_MIN_p+32 + .long CRT_NEJ_p+32,CRT_NEY_p+32,CRT_ORL_p+32,CRT_PHI_p+32 + .long CRT_PHO_p+32,CRT_POR_p+32,CRT_SAC_p+32,CRT_SAN_p+32 + .long CRT_SEA_p+32,CRT_TOR_p+32,CRT_UTA_p+32,CRT_VAN_p+32 + .long CRT_WAS_p+32 + + +;-------------------- +; + + SUBR start_arws + +; movi ARWPID,a0 +; calla KIL1C +; movi arwid,a0 +; calla obj_del1c +; movi ARWPID,a0 +; calla obj_del1c + + movi ARWPID,a1 ;>Do init stuff for humans + movi plyr_lost,a7,L + + movk 3,a10 ;Pass plyr # + calla GETPRC + movk 2,a10 + calla GETPRC + movk 1,a10 + calla GETPRC + clr a10 + calla GETPRC + + .ref stick_numbers + movi stick_numbers,a7,L + + clr a11 + movi P1DATA,a10 ;Pass *PnDATA + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .ref stick_cpu + movi stick_cpu,a7,L + + clr a11 + movi P1DATA,a10 + calla GETPRC + movk 1,a11 + movi P2DATA,a10 + calla GETPRC + movk 2,a11 + movi P3DATA,a10 + calla GETPRC + movk 3,a11 + movi P4DATA,a10 + calla GETPRC + + .if DRONES_2MORE + movk 4,a11 + movi P5DATA,a10 + calla GETPRC + movk 5,a11 + movi P6DATA,a10 + calla GETPRC + .endif + +; CREATE0 delay_sparks + rets + + +;delay_sparks +; .ref stick_spark +; .ref stick_spark2 +; SLEEPK 10 +; move @plyrproc_t,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck2 +;; cmpi EB_H,a0 +;; jrz #doit1 +;; cmpi JTO_H,a0 +;; jrnz #ck2 +; +;; move @special_heads,a0 +;; cmpi 32,a0 +;; jrnz #ck2 +; +;#doit1 clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark +; clr a11 +; movi P1DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck2 +; move @plyrproc_t+32,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck3 +;; cmpi EB_H,a0 +;; jrz #doit2 +;; cmpi JTO_H,a0 +;; jrnz #ck3 +; +;; move @special_heads+10h,a0 +;; cmpi 32,a0 +;; jrnz #ck3 +; +;#doit2 movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark +; movk 1,a11 +; movi P2DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck3 +; move @plyrproc_t+64,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck4 +;; cmpi EB_H,a0 +;; jrz #doit3 +;; cmpi JTO_H,a0 +;; jrnz #ck4 +; +;; move @special_heads+20h,a0 +;; cmpi 32,a0 +;; jrnz #ck4 +; +;#doit3 movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark +; movk 2,a11 +; movi P3DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck4 +; move @plyrproc_t+96,a0,L +; move *a0(plyr_attrib_p),a0,L +; move *a0(PAT_HEADT_p),a0,L +; cmpi RA_H,a0 +; jrnz #ck5 +;; cmpi EB_H,a0 +;; jrz #doit4 +;; cmpi JTO_H,a0 +;; jrnz #ck5 +; +;; move @special_heads+30h,a0 +;; cmpi 32,a0 +;; jrnz #ck5 +; +;#doit4 movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark +; movk 3,a11 +; movi P4DATA,a10 +; CREATE ARWPID,stick_spark2 +;#ck5 +; DIE + +#******************************* +* Tell idiots to use turbo for running if they aren't (Process) + +check_idiot + + movi 60,a10 + +#c1 SLEEP TSEC + move @HALT,a0 + jrnz #c1 + + dsj a10,#c1 + + movi 30,a2 + + move @P1DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck2 + clr a1 + callr try_ib +#ck2 + move @P2DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck3 + movk 1,a1 + callr try_ib +#ck3 + move @P3DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ck4 + movk 2,a1 + callr try_ib +#ck4 + move @P4DATA+ply_idiot_use,a0 + cmp a2,a0 + jrgt #ckx + movk 3,a1 + callr try_ib + +#ckx SLEEP 6*60 + +; movi organ1_snd,a0 +; move @HCOUNT,a1 +; btst 1,a1 +; jrnz #ckk +; movi organ2_snd,a0 +;#ckk +; calla snd_play1 + + DIE + + +try_ib + movk 7,a0 ;Use turbo to run + jauc idiot_box + + +******************************** + +close + SLEEPK 8 +; .ref tune2_snd +; SOUND1 tune2_snd + +; movi zoom_snd,a0 +; calla snd_play1 + +;;;; JSRP scrn_scalein + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + +; movi 2<<10+4<<5+9,a0 + + clr a0 + move a0,@IRQSKYE + + + movk 1,a0 + move a0,@HALT ;stop movement until instructions are done + + + .if DEBUG + move @CLOCK_OFF,a0 + jrnz #skip_inst + move @QUICK_TIP,a14 + jrnz #skip_inst + .endif + .ref instructions + JSRP instructions ;TAKE OUT to skip instructions! +#skip_inst + + clr a0 + move a0,@HALT ;start movement + move a0,@cntrs_delay + +;DJT Start + .ref t1ispro,t2ispro + move @t1ispro,a14 + jrnn #smkn + move @t2ispro,a14 + jrn #notsmkn +#smkn + .ref do_smkn + CREATE0 do_smkn +;; .ref thr_smkn_sp +;; SOUND1 thr_smkn_sp + jruc #smksmk +#notsmkn + SLEEP 35 + SOUND1 heres_tip_sp +#smksmk +;DJT End + +; SLEEP 120 + +; .ref winning_msg +; CREATE0 winning_msg + + DIE + + +;#********************************** +;* Create and init team meters objs. +; +; SUBRP team_meters +; +; movi #tm_mtr_init_tbl,a9,L +; +;;team 1 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9+,a2,L ;image ;Y +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move a8,@tm1_meter_obj,L ;keep *obj +; +;;team 2 team meter +; move *a9+,a0 ;X +; move *a9+,a1 ;Y +; sll 16,a0 +; sll 16,a1 +; move *a9+,a3 ;Z +; move *a9,a2,L ;image ;Y +; calla BEGINOBJ2 +; move a8,@tm2_meter_obj,L ;keep *obj +; DIE +; +; +; .asg 25,TM_METR_Y +;; .asg 27,TM_METR_Y +; .asg 300,TM_METR_Z +; +;#tm_mtr_init_tbl +; .word 54,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01b +; .word 280,TM_METR_Y,TM_METR_Z ;x,y +; .long TEAMZN_01r +; +; +;#*************************************** +;* Update count and image for team +;* +;* INPUT: a1 - player number +;* a14 - amount to add to meter +;* +; SUBR update_team_meter +; +; PUSH a1 +; +; srl 1,a1 +; jrnz #tm2 +; +; move @tm1_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok1 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok1 move a1,@tm1_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr +; move @tm1_meter_obj,a1,L ;get CURRENT img ptr +; jruc #chng +;#tm2 +; move @tm2_meter_cnt,a1 +; add a14,a1 +; cmpi NUM_MTR_IMGS,a1 ;value in range ? +; jrlo #ok2 ;br=yes +; movi NUM_MTR_IMGS-1,a1 ;set to max +;#ok2 move a1,@tm2_meter_cnt +; sll 5,a1 +; addi tm_meter_img_tbl,a1 +; move *a1,a14,L ;get NEW img ptr. +; move @tm2_meter_obj,a1,L ;get CURRENT img ptr. +;#chng +;; move a14,*a1(OIMG),L ;update image +;; move *a14(0),*a1(OSIZE),L +; move *a14(0),*a1(OSAG),L +; +; PULL a1 +; rets +; +; +;tm_meter_img_tbl +; .long TEAMZN01 +; .long TEAMZN02 +; .long TEAMZN03 +; .long TEAMZN04 +; .long TEAMZN05 +; .long TEAMZN06 +; .long TEAMZN07 +; .long TEAMZN08 +; .long TEAMZN09 +; .long TEAMZN10 +; .long TEAMZN11 +; .long TEAMZN12 +; .long TEAMZN13 +; .long TEAMZN14 +; .long TEAMZN15 +; .long TEAMZN16 +; .long TEAMZN17 +; .long TEAMZN18 +; .long TEAMZN19 +; .long TEAMZN20 +; .long TEAMZN21 +; .long TEAMZN22 +; .long TEAMZN23 +; .long TEAMZN24 +; .long TEAMZN25 +; .long TEAMZN26 +; .long TEAMZN27 +; .long TEAMZN28 +; .long TEAMZN29 +; .long TEAMZN30 +;tm_meter_img_tbl_end +; +;NUM_MTR_IMGS equ (tm_meter_img_tbl_end-tm_meter_img_tbl)/32 + + +#******************************* +* Display player and game status info (Process) +;DJT Start + + .ref col_name_ptrs +;DJT End + + SUBRP status_display + + clr a0 + move a0,@P1DATA+ply_messages,L ;Zero plyr message img ptr + move a0,@P2DATA+ply_messages,L + move a0,@P3DATA+ply_messages,L + move a0,@P4DATA+ply_messages,L + move a0,@P1DATA+ply_idiot_use + move a0,@P2DATA+ply_idiot_use + move a0,@P3DATA+ply_idiot_use + move a0,@P4DATA+ply_idiot_use + + movi #init_t,a11 ;>Setup status images + movi crplate_ptr,a9,L + callr prt_status + +; movi msg_ram,a9 +; move @msg_ram,a0,L +; callr prt_status +; move a0,@crplate_ptr,L + +;-------------------- +; Setup plyr 1 name/turbo/coin objs + + movi init_t1,a11 + movi P1DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 0,a0 ;Is plyr 1 in? Yes if !0 + jrnz #tag1 + movi init_t1a,a11 ;No. Setup "insert coin" + movi P1DATA+ply_messages,a9 + callr prt_status + move @P1DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P1DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag1 + movi P1DATA,a11 + calla refill_turbo + +;DJT Start + clr a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 2 name/turbo/coin objs + + movi init_t2,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit2 + movi init_t2kit,a11 +#2kit2 movi P2DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 1,a0 ;Is plyr 2 in? Yes if !0 + jrnz #tag2 + movi init_t2a,a11 ;No. Setup "insert coin" + movi P2DATA+ply_messages,a9 + callr prt_status + move @P2DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P2DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag2 + movi P2DATA,a11 + calla refill_turbo + +;DJT Start + movk 1,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 3 name/turbo/coin objs + + movi init_t3,a11 + move @TWOPLAYERS,a14 ;Two plyr kit? No if 0 + jrz #2kit3 + movi init_t3kit,a11 +#2kit3 movi P3DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 2,a0 ;Is plyr 3 in? Yes if !0 + jrnz #tag3 + movi init_t3a,a11 ;No. Setup "insert coin" + movi P3DATA+ply_messages,a9 + callr prt_status + move @P3DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P3DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag3 + movi P3DATA,a11 + calla refill_turbo + +;DJT Start + movk 2,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; Setup plyr 4 name/turbo/coin objs + + movi init_t4,a11 + movi P4DATA+ply_meter_imgs,a9 + callr prt_status + move @PSTATUS,a0 + btst 3,a0 ;Is plyr 4 in? Yes if !0 + jrnz #tag4 + movi init_t4a,a11 ;No. Setup "insert coin" + movi P4DATA+ply_messages,a9 + callr prt_status + move @P4DATA+ply_meter_imgs,a0,L ;Turn off time/turbo objs + calla OBJOFF + move @P4DATA+ply_meter_imgs+32,a0,L + calla OBJOFF +#tag4 + movi P4DATA,a11 + calla refill_turbo + +;DJT Start + movk 3,a0 + callr plyrname_fix +;DJT End + +;-------------------- +; + + calla prt_top_scores ;Update scores at scrn top +;;;;;;; calla prt_cr_timers <- Did nothing! + +; ** JBJ commented out on 4-13-95 +; movi seccall1+>3df2,a0 ;>Chksum security call code +; movk (seccall1end-seccall1)/16,b0 +; movi ->259e0d-2,a8 ;1st value +;#csumlp move *a0(->3df2),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csumlp +; ;>Chksum security_chk code +; movi security_chk+>4bbb,a0 +; movi 68+128*2,b0 ;#Words +;#csmlp move *a0(->4bbb),a1 +; add a1,a8 +; addk 16,a0 +; dsj b0,#csmlp +;; ** JBJ commented out on 4-13-95 + + SLEEPK 5 + calla update_scorebrd + +; ** DJT - no need to do these net_ani's +; clr a0 +; movk 4,a1 +; callr net_ani ;Ani both nets to fix alignment +; movk 1,a0 +; movk 4,a1 +; callr net_ani + +; ** JBJ commented out on 4-13-95 +;;;; CREATE0 security_trashstuff ;Pass A8 + + calla initcrowd_ani + DIE + +;DJT Start +;-------------------- +; A0=player # (0-3) +;Destroys A1-A4,A14 + + SUBR plyrname_fix + + sll 5,a0 + + movi #pnfix_t,a1,L + add a0,a1 + move *a1,a1,L ;Get *(name *obj) + move *a1,a1,L ;Get name *obj + move *a1(OFLAGS),a2 + andni M_CHARGEN+M_PIXSCAN,a2 ;Clear chargen flags + + .ref plyr_data_tbl + movi plyr_data_tbl,a3,L + add a0,a3 + move *a3,a3,L ;Get *playerN_data + + move *a3(PR_CREATED_PLYR),a14 ;Is this a created plyr? + subk 1,a14 + jrz #tag1cp + + movi names,a3,L + add a0,a3 + move *a3,a14,L ;College player? + jrn #tag1a ; br=no + move *a3(32*NUMPLYRS),a3,L ;Get college *name + addi M_CHARGEN+M_PIXSCAN,a2,W ;Set char_gen flags + jruc #tag1b +#tag1cp + addi PR_NAME1,a3,W ;Yes. Chk validity of name + move *a3,a14 + jrle #tag1a ;Assume no name if first=0 + movk NAME_LETTERS,a4 +#tag1lp + move *a3+,a14 + cmpi END_CHAR,a14,W ;In range? No if > + jrhi #tag1a + dsj a4,#tag1lp + subi NAME_LETTERS*16,a3,W ;Reset ptr + addi M_CHARGEN,a2,W ;Set char_gen flags +#tag1b + move a3,*a1(ODATA_p),L ;Save char_gen *name + clr a14 + move a14,*a1(OMISC) ;Clr so char_gen calcs new X +#tag1a + move a2,*a1(OFLAGS) + + srl 5,a0 + rets + +#pnfix_t + .long P1DATA+ply_meter_imgs + .long P2DATA+ply_meter_imgs + .long P3DATA+ply_meter_imgs + .long P4DATA+ply_meter_imgs + +;DJT End + +******************************** +* Create game status objs +* A11=obj init table ptr +* A9=ptr to sequentially store created *obj to +* Destroys A0-A8, *A9(-32)=last created *obj + +#lp + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L ;OIMG + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9+,L ;keep *obj + + SUBR prt_status + + move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + rets + + +;---------- +; + +#x1 .equ 14 +#x2 .equ 240 +#y .equ 18 +#z .equ 300 + +#init_t + .word SCOREBRD_X,SCOREBRD_Y,SCOREBRD_Z + .long QUARTR01 +; .word #x1+40,#y+9,#z +; .long TURBO_01b +; .word #x2+40,#y+9,#z +; .long TURBO_01r + .word 4000 + +init_t1 + .word #x1+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1,#y,#z + .long TURBO_01b + .word 4000 +init_t1a ;not in game, insert coin + .word #x1+32,#y-10,#z + .long insert + .word 4000 + +init_t2 + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01g + .word 4000 +init_t2kit + .word #x1+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x1+80,#y,#z + .long TURBO_01b + .word 4000 +init_t2a ;not in game, insert coin + .word #x1+80+32,#y-10,#z + .long insert + .word 4000 + +init_t3 + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01y + .word 4000 +init_t3kit + .word #x2+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2,#y,#z + .long TURBO_01r + .word 4000 +init_t3a ;not in game, insert coin + .word #x2+32,#y-10,#z + .long insert + .word 4000 + +init_t4 + .word #x2+80+32,#y-10,#z + .long insert ;LED_00 ;timebox + .word #x2+80,#y,#z + .long TURBO_01r + .word 4000 +init_t4a ;not in game, insert coin + .word #x2+80+32,#y-10,#z + .long insert + .word 4000 + + +******************************** + +COLRPRC + movi COLRPID,a0 + calla KIL1C ;KILL ALL COLOR UPDATE PROCESSES + clr a0 + move a0,@PALFRAM,L + movi scorep,a0 ;Score area palette + jauc pal_getf + + + + +#******************************* +* Trash free object list because security failed (Process) +* A8=Security status (-2=OK!) + + SUBRP security_trashstuff + +; addk 2,a8 +; jrz #x ;OK? +; movi TSEC*60*5+1,a0 +; calla RNDRNG0 +; addi TSEC*60*4-3,a0 +; calla PRCSLP ;Sleep 5-9 minutes +; movi OFREE,a1 +; movk 10,a2 +;#lp move *a1,a1,L +; dsj a2,#lp +; move a0,*a1,L ;Trash 10th free objs *next (-1) +; +#x DIE + + + +******************************* + + +;wbmcolor_t +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +;;need a duplicate set +; .word 0380h,1380h,2380h,3380h,4380h,5380h,6380h,7380h,7300h +; .word 7280h,7200h,7180h,7080h,7008h,7008h,7010h,7010h,701ch +; .word 701ch,601ch,501ch,409ch,309ch,209ch,219ch,029ch,039ch +; .word 139ch,239ch,339ch,539ch,739ch,7390h,7380h,6380h,4380h +; .word -1 + + +******************************** + +;aud_plyrbeg +; +; movk AUDBEGIN,a0 +; calla AUD1 +; move @PSTATUS,a0 +; subk 3,a0 +;; jrne apbx +; +; MOVE @GAMSTATE,A0 +; subk ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP +;; JRZ apbx +; +; movk AUD1STRT,a0 ;Mid game start +; movi -1,a1 +; jauc AUD + + +******************************** + + SUBR WNDWON + + PUSHP a8 + movk 1,a8 + MOVE A8,@WFLG + MOVI [254,400],A8 + MOVI SCRNMID,A10 + JSRP OWINDOW + MOVE A8,@OBJPTR,L + PULLP a8 + RETP + + + SUBR WNDWOFF + + PUSHP a8 + MOVE @OBJPTR,A8,L + JSRP CWINDOW + CLR A0 + MOVE A0,@WFLG + PULLP a8 + RETP + + + +******************************** +* Open a text window on the object list (JSRP) +* A8 =Window size +* A10=Center point of window (screen relative) +* +* >A8 = *Window object or 0 (Z) +* Trashes A9-A11 + +OWINDOW + move a8,a11 + + move a10,a0 + sll 16,a0 + clr a1 + movy a10,a1 + movi FONT7A,a2 + movi 20001,a3 ;Z + movi DMACAL,a4 + movi CLSNEUT|TYPTEXT|SUBWNDW,a5 + clr a6 + clr a7 + calla BEGINOBJ + + move *a8(OXPOS),a10 + move *a8(OYVAL),a0,L + movy a0,a10 ;Get new world coords + move a10,a0 + + srl 1,a11 ;XY/2 + andi >7fff7fff,a11 + + subxy a11,a10 + addxy a0,a11 + + move @WSPEED,a0 ;Window speed + JSRP OBJEXP32 + + movi OWSPD,a0 + move a0,@WSPEED + + RETP + + +******************************** +* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. +* A8 = PTR TO WINDOW OBJECT +* RETURNS: +* WITH WINDOW OBJECT DELETED +* NOTE: CALL WITH JSRP +* TRASHES A9,A10 & A11 + +CWINDOW + MOVE *A8(OXPOS),A10 + MOVE *A8(OYVAL),A11,L + MOVY A11,A10 + MOVE *A8(OSIZE),A11,L + MOVY A11,A1 + SRL 17,A1 + SLL 16,A1 + SLL 16,A11 + SRL 17,A11 + MOVY A1,A11 + ADDXY A11,A10 + MOVE A10,A11 ;CALCULATED CENTER OF OBJECT + MOVI CWSPD,A0 ;WINDOW SPEED + JSRP OBJEXP32 + CALLA DELOBJA8 + RETP + +DELWNDW + MOVE @OBJPTR,A0,L + MOVE A0,A8 + jauc DELOBJ + + +******************************** +* SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE +* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. +* A0 =# OF TICKS +* A8 =*Obj +* A10=NEW OBJTL +* A11=NEW OBJLR +* Trashes A9 + +OBJEXP32 + sll 32-8,a0 ;0-255 + srl 32-8,a0 + ori 1,a0 + + MOVE *A8(OXPOS),A1 + MOVE *A8(OYVAL),A14,L + MOVX A1,A14 ;A14 = OBJECT UL + + SLL 16,A1 + CLR A2 + MOVY A14,A2 + SUBXY A10,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A6 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A7 + + MOVE *A8(OXPOS),A3 + MOVE *A8(OYVAL),A14,L + MOVX A3,A14 + MOVE *A8(OSIZE),A3,L + ADDXY A3,A14 ;A14 = OBJECT LR + + PUSH A8 + MOVX A14,A3 + SLL 16,A3 + CLR A4 + MOVY A14,A4 + SUBXY A11,A14 + MOVX A14,A5 + SLL 16,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A8 + CLR A5 + MOVY A14,A5 + DIVS A0,A5 + NEG A5 + MOVE A5,A9 + MOVE A0,A5 + PULL A14 +OBJTIMLP + ADD A6,A1 ;ADD THE TLX INCREMENT + ADD A7,A2 ;ADD THE TLY INCREMENT + ADD A8,A3 ;ADD THE LRX INCREMENT + ADD A9,A4 ;ADD THE LRY INCREMENT + MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14 + MOVE A1,*A14(OXVAL),L + MOVE A2,*A14(OYVAL),L + SUB A1,A3 + SUB A2,A4 ;GET A SIZE FOR THE WINDOW + SRL 16,A3 + MOVY A4,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L + SLEEPK 1 + MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14 + DSJS A5,OBJTIMLP + + MOVE A10,*A14(OXPOS) + MOVY A10,A1 + SRL 16,A1 + MOVE A1,*A14(OYPOS) + MOVE A11,A9 + SUBXY A10,A11 + MOVE A11,A3 + callr fixa3xy + MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED + MOVE A9,A11 ;PRESERVE FOR YUKS + MOVE A14,A8 + RETP + + +******************************** +* Keep window XY size valid +* A3=Y:X + +fixa3xy + move a3,a3 + jrgt #yok + movk 1,a0 + sll 16,a0 + movy a0,a3 +#yok + movx a3,a0 + sext a0 + jrgt #xok + movk 1,a0 + movx a0,a3 +#xok + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +******************************** +* Set player name text + + SUBR set_names + +;DJT Start + movi player_names,a10 + move @team1,a2 + jrz #out +#lp + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads,a14 ;Do plyr 1 + jrn #not_spec1 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec1 + move a1,@names,L + move a1,a1 ;College player? + jrn #notcol1 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol1 + move a1,@original_names,L + + move @special_heads+16,a14 ;Do plyr 2 + jrn #not_spec2 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec2 + move a2,@names+32,L + move a2,a2 ;College player? + jrn #notcol2 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol2 + move a2,@original_names+32,L +; +;Team 2 +; + movi player_names,a10 + move @team2,a2 + jrz #out2 +#lp2 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp2 +#out2 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + move *a10,a1,L ;Name *img + move *a10(32),a2,L ;Name *img + + move @special_heads+32,a14 ;Do plyr 3 + jrn #not_spec3 + sll 5,a14 + addi our_names,a14 + move *a14,a1,L +#not_spec3 + move a1,@names+64,L + move a1,a1 ;College player? + jrn #notcol3 ; br=no + sll 5,a1 ;Get college name *string + addi col_name_ptrs,a1,L + move *a1,a1,L +#notcol3 + move a1,@original_names+64,L + + move @special_heads+48,a14 ;Do plyr 4 + jrn #not_spec4 + sll 5,a14 + addi our_names,a14 + move *a14,a2,L +#not_spec4 + move a2,@names+96,L + move a2,a2 ;College player? + jrn #notcol4 ; br=no + sll 5,a2 ;Get college name *string + addi col_name_ptrs,a2,L + move *a2,a2,L +#notcol4 + move a2,@original_names+96,L + + rets +;DJT End + + +**************************************************************** +* Temp routines + + .if DEBUG + + SUBR show_plyr_pal +;;Show player #0 pal to verify pal build +; +; SLEEPK 10 +; +; movi [200,0],a0 +; movi [50,0],a1 +; movi 20000,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; .ref pal_block +; movi pal_block,a2 +; movi CLSDEAD,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; move @plyrobj_t,a0,L +; move *a0(OPAL),a0 +; move a0,*a8(OPAL) +; + DIE + + .ref dirqtimer + + BSSX CPUAVG ,16 + BSSX CPULEFT ,16 + + + SUBRP cputime_calcfree + + move @dirqtimer,a0 + subk 1,a0 + jrle nobog + clr a0 + jruc gottime +nobog + move @vcount,a0 + subi EOSINT,a0 + jrnn skinccnt + addi 256,a0 +skinccnt + sll 2,a0 + neg a0 + addi 1024,a0 +gottime + move a0,@CPULEFT + + srl 4,a0 + move @CPUAVG,a1 + move a1,a2 + srl 4,a2 ;/16 + sub a2,a1 + add a0,a1 + move a1,@CPUAVG + + rets + + .endif + + +***************************************************************************** + + .if DEBUG + + SUBRP testcode + + +#******************************* +* DMA window test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350+56,50+56],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + movi [100,100+56],a8 ;Y:X + movi [100,200],a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + + movi 20000,b2 +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + +#xok addk 1,a4 ;Color+1 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + dsj b2,#lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* DMA 1x1 test (DEBUG) + + .if 0 ;Totally commented out! + + dint + + clr a0 + move a0,@DMACTRL + move a0,@DMACTRL + + clr a1 ;>Clr screen mem + movi >200000/32,b0 +#clrscr move a0,*a1+,L + dsj b0,#clrscr + + clr a0 + move a0,@DMATEST + + movi 0,a0 + move a0,@DMAOFFST + + movk >10,a1 + move a1,@DMACONF + movi [350,50],a1 ;L/R + movi [399,0],a1 ;L/R + move a1,@DMAWINDOW,L + + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [200,50],a1 + movi [253,0],a1 + move a1,@DMAWINDOW,L + + + movi [>100,>100],a3 ;Y:X scale + clr a4 + clr a8 ;Y:X + movi >10001,a7 ;V:H size + movi >2000000,a10 ;SAG + movi >900c0000,a11 ;CTRL:OFSET + +#lp rl 16,a4 + + movi DMAREGS,a14 + +#dwt move @DMACTRL,a0 + jrn #dwt + + mmtm a14,a3,a4,a7,a8,a10,a11 + + rl 16,a4 + + addk 1,a8 + btst 9,a8 + jrz #xok + addi >10000,a8 ;+1 Y + btst 8+16,a8 + jrz #yok + addk 4,a4 +#yok andi >ff01ff,a8 + +#xok addk 1,a4 + andi >ff,a4 + move a4,a0 + sll 8,a0 + or a0,a4 + + addk 1,a10 ;SAG+1 + + jruc #lp + + eint + + .endif ;End of totally commented out! + +#******************************* +* Instruction speed test (DEBUG) + + .if 0 ;Totally commented out! + + dint + movi >2c,a0 ;Enable cache + movi >802c,a0 ;Disable cache + move a0,@CONTROL + movi >f010,a0 + move a0,@DPYCTL + move @HSTCTLH,a0 + andi >bfff,a0 + move a0,@HSTCTLH + + +; setf 32,1,1 ;Field1 = Long word sign (slow!) + movi CPULEFT,a1 + +; movi 50000000/(37+6),a0 +;#lpsf move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move *a1,a14,L ;5,8 +; move @CPUAVG,a14,L ;7,16 +; move @CPUAVG,a14,L ;7,16 +; dsj a0,#lpsf ;3,9 + + +#nxt + movi VCOUNT,a7 + clr a6 + movi SCRATCH,a2 + +#lp move *a7,a0 + jrnz #lp +#lp2 move *a7,a0 + jrz #lp2 + +#lp3 +; calla #1 +; nop +; nop +; nop +; nop +;#1 PULL a0 +; movi #2,a0 +; jauc #2 +; nop +; nop +; nop +; nop +;#2 +; movi 100,a0 +; nop +; movi >11111111,a0 +; move @SCRATCH,a0 +; move *a2(0),*a2(0) +; move *a2,a0 +; move a0,*a2(0) +; movi SCRATCH,a1 +; move *a1,a0,L +; move *a1,a0,L +; move a0,*a1,L +; move a0,*a1,L +; move a0,@SCRATCH,L +; move a0,@SCRATCH,L +; move @SCRATCH,a0,L +; move @SCRATCH,a0,L + movi SCRATCH+>1000,a0 + movi SCRATCH+>1000,a1 +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L +; move -*a0,-*a1,L + mmfm a0,a1,a2,a3,a4,a5,a14 + mmtm a0,a1,a2,a3,a4,a5,a14 + + addk 1,a6 ;1,4 + move *a7,a0 ;3,6 + jrnz #lp3 ;2,5 + + movi 16*50000000/8/62,a1 + divu a6,a1 + addk 18,a1 ;+Fudge + subi 15*16,a1 ;-Overhead cycles + move a1,a0 ;Round off + addk 8,a0 + srl 4,a0 + + trap 29 + jruc #nxt + + movi COLRAM,a8 +#lp5 move *a7,a0 +#lp6 move *a7,a1 + cmp a1,a0 + jreq #lp6 + + movi 90,a2 + movk 5,a0 +#lp8 move a0,*a8 ;1+(1),5 + addk 2,a0 ;1,4 + dsj a2,#lp8 ;2,5 + jruc #lp5 + + eint + + .endif ;End of totally commented out! + + rets + + .endif ;DEBUG + +***************************************************************************** + + .end diff --git a/SRC/BB.CMD b/SRC/BB.CMD new file mode 100644 index 0000000..37aefb1 --- /dev/null +++ b/SRC/BB.CMD @@ -0,0 +1,95 @@ +/* Game linker command file */ +/*-e WARMSET*/ /* entry point of program */ +-e init_prog /* entry point of program */ +-f 0xFFFF /* fill unspecified memory with value */ +-o c:\video\bball\BB.out /* specify output file */ +-m c:\video\bball\BB.map /* map file */ +-s /* kill the symbol table */ + +NDSP1.OBJ /* GSP display processor */ +MAIN.OBJ /* initialization and interrupts */ +UTIL.OBJ /* utility subroutines */ +PAL.OBJ /* palette allocator and fader control */ +MPROC.OBJ /* GSP multi-processing system */ +BAKGND.OBJ /* background handlers */ +BGNDTBL.OBJ /* BACKGROUND TABLES */ +BGNDPAL.OBJ /* BACKGROUND PALETTES */ +IMGTBL.OBJ /* IMAGE STUB */ +IMGPAL.OBJ /* IMAGE PALETTES GENERATED BY LOADIMG */ +BB.OBJ /* Basketball game program */ +BB2.OBJ /* Basketball game program */ +BB3.OBJ /* Basketball game program */ +BB4.OBJ /* Basketball game program */ +DRONE.OBJ /* basketball drone code */ +PLYR.OBJ /* basketball player code */ +PLYR2.OBJ /* basketball player code */ +PLYR3.OBJ /* basketball player code */ +PLYRAT.OBJ /* basketball player code */ +PLYRAT2.OBJ /* basketball player code */ +PLYRSEQ.OBJ /* basketball plyr sequence code */ +PLYRRSEQ.OBJ /* basketball plyr sequence code */ +PLYRSEQ2.OBJ /* basketball plyr sequence code */ +PLYRDSEQ.OBJ /* basketball plyr dunk sequence code */ +PLYRDSQ2.OBJ /* basketball plyr dunk sequence code */ +PLYRLSEQ.OBJ /* basketball plyr sequence code */ +PLYRSTND.OBJ /* basketball plyr sequence code */ +SCORE.OBJ /* score stuff */ +SCORE2.OBJ /* score stuff */ +SOUNDS.OBJ /* sound processor */ +PATCH.OBJ /* TV PATCH/BREAKPOINT HOOK */ +TEXT.OBJ /* font tables */ +ATTRACT.OBJ /* attract mode */ +STRING.OBJ /* string printing stuff */ +RECORD.OBJ /* CMOS records etc */ +SPEECH.OBJ /* announcer speech etc... */ +SELECT.OBJ /* name & team selection */ +SELECT2.OBJ /* name & team selection */ +ADJUST.OBJ /* TEST MENUS ADJUSTMENT CODE */ +AUDIT.OBJ /* audits and adjustments handling */ +TEST.OBJ /* test program */ +DIAG.OBJ /* SYSTEM DIAGNOSTICS CODE */ +MENU.OBJ /* test menus */ +HSTD.OBJ /* robo high-score-to-date management */ +MAKEPLR.OBJ /* create player logic */ +MAKEPLR2.OBJ /* create player logic */ +SCREEN.OBJ +SELECT3.OBJ +SELECT4.OBJ +PLYRAT3.OBJ /* basketball player code */ +UNZIP.OBJ + +MEMORY /* set up memory for sdb board */ +{ + SCRATCH : org = 0x01000000, len = 0x3f7300 + SCRATCHTV : org = 0x013f7300, len = 0x8d00 + ROM : org = 0xFF800000, len = 0x7F6F00 + ROMTV : org = 0xFFFF6F00, len = 0x8D00 + TRAP31 : org = 0xFFFFFC00, len = 0x400 + IROM : org = 0x02000000, len = 0x400000 +} + +SECTIONS /* linker sections directive */ +{ + VECTORS: {} > TRAP31 + IMAGES: {} > IROM + GROUP: + { + shit: {} + SHIT: {} + } > ROMTV + GROUP: + { + STACK: {} + PRCBSS: {} + OBJBSS: {} + .BSS: {} + .bss: {} + } > SCRATCH + + .text: {} > ROM + .TEXT: {} > ROM + .data: {} > ROM + .DATA: {} > ROM + img_tbl: {} > ROM +} + diff --git a/SRC/BB.TVS b/SRC/BB.TVS new file mode 100644 index 0000000..95f96a0 --- /dev/null +++ b/SRC/BB.TVS @@ -0,0 +1,61 @@ +.struct disp.equ +.struct mproc.equ +.struct game.equ +.struct sys.equ +.km !f1 \ @J"HOME"@K*ACTIVE\ PROC\ PLINK"CR" +.km !f2 \ @J"HOME"@K*OBJLST\ OBJ\ OLINK"CR" +.km !f3 \ @J"HOME"@KPALRAM\ PAL\ *"CR" +.km !f4 \ @J"HOME"@K*BAKLST\ OBJ\ OLINK"CR" + +;D3.ASM structures +;.struct d3.asm +;.km !f9 \ @J"HOME"@Krocketptx_t+112\ XYZ\ *"CR" +;.km !f10 \ @J"HOME"@Kd3world_t\ APTR\ *"CR" +;.km @!f10 \ @J"HOME"@Kd3gnd_t\ APTR\ *"CR" +;.km !f11 \ @J"HOME"@K*d3vis_p\ D3OBJ\ D3LINK"CR" +;.km !f12 \ @J"HOME"@K*d3free_p\ D3OBJ\ D3LINK"CR" + +;OLD BELOW +;.km !f1 @D*ACTIVE\ PROC\ PLINK"CR" +;.km !f2 @D*OBJLST\ OBJ\ OLINK"CR" +;.km !f3 @DPALRAM\ PAL\ *"CR" + +;CORRECT TODD STUFF BELOW +;.km !f1 \ @J"HOME"@K*ANIOBJS\ ANIM\ AnimNxt"CR" +;.km !f2 \ @J"HOME"@K*OFREE\ OBJ\ OLINK"CR" +;.km !f6 \ @J"HOME"@K*ACTIVE\ PRC\ PLINK"CR" +;.km s @D"CR"S +;.km w @D"CR"W + +;**** display SOURCE when cursor on longword in struct or mem display **** +.km S @M"CR"S"CR" +;**** display WORDS when cursor on longword in struct or mem display **** +.km W @M"CR"W"CR" + +; this is a comment +.wp CLOCK_OFF,UHW +.wp SLDEBUG,UHW +.wp CPULEFT,UDW +.wp CPUAVG,UDW +.wp slowmotion,UDW +.wp PSTATUS,UHW +.wp WORLDTLX,UHL +.wp WORLDTLY,UHL +.wp PCNT,UHW +.wp SCRNTL,UHL +.wp SCRNLR,UHL +.wp dirqtimer,SHW +.wp dpageflip,SHW +.wp dpage,SHW +.wp gmqrtr,UDW +.wp game_time,UHL +.wp inbound,SDW +.wp DISPLAYON,UDW +.wp HALT,UDW +.wp IRQSKYE,UHW +;.wp viewx,SHL +;.wp viewy,SHL +;.wp viewz,SHL +;.wp viewxa,SHW +;.wp viewya,SHW +;.wp viewza,SHW diff --git a/SRC/BB2.ASM b/SRC/BB2.ASM new file mode 100644 index 0000000..69d82c7 --- /dev/null +++ b/SRC/BB2.ASM @@ -0,0 +1,303 @@ +************************************************************** +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb2.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "plyrhd.glo" +; .include "imgtbl1.glo" +; .include "imgpal1.asm" + .include "plyrseq.tbl" + .include "plyrseq.glo" + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .ref NEWILPAL +; .ref PLYRRCH_P + + .if IMGVIEW + + .include "imgtbl.glo" + .include "imgtbl2.glo" + + + .include STAND.TBL + .include "plyrseq2.tbl" + +; .include "plyrd2sq.tbl" +; .include layup.TBL +; .include "fireseq.tbl" +; .include "pass.tbl" +; .include "plyrdseq.tbl" +; .include "plyrrseq.tbl" +; .include "imgpal3.asm" + + +***************************************************************************** +;Debug +;Display each frame of our ball player to check 2nd and 3rd ani pnts, etc. +;Re-insert these lines when tweaking ani points + + + +debug_lst + .long debug1+16,debug1+16,debug1+16,debug4+16 +butn_minus + .long 12,12,12,6 +butn_plus + .long 14,14,14,13 + + + +;a8=0-3 + + SUBR anipts_debug + + + SLEEP 3*60 + + sll 5,a8 + movi debug_lst,a0 + add a8,a0 + move *a0,a9,L + + movi butn_minus,a0 + add a8,a0 + move *a0,a10 + + movi butn_plus,a0 + add a8,a0 + move *a0,a11 + + movi debug_img_list,a8 + + clr a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + +#swtop SLEEPK 1 + move *a8,*a9,L ;Writes to ROM + move @SWITCH,a0,L + cmpi >ffefffff,a0 + jrnz #sw1 + clr a0 + move a0,*a13(PDATA) + jruc #swtop +#sw1 move *a13(PDATA),a1 + jrz #sw2 ;#swtop + move *a13(PDATA+16),a1 + jrz #sw2 + dec a1 + move a1,*a13(PDATA+16) + jruc #swtop + +#sw2 btst a11,a0 ;14 + jrz advance + btst a10,a0 ;12 + jrnz #swtop +;go backwards + cmpi debug_img_list,a8 + jrz #swtop + subk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop +advance cmpi debug_img_end,a8 + jrz #swtop + addk 32,a8 + movk 1,a0 + move a0,*a13(PDATA) + movk 3,a1 + move a1,*a13(PDATA+16) + jruc #swtop + + .asg M_WRNONZ,F + + + .def debug1,debug4 +; .def debug_t1,debug_t4 + +debug_t1 + .word 0 + .long 0 + .long debug1,debug1,debug1,debug1 + .long debug1,debug1,debug1,debug1 +debug1 + WLW 10,w1js1,F + W0 + +debug_t4 + .word 0 + .long 0 + .long debug4,debug4,debug4,debug4 + .long debug4,debug4,debug4,debug4 +debug4 + WLW 10,w1js1,F + W0 + + +debug_img_list + + .if 0 + +;Set A +;From BB2.LOD +;PLYRSEQ.TBL & STAND.TBL +;nba_sht1.img + .long w1js1,w1js2,w1js3,w1js4 + .long w1js5,w1js6,w1js7,w1js8,w1js9,w1js10,w2js1,w2js2,w2js3,w2js4,w2js5 + .long w2js6,w2js7,w2js8,w2js9,w2js10,w3js1,w3js2,w3js3,w3js4,w3js5,w3js6 + .long w3js7,w3js8,w3js9,w3js10,w4js1,w4js2,w4js3,w4js4,w4js5,w4js6,w4js7 + .long w4js8,w4js9,w4js10,w5js1,w5js2,w5js3,w5js4,w5js5,w5js6,w5js7,w5js8 + .long w5js9,w5js10 +;willie.img + .long w1jupa + .long w2jupa + .long w3jupa,w4jupa + .long w5jupa + +;nba_msc3.img + .long w1stwb1,w1stwb2,w1stwb3,w1stwb4,w2stwb1 + .long w2stwb2,w2stwb3,w2stwb4,w3stwb1,w3stwb2,w3stwb3,w3stwb4,w4stwb1,w4stwb2 + .long w4stwb3,w4stwb4,w5stwb1,w5stwb2,w5stwb3,w5stwb4 + +;nba_stn1.img + .long W1ST1 + .long W1ST2,W1ST3,W1ST4,W1ST5,W1ST6,W2ST1,W2ST2,W2ST3,W2ST4,W2ST5,W2ST6,W3ST1 + .long W3ST2,W3ST3,W3ST4,W3ST5,W3ST6,W4ST1,W4ST2,W4ST3,W4ST4,W4ST5,W4ST6,W5ST1 + .long W5ST2,W5ST3,W5ST4,W5ST5,W5ST6 + .long w1stwbl1,w1stwbl2,w1stwbl3,w1stwbl4 + .long w2stwbl1,w2stwbl2,w2stwbl3,w2stwbl4,w3stwbl1,w3stwbl2,w3stwbl3,w3stwbl4 + .long w4stwbl1,w4stwbl2,w4stwbl3,w4stwbl4,w5stwbl1,w5stwbl2,w5stwbl3,w5stwbl4 + +;nba_def1.img + .long T1SWPE1,T1SWPE2,T1SWPE3 + .long T1SWPE4,T1SWPE5,T1SWPE6,T1SWPE7,T1SWPE8,T1SWPE9,T2SWPE1,T2SWPE2,T2SWPE3 + .long T2SWPE4,T2SWPE5,T2SWPE6,T2SWPE7,T2SWPE8,T2SWPE9,T3SWPE1,T3SWPE2,T3SWPE3 + .long T3SWPE4,T3SWPE5,T3SWPE6,T3SWPE7,T3SWPE8,T3SWPE9,T4SWPE1,T4SWPE2,T4SWPE3 + .long T4SWPE4,T4SWPE5,T4SWPE6,T4SWPE7,T4SWPE8,T4SWPE9,T5SWPE1,T5SWPE2,T5SWPE3 + .long T5SWPE4,T5SWPE5,T5SWPE6,T5SWPE7,T5SWPE8,T5SWPE9,T1SWPU1,T1SWPU2,T1SWPU3 + .long T1SWPU4,T1SWPU5,T1SWPU6,T1SWPU7,T1SWPU8,T1SWPU9,T2SWPU1,T2SWPU2,T2SWPU3 + .long T2SWPU4,T2SWPU5,T2SWPU6,T2SWPU7,T2SWPU8,T2SWPU9,T3SWPU1,T3SWPU2,T3SWPU3 + .long T3SWPU4,T3SWPU5,T3SWPU6,T3SWPU7,T3SWPU8,T3SWPU9,T4SWPU1,T4SWPU2,T4SWPU3 + .long T4SWPU4,T4SWPU5,T4SWPU6,T4SWPU7,T4SWPU8,T4SWPU9,T5SWPU1,T5SWPU2,T5SWPU3 + .long T5SWPU4,T5SWPU5,T5SWPU6,T5SWPU7,T5SWPU8,T5SWPU9 + +;nba_pas1.img + .long w1cp1,w1cp2,w1cp3,w1cp4 + .long w1cp5,w1cp6,w2cp1,w2cp2,w2cp3,w2cp4,w2cp5,w2cp6,w3cp1,w3cp2,w3cp3,w3cp4 + .long w3cp5,w3cp6,w4cp1,w4cp2,w4cp3,w4cp4,w4cp5,w4cp6,w5cp1,w5cp2,w5cp3,w5cp4 + .long w5cp5,w5cp6,w1ohp1,w1ohp2,w1ohp3,w1ohp4,w1ohp5,w1ohp6,w1ohp7,w1ohp8 + .long w1ohp9,w1ohp10,w1ohp11,w2ohp1,w2ohp2,w2ohp3,w2ohp4,w2ohp5,w2ohp6,w2ohp7 + .long w2ohp8,w2ohp9,w2ohp10,w2ohp11,w3ohp1,w3ohp2,w3ohp3,w3ohp4,w3ohp5,w3ohp6 + .long w3ohp7,w3ohp8,w3ohp9,w3ohp10,w3ohp11,w4ohp1,w4ohp2,w4ohp3,w4ohp4,w4ohp5 + .long w4ohp6,w4ohp7,w4ohp8,w4ohp9,w4ohp10,w4ohp11,w5ohp1,w5ohp2,w5ohp3,w5ohp4 + .long w5ohp5,w5ohp6,w5ohp7,w5ohp8,w5ohp9,w5ohp10,w5ohp11 + +;nba_msc2.img + .long w1push1,w1push2,w1push3 + .long w1push4,w1push5,w1push6,w1push7,w1push8,w1push9,w1push10,w1push11 + .long w2push1,w2push2,w2push3,w2push4,w2push5,w2push6,w2push7,w2push8,w2push9 + .long w2push10,w2push11,w3push1,w3push2,w3push3,w3push4,w3push5,w3push6 + .long w3push7,w3push8,w3push9,w3push10,w3push11,w4push1,w4push2,w4push3 + .long w4push4,w4push5,w4push6,w4push7,w4push8,w4push9,w4push10,w4push11 + .long w5push1,w5push2,w5push3,w5push4,w5push5,w5push6,w5push7,w5push8,w5push9 + .long w5push10,w5push11 + +;nba_def3.img + .long w1reb1,w1reb2,w1reb3,w1reb4,w1reb5,w1reb6,w1reb7,w1reb8,w1reb9,w1reb10 + .long w2reb1,w2reb2,w2reb3,w2reb4,w2reb5,w2reb6,w2reb7,w2reb8,w2reb9,w2reb10 + .long w3reb1,w3reb2,w3reb3,w3reb4,w3reb5,w3reb6,w3reb7,w3reb8,w3reb9,w3reb10 + .long w4reb1,w4reb2,w4reb3,w4reb4,w4reb5,w4reb6,w4reb7,w4reb8,w4reb9,w4reb10 + .long w5reb1,w5reb2,w5reb3,w5reb4,w5reb5,w5reb6,w5reb7,w5reb8,w5reb9,w5reb10 +; .long w1blokl1,w1blokl2,w1blokl3,w1blokl4,w1blokl5,w1blokl6,w1blokl7,w1blokl8 +; .long w2blokl1,w2blokl2,w2blokl3,w2blokl4,w2blokl5,w2blokl6,w2blokl7,w2blokl8 +; .long w3blokl1,w3blokl2,w3blokl3,w3blokl4,w3blokl5,w3blokl6,w3blokl7,w3blokl8 +; .long w4blokl1,w4blokl2,w4blokl3,w4blokl4,w4blokl5,w4blokl6,w4blokl7,w4blokl8 +; .long w5blokl1,w5blokl2,w5blokl3,w5blokl4,w5blokl5,w5blokl6,w5blokl7,w5blokl8 + +;nba_def4.img + .long w1rej1,w1rej2,w1rej3 + .long w1rej4,w1rej5,w1rej6,w1rej7,w1rej8,w1rej9,w1rej10,w1rej11,w2rej1,w2rej2 + .long w2rej3,w2rej4,w2rej5,w2rej6,w2rej7,w2rej8,w2rej9,w2rej10,w2rej11,w3rej1 + .long w3rej2,w3rej3,w3rej4,w3rej5,w3rej6,w3rej7,w3rej8,w3rej9,w3rej10,w3rej11 + .long w4rej1,w4rej2,w4rej3,w4rej4,w4rej5,w4rej6,w4rej7,w4rej8,w4rej9,w4rej10 + .long w4rej11 + + .endif + +;Set B +;From BB2.LOD +;PLYRSEQ2.TBL +;nba_msc2.img + .long w1elbo1,w1elbo3,w1elbo4,w1elbo5,w1elbo6,w1elbo7,w1elbo8 + .long w2elbo2,w2elbo3,w2elbo4,w2elbo5,w2elbo6,w2elbo8 + .long w4elbo3,w4elbo4,w4elbo5,w4elbo6,w4elbo7,w4elbo8 + .long w5elbo3,w5elbo4,w5elbo5,w5elbo6,w5elbo7 + .long w4tipst1,w4tipst2,w4tipst3,w4tipst4,w4tipst5,w4tip1 + .long w4tip2,w4tip3,w4tip4,w4tip5,w4tip6,w4tip7,w2tipst1,w2tipst2,w2tipst3 + .long w2tipst4,w2tipst5,w2tip1,w2tip2,w2tip3,w2tip4,w2tip5,w2tip6,w2tip7 +;nba_msc3.img + .long w2hndne1,w2hndne2,w2hndne3,w2hndne4,w2hndne5 + .long w4hndne1,w4hndne2,w4hndne3,w4hndne4 + .long w4hndne5 + .long w2hnesw1,w2hnesw2,w2hnesw3,w2hnesw4 + .long w4hnesw1,w4hnesw2,w4hnesw3,w4hnesw4 + .long w2hndhp1 + .long w2hndhp2,w2hndhp3,w2hndhp4,w2hndhp5 + .long w4hndhp1,w4hndhp2,w4hndhp3,w4hndhp4,w4hndhp5 + .long w1pikup1,w1pikup2 + .long w1pikup3,w1pikup4,w1pikup5,w2pikup1,w2pikup2,w2pikup3,w2pikup4,w2pikup5 + .long w3pikup1,w3pikup2,w3pikup3,w3pikup4,w3pikup5,w4pikup1,w4pikup2,w4pikup3 + .long w4pikup4,w4pikup5,w5pikup1,w5pikup2,w5pikup3,w5pikup4,w5pikup5 +;nba_msc4.img + .long w1fall1,w1fall2,w1fall3,w1fall4,w1fall5 + .long w1fall6,w1fall7,w1fall8,w1fall9,w1fall10 + .long w2fall1,w2fall2,w2fall3,w2fall4,w2fall5 + .long w2fall6,w2fall7,w2fall8,w2fall9,w2fall10,w2fall11 + .long w3fall1,w3fall2,w3fall3,w3fall4,w3fall5,w3fall6 + .long w3fall7,w3fall8,w3fall9,w3fall10,w3fall11,w3fall12 + .long w4fall1,w4fall2,w4fall3,w4fall4,w4fall5,w4fall6 + .long w4fall7,w4fall8,w4fall9,w4fall10,w4fall11,w4fall12 + .long w5fall1,w5fall2,w5fall3,w5fall5,w5fall6 + .long w5fall7,w5fall8,w5fall10,w5fall11,w5fall12 +;nbaspnmv.img + .long W3SPMVA1,W3SPMVA2,W3SPMVA3,W3SPMVA4,W3SPMVA5,W3SPMVA6,W3SPMVA7,W3SPMVA8 + .long W3SPMVA9,W3SPMVA10,W3SPMVA11,W3SPMVA12,W3SPMVA13,W3SPMVA14,W3SPMVA15 + .long W3SPMVA16,W3SPMVA17,W3SPMVA18,W3SPMVA19,W3SPMVA20 + + +debug_img_end + .long W3SPMVA20 + + .endif + + + .end + + + + diff --git a/SRC/BB3.ASM b/SRC/BB3.ASM new file mode 100644 index 0000000..792a6e7 --- /dev/null +++ b/SRC/BB3.ASM @@ -0,0 +1,3683 @@ +************************************************************* +* +* Owner: THOMPSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 1/27/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 23:00 +************************************************************** + .file "bb3.asm" + .title "Basketball game program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + .include "crowd.tbl" + .include "courtflr.tbl" + + .include "cheer.tbl" + .include "court.tbl" + .include "outdoor.tbl" + .include "outdoor.glo" + + .include "imgtbl.glo" + .include "hoop.glo" + + .asg 0,SEQT + .include "plyr.equ" + + + .def COURT + .def OUTDOOR +;DJT Start + .def HOTblu,HOTgrn,HOTyel,HOTred +;DJT End + + + .ref pup_court,pup_aba,HALT + .ref gndx + .ref team1,team2 + .ref oteam1 + .ref crt_colors + .ref bkcrt_colors +;; .ref refcrt_colors + .ref gndpos_t,pal_getf + .ref team_city_tbl,teampal_t +;DJT Start + .ref setup_message,print_string_C2 + .ref bast8_ascii +;DJT End + + .ref P1CTRL + .ref P2CTRL + .ref P3CTRL + .ref P4CTRL + .ref RNDRNG0 +;; .ref crowd_aniflag +;; .ref bench_aniflag + + .ref pal_set,pal_find,pal_clean + + +;DJT Start + .asg 0,MSG_ABABALL ;Flag bit# - ABA ball msg + .asg 1,MSG_OUTDOOR ;Flag bit# - outdoor court msg + .asg 2,MSG_SPECIAL ;Flag bit# - special msg + + BSSX pup_msgs,32 ;Matchup screen pup message flags + +;DJT End + .bss tm1pal_t,(1+128)*16 ;Team 1 bench palette + .bss tm2pal_t,(1+128)*16 ;Team 2 bench palette + .bss coachpal_t,(1+128)*16 ;Coach palette + + BSSX rimlf,32 ;rim/net left front img pntr for animation + .bss rimlb,32 ;rim/net left back + BSSX rimrf,32 ;rim/net rgt front + .bss rimrb,32 ;rim/net rgt back + + .bss bnchl_p,32 ;plyr bench, lft + .bss bnchr_p,32 ;plyr bench, rgt + .bss coachl_p,32 ;coachs, lft + .bss coachr_p,32 ;coachs, rgt + + .bss cr1st1_p,32 ;1st row, far lft + .bss cr1st2_p,32 ;1st row, lft +; .bss cr1st3_p,32 ;1st row, lft ctr +; .bss cr1st4_p,32 ;1st row, ctr lft +; .bss cr1st5_p,32 ;1st row, ctr rgt +; .bss cr1st6_p,32 ;1st row, rgt ctr + .bss cr1st7_p,32 ;1st row, rgt + .bss cr1st8_p,32 ;1st row, far rgt + + .bss cr2nd1_p,32 ;2nd row, far lft + .bss cr2nd2_p,32 ;2nd row, lft + .bss cr2nd3_p,32 ;2nd row, lft ctr +; .bss cr2nd4_p,32 ;2nd row, ctr lft +; .bss cr2nd5_p,32 ;2nd row, ctr rgt + .bss cr2nd6_p,32 ;2nd row, rgt ctr + .bss cr2nd7_p,32 ;2nd row, rgt + .bss cr2nd8_p,32 ;2nd row, far rgt + + .bss cr3rd1_p,32 ;3rd row, far lft + .bss cr3rd2_p,32 ;3rd row, lft + .bss cr3rd3_p,32 ;3rd row, lft ctr +; .bss cr3rd4_p,32 ;3rd row, ctr lft +; .bss cr3rd5_p,32 ;3rd row, ctr rgt + .bss cr3rd6_p,32 ;3rd row, rgt ctr + .bss cr3rd7_p,32 ;3rd row, rgt + .bss cr3rd8_p,32 ;3rd row, far rgt + + BSSX crbox1_p,32*5 ;sky box, all + +; .bss bnch_ram_plist,32*(8+1) ;bench ani *proc + .bss crwd_ram_plist,32*(24+1) ;crowd ani *proc + .bss chldr_ram_plft,32 ;cheerleader ani *proc, lft + .bss chldr_ram_prgt,32 ;cheerleader ani *proc, rgt + + .bss ad1_ptr,32 + .bss ad1ref_ptr,32 + .bss ad2_ptr,32 + .bss ad2ref_ptr,32 + + BSSX crt_pal ,16 ;pal_getf result for court + + .bss city1obj,32 ;outdoor crt city obj + .bss city2obj,32 ;outdoor crt city obj + .bss city3obj,32 ;outdoor crt city obj + + .bss moonobj,32 ;outdoor crt moon obj + .bss stormobj,32 ;outdoor crt MK storm obj + + +#******************************* +* Initialize the game objs +* Trashes scratch, A0-A11 + + BSSX otdscroll_p,32 + + SUBR game_initobjs + + clr a0 + move a0,@chldr_ram_plft,L + move a0,@chldr_ram_prgt,L + + movi #init_t,a11 ;>Setup crowd, hoops, side crowd + move @pup_court,a0 + jrz #next + CREATE0 otd_scroller + move a0,@otdscroll_p,L + movi #init_otd_t,a11 ;>Setup outdoor court objs + jruc #next +#lp + cmpi 4001,a0 ;>Start process + jrne #svptr + clr a1 + move *a11+,a7,L ;*Code + calla GETPRC ;Pass last obj in A8 + jruc #next + +#svptr cmpi 4002,a0 ;>Save variable + jrne #obj + move *a11+,a1,L ;*Var + move a8,*a1,L + jruc #next + +#obj move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a9 ;Z offset + move *a11+,a4 + ori DMAWNZ|M_NOCOLL,a4 + move *a11+,a2,L + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + move a9,*a8(OMISC) ;save Z offset +; +;Old code here basically eliminates any alignment between +; related objs by using anim pts, due in large part to the +; attempt of using the mid X of the image as the "anim pt"; +; 3DQ X projections are done around THIS pt as opposed to +; any common coordinate +; +; move *a2,a0 ;get width & make it an INT:FRC +; sll 15,a0 ; /2 for obj mid X +; move a0,*a8(OXANI),L ;Save "anipt" (offset to mid X) +; + move *a8(OIMG),a1,L ;get ani pts while we still have + move *a8(OSIZE),a2,L ; OFLAGS handy + calla GANIOF + move a6,*a8(OXANI),L ;save for debug ref only + + btst B_3DQ,a4 + jrz #next + ;>Convert 3D to 3DQ + add a9,a3 ;add Z offset to Z + move a3,a5 ;save for later X2Z conv + subi GZBASE,a3 + move a3,a4 +; +;Old code here ends up having the object look at gndpos_t +; 5 to 6 lines above (screen-wise) the object's actual Y +; sll 8,a3 ;shift for quotient int resolution +; movi 725,a1 ;should be 683 to match the 3/8's Z- +; divu a1,a3 ; to-Y rule (256/(3/8)) +; + sra 1,a4 ;Z/2 + sra 3,a3 ;Z/8 + sub a3,a4 ;=Z/2.667 + move a4,a3 + + sll 4,a3 ;*16 + addi gndpos_t,a3 + move a3,*a8(ODATA_p),L + + addi GND_Y,a4 + move *a8(OYPOS),a0 + add a0,a4 + move a4,*a8(OYPOS) + + move *a8(OXVAL),a3,L + subi [WRLDMID,0],a3 + add a6,a3 + + PRJX2Z a3,a5,0 + + addi 200,a3 + sra 16,a6 + sub a6,a3 ;-X anipt + move a3,*a8(OXPOS) + +#next move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + move @team1,a0 + move a0,@oteam1 + callr random_ads + + calla pal_clean + + move @crt_colors,a0,L + calla pal_getf + move a0,@crt_pal + rets + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_t + .asg 200,SXO ;Screen center Xoffs + .asg M_3DQ|M_NOSCALE,F + .asg M_3DQ|M_NOSCALE|M_FLIPH,FF + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Regular indoor hoop setup - left side + + .word SXO-X-2,Y,Z-18, 18,F ;lft hoop + .long hooptop + .word SXO-X-2,Y,Z, 0,F + .long hoopbot + .word SXO-X-2,Y,Z-17, 17,F + .long back1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long RIM0_B_00 ;rim1b + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long RIM0_F_00 ;rim1f + WL 4002,rimlf + +;;TEMP!!! begin left hoop lying on the floor +;; .word SXO-X,Y-HOOPY,Z, 0,F +;; .long rimbase +; .word SXO-X,Y-HOOPY,Z-10, 10,F +; .long rim1b +; .word SXO-X,Y-HOOPY,Z+10,-10,F +; .long rim1f +;;TEMP!!! end + +;Regular indoor hoop setup - right side + + .word SXO+X,Y,Z-18, 18,FF ;rgt hoop + .long hooptop + .word SXO+X,Y,Z, 0,FF + .long hoopbot + .word SXO+X,Y,Z-17, 17,FF + .long back1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long RIM0_B_00 ;rim1b + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long RIM0_F_00 ;rim1f + WL 4002,rimrf + +;-------------------- +; crt refs + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN-90,Z ;Z priority back from crt top + .asg 90-(0*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-308,Y,Z+96,ZOFF,F ;crt light refs + .long ref01n + WL 4001,set_crt_colors + .word SXO-308,Y,Z+202,ZOFF,F + .long ref02n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+128,ZOFF,F + .long ref03n + WL 4001,set_crt_colors + .word SXO-124,Y,Z+220,ZOFF,F + .long ref04n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+124,ZOFF,F + .long ref05n + WL 4001,set_crt_colors + .word SXO+104, Y,Z+224,ZOFF,F + .long ref06n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+104,ZOFF,F + .long ref07n + WL 4001,set_crt_colors + .word SXO+308,Y,Z+204,ZOFF,F + .long ref08n + WL 4001,set_crt_colors + +;-------------------- +; floors & stairs + +; .asg 7,Y ;Y to realign after ZOFF +; .asg CZMIN-300,Z ;Z priority back from crt top +; .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-359,Y,Z,ZOFF,FF ;flr above main crt +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO-146,Y,Z,ZOFF,FF +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+146,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors +; .word SXO+359,Y,Z,ZOFF,F +; .long bk_flr +; WL 4001,set_bkcrt_colors + +; .asg -3,Y ;Y to realign after ZOFF +; .asg 205,Z ;Z priority back from crt top +; .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use +; +; .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS +; .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows +; .long STAIRS + + .asg 3,Y ;Y to realign after ZOFF + .asg 205,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS01 + + .asg -3,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS02 + + .asg -11,Y ;Y to realign after ZOFF + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO-124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+124,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + .word SXO+367,Y,Z,ZOFF,FF ;stairs between crowd rows + .long STAIRS03 + +;-------------------- +; tables + + .asg 7,Y ;Y to realign after ZOFF + .asg CZMIN-300,Z ;Z priority back from crt top + .asg 300-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO+1,Y,Z,ZOFF,F ;ad refs +; .long ad01_ref_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_ref_r + + .word SXO+1,Y,Z,ZOFF,F ;ad refs + .long ad01_ref_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_ref_nr + + .asg CZMIN-20,Z ;Z priority back from crt top + .asg 20-(7*Y2Z),ZOFF ;Z off for gndpos_t element to use + +; .word SXO,Y,Z,ZOFF,F ;midcrt table refs +; .long flr_ref_l +; WL 4001,set_bkcrt_colors +; .word SXO,Y,Z,ZOFF,F +; .long flr_ref_r +; WL 4001,set_bkcrt_colors + +; .word SXO+1,Y,Z,ZOFF,F ;midcrt table +; .long tabltop_l +; .word SXO+1,Y,Z,ZOFF,F +; .long tabltop_r + +; .word SXO+1,Y,Z,ZOFF,F ;ads +; .long ad01_l +; .word SXO+1,Y,Z,ZOFF,F +; .long ad01_r + + .word SXO+1,Y,Z,ZOFF,F ;midcrt table + .long tabletop + + .word SXO+1,Y,Z,ZOFF,F ;ads + .long ad01_nl + .word SXO+1,Y,Z,ZOFF,F + .long ad01_nr + +;-------------------- +; plyr benchs/coachs + + .asg 2,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-30,Z ;Z priority back from crt top + .asg 30-(9*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -320,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchl_p + WL 4001,set_tm1_colors + .word 528,Y,Z,ZOFF,F + .long BNCHPL01 + WL 4002,bnchr_p + WL 4001,set_tm2_colors + + + .word -116,Y,Z,ZOFF,F + .long COACH01 + WL 4002,coachl_p + WL 4001,set_coach_colors + .word 516,Y,Z,ZOFF,FF + .long COACH01 + WL 4002,coachr_p + WL 4001,set_coach_colors + + + .word -6,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + .word 346,Y,Z,ZOFF,F + .long bk_flr + WL 4001,set_bkcrt_colors + + +;-------------------- +; crowd - 1st row + + .asg -9,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 250,Z ;Z priority back from crt top + .asg CZMIN-Z-(20*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR2FST01 + WL 4002,cr1st1_p + + + .word -155,Y,Z,ZOFF,F +; .word -153,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st2_p + +; .word -153,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st2_p +; .word -49,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st3_p + + + .word 88,Y,Z,ZOFF,F + .long CR2FST01 +; WL 4002,cr1st4_p + .word 318,Y,Z,ZOFF,FF + .long CR3FST01 +; WL 4002,cr1st5_p + + +; .word 336,Y,Z,ZOFF,F +; .long CR4FST01 +; WL 4002,cr1st6_p +; .word 440,Y,Z,ZOFF,F +; .long CR1FST01 +; WL 4002,cr1st7_p + + .word 336,Y,Z,ZOFF,F + .long CR0FST01n + WL 4002,cr1st7_p + + + .word 690,Y,Z,ZOFF,FF + .long CR3FST01 + WL 4002,cr1st8_p + +;-------------------- +; crowd - 2nd row + + .asg -11,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 240,Z ;Z priority back from crt top + .asg CZMIN-Z-(28*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -298,Y,Z,ZOFF,F + .long CR4SEC01 + WL 4002,cr2nd1_p + + + .word -156,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd2_p + .word -44,Y,Z,ZOFF,F + .long CR1SEC01 + WL 4002,cr2nd3_p + + + .word 89,Y,Z,ZOFF,F + .long CR5SEC01 +; WL 4002,cr2nd4_p + .word 193,Y,Z,ZOFF,F + .long CR4SEC01 +; WL 4002,cr2nd5_p + + + .word 336,Y,Z,ZOFF,F + .long CR2SEC01 + WL 4002,cr2nd6_p + .word 450,Y,Z,ZOFF,F + .long CR3SEC01 + WL 4002,cr2nd7_p + + + .word 578,Y,Z,ZOFF,F + .long CR5SEC01 + WL 4002,cr2nd8_p + +;-------------------- +; crowd - 3rd row + + .asg -21,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 230,Z ;Z priority back from crt top + .asg CZMIN-Z-(34*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word -310,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd1_p + + + .word -160,Y,Z,ZOFF,F + .long CR4THD01 + WL 4002,cr3rd2_p + .word -52,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd3_p + + + .word 84,Y,Z,ZOFF,F + .long CR3THD01 +; WL 4002,cr3rd4_p + .word 196,Y,Z,ZOFF,F + .long CR4THD01 +; WL 4002,cr3rd5_p + + + .word 328,Y,Z,ZOFF,F + .long CR1THD01 + WL 4002,cr3rd6_p + .word 442,Y,Z,ZOFF,F + .long CR3THD01 + WL 4002,cr3rd7_p + + + .word 576,Y,Z,ZOFF,F + .long CR2THD01 + WL 4002,cr3rd8_p + +;-------------------- +; crowd - camera people + + .asg 0,Y ;Y to realign after ZOFF + .asg CZMIN+(42*Y2Z),Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-500,Y,Z,ZOFF,FF + .long SIDECAMS + .word SXO+500,Y,Z,ZOFF,F + .long SIDECAMS + +;-------------------- +; crowd - skybox/upper deck + + .asg -61,Y ;Y to realign after ZOFF + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(30*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-438,Y,Z,ZOFF,FF + .long TOPCRV + WL 4002,crbox1_p + + .word SXO-230,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+32 + + .word SXO,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+64 + + .word SXO+231,Y,Z,ZOFF,F + .long TOPCHK + WL 4002,crbox1_p+96 + + .word SXO+439,Y,Z,ZOFF,F + .long TOPCRV + WL 4002,crbox1_p+128 + +;-------------------- +; big crowd backdrop + + .asg 18,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-526,Y+60,Z,0,M_FLIPH + .long SIDECHK + + .word SXO-249-125-100,Y,Z,0,M_FLIPH + .long BOTCRV + + .word SXO-249,Y,Z,0,0 + .long BOTCHK + + .word SXO,Y,Z,0,0 + .long BOTCHK + + .word SXO+249,Y,Z,0,0 + .long BOTCHK + + .word SXO+249+125+100,Y,Z,0,0 + .long BOTCRV + + .word SXO+526,Y+60,Z,0,0 + .long SIDECHK + + + .word 4000 ;End + + +;---------------------------------------------------------------------------- +; .word X, Y, Z, Z-offset, DMA +; .long IMG_p + +#init_otd_t + +;-------------------- +; hoops + + .asg HOOPBASE_X,X +;FIX!!! Alignment should be done with img ani pts, not offsets here! + .asg HOOPBASE_Y-4,Y + .asg CZMID,Z + +;Outdoor hoop setup - left side + + .word SXO-X-4,Y,Z, 0,F + .long nhoopbot + .word SXO-X-4,Y,Z-17, 17,F + .long nback1 + WL 4001,backboard_ani + + .word SXO-X-2,Y,Z-10, 10,F + .long CHAN1B_01 + WL 4002,rimlb + .word SXO-X-2,Y,Z+10,-10,F + .long CHAN1F_01 + WL 4002,rimlf + +;Outdoor hoop setup - right side + + .word SXO+X+2,Y,Z, 0,FF + .long nhoopbot + .word SXO+X+2,Y,Z-17, 17,FF + .long nback1 + WL 4001,backboard_svrptr + + .word SXO+X,Y,Z-10, 10,FF + .long CHAN1B_01 + WL 4002,rimrb + .word SXO+X,Y,Z+10,-10,FF + .long CHAN1F_01 + WL 4002,rimrf + +;-------------------- +; backcourt roof edge + + .asg -14,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(2*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-493,Y,Z,ZOFF,F + .long BKg1 + .word SXO-326,Y,Z,ZOFF,F + .long BKg2 + .word SXO,Y,Z,ZOFF,FF + .long BKg2 + .word SXO,Y,Z,ZOFF,F + .long BKg2 + .word SXO+326,Y,Z,ZOFF,FF + .long BKg2 + .word SXO+493,Y,Z,ZOFF,FF + .long BKg1 + +;-------------------- +; wall + + .asg -16,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-40,Z ;Z priority back from crt top + .asg 40-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-496,Y,Z,ZOFF,F + .long bkwall + .word SXO-330,Y,Z,ZOFF,F + .long bkwall + .word SXO-165,Y,Z,ZOFF,F + .long bkwall + .word SXO,Y,Z,ZOFF,F + .long bkwall + .word SXO+166,Y,Z,ZOFF,F + .long bkwall + .word SXO+331,Y,Z,ZOFF,F + .long bkwall + +;-------------------- +; street lights + + .asg -130,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg 220,Z ;Z priority back from crt top + .asg CZMIN-Z-(39*Y2Z),ZOFF ;Z off for gndpos_t element to use + + + .word SXO-468,Y,Z,ZOFF,F + .long lamp1 + + .word SXO-154-80,Y,Z,ZOFF,F + .long lamp2 + .word SXO+150-80,Y,Z,ZOFF,F + .long lamp2 + + .word SXO+464,Y,Z,ZOFF,FF + .long lamp1 + +;-------------------- +; cheerleaders + + .asg 0,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-24,Z ;Z priority back from crt top + .asg 0,ZOFF ;Z off for gndpos_t element to use + + .word SXO-424,Y,Z,ZOFF,F + .long CHEERA01 + WL 4001,otd_chldr_ani_lft + .word SXO+428,Y,Z,ZOFF,F +; .long CHEERA01 + .long CHEERB01 + WL 4001,otd_chldr_ani_rgt + +;-------------------- +; side buildings + + .asg -33,Y ;Y to realign after ZOFF +; .asg -400,Y + .asg CZMIN-39,Z ;Z priority back from crt top + .asg 39-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidebot + .word SXO+540,Y,Z,ZOFF,FF + .long sidebot + + + .asg 290,Z ;Z priority back from crt top + .asg CZMIN-Z-(16*Y2Z),ZOFF ;Z off for gndpos_t element to use + + .word SXO-544,Y,Z,ZOFF,F + .long sidetop + .word SXO+540,Y,Z,ZOFF,FF + .long sidetop + +;-------------------- +; city backdrop + + .asg -92,Y ;Y to realign after ZOFF + .asg 210,Z ;Z priority back from crt top + + .word SXO-300,Y,Z,0,0 + .long city1 + WL 4002,city1obj + .word SXO-100,Y,Z,0,0 + .long city2 + WL 4002,city2obj + .word SXO+100,Y,Z,0,0 + .long city3 + WL 4002,city3obj + + .word SXO-28,-140,Z+1,0,0 + .long moon + WL 4002,moonobj + + .word SXO-28+200-74h+8,-140,Z+1,0,0 + .long STORM01 + WL 4002,stormobj + + + .word 4000 ;End + + +;-------------------- + + SUBRP set_crt_colors + + SLEEPK 3 + move @crt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_bkcrt_colors + + SLEEPK 3 + move @bkcrt_colors,a0,L + calla pal_getf + move a0,*a8(OPAL) + DIE + + SUBRP set_coach_colors + + SLEEPK 3 + + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + movi coachpal_t,a2 + move a2,a3 + + move *a1,a0 ;Copy coach palette cnt & palette + addk 1,a0 +#bcp1 move *a1+,*a2+ + dsjs a0,#bcp1 + + move @bkcrt_colors,a1,L + move *a1+,a0 + move a0,a14 + sll 4,a14 + sub a14,a2 +#bcp2 move *a1+,*a2+ + dsjs a0,#bcp2 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + +;; SUBRP set_refcrt_colors +;; +;; SLEEPK 3 +;; move @refcrt_colors,a0,L +;; calla pal_getf +;; move a0,*a8(OPAL) +;; DIE + + SUBRP set_tm1_colors + + move @team1,a3 + move @team2,a4 + movi tm1pal_t,a2 + jruc #set_tm + + SUBRP set_tm2_colors + + move @team2,a3 + move @team1,a4 + movi tm2pal_t,a2 + +#set_tm + move a3,a6 + sll 5,a6 + addi team_city_tbl,a6 + move *a6,a6,L + move a6,a7 + + sll 3,a3 + sll 3,a4 + addi teampal_t,a3 + addi teampal_t,a4 + movb *a3,a3 + jrn #keepc ;I always keep? yes if neg + movb *a4,a4 + move a4,a14 + sll 32-4,a3 + sll 32-4,a14 + cmp a3,a14 + jrne #keepc ;Different colors? + move a4,a4 + jrn #altc ;Other team always keeps? + cmpi tm2pal_t,a2 + jrz #keepc ;2nd team? +#altc addk 32,a6 ;use alternates +#keepc + +;---------- +; Build bench palette + + move a2,a3 + move *a8(OIMG),a1,L + move *a1(ICMAP),a1,L + + move *a1+,a0 ;Copy bench palette + addk 16,a3 +#bbp1 move *a1+,*a3+ + dsjs a0,#bbp1 + + move a2,a3 ;Save *pal + movi 128,a0 + move a0,*a2+ ;Set # colors + + move *a7(PAT_PALF_p),a1,L ;Skip flesh & copy court floor + move *a1+,a14 + move @bkcrt_colors,a1,L + move *a1+,a0 + .if DEBUG + cmpi 16,a0 + jrnz #lck0 + cmpi 53,a14 + jrz #nolck0 +#lck0 + LOCKUP +#nolck0 + .endif + sub a0,a14 + sll 4,a14 + add a14,a2 +#bbp1a move *a1+,*a2+ + dsjs a0,#bbp1a + + move *a6(PAT_PALT_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 17,a0 + jrz #nolck1 + LOCKUP +#nolck1 + .endif + addk 16,a1 + subk 1,a0 +#bbp2 move *a1+,*a2+ + dsjs a0,#bbp2 + + move *a6(PAT_PALU_p),a1,L ;Copy uniform + move *a1+,a0 + .if DEBUG + cmpi 25,a0 + jrz #nolck2 + LOCKUP +#nolck2 + .endif + addk 16,a1 + subk 1,a0 +#bbp3 move *a1+,*a2+ + dsjs a0,#bbp3 + + addi 13*16,a2 ;Skip shoes + + move *a6(PAT_PALSW_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck3 + LOCKUP +#nolck3 + .endif + addk 16,a1 + subk 1,a0 +#bbp4 move *a1+,*a2+ + dsjs a0,#bbp4 + + move *a6(PAT_PALVP_p),a1,L ;Copy trim + move *a1+,a0 + .if DEBUG + cmpi 12,a0 + jrz #nolck4 + LOCKUP +#nolck4 + .endif + addk 16,a1 + subk 1,a0 +#bbp5 move *a1+,*a2+ + dsjs a0,#bbp5 + + move a3,a0 + calla pal_getf + move a0,*a8(OPAL) + DIE + + +#******************************* +* Outdoor court obj scroller +* + + SUBRP otd_scroller + + CREATE0 blink_lights + + move @city1obj,a9,L + move @city2obj,a10,L + move @city3obj,a11,L + move @moonobj,a8,L + move @stormobj,a0,L + move *a0(OXPOS),*a13(PDATA+96) + + move @P1CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P2CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P3CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + move @P4CTRL,a0 + cmpi JOY_UP_RIGHT,a0 + jrz #ok + + +; movi 100,a0 +; calla RNDPER +; jrhi #ok +;Turn off MK storm image + move @stormobj,a0,L + .ref OBJOFF + calla OBJOFF + jruc #ok2 +#ok + .ref robo_2_snd + SOUND1 robo_2_snd +#ok2 + + move *a9(OXPOS),*a13(PDATA) + move *a10(OXPOS),*a13(PDATA+16) + move *a11(OXPOS),*a13(PDATA+32) + move *a8(OXPOS),*a13(PDATA+48) + + move *a9(OYPOS),*a13(PDATA+64) + move *a8(OYPOS),*a13(PDATA+80) + +#lp + SLEEPK 1 + move @HALT,a14 + jrnz #lp + + SUBR otdscroller_wake + + move @WORLDTLX+16,a0 + subi WRLDMID-200,a0 + move a0,a14 + sra 2,a14 ;Take frac of difference (now 11/16) + sub a14,a0 + sra 2,a14 + sub a14,a0 + + move *a13(PDATA),a1 + add a0,a1 + move a1,*a9(OXPOS) + + move *a13(PDATA+16),a1 + add a0,a1 + move a1,*a10(OXPOS) + + move *a13(PDATA+32),a1 + add a0,a1 + move a1,*a11(OXPOS) + + move *a13(PDATA+48),a1 + add a0,a1 + move a1,*a8(OXPOS) + + move *a13(PDATA+96),a1 + add a0,a1 + move @stormobj,a14,L + move a1,*a14(OXPOS) + + move @WORLDTLY+16,a0 + move a0,a14 + sra 3,a0 ;Take frac of difference (now 9/64) + sra 6,a14 + add a14,a0 + + move *a13(PDATA+64),a1 + add a0,a1 + move a1,*a9(OYPOS) + move a1,*a10(OYPOS) + move a1,*a11(OYPOS) + + move *a13(PDATA+80),a1 + add a0,a1 + move a1,*a8(OYPOS) + + move @stormobj,a14,L + addi 34h,a1 + move a1,*a14(OYPOS) + + jruc #lp + + +#******************************* +* +* Blink city lights for outdoor court + + SUBRP blink_lights + + .bss cycram1 ,3*2*16 ;Palette cycle mem + .bss cycram2 ,3*2*16 +; .bss cycram3 ,3*2*16 +; .bss cycram4 ,3*2*16 +; .bss cycram5 ,3*2*16 + .bss cycram6 ,3*2*16 + .bss cycram7 ,3*2*16 +; .bss cycram8 ,3*2*16 +; .bss cycram9 ,3*2*16 +; .bss cycram10 ,3*2*16 + .bss cycram11 ,3*2*16 + .bss cycram12 ,3*2*16 +; .bss cycram13 ,3*2*16 +; .bss cycram14 ,3*2*16 +; .bss cycram15 ,3*2*16 + +;Blink 2nd city piece + movi city1_p,a8 + movi cycram1,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + + .ref COLCYC + CREATE CYCPID,COLCYC + + movi city1_p,a8 + movi cycram2,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city1_p,a8 +; movi cycram3,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram4,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city1_p,a8 +; movi cycram5,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; + +;Blink 2nd city piece + movi city2_p,a8 + movi cycram6,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city2_p,a8 + movi cycram7,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city2_p,a8 +; movi cycram8,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram9,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city2_p,a8 +; movi cycram10,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + +;Blink 3rd city piece + movi city3_p,a8 + movi cycram11,a9 + movi [60,62],a10 ;1st,last color + + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + + movi city3_p,a8 + movi cycram12,a9 + movi [62,64],a10 ;1st,last color + movi 2*60,a0 + calla RNDRNG0 + addi 1*60,a0 + move a0,a11 ;Rate + CREATE CYCPID,COLCYC + +; movi city3_p,a8 +; movi cycram13,a9 +; movi [249,251],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram14,a9 +; movi [251,253],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC +; +; movi city3_p,a8 +; movi cycram15,a9 +; movi [253,255],a10 ;1st,last color +; movi 2*60,a0 +; calla RNDRNG0 +; addi 3*60,a0 +; move a0,a11 ;Rate +; CREATE CYCPID,COLCYC + + DIE + + +#******************************* +* Init crowd ani procs +* + + SUBR initcrowd_ani + +; movi bnch_ram_plist,a9 + movi crwd_ram_plist,a10 + + move @pup_court,a8 ;Outdoor court? + jrnz #x ; br=yes + +; move @bnchl_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L +; +; move @bnchr_p,a8,L +; movi BNCHPL_LST,a11 +; CREATE0 bnch_ani +; move a0,*a9+,L + +;-------------------- + + move @cr1st1_p,a8,L + movi CR2FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st2_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +; move @cr1st2_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st3_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st4_p,a8,L ;Never see? +; movi CR2FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st5_p,a8,L ;Never see? +; movi CR3FST_LST,a11 +; CREATE0 crwd_ani + + +; move @cr1st6_p,a8,L +; movi CR4FST_LST,a11 +; CREATE0 crwd_ani +; move @cr1st7_p,a8,L +; movi CR1FST_LST,a11 +; CREATE0 crwd_ani + + move @cr1st7_p,a8,L + movi CR0FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr1st8_p,a8,L + movi CR3FST_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr2nd1_p,a8,L + movi CR4SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd2_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd3_p,a8,L + movi CR1SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr2nd4_p,a8,L ;Never see? +; movi CR5SEC_LST,a11 +; CREATE0 crwd_ani +; move @cr2nd5_p,a8,L ;Never see? +; movi CR4SEC_LST,a11 +; CREATE0 crwd_ani + + + move @cr2nd6_p,a8,L + movi CR2SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr2nd7_p,a8,L + movi CR3SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr2nd8_p,a8,L + movi CR5SEC_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +;-------------------- + + move @cr3rd1_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd2_p,a8,L + movi CR4THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd3_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + +; move @cr3rd4_p,a8,L ;Never see? +; movi CR3THD_LST,a11 +; CREATE0 crwd_ani +; move @cr3rd5_p,a8,L ;Never see? +; movi CR4THD_LST,a11 +; CREATE0 crwd_ani + + + move @cr3rd6_p,a8,L + movi CR1THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + move @cr3rd7_p,a8,L + movi CR3THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + + + move @cr3rd8_p,a8,L + movi CR2THD_LST,a11 + CREATE0 crwd_ani + move a0,*a10+,L + +#x + clr a0 +; move a0,*a9+,L ;Set end of bench plist + move a0,*a10+,L ;Set end of crowd plist + + rets + + +#*------------------- +; Turn on bench animation, wait a bit, then die + +; SUBR bench_animate +; +; SLEEPK 8 +; movk 1,a1 +; movi bnch_ram_plist,a10 +;#lp +; move *a10+,a0,L +; jaz SUCIDE +; move a1,*a0(PTIME) +; addk 1,a1 +; jruc #lp + + +#*------------------- +; Turn on crowd animation, wait a bit, then die + + SUBR start_animate + + .ref RNDPER +; movi 150,a0 ;!!! ;Randomly knock down his % +; calla RNDPER +; jrls #skp +; CREATE0 bench_animate +;#skp + movk 1,a1 + move @chldr_ram_plft,a0,L + jrz #noc0 + move a1,*a0(PTIME) +#noc0 + move @chldr_ram_prgt,a0,L + jrz #noc1 + move a1,*a0(PTIME) +#noc1 + movi crwd_ram_plist,a10 +#lp + move *a10+,a0,L + jaz SUCIDE + move a1,*a0(PTIME) + addk 1,a1 + jruc #lp + + +#*------------------- +; Do bench ani seq proc + +; SUBRP bnch_ani +; +; SLEEP 32767 +; +; move a11,a10 ;Get *seq list +; jruc #lp +;#lptop +; move *a8(OIMG),a3,L ;>Get old & set new *img +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L +; +; move *a3(IANIOFFY),a14 +; move *a1(IANIOFFY),a0 +; sub a14,a0 ;Newaniy-Oldaniy +; move *a8(OYPOS),a14 +; sub a0,a14 +; move a14,*a8(OYPOS) +; +; move *a3(IANIOFFX),a14 +; move *a1(IANIOFFX),a0 +; sub a14,a0 ;Newanix-Oldanix +; move *a8(OXPOS),a14 +; sub a0,a14 +; move a14,*a8(OXPOS) +; +; move *a10+,a0 +; calla PRCSLP +;#lp +; move *a10+,a1,L ;New *img or is seq complete? +; jrnz #lptop ; br=new *img +; +; jruc bnch_ani + + +#*-------------------- +; Do crowd ani seq proc + + SUBRP crwd_ani + + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc crwd_ani + + +#*-------------------- +; Do cheerleader ani seq proc + + SUBRP otd_chldr_ani_lft + + move a13,@chldr_ram_plft,L + movi OTD_CHLDR_LST_LFT,a11 + jruc chldr_ani + + SUBRP otd_chldr_ani_rgt + + move a13,@chldr_ram_prgt,L + movi OTD_CHLDR_LST_RGT,a11 + +chldr_ani + SLEEP 32767 + + move a11,a10 ;Get *seq list + jruc #lp +#lptop + move *a8(OIMG),a3,L ;>Get old & set new *img + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + movb *a1(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + + move *a3(IANIOFFY),a14 + move *a1(IANIOFFY),a0 + sub a14,a0 ;Newaniy-Oldaniy + move *a8(OYPOS),a14 + sub a0,a14 + move a14,*a8(OYPOS) + + move *a3(IANIOFFX),a14 + move *a1(IANIOFFX),a0 + sub a14,a0 ;Newanix-Oldanix + move *a8(OXPOS),a14 + sub a0,a14 + move a14,*a8(OXPOS) + + move *a10+,a0 + calla PRCSLP +#lp + move *a10+,a1,L ;New *img or is seq complete? + jrnz #lptop ; br=new *img + + jruc chldr_ani + + +;-------------------- +; Bench/crowd ani seq lists + +;BNCHPL_LST +; LW BNCHPL02,9 +; LW BNCHPL03,8 + +; LW BNCHPL04,8 +; LW BNCHPL05,7 +; LW BNCHPL06,7 +; LW BNCHPL07,7 +; LW BNCHPL06,7 +; LW BNCHPL05,8 +; LW BNCHPL04,8 +; LW BNCHPL03,9 + +; LW BNCHPL02,9 +; LWL0 BNCHPL01,3*60 + +;COACH_LST +; LW COACH02,9 +; LW COACH03,9 +; LW COACH04,9 +; LW COACH05,9 +; LW COACH06,9 +; LW COACH05,9 +; LW COACH04,9 +; LW COACH03,9 +; LW COACH02,9 +; LWL0 COACH01,3*60 + + +CR0FST_LST + LW CR0FST02n,8 + LW CR0FST03n,7 + LW CR0FST04n,6 + LW CR0FST05n,5 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,6 + LW CR0FST05n,7 + LW CR0FST06n,6 + LW CR0FST07n,8 + LW CR0FST06n,7 + LW CR0FST07n,7 + LW CR0FST06n,6 + LW CR0FST05n,6 + LW CR0FST04n,6 + LW CR0FST03n,7 + LW CR0FST02n,8 + LWL0 CR0FST01n,3*60 + +;CR1FST_LST +; LW CR1FST02,8 +; LW CR1FST03,7 +; LW CR1FST04,6 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,5 +; LW CR1FST05,5 +; LW CR1FST06,6 +; LW CR1FST07,7 +; LW CR1FST06,6 +; LW CR1FST05,6 +; LW CR1FST04,7 +; LW CR1FST03,8 +; LW CR1FST02,9 +; LWL0 CR1FST01,3*60 + +CR2FST_LST + LW CR2FST02,8 + LW CR2FST03,7 + LW CR2FST04,6 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST05,6 + LW CR2FST06,7 + LW CR2FST07,8 + LW CR2FST06,7 + LW CR2FST05,6 + LW CR2FST04,7 + LW CR2FST03,8 + LW CR2FST02,9 + LWL0 CR2FST01,3*60 + +CR3FST_LST + LW CR3FST02,7 + LW CR3FST03,6 + LW CR3FST04,5 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,5 + LW CR3FST06,6 + LW CR3FST07,8 + LW CR3FST06,6 + LW CR3FST05,6 + LW CR3FST04,6 + LW CR3FST03,7 + LW CR3FST02,8 + LWL0 CR3FST01,3*60 + +;CR4FST_LST +; LW CR4FST02,8 +; LW CR4FST03,7 +; LW CR4FST04,6 +; LW CR4FST05,5 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,6 +; LW CR4FST05,7 +; LW CR4FST06,6 +; LW CR4FST07,8 +; LW CR4FST06,7 +; LW CR4FST07,7 +; LW CR4FST06,6 +; LW CR4FST05,6 +; LW CR4FST04,6 +; LW CR4FST03,7 +; LW CR4FST02,8 +; LWL0 CR4FST01,3*60 + + +CR1SEC_LST + LW CR1SEC02,8 + LW CR1SEC03,7 + LW CR1SEC04,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC06,6 + LW CR1SEC07,7 + LW CR1SEC06,6 + LW CR1SEC05,6 + LW CR1SEC04,7 + LW CR1SEC03,8 + LW CR1SEC02,9 + LWL0 CR1SEC01,3*60 + +CR2SEC_LST + LW CR2SEC02,8 + LW CR2SEC03,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,7 + LW CR2SEC05,7 + LW CR2SEC04,6 + LW CR2SEC05,5 + LW CR2SEC06,5 + LW CR2SEC07,8 + LW CR2SEC06,6 + LW CR2SEC05,6 + LW CR2SEC04,7 + LW CR2SEC03,8 + LW CR2SEC02,9 + LWL0 CR2SEC01,3*60 + +CR3SEC_LST + LW CR3SEC02,8 + LW CR3SEC03,7 + LW CR3SEC04,6 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC06,6 + LW CR3SEC07,8 + LW CR3SEC06,7 + LW CR3SEC05,6 + LW CR3SEC04,7 + LW CR3SEC03,8 + LW CR3SEC02,9 + LWL0 CR3SEC01,3*60 + +CR4SEC_LST + LW CR4SEC02,7 + LW CR4SEC03,6 + LW CR4SEC04,5 + LW CR4SEC05,5 + LW CR4SEC06,5 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,6 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC06,4 + LW CR4SEC07,7 + LW CR4SEC06,5 + LW CR4SEC05,5 + LW CR4SEC04,6 + LW CR4SEC03,7 + LW CR4SEC02,8 + LWL0 CR4SEC01,3*60 + +CR5SEC_LST + LW CR5SEC02,8 + LW CR5SEC03,7 + LW CR5SEC04,6 + LW CR5SEC05,6 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC07,7 + LW CR5SEC06,6 + LW CR5SEC05,6 + LW CR5SEC06,5 + LW CR5SEC07,7 + LW CR5SEC06,8 + LW CR5SEC05,8 + LW CR5SEC04,8 + LW CR5SEC02,9 + LWL0 CR5SEC01,3*60 + + +CR1THD_LST + LW CR1THD02,8 + LW CR1THD03,7 + LW CR1THD04,6 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,5 + LW CR1THD06,5 + LW CR1THD07,5 + LW CR1THD06,5 + LW CR1THD05,6 + LW CR1THD04,7 + LW CR1THD03,8 + LW CR1THD02,9 + LWL0 CR1THD01,3*60 + +CR2THD_LST + LW CR2THD02,8 + LW CR2THD03,7 + LW CR2THD04,6 + LW CR2THD05,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD07,6 + LW CR2THD06,6 + LW CR2THD05,6 + LW CR2THD04,7 + LW CR2THD03,8 + LW CR2THD02,9 + LWL0 CR2THD01,3*60 + +CR3THD_LST + LW CR3THD02,8 + LW CR3THD03,7 + LW CR3THD04,6 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,5 + LW CR3THD06,5 + LW CR3THD07,5 + LW CR3THD06,5 + LW CR3THD05,6 + LW CR3THD04,7 + LW CR3THD03,8 + LW CR3THD02,9 + LWL0 CR3THD01,3*60 + +CR4THD_LST + LW CR4THD02,8 + LW CR4THD03,7 + LW CR4THD04,6 + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,5 + +; LW CR4THD06,5 +; LW CR4THD07,5 +; LW CR4THD06,5 + LW CR4THD04,5 + LW CR4THD05,5 + LW CR4THD04,5 + + LW CR4THD05,6 + LW CR4THD04,7 + LW CR4THD03,8 + LW CR4THD02,9 + LWL0 CR4THD01,3*60 + + +OTD_CHLDR_LST_LFT + LW CHEERA02,5 + LW CHEERA03,5 + LW CHEERA04,5 + LW CHEERA05,5 + LW CHEERA06,5 + LW CHEERA07,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA09,5 + LW CHEERA10,5 + LW CHEERA09,5 + LW CHEERA08,5 + LW CHEERA07,5 + LW CHEERA06,5 + LW CHEERA05,5 + LW CHEERA04,5 + LW CHEERA03,5 + LW CHEERA02,5 + LWL0 CHEERA01,3*60 + +OTD_CHLDR_LST_RGT + LW CHEERB02,5 + LW CHEERB03,5 + LW CHEERB04,5 + LW CHEERB05,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB07,5 + LW CHEERB08,5 + LW CHEERB09,5 + LW CHEERB08,5 + LW CHEERB07,5 + LW CHEERB06,5 + LW CHEERB05,5 + LW CHEERB04,5 + LW CHEERB03,5 + LW CHEERB02,5 + LWL0 CHEERB01,3*60 + + +;-------------------- +; Some palettes since imgpal6 can't be included + +CHEERA_P: + .word 127 + .word 0322CH,07F98H,07F77H,07F56H,07F35H,07F34H,07B15H,07B14H + .word 07B57H,07B56H,076F3H,072D3H,070E9H,06EB1H,06ED2H,06AB1H + .word 06AD2H,06690H,06670H,0662EH,0624FH,06271H,06291H,05E2EH + .word 05E2FH,05E4EH,05929H,05A0EH,05A4FH,05A2FH,058A6H,05864H + .word 05A0CH,058E7H,055ECH,055AAH,055EDH,051CBH,0520DH,051EDH + .word 051CAH,04D08H,04D29H,04DAAH,04CA6H,04DABH,04D49H,04CC6H + .word 049ABH,04844H,048E7H,048A6H,04929H,049CCH,0498AH,04842H + .word 04884H,04569H,04568H,04526H,04528H,044C6H,0418AH,04148H + .word 04169H,040E7H,03CE6H,03D06H,03D29H,03D27H,03CA5H,03C63H + .word 03C84H,03907H,03906H,03842H,03949H,038E7H,03948H,03865H + .word 034E6H,034C4H,034A5H,03464H,034A4H,030C6H,03106H,030C4H + .word 030E7H,03107H,02CA5H,02C42H,02C63H,02CA4H,028C4H,02884H + .word 024A5H,024C6H,02463H,02442H,02422H,02085H,02084H,02040H + .word 01C64H,01C42H,01C21H,01C82H,01C00H,01C23H,01842H,01422H + .word 01400H,01001H,01040H,0C00H,0800H,020A7H,01865H,01023H + .word 0801H,02D29H,024C7H,01C65H,01844H,01423H,01042H + +CHEERB_P: + .word 126 + .word 0318CH,07FBCH,07F57H,07F35H,07F56H,07B9AH,07B15H,07B14H + .word 07779H,07758H,076F4H,072D3H,07358H,06F37H,06F16H,06ED2H + .word 06EB2H,06B17H,06AF5H,06B16H,06A91H,066B3H,066D4H,06670H + .word 06690H,06292H,062D4H,0624FH,0624EH,05E71H,05EB3H,05E2EH + .word 05E2FH,05A93H,05A0EH,05A2FH,055ECH,05671H,0560CH,051EDH + .word 051CCH,0520EH,05251H,0522FH,05188H,051CAH,04DAAH,04DABH + .word 0498AH,049EDH,049ABH,04A0FH,04526H,04568H,041ABH,04148H + .word 04169H,0418AH,041CCH,03D27H,03D06H,03949H,03927H,03948H + .word 034E6H,03108H,030C6H,03106H,030C4H,02CA4H,02CA5H,028C5H + .word 02907H,02884H,028C4H,024A5H,02462H,02084H,01C42H,01C64H + .word 01843H,01842H,01422H,01041H,01001H,01000H,0800H,03EFBH + .word 03ADAH,02A99H,01E77H,01657H,01236H,0E36H,0615H,01F5H + .word 01D4H,01D4H,01B3H,01B3H,0192H,0192H,0192H,0171H + .word 0171H,0150H,012FH,012FH,0EDH,0CAH,0ABH,0845H + .word 07FFEH,07BDDH,077BCH,0841H,04A32H,041F0H,03DCFH,02D4BH + .word 0292AH,024E9H,01866H,01024H,06F9CH,056D6H + +HOT_R_P: + .word 16 + .word 00H,07C00H,07D6BH,07DADH,07E10H,07E73H,07ED6H,07F39H + .word 07FFFH,07FFFH,07F39H,07EB5H,07E52H,07DCEH,07D6BH,07C00H + +HOT_B_P: + .word 16 + .word 00H,01FH,0253FH,0319FH,0421FH,04E7FH,05ADFH,0673FH + .word 07FFFH,07FFFH,0673FH,056BFH,04A5FH,035BFH,01CFFH,01FH + +HOT_G_P: + .word 16 + .word 00H,0300H,01785H,027A9H,03BAEH,047D1H,057D5H,067F9H + .word 07FFFH,07FFFH,067F9H,053D4H,043B0H,02BAAH,01785H,0300H + +HOT_Y_P: + .word 16 + .word 00H,07E60H,07EC0H,07EE4H,07F29H,07F4DH,07F92H,07FB7H + .word 07FFFH,07FFFH,07FB7H,07F71H,07F4BH,07F05H,07EC0H,07E60H + + +#******************************* +* Turn on random advertisement +* + + SUBR random_ads + + rets + + .if 0 ;TEMP + + movi adpid,a0 + calla KIL1C + + +;left side ad + movk 01,a0 ;10 + calla RNDRNG0 + sll 5,a0 + + movi ad1_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad1ref_t,a0 + move *a0,a3,L + + move @ad1_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad1ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + move *a8(OIMG),a0,L + cmpi RF_KOM1_L,a0 + jrnz #noani0 +;Start an animation for this ad + CREATE adpid,MK3_ad + jruc #noani +#noani0 + cmpi RF_CHAL_L,a0 + jrnz #noani +;Start an animation for this ad + CREATE adpid,wwf_ad +#noani + +;right side ad + movk 3,a0 + calla RNDRNG0 + sll 5,a0 + + movi ad2_t,a1 + add a0,a1 + move *a1,a1,L + +;reflection + addi ad2ref_t,a0 + move *a0,a3,L + + move @ad2_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + +;reflection + move @ad2ref_ptr,a8,L + move a3,*a8(OIMG),L + move *a3,a2,L + move a2,*a8(OSIZE),L + move *a3(ISAG),*a8(OSAG),L + + .endif ;TEMP + +;-------------------- +; Fix crowd_p pal for floor reflections! +; + + SUBR fix_floorclr + + move @oteam1,a2 + sll 5,a2 + .ref crt_pals_z + addi crt_pals_z,a2 + move *a2,a11,L +;FIX!!! +; movi CROWD_p,a0 +; calla pal_find ;Put in PDATA??!!!! + + andi 0ff00h,a0 + + move a0,a1 ;dest pal + ori 236,a1 + move a11,a0 + + movk 9,a2 ;9 colors + calla pal_set + rets + + +ad1_t +; .long adjet +; .long adhot +ad1ref_t +; .long jetref +; .long hotref +ad2_t +; .long adnba2,adjam2 +; .long admid2,adblue2 +ad2ref_t +; .long nbaref,jamref +; .long midref,blueref + + + +;ad1_t .long ad1,adjet +; .long adhot,AD_CHAL_L,AD_KOM1_L,AD_PEK_L +; .long AD_III_L,AD_KANO_L,AD_KOM1_L,AD_KOM1_L,AD_CHAL_L +;ad1ref_t +; .long ad1ref,jetref +; .long hotref,RF_CHAL_L,RF_KOM1_L,RF_PEK_L +; .long RF_III_L,RF_KANO_L,RF_KOM1_L,RF_KOM1_L,RF_CHAL_L +; +;ad2_t .long ad2,adnba2,adjam2 +; .long adrecy2,admid2,adblue2,AD_REV_R,AD_SMO_R,AD_MUS_R +;ad2ref_t +; .long ad2ref,nbaref,jamref +; .long recycref,midref,blueref,RF_REV_R,RF_SMO_R,RF_MUS_R + + +wwf_t +; .long AD_CHAL_L,RF_CHAL_L +; .long AD_WWF_L,RF_WWF_L +; .long 0 + +MK3_t +; .long AD_KOM1_L,5*60 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,4 +; .long AD_KOM2_L,4 +; .long AD_KOM1_L,30 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long AD_KOM1_L,5 +; .long AD_KOM2_L,5 +; .long 0 + +;-------------------- + + SUBRP wwf_ad + + movi wwf_t,a9 +wwf_lp + move *a9+,a0,L + jrz wwf_ad + move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection + move @ad1ref_ptr,a8,L + move a1,*a8(OIMG),L + move *a1,a2,L + move a2,*a8(OSIZE),L + move *a1(ISAG),*a8(OSAG),L + + SLEEP 120 + jruc wwf_lp + + + SUBRP MK3_ad + + movi MK3_t,a9 +mk3_lp + move *a9+,a0,L + jrz MK3_ad +; move *a9+,a1,L + + move @ad1_ptr,a8,L + move a0,*a8(OIMG),L + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + +;reflection +; move @ad1ref_ptr,a8,L +; move a1,*a8(OIMG),L +; move *a1,a2,L +; move a2,*a8(OSIZE),L +; move *a1(ISAG),*a8(OSAG),L + + move *a9+,a0,L + calla PRCSLP + jruc mk3_lp + + +#******************************** +* Animate backboard to proper angle (Process) +* A8=*Object (left) + + .ref bbshatter + + .bss bbrgt_p ,32 ;*Rgt bboard + + .asg 244-16,BOARD_ANI_MINX ;-16 to make hoop be off-screen also + + SUBRP backboard_ani + + SLEEPK 30 + + move @bbrgt_p,a9,L ;Init ptr to rgt hoop obj + movi bbshatter,a10 ;Init ptr to shattered flag + movi gndx+16,a11 ;Init ptr to look at current court X +#lp + move a8,a6 ;Set for lft hoop + move *a11,a0 ;Chk current crt X + jrn #lft + move a9,a6 ;Set for rgt hoop +#lft + abs a0 + subi BOARD_ANI_MINX,A0 ;Too far away (hoop off screen)? + jrn #fixbb ;Yes if neg + + srl 4,a0 ;Shf X down for anim-step # + sll 5,a0 ;Shf up for tbl offset + addi #ani_t,a0 + move @pup_court,a14 ;Outdoor court? +;; jrz #nootd ; br=no + jrz #bok ; br=no + addi #ani_otd_t-#ani_t,a0,W ;Set ptr to shattered tbl +;; jruc #bok +;;#nootd +;; move *a10,a14 ;Is bkbrd shattered? No if 0 +;;;FIX!!! +;; jruc #bok ;Skip code for bboard shatter ani +;; jrz #bok +;; addi #sani_t-#ani_t,a0,W ;Set ptr to shattered tbl +#bok + move *a0,a0,L ;Deref for new backboard ptr + move *a6(OIMG),a14,L ;Get old *bkbrd + cmp a14,a0 ;New image? + jrz #slp ; br=yes + move *a14,a1 ;Get old bkbrd ISIZEX:IANIOFFX + move *a14(IANIOFFX),a2 + sll 16,a1 + movx a2,a1 + + move a0,*a6(OIMG),L ;Set new *bkbrd,OSAG,OSIZE + move *a0(ISAG),*a6(OSAG),L + movb *a0(ICTRL+7),a14 ;Set 5 z comp & 3 bpp bits + movb a14,*a6(OCTRL+7) + move *a0(ISIZE),a14,L + move a14,*a6(OSIZE),L + move *a0(IANIOFFX),a2 ;Get new bkbrd ISIZEX:IANIOFFX + sll 16,a14 + movx a2,a14 + + subxy a14,a1 ;Calc XY SIZE:ANI changes + cmp a8,a6 ;Doing lft or rgt hoop? Lft if = + jreq #nof + move a1,a14 ;Rgt hoop. Assume(!) it is the FLIPH + sra 16,a14 ; of lft hoop & correct ani X with + sext a1 ; hoop SIZEX diff + neg a1 + add a14,a1 +#nof + move *a6(OXPOS),a14 ;Correct X for change in size/ani + addxy a1,a14 + move a14,*a6(OXPOS) +; +; move *a0,a0,L ;deref for new OSIZE +; move *a6(OSIZE),a1,L ;get old OSIZE +; move a0,*a6(OSIZE),L +; +; subxy a1,a0 ;calc XY size changes +; jrxz #slp ;any X change? +; move *a6(OFLAGS),a1 ;yes, lets assume some more! +; btst B_FLIPH,a1 ;don't worry about it if its not +; jrz #slp ; flipped +; move *a6(OXPOS),a1 ;correct X for change in size +; subxy a0,a1 +; move a1,*a6(OXPOS) +; +#slp SLEEPK 1 + + .if CRTALGN + move @P1CTRL,a14 ;Make hoops go away if owners press + move @P2CTRL,a0 ; TURBO so hoop dot align can be + or a0,a14 ; checked + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimrf,a1,L ;*Rgt hoop objs + move @rimrb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a9(OFLAGS),a0 ;Rgt bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a9(OFLAGS) +; movi OBJLST,A1 ;Find rgt rimbase & do it too +;#fndbr move *a1,a1,L +; jrz #nobr ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbr ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrn #fndbr +; move *a1(OFLAGS),a0 ;Rgt rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobr + move @P3CTRL,a14 + move @P4CTRL,a0 + or a0,a14 + xori BUT3_M,a14 + andi BUT3_M,a14 + srl BUT3_B-B_3DQ,a14 + move @rimlf,a1,L ;*Lft hoop objs + move @rimlb,a2,L + move *a1(OFLAGS),a0 + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a1(OFLAGS) + move a0,*a2(OFLAGS) + move *a8(OFLAGS),a0 ;Lft bbrd obj + andi ~M_3DQ,a0 + or a14,a0 + move a0,*a8(OFLAGS) +; movi OBJLST,A1 ;Find lft rimbase & do it too +;#fndbl move *a1,a1,L +; jrz #nobl ;End? +; move *a1(OIMG),a2,L +; cmpi rimbase,a2 +; jrne #fndbl ;No match? +; move *a1(OXPOS),a2 ;The side we want? +; jrnn #fndbl +; move *a1(OFLAGS),a0 ;Lft rimbase +; andi ~M_3DQ,a0 +; or a14,a0 +; move a0,*a1(OFLAGS) +;#nobl + .endif + + jruc #lp + +#fixbb clr a0 ;Hoop off-screen. Make sure it won't + move a0,*a10 ; be shattered next time we see it + + move @rimlf,a1,L ;Assume doing lft hoop + cmp a8,a6 ;Lft or rgt? Lft if = + jreq #fxbb1 + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#fxbb1 + move *a1(OIMG),a1,L ;Deref *obj + cmpi RIM0_F_00,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT Start + cmpi CHAN1F_01,a1,L ;Is it norm hoop img? Yes if = + jreq #slp +;DJT End + clr a1 ;No. Do netani to reset the hoop + callr net_ani + jruc #slp + + +#ani_t +;Indoor court backboard + .long back2 ;Fill for BOARD_ANI_MINX -16 + + .long back2,back3,back4,back5,back6,back7,back8 + .long back9,back10,back10,back10,back10 + +#ani_otd_t +;Outdoor court backboard + .long nback2 ;Fill for BOARD_ANI_MINX -16 + + .long nback2,nback3,nback4,nback5,nback6,nback7,nback8 + .long nback9,nback10,nback10,nback10,nback10 + +#sani_t +; .long bturn_5,bturn_4,bturn_3,bturn_2,bturn_1,bbord_10 +; .long bbord_10,bbord_10,bbord_10,bbord_10 + + +;-------------------- +; Save the right backboard object ptr (Process) + + SUBRP backboard_svrptr + + move a8,@bbrgt_p,L + DIE + + +#******************************** +* Animate net/rim after made or missed shot +* A0=0 if left hoop, !0 if rgt hoop +* A1=Ani seq # (0-17) +* Trashes scratch + + SUBR net_ani + + PUSH a7,a8,a9,a10 + + move a0,a0 + jrz #lft + move @rimrf,a8,L ;*Right hoop objs + move @rimrb,a9,L + jruc #tag +#lft + move @rimlf,a8,L ;Left ^ + move @rimlb,a9,L +#tag + sll 5,a1 + addi #net_t,a1 + move @pup_court,a14 + jrz #tag1 + addi #netc_t-#net_t,a1 +#tag1 + move *a1,a10,L + CREATE HOOP_PID,do_net_ani + PULL a7,a8,a9,a10 + rets + +;-------------------- + +#net_t .long netrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long net00_l,net01_l ;Deep Z - out far + .long net02_l,net03_l ;Deep Z - in close + .long net04_l,net05_l ;Mid Z - out far + .long net06_l,net07_l ;Mid Z - in close + .long net08_l,net09_l ;Near Z - out far + .long net10_l,net11_l ;Near Z - in close + + .long net12_l ;Missed shot rim bend - out far + .long net13_l ;Missed shot rim bend - in close + + .long net14_l ;Soft ball roll in + .long net15_l ;Dunk shot rim bend + .long net16_l ;Shatter backboard + + .long net17_l ;On-fire shot net burn + .long net18_l ;On-fire shot net burn + +;-------------------- + +#netc_t .long netcrst_l ;Net ani reset + .long 0 ;(make next ani's start even #'d) + + .long netc00_l,netc01_l ;Deep Z - out far + .long netc02_l,netc03_l ;Deep Z - in close + .long netc04_l,netc05_l ;Mid Z - out far + .long netc06_l,netc07_l ;Mid Z - in close + .long netc08_l,netc09_l ;Near Z - out far + .long netc10_l,netc11_l ;Near Z - in close + + .long netc12_l ;Missed shot rim bend - out far + .long netc13_l ;Missed shot rim bend - in close + + .long netc14_l ;Soft ball roll in + .long netc15_l ;Dunk shot rim bend + .long netc16_l ;Shatter backboard + + .long netc17_l ;On-fire shot net burn + .long netc18_l ;On-fire shot net burn + + +******************************** + +do_net_ani + +#lp move *a10+,a0,L + jaz SUCIDE + jrp #slp + + move *a10+,a3,L + + setf 3,0,0 + move *a0(ICTRL+12),a14 + move a14,*a8(OCTRL+12) ;Write bits per pixel + move *a3(ICTRL+12),a14 + move a14,*a9(OCTRL+12) + setf 16,1,0 + + move *a8(OFLAGS),a1 + calla obj_aniq + + move a3,a0 + move a8,a2 + move a9,a8 + move *a8(OFLAGS),a1 + calla obj_aniq + move a2,a8 + + movk 4,a0 +#slp + calla PRCSLP + jruc #lp + +;-------------------- + +netrst_l + .long RIM0_F_00,RIM0_B_00,0 ;Net ani reset + +net00_l +net01_l + .long 4 + .long RIM7_F_01,RIM7_B_01 ;Deep Z - out far + .long RIM7_F_02,RIM7_B_02 + .long RIM7_F_03,RIM7_B_03 + .long RIM7_F_04,RIM7_B_04 + .long RIM7_F_05,RIM7_B_05 + .long RIM7_F_06,RIM7_B_06 + .long RIM7_F_07,RIM7_B_07 + .long RIM7_F_08,RIM7_B_08 + .long RIM7_F_09,RIM7_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM7_F_11,RIM7_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net02_l +net03_l + .long 3 + .long RIM8_F_01,RIM8_B_01 ;Deep Z - in close + .long RIM8_F_02,RIM8_B_02 + .long RIM8_F_03,RIM8_B_03 + .long RIM8_F_04,RIM8_B_04 + .long RIM8_F_05,RIM8_B_05 + .long RIM8_F_06,RIM8_B_06 + .long RIM0_F_00,RIM0_B_00,0 + +net04_l +net05_l + +net06_l ;Mid Z - in close +net07_l + .long 1 + .long RIM2_F_01,RIM2_B_01 ;Mid Z - out far + .long RIM2_F_02,RIM2_B_02 + .long RIM2_F_03,RIM2_B_03 + .long RIM2_F_04,RIM2_B_03 + .long RIM2_F_05,RIM2_B_05 + .long RIM2_F_06,RIM2_B_06 + .long RIM0_F_00,RIM0_B_00 + .long RIM2_F_08,RIM2_B_08 + .long RIM0_F_00,RIM0_B_00,0 + +net10_l +net11_l + ;Near Z - in close +net08_l +net09_l + .long 3 + .long RIM1_F_01,RIM1_B_01 ;Near Z - out far + .long RIM1_F_02,RIM1_B_02 + .long RIM1_F_03,RIM1_B_03 + .long RIM1_F_04,RIM1_B_03 + .long RIM1_F_05,RIM1_B_03 + .long RIM1_F_06,RIM1_B_06 + .long RIM1_F_07,RIM1_B_07 + .long RIM1_F_08,RIM1_B_08 + .long RIM1_F_09,RIM1_B_09 + .long RIM1_F_10,RIM1_B_10 + .long RIM1_F_11,RIM1_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net12_l + .long RIM3_F_01,RIM3_B_01 ;Missed shot rim bend - out far + .long RIM3_F_02,RIM3_B_02 + .long RIM4_F_01,RIM4_B_01 + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net13_l + .long RIM5_F_01,RIM5_B_01 ;Missed shot rim bend - in close + .long RIM0_F_00,RIM0_B_00 + .long RIM5_F_03,RIM5_B_03 + .long RIM0_F_00,RIM0_B_00,0 + +net14_l + .long RIM4_F_01,RIM4_B_01 ;Soft ball roll in + .long RIM0_F_00,RIM0_B_00 + .long RIM4_F_02,RIM4_B_02 + .long RIM0_F_00,RIM0_B_00,0 + +net15_l + .long RIM3_F_01,RIM3_B_01 ;Dunk shot rim bend + .long RIM3_F_02,RIM3_B_02 + .long RIM3_F_03,RIM3_B_03 + .long RIM3_F_04,RIM3_B_04 + .long RIM3_F_05,RIM3_B_05 + .long RIM3_F_06,RIM3_B_06 + .long RIM3_F_07,RIM3_B_07 + .long RIM3_F_08,RIM3_B_08 + .long RIM3_F_09,RIM3_B_09 + .long RIM0_F_00,RIM0_B_00 + .long RIM3_F_11,RIM3_B_11 + .long RIM0_F_00,RIM0_B_00,0 + +net16_l +; .long rimbndF_1,rimbndB_1 ;Shatter backboard +; .long rimbndF_2,rimbndB_2 +; .long rimbndF_3,rimbndB_3 +; .long rimbndF_4,rimbndB_4 +; .long rimbndF_5,rimbndB_5 +; .long rimbndF_6,rimbndB_6 +; .long rimbndF_7,rimbndB_7 +; .long rimbndF_8,rimbndB_8 +; .long rimbndF_9,rimbndB_9 +; .long rimbndF_10,rimbndB_10 +; .long rimbndF_11,rimbndB_11 +; .long rimbndF_12,rimbndB_12 +; .long rimbndF_13,rimbndB_13 +; .long rimbndF_14,rimbndB_14 +; .long rimbndF_15,rimbndB_15 +; .long rimbndF_16,rimbndB_16 +; .long rimbndF_17,rimbndB_17 + .long RIM0_F_00,RIM0_B_00,0 + +net17_l +netc17_l + .long FLAME_F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME_F_02,RIM0_B_00 + .long FLAME_F_03,RIM0_B_00 + .long FLAME_F_04,RIM0_B_00 + .long FLAME_F_05,RIM0_B_00 + .long FLAME_F_06,RIM0_B_00 + .long FLAME_F_07,RIM0_B_00 + .long FLAME_F_08,RIM0_B_00 + .long FLAME_F_09,RIM0_B_00 + .long FLAME_F_10,RIM0_B_00 + .long FLAME_F_11,RIM0_B_00 + .long FLAME_F_12,RIM0_B_00 + .long FLAME_F_13,RIM0_B_00,0 + +net18_l +netc18_l + .long FLAME2F_01,RIM0_B_00 ;On-fire shot net burn + .long FLAME2F_02,RIM0_B_00 + .long FLAME2F_03,RIM0_B_00 + .long FLAME2F_04,RIM0_B_00 + .long FLAME2F_05,RIM0_B_00 + .long FLAME2F_06,RIM0_B_00 + .long FLAME2F_07,RIM0_B_00 + .long FLAME2B_08,RIM0_B_00 + .long FLAME2B_09,RIM0_B_00 + .long FLAME2B_10,RIM0_B_00 + .long FLAME2B_11,RIM0_B_00 + .long FLAME2B_12,RIM0_B_00 + .long FLAME2F_13,RIM0_B_00,0 + +;-------------------- + +netcrst_l +netc16_l + .long CHAN1F_01,CHAN1B_01,0 ;Net ani reset + +netc04_l +netc05_l + +netc06_l ;Mid Z - in close +netc07_l + .long 1 + .long CHAN2F_01,CHAN2B_01 ;Mid Z - out far + .long CHAN2F_02,CHAN2B_02 + .long CHAN2F_03,CHAN2B_03 + .long CHAN2F_04,CHAN2B_04 + .long CHAN2F_05,CHAN2B_05 + .long CHAN2F_06,CHAN2B_06 + .long CHAN1F_01,CHAN1B_01 + .long CHAN2F_07,CHAN2B_07 + .long CHAN1F_01,CHAN1B_01,0 + +netc02_l +netc03_l + ;Deep Z - in close +netc10_l +netc11_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - in close + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc00_l +netc01_l + ;Deep Z - out far +netc08_l +netc09_l +; .long 3 + .long CHAN1F_01,CHAN1B_01 ;Near Z - out far + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_04,CHAN1B_04 + .long CHAN1F_05,CHAN1B_05 + .long CHAN1F_06,CHAN1B_06 + .long CHAN1F_07,CHAN1B_07 + .long CHAN1F_08,CHAN1B_08 + .long CHAN1F_09,CHAN1B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN1F_10,CHAN1B_10 + .long CHAN1F_01,CHAN1B_01,0 + +netc12_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - out far + .long CHAN3F_02,CHAN3B_02 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc13_l + .long CHAN3F_01,CHAN3B_01 ;Missed shot rim bend - in close + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_01,CHAN3B_01 + .long CHAN1F_01,CHAN1B_01,0 + +netc14_l + .long CHAN1F_01,CHAN1B_01 ;Soft ball roll in + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_03,CHAN1B_03 + .long CHAN1F_02,CHAN1B_02 + .long CHAN1F_01,CHAN1B_01,0 + +netc15_l + .long CHAN3F_01,CHAN3B_01 ;Dunk shot rim bend + .long CHAN3F_02,CHAN3B_02 + .long CHAN3F_03,CHAN3B_03 + .long CHAN3F_04,CHAN3B_04 + .long CHAN3F_05,CHAN3B_05 + .long CHAN3F_06,CHAN3B_06 + .long CHAN3F_07,CHAN3B_07 + .long CHAN3F_08,CHAN3B_08 + .long CHAN3F_09,CHAN3B_09 + .long CHAN1F_01,CHAN1B_01 + .long CHAN3F_10,CHAN3B_10 + .long CHAN1F_01,CHAN1B_01,0 + +#***************************************************************************** +* +* Start secret powerup processes at start of matchup_screen +* +* This gets called once each GAME for every player in the game. +* It creates the set of 'watchdog' processes that look out for special +* joystick/button moves for powerups. +* +* If someone buys in after these have started, tough luck... +* + + STRUCTPD + WORD STKREL_P1 + WORD STKREL_P2 + WORD STKREL_P3 + WORD STKREL_P4 + + SUBR start_powerups + + movk 3,a9 + move a13,a8 + addi PDATA+48,a8 + .ref PSTATUS +#lp move @PSTATUS,a0 + btst a9,a0 + jrz #inc + + movi #special_moves,a2 ;This player in game, start processes +#loop + move *a2+,a7,L + jrz #inc + movi SMOVE_PID,a1 + calla GETPRC + jruc #loop +#inc + subk 16,a8 + subk 1,a9 + jrnn #lp + + clr a8 + clr a9 + clr a10 + clr a11 + move a8,*A13(STKREL_P1) + move a8,*A13(STKREL_P2) + move a8,*A13(STKREL_P3) + move a8,*A13(STKREL_P4) +#stklp + SLEEPK 1 ;>Track stick transitions + .ref joy_read2 + calla joy_read2 + +;DJT Start + move @P1CTRL,a0 + xor a0,a8 + sll 32-7,a8 + jrz #no1 + move a0,a8 + sll 32-7,a8 + srl 32-7,a8 +#no1 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a8 + move a8,*A13(STKREL_P1) + srl 8,a0 + move a0,a8 + + move @P2CTRL,a0 + xor a0,a9 + sll 32-7,a9 + jrz #no2 + move a0,a9 + sll 32-7,a9 + srl 32-7,a9 +#no2 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a9 + move a9,*A13(STKREL_P2) + srl 8,a0 + move a0,a9 + + move @P3CTRL,a0 + xor a0,a10 + sll 32-7,a10 + jrz #no3 + move a0,a10 + sll 32-7,a10 + srl 32-7,a10 +#no3 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a10 + move a10,*A13(STKREL_P3) + srl 8,a0 + move a0,a10 + + move @P4CTRL,a0 + xor a0,a11 + sll 32-7,a11 + jrz #no4 + move a0,a11 + sll 32-7,a11 + srl 32-7,a11 +#no4 + sll 32-7,a0 + srl 32-7-8,a0 + or a0,a11 + move a11,*A13(STKREL_P4) + srl 8,a0 + move a0,a11 +;DJT End + + jruc #stklp + + +****************************************************************************** +* +* SPECIAL MOVE PROCESSES - Secret moves +* + +#special_moves + + .long sp_lockcombo + .long sp_bighead + .long sp_hugehead + .long sp_showshotper +;DJT Start + .long sp_showhotspot +;DJT End + .long sp_notag + .long sp_nodrift + .long sp_noassistance + .long sp_aba + .long sp_court + .long sp_special + .long 0 + + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;;#TIMEOUT .equ 40 + +sp_lockcombo + + SLEEPK 1 + move *a8,a0 +;DJT andi JOY_DOWN|JOY_LEFT|JOY_RIGHT,a0 + andi JOY_DOWN,a0 + jrz sp_lockcombo + +;; cmpi :SWITCHES:,a0 +;; jrne :FAILADDR: +;;#lp +;; clr a11 +;; +;; WAITSWITCH_DWN JOY_UP,0,#lp +;; +;; movi #TIMEOUT,a11 +;; +;; WAITSWITCH_DWN JOY_UP_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +;; WAITSWITCH_DWN JOY_DOWN,0,#lp +;; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_LEFT,0,#lp +;; WAITSWITCH_DWN JOY_UP_LEFT,0,#lp + +;a9=0-3 for player + .ref pup_lockcombo + move @pup_lockcombo,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_lockcombo + +;DJT Start + movi lock_cmbo_snds,a11 + jruc pupsnd +;DJT moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 60 + +sp_bighead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP|BUT_TURBO|BUT_PASS,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_bighead + .ref pup_hugehead + move @pup_bighead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_bighead + move @pup_hugehead,a0 + andn a1,a0 + move a0,@pup_hugehead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT flash_backdrop moved down +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_hugehead + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + move @pup_hugehead,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_hugehead + move @pup_bighead,a0 + andn a1,a0 + move a0,@pup_bighead + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 55 +#TIMEOUT .equ 60 + +sp_showshotper + + SLEEPK 1 +#lp +; clr a11 +; +; WAITSWITCH_DWN JOY_LEFT,0,#lp +; +; movi #TIMEOUT,a11 +; +; WAITSWITCH_DWN JOY_DOWN_LEFT,0,#lp +; WAITSWITCH_DWN JOY_DOWN,0,#lp +; WAITSWITCH_DWN JOY_DOWN_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT,0,#lp +; WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,0,#lp + + +;Make easier - just 360 swirl + + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_DOWN,#lp,1 + WAITSWITCH_DWN JOY_DOWN_LEFT,#lp,1 + WAITSWITCH_DWN JOY_LEFT,#lp,1 + WAITSWITCH_DWN JOY_UP_LEFT,#lp,1 + +;a9=0-3 for player + movi pwrup_snds,a11 + .ref pup_showshotper + move @pup_showshotper,a0 + jrnz pupflash +;DJT End + + movk 1,a0 + sll a9,a0 + move a0,@pup_showshotper + +;DJT Start + jruc pupflash + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_showhotspot + + SLEEPK 1 +#lp + clr a11 + + WAITSWITCH_DWN JOY_UP,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_UP,#lp,1 + WAITSWITCH_DWN JOY_UP|BUT_SHOOT,#lp,1 + +;a9=0-3 for player + .ref pup_showhotspots + move @pup_showhotspots,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_showhotspots + + movi pwrup_snds,a11 + jruc pupflash + +;DJT End +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_notag + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_LEFT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_LEFT,#lp,0 + WAITSWITCH_DWN BUT_PASS,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_notag + move @pup_notag,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_notag + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 50 +#TIMEOUT .equ 60 + +sp_nodrift + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_DOWN,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_DOWN,#lp,0 + WAITSWITCH_DWN BUT_SHOOT,#lp,0 + WAITSWITCH_DWN BUT_TURBO,#lp,0 +;DJT End + +;a9=0-3 for player + .ref pup_nodrift + move @pup_nodrift,a0 + movk 1,a1 + sll a9,a1 + or a1,a0 + move a0,@pup_nodrift + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash + +;; clr a3 +;; movi msg_nodrift_setup,a2,L +;; movi msg_nodrift,a4,L +;; movi pwrup_snds,a11 +;; +;; jruc pupmsg +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +#TIMEOUT .equ 60 + +sp_noassistance + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + .ref pup_noassistance + movk 1,a0 + move a0,@pup_noassistance + +;DJT Start + movi pwrup_snds,a11 + jruc pupflash +;DJT End + +#******************************************************************************* +* a8=PnCTRL for this player +* a9=plyr # + +;#TIMEOUT .equ 40 +#TIMEOUT .equ 60 + +sp_aba + + SLEEPK 1 +#lp + clr a11 + +;DJT Start + WAITSWITCH_DWN JOY_RIGHT,#lp,0 + + movi #TIMEOUT,a11 + + WAITSWITCH_DWN JOY_RIGHT|BUT_SHOOT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_TURBO,#lp,1 + WAITSWITCH_DWN JOY_RIGHT,#lp,1 + WAITSWITCH_DWN JOY_RIGHT|BUT_PASS,#lp,1 +;DJT End + +;a9=0-3 for player + movk 1,a0 + move a0,@pup_aba + +;DJT Start + movk 1<i:\~bktest +if exist i:\~bktest goto DO +echo You should probably log-on to the net first. +echo. +goto END + +:DO +set ~bka=/m +if "%1"=="/a" set ~bka= +if "%1"=="/A" set ~bka= +i: +if not exist c:\video\doc\*.* goto NEXT + +echo Backing up DOC directory... +cd \video\doc +cd c:\video\doc +xcopy c:*.* /v %~bka% +echo Backing up basketball... + +:NEXT +cd \video\bball +cd c:\video\bball +xcopy c:makefile /v %~bka% +xcopy c:_marker_ /v %~bka% +xcopy c:*.asm /v %~bka% +xcopy c:*.bat /v %~bka% +xcopy c:*.cmd /v %~bka% +xcopy c:*.doc /v %~bka% +xcopy c:*.equ /v %~bka% +xcopy c:*.hdr /v %~bka% +xcopy c:*.ini /v %~bka% +xcopy c:*.tv /v %~bka% +xcopy c:*.tvs /v %~bka% + +cd img +cd c:img +xcopy c:_marker_ /v %~bka% +xcopy c:*.bdb /v %~bka% +xcopy c:*.bdd /v %~bka% +xcopy c:*.bin /v %~bka% +xcopy c:*.img /v %~bka% +xcopy c:*.ini /v %~bka% +xcopy c:*.lod /v %~bka% +xcopy c:*.vda /v %~bka% +c: +cd .. + +:END +if exist i:\~bktest del i:\~bktest + +set ~bka= diff --git a/SRC/C.BAT b/SRC/C.BAT new file mode 100644 index 0000000..1e84f4f --- /dev/null +++ b/SRC/C.BAT @@ -0,0 +1 @@ +copy /b %1 g: /v diff --git a/SRC/CHANGES.DOC b/SRC/CHANGES.DOC new file mode 100644 index 0000000..f3bcd69 --- /dev/null +++ b/SRC/CHANGES.DOC @@ -0,0 +1,121 @@ +L1.1 -> M1.1 +-------------- +AUDIT.ASM 1) Version string + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.1 -> L1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + +L1.1 -> M1.2 +-------------- +AUDIT.ASM 1) Version string + 2) .ref moved down to ref + +BB.ASM 1) Watchdog & Process KO auditing fix + +DIAG.ASM 1) PIC # location comments + 2) ROM checksums + 3) Watchdog failure during SRAMCHECK fix + +MENU.ASM 1) .ref moved down to ref + 2) removed from + 3) Backdoor volume control Interlock switch problem fix + 4) Old high score stuff removed + 5) Old stuff removed + 6) Old design team text removed + +PLYR2.ASM 1) Jamie ball-code bug + +RECORD.ASM 1) Pts/game world record fix + 2) call added to correct hi-score leading-zero + after the decimal problem + 3) "Hi-score" comment-list corrected + 4) <#teampals> table/refs removed + 5) Backdoor player record list length fix + +SELECT2.ASM 1) Grand Champion leading-space initials crash fix + +SELECT4.ASM 1) Commented unref'd .refs + +STRING.ASM 1) routine added + +TEST.ASM 1) "DIPSWITCH TEST SELECT" message fix + +GAME.EQU 1) CMOS PKDxx .equs updated + 2) NUM_PRECORDS comments for 8K/32K CMOS support + 3) NUM_PRECORDS .equs moved to top of file + 4) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support + +L1.2 -> L1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums + +M1.2 -> M1.3 +-------------- +ATTRACT.ASM 1) Disasterous SLEEPK 8 removed from top of + to fix power-up free game bug + 2) call added to top of + to fix power-up volume problem from SLEEPK removal + +AUDIT.ASM 1) Version string + +DIAG.ASM 1) ROM checksums diff --git a/SRC/COMBOS.DOC b/SRC/COMBOS.DOC new file mode 100644 index 0000000..e103c2d --- /dev/null +++ b/SRC/COMBOS.DOC @@ -0,0 +1,55 @@ +Combo #'s on Versus Screen +-------------------------- + +025 Baby-sized players +048 Music off during game play +111 Tournament mode - no powerups allowed +120 Fast turbo passes powerup +273 Stealth turbo powerup - no shoe color change +284 Maximum speed attribute powerup +390 No pushing allowed powerup +461 Infinite turbo powerup +552 Huper turbo speed powerup +616 Shot blocking powerup +709 Maximum steal attribute powerup +802 Maximum power attribute powerup +937 Goal tending allowed powerup + +If a game has a humam v. human, both sides must enter the +same combo # for it to be active. The exception is the 111 +tournament mode combo - any one player can enter that one. + + +Joystick/Button Combos on Versus Screen +--------------------------------------- + + D - Lock combo #'s + u+t+p - Big head + U,U,P,T - Huge head + u+S,u+S - Show hotspots + UoU - Show shot percentage + L,L,P,T - No tag arrows + D,D,S,T - No drift jump powerup + r+P,r+P - No computer assistance powerup +r+S,r+T,r+P - ABA ball + l+T,l+T - Outdoor court + S,S,s+UoU - Special combo + +U=press Up D=press Down L=press Left R=press Right +u=hold up d=hold down l=hold left r=hold right + +P=press Pass S=press Shoot T=press Turbo +p=hold pass s=hold shoot t=hold turbo + ++=at the same time +o=clockwise swirl from first direction to second + + +Special Combos +-------------- +Pass button by selecting player on Team Select changes +Rodman's hair color + +When outdoor court is selected, hold joystick U+R when +exiting the Versus screen to show an MK vortex in the sky +above the right hoop diff --git a/SRC/DIAG.ASM b/SRC/DIAG.ASM new file mode 100644 index 0000000..15ff2de --- /dev/null +++ b/SRC/DIAG.ASM @@ -0,0 +1,6041 @@ +************************************************************** +* +* Owner: none +* +* Software: JAMIE BEGELMAN, KURT MAHAN, EUGENE P. JARVIS +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage clean up +* Shawn Liptak, 1/20/92 -DIP switch test +* Shawn Liptak, 1/24/92 -Added line_draw +* Shawn Liptak, 2/20/92 -Basketball cleanup +* GEORGE PETRO, 1/17/93 -NBA JAM +* JEFF JOHNSON, 6/9/95 -NBA 2 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:48 +*.Last mod - 4/12/95 4:00pm +************************************************************** + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" + .include "sys.equ" + .include mproc.equ + .include link.equ + .include imgtbl.glo +; .include "imgtbl2.glo" + .include "macros.hdr" + .INCLUDE GAME.EQU + .INCLUDE DIPSW.EQU + + + .ref _tseconds + .ref _switch_map_mode + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _watchdog_addr + .ref _dipswitch_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref InitAddresses + .ref dec_to_asc + .ref copy_string,copy_rom_string + .ref concat_string + .ref message_buffer + .ref SOUNDSUP + .ref _rtc_seconds + .ref _rtc_minutes + .ref _rtc_hours + .ref _rtc_day + .ref _rtc_date + .ref _rtc_month + .ref _rtc_year + .ref _year + .ref _month + .ref _day + .ref _serial_number + .ref _man_date + + .globl _get_time + .globl _set_time + .globl _aquire_time + + +SCRXFUDGE equ 56 +************************************************************************** +* * +* DEFS AND REFS * +* * +************************************************************************** + .ref fudge_switches, fudge_switches_diag, CKTEST, CPU_RET + .REF SNDSND,INTIO,WARMSET,GET_AUD,STORE_AUDIT,WDOGDIS + .ref dirqtimer, AUD1, GAMSTATE, KILL_AUD, PCMOSRET + .ref CLR_AUD, FAC_SET, CMOS_VAL, ROM_NAME + + .DEF POWERTST, DIAGCPUTEST, POWERCMOS + .def SWITCHTEST, SWSET1, SWSET2 + .DEF CROSS_H,COL_BARS,BURN_IN,STRNEW1 + + .DEF CIRCLE,HVLINE,STRING,RECTANGLE,POINT,DSCRCLR,INITCOLR + .DEF READ_DIP + + .REF SNDTST + .REF SYSCOPY +*SYMBOLS IN MENU.ASM + .REF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .REF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .REF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .REF DIPCOINTAB + + + .REF GET_ADJ, GET_CSPT, NO_CREDS + .REF PUT_ADJ, CRED_P, HEXTOASC, F_ADC_S, SET_COIN_ADJ + .REF init_all, mainlp, DIAG_COLORS + +* +*DIAGNOSTIC SOUND EQUATES +* +CMOS_ERROR_SND .EQU 00cah +CPU_ERROR_SND .EQU 00cah +DIP_SND .EQU 0c8h +SWITCH_SND .EQU 0c8h + +;CMOS_ERROR_SND .EQU 0FF92H +;CPU_ERROR_SND .EQU 0FF92H +;DIP_SND .EQU 0FF83H +;SWITCH_SND .EQU 0FF80H + + .BSS SWSET1,32 ; FOR SWITCH TEST + .BSS SWSET2,32 + + .BSS DIPVAL,16 + .BSS DIP1ST,16 + + .BSS FORCEDIP,16 ; FOR FORCING THE USE OF THE DIP + .BSS CERRORS,32 + .BSS CPASSES,32 + .BSS SCHANGE,16 + + .bss _snd_status,32 + .bss _b6_save,32 ; Temporary register fer me + .bss _temporary,32 ; Another temp fer me + .bss _snd_diag_code,16 ; Temporary storage for sound diag code + .bss _snd_chip_count,16 ; Temporary register fer me + .bss _pic_raw,128 ; Stuff fer the PIC + .bss _pic_temp,64 + + +************************************************************************** +* * +* USEFUL MACROS * +* * +************************************************************************** +* +* TIMED PAUSE +* +PAUSE .macro TIME, REG + MOVI :TIME:,:REG:,L +LABEL? NOP + DSJS :REG:,LABEL? + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +* +*RJST - RIGHT JUSTIFIES BITS IN A LONG WORD, I.E. RIGHTMOST BIT +* TO BIT POSITION 0 +* RJST REG +RJST .macro REG + MOVE :REG:,:REG: + JRZ MX? +MLP? + SRL 1,:REG: + JRNC MLP? + SLL 1,:REG: + ADDK 1,:REG: +MX? + .endm + + +BUT_MAC .macro X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND + .WORD :X: + .WORD :Y: + .WORD :RADIUS: + .LONG :COLOR: + .LONG :MASK: + .WORD :SHIFT: + .WORD :EXTEND: + .endm + +STR_MAC .macro X,Y,STRING,COLOR,DIR + .WORD :X: + .WORD :Y: + .LONG :STRING: + .WORD :COLOR: + .WORD :DIR: + .endm + +VECMAC .macro COLOR,X1,Y1,X2,Y2 + .WORD :COLOR: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .endm + +DOTMAC .macro COLOR,X,Y + .WORD :COLOR: + .WORD :X: + .WORD :Y: + .endm + +RECTMAC .macro COLOR,X,Y,W,H + .WORD :W: + .WORD :H: + .WORD :X: + .WORD :Y: + .WORD :COLOR: + .endm + +CHIPMAC .macro NUM,X1,Y1,X2,Y2,X3,Y3,STRING,DIR,X4,Y4,STUFFED + .WORD :NUM: + .WORD :X1: + .WORD :Y1: + .WORD :X2: + .WORD :Y2: + .WORD :X3: + .WORD :Y3: + .LONG :STRING: + .WORD :DIR: + .WORD :X4: + .WORD :Y4: + .WORD :STUFFED: + .endm + +CMNUM EQU 0 +CMLOC EQU CMNUM+16 +CMXLOC EQU CMLOC +CMYLOC EQU CMLOC+16 +CMSIZE EQU CMLOC+32 +CMXSIZE EQU CMSIZE +CMYSIZE EQU CMSIZE+16 +CMOFFSET EQU CMSIZE+32 +CMSTRING EQU CMOFFSET+32 +CMDIR EQU CMSTRING+32 +CMPINLOC EQU CMDIR+16 +CMSTUFFED EQU CMPINLOC+32 +CMEND EQU CMSTUFFED+16 + + +************************************************************************** +* * +* RAM_CHIP: MACRO DEFINES A RAM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* * +************************************************************************** + +RAM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR + + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + .endm + +RAM_WDTH EQU 000H ; OFFSETS INTO RAM CHIP RECORD +RAM_ITLV EQU 010H +RAM_NMBR EQU 020H +RAM_SADR EQU 030H +RAM_EADR EQU 050H +RAM_LINK EQU 070H +RAM_SIZE EQU 090H + +ROM_CKSM EQU 000H +ROM_WDTH EQU 010H ; OFFSETS INTO ROM CHIP RECORD +ROM_ITLV EQU 020H +ROM_NMBR EQU 030H +ROM_SADR EQU 040H +ROM_EADR EQU 060H +ROM_LINK EQU 080H +ROM_SIZE EQU 0A0H + +**************************************************************************** +* ROM_CHIP: MACRO DEFINES A ROM CHIP RECORD. * +* * +* CHIP_NO -- CHIP NUMBER * +* WIDTH -- CHIP CELL SIZE IN BITS (MUST BE > 0) * +* INTERLEAVE -- DISTANCE BETWEEN ADJACENT CELLS ON CHIP (IN BITS) * +* START_ADDR -- ADDRESS OF FIRST CELL ON CHIP * +* END_ADDR -- ADDRESS OF LAST CELL ON CHIP * +* CHECK_SUM -- DATAIO CHECK SUM FOR CHIP * +**************************************************************************** + +ROM_CHIP .macro TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + + .WORD :CHECK_SUM: + .WORD :WIDTH: + .WORD :INTERLEAVE: + .WORD :CHIP_NO: + .LONG :START_ADDR: + .LONG :END_ADDR: + .LONG :TAB_LINK: + + .endm + + +RANDOM_SEED EQU 5A5A5A5Ah ; RAM TESTS: PSEUDO-RANDOM SEQUENCE +ZERO_EXTEND EQU 1Fh ; PARAMETERS +SIGN_EXTEND EQU 20h +PAL_SELECT EQU 0FFDCH ; ENABLE VIDEO PALETTE MAP ACCESS + + + .text + .even + + +************************************************************************** +* * +* POWERTST * +* * +* POWERUP SELF TEST ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +POWERTST + dint + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + +; HALT DMA AND ENABLE CACHE + + clr a14 + move a14,@DMACTRL + move a14,@DMACTRL + + FCALL INTIO,B6 + +; DISABLE VIDEO PALETTE RAMS, AUTOERASE AND ERROR LED + + MOVI SYSCINIT,A13 + MOVE A13,@SYSCTRL + + FCALL CPUTEST,SP + JAUC WARMSET + +**************************************************************************** +* * +* PIC SECURITY STUFF * +* * +* Security source for WWF-UNIT's PIC * +* * +* Version 1.00 * +* Written by: Michael J. Lynch * +* Copyright (c) 1994 by Williams Electronics Games Inc. * +* All rights reserved * +* * +* TTTTT OOO PPPP SSS EEEEE CCC RRRR EEEEE TTTTT * +* T O O P P S S E C C R R E T * +* T O O P P S E C R R E T * +* T O O PPPP SSS EEEE C RRRR EEEE T * +* T O O P S E C R R E T * +* T O O P S S E C C R R E T * +* T OOO P SSS EEEEE CCC R R EEEEE T * +* * +* * +* Company Confidential Information * +* NEED TO KNOW BASIS ONLY * +* * +* USE OR DISCLOSURE STRICTLY PROHIBITED UNLESS APPROVED IN WRITING FROM * +* WILLIAMS ELECTRONICS GAMES INC. * +* * +* Unapproved use or disclosure will result in severe torture!!!!! * +* * +**************************************************************************** + +; _pic_bin2bcd Converts a hex number in a7 to BCD and puts it in A3 +_pic_bin2bcd: + clr a3 + movi 100000,a0 +_bin2bcd_loop: + sll 4,a3 + move a7,a1 + divu a0,a1 + or a1,a3 + mpyu a0,a1 + sub a1,a7 + move a0,a1 + movk 10,a0 + divu a0,a1 + move a1,a0 + jrnz _bin2bcd_loop + FRET b6 + +****************************************************************************** +* * +* _bcd2hex - Converts a 32 bit (8 digit) BCD Number to Hexidecimal * +* * +* ENTRY * +* A0 - BCD Number to be converted * +* B6 - Return Address * +* * +* EXIT * +* A2 - Converted Number (hex) * +* * +* USES * +* A1 - Multiplier * +* A3 - Temporary * +* A4 - Digit Counter * +* * +* Written by: Michael J. Lynch * +* * +****************************************************************************** +_bcd2hex: + clr a2 ; Start with 0 + movk 1,a1 ; Starting Multiplier + movk 8,a4 ; Number of BCD digits to convert +_b2h_loop: ; Main BCD to hex conversion loop + move a0,a3 ; Put BCD number in temporary register + andi 0fh,a3 ; get rid of bits not interested in + mpyu a1,a3 ; multiply by current multiplier + add a3,a2 ; Accumulate into final register + srl 4,a0 ; Shift to next BCD digit + movk 10,a3 ; Calculate next multiplier (mult = mult * 10) + mpyu a3,a1 ; New Multiplier + dsjs a4,_b2h_loop ; Keep going until 8 BCD digits are done + FRET b6 ; return + +_read_pic_data: + setf 8,0 + setf 32,0,1 + movk 16,a9 ; Number of bytes of data to read + movi _pic_raw,a1 ; address at which to store raw data from PIC + movk 010h,a8 ; Send Request Serial Number Data Command + move a8,@PIC_COMMAND +_rp_data_loop: + setf 16,0 + clr a8 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC to acknowledge +_rp_ack_loop: + move a2,a2 ; Check for command timeout + jrz gn_bad ; WOA PIC never acknowledged - ERROR!!!! + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 ; Data available ? + jrnz _rp_ack_loop ; NO + setf 8,0 ; YES + move @PIC_DATA,a0 ; read data + move a0,*a1+ ; write to temp holding area + movk 010h,a8 ; Acknowledge reciept of data + setf 16,0 + move a8,@PIC_COMMAND + movi 1000000,a2 ; Wait for PIC n acknowlegde +_rp_nack_loop: + move a2,a2 + jrz gn_bad + move @_watchdog_addr,a8,L + move a8,*a8 + move @_soundirq_addr,a8,L + move *a8,a8 + subi 1,a2 + btst 12,a8 + jrz _rp_nack_loop + dsj a9,_rp_data_loop + clr a4 ; Holding Register for X + clr a5 ; Holding Register for Y + setf 8,0 + movi _pic_raw,a10 + addi 060h,a10 + move *a10+,a4 ; Get X + move *a10,a5 ; Get Y + setf 24,0 + clr a7 ; Calculate B-3-5-9 + movi _pic_raw,a10 + move *a10,a7 + subi 15732,a7 + movi 581,a0 + divu a0,a7 + sub a4,a7 ; B359 (binary) + FCALL _pic_bin2bcd,b6 ; B359 (bcd) a1 = B359 + setf 4,0 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 014h,a10 + move a0,*a10 ; Stuff the 5 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 0ch,a10 + move a0,*a10 ; Stuff the 3 + + + movi _pic_raw,a10 + addi 018h,a10 + move *a10,a7,1 ; Calculate 2-A-0-8-6 + subi 7463513,a7 + movi 4223,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a4,a7 ; 2A086 (binary) + FCALL _pic_bin2bcd,b6 ; 2A086 (bcd) + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 018h,a10 + move a0,*a10 ; Stuff the 6 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addi 020h,a10 + move a0,*a10 ; Stuff the 8 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + move a0,*a10 ; Stuff the 0 + srl 8,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 8,a10 + move a0,*a10 ; Stuff the 2 + + + setf 24,0 ; Calcuate 1-7-4 + movi 038h,a10 + addi _pic_raw,a10 + move *a10,a7 + subi 127984,a7 + movi 7117,a0 + divu a0,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 + sub a5,a7 ; 174 (binary) + FCALL _pic_bin2bcd,b6 ; 174 (bcd) a1 = 174 + setf 4,0 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 010h,a10 + move a0,*a10 ; Stuff the 4 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 01ch,a10 + move a0,*a10 ; Stuff the 7 + srl 4,a3 + move a3,a0 + andi 0fh,a0 + movi _pic_temp,a10 + addk 4,a10 + move a0,*a10 ; Stuff the 1 + + setf 16,0 + movi 050h,a10 + addi _pic_raw,a10 + move *a10,a0 ; This is a pointer to the date code + move *a10,a1 + sll 8,a1 + srl 8,a0 + andi 0ffh,a0 + andi 0ff00h,a1 + or a1,a0 + move a0,@_man_date,L + + setf 4,0 + movi _pic_temp,a10 + addk 0ch,a10 + move *a10+,a0 ; Most Significant Digit (serial number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (serial number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex (a2 = serial # hex) + move a2,@_serial_number,L + + setf 4,0 + movi _pic_temp,a10 + move *a10+,a0 ; Most Significant Digit (game number) + sll 4,a0 + move *a10+,a1 + or a1,a0 + sll 4,a0 + move *a10+,a1 ; Least Significant Digit (game number) + or a1,a0 + FCALL _bcd2hex,b6 ; Convert to hex + + clr a1 +;DJT Start + cmpi 528,a2 ; Development PIC Game Number + jrz gn_good + cmpi 470,a2 ; Real Game Number (Maximum Hangtime) + jrz gn_good + cmpi 459,a2 ; Real Game Number (Hangtime) + jrz gn_good +;DJT End +gn_bad: + movi SEC_MESS_2,a0 ; Level 2 Security Check failure + FCALL STRINGCENTER,b6 + addi [220,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 +; MJL + jauc $ ; Let the dog catch us +; LOCKUP +; MJL END +gn_good: + setf 8,0 ; Stomp on memory used to decode PIC + clr a0 + movi 16,a1 + movi _pic_raw,a2 +_stomp_temp: + move a0,*a2+ + dsjs a1,_stomp_temp + movi 8,a1 + movi _pic_temp,a2 +_stomp_temp1: + move a0,*a2+ + dsjs a1,_stomp_temp1 + setf 16,1,0 ;Field0 = Word sign extend + setf 32,0,1 ;Field1 = Long word + rets + + +************************************************************************** +* * +* POWERCMOS * +* * +* CHECK THE CMOS AND DO A LOT OF OTHER STUFF -- SHOW THE * +* POWER UP MESSAGES * +* * +* ENTRY NOTHING * +* EXIT NOTHING * +* * +************************************************************************** +POWERCMOS: + DINT + MOVI SYSCINIT,A1 + MOVE A1,@SYSCTRL,W + + CALLA WDOGDIS ; GET RID OF WATCH DOG + + CLR A13 ; USED TO DECIDE WHETHER PAUSE OR NOT + MOVE A13,@DMACTRL,W + MOVE A13,@DMACTRL,W + FCALL INITCOLR,B5 ; FIX UP THE COLORS + FCALL INTIO,B6 + FCALL DSCRCLR,B6 ; MAKE SURE OF SCREEN + MOVI ROM_NAME,A0 + FCALL STRINGCENTER,B6 ; GET WIDTH OF STRING + ADDI [30,0],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + callr _read_pic_data + movi 05018h,a13 ; Palette 128 match color (BLACK) + move a13,@VMUX_BREG1,W + movi 08080h,a13 ; Set Palette # to 128 + move a13,@DMACMAP,W + movi SEC_MESS_1,a0 ; Print the message (won't show up) + FCALL STRINGCENTER,b6 ; Note - only shows up on pirate + addi [210,0],a1 ; hardware + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + clr a13 ; Set palette # back to 0 + move a13,@DMACMAP,W + + movi SNDREVPROMPT,a0 ; Sound Revision Prompt + FCALL STRINGCENTER,b6 + addi [120,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_coin_counter_addr,a0,L + movi 030h,a1 ; Yank down the reset + move a1,*a0,W + movi 10000,a1 ; Hold it fer a while + dsjs a1,$ + movi 020h,a1 ; Let it go + move a1,*a0,W + movi 10000,a1 + dsjs a1,$ + move @_sound_addr,a0,L ; Bypass the diags + movb a0,*a0 + move @_watchdog_addr,a0,L ; Kill the dog + move a0,*a0,W + movi 500000,a1 ; Wait fer a while +_swait_lp + move @_watchdog_addr,a0,L + move *a0,a0,W + dsjs a1,_swait_lp +; movk 2,a2 +;_wait_diag +; movi 1000000,a1 +;_wait_diag_1 +; move @_soundirq_addr,a0,L +; move *a0,a0,W +; btst B_SDAV,a0 ; Sound data waiting +; jrz _diag_byte_1 +; move @_watchdog_addr,a0,L +; move a0,*a0,W +; dsjs a1,_wait_diag_1 +; jruc _snd_timeout +;_diag_byte_1 +; move @SOUND,a0,W ; Yes - get rid of it +; movi 10000,a1 +; dsjs a1,$ +; dsjs a2,_wait_diag + clr a3 ; Turn on the sounds + move a3,@SOUNDSUP,W + movi 999,a3 ; Send revision request sound call + calla SNDSND + movi 1000000,a2 +_sndrev_loop + move @_watchdog_addr,a0,L + movb a0,*a0 + move @_soundirq_addr,a0,L ; Wait fer a response + move *a0,a1,W + btst B_SDAV,a1 ; Got a response ? + jrz _snd_response ; BR = yes + dsjs a2,_sndrev_loop +_snd_timeout + movi SNDTIMEOUT,a0 ; If we get here we never got a response + FCALL STRINGCENTER,b6 ; Tell operator about it + addi [135,0],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc _sndrev_done ; Then we be done +_snd_response + move @_sound_addr,a0,L ; Get sound revision data + move *a0,a0,W + move a0,@_snd_chip_count,W ; Put up sound revision + move a0,a1 +; andi 0d0h,a1 + andi 0ffh,a1 + cmpi 0ffh,a1 + jrz _snd_timeout + andi 0f0h,a1 + cmpi 0d0h,a1 + jrz _proto_version + movi SNDRELEASEPROMPT,a4 + jruc _do_snd_version +_proto_version + movi SNDPROTOPROMPT,a4 +_do_snd_version + calla copy_rom_string + move @_snd_chip_count,a0,W + andi 0fh,a0 + movk 15,a1 + calla dec_to_asc + calla concat_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [135,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 +_sndrev_done + + movi GAMESNPROMPT,a0 ; Put up Game Serial number + FCALL STRINGCENTER,b6 + addi [160,0],a1 + clr a2 + movi COLOR_PURPLE,a3 + FCALL STRING,b6 + move @_serial_number,a0,L ; Serial number put here by _get_serial_number + movi 1000000,a1 + calla dec_to_asc + calla copy_string + movi message_buffer,a0 + FCALL STRINGCENTER,b6 + addi [175,0],a1 + clr a2 + movi COLOR_WHITE,a3 + FCALL STRING,b6 + + CALLA CMOS_VAL ; CHECKSUM AUDITS/ADJUSTMENTS + JREQ CMOSOK +* +* BAD CHECKSUM ON POWERUP ----> FACTORY SET +* +; CALLA RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + CALLA CLR_AUD + + MOVK 1,A13 ; FLAG ERROR + CALLA CMOS_VAL ; TRY AGAIN + JREQ CMOSB1 ; BR = OK WE'RE IN + + MOVI CMOS_BAD,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVI CMOS_UNFAC,A0 + FCALL STRINGCENTER,B6 + ADDI [65,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSB1 + MOVI CMOS_FACRES,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC CMOS1 +CMOSOK + MOVI CMOS_OK,A0 + FCALL STRINGCENTER,B6 + ADDI [50,0],A1 + CLR A2 + MOVI COLOR_GREEN,A3 + FCALL STRING,B6 + +CMOS1 + CALLA CRED_P ;CHECK OUT CREDITS, THIS WILL CLEAR + ;IF NECESSARY. THANX LINKY! + + CALLR READ_DIP + ANDI DPUSECMOS,A0 + JRNZ CMOS3 ; BR = USING CMOS COINAGE + + MOVI CMOS_DIP,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + + CALLR SET_DIP_COINAGE + JRUC CMOS4 + +CMOS3 +; +; USING CMOS HERE +; + MOVI CMOS_CMOS,A0 + FCALL STRINGCENTER,B6 +; ADDI [110,0],A1 + ADDI [75,0],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 +CMOS4 +; CALLR PLOTCOINAGE ; PLOT SOME COINAGE +; MOVE @SWITCH,A0,L ; CHECK SLAM SWITCH +; NOT A0 +; ANDI 00080000H,A0 + move @_coin_addr,a0,L + move *a0,a0,W + not a0 + andi 8h,a0 + JRZ CMOSRET + MOVI CMOS_TILT,A0 + FCALL STRINGCENTER,B6 + ADDI [205,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + MOVK 1,A13 ; FLAG ERROR +CMOSRET + MOVE A13,A13 + JRZ CTMP0 + + MOVI CMOS_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a13,L + move a0,*a13,W + + MOVI CMOS_WAIT,A0 + FCALL STRINGCENTER,B6 + ADDI [230,0],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + CALLA WDOGDIS ; DISABLE WOOF WOOF + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +CTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE @SWSET1,A1,L + CMP A0,A1 + JRZ CTMP1 + JRUC CTMP2 +CTMP0 + MOVI 200H,A0 +CTMP_WAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a1,L + move a1,*a1 + + +;FIX - Temp!!!!! +;FIX - Speed up warm reset - Replace when we ship! + .if DEBUG + .else + PAUSE 1000H,B6 + PAUSE 2000h,B6 ;Go fast + DSJS A0,CTMP_WAIT + .endif + +CTMP2 + move @_serial_number,b5,L + move @_man_date,b6,L + JAUC PCMOSRET + + +SNDREVPROMPT + .string "SOUND SYSTEM VERSION",0 + .even +SNDPROTOPROMPT + .string "PROTO ",0 + .even +SNDRELEASEPROMPT + .string "RELEASE ",0 + .even +SNDTIMEOUT + .string "TIMEOUT ON RESPONSE FROM SOUND SECTION",0 + .even +GAMESNPROMPT + .string "GAME SERIAL NUMBER",0 + .even + +CMOS_TILT + .STRING "WARNING -- SLAM SWITCH CLOSED",0 + .EVEN + +CMOS_DIP + .STRING "USING DIPSWITCH COINAGE",0 + .EVEN + +CMOS_CMOS + .STRING "USING CMOS COINAGE",0 + .EVEN + +CMOS_WAIT + .STRING "ERRORS DETECTED -- ANY BUTTON TO CONTINUE",0 + .EVEN + +CMOS_FACRES + .STRING "CMOS INVALID -- FACTORY SETTINGS RESTORED",0 + .EVEN + +CMOS_BAD + .string "CMOS CHIP U62 BAD",0 + .EVEN + +CMOS_UNFAC + .STRING "UNABLE TO RESTORE FACTORY SETTINGS",0 + .EVEN + +CMOS_OK + .STRING "CMOS OK",0 + .EVEN + +************************************************************************** +* * +* BURNIN * +* * +* FACTORY BURNIN TEST -- EXITS BY RESETING THE GAME * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +BURN_IN: + DINT + MOVI AUDAUTO,A0 ;ZERO OUT BURNIN AUDIT + CALLA KILL_AUD +BURNLOOP + CALLA WDOGDIS ;MAKE SURE THE DOG IS ASLEEP + FCALL CPUTEST,SP +BURNSP: + setf 16,1,0 + setf 32,0,1 + MOVI STCKST,SP,L ;RESTORE THE STACK PTR + MOVI SYSCINIT,A0 ;RE-INITIALIZE SYSTEM CONTROL + MOVE A0,@SYSCTRL,W + MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM + MOVI AUDAUTO,A0 + CALLA AUD1 ;ANOTHER ONE WORKED + JRUC BURNLOOP + +************************************************************************** +* * +* DIAGCPUTEST * +* * +* DIAGNOSTIC CALL FOR THE CPU TEST * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* JUMPS TO *EXEC_LP* AFTER SETTING EVERYTHING UP * +* * +* CALL * +* JAUC * +* * +************************************************************************** + +DIAGCPUTEST: + CALLA WDOGDIS + DINT + calla InitAddresses ; Make sure I/O addresses are initialized + FCALL CPUTEST,SP +DIAGSP: + SETF 16,1,0 ; WORD NO SIGN EXTEND + SETF 32,0,1 ; LONG WORD + MOVI STCKST,SP,L + CALLA init_all + + callr _read_pic_data + + CALLA DIAG_COLORS ;FIRE UP THE COLORS + +; EINT ; ENABLE INTERRUPTS AND WE'RE OFF +; DISPON ; ENABLE THE DISPLAY SYSTEM + CREATE DIAG_PID,CPU_RET + MOVI INDIAG,A0 + MOVE A0,@GAMSTATE,W + movk 1,a0 ; Menu driver switch mapping mode + move a0,@_switch_map_mode,L + calla InitAddresses + JAUC mainlp + +**************************************** +* bin2bcd - Converts binary number pointed to by a0 to bcd and stores it back +* into area pointed to by a0. +* + SUBR bin2bcd + mmtm sp,a0,a1,a2,a3 + move *a0,a2,W + move a2,a1 + movi 10,a3 + divu a3,a1 + sll 4,a1 + movi 10,a3 + modu a3,a2 + or a2,a1 + move a1,*a0,W + mmfm sp,a0,a1,a2,a3 + rets + +********************************************************* +* _set_time - Sets the real time clock based on values in +* _rtc_seconds +* _rtc_minutes +* _rtc_hours +* _rtc_day +* _rtc_date +* _rtc_month +* _rtc_year +* Time is set through the PIC. + SUBR _set_time + mmtm sp,a0,a1,a2,a3,a4 + movi _rtc_seconds,a0,L + movi 7,a4 +_st_cnvt_loop + callr bin2bcd + addk 16,a0 + dsjs a4,_st_cnvt_loop + movi 14,a4 + movi _rtc_seconds,a3,L + pushst + dint + movi 012h,a0 + move a0,@PIC_COMMAND,W +_st_next_val + movk 2,a0 + move a0,@PIC_COMMAND,W + movi 1000000,a1 +_st_ack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrz _got_st_ack + dsjs a1,_st_ack_wait + jruc _st_done +_got_st_ack + pushst + setf 4,0 + move *a3,a1,0 + popst + move a1,@PIC_COMMAND,W + ori 010h,a1 + move a1,@PIC_COMMAND,W + addk 4,a3 + btst 3,a3 + jrz _addr_ok + addk 8,a3 +_addr_ok + movi 1000000,a0 +_st_nack_wait + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_st_nack + dsjs a0,_st_nack_wait + jruc _st_done +_got_st_nack + dsj a4,_st_next_val +_st_done + popst + mmfm sp,a0,a1,a2,a3,a4 + rets + +******************************************** +* bcd2hex - Converts 2 digit BCD number in a1 to hex and stores back in a1 +* + SUBR bcd2hex + mmtm sp,a0,a3 + move a1,a2 + movk 10,a3 + andi 0f0h,a1 + srl 4,a1 + mpyu a3,a1 + andi 0fh,a2 + add a2,a1 + mmfm sp,a0,a3 + rets + +*********************************************** +* _aquire_time - Time aquisition trigger function called in the DIRQ +* Starts the acquisition of time information from the +* Real Time Clock (RTC). The time information is transfered +* from the RTC to the PIC by the PIC. This is done this way +* because the RTC to PIC interface is an I2C bus interface +* and requires approximately 3 ms to transfer the data from +* the RTC to the PIC. This function is called by the DIRQ +* every 27 ticks (495ms) and then on the next DIRQ the function +* to transfer the time information from the PIC to this +* application is called. This prevents this application from +* being bogged down while the time information is being +* moved from the RTC to the PIC. + SUBR _aquire_time + mmtm sp,a0,a1 + movi 011h,a0 ;Command code 0x1 + move a0,@PIC_COMMAND,W +_at_next_byte + movi 01h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_at_ack_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_at_ack + dsjs a0,_at_ack_wait + jruc _at_done +_got_at_ack + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Take away Request +_at_done + mmfm sp,a0,a1 + rets + +************************************************* +* _get_time - This function transfers the time information that was extracted +* from the RTC by the PIC from the PIC to some global memory +* area for use by this application. The time information is +* stored in hexidecimal word sized global values as follows +* +* _tseconds (0-59) Current seconds +* _tminutes (0-59) Current minutes +* _thours (0-23) Current hours +* _tday (1-7) Current Day (1=Sunday, 7=Saturday) +* _tdate (1-31) Current Date +* _tmonth (1-12) Current Month (1=January, 12=December) +* _tyear (0-99) Current Last 2 Digits of year + SUBR _get_time + mmtm sp,a0,a1,a2,a3 + movk 8,a3 ;Number of bytes of data to get + movi _tseconds,a2 + movi 013h,a0 ;Command code 0x3 + move a0,@PIC_COMMAND,W +_gt_next_byte + movi 03h,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +_get_time_data_wait + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_gt_ack + dsjs a0,_get_time_data_wait + cmpi 1,a3 + jrz _get_time_adjust + movk 1,a0 + jruc _get_time_done +_got_gt_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + andi 0ffh,a0 + move a0,*a2+,W + movi 100000,a0 +_gt_wait_nack + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,L + btst 12,a1 + jrnz _got_gt_nack + dsjs a0,_gt_wait_nack +_got_gt_nack + dsj a3,_gt_next_byte +_get_time_adjust + movi _tseconds,a0,L + move *a0,a1,W ;Mask off unused bits for seconds + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_seconds59 + clr a1 + jruc _seconds_ok +_chk_seconds59 + cmpi 60,a1 + jrlt _seconds_ok + clr a1 +_seconds_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for minutes + andi 07fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_minutes59 + clr a1 + jruc _minutes_ok +_chk_minutes59 + cmpi 60,a1 + jrlt _minutes_ok + clr a1 +_minutes_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for hours + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_hours23 + clr a1 + jruc _hours_ok +_chk_hours23 + cmpi 24,a1 + jrlt _hours_ok + clr a1 +_hours_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for day + andi 07h,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_day7 + movk 1,a1 + jruc _day_ok +_chk_day7 + cmpi 8,a1 + jrlt _day_ok + movk 1,a1 +_day_ok + move a1,*a0+,W + move *a0,a1,W ;Mask off unused bits for date + andi 03fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_date31 + movk 1,a1 + jruc _date_ok +_chk_date31 + cmpi 32,a1 + jrlt _date_ok + movk 1,a1 +_date_ok + move a1,*a0+,W + move *a0,a1 ;Mask off unused bits for month + andi 01fh,a1 + callr bcd2hex ;Convert to hex + move a1,a1 + jrnz _chk_month12 + movk 1,a1 + jruc _month_ok +_chk_month12 + cmpi 13,a1 + jrlt _month_ok + movk 1,a1 +_month_ok + + move a1,*a0+,W + move *a0,a1,W + callr bcd2hex ;Convert to hex + move a1,a1 + jrnn _chk_year99 + clr a1 + jruc _year_ok +_chk_year99 + cmpi 100,a1 + jrlt _year_ok + clr a1 +_year_ok + move a1,*a0,W + clr a0 ;All bits used for year +_get_time_done + mmfm sp,a0,a1,a2,a3 + rets + +*********************************************** +* PICCHECK - Power up test for the PIC MicroController +* Checks basic communications with the PIC chip +* +PICCHECK + movi 1fh,a0 ;Command code 0xf + move a0,@PIC_COMMAND,W + movi 0fh,a0 + move a0,@PIC_COMMAND,W + movi 100000,a0 ;Wait for Acknowledge +pic_loop + move @_watchdog_addr,a1,L + move a1,*a1,W + move @_soundirq_addr,a1,L + move *a1,a1,W + btst 12,a1 + jrz _got_pic_ack ;BR = got acknowledge + dsjs a0,pic_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_ack + move @PIC_DATA,a0,W ;Read the data + movi 010h,a1 + move a1,@PIC_COMMAND,W ;Tell PIC we took data + movi 100000,a1 +_pic_nack_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + move @_soundirq_addr,a2,L + move *a2,a2,W + btst 12,a2 + jrnz _got_pic_nack + dsjs a1,_pic_nack_loop + movk 1,a0 + jruc _piccheck_done +_got_pic_nack + andi 0fh,a0 + cmpi 0fh,a0 + jrz _pic_ok + movk 1,a0 + jruc _piccheck_done +_pic_ok + clr a0 +_piccheck_done + FRET b5 + +*************************************************** +* SNDCHECK - Sound Subsystem Check during CPUTEST +* +SNDCHECK + move b6,@_b6_save,L + move @_coin_counter_addr,a0,L + movi 030h,a1 + move a1,*a0,W + movi 8,a1 + dsjs a1,$ + movi 020h,a1 + move a1,*a0,W + movi 1000000,a1 +dsp_loop1 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp1_exit + dsjs a1,dsp_loop1 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp1_exit + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + cmpi 079h,a0 + jrz dsp_next_byte + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_next_byte + movi 10000000,a1 +dsp_loop2 + move @_watchdog_addr,a0,L + move a0,*a0,W + move @_soundirq_addr,a0,L + move *a0,a2,W + btst B_SDAV,a2 + jrz dsp_lp2_exit + dsjs a1,dsp_loop2 + movi DSP,a10 + movk 1,a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + movk 1,a0 + jruc dspcheck_done +dsp_lp2_exit + movi DSP,a10 + clr a0 + move a0,a11 + inc a11 + FCALL CHIPOUT,b5 + move @_sound_addr,a0,L + move *a0,a0,W + andi 0ffh,a0 + move a0,a14 + clr a0 + move a0,a0 + jrz dsp_ok + movk 1,a0 + jruc dspcheck_done +dsp_ok + clr a0 + move a0,@_snd_status,L + subi 2,a14 + move a14,@_snd_diag_code,W + clr a14 + move a14,@_snd_chip_count,W + movi SROMTAB,a12,L +snd_romok_loop + move *a12+,a10,L + jrz sndrom_done + move @_snd_chip_count,a14,W + move @_snd_diag_code,a11,W + cmp a11,a14 + jrnz sndchip_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_chip_out +sndchip_ok + movk 1,a11 +snd_chip_out + addk 1,a14 + move a14,@_snd_chip_count,W + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_romok_loop + movk 1,a0 + jruc dspcheck_done +sndrom_done + movi SNDRAMTAB,a12,L +snd_ramok_loop + move *a12+,a10,L + jrz sndram_done + move @_snd_diag_code,a14,W + cmpi 8,a14 + jrnz sndram_ok + movk 2,a11 + move a11,@_snd_status,L + jruc snd_ram_out +sndram_ok + movk 1,a11 +snd_ram_out + FCALL CHIPOUT,b5 + move @_snd_status,a11,L + jrz snd_ramok_loop + movk 1,a0 + jruc dspcheck_done +sndram_done + clr a0 +dspcheck_done + movi 1000000,a1 +dspcheck_wait_exit_loop + move @_watchdog_addr,a2,L + move a2,*a2,W + dsjs a1,dspcheck_wait_exit_loop + move @_b6_save,b6,L + FRET b6 + +************************************************************************** +* * +* CPUTEST * +* * +* THE ACTUAL CPU TEST STUFF * +* * +* ENTRY * +* SP RETURN ADDRESS * +* * +* EXIT * +* WHO KNOWS * +* * +* CALL * +* FCALL CPUTEST,SP * +* * +************************************************************************** +;CPUT_X .EQU 25 ;TEXT X POSITION +;CPUT_Y1 .EQU 128 ;TEXT ROW 1 Y POSITION +;CPUT_Y2 .EQU 140 ;TEXT ROW 2 Y POSITION +;CPUT_Y3 .EQU 152 ;TEXT ROW 3 Y POSITION +;CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START +;CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+15,200-CPUT_X] + +CPUT_X .EQU 180 ;TEXT X POSITION +CPUT_Y1 .EQU 118 ;TEXT ROW 1 Y POSITION +CPUT_Y2 .EQU 130 ;TEXT ROW 2 Y POSITION +CPUT_Y3 .EQU 142 ;TEXT ROW 3 Y POSITION +CPUT_CLRS .EQU [CPUT_Y3-CPUT_Y1+10,389-CPUT_X] +CPUT_CLR .EQU [CPUT_Y1,CPUT_X] ;CLEAR START + +CPUTEST: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + FCALL INITCOLR,B5 ;HEY! IT LOOKS BETTER THIS WAY + FCALL DSCRCLR,B6 ;BLOW THE SCREEN OR IT LOOKS TOO UGLY + + CLR B0 + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W ;MAKE SURE WE'RE WRITING TO BIT MAP + MOVI VRAMCHIPS,A14 ;VERIFY BIT MAP + FCALL RAMCHECK,B5 + +; ENABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + + .else + MOVI PAL_SELECT,A13 + .endif + + MOVE A13,@SYSCTRL,W + MOVI PALCHIPS,A14 ;VERIFY OBJECT PALETTE RAM + FCALL RAMCHECK,B5 + MOVE B0,A12 + +; DISABLE VIDEO PALETTE MAP ACCESS + + .if WWFUNIT + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + FCALL INITCOLR,B5 ;RELOAD THE COLORS + FCALL DSCRCLR,B6 + + FCALL CPUDRAW,B5 ;SHOW THE CPU + MOVI CPU,A10 ;WE GOT THIS FAR, CPU MUST BE OK + MOVI 1,A11 + FCALL CHIPOUT,B5 + + MOVI VRAMTAB,A9 + FCALL CHIPTABLE,B5 ;PLOT OUT THE CHIP TABLE + + MOVE A12,A12 + JRZ PSRAMCK +PBADRAM + MOVI RAMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD + +PSRAMCK + MOVI SRAMCHECK,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 + MOVI SRAMCHIPS,A14 ;VERIFY SCRATCH RAMS + FCALL RAMCHECK,B5 + MOVE B0,A12 + move sp,a1 + movi STCKST,sp ; Set up a temporary stack + calla InitAddresses ; Reset the I/O Addresses + move a1,sp + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + JRNZ PBADRAM +PROMCK + MOVI ROMCMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT1_MESS,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + MOVI CPUEXIT2_MESS,A0 + MOVI [CPUT_Y3,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + CLR B0 ;KEEP THE STATS HERE + + MOVI PROMCHIPS,A14 + FCALL ROMCHECK,B5 + JRNZ PROMABORT + +;; move @DIPSWITCH,a14,W +;; andi DP4MEG_DIAG,a14 +;; jrz test_8meg_iroms +;; MOVI IROMCHIPS,A14 +;; FCALL ROMCHECK,B5 +;; jrnz PROMABORT +;; movi SYSCINIT,a14 +;; ori 0100h,a14 +;; move a14,@SYSCTRL,W ; Image IROM bank 1 +;; movi IROMCHIPS1,a14 +;; FCALL ROMCHECK,b5 +;; jrnz PROMABORT +;; +;; jruc irom_test_done +;;test_8meg_iroms: ; 8 Megabit Irom chips + + MOVI IROMCHIPS_8MEG,A14 + FCALL ROMCHECK,B5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0100h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 1 + movi IROMCHIPS1_8MEG,a14 + FCALL ROMCHECK,b5 + jrnz PROMABORT + movi SYSCINIT,a14 + ori 0200h,a14 + move a14,@SYSCTRL,W ; Image IROM bank 2 + movi IROMCHIPS2_8MEG,a14 + FCALL ROMCHECK,b5 + +PROMABORT + getst a3 ;Save Z bit + movi SYSCINIT,a14 + move a14,@SYSCTRL,W ; Back to IROM bank 0 + MOVE B0,A12 + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + btst 29,a3 ;Was ROM test user aborted? + jrz PDMACK ; br=yes (Z if cc was NZ) + MOVE A12,A12 + JRNZ PBADROM + +*WE CHECK ON THE DMA HERE +PDMACK + MOVI DMACMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_YELLOW,A3 + FCALL STRING,B6 + + FCALL DMACHECK,B5 ;CHECK THE DMA + MOVI DMA,A10 + MOVE A0,A11 + MOVE A0,A12 + INC A11 ;GREEN/RED + FCALL CHIPOUT,B5 + + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + MOVE A12,A12 + jrnz PBADDMA + movi SNDCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL SNDCHECK,b6 +; movi DSP,a10 +; move a0,a11 + move a0,a12 +; inc a11 +; FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + jrnz PBADSND + + movi PICCMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_YELLOW,a3 + FCALL STRING,b6 + FCALL PICCHECK,b5 + movi PIC,a10 + move a0,a11 + move a0,a12 + inc a11 + FCALL CHIPOUT,b5 + movi CPUT_CLR,a0 + movi CPUT_CLRS,a1 + movi COLOR_BLACK,a2 + FCALL RECTANGLE,b6 + move a12,a12 + JRZ PCPUGOOD + movi PICBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADSND + movi SNDBADMESS,a0 + movi [CPUT_Y1,CPUT_X],a1 + clr a2 + movi COLOR_RED,a3 + FCALL STRING,b6 + jruc PCPUBAD +PBADDMA + MOVI DMABADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + JRUC PCPUBAD +PBADROM + MOVI CPUT_CLR,A0 + MOVI CPUT_CLRS,A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI ROMBADMESS,A0 + MOVI [CPUT_Y1,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUBAD + MOVI CPUPAUSE,A0 + MOVI [CPUT_Y2,CPUT_X],A1 + CLR A2 + MOVI COLOR_RED,A3 + FCALL STRING,B6 + +PCPUWAIT +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + .IF TUNIT + MOVI CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + .ELSE + MOVI 0FD00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a3,L + move a0,*a3,W + MOVI 0FF00H|CPU_ERROR_SND,A0 +; MOVE A0,@SOUND,W ; LET HIM HEAR IT + move @_sound_addr,a3,L + move a0,*a3,W + .ENDIF + + MOVE A13,B5 + PAUSE 10000,B6 + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE A0,B1 + MOVI -1,B0 ; ASSUME DON'T TIMEOUT + CMPI DIAGSP,SP + JRZ PCPUTMP1 + CMPI BURNSP,SP + JRZ PCPUTMP1 + MOVI 200000H,B0 +PCPUTMP1 +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE B0,B0 + JRN PCPUNOTIMEOUT + DEC B0 + JRZ PCPURET ; TIMEOUT HERE +PCPUNOTIMEOUT + FCALL fudge_switches_diag,B6 + andi BUTTONS|START_BITS,a0 + MOVE B1,A1 + CMP A0,A1 + JRNZ PCPURET + JRUC PCPUTMP1 +PCPUGOOD + CLR A0 + JRUC PCPUREALRET +PCPURET + MOVK 1,A0 +PCPUREALRET + MOVE A0,A0 + FRET SP + +DMACMESS + .STRING "CHECKING CUSTOM",0 + .EVEN +DMABADMESS +; .STRING "CUSTOM CHIP UE13 BAD",0 + .STRING "CUSTOM CHIP U33 BAD",0 + .EVEN + +ROMCMESS + .STRING "CHECKING ROMS",0 + .EVEN +ROMBADMESS + .STRING "ROM CHIPS BAD",0 + .EVEN + +RAMBADMESS + .STRING "RAM CHIPS BAD",0 + .EVEN + +SNDCMESS + .string "CHECKING SOUND SECTION",0 + .even +SNDBADMESS + .string "SOUND SECTION BAD",0 + .even +PICCMESS + .string "CHECKING PIC CHIP",0 + .even +PICBADMESS + .string "PIC CHIP BAD",0 + .even + +CPUGOOD + .STRING "CPU BOARD OK",0 + .EVEN + +CPUPAUSE + .STRING "PRESS ANY BUTTON",0 + .EVEN + +CPUEXIT1_MESS + .STRING "HOLD START BUTTON",0 + .EVEN +CPUEXIT2_MESS + .STRING "TO EXIT.",0 + .EVEN + + +************************************************************************** +* * +* CPUDRAW * +* * +* PLOT THE CPU BOARD AND DRAW ALL THE CHIPS * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CPUDRAW: + MOVI CPU_VECS,A9 ; POINT AT VECTOR TABLE +CPUDLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPUD1 + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPUDLP1 +CPUD1 + MOVE B5,A13 + FCALL CHIPPLOT,B5 ; PLOT ALL THE CHIPS +;; MOVI BOARDSTRING,A0 +;; move @DIPSWITCH,a1,W +;; andi DP4MEG_DIAG,a1 +;; jrnz bdtype_4meg + movi BOARDSTRING1,a0 + +;;bdtype_4meg: + + MOVI [25,270],A1 +; MOVI [25,11],A1 + CLR A2 + MOVI COLOR_WHITE,A3 + FCALL STRING,B6 + MOVI BOARDSTRING2,A0 +; MOVI [37,13],A1 + MOVI [37,274],A1 + FCALL STRING,B6 + MOVE A13,B5 + FRET B5 + +;;BOARDSTRING +;;; .STRING "A-14816-40043",0 +;; .string "A-18968-40030",0 +;; .EVEN +BOARDSTRING1: + .string "A-20362-08MEG",0 + .even + +BOARDSTRING2 + .STRING "NBA HANGTIME",0 + .EVEN + +************************************************************************** +* * +* CHIPTABLE * +* * +* UPDATE A LIST OF CHIPS, BASED ON THEIR VALUES IN A12 * +* * +* ENTRY * +* A9 POINTER TO TABLE * +* A12 LIST OF ON/OFF BITS * +* B5 RETURN ADDRESS * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +CHIPTABLE: + MOVE B5,A14 +CTABLOOP + MOVE *A9+,A10,L ; GET POINTER TO CHIP RECORD + JRZ CTABDONE + MOVK 1,A11 + MOVE *A10(CMNUM),A0,W ; GET THE BIT NUMBER + BTST A0,A12 ; CHECK BIT NUMBER + JRZ CTABL2 + MOVK 2,A11 +CTABL2 + FCALL CHIPOUT,B5 + JRUC CTABLOOP + +CTABDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPPLOT * +* * +* PLOT OUT THE CHIP LIST * +* * +* ENTRY * +* B5 RET VALUE * +* * +* EXIT * +* NOTHING * +************************************************************************** + +CHIPPLOT: + MOVE B5,A14 + MOVI CPU_CHIPS,A10 +CPPLOTLOOP + CLR A11 + MOVE *A10,A0,L + JRZ CPPLOTDONE + FCALL CHIPOUT,B5 + ADDI CMEND,A10 + JRUC CPPLOTLOOP + +CPPLOTDONE + MOVE A14,B5 + FRET B5 + +************************************************************************** +* * +* CHIPOUT * +* * +* ACTUALLY PLOT THE CHIP * +* * +* ENTRY * +* A10 POINTS TO CHIP TO PLOT * +* A11 COLOR OF CHIP * +* 00 = OUTLINE * +* 01 = GREEN * +* 02 = RED * +* 03 = GREY * +* * +* EXIT * +* A10 IS INTACT * +* * +************************************************************************** + +CHIPOUT: + MOVE *A10(CMLOC),A5,L ; CHIP OUTLINE + MOVE A5,A6 + MOVE A5,A7 + MOVE A5,A8 + MOVE *A10(CMXSIZE),A0,W + ADD A0,A6 + ADD A0,A7 + MOVE *A10(CMYSIZE),A0,W + SLL 16,A0 + ADD A0,A7 + ADD A0,A8 + MOVE A5,A0 + MOVE A6,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A6,A0 + MOVE A7,A1 + ADDI [1,0],A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A8,A0 + MOVE A7,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 + MOVE A5,A0 + MOVE A8,A1 + MOVI COLOR_WHITE,A2 + FCALL HVLINE,B6 +; + MOVE *A10(CMSTUFFED),A0,W ; CHECK FOR STUFFED + JRNZ CONOSTUF + MOVK 3,A11 ; WANT IT GREY, DUDE + +CONOSTUF + MOVE A11,A11 ; CHECK FOR FILLING THE CHIP + JRZ CONOFILL + MOVE *A10(CMLOC),A0,L + ADDI 00010001H,A0 + MOVE *A10(CMSIZE),A1,L + SUBI 00010001H,A1 ; GET INTERNAL AREA + MOVE A11,A2 + SLL 4,A2 + ADDI CHIPCOLORS,A2 + MOVE *A2,A2,W ; GET ME A COLOR + FCALL RECTANGLE,B6 +CONOFILL + MOVE *A10(CMPINLOC),A1,L ; PIN LOCATION + MOVE A5,A0 + ADD A1,A0 + MOVI COLOR_WHITE,A1 + FCALL POINT,B6 + + MOVE *A10(CMSTRING),A0,L ; CHIP TEXT + MOVE A5,A1 + MOVE *A10(CMOFFSET),A2,L + ADD A2,A1 + MOVE *A10(CMDIR),A2,W + MOVI COLOR_BLACK,A3 + MOVE A11,A11 ; CHECK FOR COLOR + JRNZ COBLACK + MOVI COLOR_WHITE,A3 +COBLACK + FCALL STRING,B6 + FRET B5 + +CHIPCOLORS: + .WORD COLOR_BLACK + .WORD COLOR_GREEN + .WORD COLOR_RED + .WORD COLOR_GREY + +************************************************************************** +* * +* DMACHECK * +* * +* CHECK THE DMA OUT * +* * +* ENTRY * +* B5 RETURN ADDRESS * +* * +* EXIT * +* A0 DMA STATUS * +* 0 = GOOD * +* 1 = BAD * +* * +************************************************************************** +DMACHECK + setf 16,1,0 + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + CLR A14 + MOVE A14,@DMACTRL,W + MOVE A14,@DMACTRL,W + + MOVK DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;OPEN LEFT TO RIGHT + MOVI DMAWIN|DMACF4,A14 + MOVE A14,@DMACONF,W ;ADJUST WINDOW RIGHT/LEFT BORDER + MOVI [511,0],A14 + MOVE A14,@DMAWINDOW,L ;FULL HEIGHT WINDOW + MOVI [100H,100H],A14 +; MOVE A14,@DMASCALEX + MOVE A14,@DMASCALEX,L + + MOVI [1,448],A14 ;BLOW OUT TRADEMARK + MOVE A14,@DMAHSIZE,L + + CLR A14 + MOVE A14,@DMAOFFST,W ;OFFSET + MOVE A14,@DMACONST,W ;CONSTANT + MOVE A14,@DMAHORIZ,L ;CLEAR DESTINATION ADDRESS + +; MOVI 2000000H,A14 ;DMA LOGO LOCATION + clr a14 + MOVE A14,@DMASAGL,L + + MOVI 257,A14 + MOVE A14,@DMAVERT,W ;OFFSCREEN PLOT + + MOVI 0505H,A14 + MOVE A14,@DMACMAP,W + + MOVI 8003H,A14 ;USE IMAGE ROM - WRITE ALWAYS + MOVE A14,@DMACTRL,W ;KICK OFF THE DMA + + MOVI 7FFFH,A14 ;LOAD TIMEOUT COUNTER +DMACWAIT + +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + + MOVE @DMACTRL,A0,W ;DMA BUSY? + JRNN DMADONE ;BR = NO, TIME TO CHECK + DSJS A14,DMACWAIT + JRUC DMACBAD ;DMA TIMED OUT + +DMADONE + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACMAP,W + MOVI 0101000H,A0 ;LINEAR SCREEN LOCATION OF DATA + MOVI 2000000H,A1 ;DMA LOGO LOCATION + MOVI 448,A2 ;NUMBER OF BYTES TO COMPARE +DMACLOOP + MOVB *A0,A3 ;DESTINATION BYTE +; SLL 28,A3 +; SRL 28,A3 + MOVB *A1,A4 ;SOURCE BYTE +; SLL 28,A4 +; SRL 28,A4 + ADDK 8,A0 + ADDK 8,A1 + CMP A3,A4 + JRNZ DMACBAD ;BR = DATA ERROR + DSJS A2,DMACLOOP +* +*CHECK DATA IN OBJECT PALETTE +* + .if WWFUNIT +; movi PALENB,a13 + movi SYSCINIT,a13 + andni PALENB,a13 + .else + MOVI PAL_SELECT,A13 + .endif + + + MOVE A13,@SYSCTRL,W ;ENABLE PALETTE + + MOVI 0101000H,A0 ;LOCATION + MOVI 224,A2 ;NUMBER OF WORDS TO COMPARE +DMACLOOP2 + MOVE *A0+,A3,W +; ANDI 0F0FH,A3 + CMPI 0505H,A3 + JRNZ DMACBAD + DSJS A2,DMACLOOP2 + CLR A0 + JRUC DMACRET +DMACBAD + CLR A0 ;GET BACK TO A REAL PALETTE + MOVE A0,@DMACTRL,W + MOVE A0,@DMACTRL,W + MOVE A0,@DMACMAP,W + MOVK 1,A0 +DMACRET + .if WWFUNIT +; movi SYSCINIT,a3 + movi SYSCINIT,a13 + .else + MOVI 0FFFCH,A13 + .endif + + MOVE A13,@SYSCTRL,W + + SETF 16,0,0 + + MOVE A0,A0 + FRET B5 + + +DOG_COUNT .EQU 8000H ;EVERY 32K + .align +************************************************************************** +* * +* RAMCHECK * +* * +* CHECK A BANK OF RAM, GIVEN A STARTING TABLE ADDRESS * +* * +* ENTRY * +* A14 POINTER TO RAM TABLE * +* B5 RETURN ADDRESS * +* * +* EXIT * +* B0 LIST OF ERRORS * +* * +************************************************************************** + +RAMCHECK: +; move a0,@WATCHDOG ;Reset +;DJT Start + move @_watchdog_addr,a0,L ;Dog loaded here only! Needs to stay + move a0,*a0 ; in A0 cuz SRAM test kills it! +;DJT End + + SETF 16,0,0 + SETF 32,0,1 + +; SNAG NEXT CHIP RECORD + +RAMLOOP: + CLR B2 + MOVE *A14(RAM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(RAM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(RAM_ITLV),A11,W ; INTERLEAVE + MOVE *A14(RAM_WDTH),A10,W ; WIDTH + +; CELL COUNT + + SUB A12,A13 ; (END-START)/INTERLEAVE+1 + DIVU A11,A13 + INC A13 + +; SET FIELD SIZES + + MOVE A11,A9 ; FS1 = INTERLEAVE + ANDI ZERO_EXTEND,A9 + EXGF A9,1 + + MOVE A10,A9 ; FS0 = WIDTH + ANDI ZERO_EXTEND,A9 + EXGF A9,0 + +; FILL IN ASCENDING ORDER + + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + CLR A5 + MOVI DOG_COUNT,B14 + +RAC1 + SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC2 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC2 + MOVE A7,A6 + ADDC A5,A6 + + MOVE A6,*A8+,1 ; WRITE + DSJS B14,RAC1_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC1_NODOG + DSJS A9,RAC1 + + ;READBACK IN ASCENDING ORDER + MOVE A13,A9 ; XEROX COUNT + MOVE A12,A8 ; XEROX START + + MOVI RANDOM_SEED,A7 + MOVI DOG_COUNT,B14 + +RAC3 SLA 1,A7 ; GENERATE A PSEUDO + JRV RAC4 ; RANDOM NUMBER + movk 2,a4 + or a4,a7 +RAC4 MOVE A7,A6 + ADDC A5,A6 + + move *a8,a4,0 ;Read + add a11,a8 + ZEXT A6 + + CMP A6,A4 + jrne rac5 ;Error? + + DSJS B14,RAC5_NODOG + +; movb a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + movb a0,*a0 + + MOVI DOG_COUNT,B14 ;AND RELOAD COUNT +RAC5_NODOG + DSJS A9,RAC3 + + jruc showstat + +rac5 ;Error! + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 + MOVE *A14(RAM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT + + +showstat + SETF 16,0,0 ; RESET FIELDS + SETF 32,0,1 +; move a0,@WATCHDOG ;Reset +;DJT Start +; move @_watchdog_addr,a0,L ;Loaded on entry +;DJT End + move a0,*a0 + + +; B1 SHOULD BE ZERO IF THE CHIP IS COOL HERE + + MOVE *A14(RAM_LINK),A10,L + JRZ RAMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ RAMPLOT + MOVK 2,A11 +RAMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 +;DJT Start + move a0,@_watchdog_addr,L ;Save Dog in case it was killed + FCALL CHIPOUT,B5 + move @_watchdog_addr,a0,L ;Get Dog back again +;DJT End + MOVE A13,B0 + MOVE A9,B5 + +RAMNOPLOT + ADDI RAM_SIZE,A14 ; ADVANCE TO NEXT GUY + MOVE *A14,A7,W + JRNZ RAMLOOP ; HERE WE GO AGAIN + FRET B5 + + +************************************************************************** +* * +* ROMCHECK - ROUTINE TO CHECKSUM THE PROGRAM AND IMAGE ROMS. * +* RETURNS * +* B0 = BITS SET FOR BAD ROMS. * +* Z = TEST FINISHED. * +* NZ = TEST ABORTED BY USER. * +* * +************************************************************************** + .align + +ROMCHECK: +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 +ROMLOOP + CLR B2 + MOVE *A14(ROM_CKSM),A13,L ; CHECK TO SEE IF ROM SOCKET THERE + JRZ ROMEMPTY + CLR A8 ; CHECKSUM + + MOVI DOG_COUNT,B14 + + MOVE *A14(ROM_SADR),A12,L ; STARTING ADDRESS + MOVE *A14(ROM_EADR),A13,L ; ENDING ADDRESS + MOVE *A14(ROM_ITLV),A11,W ; INTERLEAVE +; +; SUM UP A GIVEN IMAGE ROM -- THE TUNIT WAY +; + SUB A12,A13 ; (( EADDR - SADDR ) / INTERLEAVE) + 1 + DIVU A11,A13 + INC A13 + setf 8,0,1 +rcilp + move *a12,a7,1 ;Get a byte + add a11,a12 + add a7,a8 + dsjs b14,rcilp_nodog +; move a0,@WATCHDOG ;Reset + setf 32,0,1 + move @_watchdog_addr,a0,L + move a0,*a0 + setf 8,0,1 + movi DOG_COUNT,b14 ;AND RELOAD COUNT +rcilp_nodog + dsjs a13,rcilp + + setf 32,0,1 + +*LAND HERE FROM IMAGE CHECKSUM TO DETERMINE IF WE HIT IT +;ROMCKCK + MOVE *A14(ROM_CKSM),A7,W +ROM_COMPARE + ZEXT A7 + ZEXT A8 + CMP A7,A8 + JRZ ROMRELOOP + MOVE *A14(ROM_NMBR),A4,W ; GET BIT NUMBER TO SET + MOVE A4,B1 + MOVK 1,B2 + SLL B1,B2 + OR B2,B0 ; SET THAT BIT +ROMRELOOP +; move a0,@WATCHDOG ;Reset + move @_watchdog_addr,a0,L + move a0,*a0 + MOVE *A14(ROM_LINK),A10,L + JRZ ROMNOPLOT + MOVK 1,A11 + MOVE B2,B2 + JRZ ROMPLOT + MOVK 2,A11 +ROMPLOT + MOVE B5,A9 ; I HOPE THIS ONE IS SAFE! + MOVE B0,A13 + FCALL CHIPOUT,B5 + MOVE A13,B0 + MOVE A9,B5 + +ROMNOPLOT + ADDI ROM_SIZE,A14 +*CHECKING FOR EARLY EXIT BY OPERATOR +; MOVE @SWITCH,A13,L + move @_coin_addr,a13,L + move *a13,a13,W +;MJL + sll 16,a13 +;MJL END + + ANDI START_BITS,A13 + CMPI START_BITS,A13 + JRNE ROMABORT +; MOVE A13,A8 +; ANDI 00000004H,A13 ;CHECK PLAYER 1 START +; JRZ ROMABORT ;BR = IT'S PRESSED +; ANDI 00000020H,A8 ;CHECK PLAYER 2 START +; JRZ ROMABORT ;BR = IT'S PRESSED + JRUC ROMLOOP ;BACK FOR THE NEXT +*HERE ON OPERATOR ABORT +ROMABORT + CLRZ + FRET B5 +ROMEMPTY + clr a12 + setz + FRET B5 + + +************************************************************************** +* * +* MONITOR STUFF * +* * +************************************************************************** +CROSS_H +CONV_PLOT + MOVI MON_RECS,A9 +CPRLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPRDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; DIMENSIONS + FCALL RECTANGLE,B6 + JRUC CPRLP1 +CPRDONE + MOVI MON_VECS,A9 ; POINT AT VECTOR TABLE +CPVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ CPVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC CPVLP1 +CPVDONE + MOVI MON_DOTS,A9 ; POINT AT DOT TABLE +CPDLP1 + MOVE *A9+,A1,W ; GET COLOR + JRZ CPDDONE + MOVE *A9+,A0,L ; GET THE POINT + FCALL POINT,B6 + JRUC CPDLP1 +CPDDONE + RETS +************************************************************************** +* * +* MONITOR TEST DATA AREA * +* * +************************************************************************** + +MON_VECS: + VECMAC ROBO_WHITE,004,004,390,004 + VECMAC ROBO_WHITE,004,004,004,250 + VECMAC ROBO_WHITE,004,250,390,250 + VECMAC ROBO_WHITE,390,250,390,004 + VECMAC ROBO_WHITE,060,005,060,250 + VECMAC ROBO_WHITE,115,005,115,250 + VECMAC ROBO_WHITE,170,005,170,250 + VECMAC ROBO_WHITE,225,005,225,250 + VECMAC ROBO_WHITE,280,005,280,250 + VECMAC ROBO_WHITE,335,005,335,250 + VECMAC ROBO_WHITE,005,054,390,054 + VECMAC ROBO_WHITE,005,103,390,103 + VECMAC ROBO_WHITE,005,152,390,152 + VECMAC ROBO_WHITE,005,201,390,201 + .LONG 0 + +MON_RECS: + VECMAC ROBO_RED, 182,000,030,005 ; TOP + VECMAC ROBO_GREEN, 182,005,030,006 + VECMAC ROBO_RED, 182,250,030,005 ; BOTTOM + VECMAC ROBO_GREEN, 182,244,030,006 + VECMAC ROBO_RED, 000,117,005,020 ; LEFT + VECMAC ROBO_GREEN, 005,117,006,020 + VECMAC ROBO_RED, 390,117,005,020 ; RIGHT + VECMAC ROBO_GREEN, 384,117,006,020 + .LONG 0 + +MON_DOTS: + DOTMAC ROBO_WHITE,032,029 + DOTMAC ROBO_WHITE,087,029 + DOTMAC ROBO_WHITE,142,029 + DOTMAC ROBO_WHITE,197,029 + DOTMAC ROBO_WHITE,252,029 + DOTMAC ROBO_WHITE,307,029 + DOTMAC ROBO_WHITE,362,029 + + DOTMAC ROBO_WHITE,032,078 + DOTMAC ROBO_WHITE,087,078 + DOTMAC ROBO_WHITE,142,078 + DOTMAC ROBO_WHITE,197,078 + DOTMAC ROBO_WHITE,252,078 + DOTMAC ROBO_WHITE,307,078 + DOTMAC ROBO_WHITE,362,078 + + DOTMAC ROBO_WHITE,032,127 + DOTMAC ROBO_WHITE,087,127 + DOTMAC ROBO_WHITE,142,127 + DOTMAC ROBO_WHITE,197,127 + DOTMAC ROBO_WHITE,252,127 + DOTMAC ROBO_WHITE,307,127 + DOTMAC ROBO_WHITE,362,127 + + DOTMAC ROBO_WHITE,032,176 + DOTMAC ROBO_WHITE,087,176 + DOTMAC ROBO_WHITE,142,176 + DOTMAC ROBO_WHITE,197,176 + DOTMAC ROBO_WHITE,252,176 + DOTMAC ROBO_WHITE,307,176 + DOTMAC ROBO_WHITE,362,176 + + DOTMAC ROBO_WHITE,032,225 + DOTMAC ROBO_WHITE,087,225 + DOTMAC ROBO_WHITE,142,225 + DOTMAC ROBO_WHITE,197,225 + DOTMAC ROBO_WHITE,252,225 + DOTMAC ROBO_WHITE,307,225 + DOTMAC ROBO_WHITE,362,225 + .LONG 0 + +PRIMARY_COLORS: + RECTMAC ROBO_RED,0,0,395,255 + RECTMAC ROBO_GREEN,0,0,395,255 + RECTMAC ROBO_BLUE,0,0,395,255 + .LONG 0 + +COLOR_BARS: + + RECTMAC ROBO_BLACK, 0, 0, 49, 16 + RECTMAC ROBO_BLACK, 49, 0, 49, 16 + RECTMAC ROBO_BLACK, 98, 0, 49, 16 + RECTMAC ROBO_BLACK, 147, 0, 49, 16 + RECTMAC ROBO_BLACK, 196, 0, 49, 16 + RECTMAC ROBO_BLACK, 245, 0, 49, 16 + RECTMAC ROBO_BLACK, 294, 0, 49, 16 + RECTMAC ROBO_BLACK, 343, 0, 49, 16 + .LONG 0 + + + +************************************************************************** +* * +* COLORBAR * +* * +************************************************************************** +COL_BARS +COLORBAR + + MOVI INTENSITIES_START,A0,L + MOVI COLRAM+100H,A1,L + + MOVK 16, A2 ;5 BITS / COLOR + MOVK 8, A6 ;# COLOR BARS +CB3 + ADDI >F00,A1 ;STEP TO NEXT PALETTE + MOVE *A0+,A3 ;STARTING COLOR + MOVE *A0+,A4 ;COLOR DECREMENT + + MOVE A2,A5 + +CB4 MOVE A3,*A1+ + SUB A4,A3 + DSJS A5,CB4 + DSJS A6,CB3 + +; ========================= +; | DISPLAY COLOR BARS | +; ========================= + + CLR A14 + MOVE A14,@DMACTRL,W ; HALT THE DMA + MOVE A14,@DMACTRL,W + MOVI 0101H,A14 + MOVE A14,A8 + + MOVI COLOR_BARS, A3, L ; COLOR BAR TABLE + MOVI [16,0], A13, L ; POSITION INCRMENT + MOVI 101H,A12 + MOVK 16, A11 ; # INTENSITIES / BAR + MOVK 8,A6 ;THIS MANY BARS +CB6 + CLR A2 ; STARTING COLOR + MOVE *A3+,A1,L + JRZ CB8 + MOVE A8,@DMACMAP,W ;STUFF PALETTE + MOVE *A3+,A0,L + ADDK 16,A3 + MOVE A11,A10 +CB7 + FCALL RECTANGLE, B6 + ADD A13, A0 + ADD A12, A2 + DSJS A10, CB7 + ADD A14,A8 ;NEXT PALETTE PLEASE + DSJ A6,CB6 + +CB8 + CLR A14 + MOVE A14,@DMACMAP + RETS + + +INTENSITIES_START + + .WORD 03E0H ; GREEN + .WORD 0040H ; BUMP GREEN + + .WORD 7C00H ; RED + .WORD 0800H ; BUMP RED + + .WORD 001FH ; BLUE + .WORD 0002H ; BUMP BLUE + + .WORD 0000H ; BLACK + .WORD 0000H ; BUMP BLACK + + .WORD 7FFFH ; WHITE + .WORD 0842H ; BUMP WHITE + + .WORD 7FE0H ; YELLOW + .WORD 0840H ; BUMP YELLOW + + .WORD 7C1FH ; PURPLE + .WORD 0802H ; BUMP PURPLE + + .WORD 03FFH ; CYAN + .WORD 0042H ; BUMP CYAN + + .LONG 0 + +************************************************************************** +* SWITCHTEST - Test regular or DIP switches +* A0=Mode (0=Switches, 1=DIPs) + +DONEMASK EQU 00240000H ; P1 + P2 START + .BSS DONECNT,32 ; FOR SWITCH TEST + +SWITCHTEST + PUSH a12,a13 + + subk 1,a0 + jreq DIPTEST + clr a0 + move a0,@_switch_map_mode,L ; No switch mapping + +; CALLA WDOGDIS + movk 10h,A13 + MOVE A13,@DONECNT,L + CLR A13 ; THE HOLD ME REGISTER + MOVE A13,@SWSET1,L + MOVE A13,@SWSET2,L + MOVI BUT_TABLE,A9 + CLR A10 + CALLR BUT_PLOT ; PLOT SOME BUTTONS + MOVI JOY_TABLE,A9 + CALLR JOY_PLOT ; PLOT THE JOYSTICKS + MOVI STR_TABLE,A9 + CALLR STR_PLOT ; PLOT THE STRINGS + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS +; MOVI [180,0],A0 +; MOVI [180,400],A1 + MOVI [172,0],A0 + MOVI [172,400],A1 + MOVI ROBO_WHITE,A2 + FCALL HVLINE,B6 ; DRAW LITTLE WHITE LINE +SDLOOP + PULL a12,a13 + SLEEPK 2 + PUSH a12,a13 + +; move @COINS,a10,W +; move @SWITCH,a14,W + move @_coin_addr,a10,L + move *a10,a10,W + move @_switch_addr,a14,L + move *a14,a14,W + sll 16,a10 + sll 16,a14 ;mask off top 16 + srl 16,a14 + or a14,a10 + +; MOVE @SWITCH,A10,L ; GRAB ME A SWITCH REGISTER + + NOT A10 + MOVE A10,A0 + ANDI DONEMASK,A0 + CMPI DONEMASK,A0,L ; CHECK FOR DONE + JRNZ SDGO + MOVE @DONECNT,A0,L ;REQUIRE A CERTAIN TIME + DEC A0 + MOVE A0,@DONECNT,L + JRNE SDGO + +switchx PULL a12,a13 + movk 1,a0 + move a0,@_switch_map_mode,L ; Back to menu switch map + RETP + +SDGO + MOVE @SWSET1,A11,L + CMP A11,A10 ; CHECK FOR CHANGES + JRZ SDCK2 + MOVE A10,@SWSET1,L +; MOVE @SWITCH+32,A10,L + move @_switch2_addr,a10,L + move *a10,a10,W + NOT A10 + SLL 16,A10 + SRL 16,A10 + JRUC SDPRC1 +SDCK2 +;JML +; MOVE @SWITCH+32,A10,L +; NOT A10 +; SLL 16,A10 +; SRL 16,A10 +; move @SWITCH2,a10,W + move @_switch2_addr,a10,L + move *a10,a10,W + not a10 + sll 16,a10 + srl 16,a10 +;JML End + MOVE @SWSET2,A11,L + CMP A11,A10 + JRZ SDLOOP +SDPRC1 + MOVE A10,@SWSET2,L +SDPROC + CLR A0 + MOVE A0,@SCHANGE + + MOVI BUT_TABLE,A9 + CALLR BUT_PLOT + MOVI BUT_STRS,A9 + CALLR STR_PLOT ; PLOT THE BUTTON STRINGS + MOVI JOY_TABLE,A9 + CALLR JOY_UPDATE ; UPDATE THE JOYSTICK INFO + + MOVE @SCHANGE,A0 + JRZ SDLOOP + + MOVI SWITCH_SND,A0 + MOVE A0,@SOUND + JRUC SDLOOP + + + +************************************************************************** +* * +* SET_DIP_COINAGE - SETUP COINAGE ACCORDING TO THE DIPSWITCHES * +* * +************************************************************************** +SET_DIP_COINAGE + MMTM SP,A0,A1,A2,A6 + + CALLR READ_DIP + MOVE A0,A2 + ANDI DPUSECMOS,A2 ;USING CMOS? + JRNZ SDC_X ;BR=YES, DO NOT LOAD COINAGE + + MOVE A0,A2 + ANDI DPCOUNTRY,A0 + + SRL DPCOUNTRY_SRL,A0 ; CHANGE TO TO MULTIPLE OF 32 + SLL 5,A0 + + ADDI DIPCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + + ANDI DPCOINAGE,A2 + CMPI DPCOINAGE,A2 ; CHECK FOR FREEPLAY + JRZ CMOS21 + + SRL DPCOINAGE_SRL,A2 + SLL 4,A2 + + ADD A2,A1 + MOVE *A1,A1,W ; WHICH COIN TABLE TO USE + + MOVI ADJPRICE,A0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CMP A0,A1 ;DID WE CHANGE COIN MODES + JREQ SDC_SAMEC + CALLA NO_CREDS ;CLEAR CREDITS + CALLA CRED_P ;LINK-OUT! +SDC_SAMEC + MOVI ADJPRICE,A0 ; MASTER PRICING + CALLA PUT_ADJ ; STUFF IT IN CMOS + MOVI ADJFREPL,A0 + CLR A1 ; MAKE SURE NO FREEPLAY + CALLA PUT_ADJ +CMOS20 + MOVI ADJ1ST6,A0 ;MAKE THEM UNTOUCHED PLEASE + MOVK 1,A1 + CALLA PUT_ADJ + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + CALLA GET_CSPT + CALLA SET_COIN_ADJ ; SET THE ADJUSTMENTS UP IN CMOS + + CALLA F_ADC_S ;CHECKSUM THE ADJUSTMENTS + + JRUC SDC_X +CMOS21 + MOVI ADJFREPL,A0 + MOVK 1,A1 ; FREEPLAY, DUDE! + CALLA PUT_ADJ + JRUC CMOS20 +SDC_X + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* DIPTEST * +* * +* DIP SWITCH TESTING * +* * +************************************************************************** + +DIPTEST: + movk 3,a14 + move a14,@_switch_map_mode,L ; Any button mapping + MOVK 1,A14 + MOVE A14,@DIP1ST,W ;YES THIS IS THE FIRST TIME THROUGH + CALLR READ_DIP + MOVE A0,@DIPVAL,W + +DT_PLOT + MOVI DIP_VECS,A9 ; POINT AT VECTOR TABLE +DTVLP1 + MOVE *A9+,A2,W ; GET COLOR + JRZ DTVDONE + MOVE *A9+,A0,L ; START POINT + MOVE *A9+,A1,L ; END POINT + FCALL HVLINE,B6 + JRUC DTVLP1 +DTVDONE + MOVI DIP_STRS,A9 + CALLR STR_PLOT + + CALLR SET_DIP_COINAGE + + CALLR DIPPLOT + CALLR DIPSTATE + + MOVE @DIP1ST,A14,W + JRNZ DTL_SKIP_SND + + MOVI DIP_SND,A0 +; MOVE A0,@SOUND,W + move @_sound_addr,a9,L + move a0,*a9,W + +DTL_SKIP_SND + CLRM @DIP1ST,W + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DTLOOP + PULL a12,a13 + SLEEPK 1 + PUSH a12,a13 + +; CALLA CKTEST ; EMERGENCY EXIT + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DT_X + + CALLR READ_DIP + MOVE @DIPVAL,A1,W + ZEXT A1 + CMP A0,A1 + JRZ DTLOOP ;BR = NO CHANGE + MOVE A0,@DIPVAL,W ;SAVE THE OLD + JRUC DT_PLOT ;PLOT THE NEW SWITCH STUFF +DT_X + JRUC switchx + + +************************************************************************** +* * +* DIPSTATE * +* * +* PLOT OUT THE STATES OF ALL THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +DIPSTATE +;; MOVI [32,74],A0 + MOVI [82,74],A0 + MOVI [104,140],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + MOVI [82,284],A0 +;; MOVI [32,284],A0 + MOVI [104,111],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + + CALLR READ_DIP + MOVE A0,A10 ;LET'S KEEP A COPY + + CLR A2 + MOVI COLOR_WHITE,A3 + + CLR A7 + MOVI DUSECMOS_0,A1 + ANDI DPUSECMOS,A0 + JRZ DS1 + MOVK 1,A7 + MOVI DUSECMOS_1,A1 +DS1 + MOVE A1,A0 +;; MOVI [39,75],A1 + MOVI [89,75],A1 + FCALL STRING,B6 + +*PLOT CURRENT COINAGE + MOVE A7,A7 ;ARE WE CMOS OR DIPSWITCH + JRZ DS_PC ;BR = DIPSWITCH + +;; MOVI [63,75],A1 + MOVI [113,75],A1 + MOVI DUNUSED,A0 ;JUST PRINT UNUSED + FCALL STRING,B6 + JRUC DS_SC ;AND GO FOR THE NEXT SWITCHES + +DS_PC + MOVI COLOR_WHITE,A3 +;; MOVI [51,75],A1 + MOVI [101,75],A1 + MOVI DCOINAGE,A0 + FCALL STRING,B6 + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOINTAB,A0 + MOVE *A0,A1,L ; POINTER TO RIGHT COIN TABLE + MOVE A10,A0 + ANDI DPCOINAGE,A0 + SRL DPCOINAGE_SRL,A0 + SLL 5,A0 + ADD A0,A1 + MOVE *A1,A0,L ; NOW POINTING AT MESSAGE + CLR A2 +;; MOVI [51,132],A1 + MOVI [101,132],A1 + FCALL STRING,B6 + +*PLOT CREDITS TO START, CREDITS TO CONTINUE + MOVI DTOSTART,A0 +;; MOVI [63,90],A1 + MOVI [113,90],A1 + FCALL STRING,B6 + + MOVI DTOCONTINUE,A0 +;; MOVI [75,90],A1 + MOVI [125,90],A1 + FCALL STRING,B6 + + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTS_1 + MOVK 9,A8 +DSTS_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [63,80],A1 + MOVI [113,80],A1 + FCALL STRING,B6 + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ; GET NUMBER NEEDED ( IN A0 ) + MOVE A0,A8 + CMPI 9,A8 + JRLS DSTC_1 + MOVK 9,A8 +DSTC_1 + CALLA HEXTOASC + MOVE A8,A0 +;; MOVI [75,80],A1 + MOVI [125,80],A1 + FCALL STRING,B6 + + +DS_SC +*PLOT COUNTRY SELECTION + MOVE A10,A0 + ANDI DPCOUNTRY,A0 + SRL DPCOUNTRY_SRL,A0 + SLL 5,A0 + ADDI DCOUNTRY_TAB,A0 + MOVE *A0,A0,L +;; MOVI [93,75],A1 + MOVI [143,75],A1 + FCALL STRING,B6 + +*PLOT COIN COUNTER MODE + MOVE A10,A7 + ANDI DPCOUNTER,A7 + SRL DPCOUNTER_SRL,A7 + SLL 6,A7 + ADDI DCOUNTER_TAB,A7 + MOVE *A7+,A0,L + MOVI [163,75],A1 +;; MOVI [113,75],A1 + FCALL STRING,B6 + MOVE *A7+,A0,L +;; MOVI [125,75],A1 + MOVI [175,75],A1 + FCALL STRING,B6 + + +*PLOT NUMBER OF PLAYERS ALLOWED + MOVE A10,A0 ;ADD THE FOLLOWING FOR PLAYER # + ANDI DPPLAYERS,A0 + RJST A0 + SLL 5,A0 + ADDI DPLAYER_TAB,A0 + MOVE *A0,A0,L + + +;TEMP!!! TAKE THIS OUT FOR KIT; IS THIS HOW TE SHIPPED? +; MOVI DUNUSED,A0 + + +;; MOVI [39,285],A1 + MOVI [89,285],A1 + FCALL STRING,B6 +;;; + +*PLOT DOLLAR BILL VALIDATOR STATUS + MOVI DNOVALIDATOR,A0 ;ASSUME NO VALIDATOR + MOVE A10,A1 + ANDI DPVALIDATOR,A1 ;DO WE HAVE ONE? + JRZ DSTS_NOV ;BR = NO + MOVI DVALIDATOR,A0 ;ASSUME NO VALIDATOR + +DSTS_NOV + MOVI [101,285],A1 +;; MOVI [51,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 6 + +;;*PLOT video clips off/on message +;; MOVI DCLIPS,A0 ;Assume clips on +;; MOVE A10,A1 +;; ANDI DPNOVIDCLIPS,A1 +;; JRZ DSTS_NOC ;BR = NO +;; MOVI DNOCLIPS,A0 ;Assume no clips wanted +;; +;;DSTS_NOC + + MOVI DUNUSED,A0 +;; MOVI [63,285],A1 + MOVI [113,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 5 + MOVI DUNUSED,A0 +;; MOVI [75,285],A1 + MOVI [125,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 4 + MOVI DUNUSED,A0 +;; MOVI [87,285],A1 + MOVI [137,285],A1 + FCALL STRING,B6 + + +*PLOT SW1 SWITCH 3 +;; movi D4MEGIROM,a0 +;; move a10,a1 +;; andi DP4MEG,a1 +;; jrz dsts_4meg +;; movi D8MEGIROM,a0 +;;dsts_4meg: + + MOVI DUNUSED,A0 +;; MOVI [99,285],A1 + MOVI [149,285],A1 + FCALL STRING,B6 + + +*PLOT SKIP OVER POWERUP TEST MESSAGE + MOVI DPOWER,A0 + MOVE A10,A1 + ANDI DPPOWER,A1 + JRZ DSTS_NOP + MOVI DNOPOWER,A0 +DSTS_NOP + MOVI [161,285],A1 +;; MOVI [111,285],A1 + FCALL STRING,B6 + + +*PLOT TEST SWITCH MESSAGE + MOVI DTEST_0,A0 + MOVI [173,285],A1 +;; MOVI [123,285],A1 + FCALL STRING,B6 + + RETS + + +************************************************************************** +* * +* DIPPLOT * +* * +* PLOT OUT THE DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +DIPPLOT: +;; MOVI [33,21],A0 + MOVI [83,21],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 +;; MOVI [33,231],A0 + MOVI [83,231],A0 + MOVI [104,38],A1 + MOVI COLOR_BLACK,A2 + FCALL RECTANGLE,B6 + CALLR READ_DIP + CLR A2 +DIPLOOP + MOVE A2,A3 + SLL 5,A3 + ADDI DIPYTAB,A3 + MOVE *A3,A3,L + SLL 16,A3 ; GOT THE Y LOC + + CLR A5 + CMPI 8,A2 + .IF TUNIT=0 + JRLO DIPL2 + .ELSE + JRHS DIPL2 + .ENDIF + MOVI 210,A5 +DIPL2 + MOVX A5,A3 + + BTST A2,A0 ; CHECK IF BIT IS SET + JRNZ DIPON + MOVI DP_OFF,A1 + ADDI 29,A3 + MOVI COLOR_GREY,A4 + JRUC DIPSTR + +DIPON + MOVI DP_ON,A1 + ADDI 32,A3 + MOVI COLOR_WHITE,A4 + +DIPSTR + MMTM SP,A0,A2 + MOVE A1,A0 ; SET STRING + MOVE A3,A1 ; SET LOCATION + MOVE A4,A3 + CLR A2 ; HORIZONTAL + FCALL STRING,B6 + MMFM SP,A0,A2 + INC A2 + CMPI 16,A2 + JRLO DIPLOOP + RETS + + +DIPYTAB + .LONG 89,101,113,125,137,149,161,173 + .LONG 89,101,113,125,137,149,161,173 +;; .LONG 39,51,63,75,87,99,111,123 +;; .LONG 39,51,63,75,87,99,111,123 + + +************************************************************************** +* * +* READ_DIP * +* * +* READ IN BOTH DIP SWITCHES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 DIP SWITCH * +* * +************************************************************************** + +READ_DIP: + MMTM SP,A1,A2,A3 + +; MOVE @DIPSWITCH,A0,W ; READ IT IN + move @_dipswitch_addr,a0,L + move *a0,a0,W + NOT A0 ; INVERT IT FOR TRUE BITS + CLR A1 + movk 7,a2 +RDLOOP + BTST A2,A0 + JRZ RD1 + MOVK 7,A3 + SUB A2,A3 + BSET A3,A1 +RD1 + addk 8,a2 + BTST A2,A0 + JRZ RD2 + MOVK 15,A3 + SUB A2,A3 + addk 8,a3 + BSET A3,A1 +RD2 + subk 8,a2 + DEC A2 + JRNN RDLOOP + MOVE A1,A0 + + MMFM SP,A1,A2,A3 + RETS + + +************************************************************************** +* * +* JOY_MESS * +* * +* PLOT THE STATUS OF A JOYSTICK AROUND A CIRCLE * +* * +* ENTRY * +* A9 CENTER OF STICK CIRCLE * +* A10 BUTTON MASK * +* A11 COLOR * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_MESS + MOVI JJJTAB,A8 + MOVK 4,A7 +JML + MOVI ROBO_BLACK,A3 + SRL 1,A10 + JRNC JM1 + MOVE A11,A3 ; SET COLOR + MOVK 1,A14 + MOVE A14,@SCHANGE,W +JM1 + MOVE *A8+,A0,L + MOVE A9,A1 ; CIRCLE CENTER + MOVB *A8,A2 ;X CORRECTION + ADDK 8,A8 + ADD A2,A1 + MOVB *A8,A2 ;Y CORRECTION + ADDK 8,A8 + SLL 16,A2 + ADD A2,A1 + CLR A2 ; DIRECTION + CALLR STRNEW + DSJS A7,JML + RETS +* +*JOYSTICK MESSAGE TABLE +* +JJJTAB + .LONG UPMESS + .BYTE -7,-25 + + .LONG DOWNMESS + .BYTE -13,18 + + .LONG LEFTMESS + .BYTE -39,-4 + + .LONG RIGHTMESS + .BYTE 18,-4 + + + +************************************************************************** +* * +* BUT_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* A10 SETTINGS OF THE SWITCH REGISTER * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +BUT_PLOT: + clr b4 ;OFFSET + + MOVE *A9,A1,L ; XY LOC + JRZ BPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A6,L ; COLOR + MOVE *A9+,A11,L ; GET MASK + ADDK 16,A9 ; SHIFT COUNT + MOVE *A9,A8,W ; JAMMA EXTEND-O-BIT + JRZ BPLOW + MOVE @SWSET2,A10,L + JRUC BPAND +BPLOW + MOVE @SWSET1,A10,L +BPAND + ADDK 16,A9 + AND A10,A11 ; MASK OFF SOMETHING USEFUL + JRZ BPHOLLOW + ADDI CFILL,A6 ; MASK IN THE FILL BITS + JRUC BPCIRC +BPHOLLOW + MMTM SP,A0,A1,A6 + MOVI ROBO_BLACK,A6 + ADDI CFILL,A6 + FCALL CIRCLE,B6 + MMFM SP,A0,A1,A6 + JRUC BPCIRC2 +BPCIRC + MOVK 1,A14 + MOVE A14,@SCHANGE,W +BPCIRC2 + FCALL CIRCLE,B6 + JRUC BUT_PLOT +BPDONE + RETS + +************************************************************************** +* * +* JOY_PLOT * +* * +* PLOT A BUTTON TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO BUTTON TABLE LIST * +* * +************************************************************************** + +JOY_PLOT: + MOVE *A9,A1,L ; XY LOC + JRZ JPDONE + ADDK 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9,A6,L ; COLOR + ADDI 96,A9 + FCALL CIRCLE,B6 + JRUC JOY_PLOT +JPDONE + RETS + +************************************************************************** +* * +* JOY_UPDATE * +* * +* UPDATE ALL THE STICK INFORMATION * +* * +* ENTRY * +* A9 JOYSTICK TABLE POINTER * +* A10 SWITCH INFORMATION * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** + +JOY_UPDATE: + MOVE *A9,A1,L ; XY LOC + JRZ JUDONE + ADDI 32,A9 + MOVE *A9+,A0 ; RADIUS + MOVE *A9+,A11,L ; COLOR + MOVE *A9+,A6,L ; MASK + MOVE *A9+,A7 ; SHIFT COUNT + MOVE *A9,A8 ; EXTEND-O-BIT FOR JAMMA + JRZ JULOW + MOVE @SWSET2,A10,L + JRUC JUAND +JULOW + MOVE @SWSET1,A10,L +JUAND + ADDK 16,A9 + AND A10,A6 ; MASK OFF JOYSTICK BITS + NOT A7 + ADDK 1,A7 + SRL A7,A6 ; ZERO BASE THE LITTLE SUCKER + MMTM SP,A9,A10,A8,A7 + MOVE A1,A9 ; CENTER OF STICK HERE + MOVE A6,A10 ; BUTTON MASK + CALLR JOY_MESS + MMFM SP,A9,A10,A8,A7 + JRUC JOY_UPDATE +JUDONE + RETS + + +************************************************************************** +* * +* STR_PLOT * +* * +* PLOT A STRING TABLE ON THE SCREEN * +* * +* ENTRY * +* A9 POINTS TO STRING TABLE LIST * +* * +************************************************************************** + +STR_PLOT + MOVE *A9,A1,L ;XY LOC + JRZ STDONE + ADDK 32,A9 + MOVE *A9+,A0,L ;STRING PTR + MOVE *A9+,A3 ;COLOR + MOVE *A9+,A2 ;DIRECTION + FCALL STRING,B6 + JRUC STR_PLOT +STDONE + RETS + +CFILL EQU 0FFFF0000H + + +; FORMAT +; +; X,Y,RADIUS,COLOR,MASK,SHIFT COUNT ( FOR JOYSTICK STUFF ), EXTENDBIT + +P1BC .equ 80 +P2BC .equ 160 +P3BC .equ 240 +P4BC .equ 320 +PBCY .equ 161 +;;BCY .equ 162-40 + +P1BX equ P2BC +P2BX equ P4BC +PBY equ 110 + +BUT_TABLE + BUT_MAC P1BC+20,PBCY,10,ROBO_BLUE,020H,0,0 ; P1 A2 + BUT_MAC P1BC,PBCY-12,10,ROBO_RED,010H,0,0 ; P1 A1 + BUT_MAC P1BC-20,PBCY,10,ROBO_WHITE,040H,0,0 ; P1 A3 + + BUT_MAC P2BC+20,PBCY,10,ROBO_BLUE,02000H,0,0 ; P2 A2 + BUT_MAC P2BC,PBCY-12,10,ROBO_RED,01000H,0,0 ; P2 A1 + BUT_MAC P2BC-20,PBCY,10,ROBO_WHITE,04000H,0,0 ; P2 A3 + + BUT_MAC P3BC+20,PBCY,10,ROBO_BLUE,020H,0,1 ; P3 A2 + BUT_MAC P3BC,PBCY-12,10,ROBO_RED,010H,0,1 ; P3 A1 + BUT_MAC P3BC-20,PBCY,10,ROBO_WHITE,040H,0,1 ; P3 A3 + + BUT_MAC P4BC+20,PBCY,10,ROBO_BLUE,02000H,0,1 ; P4 A2 + BUT_MAC P4BC,PBCY-12,10,ROBO_RED,01000H,0,1 ; P4 A1 + BUT_MAC P4BC-20,PBCY,10,ROBO_WHITE,04000H,0,1 ; P4 A3 + + BUT_MAC P1BC,70,10,ROBO_WHITE,00040000H,0,0 ; P1 START + BUT_MAC P2BC,70,10,ROBO_WHITE,00200000H,0,0 ; P2 START + BUT_MAC P3BC,70,10,ROBO_WHITE,02000000H,0,0 ; P3 START + BUT_MAC P4BC,70,10,ROBO_WHITE,04000000H,0,0 ; P4 START + + BUT_MAC 30,188,10,COLOR_GREEN,00010000H,0,0 ; COIN LEFT + BUT_MAC 30,224,10,COLOR_GREEN,00020000H,0,0 ; COIN RIGHT + BUT_MAC 75,188,10,COLOR_GREEN,00800000H,0,0 ; COIN CENTER + BUT_MAC 75,224,10,COLOR_GREEN,01000000H,0,0 ; FOURTH COIN + BUT_MAC 126,204,10,COLOR_GREEN,00400000H,0,0 ; SERVICE CREDIT + + BUT_MAC 277,188,10,COLOR_GREEN,00080000H,0,0 ; SLAM + BUT_MAC 277,224,10,COLOR_GREEN,00100000H,0,0 ; TEST + BUT_MAC 352,188,10,COLOR_GREEN,10000000H,0,0 ; VOLUME UP + BUT_MAC 352,224,10,COLOR_GREEN,08000000H,0,0 ; VOLUME DOWN + BUT_MAC 194,188,10,COLOR_PURPLE,20000000H,0,0 ; COINDOOR INTERLOCK + BUT_MAC 194,224,10,COLOR_GREEN,80000000H,0,0 ; BILL VALIDATOR INPUT + .LONG 0 + + + ; X,Y,RADIUS,COLOR,MASK,SHIFT,EXTEND +JOY_TABLE + BUT_MAC P1BC,110,16,CFILL+ROBO_RED,0fH,0,0 ; P1 MOVE + BUT_MAC P2BC,110,16,CFILL+ROBO_RED,0f00H,8,0 ; P2 MOVE + BUT_MAC P3BC,110,16,CFILL+ROBO_RED,0fh,0,1 ; P3 MOVE + BUT_MAC P4BC,110,16,CFILL+ROBO_RED,0f00H,8,1 ; P4 MOVE + .LONG 0 + + +STR_TABLE + STR_MAC 136,15,STSTART,ROBO_YELLOW,0 ; JAM SWITCH MESSAGE + + STR_MAC P1BC-24,47,P1START,ROBO_RED,0 ; P1 START + STR_MAC P2BC-24,47,P2START,ROBO_RED,0 ; P2 START + STR_MAC P3BC-24,47,P3START,ROBO_RED,0 ; P1 START + STR_MAC P4BC-24,47,P4START,ROBO_RED,0 ; P2 START + + STR_MAC 94,30,GETOUT1,ROBO_WHITE,0 ;GET OUT MESSAGE 1 + +; STR_MAC 12,233,LEFTSLOT,COLOR_GREEN,0 ;LEFT COIN +; STR_MAC 56,233,RIGHTSLOT,COLOR_GREEN,0 ;RIGHT COIN + STR_MAC 58,202,CENTER,COLOR_GREEN,0 ;CENTER COIN + STR_MAC 58,237,FOURTH,COLOR_GREEN,0 ;COIN MIDDLE + STR_MAC 10,202,COINMESS1,COLOR_GREEN,0 ;BOTTOM MESSAGE + STR_MAC 10,237,COINMESS2,COLOR_GREEN,0 + + STR_MAC 102,217,SERVICE1,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 106,227,SERVICE2,COLOR_GREEN,0 ;SERVICE CREDIT + STR_MAC 247,202,SLAM,COLOR_GREEN,0 ;SLAM + STR_MAC 261,237,TEST,COLOR_GREEN,0 ;TEST SWITCH + + STR_MAC P1BC-15,110-3,J1MESS,ROBO_WHITE,0 + STR_MAC P2BC-15,110-3,J2MESS,ROBO_WHITE,0 + STR_MAC P3BC-15,110-3,J3MESS,ROBO_WHITE,0 + STR_MAC P4BC-15,110-3,J4MESS,ROBO_WHITE,0 + STR_MAC 330,202,VOLUP,COLOR_GREEN,0 ;VOLUME UP + STR_MAC 314,237,VOLDOWN,COLOR_GREEN,0 ;VOLUME DOWN + STR_MAC 162,202,CDINTERLOCK2,COLOR_PURPLE,0 ;COINDOOR INTERLOCK 2 + STR_MAC 174,237,BILLVALID,COLOR_GREEN,0 ;BILL VALIDATOR + .LONG 0 + + +BUT_STRS + STR_MAC P1BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P1BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P1BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P2BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P2BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P2BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P3BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P3BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P3BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + STR_MAC P4BC+18,PBCY-4,PASSMESS,ROBO_BLUE,0 ; P1 A2 + STR_MAC P4BC-3,PBCY-16,SHOOTMESS,ROBO_RED,0 ; P1 A1 + STR_MAC P4BC-23,PBCY-4,TURBOMESS,ROBO_WHITE,0 ; P1 A3 + + .LONG 0 + +************************************************************************** +* * +* DIP SWITCH DISPLAY STUFF * +* * +************************************************************************** + +DIP_VECS: + VECMAC COLOR_RED,20,82,60,82 ; DS1 + VECMAC COLOR_RED,20,82,20,188 + VECMAC COLOR_RED,20,188,60,188 + VECMAC COLOR_RED,60,82,60,188 + + VECMAC COLOR_RED,230,82,270,82 ; DS2 + VECMAC COLOR_RED,230,82,230,188 + VECMAC COLOR_RED,230,188,270,188 + VECMAC COLOR_RED,270,82,270,188 + + VECMAC COLOR_WHITE,63,92,73,92 + + VECMAC COLOR_WHITE,63,104,68,104 ;COINAGE MODE + VECMAC COLOR_WHITE,63,128,68,128 + VECMAC COLOR_WHITE,68,104,68,128 + VECMAC COLOR_WHITE,68,116,73,116 + + VECMAC COLOR_WHITE,63,140,68,140 ;COUNTRY + VECMAC COLOR_WHITE,63,152,68,152 + VECMAC COLOR_WHITE,68,140,68,152 + VECMAC COLOR_WHITE,68,146,73,146 + + VECMAC COLOR_WHITE,63,164,68,164 ;COIN COUNTER MODE + VECMAC COLOR_WHITE,63,176,68,176 + VECMAC COLOR_WHITE,68,164,68,176 + VECMAC COLOR_WHITE,68,170,73,170 + + VECMAC COLOR_WHITE,273,92,283,92 ;# OF PLAYERS + + VECMAC COLOR_WHITE,273,104,283,104 ;UNUSED + VECMAC COLOR_WHITE,273,116,283,116 ;UNUSED + VECMAC COLOR_WHITE,273,128,283,128 ;UNUSED + VECMAC COLOR_WHITE,273,140,283,140 ;UNUSED + VECMAC COLOR_WHITE,273,152,283,152 ;UNUSED + VECMAC COLOR_WHITE,273,164,283,164 ;UNUSED + + VECMAC COLOR_WHITE,273,176,283,176 ;TEST SWITCH + + .LONG 0 + + + +DIP_STRS: +; STR_MAC 124,8,DP_TITLE,COLOR_GREEN,0 + STR_MAC 30,70,DP_DS1,COLOR_WHITE,0 + STR_MAC 240,70,DP_DS2,COLOR_WHITE,0 + + STR_MAC 7,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 7,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 7,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 7,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 7,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 7,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 7,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 7,173,DP_DSN8,COLOR_WHITE,0 + + STR_MAC 217,89,DP_DSN1,COLOR_WHITE,0 + STR_MAC 217,101,DP_DSN2,COLOR_WHITE,0 + STR_MAC 217,113,DP_DSN3,COLOR_WHITE,0 + STR_MAC 217,125,DP_DSN4,COLOR_WHITE,0 + STR_MAC 217,137,DP_DSN5,COLOR_WHITE,0 + STR_MAC 217,149,DP_DSN6,COLOR_WHITE,0 + STR_MAC 217,161,DP_DSN7,COLOR_WHITE,0 + STR_MAC 217,173,DP_DSN8,COLOR_WHITE,0 + STR_MAC 100,230,DP_INS1,ROBO_LASER,0 + .LONG 0 + +DP_DS1: + .STRING "SW2",0 +; .STRING "UJ1",0 + .EVEN +DP_DS2: + .STRING "SW1",0 +; .STRING "UJ2",0 + .EVEN + +DP_DSN1 + .STRING "8",0 + .EVEN +DP_DSN2 + .STRING "7",0 + .EVEN +DP_DSN3 + .STRING "6",0 + .EVEN +DP_DSN4 + .STRING "5",0 + .EVEN +DP_DSN5 + .STRING "4",0 + .EVEN +DP_DSN6 + .STRING "3",0 + .EVEN +DP_DSN7 + .STRING "2",0 + .EVEN +DP_DSN8 + .STRING "1",0 + .EVEN + +;D4MEGIROM: +; .string "4 MEG IROM",0 +; .even +;D8MEGIROM: +; .string "8 MEG IROM",0 +; .even + +DUSECMOS_1: + .STRING "CMOS COINAGE",0 + .EVEN + +DUSECMOS_0: + .STRING "DIPSWITCH COINAGE",0 + .EVEN + +;DMIRROR_0 +; .STRING "MIRROR DISPLAY",0 +; .EVEN +; +;DMIRROR_1 +; .STRING "NORMAL DISPLAY",0 +; .EVEN + +DCOUNTER_0a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_0b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_1a + .STRING "TWO COIN COUNTERS",0 + .EVEN +DCOUNTER_1b + .STRING "1 COUNT/COIN",0 + .EVEN + +DCOUNTER_2a + .STRING "ONE COIN COUNTER",0 + .EVEN +DCOUNTER_2b + .STRING "TOTALIZING ",0 + .EVEN + + +DCOUNTER_TAB + .LONG DCOUNTER_0a, DCOUNTER_0b + .LONG DCOUNTER_1a, DCOUNTER_1b + .LONG DCOUNTER_2a, DCOUNTER_2b + .LONG DCOUNTER_0a, DCOUNTER_0b + +DCOINAGE + .STRING "COINAGE",0 + .EVEN + +DCOUNTRY_0 + .STRING "USA",0 + .EVEN +DCOUNTRY_2 + .STRING "FRENCH",0 + .EVEN + +DPLAYER_TAB + .LONG DPLAYER_0, DPLAYER_1 + +DCOUNTRY_1 + .STRING "GERMAN",0 + .EVEN + +DCOUNTRY_TAB + .LONG DCOUNTRY_0, DCOUNTRY_1, DCOUNTRY_2, DCOUNTRY_3 + +DCREDITS + .STRING "CREDITS...",0 + .EVEN +DTOSTART + .STRING "TO START",0 + .EVEN +DTOCONTINUE + .STRING "TO CONTINUE",0 + .EVEN + +DTEST_0 + .STRING "TEST SWITCH",0 + .EVEN + +DPLAYER_0 + .STRING "4 PLAYER KIT",0 + .EVEN +DPLAYER_1 + .STRING "2 PLAYER KIT",0 + .EVEN + +DNOVALIDATOR + .STRING "NO VALIDATOR",0 + .EVEN +DVALIDATOR + .STRING "VALIDATOR INST.",0 + .EVEN +;DCLIPS +; .STRING "SHOW VIDEO",0 +; .EVEN +;DNOCLIPS +; .STRING "SKIP VIDEO",0 +; .EVEN +DPOWER + .STRING "POWERUP TEST",0 + .EVEN +DNOPOWER + .STRING "SKIP TEST",0 + .EVEN + +DUCOIN7 + .STRING "FREEPLAY",0 + .EVEN + +DCOINTAB + .LONG DUCOINTAB, DGCOINTAB, DFCOINTAB, DUCOINTAB + +DP_TITLE + .STRING "DIPSWITCH SETTINGS",0 + .EVEN + +DP_INS1 + .STRING "PRESS ANY BUTTON TO EXIT",0 + .EVEN + +DP_ON + .STRING "ON",0 + .EVEN +DP_OFF + .STRING "OFF",0 + +DUNUSED +DGCOIN4 +DCOUNTRY_3 + .STRING "UNUSED",0 + .EVEN + +DUCOINTAB + .LONG USA_1,USA_2,USA_3,USA_4,USA_ELECTITLE,DGCOIN4 + .LONG DGCOIN4,DUCOIN7 + +DGCOINTAB + .LONG GERMAN_1,GERMAN_2,GERMAN_3,GERMAN_4,GERMAN_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DFCOINTAB + .LONG FRENCH_1,FRENCH_2,FRENCH_3,FRENCH_4,FRENCH_ELECTITLE + .LONG DGCOIN4,DGCOIN4,DUCOIN7 + +DCREDTAB + .LONG DP_DSN2,DP_DSN1 + .LONG DP_DSN1,DP_DSN1 + .LONG DP_DSN2,DP_DSN2 + .LONG DP_DSN3,DP_DSN1 + .LONG DP_DSN4,DP_DSN1 + .LONG DP_DSN3,DP_DSN2 + .LONG DP_DSN4,DP_DSN2 + .LONG DP_DSN3,DP_DSN3 + + + .if 0 +dip_t + STR_MAC 090h,20h,DIPMES0,ROBO_YELLOW,0 ;DIP SWITCH TEST + STR_MAC DS1_XPOS+16,3Ch,DIPMES1,ROBO_GREEN,0 ;DIP SWITCH 1 + STR_MAC DS2_XPOS+16,3Ch,DIPMES2,ROBO_GREEN,0 ;DIP SWITCH 2 + STR_MAC 200-12*8,220,GETOUT2,ROBO_GREEN,0 ;exit message + .LONG 0 + +dipline_t + .word 20,10,379,10 + .word 379,10,379,245 + .word 379,245,20,245 + .word 20,245,20,10 + + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS-4 + .word DS1_XPOS+12,DIP_YPOS+109, DS1_XPOS+43,DIP_YPOS+109 + .word DS1_XPOS+12,DIP_YPOS-4, DS1_XPOS+12,DIP_YPOS+109 + .word DS1_XPOS+43,DIP_YPOS-4, DS1_XPOS+43,DIP_YPOS+109 + + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS-4 + .word DS2_XPOS+12,DIP_YPOS+109, DS2_XPOS+43,DIP_YPOS+109 + .word DS2_XPOS+12,DIP_YPOS-4, DS2_XPOS+12,DIP_YPOS+109 + .word DS2_XPOS+43,DIP_YPOS-4, DS2_XPOS+43,DIP_YPOS+109 + + .long -1 + +dipline2 + .word DS1_XPOS+45,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+3 + .word DS1_XPOS+45,DIP_YPOS+4+5*14, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+48,DIP_YPOS+3, DS1_XPOS+48,DIP_YPOS+4+5*14 + .word DS1_XPOS+49,DIP_YPOS-2+3*14, DS1_XPOS+51,DIP_YPOS-2+3*14 + .word DS1_XPOS+45,DIP_YPOS+4+6*14, DS1_XPOS+51,DIP_YPOS+4+6*14 + .word DS2_XPOS+45,DIP_YPOS+4, DS2_XPOS+51,DIP_YPOS+4 + .long -1 + +country_text + .long cntry0,cntry1,cntry2,cntry3 ;4 + .long cntry4,cntry5,cntry6,cntry7 ;8 + .long cntry8,cntry9,cntry10,cntry11 ;12 + .long cntry12,cntry13,cntry14,cntry15 ;16 + .long cntry16,cntry17,cntry18,cntry19 ;20 + .long cntry20,cntry21,cntry22,cntry23 ;24 + .long cntry24,cntry25,cntry26,cntry0 ;28 + .long cntry0,cntry0,cntry0,cntry0 ;32 + + .long cntry0,cntry0,cntry0,cntry0 ;36 + .long cntry0,cntry0,cntry0,cntry0 ;40 + .long cntry0,cntry0,cntry0,cntry0 ;44 + .long cntry0,cntry0,cntry0,cntry0 ;48 + .long cntry0,cntry0,cntry0,cntry0 ;52 + .long cntry0,cntry0,cntry0,cntry0 ;56 + .long cntry0,cntry0,cntry0,cntry0 ;60 + .long cntry0,cntry0,cntry0,cntry0 ;64 + +cntry0 .string "USA 1",0 ;0 +cntry1 .string "USA 2",0 ;1 +cntry2 .string "USA 3",0 ;2 +cntry3 .string "GERMANY 1",0 ;3 +cntry4 .string "GERMANY 2",0 ;4 +cntry5 .string "GERMANY 3",0 ;5 +cntry6 .string "FRANCE 1",0 ;6 +cntry7 .string "FRANCE 2",0 ;7 +cntry8 .string "FRANCE 3",0 ;8 +cntry9 .string "SWISS 1",0 ;9 +cntry10 .string "ITALY",0 ;10 +cntry11 .string "UK 1",0 ;11 +cntry12 .string "UK 2",0 ;12 +cntry13 .string "UK ELEC",0 ;13 +cntry14 .string "SPAIN 1",0 ;14 +cntry15 .string "AUSTRALIA 1",0 ;15 +cntry16 .string "JAPAN 1",0 ;16 +cntry17 .string "JAPAN 2",0 ;17 +cntry18 .string "AUSTRIA 1",0 ;18 +cntry19 .string "BELGIUM 1",0 ;19 +cntry20 .string "BELGIUM 2",0 ;20 +cntry21 .string "SWEDEN",0 ;21 +cntry22 .string "NEW ZEALAND",0 ;22 +cntry23 .string "NETHERLANDS",0 ;23 +cntry24 .string "FINLAND",0 ;24 +cntry25 .string "NORWAY",0 ;25 +cntry26 .string "DENMARK",0 ;26 + +DIP_COIN1 .string "CMOS COINAGE",0 +DIP_COIN2 .string "DIP COINAGE",0 +DIP_TESTSW1 .string "TEST MODE",0 +DIP_TESTSW2 .string "GAME MODE",0 + +DIPMES0 .STRING "DIP SWITCH TEST",0 +DIPMES1 .STRING "DS1",0 +DIPMES2 .STRING "DS2",0 +DIPMES01 .string "1",0 +DIPMES02 .string "2",0 +DIPMES03 .string "3",0 +DIPMES04 .string "4",0 +DIPMES05 .string "5",0 +DIPMES06 .string "6",0 +DIPMES07 .string "7",0 +DIPMES08 .string "8",0 +DIPMES18 + .STRING "1 2 3 4 5 6 7 8",0 +DIPON .STRING "ON",0 +DIPOFF .STRING "OFF",0 + + .endif + +LEFTSLOT + .STRING "LEFT",0 + .EVEN +RIGHTSLOT + .STRING "RIGHT",0 + .EVEN +SERVICE1 + .STRING "SERVICE",0 + .EVEN +SERVICE2 + .STRING "CREDIT",0 + .EVEN + +COINMESS1 + .STRING "COIN1",0 + .EVEN +COINMESS2 + .STRING "COIN2",0 + .EVEN + +CENTER + .STRING "COIN3",0 + .EVEN +FOURTH + .STRING "COIN4",0 + .EVEN + +SLAM + .STRING "SLAM TILT",0 + .EVEN +TEST + .STRING "TEST",0 + .EVEN + +VOLUP + .STRING "VOL. UP",0 + .EVEN +VOLDOWN + .STRING "VOL. DOWN",0 + .EVEN + +CDINTERLOCK1 + .string "COINDOOR",0 + .even +CDINTERLOCK2 + .string "INTERLOCK",0 + .even +BILLVALID + .string "BILL IN",0 + .even + + + +SEC_MESS_1 + .string "LEVEL 1 SECURITY CHECK",0 + .even +SEC_MESS_2 + .string "LEVEL 2 SECURITY CHECK FAILURE",0 + .even + + +J1MESS .string "JOY1",0 +J2MESS .string "JOY2",0 +J3MESS .string "JOY3",0 +J4MESS .string "JOY4",0 + +PASSMESS .STRING "P",0 +SHOOTMESS .STRING "S",0 +TURBOMESS .STRING "T",0 + +GETOUT2 .STRING "PRESS ANY BUTTON TO EXIT",0 +GETOUT1 .STRING "START1 AND START2 TO EXIT",0 +; .STRING "TEST SWITCH OFF TO EXIT",0 + .EVEN + +STSTART .STRING "TEST SWITCHES",0 + .EVEN + +P1START .STRING "START1",0 + .EVEN +P2START .STRING "START2",0 + .EVEN +P3START .STRING "START3",0 + .EVEN +P4START .STRING "START4",0 + .EVEN + +LEFTMESS + .STRING "LFT",0 + .EVEN +RIGHTMESS + .STRING "RT",0 + .EVEN +UPMESS + .STRING "UP",0 + .EVEN +DOWNMESS + .STRING "DWN",0 + .EVEN + +P1MOVE + .STRING "P1 MOVE",0 + .EVEN +P2MOVE + .STRING "P2 MOVE",0 + .EVEN +P3MOVE + .STRING "P3 MOVE",0 + .EVEN +P4MOVE + .STRING "P4 MOVE",0 + .EVEN + + +**************************************************************************** +* INITCOLR: INITIALIZE COLORS; ROUTINE LOADS PALETTE 0 WITH THE COLOR * +* PALETTE USED BY DIAGNOSTIC TESTS. * +**************************************************************************** + +INITCOLR + + MOVI COLRAM,A0,L ; PALETTE LOCATION + + .ref DIAGP + + MOVI DIAGP,A1,L + MOVE *A1+,A2,W ; LENGTH OF PALETTE +LPLP1 + MOVE *A1+,*A0+,W + DSJS A2,LPLP1 ; KEEP ON CHUGGIN, BABY + + CLR A14 + MOVE A14, @CMAPSEL + + FRET B5 +**************************************************************************** +* POINT: FUNCTION DISPLAYS A POINT OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF THE POINT * +* A1 = COLOR VALUE * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, B2, B3, B4, B6, B10 * +**************************************************************************** + +POINT: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + PIXT A1, *A0.XY + + FRET B6 + +**************************************************************************** +* RECTANGLE: FUNCTION DISPLAYS A RECTANGLE OF ANY COLOR. * +* * +* ENTRY: A0 = XY SCREEN ADDRESS OF UPPER LEFT CORNER * +* A1 = XY RECTANGLE DIMENSIONS * +* A2 = COLOR VALUE * +* * +* B6 = RETURN ADDRESS * +* * +* USES: A0, A1, A2, B2, B3, B4, B6, B7, B9, B10 * +**************************************************************************** + +RECTANGLE: + ADDI SCRXFUDGE,A0 + + MOVI SCRN_PTCH, DPTCH + CLR OFFSET + + LMO DPTCH, B10 + MOVE B10, @CONVDP + + MOVE A2, COLOR1 + MOVE A0, DADDR + MOVE A1, DYDX + + move a1,@_temporary,L ;Temporary Storage fer these + move a2,SADDR + move @CONTROL,a1,W + move a1,a2 + andni 020h,a2 + move a2,@CONTROL,W ; Pixel Transparency OFF + move a2,a2 + + FILL XY + move a1,@CONTROL,W ; Restore Pixel Transparency + move SADDR,a2 ; Restore these reggies + move @_temporary,a1,L + + SUBI SCRXFUDGE,A0 + + FRET B6 + +**************************************************************************** +* LINE: FUNCTION DRAWS HORIZONTAL OR VERTICAL LINES OF ANY COLOR. +* +* ENTRY: A0 = BEGINNING XY SCREEN ADDRESS +* A1 = ENDING XY SCREEN ADDRESS +* A2 = COLOR VALUE +* +* B6 = RETURN ADDRESS +* +* USES: A0-A4, B3,B4,B6,B9,B10 +**************************************************************************** + +HVLINE + MOVI SCRXFUDGE,A3 + ADDXY A3,A0 + ADDXY A3,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A2,COLOR1 + + MOVK 1, A2 ; DRAV DX: ASSUME HORIZONTAL LINE + + MOVE A0,A3 ; DETERMINE (P2 > P1) OR (P2 < P1) + CVXYL A3,A3 + + MOVE A1,A4 + CVXYL A4,A4 + + CMP A3,A4 ; IF (P2 < P1) ~(INCREMENT) + JRP $100 + + NEG A2 ; INCREMENT IS A SIGNED WORD + ZEXT A2 + +$100 CMPXY A0,A1 ; IF VERTICAL LINE + JRZ $110 ; DRAV DX -> DRAV DY + SLL 16,A2 + +$110 DRAV A2,A0 ; DRAW LINE + CMPXY A0,A1 + JRNN $110 + JRNZ $110 + + FRET B6 + + +******************************** +* Draw a line +* A0=YX Start +* A1=YX End +* A2=Color +* B6=Return addr +* Trashes B0-B5,B7-B13 + + SUBRP line_draw + + ADDI SCRXFUDGE,A0 + ADDI SCRXFUDGE,A1 + + move a2,COLOR1 + movi SCRN_PTCH,DPTCH + clr OFFSET ;B4 + lmo DPTCH,b0 + move b0,@CONVDP + + move a0,b2 ;YX strt + move a1,b10 ;YX end + clr b7 ;b:a + subxy b2,b10 + jrnc bpos + jrnv bneg_apos + subxy b10,b7 + movi -1,b11 + jruc cmp_b_a +bneg_apos + subxy b10,b7 + movx b10,b7 + movi >ffff0000,b11 + jruc cmp_b_a +bpos jrnv bpos_apos +bpos_aneg + subxy b10,b7 + movy b10,b7 + movi >1ffff,b11 + jruc cmp_b_a +bpos_apos + move b10,b7 + movi >10001,b11 +cmp_b_a clr b12 + + move b7,b0 + srl 16,b0 + clr b10 + movx b7,b10 + cmp b0,b10 + jrgt a_ge_b + + move b0,b10 + movx b7,b0 + rl 16,b7 ;Swap b:a + movy b11,b12 + sll 1,b0 + sub b10,b0 + addk 1,b10 + move b11,b11 + jrn line1 +line0 line 0 + jruc ldx + +a_ge_b movx b11,b12 + sll 1,b0 + sub b10,b0 + move b11,b11 + jrnn line0 +line1 line 1 + +ldx FRET B6 + + +**************************************************************************** +* STRING: FUNCTION DISPLAYS AN ASCII STRING OF ANY COLOR EITHER VERTICALLY +* OR HORIZONTALLY. +* +* ENTRY: A0 = STARTING STRING ADDRESS +* A1 = Y:X SCREEN ADDRESS +* A2 = DIRECTION +* A3 = COLOR +* +* B6 = RETURN ADDRESS +* +* USES: A0 - A6, B0 - B4, B6 - B14 +**************************************************************************** +STRNEW1 + MMTM SP,A1,A2,A3,A4,A5,A6 + FCALL STRING,B6 + MMFM SP,A1,A2,A3,A4,A5,A6 + RETS +STRNEW + PUSH a0 + CALLR STRNEW1 + MMFM SP,A0 + RETS + +STRING + ADDI SCRXFUDGE,A1 + + MOVI SCRN_PTCH,DPTCH + CLR OFFSET + + LMO DPTCH,B10 + MOVE B10,@CONVDP + + MOVE A3,COLOR1 + CLR COLOR0 + + +$200 MOVB *A0,A4 ;GET CHARACTER + JRZ $230 ;QUIT IF NULL + + ADDK 8,A0 + SUBK 32,A4 ;GET POINTER TO CHARACTER HEADER + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + MOVE *A4+,A5 ;CHAR DIMENSIONS + MOVE A5,A6 ;SPLIT UP BYTE + SLL 12,A6 ;SHIFT UP HEIGHT TO Y + SLL 28,A5 ;STRIP AWAY HEIGHT + SRL 28,A5 + MOVY A6,A5 + RL 16,A5 + MOVE A5,DYDX + + CLR A6 ;A6 = CHAR WIDTH + MOVX A5,A6 + + ADDK 7, A6 ;ROUND UP WIDTH TO INTEGRAL NUMBER + SRL 3, A6 ;OF BYTES = SOURCE PITCH + SLL 3, A6 + MOVE A6,SPTCH + + MOVE *A4,A6 ;CHAR DATA + ADDI CBASE,A6 + MOVE A6,SADDR + + MOVE A1,DADDR + + PIXBLT B,XY + + CLR A6 + MOVE A2,A2 + JRZ $210 + + MOVY A5,A6 ;A1 += (CHAR HEIGHT + SPACING) + SRL 16,A6 ;DIRECTION = DOWN + ADDK 1,A6 + SLL 16,A6 + ADD A6,A1 + JRUC $200 + +$210 MOVX A5,A6 ;A1 += (CHAR WIDTH + SPACING) + ADDK 2,A6 ;DIRECTION = RIGHT + ADD A6,A1 + JRUC $200 + +$230 ;SETF 16, 1, 0 + FRET B6 + +STRINGCENTER: + SETF 8, 0, 0 + CLR A1 + MOVE A0,A2 +SPLLOOP + MOVE *A0+, A4 ; GET THE CHAR + JRZ SPLEND ; END OF STRING + + SUBK 32, A4 ; GET POINTER TO CHARACTER HEADER + + SLL 3,A4 + ADDI SYSFONT,A4,L + MOVB *A4,A4 + SLL 5,A4 + ADDI T2_SP,A4 + + MOVE *A4+, A5, 1 ; CHAR DIMENSIONS + ZEXT A5 + + SRL 4,A5 ; GET JUST THE X DIMENSION + +; ADDK 7, A5 ; ROUND UP WIDTH TO INTEGRAL NUMBER +; SRL 3, A5 ; OF BYTES = SOURCE PITCH +; SLL 3, A5 + + ADDK 2H, A5 ; GIVE IN TO SPACING + ADD A5, A1 + JRUC SPLLOOP + +SPLEND + SETF 16, 1, 0 + MOVE A2,A0 ; RESTORE STRING ADDRESS + SRL 1,A1 + MOVI 200,A2 + SUB A1,A2 + MOVE A2,A1 + FRET B6 + +;**************************************************************************** +;* CIRCLE: FUNCTION DRAWS OUTLINE OR FILLED CIRCLES. * +;* * +;* ENTRY: A0 = radius * +;* A1 = center (Y:X) * +;* A6 = <00:15> = color * +;* A6 = <15:31> = fill: 0=no fill, 1=fill * +;* * +;* USES: A0 - A8, B0, B10 * +;**************************************************************************** + +CIRCLE + ADDI SCRXFUDGE,A1 + + movi plot8,a7 ; assume no fill + btst 16,a6 + jrz CIRC0 + movi fill4,a7 +CIRC0 + movi SCRN_PTCH,DPTCH ;Restore screen pitch and convdp + movk >13,b10 ;this is faster + MOVE B10,@CONVDP + MOVE A6,COLOR1 + movi [1,0],DYDX ; Y width always 1 + + clr a2 ; x = 0 + move a0,a3 ; y = r + move a0,a4 + sll 1,a4 + subk 3,a4 + neg a4 ; d = 3 - 2*r +cloop + cmp a3,a2 ; if x > y, we are done + jrgt done + + MOVE A7,B0 ; PLOT ROUTINE + EXGPC B0 + + move a2,a5 ; x -> a5 + btst 31,a4 + jrz dpos ; branch if d is positive + +; d negative + + sll 2,a5 ; 4*x -> a5 + addk 6,a5 ; 4*x+6 -> a5 + jruc cont + +; d positive + +dpos sub a3,a5 ; x-y -> a5 + sll 2,a5 ; 4*(x-y) -> a5 + addk 10,a5 ; 4*(x-y)+10 -> a5 + subk 1,a3 ; y = y - 1 + +cont add a5,a4 ; d = d + a5 + addk 1,a2 ; x = x + 1 + jruc cloop + +done FRET B6 + +plot8 + move a3,a5 + neg a5 ; -y into a5; +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + + movk 2,a8 +put4 + move a1,a0 ; center (Y:X) in a0 + addxy a3,a0 ; (cx+x),(cy+y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + addxy a5,a0 ; (cx+x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a3,a0 ; (cx-x),(cy-y) + pixt a6,*a0.XY + move a1,a0 ; center (Y:X) in a0 + subxy a5,a0 ; (cx-x),(cy+y) + pixt A6,*a0.XY + rl 16,a3 + rl 16,a5 ; transpose x and y + dsj a8,put4 + sra 16,a3 ; restore y + + FRET B0 + +fill4: + move a2,b10 ; x + sll 1,b10 ; 2x + movx b10,DYDX ; delta x = 2x + move a3,a5 + neg a5 ; -y into a5 +y in a3 + sll 16,a5 + sll 16,a3 + movx a2,a5 ; a3 = (y:x) + movx a2,a3 ; a5 = (-y:x) + movk 2,a8 +put2: + move a1,a0 + subxy a5,a0 + move a0,DADDR + fill XY + + move a1,a0 + subxy a3,a0 + move a0,DADDR + fill XY + rl 16,a3 ; a3 = (x:y) + rl 16,a5 ; transpose x and y + clr a6 + subxy a5,a6 + move a6,a5 ; a5 = (-x:y) + move a3,b10 ; y + sll 1,b10 ; 2y + movx b10,DYDX ; delta x = 2y + dsj a8,put2 + sra 16,a3 ; restore y + + FRET B0 + +******************************** +*SCRCLR - CLEAR ENTIRE BIT MAP +* USES:B2,B3,B4 CALL WITH B6 +DSCRCLR + CLR B2 +DSWRITE + CLR B3 + MOVE B3,@DMACMAP,0 + MOVI SCREEN,B3,L + MOVI (SCRNE-SCREEN)/32,B4,L +SCRLP MOVE B2,*B3+,L + DSJS B4,SCRLP + FRET B6 + + + +************************************************************************** +* * +* CPU BOARD INFORMATION * +* * +************************************************************************** + +CPU_VECS: +; VECMAC COLOR_WHITE,5,15,390,15 ; BOARD OUTLINE +; VECMAC COLOR_WHITE,390,15,390,254 +; VECMAC COLOR_WHITE,5,253,390,253 +; VECMAC COLOR_WHITE,5,15,5,100 +; VECMAC COLOR_WHITE,5,100,15,100 +; VECMAC COLOR_WHITE,15,100,15,115 +; VECMAC COLOR_WHITE,5,115,15,115 +; VECMAC COLOR_WHITE,5,115,5,135 +; VECMAC COLOR_WHITE,5,135,15,135 +; VECMAC COLOR_WHITE,15,135,15,138 +; VECMAC COLOR_WHITE,5,138,15,138 +; VECMAC COLOR_WHITE,5,138,5,215 +; VECMAC COLOR_WHITE,5,215,15,215 +; VECMAC COLOR_WHITE,15,215,15,230 +; VECMAC COLOR_WHITE,5,230,15,230 +; VECMAC COLOR_WHITE,5,230,5,254 +; .LONG 0 + VECMAC COLOR_WHITE,5,5,5,243 ; BOARD OUTLINE + VECMAC COLOR_WHITE,5,243,390,243 + VECMAC COLOR_WHITE,390,243,390,5 + VECMAC COLOR_WHITE,390,5,355,5 + VECMAC COLOR_WHITE,355,5,355,10 + VECMAC COLOR_WHITE,355,10,343,10 + VECMAC COLOR_WHITE,343,10,343,5 + VECMAC COLOR_WHITE,343,5,326,5 + VECMAC COLOR_WHITE,326,5,326,10 + VECMAC COLOR_WHITE,326,10,323,10 + VECMAC COLOR_WHITE,323,10,323,5 + VECMAC COLOR_WHITE,323,5,212,5 + VECMAC COLOR_WHITE,212,5,212,10 + VECMAC COLOR_WHITE,212,10,200,10 + VECMAC COLOR_WHITE,200,10,200,5 + VECMAC COLOR_WHITE,200,5,5,5 + .LONG 0 + + +CPUXBASE EQU 5 +CPUYBASE EQU 5 + + +CPU_CHIPS: +;CRAM1 CHIPMAC 0,125,25,20,45,7,11,CNAMEA8,1,2,2,1 ; COLOR RAM +;CRAM2 CHIPMAC 1,125,75,20,45,7,11,CNAMEC8,1,2,2,1 ; COLOR RAM +;VRAM1 CHIPMAC 2,190,25,15,38,6,2,CNAMEA11,1,2,2,1 ; BANK 1 VIDEO RAM +;VRAM2 CHIPMAC 3,207,25,15,38,6,2,CNAMEA12,1,2,2,1 ; (PALETTE) +;VRAM3 CHIPMAC 4,224,25,15,38,6,2,CNAMEA13,1,2,2,1 +;VRAM4 CHIPMAC 5,241,25,15,38,6,2,CNAMEA14,1,2,2,1 +;VRAM5 CHIPMAC 6,190,71,15,38,6,2,CNAMEB11,1,2,2,1 ; BANK 2 VIDEO RAM +;VRAM6 CHIPMAC 7,207,71,15,38,6,2,CNAMEB12,1,2,2,1 ; (PIXEL) +;VRAM7 CHIPMAC 8,224,71,15,38,6,2,CNAMEB13,1,2,2,1 +;VRAM8 CHIPMAC 9,241,71,15,38,6,2,CNAMEB14,1,2,2,1 +;CPU CHIPMAC 0,330,60,35,35,4,13,CNAMEB21,0,3,3,1 ; CPU +;DMA CHIPMAC 0,201,120,38,38,6,16,CNAMEE13,0,3,3,1 ; DMA +;PROM1 CHIPMAC 1,155,210,20,40,7,3,CNAMEJ12,1,2,2,1 ; PROGRAM ROM 1 +;PROM2 CHIPMAC 0,155,167,20,40,7,3,CNAMEG12,1,2,2,1 ; PROGRAM ROM 2 +;IROM1 CHIPMAC 1,195,167,20,40,7,3,CNAMEG14,1,2,2,1 ; IMAGE ROM +;IROM2 CHIPMAC 2,217,167,20,40,7,3,CNAMEG16,1,2,2,1 ; IMAGE ROM +;IROM3 CHIPMAC 3,239,167,20,40,7,3,CNAMEG17,1,2,2,1 ; IMAGE ROM +;IROM4 CHIPMAC 4,261,167,20,40,7,3,CNAMEG18,1,2,2,1 ; IMAGE ROM +;IROM5 CHIPMAC 5,283,167,20,40,7,3,CNAMEG19,1,2,2,1 ; IMAGE ROM +;IROM6 CHIPMAC 6,305,167,20,40,7,3,CNAMEG20,1,2,2,1 ; IMAGE ROM +;IROM7 CHIPMAC 7,327,167,20,40,7,3,CNAMEG22,1,2,2,1 ; IMAGE ROM +;IROM8 CHIPMAC 8,349,167,20,40,7,3,CNAMEG23,1,2,2,1 ; IMAGE ROM +;IROM9 CHIPMAC 9,195,210,20,40,7,3,CNAMEJ14,1,2,2,1 ; IMAGE ROM +;IROM10 CHIPMAC 10,217,210,20,40,7,3,CNAMEJ16,1,2,2,1 ; IMAGE ROM +;IROM11 CHIPMAC 11,239,210,20,40,7,3,CNAMEJ17,1,2,2,1 ; IMAGE ROM +;IROM12 CHIPMAC 12,261,210,20,40,7,3,CNAMEJ18,1,2,2,1 ; IMAGE ROM +;IROM13 CHIPMAC 13,283,210,20,40,7,3,CNAMEJ19,1,2,2,1 ; IMAGE ROM +;IROM14 CHIPMAC 14,305,210,20,40,7,3,CNAMEJ20,1,2,2,1 ; IMAGE ROM +;IROM15 CHIPMAC 15,327,210,20,40,7,3,CNAMEJ22,1,2,2,1 ; IMAGE ROM +;IROM16 CHIPMAC 16,349,210,20,40,7,3,CNAMEJ23,1,2,2,1 ; IMAGE ROM +;SRAM1 CHIPMAC 0,50,210,13,33,4,4,CNAMEJ4,1,2,2,1 ; SCRATCH PAD +;SRAM2 CHIPMAC 1,67,210,13,33,4,4,CNAMEJ5,1,2,2,1 ; SCRATCH PAD +;SRAM3 CHIPMAC 2,84,210,13,33,4,4,CNAMEJ6,1,2,2,1 ; SCRATCH PAD +;SRAM4 CHIPMAC 3,101,210,13,33,4,4,CNAMEJ7,1,2,2,1 ; SCRATCH PAD +; .LONG 0 + +CRAM1 CHIPMAC 0,347,152,30,13,5,3,CNAMEU36,0,28,2,1 ; COLOR RAM (U36) +CRAM2 CHIPMAC 1,313,152,30,13,5,3,CNAMEU37,0,28,2,1 ; COLOR RAM (U37) + +VRAM1 CHIPMAC 2,347,207,38,13,8,3,CNAMEU14,0,36,2,1 ; BANK 1 VIDEO RAM (U14) +VRAM2 CHIPMAC 3,307,207,38,13,8,3,CNAMEU15,0,36,2,1 ; (PALETTE) (U15) +VRAM3 CHIPMAC 4,267,207,38,13,8,3,CNAMEU16,0,36,2,1 ; (U16) +VRAM4 CHIPMAC 5,227,207,38,13,8,3,CNAMEU17,0,36,2,1 ; (U17) + +VRAM5 CHIPMAC 6,347,225,38,13,8,3,CNAMEU10,0,36,2,1 ; BANK 2 VIDEO RAM (U10) +VRAM6 CHIPMAC 7,307,225,38,13,8,3,CNAMEU11,0,36,2,1 ; (PIXEL) (U11) +VRAM7 CHIPMAC 8,267,225,38,13,8,3,CNAMEU12,0,36,2,1 ; (U12) +VRAM8 CHIPMAC 9,227,225,38,13,8,3,CNAMEU13,0,36,2,1 ; (U13) + +CPU CHIPMAC 0,330,50,35,35,7,13,CNAMEU59,0,3,3,1 ; CPU (U59) + +DMA CHIPMAC 0,246,157,38,38,8,16,CNAMEU33,0,3,3,1 ; DMA (U33) + +PROM1 CHIPMAC 1,220,65,40,13,9,3,CNAMEU63,0,38,2,1 ; PROGRAM ROM 1 (U63) +PROM2 CHIPMAC 0,220,83,40,13,9,3,CNAMEU54,0,38,2,1 ; PROGRAM ROM 2 (U54) + +IROM1 CHIPMAC 1,10,122,40,13,6,3, CNAMEU133,0,38,2,1 ; IMAGE ROM (U133) +IROM2 CHIPMAC 2,52,122,40,13,6,3, CNAMEU132,0,38,2,1 ; IMAGE ROM (U132) +IROM3 CHIPMAC 3,94,122,40,13,6,3, CNAMEU131,0,38,2,1 ; IMAGE ROM (U131) +IROM4 CHIPMAC 4,136,122,40,13,6,3, CNAMEU130,0,38,2,1 ; IMAGE ROM (U130) + +IROM5 CHIPMAC 5,10,137,40,13,6,3, CNAMEU129,0,38,2,1 ; IMAGE ROM (U129) +IROM6 CHIPMAC 6,52,137,40,13,6,3, CNAMEU128,0,38,2,1 ; IMAGE ROM (U128) +IROM7 CHIPMAC 7,94,137,40,13,6,3, CNAMEU127,0,38,2,1 ; IMAGE ROM (U127) +IROM8 CHIPMAC 8,136,137,40,13,6,3, CNAMEU126,0,38,2,1 ; IMAGE ROM (U126) + +IROM9 CHIPMAC 9,10,152,40,13,6,3, CNAMEU125,0,38,2,1 ; IMAGE ROM (U125) +IROM10 CHIPMAC 10,52,152,40,13,6,3, CNAMEU124,0,38,2,1 ; IMAGE ROM (U124) +IROM11 CHIPMAC 11,94,152,40,13,6,3, CNAMEU123,0,38,2,1 ; IMAGE ROM (U123) +IROM12 CHIPMAC 12,136,152,40,13,6,3,CNAMEU122,0,38,2,1 ; IMAGE ROM (U122) + +IROM13 CHIPMAC 13,10,167,40,13,6,3, CNAMEU121,0,38,2,1 ; IMAGE ROM (U121) +IROM14 CHIPMAC 14,52,167,40,13,6,3, CNAMEU120,0,38,2,1 ; IMAGE ROM (U120) +IROM15 CHIPMAC 15,94,167,40,13,6,3, CNAMEU119,0,38,2,1 ; IMAGE ROM (U119) +IROM16 CHIPMAC 16,136,167,40,13,6,3,CNAMEU118,0,38,2,1 ; IMAGE ROM (U118) + +IROM17 CHIPMAC 17,10,182,40,13,6,3, CNAMEU117,0,38,2,1 ; IMAGE ROM (U117) +IROM18 CHIPMAC 18,52,182,40,13,6,3, CNAMEU116,0,38,2,1 ; IMAGE ROM (U116) +IROM19 CHIPMAC 19,94,182,40,13,6,3, CNAMEU115,0,38,2,1 ; IMAGE ROM (U115) +IROM20 CHIPMAC 20,136,182,40,13,6,3,CNAMEU114,0,38,2,1 ; IMAGE ROM (U114) + +IROM21 CHIPMAC 21,10,197,40,13,6,3, CNAMEU113,0,38,2,1 ; IMAGE ROM (U113) +IROM22 CHIPMAC 22,52,197,40,13,6,3, CNAMEU112,0,38,2,1 ; IMAGE ROM (U112) +IROM23 CHIPMAC 23,94,197,40,13,6,3, CNAMEU111,0,38,2,1 ; IMAGE ROM (U111) +IROM24 CHIPMAC 24,136,197,40,13,6,3,CNAMEU110,0,38,2,1 ; IMAGE ROM (U110) + +IROM25 CHIPMAC 25,10,212,40,13,6,3, CNAMEU109,0,38,2,1 ; IMAGE ROM (U109) +IROM26 CHIPMAC 26,52,212,40,13,6,3, CNAMEU108,0,38,2,1 ; IMAGE ROM (U108) +IROM27 CHIPMAC 27,94,212,40,13,6,3, CNAMEU107,0,38,2,1 ; IMAGE ROM (U107) +IROM28 CHIPMAC 28,136,212,40,13,6,3,CNAMEU106,0,38,2,1 ; IMAGE ROM (U106) + +IROM29 CHIPMAC 29,10,227,40,13,6,3, CNAMEU105,0,38,2,1 ; IMAGE ROM (U105) +IROM30 CHIPMAC 30,52,227,40,13,6,3, CNAMEU104,0,38,2,1 ; IMAGE ROM (U104) +IROM31 CHIPMAC 31,94,227,40,13,6,3, CNAMEU103,0,38,2,1 ; IMAGE ROM (U103) +IROM32 CHIPMAC 32,136,227,40,13,6,3,CNAMEU102,0,38,2,1 ; IMAGE ROM (U102) + +SRAM1 CHIPMAC 0,225,101,30,13,4,3,CNAMEU49,0,28,2,1 ; SCRATCH PAD (U49) + +PIC CHIPMAC 0,177,65,40,13,9,3,CNAMEU64,0,38,2,1 ; PIC CHIP (U64) + +SROM1 CHIPMAC 1,49,57,40,13,14,3, CNAMEU2,0,38,2,1 ; Sound Rom (U2) +SROM2 CHIPMAC 2,49,72,40,13,14,3, CNAMEU3,0,38,2,1 ; Sound Rom (U3) +SROM3 CHIPMAC 3,49,87,40,13,14,3, CNAMEU4,0,38,2,1 ; Sound Rom (U4) +SROM4 CHIPMAC 4,49,102,40,13,14,3,CNAMEU5,0,38,2,1 ; Sound Rom (U5) +SROM5 CHIPMAC 5,7,57,40,13,14,3, CNAMEU6,0,38,2,1 ; Sound Rom (U6) +SROM6 CHIPMAC 6,7,72,40,13,14,3, CNAMEU7,0,38,2,1 ; Sound Rom (U7) +SROM7 CHIPMAC 7,7,87,40,13,14,3, CNAMEU8,0,38,2,1 ; Sound Rom (U8) +SROM8 CHIPMAC 8,7,102,40,13,14,3, CNAMEU9,0,38,2,1 ; Sound Rom (U9) + +DSP CHIPMAC 0,118,77,35,35,13,13,CNAMEU1,0,3,3,1 ; Sound DSP (U1) + +SNDRAM1 CHIPMAC 1,115,29,40,13,9,3,CNAMEU86,0,38,2,1 ; Sound Ram 1 (U86) +SNDRAM2 CHIPMAC 2,115,44,40,13,9,3,CNAMEU80,0,38,2,1 ; Sound Ram 2 (U80) +SNDRAM3 CHIPMAC 3,115,59,40,13,9,3,CNAMEU73,0,38,2,1 ; Sound Ram 3 (U73) + .LONG 0 + +VRAMTAB .LONG CRAM1,CRAM2 + .LONG VRAM1,VRAM2,VRAM3,VRAM4,VRAM5,VRAM6 + .LONG VRAM7,VRAM8 + .LONG 0 +PROMTAB .LONG PROM1,PROM2 + .LONG 0 +IROMTAB .LONG IROM1,IROM2,IROM3,IROM4 + .LONG IROM5,IROM6,IROM7,IROM8 + .LONG IROM9,IROM10,IROM11,IROM12 + .LONG IROM13,IROM14,IROM15,IROM16 + .long IROM17,IROM18,IROM19,IROM20 + .long IROM21,IROM22,IROM23,IROM24 + .long IROM25,IROM26,IROM27,IROM28 + .long IROM29,IROM30,IROM31,IROM32 + .LONG 0 +;SRAMTAB .LONG SRAM1,SRAM2,SRAM3,SRAM4 +SRAMTAB .LONG SRAM1 + .LONG 0 +SROMTAB .long SROM1, SROM2, SROM3, SROM4 +;; .long SROM5, SROM6, SROM7, SROM8 + .long 0 +SNDRAMTAB + .long SNDRAM1, SNDRAM2, SNDRAM3 + .long 0 + +CNAMEU1 + .string "U1",0 + .even +CNAMEU2 + .string "U2",0 + .even +CNAMEU3 + .string "U3",0 + .even +CNAMEU4 + .string "U4",0 + .even +CNAMEU5 + .string "U5",0 + .even +CNAMEU6 + .string "U6",0 + .even +CNAMEU7 + .string "U7",0 + .even +CNAMEU8 + .string "U8",0 + .even +CNAMEU9 + .string "U9",0 + .even +CNAMEU10 + .string "U10",0 + .even +CNAMEU11 + .string "U11",0 + .even +CNAMEU12 + .string "U12",0 + .even +CNAMEU13 + .string "U13",0 + .even +CNAMEU14 + .string "U14",0 + .even +CNAMEU15 + .string "U15",0 + .even +CNAMEU16 + .string "U16",0 + .even +CNAMEU17 + .string "U17",0 + .even +CNAMEU33 + .string "U33",0 + .even +CNAMEU36 + .string "U36",0 + .even +CNAMEU37 + .string "U37",0 + .even +CNAMEU49 + .string "U49",0 + .even +CNAMEU54 + .string "U54",0 + .even +CNAMEU59 + .string "U59",0 + .even +CNAMEU63 + .string "U63",0 + .even +CNAMEU64 + .string "U64",0 + .even +CNAMEU73 + .string "U73",0 + .even +CNAMEU80 + .string "U80",0 + .even +CNAMEU86 + .string "U86",0 + .even +CNAMEU133 + .string "U133",0 + .even +CNAMEU132 + .string "U132",0 + .even +CNAMEU131 + .string "U131",0 + .even +CNAMEU130 + .string "U130",0 + .even +CNAMEU129 + .string "U129",0 + .even +CNAMEU128 + .string "U128",0 + .even +CNAMEU127 + .string "U127",0 + .even +CNAMEU126 + .string "U126",0 + .even +CNAMEU125 + .string "U125",0 + .even +CNAMEU124 + .string "U124",0 + .even +CNAMEU123 + .string "U123",0 + .even +CNAMEU122 + .string "U122",0 + .even +CNAMEU121 + .string "U121",0 + .even +CNAMEU120 + .string "U120",0 + .even +CNAMEU119 + .string "U119",0 + .even +CNAMEU118 + .string "U118",0 + .even +CNAMEU117 + .string "U117",0 + .even +CNAMEU116 + .string "U116",0 + .even +CNAMEU115 + .string "U115",0 + .even +CNAMEU114 + .string "U114",0 + .even +CNAMEU113 + .string "U113",0 + .even +CNAMEU112 + .string "U112",0 + .even +CNAMEU111 + .string "U111",0 + .even +CNAMEU110 + .string "U110",0 + .even +CNAMEU109 + .string "U109",0 + .even +CNAMEU108 + .string "U108",0 + .even +CNAMEU107 + .string "U107",0 + .even +CNAMEU106 + .string "U106",0 + .even +CNAMEU105 + .string "U105",0 + .even +CNAMEU104 + .string "U104",0 + .even +CNAMEU103 + .string "U103",0 + .even +CNAMEU102 + .string "U102",0 + .even + +;CNAMEA8 +; .STRING "UA8",0 +; .EVEN +;CNAMEA11 +; .STRING "UA11",0 +; .EVEN +;CNAMEA12 +; .STRING "UA12",0 +; .EVEN +;CNAMEA13 +; .STRING "UA13",0 +; .EVEN +;CNAMEA14 +; .STRING "UA14",0 +; .EVEN +; +;CNAMEB11 +; .STRING "UB11",0 +; .EVEN +;CNAMEB12 +; .STRING "UB12",0 +; .EVEN +;CNAMEB13 +; .STRING "UB13",0 +; .EVEN +;CNAMEB14 +; .STRING "UB14",0 +; .EVEN +;CNAMEB21 +; .STRING "UB21",0 +; .EVEN +; +;CNAMEC8 +; .STRING "UC8",0 +; .EVEN +; +;CNAMEE13 +; .STRING "UE13",0 +; .EVEN +; +;CNAMEG12 +; .STRING "UG12",0 +; .EVEN +;CNAMEG14 +; .STRING "UG14",0 +; .EVEN +;CNAMEG16 +; .STRING "UG16",0 +; .EVEN +;CNAMEG17 +; .STRING "UG17",0 +; .EVEN +;CNAMEG18 +; .STRING "UG18",0 +; .EVEN +;CNAMEG19 +; .STRING "UG19",0 +; .EVEN +;CNAMEG20 +; .STRING "UG20",0 +; .EVEN +;CNAMEG22 +; .STRING "UG22",0 +; .EVEN +;CNAMEG23 +; .STRING "UG23",0 +; .EVEN +; +;CNAMEJ4 +; .STRING "UJ4",0 +; .EVEN +;CNAMEJ5 +; .STRING "UJ5",0 +; .EVEN +;CNAMEJ6 +; .STRING "UJ6",0 +; .EVEN +;CNAMEJ7 +; .STRING "UJ7",0 +; .EVEN +;CNAMEJ12 +; .STRING "UJ12",0 +; .EVEN +;CNAMEJ14 +; .STRING "UJ14",0 +; .EVEN +;CNAMEJ16 +; .STRING "UJ16",0 +; .EVEN +;CNAMEJ17 +; .STRING "UJ17",0 +; .EVEN +;CNAMEJ18 +; .STRING "UJ18",0 +; .EVEN +;CNAMEJ19 +; .STRING "UJ19",0 +; .EVEN +;CNAMEJ20 +; .STRING "UJ20",0 +; .EVEN +;CNAMEJ22 +; .STRING "UJ22",0 +; .EVEN +;CNAMEJ23 +; .STRING "UJ23",0 +; .EVEN + + +************************************************************************** +* * +* RAM CHIP DATA * +* * +************************************************************************** + +; +; MAKE SURE THESE TABLES CORRESPOND WITH THE STUFF ABOVE +; + +VRAMCHIPS: +; COLOR RAMS + +;; RAM_CHIP 0,0, 8, 16, 1800000H, 187FFF0H ; UA8 ( 0 - 3 ) +;; RAM_CHIP 0,1, 8, 16, 1800008H, 187FFF8H ; UC8 ( 8 - 11 ) + + RAM_CHIP 0,1, 8, 16, 1880000H, 18FFFF0H ; U37 ( 0 - 7 ) + RAM_CHIP 0,0, 7, 16, 1880008H, 18FFFF8H ; U36 ( 8 - 14 ) + +; VIDEO RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0, 6, 8, 32, 0000018H, 03FFFF8H ; UB11 ( 24 - 27 ) +; RAM_CHIP 0, 8, 8, 32, 0000010H, 03FFFF0H ; UB13 ( 16 - 19 ) +; RAM_CHIP 0, 7, 8, 32, 0000008H, 03FFFE8H ; UB12 ( 8 - 11 ) +; RAM_CHIP 0, 9, 8, 32, 0000000H, 03FFFE0H ; UB14 ( 0 - 3 ) + RAM_CHIP 0, 8, 8, 32, 0000018H, 03FFFF8H ; U12 + RAM_CHIP 0, 4, 8, 32, 0000010H, 03FFFF0H ; U16 + RAM_CHIP 0, 9, 8, 32, 0000008H, 03FFFE8H ; U13 + RAM_CHIP 0, 5, 8, 32, 0000000H, 03FFFE0H ; U17 + + .LONG 0 + +PALCHIPS: +; VIDEO PALETTE RAMS +; RAM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR +; RAM_CHIP 0,2, 8, 32, 0000018H, 03FFFF8H ; UA11 ( 24 - 27 ) +; RAM_CHIP 0,4, 8, 32, 0000010H, 03FFFF0H ; UA13 ( 16 - 19 ) +; RAM_CHIP 0,3, 8, 32, 0000008H, 03FFFE8H ; UA12 ( 8 - 11 ) +; RAM_CHIP 0,5, 8, 32, 0000000H, 03FFFE0H ; UA14 ( 0 - 3 ) + RAM_CHIP 0,6, 8, 32, 0000018H, 03FFFF8H ; U10 + RAM_CHIP 0,2, 8, 32, 0000010H, 03FFFF0H ; U14 + RAM_CHIP 0,7, 8, 32, 0000008H, 03FFFE8H ; U11 + RAM_CHIP 0,3, 8, 32, 0000000H, 03FFFE0H ; U15 + .LONG 0 + +; SCRATCH RAMS + +SRAMCHECK + .STRING "CHECKING SCRATCH RAMS",0 + .EVEN + +SRAMCHIPS +; RAM_CHIP SRAM4,3, 4, 16, 1000004H, 13FFFF4H ; UJ7 ( 4 - 7 ) +; RAM_CHIP SRAM3,2, 4, 16, 1000000H, 13FFFF0H ; UJ6 ( 0 - 3 ) +; RAM_CHIP SRAM2,1, 4, 16, 1000008H, 13FFFF8H ; UJ5 ( 8 - 11 ) +; RAM_CHIP SRAM1,0, 4, 16, 100000CH, 13FFFFCH ; UJ4 ( 12 - 15 ) + RAM_CHIP SRAM1,0, 16, 16, 1000000H, 13FFFF0H ; U49 (0-15) + .LONG 0 + +**************************************************************************** +* SYSFONT: SYSTEM FONT; MODULE DEFINES THE FONT USED WITH SYSTEM * +* DIAGNOSTICS. * +**************************************************************************** + +; =========================== +; | DYDX CHAR DIMENSIONS | +; | POINTER TO XY CHAR DATA | +; =========================== + +T2_SP .WORD 048h + .word I2_SP-CBASE + +T2_MN .WORD 088h + .WORD I2_MN-CBASE + +T2_PER .WORD 028H + .WORD I2_PER-CBASE + +T2_SLASH + .WORD 068H + .WORD I2_SLASH-CBASE +T2_00 + .WORD 068h + .WORD I2_00-CBASE + +T2_11: + .WORD 068h + .WORD I2_11-CBASE + +T2_22: + .WORD 068h + .WORD I2_22-CBASE + +T2_33: + .WORD 068h + .WORD I2_33-CBASE + +T2_44: + .WORD 068h + .WORD I2_44-CBASE + +T2_55: + .WORD 068h + .WORD I2_55-CBASE + +T2_66: + .WORD 068h + .WORD I2_66-CBASE + +T2_77: + .WORD 068h + .WORD I2_77-CBASE + +T2_88: + .WORD 068h + .WORD I2_88-CBASE + +T2_99: + .WORD 068h + .WORD I2_99-CBASE + +T2_AA: + .WORD 068h + .WORD I2_AA-CBASE + +T2_BB: + .WORD 068h + .WORD I2_BB-CBASE + +T2_CC: + .WORD 068h + .WORD I2_CC-CBASE + +T2_DD: + .WORD 068h + .WORD I2_DD-CBASE + +T2_EE: + .WORD 068h + .WORD I2_EE-CBASE + +T2_FF: + .WORD 068h + .WORD I2_FF-CBASE + +T2_GG: + .WORD 068h + .WORD I2_GG-CBASE + +T2_HH: + .WORD 068h + .WORD I2_HH-CBASE + +T2_II: + .WORD 028h + .WORD I2_II-CBASE + +T2_JJ: + .WORD 068h + .WORD I2_JJ-CBASE + +T2_KK: + .WORD 068h + .WORD I2_KK-CBASE + +T2_LL: + .WORD 058h + .WORD I2_LL-CBASE + +T2_MM: + .WORD 0A8h + .WORD I2_MM-CBASE + +T2_NN: + .WORD 078h + .WORD I2_NN-CBASE + +T2_OO: + .WORD 078h + .WORD I2_OO-CBASE + +T2_PP: + .WORD 068h + .WORD I2_PP-CBASE + +T2_QQ: + .WORD 07Ah + .WORD I2_QQ-CBASE + +T2_RR: + .WORD 068h + .WORD I2_RR-CBASE + +T2_SS: + .WORD 068h + .WORD I2_SS-CBASE + +T2_TT: + .WORD 068h + .WORD I2_TT-CBASE + +T2_UU: + .WORD 068h + .WORD I2_UU-CBASE + +T2_VV: + .WORD 078h + .WORD I2_VV-CBASE + +T2_WW: + .WORD 0B8h + .WORD I2_WW-CBASE + +T2_XX: + .WORD 078h + .WORD I2_XX-CBASE + +T2_YY: + .WORD 068h + .WORD I2_YY-CBASE + +T2_ZZ: + .WORD 068h + .WORD I2_ZZ-CBASE + +; =========================== +; | CHARACTER DIRECTORY | +; =========================== + +SYSFONT + + .BYTE (T2_SP-T2_SP)/32 ;SPACE CHARACTER, " " + .BYTE (T2_SP-T2_SP)/32 ;FILLER + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_SP-T2_SP)/32 + .BYTE (T2_MN-T2_SP)/32 ; MINUS CHARACTER, "-" + .BYTE (T2_PER-T2_SP)/32 + .BYTE (T2_SLASH-T2_SP)/32 ; "/" + .BYTE (T2_00-T2_SP)/32 ;0 + .BYTE (T2_11-T2_SP)/32 ;1 + .BYTE (T2_22-T2_SP)/32 ;2 + .BYTE (T2_33-T2_SP)/32 ;3 + .BYTE (T2_44-T2_SP)/32 ;4 + .BYTE (T2_55-T2_SP)/32 ;5 + .BYTE (T2_66-T2_SP)/32 ;6 + .BYTE (T2_77-T2_SP)/32 ;7 + .BYTE (T2_88-T2_SP)/32 ;8 + .BYTE (T2_99-T2_SP)/32 ;9 + .BYTE (T2_00-T2_SP)/32 ; no : + .BYTE (T2_00-T2_SP)/32 ; no ; + .BYTE (T2_00-T2_SP)/32 ; no < + .BYTE (T2_00-T2_SP)/32 ; no = + .BYTE (T2_00-T2_SP)/32 ; no > + .BYTE (T2_00-T2_SP)/32 ; no ? + .BYTE (T2_00-T2_SP)/32 ; no @ + .BYTE (T2_AA-T2_SP)/32 ;A + .BYTE (T2_BB-T2_SP)/32 ;B + .BYTE (T2_CC-T2_SP)/32 ;C + .BYTE (T2_DD-T2_SP)/32 ;D + .BYTE (T2_EE-T2_SP)/32 ;E + .BYTE (T2_FF-T2_SP)/32 ;F + .BYTE (T2_GG-T2_SP)/32 ;G + .BYTE (T2_HH-T2_SP)/32 ;H + .BYTE (T2_II-T2_SP)/32 ;I + .BYTE (T2_JJ-T2_SP)/32 ;J + .BYTE (T2_KK-T2_SP)/32 ;K + .BYTE (T2_LL-T2_SP)/32 ;L + .BYTE (T2_MM-T2_SP)/32 ;M + .BYTE (T2_NN-T2_SP)/32 ;N + .BYTE (T2_OO-T2_SP)/32 ;O + .BYTE (T2_PP-T2_SP)/32 ;P + .BYTE (T2_QQ-T2_SP)/32 ;Q + .BYTE (T2_RR-T2_SP)/32 ;R + .BYTE (T2_SS-T2_SP)/32 ;S + .BYTE (T2_TT-T2_SP)/32 ;T + .BYTE (T2_UU-T2_SP)/32 ;U + .BYTE (T2_VV-T2_SP)/32 ;V + .BYTE (T2_WW-T2_SP)/32 ;W + .BYTE (T2_XX-T2_SP)/32 ;X + .BYTE (T2_YY-T2_SP)/32 ;Y + .BYTE (T2_ZZ-T2_SP)/32 ;Z + +; =========================== +; | CHARACTER DEFINITIONS | +; =========================== +CBASE +I2_SP + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + .byte 00h + +I2_MN: + .byte 000h + .byte 000h + .byte 000h + .byte 0FFh + .byte 0FFh + .byte 000h + .byte 000h + .byte 000h + +I2_PER: + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0 + .BYTE 0FFH + .BYTE 0FFH + +I2_SLASH: + .BYTE 30H + .BYTE 30H + .BYTE 18H + .BYTE 18H + .BYTE 06H + .BYTE 06H + .BYTE 03H + .BYTE 03H + +I2_00: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_11: + .byte 0Eh + .byte 0Fh + .byte 0Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_22: + .byte 01Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + +I2_33: + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 01Eh + .byte 01Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_44: + .byte 038h + .byte 03Ch + .byte 036h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 030h + +I2_55: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_66: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_77: + .byte 03Fh + .byte 03Fh + .byte 030h + .byte 018h + .byte 018h + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_88: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_99: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_AA: + .byte 01Eh + .byte 03Fh + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + +I2_BB: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_CC: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03Fh + .byte 03Eh + +I2_DD: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Fh + +I2_EE: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + +I2_FF: + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03Fh + .byte 03Fh + .byte 03h + .byte 03h + .byte 03h + +I2_GG: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 03h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_HH: + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 03Fh + .byte 033h + .byte 033h + .byte 033h + +I2_II: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + +I2_JJ: + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 030h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_KK: + .byte 033h + .byte 033h + .byte 01Bh + .byte 0Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_LL: + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 03h + .byte 01Fh + .byte 01Fh + +I2_MM: + .byte 087h,03h + .byte 0CFh,03h + .byte 0CFh,03h + .byte 07Bh,03h + .byte 07Bh,03h + .byte 033h,03h + .byte 033h,03h + .byte 033h,03h + +I2_NN: + .byte 063h + .byte 067h + .byte 06Fh + .byte 06Fh + .byte 07Bh + .byte 07Bh + .byte 073h + .byte 063h + +I2_OO: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + +I2_PP: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 03h + .byte 03h + .byte 03h + +I2_QQ: + .byte 03Eh + .byte 07Fh + .byte 063h + .byte 063h + .byte 063h + .byte 063h + .byte 07Fh + .byte 03Eh + .byte 060h + .byte 060h + +I2_RR: + .byte 01Fh + .byte 03Fh + .byte 033h + .byte 03Fh + .byte 01Fh + .byte 033h + .byte 033h + .byte 033h + +I2_SS: + .byte 03Eh + .byte 03Fh + .byte 03h + .byte 01Fh + .byte 03Eh + .byte 030h + .byte 03Fh + .byte 01Fh + +I2_TT: + .byte 03Fh + .byte 03Fh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_UU: + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 033h + .byte 03Fh + .byte 01Eh + +I2_VV: + .byte 063h + .byte 063h + .byte 063h + .byte 036h + .byte 036h + .byte 03Eh + .byte 01Ch + .byte 01Ch + +I2_WW: + .byte 023h,06h + .byte 023h,06h + .byte 073h,06h + .byte 076h,03h + .byte 076h,03h + .byte 0DEh,03h + .byte 08Ch,01h + .byte 08Ch,01h + +I2_XX: + .byte 063h + .byte 063h + .byte 036h + .byte 01Ch + .byte 01Ch + .byte 036h + .byte 063h + .byte 063h + +I2_YY: + .byte 033h + .byte 033h + .byte 01Eh + .byte 01Eh + .byte 0Ch + .byte 0Ch + .byte 0Ch + .byte 0Ch + +I2_ZZ: + .byte 03Fh + .byte 03Fh + .byte 038h + .byte 01Ch + .byte 0Eh + .byte 07h + .byte 03Fh + .byte 03Fh + + + .EVEN +* +* ROM chip definitions and checksums +* +;DJT Start +CKSUM1 .equ >a42e +CKSUM2 .equ >953a +;DJT End + +PROMCHIPS +; ROM_CHIP PROM1,0,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; UJ12 +; ROM_CHIP PROM2,1,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; UG12 + ROM_CHIP PROM2,1,0,16, 0FF800000H, 0FFFFFFF0H, CKSUM1 ; U54 + ROM_CHIP PROM1,0,0,16, 0FF800008H, 0FFFFFFF8H, CKSUM2 ; U63 + .LONG 0 + +* CHECKSUM PATCHES + .WORD >ffff-CKSUM1 ;1'S COMPLEMENT OF THE UJ12 CHECKSUM + .WORD >ffff-CKSUM2 ;1'S COMPLEMENT OF THE UG12 CHECKSUM + + +************************************************************************** +* * +* IMAGE ROM CHECKSUM TABLES * +* * +* NOTE: COMMENT OUT ANY UNSTUFFED PARTS THAT * +* EXIST BEFORE THE .LONG 0 TERMINATOR! * +* * +************************************************************************** +; ROM_CHIP $MACRO TAB_LINK,CHIP_NO, WIDTH, INTERLEAVE, START_ADDR, END_ADDR, CHECK_SUM + +;1161 = NBA2_20.0 +;748D = NBA2_20.1 +;8B9D = NBA2_20.2 +;5AFE = NBA2_20.3 +;3E9B = NBA2_30.0 +;5CA0 = NBA2_30.1 +;C6EC = NBA2_30.2 +;C336 = NBA2_30.3 +;F400 = NBA2_40.0 +;B70D = NBA2_40.1 +;F731 = NBA2_40.2 +;7BE3 = NBA2_40.3 +;0ADB = NBA2_50.0 +;3E90 = NBA2_50.1 +;3C9B = NBA2_50.2 +;0648 = NBA2_50.3 +;F7A6 = NBA_PROG.0 +;BE66 = NBA_PROG.1 + +;BDD6 = NBA2_50.0 +;F515 = NBA2_50.1 +;EF39 = NBA2_50.2 +;B948 = NBA2_50.3 + + + +;3/7/96 +;Image ROM checksums: (We are keeping the first 8 meg locked down... +;Put these in... I'm not sure how they are layed out... + +;NBA2.0: 5918 +;NBA2.1: E85C +;NBA2.2: 95D8 +;NBA2.3: E855 +; +;NBA4.0: 154F +;NBA4.1: 8227 +;NBA4.2: 13BA +;NBA4.3: B21D +; +;NBA6.0: FA38 +;NBA6.1: D4F8 +;NBA6.2: C1EB +;NBA6.3: B9E4 +; +;NBA8.0: 8636 +;NBA8.1: BA7A +;NBA8.2: E826 +;NBA8.3: 3B7C +; +;NBAC.0: D00D +;NBAC.1: B113 +;NBAC.2: 59D2 +;NBAC.3: 61A8 + + +;IROMCHIPS +; .EVEN +;; ROM_CHIP IROM1, 1, 8,32, 2000000H, 2FFFFE0H, 01161H ; UG14 +;; ROM_CHIP IROM9, 9, 8,32, 2000008H, 2FFFFE8H, 0748dH ; UJ14 +;; ROM_CHIP IROM5, 5, 8,32, 2000010H, 2FFFFF0H, 08b9dH ; UG19 +;; ROM_CHIP IROM13,13, 8,32, 2000018H, 2FFFFF8H, 05afeH ; UJ19 +;; +;; ROM_CHIP IROM2, 2, 8,32, 3000000H, 3FFFFE0H, 03e9bH ; UG16 +;; ROM_CHIP IROM10,10, 8,32, 3000008H, 3FFFFE8H, 05ca0H ; UJ16 +;; ROM_CHIP IROM6, 6, 8,32, 3000010H, 3FFFFF0H, 0c6ecH ; UG20 +;; ROM_CHIP IROM14,14, 8,32, 3000018H, 3FFFFF8H, 0c336H ; UJ20 +;; +;; ROM_CHIP IROM3, 3, 8,32, 4000000H, 4FFFFE0H, 0f400H ; UG17 +;; ROM_CHIP IROM11,11, 8,32, 4000008H, 4FFFFE8H, 0b70dH ; UJ17 +;; ROM_CHIP IROM7, 7, 8,32, 4000010H, 4FFFFF0H, 0f731H ; UG22 +;; ROM_CHIP IROM15,15, 8,32, 4000018H, 4FFFFF8H, 07be3H ; UJ22 +;; +;; ROM_CHIP IROM4, 4, 8,32, 5000000H, 5FFFFE0H, 0bdd6H ; UG18 +;; ROM_CHIP IROM12,12, 8,32, 5000008H, 5FFFFE8H, 0f515H ; UJ18 +;; ROM_CHIP IROM8, 8, 8,32, 5000010H, 5FFFFF0H, 0ef39H ; UG23 +;; ROM_CHIP IROM16,16, 8,32, 5000018H, 5FFFFF8H, 0b948H ; UJ23 +;; +; ROM_CHIP IROM1, 0, 8,32, 2000000H, 2FFFFE0H, 0H ; U133 +; ROM_CHIP IROM2, 1, 8,32, 2000008H, 2FFFFE8H, 0H ; U132 +; ROM_CHIP IROM3, 2, 8,32, 2000010H, 2FFFFF0H, 0H ; U131 +; ROM_CHIP IROM4, 3, 8,32, 2000018H, 2FFFFF8H, 0H ; U130 +; +; ROM_CHIP IROM5, 4, 8,32, 3000000H, 3FFFFE0H, 0H ; U129 +; ROM_CHIP IROM6, 5, 8,32, 3000008H, 3FFFFE8H, 0H ; U128 +; ROM_CHIP IROM7, 6, 8,32, 3000010H, 3FFFFF0H, 0H ; U127 +; ROM_CHIP IROM8, 7, 8,32, 3000018H, 3FFFFF8H, 0H ; U126 +; +; ROM_CHIP IROM9, 8, 8,32, 4000000H, 4FFFFE0H, 0H ; U125 +; ROM_CHIP IROM10, 9, 8,32, 4000008H, 4FFFFE8H, 0H ; U124 +; ROM_CHIP IROM11,10, 8,32, 4000010H, 4FFFFF0H, 0H ; U123 +; ROM_CHIP IROM12,11, 8,32, 4000018H, 4FFFFF8H, 0H ; U122 +; +; ROM_CHIP IROM13,12, 8,32, 5000000H, 5FFFFE0H, 0H ; U121 +; ROM_CHIP IROM14,13, 8,32, 5000008H, 5FFFFE8H, 0H ; U120 +; ROM_CHIP IROM15,14, 8,32, 5000010H, 5FFFFF0H, 0H ; U119 +; ROM_CHIP IROM16,15, 8,32, 5000018H, 5FFFFF8H, 0H ; U118 +; .LONG 0 ; FORCE IT TO STOP HERE +; +;; This and possibly other tables need to be set up yet +;IROMCHIPS1 +; ROM_CHIP IROM17,16, 8,32, 2000000H, 2FFFFE0H, 0H ; U117 +; ROM_CHIP IROM18,17, 8,32, 2000008H, 2FFFFE8H, 0H ; U116 +; ROM_CHIP IROM19,18, 8,32, 2000010H, 2FFFFF0H, 0H ; U115 +; ROM_CHIP IROM20,19, 8,32, 2000018H, 2FFFFF8H, 0H ; U114 +; +; ROM_CHIP IROM21,20, 8,32, 3000000H, 3FFFFE0H, 0H ; U113 +; ROM_CHIP IROM22,21, 8,32, 3000008H, 3FFFFE8H, 0H ; U112 +; ROM_CHIP IROM23,22, 8,32, 3000010H, 3FFFFF0H, 0H ; U111 +; ROM_CHIP IROM24,23, 8,32, 3000018H, 3FFFFF8H, 0H ; U110 +; +; ROM_CHIP IROM25,24, 8,32, 4000000H, 4FFFFE0H, 0H ; U109 +; ROM_CHIP IROM26,25, 8,32, 4000008H, 4FFFFE8H, 0H ; U108 +; ROM_CHIP IROM27,26, 8,32, 4000010H, 4FFFFF0H, 0H ; U107 +; ROM_CHIP IROM28,27, 8,32, 4000018H, 4FFFFF8H, 0H ; U106 +; +; ROM_CHIP IROM29,28, 8,32, 5000000H, 5FFFFE0H, 0H ; U105 +; ROM_CHIP IROM30,29, 8,32, 5000008H, 5FFFFE8H, 0H ; U104 +; ROM_CHIP IROM31,30, 8,32, 5000010H, 5FFFFF0H, 0H ; U103 +; ROM_CHIP IROM32,31, 8,32, 5000018H, 5FFFFF8H, 0H ; U102 +; .LONG 0 ; FORCE IT TO STOP HERE + +IROMCHIPS_8MEG + .EVEN + ROM_CHIP IROM1, 0, 8,32, 2000000H, 3FFFFE0H,05918H ; U133 + ROM_CHIP IROM2, 1, 8,32, 2000008H, 3FFFFE8H,0E85CH ; U132 + ROM_CHIP IROM3, 2, 8,32, 2000010H, 3FFFFF0H,095D8H ; U131 + ROM_CHIP IROM4, 3, 8,32, 2000018H, 3FFFFF8H,0E855H ; U130 + + ROM_CHIP IROM5, 4, 8,32, 4000000H, 5FFFFE0H,0154FH ; U129 + ROM_CHIP IROM6, 5, 8,32, 4000008H, 5FFFFE8H,08227H ; U128 + ROM_CHIP IROM7, 6, 8,32, 4000010H, 5FFFFF0H,013BAH ; U127 + ROM_CHIP IROM8, 7, 8,32, 4000018H, 5FFFFF8H,0B21DH ; U126 + .LONG 0 + +IROMCHIPS1_8MEG + ROM_CHIP IROM9, 8, 8,32, 2000000H, 3FFFFE0H,03da3H ; U125 + ROM_CHIP IROM10, 9, 8,32, 2000008H, 3FFFFE8H,03f1cH ; U124 + ROM_CHIP IROM11,10, 8,32, 2000010H, 3FFFFF0H,05a84H ; U123 + ROM_CHIP IROM12,11, 8,32, 2000018H, 3FFFFF8H,04237H ; U122 + + ROM_CHIP IROM13,12, 8,32, 4000000H, 5FFFFE0H,06dd1H ; U121 + ROM_CHIP IROM14,13, 8,32, 4000008H, 5FFFFE8H,0a7bbH ; U120 + ROM_CHIP IROM15,14, 8,32, 4000010H, 5FFFFF0H,03446H ; U119 + ROM_CHIP IROM16,15, 8,32, 4000018H, 5FFFFF8H,0ff49H ; U118 + .LONG 0 + +IROMCHIPS2_8MEG + ROM_CHIP IROM21,16, 8,32, 4000000H, 5FFFFE0H,0ea80H ; U??? + ROM_CHIP IROM22,17, 8,32, 4000008H, 5FFFFE8H,044d0H ; U??? + ROM_CHIP IROM23,18, 8,32, 4000010H, 5FFFFF0H,08505H ; U??? + ROM_CHIP IROM24,19, 8,32, 4000018H, 5FFFFF8H,008f2H ; U??? + .LONG 0 + + .END diff --git a/SRC/DIPSW.EQU b/SRC/DIPSW.EQU new file mode 100644 index 0000000..2f9a57c --- /dev/null +++ b/SRC/DIPSW.EQU @@ -0,0 +1,106 @@ +************************************************************************** +* * +* NBA JAM - DIPSWITCH EQUATE FILE * +* * +* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. * +* ALL RIGHTS RESERVED. * +* * +************************************************************************** + + +DPUSECMOS EQU 0100H ;USE CMOS MASK + +DPCOINAGE EQU 0E00H ;COINAGE MASK +DPCOINAGE_SRL EQU 9 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTRY EQU 3000H ;COUNTRY MASK +DPCOUNTRY_SRL EQU 12 ;SHIFT TO RIGHT JUSTIFY + +DPCOUNTER EQU 0C000H ;COIN COUNTER MODE +DPCOUNTER_SRL EQU 14 ;SHIFT TO RIGHT JUSTIFY + +DPPLAYERS EQU 1 ;NUMBER OF HARDWARE PLAYERS + +DPVALIDATOR EQU 2 ;DOLLAR BILL VALIDATOR INSTALLED +DPVALIDATOR_SRL EQU 1 ;SHIFT TO RIGHT JUSTIFY + +DPNOVIDCLIPS EQU 4 ;No video clips +DPNOVIDCLIPS_B EQU 2 + +;DPTOURNAMENT EQU 8 ;Tournament mode +;DPTOURNAMENT_B EQU 3 + +;;new for WWF unit +;;DP4MEG equ 32 ;4 Megabit/8 Megabit Image ROMS +;;DP4MEG_DIAG equ 4 ;4 Megabit/8 Megabit Image ROMS +;;new for WWF unit + +DPPOWER EQU 64 ;Tournament mode +DPPOWER_B EQU 6 + +DPTEST EQU 128 ;TEST SWITCH +;;DPTEST equ 80h ;Test switch +DPTEST_B equ 7 + +; DPUSECMOS ( UJ1 - 1 ) +; +; 0 = DIP SWITCH COINAGE USED +; 1 = CMOS COINAGE USED +; +; DPRIGHTSLOT ( UJ1 - 4 3 2 ) +; +; 000 = USA 1 / GERMAN 1 / FRENCH 1 +; 001 = USA 2 / GERMAN 2 / FRENCH 2 +; 010 = USA 3 / GERMAN 3 / FRENCH 3 +; 011 = USA 4 / GERMAN 4 / FRENCH 4 +; 100 = 1 COIN / 2 CREDIT +; 101 = 1 COIN / 3 CREDIT +; 110 = 1 COIN / 4 CREDIT +; 111 = FREEPLAY +; +; DPCOUNTRY ( UJ1 - 6 5 ) +; +; 00 = USA +; 01 = GERMAN +; 10 = FRENCH +; 11 = OUTERSPACE +; +; DPCOUNTER ( UJ1 - 8 7 ) +; +; 00 = 1 COUNT/COIN - LEFT COUNTER +; 01 = 1 COUNT/COIN - LEFT AND RIGHT COUNTERS +; 10 = TOTALIZER - LEFT COUNTER +; 11 = 1 COUNT/COIN - LEFT COUNTER +; +; DPPLAYERS ( UJ2 - 1 ) +; +; 0 = GAME CONFIGURED FOR 4 PLAYERS +; 1 = GAME CONFIGURED FOR 2 PLAYERS +; +; DPVALIDATOR ( UJ2 - 2 ) +; +; 0 = NO DOLLAR BILL ACCEPTOR INSTALLED +; 1 = DOLLAR BILL ACCEPTOR INSTALLED +; +; DPNOVIDCLIPS ( UJ2 - 3 ) +; +; 0 = Video clips on +; 1 = Video clips off +; +; DPTOURNAMENT ( UJ2 - 4 ) +; +; 0 = Tournament mode off +; 1 = Tournament mode on +; +; DPUNUSED ( UJ2 - 5 ) +; +; DPUNUSED ( UJ2 - 6 ) +; +; DPUNUSED ( UJ2 - 7 ) +; +; DPTEST ( UJ2 - 8 ) +; +; 0 = NORMAL NON-TEST +; 1 = TEST MODE +; + diff --git a/SRC/DISP.EQU b/SRC/DISP.EQU new file mode 100644 index 0000000..ece4e9a --- /dev/null +++ b/SRC/DISP.EQU @@ -0,0 +1,115 @@ +*.Last mod - 11/30/93 20:20 +*.Last mod - 4/11/95 3:07 + .globl OFREE,OBJLST,BAKLST,DISPLAYON,SCRNRELV + .globl GETOBJ,INSOBJ,DELOBJ,DELOBJA8 + .globl DISPLAY,OBJSTR + .globl ANI,SCRTST,SCRTSTG,GANIOF,DELBOBJ + .globl INSBOBJ,KILBOBJ + .globl PULLBOBJ,PULLOBJ,GANISAG + .globl QDMA,QDMAN,GETANIXY + .globl obj_addworldxy + .globl SCROLLX,SCROLLY,WORLDTLX,WORLDTLY,WORLDTL + .globl SCRNTL,SCRNLR,GSCRNREL,ADJNEWTL + .globl OBJSTR,SCREENTL,SCREENLR,DMAQCUR + .globl dpage,dtype + .globl dmaq0cnt,dmaq1cnt,dmaq0flg,dmaq1flg + .globl dmaq0,dmaq1 + .globl STOPOBJS + .globl FREEOBJ,EXISTOBJ + .globl ISOBJ + .globl BEGINOBJ,BEGINOBJ2 + .globl BEGINOBJP,BEGINOBJP2 + .globl obj_delc,obj_del1c,obj_aniq,obj_aniq_cnoff + .globl obj_aniq_scld + .globl DELOBJDIE,FRQDELDIE + .globl scrn_scaleininit,scrn_scalein,scrn_scaleout + .globl display_blank,display_unblank + .globl display_2dsclmodeon,display_2dsclstarmodeon + +*CONSTANTS + +SCRNXP .equ 56 ;Left X padding in bitmap +SCRNST .equ [0,-32] ;Top left of screen +SCRNEND .equ [254,432] ;Bottom right of screen +SCRNMID .equ [128,200] ;Midpoint of screen +PAGE1YO .equ 256 ;2nd page Y offset +TSEC .equ 53 ;Ticks per second +;;HEBLNKINIT .equ 32h ;Initial value for register +HEBLNKINIT .equ 65h ;Initial value for register + +OWSPD .equ 18 ;Open window speed +OWSPD2 .equ 25 +CWSPD .equ 40 ;Close win speed + +;;SCALETSIZE equ 40*4*16 +SCALETSIZE .equ 50*4*16 + + +*STRUCT OBJ +OLINK .equ 0 ;UHL *next object block +OXVEL .equ 20h ;UHL X velocity 16:16 +OYVEL .equ 40h ;UHL Y velocity 16:16 +OZVEL .equ 60h ;UHL Z velocity 16:16 +OXVAL .equ 80h ;UHL X position 16:16 +OXFRAC .equ 80h ; X pos fraction +OXPOS .equ 90h ; X pos integer +OYVAL .equ 0a0h ;UHL Y position 16:16 +OYFRAC .equ 0a0h ; Y pos frac +OYPOS .equ 0b0h ; Y pos int +OZVAL .equ 0c0h ;UHL Z position 16:16 +OZPOS .equ 0d0h ; Z pos int +OFLAGS .equ 0e0h ;UHW Mode flags +OCTRL .equ 0f0h ;UHW DMA control +OFSET .equ 100h ;UHW Offset +OSAG .equ 110h ;UHL *Image data +OSIZE .equ 130h ; +OSIZEX .equ 130h ;UHW X size +OSIZEY .equ 140h ;UHW Y size +OPAL .equ 150h ;UHW Pallette # +OCONST .equ 160h ;UHW Constant color +OIMG .equ 170h ;UHL *Image header +OID .equ 190h ;UHW Object ID +OPLINK .equ 1a0h ;UHL *Process +ODATA_p .equ 1c0h ;UHL *Scale table if scaled obj +OXANI .equ 1e0h ;SHL X scaled animation pt 16:16 +OMISC .equ 210h ;UHW Misc data (3D mode Z offset) +OSCALE .equ 220H ;UHL scale this object (set to 100% in BEGINOBJ) +OBSIZ .equ 240h +*ENDSTRUCT + +NOBJ .equ 450 ;Total # objects + +BQCELL .equ 0c0h ;Size of DMA queue element + +;Values for OFLAGS & OCTRL +M_WRZERO .equ 1 ;Write zero data +M_WRNONZ .equ 2 ;Write non-zero data +M_CONZER .equ 4 ;Replace zero data with constant +M_CONNON .equ 8 ;Replace non-zero data with constant +M_CONST .equ 0ch ;Replace all with constant +M_FLIPH .equ 10h ;Flip horizontally +M_FLIPV .equ 20h ;Flip vertically +M_3DQ .equ 40h ;Display in quick perspective +M_3D .equ 100h ;Display in perspective using XYZ +M_SHAD .equ 200h ;Shadow +M_PIXSCAN .equ 400h ;Pixel scan on +M_NOCOLL .equ 800h ;Collisions off +M_NOSCALE .equ 1000h ;3D scaling off +M_SCRNREL .equ 2000h ;Screen relative XY on +M_CHARGEN .equ 4000h ;Character generator type + +;OFLAGS/OCTRL bits +B_WRZERO .equ 0 +B_WRNONZ .equ 1 +B_CONZER .equ 2 +B_CONNON .equ 3 +B_FLIPH .equ 4 +B_FLIPV .equ 5 +B_3DQ .equ 6 +B_3D .equ 8 +B_SHAD .equ 9 +B_PIXSCAN .equ 10 +B_NOCOLL .equ 11 +B_NOSCALE .equ 12 +B_SCRNREL .equ 13 +B_CHARGEN .equ 14 diff --git a/SRC/DRONE.ASM b/SRC/DRONE.ASM new file mode 100644 index 0000000..56eaa88 --- /dev/null +++ b/SRC/DRONE.ASM @@ -0,0 +1,2456 @@ +************************************************************** +* +* Owner: Shawn +* +* Software: Shawn Liptak +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 3/24/93 -New compatible version +* Shawn Liptak, 1/17/94 -Smarter for tournament ed. +* Shawn Liptak, 3/20/96 -Smarter for HangTime +* +* COPYRIGHT (C) 1992-1996 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 4/8/96 17:01 +************************************************************** + .file "drone.asm" + .title "basketball drone code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + .include "world.equ" ;Court-world defs + .include "game.equ" + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + +;symbols externally defined + + .ref plyrobj_t,plyrproc_t + .ref ballobj_p + .ref ballpnum,ballpnumshot + .ref ballnumscored,ballpnumscored + .ref balltmshotcnt,balltmscored + .ref plyr_onfire + .ref seekdirdist_obxz128 + + .ref game_time,gmqrtr + .ref shotimer + + .ref team1,team2 + + .ref PCNT + .ref RNDPER + .ref PSTATUS + .ref GET_ADJ + + +;symbols defined in this file + + +;uninitialized ram definitions + + .bss drnzzcnt ,16 ;Drone zigzag mode cntdn + .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + BSSX drone2on ,16 ;!0=Use drone version2 code + + BSSX dronesmrt ,16 ;Bit 0-3 if 1 = Smarter drone + + +;equates for this file + + +BV5 equ >1040->80+>42*6 + +NOPUSHSTEAL equ 0 ;!0=No push or stealing +ONLY3 equ 0 ;!0=Only shoot 3's + + .text + + + +#*************************************************************** +* Main drone logic +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBR drone_main + + +; move *a13(plyr_d_seekcnt),a0 +; cmpi TSEC*4/2,a0 +; jrle #_skok +; LOCKUP +;#_skok + +; move @ballnumscored,b0 +; subk ONFIRE_MINCNT-1,b0 +; jrge #_warm ;None heating up? +; movk 2,b0 +; move b0,@ballnumscored +;#_warm + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move @ballpnum,a14 + jrn drone_chaseball ;No owner? + +;ÄÄÄÄÄÄÄ +;DEBUG +; move *a13(plyr_ohoopx),a0 +; movi 200,a1 +; cmpi WRLDMID,a0 +; jrlt #_1 +; neg a1 +;#_1 +; add a1,a0 +; move a0,*a13(plyr_d_seekx) +; movi CZMID-100,a0 +; move a0,*a13(plyr_d_seeky) +;ÄÄÄÄÄÄÄ + + move *a13(plyr_ownball),a1 + jrz drone_defense ;We don't have ball? + jrn drone_offwoball ;Teammate has ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Offense + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrone ;Teammate is a drone? + + move *a13(plyr_d_cflgs),a2 + btst DRN_PASS_B,a2 + jrz #nopass + + movi BUT2_M<<8+BUT2_M,a14 ;>Make him pass + jruc #docmd + +#nopass + btst DRN_SHOOT_B,a2 + jrz #noshoot + movi BUT1_M<<8|BUT1_M|BUT3_M,a14 ;>Make him shoot +; movk 3,a0 +; move a0,*a13(plyr_d_seekcnt) +#docmd + move *a11,a0 + sll 32-4,a0 + srl 32-4,a0 +; move a2,a2 +; jrnn #noturb + ori BUT3_M,a0 ;+turbo +#noturb + or a14,a0 + move a0,*a11 + clr a0 + move a0,*a13(plyr_d_cflgs) + jruc #x + +#noshoot +#tmdrone + + move *a13(plyr_d_mode),a14 + subk 2,a14 + jrge #inmd ;Already in mode? + + movk 2,a1 ;Offense with ball + move a1,*a13(plyr_d_mode) + movk 1,a1 + jruc #setskc +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update tob mode + + move *a13(plyr_d_seekcnt),a1 + jrle #notob +#setskc + subk 1,a1 + move a1,*a13(plyr_d_seekcnt) + jrgt #notob + + move *a13(plyr_ohoopx),*a13(plyr_d_seekx) + + movi 70,a0 + callr rndrng0 + addi CZMID-35,a0 + move a0,*a13(plyr_d_seeky) +#notob +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_seqflgs),a2 + btst PASS_B,a2 + jrnz #kilbuts + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp + + move *a11,a0 + btst BUT1_B,a0 + jrnz #fake ;Shoot button down? + + + btst SHOOT_B,a2 + jrnz #injmp + + btst DUNK_B,a2 + jrnz #injmp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Breakaway + + move *a13(plyr_ohpdist),a4 ;A4=Hoop distance + + move *a13(plyr_dribmode),a14 + jrn #nodrib +#inspin + + move *a13(plyr_num),a14 ;>Chk for breakaway + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + move *a14+,a2,L + move *a14+,a3,L + + move *a2(plyr_hpdist),a2 + move *a3(plyr_hpdist),a3 + + cmp a4,a2 + jrlt #shootrnd ;He's closer? + cmp a4,a3 + jrlt #shootrnd ;He's closer? + + callr drone_seek + + +;Tell drone to always turbo on breakaways... + move *a13(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 ;Plyr start bits 0-3 + btst a1,a14 + jrnz #ori ;Teammate is a human? + move *a13(plyr_d_skill),a14 + addk 8,a14 + jrle #noturb2 +#ori ori BUT3_M,a0 ;Push turbo + + + + move a0,*a11 +#noturb2 + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #scok + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok + callr drone_chk3ptr + jrnz #shoot3 ;Need a 3? + + cmpi 50,a4 + jrlt #shoot2 ;Close? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + cmpi 170,a4 + jrge #x ;Too far? + + movk 9,a0 + callr rndrng0 + TEST a0 + jrnz #x + + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Can't dribble + +#nodrib + move *a13(plyr_seq),a0 + cmpi SPIN_MOVE_SEQ,a0 + jreq #inspin ;Spinning? + + subi ELBO_SEQ,a0 + jreq #x ;Elbows? + + subk ELBO2_SEQ-ELBO_SEQ,a0 + jreq #x ;Elbows? + + cmpi 240,a4 + jrlt #shoot2 + + callr drone_pass + jrnz #x ;Pass OK? + + movk >1f,a0 + callr rnd + jrnz #x ;97%? + jruc #shoot2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#shootrnd + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 + jrnz #scok2 + move @shotimer,a1 + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#scok2 + PUSH a6,a7 + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + calla seekdirdist_obxz128 + PULL a6,a7 + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrgt #o1dok ;He's too far? + cmp a14,a1 + jrlt #o1dok ;I'm closer? + move *a13(plyr_o1dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o1dok + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrgt #o2dok ;He's too far? + cmp a14,a1 + jrlt #o2dok ;I'm closer? + move *a13(plyr_o2dir),a2 + sub a0,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 + jrlt #goaround ;In front of me? +#o2dok + jruc #runath + +#goaround ;>Opponent in my way + move *a13(plyr_tmdist),a0 + cmpi 80,a0 + jrlt #goa ;Teammate too close? + + callr drone_pass + jrnz #x ;Pass OK? + +#goa + movi drnzzcnt,a2 + move *a2,a0 + subk 1,a0 + jrgt #zzsame + + move *a13(plyr_dirtime),a0 + subk 8,a0 + jrle #zz ;Too little time in dir? + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_BVEL),a0 ;Speed + cmpi BV5,a0 + jrle #zz ;Too slow? + +; movk 1,a0 ;50% spin move +; callr rnd +; jrnz #zz + + movk 2,a0 + move a0,*a13(plyr_tbutn) + + callr drone_seek + ori BUT3_M<<8|BUT3_M,a0 ;Turbo + move a0,*a11 + + jruc #tryshot + +#zz + movk 5,a0 ;New mode + callr rndrng0 + ANDK 3,a0 + move a0,*a2(drnzzmode-drnzzcnt) + + movi TSEC-10,a0 + callr rndrng0 + addk 28,a0 +#zzsame + move a0,*a2 + + callr drone_seek +; jrz #shoot2 ;In position? + sll 3,a0 ;*8 + addi #jbits_t,a0 + + move *a2(drnzzmode-drnzzcnt),a14 + sll 4+3,a14 ;*16*8 + add a14,a0 + movb *a0,a0 + move a0,*a11 + + move *a8(OZPOS),a1 + + btst JOYU_B,a0 + jrz #nju + cmpi CZMIN+40,a1 + jrle #xzmd ;Flip to other circle mode? +#nju + btst JOYD_B,a0 + jrz #njd + cmpi CZMAX-40,a1 + jrlt #njd +#xzmd + move *a2(drnzzmode-drnzzcnt),a3 + movk 1,a14 + xor a14,a3 + and a14,a3 + move a3,*a2(drnzzmode-drnzzcnt) +#njd + + cmpi 80,a4 + jrlt #shoot2 ;Close enough for jam? + + jruc #tryshot + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#runath ;>I have a clr path to hoop! +; move *a13(plyr_o1dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? +; move *a13(plyr_o2dist),a14 +; cmpi 65,a14 +; jrlt #goa ;He's too close? + + callr drone_seek + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrle #tryshot ;Dumb? + ori BUT3_M,a0 ;Turbo + move a0,*a11 + + +#tryshot + cmpi 50,a4 + jrlt #shoot2 ;Close enough for jam? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + callr drone_chk3ptr + jrnz #shoot2 ;Need a 3? + + cmpi 255,a4 + jrge #x ;Too far? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Alleyoop? + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jreq #notmheat ;!My tm? + + movi 200,a0 + jruc #rndsht +#notmheat + + movi 50,a0 + move *a13(plyr_d_skill),a14 + addk 7,a14 + jrgt #rndsht ;Smarter? + movk 30,a0 +#rndsht + callr rndrng0 + move a0,a0 + jrnz #x + + +#shoot2 + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #shoot3 ;No alleyoop? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#shoot3 + move *a11,a0 ;>Shoot + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +; movk 1,a0 ;Max fakes +; move a0,*a13(plyr_d_seekcnt) + + jruc #x + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Jumping but still on gnd + +#fake +; move *a13(plyr_d_seekcnt),a2 +; jrle #x ;No fakes? + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + + move *a13(plyr_o1dist),a14 + cmpi 80,a14 + jrlt #fkc ;He's close? + + move *a13(plyr_o2dist),a14 + cmpi 80,a14 + jrge #x ;He's far? +#fkc + movk >1f,a0 + callr rnd + jrnz #x + + move *a9(pld_d_lowsecagr),a14 + move @game_time,a1,L + srl 8,a1 ;Remove tenths + cmp a14,a1 + jrlt #x ;Less than x secs? + move @shotimer+16,a1 ;Tens + jrnz #fk + move @shotimer,a1 ;Ones + cmp a14,a1 + jrlt #x ;Less than x secs? +#fk +; subk 1,a2 +; move a2,*a13(plyr_d_seekcnt) + jruc #kilbuts + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#injmp + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrz #tmdrn ;Teammate is a drone? + + move *a13(plyr_tmproc_p),a0,L + move *a0(PA11),a0,L + move *a0,a0 ;Get teammates ctrl bits + btst BUT1_B,a0 + jrnz #x ;Holding shoot button? + jruc #kilbuts +#tmdrn + move *a13(plyr_seqflgs),a0 + btst BLOCKREB_B,a0 + jrnz #kilbuts ;Got a rebound? + + btst DUNK_B,a0 + jrz #nodnk ;Try alleyoop? + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? + move @shotimer+16,a1 ;Tens + jrnz #nodnk + move @shotimer,a1 ;Ones + subk 2,a1 + jrlt #shoot3 ;Less than 2 secs? +#nodnk + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pss ;Try alleyoop? + + + move *a13(plyr_num),a2 ;>Chk for close blockers + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrobj_t,a2 + + move *a2+,a3,L + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrgt #o1sdok ;He's too far? + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrgt #rndrel ;I'm lower? +#o1sdok + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrgt #kilbuts ;He's too far? Shoot + + move *a2+,a3,L + + move *a3(OYPOS),a0 + addk 20,a0 + move *a8(OYPOS),a1 + cmp a0,a1 + jrle #kilbuts ;I'm higher, so shoot? + +#rndrel + movk 30,a0 + callr rndrng0 + move a0,a0 + jrz #kilbuts ;Cause shoot? + + movk 7,a0 + callr rnd + jrnz #x ;88%? + + move *a13(plyr_ptsdown),a14 + addk 5,a14 + jrlt #pss ;Winning by >5? + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;In a dunk? + move @game_time,a1,L + cmpi >200,a1 + jrlt #x ;Less than 2 secs? +#pss + callr drone_pass + + jruc #x + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + +#kilbuts + clr a0 ;>Let go of shoot button + move a0,*a11 + +#x + rets + + +#jbits_t + .byte 0,JOYL_M,JOYR_M,0 ;90~ clockwise + .byte JOYD_M,JOYD_M|JOYL_M,JOYD_M|JOYR_M,0 + .byte JOYU_M,JOYU_M|JOYL_M,JOYU_M|JOYR_M,0 + .byte 0,0,0,0 + + .byte 0,JOYR_M,JOYL_M,0 ;90~ cntr clkwise + .byte JOYU_M,JOYU_M|JOYR_M,JOYU_M|JOYL_M,0 + .byte JOYD_M,JOYD_M|JOYR_M,JOYD_M|JOYL_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYL_M,JOYU_M|JOYR_M,0 ;135~ clkwise + .byte JOYD_M|JOYR_M,JOYD_M,JOYR_M,0 + .byte JOYU_M|JOYL_M,JOYL_M,JOYU_M,0 + .byte 0,0,0,0 + + .byte 0,JOYD_M|JOYR_M,JOYU_M|JOYL_M,0 ;135~ cntr clkwise + .byte JOYU_M|JOYR_M,JOYR_M,JOYU_M,0 + .byte JOYD_M|JOYL_M,JOYD_M,JOYL_M,0 + .byte 0,0,0,0 + + +#******************************* +* Check if this drone needs a 3 ptr +* A4 = Distance from opponents hoop +*>A0 = !0 if needed (CC) +* Trashes scratch + + SUBRP drone_chk3ptr + + cmpi 290,a4 + jrgt #x0 ;Too far? + + move *a13(plyr_num),a1 + move @PSTATUS,a0 ;Plyr start bits 0-3 + movk 1,a14 + xor a14,a1 + btst a1,a0 + jrnz #x0 ;Teammate is a human? + + xor a14,a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #x1 ;I'm on fire? + + cmpi 230,a4 + jrlt #x0 ;Too close? + + XORK 2,a1 + btst a1,a0 + jrnz #x0 ;Opp 1 on fire? + XORK 1,a1 + btst a1,a0 + jrnz #x0 ;Opp 2 on fire? + + + movk 6,a1 + move @game_time,a0,L + cmpi >1010000,a0 + jrgt #hvtime ;Enough time? + movk 3,a1 +#hvtime + move *a13(plyr_ptsdown),a14 + cmp a1,a14 + jrlt #x0 + + cmpi >40000,a0 + jrlt #x1 ;Less than 40 secs? + + move *a13(plyr_o1dist),a14 + cmpi 70,a14 + jrlt #rndsht ;He's close? + move *a13(plyr_o2dist),a14 + cmpi 70,a14 + jrge #x1 ;He's far? +#rndsht + movk 8,a0 + callr rndrng0 + move a0,a0 + jrnz #x0 + +#x1 + addk 1,a0 + rets +#x0 + clr a0 + rets + + +#******************************* +* Drone in offense with out ball +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process +* Trashes scratch, A2-A5 + + SUBRP drone_offwoball + + clr a0 + move a0,*a13(plyr_d_cflgs) + + callr drone_getcurskillo + move a0,a5 ;A5=Skill offset + + + movk 1,a4 ;A4=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a4 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a4 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_mode),a14 + subk 1,a14 + jreq #inmd ;Already in mode? + + movk 1,a0 ;Offense wo ball + move a0,*a13(plyr_d_mode) + + move a5,a0 + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50,a14 + jrgt #o1far ;Too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 16,a2 + jrlt #pusho ;In front of me? +#o1far + move *a13(plyr_o2dist),a14 + subi 50,a14 + jrgt #nopush ;Too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 16,a2 + jrge #nopush ;!In front? +#pusho + movi 99,a0 + callr rndrng0 + + move a5,a14 + addi #p_t,a14 + move *a14,a1 + + TEST a4 + jrle #pshnf ;No fire? + addk 30,a1 ;Push alot more! +#pshnf + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #noth ;None heating up? + addk 20,a1 ;Push more! +#noth + cmp a1,a0 + jrge #newseek ;Skip push? + + .if NOPUSHSTEAL + jruc #x + .endif + + move *a11,a0 ;Push + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + jruc #x + +#nopush +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Try dunk wo ball + + move *a13(plyr_ohpdist),a3 + cmpi 65,a3 + jrle #noalyo ;Too close? + cmpi 180,a3 + jrgt #noalyo ;Too far? + + TEST a4 + jrnz #noalyo ;We on fire? + + move a5,a14 + addi #aly_t,a14 + move *a14,a2 + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #norm ;Tm not dunking? + + move *a1(plyr_slam_ticks),a14 + move *a1(plyr_jmpcnt),a1 + sub a1,a14 + subk 20,a14 + jrle #noalyo ;Not enough time? + +; clr a0 +#norm + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jrne #rndaly ;!in allyo seek? + + callr drone_seek + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 ;Turbo shoot + move a0,*a11 + +; move *a13(plyr_tbutn),a0 +; subk 30,a0 +; jrle #x + + jruc #x + +#rndaly + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrlt #notmheat ;None heating up? + +; move @balltmscored,a1 +; srl 5,a1 ;0=Tm2, 1=Tm1 +; move *a13(plyr_num),a0 +; srl 1,a0 +; cmp a0,a1 +; jreq #notmheat ;!My tm? + + sll 2,a2 ;% * 2 +#notmheat + + movi 99,a0 + callr rndrng0 + cmp a2,a0 + jrge #noalyo + + cmpi 80,a3 + jrle #noalyo ;Too close? + + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a14 + subk 3,a14 + jrle #noalyo ;No turbo? + + move *a13(plyr_ohoopx),a0 + movi CZMID+1,a1 + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + callr drone_seekxy + + jruc #x + +#noalyo + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + +; movi >7f,a0 +; callr rnd +; jrz #newseek + + move *a13(plyr_d_seeky),a0 + cmpi CZMID+1,a0 + jreq #newseek ;Failed allyo? + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + +#newseek +; move *a13(plyr_newdir),a0 +; jrnn #contsk ;Turning? + + movk 16-1,a0 + + TEST a4 + jrle #no3 ;I'm not on fire? + movk 7-1,a0 +#no3 + .if ONLY3 + movk 7-1,a0 + .endif + + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + + move *a13(plyr_ohoopx),a14 + cmpi WRLDMID,a14 + jrlt #lft + neg a1 +#lft + add a1,a14 + move a14,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + movi TSEC*3/2,a0 + callr rndrng0 + addk TSEC/2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) +#contsk + callr drone_seek + jrnz #notthere + + movk >1f,a0 ;3% + callr rnd + jrnz #x + + clr a0 + move a0,*a13(plyr_d_seekcnt) + +#notthere + TEST a4 + jrle #notur ;I'm not on fire? + + move *a11,a0 + ori BUT3_M,a0 ;+turbo + move a0,*a11 +#notur + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#x + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 40,40,40,35,30 ;10-6 + .word 25,22,20,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#p_t ;% to push + .word 1,1,1,1,1 + .word 2,2,2,2,3 + .word 3,3,4,4,5 + .word 5 + .word 5,6,8,10,13 + .word 15,17,18,20,20 + .word 25,30,35,40,50 + + .asg 10,N +#aly_t ;% to jump at backboard + .word 1,2,3,4,5 + .word N+05,N+10,N+15,N+15,N+20 + .word N+20,N+20,N+20,N+22,N+25 + .word N+25 + .word N+25,N+26,N+28,N+30,N+35 + .word N+40,N+45,N+50,N+55,N+60 + .word N+65,N+70,N+75,N+90,N+99 + + + .asg CZMID,Z +#seek_t + .word 0,Z-150, 80,Z-150, 200,Z-100 ;3ptrs + .word 255,Z + .word 200,Z+115, 80,Z+190, 0,Z+190 + + .word 0,Z-100, 50,Z-90, 100,Z-80 ;2ptrs + .word 150,Z + .word 100,Z+100, 50,Z+110, 0,Z+120 + + .word 30,Z-40, 30,Z+40 + + +#******************************* +* Drone code - pass if clear +* A8 = *Obj +* A11 = *Ctrl bits +* A13 = *Plyr process +*>A0 = !0 if pass OK (CC) +* Trashes scratch + + SUBRP drone_pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #x ;Teammate is a human? + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_tmdist),a0 + addk 30,a0 + + move *a13(plyr_o1dist),a1 ;>Chk if o1 in my way + cmp a1,a0 + jrlt #o1ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o1dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml + subi 128,a1 + abs a1 +#dsml + subk 16,a1 + jrlt #inway +#o1ok + + move *a13(plyr_o2dist),a1 ;>Chk if o2 in my way + cmp a1,a0 + jrlt #o2ok + + move *a13(plyr_tmdir),a14 + move *a13(plyr_o2dir),a1 + sub a14,a1 + abs a1 + cmpi 64,a1 + jrle #dsml2 + subi 128,a1 + abs a1 +#dsml2 + subk 16,a1 + jrlt #inway +#o2ok + + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheat ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + cmp a0,a1 + jrne #noheat ;!Me? + + move *a13(plyr_ohpdist),a0 + cmpi 350,a0 + jrlt #x ;Too close? Don't pass +#noheat + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#iwpass + move *a13(plyr_tmproc_p),a1,L +#tmclos + move *a1(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #pass ;Tm dunking? + + move *a1(plyr_seq),a0 + subk RUNDRIBTURB_SEQ,a0 + jrhi #x ;Tm is doing something? +#pass + move *a11,a0 ;>Pass + ori BUT2_M<<8|BUT2_M|BUT3_M,a0 + move a0,*a11 + + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +#inway + move @ballnumscored,b0 + subk ONFIRE_MINCNT-1,b0 + jrlt #noheatiw ;None heating up? + + move @ballpnumscored,a1 + move *a13(plyr_num),a0 + XORK 1,a0 + cmp a0,a1 + jrne #noheatiw ;!Tm? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 300,a0 + jrlt #iwpass ;He's Close? Risk pass + +#noheatiw + move *a13(plyr_ohpdist),a1 + cmpi 250,a1 + jrlt #x ;I'm close to hoop? + + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_ohpdist),a0 + cmpi 240,a0 + jrlt #tmclos ;Teammate is close to hoop? + +#x + clr a0 + rets + + + +#******************************* +* Drone code - defense +* A8 = *Obj +* A9 = *Plyr secondary data +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_defense + + PUSH a6,a7,a10 + + clr a0 + move a0,*a13(plyr_d_cflgs) + + + move @ballpnum,a5 + sll 5,a5 + addi plyrproc_t,a5 + move *a5,a5,L ;A5=*Proc of opponent with ball + + + callr drone_getcurskillo + move a0,a7 ;A7=Ptsdn+skill for indexing (*16) + + + movk 1,a6 ;A6=Fire flag (+=Me, -=Tm) + move *a13(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #mefr ;I'm on fire? + + subk 2,a6 ;=-1 + + XORK 1,a0 + btst a0,a1 + jrnz #mefr ;Tm on fire? + clr a6 +#mefr + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + move *a13(plyr_d_mode),a14 + jrn #inmd ;Already in mode? + + not a14 + move a14,*a13(plyr_d_mode) ;Neg + + move a7,a14 + addi #mdsk_t,a14 + move *a14,a0 + move a0,a2 + srl 2,a2 ;/4 + + callr rndrng0 + addk 1,a0 + add a2,a0 + move a0,*a13(plyr_d_seekcnt) + + clr a0 + move a0,*a9(pld_d_nastycnt) + + movk 30,a0 + callr rndrng0 + + addi 190-20,a0 + move a0,*a9(pld_d_grddist) +#inmd + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Update nasty mode + + move *a9(pld_d_lowsecagr),a0 + + movk 2,a10 + move @game_time,a14,L + srl 8,a14 ;Remove tenths + cmp a0,a14 + jrlt #nasty ;Less than x secs? + + move @gmqrtr,a2 + subk 3,a2 + jrlt #chkst + move *a13(plyr_ptsdown),a1 + addk 3,a1 + jrle #chkst ;Winning by 3 or more? + srl 8,a14 ;Remove ones + sll 1,a14 ;*2 + cmp a0,a14 + jrlt #nasty ;Less than x0 secs? +#chkst + move @shotimer+16,a14 ;Tens + jrnz #scok + move @shotimer,a14 ;Ones + srl 1,a0 ;/2 + cmp a0,a14 + jrlt #nasty ;Less than x secs? +#scok + move *a9(pld_d_nastycnt),a10 + jrgt #naston + + movk 10,a10 + movi 0ffh,a0 + callr rnd + jrz #nasty + + clr a10 + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #nast_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #nonast ;No nasty? + + movi TSEC-20,a0 + callr rndrng0 + addk 20,a0 + move a0,a10 +#naston + subk 1,a10 +#nasty + move a10,*a9(pld_d_nastycnt) + + cmpi 10,a10 + jreq #newsk +#nonast + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek +#newsk + move *a13(plyr_num),a2 + XORK 2,a2 + move a2,a4 + sll 5,a4 ;*32 + addi plyrproc_t,a4 + move *a4,a4,L + cmp a5,a4 + jreq #guard ;I'm on guy with ball? + + move *a5(plyr_ohpdist),a0 + cmpi 300,a0 + jrgt #guard ;Too far to worry about? + +; move *a5(plyr_seqflgs),a0 +; btst DUNK_B,a0 +; jrnz #gbc ;He's dunking? + + move *a13(plyr_tmproc_p),a3,L + move *a3(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #gbc ;Teammate staggered? +#tmok + move *a3(plyr_o1dist),a14 + move *a3(plyr_o1dir),a1 + btst 0,a2 + jrnz #p1 + move *a3(plyr_o2dist),a14 + move *a3(plyr_o2dir),a1 +#p1 + move *a3(plyr_hpdir),a0 ;Find dir difference + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #dsml + subi >80,a0 + abs a0 +#dsml subk 28,a0 + jrle #gbc ;TM not between op and hoop? + + cmpi 160,a14 + jrle #guard ;TM guarding? + +#gbc + move a5,a4 ;Guard ball carrier +#guard + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a4(PA8),a2,L ;*Obj + + move *a2(OXPOS),a0 + move *a2(OXANI+16),a14 + add a14,a0 ;X + move *a2(OZPOS),a1 ;Z + + move *a2(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + move *a2(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + + TEST a10 + jrgt #setseek ;Nasty on? + + + move *a5(plyr_seqflgs),a14 + btst SHOOT_B,a14 + jrz #nosh ;!Starting a shot? + + TEST a6 + jrgt #nosh ;I'm on fire? + + move *a13(plyr_balldist),a14 + cmpi 70,a14 + jrle #setseek ;In his face? + +#nosh + move *a13(plyr_myhoopx),a2 ;Stay near oplyr between my basket + movi CZMID,a3 + + sub a2,a0 + sub a3,a1 + + move *a9(pld_d_grddist),a14 + + TEST a6 + jrle #nofire ;I'm not on fire? + + movi 77,a14 ;30% + + move a4,b0 + move *b0(plyr_ohpdist),b0 + cmpi 400,b0 + jrge #nofire ;Opp far from my hoop? + movi 154,a14 ;60% +#nofire + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a3 + + move a0,a1 + mpys a14,a1 + sra 8,a1 ;/256 + add a1,a2 + + move a2,a0 + move a3,a1 + +#setseek + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + movk 25,a0 + move *a4(plyr_ohpdist),a1 + cmpi 320,a1 + jrge #seek ;Opp far from my hoop? + + move a7,a14 + addi #skt_t,a14 + move *a14,a0 + srl 1,a0 ;/2 + move a0,a2 + callr rndrng0 + add a2,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + move a0,a2 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Turbo if opp closer to my basket + + move *a13(plyr_num),a14 ;>Get opponents proc + addk 2,a14 + sll 32-2,a14 + srl 32-2-5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a0,L + + move *a0(plyr_ohpdist),a0 + subk 10,a0 + cmpi 300,a0 + jrgt #onclose ;!close? + subi 60,a0 ;Turbo earlier +#onclose + move *a13(plyr_hpdist),a1 + cmp a0,a1 + jrlt #icloser + + TEST a2 + jrz #icloser ;I'm not moving? + addi BUT3_M,a2 ;Turbo +#icloser + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Push/steal + + move *a13(plyr_balldist),a1 + cmpi 35,a1 + jrgt #psrnd ;!In his face? + + move @PCNT,a0 + sll 32-1,a0 + jrnz #skipsp ;Skip 50%? + + move a10,a10 + jrgt #ps ;Nasty on? + +#psrnd + move a7,a14 + addi #dist_t,a14 + move *a14,a0 + cmp a0,a1 + jrgt #skipsp ;Ball too far? + + movi 999,a0 + callr rndrng0 + + move a7,a14 + addi #ps_t,a14 + move *a14,a1 + cmp a1,a0 + jrge #skipsp ;Skip push? +#ps + movk 1,a0 + callr rnd + jrnz #push ;50%? + + + move *a5(plyr_jmpcnt),a1 + jrnz #push ;Plyr with ball is in air? + + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + jruc #x + +#push + move *a5(PA8),a0,L + move *a0(OYPOS),a1 + move *a5(plyr_aniy),a14 + add a14,a1 ;His feet Y position + move *a8(OYPOS),a0 + sub a1,a0 + addk 10,a0 + jrgt #skipsp ;Feet above my shoulders? + + ori BUT2_M<<8|BUT2_M|BUT3_M,a2 + jruc #x + +#skipsp + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can block ball + + move *a13(plyr_balldist),a14 + cmpi 65,a14 + jrge #noblk + + move *a5(plyr_seqflgs),a4 + + + btst DUNK_B,a4 + jrz #nodnk + + cmpi 35,a14 + jrgt #noblk + + move *a13(plyr_tmproc_p),a3,L + + move *a3(plyr_balldist),a14 + cmpi 45,a14 + jrgt #tryblk ;Teammate far? + + move *a3(plyr_jmpcnt),a1 + jrz #tryblk ;Tm on gnd? + + move @PCNT,a0 + sll 32-3,a0 + jrnz #noblk ;Skip 88%? + + jruc #tryblk + +#nodnk + btst SHOOT_B,a4 + jrz #noblk ;!Starting a shot? + + move *a5(plyr_jmpcnt),a1 + jrnz #tryblk ;Plyr with ball is in air? + + movk 11,a0 + callr rndrng0 + TEST a0 + jrnz #noblk ;92% ignore? + jruc #blk + +#tryblk + movi 99,a0 + callr rndrng0 + move a7,a14 + addi #blk_t,a14 + move *a14,a1 + + btst DUNK_B,a4 + jrz #nd + sra 1,a1 ;Dunk % /2 +#nd + TEST a10 + jrle #nstoff ;Nasty off? + sll 1,a1 ;%*2 +#nstoff + cmp a1,a0 + jrge #noblk + +#blk + sll 32-4,a2 + srl 32-4,a2 + addi BUT1_M<<8|BUT1_M|BUT3_M,a2 ;Block +#noblk + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +#x + .if NOPUSHSTEAL + andi 0dfh,a2 + .endif + + move a2,*a11 + + + PULL a6,a7,a10 + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,45,45,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + + .asg 0,N +#nast_t ;% to become nasty + .word 0,0,0,0,0 + .word N+1,N+1,N+2,N+2,N+2 + .word N+3,N+3,N+3,N+4,N+5 + .word N+5 + .word N+6,N+7,N+8,N+9,N+10 + .word N+12,N+13,N+14,N+15,N+16 + .word N+18,N+20,N+24,N+28,N+30 + + .asg 25,N +#skt_t ;Max seek time (75% avrg) + .word N+55,N+55,N+55,N+55,N+52 + .word N+48,N+44,N+40,N+36,N+33 + .word N+30,N+29,N+28,N+27,N+26 + .word N+25 ;Even score + .word N+24,N+23,N+21,N+19,N+17 + .word N+14,N+11,N+08,N+06,N+03 + .word N+01,N-01,N-03,N-05,N-10 +#dist_t ;Max dist to try push/steal + .word 110,100,100,100,100 + .word 90,90,80,80,80 + .word 80,70,70,60,60 + .word 60 + .word 50,50,50,50,50 + .word 50,50,50,50,50 + .word 50,50,50,50,50 +#ps_t ;% to push/steal + .word 1,2,2,2,2 + .word 3,3,3,3,3 + .word 4,4,4,5,5 + .word 6 + .word 6,6,8,10,13 + .word 15,17,18,20,30 + .word 40,60,80,150,250 +#blk_t ;% to block + .word 1,1,2,3,3 + .word 3,3,4,4,5 + .word 6,7,8,10,12 + .word 14 + .word 16,18,20,25,30 + .word 35,40,45,50,50 + .word 50,50,50,50,50 + + +#******************************* +* Setup drones for ball takeout +* Trashes scratch + + SUBR drone_setuptob + +;DJT Start + PUSH a3,a4,a7,a8,a9,a13 +;DJT End + + movk 4,a4 + movi plyrproc_t,a3 + +#lp + move *a3+,a13,L +;DJT Start + move *a13(PA9),a9,L +;DJT End + + movk 1,a0 + move *a13(plyr_ownball),a14 + jrz #def ;Defense? + ;>Setup offense + jrn #wob + movk 2,a0 +#wob + move a0,*a13(plyr_d_mode) + + movi TSEC-10,a0 + callr rndrng0 + addk 5,a0 + move a0,*a13(plyr_d_seekcnt) + + movk 9-1,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #seek_t,a0 + + move *a0+,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #lft + neg a1 +#lft + addi WRLDMID,a1 + move a1,*a13(plyr_d_seekx) + + move *a0+,a1 + move a1,*a13(plyr_d_seeky) + + jruc #nxt + + +#def ;>Setup defense +;DJT Start +; .if 0 + move @PSTATUS,a0 + move *a13(plyr_num),a8 + btst a8,a0 + jrnz #df + movk 1,a14 + xor a8,a14 + btst a14,a0 + jrnz #df + srl 1,a14 + sll 4,a14 + neg a14 + .ref t1ispro + addi t1ispro+16,a14,L + movi 8,a8 ;TSEC*2 ;!!! + move *a14,a14 + jrn #df + jrp #dd + movi 12,a8 ;TSEC*4 ;!!! +#dd + CREATE0 drone_mean + move a0,a8 + movi TSEC*3,a0,W ;!!! + callr rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a8(PTIME) +#df +; .endif ;0 +;DJT End + movi -1,a14 + move a14,*a13(plyr_d_mode) ;Defense + +;DJT Start + clr a0 + move a0,*a9(pld_d_nastycnt) + + movi 190,a0 + move a0,*a9(pld_d_grddist) +;DJT End + + movk 4,a0 + callr rndrng0 + addk 5,a0 +;DJT Start + move a0,*a9(pld_d_lowsecagr) ;5-9 +;DJT End + + callr drone_getcurskillo + + addi #mdsk_t,a0 + move *a0,a0 + callr rndrng0 + addk 1,a0 + move a0,*a13(plyr_d_seekcnt) + +#nxt + dsj a4,#lp + +;DJT Start + PULL a3,a4,a7,a8,a9,a13 + rets + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + SUBR drone_mean + + move a8,*a9(pld_d_nastycnt) + DIE + + .asg CZMID,Z +#seek_t + .word -350,Z-220, -310,Z-220, -270,Z-150, -150,Z-150 + .word 0,Z + .word -350,Z+220, -310,Z+220, -270,Z+150, -150,Z+150 + +; .word -260,Z-160, -200,Z-150, -100,Z-130, -50,Z-100 +; .word 0,Z +; .word -260,Z+160, -200,Z+150, -100,Z+130, -50,Z+100 +;DJT End + + +#mdsk_t ;Mode switch max seek time + .word 30,30,30,25,25 ;Up 15-11 + .word 25,25,20,20,20 ;10-6 + .word 20,18,16,14,12 ;5-1 + .word 10 ;Even score + .word 8,7,6,5,4 ;Dn 1-5 + .word 4,3,3,2,2 ;6-10 + .word 2,1,1,1,1 ;11-15 + + +#******************************* +* Drone code - nobody has ball +* A8 = *Obj +* A11= *Ctrl bits +* A13= *Plyr process + + SUBRP drone_chaseball + + move *a13(plyr_rcvpass),a14 + jrgt drone_offwoball ;I'm rcving ball? + + move *a13(plyr_tmproc_p),a4,L + move *a4(plyr_rcvpass),a14 + jrgt drone_offwoball ;Teammate rcving ball? + + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Mode + + clr a0 + move a0,*a13(plyr_d_cflgs) + + move *a13(plyr_d_mode),a14 + jrz #inmd ;Already in mode? + + move a0,*a13(plyr_d_mode) + + callr drone_getcurskillo + addi #mdsk_t,a0 + move *a0,a0 + + callr rndrng0 + addk 2,a0 + move a0,*a13(plyr_d_seekcnt) + +#inmd +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Seek + + move *a13(plyr_d_seekcnt),a0 + subk 1,a0 + jrgt #seek + + move @ballobj_p,a5,L + + + move *a13(plyr_num),a14 ;>Chk for pass + srl 1,a14 + movk 1,a0 + xor a0,a14 + sll 6,a14 ;*64 + addi plyrproc_t,a14 + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + move *a14+,a1,L + move *a1(plyr_rcvpass),a0 + jrgt #chaseb ;Opp rcving ball? + + + move *a4(plyr_seq),a0 + subi STAGGER_SEQ,a0 + jrls #tmok + subk FLYBACKWB2_SEQ-STAGGER_SEQ,a0 + jrls #chaseb ;Teammate staggered? +#tmok + move *a4(plyr_jmpcnt),a14 + jrnz #chaseb ;Tm in air? + + movi CZMID,a1 + +;FIX! Also if team almost on fire.. + move *a13(plyr_num),a0 + move @plyr_onfire,a2 + btst a0,a2 + jrz #nof ;I'm not on fire? + + XORK 1,a0 + btst a0,a2 + jrz #skf ;Tm not on fire? + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? +#skf + move *a13(plyr_myhoopx),a0 ;Go in front of my hoop for goaltend + move a0,a14 + subi WRLDMID,a14 + sra 4,a14 ;/16 + sub a14,a0 + jruc #setxz + +#nof + XORK 1,a0 + btst a0,a2 + jrnz #chaseb ;Tm on fire? I get ball + + move *a13(plyr_balldist),a0 + move *a4(plyr_balldist),a14 + cmp a14,a0 + jrle #chaseb ;I'm closer? + + move *a5(OYVEL+16),a0 + jrlt #chaseb ;Going up? + + move *a13(plyr_ohoopx),a0 ;Go for opponents top of 3 pt line + subi WRLDMID,a0 + sra 2,a0 ;/4 + addi WRLDMID,a0 + jruc #setxz + +#chaseb + move *a5(OXPOS),a0 + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 +#setxz + move a0,*a13(plyr_d_seekx) + move a1,*a13(plyr_d_seeky) + + + callr drone_getcurskillo + addi #skt_t,a0 + move *a0,a0 + + callr rndrng0 + addk 5,a0 + +#seek + move a0,*a13(plyr_d_seekcnt) + + callr drone_seek + jrz #sk0 + ori BUT3_M,a0 ;Turbo + move a0,*a11 +#sk0 + +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >Chk if I can jump at ball or steal + + + move *a13(plyr_balldist),a0 + cmpi 100,a0 + jrgt #nojmp + + move @ballobj_p,a5,L + + + move *a5(OXPOS),a0 ;>Calc distance (long+short/2.667) + move *a5(OXANI+16),a14 + add a14,a0 + move *a5(OXVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a0 + + move *a5(OZPOS),a1 + move *a5(OZVEL),a14,L + sra 16-4,a14 ;16 ticks from now + add a14,a1 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + move *a8(OZPOS),a3 + + sub a0,a2 + abs a2 + sub a1,a3 + abs a3 + + cmp a2,a3 + jrge #a3bg + SWAP a2,a3 +#a3bg + srl 1,a2 ;Shorter/2 + add a2,a3 + srl 2,a2 ;Shorter/8 + sub a2,a3 ;A3=Dist in 16 ticks + + + cmpi 60,a3 + jrgt #nojmp + + + move @balltmshotcnt,b0 + subk TMFIRE_MINCNT-1,b0 + jrne #notmheat ;None heating up? + + move @gmqrtr,b0 + subk 3,b0 + jrlt #tmhqok ;Q123? + + move @game_time,a14,L + srl 8+8,a14 ;Remove one & tenths + subk 6,a14 + jrlt #notmheat ;Less than 60 secs? +#tmhqok + move @balltmscored,a1 + srl 5,a1 ;0=Tm2, 1=Tm1 + move *a13(plyr_num),a0 + srl 1,a0 + cmp a0,a1 + jrne #ifire ;My tm? +#notmheat + + move *a13(plyr_num),a1 + move @plyr_onfire,a0 + btst a1,a0 + jrnz #ifire ;I'm on fire? + + XORK 1,a1 + btst a1,a0 + jrz #nofire ;Tm not on fire? +#ifire + move *a13(plyr_hpdist),a14 + cmpi 150,a14 + jrge #nofire ;Too far for goaltend? + + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 20,a0 + jrle #nofire ;Ball too low? + + subi 160-20,a0 + jrgt #nojmp ;Ball too high? + + move *a5(OYVEL+16),a0 + jrgt #j ;Going down? Goaltend! + jruc #nojmp + +#nofire + move *a8(OYPOS),a0 + move *a5(OYPOS),a1 + sub a1,a0 + subk 10,a0 + jrgt #nojmp ;Ball too high? + + addk 32,a1 + jrge #nojmp ;Ball close to gnd? + + movk 7,a0 + callr rnd + jrnz #nojmp ;87%? + + move *a11,a2 + sll 32-4,a2 + srl 32-4,a2 + addk BUT2_M,a2 ;Steal + move a2,*a11 + jruc #nojmp + +#j + move *a11,a0 ;Jmp + ori BUT1_M<<8|BUT1_M|BUT3_M,a0 + move a0,*a11 +#nojmp +;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + rets + + +#mdsk_t ;Mode switch max seek time + .word 50,50,50,50,50 ;Up 15-11 + .word 50,50,40,40,40 ;10-6 + .word 33,25,22,18,16 ;5-1 + .word 14 ;Even score + .word 10,8,6,4,4 ;Dn 1-5 + .word 4,3,3,3,2 ;6-10 + .word 2,2,2,2,1 ;11-15 + +#skt_t ;Max seek time + .word 50,50,45,45,45 + .word 40,40,30,30,22 + .word 20,17,16,15,15 + .word 15 + .word 15,14,14,13,13 + .word 12,12,12,12,12 + .word 11,11,11,10,10 + + +#******************************* +* Push stick to move drone towards his seek position + + SUBRP drone_seek + + move *a13(plyr_d_seekx),a0 + move *a13(plyr_d_seeky),a1 + +#******************************* +* Push stick to move drone towards an XZ location +* A0 = X to seek +* A1 = Z +* A8 = *Obj +* A11= *Ctrl bits +*>A0 = Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP drone_seekxy + + move a2,b0 + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + move a0,*a11 + + move b0,a2 + move a0,a0 + rets + + +#******************************* +* Get the current skill offset +*>A0 = Offset (0-30) *16 +* Trashes scratch + + SUBRP drone_getcurskillo + + move *a13(plyr_ptsdown),a0 + move *a13(plyr_d_skill),a14 + add a14,a0 + + + move *a13(plyr_num),a1 + move @dronesmrt,a14 + btst a1,a14 + jrz #nosmrt ;Normal? + addk 5,a0 +#nosmrt + + + move @ballnumscored,a1 + subk ONFIRE_MINCNT-1,a1 + jrlt #noheat ;None heating up? + + addk 2,a0 ;Get tougher + + move @ballpnumscored,a1 + move *a13(plyr_num),a14 + cmp a1,a14 + jrne #noheat ;Not me? + + addk 6,a0 ;Get tougher +#noheat + + subk 15,a0 + jrle #mxdnok + clr a0 +#mxdnok + addk 15+15,a0 + jrge #dnok + clr a0 +#dnok + sll 4,a0 ;Ptsdn+skill for indexing (*16) + + rets + + + +#******************************* +* Adjust all drone abilities (at every minute dec of game clock) +* A0 = Game clock minute count before dec (0-2) +* Trashes scratch + + SUBR drone_adjskill + + PUSH a2,a3,a4,a5,a6 + + move a0,a5 + subk 2,a5 + abs a5 + move @gmqrtr,a1 + cmpi 3,a1 + jrls #qok + movk 3,a1 ;Overtime +#qok + movk 3,a0 + mpyu a0,a1 + add a1,a5 ;A5=Quarter+minute index (0-11) + + + movk ADJDIFF,a0 ;Get difficulty level + calla GET_ADJ ;1-5 + subk 4,a0 ;-3 to 1 + move a0,a6 + sll 1,a0 ;*2 + add a0,a6 ;A6=Difficulty adj (-9,-6,-3,0,3) + + + movi plyrproc_t,a4 + movk 4,b0 +#lp + move *a4+,a3,L + + move *a3(plyr_d_skill),a2 + + move *a3(plyr_ptsdown),a14 + subk 15,a14 + jrle #mxdnok + clr a14 +#mxdnok + addk 15+15,a14 ;0-30 + jrge #dnok + clr a14 +#dnok + sll 4,a14 + addi #adj_t,a14 + move *a14,a14 + add a14,a2 ;Modify skill + + move a5,a14 ;>Chk minute minimum + sll 3,a14 + addi #min_t,a14 + movb *a14,a14 + add a6,a14 + cmp a14,a2 + jrge #minok ;Min OK? + move a14,a2 +#minok + + move *a3(plyr_num),a1 + XORK 1,a1 + move @PSTATUS,a14 + btst a1,a14 + jrnz #done ;Teammate is human? + + + move @team1,a1 ;>Chk team minimum + cmpi 3,b0 + jrge #t1 + move @team2,a1 +#t1 + cmpi 29,a1 + jrlo #tnumok + movk 1,a1 +#tnumok + movk 12,a0 + mpyu a0,a1 + + add a5,a1 + sll 3,a1 ;*8 + addi #tdmin_t,a1 + movb *a1,a14 + add a6,a14 + cmp a14,a2 + jrge #tminok + move a14,a2 +#tminok + addk 8,a14 ;Max + cmp a14,a2 + jrle #tmaxok + move a14,a2 +#tmaxok +#done + move a2,*a3(plyr_d_skill) + + dsj b0,#lp + + + PULL a2,a3,a4,a5,a6 + rets + + +#adj_t .word -5,-5,-5,-5,-5 + .word -5,-5,-5,-4,-3 + .word -2,-1,-1, 0, 0 + .word 0 + .word 0, 1, 1, 2, 2 + .word 3, 3, 4, 4, 5 + .word 5, 6, 6, 6, 7 + +;DJT Start +#min_t .byte -13,-10,-8, -7,-7,-6, -6,-5,-5, -5,-5,-5 +;#min_t .byte -15,-12,-10, -9,-8,-7, -7,-6,-6, -6,-6,-6 + +TMDIFF .macro +;DJT Start + .byte -6,-6,-5, -5,-4,-4, -4,-3,-3, -2,-2,-1 +; .byte -8,-7,-6, -6,-5,-5, -5,-4,-4, -4,-3,-4 +;DJT End +;; .byte -10,-9,-8, -8,-7,-7, -6,-6,-5, -5,-5,-5 + .endm +#tdmin_t + .byte 5, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 2 ;ATL 11 + TMDIFF ;BOS 21 + .byte 5,-3,-3, -3,-2,-2, -2,-1,-1, -1, 0,-1 ;CHA 16 + .byte 12, 9, 10, 12,10,11, 12,13,14, 16,16,16 ;CHI 1 + .byte 6, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 ;CLE 10 + TMDIFF ;DAL 25 + .byte 5,-5,-4, -4,-4,-3, -3,-3,-3, -2,-2,-2 ;DEN 20 + .byte 5,-1, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1 ;DET 12 + .byte 5,-4,-4, -4,-4,-3, -3,-3,-2, -2,-2,-1 ;GOL 19 + .byte 5, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 4 ;HOU 8 + .byte 5, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 5 ;IND 7 + TMDIFF ;LAC 23 + .byte 5, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 6 ;LAL 6 + .byte 5,-2,-2, -1,-1, 0, 0, 0, 1, 1, 1, 0 ;MI 14 + TMDIFF ;MIL 26 + TMDIFF ;MIN 24 + TMDIFF ;NJ 22 + .byte 5, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 3 ;NY 9 + .byte 8, 6, 6, 7, 7, 7, 8, 8, 9, 9,10, 9 ;ORL 3 + TMDIFF ;PHI 28 + .byte 5,-3,-2, -2,-1,-1, -1, 0, 0, 0, 1, 0 ;PHX 15 + .byte 5,-2,-1, -1, 0, 0, 0, 1, 1, 1, 2, 2 ;POR 13 + .byte 5,-4,-4, -4,-3,-3, -3,-2,-2, -2,-1,-1 ;SAC 18 + .byte 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 7 ;SAN 4 + .byte 7, 7, 8, 8, 8, 9, 9, 9,10, 10,11,10 ;SEA 2 + TMDIFF ;TOR 27 + .byte 8, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 6 ;UTA 5 + TMDIFF ;VAN 29 + .byte 4,-4,-3, -3,-3,-2, -2,-2,-1, -1,-1,-1 ;WAS 17 + +;; .byte 6,-3,-1, -3,-2,-3, -2,-2,-2, -1, 0,-1 ;ATL 11 +;; TMDIFF ;BOS 21 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;CHA 16 +;; .byte 6, 7, 7, 8, 9, 9, 10,10,11, 11,13,12 ;CHI 1 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -1, 0,-1 ;CLE 10 +;; TMDIFF ;DAL 25 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;DEN 20 +;; .byte -6,-5,-5, -4,-3,-3, -2,-2,-2, -2,-1,-2 ;DET 12 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;GOL 19 +;; .byte -1,-1, 0, 1, 1, 1, 2, 2, 2, 3, 4, 3 ;HOU 8 +;; .byte -4,-3,-3, -2,-1,-1, 0, 0, 0, 1, 2, 1 ;IND 7 +;; TMDIFF ;LAC 23 +;; .byte -5,-4,-4, -3,-2,-2, -1,-1,-1, 0, 1, 0 ;LAL 6 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;MI 14 +;; TMDIFF ;MIL 26 +;; TMDIFF ;MIN 24 +;; TMDIFF ;NJ 22 +;; .byte -3,-2,-2, -1, 0, 0, 1, 1, 1, 2, 3, 2 ;NY 9 +;; .byte 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 8, 7 ;ORL 3 +;; TMDIFF ;PHI 28 +;; .byte -8,-8,-7, -7,-6,-6, -5,-4,-3, -3,-2,-3 ;PHX 15 +;; .byte -7,-7,-6, -6,-5,-5, -4,-4,-3, -3,-2,-3 ;POR 13 +;; .byte -6,-5,-5, -4,-3,-3, -3,-2,-2, -2,-1,-2 ;SAC 18 +;; .byte 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 4 ;SAN 4 +;; .byte 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 8 ;SEA 2 +;; TMDIFF ;TOR 27 +;; .byte 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 6, 5 ;UTA 5 +;; TMDIFF ;VAN 29 +;; .byte -9,-8,-8, -7,-7,-6, -6,-5,-4, -4,-3,-4 ;WAS 17 +;DJT End + .even + + +******************************** +* Get random # with mask +* A0 = Mask +*>A0 = Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0 = X +*>A0 = Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + + +******************************** + + .end + + diff --git a/SRC/F.BAT b/SRC/F.BAT new file mode 100644 index 0000000..46a4d35 --- /dev/null +++ b/SRC/F.BAT @@ -0,0 +1,50 @@ +@echo off +set ~~cmp=s: +set ~~cpy=g: +set ~~ext=.asm + +if not "%1"=="" goto setup +echo F-- File compare & merge v10.03.95 --by Dan Thompson +echo Copyright (C) 1995 Williams Electronics +echo. +echo Environment variables to set for the compare: +echo FCMP = (d:) to compare current (d:) to ("%~~cmp%" if not specified) +echo FCPY = (d:) to copy merged files to ("%~~cpy%" if not specified) +echo FEXT = current file extension ("%~~ext%" if not specified) +echo. +goto end + +:setup +if not "%FCMP%"=="" set ~~cmp=%FCMP% +if not "%FCPY%"=="" set ~~cpy=%FCPY% +if not "%FEXT%"=="" set ~~ext=%FEXT% + +if not exist %1%~~ext% goto error +if not exist %~~cmp%%1%~~ext% goto error + +fc %1%~~ext% %~~cmp%%1%~~ext% >diffy +type diffy + +choice /c:cdbx Copy c: or Dupe %~~cmp% to %~~cpy%, enter Brief, or eXit +if errorlevel 4 goto end +if errorlevel 3 goto brief +if errorlevel 2 goto next +copy /b %1%~~ext% %~~cpy% /v +goto end + +:next +copy /b %~~cmp%%1%~~ext% %~~cpy% /v +goto end + +:brief +b diffy %1%~~ext% %~~cmp%%1%~~ext% +goto end + +:error +echo Bite me! Go find your stupid files to compare. +echo. + +:end +set ~~cmp= +set ~~cpy= +set ~~ext= diff --git a/SRC/GAME.EQU b/SRC/GAME.EQU new file mode 100644 index 0000000..ccaae88 --- /dev/null +++ b/SRC/GAME.EQU @@ -0,0 +1,815 @@ +************************************************************************** +* game.equ - All .equ constants to be used throughout the game +* +*.Last mod - 3/16/93 16:42 +*.Last mod - 4/12/95 - DCS sound board equates (JBJ) +************************************************************************** + +;DJT Start + +;FIX!!!!!!!!!! +NUM_PRECORDS equ 195 ;(for 8K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 410 ;(for 32K CMOS) increased size of record..make sure they all fit +;NUM_PRECORDS equ 150 ;increased size of record..make sure they all fit + +****************************************************************************** + + .asg 85/100,DIST_REDUCTION + .asg 111/100,DIST_ADDITION + +****************************************************************************** + +;DJT End +TRIVIA_PTS_NEEDED equ 100 +ALL_TMS_DEFEATD equ 1fffffffh +NUM_BUTTONS equ 8 +NUM_ATTRIBS equ 8 +NUM_HEADS equ 5 +MIDDLE_HEAD equ 2 +MAX_CHK_MRKS equ 2 +MIDDLE_NICK_NAME equ 5 +NICK_NAMES_ON_SCRN equ 11 ;on screen at once +MIDDLE_UNIFORM_NBR equ 5 +UNIFORM_NAMES_ON_SCRN equ 11 ;on screen at once + +REPEAT_DELAY equ 18 + +;DJT Start +;DEFAULT_HIT_PTS equ 40 +DEFAULT_HIT_PTS equ 36 ;Initial attribute pts. +;DJT End + +ATTRIB_MAX_VALUE equ 10 +ATTRIB_MIN_VALUE equ 0 + + +TEAMSEL_PAGE equ 0*256 +NAMENT_PAGE equ 0*256 +YESNO_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 +;YESNO_PAGE equ 2*256 + +; +; X,Y positions for objects on OPTIONS SCREEN +; + .asg 23,BALL1X + .asg 66,BALL1Y + .asg 156,BALL2X + .asg 66,BALL2Y + .asg 285,BALL3X + .asg 66,BALL3Y + +; +; X,Y positions for objects in PLAYER DESIGN +; + .asg 107,BBOXX ;big box ULHC X + .asg 34,BBOXY ;big box ULHC Y + .asg 269,SBOXX ;small box ULHC X + .asg 178,SBOXY ;small box ULHC Y + +; +; X,Y positions for objects during SELECT TEAMS +; + .asg 99,TM1_X + .asg 300,TM2_X + .asg 103,TM1_Y + .asg 103,TM2_Y + + +; +; This ID is excuslive to SCREEN TRANSITION EFFECTS +; +TRANS_OBJ_ID equ 0909h ;TRANSITION EFFECT ID + +JOY_NONE equ 0 +JOY_UP equ 0001h +JOY_DOWN equ 0002h +JOY_LEFT equ 0004h +JOY_RIGHT equ 0008h +JOY_UP_LEFT equ 0005h +JOY_UP_RIGHT equ 0009h +JOY_DOWN_RIGHT equ 000Ah +JOY_DOWN_LEFT equ 0006h +BUT_SHOOT equ 0010h +BUT_PASS equ 0020h +BUT_TURBO equ 0040h + +JDN_UP equ 0100h +JDN_DOWN equ 0200h +JDN_LEFT equ 0400h +JDN_RIGHT equ 0800h +JDN_UP_LEFT equ 0500h +JDN_UP_RIGHT equ 0900h +JDN_DOWN_RIGHT equ 0A00h +JDN_DOWN_LEFT equ 0600h +BDN_SHOOT equ 1000h +BDN_PASS equ 2000h +BDN_TURBO equ 4000h + +JOY_REAL_LR equ JOY_LEFT | JOY_RIGHT +JOY_ALL equ 01111b | JOY_REAL_LR + +TURBO_BUTTON equ 4 +SHOOT_BUTTON equ 1 +PASS_BUTTON equ 2 + +END_CHAR equ 29 ;(0 relative) +DEL_CHAR equ 27 +SPACE_CHAR equ 29 ;(1 relative) +;DJT Start +NUM_ISPRO equ 7 ;after 7 wins +NUM_ISCHAMP equ 24 ;after 24 wins +;DJT End +NUM_TEAMS equ 29 +NAME_LETTERS equ 6 ;characters for players NAME + +; +; PLAYER HEAD TABLE EQUATES (table is near end of SELECT2.asm) +; +HEADS_PER_LINE equ 2*32 ;2 longs +HEAD_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM equ HEADS_PER_LINE*HEAD_COMBINATIONS + +; +; PLAYER NAME TABLE EQUATES (in SCORE2.ASM) +; +NAMES_PER_LINE equ 2*32 ;2 longs +NAME_COMBINATIONS equ 20 ;20 comb. of 2 heads & end marker +NEXT_TEAM_NAMES equ NAMES_PER_LINE*NAME_COMBINATIONS +; +; MY [CITY NAME, CITY NUMBER] TABLE OFFSETS (in select.asm) +; +DELAY_B4_SCROLL equ 15 ;40 ticks +OFFSET_NXT_CITY_NAME equ 32+16 ;1 long + 1 word +HILITED_CITY_NAME_OFFST equ (OFFSET_NXT_CITY_NAME*3) ;7 cites shown +HILITED_CITY_NBR_OFFST equ (OFFSET_NXT_CITY_NAME*3)+32 ; 4th is hi-lighted + +;equates first originated in this file +;these were in score.asm, moved here to be consistent + +BUYTICK .EQU 110 ;60 +SCRNTOP .EQU 100 +BRGHT .EQU 2c2ch ;GREEN IN SCOREPAL +COLORS .EQU 0909h ;WHITE IN SCOREPAL +COLORA .EQU 3E3Eh ;COLOR CYCLE IN SCOREPAL + + +****************************************************************************** +* Net ani #'s + + .asg 0,NET_RESET + + .asg 2,NET_DEEPZ_FAR + .asg 4,NET_DEEPZ_CLOSE + .asg 6,NET_MIDZ_FAR + .asg 8,NET_MIDZ_CLOSE + .asg 10,NET_NEARZ_FAR + .asg 12,NET_NEARZ_CLOSE + + .asg 14,NET_MISS_FAR + .asg 15,NET_MISS_CLOSE + + .asg 16,NET_SOFT + .asg 17,NET_DUNK + .asg 18,NET_SHATTER + + .asg 19,NET_ONFIRE + .asg 20,NET_ROLLINFIRE + +;---------- +; Some player equates + + .asg 52,TURBO_CNT ;Turbo bar width cnt + + .asg 3,ONFIRE_MINCNT ;Min # buckets for plyr on-fire + .asg 8,ONFIRE_MAXCNT ;Max # buckets for plyr off-fire + + .asg 3,TMFIRE_MINCNT ;Min # team-shots for team on-fire +;DJT Start + + .asg 2,HOTSPOT_MINCNT ;Min # hotspot shots before active + .asg 800,HOTSPOT_SHTPER ;Active hotspot shot % increase +;DJT End + +****************************************************************************** + +;LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm) +;MSGOCTRL .equ DMAWNZ|>6000 +;LEDOCTRL .equ DMAWNZ|5000h ;3 bits per pixel (In BB.asm) +MSGOCTRL .equ DMAWNZ|3000h ;5000h + + +****************************************************************************** + +QRTRTIME .EQU [300h,0h] ;Time of each quarter + + +****************************************************************************** +* PROCESS ID'S + +CYCPID .equ 109 +BUYINPID .equ 110 +GMEOVPID .equ 113 +COLRPID .equ 120 ;COLOR CYCLE FROM INTERRUPT +DG1PID .equ 121 ;CNTDWN DIGIT PROC +DG2PID .equ 122 ;CNTDWN DIGIT PROC +FADEPID .equ 123 ;SOUND FADER +CP_PID1 .equ 124 ;Credit page +CP_PID2 .equ 125 ;^ +LC_PID .equ 126+8000h ;Left coin (Indestructible) +RC_PID .equ 127+8000h +CC_PID .equ 128+8000h +SLAM_PID .equ 129+8000h +DIAG_PID .equ 130 +PSWPID .equ 131 ;Plyr start switch + +clockid .equ 132 ;24 second shot clock proc & img id +tvid .equ 133 ;tv score plate images +gclockid .equ 134 ;game clock +tvscrid .equ 135 ;big tv score images +bclockid .equ 136 ;big game clock +creditid .equ 137 ;credit info at top score board +stickid .equ 138 ;cpu message stick procid +qrtrid .equ 139 ;qrtr imgs at scorers table +arwid .equ 140 ;Plyr arrow process + +p1stickid .equ 141 ;message stick on ids for p1 +p2stickid .equ 142 +p3stickid .equ 143 +p4stickid .equ 144 ;p4 +TIPID .equ 145 +ARWPID .equ 146 +adpid .equ 147 +takepid .equ 148 + +tmfireid .equ 149 +flashpid .equ 150 ;For flash_me routine + +VOLBTN_PID .equ 149h ;coin door volume button +VOLADJ_PID .equ 150h ;in-game volume adjustment +FX_PID .equ 151h ;volume adjust bgnd noise + +WATCH_FOR_PLAYERS_PID .equ 114 +TEAM1_SEL_PID .equ 152h +TEAM2_SEL_PID .equ 153h +FOG_PID .equ 154h +TRAIL_HNDLR_PID .equ 155h +CLOCK_PID .equ 156h ;during CREATE PLAYER +JOIN_CYCLE_PID .equ 157h +P1_BOX_SLIDE_PID .equ 158h +P2_BOX_SLIDE_PID .equ 159h +P3_BOX_SLIDE_PID .equ 15ah +P4_BOX_SLIDE_PID .equ 15bh +VS_LOGO_PID .equ 15ch +FIRE_ANIM_PID .equ 15dh + +WIN_STAY_PID .equ 15eh +SHAKE_PID equ 15fh + +METER_PID .equ 160h ;Jump ball meter +PLYR_TRAIL_OBJ_PID .equ 161h +FLSH_TXT_PID .equ 162h + +SMOVE_PID .equ 162h ;Secret swirl moves + +AMODE_PID .equ 100h ;Attract mode +INTRO_PID .equ 300h ;Intro/player selection +HISC_PID .equ 600h ;Hiscore table entry +ENDQRTR_PID .equ 800h ;Hint pages/Halftime pages + +P1_PID .equ 1000h ;P1 main loop + +P2_PID .equ 1100h + +P3_PID .equ 1200h + +P4_PID .equ 1300h + +P5_PID .equ 1400h +P6_PID .equ 1500h + +JOY_PID .equ 2000h ;Joystick scanner +COLL_PID .equ 2100h ;Collisions +STAT_PID .equ 2200h ;Status display +HOOP_PID .equ 2300h ;Backboard,net,rim +TOB_PID .equ 2400h ;Takeout ball +CNTDWN_PID .equ 2500h ;countdown timer +NOG_PID .equ 2600h ;no good (shots that don't go in) +CYCPID2 .equ 2700h ;2nd cycler + + +ANIMPID .equ 4000h ;Animation PIDs (256) +ANIMPID2 .equ 4100h ;Animation2 PIDs (256) +ANIMPID3 .equ 4200h ;Animation3 PIDs (256) +ANIMPID4 .equ 4300h ;Animation4 PIDs (256) + +QSNDRST_PID .equ 4400h +HISCR_SCALE_PID .equ 4401h +;DJT Start + +GRANDCHAMP_PID .equ 4500h ;Grand Champ PID +;DJT End + + +;OBJECT ID'S + +;OBJECT IDENTIFIER FIELDS +B_CLASS .set 15 +F_CLASS .set 0E000h + +CLSNEUT .equ 0000h ;Neutral items +CLSDEAD .equ 2000h ;Objects that delete themselves +CLSANIM .equ 3800h ;Animation class objects +CLSPLYR .equ 4000h ;Players stuff +CLSENMY .equ 8000h ;Enemies + +TYPNEUT .equ 0000h ;Type neutral +TYPPLYR .equ 0100h ;Player +TYPBALL .equ 0200h ;Basketball +TYPTEXT .equ 0700h ;Type text + + +; +; Object classes +; +TM1BACKDROP .equ 0805h + +COMBO_SYMBOLS_P1 equ 0806h ;obj class +COMBO_SYMBOLS_P2 equ 0807h ;obj class +COMBO_SYMBOLS_P3 equ 0808h ;obj class +COMBO_SYMBOLS_P4 equ 0809h ;obj class +PRIVILEGE_OBJS equ 080ah +SM_PLYRS_NAME equ 080bh +TM1_NAME_OBJS equ 080ch +TM2_NAME_OBJS equ 080dh +NICK_NAME_IMGS equ 080eh ;should put in game.equ +HIT_PTS_FRACTION equ 080fh +TM1_STAT_OBJS equ 0810h +TM2_STAT_OBJS equ 0811h +UNIFORM_NAME_OBJS equ 0812h + +TM2BACKDROP .equ 0905h +CREATE_PLYR_TIMER .equ 0901h +BUTTON_PIECE .equ 0902h +BUTN_BOX_STUFF .equ 0903h +PLAYER_PIECE .equ 0904h +BUTN_BOX_INST .equ 0905h +BUTTON_INFO .equ 0906h +BODY_STYLE_STR .equ 0907h +BIG_BOX_STUFF .equ 0908h +FOG_IMG_STUFF .equ 090ah +OPTION_STUFF .equ 090bh +SPOTLIGHT .equ 090ch +BBALL_SHADOW .equ 090dh +TITLE_BAR .equ 090eh +TEAM_SEL_OBJS .equ 090fh +YES_NO_BUTNS .equ 0900h + +WIN_STAY_MSG .equ 0910h +CHECK_MRK_OBJS .equ 0911h +RULES_ID .equ 0912h +P1_BTUNS .equ 0913h +P2_BTUNS .equ 0914h +P3_BTUNS .equ 0915h +P4_BTUNS .equ 0916h +TRIVIA_PTS_1_ID .equ 0917h +TRIVIA_PTS_2_ID .equ 0918h +TRIVIA_PTS_3_ID .equ 0919h +TRIVIA_PTS_4_ID .equ 091ah +TRIVIA_TIMER .equ 091bh +PLR_TRAIL_ID .equ 091ch +BUTN_PRIV_INST .equ 091dh +STAT_TEXT_ID .equ 091eh +ATTRIB_PLAQ_ID .equ 091fh + +;TYPE NEUTRAL SUB TYPES +SUBARW .EQU 1 ;ARROW ID +SUBUP .EQU 2 ;OVERHEAD ITEMS +SUBUP2 .EQU 3 ;OVERHEAD ITEMS AFTER VEL SET + +;TYPE PLAYER SUB TYPES +SUBPL1 .equ 1 ;P1 +SUBPL2 .equ 2 ;P2 +SUBPL3 .equ 3 ;P3 +SUBPL4 .equ 4 ;P4 + +;TYPE TEXT SUB TYPES +SUBTXT .equ 1 ;TEXT ID +SUBP1TXT .equ 2 ;P1 TEXT +SUBP2TXT .equ 3 ;P2 TEXT +SUBP1LVS .equ 4 ;ID FOR P1 LIVES DIGIT +SUBWNDW .equ 5 ;BIG BOX WINDOW ID +SUBNEW .equ 6 ;NEWOID FOR WAVES +SUBTIME .equ 7 ;BTIME ID +SUBMES1 .equ 8 +SUBMES2 .equ 9 +SUBGOTXT .equ 0Ah ;GAME OVER TEXT +SUBSCOR .equ 0Bh ;SCORE ID +SUBP2LVS .equ 0Ch ;ID FOR P2 LIVES DIGIT +SUBDG1I .equ 0Dh ;CNTDWN PLYR1 +SUBDG2I .equ 0Eh ;CNTDWN PLYR2 + + +B_TYPE .set 12 +F_TYPE .set 1F00h +B_PLYR .set 6 +F_PLYR .set 00C0h +B_PLYR1 .set 6 +B_PLYR2 .set 7 + +B_SUBT .set 5 +F_SUBT .set 003Fh + +JOYLFT .EQU 2 +JOYRGT .EQU 3 +JOYUP .EQU 0 +JOYDN .EQU 1 + +;BIT MASKS FOR PLAYER CONTROL TESTING + +BMPRYTE .EQU 3 ;MOVE RIGHT,LEFT,DOWN,UP (LSB) +BMPLEFT .EQU 2 +BMPDOWN .EQU 1 +BMPUP .EQU 0 + +;YUNIT EQUATES +BMPFRYTE .EQU 7 ;FIRE RIGHT,LEFT,DOWN,UP (MSB) +BMPFLEFT .EQU 6 +BMPFDOWN .EQU 5 +BMPFUP .EQU 4 + +;BITS USED IN PLAYER CONTROLS (1=ACTIVE) + +PRYTE .EQU 8 +PLEFT .EQU 4 +PDOWN .EQU 2 +PUP .EQU 1 + +;YUNIT EQUATES FOR JOYSTICK +PFRYTE .EQU 80H +PFLEFT .EQU 40H +PFDOWN .EQU 20H +PFUP .EQU 10H + + +*GAME STATE CONSTANTS +INAMODE .equ 1 +ININTRO .equ 2 +INGAME .equ 3 +INPLYRINFO .equ 4 +INHALFPRICE .equ 5 +INFREEPRICE .equ 6 +INGAMEOV .equ 8 +INPLYRDESIGN .equ 9 +IN_PRE_PLYR_DESIGN .equ 7 +INDIAG .equ -1 ;Any neg + +*ASCII FONT MISCELLANEOUS EQUATES +F15SP .EQU 7EH ;FONT 15 SP CHARACTER, FOR HS ENTRY +F15RUB .EQU F15SP+1 ;FONT 15 RUB CHARACTER,FOR HS ENTRY +F15END .EQU F15RUB+1 ;FONT 15 END CHARACTER,FOR HS ENTRY +F15RQUOT .EQU F15END+1 ;FONT 15 RIGHT QUOTE + +* PLAYER DATA STRUCTURE + +ply_messages .equ 00h ;img pntr for player buyin messages +ply_stick .equ 20h ;img pntr for stuck on me message +ply_turbo .equ 40h ;size of turbo meter remaining +ply_turbo_dl .equ 50h ;delay before shrinking ply_turbo +ply_time .equ 60h ;amount of play time remaining +ply_points .equ 70h ;points this plyr scored +ply_meter_imgs .equ 80h ;box,turbo meter,litup img needed for +used_turbo .equ 0e0h ;cntr used for replenishing meter +crds_paid .equ 0f0h ;For full game purchased +head_arw_img .equ 100h ;*Plyr arrow img +ply_idiot_use .equ 120h ;Has idiot used turbo? +PDSIZE .equ 130h ;size of player data block + + +****************************************************************************** +* PDATA equates for name entry system + +PC_CURSPOS equ PDATA+00h ;word +PC_OBJID equ PDATA+10h ;word +PC_TABWIDTH equ PDATA+20h ;word +PC_TABSIZE equ PDATA+30h ;word +PC_TABLE equ PDATA+40h ;dword +PC_STARTX equ PDATA+60h ;word +PC_STARTY equ PDATA+70h ;word +PC_MENUBASE equ PDATA+80h ;dword +PC_MENULEVEL equ PDATA+0a0h ;word +PC_CURSOBJ equ PDATA+0b0h ;dword + +PC_NAM1OBJ equ PDATA+0d0h ;dword +PC_LOGOOBJ equ PC_NAM1OBJ +PC_NAM2OBJ equ PDATA+0f0h ;dword +PC_PNAME1 equ PC_NAM2OBJ +PC_NAM3OBJ equ PDATA+110h ;dword +PC_PNAME2 equ PC_NAM3OBJ +PC_NAM4OBJ equ PDATA+130h +PC_NAM5OBJ equ PDATA+150h +PC_NAM6OBJ equ PDATA+170h + +PC_PIN_NBR1 equ PDATA+190h ;dword +PC_PIN_NBR2 equ PDATA+1b0h ;dword +PC_PIN_NBR3 equ PDATA+1d0h ;dword +PC_PIN_NBR4 equ PDATA+1f0h ;dword + +;PC_MONTHOBJ equ PDATA+130h ;dword +;PC_DAYOBJ equ PC_MONTHOBJ + +PC_CHARPOS equ PDATA+210h ;word +PC_CENTERX equ PDATA+220h ;word +PC_HEAD1OBJ equ PDATA+230h ;dword +PC_HEAD2OBJ equ PDATA+250h ;dword +PC_CREDOBJS equ PDATA+270h ;dword * 3 + +PC_PLAYNUM equ PDATA+2d0h ;word +PC_SPARE equ PDATA+2e0h ;word + +PC_FLASHCOUNT equ PDATA+2f0h ;word +PC_DATADDR equ PDATA+300h ;dword +PC_CENTERX2 equ PDATA+320h ;word +PC_ARROWOBJ equ PDATA+330h ;dword +PC_CENTERXkit equ PDATA+350h ;word + + +****************************************************************************** +* player stats (during game) + +PS_2PTS_TRY equ 0 +PS_2PTS_MADE equ 1 +PS_3PTS_TRY equ 2 +PS_3PTS_MADE equ 3 +PS_DUNKS_TRY equ 4 +PS_DUNKS_MADE equ 5 +PS_BLOCKS equ 6 +PS_OFF_REB equ 7 +PS_DEF_REB equ 8 +PS_STEALS equ 9 +PS_FREE_TRY equ 10 +PS_TURNOVERS equ 11 +PS_ASSISTS equ 12 +PS_INJURY equ 13 +PS_DBLE_DUNKS equ 14 +PS_ALLEYOOPS equ 15 +PS_SIZE equ 16 + + +****************************************************************************** +* player record (while in RAM) + +PR_COUNT equ 0 ;games played +PR_WON equ PR_COUNT+16 ;games won +PR_LOST equ PR_WON+16 +PR_LASTPLAY equ PR_LOST+16 +PR_NAME1 equ PR_LASTPLAY+16 +PR_NAME2 equ PR_NAME1+16 +PR_NAME3 equ PR_NAME2+16 +PR_NAME4 equ PR_NAME3+16 +PR_NAME5 equ PR_NAME4+16 +PR_NAME6 equ PR_NAME5+16 +PR_PIN_NBR1 equ PR_NAME6+16 +PR_PIN_NBR2 equ PR_PIN_NBR1+16 +PR_PIN_NBR3 equ PR_PIN_NBR2+16 +PR_PIN_NBR4 equ PR_PIN_NBR3+16 +PR_TEAMSDEF equ PR_PIN_NBR4+16 +PR_NUMDEF equ PR_TEAMSDEF+32 +PR_NUMDEFOLD equ PR_NUMDEF+16 +PR_WINSTREAK equ PR_NUMDEFOLD+16 ;current win streak +PR_RANK equ PR_WINSTREAK+16 +PR_TOTAL_PTS equ PR_RANK+16 ;these are for CREATE PLAYER +PR_HEIGHT_PTS equ PR_TOTAL_PTS+16 +PR_WEIGHT_PTS equ PR_HEIGHT_PTS+16 +PR_SPEED_PTS equ PR_WEIGHT_PTS+16 +PR_POWER_PTS equ PR_SPEED_PTS+16 +PR_SHOOT_PTS equ PR_POWER_PTS+16 +PR_DUNKS_PTS equ PR_SHOOT_PTS+16 +PR_STEAL_PTS equ PR_DUNKS_PTS+16 +PR_BLOCKS_PTS equ PR_STEAL_PTS+16 +PR_HEAD_NBR equ PR_BLOCKS_PTS+16 +PR_CREATED_PLYR equ PR_HEAD_NBR+16 ;wheter player used CREATE PLAYER +PR_NICKNAME_NBR equ PR_CREATED_PLYR+16 +PR_PTS_SCORED equ PR_NICKNAME_NBR+16 +PR_PTS_ALLOWED equ PR_PTS_SCORED+16 +PR_UNIFORM_NBR equ PR_PTS_ALLOWED+16 +PR_TRIVIA_PTS equ PR_UNIFORM_NBR+16 +PR_PRIVILEGES equ PR_TRIVIA_PTS+16 +PR_CHECKSUM equ PR_PRIVILEGES+16 +PR_SIZE equ PR_CHECKSUM+16 + +****************************************************************************** +* player record (while in CMOS) + +PKDPR_COUNT equ 0 ;10 bits +PKDPR_WON equ PKDPR_COUNT+10 ;10 bits +PKDPR_LASTPLAY equ PKDPR_WON+10 ;11 bits +PKDPR_NAME1 equ PKDPR_LASTPLAY+11 ;5 bits +PKDPR_NAME2 equ PKDPR_NAME1+5 ;5 bits +PKDPR_NAME3 equ PKDPR_NAME2+5 ;5 bits +PKDPR_NAME4 equ PKDPR_NAME3+5 ;5 bits +PKDPR_NAME5 equ PKDPR_NAME4+5 ;5 bits +PKDPR_NAME6 equ PKDPR_NAME5+5 ;5 bits +PKDPR_PIN_NBR1 equ PKDPR_NAME6+5 ; 5 bits +PKDPR_PIN_NBR2 equ PKDPR_PIN_NBR1+5 ; 5 bits +PKDPR_PIN_NBR3 equ PKDPR_PIN_NBR2+5 ; 5 bits +PKDPR_PIN_NBR4 equ PKDPR_PIN_NBR3+5 ; 5 bits +PKDPR_TEAMSDEF equ PKDPR_PIN_NBR4+5 ;30 bits (30 teams) +PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+30 ; 6 bits +PKDPR_TOTAL_PTS equ PKDPR_WINSTREAK+6 ;7 bits +PKDPR_HEIGHT_PTS equ PKDPR_TOTAL_PTS+7 ;4 bits +PKDPR_WEIGHT_PTS equ PKDPR_HEIGHT_PTS+4 ;4 bits +PKDPR_SPEED_PTS equ PKDPR_WEIGHT_PTS+4 ;4 bits +PKDPR_POWER_PTS equ PKDPR_SPEED_PTS+4 ;4 bits +PKDPR_SHOOT_PTS equ PKDPR_POWER_PTS+4 ;4 bits +PKDPR_DUNKS_PTS equ PKDPR_SHOOT_PTS+4 ;4 bits +PKDPR_STEAL_PTS equ PKDPR_DUNKS_PTS+4 ;4 bits +PKDPR_BLOCKS_PTS equ PKDPR_STEAL_PTS+4 ;4 bits +PKDPR_HEAD_NBR equ PKDPR_BLOCKS_PTS+4 ;8 bits +PKDPR_CREATED_PLYR equ PKDPR_HEAD_NBR+8 ;1 bit +PKDPR_NICKNAME_NBR equ PKDPR_CREATED_PLYR+1 ;6 bits +PKDPR_PTS_SCORED equ PKDPR_NICKNAME_NBR+6 ;16 bits +PKDPR_PTS_ALLOWED equ PKDPR_PTS_SCORED+16 ;16 bits +PKDPR_UNIFORM_NBR equ PKDPR_PTS_ALLOWED+16 ;7 bits +PKDPR_TRIVIA_PTS equ PKDPR_UNIFORM_NBR+7 ;8 bits +PKDPR_PRIVILEGES equ PKDPR_TRIVIA_PTS+8 ;7 bits +;DJT Start +PKDPR_CHECKSUM equ PKDPR_PRIVILEGES+7 ;8 bits (233 bits total) +PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;(240 bits for byte boundary) + +;DJT lines moved to top of GAME.EQU +;DJT End + +****************************************************************************** +* team record (while in RAM) + +TR_PTS_SCORED equ 0 +TR_PTS_ALLOWED equ TR_PTS_SCORED+16 +TR_WINS equ TR_PTS_ALLOWED+16 +TR_OFF_RANK equ TR_WINS+16 +TR_DEF_RANK equ TR_OFF_RANK+16 +TR_TM_CHECKSUM equ TR_DEF_RANK+16 +TR_SIZE equ TR_TM_CHECKSUM+16 + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +;DJT Start +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total) +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;(56 bits for byte boundary) +;DJT End + +NUM_TM_RECORDS equ NUM_TEAMS + +****************************************************************************** +* World records record (while in CMOS) + +PKDWR_NAME1A equ 0 ;5 bits +PKDWR_NAME2A equ PKDWR_NAME1A+5 ;5 bits +PKDWR_NAME3A equ PKDWR_NAME2A+5 ;5 bits +PKDWR_NAME4A equ PKDWR_NAME3A+5 ;5 bits +PKDWR_NAME5A equ PKDWR_NAME4A+5 ;5 bits +PKDWR_NAME6A equ PKDWR_NAME5A+5 ;5 bits +PKDWR_PIN1A equ PKDWR_NAME6A+5 ;5 bits +PKDWR_PIN2A equ PKDWR_PIN1A+5 ;5 bits +PKDWR_PIN3A equ PKDWR_PIN2A+5 ;5 bits +PKDWR_PIN4A equ PKDWR_PIN3A+5 ;5 bits +PKDWR_WINSTREAK equ PKDWR_PIN4A+5 ;8 bits +PKDWR_NAME1B equ PKDWR_WINSTREAK+8 ;5 bits +PKDWR_NAME2B equ PKDWR_NAME1B+5 ;5 bits +PKDWR_NAME3B equ PKDWR_NAME2B+5 ;5 bits +PKDWR_NAME4B equ PKDWR_NAME3B+5 ;5 bits +PKDWR_NAME5B equ PKDWR_NAME4B+5 ;5 bits +PKDWR_NAME6B equ PKDWR_NAME5B+5 ;5 bits +PKDWR_PIN1B equ PKDWR_NAME6B+5 ;5 bits +PKDWR_PIN2B equ PKDWR_PIN1B+5 ;5 bits +PKDWR_PIN3B equ PKDWR_PIN2B+5 ;5 bits +PKDWR_PIN4B equ PKDWR_PIN3B+5 ;5 bits +PKDWR_PTS_IN_GAME equ PKDWR_PIN4B+5 ;8 bits +PKDWR_NAME1C equ PKDWR_PTS_IN_GAME+8 ;5 bits +PKDWR_NAME2C equ PKDWR_NAME1C+5 ;5 bits +PKDWR_NAME3C equ PKDWR_NAME2C+5 ;5 bits +PKDWR_NAME4C equ PKDWR_NAME3C+5 ;5 bits +PKDWR_NAME5C equ PKDWR_NAME4C+5 ;5 bits +PKDWR_NAME6C equ PKDWR_NAME5C+5 ;5 bits +PKDWR_PIN1C equ PKDWR_NAME6C+5 ;5 bits +PKDWR_PIN2C equ PKDWR_PIN1C+5 ;5 bits +PKDWR_PIN3C equ PKDWR_PIN2C+5 ;5 bits +PKDWR_PIN4C equ PKDWR_PIN3C+5 ;5 bits +PKDWR_REBNDS_IN_GAME equ PKDWR_PIN4C+5 ;8 bits +PKDWR_NAME1D equ PKDWR_REBNDS_IN_GAME+8 ;5 bits +PKDWR_NAME2D equ PKDWR_NAME1D+5 ;5 bits +PKDWR_NAME3D equ PKDWR_NAME2D+5 ;5 bits +PKDWR_NAME4D equ PKDWR_NAME3D+5 ;5 bits +PKDWR_NAME5D equ PKDWR_NAME4D+5 ;5 bits +PKDWR_NAME6D equ PKDWR_NAME5D+5 ;5 bits +PKDWR_PIN1D equ PKDWR_NAME6D+5 ;5 bits +PKDWR_PIN2D equ PKDWR_PIN1D+5 ;5 bits +PKDWR_PIN3D equ PKDWR_PIN2D+5 ;5 bits +PKDWR_PIN4D equ PKDWR_PIN3D+5 ;5 bits +PKDWR_ASSISTS_IN_GAME equ PKDWR_PIN4D+5 ;8 bits +;DJT Start +PKDWR_CHECKSUM equ PKDWR_ASSISTS_IN_GAME+8 ;8 bits (240 bits total) +PKDWR_SIZE equ (((PKDWR_CHECKSUM+8)+7)/8)*8 ;(240 bits for byte boundary) +;DJT End + +NUM_WRLD_RECS equ 1 + +****************************************************************************** +* World records record (while in RAM) + +WR_NAME1A equ 0 +WR_NAME2A equ WR_NAME1A+16 +WR_NAME3A equ WR_NAME2A+16 +WR_NAME4A equ WR_NAME3A+16 +WR_NAME5A equ WR_NAME4A+16 +WR_NAME6A equ WR_NAME5A+16 +WR_PIN1A equ WR_NAME6A+16 +WR_PIN2A equ WR_PIN1A+16 +WR_PIN3A equ WR_PIN2A+16 +WR_PIN4A equ WR_PIN3A+16 +WR_WINSTREAK equ WR_PIN4A+16 +WR_NAME1B equ WR_WINSTREAK+16 +WR_NAME2B equ WR_NAME1B+16 +WR_NAME3B equ WR_NAME2B+16 +WR_NAME4B equ WR_NAME3B+16 +WR_NAME5B equ WR_NAME4B+16 +WR_NAME6B equ WR_NAME5B+16 +WR_PIN1B equ WR_NAME6B+16 +WR_PIN2B equ WR_PIN1B+16 +WR_PIN3B equ WR_PIN2B+16 +WR_PIN4B equ WR_PIN3B+16 +WR_PTS_IN_GAME equ WR_PIN4B+16 +WR_NAME1C equ WR_PTS_IN_GAME+16 +WR_NAME2C equ WR_NAME1C+16 +WR_NAME3C equ WR_NAME2C+16 +WR_NAME4C equ WR_NAME3C+16 +WR_NAME5C equ WR_NAME4C+16 +WR_NAME6C equ WR_NAME5C+16 +WR_PIN1C equ WR_NAME6C+16 +WR_PIN2C equ WR_PIN1C+16 +WR_PIN3C equ WR_PIN2C+16 +WR_PIN4C equ WR_PIN3C+16 +WR_REBNDS_IN_GAME equ WR_PIN4C+16 +WR_NAME1D equ WR_REBNDS_IN_GAME+16 ;5 bits +WR_NAME2D equ WR_NAME1D+16 ;5 bits +WR_NAME3D equ WR_NAME2D+16 ;5 bits +WR_NAME4D equ WR_NAME3D+16 ;5 bits +WR_NAME5D equ WR_NAME4D+16 ;5 bits +WR_NAME6D equ WR_NAME5D+16 ;5 bits +WR_PIN1D equ WR_NAME6D+16 ;5 bits +WR_PIN2D equ WR_PIN1D+16 ;5 bits +WR_PIN3D equ WR_PIN2D+16 ;5 bits +WR_PIN4D equ WR_PIN3D+16 ;5 bits +WR_ASSISTS_IN_GAME equ WR_PIN4D+16 ;8 bits +WR_CHECKSUM equ WR_ASSISTS_IN_GAME+16 +WR_SIZE equ WR_CHECKSUM+16 + + + +****************************************************************************** +* team record (while in CMOS) + +PKDTR_PTS_SCORED equ 0 ;16 bits +PKDTR_PTS_ALLOWED equ PKDTR_PTS_SCORED+16 ;16 bits +PKDTR_WINS equ PKDTR_PTS_ALLOWED+16 ;11 bits +PKDTR_TM_CHECKSUM equ PKDTR_WINS+11 ; 8 bits (51 bits total +PKDTR_SIZE equ (((PKDTR_TM_CHECKSUM+8)+7)/8)*8 ;must be on byte boundary + +NUM_TM_RECORDS equ NUM_TEAMS + + +RS_RECORD_NUM equ 0 +RS_GAMES_PLAYED equ RS_RECORD_NUM+10h +RS_WINS equ RS_GAMES_PLAYED+10h +RS_AVERAGE equ RS_WINS+10h +RS_TEAMSDEF equ RS_AVERAGE+10h +RS_STREAK equ RS_TEAMSDEF+10h +RS_OFF_RANK equ RS_STREAK+10h +RS_DEF_RANK equ RS_OFF_RANK+10h +RS_TRIVIA_PTS equ RS_DEF_RANK+10h +RS_SIZE equ RS_TRIVIA_PTS+10h + + +****************************************************************************** +* shot type equates (for play by play speech calls) + +DESPERATION equ 0 +LONG_RANGE equ 1 +_2_POINTS equ 2 +_3_POINTS equ 3 +HOOK_SHOT equ 4 +LAY_UP equ 5 +FINGER_ROLL equ 6 +DUNK_SHORT equ 7 +DUNK_MED equ 8 +DUNK_LONG equ 9 +FADE_AWAY equ 10 +FADE_IN equ 11 + +****************************************************************************** + diff --git a/SRC/GSP.EQU b/SRC/GSP.EQU new file mode 100644 index 0000000..95650a4 --- /dev/null +++ b/SRC/GSP.EQU @@ -0,0 +1,164 @@ +*.Last mod - 4/3/92 16:49 + +EOSINT .set 254+20 ;End of screen + +;Define names of I/O registers +HESYNC .set 0C0000000h +HEBLNK .set 0C0000010h +HSBLNK .set 0C0000020h +HTOTAL .set 0C0000030h +VESYNC .set 0C0000040h +VEBLNK .set 0C0000050h +VSBLNK .set 0C0000060h +VTOTAL .set 0C0000070h +DPYCTL .set 0C0000080h +DPYSTRT .set 0C0000090h +DPYINT .set 0C00000A0h +CONTROL .set 0C00000B0h +HSTDATA .set 0C00000C0h +HSTADRL .set 0C00000D0h +HSTADRH .set 0C00000E0h +HSTCTLL .set 0C00000F0h +HSTCTLH .set 0C0000100h +INTENB .set 0C0000110h +INTPEND .set 0C0000120h +CONVSP .set 0C0000130h +CONVDP .set 0C0000140h +PSIZE .set 0C0000150h +PMASK .set 0C0000160h +HCOUNT .set 0C00001C0h +VCOUNT .set 0C00001D0h +DPYADR .set 0C00001E0h +REFCNT .set 0C00001F0h +hesync .set 0C0000000h +heblnk .set 0C0000010h +hsblnk .set 0C0000020h +htotal .set 0C0000030h +vesync .set 0C0000040h +veblnk .set 0C0000050h +vsblnk .set 0C0000060h +vtotal .set 0C0000070h +dpyctl .set 0C0000080h +dpystrt .set 0C0000090h +dpyint .set 0C00000A0h +control .set 0C00000B0h +hstdata .set 0C00000C0h +hstadrl .set 0C00000D0h +hstadrh .set 0C00000E0h +hstctll .set 0C00000F0h +hstctlh .set 0C0000100h +intenb .set 0C0000110h +intpend .set 0C0000120h +convsp .set 0C0000130h +convdp .set 0C0000140h +psize .set 0C0000150h +pmask .set 0C0000160h +hcount .set 0C00001C0h +vcount .set 0C00001D0h +dpyadr .set 0C00001E0h +refcnt .set 0C00001F0h + +X .set 1 +Y .set 10000h + +; Masks for I/O register fields + +;Display control register bit definitions +HSD .set 1 ;Horizontal Sync Direction +DUDATE .set 1111111100B ;Display update (2-9) +ORG .set 400h ;ORiGin (1 = lower left; 0 = upper left) +SRT .set 800h ;Shift Reg Transfer enable +SRE .set 1000h ;Screen Refresh Enable +DXV .set 2000h ;Disable eXternal Video +NIL .set 4000h ;Non-InterLaced video enable +ENV .set 8000h ;ENable Video + +;Bit fields within control register +CD .set 08000h ;Mask for Cache Dis bit in CONTROL +PPOP .set 07C00h ;Mask for Pix Proc OPer in CONTROL +PBH .set 0200h ;Mask for PBH bit in CONTROL +PBV .set 0100h ;Mask for PBV bit in CONTROL +WIN .set 0C0h ;Mask for Window field in CONTROL +T .set 020h ;Mask for Transparency field in CONTROL +RR .set 018h ;Mask for dram Refresh Rate bit in CONTROL +RM .set 4 ;Mask for dram Refresh Mode bit in CONTROL + +;Bits within intpend and intenb +X1E .set 2 ;Mask for Ext Int 1 in INTPEND +X2E .set 4 ;Mask for Ext Int 2 in INTPEND +HIE .set 200h ;Mask for Host Int in INTPEND +DIE .set 400h ;Mask for Disp Int in INTPEND +WVP .set 800h ;Mask for Window Violation in INTPEND +;Bit positions in intpend +DIP .equ 10 ;Bit test for display interrupt pending + +;Fields within HSTCTLL +MSGIN .set 7 ;Message from Host to GSP +INTIN_MSK .set 8 ;GSP can write 0 to this bit +INTIN_BIT .set 3 ;GSP can write 0 to this bit +INTOUT_MSK .set 80h ;GSP can write 1 to this bit +INTOUT_BIT .set 7 ;GSP can write 1 to this bit + +;Options for window field in control reg +W1 .set 040h ;Int on attempt to write outside window. +W2 .set 080h ;Inhibit all writes, Int on attempt to write within window +W3 .set 0C0h ;inhibit writes outside window, no interrupt + +;Options for pixel proc operations in control reg +P_AND .set 0400h +P_ANDNOT .set 0800h +P_ZERO .set 0C00h +P_ORNOT .set 1000h +P_XNOR .set 1400h +P_NEG .set 1800h +P_NOR .set 1C00h +P_OR .set 2000h +P_NOP .set 2400h +P_XOR .set 2800h +P_NOTAND .set 2C00h +P_ONES .set 3000h +P_NOTOR .set 3400h +P_NAND .set 3800h +P_NOT .set 3C00h +P_ADD .set 4000h +P_ADDS .set 4400h +P_SUB .set 4800h +P_SUBS .set 4C00h +P_MAX .set 5000h +P_MIN .set 5400h + +;Special A-file registers +fp .set a13 ;Frame, param. stack +pstk .set a14 ;Parameter stack pointer +frame_pntr .set a14 ;Used by C Compiler + +;B register graphics definitions +saddr .set b0 +sptch .set b1 +daddr .set b2 +dptch .set b3 +offset .set b4 +wstart .set b5 +wend .set b6 +dydx .set b7 +color0 .set b8 +color1 .set b9 +count .set b10 +inc1 .set b11 +inc2 .set b12 +pattrn .set b13 +SADDR .set b0 +SPTCH .set b1 +DADDR .set b2 +DPTCH .set b3 +OFFSET .set b4 +WSTART .set b5 +WEND .set b6 +DYDX .set b7 +COLOR0 .set b8 +COLOR1 .set b9 +COUNT .set b10 +INC1 .set b11 +INC2 .set b12 +PATTRN .set b13 + \ No newline at end of file diff --git a/SRC/HSTD.ASM b/SRC/HSTD.ASM new file mode 100644 index 0000000..ff7440f --- /dev/null +++ b/SRC/HSTD.ASM @@ -0,0 +1,2038 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: LARRY DeMAR, EUGENE JARVIS +* Modified: Shawn Liptak 8/6/91 - Multi color fonts +* +* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/22/92 17:49 +**************************************************************** + .file "hstd.asm" + .title "robo high-score-to-date management" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "imgtbl.glo" + .include "link.equ" + .include "macros.hdr" ;Macros + + + .TEXT + +* IN THIS MODULE + + .DEF GET_HSCR + .DEF RC_BYTEI + .DEF RC_BYTE + .DEF RC_WORD + .DEF RC_LONG + .DEF RC_LONGI + .DEF WC_BYTE + .DEF WC_BYTEI + .DEF WC_WORD + .DEF WC_WORDI + .DEF WC_LONG + .DEF WC_LONGI + .DEF PT_ENTRY + .DEF INIT_TB + .DEF INIT_TAB ;GEORGES POWER UP ENTRY + .DEF P_FORK + .DEF VAL_TAB + .DEF ROM_PTRS + + .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM + .DEF SET_PAGE + .DEF A2_CHECK + .DEF DEC_HSR,INIT_HSR,GET_HSC + .DEF GETHIGH + .def INITMAT + +* OTHER MODULES + + .REF RD15FONT,SYSCOPY,P1DATA,P2DATA + .REF BINBCD,FON150 +; .REF AFONT0,GOGO + + +* HELP.ASM + + .REF DEF_PAGE,GET_ADJ + + + .TEXT + +;Sound headers + +BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP + + +************************************************************************** +* +* HIGH SCORE TABLE DEFINITIONS +* +************************************************************************** + + .if 0 +ALL_TAB + .LONG ALL_TIME_ORIGIN ;LOCATION OF TABLE + .WORD ALL_TIME_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD ALL_TIME_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD ALL_TIME_SELECT ;BITS TO SELECT IT + .LONG ALL_TIME_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD ALL_TIME_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + +TOD_TAB + .LONG TODAYS_ORIGIN ;LOCATION OF TABLE + .WORD TODAYS_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER) + .WORD TODAYS_VISIBLE ;# VISIBLE (SHOW 20 ALL TIME) + .WORD TODAYS_SELECT ;BITS TO SELECT IT + .LONG TODAYS_ROM_TABLE ;ROM IMAGE OF TABLE + .WORD TODAYS_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD + .endif + +P_FORK + MMTM SP,A1 + MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS + CALLA GETPRC ;MAKE THE PROCESS + MMFM SP,A1 + RETS + +************************************************************************** +* +* AUTO HIGH SCORE TABLE RESET HANDLING +* +************************************************************************** +* +* DEC_HSR +* +* THIS IS CALLED WITH EACH START OR CONTINUE FOR +* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS +* ITS ALREADY SITTING AT ZERO. +* +************************************************************************** +DEC_HSR + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + JRZ DECHX ;ITS ZERO....NO ACTION. + DEC A0 ;REMOVE A TICK + CALLR PUT_HSC ;PUT IT BACK JAK +DECHX MMFM SP,A0 + RETS + +************************************************************************** +* +* DELAY_HSRESET +* +* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME +* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE +* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS +* FOR A FEW DAYS. +* +************************************************************************** +HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH +* ;NAME. +DELAY_HSRESET: + MMTM SP,A0 + CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER + CMPI HS_MIN,A0 ;IS IT TOO LOW + JRHS DHX ;NOPE...NO ACTION + + MOVI HS_MIN,A0 ;STOP THE RESET! + CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET! +DHX: + MMFM SP,A0 + RETS + +************************************************************************** +* +* INIT_HSR +* +* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET +* COUNTER TO ITS ADJUSTED VALUE. +* +************************************************************************** +INIT_HSR + MMTM SP,A0 + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + CALLR PUT_HSC ;SET IT TO THIS VALUE + MMFM SP,A0 + RETS + +************************************************************************** +* +* PUT_HSC +* +* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER +* TO THE VALUE IN A0. +* +************************************************************************** +PUT_HSC + MMTM SP,A7,A0 + CALLR HSR_PAGE ;HIGH SCORE PAGE + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR WC_LONGI ;WRITE OUR PARAMETER + NOT A0 ;NEGATE IT. + CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT. + CALLA DEF_PAGE ;FLIP PAGE + MMFM SP,A7,A0 ;AND RETURN + RETS + +************************************************************************** +* +* GET_HSC +* +* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0. +* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE +* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED +* IN A0. Z set if 0 +* +************************************************************************** +GET_HSC + MMTM SP,A7,A1 + CALLR HSR_PAGE ;POINT PAGE AT HSR + + MOVI HRESET_COUNTER,A7 ;POINT AT + CALLR RC_LONGI ;READ THE VALUE + MOVE A0,A1 ;STASH IT + CALLR RC_LONG ;READ VERIFIER + NOT A0 ;SEE IF ITS VALID + CMP A0,A1 + JRZ GET_HSCX ;IT IS....RETURN IT. + + CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE +* +* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + +GET_HSCX + CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US + MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER + MMFM SP,A7,A1 + RETS + +HSR_PAGE + MMTM SP,A1 + MOVI HSR_SELECT,A1 + CALLR SET_PAGE + MMFM SP,A1 + RETS + +********************************************************************** +* +*DISPLAY HIGH SCORE TABLE +* +********************************************************************** +GETHIGH + .if 0 + movi ALL_TIME_SELECT,a1 + callr SET_PAGE + + movi [62,27],a10 ;Screen start address + movi ALL_TIME_ORIGIN+HS_INITS+HS_SIZE,a8 ;Table start address + JSRP HSINITDSP + + movi [62,63],a10 + movi ALL_TIME_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + + movi TODAYS_SELECT,a1 + CALLR SET_PAGE + + movi [62,227],a10 + movi TODAYS_ORIGIN+HS_INITS+HS_SIZE,a8 + JSRP HSINITDSP + + movi [62,263],a10 + movi TODAYS_ORIGIN+HS_SCORE+HS_SIZE,a8 + JSRP HSNUMDSP + .endif + RETP + + +******************************** +* DISPLAY SCORE TABLE SCORES IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSNUMDSP + movk 10,a11 ;# scores + movi >1010101,a9 ;Start color 1, pal 1 + +hsn10 move a8,a7 + callr RC_LONG ;GET THE SCORE=A0 + move a7,a8 + move a10,a3 ;Dest Y:X + clr a6 ;Blanking ON + move a12,-*sp,L + movk 8,a12 + callr HSNUML0 + move *sp+,a12,L + SLEEPK 1 + addi HS_SIZE,a8 + addi >120000,a10 ;Next line + dsj a11,hsn10 + + RETP + +******************************** +* DMA a BCD number (Trashes A0-A1) +* A0=# +* A3=Y:X +* A6=Blank flag (0=ON) +* A9=Color:Pal +* A12=#Digits +*Rets: +* A9=Next Color:Pal + +HSNUML0 + mmtm sp,a2,a3,a4,a5,a7,a8,a10,a11 + + move a0,a11 + srl 4*3,a0 + jrz hsnlp ;No comma? + subk 6,a3 ;-X + +hsnlp move a11,a1 + srl 28,a1 ;Next digit value into lowest 4 bits + jrnz hsn5 + move a6,a6 + jrz hsn50 ;Skip digit if blanking + +hsn5 cmpi 3,a12 + jrnz hsn13 + move a6,a6 + jrz hsn13 ;1st non zero? + move a1,-*sp + movi RD15FONT+11*32,a1 ;Comma + move *a1,a1,L + move a3,a10 + addi >b0000,a3 ;+Y + callr font_dma + move a10,a3 + addk 6,a3 ;+X + move *sp+,a1 + +hsn13 cmpi 9,a1 + jrls hsn15 ;Digit ok? + movk 9,a1 ;Output 9 on an error + +hsn15 movk 1,a6 ;Blanks off + move a3,a10 + cmpi 1,a1 + jrnz hsn30 + addk 3,a3 ;Offset 1's X +hsn30 movi 32*4+16,a0 + mpyu a0,a1 ;*Header size + addi FON150,a1 ;Base address of image header + callr font_dma + move a10,a3 + +hsn50 addk 14,a3 ;step to next + sll 4,a11 ;next digit + dsj a12,hsnlp + + addi >f0f0000,a9 + cmpi >30300000,a9 + jrls hsnx + addi >101,a9 ;Next PAL + zext a9 + addi >1010000,a9 ;Color 1 + +hsnx mmfm sp,a2,a3,a4,a5,a7,a8,a10,a11 + rets + + +******************************** +* DMA a character +* A1=*Obj header +* A3=Y:X +* A9=Color:Pal +* Trashes A0-A5,A7-A8,A14 + +font_dma + move *a1(ISAG),a4,L + move *a1(ICTRL),a5 + move *a1+,a2 ;Get X size + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + addi >10000,a2 ;Y Size 1 + move *a1+,a8 ;Get Y size + + ori DMACNZ,a5 + move a9,a1 +fdlp calla QDMAN + addi >1010000,a1 ;Next color + add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,fdlp + + rets + + +******************************** +* DISPLAY SCORE TABLE INITIALS IN ATTRACT +* A8=TABLE INDEX +* A10=DISPLAY COORD Y:X + +HSINITDSP + movk 10,a11 ;10 Scores + +hsid10 move a8,a7 + subi HS_INITS,a7 + callr RC_LONG ;Get the score in a0 + move a0,a2 + addi HS_INITS,a7 + move a10,a3 ;Y:X + + movi >01010101,a1 ;Flash if inits match score + callr A2_CHECK + jrz hsid30 + movi >1f1f0303,a1 ;Color:pal + +hsid30 move a12,-*sp,L + movk 3,a12 + +hsid50 callr RC_BYTE ;Get initial + addk 16,a7 ;Step to next initial + callr initout ;Output initial + dsj a12,hsid50 + + move *sp+,a12,L + addi >120000,a10 ;Next Y + move a7,a8 + SLEEPK 1 + addi HS_SIZE-48,a8 ;Get next guy in cmos + dsj a11,hsid10 + + RETP + +******************************** +* Output initial in RD15FONT +* A0=ASCII +* A1=COLOR:PALETTE +* A3=Y:X +* Trashes A0 +*Rets: +* A3=New Y:X + +initout + mmtm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi inox + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + move *a0+,a2 ;Get X size + + move a5,a7 + sll 32-15,a7 ;Get bits 12-14 + srl 32-15+12,a7 + mpyu a2,a7 + +; addk 3,a7 ;Round up to 4 bit boundary +; srl 2,a7 +; sll 5,a7 ;X size*8 + + movk 12,a9 + sub a2,a9 + sra 1,a9 ;/2 + add a9,a3 ;Add X offset so letter centered + + addi >10000,a2 ;Y Size 1 + move *a0+,a8 ;Get Y size + clr a11 ;A11=Line cnt + + move a3,a10 + ori DMACNZ,a5 +inolp calla QDMAN + addk 1,a11 + cmpi 15,a11 + jrge ino50 ;Out of colors? + addi >1010000,a1 ;Next color +ino50 add a7,a4 ;Set SAG for next line + addi >10000,a3 ;Y+1 + dsj a8,inolp + + move a10,a3 + sub a9,a3 +inox addk 17,a3 + + mmfm sp,a1,a2,a4,a5,a7,a8,a9,a10,a11,a14 + rets + +******************************** +*OUTPUT INITIAL RD15FONT +*A0=ASCII +*A1=COLOR:PALETTE +*A3=COORD Y:X + +INITOUT + PUSH a2,a4,a5,a14 + + subi >21,a0 ;Start of table + cmpi >7d->21,a0 + jrhi initerr + + sll 5,a0 + addi RD15FONT,a0 + move *a0,a0,L ;Get pointer + move *a0,a2,L ;Get size + movk 12,a4 + subxy a2,a4 + sext a4 + sra 1,a4 ;/2 + add a4,a3 ;Add X offset so letter centered + move a4,-*sp + move *a0(ISAG),a4,L + move *a0(ICTRL),a5 + ori DMACNZ,a5 + calla QDMAN + move *sp+,a0 + sub a0,a3 +initerr addk 17,a3 + + PULL a2,a4,a5,a14 + rets + + +************************************************************************** +* +* HIGH LEVEL HSTD ROUTINES +* +************************************************************************** + +;TEN_X EQU 0F00000H +;ONE_O_X EQU 0F40000H +;ONE_X EQU 0FE0000H +; +;TIMER_TENS: +; .LONG 0,0,TEN_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;TIMER_UNITS: +; .LONG 0,0,ONE_X,1500000H ;XV, YV, XP, YP +; .WORD 0,30 ;Z VEL 10....Z POS 0 +; .LONG NO_IMG,1,0 ;IMG, Z SIZE, COLLISION VECT +; .WORD DMACNZ,5 ;WRITE NON-ZERO CONSTANT, OBJECT ID +; .LONG 0 ;NO SCANNER BLIP +; +;NO_IMG: +; ; .WORD 4,4,0,0 ;WIDTH, HEIGHT, OFFSET,OFFSET +; .LONG IROM,0 ;SOURCE, PALETTE +; +;TIMER_COLOR EQU 0F5F5H ;CONSTANT USED FOR TIMER +; +;SETUP_TIMER: +; MOVI TIMER_UNITS,A14 +; CALLR GET_DIGIT +; MOVE A0,A9 ;KEEP UNITS IN A9 +; +; MOVI TIMER_TENS,A14 +; CALLR GET_DIGIT +; MOVE A0,A10 ;THEY'RE SET! +; RETS +; +;GET_DIGIT: +; MMTM SP,A1 +; CALLA GPALOBJ ;GET THE STUFF +; CALLA STFOBJ +; +; MOVI TIMER_COLOR,A1 +; MOVE A1,*A0(OCONST),W +; +; CALLA INSOBJ ;ITS SET +; MMFM SP,A1 +; RETS +; +;UPDATE_TIMER: +; MOVE A0,A3 ;FIRST DO TENS +; MOVE A3,A1 +; SRL 4,A1 +; JRNZ REAL_TENS +; +; MOVE A10,A0 +; JRZ TENS_GONE +; CALLA DELPAL ;TRASH IT! +; CALLA DELOBJ +; CLR A10 +; +; MOVI (TEN_X+ONE_X)/2,A0 +; MOVE A0,*A9(OXVAL),L ;CENTER THE ONES +; +; JRUC TENS_GONE +; +;REAL_TENS: +; CMPI 1,A1 ;ARE WE DOWN TO "10" +; JRNZ NOT_ONE_0 +; +; MOVI ONE_O_X,A0 +; MOVE A0,*A10(OXVAL),L ;SLIDE IT OVER TO LOOK NICE! +;NOT_ONE_0: +; MOVE A10,A2 ;GET 10'S OBJECT IN A2 +; CALLR UPDATE_NUMBER ;OBJECT A2 GETS NUMBER IN A1 +; +;TENS_GONE: +; MOVE A3,A1 +; MOVE A9,A2 +; CALLR UPDATE_NUMBER +; RETS +; +;BLANK_TIMER: +; MMTM SP,A0 +; CLR A0 +; MOVE A0,*A9(OCONST),W +; MOVE A10,A10 ;TENS PRESENT? +; JREQ BT_NT ;NOPE +; MOVE A0,*A10(OCONST),W +;BT_NT: +; MMFM SP,A0 +; RETS +; +************************************************************************** +* +* UPDATE_NUMBER +* +* OBJECT IN A2 +* NIBBLE IN A1 +* +* GET CORRECT NUMBER IMAGE IN THE OBJECT. +* +************************************************************************** +;UPDATE_NUMBER: +; MMTM SP,A1,A4,A6,A7,A8 +; MOVI RD15FONT,A6 +; ANDI 0FH,A1 +; ADDI LET_0-EX_PT,A1 ;INDEX TO TABLE +; SLL 5,A1 +; ADD A1,A6 ;POINT TO IMAGE (A1 FOR ANI) +; MOVE *A6,A1,L ;FETCH THE IMAGE FOR ANI +; +; MOVE A2,A8 ;OBJECT STRUCTURE FOR ANI +; MOVE *A2(OFLAGS),A4 ;FETCH THE OFLAGS +; CALLA ANI ;SET NEW ANIMATION PICTURE +; +; MOVI TIMER_COLOR,A6 ;GET THE DRAWING COLOR BACK OUT. +; MOVE A6,*A2(OCONST),W +; +; MMFM SP,A1,A4,A6,A7,A8 +; RETS +; +*************************************************************************** +* +* ISHSTD +* +* DID ANYONE MAKE THE HIGH SCORE TABLE. +* A0=0 NO (EQ) +* A0=1 PLAYER 1 MADE IT (NE) +* A0=2 PLAYER 2 MADE IT (NE) +* A0=3 NOBODY MADE IT (NE) +* +*************************************************************************** +ISHSTD + + .if 0 + MMTM SP,A8,A10 + MOVK 1,A0 + MOVE @P1DATA,A8,L ;FIX! + MOVE @P2DATA,A10,L + + CALLR CHECK_ALL_TIME + JRNZ ISHSTD1 + + CALLR CHECK_TODAY + JRNZ ISHSTD1 + CLR A0 +ISHSTD1 + SWAP A8,A10 + ADDK 2,A0 + CALLR CHECK_ALL_TIME + JRNZ VERY_HIGH + + CALLR CHECK_TODAY + JRNZ VERY_HIGH + SUBK 2,A0 +VERY_HIGH + MMFM SP,A8,A10 + RETS + +CHECK_ALL_TIME + MMTM SP,A0,A2,A8 + MOVE A8,A0 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVI ALL_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + +CHECK_TODAY + MMTM SP,A0,A2,A8 + MOVE A10,A2 ;SHOW "OTHER" SCORE IN A2 + MOVE A8,A0 + MOVI TOD_TAB,A8 + CALLR CHECK_SCORE + MMFM SP,A0,A2,A8 + RETS + .endif + +******************************** +*TIMER FOR INITIAL PROCESS + + .BSS INITTIMR,16 + .BSS GET1FLG,16 + .BSS GET2FLG,16 + +INITTIM + CLR A0 + MOVE A0,@GET1FLG + MOVE A0,@GET2FLG + CREATE HISC_PID,INTIML + MOVI 30,A1 + MOVE A1,@INITTIMR + MOVE A1,*A0(PA10),L ;SET A10 TO 60 + RETS + +INTIML + MOVE @INITTIMR,A0 + DEC A10 + JRNE INTIML1 + MOVI 60,A10 + DEC A0 + JRN INITTIMX + MOVE A0,@INITTIMR + +INTIML1 CALLA BINBCD + MOVI [19,194],A3 + MOVE A12,-*SP,L + MOVK 2,A12 + MOVK 1,A6 + SLL 24,A0 ;SHIFT DIGITS INTO PLACE + movi >1010101,a9 + callr HSNUML0 + MOVE *SP+,A12,L + SLOOP 1,INTIML +INITTIMX + DIE + +******************************** +*GET PLAYERS INITIALS - WAIT TILL DONE + +GETINIT + SLEEPK 10 + CALLR DONCK + JRNE GETINIT +GETINITX + SLEEP 60 ;WAIT A SEC. THEN BOOK + RETP + +******************************** +*CHECK IF INITIALS DONE + +DONCK + MOVE @INITTIMR,A2 + JREQ DONCKX + MOVE @GET1FLG,A0 + MOVE @GET2FLG,A1 + ADD A0,A1 +DONCKX RETS + +******************************** +*GET PLAYER 1 INITIALS + +GETINIT1 +; MOVI P1ITAB,A0 +; MOVI LTRBOX1,A2 ;(OIMG) ;SHELL PROGRAM +; JRUC GTINIT +;P1ITAB +; .LONG P1DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000000 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH,SWITCH+4,SWITCH+18 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH,SWITCH+8,SWITCH+24 +; .ENDIF +; .LONG >002c0030 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET1FLG + +******************************** +*GET PLAYER 2 INITIALS + +GETINIT2 +; MOVI P2ITAB,A0 +; MOVI LTRBOX2,A2 ;OIMG +; JRUC GTINIT +;P2ITAB +; .LONG P2DATA ;SCORE VALUE FIX! +; .byte " ",0 +; .LONG >00000005 ;START BOX COORD +; .IF YUNIT +; .LONG SWITCH+8,SWITCH+12,SWITCH+21 ;SWITCH LOCATIONS +; .ELSE +; .LONG SWITCH+4,SWITCH+12,SWITCH+25 +; .ENDIF +; .LONG >002c0124 ;INITIAL DISPLAY ADDRESS +; .LONG >3b3b0000 ;COLOR:PALETTE +; .LONG GET2FLG + +******************************** +*GET YOUR INITIALS PROCESS +*A0=POINTER TO SETUP TABLE +*A2=OIMG +*A8=POINTER TO BOX OBJECT +*A9=DEBOUNCE TIMER, INITIAL ENTRY +*A10=DEBOUNCE TIMER, MOVE JOYSTICK +*A11=INITIAL # +*PDATA=SCORE +*PDATA+>20,PDATA+>28,PDATA+>30,PDATA+>38 = INITIAL STRING +*PDATA+>40=CURRENT BOX COORD Y:X +*PDATA+>60=MOVE STICK ADDRESS +*PDATA+>80=FIRE STICK ADDRESS +*PDATA+>A0=START BUTTON ADDRESS +*PDATA+>C0=INITIALS DISPLAY Y:X OFFSET +*PDATA+>E0=COLOR:PALETTE INITIAL +*PDATA+>100=INITIAL DONE FLAG (DONE=0) + + .if 0 +GTINIT + MOVE A13,A8 + ADDI PDATA,A8 + MOVE *A0+,A1,L + MOVE *A1+,*A8+,L ;PUT THE SCORE + MOVK 8,A1 + +GTI0L MOVE *A0+,A3,L + MOVE A3,*A8+,L + DSJS A1,GTI0L + MOVK 1,A1 + MOVE A1,*A3,W ;INCREMENT DONE FLAG + CLR A11 ;CURRENT INITIAL WORKING ON + CLR A10 ;JOYSTICK DEBOUNCE TIMER + CLR A9 ;FIRE/START DEBOUNCE + +*CREATE BOX OBJECT + + CLR A0 ;A0=OXVAL + CLR A1 ;A1=OYVAL + MOVI 9EH,A3 ;(OZPOS) + MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE + clr a5 ;(OID) + CLR A6 ;(OXVEL) + CLR A7 ;(OYVEL) + CALLA BEGINOBJ + +GTL CMPI 3,A11 ;GET MOVE SWITCHES + JRHS GTL4 ;ENTERED 'EM ALL + + CALLR DONCK + JRNE GTL0 + + MOVI 3,A11 ;TIMES UP STUFF EM IN + JRUC GTL3X +GTL0 MOVE *A13(PDATA+>60),A0,L ;GET MOVE SWITCH ADDRESS + MOVE *A0,A1,W + NOT A1 + SLL 28,A1 + SRL 28,A1 + JRNE GTL1 + CLR A10 ;CLEAR DEBOUNCE TIMER + JRUC GTL5 +GTL1 MOVE A10,A10 + JRNE GTL5 + MOVK 12,A10 + SLL 4,A1 + ADDI IJOYTAB,A1 + MOVB *A1,A0 ;GET DX + MOVB *A1(8),A1 ;GET DY + MOVE *A13(PDATA+>40),A2 ;GET X COORD + MOVE *A13(PDATA+>50),A3 ;GET Y COORD + ADD A2,A0 ;ADD DX, CHECK LIMITS + JRNN GM1 + CLR A0 +GM1 CMPI 5,A0 + JRLS GM2 + MOVK 5,A0 +GM2 ADD A3,A1 ;ADD DY CHECK LIMITS + JRNN GM3 + CLR A1 +GM3 CMPI 4,A1 + JRLS GM4 + MOVK 4,A1 +GM4 MOVE A0,*A13(PDATA+>40) ;SAVE COORDS + MOVE A1,*A13(PDATA+>50) + +*FORM BOX XY COORD AND UPDATE IT + +GTL5 MOVE *A13(PDATA+>40),A0 ;Get X + MOVE *A13(PDATA+>50),A1 ;Get Y + movk 21,a3 + movk 22,a5 + MPYU A0,A3 ;FORM X OFFSET + MPYU A1,A5 ;FORM Y OFFSET + move @WORLDTLX+16,a2 + add a2,a3 + addi 137,a3 + move @WORLDTLY+16,a2 + add a2,a5 + addi 41,a5 + MOVE A3,*A8(OXPOS) ;UPDATE POSITION + MOVE A5,*A8(OYPOS) + +*UPDATE YOUR LETTER VALUE +*A0=X OFFSET +*A1=Y OFFSET + MOVK 6,A3 + MPYU A1,A3 + ADD A0,A3 ;THIS IS THE INDEX TO MATRIX + SLL 3,A3 + ADDI INITMAT,A3 + MOVB *A3,A0 + MOVE A11,A4 + SLL 3,A4 + ADD A13,A4 + ADDI PDATA+>20,A4 + MOVB A0,*A4 ;STORE OUT CURRENT INITIAL + +*UPDATE LETTER POSITION SELECTED +; MOVE *A13(PDATA+>80),A0,L ;FIRE STICK COORD +; MOVE *A0,A0,W ;READ IT FOLKS +; NOT A0 +; SLL 28,A0 +; SRL 27,A0 + MOVE *A13(PDATA+>A0),A1,L + MOVE *A1,A1,W + NOT A1 + SLL 31,A1 +; SRL 31,A1 +; ADD A1,A0 + JRNE GTL3 + CLR A9 ;CLEAR DEBOUNCE TIMER + JRUC GTL4 +GTL3 + MOVE A9,A9 ;DEBOUNCE STILL ON + JRNE GTL4 + MOVI 120,A9 + + MOVB *A4,A0 ;CHECK FOR RUB DUDES... + CMPI >3C,A0 + JRNE GTL3A ;NO.... + DEC A11 + JRNN GTL30 + CLR A11 ;CAN'T RUB FIRST CHAR + JRUC GTL4 +GTL30 + MOVI BEEPSND,A0 + CALLA snd_play1 + MOVK >20,A0 + MOVB A0,*A4 ;THROW OUT A SPACE + JRUC GTL4 +GTL3A + MOVI BEEPSND,A0 + CALLA snd_play1 + INC A11 + CMPI 3,A11 + JRLO GTL4 +GTL3X + CALLA DELOBJA8 + MOVE *A13(PDATA+>100),A0,L + CLR A1 + MOVE A1,*A0 ;CLEAR DONE FLAG + CALLR GTX ;UPDATE TABLE ENTRY + +*UPDATE YOUR LETTER DISPLAY +GTL4 + MOVE A13,A2 ;GET INITIAL STORE ADDRESS + + ADDI PDATA+>20,A2 + MOVK 3,A1 ;DO THREE INITIALS + MOVE *A13(PDATA+>C0),A3,L ;GET BASE SCREEN ADDRESS +GTL5L + MOVB *A2,A0 + MMTM SP,A1,A2,A3 + MOVE *A13(PDATA+>E0),A1,L ;GET COLOR:PALETTE + CALLR INITOUT + MMFM SP,A1,A2,A3 + ADDK >16,A3 ;INC SCREEN COORD + ADDK 8,A2 ;INC DISPLAY ADDRESS + DSJS A1,GTL5L +*DEC DEBOUNCE TIMERS + MOVE A10,A10 ;DEC TIMER ? + JREQ GTL6 ;NO, ALREADY ZERO + DEC A10 ;DEC IT +GTL6 + MOVE A9,A9 ;DEC TIMER ? + JREQ GTL7 ;NO, ALREADY ZERO + DEC A9 ;DEC IT +GTL7 + SLEEPK 1 + JRUC GTL +; CALLR DONCK +; JRNE GTL +*STUFF HI SCORE +GTX + MOVE *A13(PDATA),A0,L ;GET SCORE POINTS + MOVE A13,A1 + ADDI PDATA+>20,A1 ;POINT TO INITIAL STORAGE + MOVI TOD_TAB,A8 ;ALWAYS ADD TO TODAYS (EVEN IF SPACES) + CALLR ADD_ENTRY ;ADD EM TO THIS ONE IF NEC. + + MOVI ALL_TAB,A8 + CALLR ADD_ENTRY ;ADD EM TO THE TABLE + JRC TOO_BAD ;DIDN'T MAKE ALL TIME + + CALLR DELAY_HSRESET ;NEW ENTRY....DON'T RESET TOO QUICK + +TOO_BAD RETS + .endif + +******************************** +*INITIAL ENTRY JOYSTICK TABLE + ;RLDU + +IJOYTAB + .BYTE 0,0 ;0000 + .BYTE 0,-1 ;0001 + .BYTE 0,1 ;0010 + .BYTE 0,0 ;0011 + .BYTE -1,0 ;0100 + .BYTE -1,-1 ;0101 + .BYTE -1,1 ;0110 + .BYTE -1,0 ;0111 + .BYTE 1,0 ;1000 + .BYTE 1,-1 ;1001 + .BYTE 1,1 ;1010 + .BYTE 1,0 ;1011 + .BYTE 0,0 ;1100 + .BYTE 0,-1 ;1101 + .BYTE 0,1 ;1110 + .BYTE 0,0 ;1111 + +*INITIAL MATRIX + +INITMAT .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!? <" + +************************************************************************** +* +* A2_CHECK +* +* DOES THE SCORE IN A2 MATCH EITHER OF THE PLAYER'S SCORE. +* .EQ. MEANS YES +* .NE. MEANS NO +* +* THIS IS A NARCSPRY MODULE MOVED HERE TO FREE +* NARCSPRY DEPENDANCY ON NARCEQU (T.I. B.D. OVERFLOWS) +* +************************************************************************** +A2_CHECK + MMTM SP,A0 + MOVE @P1DATA,A0,L ;FIX! + CMP A2,A0 + JREQ A2_SUCC ;IT WAS PLAYER 1'S SCORE + + MOVE @P2DATA,A0,L + CMP A2,A0 + +A2_SUCC MMFM SP,A0 + RETS + +************************************************************************** +* +* CHECK_INITS +* +* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ. +* IF THEY'RE ALL SPACES (OR ZERO). +* +************************************************************************** +CHECK_INITS: + MMTM SP,A0,A1,A2 + MOVI NUM_INITS,A2 +CHECK_NEXT: + MOVB *A1,A0 ;GET AN INITIAL + JRZ SPACE_FOUND ;NULL IS A SPACE + CMPI SPACE,A0 ;IS IT A REAL SPACE? + JRNZ LET_FOUND +SPACE_FOUND: + ADDI BYTE_SIZE,A1 + DSJS A2,CHECK_NEXT + CLR A2 ;SET Z BIT ON FALL THROUGH + +LET_FOUND: + MMFM SP,A0,A1,A2 + RETS + +************************************************************************** +* +* CHECK_SCORE +* +* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT +* IS HIGH ENOUGH TO MAKE THE TABLE. +* +* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF +* THE PLAYER MAKES THE LAST POSITION OF THE TABLE, +* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE +* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE +* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO +* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS! +* +* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS +* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD +* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO +* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD +* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS. +* +* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK. +* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH +* AND A0 = POSITION IN TABLE IF SCORE MAKES IT. +* +************************************************************************** +CHECK_SCORE: + MMTM SP,A1,A3,A9,A10 + MOVE A0,A3 ;STASH SCORE IN A3 + CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE + JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT + MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED" + CMP A1,A0 ;A0 MUST BE LESS OR EQUAL + JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS + JRHI DIDNT_MAKE_HSTD +* +* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS +* GOING TO NOSE HIM OUT: +* + CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY + JRHI ANSWER_IN_A0 +* +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* NOTE THAT IF BOTH PLAYERS HAVE AN IDENTICAL SCORE THAT +* WOULD MAKE THE LAST POSITION OF A TABLE, THEN THEY +* WON'T GET TO ENTER THEIR INITIALS!!!!!! +* +* TOUGH LUCK! -LED 10/22/88 +* +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* ****** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ****** +* +* +* WE WOULD MAKE THE PHYSICAL TABLE, BUT WE'RE OUT OF +* WHAT THE PLAYER CAN SEE....RETURN FALSE +* +DIDNT_MAKE_HSTD: + CLR A0 ;RETURN FAILURE +ANSWER_IN_A0: + MOVE A0,A0 ;SET EQ BIT ACCORDINGLY + MMFM SP,A1,A3,A9,A10 + RETS + +************************************************************************** +* +* ADD_ENTRY +* +* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO +* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE +* SCORE OF THE PLAYER. A1 CONTAINS A POINTER +* TO THE FETCHED INITIALS. THE INITIALS ARE +* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL +* (1 BYTE TAKES 1 BYTE SPACE) RAM. +* +* A8 contains a the table to store the entry in. +* +* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE +* +************************************************************************** +ADD_ENTRY: + MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + MOVE A0,A4 ;STASH THE SCORE A SEC. + CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT + CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT? + SETC ;ANTICIPATE FAILURE + JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS. +* +* A0 NOW HAS THE PLACE FOR THE NEW GUY. +* MOVE THE ENTIRE TABLE DOWN 1 UNIT. +* + MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION + +COPY_DOWN_LOOP: + MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE + DEC A2 ;A2 NOW HAS SOURCE + CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT? + JRLO COPY_DONE ;IT IS...DON'T MOVE HIM. + + CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3 + DEC A3 ;MOVE DOWN TO ONE BEFORE + JRUC COPY_DOWN_LOOP + +COPY_DONE: + CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0 +* +* INITAIAL POINTER IS IN A1 +* TABLE OFFSET IN A0 +* + CALLR PT_ENTRY ;GET ENTRY POINTER IN A7 + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + MMTM SP,A0 ;SAVE A0 + +INIT_COPY_LOOP: + MOVB *A1,A0 ;GET AN INITIAL + JRNZ NOT_BLANK + MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES +NOT_BLANK: + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE + DSJ A2,INIT_COPY_LOOP + + MMFM SP,A0 ;GET BACK ENTRY NUMBER + CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE! + CLRC ;RETURN SUCCESS! + +DIDNT_MAKE_IT + MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10 + RETS + +************************************************************************** +* +* FIND_TABLE_LEVEL +* +* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO +* THE TABLE POINTED TO BY A8. +* +* RETURN PHYSICALLY WHERE IT FITS IN A0, AND +* SET THE Z FLAG ACCORDINGLY +* +************************************************************************** +FIND_TABLE_LEVEL + MMTM SP,A1,A2,A3 + CALLR ROM_PTRS ;SETUP FOR THIS TABLE + CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN. + JRC FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT + + MOVE A0,A2 ;KEEP SCORE IN A2 + MOVK 1,A0 ;START AT 1 AND WORK UP. + +CHECK_NEXT_SCORE: + CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1 + CMP A1,A2 ;HOW DO WE FARE AGAINST A1? + JRHI FOUND_THE_SPOT ;WE FOUND THE SPOT + INC A0 ;KEEP MOVING DOWN TILL WE FIT + CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE? + JRLS CHECK_NEXT_SCORE + +FTL_FAIL: + CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE + +FOUND_THE_SPOT: + MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS + MMFM SP,A1,A2,A3 + RETS + +************************************************************************** +* +* GET_HSCR +* +* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR +* A GIVEN ENTRY. +* +* ENTRY NUMBER PASSED IN A0. +* SCORE RETURNED IN A1. +* +************************************************************************** +GET_HSCR + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + CALLR RC_LONG ;FETCH THE LONG WORD INTO A0 + MOVE A0,A1 ;MOVE TO A1 + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* PUT_SCORE_FOR_ENTRY +* +* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY. +* ENTRY SPECIFIED BY A0. +* SCORE PASSED IN A4. +* +************************************************************************** +PUT_SCORE_FOR_ENTRY + MMTM SP,A7,A0 + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_SCORE,A7 ;INDEX SCORE PART. + MOVE A4,A0 ;MOVE SCORE TO A0 + CALLR WC_LONG ;WRITE OUT THE LONG WORD + MMFM SP,A7,A0 + RETS + +************************************************************************** +* +* LOW LEVEL HSTD PROCESSING +* +************************************************************************** +* +* FOR HIGH SCORE ROUTINES +* +* A8 = ROM POINTER FOR A GIVEN TABLE STATS +* A9 = RAM POINTER FOR CMOS DATA +* A10 = NUMBER OF ENTRIES IN THE TABLE +* +* A0 = PARTICULAR ENTRY TO DEAL WITH +* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR) +* 1 = HIGHEST SCORE IN TABLE +* N = NTH SCORE +* +* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE) +* +* A7 = POINTER TO CURRENT ENTRY +* +* A4,A5,A6 SCRATCH +* +************************************************************************** +* +* FORM_HS_CKSUM +* +* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE +* NUMBER IN A0. (RAM POINTER ASSUMED IN A9). +* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*. +* +* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM +* OF THE BYTES IN THE ENTRY. +* +* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE +* CHECKSUM FOR THIS ENTRY MATCHES. +* +************************************************************************** +FORM_HS_CKSUM: + MMTM SP,A0,A4,A6,A7 + CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY + MMTM SP,A7 ;SAVE POINTER TO ENTRY + MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES + CLR A1 ;KEEP SUM IN A1 +ADD_A_BYTE: + CALLR RC_BYTEI ;GET A BYTE INTO A0 + ADD A0,A1 ;ADD TO SUM + DSJ A4,ADD_A_BYTE ;ONE MORE ADDED + NOT A1 ;CHECKSUM IS NOW IN LOW BYTE + ANDI BYTE_MASK,A1 ;MASK SO ITS COOL + MMFM SP,A7 ;GET POINTER BACK + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + CALLR RC_BYTE ;READ IN THE BYTE + CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT + MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE + RETS ;A1 RETURNS CKSUM + +************************************************************************** +* +* FORM_HS_CKSUM_AND_STORE +* +* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT +* ENTRY (A0) TO THE CORRECT VALUE. +* +************************************************************************** +FORM_HS_CKSUM_AND_STORE: + MMTM SP,A0,A7 + CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7 + CALLR PT_ENTRY ;POINT AT THE VALUE + ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE + MOVE A1,A0 ;GET CHECKBYTE TO A0 + CALLR WC_BYTE ;WRITE OUT THE BYTE + MMFM SP,A0,A7 + RETS + +************************************************************************** +* +* PT_ENTRY +* +* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF +* THE HIGH SCORE TABLE. THIS ROUTINE BASES +* ACTIVITY ON ROM POINTER IN A8. IT FETCHES +* FRESH COPIES OF THE A9 RAM POINTER AND THE +* A10 ENTRY COUNTER. IT RETURNS THE ENTRY +* POINTER IN A7. +* +* A0 SPECIFIES WHICH ENTRY TO POINT AT +* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY +* A7 RETURNED POINTING TO THAT ENTRY +* +************************************************************************** +PT_ENTRY: + CMP A10,A0 ;A10 IS MAX VALUE + JRLS POINTER_IN_RANGE + + .IF DEBUG + JRUC $ ;HANG IN DEVELOPMENT + .ENDIF + + MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD + RETS + +POINTER_IN_RANGE: + MOVI HS_SIZE,A7 ;SIZE OF ENTRY + MPYU A0,A7 ;OFFSET OF ENTRY + ADD A9,A7 ;ADD IN THE BASE + RETS + +************************************************************************** +* +* ROM_PTRS +* +* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE +* DATA INTO REGISTERS. +* +* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS +* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES. +* +* INPUT A8=HSTD STRUCTURE ROM POINTER. +* +* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE +* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL +* HAVE A10+1 ENTRIES SINCE ENTRY +* 0 IS A FILLER. +* +************************************************************************** +ROM_PTRS: + MMTM SP,A0,A1 ;SCRATCH REGGIES + MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER + MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES + MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS + + CALLR SET_PAGE + + MMFM SP,A0,A1 ;SCRATCH REGGIES + RETS + +************************************************************************** +* +* SET_PAGE +* +* This is called to set the CMOS page to the bits +* contained in A1. +* +************************************************************************** +SET_PAGE +; MMTM SP,A0,A1 +; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS +; PUSHST ;SAVE INTERRUPT STATUS +; DINT ;STOP INTERRUPTS +; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY +; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT +; OR A1,A0 ;ADD IN OUR BITS +; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY +;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE +; POPST ;OK TO RE-START INTS +; MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* INIT_TAB +* +* This entrypoint is called at power up to +* clear out "today's" high score table. We do +* this job, and then we do the job on the +* all time table for high score reset if +* necessary. +* +************************************************************************** +INIT_TAB + .if 0 + MMTM SP,A8,A0 + + MOVI TOD_TAB,A8 + CALLR INIT_TB ;RESET TODAYS TABLE + + CALLR GET_HSC ;CHECK THE HIGH SCORE RESET COUNTER + JRNZ INIT_TAB1 ;NOT ZERO...NO MORE ACTIVITY +* +* ITS ZERO....SEE IF ITS TURNED OFF +* + MOVI ADJHSRES,A0 + CALLA GET_ADJ ;GET THE ADJUSTED VALUE + JRZ INIT_TAB1 ;ITS TURNED OFF...NO ACTION. + + MOVI ALL_TAB,A8 ;RESET THE ALL TIME TABLE + CALLR INIT_TB ;INIT THE ALL TIME TABLE + + CALLR INIT_HSR ;RESET THE COUNTER TO ADJUSTED VALUE + +INIT_TAB1 + MMFM SP,A8,A0 + .endif + RETS + +************************************************************************** +* +* INIT_TB +* +* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH +* FACTORY ENTRIES. +* +* A8 = ROM TABLE POINTER +* +************************************************************************** +INIT_TB: + .if 0 + MMTM SP,A5,A6,A7,A0 + CALLR ROM_PTRS ;STUFF TABLE DATA + MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE + MOVE A10,A5 ;NUMBER OF VALID ENTRIES + INC A5 ;1 MORE TO HOLD ZERO ENTRY + MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY + MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE + MOVE A9,A7 ;CMOS POINTER IN A7 + +INIT_TB_1: + MOVB *A6,A0 ;GET A BYTE FROM ROM + ADDI BYTE_SIZE,A6 ;KICK ROM POINTER + CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT + DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT LAST ENTRY +INIT_TB_2: + CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM + DEC A0 ;MOVE DOWN + JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO + MMFM SP,A5,A6,A7,A0 + .endif + RETS + +************************************************************************** +* +* COPY_ENTRY +* +* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A +* DIFFERENT LOCATION IN THE TABLE. +* +* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY +* A2 = SOURCE ENTRY (NUMBER) +* A3 = DESTINATION ENTRY (NUMBER) +* +************************************************************************** +COPY_ENTRY: + MMTM SP,A0,A4,A5,A6,A7 + MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES + MOVE A2,A0 ;FIRST POINT FOR A0 + CALLR PT_ENTRY + MOVE A7,A6 ;A6 = SOURCE POINTER + MOVE A3,A0 + CALLR PT_ENTRY ;A5 = DESTINATION + MOVE A7,A5 +COPY_LOOP: +* +* IN THIS LOOP WE MOVE A BYTE AT A TIME. +* SINCE THE WORD AND LONG DO THE SHIFTING AND +* MASKING AND CALL MULTIPLE ROUTINES, THIS IS +* THE MOST EFFICIENT MODE OF OPERATION. +* + MOVE A6,A7 ;SOURCE IN CMOS REGGIE + CALLR RC_BYTEI ;FETCH A WORD + MOVE A7,A6 + MOVE A5,A7 ;DESTINATION + CALLR WC_BYTEI ;WRITE IT + MOVE A7,A5 ;BACK TO DEST REGGIE + DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED + MMFM SP,A0,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* VAL_TAB +* +* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN +* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER +* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW +* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE +* A NEW ENTRY AT THE END OF THE TABLE. +* +* A2 = 0 ON OUTSIDE CALL. +* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT) +* +* THERE ARE 3 CHECKS MADE FOR EACH ENTRY: +* +* 1) IS CHECKSUM CORRECT. +* 2) IS SCORE ALL NUMERIC +* 3) ARE INITIALS ALL VALID ENTRIES. +* +* OUTPUT CC = TABLE OK +* CS = PROBLEM THAT CAN'T BE RECTIFIED +* (PROBABLY BAD RAM) +* +* A2 = 0 ...table ok, or cleaned up +* A2 otherwise meanes table initialized +* +************************************************************************** +VAL_TAB + CLR A2 ;indicate first call in + CALLR DO_VALIDATE ;validate + RETS + +DO_VALIDATE + MMTM SP,A0,A1,A3,A4,A5,A6,A7 + CALLR ROM_PTRS ;SETUP FOR TABLE + MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES + CLR A1 ;COUNT ERRORS + +CHECK_A0_ENTRY: + CALLR CHECK_ENTRY ;IS THE ENTRY OK? + JRNC VT_1 ;YEP. + + CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY + INC A1 + MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD + CMP A3,A1 ;ARE WE THERE? + JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0 +* +* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE +* + MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT? + JRNZ CANT_VALIDATE ;THEN RETURN FAILURE + + CALLR INIT_TB ;INIT THIS TABLE PLEASE + MOVK 1,A2 ;INDICATE RECURSIVE CALL + CALLR DO_VALIDATE ;IS IT ALRIGHT NOW? + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS +* +* LAST ENTRY WAS VALID...MOVE TO NEXT +* +VT_1: + INC A0 ;KICK IT + CMP A10,A0 ;STILL IN TABLE? + JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY + + CLRC ;RETURN VALID! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +CANT_VALIDATE: + SETC ;RETURN FAILURE! + MMFM SP,A0,A1,A3,A4,A5,A6,A7 + RETS + +************************************************************************** +* +* CHECK_ENTRY +* +* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0. +* +* CC = OK +* CS = ENTRY BAD +* +************************************************************************** +CHECK_ENTRY + MMTM SP,A0,A1,A2,A3,A7 + CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST + JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD +* +* CHECKSUM OK...CHECK SCORE +* + CALLR GET_HSCR ;SCORE IN A1 + MOVE A1,A3 ;SAVE COPY OF SCORE + +CHECK_DIGIT: + MOVE A1,A2 ;COPY FOR NEXT NIBBLE + ANDI 0FH,A2 ;MASK THE NIBBLE + CMPI 9,A2 + JRHI CHECK_FAIL ;NIBBLE TOO HIGH + SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE + JRNZ CHECK_DIGIT + + DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE! + JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE + + CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US + CMP A1,A3 ;OURS MUST BE LOWER OR SAME + JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US + +FIRST_ENT: + INC A0 ;RESTORE THE ENTRY NUMBER +* +* SCORE OK...CHECK INITIALS +* + CALLR PT_ENTRY ;POINT A7 AT ENTRY + ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL + MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS + +NEXT_LETTER: + CALLR RC_BYTEI ;FETCH A BYTE + + CALLR VERIFY_LETTER ;SEE IF ITS VALID. + JRC CHECK_FAIL ;NOT A LETTER...BYTE + + DSJ A2,NEXT_LETTER + + CLRC ;RETURN PASS + MMFM SP,A0,A1,A2,A3,A7 + RETS + +CHECK_FAIL: + SETC + MMFM SP,A0,A1,A2,A3,A7 + RETS + + +************************************************************************** +* +* VERIFY_LETTER +* +* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE +* IF ITS VALID. +* +* CC = VALID +* CS = NOT VALID +* +************************************************************************** + +VERIFY_LETTER: + ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE + + CMPI '!',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '%',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI '?',A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI SPACE,A0 ;SPACE? + JREQ VERIFY_PASS ;ITS OK. + + CMPI LET_A,A0 ;BETWEEN A-Z? + JRLO VERIFY_FAIL + + CMPI LET_Z,A0 + JRHI VERIFY_FAIL + +VERIFY_PASS: + CLRC + RETS + +VERIFY_FAIL: + SETC + RETS + +************************************************************************** +* +* REMOVE_ENTRY +* +* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE. +* IT DELETES THE ENTRY INDICATED BY A0. +* +* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT. +* +* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE +* WITH INITIALS IN THAT ENTRY. +* +************************************************************************** +REMOVE_ENTRY: + MMTM SP,A0,A1,A2,A6,A7 + MOVE A0,A3 ;THIS IS DEST + MOVE A3,A2 ;SOURCE IS 1 BELOW + +BUBBLE_ANOTHER: + INC A2 ;NOW WE'RE SET FOR A COPY... + + CMP A10,A2 ;IS SOURCE OUT OF RANGE? + JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3) + + CALLR COPY_ENTRY + INC A3 + JRUC BUBBLE_ANOTHER + +BUBBLE_DONE: + MOVE A3,A0 ;THIS IS BOTTOM OF TABLE + CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK + + MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE + MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY + MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST. + ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE + MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY + +REPLACE_LOOP: + MOVB *A6,A0 ;MOVE A ROM BYTE TO A0 + ADDI BYTE_SIZE,A6 + CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT + DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE. + + MOVE A10,A0 ;POINT AT "LAST" ENTRY + CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE + MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN + RETS + +************************************************************************** +* +* CMOS UTILITIES +* +************************************************************************** + +************************************************************************** +* +* FOR ALL OF THESE CMOS ROUTINES. +* +* A7 = POINTER TO MEMORY +* A0 = DATA TO/FROM MEMORY +* +************************************************************************** +* +* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING **** +* +* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED +* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT +* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT +* WITH A POINTER. +* +* LONG WORDS WORK SIMILARLY: +* +* MSB LSB +* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE> +* +* TOUGH LUCK INTEL HACKERS! +* +* +* RC_BYTE +* WC_BYTE +* +* These 2 routines are the only routines that ever touch +* CMOS ram. This is done to localize the effect of +* changes in the architecture. All efforts to deal with +* CMOS should come through these routines. Locking +* hardware will be easily added in the future (as well +* as different memory mapping). + + +RC_BYTE +;changed cause there are no more hardware pages + movb *a7,a0 + sll 32-8,a0 + srl 32-8,a0 + rets + +; .if TUNIT +; +; move @SYSCOPY,a0 +; sll 32-8,a0 +; srl 32-2,a0 +; sll 15,a0 ;Page offset +; add a7,a0 +; movb *a0,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .else +; +; movb *a7,a0 +; sll 32-8,a0 +; srl 32-8,a0 +; rets +; +; .endif + +WC_BYTE +;changed cause there are no more hardware pages + + move a0,@CMOSWE + movb a0,*a7 + rets + + +; .IF YUNIT +; MOVE A1,-*SP,L +; MOVI 0200H,A1 ;UNLOCK THE CMOS +; MOVE A1,@SECCHIP +; .ENDIF +; +; .if TUNIT +; +; move @SYSCOPY,a1 +; sll 32-8,a1 +; srl 32-2,a1 +; sll 15,a1 ;Page offset +; add a7,a1 +; move a0,@CMOSWE +; movb a0,*a1 +; +; .else +; +; movb a0,*a7 ;Write byte +; +; .endif +; +; .IF YUNIT +; MOVI 0300H,A1 ;LOCK THE CMOS +; MOVE A1,@SECCHIP +; MMFM SP,A1 +; .ENDIF +; +; rets + +************************************************************************** +* +* RC_BYTEI +* +* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO +* "NEXT" BYTE. +* +************************************************************************** +RC_BYTEI: + CALLR RC_BYTE + ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_WORD: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_BYTEI ;GET A BYTE + MOVE A0,A1 ;SAVE IN A1 + ANDI BYTE_MASK,A1 ;MASK ONLY BYTE + SLL 8,A1 ;SHIFT TO HIGH BYTE + CALLR RC_BYTE ;GET THE 2ND BYTE + ANDI BYTE_MASK,A0 + OR A1,A0 ;A0 HAS THE WORD + MMFM SP,A1,A7 + RETS + +RC_WORDI: + CALLR RC_WORD + ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS. + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +RC_LONG: + MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES + CALLR RC_WORDI ;GET A WORD + MOVE A0,A1 ;SAVE IN A1 + ANDI WORD_MASK,A1 ;MASK ONLY WORD + SLL 16,A1 ;SHIFT TO HIGH WORD + CALLR RC_WORD ;GET THE 2ND WORD + ANDI WORD_MASK,A0 + OR A1,A0 ;A0 HAS THE LONG WORD + MMFM SP,A1,A7 + RETS + +RC_LONGI: + CALLR RC_LONG + ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ + MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY + RETS + +WC_BYTEI: + CALLR WC_BYTE + ADDI C_BYTE_SIZE,A7 + RETS + +WC_WORD: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF WORD + SRL 8,A0 ;GET HIGH BYTE IN A0 + CALLR WC_BYTEI ;WRITE THE HIGH BYTE + MOVE A1,A0 ;NOW GET THE LOW BYTE BACK + CALLR WC_BYTE ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_WORDI: + CALLR WC_WORD + ADDI C_WORD_SIZE,A7 + RETS + +WC_LONG: + MMTM SP,A0,A1,A7 + MOVE A0,A1 ;MAKE COPY OF LONG + SRL 16,A0 ;GET HIGH WORD IN A0 + CALLR WC_WORDI ;WRITE THE HIGH WORD + MOVE A1,A0 ;NOW GET THE LOW WORD BACK + CALLR WC_WORD ;WRITE IT + MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED + RETS + +WC_LONGI: + CALLR WC_LONG + ADDI C_LONG_SIZE,A7 + RETS + +***************************************************************************** +***************************************************************************** +***** +***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS +***** +***************************************************************************** +***************************************************************************** + +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + + +SCRM .MACRO a,b + .byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff + .byte ":b:",0 + .ENDM + + +ALL_TIME_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! +ROM_ENTRY_SIZE EQU $-ALL_TIME_ROM_TABLE + SCRM >484692,"MJT" + SCRM >434010,"JBJ" + SCRM >366892,"SL!" + SCRM >296096,"SYD" + SCRM >265237,"HEY" + SCRM >215782,"OEG" + SCRM >182074,"EJB" + SCRM >146892,"PJS" + SCRM >130523,"JEN" + SCRM >118913,"WHO" +ALL_TIME_ENTRIES EQU ($-ALL_TIME_ROM_TABLE)/ROM_ENTRY_SIZE + +TODAYS_ROM_TABLE + SCRM >22122145,"EPJ" ;****ZERO ENTRY...NOT SEEN! + SCRM >111111,"MJT" + SCRM >94477,"JBJ" + SCRM >80486,"SL!" + SCRM >70882,"OEG" + SCRM >68040,"JEN" + SCRM >59104,"JPW" + SCRM >40450,"NED" + SCRM >38780,"ONE" + SCRM >28088,"BUY" + SCRM >16502,"WMS" + +TODAYS_ENTRIES EQU ($-TODAYS_ROM_TABLE)/ROM_ENTRY_SIZE + + .END + + diff --git a/SRC/IMGFIND.CMD b/SRC/IMGFIND.CMD new file mode 100644 index 0000000..236d4a3 --- /dev/null +++ b/SRC/IMGFIND.CMD @@ -0,0 +1,16 @@ +lod> misc.lod bb.lod bb2.lod bb3.lod bb4.lod bb5.lod bb6.lod bb7.lod +lod> bbmug.lod bbpal.lod + +asm> ndsp1.asm main.asm util.asm pal.asm mproc.asm +asm> bakgnd.asm bgndtbl.asm bgndpal.asm imgtbl.asm imgpal.asm +asm> bb.asm bb3.asm plyr.asm plyr2.asm plyrat.asm plyrseq.asm plyrdseq.asm +asm> plyrseq2.asm score.asm score2.asm bb2.asm bb4.asm +asm> drone.asm drone2.asm +asm> sounds.asm patch.asm text.asm plyr3.asm +asm> plyrat2.asm plyrlseq.asm plyrrseq.asm +asm> attract.asm plyrstnd.asm select.asm +asm> select2.asm string.asm record.asm speech.asm +asm> adjust.asm audit.asm test.asm diag.asm menu.asm hstd.asm +asm> makeplr.asm makeplr2.asm screen.asm select3.asm select4.asm plyrat3.asm +asm> plyrdsq2.asm + \ No newline at end of file diff --git a/SRC/JOINROM.BAT b/SRC/JOINROM.BAT new file mode 100644 index 0000000..c32f029 --- /dev/null +++ b/SRC/JOINROM.BAT @@ -0,0 +1,7 @@ +copy /b bbf8.0+bbfa.0+bbfc.0+bbfe.0 7m.0 +copy /b bbf8.1+bbfa.1+bbfc.1+bbfe.1 7m.1 +del bbf*.0 +del bbf*.1 +DATAIO 7M.0 +DATAIO 7M.1 + \ No newline at end of file diff --git a/SRC/L.BAT b/SRC/L.BAT new file mode 100644 index 0000000..6aae608 --- /dev/null +++ b/SRC/L.BAT @@ -0,0 +1,2 @@ +sdbl bb + \ No newline at end of file diff --git a/SRC/LINK.EQU b/SRC/LINK.EQU new file mode 100644 index 0000000..58e2d8d --- /dev/null +++ b/SRC/LINK.EQU @@ -0,0 +1,367 @@ + .INCLUDE "AUDIT.EQU" ;AUDIT NAMES! +* +CHUTES EQU 5 ;MAXIMUM COIN CHUTES IN GAME. +* +*MISC BUTTON EQUATES + .if TUNIT ; | | | +UP_BITS equ 00000000000000000000000100000001b +DOWN_BITS equ 00000000000000000000001000000010b +BUTTONS equ 00000000010100001111000011110000b +ACTION_BITS equ 00000000010100000111000001110000b +START_BITS equ 00000110001001000000000000000000b +DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000001000000010000000100000001b +;DOWN_BITS equ 00000010000000100000001000000010b +;BUTTONS equ 11110000111100001111000011110000b +;ACTION_BITS equ 01110000011100000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + +;UP_BITS equ 00000000000000000000000100000001b +;DOWN_BITS equ 00000000000000000000001000000010b +;BUTTONS equ 00000000000000001111000011110000b +;ACTION_BITS equ 00000000000000000111000001110000b +;START_BITS equ 00000110001001000000000000000000b +;DIAG_BITS EQU 00000000000100000000000000000000B + .else +UP_BITS equ 00000001000000000000000100000001b +DOWN_BITS equ 00000010000000000000001000000010b +BUTTONS equ 010110000101001000111000001110000b +ACTION_BITS equ 010110000000000000111000001110000b +START_BITS equ 0101001000000000000000000b + .endif + +***************************** +***************************** GET OFFICIAL PID FROM GEORGE ****************** +MENU_PID EQU 0AC1H ;GET_MENU SLAVE +MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE +OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS +***************************** GET OFFICIAL PID FROM GEORGE ****************** +***************************** +LONG_SIZE EQU 32 +WORD_SIZE EQU 16 +BYTE_SIZE EQU 8 + +C_LONG_SIZE EQU 64 +C_WORD_SIZE EQU 32 +C_BYTE_SIZE EQU 16 + +BYTE_MASK EQU 0FFH +WORD_MASK EQU 0FFFFH + +SX_MASK EQU 0FFFFH +SY_MASK EQU 0FFFF0000H + +************************************************************************** +* * +* ASCII STUFF * +* * +************************************************************************** +SPACE EQU 20H +EX_PT EQU 21H +LET_0 EQU 30H +LET_A EQU 41H +LET_Z EQU 5AH +UNDERSCORE EQU 5FH +FONT_SPACE EQU 7EH +FONT_RUB EQU FONT_SPACE+1 +FONT_END EQU FONT_RUB+1 +FONT_RQUOTE EQU FONT_END+1 +FONT_EPOUND equ FONT_RQUOTE+1 +FONT_CR equ FONT_EPOUND+1 +ASCII_COMMA EQU 2CH +RIGHT_PAREN EQU 29H +ASCII_DQ EQU 22H + +************************************************************************** +* * +* SCREEN STUFF * +* * +************************************************************************** +* +SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS +SCREEN_Y_UNIT EQU 1000H ;FORMAT +* +STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE +STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE +* +TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES +* +EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL +X_MASK EQU 0FF8H ;MASK TO HOLD JUST X +Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y +* +Y_MAX EQU 256 +SCREEN_PITCH EQU 400 + +************************************************************************** +* * +* COLOR STUFF * +* * +************************************************************************** + + + +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03D3DH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + +COLOR_GREY EQU ROBO_GREY +COLOR_WHITE EQU ROBO_WHITE +COLOR_RED EQU ROBO_RED +COLOR_ORANGE EQU ROBO_ORANGE +COLOR_YELLOW EQU ROBO_YELLOW +COLOR_GREEN EQU ROBO_GREEN +COLOR_BLUE EQU ROBO_BLUE +COLOR_LF EQU ROBO_LF +COLOR_CYAN EQU ROBO_CYAN +COLOR_DECAY EQU ROBO_DECAY +COLOR_PURPLE EQU ROBO_PURPLE +COLOR_BLACK EQU ROBO_BLACK +COLOR_BPR EQU 3C3CH +COLOR_RGB EQU 3D3DH + +LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET +* ;IN PALETTE MEMORY +* +MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES. +* +* +ALL_BLUE equ 1fh +ALL_GREEN equ 3e0h +ALL_RED equ 7c00h +ALL_PURPLE EQU ALL_RED+ALL_BLUE +LIGHT_PURPLE EQU 701CH +* +ONE_BLUE EQU 1 +ONE_GREEN EQU 20H +ONE_RED EQU 400H +* +THIRD_GREEN EQU 140H ;1/3TH GREEN ON +THIRD_RED EQU 2800H ;1/3 RED ON + +************************************************************************** +* +* AUDIT STRUCTURE +* +************************************************************************** +AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO +AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES +AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE +AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM + +N_AUDITS EQU 108 + + .IF (LAST_AUDIT+1)>N_AUDITS + XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS! + .ENDIF + +************************************************************************** +* +* ADJUSTMENTS +* +************************************************************************** +ADJ_SIZE EQU C_LONG_SIZE +N_ADJUSTS EQU 39 ;# OF ADJUSTS + + .IF (LAST_ADJUST+1)>N_ADJUSTS + XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS! + .ENDIF + +************************************************************************** +* CMOS STUFF FOR HSTD +************************************************************************** +* High Score table (CMOS) entry data structure + +NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD +* +HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE +HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL +HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM +HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE +HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM +HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS +HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES +HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry +* +************************************************************************** +* +* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING * +* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME * +* AND "TODAYS") * +* +************************************************************************** +TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE +TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE. +TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED +TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE +TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE +TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT + +WPCMOS EQU CMOS+4000H ;WRITE PROTECTED CMOS +HALF_PAGE EQU 4000h +;WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS +;WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES + +* +* JBJ start +* + .if WWFUNIT +CMOS_PAGE_SELECT_BITS EQU 03H ;BITS 0 AND 1 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 01H ;4 PAGES USE MULTIPLES OF THIS + .else +CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE +CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS + .endif + + +************************************************************************** +* CMOS ALLOCATION +* old way +* 4 PAGES OF 2K +* +* EACH PAGE....LOW 1K = READ/WRITE +* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY +* PROTECTION ON ALL 2K Y-UNIT +************************************************************************** +*new way +* 8k * 8 bits mapped as 8k * 16 bits. +* +* No hardware pages anymore, but software still pretends that there +* are four pages of 2k. +* +* PAGE 0 LOW HALF = HSTD TODAY +* +AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER +COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS +ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*0 +* +* PAGE 1 LOW HALF = AUDITS +* HIGH HALF = ADJUSTMENTS +* +;;;;RECORD_ORIGIN EQU CMOS +RECORD_ORIGIN EQU WPCMOS+HALF_PAGE +RECORD_SELECT EQU CMOS_PAGE_SELECT_UNIT*1 +* +* +* PAGE 2 records cont... +* +* +* PAGE 3 records cont... +* +*DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3 +*DUMP_ORG EQU CMOS +*DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES! +*DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE! +* +* JBJ end +****************************************************************************** +* AUDIT PAGE AUDIT DATA AND CREDITS +* +AUDITORG EQU CMOS ;AUDITS LIVE HERE +CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS +CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD +BUNITS EQU CUNITS+C_WORD_SIZE ;WORD +MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD +COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE +HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER +* +* NEXT TWO ARE ASSUMED TO BE BACK TO BACK +* +HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER +HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED. + +COIN_CKSUM_START EQU CREDITS +COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK +COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD + +CMESS_CHARS EQU 26 ;25 CHARS/LINE OF CUSTOM MESSAGE +CMESS_LINES EQU 3 ;3 LINES +CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE +CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE + +VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK! + +NAME_REV_SIZE EQU 30 ;NAME AND REV DATA + +; JBJ start +;;;;ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE +ADJUSTORG EQU CMOS+HALF_PAGE ;FIRST ADJUSTMENT HERE +; JBJ end +CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE) +VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK. +END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE +ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE +ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS +ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM. +NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE +END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE) +* +*PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND +*PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND + +************************************************************************** +* +* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE +* THE CREDITS MESSAGE. +* +CP_13 EQU 101-35 ;LINE 1 OF 3 +CP_23 EQU 120-35 ;LINE 2 OF 3 +CP_33 EQU 139-35 ;LINE 3 OF 3 + +CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE + +CP_12 EQU 130-35 ;LINE 1 OF 2 +CP_22 EQU 150-35 ;LINE 2 OF 2 + +CP_11 EQU 130-35 ;SINGLE HELP LINE + +CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF! + +************************************************************************** +* * +* MESS_MAC * +* * +* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. * +* THE MESSAGE FOLLOWS THE MACRO. * +* ZERO TERMINATES THE MESSAGE. * +* ANOTHER ZERO TERMINATES L_MESS. * +* * +* A "1" AFTER THE TERMINATING "0" WILL CAUSE * +* L_MESS TO PRINT OUT ANOTHER MESSAGE. * +* * +************************************************************************** + +MESS_MAC .MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP + .LONG :FONT: + .LONG :SPACING: + .LONG ((:Y:)*10000H)+:X: + .LONG :COLOR: + .LONG :ROUTINE: +; .LONG :SLEEP: + .ENDM + +SPACING20 EQU 2 +SPACING07 EQU 1 + +******************************************************************************* + + + diff --git a/SRC/MACROS.HDR b/SRC/MACROS.HDR new file mode 100644 index 0000000..099afa7 --- /dev/null +++ b/SRC/MACROS.HDR @@ -0,0 +1,765 @@ +******************************** +* Macro defines, include after mproc.equ +* 11 June 91 SPL +*.Last mod - 1/31/93 1:00 + + +SCRIPT1 .macro S + movi :S:,a0 + calla script_play1 + .endm + +SX .macro lbl,w1,w2,w3 + .def :lbl: +:lbl: + .word :w1:,:w2:,:w3: + .endm + +LWLWLW .macro l,w,l2,w2,l3,w3 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .endm + +LWLWLWLW .macro l,w,l2,w2,l3,w3,l4,w4 + .long :l: + .word :w: + .long :l2: + .word :w2: + .long :l3: + .word :w3: + .long :l4: + .word :w4: + .endm + + +HDMAC .macro l + .eval 0,X + .long :l: + .loop 16 + .long :l:+X + .eval X+90H,X + .endloop + .endm + +HDMAC2 .macro l + .eval 0,X + .long :l: + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .eval X-90h*5,X + .loop 5 + .long :l:+X + .eval X+90H,X + .endloop + + .long :l: + + .endm + + +BADCHK .MACRO reg,lo,hi,val + cmpi :lo:,reg + jrlt bad? + cmpi :hi:,reg + jrgt bad? + jruc ok? +bad? + movi :val:,:reg: +ok? + .endm + +*CLICK AN AUDIT COUNTER +AUDIT .macro P1 + MOVI :P1:,A0 + CALLA AUD1 + .endm + +*AUDIT A WORD LONG RAM LOCATION +*P1 = AUDIT +*P2 = RAM LOCATION +AUDITCNT .macro P1,P2 + MOVE @:P2:,A1 + MOVI :P1:,A0 + CALLA AUD + .endm + +*Get a game adjustment value in A0 +ADJUST .macro P1 + MOVI :P1:,A0 + CALLA GET_ADJ + .endm + +*FCALL - Function call without using the system stack +FCALL .macro n,b + movi :n:,:b:,L + exgpc :b: + .endm + +*FRET - Function return without using the system stack +FRET .macro b + exgpc :b: + .endm + + +****************************************************************************** + +PRINT_STR .macro FONT,SPACING,CSPACE,X,Y,PALETTE,PR_METHOD + .long :FONT: + .word :SPACING: + .word :CSPACE: + .word :X: + .word :Y: + .long :PALETTE: + .long :PR_METHOD: + .endm + +;----------------------------------------------------------------------------- +; This macro is just a convience... +; +; Destroys A3 +;----------------------------------------------------------------------------- +snd_req .macro snd_ptr + push a2,a3 + movi :snd_ptr:,a2 + move *a2+,a3 ;a3=sound code + calla SNDSND + pull a2,a3 + .endm + + +BSSX .macro n,s + .def :n: + .bss :n:,:s: + .endm + +SUBR .macro p1 + .def :p1: + .even +:p1: + .endm + +SUBRP .macro p1 + .even +:p1: + .endm + +STRUCT .macro o + .asg :o:,SOFF + .endm +STRUCTPD .macro + .asg PDATA,SOFF + .endm +STRUC .macro n,s +:n: .set SOFF + .eval SOFF+:s:,SOFF + .endm +WORD .macro n +:n: .set SOFF + .eval SOFF+16,SOFF + .endm +LONG .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +APTR .macro n +:n: .set SOFF + .eval SOFF+32,SOFF + .endm +LABEL .macro n +:n: .set SOFF + .endm + +FLAG .macro n +:n:_B .equ SOFF +:n:_M .equ 1<= 5? + jrlt #map_ok ;Nope - then use it + clr a0 ;else reset it back to 0 +#map_ok + move a0,@_io_map,L ;a0 = I/O map number + clr a1 ;a1 = SetAddresses Trap Request + trap 3 ;Remap I/O space + rets +RemapIO_End + +SecFuncTable + .long RemapIO,RemapIO_End + .word 06a9h ;This is a checksum of the function + .long 0 + +****************************************************************************** + SUBR InitAddresses + movi COINS,a0 + move a0,@_coin_addr,L + movi SWITCH,a0 + move a0,@_switch_addr,L + movi SWITCH2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH,a0 + move a0,@_dipswitch_addr,L + movi SOUND,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS,a0 + move a0,@_coin_counter_addr,L + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet1 + movi COINS_M1,a0 + move a0,@_coin_addr,L + movi SWITCH_M1,a0 + move a0,@_switch_addr,L + movi SWITCH2_M1,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M1,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M1,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M1,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M1,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M1,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE1),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet2 + movi COINS_M2,a0 + move a0,@_coin_addr,L + movi SWITCH_M2,a0 + move a0,@_switch_addr,L + movi SWITCH2_M2,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M2,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M2,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M2,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M2,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M2,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE2),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet3 + movi COINS_M3,a0 + move a0,@_coin_addr,L + movi SWITCH_M3,a0 + move a0,@_switch_addr,L + movi SWITCH2_M3,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M3,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M3,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M3,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M3,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M3,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE3),a0 + move a0,@VMUX_CONTROL + rets + +****************************************************************************** + SUBR AddressSet4 + movi COINS_M4,a0 + move a0,@_coin_addr,L + movi SWITCH_M4,a0 + move a0,@_switch_addr,L + movi SWITCH2_M4,a0 + move a0,@_switch2_addr,L + movi WATCHDOG_M4,a0 + move a0,@_watchdog_addr,L + movi DIPSWITCH_M4,a0 + move a0,@_dipswitch_addr,L + movi SOUND_M4,a0 + move a0,@_sound_addr,L + movi SOUNDIRQ_M4,a0 + move a0,@_soundirq_addr,L + movi COIN_COUNTERS_M4,a0 + move a0,@_coin_counter_addr,L + movi (VMUX_INITMODE|VMUX_MODE4),a0 + move a0,@VMUX_CONTROL + rets + +AddressTable .long InitAddresses, AddressSet1, AddressSet2 + .long AddressSet3, AddressSet4 + +****************************************************************************** +; A0 = Address Set to install (0-4) + + SUBR SetAddresses + move a0,a0 + jrn _invalid + cmpi 4,a0 + jrgt _invalid + sll 5,a0 + addi AddressTable,a0 + move *a0,a0,L + pushst + dint + call a0 + popst +_invalid + rets + +********************************** +* SecFuncCheck - Checks to make sure security functions have not be mucked with +* Trashes a0,a1,a2,a3, a4 + SUBR SecFuncCheck + + + rets ;<----------------temp!!!!!!!!!!!!!!!!!!!!!! + + + movi SecFuncTable,a0,L ;Table of security functions to check +SFC_loop + move *a0+,a1,L ;Pointer to beginning of function + jrz SFC_done + move *a0+,a2,L ;Pointer to end of function + sub a1,a2 + srl 3,a2 + clr a3 +SFC_iloop + movb *a1,a4 + andi 0ffh,a4 + add a4,a3 + addk 8,a1 + dsjs a2,SFC_iloop + move *a0+,a4,W + cmp a4,a3 + jrz SFC_loop + LOCKUP +SFC_done + + +*************************************************************** +* InitPIC - Initializes the PIC Microcontroller +* + SUBR InitPIC + calla InitAddresses + clr a0 ;Reset the PIC + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 10,a0 ;Hold RESET fer a bit + dsjs a0,$ + movi 010h,a0 ;Set no command request + move a0,@PIC_COMMAND,W + movi 020h,a0 ;Allow PIC to run + move @_coin_counter_addr,a1,L + move a0,*a1,W + movi 200000000,a1 +_pwait_loop + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrz _pnwait + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop +_pnwait + movi 010h,a0 + move a0,@PIC_COMMAND,W + movi 2000000,a1 +_pwait_loop1 + move @_soundirq_addr,a0,L + move *a0,a0,W + btst 12,a0 + jrnz _pwait_done + move @_watchdog_addr,a0,L + move a0,*a0 + dsjs a1,_pwait_loop1 +_pwait_done + rets + +******************************** +* Init hardware, IO, RAM +* Trashes scratch, A2-A7 + + SUBR init_all + dint ;No interrupts until addresses set up + + .if 0 + movi 56781234h,a0 ;stack init for test + movi STACKB,a1 + movi STACKL/32-32,a2 + move a0,*a1+,L + dsjs a2,$-16 + .endif + + clr a0 ;Zero all scratch mem except stack + movi STACKE,a1 ;Start at bottom of stack + movi (SCRATL-STACKL)/32,a2 ;Scratch minus stack size + move a0,*a1+,L + dsjs a2,$-16 +; + movi -1,a0 ;Auto Clock update OFF + move a0,@_clk_rd,L + calla InitPIC ;Initialize the PIC +; + movi WDOGNUM,a0 + move a0,@WDOGRAM,L ;Mark system as initialized + + movi SYSCINIT|WPIROM,a0 +; movi SYSCINIT,a0 + move a0,@SYSCTRL + move a0,@SYSCOPY ;Copy + + callr io_init ;Initialize the I/O regs + +; calla snd_reset ;Sound board reset (makes sound!) + + calla display_init ;Init display system + + calla process_init ;Init process list + +; calla snd_reset ;Sound board reset (makes sound!) + + movk INAMODE,a0 + move a0,@GAMSTATE + movi 81261A8CH,a0 ;Random seed + move a0,@RAND,L + + movi swstacktop,a0 ;Initialize switch stack + move a0,@swstack_p,L + + callr dip_init ;Initialize the dipswitches + + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board + + movk 1,a0 + move a0,@DISPLAYON + + ;clear write-to-rom ints + ; Toddview messes with the interrupt vector table at startup, + ; and we end up with a pending WROM int. Clear it out to avoid + ; hanging right off the bat. + move @SYSCOPY,a0 + xori 02000h,a0 + move a0,@SYSCTRL + move @SYSCOPY,a0 + move a0,@SYSCTRL + + eint + + rets + + +******************************** +* Initialize options via dip switch settings + +dip_init + PUSH a0,a1 + + calla READ_DIP ;Get the current dip switch bits + move a0,a1 + + andi DPPLAYERS,a0 ;AQUIRE THE NUMBER OF PLAYERS + sll 3,a0 + addi #pnum_t,a0 + movb *a0,a0 + move a0,@NPLAYERS + + move a1,a0 + andi DPCOUNTER,a0 + srl DPCOUNTER_SRL-3,a0 + addi #cntr_t,a0 + movb *a0,a0 ;Match eugene's old shit + move a0,@COUNTER_MODE + + move a1,a0 + andi DPVALIDATOR,a0 ;AQUIRE THE VALIDATOR STATUS + srl DPVALIDATOR_SRL,a0 + move a0,@VALIDATOR ;SAVE IT + + move a1,a0 + andi DPPLAYERS,a0 + move a0,@TWOPLAYERS ;0=4 plyrs, 1=2 plyrs + + PULL a0,a1 + rets + +;Translate dipswitch into number of players allowed + +#pnum_t .byte 4,2 + +;Translate dipswitch coin counter adjustment to what the old cmos values were + +#cntr_t .byte 2,3,1,2 + .even + + +************************************************************************** +* Initialize GSP I/O registers + + SUBR io_init + + PUSH b2,b6 + movi INTIO,b6 + exgpc b6 + PULL b2,b6 + rets + + +#******************************* +* Initialize GSP I/O registers +* B6=*Return address +* Trashes B0-B2 + + SUBR INTIO + + movi HESYNC,b2 + movi gspioinit_t,b0 + movi (giiend-gspioinit_t)/16,b1 +#lp move *b0+,*b2+ + dsj b1,#lp + + movi VMUX_INITMODE,a0 + move a0,@VMUX_CONTROL,W + exgpc b6 + + +#******************************* +* Watch dog disable +* Note: Call while interrupts are turned off + + SUBR WDOGDIS + + .if TUNIT=0 + + PUSH a0,a1,a2,a3,a4 + + pushst + setf 16,1,0 + + movi #dis_t,a1 + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +#lp or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn #lp + + move a2,*a4 + + popst + PULL a0,a1,a2,a3,a4 + rets + + +#dis_t .word 0,0,0,0, 2,0,2,0, -1 ;WATCH DOG DISABLE TABLE + + .else + + rets + + .endif + + +**************************************************************** +* Display IRQ + +DIRQ + mmtm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + + + setf 1,0,0 + move sp,@INTPEND+DIP ;Clear int pending + move sp,@INTENB+DIP ;Disable display int + + eint ;Let DMA int run + + setf 16,1,0 ;Word sign extend +;DJT Start +;;not MOVE @ROLLING_COUNT,A1 +;;used! INC A1 +;; MOVE A1,@ROLLING_COUNT +;DJT End + + movi DPYCTL,a8 + + move *a8,a7 ;>Shift register read to restart DMA + movi NIL|DXV|SRT|>10,a0 + move a0,*a8 + movi 510*>1000,a2 ;*Autoerase lines + pixt *a2,a2 ;Mem to shift reg xfer + + + move @dirqdraw,a0 + jrnz di50 ;In draw code? + + move b13,b0 + jrn #chkmp ;DMA done? + + + move @GAMSTATE,a0 + jrn #chkmp ;In diagnostics? (B13 invalid) + + movi 26000/4,a1 ;>Make sure DMA is OK +#dqwait cmp b13,b0 + jrne di50 ;DMAQ changed? + dsj a1,#dqwait + + .if DEBUG + trap 29 + .endif + + clr a1 + move a1,@DMACTRL ;Timed out + move a1,@DMACTRL + subk 1,a1 + move a1,b13 + +di50 move a7,*a8 ;Restore + jruc #60hzcode ;Skip flip + + +#chkmp move @dirqtimer,a1 + jrnz di50 ;Mproc not done? + + move @dpageflip,a2 + jrz di400 ;Flipping off? + + + movi -4,a0 ;Page0 + movi PAGE1YO*>1000,b2 ;*Page1 + move @dpage,a1 + jrnz #onp1 + movi ->1004,a0 ;Page1 + clr b2 ;*Page0 +#onp1 move a0,@DPYSTRT ;If we don't page flip next time + move a0,@DPYADR ;Override DPYSTRT + not a1 ;Flip + move a1,@dpage + + + dint + movi 26000/8,a1 ;>Wait on last DMA +#dwait move @DMACTRL,a0 + jrnn #dmaoff ;DMA stopped? + dsj a1,#dwait + move a1,@DMACTRL ;Timed out + .if DEBUG + trap 29 + .endif +#dmaoff + + move a2,a2 + jrn #noerase ;Erase off? + + movi CONTROL,a9 ;>Clear whole page + move *a9,a6 + +;NEW - This is a bug - NEVER Turn OFF CAS before RAS Refreshes +;There is a possibility that by putting an 8 in the CONTROL register +;the Dynamic RAM device's (Bitmap RAM and/or Scratch RAM) could lose +;data. Because the amount of time that CAS before RAS refreshes are turned +;off is very short, the probabilty of actual data loss is minimal. Data +;loss could occur if the CAS before RAS refreshes are shut off just prior +;to a refresh cycle occuring. This is not very likely though because of the +;asynchronous nature of the 34010's refresh cycles. Setting the control +;register to 0ch will guarentee that there will be no possibilty of losing +;refresh cycles to the DRAM and VRAM devices. This NOTE is here simply to +;explain the reason for the code change below. +; ---> movk 8,a0 <--- + + MOVk 0ch,a0 + + move a0,*a9 ;Transparency off + movk 16,a0 + move a0,@PSIZE + movi SCRN_PTCH*2,b3 ;Pitch (2 lines) + PUSH b10,b11,b12,b13,b14 + movi [127,1],b7 ;Rows:Columns + fill l + PULL b10,b11,b12,b13,b14 + + move a6,*a9 ;Restore + movk PXSIZE,a0 + move a0,@PSIZE ;Normal +#noerase + +di400 move a7,*a8 ;Restore + eint + + + calla pal_transfer ;Copy new PALs + + move @IRQSKYE,@ERASELOC ;Copy bkgnd color +; move @COLRTEMP,a0,L +; jrz #notindiag +; movi CYCOLORS,a1 +; move a0,*a1+,L ;Copy diagnostics color cycler +; move @COLRTEMP+32,*a1,L +;#notindiag + + callr switch_stack ;Scan misc switches + + movk 1,a0 + + move a0,@dirqdraw + + setf 1,0,0 ;Enable display int + move a0,@INTENB+DIP + setf 16,1,0 + + + calla DISPLAY ;Build DMAQ, update XYPOS + + dint + clr a0 + move a0,@dirqdraw ;Draw done + +#60hzcode ;*** This code must run at 60HZ + + move @_clk_rd,a2,L ;Increment the time get counter + jrn _no_gt ;If negative then no auto clock update + addk 1,a2 + move a2,@_clk_rd,L + cmpi 1,a2 ;Time to transfer the time? + jrz _gt ;BR = yes go get time + xori 01bh,a2 ;Time to trigger time aquisition? + jrnz _no_gt ;BR = nope - exit + move a2,@_clk_rd,L ;Set counter back to 0 + calla _aquire_time ;Trigger time aquistion + jruc _no_gt ;Done +_gt + calla _get_time ;Transfer time from PIC + move @_tseconds,a2,W ;Seconds = 0 ? + jrnz _no_gt ;BR = Nope - all done + calla _AlarmClock ;else - go check for alarm functions +_no_gt + + movi FSWITCH,a4 + move @_switch_addr,a2,L + move *a2,a0 + move @_switch2_addr,a2,L + move *a2,a1 + move @_coin_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a0 + not a0 + move @_dipswitch_addr,a2,L + move *a2,a2 + sll 16,a2 + movy a2,a1 + not a1 + + move @TWOPLAYERS,a14 ;if 2-player kit then fudge + jrz #not_2 ;the switches + + clr a2 + movx a0,a2 + sll 8,a2 + movx a2,a0 + srl 8+8,a2 + movx a2,a1 + +#not_2 + move a0,*a4+,L + move a1,*a4+,L + + move *a4(64),a2,L ;>switches_cur + move *a4(96),a3,L ;>switches_cur+32 + move a2,*a4+,L ;>switches_old + move a3,*a4+,L ;>switches_old+32 + move a0,*a4+,L ;>switches_cur + move a1,*a4+,L ;>switches_cur+32 + move a2,a14 + xor a0,a14 + and a14,a0 ;down transitions + and a14,a2 ;up transitions + move a3,a14 + xor a1,a14 + and a14,a1 ;down transitions + and a14,a3 ;up transitions + move a2,*a4+,L ;>switches_up + move a3,*a4+,L ;>switches_up+32 + move a0,*a4+,L ;>switches_down + move a1,*a4+,L ;>switches_down+32 + + + move @dirqtimer,a1 ;Tell mproc to run + addk 1,a1 + move a1,@dirqtimer + + callr switch_stack ;Scan misc switches + + MOVK 5,A1 + MOVI C_FLAGS,A2 +ALL_COUNTERS_DONE + MOVB *A2,A3 + JRZ NO_WORRY_COUNTER + SUBK 1,A3 + MOVE A3,*A2 +NO_WORRY_COUNTER + ADDK 8,A2 + DSJS A1,ALL_COUNTERS_DONE + + + dint + setf 1,0,0 ;Enable display int + movk 1,a1 + move a1,@INTENB+DIP + setf 16,1,0 + + + move @dirqcnt,a0 + addk 1,a0 + move a0,@dirqcnt + sll 32-3,a0 + jrnz dirqx ;Skip? + + + ;>Do every 8 ticks + .if DEBUG + .else + move @dirqtimer,a0 + cmpi 400,a0 + jahs init_prog ;Reset? + .endif + + + move @C_FRAC,a0 ;>Count down coin fraction timer + jrz #nfrc ;No frac? + sll 32-8,a0 + srl 32-8,a0 + subk 1,a0 + move a0,@C_FRAC +#nfrc + + ;>Coin counters + move @COINCNTR,a0,L + jrz l_dog ;Counters, timers inactive? + + movk 2,a4 ;do both counters + movi COINCNTR,a5 +ccntr0l + movb *a5,a1 ;more counts for counter ? + jrz c_cntr0 ;no + movb *a5(16),a2 ;previous pulse time out? + jrnz c_cntr0 ;no + movk 2,a2 + movb a2,*a5(16) ;start new pulse + dec a1 ;decrement counts + movb a1,*a5 +c_cntr0 + addk 8,a5 + dsjs a4,ccntr0l + + clr a2 ;counter on mask +; movi >100,a3 + movk 1,a3 + movk 2,a4 +c_cntr1l + movb *a5,a0 ;counter timer active? + jreq c_cntr1 ;no + dec a0 ;yes, dec it and store + movb a0,*a5 + jreq c_cntr1 ;done + add a3,a2 ;turn counter solenoid on +c_cntr1 + sll 1,a3 + addk 8,a5 + dsjs a4,c_cntr1l + + move @_coin_counter_addr,a0,L + ori 32,a2 + + andi 21h,a2 ;only set bits 5 and maybe 0. + + move a2,*a0,W + +l_dog + .if TUNIT2 +; move a0,@WATCHDOG ;Hit + move @_watchdog_addr,a0,L + move a0,*a0 + .else + + movi wdogbone_t,a1 ;>Clock watchdog + move @SYSCOPY,a2 + movk 1,a3 + movi SYSCTRL,a4 + move *a1+,a0 + +roverl or a2,a0 + move a0,*a4 + xor a3,a0 + move a0,*a4 + move *a1+,a0 + jrnn roverl ;More? + + move a2,*a4 ;Restore + .endif + + move @VCOUNT,a14 + move a14,@dma_bog + +dirqx mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14 + mmfm sp,b0,b1,b2,b3,b4,b5,b6,b7,b11 + reti + + +wdogbone_t + .word 0,2,0,2,2,-1 ;Watchdog feed table + + + +#******************************* +* Scan switches + + SUBRP switch_stack + + move @_coin_addr,a0,L ;Get coin door extras + move *a0,a0,W + + move @GAMSTATE,a1,W ;In diagnostics? + jrn #no_diptest + move @_dipswitch_addr,a1,L ;No. Map TEST dipswitch to coin door + move *a1,a1,W ; TEST switch + sll 4-0,a1 ;Dip TEST bit0 -> coin TEST bit4 + ori ~BIT4,a1 ;Keep the rest of the coin door bits + and a1,a0 + +#no_diptest + ori >ffff0000,a0 ;Pull unused bits UP + + move @swtemp2,a2,W ;Get previous previous state + move @swtemp1,a1,W ;Get previous state + move a1,@swtemp2,W ;Save new previous previous + move a0,@swtemp1,W ;Save new previous + and a1,a2 ;Only stack if UP then UP & now DOWN + andn a0,a2 ; (new DOWNS now pos logic) + jrz #x ;None to do if 0 + + move @swstack_p,a3,L ;Current switch stack ptr + movk >1f,a1 ;XOR constant + +#lp cmpi swstackbot,a3 ;Switch stack overflow? + jreq #x + lmo a2,a0 + sll a0,a2 ;Get rid of DOWN bit + sll 1,a2 + xor a1,a0 ;Do 1's comp to get true bit # + move a0,-*a3,W ;Push switch # (0-15) + rl a0,a2 ;Restore remaining DOWN bits + jrnz #lp ;Continue if more are DOWN (!0) + + move a3,@swstack_p,L ;Save new stack ptr + +#x rets + + +************************************************************************** +* badtrapx - Come here when a trap is hit that is not defined and log it + +badtrap31 +badtrap30 +badtrap28 +badtrap27 +badtrap26 +badtrap25 +badtrap24 +badtrap23 +badtrap22 +badtrap21 +badtrap20 +badtrap19 +badtrap18 +badtrap17 +badtrap16 +badtrap15 +badtrap14 +badtrap13 +badtrap12 +badtrap11 +badtrap9 +badtrap8 +badtrap7 +badtrap6 +badtrap5 +badtrap4 +badtrap3 +;badtrap2 + +;WRITE TO CODE/IMAGE ROM +wrom_int + + + .if IMGVIEW +;Allow me to exit TV and go into IT to tweak these mofo's + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + eint + reti + .endif + + + + .if DEBUG + +;If debug, just lockup so we can fix it. + LOCKUP + eint + .else + +;If shipping code, audit the error and clear the int + PUSH a14 + movi SYSCINIT,a14 + xori 02000h,a14 + move a14,@SYSCTRL + ori 02000h,a14 + move a14,@SYSCTRL + PULL a14 + CALLERR 9,0 + eint + .endif + + reti + +badtrap + .if DEBUG + LOCKUP + eint + .else + CALLERR 9,0 + .endif + + reti + +badtrap29 + .if DEBUG + reti +; LOCKUP ;A write to ROM! + .endif + jruc badtrap + + +****************************************************************************** +* trap3_handler - Security Trap +* a1 = Security Service Identifier +* 0 = SetAddresses (I/O address remap) +* a0 = Data for particular Security Service +* Security Service Value +* 0 Don't Care + SUBR trap3_handler + sll 5,a1 + addi _SecurityFunctions,a1 + move *a1,a1,L + call a1 + reti + + +;Initial GSP I/O register values + +gspioinit_t +;NEW - Values change because dot clock is twice as fast. +; .word 015h ;>C0000000 -- HESYNC +; .word HEBLNKINIT ;>C0000010 -- HEBLNK +; .word 0fah ;>C0000020 -- HSBLNK +; .word 0fch ;>C0000030 -- HTOTAL + + .word 02bh ;>C0000000 -- HESYNC + .word HEBLNKINIT ;>C0000010 -- HEBLNK + .word 01f5h ;>C0000020 -- HSBLNK + .word 01f9h ;>C0000030 -- HTOTAL + + .word 3 ;>C0000040 -- VESYNC + .word 20 ;>C0000050 -- VEBLNK + .word 274 ;>C0000060 -- VSBLNK ;254 lines + .word 288 ;>C0000070 -- VTOTAL + .word >f010 ;>C0000080 -- DPYCTL ENV|NIL|DXV|SRE|>10 + .word 0fffch ;>C0000090 -- DPYSTRT + .word EOSINT ;>C00000A0 -- DPYINT + .word 2ch ;>C00000B0 -- CONTROL + .word 0 ;>C00000C0 -- HSTDATA + .word 0 ;>C00000D0 -- HSTADRL + .word 0 ;>C00000E0 -- HSTADRH + .word 0 ;>C00000F0 -- HSTCTLL + .word 0 ;>C0000100 -- HSTCTLH + .word 0 ;>C0000110 -- INTENBL + .word 0 ;>C0000120 -- INTPEND + .word 0 ;>C0000130 -- CONVSP + .word 0 ;>C0000140 -- CONVDP + .word PXSIZE ;>C0000150 -- PSIZE + .word 0 ;>C0000160 -- PMASK + .word 0 ;>C0000170 -- RESERVED + .word 0 ;>C0000180 -- RESERVED + .word 0 ;>C0000190 -- RESERVED + .word 0 ;>C00001A0 -- RESERVED + .word 28 ;>C00001B0 -- DPYTAP +giiend + + +;Initialize all 32 trap vectors + + .sect "VECTORS" + + .long badtrap31 ;TRAP 31 + .long badtrap30 ;TRAP 30 ILLOP --- ILLEGAL OPCODE + .long badtrap29 ;TRAP 29 + .long badtrap28 ;TRAP 28 + .long badtrap27 ;TRAP 27 + .long badtrap26 ;TRAP 26 + .long badtrap25 ;TRAP 25 + .long badtrap24 ;TRAP 24 + .long badtrap23 ;TRAP 23 + .long badtrap22 ;TRAP 22 + .long badtrap21 ;TRAP 21 + .long badtrap20 ;TRAP 20 + .long badtrap19 ;TRAP 19 + .long badtrap18 ;TRAP 18 + .long badtrap17 ;TRAP 17 + .long badtrap16 ;TRAP 16 + .long badtrap15 ;TRAP 15 + .long badtrap14 ;TRAP 14 + .long badtrap13 ;TRAP 13 + .long badtrap12 ;TRAP 12 + .long badtrap11 ;TRAP 11 WV --- WINDOW VIOLATION + .long DIRQ ;TRAP 10 DI --- DISPLAY INTERRUPT + .long badtrap9 ;TRAP 9 HI --- HOST INTERRUPT + .long badtrap8 ;TRAP 8 NMI -- NONMASKABLE INTERRUPT + .long badtrap7 ;TRAP 7 + .long badtrap6 ;TRAP 6 + .long badtrap5 ;TRAP 5 + .long badtrap4 ;TRAP 4 + .long trap3_handler ;TRAP 3 Security Trap + .long wrom_int ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 +; .long badtrap3 ;TRAP 3 +; .long badtrap2 ;TRAP 2 INT2 --- EXTERNAL INTERRUPT 2 + .long dma_irq ;TRAP 1 INT1 --- EXTERNAL INTERRUPT 1 + .long init_prog ;TRAP 0 RESET + + + .end diff --git a/SRC/MAKE.INI b/SRC/MAKE.INI new file mode 100644 index 0000000..e9bca7a --- /dev/null +++ b/SRC/MAKE.INI @@ -0,0 +1,11 @@ +.MISER : # Removes MAKE from memory for all shell operations +.SUFFIXES : .EXE .OBJ .LIN .DEC .C .ASM .FOR .RAW .OUT + +RAM = c:\\ +MAKE_TMP = ${RAM} # Directory for any MAKE temporary files + +.asm.obj: + preasm $*.asm $*.axx + gspa $*.axx $*.obj $*.lst -h -l -v10 + @del $*.axx + @crnchlst $*.lst diff --git a/SRC/MAKEFILE b/SRC/MAKEFILE new file mode 100644 index 0000000..639dd9f --- /dev/null +++ b/SRC/MAKEFILE @@ -0,0 +1,67 @@ +# +.SUFFIXES : .EXE .ASM .OBJ .C +# +O = NDSP1.OBJ MAIN.OBJ UTIL.OBJ PAL.OBJ MPROC.OBJ\ + BAKGND.OBJ BGNDTBL.OBJ BGNDPAL.OBJ IMGTBL.OBJ IMGPAL.OBJ\ + BB.OBJ BB3.OBJ PLYR.OBJ PLYR2.OBJ PLYRAT.OBJ PLYRSEQ.OBJ PLYRDSEQ.OBJ\ + PLYRSEQ2.OBJ SCORE.OBJ SCORE2.OBJ BB2.OBJ BB4.OBJ\ + DRONE.OBJ\ + SOUNDS.OBJ PATCH.OBJ TEXT.OBJ PLYR3.OBJ\ + PLYRAT2.OBJ PLYRLSEQ.OBJ PLYRRSEQ.OBJ\ + ATTRACT.OBJ PLYRSTND.OBJ SELECT.OBJ\ + SELECT2.OBJ STRING.OBJ RECORD.OBJ SPEECH.OBJ\ + ADJUST.OBJ AUDIT.OBJ TEST.OBJ DIAG.OBJ MENU.OBJ HSTD.OBJ \ + MAKEPLR.OBJ MAKEPLR2.OBJ SCREEN.OBJ SELECT3.OBJ SELECT4.OBJ PLYRAT3.OBJ \ + PLYRDSQ2.OBJ UNZIP.OBJ + + +bb.out: $(O) + gsplnk bb.cmd +# copy c:\bb.out c:\video\bball +# copy c:\bb.map c:\video\bball +# tv bb /v +$(O): $*.asm + +ndsp1.obj: world.equ disp.equ court.tbl +main.obj: sys.equ +bb.obj: world.equ bbsec.equ court.tbl imgpal2.asm sys.equ imgpal7.asm +plyr.obj: world.equ plyr.equ disp.equ court.tbl imgtbl2.glo sys.equ +plyr2.obj: world.equ plyr.equ ball.tbl sys.equ +plyr3.obj: world.equ plyr.equ plyrhd2.tbl imgtbl2.glo +plyrat.obj: plyrhd.tbl plyr.equ +plyrat2.obj: plyrhd.tbl plyr.equ sys.equ +plyrat3.obj: imgtbl.asm +plyrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrrseq.obj: plyrseq.tbl plyr.equ stand.tbl +plyrseq2.obj: plyrseq2.tbl plyr.equ flail.tbl +plyrdseq.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrdsq2.obj: plyrdseq.tbl plyrdsq2.tbl plyr.equ +plyrlseq.obj: plyr.equ +#plyrlseq.obj: plyr.equ layup.tbl +#plyrlseq.obj: plyrd2sq.tbl plyr.equ layup.tbl +plyrstnd.obj: stand.tbl imgtbl2.glo plyrhd3.tbl +bb2.obj: plyrseq.tbl plyrdseq.tbl sys.equ +bb3.obj: world.equ +bb4.obj: plyrhd.tbl plyrseq3.tbl +score.obj: world.equ leds.tbl arrow.tbl sys.equ +score2.obj: world.equ imgtbl2.glo sys.equ +drone.obj: world.equ plyr.equ +record.obj: world.equ +audit.obj: link.equ menu.equ +hstd.obj: link.equ +menu.obj: link.equ menu.equ imgtbl2.glo +test.obj: link.equ menu.equ +attract.obj: imgtbl.asm imgtbl2.glo +makeplr.obj: imgtbl.asm imgtbl2.glo +makeplr2.obj: imgtbl.asm imgtbl2.glo +screen.obj: imgtbl.asm imgtbl2.glo +select.obj: mugshot.tbl imgtbl2.glo +select2.obj: mugshot.tbl imgtbl2.glo sys.equ +select3.obj: imgtbl.asm imgtbl2.glo +select4.obj: imgtbl.asm imgtbl2.glo +diag.obj: imgtbl2.glo +speech.obj: imgtbl2.glo +adjust.obj: menu.equ +mproc.obj: mproc.equ +text.obj: text.tbl mugshot.tbl +unzip.obj: bbvda.tbl diff --git a/SRC/MAKEPLR.ASM b/SRC/MAKEPLR.ASM new file mode 100644 index 0000000..aaa82cb --- /dev/null +++ b/SRC/MAKEPLR.ASM @@ -0,0 +1,3488 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "plyrmake.tbl" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "imgtblp.glo" + .include "bgndtbl.glo" + .include "privlg.tbl" + + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def SENDTO,ENTRIES + .def OVRTME + .def design_player + .def speed_points + .def power_points + .def shoot_points + .def dunks_points + .def steal_points + .def block_points + .def height_points + .def weight_points + .def total_points + .def butn_cursor_pos + .def dither_objs,dither_objs2 + .def clock_minutes,clock_seconds + .def done_creating ;exit flag for CREATE PLAYER + .def fog_obj_ptr + .def yes_no_buttons_ptr + .def restart_clock_timer,stop_clock_timer + .def stop_clock + .def p1_slide_box_flag,p2_slide_box_flag + .def p3_slide_box_flag,p4_slide_box_flag + .def joy_pos + .def select_arrow_obj + .def HIDEAT + + .ref NBALL601 + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref create_down_arrow,create_up_arrow + .ref create_rght_arrow,create_left_arrow + .ref NUM_NICK_NAMES,GAMSTATE + .ref NUM_UNIFORM_NAMES + .ref flash_pressed_yes_no_button + .ref create_plyr ;-1=can't create plyr, 0=could, 1=creating + .ref scale74f_t,scale59_t,scale61f_t,scale63f_t + .ref scale57_t,scale58_t,scale60_t,scale61_t,scale61t_t,scale62_t + .ref scale62t_t,scale63_t,scale65_t,scale64t_t,scale64_t,scale67_t + .ref scale66_t,scale65t_t,scale67t_t,scale66t_t,scale65f_t + .ref scale67f_t,scale66f_t,scale69_t,scale69f_t,scale68f_t + .ref scale68t_t,scale68_t,scale611_t,scale610_t,scale611t_t + .ref scale610t_t,scale611f_t,scale610f_t,scale70t_t,scale70f_t + .ref scale70_t,scale71_t,scale72_t,scale76et_t,scale74_t,scale72f_t + .ref scalebighead_t + .ref plr_heads_small,plr_heads_small_end + .ref create_arrow_and_text_bar + + .ref HIDER1_P,OVERW_P + .ref create_pick_head_objs + .ref create_yes_no_buttons + .ref create_fog_image + .ref turn_off_name_objs +; .ref show_players_name + .ref create_name_objs + .ref create_information_box + .ref create_title_bar + .ref create_time_box + .ref create_dithering_patterns + .ref create_stats_area + .ref timedown_clock + .ref PSTATUS,IRQSKYE + .ref create_credit_plate,print_title + .ref del_select_arrow,clr_select_arrow_ram + .ref DEFAULT_t + .ref SM_HEADS_CNT + .ref nickname_img_tbl + + .ref do_scrn_transition + .ref CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref KILBGND,WIPEOUT,update_statbox_images + .ref pal_clean,amode_start,show_player_records + .ref BAKMODS,BGND_UD1 + .ref scrnrel_off,print_string_C2 + .ref mess_line_spacing,mess_objid + .ref setup_message + .ref delete_text + .ref dpageflip,dtype +;DJT Start + + .ref get_but_val_cur_mkplr + .ref get_but_val_down_mkplr + .ref get_stick_val_cur_mkplr + .ref get_stick_val_down_mkplr + +;DJT End + .ref pal_getf,obj_on,obj_off + .ref pal_set + .ref button_actions + .ref get_player_record,get_free_record,put_plr_record + .ref move_cursor,update_cursor + .ref save_selection + .ref pin_nbr_table,name_table + .ref force_selection + .ref create_menu + .ref update_yes_no_button_pals + .ref print_name,delete_name + + .ref print_goodbye_msg + .ref print_player_stats + .ref body_scale_table + .ref del_butn_info_text,del_butn_box_stuff + .ref print_butn_information + .ref print_body_dimensions +; .ref print_players_name + .ref create_a9_butn_instructions + .ref create_butn_instructions + .ref print_record_availablity_msg + .ref create_and_watch_credits + .ref bast8t_ascii,bast8tcyc_ascii + .ref wipe_horizontal,un_wipe_horizontal + .ref wipe_stack_vertical,un_wipe_vertical + .ref create_divider_bar + .ref create_small_yes_no_butns + .ref create_pin_nbr_objs + .ref print_privileges_info + .ref create_nick_names + .ref del_nick_names + .ref del_uniform_names,create_uniform_names + .ref mess_cursx,mess_cursy,message_ascii,message_palette + .ref message_buffer,mess_space_width,mess_objid + .ref dec_to_asc,concat_string,concat_rom_string,print_string_C + .ref get_all_records,sort_wins + + .ref ply_city_tbl + .ref PLYRAT_TBL_SIZE + .ref ltshoepal_t + .ref plyrpals_t + + .ref del_clock_objs + .ref scalehead_t + + .ref plyr_headalign2,anipt2_getsclxy + .ref anipt_getsclxy + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + .ref cursor_up,cursor_dwn,cursor_lft,cursor_rgt + .ref cursor_up2,cursor_dwn2,cursor_lft2,cursor_rgt2 + .ref cursor_up3,cursor_dwn3 + .ref butn_press,butn_press2 + .ref reset_yes_no_butn_pals + + .ref atrib_snd1,atrib_snd2,atrib_snd3,atrib_snd4,atrib_snd5 + .ref atrib_snd6,atrib_snd7,atrib_snd8,atrib_snd9,atrib_snd10 + .ref dribble2_snd + .ref unchkmrk_snd,chkmrk0_snd,bounce_snd + .ref print_changed_name_info + .ref tuneend_snd,tune_cap_snd + .ref AUD1 + .ref print_ask_chg_nme + .ref print_ask_exit + .ref plr_flesh_pal_tbl + .ref no_sp + .ref CYCLE_TABLE,BASTC_W_P +;DJT Start + .ref homeaway_cur +;DJT End + .ref nub_img_tbl + .ref SENDTO_P + + + .bss plyr_drib_cnt,16 + .bss bball_plr_obj,32 +;dont change order + .bss clock_minutes,16 + .bss clock_seconds,16 +;dont change order + .bss butn_cursor_pos,16 + .bss joy_pos,16 + .bss butn_objs,32*NUM_BUTTONS ;6 butns on screen + .bss butn_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_text_objs,32*NUM_BUTTONS + .bss butn_press_objs,32*NUM_BUTTONS + .bss butn_press_shadow_objs,(32*NUM_BUTTONS)*2 ;2 pieces for shadow + .bss butn_press_text_objs,32*NUM_BUTTONS + .bss repeat_cnt,16 + .bss repeat_rate,16 + + + .bss speed_points,16 ;0-10 attribute amount + .bss power_points,16 ;0-10 attribute amount + .bss shoot_points,16 ;0-10 attribute amount + .bss dunks_points,16 ;0-10 attribute amount + .bss steal_points,16 ;0-10 attribute amount + .bss block_points,16 ;0-10 attribute amount + .bss height_points,16 ;0-10 + .bss weight_points,16 ;0-10 + .bss total_points,16 ;MAXIUM hit points + .bss check_marks,16 + BSSX nick_name_nbr,16 + BSSX uniform_nbr,16 + + .bss big_attrib_bar_objs,((32*2)*NUM_ATTRIBS) ;left half/right half + .bss big_attrib_meter_objs,32*NUM_ATTRIBS + .bss plyr_attrib_meter_objs,32*6 + .bss attrib_cur_pos,16 + .bss prev_attrib_cur_pos,16 + .bss processing_butn,16 ;1=performing butn action + .bss select_arrow_obj,32 + .bss plyr_head_objs,32*NUM_HEADS ;5 visable heads + .bss plyr_big_head_obj,32 ;1 big heads + .bss plyr_dribble_head_obj,32 + .bss plyr_ball_obj,32 ;ptr. to dribbling basketball + .bss player_record_ptr,32 + .bss done_creating,16 ;exit flag + .bss changing_name,16 + .bss prev_butn_cur_pos,16 + .bss blink_cnt,16 + .bss dither_objs,32*4 + .bss dither_objs2,32*4 + .bss fog_obj_ptr,32 + .bss yes_no_buttons_ptr,32*2 + .bss stop_clock,16 ;1=yes, 0=no + .bss p1_slide_box_flag,16 + .bss p2_slide_box_flag,16 + .bss p3_slide_box_flag,16 + .bss p4_slide_box_flag,16 + .bss priv_cur_pos,16 + .bss plyr_head_nbr,16 + .bss privileges,16 ;each bit = privilege + .bss home_team,16 + + +REPEAT_RATE equ 3 +NOT_IN_HURRY equ 1 +SCALE_FCTR_NBR equ 30*64 +PLYR_X equ 330 +PLYR_Y equ 162 +GROUND_Y equ PLYR_Y+3 ;6'8" guy +HAND_Y equ PLYR_Y-47 ;6'8" guy +FIFTH_HEAD equ 5*32 + + .text + + +;----------------------------------------------------------------------------- +; This is the ENTRY POINT for the CREATE PLAYER option (at game start) +;----------------------------------------------------------------------------- + SUBR design_player + +;; movi player1_data,a6,L +;; JSRP show_player_records + + movi INPLYRDESIGN,a0 + move a0,@GAMSTATE + movk 1,a0 ;set cause must wait for plyr + move a0,@done_creating ;exit flag (1=dont exit, 0=exit) + + movi AUD_CREATED_PLR,a0 ;log it + calla AUD1 + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + SLEEPK 1 + + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + clr a0 ;kill all processes + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + calla get_all_records + calla sort_wins + + CREATE0 design_player_proc + +dp_1 SLEEPK 1 + move @done_creating,a0 ;exit flag (0=exit) + jrnz dp_1 + +;save players editing information in record + calla save_ram_to_player_record + + movi player1_data,a6,L + move @player_record_ptr,a10,L + calla put_plr_record + +;in case timed out! + callr del_butn_box_stuff + callr del_butn_info_text + callr del_select_arrow + callr del_privilege_bars + callr del_check_marks + callr del_uniform_names + calla del_nick_names + callr del_hit_points_fraction +; calla del_clock_objs + callr kill_flsh_txt_proc + + movi CYCPID,a0 + calla KIL1C + + movi TYPTEXT|SUBPL1,a0 + calla obj_del1c ;delete all objs with this ID + movi TYPTEXT|SUBPL1,a0 + ori 10h,a0 ;object ID + calla obj_del1c ;delete all objs with this ID + + SLEEPK 1 + + JSRP print_goodbye_msg + + SOUND1 tuneend_snd + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + SUBR design_player_proc_amode + + jruc gpn_1 ;Procs always wake up with A0=0! + +;DJT End + SUBR design_player_proc + + move @PSTATUS,a1 + cmpi 1,a1 ;player 1 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 2 + cmpi 2,a1 ;player 2 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 3 + cmpi 4,a1 ;player 3 ? + jreq gpn_1 ;br=yep + inc a0 ;assume player 4 +gpn_1 move a0,*a13(PC_PLAYNUM) + + clr a0 + move a0,@IRQSKYE ;BLACK background color + + movi create_player_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + calla create_credit_plate + + SOUND1 tune_cap_snd + + CREATE0 create_and_watch_credits + + clr a0 + move a0,@butn_cursor_pos + move a0,@joy_pos + move a0,@changing_name + + PUSH a12 + calla create_normal_buttons + calla update_button_palettes + calla update_button_shadow_palettes + PULL a12 + + clr a0 + calla create_title_bar + calla print_title + + calla create_information_box + calla create_stats_area + calla create_dithering_patterns + calla create_fog_image + + CREATE CLOCK_PID,timedown_clock + + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + SLEEPK 1 + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + + calla update_button_palettes + calla update_button_shadow_palettes +; +; Main button cursor control loop +; Read joystick +; +redj_1 + SLEEPK 1 + move @done_creating,a0 ;exit CREATE PLAYER...yet + jrz but_3 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ckj_1 ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne ckj_1 + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls jndn_1 ;br=no + +;okay, now we can check the joystick + +ckj_1 + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count + + cmpi JOY_UP,a0 ;joystick up ? + jrne jnup_1 ;br=nope + move @butn_cursor_pos,a0 + dec a0 + jrnn jr_1 + movk NUM_BUTTONS-1,a0 ;reset cursor position +jr_1 move a0,@butn_cursor_pos + SOUND1 cursor_up + jruc jbut_1 ;now check button states + +jnup_1 cmpi JOY_DOWN,a0 ;joystick down ? + jrne jndn_1 ;br=nope + move @butn_cursor_pos,a0 + inc a0 + cmpi NUM_BUTTONS,a0 ;number of butns + jrlo jr_2 + clr a0 ;reset cursor position +jr_2 move a0,@butn_cursor_pos + SOUND1 cursor_dwn + +jbut_1 + calla update_button_palettes ;only update when move + calla update_button_shadow_palettes + calla print_butn_information ;information about butn in box +jndn_1 + calla maybe_change_button_palette ;blinks the current button +; +; Read buttons +; + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq but_1 + cmpi PASS_BUTTON,a0 + jreq but_1 + cmpi SHOOT_BUTTON,a0 + jrne redj_1 ;br=no joystick or buttons +; +; Call action routine for button (based on table) +; +but_1 + SOUND1 butn_press + + CREATE0 fade_button_pals + callr del_butn_box_stuff + calla del_butn_info_text + calla create_butn_instructions + + move @butn_cursor_pos,a0 ;get hi-lited butn nbr. + sll 5,a0 ;mult. by 32 (index into tbl) + addi butn_routine_table,a0 ;point at routine + move *a0,a0,L ;get routine addr. + JSRPR a0 + + SOUND1 butn_press2 + + move @done_creating,a0 ;exit CREATE PLAYER... + jrz but_3 ;br=yep + + movk 10,a9 + callr create_a9_butn_instructions ;print 'CHOOSE OPTION' + calla print_butn_information ;information about butn in box + jruc redj_1 +but_3 + DIE + + +;----------------------------------------------------------------------------- +; called when SAVE & EXIT +;----------------------------------------------------------------------------- + SUBR save_ram_to_player_record + + movi player1_data,a6,L + move @total_points,a0 + move a0,*a6(PR_TOTAL_PTS) + move @height_points,a0 + move a0,*a6(PR_HEIGHT_PTS) + move @weight_points,a0 + move a0,*a6(PR_WEIGHT_PTS) + move @speed_points,a0 + move a0,*a6(PR_SPEED_PTS) + move @power_points,a0 + move a0,*a6(PR_POWER_PTS) + move @shoot_points,a0 + move a0,*a6(PR_SHOOT_PTS) + move @dunks_points,a0 + move a0,*a6(PR_DUNKS_PTS) + move @steal_points,a0 + move a0,*a6(PR_STEAL_PTS) + move @block_points,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + cmpi SM_HEADS_CNT,a0 + jrlo nok_0 + subi SM_HEADS_CNT,a0 +nok_0 move a0,*a6(PR_HEAD_NBR) + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_1 + subi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +nok_1 move a0,*a6(PR_NICKNAME_NBR) + + move @uniform_nbr,a0 + addi MIDDLE_UNIFORM_NBR,a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo nok_2 + subi NUM_UNIFORM_NAMES,a0 +nok_2 + move @home_team,a14 + jrz nok_2a ;br=away team + xori 40h,a0 ;set home team bit +nok_2a + move a0,*a6(PR_UNIFORM_NBR) + + move @privileges,a0 + move a0,*a6(PR_PRIVILEGES) + rets + +;----------------------------------------------------------------------------- +; called when FOUND record... +; +; +; INPUT: a6 = ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_ram_from_record + + move *a6(PR_CREATED_PLYR),a0 ;created this player ? + jrnz ipr_0 ;br=yep + movk 1,a0 + move a0,*a6(PR_CREATED_PLYR) ;creating this player + calla init_player_ram ;set ram defaults + jruc ipr_1 + +ipr_0 move *a6(PR_TOTAL_PTS),a0 + move a0,@total_points + move *a6(PR_HEIGHT_PTS),a0 + move a0,@height_points + move *a6(PR_WEIGHT_PTS),a0 + move a0,@weight_points ;this one moves by 2's + move *a6(PR_SPEED_PTS),a0 + move a0,@speed_points + move *a6(PR_POWER_PTS),a0 + move a0,@power_points + move *a6(PR_SHOOT_PTS),a0 + move a0,@shoot_points + move *a6(PR_DUNKS_PTS),a0 + move a0,@dunks_points + move *a6(PR_STEAL_PTS),a0 + move a0,@steal_points + move *a6(PR_BLOCKS_PTS),a0 + move a0,@block_points + + move *a6(PR_HEAD_NBR),a0 + subi MIDDLE_HEAD,a0 + jrge ipr_00 + addi SM_HEADS_CNT,a0 +ipr_00 move a0,@plyr_head_nbr + + move *a6(PR_NICKNAME_NBR),a0 + subi MIDDLE_NICK_NAME,a0 + jrge ipr_0a + addi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust +ipr_0a move a0,@nick_name_nbr + + move *a6(PR_UNIFORM_NBR),a0 + btst 6,a0 ;home team ? + jrz ipr_0b + andni 40h,a0 ;clr home team bit + movk 1,a14 + move a14,@home_team +ipr_0b + subi MIDDLE_UNIFORM_NBR,a0 + jrge ipr_0c + addi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust +ipr_0c move a0,@uniform_nbr + + move *a6(PR_PRIVILEGES),a0 + move a0,@privileges +ipr_1 rets + +;----------------------------------------------------------------------------- +; This routine sets the players record to default values... +; called when record NOT FOUND +; +; INPUT: a6=ptr. to player_data +;----------------------------------------------------------------------------- + SUBR init_player_record_and_ram + + move *a13(PC_DATADDR),a6,L ;start of player data + +;set defaults for player RECORD + movk 1,a0 ;no games + move a0,*a6(PR_CREATED_PLYR) ;created this player + + clr a0 + move a0,*a6(PR_COUNT) ;dont count as a free record yet + move a0,*a6(PR_TEAMSDEF) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_WINSTREAK) + movi 1024,a0 + move a0,*a6(PR_LASTPLAY) + + + SUBR init_player_ram + +;default attribute totals + movk 4,a0 + move a0,@speed_points + move a0,@power_points + move a0,@shoot_points + move a0,@dunks_points + move a0,@steal_points + move a0,@block_points +;DJT Start + movk 4,a0 ;6 +;DJT End + move a0,@height_points + movk 4,a0 + move a0,@weight_points ;this one moves by 2's + movi DEFAULT_HIT_PTS,a0 + move a0,@total_points + + clr a0 + move a0,@plyr_head_nbr + move a0,@nick_name_nbr + move a0,@uniform_nbr + move a0,@privileges + move a0,@home_team + rets + +;----------------------------------------------------------------------------- +; This routine plots images having to do with the CREATE_PLAYER buttons +; in their normal state +;----------------------------------------------------------------------------- + SUBR create_normal_buttons + + movi butn_setup_table,a10,L + movi butn_objs,a9,L + movi butn_shadow_objs,a11,L + movi butn_text_objs,a12,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTTON_PIECE,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +butns_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + +;left half of button shadow + move *a10+,a2,L ;ptr. to img + movi 7,a3 ;z pos (sorting) + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;right half of button shadow + move *a10+,a2,L ;ptr. to img + PUSH a0,a1 ;get coordinates + calla BEGINOBJ2 + PULL a0,a1 ;get coordinates + move a8,*a11+,L ;save obj. ptrs for shadows + +;button + move *a10+,a2,L ;ptr. to img + movi 10,a3 ;z pos (sorting) + movi BUTRED_P,b0 ;pal. to use for city imgs. + PUSH a0,a1 ;get coordinates + calla BEGINOBJP2 + PULL a0,a1 ;get coordinates + move a8,*a9+,L ;save obj. ptrs to butns + +;plot button text + + move *a10+,a1,L ;get Y pos + move *a10+,a2,L ;ptr. to img + movi 15,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,*a12+,L ;save obj. ptrs for text + + cmpi butn_setup_table_end,a10,L ;at end of table ? + jrlo butns_1 ;br=more butns to blit + rets + +;----------------------------------------------------------------------------- +; This routine handles the BLINKING of the currently hi-lited button +; +; called from 'button_cursor_control' +; called roughly every 2 ticks +;----------------------------------------------------------------------------- + SUBR maybe_change_button_palette + rets + +;----------------------------------------------------------------------------- +; This PROCESS fades the buttons palettes from bright back to normal color +;----------------------------------------------------------------------------- + SUBRP fade_button_pals + + move @butn_cursor_pos,a0 ;get current position + move a0,a1 + sll 5,a0 ;*32 + sll 6,a1 ;*64 (2 pieces for shadow) + addi butn_objs,a0,L ;ptr to button objs + addi butn_shadow_objs,a1,L ;ptr to button shadow objs + move *a0,a8,L ;ptr to hi-lited button + move *a1+,a9,L ;ptr to left half hi-lited butn shadow + move *a1,a10,L ;ptr to rght half hi-lited butn shadow + movi butn_fade_pals,a11,L +cbp_1 + move *a11+,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left half of button shadow pal + move a0,*a10(OPAL) ;change right half of button shadow pal + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) ;change button palette + + SLEEPK 2 + + cmpi butn_fade_pals_end,a11,L + jrlo cbp_1 + DIE + +butn_fade_pals + .long BSGRNF5_P,BTGRNF5_P ;1st for shadow, then button itself + .long BSGRNF5_P,BTGRNF5_P + .long BSGRNF4_P,BTGRNF4_P + .long BSGRNF3_P,BTGRNF3_P + .long BSGRNF2_P,BTGRNF2_P + .long BSGRNF1_P,BTGRNF1_P + .long BSHDGRN_P,BUTGRN_P +butn_fade_pals_end + +;----------------------------------------------------------------------------- +; This routine updates the BUTTON image palettes based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_palettes + + clr a3 ;count of butns re-adjusted + movi butn_objs,a9,L ;pt. at 1st butn in array +aip_1 move *a9+,a8,L ;ptr. to butn + movi BUTRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this button to-be hi-lited ? + jrne aip_2 ;br=no, normal palette + movi BUTGRN_P,a0,L +aip_2 calla pal_getf + move a0,*a8(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aip_1 + rets + +;----------------------------------------------------------------------------- +; This routine updates the buttons' shadow palette based on cursor position +;----------------------------------------------------------------------------- + SUBR update_button_shadow_palettes + + clr a3 ;count of buttons re-adjusted + movi butn_shadow_objs,a9,L ;pt. at 1st butn in array +aisp_1 move *a9+,a8,L ;ptr. to left shadow piece + move *a9+,a10,L ;ptr. to rght shadow piece + movi BSHDRED_P,a0,L + move @butn_cursor_pos,a2 + cmp a3,a2 ;is this butn to-be hi-lited ? + jrne aisp_2 ;br=no, normal palette + movi BSHDGRN_P,a0,L +aisp_2 calla pal_getf + move a0,*a8(OPAL) + move a0,*a10(OPAL) + inc a3 + cmpi NUM_BUTTONS,a3 + jrlo aisp_1 + rets + +;----------------------------------------------------------------------------- +; This PROCESS does everything to do with the basketball player dribbling +;----------------------------------------------------------------------------- + SUBR plyr_dribbling_ball + +; +; This 'CZMAX' is really an index into the current scale table. This 'Z' has +; the bball player closest to the player (Big) +; + movi CZMAX,a3 + movi DMAWNZ|M_3DQ,a4 + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create player dribbling ball frame 1 (at correct SCALE) +; + movi [PLYR_X,0],a0 ;X coor. + movi [PLYR_Y,0],a1 ;Y coor. + movi W5BGDR1,a2,L + calla BEGINOBJ2 + move a8,@bball_plr_obj,L +; +; Create player's head +; + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;HEAD table ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + movi [346,0],a0 ;x val + movi [70,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_dribble_head_obj,L + + callr my_build_plr_pal ;setup default pal. +; +; Create basketball +; + clr a7 + movi NBALL601,a2,L ;ball61 + movi [300,0],a0 ;X coor. + movi [116,0],a1 ;Y coor. + movi CZMAX+5,a3 + calla BEGINOBJ ;BEGINOBJP2 + move a8,@plyr_ball_obj,L ;save ptr. to basketball + + callr update_player_body_size + + move @bball_plr_obj,a8,L + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + SLEEPK 1 + + move @bball_plr_obj,a8,L + move @plyr_ball_obj,a10,L +abp_0 movi drib_seq_tbl2,a9,L + +;ball setup + calla anipt2_getsclxy ;get BALL scaled X,Y ani. pt + move *a8(OXVAL),a14,L ;get PLAYER X + add a0,a14 + subi 60000h,a14 ;move left a tad + move a14,*a10(OXVAL),L ;snap ball to position + + move *a8(OYVAL),a14,L ;get PLAYER Y + add a1,a14 + move a14,*a10(OYVAL),L ;snap ball to position + + callr get_ball_vel + move a1,*a10(OYVEL),L + +abp_1 + SLEEPK 1 + + move *a9+,a14,L ;get new frame + move *a14(0),*a8(OSIZE),L + move *a14(ISAG),*a8(OSAG),L ;next dribble frame + + move @plyr_dribble_head_obj,a6,L + calla plyr_headalign2 + + move @plyr_dribble_head_obj,a6,L + move *a6(OXPOS),a0 + move *a9+,a14,W ;get head offset + add a14,a0 + move a0,*a6(OXPOS) + +; move *a9+,a11,W ;get sleep time +;abp_1a +; SLEEPK 1 + + move *a10(OIMG),a2,L + move *a2(IANIOFFY),a3 + move *a10(OYPOS),a1 + move *a10(OYVEL),a0,L + add a3,a1 ;Y center of ball + cmpi GROUND_Y,a1 + jrlt abv_grnd + + PUSH a0 + SOUND1 dribble2_snd + PULL a0 + + neg a3 + addi GROUND_Y,a3 + move a3,*a10(OYPOS) ;Set on gnd + neg a0 + move a0,a14 ;75% + sra 2,a14 ;/4 + sub a14,a0 +abv_grnd + addi GRAVB,a0 + move a0,*a10(OYVEL),L + +; dsj a11,abp_1a + + move *a9,a14,L + jrnz abp_1 + jruc abp_0 + + + + .asg 72,Y_VEL_K + +;----------------------------------------------------------------------------- +; This routine calc. the velocity for the basketball +; +; INPUT: +; a8 - ptr. to player obj +; a14 - y pos of player hand anim. pt. +; +; RETURN: a1 - ball velocity +;----------------------------------------------------------------------------- + SUBR get_ball_vel + + move *a8(ODATA_p),a0,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addi 48,a0 ;get Y % + + move *a0,a0 + movi Y_VEL_K,a1 + mpys a0,a1 +; move @plyr_ball_obj,a14,L +; move a1,*a10(OYVEL),L + rets + +; +; Table contains: +; 1) player dribble image +; 2) new head offset +; +drib_seq_tbl2 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 +; LW W5BGDR2, 0 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR3, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR4, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR5, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR6, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR7, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR8, 1 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR9, 0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR10,0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW W5BGDR1, 0 + LW 0,0 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR stats_area_setup + + movi 115,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PLAYER_PIECE,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +; +; Create Stats names (attributes) +; + movi [292,0],a0 ;x val + movi [206,0],a1 ;y val + movi ATTRIBS,a2,L + calla BEGINOBJ2 +; +; Create small Attribute meters for player dribbling ball +; + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects + movk 6,a11 ;nbr. of bar to blit + movi [207,0],a1 ;initial y val +bar_1 PUSH a0,a1 + movi [330,0],a0 ;x val + movi ATTBAR00,a2,L + calla BEGINOBJ2 + move a8,*a10+,L ;save img. ptr. + PULL a0,a1 + addi [6,0],a1 + dec a11 + jrne bar_1 + callr print_entered_name + calla print_body_dimensions + calla update_plyr_attrib_bar_imgs + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_entered_name + + movi SBOXX+66,a0 + movi SBOXY+2,a1 + movi player1_data,a4 + calla print_name ;in small font + rets + +;----------------------------------------------------------------------------- +; This routine sets the scaling factor for the players BODY and HEAD based +; on the HEIGHT and WEIGHT attributes +;----------------------------------------------------------------------------- + SUBRP update_player_body_size + + PUSH a0,a1 + move @height_points,a0 ;get current height of player + sll 5,a0 + addi body_scale_table,a0,L + move *a0,a0,L ;get scale table ptr. + + move @weight_points,a1 ;get current WEIGHT factor + srl 1,a1 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a1 + add a1,a0 +upis_2 +;body + move @bball_plr_obj,a8,L + move *a0,a1,L ;get scale factor table ptr. + move a1,*a8(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get BODY scale factor + move a1,*a8(OSCALE),L ;scale BODY + + + .ref anipt_getsclxy + calla anipt_getsclxy ;get old XY ani's + srl 16,a0 + srl 16,a1 + neg a0 + neg a1 + addi PLYR_X,a0 + addi PLYR_Y,a1 + move a0,*a8(OXPOS),L ;scale BODY + move a1,*a8(OYPOS),L ;scale BODY + +;head + callr update_player_head_size + + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP update_player_head_size + + move @plyr_dribble_head_obj,a0,L ;scale HEAD + + movi scalehead_t,a1,L + move @privileges,a14 + btst 2,a14 + jrz uphs_1 ;br=big head not selected + movi scalebighead_t,a1,L + +uphs_1 move a1,*a0(ODATA_p),L + addi SCALE_FCTR_NBR,a1 + move *a1,a1,L ;get HEAD scale factor + move a1,*a0(OSCALE),L + rets + + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBRP show_players_stats_cursor_cntrl + + movk 5,a0 + calla create_divider_bar + JSRP print_player_stats + calla del_butn_info_text ;delete directions + calla del_butn_box_stuff + RETP + + +;----------------------------------------------------------------------------- +; action routine for button +; This controls the cursor and picking head and flesh tone for body +;----------------------------------------------------------------------------- + SUBRP pick_plyr_head_cntrl + + callr create_selectable_heads ;create 5 visible heads + calla create_pick_head_objs + + clr a0 + move a0,@joy_pos + calla clr_select_arrow_ram + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat + + callr create_head_nbr_msg + callr create_head_nbr_fraction + callr update_selectable_heads +; +; Read joystick +; +pph_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pph_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pph_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pph_1a ;br=no auto repeat... + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pph_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pph_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pph_1b +pph_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pph_1b move a0,@joy_pos + +; +; Left ? +; +pph_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne pph_4 + + move @plyr_head_nbr,a0 + dec a0 + jrnn pph_3a + movi SM_HEADS_CNT-1,a0 +pph_3a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_left_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_lft + jruc pph_5 +; +; Right ? +; +pph_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pph_5a + + move @plyr_head_nbr,a0 + inc a0 + cmpi SM_HEADS_CNT,a0 + jrlo pph_4a + clr a0 +pph_4a move a0,@plyr_head_nbr + + callr update_selectable_heads + callr update_dribbling_player_head + calla create_rght_arrow + callr del_hit_points_fraction + callr create_head_nbr_fraction + callr my_build_plr_pal ;setup default pal. + SOUND1 cursor_rgt + jruc pph_5 +pph_5a + calla del_select_arrow +; +; Read buttons (for exit) +; +pph_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pph_6 + cmpi PASS_BUTTON,a0 + jreq pph_6 + cmpi SHOOT_BUTTON,a0 + jrne pph_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pph_6 + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; Creates the object ptrs. for the 3 heads during 'HEAD' button action +;----------------------------------------------------------------------------- + SUBR create_selectable_heads +; +; Create X small heads +; + movi plyr_head_objs,a9,L + movi plr_heads_small,a10,L + movk NUM_HEADS,a3 ;nbr. of heads to create + movi [BBOXX+20,0],a0 ;x val of first head + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel +cpph_1 + PUSH a0,a3 + movi [BBOXY+98,0],a1 ;y val + move *a10+,a2,L ;* head image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + sll 4,a3 + addi xpos_head_tbl,a3 + move *a3,a3,W + + calla BEGINOBJ2 + move a8,*a9+,L + PULL a0,a3 + addi 001c0000h,a0,L ;add to X position (spacing) + dsj a3,cpph_1 ;more heads ? + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi nub_img_tbl,a0 + move *a0,a2,L + movi [BBOXX+37,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + movi 82,a3 ;z pos + calla BEGINOBJ2 +; +; Create 1 Big head version of the hi-lited small head (mugshot) +; + movi 80,a3 ;z pos + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 ;offset into HEAD table + addi create_plr_mugshots_tbl,a0,L + move *a0,a2,L ;* BIG head image + movi [BBOXX+52,0],a0 ;x val + movi [BBOXY+188,0],a1 ;y val + calla BEGINOBJ2 + move a8,@plyr_big_head_obj,L + rets + + +xpos_head_tbl + .word 80,80,81,85,81,80 + + +;----------------------------------------------------------------------------- +; called by 'HEAD' button action during CREATE PLAYER, as the player +; moves the joystick the HEADS change +;----------------------------------------------------------------------------- + SUBR update_selectable_heads +; +; Update the little heads as the players moves joystick +; + movi plyr_head_objs,a9,L + move @plyr_head_nbr,a10 + sll 5,a10 ;offset into HEAD table + addi plr_heads_small,a10,L + + movk NUM_HEADS,a3 ;nbr. of heads to created +upph_1 move *a9+,a8,L ;ptr. old image + move *a10+,a2,L ;ptr. new image + + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + + callr update_head + dec a3 ;more heads ? + jrne upph_1 ;br=yes +; +; Update the MUGSHOT head to match the hi-lited (middle) small head +; + movi plyr_big_head_obj,a8,L + move @plyr_head_nbr,a10 + addi MIDDLE_HEAD,a10 + sll 5,a10 ;offset into HEAD table + addi create_plr_mugshots_tbl,a10,L + move *a10,a2,L ;ptr. NEW big head image + move *a8,a8,L ;ptr. OLD big head image + callr update_head + rets + +;----------------------------------------------------------------------------- +; This routine changes the head on the player dribbling the ball to the +; currently hi-lighted head. +; +; INPUT: a2 = ptr. to hi-lighted head +;----------------------------------------------------------------------------- + SUBR update_dribbling_player_head + + move @plyr_head_nbr,a0 + addi MIDDLE_HEAD,a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a2,L ;get NEW HEAD img ptr. + addi FIFTH_HEAD,a2 ;pt to 5th frame + move *a2,a2,L ;get frame 5 from table + move @plyr_dribble_head_obj,a8,L ;get OLD image ptr. + callr update_head + rets + +;----------------------------------------------------------------------------- +; INPUT: reg a2: new head img ptr +; reg a8: old head img ptr +;----------------------------------------------------------------------------- + SUBR update_head + +;update bits per pixel + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a2(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move *a2(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + + move a2,a0 + move *a8(OFLAGS),a1 + calla obj_aniq + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_head_nbr_msg + + movi head_nbr_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi head_nbr_str,a4,L + calla print_string_C2 + rets + +head_nbr_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+49,BAST_W_P,0 + +head_nbr_str + .string "head number:",0 + .even + + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during CHOOSE HEAD option +;----------------------------------------------------------------------------- + SUBR create_head_nbr_fraction + + movi BBOXX+118,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+49,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi SM_HEADS_CNT,a1 ;max value + move @plyr_head_nbr,a0 + inc a0 ;non-zero relative + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi SM_HEADS_CNT,a1 ;max value + move a1,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + rets + +;----------------------------------------------------------------------------- +; +; +; RETURNS: a14 - total points used +;----------------------------------------------------------------------------- + SUBR compute_hit_points_used + + clr a14 + move @height_points,a0 + add a0,a14 + move @weight_points,a0 + add a0,a14 + move @speed_points,a0 + add a0,a14 + move @power_points,a0 + add a0,a14 + move @shoot_points,a0 + add a0,a14 + move @dunks_points,a0 + add a0,a14 + move @steal_points,a0 + add a0,a14 + move @block_points,a0 + add a0,a14 + rets + +;----------------------------------------------------------------------------- +; RETURNS: a14 - hit points remaining +;----------------------------------------------------------------------------- + SUBR compute_hit_points_left + + callr compute_hit_points_used + move a14,a0 + move @total_points,a14 + sub a0,a14 + rets + + + + .asg BBOXX+78,ATTRX ;for the attribute bars + .asg BBOXY+66,ATTRY ;for the attribute bars + .asg 8,ATTR_MTR_SPC_Y + .asg ATTRX+49,ATTRX2 ;for the attribute meters + .asg 0,ATR_Y ;table positions + .asg 32,ATR_IMG1 + .asg 64,ATR_IMG2 + .asg 32*3,ATTR_TBL_LINE_SIZE + +;----------------------------------------------------------------------------- +; This routine changes the palette for both pieces of the current +; attribute bar and the previous (based on cursor position) +;----------------------------------------------------------------------------- + SUBR update_attrib_bar_palettes + +;update previous attribute bar palette + move @prev_attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARW_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + +;update current attribute bar palette + move @attrib_cur_pos,a10 + sll 6,a10 ;*64 (each bar 2 pieces) + addi big_attrib_bar_objs,a10,L + move *a10+,a9,L ;get ptr. to LEFT piece (name) + move *a10,a10,L ;get ptr. to RIGHT piece (bar) + movi ATTBARO_P,a0,L + calla pal_getf + move a0,*a9(OPAL) ;change left pieces's pal + move a0,*a10(OPAL) ;change right pieces's pal + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bar_meters + + movi NUM_ATTRIBS,a10 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [ATTRY+ATTR_MTR_SPC_Y,0],a1 ;1st Y val. + movi big_attrib_meter_objs,a9,L ;array for METER objects + +;plot attribute bar notches +crabn_1 + move a1,a11 + movi [ATTRX-12,0],a0 ;x val. + movi NOTCH_01,a2,L ;* image + movk 25,a3 ;z pos (under dithering pattern) + calla BEGINOBJ2 + move a8,*a9+,L ;save ptr. to BIG ATTRIB. NOTCHES + move a11,a1 + addi [ATTR_MTR_SPC_Y+9,0],a1 + dsj a10,crabn_1 + rets + +;----------------------------------------------------------------------------- +; plot attribute name, bar outline and bars from table these graphics are +; used when ADJUSTING ATTRIBUTES +;----------------------------------------------------------------------------- + SUBR create_big_attrib_bars + + movi NUM_ATTRIBS,a10 + movi attribute_setup_table,a9,L + movi big_attrib_bar_objs,a11,L ;array for attrib. bar pieces + + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +nxatt_1 +;plot attribute bar names (left half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG1),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + +;plot attribute bar ends (right half of bar) + movi [ATTRX,0],a0,L ;get X val + move *a9(ATR_Y),a1,L ;get Y val + move *a9(ATR_IMG2),a2,L ;* image + calla BEGINOBJ2 + move a8,*a11+,L + + addi ATTR_TBL_LINE_SIZE,a9 ;32*3 - # table element in line + dsj a10,nxatt_1 ;br=more to plot + rets + +;----------------------------------------------------------------------------- +; Updates the attribute bars while player is ADJUSTING them....also updates +; the bars underneath the player dribbling the ball +;----------------------------------------------------------------------------- + SUBR update_attribute_bars + + movi attrib_ram_value_ptr_table,a2,L ;table of value of bars + movi big_attrib_meter_objs,a10,L ;array for BIG bar objects + clr a4 +uab_1 + move *a10+,a8,L ;get ptr to next bar obj. + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi big_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi NUM_ATTRIBS-1,a4 ;more elements to update ? + jrls uab_1 ;br=yes + + calla update_plyr_attrib_bar_imgs + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_plyr_attrib_bar_imgs + + clr a4 + movi attrib_ram_value_ptr_table2,a2,L + movi plyr_attrib_meter_objs,a10,L ;array for BAR objects +updab_1 + move *a10+,a8,L ;get plyr. dribble attr. bar obj + + move *a2+,a1,L ;a1=addr. of VALUE to upate + move *a1,a3,W ;a3=value + + sll 5,a3 + addi small_attrib_bar_img_tbl,a3,L + move *a3,a0,L ;get img. ptr. + PUSH a1 + move *a8(OCTRL),a1 + calla obj_aniq ;change object image + PULL a1 + + inc a4 + cmpi 5,a4 ;more elements to update ? + jrls updab_1 ;br=nope + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_hit_points_fraction + + movi CYCPID,a0 + calla KIL1C + + movi HIT_PTS_FRACTION,a0,L + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Creates the images for XX/XX during adjust players attribute +;----------------------------------------------------------------------------- + SUBR create_hit_points_fraction + + movi total_points_str_setup,a2,L + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movi total_points_str,a4,L + calla print_string_C2 + + movi BBOXX+115,a0 + move a0,@mess_cursx ;message cursor pos X + movi BBOXY+56,a1 + move a1,@mess_cursy ;message cursor pos Y + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + move a0,*a3(20h),L ;null terminate + + movi 99,a1 ;max value + callr compute_hit_points_left + move a14,a0 + calla dec_to_asc + calla concat_string + + movi str_slash,a4 + calla concat_rom_string + + movi 99,a1 ;max value + move @total_points,a0 + calla dec_to_asc + calla concat_string + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 + move a0,@mess_space_width ;space char width + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + calla print_string_C + +; CREATE FLSH_TXT_PID,change_pal_on_text + rets + + +total_points_str_setup + PRINT_STR bast8t_ascii,4,0,BBOXX+48,BBOXY+56,BAST_W_P,0 + +total_points_str + .string "total points:",0 + .even + +;BASTCYCWP: +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; +; .word 07fffh,07bdeh,077bdh,0739ch,0739ch,06f7bh +; .word 06b5ah,06739h,06318h,05ef7h,05ad6h,05ef7h,06318h,06739h +; .word 06f7bh,0739ch,077bdh,07bdeh,07bdeh,077bdh,06f7bh,06b5ah +; .word 06318h,06739h,06f7bh,0739ch,077bdh,07bdeh,0739ch,06f7bh +; .word 06b5ah,06739h,05ef7h,05ad6h,05ef7h,05ef7h,06318h,06739h +; .word 06739h,06b5ah,06b5ah,06f7bh,0739ch,0739ch,077bdh,07bdeh +; .word 07bdeh,07fffh +; .word -1 +; .even + + + +;----------------------------------------------------------------------------- +; +; +; INPUT: reg. a10 - ID of obj. to look for +;----------------------------------------------------------------------------- + SUBR change_pal_on_text + + movi BAST_W_P,a0,L + calla pal_getf + move a0,a8 + movi BAST_R_P,a0,L + calla pal_getf + move a0,a9 +cpof_0 + SLEEPK 9 + +; move @done_creating,a14 ;exit flag (0=exit) +; jrz cpof_6 + + movi OBJLST,a1 + move *a1,a1,L ;get next obj. ptr + jrz cpof_5 ;br=no obj. list +cpof_1 + move *a1(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne cpof_2 ;br=nope + + move *a1(OPAL),a14 + cmp a8,a14 ;white pal ? + jrne cpof_1a ;br=no + move a9,*a1(OPAL),L + jruc cpof_2 +cpof_1a + cmp a9,a14 ;red pal ? + jrne cpof_2 + move a8,*a1(OPAL),L + +cpof_2 move *a1,a1,L + jrnz cpof_1 +cpof_5 + jruc cpof_0 + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_flsh_txt_proc + + movi FLSH_TXT_PID,a0 + calla KIL1C ;kill clock timer + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP attribute_cursor_cntrl + + clr a0 + calla create_divider_bar +; callr create_total_points_msg + callr create_hit_points_fraction + callr create_big_attrib_bars + callr create_big_attrib_bar_meters + + clr a0 + move a0,@prev_attrib_cur_pos + move a0,@attrib_cur_pos + move a0,@joy_pos + move a0,@repeat_cnt + callr update_player_body_size + callr update_attribute_bars + calla update_attrib_bar_palettes + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +acc_1 + SLEEPK 1 + move @done_creating,a0 + jrz acc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq acc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne acc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls acc_5 ;br=no + +acc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne acc_2 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + dec a0 + jrnn acc_2a + movi NUM_ATTRIBS-1,a0 ;reset cursor position +acc_2a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_up2 + jruc acc_5 +; +; Down ? +; +acc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne acc_3 ;br=nope + move @attrib_cur_pos,a0 + move a0,@prev_attrib_cur_pos ;save before change + inc a0 + cmpi NUM_ATTRIBS,a0 ;nbr of attributes to adjust + jrlo acc_3a + clr a0 ;reset cursor position +acc_3a move a0,@attrib_cur_pos + calla update_attrib_bar_palettes + SOUND1 cursor_dwn2 + jruc acc_5 +; +; Left ? +; +acc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne acc_4 + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MIN_VALUE,a2 ;at minimum ? + jrle acc_5 ;br=yes, change nothing... + + dec a2 ;sub. pts. from attrib. value + +;make sure attribute value is valid after subtraction + jrn acc_5 ;br= value negative, ignore + move a2,*a1,W ;save new value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction + jruc acc_5 +; +; Right ? +; +acc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne acc_5 + +;first check to see if player has points to allocate + + callr compute_hit_points_left + move a14,a14 ;does player have points ? + jrnz acc_4a ;br=nope +; jrz acc_5 ;br=nope + + SOUND1 no_sp + jruc acc_5 +acc_4a + + move @attrib_cur_pos,a0 ;use as index into table + sll 5,a0 ;mult. by 32 (1 long) + addi attrib_ram_value_ptr_table,a0,L + + move *a0,a1,L ;a1=addr. of VALUE to upate + move *a1,a2,W ;get value + +;check bounds + cmpi ATTRIB_MAX_VALUE,a2 ;attribute value at max ? + jrhs acc_5 ;br=yes...change nothing + +;make sure points used wont grow beyond TOTAL_POINTS limit + + callr compute_hit_points_used + inc a14 + move @total_points,a0 + cmp a0,a14 ;at or beyond MAXIMUN ? + jrhi acc_5 ;br=yep + + inc a2 + move a2,*a1,W ;save new attribute value + + callr make_adj_atrib_snd + + callr update_player_body_size + calla print_body_dimensions + callr update_attribute_bars + callr del_hit_points_fraction + calla create_hit_points_fraction +; +; Read buttons (for exit) +; +acc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + cmpi TURBO_BUTTON,a0 + jreq acc_6 + cmpi PASS_BUTTON,a0 + jreq acc_6 + cmpi SHOOT_BUTTON,a0 + jrne acc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +acc_6 + callr kill_flsh_txt_proc + calla del_butn_box_stuff + callr del_hit_points_fraction + RETP + + +;----------------------------------------------------------------------------- +; This routine plays a sounds based on the attribute level +; +; INPUT: reg a2 - attrib value +;----------------------------------------------------------------------------- + SUBR make_adj_atrib_snd + + sll 5,a2 + addi atrib_adj_snd_tbl,a2 + move *a2,a0,L + calla snd_play1 + rets + +atrib_adj_snd_tbl + .long atrib_snd1 ;0 + .long atrib_snd1 ;1 + .long atrib_snd2 ;2 + .long atrib_snd3 ;3 + .long atrib_snd4 ;4 + .long atrib_snd5 ;5 + .long atrib_snd6 ;6 + .long atrib_snd7 ;7 + .long atrib_snd8 ;8 + .long atrib_snd9 ;9 + .long atrib_snd10 ;10 + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_privilege_bars + + movi PRIVILEGE_OBJS,a0,L + clr a1 + calla obj_del1c + rets + + + .asg 0,XCOOR + .asg 32,YCOOR + .asg 64,IMGPTR + .asg 96,IMGPTR2 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_privilege_bars + + movi 80,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi PRIVILEGE_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + movi privilege_setup_tbl,a9,L +cpb_1 + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR),a2,L ;get left half of bar + + movi PRIV_W_P,b0,L + move @priv_cur_pos,a14 +; jrnz cpb_1a ;cant test bit 0 for 1 +; move a10,a10 +; jrz cpb_1b +; +cpb_1a btst a10,a14 + jrz cpb_2 +cpb_1b movi PRIV_O_P,b0,L ;hilit current privilege +cpb_2 + move b0,a11 + calla BEGINOBJP2 + + move *a9(XCOOR),a0,L ;get X coor + move *a9(YCOOR),a1,L ;get Y coor + move *a9(IMGPTR2),a2,L ;get left half of bar + move a11,b0 + calla BEGINOBJP2 + + inc a10 + addi LNE_LGTH,a9,L + cmpi privilege_setup_tbl_end,a9,L + jrlo cpb_1 + rets + + + .asg BBOXX+76,PRIV_BARX + .asg BBOXY+78,PRIV_BARY + .asg PRIV_BARY-9,CHK_MRK_Y + .asg 18,PRIV_SPC + +privilege_setup_tbl + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_NTA +privilege_setup_tbl2 + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_DBH + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR + .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_SD +privilege_setup_tbl_end + +;privilege_setup_tbl +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*0,0],PRVLGCK1,TEX_BB +;privilege_setup_tbl2 +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*1,0],PRVLGCK1,TEX_ST +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*2,0],PRVLGCK1,TEX_BH +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*3,0],PRVLGCK1,TEX_HA +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*4,0],PRVLGCK1,TEX_SD +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*5,0],PRVLGCK1,TEX_SR +; .long [PRIV_BARX,0],[PRIV_BARY+PRIV_SPC*6,0],PRVLGCK1,TEX_BD +;privilege_setup_tbl_end + +LNE_LGTH equ (privilege_setup_tbl2-privilege_setup_tbl) +NUM_PRIVILEGES equ (privilege_setup_tbl_end-privilege_setup_tbl)/(32*4) + + + .asg 2,MAX_CHK_MRKS + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR toggle_check_mark + + move @privileges,a0 + move @priv_cur_pos,a10 ;use as index into table + move a10,a14 +tcm_0 + and a0,a14 + jrz tcm_3 ;br=not check mark at this pos. + +;clear bit (privilege) +tcm_2 + xor a10,a0 + + move @check_marks,a14 + jrz tcm_5 + dec a14 + move a14,@check_marks + move a0,@privileges + SOUND1 unchkmrk_snd + jruc tcm_4 + + +;set bit (privilege) +tcm_3 + or a10,a0 + + move @check_marks,a14 + cmpi MAX_CHK_MRKS,a14 + jrhs tcm_5 + inc a14 + move a14,@check_marks + move a0,@privileges + SOUND1 chkmrk0_snd +tcm_4 + callr del_check_marks + callr create_check_marks +tcm_5 + callr update_player_head_size + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_check_marks + + PUSH a12 + movi 90,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CHECK_MRK_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi CHECK,a2,L ;'CHECK' mark img. + movi NUM_PRIVILEGES,a10 + clr a11 + clr a12 ;nbr of check marks created + move @privileges,a9 +cmrks_1 + srl 1,a9 ;check mark ? + jrnc cmrks_2 ;br=nope + move a11,a14 + sll 6,a14 + addi check_mark_xys,a14 + move *a14+,a0,L ;get X coor. + move *a14,a1,L ;get Y coor. + calla BEGINOBJ2 +cmrks_2 + inc a11 + dsj a10,cmrks_1 +cmrks_3 PULL a12 + rets + + +check_mark_xys + .long [BBOXX+16,0],[CHK_MRK_Y,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*1,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*2,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*3,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*4,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*5,0] + .long [BBOXX+16,0],[CHK_MRK_Y+PRIV_SPC*6,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_check_marks + + movi CHECK_MRK_OBJS,a0,L + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; ACTION routine for button +; This controls the cursor and increasing/decreasing of attributes +;----------------------------------------------------------------------------- + SUBRP plyr_privileges_cursor_cntrl + + movk 3,a0 + calla create_divider_bar + + movi NUM_PRIVILEGES,a14 ;nbr of privilegs + move @privileges,a0 + clr a1 +ppcc_0 + srl 1,a0 + jrnc ppc_0a + inc a1 +ppc_0a dsj a14,ppcc_0 + move a1,@check_marks + + movk 1,a0 + move a0,@priv_cur_pos + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt + callr create_privilege_bars + calla print_privileges_info + callr create_check_marks + + movi BUTN_PRIV_INST,a10 + CREATE FLSH_TXT_PID,change_pal_on_text +; +; Read joystick +; +ppcc_1 + SLEEPK 1 + move @done_creating,a0 + jrz ppcc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq ppcc_1a ;br=nope, check buttons + + move @joy_pos,a14 + cmp a14,a0 + jrne ppcc_1a ;br=different direction + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY/2,a1 ;repeat yet ? + jrls ppcc_5 ;br=no + +ppcc_1a + move a0,@joy_pos + clr a1 + move a1,@repeat_cnt ;reset repeat count +; +; Up ? +; + cmpi JOY_UP,a0 ;joystick up ? + jrne ppcc_2 ;br=nope + move @priv_cur_pos,a0 + cmpi 1,a0 + jreq ppcc_5 ;br=dont go any higher + srl 1,a0 +ppcc_2a move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_up2 + jruc ppcc_5 +; +; Down ? +; +ppcc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne ppcc_3 ;br=nope + movi NUM_PRIVILEGES-1,a14 ;nbr of privileges + move @priv_cur_pos,a0 + btst a14,a0 ;at end ? + jrnz ppcc_5 ;br=dont go beyond bottom + + subk 1,a14 ;1 away from botton + + btst a14,a0 ;at 1 away from end ? + jrz ppcc_22 ;br=no + + move @total_points,a1 +;DJT Start + cmpi 60,a1 ;Smart drone minimum +;DJT End + jrge ppcc_22 ;br=not enough points... + SOUND1 no_sp + jruc ppcc_5 +ppcc_22 + sll 1,a0 + move a0,@priv_cur_pos + callr del_privilege_bars + callr create_privilege_bars + SOUND1 cursor_dwn2 + jruc ppcc_5 +; +; Left ? +; +ppcc_3 cmpi JOY_LEFT,a0 ;joystick left ? + jrne ppcc_4 + callr toggle_check_mark + jruc ppcc_5 +; +; Right ? +; +ppcc_4 cmpi JOY_RIGHT,a0 ;joystick right ? + jrne ppcc_5 + callr toggle_check_mark +; +; Read buttons (for exit) +; +ppcc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq ppcc_6 + cmpi PASS_BUTTON,a0 + jreq ppcc_6 + cmpi SHOOT_BUTTON,a0 + jrne ppcc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +ppcc_6 + calla del_butn_box_stuff + callr kill_flsh_txt_proc + callr del_privilege_bars + callr del_check_marks + RETP + +;----------------------------------------------------------------------------- +; This routine build the player palette +; +; INPUT : reg a7 - ptr. to uniform pals (attribute table) +; reg a8 - plyr obj. ptr +; +;----------------------------------------------------------------------------- + SUBR my_build_plr_pal + + PUSH a1,a2,a3,a7,a8 + move @home_team,a3 + + move @uniform_nbr,a7 +; andni 01000000b,a7 ;clr HOME team bit + addi MIDDLE_UNIFORM_NBR,a7 + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L + + move @bball_plr_obj,a8,L ;save ptr. to basketball + clr a0 + move a0,*a8(OPAL) + calla pal_clean ;get rid of old pal. + + movi plyrpals_t,a2,L + + movi 128,a0 + move a0,*a2+ ;Set # colors + + move @plyr_head_nbr,a14 + addi MIDDLE_HEAD,a14 + sll 5,a14 + addi plr_flesh_pal_tbl,a14,L + move *a14,a1,L + + move *a1+,a0 +#plflp move *a1+,*a2+ + dsjs a0,#plflp + + move *a7(PAT_PALT_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm1 + move *a7(PAT_PALT2_p),a1,L ;Copy trim +#awytm1 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlp move *a1+,*a2+ + dsjs a0,#pltlp + + move *a7(PAT_PALU_p),a1,L ;Copy uniform + btst 0,a3 + jrz #awytm2 + move *a7(PAT_PALU2_p),a1,L ;Copy uniform +#awytm2 + move *a1+,a0 + addk 16,a1 +#plulp move *a1+,*a2+ + dsjs a0,#plulp + subk 16,a2 + + movi ltshoepal_t,a1 ;Copy shoes + movk 13,a0 ;# In shoe pal +#plslp move *a1+,*a2+ + dsjs a0,#plslp + + move *a7(PAT_PALSW_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm3 + move *a7(PAT_PALSW2_p),a1,L ;Copy trim +#awytm3 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpa move *a1+,*a2+ + dsjs a0,#pltlpa + + move *a7(PAT_PALVP_p),a1,L ;Copy trim + btst 0,a3 + jrz #awytm4 + move *a7(PAT_PALVP2_p),a1,L ;Copy trim +#awytm4 + move *a1+,a0 + addk 16,a1 + subk 1,a0 +#pltlpb move *a1+,*a2+ + dsjs a0,#pltlpb + + movi plyrpals_t,a0,L + calla pal_getf + move a0,*a8(OPAL) + + PULL a1,a2,a3,a7,a8 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_uniform_color_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + callr create_uniform_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +cuc_1 + SLEEPK 1 + + move @done_creating,a0 + jrz cuc_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq cuc_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne cuc_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls cuc_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt cuc_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc cuc_10 +cuc_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +cuc_10 move a0,@joy_pos ;save current joy. pos + calla del_select_arrow +; +; Up ? +; +cuc_1b cmpi JOY_UP,a0 ;joystick up ? + jrne cuc_2 ;br=nope + calla create_up_arrow + + move @uniform_nbr,a0 + dec a0 + jrnn cuc_1c + movi NUM_UNIFORM_NAMES-1,a0 ;reset cursor position +cuc_1c move a0,@uniform_nbr ;used for table indexing + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_up3 + jruc cuc_5 +; +; Down ? +; +cuc_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne cuc_3 ;br=nope + calla create_down_arrow + + move @uniform_nbr,a0 + inc a0 + cmpi NUM_UNIFORM_NAMES,a0 ;nbr of attributes to adjust + jrlo cuc_2a + clr a0 ;reset cursor position +cuc_2a move a0,@uniform_nbr + + callr del_uniform_names + callr create_uniform_names + callr my_build_plr_pal + SOUND1 cursor_dwn3 + jruc cuc_5 + +; +; Right +; +cuc_3 cmpi JOY_RIGHT,a0 ;joystick down ? + jreq cuc_4 ;br=yes + cmpi JOY_LEFT,a0 ;joystick down ? + jrne cuc_5 ;br=nope +cuc_4 + move @home_team,a14 + xori 1,a14 ;toggle bit 7 (home team pal.) + move a14,@home_team + callr my_build_plr_pal +;DJT Start + SOUND1 homeaway_cur +;DJT End + +; +; Read buttons (for exit) +; +cuc_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq cuc_6 + cmpi PASS_BUTTON,a0 + jreq cuc_6 + cmpi SHOOT_BUTTON,a0 + jrne cuc_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +cuc_6 + calla del_butn_box_stuff + callr del_uniform_names + RETP + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR choose_nick_name_cntrl + + movk 4,a0 + calla create_divider_bar + calla create_arrow_and_text_bar + + clr a0 + move a0,@joy_pos + move a0,@repeat_cnt ;delay before auto-repeat + calla clr_select_arrow_ram + calla create_nick_names + movi REPEAT_RATE,a0 ;2 ticks delay + move a0,@repeat_rate ;rate of auto-repeat +; +; Read joystick +; +pnn_1 + SLEEPK 1 + + move @done_creating,a0 + jrz pnn_6 + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr ;ret. a0=joy switch value +;DJT End + cmpi JOY_NONE,a0 ;joytick movement ? + jreq pnn_1a ;br=nope + + move @joy_pos,a14 + cmp a14,a0 + jrne pnn_1a + + move @repeat_cnt,a1 + inc a1 + move a1,@repeat_cnt + cmpi REPEAT_DELAY,a1 ;repeat yet ? + jrls pnn_5 ;br=no + + move @repeat_rate,a14 + dec a14 + move a14,@repeat_rate + jrgt pnn_5 ;br=dont allow movement + movk REPEAT_RATE,a14 + move a14,@repeat_rate + jruc pnn_10 +pnn_1a + clr a1 + move a1,@repeat_cnt ;reset repeat count +pnn_10 move a0,@joy_pos + calla del_select_arrow +; +; Up ? +; +pnn_1b cmpi JOY_UP,a0 ;joystick up ? + jrne pnn_2 ;br=nope + calla create_up_arrow + + move @nick_name_nbr,a0 + dec a0 + jrnn pnn_2a + movi NUM_NICK_NAMES-1,a0 ;reset cursor position +pnn_2a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_up3 + jruc pnn_5 +; +; Down ? +; +pnn_2 cmpi JOY_DOWN,a0 ;joystick down ? + jrne pnn_4 ;br=nope + calla create_down_arrow + + move @nick_name_nbr,a0 + inc a0 + cmpi NUM_NICK_NAMES,a0 ;nbr of attributes to adjust + jrlo pnn_3a + clr a0 ;reset cursor position +pnn_3a move a0,@nick_name_nbr + + calla del_nick_names + calla create_nick_names + SOUND1 cursor_dwn3 + jruc pnn_5 +; +; Left or Right ? +; +pnn_4 cmpi JOY_LEFT,a0 ;joystick left ? + jreq pnn_4a ;br=nope + cmpi JOY_RIGHT,a0 ;joystick right ? + jrne pnn_5 ;br=nope +pnn_4a + callr say_nickname + +; +; Read buttons (for exit) +; +pnn_5 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq pnn_6 + cmpi PASS_BUTTON,a0 + jreq pnn_6 + cmpi SHOOT_BUTTON,a0 + jrne pnn_1 ;br=no joystick or buttons +; +; Exit this butn action (return to butn control) +; +pnn_6 + callr say_nickname + + calla del_butn_box_stuff + calla del_nick_names + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP say_nickname + + move @nick_name_nbr,a0 + addi MIDDLE_NICK_NAME,a0 + sll 6,a0 + addi nickname_img_tbl,a0 + move *a0(32),a0,L ;get sound ptr + calla snd_play1 + rets + +;----------------------------------------------------------------------------- +; action routine for button +;----------------------------------------------------------------------------- + SUBR change_players_game_name + + movk 1,a0 + move a0,@changing_name + move *a13(PC_PLAYNUM),a10 + JSRP enter_game_name + + movi player1_data,a0,L + move a0,*a13(PC_DATADDR),L ;start of player data + RETP + +;----------------------------------------------------------------------------- +; This process controls the players entering his GAME NAME up to 6 chars. +;----------------------------------------------------------------------------- + SUBRP enter_game_name + + move @changing_name,a0 ;changing name ? + jrz egn_0 ;br=yep + calla print_ask_chg_nme + movk 4,a10 ;BIG BUTTONS + JSRP ask_yes_no + move a11,a11 ;change name and pin number ? + jrne done3 ;br=player said NO!! + calla create_butn_instructions ;reprint title, yes/no deleted it + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + jruc egn_1b + +egn_0 + movk 8,a9 + calla create_a9_butn_instructions + + movi player1_data,a1,L + addi PR_NAME1,a1 + move a1,*a13(PC_DATADDR),L ;start of player data + subi PR_NAME1,a1 + +;clear out letters +egn_1a movi -1,a0 ;init player data to -1 + move a0,*a1(PR_COUNT) +egn_1b clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + +;egn_1b + movi BBOXX+78,a1 + move a1,*a13(PC_CENTERX) ;name center X + move a1,*a13(PC_CENTERX2) ;stats box center X + move a1,*a13(PC_CENTERXkit) ;name center X (kit) + + movk 1,a0 + calla create_divider_bar + + move *a13(PC_PLAYNUM),a10 + + clr a0 + move a0,*a13(PC_FLASHCOUNT) + + movi TYPTEXT|SUBPL1,a0 + move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC +; +; Create cursor (behind letter) +; + movi [250,0],a0 ;x val + movi [80,0],a1 ;y val + movi INGA16_A,a2 ;* image + movk 7,a3 ;z pos + movi DMACAL|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 + ori 10h,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L +; +; Create the LETTERS (echoing input) +; + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + +; move @changing_pinnbr,a0 ;changing pin number ? +; jrz pin_2 ;br=nope +; movk 6,a0 ;fake having entered name +; move a0,*a13(PC_CHARPOS) +; calla create_pin_nbr_objs +; jruc pin_3 + +pin_2 calla create_name_objs + calla create_pin_nbr_objs + clr a0 + move a0,*a13(PC_CHARPOS) +; +; Put up the menu (alphabet) +; +pin_3 movi enter_name_menu,a0,L + move a0,*a13(PC_MENUBASE),L + +;if changing pin number, start on second menu +; movk 1,a0 ;2nd menu (pin nbr) +; move @changing_pinnbr,a1 ;changing pin number ? +; jrnz pin_1 ;br=yep + clr a0 ;first menu (name) +pin_1 move a0,*a13(PC_MENULEVEL) + calla create_menu + calla update_cursor + +;DJT Start + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz loop0 +;DJT End + move @changing_name,a0 ;changing name ? + jrnz loop0 ;br=yep + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +loop0 + SLEEPK 1 +loop1 + movi 22,a10 ;initial repeat delay +delay_1 + SLEEPK 1 + + move @done_creating,a14 + jrz done3 + + move *a13(PC_PLAYNUM),a1 + move *a13(PC_FLASHCOUNT),a0 ;cursor flash count + inc a0 + move a0,*a13(PC_FLASHCOUNT) + + calla save_selection + calla update_statbox_images +;upn_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + jrz noact_1 + + JSRP button_actions + + move *a13(PC_MENULEVEL),a0 +; cmpi 1,a0 ;finished entering name ? +; jrne noact_0 ;br=nope +; move @changing_name,a1 ;changing name ? +; jrnz done1 ;br=yep, dont goto pin number +noact_0 + cmpi 2,a0 ;finished entering pin nbr ? + jreq done1 ;br=yep +noact_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + jrnz movit_1 + calla update_cursor + dsj a10,delay_1 + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_cur_mkplr +;DJT End + calla move_cursor + calla update_cursor + movi 15,a10 ;repeat delay + jruc delay_1 +movit_1 + calla move_cursor + calla update_cursor + jruc loop1 +done1 + move *a13(PC_CURSOBJ),a0,L ;delete cursor + calla DELOBJ + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + calla del_butn_info_text ;delete directions + calla turn_off_name_objs + + move @changing_name,a0 ;is plyr just changing name ? + jrnz done2 ;br=yep + callr setup_plr_record + + SLEEP 70 + movi 120,a10 +done1a + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 ;OBJ ID's created by this PROC +;DJT Start + calla get_but_val_cur_mkplr +;DJT End + jrnz done1b + dsj a10,done1a +done1b + SOUND1 butn_press2 + +;delete record availibilty message + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + +done2 + move @changing_name,a0 + jrz done3 + calla delete_name + callr print_entered_name + calla del_butn_box_stuff + JSRP print_changed_name_info + +done3 clr a0 + move a0,@changing_name ;no longer changing name + move a0,@processing_butn ;not in butn action routine + calla del_butn_box_stuff +;; calla update_hilited_button +;done4 + RETP + +;----------------------------------------------------------------------------- +; This routine handles everything to do with finding/setting up, a +; players record +;----------------------------------------------------------------------------- + SUBR setup_plr_record + +;DJT Start + movi player1_data,a6,L + move a6,*a13(PC_DATADDR),L ;start of player data + clr a10 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrnz #chkrecs + .ref gpr_no_match + calla gpr_no_match + jruc #nonewrec +#chkrecs + calla get_player_record +#nonewrec +;DJT End + calla del_butn_box_stuff + + move a10,a10 ;a10=0 (rec. not found) else ptr. to rec. + jrz #rnf_1 ;br=record NOT FOUND + +;record found logic + + move a10,@player_record_ptr,L ;save ptr. to record + calla init_player_ram_from_record + + clr a0 + calla print_record_availablity_msg + jruc #wait_1 + + +;record not found logic +#rnf_1 + calla init_player_record_and_ram + + calla get_free_record + move a10,@player_record_ptr,L ;save ptr. to record + + movk 1,a0 + calla print_record_availablity_msg +#wait_1 + CREATE0 plyr_dribbling_ball + callr stats_area_setup + rets + + +;----------------------------------------------------------------------------- +; This routine creates the buttons and shadows and controls +; the cursor for selection, then the button is blinked when selected +; +; INPUT: reg. a10 - player number or > (table index for button positions) +; OUTPUT: reg a11 - cursor position (yes or no) +;----------------------------------------------------------------------------- + SUBR ask_yes_no ;ret. a0=answer (1=yes else 0) + + PUSHP a8,a9,a10 + cmpi 4,a10 + jrlo ayn_0 ;br=a player + calla create_yes_no_buttons ;ret. a8-a9 ptrs. to obj + jruc ayn_1 +ayn_0 calla create_small_yes_no_butns +ayn_1 + movk 1,a11 ;default to 'NO' + movi 5*TSEC,a10 ;timeout counter (5 sec) +sae_1 + SLEEPK 1 + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 + jrne sae_11 + move @done_creating,a14 + jrnz sae_11 + movk 1,a11 ;say 'NO' + jruc sae_4 + +;check for timeout +sae_11 dsj a10,sae_1a ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc sae_3 + +sae_1a + calla update_yes_no_button_pals + + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_stick_val_down_mkplr +;DJT End + + cmpi JOY_UP,a0 ;joystick up ? + jrne sae_1b ;br=nope + move a11,a11 + jrz sae_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds + jruc sae_2a + +sae_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne sae_2a ;br=nope + move a11,a11 + jrnz sae_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + + move *a13(PC_PLAYNUM),a0 + callr cursor_sounds +; +; Now, read buttons +; +sae_2a + move *a13(PC_PLAYNUM),a0 +;DJT Start + calla get_but_val_down_mkplr +;DJT End + + cmpi TURBO_BUTTON,a0 + jreq sae_3 + cmpi PASS_BUTTON,a0 + jreq sae_3 + cmpi SHOOT_BUTTON,a0 + jrne sae_1 +sae_3 + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + addi yesno_sel_snds,a0 + move *a0,a0,L + calla snd_play1 + + calla stop_clock_timer + JSRP flash_pressed_yes_no_button + calla restart_clock_timer + calla del_butn_box_stuff +sae_4 + PULLP a8,a9,a10 + RETP + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: a0 - player number +;----------------------------------------------------------------------------- + SUBR cursor_sounds + + sll 5,a0 + addi yesno_cur_snds,a0 + move *a0,a0,L + calla snd_play1 + rets + + +yesno_cur_snds + .long yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + +yesno_sel_snds + .long yes_no_sel1,yes_no_sel2,yes_no_sel3,yes_no_sel4 + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP save_and_exit_cursor_control + + calla print_ask_exit + movk 4,a10 + JSRP ask_yes_no + move a11,a11 + jrne no_1 ;br=nope + +;chose 'YES' ,save & exit + + movi CLOCK_PID,a0 + calla KIL1C ;kill clock timer + clr a0 + move a0,@done_creating ;goto ATTRACT MODE + jruc dne_1 + +;chose 'NO' ,not to save & exit +no_1 + calla del_butn_box_stuff +dne_1 RETP + +;----------------------------------------------------------------------------- +; Restart PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR restart_clock_timer + + clr a0 + move a0,@stop_clock + rets + +;----------------------------------------------------------------------------- +; Stop PLAYER DESIGN clock from timing down +;----------------------------------------------------------------------------- + SUBR stop_clock_timer + + movk 1,a0 + move a0,@stop_clock + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +str_slash .string "/",0 + .even + +;palettes + +BSGRNF1_P: + .word 172 + .word 00000h,00fe8h,00fa7h,00f87h,01367h,01346h,01306h,012e6h + .word 012c6h,01285h,01265h,01245h,00e24h,00de4h,00dc4h,00da3h + .word 00d83h,00943h,00922h,00902h,008e2h,004a1h,00080h,00040h + .word 00020h,0156bh,0114ah,00d28h,00927h,00505h,004e4h,00105h + .word 000a2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF2_P: + .word 172 + .word 00000h,01febh,01fcah,01f8ah,01f6ah,01f4ah,0232ah,0230ah + .word 022e9h,022c9h,022a9h,02289h,02268h,01e48h,01e28h,01e07h + .word 01de7h,01dc7h,019a6h,01986h,01966h,00d03h,004c1h,00060h + .word 00020h,01e10h,019cdh,011abh,00d69h,00947h,00567h,00169h + .word 000c2h,000a1h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF3_P: + .word 172 + .word 0318ch,057f9h,053d8h,053b7h,04f96h,04f96h,04b75h,04b54h + .word 04733h,04733h,04312h,042f1h,03ed1h,03ed0h,03aafh,03a8fh + .word 03a8eh,0366dh,0364dh,0322ch,0322ch,029aah,01d27h,010a4h + .word 00421h,0360eh,04272h,03e51h,03e30h,03a0fh,035efh,035ceh + .word 02d6bh,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF4_P: + .word 172 + .word 00000h,057f9h,057d8h,057d8h,057d8h,057b7h,053b7h,053b7h + .word 05396h,05396h,05396h,05376h,05375h,05375h,05355h,05355h + .word 05354h,05354h,05334h,05334h,05334h,04270h,02dabh,018e6h + .word 00421h,04f15h,04af4h,04ad4h,046b4h,04693h,04673h,04252h + .word 04252h,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSGRNF5_P: + .word 172 + .word 0318ch,07fffh,07fffh,07fffh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh,07bdeh + .word 07bdeh,07bdeh,07bdeh,07bdeh,07fffh,04a52h,0318ch,018c6h + .word 00421h,06318h,06318h,05ad6h,05ef7h,056b5h,05294h,04e73h + .word 0318ch,014a5h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + +BSHDRED_P: + .word 172 + .word 00000h,07020h,06820h,06420h,06020h,05c20h,05820h,05420h + .word 05020h,04820h,04420h,04020h,03c20h,03820h,03420h,03020h + .word 02c20h,02820h,02420h,02020h,01c20h,01800h,01000h,00c00h + .word 00800h,04000h,03088h,02c67h,02846h,02424h,02003h,02000h + .word 01801h,01401h,03818h,03816h,03416h,03815h,03813h,03014h + .word 02c73h,03811h,02c92h,02c14h,03013h,02c13h,02813h,02891h + .word 02c12h,03011h,02812h,02851h,02c11h,02831h,0300fh,02412h + .word 02811h,02c4fh,02c10h,02411h,02450h,02810h,02c0fh,02430h + .word 02011h,02c0eh,02410h,0280fh,02c0dh,02010h,0204fh,02c0ch + .word 0240fh,0280eh,0282dh,0246dh,0242eh,0200fh,0280dh,01cadh + .word 0240eh,020ach,0280ch,0242dh,0200eh,0280bh,0240dh,0242ch + .word 01c4dh,01c0eh,0240ch,0200dh,0240bh,01c0dh,0204bh,0240ah + .word 0200ch,0180dh,0202bh,01c0ch,0200bh,0202ah,01c2bh,0200ah + .word 0180ch,014a9h,0184bh,01c0bh,02009h,01889h,0180bh,01c0ah + .word 01c29h,0140bh,01c09h,0180ah,01c08h,01829h,0140ah,01848h + .word 01809h,01468h,01828h,0100ah,01409h,01808h,01428h,01807h + .word 01009h,01408h,01446h,00c67h,01427h,01008h,01407h,01426h + .word 01027h,00c08h,01406h,01007h,01405h,01026h,00c07h,01045h + .word 00c64h,01006h,01025h,00863h,00c06h,01005h,00463h,01004h + .word 00806h,00c05h,00c24h,00805h,00c04h,00c03h,00804h,00823h + .word 00404h,00803h,00822h,00802h,00403h,00422h,00421h,00402h + .word 00401h,00001h,00000h,00000h + + +BTGRNF1_P: + .word 32 + .word 0318ch,00fe7h,00be5h,00be5h,00be4h,00bc4h,00ba4h,00b84h + .word 00b83h,00b63h,00b43h,00b23h,00b03h,00ae3h,00ac3h,00aa3h + .word 00a83h,00a63h,00a62h,00a43h,00a42h,00a22h,00a02h,009e2h + .word 009c2h,009a2h,00982h,00962h,00942h,00922h,00902h,008e2h + +BTGRNF2_P: + .word 32 + .word 0318ch,01febh,01be9h,01be9h,01be8h,01be8h,01be8h,01be8h + .word 01be7h,01be7h,01bc7h,01ba7h,01b87h,01b67h,01b47h,01b27h + .word 01b07h,01ae7h,01ae6h,01ac7h,01ac6h,01aa6h,01a86h,01a66h + .word 01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,01986h,01966h + +BTGRNF3_P: + .word 32 + .word 0318ch,037f1h,033efh,033efh,033eeh,033eeh,033eeh,033eeh + .word 033edh,033edh,033edh,033edh,033edh,033edh,033edh,033edh + .word 033cdh,033adh,033ach,0338dh,0338ch,0336ch,0334ch,0332ch + .word 0330ch,032ech,032cch,032ach,0328ch,0326ch,0324ch,0322ch + +BTGRNF4_P: + .word 32 + .word 0318ch,057f9h,053f7h,053f7h,053f6h,053f6h,053f6h,053f6h + .word 053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h,053f5h + .word 053f5h,053f5h,053f4h,053f5h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053d4h,053b4h,05394h,05374h,05354h,05334h + +BTGRNF5_P: + .word 32 + .word 0318ch,07fffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh,07bffh + .word 07bffh,07bffh,07bfeh,07bffh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + + +BUTRED_P: + .word 32 + .word 00000h,07c25h,07c04h,07c04h,07804h,07403h,07003h,06c03h + .word 06c02h,06802h,06402h,06002h,05c01h,05801h,05401h,05401h + .word 05000h,04c00h,04800h,04400h,04000h,03c00h,03800h,03800h + .word 03400h,03000h,02c00h,02800h,02400h,02000h,01c00h,01c00h + + + +; +; This table contains: +; +; 1) Value to update (when read a joystick LEFT or RIGHT) +; +attrib_ram_value_ptr_table + .long height_points + .long weight_points +attrib_ram_value_ptr_table2 ;for player dribbling ball (no height and weight) + .long speed_points + .long power_points + .long shoot_points + .long dunks_points + .long steal_points + .long block_points +attrib_ram_value_ptr_table_end + +attribute_adjust_amount_table + .word 1 ;height_points + .word 1 ;weight_points + .word 1 ;speed_points + .word 1 ;power_points + .word 1 ;shoot_points + .word 1 ;dunks_points + .word 1 ;steal_points + .word 1 ;block_points + +; +; This table contains the following info: +; +; 1) Y coor +; 2) ptr. to Attribute bar end img +; 3) ptr. to Attribute bar notches +; + +attribute_setup_table + .long [ATTRY,0],ATT_HT,END_HT + .long [ATTRY-1,0],ATT_WT,END_WT + .long [ATTRY-2,0],ATT_SP,END_SP + .long [ATTRY-3,0],ATT_PW,END_PW + .long [ATTRY-4,0],ATT_SH,END_SH + .long [ATTRY-5,0],ATT_DU,END_DU + .long [ATTRY-6,0],ATT_ST,END_ST + .long [ATTRY-7,0],ATT_BL,END_BL +attribute_setup_end + + + +small_attrib_bar_img_tbl + .long ATTBAR00 + .long ATTBAR01 + .long ATTBAR02 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 + + +big_attrib_bar_img_tbl + .long NOTCH_00 ;this should be zero + .long NOTCH_01 + .long NOTCH_02 + .long NOTCH_03 + .long NOTCH_04 + .long NOTCH_05 + .long NOTCH_06 + .long NOTCH_07 + .long NOTCH_08 + .long NOTCH_09 + .long NOTCH_10 + + + +;for entering game name during CREATE PLAYER +enter_name_menu + .long enm1 + .long enm2 +enm1 + .word 4 ;5th palette in '#palettes' table (select.asm) + .word 148,60 ;x,y start + .long name_table ;table +enm2 + .word 4 ;palette + .word 139,79 ;x,y start + .long pin_nbr_table + + + +; +; Routines to dispatch when button is selected +; +butn_routine_table + .long show_players_stats_cursor_cntrl + .long pick_plyr_head_cntrl + .long choose_uniform_color_cntrl + .long attribute_cursor_cntrl + .long plyr_privileges_cursor_cntrl + .long choose_nick_name_cntrl + .long change_players_game_name + .long save_and_exit_cursor_control + +; +; This table contains the following info: +; +; 1. X position (of all objects) +; 2. Y position (of all objects) +; 3. ptr. to left half of button shadow img +; 3. ptr. to right half of button shadow img +; 5. ptr. to button img +; 6. ptr. to button text img +; +butn_setup_table + .long 55<<16,35<<16,BSHAD_A1,BSHAD_A2,BUTTON_A, 47<<16,TXT_VIEW + .long 55<<16,35<<16,BSHAD_B1,BSHAD_B2,BUTTON_B, 73<<16,TXT_HEAD + .long 55<<16,35<<16,BSHAD_C1,BSHAD_C2,BUTTON_C, 99<<16,TXT_UNIFRM + .long 55<<16,35<<16,BSHAD_D1,BSHAD_D2,BUTTON_D,125<<16,TXT_ATTR + .long 55<<16,35<<16,BSHAD_E1,BSHAD_E2,BUTTON_E,151<<16,TXT_PRIV + .long 55<<16,35<<16,BSHAD_F1,BSHAD_F2,BUTTON_F,176<<16,TXT_NICK1 + .long 55<<16,35<<16,BSHAD_G1,BSHAD_G2,BUTTON_G,203<<16,TXT_NEWN + .long 55<<16,35<<16,BSHAD_H1,BSHAD_H2,BUTTON_H,229<<16,TXT_SAVE +butn_setup_table_end + + +; +; Table containing setup information for the 'CREATE PLAYER' background +; +create_player_mod + .long SPORTBGBMOD + .word 0,0 ;x,y + .long 0 + + +****************************************************************************** + + .end diff --git a/SRC/MAKEPLR2.ASM b/SRC/MAKEPLR2.ASM new file mode 100644 index 0000000..bf48a60 --- /dev/null +++ b/SRC/MAKEPLR2.ASM @@ -0,0 +1,2972 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-20-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 6/30/95 +;----------------------------------------------------------------------------- + .file "makeplr2.asm" + .title "create player logic" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "world.equ" + .include "macros.hdr" +; .include "plyrseq.tbl" + .include "ncknme.tbl" + .asg 0,SEQT + .include "plyr.equ" + + + .global player1_data,player2_data,player3_data,player4_data + + .def PASSWORD + .def stx_avgallow,stx_avgscore + + .def NUM_NICK_NAMES + .def NUM_UNIFORM_NAMES + .def body_scale_table + + .def nickname_img_tbl + + .ref CUST6,CUST7,CUST8,CUST9,CUST10 + .ref cntdown_snd + .ref transition_flag + .ref butn_cursor_pos + .ref mess_objid,mess_line_spacing + .ref mess_cursy,message_palette + .ref setup_message,print_string_C2 + .ref pal_getf,obj_on,obj_off + .ref speed_points + .ref power_points + .ref shoot_points + .ref dunks_points + .ref steal_points + .ref block_points + .ref height_points + .ref weight_points + .ref total_points + .ref dither_objs,dither_objs2 + .ref done_creating + .ref clock_minutes,clock_seconds + .ref done_creating ;exit flag for CREATE PLAYER + .ref fog_obj_ptr,yes_no_buttons_ptr + .ref stop_clock ;1=yes, 0=no + .ref brush12_ascii,brush20_ascii + .ref brush10_ascii + .ref bast8t_ascii,bast7t_ascii + .ref bast8tcyc_ascii + .ref p1_slide_box_flag,p2_slide_box_flag + .ref p3_slide_box_flag,p4_slide_box_flag + .ref GAMSTATE + .ref TUBE_O_P,TUBE_R_P + .ref TWOPLAYERS + .ref nick_name_nbr + .ref uniform_nbr + .ref get_all_buttons_down,get_all_buttons_cur + .ref select_arrow_obj + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref concat_rom_string,print_string_C + .ref copy_string,dec_to_asc + .ref whitsle_snd + .ref nick_nme1,nick_nme2,nick_nme3,nick_nme4 + .ref nick_nme5,nick_nme6,nick_nme7,nick_nme8 + .ref nick_nme9,nick_nme10,nick_nme11,nick_nme12 + .ref nick_nme13,nick_nme14,nick_nme15,nick_nme16 + .ref nick_nme17,nick_nme18,nick_nme19,nick_nme20 + .ref nick_nme21,nick_nme22,nick_nme23,nick_nme24 + .ref nick_nme26,nick_nme27,nick_nme28 + .ref nick_nme29,nick_nme30,nick_nme31,nick_nme32 + .ref nick_nme33,nick_nme34,nick_nme35,nick_nme36 + .ref get_but_val_down,get_but_val_cur + .ref bx_slide_snd + + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_changed_name_info + + movi name_chnge_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movi name_chnge_str,a4,L + calla print_string_C2 + + movi name_chnge_str_setup2,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + movk 11,a0 + move a0,@mess_line_spacing + movi name_chnge_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 360,a10 +pcni_1 + SLEEPK 2 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz pcni_2 + dsj a10,pcni_1 +pcni_2 + RETP + + + +name_chnge_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +name_chnge_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +name_chnge_str + .string "--- NOTICE ---",0 + .even + +name_chnge_str2 + .string "YOUR PLAYERS' NAME",1 + .string "AND PIN NUMBER HAVE",1 + .string "BEEN CHANGED.",1 + .string " ",1 + .string "TO ACCESS THIS RECORD,",1 + .string "YOU MUST USE YOUR",1 + .string "NEW NAME AND PIN",1 + .string "NUMBER.",0 + .even + +;----------------------------------------------------------------------------- +; This routine checks to see if the player entered a naugthy 6 letter +; name. +; +; INPUT: a0 - player number +; RETURNS: carry clear if naughty word +;----------------------------------------------------------------------------- + SUBR censor_players_name + + PUSH a0,a1,a2,a3,a4 + move a0,a10 + sll 5,a0 + addi plyr_data_tbl,a0,L + move *a0,a0,L ;get player data ptr. + addi PR_NAME1,a0,L + move a0,a4 + +;;check special cases first +; +; movi NAME_LETTERS,a3 +;cpn_inv +; move *a0+,a2 ;get entered letter +; jrz cpn_1 +; cmp a2,a14 +; dsj a3,cpn_inv +; +; + + movi naughty_word_tbl,a1,L +cpn_top + movi NAME_LETTERS,a3 + move a4,a0 +cpn_00 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_0a + move *a0+,a2 + jrz cpn_1 + cmp a2,a14 + dsjne a3,cpn_0a + jrnz cpn_1 +cpn_0 + move *a1+,a14 ;get letter of bad word + jrn cpn_4 ;br=found match +cpn_1a + move *a0+,a2 ;get entered letter + jrz cpn_1 ;br=end of plyr entered name + cmpi SPACE_CHAR,a2 + dsjeq a3,cpn_1a + jreq cpn_1 + cmp a2,a14 + jreq cpn_0 +cpn_1 + move *a1+,a14 + jrnn cpn_1 + move *a1,a14 ;at end of table + jrnn cpn_top ;br=no + jruc cpn_5 + +;found a NAUGHTY word +cpn_4 + SOUND1 whitsle_snd + clrc + jruc cpn_6 + + +;no NAUGHTY word found +cpn_5 + setc +cpn_6 PULL a0,a1,a2,a3,a4 + rets + + + + .def plyr_data_tbl +plyr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + + +AA equ 1 +BB equ 2 +CC equ 3 +DD equ 4 +EE equ 5 +FF equ 6 +GG equ 7 +HH equ 8 +II equ 9 +JJ equ 10 +KK equ 11 +LL equ 12 +MM equ 13 +NN equ 14 +OO equ 15 +PP equ 16 +QQ equ 17 +R2 equ 18 +SS equ 19 +TT equ 20 +UU equ 21 +VV equ 22 +WW equ 23 +XX equ 24 +YY equ 25 +ZZ equ 26 +EX equ 27 +;DL equ 28 +;SPC equ 29 +;END equ 0 + + +naughty_word_tbl + .word FF,CC,KK,-1 ;FCK (ie. FCKYOU, FCK IT...etc) + .word PP,HH,KK,-1 ;PHK (ie. FCKYOU, FCK IT...etc) + .word VV,AA,GG,II,NN,AA,-1 ;vagina + .word FF,UU,CC,KK,-1 ;fuck + .word FF,UU,KK,-1 ;fuk + .word FF,UU,CC,-1 ;fuc + .word AA,SS,SS,WW,YY,PP,-1 ;asswyp + .word AA,SS,SS,LL,II,KK,-1 ;asslik + .word AA,SS,HH,OO,LL,EE,-1 ;ashole + .word AA,HH,OO,LL,EE,-1 ;ahole + .word WW,HH,OO,R2,EE,-1 ;whore + .word BB,UU,TT,TT,-1 ;butt + .word CC,UU,MM,-1 ;cum + .word GG,AA,YY,BB,OO,YY,-1 ;gayboy + .word DD,AA,MM,NN,-1 ;damn + .word JJ,II,ZZ,-1 ;jiz + .word PP,II,SS,SS,-1 ;piss + .word PP,II,SS,HH,-1 ;pish + .word PP,UU,SS,SS,-1 ;puss + .word CC,OO,CC,KK,-1 ;cock + .word CC,UU,NN,TT,-1 ;cunt + .word SS,HH,II,TT,-1 ;shit + .word SS,LL,UU,TT,-1 ;slut + .word CC,LL,II,TT,-1 ;clit + .word PP,HH,UU,CC,KK,-1 ;phuck + .word PP,HH,UU,KK,-1 ;phuk + .word BB,II,TT,CC,HH,-1 ;bitch + .word PP,R2,LL,JJ,AA,MM,-1 ;pearl jam + .word BB,AA,SS,TT,R2,DD,-1 ;bastard + .word PP,R2,II,CC,KK,-1 ;prick + .word NN,II,GG,GG,EE,R2,-1 ;nigger + .word JJ,AA,GG,OO,FF,FF,-1 ;jagoff + .word JJ,AA,KK,OO,FF,FF,-1 ;jakoff + .word PP,EE,NN,II,SS,-1 ;penis + .word JJ,II,SS,MM,-1 ;jism + .word JJ,EE,WW,BB,OO,YY,-1 ;jewboy + .word EE,AA,TT,MM,EE,-1 ;eatme + .word BB,LL,OO,WW,-1 ;blow + .word BB,LL,OO,JJ,OO,BB,-1 ;blojob + .word BB,LL,WW,JJ,OO,BB,-1 ;blwjob + .word SS,UU,CC,KK,MM,EE,-1 ;suckme + .word SS,UU,KK,MM,EE,-1 ;sukme + .word SS,EE,MM,EE,NN,-1 ;semen + .word JJ,R2,KK,OO,FF,FF,-1 ;jrkoff + .word PP,UU,TT,AA,NN,GG,-1 ;putang + .word -1 + + + + .asg 87<<16,BOX_END_Y + .asg -150<<16,BOX_STRT_Y + +;----------------------------------------------------------------------------- +; on the 'nick name' page +;----------------------------------------------------------------------------- + SUBR create_arrow_and_text_bar + +;create up/dwn bar + movi 200,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+5,0],a0,L ;get X pos. + movi [BBOXY+63,0],a1,L ;get Y pos. + movi NNABAR,a2,L + calla BEGINOBJ2 + +;create hi-liter bar (under 'nick name img') + + movi 200,a3 ;z pos (sorting) + movi [BBOXX+24,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clr_select_arrow_ram + + clr a0 + move a0,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_select_arrow + + PUSH a0 + move @select_arrow_obj,a8,L + jrz dsa_1 + calla DELOBJA8 + callr clr_select_arrow_ram +dsa_1 PULL a0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_up_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL|M_FLIPV,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+127,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_down_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+8,0],a0,L ;get X pos. + movi [BBOXY+138,0],a1,L ;get Y pos. + movi NNAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_rght_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+107,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_left_arrow + + callr del_select_arrow + movi 400,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + movi [BBOXX+45,0],a0 ;x val of first head + movi [BBOXY+109,0],a1 ;y val + movi HDAROW,a2,L + calla BEGINOBJ2 + move a8,@select_arrow_obj,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_uniform_names + + movi UNIFORM_NAME_OBJS,a0 + clr a1 + calla obj_del1c + rets + + + .asg BBOXX+43,UNFM_NME_X + .asg BBOXY+72,UNFM_NME_Y + .asg 11<<16,UNFM_NME_SPC + .asg 2<<16,UNFM_NME_X_SPC + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_uniform_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi UNIFORM_NAME_OBJS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @uniform_nbr,a9 + sll 5,a9 + addi uniform_img_tbl,a9,L + + movi [UNFM_NME_Y,0],a1,L ;Y coor +cun_1 + move *a9+,a2,L ;get img to create + movi [UNFM_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_UNIFORM_NBR,a10 + jrne cun_2 + addi UNFM_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cun_2 + cmpi MIDDLE_UNIFORM_NBR+1,a10 + jrne cun_2a + addi UNFM_NME_X_SPC+1,a1 ;extra spacing + +cun_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi UNFM_NME_SPC,a1,L ;add in spacing + inc a10 + cmpi UNIFORM_NAMES_ON_SCRN,a10 + jrlo cun_1 + rets + + +; +; Contains: +; +; 1) uniform name img +; +uniform_img_tbl + .long city_atl + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + .long city_min + .long city_nej + .long city_ney + .long city_orl + .long city_phi + .long city_pho + .long city_por + .long city_sac + .long city_san + .long city_sea + .long city_tor + .long city_uta + .long city_van + .long city_was + .long CUST1 + .long CUST2 + .long CUST3 + .long CUST4 + .long CUST5 + .long CUST6 + .long CUST7 + .long CUST8 + .long CUST9 + .long CUST10 +uniform_img_tbl_end + .long city_atl ;wrap around case + .long city_bos + .long city_cha + .long city_chi + .long city_cle + .long DEFAULT ;color of selected team during team select + .long city_dal + .long city_den + .long city_det + .long city_gol + .long city_hou + .long city_ind + .long city_lac + .long city_lal + .long city_mia + .long city_mil + + +NUM_UNIFORM_NAMES equ (uniform_img_tbl_end-uniform_img_tbl)/32 ;on screen at once + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_nick_names + + movi NICK_NAME_IMGS,a0 + clr a1 + calla obj_del1c + rets + + .asg BBOXX+43,NIK_NME_X + .asg BBOXY+72,NIK_NME_Y + .asg 11<<16,NIK_NME_SPC + .asg 2<<16,NIK_NME_X_SPC + .asg 0,NICK_NAME_IMG + .asg 32,NICK_NAME_SND + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_nick_names + + movi 2000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi NICK_NAME_IMGS,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + clr a10 ;counter + + move @nick_name_nbr,a9 +; move @nick_name_cur_pos,a9 + sll 6,a9 + addi nickname_img_tbl,a9,L + + movi [NIK_NME_Y,0],a1,L ;Y coor +cnn_1 + move *a9(NICK_NAME_IMG),a2,L ;get img to create + movi [NIK_NME_X,0],a0,L ;X coor + + movi BAST_W_P,b0,L + cmpi MIDDLE_NICK_NAME,a10 + jrne cnn_2 + addi NIK_NME_X_SPC,a1 ;extra spacing + movi BAST_Y_P,b0,L +cnn_2 + cmpi MIDDLE_NICK_NAME+1,a10 + jrne ccn_2a + addi NIK_NME_X_SPC+1,a1 ;extra spacing + +ccn_2a move a1,a11 + calla BEGINOBJP2 + move a11,a1 + addi NIK_NME_SPC,a1,L ;add in spacing + addi 64,a9 ;next table line + inc a10 + cmpi NICK_NAMES_ON_SCRN,a10 + jrlo cnn_1 + rets + +; +; Contains: +; +; 1) nick name img +; 2) sound table ptr for nick name +; + +nickname_img_tbl + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 + .long NN_GRANDPA,nick_nme16 + .long NN_HAMMER,nick_nme17 + .long NN_HAWKEYE,nick_nme18 + .long NN_HOMEBOY,nick_nme19 + .long NN_JOKER,nick_nme20 + .long NN_LOVER,nick_nme21 + .long NN_MADDOG,nick_nme22 + .long NN_MARGE,nick_nme23 + .long NN_MERLIN,nick_nme24 +; .long NN_MJ,nick_nme25 + .long NN_PONGO,nick_nme26 + .long NN_SHADOW,nick_nme27 + .long NN_SLIM,nick_nme28 + .long NN_SNAKE,nick_nme29 + .long NN_SPANKY,nick_nme30 + .long NN_SPIDER,nick_nme31 + .long NN_SPIKE,nick_nme32 + .long NN_TOPGUN,nick_nme33 + .long NN_TREXX,nick_nme34 + .long NN_VIPER,nick_nme35 + .long NN_ZIPPY,nick_nme36 +nickname_img_tbl_end + .long NN_ACE,nick_nme1 + .long NN_BERTHA,nick_nme2 + .long NN_BIGDAD,nick_nme3 + .long NN_BIGFOOT,nick_nme4 + .long NN_BOOGY,nick_nme5 + .long NN_BUBBA,nick_nme6 + .long NN_CHILLY,nick_nme7 + .long NN_CORNEL,nick_nme8 + .long NN_CUCKOO,nick_nme9 + .long NN_DINGBAT,nick_nme10 + .long NN_FATBOY,nick_nme11 + .long NN_FLASH,nick_nme12 + .long NN_FRANKIE,nick_nme13 + .long NN_FRNKCOW,nick_nme14 + .long NN_GATOR,nick_nme15 +nickname_img_tbl_end2 + + +NUM_NICK_NAMES equ (nickname_img_tbl_end-nickname_img_tbl)/64 ;on screen at once + +;----------------------------------------------------------------------------- +; This routine creates the box which slides on the screen, and informs +; the player that CREDIT NOT TAKEN during CREATE PLAYER +; +; INPUT: reg a8 = player number (0-3) +;----------------------------------------------------------------------------- + .asg 176,UP_END_Y + .asg 256,DWN_END_Y + + SUBR slide_info_box_on_off + +sbo_0 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_0 ;br=yep + +;set players flag + move a8,a11 + sll 5,a11 ;*32 + addi plyr_flag_tbl,a11,L + move *a11,a0,L ;get ram ptr + movk 1,a1 ;set players flag + move a1,*a0 + + +;create box + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 ;x vel + clr a7 ;y vel + + movi plyr_box_xys,a10,L + sll 6,a8 ;*64 + add a8,a10 + +;create box + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi firstwin,a2,L + movi 20400,a3 ;z pos (sorting) + calla BEGINOBJ2 + move a8,a9 + +;create info + move *a10(0),a0,L ;get X pos. + move *a10(32),a1,L ;get Y pos. + movi CREDNOT,a2,L + movi 20500,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;slide box on +sbo_1 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_1 ;br=yep + + SOUND1 bx_slide_snd +sbo_1a + SLEEPK 1 + + move *a8(OYPOS),a1 + subk 10,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + subk 10,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi 176,a1 + jrgt sbo_1a + + movi UP_END_Y,a1 + move a1,*a8(OYPOS) ;set box location + movi UP_END_Y-10,a1 + move a1,*a9(OYPOS) ;set TEXT location + + SLEEP 120 + +;slide box off +sbo_2 + SLEEPK 1 + move @transition_flag,a0 ;in TRANSITION ? + jrnz sbo_2 ;br=yep + + SOUND1 bx_slide_snd + +sbo_2a + SLEEPK 1 + + move *a8(OYPOS),a1 + addk 20,a1 + move a1,*a8(OYPOS) ;change BOX location + + move *a9(OYPOS),a1 + addk 20,a1 + move a1,*a9(OYPOS) ;change TEXT location + cmpi DWN_END_Y,a1 + jrlo sbo_2a + +;delete objects + calla DELOBJA8 + move a9,a8 + calla DELOBJA8 + +;clear players flag + move *a11,a0,L ;get ram ptr + clr a1 ;clear players flag + move a1,*a0 + DIE + + + +plyr_flag_tbl + .long p1_slide_box_flag + .long p2_slide_box_flag + .long p3_slide_box_flag + .long p4_slide_box_flag + + +plyr_box_xys + .long 1<<16,306<<16 ;player 1 box pos. + .long 100<<16,306<<16 ;player 2 box pos. + .long 200<<16,306<<16 ;player 3 box pos. + .long 300<<16,306<<16 ;player 4 box pos. + + +;----------------------------------------------------------------------------- +; This routine deletes the YES/NO buttons with the passed in +; table index +; +; INPUT: a10 - table offset +;----------------------------------------------------------------------------- + SUBR del_yes_no_buttons + + sll 4,a10 + addi butn_pid_tbl,a10 + move *a10,a0,W + clr a1 + calla obj_del1c + rets + + +butn_pid_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + .word YES_NO_BUTNS + +;----------------------------------------------------------------------------- +; This routine create the small yes/no buttons +; +; INPUT: reg a10 - player number (table offset) +;----------------------------------------------------------------------------- + SUBR create_small_yes_no_butns + + PUSH a10,a11 + movi 2000,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi yes_no_butn_tbl,a10 + move *a10,a10,L + + move *a10+,a5,W ;get OBJ ID + +;'YES' button + movi SMYES,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 +;'NO' button + movi SMNO,a2,L + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + + PUSH a8,a9 + + move *a10+,a0,L ;X coor. + jrn nosh_1 ;br=no shadow imgs. + + movi 1900,a3 ;z pos (sorting) +;'YES' shadow + movi SMYSHP,a2,L + move *a10+,a1,L ;Y coor. + calla BEGINOBJ2 + +;'NO' shadow + movi SMNSHP,a2,L + move *a10+,a0,L ;X coor. + move *a10,a1,L ;Y coor. + calla BEGINOBJ2 +nosh_1 + + PULL a8,a9 ;returned values + PULL a10,a11 + rets + + +yes_no_butn_tbl + .long p1_xys ;0 + .long p2_xys ;1 + .long p3_xys ;2 + .long p4_xys ;3 + .long opt_scrn_xys ;4 + + + .asg 99,BUTN_Y +p1_xys + .word P1_BTUNS + .long [11,0],[BUTN_Y,0],[11,0],[BUTN_Y+3,0] ;buttons + .long -1 ;shadows +p2_xys + .word P2_BTUNS + .long [106,0],[BUTN_Y,0],[106,0],[BUTN_Y+3,0] + .long -1 +p3_xys + .word P3_BTUNS + .long [204,0],[BUTN_Y,0],[204,0],[BUTN_Y+3,0] + .long -1 +p4_xys + .word P4_BTUNS + .long [300,0],[BUTN_Y,0],[300,0],[BUTN_Y+3,0] + .long -1 +opt_scrn_xys + .word YES_NO_BUTNS + .long [BALL1X+3,0],[BALL1Y,0],[BALL1X+3,0],[BALL1Y+3,0] + .long [BALL1X+3,0],[BALL1Y+2,0],[BALL1X+3,0],[BALL1Y+3,0] + +;----------------------------------------------------------------------------- +; This routine create the big yes/no buttons during create player +;----------------------------------------------------------------------------- + SUBR create_yes_no_buttons + + movi 30,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +;'YES' button + movi YES,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+80,0],a1,L ;Y coor. +; movi [BBOXY+54,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,a9 ;save 'YES' button obj. ptr +;'NO' button + movi NO,a2,L + movi [BBOXX+13,0],a0,L ;X coor. + movi [BBOXY+139,0],a1,L ;Y coor. +; movi [BBOXY+124,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + .asg 6,BLINK_CNT +;----------------------------------------------------------------------------- +; This routine restores the YES and NO button palettes after the player moves +; the cursor (corrects the palette if blinking stopped on incorrect palette) +; Also handles the launching and updating of the blink 'YES' or 'NO' +; button logic +; +; called when player changes from 'YES' to 'NO' or vice versa +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR update_yes_no_button_pals + + move a11,a11 ;update YES or NO ? + jrnz uno_1 ;br='NO' button + +;update 'YES' button pal + + move *a9(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uyes_1 ;change button palette + inc a14 + move a14,*a9(OMISC) + jruc uend_1 +uyes_1 + clr a14 + move a14,*a9(OMISC) + + movi YESP_P,a0,L + calla pal_getf + move *a9(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uyes_2 + movi YESS_P,a0,L + calla pal_getf +uyes_2 move a0,*a9(OPAL) ;change button palette + jruc uend_1 + +;update 'NO' button pal + +uno_1 + move *a8(OMISC),a14 + cmpi BLINK_CNT,a14 + jrhs uno_2 ;change button palette + inc a14 + move a14,*a8(OMISC) + jruc uend_1 +uno_2 + clr a14 + move a14,*a8(OMISC) + movi NOP_P,a0,L + calla pal_getf + move *a8(OPAL),a14 + cmp a0,a14 ;on non-hilited pal ? + jrne uno_3 + movi NOS_P,a0,L + calla pal_getf +uno_3 move a0,*a8(OPAL) ;change button palette +uend_1 rets + +;----------------------------------------------------------------------------- +; This routine set the YES/NO buttons to their original pals +; +; INPUT: a8 - ptr to 'NO' button +; a9 - ptr to 'YES' button +; +;----------------------------------------------------------------------------- + SUBR reset_yes_no_butn_pals + + movi NOS_P,a0,L + calla pal_getf + move a0,*a8(OPAL) + + movi YESS_P,a0,L + calla pal_getf + move a0,*a9(OPAL) + rets + +;----------------------------------------------------------------------------- +; This routine flashes the button when SELECTED +; +; INPUT: a8 - ptr to NO button obj. +; a9 - ptr to YES button obj. +; a11 - cursor position +;----------------------------------------------------------------------------- + SUBR flash_pressed_yes_no_button + + PUSHP a10,a11 + + move a11,a11 + jrnz flno_0 ;br=cursor on 'NO' + +;flash 'YES' button + movi yes_pal_flash_table,a11 + movi NUM_PALS_Y,a10 +flys_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a9(OPAL) ;update 'YES' button + SLEEPK 1 + dsj a10,flys_1 + jruc fldn_1 + +;flash 'NO' button +flno_0 + movi no_pal_flash_table,a11 + movi NUM_PALS_N,a10 +flno_1 + move *a11+,a0,L ;get palette + calla pal_getf + move a0,*a8(OPAL) ;update 'NO' button + SLEEPK 1 + dsj a10,flno_1 + +fldn_1 PULLP a10,a11 + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_fog_image + + movi 1,a3 ;z pos (sorting) + movi FOG_IMG_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi FOG_01,a2,L + movi [296,0],a0,L ;X coor. + movi [0,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@fog_obj_ptr,L ;save ptr. to FOG obj + + CREATE FOG_PID,animate_fog + rets + +;----------------------------------------------------------------------------- +; This PROCESS control the animating of the FOG behind player dribbling ball +;----------------------------------------------------------------------------- + SUBRP animate_fog + + movi fog_frame_table,a10,L + move @fog_obj_ptr,a8,L ;get OLD obj. ptr +anfg_1 + cmpi fog_frame_table_end,a10 ;still in range ? + jrlo anfg_2 ;yep + movi fog_frame_table,a10,L +anfg_2 move *a10+,a0,L ;get NEW img. ptr + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 6 + jruc anfg_1 + calla DELOBJA8 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the big box containing the players current +; editing information/directions +;----------------------------------------------------------------------------- + SUBR create_information_box + + movi 50,a3 ;z pos (sorting) + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side + movi BIGBOX,a2,L + movi [BBOXX,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;right side + movi [BBOXX+153,0],a0,L ;X coor. + movi [BBOXY,0],a1,L ;Y coor. + movi DMAWNZ|M_SCRNREL|M_FLIPH,a4 ;DMA flags + calla BEGINOBJ2 + +;title bar for this box + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+5,0],a1,L ;X coor. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + +;drop shadow +; movi DROPSH02,a2,L ;vertical shadow +; movi [BBOXX+3,0],a0,L ;X coor. +; movi [BBOXY+1,0],a1,L ;X coor. +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine create the dithering patterns and starts the process which +; toggles the patterns on and off. +;----------------------------------------------------------------------------- + SUBR create_dithering_patterns + + movi dither_objs,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L + clr a11 ;counter + + movi 5,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BIG_BOX_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +ntdith_1 + move *a10+,a2,L + movi [BBOXX+4,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;Y coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_1 + +;now create second set of dither patterns offset by 1 in X + clr a11 + movi dither_objs2,a9,L ;ram to store object ptrs. + movi dither_img_table,a10,L +ntdith_2 + move *a10+,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+8,0],a1,L ;X coor. + calla BEGINOBJ2 + move a8,*a9+,L ;save object ptr. + calla obj_off ;turn off second set...for now + inc a11 + cmpi DITH_IMGS,a11 + jrlo ntdith_2 + CREATE0 toggle_dither_patterns_on_off + rets + +;----------------------------------------------------------------------------- +; This process turns on set of dither patterns on and the other off +; every tick +;----------------------------------------------------------------------------- + SUBRP toggle_dither_patterns_on_off + + SLEEPK 1 +tdpof_1 + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrz tdpof_2 + + movi dither_objs2,a9,L + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9+,a8,L + calla obj_off + move *a9,a8,L + calla obj_off + movi dither_objs,a9,L + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9+,a8,L + calla obj_on + move *a9,a8,L + calla obj_on + SLEEPK 1 + + move @done_creating,a0 ;exit CREATE PLAYER...? + jrnz tdpof_1 +tdpof_2 + DIE + +;----------------------------------------------------------------------------- +; This routine creates the small box containing the players +; stats during "CREATE PLAEYR" +;----------------------------------------------------------------------------- + SUBR create_stats_area + + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;area backdrop + movi BBTXT,a2,L + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + movi 10,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + + movi TUBESH,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi TUBE02,a2,L + movi 15,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY,0],a1,L ;Y coor. + calla BEGINOBJ2 + + movi SPOTFL,a2,L + movi 10,a3 ;z pos (sorting) + movi [SBOXX,0],a0,L ;X coor. + movi [SBOXY-40,0],a1,L ;Y coor. + calla BEGINOBJ2 + rets + + + + .asg 0,TITLE_BARX + .asg 10,TITLE_BARY + +;----------------------------------------------------------------------------- +; Plots the screen length bar on screen +; +; INPUT: a0 - value for table reading +;----------------------------------------------------------------------------- + SUBR create_title_bar + + sll 7,a0 + addi title_br_xy,a0 + move *a0+,a1,L + move a1,b0 ;pallete + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi TUBE01,a2,L + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TITLE_BAR,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + rets + + ; x pos., Y pos, palette +title_br_xy + .long TUBEB_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;option screen, create player + .long TUBE_R_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;hiscore page + .long TUBE_V_P,[TITLE_BARY,0],[TITLE_BARX,0],0 ;stat screen + +;----------------------------------------------------------------------------- +; Prints title on title bar +;----------------------------------------------------------------------------- + SUBR print_title + + movi char_design_str_setup,a2,L + calla setup_message + movi TITLE_BAR,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi char_design_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_time_box + +; movi SCRB_TX,a2,L +; movi [0,0],a0,L ;X coor. +; movi [5,0],a1,L ;Y coor. +; movi 10,a3 ;z pos (sorting) +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine prints "RECORD FOUND" or "RECORD NOT FOUND" +; based on passes parameter +; +; INPUT: a0 = flag of which message to print +;----------------------------------------------------------------------------- + SUBR print_record_availablity_msg + + move a0,a0 + jrnz rnf_1 + +;print 'record found' + + movi record_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_found_str2,a4,L + calla print_string_C2 + jruc dne_1 + +rnf_1 + +;print 'record not found' + + movi record_not_found_str_setup,a2,L + calla setup_message + move *a13(PC_OBJID),a0 + move a0,@mess_objid + movi record_not_found_str,a4,L + calla print_string_C2 + + move @mess_cursy,a0 + addk 15,a0 + move a0,@mess_cursy + movi BAST_W_P,a0,L + move a0,@message_palette,L + movi record_not_found_str2,a4,L + calla print_string_C2 +dne_1 rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_exit + + movi exit_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi exit_str,a4,L + calla print_string_C2 + rets + +exit_str_setup +; PRINT_STR bast8t_ascii,4,0,185,72,BAST_W_P,0 + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +exit_str + .string "DO YOU REALLY",1 + .string "WANT TO EXIT",1 + .string "CREATE PLAYER ?",0 + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_ask_chg_nme + + movi chgn_name_str_setup,a2,L + calla setup_message + movi BUTN_BOX_STUFF,a0 + move a0,@mess_objid + movi chgn_name_str,a4,L + calla print_string_C2 + rets + +chgn_name_str_setup + PRINT_STR bast8t_ascii,4,0,185,69,BAST_W_P,0 + +chgn_name_str + .string "DO YOU REALLY",1 + .string "WANT TO CHANGE YOUR",1 + .string "NAME AND PIN # ?",0 + .even + + +;----------------------------------------------------------------------------- +; This routine prints the text when EXIT the CREATE PLAYER feature +;----------------------------------------------------------------------------- + SUBR print_goodbye_msg + + move @clock_minutes,a14,L + jrnz pgm_0 + + movi timeout_str_setup2,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi time_ranout_str,a4,L + calla print_string_C2 +pgm_0 + + movi goodbye_str_setup,a2,L + calla setup_message +; movi BUTN_BOX_STUFF,a0 +; move a0,@mess_objid + movi goodbye_str,a4,L + calla print_string_C2 + + movi goodbye_str_setup2,a2,L + calla setup_message + movk 11,a0 + move a0,@mess_line_spacing + movi goodbye_str2,a4,L + calla print_string_C2 + + SLEEP 70 + movi 240,a10 +pgm_1 + SLEEPK 1 + calla get_all_buttons_cur + jrnz pgm_2 + dsj a10,pgm_1 +pgm_2 + callr del_butn_box_stuff + RETP + +;----------------------------------------------------------------------------- +; This routine plots all the instructions for the hi-lited button, after the +; players hits a button to begin editing +;----------------------------------------------------------------------------- + SUBR create_a9_butn_instructions ;a9 =butn instructions to plot + + callr del_butn_info_text + jruc cii_1 + + SUBR create_butn_instructions + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. +cii_1 sll 7,a9 ;*128 (4 longs) + addi butn_instructions_table,a9,L + +;print TITLE + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi BUTN_BOX_STUFF,a0 ;object ID + move a0,@mess_objid + move *a9+,a4,L ;get string addr. to blit + calla print_string_C2 + +;print INSTRUCTIONS + move *a9+,a2,L ;get string setup table addr. + cmpi -1,a2 ;if negative...no instructions + jreq noint_1 + calla setup_message + movi BUTN_BOX_INST,a0 ;object ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 +noint_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR turn_off_name_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_NAM4OBJ),a8,L + calla obj_off + move *a13(PC_NAM5OBJ),a8,L + calla obj_off + move *a13(PC_NAM6OBJ),a8,L + calla obj_off + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_privileges_info + + movi privileges_str_setup,a2,L + calla setup_message + movi BUTN_PRIV_INST,a0 + move a0,@mess_objid + + + movi priv_2of6_str,a4,L + move @total_points,a14 + cmpi 60,a14 + jrlt ppi_1 + movi priv_2of7_str,a4,L +ppi_1 calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This creates the name characters (echo) when player enters his/her name +; during ENTER NAME menu +; +; INPUT: a5 = object ID +;----------------------------------------------------------------------------- + SUBR create_name_objs + + PUSH a6 + move a13,a1 + addi PC_NAM1OBJ,a1 +; addi PC_LTR1OBJ,a1 + movk NAME_LETTERS,a2 ;6 letters allowed for name +cnl_1 + PUSH a0,a1,a2,a5 + +;change Y val based on mode + movi [400h | (213-7),0],a1 ;assume not in CREATE Plyr (y val) + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq cnl_1b ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne cnl_1a ; br=not AMODE CREATE PLAYER +cnl_1b +;DJT End + movi [222|400h,0],a1 ;y val + +cnl_1a clr a0 ;x val + movi BAST10DSH,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a5 + move a8,*a1+,L ;save * object + addi [12,0],a0 + dsj a2,cnl_1 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine prints the players name as its being entered during +; ENTER INITIALS menu +;----------------------------------------------------------------------------- + SUBR print_players_name + + clr a5 + movk 1,a7 ;num objs + + callr turn_off_name_objs + + move *a13(PC_DATADDR),a2,L ;start of player data + +;first char. of name + move *a2+,a0 + move *a13(PC_NAM1OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space1 + calla obj_on +#is_space1 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;second char. of name + 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 BAST10SPC,a0 + jreq #is_space2 + calla obj_on +#is_space2 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;third char. of name + 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 BAST10SPC,a0 + jreq #is_space3 + calla obj_on +#is_space3 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fourth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM4OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space4 + calla obj_on +#is_space4 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;fifth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM5OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 + jreq #is_space5 + calla obj_on +#is_space5 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;sixth char. of name + move *a2+,a0 +;;;; jrn #skip + inc a7 + addk 2,a5 ;+ 2 pixel space + move *a13(PC_NAM6OBJ),a8,L + move *a8(OIMG),a0,L + cmpi BAST10SPC,a0 +; cmpi OSGEMD_SPC,a0 + jreq #is_space6 + calla obj_on +#is_space6 + move *a8(OSIZEX),a0 ;width of object + add a0,a5 + +;seventh char. of name +; move *a2,a0 +; jrn #skip +; inc a7 +; addk 2,a5 ;+ 2 pixel space +; move *a13(PC_NAM7OBJ),a8,L +; move *a8(OIMG),a0,L +; cmpi OSGEMD_SPC,a0 +; jreq #is_space7 +; calla obj_on +;#is_space7 +; 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 +decmr_1 + 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 + addk 1,a6 ;1 pixel spacing + dsj a7,decmr_1 ;another img? + rets + + + + .asg 210,START_WEIGHT + .asg 5,HT_WGHT_INC + .asg 5,WEIGHT_INC + +;----------------------------------------------------------------------------- +; This routine prints the players body dimensions...under player dribbling +; ball +;----------------------------------------------------------------------------- + SUBR print_body_dimensions + + PUSH a10 + movi BODY_STYLE_STR,a0 + calla obj_del1c ;delete OLD body style string + +;print height + movi body_height_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + +;compute which string to use + move @height_points,a10 + move a10,a14 + sll 5,a10 + sll 4,a14 + add a14,a10 + addi body_height_str_table,a10 + move *a10+,a4,L + calla print_string_C2 + +;print weight + movi body_weight_str_setup,a2,L + calla setup_message + movi BODY_STYLE_STR,a0 + move a0,@mess_objid + + move *a10+,a0 ;get weight value + move @weight_points,a14 ;get current WEIGHT factor + sll 4,a14 ;mult. by 32 + addi body_weight_str_table,a14 + move *a14,a14 + add a14,a0 + + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi lbs_str,a4,L + calla concat_rom_string + calla print_string_C ;centered + + PULL a10 + rets + +; +; The following tables are for the players 'BODY SIZE' strings +; +body_height_str_setup + PRINT_STR bast8t_ascii,4,0,305,194,BAST_W_P,0 ;height + +body_weight_str_setup + PRINT_STR bast8t_ascii,4,0,356,194,BAST_W_P,0 ;weight + + +body_height_str_table + LW body_height_str_0,START_WEIGHT-6*HT_WGHT_INC + LW body_height_str_1,START_WEIGHT-5*HT_WGHT_INC + LW body_height_str_2,START_WEIGHT-4*HT_WGHT_INC + LW body_height_str_3,START_WEIGHT-3*HT_WGHT_INC + LW body_height_str_4,START_WEIGHT-2*HT_WGHT_INC + LW body_height_str_5,START_WEIGHT-1*HT_WGHT_INC + LW body_height_str_6,START_WEIGHT + LW body_height_str_7,START_WEIGHT+2*HT_WGHT_INC + LW body_height_str_8,START_WEIGHT+3*HT_WGHT_INC + LW body_height_str_9,START_WEIGHT+4*HT_WGHT_INC + LW body_height_str_10,START_WEIGHT+5*HT_WGHT_INC + +body_weight_str_table + .word WEIGHT_INC*-4 + .word WEIGHT_INC*-3 + .word WEIGHT_INC*-2 + .word WEIGHT_INC*-1 + .word WEIGHT_INC*0 + .word WEIGHT_INC*2 + .word WEIGHT_INC*4 + .word WEIGHT_INC*6 + .word WEIGHT_INC*8 + .word WEIGHT_INC*10 + .word WEIGHT_INC*12 + +lbs_str + .string " LBS.",0 + .even + + +body_height_str_0 + .string "5' 7''",0 + .even +body_height_str_1 + .string "5' 9''",0 + .even +body_height_str_2 + .string "5' 11''",0 + .even +body_height_str_3 + .string "6' 0''",0 + .even +body_height_str_4 + .string "6' 2''",0 + .even +body_height_str_5 + .string "6' 4''",0 + .even +body_height_str_6 + .string "6' 8''",0 + .even +body_height_str_7 + .string "6' 11''",0 + .even +body_height_str_8 + .string "7' 2''",0 + .even +body_height_str_9 + .string "7' 4''",0 + .even +body_height_str_10 + .string "7' 6''",0 + .even + + +;----------------------------------------------------------------------------- +; This routine displays the appropiate text for the currently hi-lited butn +;----------------------------------------------------------------------------- + SUBR print_butn_information + + callr del_butn_info_text + move @butn_cursor_pos,a9 ;get hi-lited butn nbr. + sll 6,a9 + addi butn_str_setup_addr_table,a9,L + move *a9+,a2,L ;get string setup table addr. + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + move *a9,a4,L ;get string addr. to blit + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_butn_info_text + +; movi CYCPID,a0 +; calla KIL1C + + movi CLSDEAD|123,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes all objects pertaining to the butn +;----------------------------------------------------------------------------- + SUBR del_butn_box_stuff + + movi BUTN_BOX_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_PRIV_INST,a0 + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + + movi BUTN_BOX_STUFF,a0 ;object ID + clr a1 ;mask + calla obj_del1c ;delete all objs with this ID + rets + + +;----------------------------------------------------------------------------- +; This PROCESS handles the timing of the CREATE PLAYER mode +; +; id = CLOCK_PID +;----------------------------------------------------------------------------- + SUBR timedown_clock + + clr a14 + move a14,@clock_seconds ;initial value :00 + movk 2,a14 + move a14,@clock_minutes + + callr create_clock_objs + + SLEEP 70 ;wait for transition to finish..etc +tcpt_0 + move @clock_minutes,a14 + jrnz tcpt_1a + move @clock_seconds,a14 + subk 20,a14 + jrgt tcpt_1a ;br=only make sounds < 30 sec. + SOUND1 cntdown_snd + movi TSEC+45,a8 + jruc tcpt_1 +tcpt_1a + + movi TSEC,a8 +tcpt_1 SLEEPK 1 + move @stop_clock,a14 ;check every second (liberal) + jrnz tcpt_1 ;br=dont time down + dsj a8,tcpt_1 + +; move @clock_minutes,a14 +; jrnz tcpt_1a +; move @clock_seconds,a14 +; cmpi 20,a14 +; jrhi tcpt_1a ;br=only make sounds < 30 sec. +; SOUND1 cntdown_snd +;tcpt_1a + move @clock_seconds,a14 + dec a14 + jrge tcpt_2 ;br=seconds >= 0 + + move @clock_minutes,a14 + dec a14 + jrn tcpt_3 ;br=at 0:00 - time out!!! + move a14,@clock_minutes + + calla update_clock_minute_imgs + + movi 59,a14 ;reset seconds +tcpt_2 + move a14,@clock_seconds ;save new SECONDS count + calla update_clock_seconds_imgs + jruc tcpt_0 + +tcpt_3 + callr del_clock_objs + clr a0 + move a0,@done_creating ;exit CREATE PLAYER... + DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_clock_objs + + movi CREATE_PLYR_TIMER,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates the images for the clock during +; create player +; +; RETURN: reg a9 - 1st digit of sec. obj. ptr. +; reg a10 - 2nd digit of sec. obj. ptr. +; reg a11 - minute obj. ptr. +;----------------------------------------------------------------------------- + SUBR create_clock_objs + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CREATE_PLYR_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;backdrop + movi [TITLE_BARX+293,0],a0 + movi [TITLE_BARY-1,0],a1 + movi TIMEPRT,a2,L + movi 1400,a3 ;z pos (sorting) + calla BEGINOBJ2 + +;create time digits (minutes : seconds) +;minutes + movi 1600,a3 ;z pos (sorting) + movi BRSH1802,a2,L + movi [TITLE_BARX+311,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a11 +;colon + movi BRSH18CO,a2,L + movi [TITLE_BARX+324,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + +;2nd digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+356,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a10 + +;1st digit of seconds + movi BRSH1800,a2,L + movi [TITLE_BARX+338,0],a0 ;X coor. + movi [TITLE_BARY-3,0],a1 ;Y coor. + calla BEGINOBJ2 + move a8,a9 + rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a11 - ptr. to minutes obj. +;----------------------------------------------------------------------------- + SUBR update_clock_minute_imgs + + move @clock_minutes,a0 + jrnz min_0 + move a11,a8 + calla obj_off ;dont show '0' minutes + jruc min_1 + +min_0 sll 5,a0 + addi timer_img_table,a0,L + move *a0,a0,L ;ptr. to NEW minute image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a11,a8 + calla obj_aniq +min_1 rets + +;----------------------------------------------------------------------------- +; This routine reads the CLOCK ram values and converts them to single +; digits, then updates the clock objects to match +; +; INPUT: reg a9 - ptr. to 1st digit of seconds obj. ptr +; reg a10 - ptr. to 2nd digit of seconds obj. ptr +;----------------------------------------------------------------------------- + SUBR update_clock_seconds_imgs + +; Seperate SECONDS into 2 digits +min_2 + clr a0 ;reset counter + move @clock_seconds,a14 ;get new SECONDS count + cmpi 10,a14 + jrlt div_dne ;seconds < 10 (0 1st digit) +div_10 + inc a0 ;a0 will become the 1st digit + subk 10,a14 ;a14 will become the 2nd digit + cmpi 10,a14 + jrhs div_10 ;timer > 10 sec. still +div_dne + sll 5,a0 ;compute offset into table (1st digit) + sll 5,a14 ;compute offset into table (2nd digit) + movi timer_img_table,a1,L + add a1,a0 ;a0 = table addr. of digit + add a1,a14 ;a14 = table addr. of digit + move *a0,a0,L ;a0 = img. pointer of 1st digit + move *a14,a2,L ;a14 = img. pointer of 2nd digit +; +; Update first digit of seconds +; +secs_1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 + calla obj_aniq +; +; Update second digit of seconds +; + move a2,a0 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 + calla obj_aniq + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pick_head_objs + + movi 20,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + +;create divider bar + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+47,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+61,0],a1 ;y val + movi HDSPTLT,a2,L + calla BEGINOBJ2 + +;create BIG HEAD backdrop + movi [BBOXX+5,0],a0 + movi [BBOXY+122,0],a1 ;y val + movi HDSPTLT2,a2,L + calla BEGINOBJ2 + +;create bottom divider bar + movi 40,a3 ;z pos + movi TUBE02,a2,L + movi [BBOXX+5,0],a0,L ;X coor. + movi [BBOXY+189,0],a1,L ;X coor. + calla BEGINOBJ2 + +;create HEAD cursor bar + movi 50,a3 ;z pos + movi [BBOXX+5,0],a0 ;x val of first head + movi [BBOXY+107,0],a1 ;y val + movi HDBAR,a2,L + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +; This routine creates the OBJECT (bar) until the total points fraction +; during the ADJUST ATTRIBUTES option +; +; INPUT: reg a0 - table offset for positing the bar +;----------------------------------------------------------------------------- + SUBR create_divider_bar + + sll 6,a0 + addi divider_bar_xys,a0,L + move *a0+,a1,L ;get Y coor. + move *a0,a0,L ;get X coor. + movi TOTALBR,a2,L + movk 15,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BUTN_BOX_STUFF,a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +; +; This table contains the HEIGHT scale table pointers +; +body_scale_table + .long scale_plyr_57 ;height=0 + .long scale_plyr_59 ;1 + .long scale_plyr_511 ;2 + .long scale_plyr_60 ;3 + .long scale_plyr_62 ;4 + .long scale_plyr_64 ;5 + .long scale_plyr_68 ;6 + .long scale_plyr_611 ;7 + .long scale_plyr_72 ;8 + .long scale_plyr_74 ;9 + .long scale_plyr_76 ;10 + +scale_plyr_57 + .long scale57et_t,scale57et_t,scale57t_t,scale57_t,scale57f_t,scale57ef_t +scale_plyr_59 + .long scale59et_t,scale59et_t,scale59t_t,scale59_t,scale59f_t,scale59ef_t +scale_plyr_511 + .long scale511et_t,scale511et_t,scale511t_t,scale511_t,scale511f_t,scale511ef_t +scale_plyr_60 + .long scale60et_t,scale60et_t,scale60t_t,scale60_t,scale60f_t,scale60ef_t +scale_plyr_62 + .long scale62et_t,scale62et_t,scale62t_t,scale62_t,scale62f_t,scale62ef_t +scale_plyr_64 + .long scale64et_t,scale64et_t,scale64t_t,scale64_t,scale64f_t,scale64ef_t +scale_plyr_68 + .long scale68et_t,scale68et_t,scale68t_t,scale68_t,scale68f_t,scale68ef_t +scale_plyr_611 + .long scale611et_t,scale611et_t,scale611t_t,scale611_t,scale611f_t,scale611ef_t +scale_plyr_72 + .long scale72et_t,scale72et_t,scale72t_t,scale72_t,scale72f_t,scale72ef_t +scale_plyr_74 + .long scale74et_t,scale74et_t,scale74t_t,scale74_t,scale74f_t,scale74ef_t +scale_plyr_76 + .long scale76et_t,scale76et_t,scale76t_t,scale76_t,scale76f_t,scale76ef_t + + +divider_bar_xys + .long [BBOXY+56,0],[BBOXX+5,0] ;y,x (attributes) + .long [BBOXY+174,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+25,0],[BBOXX+5,0] ;y,x (enter name/pin nbr) + .long [BBOXY+62,0],[BBOXX+5,0] ;y,x (privileges) + .long [BBOXY+55,0],[BBOXX+5,0] ;y,x (nick name) + .long [BBOXY+41,0],[BBOXX+5,0] ;y,x (stats) + +BRSH18R_P: + .word 14 + .word 0318ch,07c62h,07441h,06c41h,06421h,05c20h,05400h,04c00h + .word 04400h,03c00h,03400h,02c00h,02400h,00400h + + +;palette_flash_table +; .long yes_pal_flash_table ;0 YES +; .long no_pal_flash_table ;1 NO + + +yes_pal_flash_table + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + .long YESP_P + .long YESP_P + .long YESP15_P + .long YESP15_P + + .long YESP14_P + .long YESP13_P + .long YESP12_P + .long YESP11_P + .long YESP10_P + .long YESP09_P + .long YESP08_P + .long YESP07_P + .long YESP06_P + .long YESP05_P + .long YESP04_P + .long YESP03_P + .long YESP02_P + .long YESP01_P + .long YESP_P +yes_pal_flash_table_end + + +no_pal_flash_table + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + .long NOP_P + .long NOP_P + .long NOP15_P + .long NOP15_P + + .long NOP14_P + .long NOP13_P + .long NOP12_P + .long NOP11_P + .long NOP10_P + .long NOP09_P + .long NOP08_P + .long NOP07_P + .long NOP06_P + .long NOP05_P + .long NOP04_P + .long NOP03_P + .long NOP02_P + .long NOP01_P + .long NOP_P +no_pal_flash_table_end + +NUM_PALS_Y .equ (yes_pal_flash_table_end-yes_pal_flash_table)/32 +NUM_PALS_N .equ (no_pal_flash_table_end-no_pal_flash_table)/32 + + +; +; These are SOURCE palettes for the above table +; +YESP01_P: + .word 64 + .word 024a8h,04ff3h,043f0h,03beeh,033ech,02beah,023e8h,017e5h + .word 00fe3h,00fe3h,00fc3h,00ba2h,00b82h,00b42h,00b22h,00b02h + .word 00ae2h,00ac2h,00aa2h,00a82h,00a62h,00a42h,00a22h,00a02h + .word 009e2h,009c2h,009a2h,00982h,00962h,00942h,00922h,00922h + .word 01642h,01a62h,01e62h,02282h,026a2h,02ec2h,032e2h,03b02h + .word 04322h,04742h,04f62h,05782h,05fa2h,06bc2h,073e2h,07be2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07322h,072e2h,06ec2h + .word 06aa2h,06662h,06242h,05e22h,05e02h,05a82h,04aa2h,036a2h + +YESP02_P: + .word 64 + .word 024a8h,057f5h,04bf2h,043f0h,03beeh,033ech,02beah,01fe7h + .word 017e5h,017e5h,017e5h,013e4h,013c4h,01384h,01364h,01344h + .word 01324h,01304h,012e4h,012c4h,012a4h,01284h,01264h,01244h + .word 01224h,01204h,011e4h,011c4h,011a4h,01184h,01164h,01164h + .word 01e84h,022a4h,026a4h,02ac4h,02ee4h,03704h,03b24h,04344h + .word 04b64h,04f84h,057a4h,05fc4h,067e4h,073e4h,07be4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07b64h,07b24h,07704h + .word 072e4h,06ea4h,06a84h,06664h,06644h,062c4h,052e4h,03ee4h + +YESP03_P: + .word 64 + .word 024a8h,05ff7h,053f4h,04bf2h,043f0h,03beeh,033ech,027e9h + .word 01fe7h,01fe7h,01fe7h,01be6h,01be6h,01bc6h,01ba6h,01b86h + .word 01b66h,01b46h,01b26h,01b06h,01ae6h,01ac6h,01aa6h,01a86h + .word 01a66h,01a46h,01a26h,01a06h,019e6h,019c6h,019a6h,019a6h + .word 026c6h,02ae6h,02ee6h,03306h,03726h,03f46h,04366h,04b86h + .word 053a6h,057c6h,05fe6h,067e6h,06fe6h,07be6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,072c6h,06ea6h,06e86h,06b06h,05b26h,04726h + +YESP04_P: + .word 64 + .word 024a8h,067f9h,05bf6h,053f4h,04bf2h,043f0h,03beeh,02febh + .word 027e9h,027e9h,027e9h,023e8h,023e8h,023e8h,023e8h,023c8h + .word 023a8h,02388h,02368h,02348h,02328h,02308h,022e8h,022c8h + .word 022a8h,02288h,02268h,02248h,02228h,02208h,021e8h,021e8h + .word 02f08h,03328h,03728h,03b48h,03f68h,04788h,04ba8h,053c8h + .word 05be8h,05fe8h,067e8h,06fe8h,077e8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07b08h,076e8h,076c8h,07348h,06368h,04f68h + +YESP05_P: + .word 64 + .word 024a8h,06ffbh,063f8h,05bf6h,053f4h,04bf2h,043f0h,037edh + .word 02febh,02febh,02febh,02beah,02beah,02beah,02beah,02beah + .word 02beah,02bcah,02baah,02b8ah,02b6ah,02b4ah,02b2ah,02b0ah + .word 02aeah,02acah,02aaah,02a8ah,02a6ah,02a4ah,02a2ah,02a2ah + .word 0374ah,03b6ah,03f6ah,0438ah,047aah,04fcah,053eah,05beah + .word 063eah,067eah,06feah,077eah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07b8ah,06baah,057aah + +YESP06_P: + .word 64 + .word 024a8h,077fdh,06bfah,063f8h,05bf6h,053f4h,04bf2h,03fefh + .word 037edh,037edh,037edh,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033cch,033ach,0338ch,0336ch,0334ch + .word 0332ch,0330ch,032ech,032cch,032ach,0328ch,0326ch,0326ch + .word 03f8ch,043ach,047ach,04bcch,04fech,057ech,05bech,063ech + .word 06bech,06fech,077ech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07fcch,073ech,05fech + +YESP07_P: + .word 64 + .word 024a8h,07fffh,073fch,06bfah,063f8h,05bf6h,053f4h,047f1h + .word 03fefh,03fefh,03fefh,03beeh,03beeh,03beeh,03beeh,03beeh + .word 03beeh,03beeh,03beeh,03beeh,03beeh,03bceh,03baeh,03b8eh + .word 03b6eh,03b4eh,03b2eh,03b0eh,03aeeh,03aceh,03aaeh,03aaeh + .word 047ceh,04beeh,04feeh,053eeh,057eeh,05feeh,063eeh,06beeh + .word 073eeh,077eeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07feeh,07beeh,067eeh + +YESP08_P: + .word 64 + .word 024a8h,07fffh,07bfeh,073fch,06bfah,063f8h,05bf6h,04ff3h + .word 047f1h,047f1h,047f1h,043f0h,043f0h,043f0h,043f0h,043f0h + .word 043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043f0h,043d0h + .word 043b0h,04390h,04370h,04350h,04330h,04310h,042f0h,042f0h + .word 04ff0h,053f0h,057f0h,05bf0h,05ff0h,067f0h,06bf0h,073f0h + .word 07bf0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07ff0h,07ff0h,06ff0h + +YESP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07bfeh,073fch,06bfah,063f8h,057f5h + .word 04ff3h,04ff3h,04ff3h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h,04bf2h + .word 04bf2h,04bd2h,04bb2h,04b92h,04b72h,04b52h,04b32h,04b32h + .word 057f2h,05bf2h,05ff2h,063f2h,067f2h,06ff2h,073f2h,07bf2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,077f2h + +YESP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07bfeh,073fch,06bfah,05ff7h + .word 057f5h,057f5h,057f5h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h,053f4h + .word 053f4h,053f4h,053f4h,053d4h,053b4h,05394h,05374h,05374h + .word 05ff4h,063f4h,067f4h,06bf4h,06ff4h,077f4h,07bf4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +YESP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07bfeh,073fch,067f9h + .word 05ff7h,05ff7h,05ff7h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bf6h + .word 05bf6h,05bf6h,05bf6h,05bf6h,05bf6h,05bd6h,05bb6h,05bb6h + .word 067f6h,06bf6h,06ff6h,073f6h,077f6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +YESP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07bfeh,06ffbh + .word 067f9h,067f9h,067f9h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h,063f8h + .word 06ff8h,073f8h,077f8h,07bf8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +YESP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,077fdh + .word 06ffbh,06ffbh,06ffbh,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah,06bfah + .word 077fah,07bfah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +YESP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 077fdh,077fdh,077fdh,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 073fch,073fch,073fch,073fch,073fch,073fch,073fch,073fch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +YESP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh,07bfeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + + +NOP01_P: + .word 64 + .word 024a8h,07e73h,07e10h,07dceh,07d8ch,07d4ah,07d08h,07ca5h + .word 07c63h,07c42h,07c42h,07842h,07042h,06c42h,06442h,06042h + .word 05c42h,05842h,05442h,05042h,04c42h,04842h,04442h,04042h + .word 03c42h,03842h,03442h,03042h,02c42h,02842h,02442h,02442h + .word 048a2h,04cc2h,04ce2h,05102h,05522h,05962h,05d82h,061c2h + .word 06602h,06a22h,06e62h,072a2h,076e2h,07b42h,07f82h,07fc2h + .word 07fe2h,07fe2h,07fa2h,07b82h,07742h,07722h,072e2h,06ec2h + .word 06aa2h,06662h,06642h,06222h,05e02h,059e2h,055c2h,055a2h + +NOP02_P: + .word 64 + .word 024a8h,07eb5h,07e52h,07e10h,07dceh,07d8ch,07d4ah,07ce7h + .word 07ca5h,07c84h,07c84h,07c84h,07884h,07484h,06c84h,06884h + .word 06484h,06084h,05c84h,05884h,05484h,05084h,04c84h,04884h + .word 04484h,04084h,03c84h,03884h,03484h,03084h,02c84h,02c84h + .word 050e4h,05504h,05524h,05944h,05d64h,061a4h,065c4h,06a04h + .word 06e44h,07264h,076a4h,07ae4h,07f24h,07f84h,07fc4h,07fe4h + .word 07fe4h,07fe4h,07fe4h,07fc4h,07f84h,07f64h,07b24h,07704h + .word 072e4h,06ea4h,06e84h,06a64h,06644h,06224h,05e04h,05de4h + +NOP03_P: + .word 64 + .word 024a8h,07ef7h,07e94h,07e52h,07e10h,07dceh,07d8ch,07d29h + .word 07ce7h,07cc6h,07cc6h,07cc6h,07cc6h,07cc6h,074c6h,070c6h + .word 06cc6h,068c6h,064c6h,060c6h,05cc6h,058c6h,054c6h,050c6h + .word 04cc6h,048c6h,044c6h,040c6h,03cc6h,038c6h,034c6h,034c6h + .word 05926h,05d46h,05d66h,06186h,065a6h,069e6h,06e06h,07246h + .word 07686h,07aa6h,07ee6h,07f26h,07f66h,07fc6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fc6h,07fa6h,07f66h,07f46h + .word 07b26h,076e6h,076c6h,072a6h,06e86h,06a66h,06646h,06626h + +NOP04_P: + .word 64 + .word 024a8h,07f39h,07ed6h,07e94h,07e52h,07e10h,07dceh,07d6bh + .word 07d29h,07d08h,07d08h,07d08h,07d08h,07d08h,07d08h,07908h + .word 07508h,07108h,06d08h,06908h,06508h,06108h,05d08h,05908h + .word 05508h,05108h,04d08h,04908h,04508h,04108h,03d08h,03d08h + .word 06168h,06588h,065a8h,069c8h,06de8h,07228h,07648h,07a88h + .word 07ec8h,07ee8h,07f28h,07f68h,07fa8h,07fe8h,07fe8h,07fe8h + .word 07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fe8h,07fa8h,07f88h + .word 07f68h,07f28h,07f08h,07ae8h,076c8h,072a8h,06e88h,06e68h + +NOP05_P: + .word 64 + .word 024a8h,07f7bh,07f18h,07ed6h,07e94h,07e52h,07e10h,07dadh + .word 07d6bh,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah + .word 07d4ah,0794ah,0754ah,0714ah,06d4ah,0694ah,0654ah,0614ah + .word 05d4ah,0594ah,0554ah,0514ah,04d4ah,0494ah,0454ah,0454ah + .word 069aah,06dcah,06deah,0720ah,0762ah,07a6ah,07e8ah,07ecah + .word 07f0ah,07f2ah,07f6ah,07faah,07feah,07feah,07feah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07fcah + .word 07faah,07f6ah,07f4ah,07f2ah,07f0ah,07aeah,076cah,076aah + +NOP06_P: + .word 64 + .word 024a8h,07fbdh,07f5ah,07f18h,07ed6h,07e94h,07e52h,07defh + .word 07dadh,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch,07d8ch + .word 07d8ch,07d8ch,07d8ch,0798ch,0758ch,0718ch,06d8ch,0698ch + .word 0658ch,0618ch,05d8ch,0598ch,0558ch,0518ch,04d8ch,04d8ch + .word 071ech,0760ch,0762ch,07a4ch,07e6ch,07each,07ecch,07f0ch + .word 07f4ch,07f6ch,07fach,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fach,07f8ch,07f6ch,07f4ch,07f2ch,07f0ch,07eech + +NOP07_P: + .word 64 + .word 024a8h,07fffh,07f9ch,07f5ah,07f18h,07ed6h,07e94h,07e31h + .word 07defh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh,07dceh + .word 07dceh,07dceh,07dceh,07dceh,07dceh,079ceh,075ceh,071ceh + .word 06dceh,069ceh,065ceh,061ceh,05dceh,059ceh,055ceh,055ceh + .word 07a2eh,07e4eh,07e6eh,07e8eh,07eaeh,07eeeh,07f0eh,07f4eh + .word 07f8eh,07faeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh,07feeh + .word 07feeh,07feeh,07fceh,07faeh,07f8eh,07f6eh,07f4eh,07f2eh + +NOP08_P: + .word 64 + .word 024a8h,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07ed6h,07e73h + .word 07e31h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07a10h + .word 07610h,07210h,06e10h,06a10h,06610h,06210h,05e10h,05e10h + .word 07e70h,07e90h,07eb0h,07ed0h,07ef0h,07f30h,07f50h,07f90h + .word 07fd0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07fd0h,07fb0h,07f90h,07f70h + +NOP09_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07f18h,07eb5h + .word 07e73h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h,07e52h + .word 07e52h,07a52h,07652h,07252h,06e52h,06a52h,06652h,06652h + .word 07eb2h,07ed2h,07ef2h,07f12h,07f32h,07f72h,07f92h,07fd2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h + .word 07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07ff2h,07fd2h,07fb2h + +NOP10_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f5ah,07ef7h + .word 07eb5h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h,07e94h + .word 07e94h,07e94h,07e94h,07a94h,07694h,07294h,06e94h,06e94h + .word 07ef4h,07f14h,07f34h,07f54h,07f74h,07fb4h,07fd4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + .word 07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h,07ff4h + +NOP11_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fdeh,07f9ch,07f39h + .word 07ef7h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ed6h,07ed6h,07ed6h,07ad6h,076d6h,076d6h + .word 07f36h,07f56h,07f76h,07f96h,07fb6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + .word 07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h,07ff6h + +NOP12_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fdeh,07f7bh + .word 07f39h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f78h,07f98h,07fb8h,07fd8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +NOP13_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fbdh + .word 07f7bh,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah,07f5ah + .word 07fbah,07fdah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + .word 07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah,07ffah + +NOP14_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbdh,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch,07f9ch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + .word 07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch,07ffch + +NOP15_P: + .word 64 + .word 024a8h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh,07fdeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + .word 07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh,07ffeh + +; +; This table contains the images which make up the dithering pattern +; +dither_img_table + .long DITH_A + .long DITH_B + .long DITH_C + .long DITH_D +dither_img_table_end + +DITH_IMGS equ (dither_img_table_end-dither_img_table)/32 + + +; +; This table contains the frames for the FOG effect during CREATE PLAYER +; +fog_frame_table + .long FOG_01 + .long FOG_02 + .long FOG_03 + .long FOG_04 + .long FOG_05 + .long FOG_06 + .long FOG_07 + .long FOG_08 + .long FOG_09 + .long FOG_10 + .long FOG_11 + .long FOG_12 + .long FOG_13 + .long FOG_14 + .long FOG_15 + .long FOG_16 +fog_frame_table_end + +; +; Info. for privileges option in CREATE PLAYER +; +privileges_str_setup + PRINT_STR bast8t_ascii,2,0,BBOXX+76,BBOXY+61,BAST_W_P,0 + +priv_2of7_str + .string "CHECK 2 OF THE 7",0 + .even + +priv_2of6_str + .string "CHECK 2 OF THE 6",0 + .even + + +; +; Title message for CREATE PLAYER option +; +char_design_str_setup + PRINT_STR brush20_ascii,10,0,165,7,BRSHGYOP,0 + +char_design_str + .string "CREATE PLAYER",0 + .even + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_instructions_table + .long title_setup,plr_stats_title, dirs_setup2,plr_stats_dirs + .long title_setup,choose_head_title, dirs_setup1,choose_head_dirs + .long title_setup,change_uniform_title,dirs_setup1,change_uniform_dirs + .long title_setup,adj_attrib_title, dirs_setup1,adj_attrib_dirs + .long title_setup,pick_privs_title, dirs_setup2,privilege_dirs + .long title_setup,pick_nick_name_title,dirs_setup1,nick_name_dirs + .long title_setup,change_name_title, -1,-1 + .long title_setup,save_exit_title, -1,-1 + .long title_setup,enter_name_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,enter_pin_title, -1,-1 ;NOT A button...just here to use same code + .long title_setup,move_cursor_title, -1,-1 ;NOT A button... + +title_setup + PRINT_STR brush12_ascii,4,0,185,40,BRUSH_W_P,0 + + +dirs_setup1 + PRINT_STR bast7t_ascii,4,0,185,57,BAST_Y_P,0 +dirs_setup2 + PRINT_STR bast7t_ascii,4,0,185,60,BAST_Y_P,0 +;dirs_setup3 +; PRINT_STR bast7t_ascii,4,0,185,62,BAST_Y_P,0 + + +move_cursor_title + .string "choose option",0 + .even + +enter_name_title + .string "enter name/pin",0 + .even + +enter_pin_title + .string "enter pin number",0 + .even + +change_uniform_title + .string "change uniform",0 + .even +change_uniform_dirs + .string "up/dwn: select uniform",1 + .string "lft/rgt: home/away team",1 + .string "buttons: save & exit",0 + .even + +choose_head_title + .string "choose head",0 + .even +choose_head_dirs + .string "lft/rgt: select head",1 + .string "buttons: save & exit",0 + .even + +adj_attrib_title + .string "adjust attributes",0 + .even +adj_attrib_dirs + .string "up/dwn: move cursor",1 + .string "lft/rgt: adjust attrib.",1 + .string "buttons: save & exit",0 + .even + +pick_privs_title + .string "choose privileges",0 + .even + +privilege_dirs + .string "up/dwn: move cursor",1 + .string "lft/rt: toggle check",1 + .string "buttons: save & exit",0 + .even + +pick_nick_name_title + .string "choose nick name",0 + .even + +nick_name_dirs + .string "up/dwn: select name",1 + .string "lft/rgt: play sound",1 + .string "buttons: save & exit",0 + .even + +change_name_title + .string "change name/pin",0 + .even + +plr_stats_title + .string "player statistics",0 + .even +plr_stats_dirs + .string "buttons: next page",0 + .even + +save_exit_title + .string "save and exit",0 + .even +save_exit_dirs + .string "choose wisely",0 + .even + + +; +; This table contains: +; +; 1) Addresses of other tables for the STRING initialization routines +; 2) Address of table containing the string to blit +; +butn_str_setup_addr_table + .long butn_str_setup1,explain_plyr_stats_strs + .long butn_str_setup2,explain_choose_head_strs + .long butn_str_setup3,explain_change_uniform_strs + .long butn_str_setup4,explain_adjust_attrib_strs + .long butn_str_setup5,explain_privileges_strs + .long butn_str_setup6,explain_nick_name_strs + .long butn_str_setup7,explain_enter_name_strs + .long butn_str_setup8,explain_save_exit_strs + +butn_str_setup1 + PRINT_STR bast8t_ascii,4,0,185,56,BAST_W_P,0 +butn_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,66,BAST_W_P,0 +butn_str_setup3 + PRINT_STR bast8t_ascii,4,0,185,89,BAST_W_P,0 +butn_str_setup4 + PRINT_STR bast8t_ascii,4,0,185,114,BAST_W_P,0 +butn_str_setup5 + PRINT_STR bast8t_ascii,4,0,185,139,BAST_W_P,0 +butn_str_setup6 + PRINT_STR bast8t_ascii,4,0,185,165,BAST_W_P,0 +butn_str_setup7 + PRINT_STR bast8t_ascii,4,0,185,191,BAST_W_P,0 +butn_str_setup8 + PRINT_STR bast8t_ascii,4,0,185,215,BAST_W_P,0 + + +explain_privileges_strs + .string "press any button",1 + .string "to choose your",1 + .string "players privileges",0 + .even + +explain_nick_name_strs + .string "press any button",1 + .string "to choose your",1 + .string "unique speech call",0 + .even + +explain_change_uniform_strs + .string "press any button",1 + .string "to change your",1 + .string "players uniform",0 + .even + +explain_choose_head_strs + .string "press any button",1 + .string "to change your",1 + .string "players head",0 + .even + +explain_adjust_attrib_strs + .string "press any button",1 + .string "to adjust your",1 + .string "players attributes",0 + .even + +explain_enter_name_strs + .string "press any button",1 + .string "to change your",1 + .string "players name/pin",0 + .even + +explain_plyr_stats_strs + .string "press any button",1 + .string "to see your",1 + .string "players statistics",0 + .even + +explain_save_exit_strs + .string "press any button",1 + .string "to save and exit",0 + .even + + +; +; Goodbye message from CREATE PLAYER +; +goodbye_str_setup + PRINT_STR bast8t_ascii,4,0,185,90,BAST_Y_P,0 + +goodbye_str_setup2 + PRINT_STR bast8t_ascii,4,0,185,115,BAST_W_P,0 + +timeout_str_setup2 + PRINT_STR brush10_ascii,4,0,185,65,BRUSH_R_P,0 + +time_ranout_str + .string "TIME EXPIRED!",0 + .even +goodbye_str + .string "record saved.",0 + .even +goodbye_str2 + .string "you can play this",1 + .string "character by",1 + .string "entering your",1 + .string "name and pin",1 + .string "number at the",1 + .string "start of a new",1 + .string "game.",0 + .even + +; +; Record availablity messages +; +record_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str_setup + PRINT_STR bast8t_ascii,4,0,185,110,BAST_Y_P,0 + +record_not_found_str + .string "record not found",0 + .even +record_not_found_str2 + .string "opening new record",1 + .string "using default values.",0 + .even + +record_found_str + .string "record found",0 + .even +record_found_str2 + .string "data from record",1 + .string "read in!",0 + .even + +; +; This table contains the images which corespond to +; each digit of the CREATE PLAYER timer +; +timer_img_table + .long BRSH1800 + .long BRSH1801 + .long BRSH1802 + .long BRSH1803 + .long BRSH1804 + .long BRSH1805 + .long BRSH1806 + .long BRSH1807 + .long BRSH1808 + .long BRSH1809 + +; +; +; +my_alpha_table + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G,BAST8T_H ;0-7 + .long BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P ;8-15 + .long BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X ;16-23 + .long BAST8T_Y,BAST8T_Z,BAST8TAND,BAST8TSPC,BAST8TSPC ;24-31 + + +******** + + + + + + +********************************************************************* + + .end + + diff --git a/SRC/MAKEROMS.BAT b/SRC/MAKEROMS.BAT new file mode 100644 index 0000000..a7b400c --- /dev/null +++ b/SRC/MAKEROMS.BAT @@ -0,0 +1,21 @@ +@echo off + +echo>>bb.lrn ff800000 +echo.>>bb.lrn +echo>>bb.lrn 2 +echo.>>bb.lrn +echo>>bb.lrn img\bbvda.irw +echo>>bb.lrn bb.out +echo.>>bb.lrn +echo.>>bb.lrn +echo.>>bb.lrn +echo.>>bb.lrn +echo>>bb.lrn a + +srec < bb.lrn +copy /b bbf8.0+bbfa.0+bbfc.0+bbfe.0 7m.0 /v +copy /b bbf8.1+bbfa.1+bbfc.1+bbfe.1 7m.1 /v +dataio 7m.0 +dataio 7m.1 + +del >nul bb.lrn diff --git a/SRC/MAKEVDA.BAT b/SRC/MAKEVDA.BAT new file mode 100644 index 0000000..baba1c7 --- /dev/null +++ b/SRC/MAKEVDA.BAT @@ -0,0 +1,27 @@ +@echo off +cd c:\video\bball\img + +if exist cheers.* del cheers.* +if exist trophy.* del trophy.* + +vda2frm cheers +vda2frm trophy +pkzipo cheers cheers.frm +pkzipo trophy trophy.frm +zip2bin cheers +zip2bin trophy + +load2 BBVDA /di /fi /ti /x +del >nul imgtbl.asm +del >nul imgtbl.glo +del >nul imgpal.asm +move >nul /Y *.tbl .. + +if exist cheers.frm del cheers.frm +if exist cheers.hdr del cheers.hdr +if exist cheers.zip del cheers.zip +if exist trophy.frm del trophy.frm +if exist trophy.hdr del trophy.hdr +if exist trophy.zip del trophy.zip + +cd .. diff --git a/SRC/MENU.ASM b/SRC/MENU.ASM new file mode 100644 index 0000000..ac9cbc3 --- /dev/null +++ b/SRC/MENU.ASM @@ -0,0 +1,8319 @@ +************************************************************** +* +* Owner: none +* +* Software: LARRY DEMAR and DR. J +* Initiated: ? +* +* Modified: Shawn Liptak, 11/1/91 -Total carnage +* Shawn Liptak, 1/20/92 -Coinage from T2, Dipswitch +* Shawn Liptak, 1/24/92 -Coinage corrections +* Shawn Liptak, 3/4/92 -Basketball mods +* Shawn Liptak, 10/2/92 -TUNIT sound mods +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/10/95 -NBA 2 (for wwf unit) +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 18:27 +*.Last mod - 4/11/95 10:30am +************************************************************** + .file "menu.asm" + .title "test menus" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + + .text + +; IN THIS MODULE + + .DEF MEN_MAIN,GET_CSPT + .DEF MESS_FAC + .DEF ANY_BUT,MEN_YN + .DEF STR_OBJ + .DEF STR_FREE + .DEF CKPROMPT + .DEF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .DEF RTR_LEV,ROM_LEV + .DEF MESS_MM + .DEF CS_ENTS ;NUMBER OF HIGHEST IN COIN TABLE + .DEF TWO_TS,TWO_TP + .DEF FAC_STUF + .DEF BUILD_ST + .DEF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .DEF DCODE ;DIG CODE CURRENTLY BEING MADE + .DEF HID_P + .DEF SNDTST + .DEF USA_1, USA_2, USA_3, USA_4, USA_ELECTITLE + .DEF GERMAN_1, GERMAN_2, GERMAN_3, GERMAN_4, GERMAN_ELECTITLE + .DEF FRENCH_1, FRENCH_2, FRENCH_3, FRENCH_4, FRENCH_ELECTITLE + .DEF DIPCOINTAB + +; IN SOUNDS.ASM +;DJT Start +; .ref snd_reset + .ref QSNDRST +;DJT End + +; IN TEST.ASM + + .ref get_but_val_down,get_stick_val_cur,dpageflip_off + + .ref SNDSND,nosounds,set_volume + .ref MENU_TOP + + .ref copy_rom_string + .ref concat_string,concat_rom_string + .ref dec_to_asc + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _set_time + .ref message_buffer + .ref _clk_rd + .ref _get_time + .ref _aquire_time + .ref RECTANGLE + .ref COL_INST + .ref GETSTICK + .ref ST_STICK + .ref CLR_MAIN + .ref ADJ_INST + .ref CADJ_BOX + .ref CLR_CUR + + .ref fudge_switches,fudge_switches2 + .ref fswitches_cur,fswitches_last,fswitches_down + .REF WDOGDIS,pal_getf + .REF GEN_MENU,B_MENU + .REF L_MESS,TOP_BOX + .REF GET_AUD + .REF LM_FINIS + .REF BAD_AUD + .REF MAIN_RET + .REF AREUSURE + .REF F_TITLE + .REF ST_STICK + .REF GETSTICK + .REF FAC_SET + .REF SUR_MESS + .REF SURE_BOX + .REF GET_FAC + .REF WAIT_BUT + .REF DIGSRT + .REF DIAG_EX +; .REF GET_ADV + .REF STD_BORD + .REF SND_MADE + .REF NO_CLEAR + .REF LAST_BUT + .REF G_BORDER +;DJT ref moved down to reference + +; IN AUDIT.ASM + + .REF LM_SETUP +; .REF ROM_NAME + .REF GET_ADJ + .REF STRCAT +; .REF CLR_SUBS + .REF NO_CREDS + .REF CLR_AUDR + .REF CLR_AUD + .REF CAT_A0 + .REF CK_MAX + .REF ADJ_PAGE + .REF F_ADC_S + .REF WC_BYTEI + .REF RC_WORD + .REF DEF_PAGE + .REF WAIT_MUT + .REF STORE_AUDIT + +; IN HSTD.ASM + + .REF INIT_TB,FORM_ADC,WC_WORD,CMOS_VAL + .REF P_FORK,GET_HSC,INIT_HSR + +; IN ADJUST.ASM + + .REF GO_ADJ + + +; IN UTIL.ASM + + .ref FILLAREA + .ref CLR_SCRN + .ref dpageflip_off + +; IN ATT.ASM + + .ref amode_start + +;DIAG STUFF + + .ref show_player_records + .ref SWITCHTEST + .REF COL_BARS,CROSS_H,BURN_IN,STRNEW1 + + .REF RD15FONT,SCRCLR,display_init,STRCNRM,GAMSTATE + .REF STRNGRAM,BLNKAREA,STRLNRM,RD7FONT,HEXTOASC + .REF CLR_SCRN,STRRNRM + .REF WARMSET, DIAGCPUTEST + + .ref _sound_addr + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _switch_map_mode + + .BSS FAC_FLAG,16 ;FLAG SAYS CLEAR AUDITS AND HSTABLE + ;IF FACTORY SETTINGS SUCCEED. + .BSS SCODE,16 ;SYNTH CODE LAST MADE! + .BSS DCODE,16 ;DIG CODE LAST MADE! + .BSS TMPOBJ,32 ;TEMPORARY OBJECT FROM STR_OBJ + + BSSX octopus2,16 + + .globl _rtc_seconds, _rtc_day, _rtc_date, _rtc_month + .globl _rtc_minutes, _rtc_hours, _rtc_year + .globl _tseconds,_tminutes,_thours,_tday,_tdate,_tmonth,_tyear + .globl _serial_number,_month,_day,_year,_man_date + + .bss _setup_mess,10*16 ;Used for built messages + .bss _setup_mess_msg,8*40 ;Used for built message strings + + .bss _rtc_seconds,16 ;These are used when SETTING the RTC + .bss _rtc_minutes,16 + .bss _rtc_hours,16 + .bss _rtc_day,16 + .bss _rtc_date,16 + .bss _rtc_month,16 + .bss _rtc_year,16 + + .bss _last_seconds,16 ;This is used when displaying the time + + .bss _tseconds,16 ;This is where the current time is + .bss _tminutes,16 ;stored when the time data is read + .bss _thours,16 ;from the PIC. + .bss _tday,16 + .bss _tdate,16 + .bss _tmonth,16 + .bss _tyear,16 + .bss _mytemp,32 + + .bss _serial_number,32 ;Game Serial Number (Hexidecimal) + .bss _man_date,32 ;Date of manufacture (composite) + .bss _month,32 ;Date of manufacture (month) + .bss _day,32 ;Date of manufacture (date) + .bss _year,32 ;Date of manufacture (year) + + .bss _auto_update_save,32 ;Save area for clock auto update + + +************************************************************************** +* * +* COIN TABLE * +* * +************************************************************************** +* +* The coin table is made up of the normal entries from +* the pinball system, as well as some new ones that +* determine start and buy-in cost, and others that +* aid in the determination of a "total collection". +* +* Left Slot Multiplier word +* Center Slot Multiplier word +* Right Slot Multiplier word +* fourth slot Muliplier word +* bill validator Muliplier word +* Units for Credit word +* Units for Bonus word +* Minimum Units word +* Credits to start word +* Credits to Continue word +* Divisor in money calculation word 0 means "OFF" +* +* -------------------------------------------------------------- +* The above value get copied as adjustments (and are adjustable). +* In addition, the coin table contains help on how to arrive at +* the "Total Collection" for the coin audits. +* -------------------------------------------------------------- +* +* Count for each Left coin word +* Count for each Center coin word +* Count for each Right coin word +* Count for fourth coin word +* Count for DBV word +* Pointer to Leading text string long +* Pointer to Following text string long +* +************************************************************************** +* +* GET_CSPT +* +* THIS IS CALLED TO RETURN IN A6 THE CURRENT +* CSELCT LINE AS STORED IN THE ADJUSTMENT TABLE. +* +************************************************************************** +GET_CSPT + PUSH a0 + movk ADJPRICE,a0 + CALLA GET_ADJ ;GET THE COIN SELECT NUMBER BEING USED. + CALLR CS_POINT + PULL a0 + RETS + +************************************************************************** +* CS_POINT - Point at selected entry in the coinage select table +* A0=Offset # +* Rets: A6=*Coinage table +************************************************************************** +CS_POINT + MMTM SP,A0,A1 + MOVE A0,A0 ;ZERO? + JRZ CS1 ;YEP...RETURN FIRST LINE + + CMPI CS_ENTS,A0 ;IN RANGE? + JRLS CS2 ;YEP...CONTINUE + MOVK 1,A0 ;TOO LARGE.......USE 1ST LINE. + +CS2 DEC A0 ;INDEX INTO TABLE +CS1 MOVI CS_SIZE,A1 ;SIZE PER ENTRY + MPYU A0,A1 ;OFFSET INTO TABLE + ADDI CSELCT,A1 + MOVE A1,A6 ;RETURN THE POINTER + MMFM SP,A0,A1 + RETS + +************************************************************************** +* +* CKPROMPT +* +* IS THERE A PROMPT STRING FOR THE CREDITS PAGE. +* +* A0 RETURNS: +* +* YES.....RETURN POINTER TO SOMETHING +* NO......RETURN ZERO +* +* IF A0 HAS A POINTER THEN.... +* +* IF A1 = 0 THEN A0 IS AN L_MESS STRING THAT SHOULD +* JUST BE SENT OUT. +* +* IF A1 != 0 THEN A0 IS A POINTER LIST OF UP TO 2 MESSAGES. +* THAT GIVE PRICING INFO +* +* A1 = 0 PLOT THE A0 STRING OUTRIGHT USING L_MESS +* (IT CONTAINS ALL DATA) +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 4 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 5 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 6 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 7 PLOT THE 3RD LINE OF THE STRING LIST ALONG +* ALONG WITH 2 COINS PER PLAYER +* +* A1 = 8 CUSTOM MESSAGE +* +************************************************************************** + +CKPROMPT + PUSH a6 + movk ADJFREPL,a0 + CALLA GET_ADJ + jrnz RET_NO ;Free play? + + CALLA CK_MAX ;ARE WE AT MAX CREDITS? + JRHS RET_MAX + + movk ADJNOCPAG,a0 + CALLA GET_ADJ ;CHECK THE ADJUSTMENT + JRNZ CKSPCASE ;WE'RE SET TO SHUT UP.JUST START/CONT + + movk ADJ1ST6,a0 ;has operator messed around? + CALLA GET_ADJ + JRZ CKSPCASE ;YEP...GO FOR GENERIC "2 TO START" + +* OPERATOR IS USING CANNED COINAGE....WE NEED TO USE THE +* CHECK IF ITS 2/1 OR 2/2 + + CALLR CK_2_CRED ;IS IT A 2 CREDIT MODE? + JRZ NOT_2_MODE ;NOPE...PRINT STOCK STUFF + + MOVE A0,A1 ;COPY 2/1 2/2 CODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PICK),A0 ;GET INDICATION OF WHICH LINE + JRZ CKSPCASE ;IT SAYS JUST ENUMERATE THE MODE! + +* NOW....IF ITS 2/1, A0 HAS THE CORRECT RETURN CODE +* IF ITS 2/2 WE NEED TO ADD 2 + + subk 1,a1 + JRZ RET_A0_VAL ;2/1? + + addk 3,a0 + JRUC RET_A0_VAL ;RETURN THIS! + +NOT_2_MODE + CALLR GET_CSPT ;POINT A6 AT CSEL FOR US NOW. + MOVE *A6(CS_PROMPT),A0,L ;FETCH POINTER TO MESSAGE (IF ANY) + JRZ CKSPCASE + ;WE HAVE SOMETHING STORED AT THE PROMPT + CMPI CSM_LAST,A0 ;IS IT LITTLE? + JRHI CKEXIT ;NOPE..ITS A POINTER..RETURN L_MESS STATUE + +RET_A0_VAL + MOVE A0,A1 ;ITS LITTLE...RETURN IT AS A CODE + MOVE *A6(CS_LIST),A0,L ;PASS BACK MESSAGE LIST FOR THIS MODE + JRUC CK_BYE + +RET_NO CLR A0 ;IT IS FREE PLAY. +CKEXIT CLR A1 ;NO FANCIES YET +CK_BYE PULL a6 + move a0,a0 ;Pass Z + rets + +* CONTROL COMES HERE IF IT LOOKS LIKE NO MESSAGE IS +* APPROPRIATE....CHECK FOR 2 TO START 1 TO CONTINUE GENERIC NEEDED. + +CKSPCASE + CALLR CK_2_CRED ;CHECK IF THERE ARE 2 CREDIT MODES. + JRZ RET_NO ;NOT A 2 CREDIT MODE. + + subk 1,a0 + JRZ TWO_ONE ;YEP...RETURN 2/1 + + MOVI TWO_CRED_PER_PLAYER,A0 + JRUC CKEXIT ;RETURN IT! + + +TWO_ONE MOVI TWO_TO_START_2C,A0 + + + JRUC CKEXIT + +RET_MAX MOVI MAX_C_M,A0 + JRUC CKEXIT + + +************************************************************************** +* CK_2_CRED - Checks if in a 2-credit to start mode +* +* A0=0 NOT 2/1 OR 2/2 CREDIT MODE +* A0=1 2 TO START 1 TO CONTINUE +* A0=2 2 TO START 2 TO CONTINUE +* +* Z NOT 2/1 OR 2/2 CREDIT MODE +* NZ IS 2/1 OR 2/2 CREDIT MODE +************************************************************************** +CK_2_CRED + MOVI ADJCSTRT,A0 + CALLA GET_ADJ ;HOW MANY TO START + subk 2,a0 + jrnz c2c20 ;!2 to start? + + MOVI ADJCCONT,A0 + CALLA GET_ADJ ;GET CONTINUE NUMBER + cmpi 2,a0 ;1 or 2 is what we return + jrhi c2c20 ;>2? + move a0,a0 ;Return NZ (unless its 2/0) + rets + +c2c20 clr a0 ;Pass Z + rets + +************************************************************************** +* * +* MENU HANDLING SOFTWARE * +* * +************************************************************************** + +************************************************************************** +* * +* FORCE_MAIN * +* * +* THIS IS CALLED TO GET TO MAIN MENU FROM LEVEL FURTHER * +* THAN 1 DOWN. IT SETS THE GLOBAL FLAG "MAIN_RET" * +* NON ZERO. GEN_MENU WILL KEEP RETURNING UNTIL * +* IT GETS BACK TO THE MAIN MENU. * +* * +************************************************************************** +FORCE_MAIN + MOVK 1,A0 ;POSITIVE NUMBER FORCES MAIN MENU. + MOVE A0,@MAIN_RET + RETP ;NOW "RETURN TO THE MENU" + +************************************************************************** +* * +* DIAGNOSTIC TESTS SELECTED......SHOW DIAGNOSTIC TEST MENU * +* * +************************************************************************** +GO_DIAG + MOVI MEN_DIAG,A8 ;PUT UP THE MENU AND GO! + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +************************************************************************** +* * +* COIN BOOKKEEPING SELECTED * +* * +************************************************************************** +gb20 JSRP DO_CLCOIN +GO_BOOK + CALLA CLR_SCRN + MOVI MES_BOOK,A2 + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI COIN_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI COIN1_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL + + MOVI COIN2_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + + +; MOVI COIN_A2,A0 ;PUT PART 2 OF THE TABLE THERE. +; JSRP PRNT_AUD + + MOVI MEN_DETAIL,A8 + MOVK 2,A9 ;CURSOR ON 2nd ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + jreq gb20 + + RETP + + +;DETAIL_SCREEN +; CALLA CLR_SCRN ;CLEAR OUT FOR ACTION! +; +; MOVI DT_Y1,A0 ;HEIGHT OF TOP TITLE +; MOVI ROBO_YELLOW,A9 ;COLOR +; CALLA F_TITLE ;FRAME IT +; +; MOVI DT_Y2,A0 ;HEIGHT OF 2ND TITLE +; CALLA F_TITLE ;FRAME IT +; +; MOVI DETAIL_TITLES,A8 ;NO ROOM FOR PRETTY TOP BOX...DO TITLES +; JSRP L_MESS ;ESTABLISH THE TITLES. +; +; MOVI COIN_D1,A0 ;DETAILED AUDIT 1 +; JSRP PRNT_AUD ;PRINT IT +; +; MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; +; MOVI AUDLCSUB,A8 ;SUB-TOTAL OF TOTAL MONEY +; JSRP PRINT_SUBTOTAL ;PRINT IT. +; +; MOVI COIN_D2,A0 ;DETAILED AUDIT 2 +; JSRP PRNT_AUD +; +; MOVI AUDLCDC,A8 ;NOW PRINT MONEY FOR DOOR CLOSED SET +; JSRP PRINT_COL +; +; MOVI AUDLCDCS,A8 ;NOW PRINT SUB-TOTAL FOR DOOR CLOSED +; JSRP PRINT_SUBTOTAL ;THATS IT! +; +; MOVI MEN_CLR_SUB,A8 ;CLEAR SUBTOTAL OR RETURN TO MAIN MENU +; MOVI 2,A9 ;CURSOR ON 2ND ENTRY +; JSRP B_MENU +; +; CMPI 1,A8 ;CHOICE 1 IS CLEAR..... +; JRNZ NO_CLEAR_SUB ;NOPE...RETURN TO CALLER! +; +; MOVI MESS_CLEAR_SUBS,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE +; MOVI CLR_SUBS,A9 ;ROUTINE TO DO IT +; MOVI MESS_SUBS_CLEAR,A10 ;CONFIRMATION. +; JSRP AREUSURE ;ASK EM. +; JRUC DETAIL_SCREEN ;NOW PUT THIS SCREEN BACK UP. +; +;NO_CLEAR_SUB +;NO_DETAIL +; RETP ;AND RETURN TO OUR CALLER. +; +;PRINT_SUBTOTAL +; CALLR ADD_AUDIT_DY ;PUSH THE Y 1 LEVEL +; MOVI T_SUB,A9 ;USE "SUB-TOTAL" MESSAGE +; JAUC PRINT_MONEY ;AND NOW PRINT THE REQUESTED SUM. + +************************************************************************** +* * +* GAME AUDITS SELECTED * +* * +************************************************************************** + +************************************************************************** +* * +* AUDITS TO BE SHOWN ON GAME AUDITS PAGE: * +* * +* EXTRA MEN * +* GAMES COMPLETED * +* 1 PLAYER MINUTES * +* 2 PLAYER MINUTES * +* TOTAL HOURS PLAYED * +* AVG "PLAYER" GAME TIME * +* AVG. ELAPSED TIME / PLAY * +* * +************************************************************************** + +GO_AUD + CALLA CLR_SCRN + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP1,A8 ;AUDIT PAGE 1 MENU + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + + CMPI 1,A8 ;DID WE GET 1'ST ENTRY? + JRNZ NO_AP2 ;NOPE...RETURN TO OUR CALLER + + +#page2 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jreq GO_AUD ;YEP...PUT IT UP! + +#page3 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUDS1b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP2,A8 + MOVK 1,A9 ;CURSOR ON 1ST ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + cmpi 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 1) + jrz #page2 ;YEP...PUT IT UP! + +#page4 + CALLA CLR_SCRN + + MOVI MES_AUD,A2 + MOVI ROBO_CYAN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + MOVI GAME_AUD2a,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + MOVI GAME_AUD2b,A0 ;PUT TABLE UP. + JSRP PRNT_AUD + + MOVI MEN_AP3,A8 + MOVK 1,A9 ;CURSOR ON 2ND ENTRY + JSRP B_MENU ;SEE IF THEY WANT PAGE 2. + CMPI 2,A8 ;DID WE GET 2nd ENTRY (RETURN TO PAGE 2) + JRZ #page3 ;YEP...PUT IT UP! + +NO_AP2 + RETP + +GO_UTIL + MOVI MEN_UTIL,A8 + JAUC GEN_MENU ;PROCESS THE UTILITY MENU! +* +* INDIVIDUAL UTILITY PROGRAMS +* + +DO_CLCRED + MOVI MESS_CLCRED,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_CREDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + + +************************************************************************** +* * +* HARDWARE INFORMATION SELECTED * +* * +************************************************************************** + .data + +M_DIPTEST + .string "DIPSWITCH TEST",0 + .even +M_SWTEST + .string "GENERAL SWITCH TEST",0 + .even +M_GAME_VOL + .string "GAME VOLUME ADJ.",0 + .even +M_AMODE_VOL + .string "ATTRACT MODE VOLUME ADJ.",0 + .even +HARDWARE_HELP + .word 0 + .word COLOR_BLUE + .word 2 + .long HDWH_SN + .long HDWH_MAN +HDWH_SN + .string "SERIAL NUMBER",0 + .even +HDWH_MAN + .string "MANUFACTURE DATE",0 + .even + +;CLOCK_HELP +; .word 0 +; .word COLOR_BLUE +; .word 2 +; .long CLKH_MESS1 +; .long CLKH_MESS2 +;CLKH_MESS1 +; .string "DISPLAY OR SET",0 +; .even +;CLKH_MESS2 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_DISPLAY_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CDISP_H1 +; .long CDISP_H2 +; .long CDISP_H3 +;CDISP_H1 +; .string "DISPLAYS THE CURRENT",0 +; .even +;CDISP_H2 +; .string "DATE AND TIME FROM",0 +; .even +;CDISP_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_SET_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CSET_H1 +; .long CSET_H2 +; .long CSET_H3 +;CSET_H1 +; .string "ALLOWS SETTING OF THE",0 +; .even +;CSET_H2 +; .string "DATE AND TIME FOR",0 +; .even +;CSET_H3 +; .string "THE REAL TIME CLOCK",0 +; .even +;CLK_CALIBRATE_HELP +; .word 0 +; .word COLOR_BLUE +; .word 3 +; .long CCAL_H1 +; .long CCAL_H2 +; .long CCAL_H3 +;CCAL_H1 +; .string "PREFORMS AUTOMATIC",0 +; .even +;CCAL_H2 +; .string "CALIBRATION OF THE",0 +; .even +;CCAL_H3 +; .string "REAL TIME CLOCK",0 +; .even + +MESS_HARDWARE + .string "HARDWARE INFO",0 + .even +;MESS_CLOCK +; .string "REAL TIME CLOCK",0 +; .even +; +;CAL_MESS_Y EQU 114 +; +;CLK_CALIBRATE_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+20,ROBO_YELLOW,STRCNRM,0 +; .string "Calibrating Real Time Clock" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y,ROBO_DECAY,STRCNRM,0 +; .string "Please Wait" +; .byte 0,0 +; .even +;CLK_CALIBRATE_OK_MESS +; MESS_MAC RD15FONT,SPACING07,200,CAL_MESS_Y+7,ROBO_WHITE,STRCNRM,0 +; .string "Calibration Successful" +; .byte 0,0 +; .even +;M_CLK_DISPLAY +; .string "DATE AND TIME DISPLAY",0,0 +; .even +;M_CLK_CALIBRATE +; .string "REAL TIME CLOCK CALIBRATION",0,0 +; .even +;M_CLK_SET +; .string "SETTING REAL TIME CLOCK",0,0 +; .even +; +;CDAY_PROMPT_Y EQU 50 +;CTIME_PROMPT_Y EQU 130 +;CDAY_Y EQU CDAY_PROMPT_Y+30 +;CDATE_Y EQU CDAY_Y+20 +;CTIME_Y EQU CTIME_PROMPT_Y+30 +; +;MESS_CLKD_PROMPTS +; MESS_MAC RD15FONT,SPACING07,200,CDAY_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Date" +; .byte 0,1 +; .even +; MESS_MAC RD15FONT,SPACING07,200,CTIME_PROMPT_Y,ROBO_WHITE,STRCNRM,0 +; .string "Current Time" +; .byte 0,1 +; .even +MESS_QUIT + MESS_MAC RD7FONT,SPACING07,200,230,ROBO_DECAY,STRCNRM,0 + .string "PRESS ANY BUTTON TO QUIT" + .byte 0,0 + .even +;MESS_RTC_SET +; MESS_MAC RD7FONT,SPACING07,200,215,ROBO_LASER,STRCNRM,0 +; .string "THE REAL TIME CLOCK HAS BEEN SET" +; .byte 0,0 +; .even +;MESS_SUNDAY +; .string "Sunday",0 +; .even +;MESS_MONDAY +; .string "Monday",0 +; .even +;MESS_TUESDAY +; .string "Tuesday",0 +; .even +;MESS_WEDNESDAY +; .string "Wednesday",0 +; .even +;MESS_THURSDAY +; .string "Thursday",0 +; .even +;MESS_FRIDAY +; .string "Friday",0 +; .even +;MESS_SATURDAY +; .string "Saturday",0 +; .even +; +;DAY_TABLE .long MESS_SUNDAY,MESS_MONDAY,MESS_TUESDAY,MESS_WEDNESDAY +; .long MESS_THURSDAY,MESS_FRIDAY,MESS_SATURDAY +; .even + +MESS_JANUARY + .string "January ",0 + .even +MESS_FEBRUARY + .string "February ",0 + .even +MESS_MARCH + .string "March ",0 + .even +MESS_APRIL + .string "April ",0 + .even +MESS_MAY + .string "May ",0 + .even +MESS_JUNE + .string "June ",0 + .even +MESS_JULY + .string "July ",0 + .even +MESS_AUGUST + .string "August ",0 + .even +MESS_SEPTEMBER + .string "September ",0 + .even +MESS_OCTOBER + .string "October ",0 + .even +MESS_NOVEMBER + .string "November ",0 + .even +MESS_DECEMBER + .string "December ",0 + .even +MONTH_TABLE + .long MESS_JANUARY, MESS_FEBRUARY, MESS_MARCH, MESS_APRIL + .long MESS_MAY, MESS_JUNE, MESS_JULY, MESS_AUGUST, MESS_SEPTEMBER + .long MESS_OCTOBER, MESS_NOVEMBER, MESS_DECEMBER + .even +MESS_HYEARS + .string ", 19",0 + .even +;TSEPERATOR +; .string ":",0 +; .even +;ZPAD +; .string "0",0 +; .even +;TIME_PM +; .string " PM",0 +; .even +;TIME_AM +; .string " AM",0 +; .even +;DAY_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDAY_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATE_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CDATE_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TIME_SETUP +; MESS_MAC RD15FONT,SPACING07,200,CTIME_Y,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DAYADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,185,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;DATEADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,286,205,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even +;TADJ_SETUP +; MESS_MAC RD15FONT,SPACING07,284,225,ROBO_GREEN,STRCNRM,0 +; .string "" +; .byte 0,0 +; .even + +;SNDRELEASE_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "RELEASE %2ld" +; .byte 0,0 +; .long _serial_number +; .even +;SNDPROTO_NUM_PROMPT: +; MESS_MAC RD15FONT,SPACING07,200,130,ROBO_PURPLE,STRCNRM,0 +; .string "Sound Software Version:\n" +; .string "PROTO %2ld" +; .byte 0,0 +; .long _serial_number +; .even + +WILLY_Y EQU 50 +UNIT_Y EQU WILLY_Y+50 +SERIAL_Y EQU UNIT_Y+40 +MAN_Y EQU SERIAL_Y+40 + +M_DOM + .string "DATE OF MANUFACTURE: ",0 + .even +M_SERIAL + .string "SERIAL NUMBER: ",0 + .even +MAN_DATE_SETUP: + MESS_MAC RD7FONT, SPACING07,200, MAN_Y, ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even +WILLY_PROMPT: + MESS_MAC RD15FONT, SPACING07, 200, WILLY_Y, ROBO_GREEN, STRCNRM,0 + .string "Midway Manufacturing Inc." + .byte 0,1 + .even + MESS_MAC RD15FONT, SPACING20, 200, UNIT_Y, ROBO_YELLOW, STRCNRM, 0 + .string "HANG TIME UNIT" + .byte 0,0 + .even +SERIAL_NUM_SETUP: + MESS_MAC RD7FONT,SPACING07,200,SERIAL_Y,ROBO_PURPLE,STRCNRM,0 + .string "" + .byte 0,0 + .even + +M_HARDWARE_INFO + .string "HARDWARE INFORMATION",0 + .even + +;MESS_CLK_TITLE +; .string "REAL TIME CLOCK",0 +; .even +;MESS_DISPLAY +; .string "DISPLAY",0 +; .even +;MESS_SET +; .string "SET",0 +; .even +;MESS_CALIBRATE +; .string "CALIBRATE",0 +; .even +; +;MEN_CLOCK +; .long RD7FONT ;FONT +; .long STRCNRM ;CENTER PLEASE +; .long MESS_CLK_TITLE ;TITLE +; .word COLOR_GREEN ;COLOR OF TITLE +; .word 104 ;UL X +; .word MENU_Y-3 ;UL Y +; .word MENU_DY-4 ;VERTICAL SPACING +; .word ROBO_WHITE ;COLOR WHEN NOT SELECTED +; .word 16 ;HEIGHT OF SELECTION BAR +; .word -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .word BAR_DX ;EXTRA X ON EACH SIDE. +; .word BAR_WID ;WIDTH OF BAR! (A LITTLE FATTER) +; .word ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM (SHOULD BE DECAY) +; .long MESS_DISPLAY,GO_DISPLAY,CLK_DISPLAY_HELP +; .long MESS_SET,GO_TIME_SET,CLK_SET_HELP +;; .long MESS_CALIBRATE,GO_CALIBRATE,CLK_CALIBRATE_HELP +; .long MESS_MM,RET_CLOCK,NO_HELP +; .long 0 + + + +* +* CLOCK SET MENU IS SKINNY..LEAVING ROOM FOR EXPLANATION. +* +CS_BDY EQU -2 +CS_WID EQU 0A7H +CS_X EQU TIT_ULX+GAP+MB_XWID+(CS_WID/2)+C_KLUDGE +CS_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-CS_BDY +* +* RIGHT MARGIN OF ADJUST MENU BOX +* +CS_RX EQU TIT_ULX+(2*GAP)+CS_WID+(2*MB_XWID) +* +* LEFT MARGIN OF HELP BOX +* +CS_HX EQU CS_RX+BOX_XGAP + +;M_TIME_SET +; .string "SET REAL TIME CLOCK",0 +; .even +;MESS_YEAR_SET +; .string "YEAR",0 +; .even +;MESS_DATE_SET +; .string "DATE",0 +; .even +;MESS_MONTH_SET +; .string "MONTH",0 +; .even +;MESS_DAY_SET +; .string "DAY",0 +; .even +;MESS_HOUR_SET +; .string "HOURS",0 +; .even +;MESS_MINUTE_SET +; .string "MINUTES",0 +; .even +;MESS_SECOND_SET +; .string "SECONDS",0 +; .even +;MESS_SET_CLOCK +; .string "SET TIME/DATE",0 +; .even +;MESS_CLK_RET +; .string "RETURN TO PREV MENU",0 +; .even +; +;MEN_TIME_SET +; .LONG RD7FONT ;FONT +; .LONG STRCNRM ;CENTER PLEASE +; .LONG M_TIME_SET ;TITLE +; .WORD COLOR_WHITE ;COLOR OF TITLE +; .WORD CS_X ;UL X +; .WORD CS_Y ;UL Y +; .WORD 12 +; .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED +; .WORD 12 ;HEIGHT OF SELECTION BAR +; .WORD CS_BDY ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) +; .WORD BAR_DX ;EXTRA X ON EACH SIDE. +; .WORD CS_WID ;WIDTH OF BAR! +; .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG MESS_YEAR_SET,DO_YEAR,ADJ_HELP +; .LONG MESS_DATE_SET,DO_DATE,ADJ_HELP +; .LONG MESS_MONTH_SET,DO_MONTH,ADJ_HELP ;FREE PLAY +; .LONG MESS_DAY_SET,DO_DAY,ADJ_HELP +; .LONG MESS_HOUR_SET,DO_HOUR,ADJ_HELP +; .LONG MESS_MINUTE_SET,DO_MINUTE,ADJ_HELP +; .LONG MESS_SECOND_SET,DO_SECOND,ADJ_HELP +; .LONG MESS_SET_CLOCK,GO_CLOCK_SET,SET_CLOCK_HELP +; .LONG MESS_CLK_RET,0,BLNK_HELP ;RETURN TO MAIN MENU +; .LONG 0 ;END + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +;CS_ADV +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_Y,COLOR_BPR,STRCNRM,0 +; .STRING "SELECT WITH ANY STICK" +; .BYTE 0,1 +; .EVEN +; MESS_MAC RD7FONT,SPACING07,CS_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 +; .STRING "PRESS A BUTTON TO MODIFY" +; .BYTE 0,0 +; .EVEN +; +;SCH_1 +; .string "SETS THE REAL TIME CLOCK",0 +; .even +;SCH_2 +; .string "TO THE VALUES SPECIFIED BY",0 +; .even +;SCH_3 +; .string "THE OTHER MENU ITEMS.",0 +; .even +;SET_CLOCK_HELP +; .word 1 +; .word COLOR_BLUE +; .word 3 +; .long SCH_1 +; .long SCH_2 +; .long SCH_3 +; .even +;YSH_1 +; .string " SET THE REAL TIME CLOCK's",0 +; .even +;YSH_2 +; .string " YEAR VALUE.",0 +; .even +;YSH_3 +; .string " Takes effect when SET is",0 +; .even +;YSH_4 +; .string " selected on the RTC MENU",0 +; .even +;HELP_YEAR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long YSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_YEAR +; .long GEN_TS ; Routine to run +; .long MESS_YEAR_SET ; Header Message +; .long HELP_YEAR ; Help Messages +; .word 6 ; Index number of val to change +; .long 0 ; Minimum value +; .long 99 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long YEAR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_YEAR_SET ; Header Message +; +;DTSH_2 +; .string " DATE VALUE.",0 +; .even +;HELP_DATE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DTSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DATE +; .long GEN_TS ; Routine to run +; .long MESS_DATE_SET ; Header Message +; .long HELP_DATE ; Help Messages +; .word 4 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 31 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DATE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_DATE_SET ; Header Message +; +; +;MSH_2 +; .string " MONTH OF YEAR.",0 +; .even +;HELP_MONTH +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MONTH +; .long GEN_TS ; Routine to run +; .long MESS_MONTH_SET ; Header Message +; .long HELP_MONTH ; Help Messages +; .word 5 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 12 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MONTH_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long MONTH_TABLE ; Just Show Number +; .long MESS_MONTH_SET ; Header Message +; +; +;DSH_2 +; .string " DAY OF WEEK.",0 +; .even +;HELP_DAY +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long DSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_DAY +; .long GEN_TS ; Routine to run +; .long MESS_DAY_SET ; Header Message +; .long HELP_DAY ; Help Messages +; .word 3 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 7 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long DAY_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long DAY_TABLE ; Just Show Number +; .long MESS_DAY_SET ; Header Message +; +;HSH_2 +; .string " HOUR VALUE.",0 +; .even +;HELP_HOUR +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long HSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_HOUR +; .long GEN_TS ; Routine to run +; .long MESS_HOUR_SET ; Header Message +; .long HELP_HOUR ; Help Messages +; .word 2 ; Index Number of val to change +; .long 1 ; Minimum value +; .long 24 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long HOUR_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_HOUR_SET ; Header Message +; +; +;MINSH_2 +; .string " MINUTE VALUE.",0 +; .even +;HELP_MINUTE +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long MINSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_MINUTE +; .long GEN_TS ; Routine to run +; .long MESS_MINUTE_SET ; Header Message +; .long HELP_MINUTE ; Help Messages +; .word 1 ; Index Number of val to change +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long MINUTE_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_MINUTE_SET ; Header Message +; +;SSH_2 +; .string " SECOND VALUE.",0 +; .even +;HELP_SECOND +; .word 1 +; .word COLOR_BLUE +; .word 4 +; .long YSH_1 +; .long SSH_2 +; .long YSH_3 +; .long YSH_4 +; .even +;DO_SECOND +; .long GEN_TS ; Routine to run +; .long MESS_SECOND_SET ; Header Message +; .long HELP_SECOND ; Help Messages +; .word 0 ; Not used +; .long 0 ; Minimum value +; .long 59 ; Maximum value +; .long 1 ; Move up and down by 1's +; .long 0 ; Dont sub zero for any +; .long SECOND_SET ; Message list for values +; .word WRAP_VAL ; Wrap around +; .long 0 ; Just Show Number +; .long MESS_SECOND_SET ; Header Message + + .text + +GO_HARDWARE: + move @_man_date,a2,L + move a2,a1 + subk 1,a1 + movi 372,a0 + divu a0,a1 + movi 372,a3 + mpyu a1,a3 + sub a3,a2 + addi 80,a1 + move a1,@_year,1 + move a2,a0 + movi 31,a1 + modu a1,a0 + move a0,@_day,1 + move a2,a1 + subk 1,a1 + movi 31,a0 + divu a0,a1 + addk 1,a1 + move a1,@_month,1 + calla CLR_SCRN ; Clear the screen + movi M_HARDWARE_INFO,a2 ; Put up Title Box + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movi WILLY_PROMPT,a8 + JSRP L_MESS + movi M_DOM,a4 + calla copy_rom_string ; Copy the Date of manufacture prompt + move @_month,a0 + dec a0 + sll 5,a0 + movi MONTH_TABLE,a8 + add a0,a8 + move *a8,a4,L + calla concat_rom_string ; Copy the month name + move @_day,a0 ; Convert date to ascii + movi 31,a1 + calla dec_to_asc + calla concat_string ; Add date to string + movi MESS_HYEARS,a4 ; Add , 19 to string + calla concat_rom_string + move @_year,a0 ; Convert year to ascii + movi 99,a1 + calla dec_to_asc + calla concat_string ; Add year to string + movi MAN_DATE_SETUP,a0 ; Setup message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print Date of Manufacture + + movi M_SERIAL,a4 + calla copy_rom_string ; Copy serial number prompt + move @_serial_number,a0,L ; Convert serial number to ascii + movi 1000000,a1 + calla dec_to_asc + calla concat_string ; Add serial number to prompt + movi SERIAL_NUM_SETUP,a0 ; Setup the message + callr _setup_message + movi _setup_mess,a8 + JSRP L_MESS ; Print the Serial Number + movi MESS_QUIT,a8 + JSRP L_MESS +_hardware_check_sw: ; Wait for a button to be pressed + SLEEP 10 + move @_switch2_addr,a0,L + move *a0,a0,W + move @_switch_addr,a1,L + move *a1,a1,W + sll 16,a0 + srl 16,a0 + sll 16,a1 + srl 16,a1 + and a0,a1 + move @_coin_addr,a0,L + move *a0,a0 + sll 16,a0 + or a1,a0 + not a0 + jrz _hardware_check_sw +RET_HARDWARE: + JSRP FORCE_MAIN + RETP + + +;GO_CLOCK: +; move @_clk_rd,a8,L ;Save current auto update state +; move a8,@_auto_update_save,L +; clr a8 ;Enable auto update +; move a8,@_clk_rd,L +; JSRP _GetTime +; movi MEN_CLOCK,a8 +; jauc GEN_MENU +;RET_CLOCK: +; move @_auto_update_save,a8,L ;Restore Auto Update state +; move a8,@_clk_rd,L +; JSRP FORCE_MAIN +; RETP + + +;GO_CALIBRATE: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_CALIBRATE,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; movi CLK_CALIBRATE_MESS,a8 ; Put up calibrating message +; JSRP L_MESS +; SLEEP 5*60 ; Do calibration here +; move @0c00000b0h,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@0c00000b0h +; movi [CAL_MESS_Y,0],a0 ; Get rid of calibrating message +; movi [40,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@0c00000b0h ; Restore CONTROL register +; movi CLK_CALIBRATE_OK_MESS,a8 ; Put up success message +; JSRP L_MESS +; SLEEP 60 ; Let user see it +; calla CLR_SCRN +; RETP ; All done + +; a0 = pointer to MESS_MAC TO COPY message is copied from message_buffer +_setup_message: + movi _setup_mess,a1 + movk 10,a2 +_sm_lp1: + move *a0+,*a1+ + dsjs a2,_sm_lp1 + movi _setup_mess_msg,a1 + movi message_buffer,a0 + pushst + setf 8,0 +_sm_lp2: + move *a0+,a2 + move a2,*a1+ + move a2,a2 + jrnz _sm_lp2 +_sm_done + popst + clr a2 + move a2,*a1 + rets + +;******************************************************************* +;* _GetTime - Process subroutine to get the current time. Time is +;* returned in the _tXXXXXX globals. +;* +; SUBRP _GetTime +; move @_clk_rd,a0,L ;Save status of auto update +; move a0,@_auto_update_save,L +; movi -1,a0 ;Shut down auto update +; move a0,@_clk_rd,L +; calla _aquire_time ;Arm time aquistion +; SLEEPK 5 ;Wait for it to aquire time +; calla _get_time ;Get the current time +; move @_auto_update_save,a0,L +; move a0,@_clk_rd,L ;Restore auto update status +; RETP ;All done +; +;; Process Subroutine to print time +;_display_time: +; clr a0 +; move a0,@message_buffer +; move @_thours,a0 ; Hours +; jrnz _hour_gz1 +; addk 12,a0 +; jruc _time_is_am +;_hour_gz1 +; cmpi 12,a0 +; jrle _time_is_am +; move @_thours,a0 ; Hours +; subi 12,a0 +;_time_is_am +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tminutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad +; move @_tminutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_tseconds,a0 +; move a0,@_last_seconds +; cmpi 9,a0 +; jrgt _no_sec_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad +; move @_tseconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_thours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm +; movi TIME_AM,a4 +; jruc _tdone +;_time_is_pm +; movi TIME_PM,a4 +;_tdone +; calla concat_rom_string +; movi TIME_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_time_check_sw: +; SLEEP 1 +; move @_switch2_addr,a0,L +; move *a0,a0,W +; move @_switch_addr,a1,L +; move *a1,a1,W +; sll 16,a0 +; srl 16,a0 +; sll 16,a1 +; srl 16,a1 +; and a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0,W +; sll 16,a0 +; or a1,a0 +; not a0 +; jrnz _dtime_done +; move @_tseconds,a0 +; move @_last_seconds,a1 +; cmp a0,a1 +; jrz _time_check_sw +; .ref cntdown_snd +; SOUND1 cntdown_snd +;; movi 1cch,a3 +;; calla SNDSND +; move @CONTROL,a0 ; Make sure transparency is OFF +; move a0,-*sp +; andni 020h,a0 +; move a0,@CONTROL +; movi [CTIME_Y,0],a0 ; Get rid of calibrating message +; movi [20,400],a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; move *sp+,a0 +; move a0,@CONTROL ; Restore CONTROL register +; jruc _display_time +;_dtime_done +; RETP + + +;GO_DISPLAY: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_DISPLAY,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +;GO_CLKS: +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; movi MESS_CLKD_PROMPTS,a8 ; Put up assorted prompts +; JSRP L_MESS +; SLEEP 5 +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_tday,a0 ; Day of week (1-7) +; dec a0 +; cmpi 6,a0 +; jrgt _bad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAY_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_bad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_tmonth,a0 ; Month of year number (0-11) +; dec a0 +; cmpi 11,a0 +; jrgt _bad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_bad_month +; move @_tdate,a0 ; Date (1-31) +; cmpi 9,a0 +; jrgt _no_date_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad +; move @_tdate,a0 ; Date (1-31) +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_tyear,a0 ; Year (0 - 99) +; cmpi 9,a0 +; jrgt _no_year_pad +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad +; move @_tyear,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATE_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; JSRP _display_time +;; move @_auto_update_save,a0,L ;Restore Auto Update state +;; move a0,@_clk_rd,L +; SOUND1 cntdown_snd +;; movi 0c7h,a3 +;; calla SNDSND +; RETP ; All done + +;_transfer_time +; mmtm sp,a1,a2,a3 +; movi _rtc_seconds,a1 +; movi _tseconds,a2 +; movi 7,a3 +;_tt_loop1 +; move *a2+,*a1+ +; dsjs a3,_tt_loop1 +; mmfm sp,a1,a2,a3 +; rets +; +;GO_CLOCK_SET: +; calla CLR_SCRN ; Clear the screen +; movi M_CLK_SET,a2 ; Put up Title Box +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; calla _set_time +; movi MESS_RTC_SET,a8 ; Put up "CLOCK SET" message +; JSRP L_MESS +;; SLEEP 16 +; SLEEP 30 +; callr _transfer_time +; jauc GO_CLKS +; +;GO_TIME_SET +;; JSRP _GetTime +; callr _transfer_time +; movi MEN_TIME_SET,a8 +;GEN_TIME_SET +; move a8,-*a12,L +; movk 1,a0 +; move a0,-*a12,W +;TIME_SET_LOOP +; calla CLR_SCRN +; movi CS_ADV,a8 +; JSRP L_MESS +; move *a12(WORD_SIZE),a8,L +; JSRP MENU_TOP +; movi COLOR_RED,a9 +; calla COL_INST +; move *a12,a9,W +; JSRP B_MENU +; move a9,a9 +; jrz GO_TS_QUIT +;_not_set_time +; move a8,*a12,W +; move *a9(AD_ROUT),a0,L +; movi TIME_SET_LOOP,a7 +; move a7,-*a12,L +; cmpi 9,a8 +; jrz _time_set +; jump a0 +;_time_set +; jauc GO_CLOCK_SET +;GO_TS_QUIT +; addk WORD_SIZE,a12 +; addk LONG_SIZE,a12 +; RETP + +;_do_title +; mmtm a12,a10,a11,a8 ;SAVE STUFF FOR CALLER +;; move @_clk_rd,a0,L ;Save current auto update state +;; move a0,@_auto_update_save,L +;; clr a0 ;Enable auto update +;; move a0,@_clk_rd,L +;; JSRP _GetTime +; subk 4,a10 +; move a11,a6 +; movi CS_HX,a9 +; addi TIT_LRX,a9 +; srl 1,a9 +; subk 4,a9 +; sll 16,a10 ;SHIFT Y DOWN +; movy a10,a9 ;X,Y SET +; move a2,a8 ;TEXT POINTER +; clr a0 ;NO SLEEP +; movi SPACING20,a10 +; movi RD15FONT,a11 +; JSRP STRCNRM ;DO IT! +; mmfm a12,a10,a11,a8 ;POP THE STUFF. +; RETP + +;_adj_time_and_date +; movi DAY_TABLE,a8 ; Put Day of week up +; move @_rtc_day,a0 ; Day of week number (1-7) +; dec a0 +;; cmpi 6,a0 +;; jrgt _abad_day +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string +; movi DAYADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +;_abad_day +; movi MONTH_TABLE,a8 ; Put month of year up +; move @_rtc_month,a0 ; Month of year number (1 - 12) +; dec a0 +;; cmpi 11,a0 +;; jrgt _abad_month +; sll 5,a0 +; add a0,a8 +; move *a8,a4,L +; calla copy_rom_string ; Copy month name to buffer +;_abad_month +; move @_rtc_date,a0 ; Date +; cmpi 9,a0 +; jrgt _no_date_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_date_pad1 +; move @_rtc_date,a0 ; Date +; movi 31,a1 ; Maximum Date +; calla dec_to_asc ; Convert Date to ascii +; calla concat_string ; Add to buffer +; movi MESS_HYEARS,a4 ; , 19 +; calla concat_rom_string ; Add to buffer +; move @_rtc_year,a0 ; Year +; cmpi 9,a0 +; jrgt _no_year_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_year_pad1 +; move @_rtc_year,a0 +; movi 99,a1 ; Max year +; calla dec_to_asc ; Convert Years to ascii +; calla concat_string ; Add to buffer +; movi DATEADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@message_buffer +; move @_rtc_hours,a0 ; Hours +; jrnz _hour_gz +; addk 12,a0 +; jruc _time_is_am1 +;_hour_gz +; cmpi 12,a0 +; jrle _time_is_am1 +; move @_rtc_hours,a0 ; Hours +; subi 12,a0 +;_time_is_am1 +; movi 12,a1 ; Max hours +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_minutes,a0 +; cmpi 9,a0 +; jrgt _no_min_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_min_pad1 +; move @_rtc_minutes,a0 +; movi 59,a1 ; Max Minutes +; calla dec_to_asc +; calla concat_string +; movi TSEPERATOR,a4 +; calla concat_rom_string +; move @_rtc_seconds,a0 +; cmpi 9,a0 +; jrgt _no_sec_pad1 +; movi ZPAD,a4 +; calla concat_rom_string +;_no_sec_pad1 +; move @_rtc_seconds,a0 +; movi 59,a1 ; Max Seconds +; calla dec_to_asc +; calla concat_string +; move @_rtc_hours,a0 ; Hours +; cmpi 11,a0 +; jrgt _time_is_pm1 +; movi TIME_AM,a4 +; jruc _tdone1 +;_time_is_pm1 +; movi TIME_PM,a4 +;_tdone1 +; calla concat_rom_string +; movi TADJ_SETUP,a0 +; callr _setup_message +; movi _setup_mess,a8 +; JSRP L_MESS +; RETP + +;_set_it_up +; calla CLR_CUR +; movi 6,a1 +; movk 5,a4 +; calla CADJ_BOX +; movi 1,a1 +; clr a4 +; calla CADJ_BOX +; movi [ADJ_CULY+5,CS_HX+5],A3 +; movi [21,185],A4 +; calla BLNKAREA +; movi [ADJ_CULY+31,CS_HX+5],A3 +; movi [58,185],A4 +; calla BLNKAREA +; SLEEPK 2 ; I dare you to take this out +; RETP + + +;YEAR_SET +; JSRP _set_it_up +; movi MESS_YEAR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MONTH_SET +; JSRP _set_it_up +; movi MESS_MONTH_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DATE_SET +; JSRP _set_it_up +; movi MESS_DATE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;DAY_SET +; JSRP _set_it_up +; movi MESS_DAY_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;HOUR_SET +; JSRP _set_it_up +; movi MESS_HOUR_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;MINUTE_SET +; JSRP _set_it_up +; movi MESS_MINUTE_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP +; +;SECOND_SET +; JSRP _set_it_up +; movi MESS_SECOND_SET,a2 +; JSRP _do_title +; JSRP _adj_time_and_date +; RETP + +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3, a2 +;_ts_val_up: +; mmtm sp,a0,a2,a3 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; addk 1,a3 +; move *a8(AD_MAX),a2,L +; cmp a3,a2 +; jrge _ts_vu_done +; move *a8(AD_MIN),a3,L +;_ts_vu_done +; andi 0ffh,a1 +; move a3,*a0 +; mmfm sp,a0,a2,a3 +; rets +; +;; a0 = value code +;; a8 = PTR to data struct +;; TRASHES a0, a3 +;_ts_val_down: +; mmtm sp,a0,a3,a1 +; sll 4,a0 +; addi _rtc_seconds,a0 +; move *a0,a3 +; subk 1,a3 +; move *a8(AD_MIN),a1,L +; cmp a1,a3 +; jrge _ts_vd_done +; move *a8(AD_MAX),a3,L +;_ts_vd_done +; andi 0ffh,a3 +; move a3,*a0 +; mmfm sp,a0,a3,a1 +; rets + +;GEN_TS: +; movk 2,a0 +; move a0,@_switch_map_mode,L +; move a9,*a13(PDATA),L +; move a9,a8 +; calla CLR_MAIN +; calla ADJ_INST +; JSRP ST_STICK +; SLEEPK 2 +;TS_CHNG +; SLEEPK 1 +; movi 31000h,a5 +; JSRP GETSTICK +; move *a13(PDATA),a8,L +; move a0,a1 +; jrz TS_CHNG +; move *a8(AD_CMOS),a0,W ; Get What we are adjusting +; cmpi 3,a1 +; jrz TS_BUTT +; cmpi 2,a1 +; jrz TS_DOWN +; callr _ts_val_up ; Incrment the value +; jruc TS_JOIN +;TS_DOWN: +; callr _ts_val_down ; Decrement the value +;TS_JOIN: +;; movi beep1_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; jruc TS_CHNG +;TS_UPDATE: +; move *a8(AD_NAMEIT),a0,L +; movi ROBO_LASER,a11 +; jump a0 +;TS_BUTT: +; +;; movi beep2_snd,a3 +;; calla SNDSND +; JSRP TS_UPDATE +; SLEEPK 5 +;TS_CAN: +; movk 1,a0 +; move a0,@_switch_map_mode,L +; RETP + +************************************************************************** +* * +* VOLUME ADJUSTMENT SELECTED * +* * +************************************************************************** + + .bss bar_height,16 + + .bss bar_height2,16 +;DJT Start +; .ref set_volume_amode_diag +;DJT End +;GO_AMODE_VOL +; calla display_blank +; calla dpageflip_off ;page flipping off +; +; calla CLR_SCRN +; movi M_AMODE_VOL,a2 +; movi ROBO_GREEN,a3 +; JSRP TOP_BOX +; +; create FX_PID,background_sound ;noise +; +; movi pf_volume_2,a8 +; JSRP L_MESS +; movi pf_volume_3,a8 +; JSRP L_MESS +; +; movi bxy,a0 ;frame +; movi bw|bh,a1 +; movi ROBO_BLUE,a2 +; fcall RECTANGLE,b6 +; +; movi bxy+>00030003,a0 ;make frame by filling blue with black +; movi bw|bh->00060006,a1 +; movi ROBO_BLACK,a2 +; fcall RECTANGLE,b6 +; +; movi pf_volume_4,a8 ;MIN/MAX +; JSRP L_MESS +; movi pf_volume_5,a8 +; JSRP L_MESS +; +; clr a0 +; move a0,@bar_height2 +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; SLEEPK 2 +; calla display_unblank +; +;vtop_1 +; SLEEPK 1 +; +; ;check for done +; clr a1 +; clr a0 ;player 1 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_but_val_down +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_but_val_down +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_but_val_down +; or a0,a1 +; +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0e7ffh,a0 +; or a0,a1 +; jrnz vdone_1 +; +; ;check for a vol change +; clr a0 ;player 1 +; calla get_stick_val_cur +; or a0,a1 +; movk 1,a0 ;player 2 +; calla get_stick_val_cur +; or a0,a1 +; movk 2,a0 ;player 3 +; calla get_stick_val_cur +; or a0,a1 +; movk 3,a0 ;player 4 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right +; +; ;listen to the coin door switches too. OR them in. +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 0800h,a0 +; srl 10,a0 +; or a0,a1 +; move @_coin_addr,a0,L +; move *a0,a0 +; not a0 +; andi 1000h,a0 +; srl 12,a0 +; or a0,a1 +; jrz vtop_1 +; +; ;get the volume +; movi ADJAVOLUME,a0 +; calla GET_ADJ +; +; ;make sure the volume is in range +; BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; +; btst JOYDN,a1 +; jrnz vdec_1 +; +; ;increment volume +; cmpi 255,a0 +; jreq vtop_1 +; inc a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdec_1 +; cmpi 4,a0 +; jreq vtop_1 +; dec a0 +; calla set_volume_amode_diag +; callr vol_to_ht +; callr adjust_bar_height2 +; jruc vtop_1 +; +;vdone_1 +;;dont use a-mode sound level for diag. +; movi ADJVOLUME,a0 +; calla GET_ADJ +; BADCHK a0,0,255,28 ;reg, lo, hi, val if bad +; calla set_volume +; +; movi FX_PID,a0 ;kill the background noise +; calla KIL1C +; calla nosounds +; +; RETP + +GO_VOL + + calla display_blank + calla dpageflip_off ;page flipping off + + calla CLR_SCRN + movi M_GAME_VOL,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + + create FX_PID,background_sound ;noise + +; movi pf_volume_1,a8 ;title/instructions +; JSRP L_MESS + movi pf_volume_2,a8 + JSRP L_MESS + movi pf_volume_3,a8 + JSRP L_MESS + + movi bxy,a0 ;frame + movi bw|bh,a1 +; movi ROBO_GREEN,a2 + movi ROBO_BLUE,a2 + fcall RECTANGLE,b6 + + movi bxy+>00030003,a0 ;make frame by filling blue with black + movi bw|bh->00060006,a1 + movi ROBO_BLACK,a2 + fcall RECTANGLE,b6 + + movi pf_volume_4,a8 ;MIN/MAX + JSRP L_MESS + movi pf_volume_5,a8 + JSRP L_MESS + + clr a0 + move a0,@bar_height + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + calla set_volume + callr vol_to_ht + callr adjust_bar_height + SLEEPK 2 + calla display_unblank + +vol_loop_top + SLEEPK 1 + + ;check for done + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +; clr a1 +; clr a0 +; calla get_but_val_down +; or a0,a1 +; movk 1,a0 +; calla get_but_val_down +; or a0,a1 + + move @_coin_addr,a0,L + move *a0,a0 + not a0 +;DJT Start + andi 0c7ffh,a0 ;bill,starts,coins,service,test,tilt +;DJT End + or a0,a1 + jrnz vol_loop_done + + ;check for a vol change + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + andi 0011b,a1 ;filter out left/right + +; clr a0 +; calla get_stick_val_cur +; move a0,a1 +; movk 1,a0 +; calla get_stick_val_cur +; or a0,a1 +; andi 0011b,a1 ;filter out left/right + + ;listen to the coin door switches too. OR them in. +; move @COINS,a0 ;the down switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 0800h,a0 + srl 10,a0 + or a0,a1 +; move @COINS,a0 ;the up switch + move @_coin_addr,a0,L + move *a0,a0 + not a0 + andi 1000h,a0 + srl 12,a0 + or a0,a1 + jrz vol_loop_top + + ;get the volume + movi ADJVOLUME,a0 + calla GET_ADJ + + ;make sure the volume is in range + BADCHK a0,1,255,28 ;reg, lo, hi, val if bad +; cmpi 4,a0 +; jrge vol_notlow +; movi 4,a0 +; jruc vol_nothigh +;vol_notlow +; cmpi 255,a0 +; jrle vol_nothigh +; movi 255,a0 +;vol_nothigh + + btst JOYDN,a1 + jrnz vol_dec + + ;increment volume + cmpi 255,a0 + jreq vol_loop_top + inc a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_dec ;decrement volume + cmpi 4,a0 + jreq vol_loop_top + dec a0 + calla set_volume + callr vol_to_ht + callr adjust_bar_height + jruc vol_loop_top + +vol_loop_done + movi FX_PID,a0 ;kill the background noise + calla KIL1C + calla nosounds + + RETP + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height2 + + move a0,a1 + move @bar_height2,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height2 + rets + + +#*************************************** +* Adjusts the bar height +* >a0=new height (1-170) + + SUBRP adjust_bar_height + + move a0,a1 + move @bar_height,a0 +#adjust_loop + cmp a1,a0 + jreq #done + jrlt #grow_bar + + movi ROBO_BLACK,a2 + callr vol_bar_line + dec a0 + jruc #adjust_loop + +#grow_bar + inc a0 + movi ROBO_RED,a2 + callr vol_bar_line + jruc #adjust_loop + +#done + move a0,@bar_height + rets + + +**************************************** +* Draws a line on the volume bar, but won't overwrite green pixels (text) +* >a0=line index (not Ypos) >a2=color + + SUBRP vol_bar_line + + PUSH a0,a1,a2 + ;convert the line index to a linear address + sla 16,a0 + neg a0 + addi bxy+bh->00030000+59,a0 ;various fudges here + cvxyl a0,a0 + + ;now write the color value to all non-green pixels + movi bw-6,a14 +vbl_pixel_loop + movb *a0,a1 +; cmpi ROBO_GREEN&0Fh,a1 + cmpi ROBO_BLUE&0Fh,a1 + jreq vbl_skip_pixel + movb a2,*a0 +vbl_skip_pixel + addk 8,a0 + dsj a14,vbl_pixel_loop + + PULL a0,a1,a2 + rets + +**************************************** +* Converts a 0-255 volume value to a 1-170 bar height value +* >a0=volume +* 40 + +bgsnd3 movi sound_fx_table,a10 +bgsnd6 move *a10+,a3,W + jrz bgsnd3 + calla SNDSND + SLEEP >20 + jruc bgsnd6 + +sound_fx_table + .word >7 + .word >36f ;!!!LOOK!!! + .word >33b + .word >92f + .word >36b + .word >900 + .word >222 + .word >f8 + .word >f4 + .word >4ba + .word >ca + .word 0 + +pf_volume_2 + MESS_MAC RD7FONT,SPACING20,200,174+53,COLOR_YELLOW,STRCNRM,0 + .string "ADJUST VOLUME WITH JOYSTICKS OR VOLUME BUTTONS",0,0 + .even + +pf_volume_3 + MESS_MAC RD7FONT,SPACING20,200,184+53,ROBO_LASER,STRCNRM,0 + .string "ANY OTHER BUTTON TO QUIT",0,0 + .even + +pf_volume_4 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>05,ROBO_BLUE,STRCNRM,0 + .string "MAX",0,0 + .even + +pf_volume_5 + MESS_MAC RD7FONT,SPACING20,201,vb_y+>a0,ROBO_BLUE,STRCNRM,0 + .string "MIN",0,0 + .even + +vb_y .set >2f +vb_height .set 171 +bxy .set >002e0000+200->18 + +bh .set >b0*>10000 +bw .set >30 + +bthickx .set 3 +bthicky .set 3*>10000 + +volume_table + .long bh+3,bxy ; height:width / y:x coordinates + .long bh+3,bxy+bw ; height:width / y:x coordinates + + .long bthicky+bw,bxy ; height:width / y:x coordinates + .long bthicky+bw+bthickx,bxy+bh ; height:width / y:x coordinates + .long 0 + +************************************************************************** +* * +* CLR_CREDITS * +* * +* ROUTINE TO CLEAR OUT THE CREDITS POSTED ON THE GAME. * +* * +************************************************************************** +CLR_CREDITS + CALLA NO_CREDS ;CALL THE ROUTINE THAT DOES IT + RETP + +DO_CLCOIN + MOVI MESS_CLCOIN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_COINS,A9 ;ROUTINE TO DO IT + MOVI MESS_CCNCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +CLR_COINS + MOVI FRST_C,A0 + MOVI LAST_C,A1 + CALLA CLR_AUDR + RETP + +DO_CLAUD + MOVI MESS_CLAUD,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI CLR_AUDITS,A9 ;ROUTINE TO DO IT + MOVI MESS_CAUDCONF,A10 ;CONFIRMATION. + JAUC AREUSURE ;ASK EM......THEN RETURN! + +DO_CLPLRECS + movi MESS_CLPLRECS,A8 ;CLEAR PLAYER RECORDS + movi clr_plr_records,a9 ;ROUTINE TO DO IT + movi MESS_CLPLRECSCONF,a10 ;CONFIRMATION. + jauc AREUSURE ;ASK EM......THEN RETURN! + + .global clear_player_records +clr_plr_records + calla clear_player_records + .ref reset_world_records + calla reset_world_records + RETP + +CLR_AUDITS + MOVI FRSTGAUD,A0 + MOVI LASTGAUD,A1 + CALLA CLR_AUDR +; CALLA DUMP_FS ;AND START THE "DUMP" RECORDS OVER + RETP + +;DJT Start +;;DO_HSRES +;; MOVI MESS_HSRESET,A8 +;; MOVI HSSOFT,A9 +;; MOVI MESS_HSRCONF,A10 +;; JAUC AREUSURE +;; +;;HSSOFT +;; CALLR RES_ALL +;; RETP ;PROGRAM TO DO THE JOB! +;DJT End + +************************************************************************** +* +* RES_ALL +* +* RESET ALL TIME HIGH SCORE TABLE AND THE +* HIGH SCORE RESET COUNTER. +* +************************************************************************** +RES_ALL +; MOVI ALL_TAB,A8 ;ALWAYS CLEAR OUT TODAYS TABLE +; CALLA INIT_TB + jauc INIT_HSR ;RE-SET THE HIGH SCORE RESET COUNTER + +DO_FACSET + MOVI MESS_FACSET,A8 + MOVK 1,A0 + JRUC DEF_ADJ_PART + +************************************************************************** +* * +* DO_DEF_ADJ THIS IS CALLED FROM UTILITY MENU TO * +* DO THE DEFAULT ADJUSTMENTS. * +* * +* DEF_ADJ_PART THIS IS CALLED OUT OF THE FULL * +* FACTORY SETTING TO HANDLE THE * +* ADJUSTMENT PART. * +* * +* A8 MUST HAVE THE MESSAGE FOR "ARE YOU SURE" * +* A0 .NE. 0 FOR FULL FACTORY SETTINGS (ON * +* SUCCESS OF ADJUSTMENT PART * +* * +************************************************************************** +DO_DEF_ADJ + MOVI MESS_DEF_ADJ,A8 + CLR A0 + +DEF_ADJ_PART + MOVE A0,@FAC_FLAG,W ;INDICATE THIS IS ADJUSTMENTS ONLY + MOVI DEFADJSOFT,A9 + MOVI NULL_ST,A10 ;DON'T PRINT ANYTHING....ROUTINE WILL. + JSRP AREUSURE + RETP + +DEFADJSOFT +* +* NOW SMASH THE CHECKSUM +* + CALLA FORM_ADC ;FORM THE CKSUM + MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE + MOVI ADJ_CKSUM,A7 + INC A0 ;THIS SMASHES ADJUSTMENTS + CALLA WC_WORD ;AND STORE IT +* +* NOW MAKE SURE ITS SMASHED +* + CALLA CMOS_VAL + JRZ AD_FAIL ;WE CAN'T DO IT.....PRINT FAILURE. +* +* NOW SET THE ADJUSTMENTS TO THE FACTORY VALUE. +* + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRNZ AD_FAIL ;NOPE...PRINT FAILURE + + MOVI MESS_DEFCONF,A8 ;THIS IS SINGLE MESSAGE + + MOVE @FAC_FLAG,A0,W ;DO WE NEED TO CLEAR THE TABLES? + JRZ DAX ;NOPE...POST SINGLE MESSAGE + + CALLA CLR_SCRN ;CLEAR THE SCREEN FOR OUR MESSAGES. + CALLR FAC_STUF ;DO AUDITS AND HIGH SCORE TABLE + + MOVI MESS_FFSCONF,A8 ;PRINT THE REST OF THE MESSAGES + JSRP L_MESS ;THAT DOES IT! + +NOTABS + RETP + +* +* ON A FULL FACTORY SETTING (EITHER REQUESTED OR +* ADJUSTMENT FAILURE) THIS CLEARS THE AUDITS AND +* HIGH SCORE TABLE. +* +FAC_STUF + CALLA CLR_AUD ;CLEAR AUDITS TOO + CALLR RES_ALL ;ALL TIME TABLE + RETS + +AD_FAIL + MOVI MESS_FACFAIL,A8 + JRUC DAX + +DEF_CAN + MOVI MESS_CANCELLED,A8 +DAX + CALLA CLR_SCRN + JSRP SUR_MESS + RETP +************************************************************************** +* * +* EXIST_LET * +* * +* IS THE E_INITS PROCESS RUNNING? * +* * +************************************************************************** +EXIST_LET + MOVI OPMES_PID,A0 ;SETUP FOR THE EXISTP + MOVI 0FFFFH,A1 + JAUC EXISTP +************************************************************************** +* * +* BUILD_ST * +* * +* THIS IS CALLED TO TAKE THE STRING POINTED TO * +* BY -A10- AND REMOVE LEADING AND TRAILING BLANKS * +* AND MOVE THE STRING TO "STRNGRAM". * +* * +* RETURN THE NUMBER OF TRAILING BLANKS IN A2. * +* RETURN .EQ. IF ALL BLANK! * +* * +************************************************************************** +BUILD_ST + MMTM SP,A0,A1,A3,A4,A5,A10 + CLR A4 ;A4 = ZERO UNTIL 1ST NON-BLANK + MOVI STRNGRAM-BYTE_SIZE,A5 ;LAST NON-SPACE CHAR + MOVI STRNGRAM,A1 ;DESTINATION POINTER + MOVI CMESS_CHARS,A2 ;CHAR COUNT + +BSLOOP + MOVB *A10,A3 ;FETCH A BYTE + ANDI BYTE_MASK,A3 ;KILL SIGN EXTEND. + JRNZ BS1 ;NOT ZERO + MOVI SPACE,A3 ;REPLACE ZERO WITH SPACE. + +BS1 + CMPI SPACE,A3 ;IS IT A SPACE? + JRZ BS2 ;IT IS... +* +* NON-SPACE CHARACTER +* + OR A3,A4 ;INDICATE 1ST NON-BLANK SEEN + MOVE A1,A5 ;INDICATE THIS IS CURRENT TERMINATOR. + JRUC BS3 + +BS2 + MOVE A4,A4 ;HAS 1ST SPACE BEEN SEEN? + JRZ BS4 ;NOT YET...DON'T STORE +BS3 + MOVB A3,*A1 ;STORE IT IN MEMORY + ADDK BYTE_SIZE,A1 ;PUSH DESTINATION POINTER +BS4 + ADDK BYTE_SIZE,A10 ;PUSH SOURCE POINTER + DSJS A2,BSLOOP ;AND FINISH PARSE +* +* A5 NOW POINTS AT LAST NON-BLANK CHARACTER +* + ADDK BYTE_SIZE,A5 ;THIS IS 1 BEYOND + CLR A2 + MOVB A2,*A5 ;TERMINATE WITH A ZERO. +* +* FOR OUR RETURN, WE NEED TO COMPUTE THE NUMBER OF +* TRAILING SPACES IGNORED. +* + MOVE A4,A4 ;ALL BLANK? + JRNZ NOT_BLNK + MOVI CMESS_CHARS,A2 ;ALL CHARS ARE TRAILING BLANKS + JRUC BL_EX ;RETURN THIS + +NOT_BLNK + MOVE A1,A2 ;THIS IS LAST CHAR WE WROTE + SUB A5,A2 ;THIS IS NUMBER OF TRAILING SPACES (TIMES 8) + SRL 3,A2 ;DIVIDE BY 8 TO GET SPACES +BL_EX + MOVE A4,A4 ;FLAG ZERO FOR ALL BLANK! + MMFM SP,A0,A1,A3,A4,A5,A10 + RETS + +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA + +GO_RED + MOVI ROBO_RED,A1 + JAUC SC_COL + +GO_GREEN + MOVI ROBO_GREEN,A1 + JAUC SC_COL + +GO_BLUE + MOVI ROBO_BLUE,A1 +SC_COL + SLL 16,A1 ;[color,palette] + clr a3 ;[y,x] start + movi [256,399],a4 ;[Y,X] SIZE OF AREA + CALLA FILLAREA ;THIS DOES THE SCREEN + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + +GO_CPUTEST + JAUC DIAGCPUTEST + + +GO_CROSS + CALLA SCRCLR + CALLA CROSS_H + + movk 3,a1 ; Any button map mode + move a1,@_switch_map_mode,L +; JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! + JSRP WAIT_BUT + movk 1,a1 + move a1,@_switch_map_mode,L ; Back to menu map mode + RETP +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; RETP + +GO_SWTEST + CALLA SCRCLR + clr a0 + JSRP SWITCHTEST +; CALLA SCRCLR +; CALLA display_init + RETP + +dipsw_test + CALLA SCRCLR + movi M_DIPTEST,a2 + movi ROBO_GREEN,a3 + JSRP TOP_BOX + movk 1,a0 ;DIP mode + JSRP SWITCHTEST + RETP + +;GO_ROMTEST +; JAUC ROM_CHK + +GO_BARS +; MOVI 8000H,A1 +; CLR A0 +; CALLA KILALL + CALLA SCRCLR + MMTM SP,A12,A13 + CALLA COL_BARS + MMFM SP,A12,A13 + JAUC WAIT_BUT ;NOW WAIT FOR ANY BUTTON! +; JSRP WAIT_BUT +; CALLA SCRCLR +; CALLA display_init +; CALLA COLRSTRT +; RETP + +DO_BURN + MOVI MESS_BURN,A8 ;CLEAR COIN SUB-TOTALS...ARE YOU SURE + MOVI BURN_IN,A9 ;ENTRY POINT + MOVI MESS_BURN,A10 ;THIS WILL NEVER BE SEEN! + JAUC AREUSURE ;ASK EM. + +ANY_BUT + MOVI ANY_MENU,A8 ;ANY BUTTON TO CONTINUE + MOVK 1,A9 ;CURSOR ON ENTRY 1 + JAUC B_MENU ;DO IT....RETURN WHEN PRESSED. + + +******************************** +* DIAGNOSTIC TESTS +* +* SOUND TEST STUFF + +NCHAN EQU 6 ;DECLARE NUMBER OF ALLOWED CHANNELS +MUSICHAN EQU 3 ;THIS CHANNEL IS FOR THE TUNES + + +;RESETBIT EQU 0FE00H ;Sound board reset bit + + +GO_STEST + + CALLA CLR_SCRN + + movi MEN_SOUNDTEST,a8 + movk 1,a9 ;CURSOR ON 1st ENTRY + + JAUC GEN_MENU ;THIS WILL RETURN TO LEVEL ABOVE US! + +; jsrp B_MENU ;SEE IF THEY WANT PAGE 2. +; cmpi 1,A8 ;DID WE GET 1'ST ENTRY? +; RETP + +SNDTST + MOVI SNDMES,A8 ;MESSAGE POINTER +SNDTLP + CALLA SCRCLR + MOVI M_STEST,A0 ;SOUND TEST MESSAGE + MOVI >6080,A1 + CLR A2 + MOVI ROBO_WHITE,A3 + CALLA STRNEW1 + MOVI >B080,A1 ;SCREEN ADDRESS + MOVE A8,A0 + CALLA STRNEW1 + ADDK 8,A0 + MOVB *A0,A5 ;Channel + ADDK 8,A0 + MOVB *A0,A3 ;Sound # + sll 32-8,a3 ;Kill sign extend + srl 32-8,a3 + ADDK 8,A0 + CALLA SNDSND + MOVE A0,A8 + MOVE A13,A13 ;AUTO-CYCLE? + JRNE SNDSLP ;NO + CALLA WDOGDIS + MOVI 3000000,A13 +SNDAUTO DSJS A13,SNDAUTO + JRUC SNDSLP1 +SNDSLP + SLEEP 120 +SNDSLP1 + MOVB *A8,A5 + JRNE SNDTLP + MOVE A13,A13 ;AUTO CYCLE EXIT + JREQ SNDX1 + RETP + +SNDX1 RETS + +*SOUND TABLE +*MESSAGE,CHANNEL,SOUNDCODE +* +SNDMES + .byte "TUNE 1 (1)",0 + .byte MUSICHAN,1 + .byte "NO WAY (E6)",0 + .byte 1,>e6 + .byte "EXPL1 (30)",0 + .byte 4,>30 + .byte "TUNE 2 (9)",0 + .byte MUSICHAN,9 + .byte "SPIDER BOUNCE (83)",0 + .byte 4,>83 + .byte "MUSIC OFF (0)",0 + .byte MUSICHAN,0 + .byte 0 ;THE END OF TABLE + .even +******************************************************************************* +DO_GENTEST + + CALLA CLR_SCRN + MOVI M_DIGT,A2 + MOVI ROBO_GREEN,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + CALLA SURE_BOX ;PUT A NICE BOX UP! + + movi #snd_testing_mess,a8 + JSRP L_MESS + + ;reset the board + movi SNDRSTBIT|32,a0 ;pull bit low +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + movi 8,a14 ;wait a bit + dsjs a14,$ + + movi 32,a0 ;send it high again +; move a0,@COIN_COUNTERS,W + move @_coin_counter_addr,a8,L + move a0,*a8,W + + SLEEP TSEC/4 ;250ms wait + + movi TSEC*7,a0 ;wait for data available + JSRP poll_sdav + +; movb @SOUNDR,a0 ;read from the board (better be 0x79) + move @_sound_addr,a0,L + movb *a0,a0 + cmpi 79h,a0 + jrne sdav_not79 + + movi TSEC/5,a0 + JSRP poll_sdav ;great. now wait for the bong count + +; movb @SOUNDR,a0 + move @_sound_addr,a0,L + movb *a0,a0 + sll 5,a0 ;X32 + addi diag_message_table,a0 + move *a0,a8,L + JSRP L_MESS + jauc ANY_BUT + +sdav_not79 +;; movi AUD_SNDERR4,a0 +;; calla AUD1 + .if DEBUG ;sound board misbehaving. should + LOCKUP ; write a 0x79 after the checksum + .endif ; tests. it wrote something else. + jauc ANY_BUT + +diag_message_table + .long #check_hardware + .long #board_ok + .long #bad_u2_checksum + .long #bad_u3_checksum + .long #bad_u4_checksum + .long #bad_u5_checksum + .long #bad_u6_checksum + .long #bad_u7_checksum + .long #bad_u8_checksum + .long #bad_u9_checksum + .long #bad_ram + + +**************************************** +* Wait for sound board Data AVailable to go active, with timeout. +* >a0=timeout +* 1212 +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + + + +******************************** +* TOP HALF OF COIN AUDIT PAGE 1 TABLE + +COIN_AUDS + .word AUD_Y_STRT,11 ;Y start, Y spacing +; .word AUD_Y_STRT,12+5 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW + AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW + AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW + AMAC M_XCOIN,0,AUDXCOIN,ROBO_YELLOW + AMAC M_DBV,0,AUD_DBV,ROBO_YELLOW + AMAC amst_s,0,AUDBEGIN,ROBO_GREEN ;On parachute + AMAC M_START,STARTS,0,ROBO_GREEN +; AMAC M_CONTO,0,AUD_CONTOFFERED,ROBO_GREEN +; AMAC M_CONT,0,AUD_CONTTAKEN,ROBO_GREEN + .long 0 + +COIN1_AUDS + .word AUD_Y_STRT+116,AUD_DY + .word AUD_LM+13,AUD_RM-13 + AMAC M_PAIDC,0,AUDPAIDC,ROBO_WHITE + .long 0 + +COIN2_AUDS + .word AUD_Y_STRT+85,11 ;Y start, Y spacing + .word AUD_LM+13,AUD_RM-13 ;LFT/RGT margin X + AMAC M_SERV,0,AUDSERV,>1212 + AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW + .long 0 + +amst_s TXTLINE "ATTRACT MODE STARTS" +M_START TXTLINE "MID GAME STARTS" +M_CONTO TXTLINE "CONTINUES OFFERED" +M_CONT TXTLINE "CONTINUES TAKEN" +M_EXTRA TXTLINE "EXTRA MEN COLLECTED/EARNED" +M_P1MIN TXTLINE "HOURS OF SINGLE PLAY" +M_P2MIN TXTLINE "HOURS OF DUAL PLAY" +M_HOURS TXTLINE "TOTAL HOURS OF PLAY" +M_AVGT .byte "AVG. ",ASCII_DQ,"PLAYER",ASCII_DQ," GAME TIME (MIN.)",0 + .even + + +;* BOTTOM HALF OF COIN AUDIT PAGE 1 TABLE +;COIN_A2 .WORD CP2_Y ;Y START +; .WORD AUD_DY ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_START,STARTS,0,ROBO_YELLOW +; AMAC M_CONT,CONTINS,0,ROBO_YELLOW +; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW +; AMAC M_HSLEFT,DOHSLEFT,0,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* COIN_D1 * +* * +* THIS IS TOP HALF OF DETAILED COIN AUDIT PAGE * +* ITS THE SAME AS THE OTHER COIN PAGE WITH THE Y POSITIONING * +* A LITTLE DIFFERENT * +* * +************************************************************************** +;COIN_D1 +; .WORD 39H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCOIN,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCOIN,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCOIN,ROBO_YELLOW +; .LONG 0 +* +* DOOR CLOSED AUDITS. +* +;COIN_D2 +; .WORD 090H ;Y START +; .WORD 11H ;Y BETWEEN ENTRIES +; .WORD AUD_LM ;LEFT MARGIN X +; .WORD AUD_RM ;RIGHT MARGIN X +; AMAC M_LCOIN,0,AUDLCDC,ROBO_YELLOW +; AMAC M_CCOIN,0,AUDCCDC,ROBO_YELLOW +; AMAC M_RCOIN,0,AUDRCDC,ROBO_YELLOW +; .LONG 0 + +************************************************************************** +* * +* GAME PLAY AUDIT SCREEN * +* * +************************************************************************** + + .asg 45,LM + .asg 400-45,RM + +GAME_AUDS + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_totuptime, prn_uptime,0, ROBO_WHITE + AMAC str_totpltime, prn_pltime,0, ROBO_WHITE + AMAC str_totplys, 0,AUD_TOTPLYS, ROBO_GREEN + AMAC str_totstarts, 0,AUD_TOTSTARTS,ROBO_GREEN + AMAC str_avginit, prn_initpct,0, ROBO_ORANGE + AMAC str_avgfulg, prn_fullgmpct,0,ROBO_YELLOW + AMAC str_tot1plyt, prn_1plpct,0, ROBO_CYAN + AMAC str_tot2plyt, prn_2plpct,0, ROBO_CYAN + AMAC str_tot3plyt, prn_3plpct,0, ROBO_CYAN + AMAC str_tot4plyt, prn_4plpct,0, ROBO_CYAN + AMAC str_ply21st, prn_1stqtrpct,0,ROBO_GREY + AMAC str_ply22nd, prn_1sthlfpct,0,ROBO_GREY + AMAC str_ply23rd, prn_3rdqtrpct,0,ROBO_GREY + AMAC str_ply2comp, prn_comppct,0, ROBO_GREY + AMAC str_2ovrtime, prn_ovtmpct,0, ROBO_BLUE +; AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_RED +; AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED + .long 0 + + +GAME_AUDS1a + .word 55-10,11,LM,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_snderr, 0,AUD_SNDERR, ROBO_RED +;;; AMAC str_snderr1, 0,AUD_SNDERR1, ROBO_RED + AMAC str_lockups, 0,AUDLOCK, ROBO_RED + AMAC str_lockups2, 0,AUD_LOCKUP, ROBO_RED +; AMAC str_cliplock, 0,AUD_CLIPLOCK, ROBO_RED + AMAC str_avgscr, prn_avgscr,0, ROBO_GREEN + AMAC str_avgplyscr, prn_avghumscr,0,ROBO_GREEN + AMAC str_avgcpuscr, prn_avgcpuscr,0,ROBO_GREEN + AMAC str_avgwin, prn_avgwin,0, ROBO_CYAN + AMAC str_avglos, prn_avglos,0, ROBO_CYAN + AMAC str_cpuvic, prn_cpuwins,0, ROBO_PINK + AMAC str_cpuwin, 0,AUD_CPUWINMARG,ROBO_ORANGE + AMAC str_cpulos, 0,AUD_CPULOSMARG,ROBO_ORANGE + AMAC str_scrdiff, prn_avgdropdif,0,ROBO_YELLOW +; AMAC str_drpcpu, prn_dropcpu,0, ROBO_GREY +; AMAC str_drphum, prn_drophum,0, ROBO_GREY + AMAC str_humans, prn_humans,0, ROBO_GREY + AMAC str_leftwins, prn_leftwins,0, ROBO_GREY +; AMAC str_numhotstrks,prn_numhot,0, ROBO_BLUE +; AMAC str_hotstrkpts, prn_hotpts,0, ROBO_BLUE + + .long 0 + +GAME_AUDS1b + .word 55,11,LM-5,RM ;Y start, Y spacing, L margin, R margin + + AMAC str_numhotstrks,prn_numhot,0, ROBO_RED + AMAC str_hotstrkpts, prn_hotpts,0, ROBO_RED + + AMAC str_tm_fire, 0,AUD_TM_FIRE, ROBO_YELLOW + AMAC str_tm_fire_pts,prn_avg_tm_pts,0, ROBO_YELLOW + + AMAC str_alley_oops, 0,AUD_ALLEYOOPS, ROBO_GREY + AMAC str_dble_dnks, 0,AUD_DBLE_DNKS, ROBO_GREY + + AMAC str_creatd_plr, 0,AUD_CREATED_PLR,ROBO_GREEN + AMAC str_creatd_use, prn_cp_starts,0, ROBO_GREEN + + .long 0 + + +str_creatd_plr TXTLINE "TOTAL PLAYERS CREATED/MODIFIED" +str_tm_fire TXTLINE "TOTAL TEAM FIRES" +str_tm_fire_pts TXTLINE "AVG. PTS. SCORED DURING TEAM FIRE" +str_alley_oops TXTLINE "TOTAL ALLEY-OOPS" +str_dble_dnks TXTLINE "TOTAL DOUBLE DUNKS" +str_creatd_use TXTLINE "CREATED PLAYER STARTS" +str_snderr TXTLINE "SND ERR (DAV & READ BACK)" +;str_snderr1 TXTLINE "SND ERR #1 (IRQ)" +;str_snderr2 TXTLINE "SND ERR #2 (DATA AVAILABLE)" +;str_snderr3 TXTLINE "SND ERR #3 (READ BACK)" + +str_lockups TXTLINE "DOGS" +str_lockups2 TXTLINE "PROCESS KO" +;str_cliplock TXTLINE "CLIP KO" +str_totuptime TXTLINE "TOTAL GAME UPTIME (HRS:MINS)" +str_totpltime TXTLINE "TOTAL GAME PLAY TIME (HRS:MINS)" +str_totplys TXTLINE "GAMES STARTED" +str_totstarts TXTLINE "INDIVIDUAL PLAYER STARTS" +str_avginit TXTLINE "INITIALS ENTERED" +str_avgfulg TXTLINE "FULL GAMES PURCHASED" +str_tot1plyt TXTLINE "1 PLAYER PLAY" +str_tot2plyt TXTLINE "2 PLAYER PLAY" +str_tot3plyt TXTLINE "3 PLAYER PLAY" +str_tot4plyt TXTLINE "4 PLAYER PLAY" +str_ply21st TXTLINE "FINISHED 1ST QUARTER" +str_ply22nd TXTLINE "FINISHED 2ND QUARTER" +str_ply23rd TXTLINE "FINISHED 3RD QUARTER" +str_ply2comp TXTLINE "FINISHED 4TH QUARTER" +str_2ovrtime TXTLINE "GONE TO OVERTIME" +str_avgscr TXTLINE "AVERAGE SCORE" +str_avgplyscr TXTLINE "AVERAGE HUMAN SCORE" +str_avgcpuscr TXTLINE "AVERAGE CPU SCORE" +str_avgwin TXTLINE "AVERAGE WINNING SCORE" +str_avglos TXTLINE "AVERAGE LOSING SCORE" +str_cpuvic TXTLINE "CPU VICTORIES" +str_cpuwin TXTLINE "GREATEST CPU VICTORY MARGIN" +str_cpulos TXTLINE "GREATEST CPU LOSS MARGIN" +str_scrdiff TXTLINE "SCORE DIFFERENTIAL AT DROPOUT" +;str_drpcpu TXTLINE "DROPOUTS VS CPU" +;str_drphum TXTLINE "DROPOUTS VS HUMAN" +str_humans TXTLINE "HUMAN VS. HUMAN - GAMES PLAYED" +str_leftwins TXTLINE "LSW" +str_numhotstrks TXTLINE "TOTAL HOT STREAKS STARTED" +str_hotstrkpts TXTLINE "AVERAGE PTS. SCORED ON HOT STREAK" +str_pct TXTLINE "%" + .even + + .asg 10,COL1 + .asg COL1+200,COL2 + .asg 160,WIDTH + + +GAME_AUD2a + .word 60-4,11,COL1,COL1+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_atl,0,AUD_ATL,ROBO_GREEN + AMAC str_bos,0,AUD_BOS,ROBO_WHITE + AMAC str_cha,0,AUD_CHA,ROBO_BLUE + AMAC str_chi,0,AUD_CHI,ROBO_YELLOW + AMAC str_cle,0,AUD_CLE,ROBO_CYAN + AMAC str_dal,0,AUD_DAL,ROBO_PURPLE + AMAC str_den,0,AUD_DEN,ROBO_GREEN + AMAC str_det,0,AUD_DET,ROBO_WHITE + AMAC str_gld,0,AUD_GLD,ROBO_BLUE + AMAC str_hou,0,AUD_HOU,ROBO_YELLOW + AMAC str_ind,0,AUD_IND,ROBO_CYAN + AMAC str_lac,0,AUD_LAC,ROBO_PURPLE + AMAC str_lal,0,AUD_LAL,ROBO_GREEN + AMAC str_mi, 0,AUD_MI, ROBO_WHITE + AMAC str_mil,0,AUD_MIL,ROBO_BLUE + .long 0 + +GAME_AUD2b + .word 60-4,11,COL2,COL2+WIDTH ;Y start, Y spacing, L margin, R margin + + AMAC str_min,0,AUD_MIN,ROBO_WHITE + AMAC str_nj, 0,AUD_NJ, ROBO_BLUE + AMAC str_jy, 0,AUD_JY, ROBO_YELLOW + AMAC str_orl,0,AUD_ORL,ROBO_CYAN + AMAC str_phi,0,AUD_PHI,ROBO_PURPLE + AMAC str_phx,0,AUD_PHX,ROBO_GREEN + AMAC str_por,0,AUD_POR,ROBO_WHITE + AMAC str_sac,0,AUD_SAC,ROBO_BLUE + AMAC str_san,0,AUD_SAN,ROBO_YELLOW + AMAC str_sea,0,AUD_SEA,ROBO_CYAN + AMAC str_tor,0,AUD_TOR,ROBO_BLUE + AMAC str_uta,0,AUD_UTA,ROBO_PURPLE + AMAC str_van,0,AUD_VAN,ROBO_WHITE ;3 new teams + AMAC str_was,0,AUD_WAS,ROBO_GREEN + .long 0 + + + .if 0 +ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223] +ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223] +ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223] +ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223] +ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223] +ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223] +ROBO_LF EQU 03E3EH +ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223] +ROBO_DECAY EQU 03F3FH +ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223] +ROBO_LASER EQU 03E3EH +ROBO_LASER2 EQU 03F3FH +ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223] +ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223] +ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR +ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE +ROBO_BLACK EQU 1414H ;BLACK AS COAL + .endif + + +str_atl TXTLINE "ATLANTA" +str_bos TXTLINE "BOSTON" +str_cha TXTLINE "CHARLOTTE" +str_chi TXTLINE "CHICAGO" +str_cle TXTLINE "CLEVELAND" +str_dal TXTLINE "DALLAS" +str_den TXTLINE "DENVER" +str_det TXTLINE "DETROIT" +str_gld TXTLINE "GOLDEN STATE" +str_hou TXTLINE "HOUSTON" +str_ind TXTLINE "INDIANA" +str_lac TXTLINE "L.A. CLIPPERS" +str_lal TXTLINE "L.A. LAKERS" +str_mi TXTLINE "MIAMI" +str_mil TXTLINE "MILWAUKEE" +str_min TXTLINE "MINNESOTA" +str_nj TXTLINE "NEW JERSEY" +str_jy TXTLINE "NEW YORK" +str_orl TXTLINE "ORLANDO" +str_phi TXTLINE "PHILADELPHIA" +str_phx TXTLINE "PHOENIX" +str_por TXTLINE "PORTLAND" +str_sac TXTLINE "SACRAMENTO" +str_san TXTLINE "SAN ANTONIO" +str_sea TXTLINE "SEATTLE" +str_tor TXTLINE "TORONTO" +str_uta TXTLINE "UTAH" +str_van TXTLINE "VANCOUVER" +str_was TXTLINE "WASHINGTON" +;str_los TXTLINE "LOS ANGELES" + .even + +#***************************************************************************** +* total uptime +prn_uptime + movi AUD_UPTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* actual play time +prn_pltime + movi AUD_PLTIME,a0 + calla GET_AUD + ;* 5 sec incs / 60 (sec p/min) = /12 + movk 12,a0 + divu a0,a1 ;mins + jruc P_TIME + + +#***************************************************************************** +* percentage of players entering initials +prn_initpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_INITENTRD,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of players purchasing full game +prn_fullgmpct + movi AUD_PRESTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_PURCHASED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 1 player play +prn_1plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* percentage of 2 player play +prn_2plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_2PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 3 player play +prn_3plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of 4 player play +prn_4plpct + movi AUD_PLTIME,a0 + calla GET_AUD + move a1,a4 + + movi AUD_4PLAYTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st quarter +prn_1stqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_1STQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 1st half +prn_1sthlfpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_HALFTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 3rd quarter +prn_3rdqtrpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_3RDQUARTR,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games finished 4th quarter +prn_comppct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_COMPLETED,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* percentage of games gone to overtime +prn_ovtmpct + movi AUD_TOTPLYS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_OVERTIME,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgscr + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PUSH a1 + movi AUD_LOS_SCORE,a0 + calla GET_AUD + srl 1,a1 ;/2 + PULL a3 + add a1,a3 + move a3,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avgwin + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WIN_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avglos + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_LOS_SCORE,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_cpuwins + movi AUD_COMPLETED,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CPUWINS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_leftwins + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a4 + + movi AUD_WINSONLEFT,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + +#***************************************************************************** +* +prn_humans + movi AUD_HUMANVSHUMAN,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +;#***************************************************************************** +;* +;prn_dropcpu +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSCPU,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK +; +; +;#***************************************************************************** +;* +;prn_drophum +; movi AUD_NUMDROPOUT,a0 +; calla GET_AUD +; move a1,a4 +; +; movi AUD_DROPVSHUM,a0 +; calla GET_AUD +; movi 100,a0 +; mpyu a0,a1 +; move a1,a2 +; move a4,a0 +; callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 +; move a2,a3 +; jruc PERCENT_WORK + + +#***************************************************************************** +* +prn_avgcpuscr + + movi AUD_CPUGAMES,a0 ;a cpu team + calla GET_AUD + move a1,a4 + + movi AUD_CPUSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* +prn_avghumscr + + movi AUD_HUMGAMES,a0 ;a human team + calla GET_AUD + move a1,a4 + + movi AUD_HUMSCORES,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + + +#***************************************************************************** +* average score differential at dropout +prn_avgdropdif + + movi AUD_NUMDROPOUT,a0 + calla GET_AUD + move a1,a4 + + movi AUD_DROPDIFF,a0 + calla GET_AUD + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +prn_numhot + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_hotpts + + movi AUD_HOTSTRKPTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_NUMHOTSTRK,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* average # points scored per hot streak +prn_avg_tm_pts + + movi AUD_TM_FIRE_PTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_TM_FIRE,a0 + calla GET_AUD + move a1,a0 + move a4,a2 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc NUMBER_WORK + +#***************************************************************************** +* +prn_cp_starts + movi AUD_TOTSTARTS,a0 + calla GET_AUD + move a1,a4 + + movi AUD_CREATED_PLR_STARTS,a0 + calla GET_AUD + movi 100,a0 + mpyu a0,a1 + move a1,a2 + move a4,a0 + callr ROUNDED_A0_INTO_A2 ;DIVIDES A0 INTO A2. RESULT IN A2 + move a2,a3 + jruc PERCENT_WORK + + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +PERCENT_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + + PUSH a8 + move a8,a7 + movi str_pct,a8 + CALLA STRCAT + PULL a8 + + PUSH a0 + move *a13(AT_RX),a0 + PUSHP a0 + addi 13,a0 + move a0,*a13(AT_RX) + PULL a0 + + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + JSRP RIGHT_FINISH + + PULLP a0 + move a0,*a13(AT_RX) ;restore right margin + RETP + +#***************************************************************************** + +;DJT Start +;;MISC_AUD +;; .word 50,18,AUD_LM,AUD_RM ;Y start, Y spacing, LMar, RMar +;; AMAC M_SECBON,0,AUDSURV,ROBO_YELLOW ;WARPS TAKEN +;; AMAC M_HIDB,0,AUDBONE,ROBO_YELLOW ;GAMES NOT FINISHED +;; AMAC M_PLAYS,DOPLAYS,0,ROBO_YELLOW ;PLAYS ON TOP +;; AMAC M_P1MIN,DO_P1MIN,0,ROBO_YELLOW +;; AMAC M_P2MIN,DO_P2MIN,0,ROBO_YELLOW +;; AMAC M_AVGT,DO_AVGT,0,ROBO_YELLOW +;; AMAC M_ELAPSE,DO_ELAPSE,0,ROBO_YELLOW +;; AMAC adiff_s,diff_prt,0,>1212 +;; .LONG 0 +;; +;;adiff_s TXTLINE "GAME DIFFICULTY LEVEL" +;DJT End + + + .IF 0 +******************************** +* Display revision message +* Do coin DIP if enabled +* Check cmos, if bad reset to factory + +FACCHECK + calla dpageflip_off + + CALLA CLR_SCRN + MOVI DIAGP,A0 + CALLA pal_getf + + MOVI AUDSTAT,A0 ;CLEAR GAME STATE AUDIT + CLR A1 + CALLA STORE_AUDIT + + MOVI ROM_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + + .if YUNIT + move @SWITCH+30h,a0 + btst 6,a0 + jrnz fc40 ;No DIP coinage? + + movk 1,a0 ;Just coinage + calla FAC_SET + movi dipcoinage_mess,a8 + JSRP L_MESS +fc40 + .endif + + .if DEBUG + SLEEPK 1 ;Show it DEBUG + .else + SLEEP 120 ;Show it + .endif + + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC0 ;NO + + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS + SLEEP 60 + + CALLR RES_ALL ;ALL TIME TABLE + clr a0 ;Full + CALLA FAC_SET + + MOVI MESS_FAC,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + JSRP LM_FINIS + SLEEP 60 + CALLA CMOS_VAL ;CMOS BOGUS? + JRZ FACC00 ;NO + + CALLA SCRCLR + MOVI MESS_RESET,A8 ;ERROR MESSAGE + JSRP L_MESS +FACC00 + SLEEP 240 + +FACC0 CALLA SCRCLR + jauc amode_start + + +dipcoinage_mess + MESS_MAC RD7FONT,SPACING20,200,65,ROBO_WHITE,STRCNRM,0 + .byte "USING DIPSWITCH COINAGE",0,0 + .even + + .ENDIF + +SECRET_NAME + .byte "SECRET MIDWAY MENU",0 + .even + + +******************************** +* Octopuss sucessful, show stats + + .ref show_designteam + +HID_P + clr a0 + move a0,@octopus2 + + JSRP show_designteam + + move @octopus2,a0 + JAZ DIAG_EX ;NOW GET OUT! + + CALLA display_init ;MAKE SURE A13 IS OK BEFORE ANY ACTIONS! + CALLA DIGSRT ;RE-INIT THE WORLD! + + MOVI SECRET_NAME,A2 + MOVI ROBO_LF,A3 + JSRP TOP_BOX ;PRINT TITLE BOX. + +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * + +; MOVI [4EH,TIT_ULX],A4 +; MOVI [190H,TIT_LRX],A5 +; MOVK 16,A6 +; CALLA G_BORDER + +; MOVI M_TEAM,A8 ;PUT UP THE DESIGN TEAM! +; JSRP L_MESS +; +; JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + + movi COIN_OCTO_AUDS,a0 + JSRP PRNT_AUD + + movi AUD_Y_STRT,a0 ;aud Y start + MOVE a0,*A13(AT_Y),W ;set Y COORDINATE + MOVI AUDLCOIN,A8 ;NOW PRINT MONEY FOR 1ST 3 + JSRP PRINT_COL2 + + +; movi COIN_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi COIN1_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD +; movi AUDLCOIN,a8 ;NOW PRINT MONEY FOR 1ST 3 +; JSRP PRINT_COL +; movi COIN2_AUDS,a0 ;PUT TABLE UP +; JSRP PRNT_AUD + + JSRP WAIT_BUT + + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS,A0 ;Show 1st screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1a,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUDS1b,A0 ;Show 2nd screen + JSRP PRNT_AUD + JSRP WAIT_BUT + + calla CLR_SCRN ;Clr screen + movi GAME_AUD2a,a0 + JSRP PRNT_AUD + movi GAME_AUD2b,a0 + JSRP PRNT_AUD +; MOVI AUDLCOIN,A8 ;Prt money +; JSRP PRINT_COL + JSRP WAIT_BUT + +; JSRP DISPDUMP +; JSRP WAIT_MUT ;Clrs dump if sticks down + + JSRP show_player_records + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + calla CLR_SCRN ;Clr screen + JSRP GO_VOL + + JAUC DIAG_EX ;NOW GET OUT! + + +************************************************************************** +* PRNT_AUD - THIS IS CALLED TO PRINT OUT AN AUDIT TABLE + +AT_PTR EQU PDATA ;LONG +AT_Y EQU PDATA+LONG_SIZE ;WORD +AT_DY EQU AT_Y+WORD_SIZE ;WORD +AT_LX EQU AT_DY+WORD_SIZE ;WORD LEFT MARGIN X +AT_RX EQU AT_LX+WORD_SIZE ;WORD RIGHT MARGIN X +AT_OBJ EQU AT_RX+WORD_SIZE ;LONG OBJECT POINTER FOR COLLECTION ROUT +AT_MESS EQU AT_OBJ+LONG_SIZE ;LONG PRINT_MONEY MESSAGE STASH + +PRNT_AUD + MOVE *A0+,A1 ;GET STARTING HEIGHT + MOVE A1,*A13(AT_Y) ;STORE + + MOVE *A0+,A1 ;GET DY TO USE + MOVE A1,*A13(AT_DY) ;STASH IT AWAY + + MOVE *A0+,A1 ;GET LEFT MARGIN + MOVE A1,*A13(AT_LX) ;STORE + + MOVE *A0+,A1 ;GET RIGHT MARGIN + MOVE A1,*A13(AT_RX) ;STASH IT AWAY + + MOVE A0,*A13(AT_PTR),L ;SAVE POINTER INTO AREA + +PA1 JSRP aud_prtone + + MOVE *A13(AT_PTR),A0,L ;GET POINTER + ADDI AUD_T_SIZE,A0 + MOVE A0,*A13(AT_PTR),L ;PUT BACK + + CALLR ADD_AUDIT_DY + + MOVE *A0,A1,L ;ARE WE DONE? + JRNZ PA1 + + RETP + +************************************************************************** +* * +* ADD_AUDIT_DY * +* * +* THIS IS CALLED TO MOVE THE AUDIT Y (STORE IN * +* PROCESS AREA) TO THE NEXT AUDIT BY ADDING THE * +* CURRENT DY (ALSO STORED IN PROCESS AREA). * +* * +************************************************************************** +ADD_AUDIT_DY + MMTM SP,A1,A2 + MOVE *A13(AT_Y),A1,W + MOVE *A13(AT_DY),A2,W ;GET DELTA Y + ADD A2,A1 ;MOVE THE Y DOWN + MOVE A1,*A13(AT_Y),W + MMFM SP,A1,A2 + RETS + +BEGIN_AUDIT + MMTM SP,A0 + CLR A0 + MOVE A0,@BAD_AUD,W ;MONITOR CORRUPTION. + MMFM SP,A0 + RETS + +******************************** +* Print an audit line + + SUBRP aud_prtone + + CALLR BEGIN_AUDIT + MOVE *A13(AT_PTR),A3,L ;GET POINTER + MOVE *A3(AUD_ROUTINE),A4,L + jrz apo20 ;No code? + + movi apo50,a7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A4 ;"CALL" THE ROUTINE + +apo20 MOVE *A3(AUD_NUMBER),A0 ;FETCH THE AUDIT NUMBER + CALLA GET_AUD ;TURN INTO AUDIT COUNT! + MOVE A1,A3 ;PROTECT FOR A SECOND. + JSRP NUMBER_WORK ;GET THE NUMBER IN A3 UP THERE! + +apo50 + movi MESS_AUD_LINE,a8 + calla LM_SETUP ;Setup for audit printing + + move *a13(AT_PTR),a3,L ;Get *audit + move *a3(AUD_COLOR),a6 + move *a3(AUD_MESS),a8,L ;Get *text + + jruc LEFT_FINISH + + +******************************** +* LEFT_FINISH AND RIGHT_FINISH +* +* THESE ARE CALLED TO PUT AUDIT INFO +* ON THE LEFT OR RIGHT SIDE ONCE A8 POINTS AT +* THE CORRECT DATA TO PRINT + +LEFT_FINISH + CALLR TURN_RED_IF_NEC + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_LEFT_X ;SET FOR LEFT X + JSRP LM_FINIS ;AND TYPE UP THE MESSAGE! + RETP + +RIGHT_FINISH + CALLR TURN_RED_IF_NEC ;CHANGE COLOR IF CORRUPTED. + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + + MOVE @BAD_AUD,A0,W ;IS IT CORRUPTED? + JRZ RFX ;NOPE....RETURN + + MOVI MESS_ERROR,A8 + CALLA LM_SETUP ;SETUP "ERROR" + + CALLR SET_FOR_Y ;SET FOR AUDIT'S Y + ADDI 40000H,A9 ;PUSH 4 Y UNITS TO CENTER + CALLR SET_RIGHT_X + JSRP LM_FINIS ;FINISH THE JOB! + +RFX RETP + +TURN_RED_IF_NEC + MMTM SP,A3 + MOVE @BAD_AUD,A3 ;CHANGE TO RED? + JRZ DAA_1 ;NOPE...ITS OK! + MOVI ROBO_RED,A6 ;CHANGE COLOR TO RED +DAA_1 MMFM SP,A3 + RETS + +SET_FOR_Y + MMTM SP,A3 + MOVE *A13(AT_Y),A3,W ;GET Y COORDINATE + SLL 16,A3 ;PUT IT IN POSITION + MOVY A3,A9 ;PUT IT IN PLACE + MMFM SP,A3 + RETS + +SET_LEFT_X + MMTM SP,A3 + MOVE *A13(AT_LX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +SET_RIGHT_X + MMTM SP,A3 + MOVE *A13(AT_RX),A3,W + MOVX A3,A9 ;PUT THE X IN PLACE + MMFM SP,A3 + RETS + +************************************************************************** +* NUMBER_WORK - Print audit number +* A3=# + +NUMBER_WORK + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + + MOVE A3,A8 ;NOW WE HAVE BINARY NUMBER + CALLA HEXTOASC ;NOW WE POINT TO THE STRING. + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + jruc RIGHT_FINISH + +************************************************************************** +* * +* GET_STARTS * +* * +* TOTAL GAME STARTS IN A2. * +* * +************************************************************************** +GET_STARTS + MMTM SP,A0,A1 + MOVK AUD1STRT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2STRT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* GET_CONTS * +* * +* TOTAL GAME CONTINUES IN A2. * +* * +************************************************************************** +GET_CONTS + MMTM SP,A0,A1 + MOVK AUD1CONT,A0 + CALLA GET_AUD + MOVE A1,A2 + + MOVK AUD2CONT,A0 + CALLA GET_AUD + ADD A1,A2 + MMFM SP,A0,A1 + RETS + + +************************************************************************** +* Get total plays (Beginning+starts+continues) +* Rets: A2=# + +GET_PLAYS + PUSH a0 + movk AUDBEGIN,a0 + calla GET_AUD + move a1,a0 + callr GET_STARTS ;Actually middle starts + add a2,a0 + callr GET_CONTS + add a0,a2 + PULL a0 + rets + +************************************************************************** +* * +* PRINT_MONEY * +* * +* THIS IS CALLED TO PRINT OUT THE "MONEY" ON THE MONEY * +* LINE OF THE AUDIT TABLE. * +* * +* AUDIT X AND Y IS SET FOR THE LINE TO DISPLAY IT ON. * +* * +* A8 HAS THE 1ST OF 3 AUDITS TO USE FOR THE CALCULATION * +* A9 HAS THE MESSAGE TO LEFT JUSTIFY ON THE CURRENT LINE * +* * +************************************************************************** +PRINT_COL + MOVI T_MONEY,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + +PRINT_MONEY + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* + CALLR SIXP ;HAVE THE 6 BEEN TAMPERED + JRZ NO_PREFIX + CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. + MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_1 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_1 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* + MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY + RETP + +************************************************************************** +* prints up collection minus $$$ +* + +PRINT_COL2 + MOVI T_MONEY2,A9 ;THIS ENTRYPOINT IS FOR COLLECTION MESSAGE + + MOVE A9,*A13(AT_MESS),L ;HOLD MESSAGE FOR WHEN WE NEED IT! + MOVI ADJCDIV,A0 ;IF DIVISOR IS ZERO..THEN ITS OFF! + CALLA GET_ADJ + JRZ NO_MONEY2 ;THAT'S ALL FOLKS! + + CALLR BEGIN_AUDIT ;KEEP TRACK OF SANITY OF CALC. +* +* ROUTINE IN A2 FORMS STRING BASED ON 3 AUDITS STARTING +* WITH THE NUMBER IN A8. +* + CALLR STR_OBJ ;GET AN OBJECT FOR STRINGING + JRC NO_MONEY2 ;COULDN'T GET AN OBJECT! + + CALLR SUM_COINS ;ADD UP THE COIN PARTS IN A2 + +* +* WE'RE DOING A PREFIX STRING...NO PREFIX IF ITS BEEN TAMPERED +* +;; CALLR SIXP ;HAVE THE 6 BEEN TAMPERED +;; JRZ NO_PREFIX2 +;; CALLR GET_CSPT ;A6 POINTS AT CSECECT DATA. +;; MOVE *A6(CS_LMES),A8,L ;LEFT STRING FOR MONEY TOTAL + movi M_VERINF,a8 + CALLA STRCAT ;SHOVE THE STRING IN! + +NO_PREFIX2 + MOVK 1,A0 ;DIVIDE COINS BY 1 IF ITS BEEN TAMPERED WITH + CALLR SIXP + JRZ DIV_BY_12 ;TAMPERED WITH...DIVIDE BY 1 FOR "COINS" + + MOVI ADJCDIV,A0 ;GET THE COIN PARTS PLEASE + CALLA GET_ADJ +* +* GET QUOTIENT IN A2 +* REMAINDER IN A3 +* +DIV_BY_12 + MOVE A2,A3 ;SETUP AS DIVIDEND + CLR A2 + DIVU A0,A2 ;DIVIDE UNITS/DIVISOR + + MOVE A2,A8 ;WE NEED TO PUT QUOTIENT IN STRING + CALLA HEXTOASC ;THIS FORMS STRING FOR QUOTIENT + + CALLA STRCAT ;ADD QUOTIENT TO PRINTOUT + + CMPI 1,A0 ;IS DIVISOR ONE?????? + JRZ NOFRAC2 ;YEP.......NO DECIMAL! +* +* WE HAVE A DIVISOR.....WE NEED TO DISPLAY CENTS. +* +;; MOVI ME_DECIMAL,A8 ;ADD DECIMAL POINT + MOVI ME_DASH,A8 ;ADD DASH + CALLA STRCAT ;ITS THERE! +* +* REMAINDER IS IN A3....TURN IT TO 100THS. +* + MOVI 100,A2 + MPYU A2,A3 ;REMAINDER TIMES 100 + MOVE A3,A2 ;DIVIDEND IN A2 + + CALLR ROUNDED_A0_INTO_A2 + CALLR A2_100TH ;CAT THE 100THS IN A2 TO THE A7 STRING. + +NOFRAC2 + MOVI COINS_TRAIL,A8 ;ASSUME IT WILL BE "COINS" + CALLR SIXP ;TAMPERED? + JRZ COIN_SUF2 ;YEP....USE " COINS" + MOVE *A6(CS_RMES),A8,L ;FINISH IT OFF WITH RIGHT STRING + +COIN_SUF2 + CALLA STRCAT ;SHOVE THE STRING IN! + MOVI M_MONEY,A8 ;MESSAGE FOR THIS LINE PASSED IN A9 + CALLA LM_SETUP + + MOVE @TMPOBJ,A8,L ;POINTER TO MONEY STRING + JSRP RIGHT_FINISH ;PUT ON RIGHT MARGIN + + CALLR STR_FREE + + MOVE *A13(AT_MESS),A8,L ;SETUP PASSED MESSAGE + CALLA LM_SETUP + JSRP LEFT_FINISH ;PUT UP PASSED MESSAGE. +NO_MONEY2 + RETP + +************************************************************************** +* * +* STR_OBJ * +* * +* THIS IS CALLED TO GET AN OBJECT FOR * +* CONCATONATING STRINGS TOGETHER. * +* * +* A7 POINTS AT NULL STRING * +* * +* NOTE THAT THIS IS NO LONGER RE-ENTRANT! * +* * +* YOU MUST CALL STR_FREE BEFORE SLEEPING! * +* * +************************************************************************** +STR_OBJ + PUSH a0,a1,a14 + CALLA GETOBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRNZ STR_O1 +* +* NO OBJECTS DURING TEST MODE +* + SETC + JRUC STR_OFAIL + +STR_O1 + MOVE A0,@TMPOBJ,L ;SAVE TO FREE LATER + MOVE A0,A7 ;THIS IS WHERE IT BELONGS. + CLR A0 + MOVB A0,*A7 ;MAKE STRING NULL + CLRC ;RETURN SUCCESS +STR_OFAIL + PULL a0,a1,a14 + RETS + +************************************************************************** +* * +* ROUNDED_A0_INTO_A2 * +* * +* THIS DIVIDES A0 INTO A2. IT LEAVES THE RESULT IN A2 * +* AND ROUNDS UP IF NECESSARY. * +* * +************************************************************************** +ROUNDED_A0_INTO_A2 + MMTM SP,A3 + MOVE A0,A0 ;DIVIDE BY ZERO? + JRNZ NDZ + MOVE A0,A2 ;RETURN ZERO + JRUC NOROUND +NDZ + MOVE A2,A3 + CLR A2 ; AS DIVIDEND + DIVU A0,A2 ;DIVIDE AND A2 = PENNIES....A3 = REMAINDER + SLL 1,A3 ;SHIFT REMAINDER + CMP A0,A3 ;COMPARE TO DIVISOR + JRLO NOROUND ;TOO LOW TO ROUND UP + INC A2 ;A2 HAS CORRECT PENNIES +NOROUND + MMFM SP,A3 + RETS + +************************************************************************** +* * +* A2_100TH * +* * +* A7 HAS A STRING TO BE PRINTED. WE HAVE THE * +* LAST TWO NUMBERS (NOT TO BE LEAD ZERO BLANKED) IN * +* A2. CONCATONATE THEM ONTO THE A7 STRING. * +* * +* THIS IS USED FOR PENNIES, HOURS AND MINUTES. * +* * +************************************************************************** +A2_100TH + MMTM SP,A8 + CMPI 9,A2 ;9 OR LESS REQUIES LEAD ZERO. + JRHI NOLEAD + + MOVI ME_ZERO,A8 ;THROW IN THE LEAD ZERO + CALLA STRCAT ;THIS DOES IT! + +NOLEAD + MOVE A2,A8 + CALLA HEXTOASC ;MAKE STRING + CALLA STRCAT ;PUT IT IN! + MMFM SP,A8 + RETS + +************************************************************************** +* * +* SUM_COINS * +* * +* A8 HAS FIRST OF THE 4 AUDIT NUMBERS OF INTEREST * +* * +* RETURN COINS TIMES THEIR FACTORS IN A2. * +* * +************************************************************************** +SUM_COINS + MMTM SP,A0,A1,A3,A6,A4 + + MOVE A8,A0 ;POINT AT AUDIT NUMBER + CLR A2 ;SUM = ZERO + + CALLR GET_CSPT ;A6 POINTS AT CSELECT TABLE + ADDI CS_LVAL,A6 ;POINT AT 1ST MULTIPLIER + + MOVI CHUTES,A4 ;NOW...ITERATE OVER THE CHUTES + +NEXT_CHUTE + MOVE *A6+,A3,W ;GET MULTPLIER FOR THIS CHUTE + CALLR FIX_A3 ;REPLACE A3 WITH 1 (MULTIPLIER) IF + ;ITS SOME CUSTOM MODE. + CALLR ADD_AUD_A0_TIMES_A3_TO_A2 + INC A0 ;NEXT AUDIT + DSJS A4,NEXT_CHUTE + + MMFM SP,A0,A1,A3,A6,A4 + RETS + +ADD_AUD_A0_TIMES_A3_TO_A2 + CALLA GET_AUD ;FETCH THE AUDIT + MPYU A1,A3 ;TIME THE FACTOR + ADD A3,A2 + RETS + +************************************************************************** +* FIX_A3 +* +* THIS IS CALLED BY THE LOW LEVEL MONEY TOTALIZER. +* THE MULTIPLIER FOR THE COIN SLOT THAT ITS WORKING +* ON IS IN A3. WE REPLACE IT WITH "1" TO SUM "TOTAL COINS" +* IF ITS IN A NON-STANDARD COIN MODE. +* +************************************************************************** +FIX_A3 + CALLR SIXP ;HAS IT BEEN TAMPERED WITH? + JRNZ FIX_A3X ;NOPE...LEAVE A3 + + MOVK 1,A3 +FIX_A3X + RETS + +************************************************************************** +* SIXP +* +* THIS IS CALLED TO SEE IF THE 1ST 6 COIN PARAMETERS HAVE +* BEEN TAMPERED WITH. +* +* Z=YES +* +************************************************************************** +SIXP + MMTM SP,A0 + MOVI ADJ1ST6,A0 + CALLA GET_ADJ ;HAS IT BEEN TAMPERED WITH? + MMFM SP,A0 + RETS + +STARTS + CALLR GET_STARTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +CONTINS + CALLR GET_CONTS + MOVE A2,A3 ;GET IN PRINTOUT REG. + jruc NUMBER_WORK ;AND PRINT IT + +DOPLAYS + CALLR GET_PLAYS + MOVE A2,A3 ;PUT IN PLACE + jruc NUMBER_WORK + +;DJT Start +;;DOHSLEFT +;; MOVI ADJHSRES,A0 +;; CALLA GET_ADJ ;IS IF OFF? +;; JRZ DOHSOFF ;YEP...PRINT IT +;; +;; CALLA GET_HSC ;GET THE COUNTER VALUE +;; MOVE A0,A3 +;; jruc NUMBER_WORK ;AND SHOW IT! +;; +;;DOHSOFF +;; MOVI MESS_AUD_NUM,A8 +;; CALLA LM_SETUP ;SETUP FOR AUDIT PRINTING. +;; +;; MOVI M_HSOFF,A8 ;THIS EFFECTIVELY ERASES LINE! +;; JAUC RIGHT_FINISH +;DJT End + +DO_P1MIN + MOVI AUD1TIME,A0 +P1MJ + CALLA GET_AUD ;TURN INTO NUMBER + MOVE A1,A4 ;MOVE NUMBER TO "HOUR" COMPUTATION REGGIE + JRUC DH11 ;AND DO LIKE THE HOURS! + + +DO_P2MIN + MOVI AUD2TIME,A0 + JRUC P1MJ + +DO_HOURS + CALLR TOT_TIME ;READ OUT THE TOTAL TIME. +DH11 MOVE A4,A5 ;A5 HAS RUNNING PLAY TIME + CLR A4 ; READY FOR DIVISION + MOVK 12,A0 + DIVU A0,A4 ;A4 HAS MINUTES + CMPI 6,A5 ;ROUND PROPERLY + JRLO DH1 ;NOT ENOUGH + INC A4 +DH1 + MOVE A4,A1 ;NOW THIS DIVIDED BY 60 IS WHAT WE NEED + jruc P_TIME ;DO IT! + +DO_AVGT + CALLR TOT_TIME ;A3 HAS WEIGHTED TIME + +DOAVC CALLR GET_PLAYS ;GET TOTAL PLAYS IN A2 + MOVE A2,A0 ;STASH IN A0. + MOVK 5,A1 ;TURN INTO SECONDS + MPYU A1,A3 ;A3 HAS SECONDS OF INTEREST + MOVE A3,A2 + CALLR ROUNDED_A0_INTO_A2 ;DIVIDE A2 BY PLAYS (AND ROUND) + MOVE A2,A1 ;NOW GET IN PLACE FOR P_TIME + jruc P_TIME ;DO IT! + +DO_ELAPSE + CALLR TOT_TIME + MOVE A4,A3 ;USE ELAPSED TIME + JRUC DOAVC ;AND THE REST IS IDENTICAL. + + +keyavg_prt +; movi AUDKEYTOT,a0 +; calla GET_AUD +; move a1,a3 +; movi AUDFULLGAMES,a0 +; calla GET_AUD +; divs a1,a3 +; jruc NUMBER_WORK ;Print it + + +diff_prt + movk ADJDIFF,a0 + calla GET_ADJ + move a0,a3 + jruc NUMBER_WORK ;Print it + + +************************************************************************** +* * +* P_TIME * +* * +* THIS IS CALLED TO DISPLAY AN AUDIT IN TIME (0:00) * +* FORMAT. THE NUMBER TO BE USED IS PASSED IN A1. * +* * +************************************************************************** +P_TIME + CALLR STR_OBJ ;USE AN OBJECT BLOCK FOR STRING MANIPULATION + JRC NO_OBJS ;NO OBJECTS....PRINT NOTHING + + CLR A0 ;DIVIDEND IN + MOVI 60,A2 + DIVU A2,A0 ;A0 = "MINUTES"....A1 = "SECONDS + + CALLA CAT_A0 ;ADD A0 STRING TO A7 BUILD + MOVI ME_COLON,A8 + CALLA STRCAT ;PUT THE COLON IN. + + MOVE A1,A2 ;GET "SECONDS" IN A2 + CALLR A2_100TH ;AND GET THE 100THS IN. + + MOVI MESS_AUD_NUM,A8 ;SETUP FOR AUDIT NUMBER + CALLA LM_SETUP + move *a13(AT_PTR),a6,L ;Get *audit + move *a6(AUD_COLOR),a6 + + MOVE A7,A8 ;PUT STRING CORRECT REGGIE + JSRP RIGHT_FINISH ;PRINT THE LINE + + CALLR STR_FREE ;FREE UP THE OBJECT! + +NO_OBJS + RETP ;NOW RETURN TO CALLER + +STR_FREE + MOVE @TMPOBJ,A0,L ;GET OBJECT BACK + JRNZ FREE_IT_NOW + + .IF DEBUG + JRUC $ + .ENDIF + RETS ;NO OBJECT...RETURN! + +FREE_IT_NOW + jauc FREEOBJ ;AND LET IT GO. + +************************************************************************** +* * +* TOT_TIME * +* * +* (1 * P1TIME) + (2 * P2TIME) IN A3 * +* ELAPSED TIME IN A4 * +* * +************************************************************************** +TOT_TIME + MMTM SP,A0,A1 + MOVI AUD1TIME,A0 + CALLA GET_AUD + MOVE A1,A3 + MOVE A1,A4 + MOVI AUD2TIME,A0 + CALLA GET_AUD + ADD A1,A4 ;A4 HAS SIMPLE SUM NOW + SLL 1,A1 ;DOUBLE THE PLAYER 2 TIME + ADD A1,A3 + MMFM SP,A0,A1 + RETS + + +******************************** +**** DATA SECTION BEGINS **** + + .DATA + + + +******************************** +* AUDIT TEXT + +MESS_ERROR + MESS_MAC RD7FONT,SPACING07,0,0,ROBO_RED,STRLNRM,0 + TXTLINE " ERROR" + +MESS_AUD_NUM + MESS_MAC RD7FONT,SPACING20,367,227,ROBO_YELLOW,STRRNRM,0 + +MESS_AUD_LINE + MESS_MAC RD7FONT,SPACING20,23,227,ROBO_YELLOW,STRLNRM,0 + + +MES_AUD TXTLINE "GAME AUDITS" + +MES_BOOK + TXTLINE "COIN BOOKKEEPING" + +M_LCOIN TXTLINE "LEFT SLOT COINS" +M_CCOIN TXTLINE "CENTER SLOT (3) COINS" +M_RCOIN TXTLINE "RIGHT SLOT COINS" + +M_LCOIN2 TXTLINE "DUNKS FROM THE LEFT" +M_CCOIN2 TXTLINE "DUNKS FROM THE CENTER" +M_RCOIN2 TXTLINE "DUNKS FROM THE RIGHT" + +M_XCOIN TXTLINE "EXTRA SLOT (4) COINS" +M_DBV TXTLINE "BILL VALIDATOR" + +M_PAIDC TXTLINE "PAID CREDITS" + +M_SERV TXTLINE "SERVICE CREDITS" + + +M_PLAYS TXTLINE "TOTAL PLAYS" + +;DJT Start +;;M_HSLEFT +;; TXTLINE "PLAYS UNTIL H.S. RESET" +;; +;;M_HSOFF TXTLINE "OFF" +;DJT End + + .even +M_ELAPSE + TXTLINE "AVG. ELAPSED TIME/PLAY" + +M_MONEY MESS_MAC RD15FONT,SPACING20,367,227,ROBO_WHITE,STRRNRM,0 + +T_MONEY MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "TOTAL COLLECTION" + +T_MONEY2 MESS_MAC RD15FONT,SPACING20,23,227,ROBO_WHITE,STRLNRM,0 + TXTLINE "DUNK INFO" + +M_VERINF + TXTLINE "D57-0" + +;DJT Start +;;M_LOCKUP +;; TXTLINE "LOCKUPS" +;;M_HIDB TXTLINE "GAMES NOT FINISHED" +;; +;;M_SECBON +;; TXTLINE "WARPS" +;DJT End + + +************************************************************************** +* * +* MENU DESCRIPTORS * +* * +************************************************************************** +* +* MAIN TEST MENU +* +MEN_MAIN + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSMAIN ;TITLE + .WORD ROBO_WHITE ;COLOR OF TITLE + .WORD MENU_X ;UL X + .WORD MENU_Y-3 ;UL Y +; .WORD MENU_DY-6 ;VERTICAL SPACING + .WORD MENU_DY-7 ;VERTICAL SPACING + .WORD ROBO_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD BAR_WID ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_DIAG,GO_DIAG,DIAG_HELP + .LONG MESS_COIN_AUD,GO_BOOK,COIN_HELP + .LONG MESS_GAME_AUD,GO_AUD,AUDIT_HELP + .LONG MESS_GAME_ADJ,GO_ADJ,ADJUST_HELP + .LONG MESS_UTIL,GO_UTIL,UTIL_HELP + .LONG MESS_HARDWARE,GO_HARDWARE,HARDWARE_HELP +; .LONG MESS_CLOCK,GO_CLOCK,CLOCK_HELP + .LONG MESS_VOL,GO_VOL,VOL_HELP +; .LONG MESS_AMOD_VOL,GO_AMODE_VOL,AMODE_VOL_HELP + .LONG MESS_EXIT,0,EXIT_HELP ;SPECIAL CASE! + .LONG 0 ;END + +* UTILITES MENU GOES LEFT OF CENTER + +UM_WID EQU 206 +UM_X EQU TIT_ULX+GAP+MB_XWID+(UM_WID/2)+C_KLUDGE + +MEN_UTIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSUTIL ;TITLE + .WORD COLOR_WHITE ;COLOR OF TITLE + .WORD UM_X ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 18 ;VERTICAL SPACING + .WORD COLOR_WHITE ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEG) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD UM_WID ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCRED,DO_CLCRED,CLCRED_HELP + .LONG MESS_CLCOIN,DO_CLCOIN,CLCOIN_HELP + .LONG MESS_CLAUD,DO_CLAUD,CLAUD_HELP +; .LONG MESS_HSRES,DO_HSRES,HSRES_HELP + .LONG MESS_CLPLRECS,DO_CLPLRECS,CLPLRECS_HELP + .LONG MESS_DEF_ADJ,DO_DEF_ADJ,DEF_ADJ_HELP + .LONG MESS_FACSET,DO_FACSET,FACSET_HELP +;DJT Start + .if OPERMES + .ref opmsg_main + .LONG opmsg_s,opmsg_main,OPMSG_HELP + .endif ;OPERMES +;DJT End + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 ;END + +* DIAGNOSTIC TESTS MENU + +MEN_DIAG + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .WORD COLOR_RED ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 195 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_SWTEST,GO_SWTEST,BLNK_HELP + .LONG diptst_mess,dipsw_test,BLNK_HELP +ROM_LEV EQU 3 ;TEST NUMBER FOLLOWING ROM TEST + .LONG MESS_CPUTEST,GO_CPUTEST,BLNK_HELP +RTR_LEV EQU 4 ;TEST NUMBER FOLLOWING CPU TEST (FOR RETURN) + .LONG M_STEST,GO_STEST,BLNK_HELP + .LONG MESS_PATTERNS,GO_PATTERNS,BLNK_HELP + .LONG MESS_BURN,DO_BURN,BLNK_HELP + .LONG MESS_MM,0,BLNK_HELP ;RETURN TO MAIN MENU + .LONG 0 + +STM_WID EQU 250 + + +* PRESS ANY BUTTON TO CONTINUE + +ANY_MENU + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG 0 ;TITLE + .WORD 0 ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 200 ;UL Y + .WORD MENU_DY ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD BAR_HITE ;HEIGHT OF SELECTION BAR + .WORD -9 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_ANY,0,NO_HELP + .LONG 0 + +* MONITOR PATTERNS + +MEN_PATTERNS + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 23 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 234 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_RED,GO_RED,BLNK_HELP + .LONG MESS_GREEN,GO_GREEN,BLNK_HELP + .LONG MESS_BLUE,GO_BLUE,BLNK_HELP + .LONG MESS_BARS,GO_BARS,BLNK_HELP + .LONG MESS_CROSS,GO_CROSS,BLNK_HELP + .LONG MESS_DIAGM,0,BLNK_HELP + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* DETAILED COINAGE AVAILABLE (ON 1ST COINAGE PAGE) + +MEN_DETAIL + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD COLOR_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 224 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_CLCOIN,0,NO_HELP ;Clr coins + .LONG MESS_MM,FORCE_MAIN,NO_HELP ;RETURN TO MAIN MENU + .LONG 0 + +* YES/NO (FOR ARE YOU SURE?) + +MEN_YN .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSDIAG ;TITLE + .WORD COLOR_RED ;COLOR OF TITLE + .WORD 200 ;UL X + .WORD 166 ;UL Y + .WORD 19 ;VERTICAL SPACING + .WORD COLOR_YELLOW ;COLOR WHEN NOT SELECTED + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 78 ;WIDTH OF BAR! (A LITTLE FATTER) + .WORD COLOR_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_YES,0,NO_HELP + .LONG MESS_NO,0,NO_HELP + .LONG 0 + +* NEXT AUDIT PAGE + +MEN_AP1 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP ;DETAILED SECTION + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG 0 + + +* PREVIOUS AUDIT PAGE? (ON 2ND GAME AUDIT PAGE) + +MEN_AP2 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_TOPAGE2,0,NO_HELP + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + + +MEN_AP3 .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESSPAT ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD 226 ;UL Y + .WORD 12 ;VERTICAL SPACING + .WORD COLOR_BLUE ;COLOR WHEN NOT SELECTED + .WORD 10 ;HEIGHT OF SELECTION BAR + .WORD -1 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 157 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .LONG MESS_MM,FORCE_MAIN,NO_HELP;RETURN TO MAIN MENU + .LONG MESS_BACKP1,0,NO_HELP ;DETAILED SECTION + .LONG 0 + + +MEN_SOUNDTEST + .LONG RD7FONT ;FONT + .LONG STRCNRM ;CENTER PLEASE + .LONG MESS_SNDTST0 ;TITLE + .WORD ROBO_YELLOW ;COLOR OF TITLE + .WORD 200 ;UL X (CENTER IT!) + .WORD MENU_Y-3 ;UL Y + .WORD 20 ;VERTICAL SPACING + .word ROBO_RED ;colour when not selected + .WORD 16 ;HEIGHT OF SELECTION BAR + .WORD -4 ;DISTANCE OF BAR FROM TOP OF TEXT (NEGATIVE) + .WORD BAR_DX ;EXTRA X ON EACH SIDE. + .WORD 192+6 ;WIDTH OF BAR! + .WORD ROBO_DECAY ;TEXT COLOR OF SELECTED ITEM + .long MESS_SNDTST1,DO_GENTEST,NO_HELP + .long MESS_SNDTST2,DO_PLAYSOUNDS,NO_HELP + .long MESS_SNDTST3,0,NO_HELP + .long MESS_SNDTST4,FORCE_MAIN,NO_HELP + .LONG 0 + +************************************************************************** +* * +* HELP MENUS FOR MAIN MENU * +* * +************************************************************************** +* HM_JUST 0 = CENTER 1 = LEFT +* HM_COLOR +* HM_ENTS + +DIAG_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# ENTRIES + .LONG MESS_SWTEST + .long diptst_mess + .LONG MESS_CPUTEST + .LONG M_STEST + .LONG MESS_PATTERNS + .LONG U_BURNIN + +COIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;2 ENTRIES + .LONG CH_0 + .LONG CH_1 + .LONG CH_2 + +AUDIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG AH_1 + .LONG AH_2 + +ADJUST_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;3 ENTRIES + .LONG AD_1 + .LONG AD_2 + .LONG AD_3 + +UTIL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR +;DJT Start + .if OPERMES + .WORD 6 ;# of ENTRIES + .else ;OPERMES + .WORD 5 ;# of ENTRIES + .endif ;OPERMES +;DJT End + .LONG U_CLR_CRED + .LONG U_CLR_COIN + .LONG U_CLR_AUD +; .LONG U_HSRESET + .LONG U_CLRRECS + .LONG U_FACTORY +;DJT Start + .if OPERMES + .long opmsg_s + .endif ;OPERMES +;DJT End + +VOL_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;2 ENTRIES + .LONG MESS_ATV + .LONG MESS_OTG + +;AMODE_VOL_HELP +; .WORD 0 ;CENTER JUSTIFY +; .WORD COLOR_BLUE ;COLOR +; .WORD 2 ;2 ENTRIES +; .LONG MESS_ATV +; .LONG MESS_FAM + +EXIT_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 1 ;1 ENTRY + .LONG U_END + + +******************************** +* HELP FOR UTILITY MENU + +CLCRED_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCRED1 + .LONG MEH_CLCRED2 + .LONG MEH_CLCRED3 + +CLCOIN_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 3 ;# entries + .LONG MEH_CLCOIN1 + .LONG MEH_CLCOIN2 + .LONG MEH_CLCOIN3 +; .LONG MEH_CLCOIN4 + +CLAUD_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 2 ;# entries + .LONG MEH_CLAUD1 + .LONG MEH_CLAUD2 + +CLPLRECS_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 4 ;# entries + .long MEH_CLPLRECS1 + .long MEH_CLPLRECS2 + .long MEH_CLPLRECS3 + .long MEH_CLPLRECS4 + +;DJT Start +;;HSRES_HELP +;; .WORD 0 ;CENTER JUSTIFY +;; .WORD COLOR_BLUE ;COLOR +;; .WORD 3 ;# entries +;; .LONG MEH_RESHS1 +;; .LONG MEH_RESHS2 +;; .LONG MEH_RESHS3 +;DJT End + +DEF_ADJ_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 7 ;# entries + .LONG MEH_DEFA1 + .LONG MEH_DEFA2 + .LONG MEH_DEFA3 + .LONG MEH_DEFA4 + .LONG MEH_DEFA5 + .LONG MEH_DEFA6 + .LONG MEH_DEFA7 + +FACSET_HELP + .WORD 0 ;CENTER JUSTIFY + .WORD COLOR_BLUE ;COLOR + .WORD 6 ;# entries + .LONG MEH_FAC1 + .LONG MEH_FAC2 + .LONG MEH_FAC3 + .LONG MEH_FAC4 + .LONG MEH_FAC5 + .LONG MEH_FAC6 + +;DJT Start + .if OPERMES +OPMSG_HELP + .word 0 ;CENTER JUSTIFY + .word COLOR_BLUE ;COLOR + .word 3 ;# entries + .long opmsgh1_s + .long opmsgh2_s + .long opmsgh3_s + .endif ;OPERMES +;DJT End + + +************************************************************************** +* * +* TEXT STRINGS * +* * +************************************************************************** + +SIY0 equ 190 +SIY1 equ 212 +SIY2 equ 224 +SIY3 equ 236 + +SND_INST + MESS_MAC RD7FONT,SPACING07,200,SIY1,ROBO_WHITE,STRCNRM,0 + .STRING "UP AND DOWN TO SELECT SOUND",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY2,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS ACTION BUTTON TO PLAY",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,SIY3,ROBO_WHITE,STRCNRM,0 + .STRING "PRESS START BUTTON TO EXIT",0,0 + +SND_SETUP MESS_MAC RD15FONT,SPACING20,200,SIY0,ROBO_WHITE,STRCNRM,0 + +sounds_tab .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + .long SND_ST0,SND_ST1,SND_ST2,SND_ST3 + + +SND_ST0 .string "JET PLANE (U2)",0 +SND_ST1 .string "ORGAN (U3)",0 +SND_ST2 .string "FOR THREE (U4)",0 +SND_ST3 .string "AIRBALL (U5)",0 + + .EVEN +TEST_SOUND_TAB + .WORD 2f9H,1b5H,7e6H,1edH,2f9H,1b5H,7e6H,1edH + +MESS_SNDTST0 .string "SOUND BOARD TEST",0 +MESS_SNDTST1 .string "GENERAL TEST",0 +MESS_SNDTST2 .string "PLAY SOUNDS",0 +MESS_SNDTST3 .string "BACK TO DIAGNOSTICS MENU",0 +MESS_SNDTST4 .string "RETURN TO MAIN MENU",0 + +MESS_YES + .byte "YES",0 + .EVEN + +MESS_NO .byte "NO",0 + .EVEN + +;MESS_CLEAR_SUBS +; .byte "CLEAR SUBTOTALS" +; .BYTE 0 +; .EVEN +; +;MESS_SUBS_CLEAR +; .byte "SUBTOTALS CLEARED" +; .BYTE 0 +; .EVEN + +MESS_TOPAGE2 + .byte "NEXT AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_BACKP1 + .byte "PREVIOUS AUDIT PAGE" + .BYTE 0 + .EVEN + +MESS_ANY + .byte "ANY BUTTON TO CONTINUE" + .BYTE 0 + .EVEN + +MESS_MM + .byte "RETURN TO MAIN MENU" + .BYTE 0 + .EVEN + +MESSDIAG ;THIS IS TITLE OF PAGE +MESS_DIAG + .byte "DIAGNOSTIC TESTS" + .BYTE 0 + .EVEN +MESS_COIN_AUD + .byte "COIN BOOKKEEPING" + .BYTE 0 + .EVEN +MESS_GAME_AUD + .byte "GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_GAME_ADJ + .byte "GAME ADJUSTMENT" + .BYTE 0 + .EVEN +MESS_UTIL + .byte "UTILITIES" + .BYTE 0 + .EVEN + +MESS_VOL + .byte "GAME VOLUME ADJ." + .BYTE 0 + .EVEN + +;MESS_AMOD_VOL +; .byte "A-MODE VOLUME ADJ." +; .BYTE 0 +; .EVEN + +MESS_EXIT + .byte "EXIT TO GAME OVER" + .BYTE 0 + .EVEN + +CH_0 .byte "VIEW COINBOX" + .BYTE 0 + .EVEN +CH_1 .byte "TOTALS AND" + .BYTE 0 + .EVEN +CH_2 .byte "GAMEPLAY COUNTERS" + .BYTE 0 + .EVEN + +AH_1 .byte "VIEW GAME" + .BYTE 0 + .EVEN +AH_2 .byte "PLAY STATISTICS" + .BYTE 0 + .EVEN + +AD_1 .byte "MAKE CHANGES TO",0 + .EVEN +AD_2 .byte "PRICING, GAMEPLAY SETTINGS,",0 + .EVEN +AD_3 .byte "AND DRONE DIFFICULTY",0 + .EVEN + +MESS_CLCRED +U_CLR_CRED .byte "CLEAR CREDITS" + .BYTE 0 + .EVEN + +MESS_CCCONF .byte "CREDITS CLEARED." + .BYTE 0 + .EVEN + +MESS_CLCOIN +U_CLR_COIN .byte "CLEAR COIN COUNTERS" + .BYTE 0 + .EVEN + +MESS_CLAUD +U_CLR_AUD .byte "CLEAR GAME AUDITS" + .BYTE 0 + .EVEN + +MESS_CLPLRECS +U_CLRRECS + .string "CLEAR PLAYER RECORDS",0 + .EVEN + +;DJT Start +;;MESS_HSRESET +;;U_HSRESET .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;; +;;MESS_HSRES +;; .byte "RESET HIGH SCORES" +;; .BYTE 0 +;; .EVEN +;DJT End + + +MESS_ATV + .byte "ADJUST THE VOLUME",0 + .even +MESS_OTG + .byte "FOR GAME PLAY",0 + .even +;DJT Start +;MESS_FAM +;DJT End +; .byte "FOR ATTRACT MODE",0 +; .even +;M_OPMESS_TIT +;U_OPMESS .byte "OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +;M_SET_OMESS +;;MESS_OPMESS .byte "SET OPERATOR MESSAGE" +; .BYTE 0 +; .EVEN + +U_BURNIN .byte "BURN-IN TEST",0 + .even + +MESS_BURN .byte "RUN BURN-IN TEST",0 + .even + +MESS_DEF_ADJ TXTLINE "DEFAULT ADJUSTMENTS" +U_FACTORY TXTLINE "FACTORY SETTINGS" +MESS_FACSET TXTLINE "FULL FACTORY RESTORE" + +;DJT Start + .if OPERMES +opmsg_s TXTLINE "OPERATOR MESSAGE" +opmsgh1_s TXTLINE "ENTER AN OPERATOR" +opmsgh2_s TXTLINE "ATTRACT MODE MESSAGE" +opmsgh3_s TXTLINE "TO THE PLAYERS" + .endif ;OPERMES +;DJT End + + +U_END .byte "END TESTING",0 + .even + +MESS_SWTEST .byte "SWITCH TEST",0 + .even +diptst_mess .byte "DIP SWITCH TEST",0 + .even +MESS_CPUTEST .byte "CPU BOARD TEST",0 + .even +M_STEST .byte "SOUND BOARD TEST",0 + .even + +MESSPAT ;HEADER TITLE +MESS_PATTERNS .byte "MONITOR PATTERNS",0 + .EVEN + +MESS_RED .byte "RED SCREEN",0 + .EVEN +MESS_GREEN .byte "GREEN SCREEN",0 + .EVEN +MESS_BLUE .byte "BLUE SCREEN",0 + .EVEN +MESS_BARS .byte "COLOR BARS",0 + .EVEN +MESS_CROSS .byte "CROSSHATCH PATTERN",0 + .EVEN +MESS_DIAGM .byte "BACK TO DIAGNOSTICS MENU",0 + .EVEN + +* ON FULL RESTORE....THE FOLLOWING IS PRINTED. + ;0 = END OF STRING...1 = MORE MESSAGES! + + .asg 14,Y_SPC + .asg 70,START_Y + .asg START_Y+Y_SPC,NXT_LNE + +MESS_RESET + MESS_MAC RD7FONT,SPACING20,200,START_Y,ROBO_RED,STRCNRM,0 +MESS_FACFAIL + .byte "FAILURE IN CMOS RAM",0,0 + .EVEN + +MESS_FFSCONF +MESS_FAC MESS_MAC RD7FONT,SPACING20,200,NXT_LNE,COLOR_WHITE,STRCNRM,0 +MESS_DEFCONF + .byte "ADJUSTMENTS RESTORED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*2,COLOR_YELLOW,STRCNRM,0 +MESS_CCNCONF + .byte "COIN COUNTERS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*3,COLOR_BLUE,STRCNRM,0 +MESS_CAUDCONF + .byte "GAME AUDITS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +MESS_CLPLRECSCONF + .string "PLAYER RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*5,COLOR_CYAN,STRCNRM,0 +MESS_CLWRLDRECSCONF + .string "WORLD RECORDS CLEARED.",0,1 + .EVEN + + MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*6,COLOR_WHITE,STRCNRM,0 +MESS_CLTMRECSCONF + .string "TEAM STATISTICS CLEARED.",0,0 + .EVEN + +;DJT Start +;; MESS_MAC RD7FONT,SPACING20,200,NXT_LNE*4,COLOR_RED,STRCNRM,0 +;;MESS_HSRCONF +;; .byte "HIGH SCORE TABLE RESET.",0,1 +;; .EVEN +;DJT End + +MESS_CANCELLED + .byte "CANCELLED",0 + .EVEN + +CIN_X EQU (TIT_ULX+TIT_LRX)/2 +CR_X EQU CIN_X-34 +CIN_Y EQU 86 + +CIY1 EQU CIN_Y+14 +CIY2 EQU CIY1+15 +CIY3 EQU CIY2+25 +CIY4 EQU CIY3+25 + +;DJT Start +;;M_TEAM MESS_MAC RD7FONT,SPACING20,200,67,ROBO_WHITE,STRCNRM,0 +;; .byte "TOTAL CARNAGE TEAM:",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,97,ROBO_WHITE,STRCNRM,0 +;; .byte "MARK TURMELL",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,107,ROBO_WHITE,STRCNRM,0 +;; .byte "JOHN TOBIAS",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,117,ROBO_WHITE,STRCNRM,0 +;; .byte "JIM GENTILE",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,127,ROBO_WHITE,STRCNRM,0 +;; .byte "SHAWN LIPTAK",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,137,ROBO_WHITE,STRCNRM,0 +;; .byte "JON HEY",0,1 +;; MESS_MAC RD7FONT,SPACING20,200,147,ROBO_WHITE,STRCNRM,0 +;; .byte "TONY GOSKIE",0,0 +;; .even +;DJT End + +************************************************************************** +* * +* STRINGS FOR UTILITY HELP MENUS * +* * +************************************************************************** +MEH_CLCRED1 .byte "REMOVE ANY",0 + .EVEN +MEH_CLCRED2 .byte "POSTED CREDITS",0 + .EVEN +MEH_CLCRED3 .byte "FROM THE GAME",0 + .EVEN + +MEH_CLCOIN1 .byte "CLEAR COIN SLOT",0 + .EVEN +MEH_CLCOIN2 .byte "COUNTERS AND COINBOX",0 + .EVEN +MEH_CLCOIN3 .byte "TOTAL COLLECTIONS",0 + .EVEN + +MEH_CLAUD1 .byte "CLEAR GAMEPLAY",0 + .EVEN +MEH_CLAUD2 .byte "STATISTICS",0 + .EVEN + +MEH_CLPLRECS1 .string "CLEAR PLAYER CMOS",0 + .even +MEH_CLPLRECS2 .string "RECORDS, INCLUDING",0 + .even +MEH_CLPLRECS3 .string "ALL CREATED PLAYERS",0 + .even +MEH_CLPLRECS4 .string "AND WORLD RECORDS",0 + .even + +;DJT Start +;;MEH_RESHS1 .byte "RESET HIGH SCORE",0 +;; .EVEN +;;MEH_RESHS2 .byte "TABLE TO FACTORY",0 +;; .EVEN +;;MEH_RESHS3 .byte "DEFAULT VALUES",0 +;; .EVEN +;DJT End + +MEH_DEFA1 .byte "RESET ALL GAME",0 + .EVEN +MEH_DEFA2 .byte "ADJUSTMENTS TO THEIR",0 + .EVEN +MEH_DEFA3 .byte "FACTORY DEFAULTS AND",0 + .EVEN +MEH_DEFA4 .byte "CLEAR PLAYER CMOS",0 + .EVEN +MEH_DEFA5 .byte "RECORDS, INCLUDING",0 + .EVEN +MEH_DEFA6 .byte "ALL CREATED PLAYERS",0 + .EVEN +MEH_DEFA7 .byte "AND WORLD RECORDS",0 + .EVEN + + +MEH_FAC1 .STRING "RESET ALL COUNTERS,",0 + .EVEN +MEH_FAC2 .STRING "AUDITS, PLAYER CMOS",0 + .EVEN +MEH_FAC3 .STRING "RECORDS AND CREATED",0 + .EVEN +MEH_FAC4 .STRING "PLAYERS, WORLD RECORDS,",0 + .EVEN +MEH_FAC5 .STRING "TEAM STATISTICS, AND",0 + .EVEN +MEH_FAC6 .STRING "GAME ADJUSTMENTS",0 + .EVEN + + +************************************************************************** +* * +* MAIN MENU NAMES * +* * +************************************************************************** +MESSMAIN + .byte "TEST MENU",0 + .even + +MESSUTIL + .byte "UTILITY MENU",0 + .even + + + +CSELCT +************************************************************************** +* * +* USA 1: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 2 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_1 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 2: 1 COIN = 1 CREDIT * +* * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + .WORD 1,0,1,0,4,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG OCOP ;ONE COIN ONE PLAY + .LONG USA_2 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + + +************************************************************************** +* * +* USA 3 COINAGE IS 25 CENT * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,1,0,0,1,1 ;WILLY PRICING +;; .WORD 1,4,1,0,1,0,0,1,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;ONE COIN ONE PLAY + .LONG USA_3 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_NONE ;NO PRICING LINE ON 2/1 + .LONG USA_QDQ ;QUARTER + +************************************************************************** +* * +* USA 4 COINAGE IS 50 CENT 3/$1.00 * +* 1 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ; 4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ; DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ; COIN VALUE +;; .WORD 1,4,1,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST ; PRINT THE 2 THE OP SEES + .LONG USA_4 ; TITLE OF COIN MODE + .LONG DOLLAR_3 ; 1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ; SHOW LINE 2 + .LONG USA_QDQ ; QUARTER + + +************************************************************************** +* * +* ADDITION "FULL PRICE" COINAGES * +* * +************************************************************************** + + .IF FULLPRICE + +************************************************************************** +* * +* USA 5 COINAGE IS 50 CENT 4/$1.00 * +* 2 TO START / 1 TO CONTINUE * +* * +************************************************************************** + + .WORD 3,0,3,0,12,4,12,6,2,1 ;WILLY PRICING +;; .WORD 3,12,3,0,4,12,6,2,1 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE +;; .WORD 1,4,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_5 ;TITLE OF COIN MODE + .LONG DOLLAR_4 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 6 50 PER CREDIT +* + .WORD 1,0,1,0,4,2,0,0,1,1 ; WILLY PRICING +;; .WORD 1,4,1,0,2,0,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;2 COINS PER PLAYER + .LONG USA_6 ;TITLE OF COIN MODE + .LONG F_F_1S1C ;2 COINS PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 ;SHOW LINE 1 + .LONG USA_QDQ ;QUARTER +* +* USA 7 COINAGE IS 50 CENT 3/$1.00 +* +;; .WORD 1,4,1,0,2,4,0,1,1 ;WILLY PRICING + .WORD 1,0,1,0,4,2,4,0,1,1 ; WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;DISPLAY COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_7 ;TITLE OF COIN MODE + .LONG UFS3D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* +* USA 8 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE +;;;; .WORD 3,12,3,0,4,12,6,2,2 ;WILLY PRICING + .WORD 3,0,3,0,12,4,12,6,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_8 ;TITLE OF COIN MODE + .LONG UFS4D ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 9 COINAGE IS 50 CENT 4/$1.00 +* +* L, C,R, 4,DBV,U/C,U/B,MINUNITS /START /CONTINUE + .WORD 1,0,1,0,4,1,0,1,3,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_9 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + +* USA 10 COINAGE IS 50 CENT 4/$1.00 +* + .WORD 1,0,1,0,4,1,0,1,3,3 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 0 ;NO COIN FRACTIONS + .WORD 1,0,1,0,4 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG USA_10 ;TITLE OF COIN MODE + .LONG Q_Q ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;SHOW LINE 2 + .LONG USA_QDQ ;QUARTER + + .ENDIF +* +* USA ELECTRONIC +* + .WORD 20,2,5,1,20,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 20,2,5,1,5,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 20 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 20,2,5,1,20 ; L,C,R,4 +;; .WORD 20,2,5,1 ; L,C,R,4 + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG USA_ELECTRONIC ; SPECIAL MESSAGE + .LONG USA_ELECTITLE ; TITLE OF COIN MODE + .LONG USA_EL ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG USA_ESLOT ; QUARTER + +* +* GERMAN 1 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 2 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_1 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +G1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR GERMAN 1 +* +* GERMAN 2 COINAGE IS 7 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,30,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,30,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_2 ;TITLE OF COIN MODE + .LONG DM_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 3 COINAGE IS 8 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 7,0,35,0,0,5,35,0,2,1 ;WILLY PRICING +;; .WORD 7,14,35,0,5,35,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_3 ;TITLE OF COIN MODE + .LONG DM_8 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM +* +* GERMAN 4 COINAGE IS 5 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 1,0,5,0,0,1,0,0,2,1 ;WILLY PRICING +;; .WORD 1,2,5,0,1,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_4 ;TITLE OF COIN MODE + .LONG DM_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN 5 COINAGE IS 6 PLAYS FOR 5 DM +* 2 TO START, 1 TO CONTINUE +* + .WORD 6,0,30,0,0,5,0,0,2,1 ;WILLY PRICING +;; .WORD 6,12,30,0,5,0,0,2,1 ;WILLY PRICING + .WORD 1 ;DMS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,2,5,0 ;COIN VALUE + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG GERMAN_5 ;TITLE OF COIN MODE + .LONG DM_6 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG GERMAN_15 ;1 DM / 5 DM + +* +* GERMAN ELECTRONIC +* 2 TO START, 2 TO CONTINUE +* + .WORD 60,12,24,0,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 60,12,24,0,10,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ; DISPLAY FRACTIONS + .WORD 5,1,2,0,0 ; L,C,R,4 +;; .WORD 5,1,2,0 ; L,C,R,4 + .LONG NULL_ST,DM_TRAIL ;CHARACTER STRINGS. + .LONG GERMAN_ELECTRONIC ; SPECIAL MESSAGE + .LONG GERMAN_ELECTITLE ; TITLE OF COIN MODE + .LONG DM112265 ; SETTINGS DESCRIPTION + .WORD SHOW_3 ; LINES TO SHOW ON + .LONG GERMAN_ESLOT ; QUARTER + +**************************************************************************** +**************************************************************************** +******* THE FOLLOWING NUMBERS ARE FIGURED FOR THE FRENCH SETTINGS +******* REQUESTED BY DIMITRI K. OF P.S.D. +******* +******* 1F 5F 10F U/C U/B M/U +******* -------------------------------- +******* 1/2F 3/5F 7/10F 3 15 30 5 30 0 +******* 1/3F 2/5F 5/10F 2 10 20 5 20 0 +******* 1/5F 3/10F 1 5 10 5 10 0 +******* 1/5F 3/10F 7/20F 3 15 30 10 60 15 +******* 2/5F 4/10F 9/20F 2 10 20 5 40 10 +******* 2/5F 5/10F 11/20F 1 5 10 2 20 5 +******* +* +* +* FRENCH 1 2/5F 5/10F +* +* + .WORD 2,0,4,0,0,1,4,0,2,2 ; 2/5F 5/10F +;; .WORD 2,0,4,0,1,4,0,2,2 ; 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_1 ;TITLE OF COIN MODE + .LONG FIVE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 + +F1SEL EQU ($-CSELCT)/CS_SIZE ;COIN SELECT VALUE FOR FRENCH 1 + +* +* FRENCH 2 2/5F 4/10F +* +* + .WORD 2,0,4,0,0,1,0,0,2,1 ; 2/5F 4/10F +;; .WORD 2,0,4,0,1,0,0,2,1 ; 2/5F 4/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_2 ;TITLE OF COIN MODE + .LONG FOUR_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 3 1/5F 3/10F +* +* + .WORD 1,0,2,0,0,1,2,0,2,1 ;1/5F 3/10F +;; .WORD 1,0,2,0,1,2,0,2,1 ;1/5F 3/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_3 ;TITLE OF COIN MODE + .LONG THREE_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 + .LONG FRENCH510 +* +* FRENCH 4 1/5F 2/10F +* +* + .WORD 1,0,2,0,0,1,0,0,2,1 ;1/5F 2/10F +;; .WORD 1,0,2,0,1,0,0,2,1 ;1/5F 2/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_4 ;TITLE OF COIN MODE + .LONG TWO_10 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_1 + .LONG FRENCH510 + + .IF FULLPRICE + +* +* +* FRENCH 5 2/5F 5/10F 11/2 X 10F +* +* + .WORD 5,0,10,0,0,2,20,0,2,1 ;2/5F 5/10F 11/20F +;; .WORD 5,0,10,0,2,20,0,2,1 ;2/5F 5/10F 11/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_5 ;TITLE OF COIN MODE + .LONG FIVE_10_11 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 6 2/5F 4/10F 9/2 X 10F +* +* + .WORD 2,0,4,0,0,1,8,0,2,1 ;2/5F 4/10F 9/20F +;; .WORD 2,0,4,0,1,8,0,2,1 ;2/5F 4/10F 9/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_6 ;TITLE OF COIN MODE + .LONG FOUR_10_9 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 7 1/5F 3/10F 7/2 X 10F +* +* + .WORD 3,0,6,0,0,2,12,0,2,1 ;1/5F 3/10F 7/20F +;; .WORD 3,0,6,0,2,12,0,2,1 ;1/5F 3/10F 7/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_7 ;TITLE OF COIN MODE + .LONG THREE_10_7 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 +* +* FRENCH 8 1/5F 2/10F 5/2 X 10F +* +* + .WORD 1,0,2,0,0,1,4,0,2,1 ;1/5F 2/10F 5/20F +;; .WORD 1,0,2,0,1,4,0,2,1 ;1/5F 2/10F 5/20F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 5,0,10,0,0 ;COIN VALUE +;; .WORD 5,0,10,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_8 ;TITLE OF COIN MODE + .LONG TWO_10_5 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 3 WHEN ONLY 1 WILL FIT + .LONG FRENCH510 + +* +* FRENCH 9 1/3 X 1F 2/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,0,0,2,1 ;1/3X1F 2/5F +;; .WORD 2,0,10,0,5,0,0,2,1 ;1/3x1F 2/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_9 ;TITLE OF COIN MODE + .LONG F1325 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 10 1/2 X 1F 3/5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,0,0,2,1 ;1/2X1F 3/5F +;; .WORD 3,0,15,0,5,0,0,2,1 ;1/2x1F 3/5F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_10 ;TITLE OF COIN MODE + .LONG F1235 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_2 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F +* +* FRENCH 11 1/3 X 1F 2/5F 5/2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 2,0,10,0,0,5,20,0,2,1 ;1/3X1F 2/5F 5/10F +;; .WORD 2,0,10,0,5,20,0,2,1 ;1/3x1F 2/5F 5/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS +;; .WORD 1,0,5,0 ;COIN VALUE + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_11 ;TITLE OF COIN MODE + .LONG F13255 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + +* +* FRENCH 12 1/2 X 1F 3/5F 7 / 2 X 5F +* +* COIN SLOTS ARE 1F -- 5F +* +* + .WORD 3,0,15,0,0,5,30,0,2,1 ;1/2X1F 3/5F 7/10F +;; .WORD 3,0,15,0,5,30,0,2,1 ;1/2x1F 3/5F 7/10F + .WORD 1 ;1 FRANC PER FRANC + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST ;WAIT TILL HE SAYS "IF IT IS NOT POSSIBLE" + .LONG FRENCH_12 ;TITLE OF COIN MODE + .LONG F12355 ;1 COIN PER CREDIT (SERIES OF STRINGS) + .WORD SHOW_3 ;USE LINE 2 WHEN ONLY 1 WILL FIT + .LONG FRENCH1F5F + + .ENDIF + +* +* FRANCE ELECTRONIC 1/3 X 1F 2/5F 5/2 X 5F +* + .WORD 1,15,6,30,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS +;; .WORD 1,15,6,0,3,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 0 ;DON'T DISPLAY COIN FRACTIONS + .WORD 1,10,5,20,0 ; L,C,R,4 +;; .WORD 1,10,5,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ; CHARACTER STRINGS. + .LONG FRANCE_ELECTRONIC ; SPECIAL MESSAGE + .LONG FRENCH_ELECTITLE ; TITLE OF COIN MODE + .LONG F13255 ;COIN PAGE DESCRIPTION + .WORD SHOW_3 ;THREE LINES FOR THIS BABY + .LONG FRANCE_ESLOT ; QUARTER + +* +* CANADA COINAGE IS 50 CENT 3/$1.00 +* + .WORD 1,0,4,0,4,2,4,0,2,2 ;WILLY PRICING +;; .WORD 1,0,4,0,2,4,0,2,2 ;WILLY PRICING + .WORD 4 ;4 COINS PER DOLLAR (FOR CALC) + .WORD 1 ;DISPLAY COIN FRACTIONS + .WORD 1,0,4,0,4 ;COIN VALUE +;; .WORD 1,0,4,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST ;PRINT THE 2 THE OP SEES + .LONG CANADA ;TITLE OF COIN MODE + .LONG CAN_1503D ;1 PLAY 50, 3 FOR A DOLLAR + .WORD SHOW_2 ;SHOW LINE 2 + .LONG CAN_QD ;QUARTER + + .IF FULLPRICE + +* SWISS 1 COINAGE IS 6 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,0,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_1 ;TITLE OF COIN MODE + .LONG SFRANC_6 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 2 COINAGE IS 7 PLAYS FOR 5 FRANC + + .WORD 6,0,30,0,0,5,30,0,2,2 ;WILLY PRICING +;; .WORD 6,0,30,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_2 ;TITLE OF COIN MODE + .LONG SFRANC_7 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* SWISS 3 COINAGE IS 8 PLAYS FOR 5 FRANC + + .WORD 7,0,35,0,0,5,35,0,2,2 ;WILLY PRICING +;; .WORD 7,0,35,0,5,35,0,2,2 ;WILLY PRICING + .WORD 1 ;FRANCS HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE +;; .WORD 1,0,5,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWISS_3 ;TITLE OF COIN MODE + .LONG SFRANC_8 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_2 + .LONG SWISS15 + +* ITALY COINAGE IS 1 PLAYS FOR 500 LIRE + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING +;; .WORD 1,0,1,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;LIRE HAVE NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO +;; .WORD 500,0,500,0 ;COIN VALUE + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,LIRE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ITALY_1 ;TITLE OF COIN MODE + .LONG P1500L ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG ITALYLIRE + + +* U.K. 1 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 6, 0, 15, 0, 0, 5, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH1 ;CREDIT SCREEN INFO + .LONG UK_1 ;COIN MODE TITLE + .LONG UK_CL1 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. 2 +* +* LFT = 20P RGT = 50P 3RD = --- 4TH = --- +* 2 PLAY / 20 P +* 5 PLAY / 50 P +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 2, 0, 5, 0, 0, 1, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 2, 0, 5, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_MECH2 ;CREDIT SCREEN INFO + .LONG UK_2 ;COIN MODE TITLE + .LONG UK_CL2 ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK2050 ;COIN SLOT DESCRIPTION + + +* U.K. ECA 1 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA1 ;CREDIT SCREEN INFO + .LONG UK_1E ;COIN MODE TITLE + .LONG UK_CL1E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 2 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 20 P +* 3 PLAY / 50 P +* 7 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 28, 4, 12, 2, 0, 4, 0, 0, 2, 2 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA2 ;CREDIT SCREEN INFO + .LONG UK_2E ;COIN MODE TITLE + .LONG UK_CL2E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 3 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 12, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA3 ;CREDIT SCREEN INFO + .LONG UK_3E ;COIN MODE TITLE + .LONG UK_CL3E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 4 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 5 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 6, 1, 0, 3, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA4 ;CREDIT SCREEN INFO + .LONG UK_4E ;COIN MODE TITLE + .LONG UK_CL4E ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 5 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 2 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 10, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA5 ;CREDIT SCREEN INFO + .LONG UK_5E ;COIN MODE TITLE + .LONG UK_CL5E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 6 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 1 PLAY / 50 P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 15, 2, 5, 1, 0, 5, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA6 ;CREDIT SCREEN INFO + .LONG UK_6E ;COIN MODE TITLE + .LONG UK_CL6E ;COIN LIST + .WORD SHOW_2 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ECA 7 +* +* LFT = PND RGT = 50P 3RD = 20P 4TH = 10P +* 3 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 30, 6, 15, 3, 0, 10, 0, 30, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 10, 2, 5, 1, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECA7 ;CREDIT SCREEN INFO + .LONG UK_7E ;COIN MODE TITLE + .LONG UK_CL7E ;COIN LIST + .WORD SHOW_1 ;SHOW 2ND LINE + .LONG UK_ELEC ;COIN SLOT DESCRIPTION + + +* U.K. ELECT/CCU +* +* LFT = PND RGT = CCU 3RD = --- 4TH = --- +* 1 PLAY / 30 P +* 2 PLAY / 50 P +* 4 PLAY / PND +* +* LFT,CTR,RGT,XTR,DBV,U/C,U/B,U/M,STR,CNT + + .WORD 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 ;FOR CREDIT CALC + .WORD 10 ;COINS PER ... + .WORD 0 ;NO COIN FRAC DISPLAY + .WORD 1, 0, 0, 0, 0 ;COIN VALUES + .LONG NULL_ST,POUND_TRAIL ;LMES & RMES + .LONG UK_ECAC ;CREDIT SCREEN INFO + .LONG UK_CE ;COIN MODE TITLE + .LONG UK_CLCE ;COIN LIST + .WORD SHOW_3 ;SHOW 2ND LINE + .LONG UK_CCU ;COIN SLOT DESCRIPTION + + +* DONE BECAUSE WE LEARNED SOME NEW SPANISH SHIT! + +* SPAIN 1 1 PLAY / 100 PESETA 6 PLAY / 500 PESETA + + .WORD 1,0,5,0,0,1,5,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_1 ;TITLE OF COIN MODE + .LONG SP_5100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* SPAIN 2 1 PLAY / 25 PESETA 5 PLAY / 100 PESETA + + .WORD 1,0,5,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;NO FRACTIONS + .WORD 0 ;DON'T DISPLAY COIN FRACTIO + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,PESETA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SP_2 ;TITLE OF COIN MODE + .LONG SP_4100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG PESETA100 + + +* AUSTRALIA 1 1 PLAY / 3 X 20 CENTS 2 FOR $1.00 + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 5 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS FOR T + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_1 ;TITLE OF COIN MODE + .LONG AU_60 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_2 + .LONG AUST20C +* +* AUSTRALIA 2 1 PLAY / $1.00 2 PLAYS FOR $2.00 +* + .WORD 1,0,5,0,0,5,0,0,1,1 ; WILLY PRICING + .WORD 5 ; DOLLARS + .WORD 1 ; SHOW FRACTIONS FOR THE 3 C + .WORD 1,0,5,0,0 ; COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ; CHARACTER STRINGS. + .LONG CSM_LIST + .LONG AUS_2 ; TITLE OF COIN MODE + .LONG AU_100 ; 1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG AUST20C + + .ENDIF + +* JAPAN 1 1 PLAY / 100 YEN + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_1 ;TITLE OF COIN MODE + .LONG JAP_100 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + + .IF FULLPRICE +* JAPAN 2 2 PLAY / 100 YEN + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,YEN_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG JAP_2 ;TITLE OF COIN MODE + .LONG JAP_200 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG YEN100 + +* AUSTRIA 1 1 PLAY / 5 SCHILLING 2 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_1 ;TITLE OF COIN MODE + .LONG ASTA_15 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG SHILL510 + +* AUSTRIA 2 1 PLAY / 2 X 5 SCHILLING 3 PLAY / 10 SCHILLING + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 5,0,10,0,0 ;COIN VALUE + .LONG NULL_ST,SHILL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ASTA_2 ;TITLE OF COIN MODE + .LONG ASTA_10 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG SHILL510 + +* BELGIUM 1 1 PLAY / 20F + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_1 ;TITLE OF COIN MODE + .LONG BEL_120 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 2 3 PLAY / 20F + + .WORD 3,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_2 ;TITLE OF COIN MODE + .LONG BEL_320 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* BELGIUM 3 2 PLAY / 20F + + .WORD 2,0,2,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 1 ;FRACTIONS OK + .WORD 4,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG BEL_3 ;TITLE OF COIN MODE + .LONG BEL_220 ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG FRANC20 + +* +* BELGIUM ELECTRONIC +* + .WORD 10,1,4,0,0,4,0,0,2,2 ; L,C,R,4,U/C,U/B,MINUNITS + .WORD 1 ; COINS/DOLLAR + .WORD 1 ; DISPLAY FRACTIONS + .WORD 10,1,4,0,0 ; L,C,R,4 + .LONG NULL_ST,FRANC_TRAIL ;CHARACTER STRINGS. + .LONG BELGIUM_ELECTRONIC ; SPECIAL MESSAGE + .LONG BELGIUM_ELECTITLE ; TITLE OF COIN MODE + .LONG BEL_ELEC ; SETTINGS DESCRIPTION + .WORD SHOW_2 ; LINES TO SHOW ON + .LONG BELGIUM_ESLOT ; QUARTER + +* SWEDEN 1 PLAY / 3 X 1 KRONA 2 PLAY 5 KRONA + + .WORD 2,0,10,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;DOLLARS + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG SWED_1 ;TITLE OF COIN MODE + .LONG SWED_2X5 ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG KRONA5 + +* NEW ZEALAND 1 1 PLAY / 3 X 20 CENT + + .WORD 1,0,1,0,0,3,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_1 ;TITLE OF COIN MODE + .LONG NZ_13 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + + +* NEW ZEALAND 2 1 PLAY / 2 X 20 CENT + + .WORD 1,0,1,0,0,2,0,0,1,1 ;WILLY PRICING + .WORD 5 ;FIVE PER + .WORD 1 ;SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG DOLLAR_LEAD,NULL_ST ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NZ_2 ;TITLE OF COIN MODE + .LONG NZ_12 ;1 COIN PER CREDIT (SERIES OF S + .WORD SHOW_1 + .LONG NZ20 + +* NETHERLANDS 1 PLAY / 1 HFL. 3 PLAY / 2.5 HFL. + + .WORD 1,0,3,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 2,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,HFL_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NETH ;TITLE OF COIN MODE + .LONG NETH_HF ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_2 + .LONG HFSLOT + + +* FINLAND 1 PLAY / 1 MARKKA + + .WORD 1,0,1,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,MARKKA_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG FINLAND ;TITLE OF COIN MODE + .LONG FINMKA ;1 COIN PER CREDIT (SERIES OF ST + .WORD SHOW_1 + .LONG MKSLOT + +* NORWAY 1 PLAY / 2 X 1 KRONE 3/ 5 X 1 KRONE + + .WORD 3,0,3,0,0,5,0,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,1,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG NORWAY ;TITLE OF COIN MODE + .LONG KR_LIST ;1 COIN PER CREDIT (SERIES OF STRI + .WORD SHOW_2 + .LONG NKRSLOT + +* DENMARK 1 PLAY / 2 X 1 KRONE 3/ 5 KRONE 7 / 10 KRONE + + .WORD 3,0,15,0,0,5,30,0,2,2 ;WILLY PRICING + .WORD 1 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,5,0,0 ;COIN VALUE + .LONG NULL_ST,KRONE_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG DENMARK ;TITLE OF COIN MODE + .LONG DKR_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_3 + .LONG DKRSLOT + + +* ANTILLES 1 PLAY / 25 CENTS 4 PLAYS / 1 GUILDER + + .WORD 1,0,4,0,0,1,0,0,2,2 ;WILLY PRICING + .WORD 4 ;FIVE PER + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,4,0,0 ;COIN VALUE + .LONG NULL_ST,GUILDER_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG ANTILLES ;TITLE OF COIN MODE + .LONG ANT_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG ANTSLOT + +* HUNGARY 1 CREDIT / 2X10 FORINT 3 CREDITS / 2X20 FORINT + + .WORD 1,0,2,0,0,2,4,0,2,2 ;WILLY PRICING + .WORD 1 ;1 TO 1 + .WORD 0 ;DON'T SHOW FRACTIONS + .WORD 1,0,2,0,0 ;COIN VALUE + .LONG NULL_ST,FORINT_TRAIL ;CHARACTER STRINGS. + .LONG CSM_LIST + .LONG HUNGARY ;TITLE OF COIN MODE + .LONG HUNG_LIST ;1 COIN PER CREDIT (SERIES + .WORD SHOW_1 + .LONG HUNGSLOT + + .ENDIF + +CS_ENTS EQU ($-CSELCT)/CS_SIZE ;NUMBER OF ENTRIES IN TABLE + + +; +; DIP SWITCH TABLES +; + +USABASE EQU 1 +GERBASE EQU G1SEL +FRABASE EQU F1SEL + + .IF FULLPRICE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+8 + .WORD USABASE+8, USABASE+8 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+12 + .WORD FRABASE+12, FRABASE+12 + + .ELSE + +USADIP .WORD USABASE+0, USABASE+1, USABASE+2, USABASE+3, USABASE+4 + .WORD USABASE+4, USABASE+4 + +GERDIP .WORD GERBASE+0, GERBASE+1, GERBASE+2, GERBASE+3, GERBASE+4 + .WORD GERBASE+4, GERBASE+4 + +FRADIP .WORD FRABASE+0, FRABASE+1, FRABASE+2, FRABASE+3, FRABASE+4 + .WORD FRABASE+4, FRABASE+4 + + .ENDIF + + +DIPCOINTAB .LONG USADIP, GERDIP, FRADIP, USADIP + + +************************************************************************** +* * +* COLLECTION MESSAGES * +* * +************************************************************************** +ME_ZERO .STRING "0" + .BYTE 0 + .EVEN + +ME_DASH .string "-",0 + .even + +ME_DECIMAL .STRING "." + .BYTE 0 + .EVEN + +ME_COLON .STRING ":" + .BYTE 0 + .EVEN + +DOLLAR_LEAD .STRING "$ " + .BYTE 0 + .EVEN + +POUND_LEAD + .STRING FONT_EPOUND," ",0 + .EVEN +POUND_TRAIL + .STRING " PND",0 + .EVEN + +NULL_ST + .BYTE 0 + .EVEN + +DM_TRAIL .STRING " DM" + .BYTE 0 + .EVEN + +FRANC_TRAIL .STRING " FRANC" + .BYTE 0 + .EVEN + + .IF FULLPRICE +LIRE_TRAIL .STRING " LIRE" + .BYTE 0 + .EVEN + +PESETA_TRAIL .STRING " PESETA" + .BYTE 0 + .EVEN + .ENDIF + +YEN_TRAIL + .STRING " YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL_TRAIL + .STRING " SCHILLINGS" + .BYTE 0 + .EVEN + +KRONA_TRAIL + .STRING " KRONA" + .BYTE 0 + .EVEN + .ENDIF + +COINS_TRAIL + .STRING " COINS" + .BYTE 0 + .EVEN + + .IF FULLPRICE +HFL_TRAIL + .STRING " HFI." + .BYTE 0 + .EVEN + +MARKKA_TRAIL + .STRING " MARKKA" + .BYTE 0 + .EVEN + +KRONE_TRAIL + .STRING " KRONE" + .BYTE 0 + .EVEN + +GUILDER_TRAIL + .STRING " GUILDER" + .BYTE 0 + .EVEN + +FORINT_TRAIL + .STRING " FT",0 + .ENDIF + +* +* FOR THE COINAGE ADJUSTMENT MODE: +* +* +* THIS SET IS TITLES FOR THE CANNED MODES. +* +USA_1 .STRING "USA 1",0 + .EVEN +USA_2 .STRING "USA 2",0 + .EVEN +USA_3 .STRING "USA 3",0 + .EVEN +USA_4 .STRING "USA 4",0 + .EVEN + + .IF FULLPRICE +USA_5 .STRING "USA 5",0 + .EVEN +USA_6 .STRING "USA 6",0 + .EVEN +USA_7 .STRING "USA 7",0 + .EVEN +USA_8 .STRING "USA 8",0 + .EVEN +USA_9 .STRING "USA 9",0 + .EVEN +USA_10 .STRING "USA 10",0 + .EVEN + .ENDIF + +USA_ELECTITLE + .STRING "USA ECA",0 + .EVEN + +FRENCH_ELECTITLE + .STRING "FRANCE ECA",0 + .EVEN + +GERMAN_ELECTITLE + .STRING "GERMAN ECA",0 + .EVEN + +BEL_ELECTITLE + .STRING "BELGUIM ECA",0 + .EVEN + +GERMAN_1 .STRING "GERMAN 1",0 + .EVEN +GERMAN_2 .STRING "GERMAN 2",0 + .EVEN +GERMAN_3 .STRING "GERMAN 3",0 + .EVEN +GERMAN_4 .STRING "GERMAN 4",0 + .EVEN +GERMAN_5 .STRING "GERMAN 5",0 + .EVEN + +FRENCH_1 .STRING "FRANCE 1",0 + .EVEN +FRENCH_2 .STRING "FRANCE 2",0 + .EVEN +FRENCH_3 .STRING "FRANCE 3",0 + .EVEN +FRENCH_4 .STRING "FRANCE 4",0 + .EVEN + + .IF FULLPRICE +FRENCH_5 .STRING "FRANCE 5",0 + .EVEN +FRENCH_6 .STRING "FRANCE 6",0 + .EVEN +FRENCH_7 .STRING "FRANCE 7",0 + .EVEN +FRENCH_8 .STRING "FRANCE 8",0 + .EVEN +FRENCH_9 .STRING "FRANCE 9",0 + .EVEN +FRENCH_10 .STRING "FRANCE 10",0 + .EVEN +FRENCH_11 .STRING "FRANCE 11",0 + .EVEN +FRENCH_12 .STRING "FRANCE 12",0 + .EVEN + +CANADA + .STRING "CANADA",0 + .EVEN + +SWISS_1 .STRING "SWISS 1" + .BYTE 0 + .EVEN +SWISS_2 .STRING "SWISS 2" + .BYTE 0 + .EVEN +SWISS_3 .STRING "SWISS 3" + .BYTE 0 + .EVEN +ITALY_1 .STRING "ITALY" + .BYTE 0 + .EVEN + +UK_1 .STRING "U.K. 1" + .BYTE 0 + .EVEN +UK_2 .STRING "U.K. 2" + .BYTE 0 + .EVEN +UK_1E .STRING "U.K. ECA 1" + .BYTE 0 + .EVEN +UK_2E .STRING "U.K. ECA 2" + .BYTE 0 + .EVEN +UK_3E .STRING "U.K. ECA 3" + .BYTE 0 + .EVEN +UK_4E .STRING "U.K. ECA 4" + .BYTE 0 + .EVEN +UK_5E .STRING "U.K. ECA 5" + .BYTE 0 + .EVEN +UK_6E .STRING "U.K. ECA 6" + .BYTE 0 + .EVEN +UK_7E .STRING "U.K. ECA 7" + .BYTE 0 + .EVEN +UK_CE .STRING "U.K. ELECT/CCU" + .BYTE 0 + .EVEN + +SP_1 .STRING "SPAIN 1" + .BYTE 0 + .EVEN +SP_2 .STRING "SPAIN 2" + .BYTE 0 + .EVEN +AUS_1 .STRING "AUSTRALIA 1" + .BYTE 0 + .EVEN +AUS_2 .STRING "AUSTRALIA 2" + .BYTE 0 + .EVEN + .ENDIF + +JAP_1 .STRING "JAPAN 1" + .BYTE 0 + .EVEN + + .IF FULLPRICE +JAP_2 .STRING "JAPAN 2" + .BYTE 0 + .EVEN +ASTA_1 .STRING "AUSTRIA 1" + .BYTE 0 + .EVEN +ASTA_2 .STRING "AUSTRIA 2" + .BYTE 0 + .EVEN +BEL_1 .STRING "BELGIUM 1" + .BYTE 0 + .EVEN +BEL_2 .STRING "BELGIUM 2" + .BYTE 0 + .EVEN +BEL_3 .STRING "BELGIUM 3" + .BYTE 0 + .EVEN +BELGIUM_ELECTITLE + .STRING "BELGIUM ECA",0 + .EVEN +SWED_1 .STRING "SWEDEN" + .BYTE 0 + .EVEN +NZ_1 .STRING "NEW ZEALAND 1" + .BYTE 0 + .EVEN +NZ_2 .STRING "NEW ZEALAND 2" + .BYTE 0 + .EVEN +NETH .STRING "NETHERLANDS" + .BYTE 0 + .EVEN + +FINLAND .STRING "FINLAND" + .BYTE 0 + .EVEN + +NORWAY .STRING "NORWAY" + .BYTE 0 + .EVEN + +DENMARK .STRING "DENMARK" + .BYTE 0 + .EVEN + +ANTILLES .STRING "ANTILLES" + .BYTE 0 + .EVEN + +HUNGARY + .STRING "HUNGARY",0 + .EVEN + + .ENDIF +* +* THIS SECTION IS A POINTER TO STRING LISTS +* FOR THE "CURRENT SETTING" BOX. +* +USA_EL + .LONG EC1 + .LONG DOLL4 + .LONG 0 +* +* 1 COIN / 1 CREDIT +Q_Q + .LONG C11 ;THIS POINTS AT MESSAGE + .LONG 0 ;THIS ENDS LIST +* +* 2 COINS / 1 CREDIT +* +F_F_1S1C + .LONG C21 + .LONG 0 + +************************************************************************* + + +* +* 2 COINS / 1 CREDIT +* 4 COINS / 3 CREDITS +* +DOLLAR_3 .LONG C21 + .LONG C43 + .LONG 0 +* +* 2 COINS / 1 CREDIT +* 4 COINS / 4 CREDITS +* +DOLLAR_4 .LONG C21 + .LONG C44 + .LONG 0 + + +******************************************************************** + + + .IF FULLPRICE + +U1Q4D .LONG C11 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + +;UFS2D .LONG C21 ; THIS POINTS AT MESSAGE +; .LONG DOLL2 ; 2 FOR A DOLLAR +; .LONG 0 + +UFS3D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +UFS4D .LONG C21 ;THIS POINTS AT MESSAGE + .LONG DOLL4 ;4 FOR A DOLLAR + .LONG 0 + + .ENDIF + +* +* 1 PLAY 1/DM +* 5 PLAY 5/DM +* +DM_5 .LONG DM11 + .LONG DM55 + .LONG 0 + +DM_6 .LONG DM11 + .LONG DM65 + .LONG 0 + +DM_7 .LONG DM11 + .LONG DM75 + .LONG 0 + +DM_8 .LONG DM11 + .LONG DM85 + .LONG 0 + +DM112265 + .LONG DM11 + .LONG DM22 + .LONG DM65 + .LONG 0 + +SFRANC_6 .LONG SFRANC11 + .LONG SFRANC65 + .LONG 0 + +CAN_1503D + .LONG C15 ;THIS POINTS AT MESSAGE + .LONG DOLL3 ;3 FOR A DOLLAR + .LONG 0 + +SFRANC_7 .LONG SFRANC11 + .LONG SFRANC75 + .LONG 0 + +SFRANC_8 .LONG SFRANC11 + .LONG SFRANC85 + .LONG 0 +* +* 2 PLAYS 5F / 5 PLAYS 10F +* +FIVE_10 .LONG F25 + .LONG F510 + .LONG 0 + +FIVE_10_11 + .LONG F25 + .LONG F510 + .LONG F1120 + .LONG 0 + +FOUR_10 .LONG F25 + .LONG F410 + .LONG 0 + +FOUR_10_9 + .LONG F25 + .LONG F410 + .LONG F4109 + .LONG 0 + +THREE_10 .LONG F15 + .LONG F310 + .LONG 0 + +THREE_10_7 + .LONG F15 + .LONG F310 + .LONG F4107 + .LONG 0 + +TWO_10 .LONG F15 + .LONG F210 + .LONG 0 + +TWO_10_5 .LONG F15 + .LONG F210 + .LONG F4105 + .LONG 0 + +F1325 .LONG F3X1F + .LONG F2F5 + .LONG 0 + +F13255 .LONG F3X1F + .LONG F2F5 + .LONG F52X5 +; .LONG F5X10F + .LONG 0 + +F1235 .LONG F2X1F + .LONG F3F5 + .LONG 0 + +F12355 .LONG F2X1F + .LONG F3F5 + .LONG F72X5 + .LONG 0 + + .IF FULLPRICE + +* 500 LIRE + +P1500L .LONG P1500L_P + .LONG 0 + +* 1 PLAY / 20 P 3 PLAYS 50 P + +UK_CL1 .LONG UK_120 + .LONG UK_350 + .LONG 0 + +UK_CL2 .LONG UK_220 + .LONG UK_550 + .LONG 0 + +UK_CL1E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL2E .LONG UK_120 + .LONG UK_350 + .LONG UK_7P + .LONG 0 + +UK_CL3E .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +UK_CL4E .LONG UK_130 + .LONG UK_250 + .LONG UK_5P + .LONG 0 + +UK_CL5E .LONG UK_150 + .LONG UK_2P + .LONG 0 + +UK_CL6E .LONG UK_150 + .LONG UK_3P + .LONG 0 + +UK_CL7E .LONG UK_3P + .LONG 0 + +UK_CLCE .LONG UK_130 + .LONG UK_250 + .LONG UK_4P + .LONG 0 + +SP_4100 .LONG SP_11 + .LONG SP_44 + .LONG 0 + +SP_5100 .LONG SP_11 + .LONG SP_54 + .LONG 0 + +AU_60 .LONG AU_36 + .LONG AU_2D + .LONG 0 + +AU_100 .LONG AU_520 + .LONG AU_1D + .LONG 0 + + .ENDIF + +JAP_100 .LONG JAP_101 + .LONG 0 + + .IF FULLPRICE + +JAP_200 .LONG JAP_201 + .LONG 0 + +ASTA_10 .LONG ASTA101 + .LONG ASTA102 + .LONG 0 + +ASTA_15 .LONG ASTA151 + .LONG ASTA152 + .LONG 0 + +BEL_120 .LONG BEL_1201 + .LONG 0 +BEL_220 .LONG BEL_2201 + .LONG 0 +BEL_320 .LONG BEL_3201 + .LONG 0 +BEL_ELEC + .LONG BEL_1201 + .LONG 0 + +SWED_2X5 .LONG SWED_S51 + .LONG SWED_S52 + .LONG 0 + +NZ_12 .LONG NZ_121 + .LONG 0 + +NZ_13 .LONG NZ_131 + .LONG 0 + +NETH_HF .LONG HF_11 + .LONG HF_32 + .LONG 0 + +FINMKA .LONG FIN_1 + .LONG 0 + +KR_LIST .LONG NOR_12 + .LONG NOR_35 + .LONG 0 + +DKR_LIST .LONG DEN_12 + .LONG DEN_35 + .LONG DEN_710 + .LONG 0 + +ANT_LIST .LONG ANT1P25 + .LONG ANT4DOL + .LONG 0 + +HUNG_LIST + .LONG HUNG2X10 + .LONG HUNG2X20 + .LONG 0 + + .ENDIF + +EC1 .STRING "1 CREDIT / 25 CENTS",0 + .EVEN +C11 .STRING "1 CREDIT / 1 COIN" + .BYTE 0 + .EVEN +C21 .STRING "1 CREDIT / 2 COINS" + .BYTE 0 + .EVEN +C43 .STRING "3 CREDIT / 4 COINS" + .BYTE 0 + .EVEN +C44 .STRING "4 CREDITS / 4 COINS" + .BYTE 0 + .EVEN +C15 + .STRING "1 CREDIT / 2 X 25 CENTS",0 + .EVEN + +DOLL2 .STRING "2 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL3 .STRING "3 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DOLL4 .STRING "4 CREDITS / $1.00" + .BYTE 0 + .EVEN + +DM11 .STRING "1 CREDIT / 1 DM",0 + .EVEN +DM22 .STRING "2 CREDITS / 2 DM",0 + .EVEN +DM55 .STRING "5 CREDITS / 5 DM",0 + .EVEN +DM65 .STRING "6 CREDITS / 5 DM",0 + .EVEN +DM75 .STRING "7 CREDITS / 5 DM",0 + .EVEN +DM85 .STRING "8 CREDITS / 5 DM",0 + .EVEN + +F3F5 .STRING "3 CREDITS / 5F" + .BYTE 0 + .EVEN +F2F5 +F25 .STRING "2 CREDITS / 5F" + .BYTE 0 + .EVEN +F15 .STRING "1 CREDIT / 5F" + .BYTE 0 + .EVEN +F510 .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN +F1120 .STRING "11 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4109 .STRING "9 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4107 .STRING "7 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F4105 .STRING "5 CREDITS / 2 X 10F" + .BYTE 0 + .EVEN +F410 .STRING "4 CREDITS / 10F" + .BYTE 0 + .EVEN +F310 .STRING "3 CREDITS / 10F" + .BYTE 0 + .EVEN +F210 .STRING "2 CREDITS / 10F" + .BYTE 0 + .EVEN + +F3X1F .STRING "1 CREDIT / 3 X 1F" + .BYTE 0 + .EVEN + +F2X1F .STRING "1 CREDIT / 2 X 1F" + .BYTE 0 + .EVEN + +F52X5 .STRING "5 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +F5X10F .STRING "5 CREDITS / 10F" + .BYTE 0 + .EVEN + +F72X5 .STRING "7 CREDITS / 2 X 5F" + .BYTE 0 + .EVEN + +SFRANC11 .STRING "1 CREDIT / 1F" + .BYTE 0 + .EVEN +SFRANC65 .STRING "6 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC75 .STRING "7 CREDITS / 5F" + .BYTE 0 + .EVEN +SFRANC85 .STRING "8 CREDITS / 5F" + .BYTE 0 + .EVEN + + .IF FULLPRICE +P1500L_P .STRING "1 CREDIT / 500 LIRE" + .BYTE 0 + .EVEN + +UK_120 .STRING "1 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_220 .STRING "2 CREDIT / 20 P" + .BYTE 0 + .EVEN +UK_130 .STRING "1 CREDIT / 30 P" + .BYTE 0 + .EVEN +UK_150 .STRING "1 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_250 .STRING "2 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_350 .STRING "3 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_550 .STRING "5 CREDITS / 50 P" + .BYTE 0 + .EVEN +UK_2P .STRING "2 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_3P .STRING "3 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_4P .STRING "4 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_5P .STRING "5 CREDITS / L1.00" + .BYTE 0 + .EVEN +UK_7P .STRING "7 CREDITS / L1.00" + .BYTE 0 + .EVEN + +SP_11 .STRING "1 CREDIT / 100 PESETA" + .BYTE 0 + .EVEN + +SP_44 .STRING "5 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN + +SP_54 .STRING "6 CREDITS / 500 PESETA" + .BYTE 0 + .EVEN +NZ_131 +AU_36 .STRING "1 CREDIT / 3 X 20 CENTS" + .BYTE 0 + .EVEN +AU_2D .STRING "2 CREDITS / $ 1.00" + .BYTE 0 + .EVEN +AU_520 .STRING "1 CREDIT / 5 X 20 CENTS" + .BYTE 0 + .EVEN +AU_1D .STRING "1 CREDIT / $ 1.00" + .BYTE 0 + .EVEN + .ENDIF + +JAP_101 .STRING "1 CREDIT / 100 YEN" + .BYTE 0 + .EVEN + + .IF FULLPRICE + +JAP_201 .STRING "2 CREDITS / 100 YEN" + .BYTE 0 + .EVEN +ASTA101 .STRING "1 CREDIT / 2 X 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA102 .STRING "3 CREDITS / 2 X 10 SCHILLING" + .BYTE 0 + .EVEN +ASTA151 .STRING "1 CREDIT / 5 SCHILLING" + .BYTE 0 + .EVEN +ASTA152 .STRING "2 CREDITS / 10 SCHILLING" + .BYTE 0 + .EVEN + +BEL_1201 .STRING "1 CREDIT / 2OF" + .BYTE 0 + .EVEN +BEL_2201 .STRING "2 CREDITS / 2OF" + .BYTE 0 + .EVEN +BEL_3201 .STRING "3 CREDITS / 2OF" + .BYTE 0 + .EVEN + +SWED_S51 .STRING "1 CREDIT / 3 X 1 KRONA" + .BYTE 0 + .EVEN +SWED_S52 .STRING "2 CREDITS / 5 KRONA" + .BYTE 0 + .EVEN + +NZ_121 .STRING "1 CREDIT / 2 X 20 CENTS" + .BYTE 0 + .EVEN + +HF_11 .STRING "1 CREDIT / 1 HFI" + .BYTE 0 + .EVEN + +HF_32 .STRING "3 CREDITS / 2.5 HFI" + .BYTE 0 + .EVEN + +FIN_1 .STRING "1 CREDIT / 1 MARKKA" + .BYTE 0 + .EVEN + +DEN_12 +NOR_12 .STRING "1 CREDIT / 2 X 1 KRONE" + .BYTE 0 + .EVEN + +NOR_35 .STRING "3 CREDITS / 5 X 1 KRONE" + .BYTE 0 + .EVEN + +DEN_35 .STRING "3 CREDITS / 5 KRONE" + .BYTE 0 + .EVEN + +DEN_710 .STRING "7 CREDITS / 2 X 5 KRONE" + .BYTE 0 + .EVEN + +ANT1P25 .STRING "1 CREDIT / 25 CENTS" + .BYTE 0 + .EVEN + +ANT4DOL .STRING "4 CREDITS / 1 GUILDER" + .BYTE 0 + .EVEN + +HUNG2X10 + .STRING "1 CREDIT / 2 X 10 FORINT",0 + .EVEN + +HUNG2X20 + .STRING "3 CREDITS / 2 X 20 FORINT",0 + .EVEN + + .ENDIF + +************************************************************************** +* * +* COIN SLOT TITLES * +* * +************************************************************************** + +USA_ESLOT + .STRING "$1.00 .10 .25 .5 $1.00",0 +;; .STRING "1 DOLLAR 10/25/5 CENT",0 + .EVEN + +FRANCE_ESLOT + .STRING "1F 5F 10F 20F",0 +;; .STRING "1/10/5 FRANCS",0 + .EVEN + +GERMAN_ESLOT + .STRING "5DM 2DM 1DM",0 +;; .STRING "5/1/2 DM",0 + .EVEN + +BELGIUM_ESLOT + .STRING "50/5/20 FR",0 + .STRING "50F 20F 5F",0 +;; .EVEN + +USA_QQ .STRING "25 CENT 25 CENT" + .BYTE 0 + .EVEN + + .IF FULLPRICE +USA_QDQ + .STRING ".25 .25 $1.00",0 +;; .STRING "25 CENT $1.00 25 CENT",0 + .EVEN + .ENDIF + +GERMAN_15 .STRING "1 DM 5 DM" + .BYTE 0 + .EVEN +FRENCH510 .STRING "5 F 10 F" + .BYTE 0 + .EVEN +FRENCH1F5F + .STRING "1 F 5 F",0 + .EVEN + +CAN_QD + .STRING ".25 $1.00 $1.00",0 +;; .STRING "25 CENT $ 1.00",0 + .EVEN + + .IF FULLPRICE +SWISS15 + .STRING "1 F 5 F" + .BYTE 0 + .EVEN +ITALYLIRE .STRING "500L 500L" + .BYTE 0 + .EVEN + +UK2050 .STRING "20P 50P" + .BYTE 0 + .EVEN +UK_ELEC .STRING "L1.00 20P 50P 10P" + .BYTE 0 + .EVEN +UK_CCU .STRING "CCU ON LEFT SLOT " + .BYTE 0 + .EVEN + +PESETA100 + .STRING "100 P 500 P",0 +;; .STRING "100 PESETA 500 PESETA",0 + .EVEN +AUST20C + .STRING ".20 $ 1.00",0 +;; .STRING "20 CENT $ 1.00",0 + .EVEN + + .ENDIF + +YEN100 .STRING "100Y 100Y" + .BYTE 0 + .EVEN + + .IF FULLPRICE +SHILL510 .STRING "5 10 SCHILLING" + .BYTE 0 + .EVEN +FRANC20 .STRING "20F 20F" + .BYTE 0 + .EVEN +KRONA5 .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN +NZ20 .STRING ".20 .20" + .BYTE 0 + .EVEN +HFSLOT .STRING "1HFI 2.5HFI" + .BYTE 0 + .EVEN + +MKSLOT .STRING "1 1 MARKKA" + .BYTE 0 + .EVEN + +NKRSLOT .STRING "1 KR 1 KR" + .BYTE 0 + .EVEN + +DKRSLOT .STRING "1 KR 5 KR" + .BYTE 0 + .EVEN + +ANTSLOT .STRING ".25 1 GUILDER" + .BYTE 0 + .EVEN + +HUNGSLOT + .STRING "10 20 FORINT",0 + .EVEN + + .ENDIF + +;;CP_CX EQU 200 +;;CP_11 EQU 11 +;;CP_13 EQU 13 +;;CP_23 EQU 23 +;;CP_33 EQU 33 + + + + +;TXT_2_TO_START +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .byte "2 CREDITS TO START",0,1 +; .even +; MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_YELLOW,STRCNRM,0 +; .byte "1 CREDIT TO CONTINUE",0,0 +; .even + +;TWO_PER_PLAYER +; MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 +; .STRING "2 COINS PER PLAYER" +; .BYTE 0,0 +; .EVEN + +OCOP MESS_MAC RD7FONT,SPACING07,CP_CX,CP_11,ROBO_YELLOW,STRCNRM,0 + .STRING "1 COIN / 1 PLAY" + .BYTE 0,0 + .EVEN + +USA_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +FRANCE_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 25 CENTS" + .STRING "\n4 CREDITS / 1 DOLLAR",0,1 + .EVEN + +GERMAN_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 1 DM" + .STRING "\n6 CREDITS / 5 DM",0,1 + .EVEN + + .IF FULLPRICE +BELGIUM_ELECTRONIC: + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_YELLOW,STRCNRM,0 + .STRING "1 CREDIT / 20 FR" + .EVEN + +UK_MECH1 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_MECH2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "2 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / 50 P" + .BYTE 0,0 + .EVEN +UK_ECA1 +UK_ECA2 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 20 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "7 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA3 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA4 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "5 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA5 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA6 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECA7 + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "3 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN +UK_ECAC + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_13,ROBO_LF,STRCNRM,0 + .STRING "1 CREDIT / 30 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_23,ROBO_LF,STRCNRM,0 + .STRING "2 CREDITS / 50 P" + .BYTE 0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,CP_CX,CP_33,ROBO_LF,STRCNRM,0 + .STRING "4 CREDITS / " + .BYTE FONT_EPOUND + .STRING "1.00" + .BYTE 0,0 + .EVEN + .ENDIF + + +* +* THE FOLLOWING 2 MESSAGES ARE GENERIC AND WILL +* BE DISPLAYED IF THE MODE MATCHES AND NO +* APPROPRIATE MESSAGE EXISTS +* +* THIS IS FOR THIS BEING THE ONLY MESSAGE DISPLAYED ON +* THE SCREEN +* +TWO_TO_START + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TO_START_2C + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO CONTINUE",0,0 + .even +* +* THIS IS FOR LINES TWO AND 3 WITH AN ADDITIONAL LINE ABOVE +* + +TWO_TS MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS TO START",0,1 + .even + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0 + .byte "1 CREDIT TO CONTINUE",0,0 + .even + +TWO_TP MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +TWO_CRED_PER_PLAYER + MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0 + .byte "2 CREDITS PER PLAYER",0,0 + .even + +MAX_C_M MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LF,STRCNRM,0 + .byte "MAXIMUM CREDITS!",0,0 + .even + +****************************************************************************** + + .end diff --git a/SRC/MENU.EQU b/SRC/MENU.EQU new file mode 100644 index 0000000..1273b96 --- /dev/null +++ b/SRC/MENU.EQU @@ -0,0 +1,199 @@ +**********************************MENU EQUATES**************************** +; +; FOR EACH ENTRY IN THE MENU +; +MENU_TEXT_PTR EQU 0 ;OFFSET OF TEXT POINTER +MENU_ROUTINE EQU LONG_SIZE ;OFFSET OF ROUTINE +MENU_HELP EQU MENU_ROUTINE+LONG_SIZE +MENU_ENTRY_SIZE EQU 3*LONG_SIZE +* +BLNK_HELP EQU 0 ;NO HELP BOX FOR THIS ENTRY +NO_HELP EQU 00000001H ;NO HELP AREA IN THIS MENU +ADJ_HELP EQU 00000002H ;PASS STRUCTURE POINTER TO ADJUSTMENT HELP ROUT +SND_HELP EQU 00000003H ;CALLED ON SOUND TEST MENU +SND_PLAY EQU 00000004H ;CALLED FROM SOUND "PLAY" SELECTIONS +* +SND_MESS_Y EQU 196 +SND_BOX_H EQU 57 + +* +* SPACING BETWEEN BOXES ON SCREEN +* +BOX_YGAP EQU 3 +BOX_XGAP EQU 2 +* +* +* A CENTERED BOX NEEDS TO BE MOVED LEFT THIS AMOUNT +* (PIXELS) TO CORRECTLY FRAME CENTERED TEXT AT +* THE SAME POSITION +* +C_KLUDGE EQU 1 +* +* THESE DETERMINE THE THICKNESS OF THE BOX LINES +* +MB_XWID EQU 3 +MB_YWID EQU 3 +* +* GAP BETWEEN A MENU BORDER BOX AND +* THE SELECTION BAR +* +GAP EQU 2 ;GAP BETWEEN BORDER AND SELECTION BAR +* +* CONSTANT TO PASS TO "DO_BORDER" FOR OUR +* BOX SIZE +* +BORDER_SIZE EQU (MB_YWID*10000H)+MB_XWID + +*******************************TEST TITLE CONSTANTS**************************** +* +* THESE ARE USED TO SET TOP BOX AND MAIN TITLE. +* THE MENUS AND HELP SCREENS WILL SQUARE OFF +* TO THE NUMBERS SET HERE. +* + +TM_X EQU 200 ;USED TO POSITION TITLE AND BOX TOGETHER +TM_Y EQU 10 + +TIT_ULX EQU TM_X-195 +TIT_LRX EQU TM_X+189 + +TIT_ULY EQU TM_Y-6 +TIT_LRY EQU TM_Y+32 + +********************************MAIN MENU CONSTANTS*************************** + +INST_ULY EQU TIT_LRY+BOX_YGAP ;Y RANGE FOR INSTRUCTION BOX +INST_LRY EQU INST_ULY+29 + +BAR_DY EQU -8 +BAR_WID EQU 183 +MENU_X EQU TIT_ULX+GAP+MB_XWID+(BAR_WID/2)+C_KLUDGE +MENU_Y EQU INST_LRY+BOX_YGAP+MB_YWID+GAP-BAR_DY +MENU_DY EQU 23 +BAR_HITE EQU 26 +BAR_DX EQU 6 +* +* HELP DRAWER CONSTANTS +* +HELP_X_MARGIN EQU 10 ;MARGIN FOR LEFT JUSTIFIED HELP TEXT +HELP_Y_MARGIN EQU 8 ;TOP OF BOX TO 1ST ENTRY +HELP_YLO_MARGIN EQU HELP_Y_MARGIN-4 ;BOTTOM MARGIN IS A TOUCH LESS DUE +* ;TO SPACING +HELP_DY EQU 12 ;SCREEN UNITS PER ITEM. +* +* +* ADJUSTMENT MENU CONSTANTS +* +* "CURRENT SETTING" BOX +* +CUR_ULY EQU 125 +CUR_LRX EQU TIT_LRX +CUR_LRY EQU CUR_ULY+(INST_LRY-INST_ULY) ;SAME HEIGHT AS TOP BOX +CUR_ULY2 EQU 140 +CUR_LRY2 EQU CUR_ULY2+(INST_LRY-INST_ULY) + +ADJ_ULY EQU CUR_LRY2+BOX_YGAP ;USE OUR "FIXED" SPACING. +ADJ_CULY EQU ADJ_ULY-20 ; COIN UPPER LEFT Y +ADJ_PULY EQU ADJ_ULY-28 + +COIN_HEAD_Y EQU ADJ_CULY+34 ;1ST OF TOP COIN INFO LINES +MESS_CTS EQU COIN_HEAD_Y+35 ;START/CONTINUE PLACE + +************************************************************************** +* * +* COIN SELECT TABLE OFFSETS * +* * +************************************************************************** + +* IF "CHUTES" VALUE CHANGES.....EXTRA WORDS MUST BE PUT HERE + +CS_LMULT EQU 0 +CS_CMULT EQU CS_LMULT+WORD_SIZE +CS_RMULT EQU CS_CMULT+WORD_SIZE +CS_XMULT EQU CS_RMULT+WORD_SIZE +CS_DBV EQU CS_XMULT+WORD_SIZE +CS_UCRED EQU CS_DBV+WORD_SIZE +CS_UBON EQU CS_UCRED+WORD_SIZE +CS_UMIN EQU CS_UBON+WORD_SIZE +CS_STRT EQU CS_UMIN+WORD_SIZE +CS_CONT EQU CS_STRT+WORD_SIZE + +CS_CDIV EQU CS_CONT+WORD_SIZE + +CS_FRAC EQU CS_CDIV+WORD_SIZE +CS_COPY EQU CS_FRAC+WORD_SIZE ;UP TO HERE IS COPIED AS ADJUSTMENTS + +CS_LVAL EQU CS_COPY +CS_CVAL EQU CS_LVAL+WORD_SIZE +CS_RVAL EQU CS_CVAL+WORD_SIZE +CS_XVAL EQU CS_RVAL+WORD_SIZE +CS_DBVVAL EQU CS_XVAL+WORD_SIZE + +CS_LMES EQU CS_DBVVAL+WORD_SIZE +CS_RMES EQU CS_LMES+LONG_SIZE +CS_PROMPT EQU CS_RMES+LONG_SIZE +CS_TITLE EQU CS_PROMPT+LONG_SIZE +CS_LIST EQU CS_TITLE+LONG_SIZE +CS_PICK EQU CS_LIST+LONG_SIZE ;WHICH LINE TO ADD TO 2 TO START...1 TO +CS_SLOTS EQU CS_PICK+WORD_SIZE ;TEXT DESCRIBING COIN SLOTS +CS_SIZE EQU CS_SLOTS+LONG_SIZE + +* +* ADJUSTMENT STRUCTURE. THIS STRUCTURE IS +* POINTED TO BY THE 2ND MENU LONG WORD (WHERE NORMALLY +* THE ROUTINE LIVES). +* +AD_ROUT EQU 0 ;LONG...ROUTINE TO RUN WHEN SELECTED. +AD_TITLE EQU AD_ROUT+LONG_SIZE ;LONG...POINTER TO TITLE FOR RIGHT COLUMN +AD_HELP EQU AD_TITLE+LONG_SIZE ;LONG...POINT TO HELP STRUCT FOR EXPLANATION +AD_CMOS EQU AD_HELP+LONG_SIZE ;WORD...GET_ADJ / PUT_ADJ NUMBER. +AD_MIN EQU AD_CMOS+WORD_SIZE ;LONG...MINIMUM VALUE FOR ADJ. +AD_MAX EQU AD_MIN+LONG_SIZE ;LONG...MAXIMUM VALUE FOR ADJ. +AD_DELTA EQU AD_MAX+LONG_SIZE ;LONG...UNITS BETWEEN VALUES. +AD_ZEQU EQU AD_DELTA+LONG_SIZE ;LONG...NUMBER TO STORE AS A ZERO. +AD_NAMEIT EQU AD_ZEQU+LONG_SIZE ;LONG...ROUTINE TO PRINT VALUES. +AD_FLAGS EQU AD_NAMEIT+LONG_SIZE ;WORD...bit zero non zero says wrap +* ; bit one non zero says BCD + ; bit two says flag "1st 8 coinage changed" (ADJVIRGIN) + ; bit three says flag 1st 6 changed (ADJ1st6) + ; bit four says its hsr counter +AD_NAMPTR EQU AD_FLAGS+WORD_SIZE ;LONG...POINTER TO DATA FOR NAMEIT ROUTINE +AD_MAIN EQU AD_NAMPTR+LONG_SIZE ;LONG...MAIN MENU STRING + +WRAP_BIT EQU 0 +BCD_BIT EQU 1 +VIRG_BIT EQU 2 +SIX_BIT EQU 3 +HSR_BIT EQU 4 +WRAP_VAL EQU 1 +BCD_VAL EQU 2 +VIRG_VAL EQU 4 +SIX_VAL EQU 8 +HSR_VAL EQU 16 +* +* FOR CSELECT TABLE...... +* +* A1 = 1 PLOT ONLY THE STRING LIST (1 OR 2 POINTERS +* CENTERED APPROPRIATELY +* +* A1 = 2 PLOT THE 1ST LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +* A1 = 3 PLOT THE 2ND LINE OF THE STRING LIST ALONG +* WITH THE 2 CREDITS TO START...1 TO CONTINUE +* +CSM_LIST EQU 1 +CSM_1W_21 EQU 2 +CSM_2W_21 EQU 3 +CSM_3W_21 EQU 4 +CSM_LAST EQU 4 + +* +* FOR CS_PICK: +* +SHOW_NONE EQU 0 ;JUST USE 2/1 BY ITSELF +SHOW_1 EQU 2 ;SHOW 1ST LINE +SHOW_2 EQU 3 ;SHOW 2ND LINE +SHOW_3 EQU 4 ;SHOW 3RD LINE + + diff --git a/SRC/MPROC.ASM b/SRC/MPROC.ASM new file mode 100644 index 0000000..1131ad9 --- /dev/null +++ b/SRC/MPROC.ASM @@ -0,0 +1,572 @@ +************************************************************** +* GSP MULTI-PROCESSING SYSTEM +* +* Owner: none +* +* Software: Eugene P Jarvis, Shawn Liptak +* Initiated: 1988? +* +* Modified: Shawn Liptak, 7/?/91 -New KILL stuff (Total carnage) +* Shawn Liptak, 8/12/91 -KOP code +* Shawn Liptak, 10/27/91 -Shawn.hdr +* Shawn Liptak, 2/18/92 -Basketball (cleanup) +* Shawn Liptak, 7/1/92 -Slowmotion +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 20:35 +************************************************************** + .file "mproc.asm" + .title "GSP multi-processing system" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include game.equ + .include "macros.hdr" + + + .ref dirqtimer + + .ref obj_yzsort + .ref L_TIMER ;Audit + + .if DEBUG + .ref SLDEBUG + .ref slowmotion + .endif + + + + .bss PRCSTR ,NPROC*PRCSIZ ;Process data blocks + + + + .sect "PRCBSS" + +ACTIVE .long 0 +FREE .long 0 + + + .text + + +******************************** +* Process list initialize +* >A13=*Process active list +* Trashes scratch + + SUBR process_init + + movi ACTIVE,a13 ;Init A13 + clr a0 + move a0,*a13,L ;Empty list + + movi PRCSTR,a1 + move a1,@FREE,L ;Full free list + + movi NPROC,b0 ;# of processes +#lp move a1,a14 + addi PRCSIZ,a1 + move a1,*a14,L ;Set link + dsj b0,#lp + + move a0,*a14,L ;Null last link + + rets + + +#******************************* +* Process dispatch + + SUBR process_dispatch + + .if DEBUG + move @SLDEBUG,a0 + jrnn #noline + + movi 31*32,a0 ;Proc usage + move a0,@ERASELOC + +#dmawt move b13,b13 + jrge #dmawt + movk 6,a0 ;DMA usage + move a0,@ERASELOC +#noline + move @slowmotion,a0 +#smlp move @dirqtimer,a1 + cmp a1,a0 + jrge #smlp + + .endif + + movi ACTIVE,a13 ;*Proc list + clr a0 + move a0,@dirqtimer ;Tell DIRQ to flip and draw + +#lp calla obj_yzsort ;Sort display list + move @dirqtimer,a0 + jrz #lp ;Wait? + + + calla L_TIMER ;Linky timer + + jruc prcd1 + +******************************** +* Process sleep +* Stack=*Wakeup +* A0=Sleep time + +PRCSLP + PULL a7 ;Get *Wakeup + +PRCLSP move a13,a1 + addi PDATA,a1 + mmtm a1,a7,a8,a9,a10,a11,a12 ;*Wakeup, regs, *stack + move a0,-*a1 ;sleep + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; .ref d3vis_p +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .if DEBUG + move a13,a0 + addi PSDATA,a0 + cmp a0,a12 + jrlt $ ;stick on stack overflow + addi PRCSIZ-PSDATA,a0 + cmp a0,a12 + jrgt $ ;stick on stack underflow + .endif + +prcd1 + move *a13,a13,L + jrz prcdx ;End? + move *a13(PTIME),a0 ;Get count + subk 1,a0 + move a0,*a13(PTIME) ;Put it back + jrgt prcd1 ;Not ready? + + + move a13,a1 ;>Dispatch + addi >40,a1 + mmfm a1,a7,a8,a9,a10,a11,a12 ;*Wake, regs, *stack + jump a7 ;Do process + + +prcdx rets + + +#******************************** +* Process kills itself + +SUCIDE + movi ACTIVE,a1 +suclp move a1,a2 ;save previous + move *a1,a1,L + jrz sucerr + + cmp a1,a13 + jrne suclp ;!Us + + + + .if DEBUG + + PUSH a5 + move *a1(PROCID),a5 + cmpi takepid,a5 + jrz #caught + +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught + + jruc #nocaught + +#caught + LOCKUP + +#nocaught + + PULL a5 + + .endif + + + + + + + move *a1,*a2,L ;Unlink + move @FREE,*a1+,L ;Link into free list at start + subk 32,a1 + move a1,@FREE,L + + move a2,a13 ;Set current process to previous + jruc prcd1 ;Continue with dispatch + +sucerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 5,0 + .endif + movi ACTIVE,a13 ;*Proc list + jruc prcd1 + + +#******************************* +* Kill process (won't kill self) +* A0=*Process to kill +* Trashes scratch + +KILL + cmp a0,a13 + jreq #x ;Killing self? + + movi ACTIVE,a1 + +#lp move a1,a14 ;Save previous + move *a1,a1,L + jrz killerr ;Can't find? + cmp a1,a0 + jrne #lp ;Not the one? + + + .if DEBUG + + PUSH a2 + move *a1(PROCID),a2,L + cmpi takepid,a2 + jrnz #ok + LOCKUP +#ok PULL a2 + + .endif + + +; PUSH a2 +; move *a1(PROCID),a2 +; cmpi 1000h,a2 +; jrz #caught +; cmpi 1100h,a2 +; jrz #caught +; cmpi 1200h,a2 +; jrz #caught +; cmpi 1300h,a2 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a2 + + + + move *a0,*a14,L ;Unlink from active + move @FREE,*a0+,L ;Link into free list at start + subk 32,a0 + move a0,@FREE,L + +#x rets + +killerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 6,0 + .endif + jruc #x + + +******************************** +* Create a process +* A1=PID, A7=PC, A8,A9,A10,A11 Passed parameters +* A13=*Current process +* >A0=*Created process (Flags invalid!) +* Trashes A14,B0-B1 + +GETPRC + move a12,b0 + + move @FREE,a0,L + jrz nonelft ;No more? + move *a0,a14,L + move a14,@FREE,L ;Unlink from free list + move *a13,*a0,L ;Link into active list after current process + move a0,*a13,L + jruc xferprc0 + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 4,2 + .endif + jruc getpx + +******************************** +* Transfer control of an existing process +* A0=*Process to be xfer'd +* A1=New PID +* A7=*Wake address +* A8-A11=Passed to the xfer'd proc +* Trashes A14,B0-B1 + +XFERPROC + move a12,b0 +xferprc0 + cmpi ROM,a7 + jrlo procwakeerr ;Error? + + + .if DEBUG + + PUSH a1 + calla process_exist + jrnz #found + PULL a1 + + LOCKUP + jruc #cont +#found + PULL a1 +#cont + + move *a0(PROCID),a14 + cmpi takepid,a14 + jrnz #tag2 + + LOCKUP +#tag2 + .endif + + + + + move a0,a14 + addi PDATA,a14 + move a0,a12 ;Reset process stack pointer + addi PRCSIZ,a12 + mmtm a14,a7,a8,a9,a10,a11,a12 ;Stuff wake, regs, p stack ptr + movk 1,a12 + move a12,-*a14 ;Wakeup next time + move a1,-*a14 ;ID + +getpx move b0,a12 + rets ;Flags are trashed!!! + +procwakeerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 7,0 + .endif + jruc getpx + + +******************************** +* Kill a class of processes except for self +* A0=PID +* A1=Mask (bits to keep) +* Trashes scratch + +KILALL + not a1 + jruc KILALLN + + +******************************** +* Kill one class of processes +* A0=PID +* Trashes scratch + +KIL1C + clr a1 + +#******************************* +* Kill a class of processes +* A0=PID +* A1=!Mask (bits to remove) +* Trashes scratch + +KILALLN + move a2,b0 + move a3,b1 + + zext a1 ;Won't kill PIDS >8000+ + andn a1,a0 ;Form match + movi ACTIVE,a2 + +#lp move a2,a3 ;Save previous + move *a2,a2,L + jrz #x ;Done? + move *a2(PROCID),a14 +; jrnn #ok +; LOCKUP +;#ok + andn a1,a14 ;Apply mask + cmp a0,a14 + jrne #lp ;No match? + + cmp a2,a13 + jreq #lp ;Current proecess? + + + .if DEBUG + + PUSH a4 + move *a2(PROCID),a4,L + cmpi takepid,a4 + jrnz #ok + LOCKUP +#ok PULL a4 + + .endif + + +; PUSH a5 +; move *a2(PROCID),a5 +; cmpi 1000h,a5 +; jrz #caught +; cmpi 1100h,a5 +; jrz #caught +; cmpi 1200h,a5 +; jrz #caught +; cmpi 1300h,a5 +; jrz #caught +; jruc #nocaught +;#caught LOCKUP +;#nocaught +; PULL a5 + + + + + + move *a2,*a3,L ;Unlink + move @FREE,a14,L ;Link into free list at start + move a14,*a2,L + move a2,@FREE,L + move a3,a2 + jruc #lp + +#x move b0,a2 + move b1,a3 + rets + + +******************************** +* Knock out one class of processes +* A0=PID, A2=Time to add +* Trashes scratch + +KOP_1C + clr a1 + +#******************************* +* Knock out a class of processes +* A0=PID, A1=!Mask (Bits to remove), A2=Time to add +* Trashes scratch + +KOP_ALL + move a3,b0 + andn a1,a0 ;Form match + movi ACTIVE,a3,L + +#lp move *a3,a3,L ;Get next + jrz #x ;End? + move *a3(PROCID),a14 + andn a1,a14 ;Mask + cmp a0,a14 + jrnz #lp ;No match? + + move *a3(PTIME),a14 ;Add sleep + add a2,a14 + move a14,*a3(PTIME) + jruc #lp + +#x move b0,a3 + rets + + +#******************************* +* Check to see if process exists +* A0=*Process +* Rets: Z=Not found, NZ=Found +* Trashes scratch + +process_exist + movi ACTIVE,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;!Match? + move a0,a0 ;Clr Z + +#x rets + + +#******************************* +* Find if at least one process, other than calling process, exists +* A0=PROCID +* A1=Mask +* Rets: A0=*Process or 0 (Z) + +EXISTP + PUSH a1,a2,a4 + + sext a0 + and a1,a0 ;form match + movi ACTIVE,a2 + +#lp move *a2,a2,L + jrz #x ;End? + move *a2(PROCID),a4 + and a1,a4 + cmp a0,a4 + jrne #lp ;!Match? + + cmp a2,a13 + jreq #lp ;Self? + +#x move a2,a0 + + PULL a1,a2,a4 + rets + + + + + + .end + diff --git a/SRC/MPROC.EQU b/SRC/MPROC.EQU new file mode 100644 index 0000000..716a148 --- /dev/null +++ b/SRC/MPROC.EQU @@ -0,0 +1,368 @@ +*.Last mod - 1/7/93 21:10 + + .globl GETPRC,SUCIDE,PRCSLP,PRCLSP + .globl process_exist,EXISTP + .globl XFERPROC + .globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL + .globl RAND,ACTIVE,FREE,PRCSTR + .globl snd_play1,snd_play,SNDSND + +;Process data structure +*STRUCT PROC +PLINK .set 0 ;LINK TO NEXT 32 BITS +PROCID .set 20h ;UHW PROCESS ID 16 BITS +PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS +PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS +PA11 .set 60h ;UHL REGISTERS SAVED +PA10 .set 80h ;UHL +PA9 .set 0A0h ;UHL +PA8 .set 0C0h ;UHL +PWAKE .set 0E0h ;UHL +PDATA .set 100h ;PROCESS DATA STORE +;PSDATA .set 5C0h ;PROCESS STACK DATA +;PRCSIZ .set 7b0h ;END OF DATA STRUCTURE + +PSDATA .set 6C0h ;PROCESS STACK DATA +PRCSIZ .set 8b0h ;END OF DATA STRUCTURE + +;;PSDATA .set 3C0h ;PROCESS STACK DATA +;;PRCSIZ .set 5b0h ;END OF DATA STRUCTURE +*ENDSTRUCT + +NPROC .SET 190 ;# processes + +*GSP MACROS + +*SUBTRACT REGISTER FROM MEMORY +* SUBRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SUB :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*ADD REGISTER TO MEMORY +* ADDRM REG,ADDR,FIELD SIZE +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDRM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ADD :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*INCREMENT LOCATION +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +INCW .macro P1 + MOVE :P1:,A14 + INC A14 + MOVE A14,:P1: + .endm + +*DECREMENT WORD +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +DECW .macro P1 + MOVE :P1:,A14 + DEC A14 + MOVE A14,:P1: + .endm + +*INCREMENT MEMORY +* INCM ADDR,FIELD SIZE +*A14 DESTROYED + +INCM .macro P1,P2 + MOVE :P1:,A14,:P2: + INC A14 + MOVE A14,:P1:,:P2: + .endm + +*DECREMENT MEMORY +* DECM ADDR,FIELD SIZE +*A14 DESTROYED + +DECM .macro P1,P2 + MOVE :P1:,A14,:P2: + DEC A14 + MOVE A14,:P1:,:P2: + .endm + +*SUBTRACT MEMORY +* SUBM ADDR,REG,FIELD SIZE +*SUBTRACTS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SUBM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + SUB A14,:P2: + .endm + +*ADD MEMORY +* ADDM ADDR,REG,FIELD SIZE +*ADDS ADDRESS FROM REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +ADDM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + ADD A14,:P2: + .endm + +*NEGATE MEMORY +* NEGM ADDR,FIELD SIZE +*NEGATES ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +NEGM .macro P1,P2 + MOVE :P1:,A14,:P2: + NEG A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPARE MEMORY +* CMPM ADDR,REG,FIELD SIZE +*COMPARES ADDRESS TO REGISTER +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CMPM .macro P1,P2,P3 + MOVE :P1:,A14,:P3: + CMP A14,:P2: + .endm + +*CLEAR MEMORY +* CLRM ADDR,FIELD SIZE +*CLEARS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +CLRM .macro P1,P2 + CLR A14 + MOVE A14,:P1:,:P2: + .endm + +*COMPLEMENT MEMORY +* COMM ADDR,FIELD SIZE +*COMPLEMENTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +COMM .macro P1,P2 + MOVE :P1:,A14,:P2: + NOT A14 + MOVE A14,:P1:,:P2: + .endm + +*SHIFT LEFT MEMORY +* SLLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SLLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SLL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT ARITHMETIC MEMORY +* SRAM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRAM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + SEXT A14,:P3: + SRA :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*SHIFT RIGHT LOGICAL MEMORY +* SRLM SHIFT COUNT,ADDR,FIELD SIZE +*SHIFTS ADDRESS CONTENTS +*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY + +SRLM .macro P1,P2,P3 + MOVE :P2:,A14,:P3: + ZEXT A14,:P3: + SRL :P1:,A14 + MOVE A14,:P2:,:P3: + .endm + +*BIT SET +* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BSET .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + OR A14,:R1: + .endm + + +*BIT CLR +* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN +* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY + +BCLR .macro P1,R1 + MOVK 1,A14 + SLL :P1:,A14 + ANDN A14,:R1: + .endm + +*SET THE Z BIT +* SETZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 1 +* V Unaffected +* NOTE: A14 IS CLEARED + +SETZ .macro + CLR A14 + .endm + +*CLR THE Z BIT +* CLRZ +* STATUS BITS: +* N Unaffected +* C Unaffected +* Z 0 +* V Unaffected +* NOTE: A14 IS SET TO 1 + +CLRZ .macro + CLR A14 + NOT A14 + .endm + +*PROCESS SLEEP CONSTANT +*A=Sleep time 1-7fff +*RET ADDR ON STACK + +SLEEP .macro A + movi :A:,a0 + calla PRCSLP + .endm + +SLEEPK .macro A + movk :A:,a0 + calla PRCSLP + .endm + +*PROCESS SLEEP REGISTER +*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0 +*RET ADDR ON STACK + +SLEEPR .macro REG1 + MOVE :REG1:,A0 + CALLA PRCSLP + .endm + +*PROCESS LOOP SLEEP +*s=Sleep time, a=*Wakeup addr + +SLOOP .macro s,a + .if :s: < 33 + movk :s:,a0 + .else + movi :s:,a0 + .endif + movi :a:,a7,L + jauc PRCLSP + .endm + +*PROCESS LOOP SLEEP REGISTER +*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7 + +SLOOPR .macro P1,P2 + MOVE :P1:,A0 + MOVI :P2:,A7,L + JAUC PRCLSP + .endm + +*PROCESS CREATION MACRO +*P1=ID-->A1, P2=PC-->A7 + +CREATE .macro p1,p2 + movi :p1:,a1 + movi :p2:,a7,L + calla GETPRC + .endm + +*PROCESS CREATION MACRO +*A=PC-->A7 +CREATE0 .macro A + clr a1 + movi :A:,a7,L + calla GETPRC + .endm + +*KILL PROCESS(ES) +*P1=ID-->A0,P2=MASK-->A1 + +KILLIT .macro P1,P2 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA KILALL + .endm + +*CALL IT QUITS + +DIE .macro + jauc SUCIDE + .endm + +*PROCESS JUMP SUBROUTINE +*P1=ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRP .macro P1 + GETPC A7 + ADDI 060h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JAUC :P1: + .endm + +*PROCESS JUMP SUBROUTINE ON REGISTER +*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS +*A7 IS USED FOR PC STORAGE + +JSRPR .macro R1 + GETPC A7 + ADDI 040h,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP :R1: + .endm + +*RETURN FROM SLEEPING SUBROUTINE +*A7 IS USED FOR PC STORAGE +*STATUS REGISTER IS NOT AFFECTED + +RETP .macro + mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT + exgpc a7 + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +MATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JANZ :P3: + .endm + +*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND +*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL +NOMATCHP .macro P1,P2,P3 + MOVI :P1:,A0 + MOVI :P2:,A1 + CALLA EXISTP + JAZ :P3: + .endm + +LOCKUP .macro + trap 29 + .endm + diff --git a/SRC/NDSP1.ASM b/SRC/NDSP1.ASM new file mode 100644 index 0000000..63e3ae6 --- /dev/null +++ b/SRC/NDSP1.ASM @@ -0,0 +1,4041 @@ +************************************************************************** +* +* Owner: THOMPSON +* +* GSP DMA OBJECT HANDLER +* +* Version 1.0 By Warren Davis 9/1/87 +* Version 2.01 By Eugene Jarvis 10/25/87 +* Version 3.0 By Eugene Jarvis 12/20/87 +* Version 3.1 By Eugene Jarvis 7/4/88 +* Version 3.2 By Eugene Jarvis 8/8/88 +* Version 3.21 By Shawn Liptak 7/24/91 - Minor improvements (Total carnage) +* Version 3.3 By Shawn Liptak 9/13/91 - More improvements +* Version 4.0 By Shawn Liptak 1/27/92 - Basketball started +* Version 4.1 By Shawn Liptak 3/23/92 - DMA 2 version +* Version 4.2 By Shawn Liptak 7/23/92 - Faster +* Version 4.3 By Shawn Liptak 10/2/92 - Added dtype +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 10/5/93 18:53 +*.Last mod - 4/17/95 -- JBJ -- for WWFUNIT +* +* Version 4.4 -- DJT ??/??/95 - NBA/2 +* +************************************************************************** + .file "ndsp1.asm" + .title "GSP display processor V 4.4" + .width 132 + .option b,d,l,t + .mnolist + + + .include gsp.equ + .include sys.equ + .include mproc.equ + .include disp.equ + .include macros.hdr + .include "world.equ" ;Court-world defs + .include GAME.EQU + + +;-------------------- +; globals elsewhere + + .if DEBUG + .ref SLDEBUG + .endif + + .ref pup_court + .ref HALT,pal_getf,FRANIMQ +; .ref _3d_build +; .ref d3vis_p + .ref PCNT + .ref crt_colors + .ref dirq_wait + .ref SYSCOPY,IRQSKYE + + +;-------------------- +; globals in here + + .def scale_t,scale_t_sm,scale_t_size + .def scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .def scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .def scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .def scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .def scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .def scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .def scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .def scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .def scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .def scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .def scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .def scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .def scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .def scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .def scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .def scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .def scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .def scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .def scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .def scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .def scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .def scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .def scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .def scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .def scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .def del_transition_objs + + .def scale77ef_t + +;-------------------- +; Constants + + +;-------------------- +; global linked-list pointers + + .sect "OBJBSS" + +OBJLST .long 0 ;*Active object list +OFREE .long 0 ;*Free object block +BAKLST .long 0 ;*Background list + + +;-------------------- +; ram variables + + .bss SCROLLX ,32 ;X scroll value + .bss SCROLLY ,32 ;Y scroll value + ;/ Must stay in order + .bss WORLDTLX ,32 ;Left X screen coord (16:16) + .bss WORLDTLY ,32 ;Top Y screen coord (16:16) + .bss WORLDTL ,32 ;Top left world Y:X + + .bss SCRNTL ,32 ;TOP LEFT [Y,X] SCREEN (SCRN COORD.) + .bss SCRNLR ,32 ;LOWER RIGHT [Y,X] SCREEN (SCRN COORD.) + + .bss dpage ,16 ;Display page; 0=Page0, -1=Page1 + .bss dtype ,16 ;Display type; 0=2D, 1=3D, -=Special + .bss dcode_p ,32 ;!0=*Special code (^ must = neg) + BSSX DMAQCUR ,32 ;Misc DMAQ position + + .bss OBJSTR ,NOBJ*OBSIZ ;Object structure mem + +QSIZE .set (NOBJ+GNDI_H)*BQCELL +QMSIZE .set NOBJ*BQCELL + .bss dmaq0 ,QSIZE ;Main DMA queue + BSSX DMAQ ,QMSIZE ;Misc DMA queue + + BSSX gndstat ,16 ;!0=Show ground + BSSX gndpos_t ,16*GND_H + BSSX gndx ,32 + + .bss DISPLAYON ,16 ;!0=Do display processing +; BSSX QDMAFLG ,16 ;!0=Misc DMAQ being updated + + BSSX _3dstat ,16 ;!0=Show polygons + + +;-------------------- +; code start + + .text + +******************************** +* NO CODE BEFORE DMA INT!!! (Cache aligned) + +******************************** +* DMA interrupt +* B12=*End of DMA regs +* B13=DMAQ count-1 or Neg +* B14=*Next DMAQ fetch + + SUBR dma_irq + + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + move -*b14,-*b12,L + or b8,b12 ;Add DMAREGS offset for 20Mb IROM mod + move -*b14,-*b12,L + move -*b14,-*b12,L ;DMA go! + + move b9,b12 ;Restore *DMAREGS + subk 1,b13 + jrn dmaint1 ;Queue empty? + reti + +dmaint1 + setf 1,0,0 ;>Disable dma interrupt + move b12,@INTENB+1 ;Clr X1E + clr b13 ;For safety! + subk 1,b13 ;-1 + reti + + +******************************** +* Load DMA Q from obj list (3D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B7=Default scale +* B11=*DMACTRL + + .align + +#lp move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen + + mmfm a3,a12,a11,a9,a8 ;OFST:CTRL, SAG, SIZEY:SIZEX, CNST:PAL + move *a0(OYVAL),a10,L ;Get Y INT:FRAC + + btst B_3DQ,a1 + jrz #chk3d + + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + move *a0(OXPOS),a2 ;X + move *a0(ODATA_p),a3,L ;*gndpos_t + move *a3,a3 ;Get X shift + sub a3,a2 + movx a2,a10 ;A10=Obj Y:X + jruc #noscl + +#chk3d btst B_3D,a1 + jrnz #3d + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;World TL Y:X + subxy a6,a10 ;-world coord to get screen coord + +#noscl move b7,a5 ;A5=Y:X scale + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 btst 7,a12 ;dont clip bit if ZERO compressed + jrz #25 + + move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #21 + movy a6,a3 ;Top clip size + +#21 JRXLT #22 + movx a6,a3 ;Left clip size + +#22 add a3,a2 ;TL clip+BR clip + jrz #chkvflip + cmpxy a2,a9 ;Chk clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + jruc #chkvflip + +#25 move a14,a6 + subxy a10,a6 ;tc : lc + JRYLT #30 + movy a6,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a6,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #chkvflip + +;do obj clipping + + movx a9,a6 ;Save HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + movk 8,a1 + cmpxy a1,a9 ;Obj now <=8 pixels wide? Skip so DMA won't + jrxle #nxt ; lockup if so; br=yes + + movx a6,a9 ;Restore hsize + + clr a1 + cmpxy a2,a1 ;Is X clipped at all? No if X=0 + jrxz #nofh + movx a3,a1 ;Yes. A1=Left clip + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;X-LClip + + move b0,a1 ;A1=RClip + zext a1 + subxy a1,a10 ;X-RClip + +#nofh btst B_FLIPV,a12 + jrz #nofv + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + +#t0 add a1,a3 ;Add left clip + tc*ths + + move a12,a1 + sll 32-15,a1 ;Get bits/pix in CRTL bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 + +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + +#chkvflip + btst B_FLIPV,a12 + jrz #chkhflip + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#chkhflip + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#nofh2 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + +#dodma + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +dma_objlst ;Entry point +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + +;A0 = *OBJ +;A1 = OFLAGS +;A4 = *DMAQ +;A8 = OCONST:OPAL +;A9 = OSIZEY:OSIZEX +;A10= OYVAL +;A11= OSAG +;A12= OFSET:OCTRL +;A13= SCRNLR +;A14= SCRNTL + +#3d ;3D coord conversion +; +;calc X offset from center of screen +; + move *a0(OXVAL),a7,L + move b4,a2 ; WorldY:X + subxy a2,a10 ; OYPOS-WorldY:OYFRAC-WorldX + move b6,a2 ; CenterX:0 + sub a2,a7 ; OXVAL-CenterX + move *a0(OXANI),a5,L + add a5,a7 ; (OXVAL-CenterX)+OXANI +; +;calc final Z from actual + OMISC Z offset (for shadows,heads) +; + move *a0(OZPOS),a2 + move *a0(OMISC),a3 ; ZOFF + add a3,a2 ; A2=ZOFF+OZPOS + move a2,a6 ; A6=A2 for later Y calc +; +;calc screen X by multiplying X offset from center & final Z +; +;TEMP!!! begin +; BSSX pre_xval,32 +; BSSX pst_xval,16 +; BSSX dlt_xval,16 +; move *a0(OID),a3 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_1 +; move a7,@pre_xval,L +;#tmpx_1 +; PRJX2Z a7,a2,0 +; cmpi TYPBALL-CLSENMY,a3 +; jrnz #tmpx_2 +; move a7,@pst_xval +; move @pre_xval+16,a3 +; sub a7,a3 +; abs a3 +; move a3,@dlt_xval +;#tmpx_2 +;TEMP!!! end; was just PRJ + PRJX2Z a7,a2,0 + + addi 200,a7 ;make X 0-based from left of screen + sra 16,a5 ;shift down int part of OXANI & + sub a5,a7 ; take it back out of X + movx a7,a10 ;put X away in DESTY:X +; +;calc screen Y +; + subi GZBASE,a6 + jrge #zok + clr a6 +#zok move a6,a2 ; A2=A6 for later scale lookup + + move a6,a3 ;take 3/8 of A6 + sra 1,a6 + sra 3,a3 + sub a3,a6 + + addi GND_Y,a6 + sll 16,a6 + addxy a6,a10 + + btst B_NOSCALE,a1 ;does obj want Z-based scaling? + jrnz #noscl ; yes if !0 + + btst B_SHAD,a1 ;no. Is it a shadow-type obj? + jrz #notshad ; no if 0 + srl 1,a10 ;yes. Lose X lsb + move @PCNT,a5 ;make X even or odd to "shimmer" + srl 1,a5 ; the img + addc a10,a10 + jruc #noscl +; +;check screen side clips & get Z-based scale if visible +; +#notshad + move a10,*a0(OSCALE),L + + cmpxy a13,a10 + JRXGE #nxt ;Left edge past rclip? + + move a10,a3 ;add (non-scaled!) OSIZEY:OSIZEX to + addxy a9,a3 ; DESTY:X. Overkill if it gets smaller + cmpxy a14,a3 ; but what if it gets bigger?!? + JRXLT #nxt ;Rgt edge past lclip? + + srl 4,a2 ;clr low 4 bits of Z & + sll 6,a2 ; * scale table element size + + move *a0(ODATA_p),a5,L ;get *scale_t + add a2,a5 + move *a5,a5,L ;A5=SCALEY:X + + btst B_FLIPH,a12 + jrz #nofh2 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #nxt ;DMA irq active? Yes if + + jruc #dodma + + +#******************** +* Character generator for dma_objlst +* +* Enters with: +* A0 *Obj list +* A1 OFLAGS +* A4 *DMAQ next free spot +* A13 Screen BR +* A14 Screen TL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B5 OFLAGS offset +* B6 World center scrn X * 64K +* B7 Default scale +* B11 *DMACTRL +* +* Uses for DMA: +* A7 SCALEY:SCALEX +* A8 CNST:PAL +* A9 SIZEY:SIZEX +* A10 YPOS:XPOS +* A11 SAG +* A12 CTRL:OFST + + .align + + .ref init_convert_img +;DJT Start + .asg 12,NULL_MAXLEN +;DJT End + + SUBR char_gen + +;DJT Start + move *a0(ODATA_p),a11,L ;Get *plyrname +;DJT End + move b7,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L +;DJT Start + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +;DJT End +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS +;DJT Start + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz dma_objlst ;Done if there weren't any +;DJT End + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle dma_objlst + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc dma_objlst ;Reenter obj loop + +;DJT Start +#* + .align + + SUBR char_gen_2d + + move *a0(ODATA_p),a11,L ;Get *plyrname + movi >1000100,a7 ;SCALEY:SCALEX + move *a0(OPAL),a8,L ;OCNST:OPAL + move *a0(OYPOS),a10 ;OYPOS + move *a0(OMISC),a3 ;OXPOS + sll 16,a10 + movx a3,a10 ;-> OYPOS:OXPOS + move b2,a2 + addxy a2,a10 ;Add the page Y offset : XPad + move *a0(OCTRL),a5 ;OCTRL + andi DMAWAL|DMACAL,a5 ;-> CTRL + movi init_convert_img,a6,L + movk NAME_LETTERS,b2 ;Assume fixed 6 char + btst B_PIXSCAN,a1 ;Is it null-terminated or fixed 6? + jrz #fixed6 ; br=fixed 6 char + movk NULL_MAXLEN,b2 ;Max allowed just in case!! +#fixed6 + move a11,a1 + clr b0 ;Init char cnt +#lp + move *a1+,a11 ;Get next char *img + jrz #done ;Done if not a char (if 0) + sll 5,a11 + add a6,a11 + move *a11,a11,L + move *a11,a9,L ;ISIZEY:ISIZEX + move *a11(ICTRL),a12 ;ICTRL + add a5,a12 + sll 16,a12 ;-> CTRL:OFST + move *a11(ISAG),a11,L ;ISAG + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + zext a9 ;Clr SIZEY + addxy a9,a10 ;Add SIZEX for next XPOS + inc b0 + cmp b2,b0 ;Max length? + jrlo #lp +#done + move a2,b2 ;Restore B2 + move b0,b0 + jrz nxt_2dobj ;Done if there weren't any + + move a3,a3 ;Was OMISC 0? First time here if so + jrnz #strtdma + subxy a2,a10 ;Remove the page Y offset : XPad + zext a10 ;0->YPOS so XPOS is name pix width + sra 1,a10 + + move *a0(OIMG),a1,L ;Get default *img + move *a0(OXPOS),a2 ;OXPOS + move *a1(IANIOFFX),a3 ;IANIOFFX + add a3,a2 ;Calc obj ctr X coor + sub a10,a2 ;Sub .5 of width for new starting X + move a2,*a0(OMISC) ;Put it away for next time + + move a4,a1 ;Step thru DMAq just built to add the + move b0,a5 ; new X to the zero-based imgs + addi DMAHORIZ-DMAOFFST,a1 ;Ptr to 1st (last q'd) img X +#fixx + move *a1,a3 + add a2,a3 + move a3,*a1 + addi DMAWINDOW-DMAOFFST,a1 + dsj a5,#fixx + +#strtdma + add b0,b13 ;Inc DMA queue cnt + sub b13,b0 ;DMA irq active? Yes if <= + jrle nxt_2dobj + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + + jruc nxt_2dobj ;Reenter obj loop + +;DJT End + +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2d +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move *a0(OSCALE),a5,L + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS +;DJT Start + + btst B_CHARGEN,a1 ;Chargen obj type? Yes if !0 + jrnz char_gen_2d + +;DJT End + mmfm a3,a12,a11,a9,a8 + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + btst 7,a12 + jrnz #30 ;Zero compression on? + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + btst 7,a12 + jrnz #35 ;Zero compression on? + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + move a9,a6 ;Save VSize:HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + btst 7,a12 + jrz #nozc ;Zero compression off? + move a6,a9 ;Restore v:h size + jruc #noclip + +#nozc + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +;DJT Start + +nxt_2dobj +;DJT End +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Load DMA Q from obj list (2D type) +* A0=*Obj list +* A4=*DMAQ next free spot +* A13=Screen BR, A14=Screen TL +* B2=Y offset for top of page : XPad offset +* B4=World Y:X +* B5=OFLAGS offset +* B6=World center scrn X * 64K +* B11=*DMACTRL + +dma_objlst2dscl + +; movi >1000100,a5 ;A5=Y:X scale + jruc #nxt + + .align + +#lp + move b5,a3 + add a0,a3 + move *a3+,a1 ;Get OFLAGS + mmfm a3,a12,a11,a9,a8 + + move *a0(ODATA_p),a5,L ;Get scale value + + move *a0(OYVAL),a10,L ;Get int Y + + move *a0(OXPOS),a2 ;X + movx a2,a10 ;A10=Obj Y:X + btst B_SCRNREL,a1 + jrnz #noscl ;Screen relative XY? + move b4,a6 ;A6=World TL Y:X + subxy a6,a10 ;-world coord to get screen coord +#noscl + ;A8=Const:PAL + ;A9=VSize:HSize + ;A10=Dest Y:X + ;A11=*SAG + ;A12=Offset:Ctrl + +;Check for flipping, clipping, adjust offset, sag + + ;>Calc top,bot,lft,rgt clips + clr a3 ;A3=TL clip size + move a10,a2 + addxy a9,a2 ;BR Y:X + subxy a13,a2 ;A2=BR clip size + JRYGE #10 + movy a3,a2 ;Clr bclip if y neg +#10 JRXGE #20 + movx a3,a2 ;Clr rclip if x neg + +#20 move a14,a7 + subxy a10,a7 ;wstart - pt -> a7 (tc : lc) + JRYLT #30 + movy a7,a3 ;Top clip size + movy a14,a10 ;Adjust start position to window edge + +#30 JRXLT #35 + movx a7,a3 ;Left clip size + movx a14,a10 ;Adjust start position to window edge + +#35 move a2,b0 ;Save + add a3,a2 ;TL clip+BR clip + jrz #noclip ;Zero clip? + + + movx a9,a6 ;HSize + + subxy a2,a9 ;Get clipped size + JRXLE #nxt ;Totally clipped? + JRYLE #nxt + + clr a1 + movx a2,a1 + move a1,a1 + jrz #xclipzero + movx a9,a1 + subk 8,a1 + jrle #nxt ;<=8 wide? Skip so DMA doesn't lockup + +#xclipzero + movx a6,a9 ;Restore hsize + + movx a3,a1 ;A1=Left clip + + + btst B_FLIPH,a12 + jrz #nofh + + subxy a1,a10 ;Original X + + move b0,a1 ;LClip=RClip + zext a1 + subxy a1,a10 ;X-RClip + + +#nofh btst B_FLIPV,a12 + jrz #nofv + + move b0,a3 ;Bot clip + +#nofv srl 16,a3 ;A3=Top or bot clip + jrz #t0 + zext a6 + mpyu a6,a3 ;T or B clip * total hsize + + +#t0 + add a1,a3 ;Add left clip + tc*ths + move a12,a1 + sll 32-15,a1 ;Get bits 12-14 + srl 32-15+12,a1 + jrnz #not8 + movk 8,a1 +#not8 mpys a1,a3 ;# of bits to skip + add a3,a11 ;Add to SAG + sll 16,a2 + addxy a2,a12 ;Add clip offset to offset + + +#noclip + btst B_FLIPH,a12 + jrz #300 + + movx a9,a1 ;HSize + subk 1,a1 + zext a1 + addxy a1,a10 + +#300 btst B_FLIPV,a12 + jrz #400 + + movy a9,a1 ;VSize + srl 16,a1 + subk 1,a1 + sll 16,a1 + addxy a1,a10 + +#400 + move b2,a1 + addxy a1,a10 ;Add the page y offset : XPad + rl 16,a12 ;Flip ctrl & offset + mmtm a4,a5,a8,a9,a10,a11,a12 ;Save the dma regs + addk 1,b13 ;+1 Q cnt + jrgt #nxt ;DMA going? + + dint + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 + jrn #dmaok ;DMA busy? + + move b13,b13 + jrn #dmaok ;DMA int done? + + trap 1 ;Cause DMA int + +#dmaok eint +#nxt + move *a0,a0,L ;Get next link + jrnz #lp ;More? + rets +;DJT Start + .endif +;DJT End + + +#******************************* +* Display object lists, called by DIRQ + +DISPLAY + movi DMACTRL,b11 ;B11=*DMACTRL + + movi SCRNXP,b2 ;B2=Page y offset : XPad offset + movi [253,0],b3 + move @dpage,a1 + jrnz #p1 + movi [PAGE1YO,SCRNXP],b2 + movi [509,256],b3 +#p1 + movi dmaq0+QSIZE,a4 ;A4=*DMAQ for new data (Top) + clr b13 ;Kill DMA + move b13,*b11 + move b13,*b11 + movi >80000,b8 ;B8=*DMAREGS offset for 20Mb IROM mod + movi DMAREGS,b9 ;B9=*DMAREGS to restore B12 with + move b9,b12 ;B12=*DMAREGS + subk 1,b13 ;B13=Q count (-1) + move a4,b14 ;B14=*DMAQ for next fetch (Top) + + movi >30,b0 + move b0,*b12(30h) ;DMACONF (Top/Bottom) + move b3,*b12,L ;DMAWINDOW + + move @DISPLAYON,a0 + jrz #doff ;Stop DMA of objects except for score? + + movi WORLDTLX,b0 ;>Scroll world +; move @SCROLLX,b6,L +; move @SCROLLY,b7,L +; move *b0,b3,L +; add b6,b3 +; move b3,*b0+,L ;TLX +; move *b0,b4,L +; add b7,b4 +; move b4,*b0+,L ;TLY + + move *b0+,b3,L ;Quick version of ^ + move *b0+,b4,L + + srl 16,b3 + movx b3,b4 ;B4=World top left Y:X + move b4,*b0,L ;WORLDTL + + movi OFLAGS,b5 ;B5=Obj data offset + move b4,b6 + addi 200,b6 + sll 16,b6 ;B6=World center scrn X * 64K + move @SCRNLR,a13,L ;A13=Screen BR + move @SCRNTL,a14,L ;A14=Screen TL + + .if DEBUG + clr b3 ;trap1 cnt + .endif + + move @gndstat,a0 + jrz #70 ;Off? + callr gnd_dodma +#70 +; move @_3dstat,a0 +; jrz #80 ;Off? +; calla _3d_build +; callr _3d_draw +;#80 + move @dtype,a1 + jrnz #3dtype + + movi BAKLST,a0 + callr dma_objlst2d + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol2d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol2d + .endif + + movi OBJLST,a0 + callr dma_objlst2d + jruc #doff +#3dtype + jrgt #3dgame + + move @dcode_p,a0,L + jrnn #3dgame ;No special code? + call a0 + jruc #x +#3dgame +; movi BAKLST,a0 +; movi >1000100,b7 ;Original scale +; callr dma_objlst + + .if DEBUG + move @SLDEBUG,a0 + jrnn #nol3d + movi 31<<10+10<<5,a0 ;Proc usage + move a0,@ERASELOC +#nol3d + .endif + + movi OBJLST,a0 + movi >1000100,b7 ;Original scale + callr dma_objlst +#doff +; move @QDMAFLG,a2 +; jrnz #noman ;Q being modified? + move @DMAQCUR,a2,L + movi DMAQ+QMSIZE,a1 + cmp a1,a2 + jrhs #noman ;Empty? + move a1,@DMAQCUR,L ;Reset top of queue + + move b2,a5 + +#lp move -*a1,-*a4,L ;>Copy manual DMAQ to end of Q + move -*a1,-*a4,L + move -*a1,-*a4,L + move -*a1,a0,L + addxy a5,a0 ;+Y + move a0,-*a4,L + move -*a1,-*a4,L + move -*a1,-*a4,L + addk 1,b13 + cmp a2,a1 + jrhi #lp + + move *b11,b0 + jrn #noman ;DMA busy? + + move b13,b13 + jrn #noman ;DMA int done? + + setf 1,0,0 ;>Enable DMA int + movk 1,a1 + move a1,@INTENB+1 ;X1E + setf 16,1,0 + + trap 1 ;Cause DMA int +#noman +; movi nulldma,a0 ;>Put null DMA at end of Q +; mmfm a0,a7,a8,a9,a10,a11,a12 +; mmtm a4,a7,a8,a9,a10,a11,a12 + + move @HALT,a0 + jrnz #novel ;Skip vel update? + + movi OBJLST,a0 + move *a0,a0,L + jrz #novel + +; Velocity add loop + +#valp move a0,a1 + addk OXVEL,a1 + + mmfm a1,a2,a3,a4,a5,a6,a7 ;A7=XV, A6=YV, A5=ZV, A4=X, A3=Y, A2=Z + + add a5,a2 ;Add ZVEL to Z + move a2,-*a1,L + add a6,a3 ;Add YVEL to Y (Uses hidden cycle!) + move a3,-*a1,L + add a7,a4 ;Add XVEL to X ^ + move a4,-*a1,L + + move *a0,a0,L + jrnz #valp ;!End? + +#novel +#x +; .if DEBUG +; move @SLDEBUG,a0 +; jrnn #noline +; +; movi 31<<10+31<<5,a0 ;Proc usage +; move a0,@ERASELOC +; +;#dqwt move b13,b13 +; jrge #dqwt ;DMA busy? +; +; movi 20<<10,a0 ;DMA usage +; move a0,@ERASELOC +; +;#noline +; .endif + + rets + + +;Null dma data +;nulldma .long >80000000,IROM,0,>00010001,0,>1000100 + + +#******************************* +* Fill DMAQ with ground data for each line +* A4 *DMAQ next free spot +* A13 SCRNLR +* A14 SCRNTL +* B2 Y offset for top of page : XPad offset +* B4 World Y:X +* B11 *DMACTRL +* Trashes A0-A3,A5-A12,B0 +* A4 *DMAQ next free spot + + .asg 8,COURT_BC ;Court img bit count + +DMACRT .equ (((8|COURT_BC)<<12)|DMAWNZ)<<16 + + .asg 0,BNKCRT ;Court img IROM bank (0,1,2) + .asg 1,BNKOTD ;Outdoor court img IROM bank (0,1,2) + + .if 1 ;1 for locked court, 0 for new court + .ref COURT + .ref OUTDOOR +SAGCRT .equ COURT-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .else + .ref COURTNEW + .ref OUTDOOR +SAGCRT .equ COURTNEW-IROM+(GNDI_W/2-200)*COURT_BC+BNKCRT*>4000000 +SAGOTD .equ OUTDOOR-IROM+(GNDI_W/2-200)*COURT_BC+BNKOTD*>4000000 + .endif + + + SUBRP gnd_dodma + +;Always build the X table + + move @gndx,a2,L ;A2=16:16 mid-screen court X + move a2,a1 ;A1=A2 for divide + sll DIVRES,a1 ; shift up for DIVSLP frac + movi DIVSLP,a3 ;A3=per-line ratio + divs a3,a1 ;A1=per-line delta X + + movi gndpos_t,a0 ;A0=X table ptr + movi GND_H,a5 ;A5=# of lines to calc X's for +#do_x_t move a2,a3 ;Eliminate X frac & put in table + sra 16,a3 + move a3,*a0+ + add a1,a2 ;A2+=delta X + dsjs a5,#do_x_t + + cmpxy a14,a13 ;Screen closed? + jryle #exit + jrxle #exit + + movi gndpos_t+40*16,a3 ;A3=*1st court X + movi SAGCRT,a6 ;A6=*1st line centered of court img + move @pup_court,a2 ;Outdoor court? + jrz #crt ; br=no + movi SAGOTD,a6 ;A6=*1st line centered of court img +#crt + movi GNDI_W*COURT_BC,a2 ;K> A2=court img bit width + movi GNDI_H,a5 ;A5=court img line count + movi [GNDI_Y,0],a10 + move b4,a11 + movx a10,a11 + subxy a11,a10 ;A10=screen Y:X for court top + move a10,a9 ;Calc diff between court upper Y & + subxy a14,a9 ; screen upper Y + jryge #tyval ;Court above screen top? No if >= + + sra 16,a9 ;Pull down the line count + add a9,a5 ;Adjust court line count + jrle #exit ;No lines visible if new count <=0 + move a9,a7 + sll 4,a7 ;Lines over * gndpos_t element size & + sub a7,a3 ; add to X ptr (by subing a neg #) + mpys a2,a9 ;Lines over * court img bit width & + sub a9,a6 ; add to img ptr (by subing a neg #) + movy a14,a10 ;Set new court Y + +#tyval move a13,a9 ;Calc diff between screen lower Y & + subxy a10,a9 ; court upper Y + jryle #exit ;Court below screen bottom? Yes if >= + srl 16,a9 ;Pull down the line count (always +) + cmp a5,a9 ;More court lines than visible? + jrge #byval + move a9,a5 ;Adjust court count + +#byval move b2,a11 + addxy a11,a10 ;A10=DMA DEST Y:X + +;; move @crt_colors,a0,L +;; calla pal_getf +;; move a0,a8 + .ref crt_pal + move @crt_pal,a8 ;K> A8=DMA CONSTANT:PALETTE + + movi >1000100,a7 ;K> A7=DMA Y:X scale + movi [1,400],a9 ;K> A9=DMA VSIZE:HSIZE + movi DMACRT,a12 ;K> A12=DMA CONTROL:OFFSET + movi [1,0],a1 ;K> A1=Y:X inc + + .align +#lp move *a3+,a11 ;Get next line X + sll 3,a11 ;Make it 8-bit + add a6,a11 ;A11=DMA SOURCE + + mmtm a4,a7,a8,a9,a10,a11,a12 ;Save the DMA regs + addk 1,b13 ;Inc DMA queue cnt + jrp #next ;DMA irq active? Yes if + + + dint + setf 1,0,0 ;Enable DMA irq + movk 1,a0 + move a0,@INTENB+1 ;X1E + setf 16,1,0 + + move *b11,b0 ;DMA busy (will irq)? Yes if - + jrn #dmaok + trap 1 ;Cause DMA irq +#dmaok eint + +#next add a2,a6 ;->next img line + add a1,a10 ;->next Y + dsjs a5,#lp + +#exit rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Dump 3D data to DMA +* B2=Y offset for top of page : XPad offset +* B11=*DMACTRL +* B12=*End of DMA regs +* Trashes A0-A3,A5-A12,B0-B1 + + + .bss linelsxy ,32 + .bss linersxy ,32 + +D3XPTS .equ >140 ;UHL *Xformed points array (Cnt, XYZ,XYZ..) + + SUBRP _3d_draw ;B1 Free (B14) + + PUSH a4,a13,a14 + PUSH b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + + + setf 1,0,0 ;>Disable DMA interrupt + move sp,@INTENB+1 ;Clr X1E + setf 16,1,0 + + movi [1,1],b13 ;B13=Const 1:1 + +; clr b14 ;DEBUG + + movi >1000100,b5 ;B5=1:1 scale + movi IROM,b9 ;B9=*IROM + movi >800c<<16,b10 ;B10=OFFSET:CONTROL + + movi d3vis_p,a12 ;A12=*3D object + + +;D3PTS .equ >120 ;UHL *Points array (Cnt, XYZ,XYZ..) +; +; PUSH a0,a1 ;DEBUG +; movi d3vis_p,a1 +; move *a1,a0,L +; jrz #dx +;#debug move a1,a0 +; move *a0,a1,L +; jrnz #debug +; move *a0(D3PTS),a1,L +; jrz $ ;ERROR!!! +;#dx PULL a0,a1 + + + + .align + +#lpobj move *a12,a12,L + jrz #x ;End? + move a12,a14 + addi D3XPTS,a14 + move *a14+,a13,L ;A13=*Base of points_t + move *a14+,a14,L ;A14=*1st entry of face line_t + + move *a13+,a0 ;# pts + jrz #lpobj ;Not visable? + + +#facelp + move *a14+,a0 + move a0,b6 ;B6=Const:Pal for face + sll 16,b6 + move a14,a4 + movi >7fff,a8 ;>Find lowest/highest X Y + +;DO BETTER + move a8,a9 + not a9 ;>8000 + move a8,a10 + move a9,a11 + jruc dd150 + +#lp2 add a13,a1 ;+Base + move *a1+,a2 ;Get X + cmp a8,a2 + jrge #xbig ;Bigger X? + move a2,a8 ;New low +#xbig cmp a9,a2 + jrle #xsml ;Smaller X? + move a2,a9 ;New high +#xsml + move *a1,a1 ;Get Y + cmp a10,a1 + jrge #ybig ;Bigger Y? + move a1,a10 ;New low + move a4,a5 ;A5=*Left line line table +#ybig cmp a11,a1 + jrle dd150 + move a1,a11 ;New high + +dd150 move *a4+,a1 + jrnn #lp2 ;Good offset? + + + subk 16,a4 ;A4=*Null end entry of line_t + + + cmpi 200,a8 + jrge #nextf ;Face off screen? + cmpi -200,a9 + jrle #nextf ;Face off screen? + + + move a11,a0 + sub a10,a11 + jreq #nextf ;Height of 1? + + cmpi 254,a10 + jrge #nextf ;Off screen bottom? + cmpi -400,a10 + jrle #nextf ;Way off screen top? + + subi 253,a0 + jrle dd300 + sub a0,a11 +dd300 addk 1,a11 ;A11=Main loop cnt + + + sll 16,a10 ;A10=Dest Y:X + + move a5,a6 ;A6=*Rgt line line table + subk 16,a6 + + move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd500 ;!At start? + move a4,a5 ;Put at end + +dd500 move *a6+,a1 ;Get offset + add a13,a1 + cmp a4,a6 + jrlo dd550 ;!Past end + move a14,a6 ;Put at start +dd550 + move *a0,a2,L + move *a1,a3,L + move a2,@linelsxy,L ;Needed??? + move a3,@linersxy,L + + movk 1,b3 ;B3=Y cntdn till end of left line + movk 1,b4 ;B4=Y cntdn till end of rgt line + + + ;A8 Free + movi [1,0],a8 ;A8=Const 1:0 + +#linelp + + dsj b3,dd750 + +dd700 move -*a5,a0 ;Get offset + add a13,a0 + cmp a14,a5 + jrhi dd720 ;!At start? + move a4,a5 ;Put at end +dd720 + move *a0,a1,L + move @linelsxy,a2,L ;Start XY + move a1,@linelsxy,L + subxy a2,a1 + move a1,a7 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd700 ;Same Y? + + move a1,b3 ;New Y cnt + sll 16,a7 ;A7=Delta X + divs a1,a7 ;Divide DeltaX into Y increments + + sll 16,a2 ;A2=Left line X (16:16) + + +dd750 dsj b4,dd850 + +dd800 move *a6+,a0 ;Get offset + add a13,a0 + cmp a4,a6 + jrlo dd820 ;!Past end + move a14,a6 ;Put at start +dd820 + move *a0,a1,L + move @linersxy,a3,L ;Start XY + move a1,@linersxy,L + subxy a3,a1 + move a1,a9 + jrn #nextf ;Neg Y? + srl 16,a1 + jrz dd800 ;Different Y? + +dd840 move a1,b4 ;New Y cnt + sll 16,a9 ;A9=Delta X + divs a1,a9 ;Divide DeltaX into Y increments + + sll 16,a3 ;A3=Rgt line X (16:16) + + +dd850 add a7,a2 ;+Offset to left X + add a9,a3 ;^ rgt X + + cmp a3,a2 + jrgt #nextf ;X flipped? + + move a10,a10 + jrn #nextl ;Off screen top? + + move a2,a0 + sra 16,a0 ;Int (0=Screen center) + cmpi 200,a0 + jrge #nextl ;L line to rgt of screen? + addi 200,a0 + jrge dd1000 ;On screen? + clr a0 +dd1000 movx a0,a10 ;X pos + + move a3,a1 ;>Calc HSize + sra 16,a1 ;Int + addi 200,a1 + jrlt #nextl ;R line to left of screen? + sub a0,a1 ;Width + + add a1,a0 ;Rgt X + subi 400,a0 + jrlt dd1500 ;On screen? + subxy a0,a1 ;-difference + +dd1500 +; move a1,a0 ;DEBUG chk VS:HS +; srl 16,a0 +; jrnz $ +; move a1,a0 +; sll 16,a0 +; jrlt $ + move a1,b7 + addxy b13,b7 ;B7=VSIZE:HSIZE + + move a10,b8 + addxy b2,b8 ;Add the page y offset + +; move *b11,b0 +; jrnn #dfree +; addk 1,b14 ;DEBUG + +#dwait move *b11,b0 + jrn #dwait ;DMA busy? + + +#dfree mmtm b12,b5,b6,b7,b8,b9,b10 ;Set the dma regs + addi >c0,b12 ;Fix DMAREGS + + +#nextl + add a8,a10 ;Next Y + dsj a11,#linelp + + +#nextf move a4,a14 + addk 16,a14 + move *a14,a0 + jrnn #facelp ;Another set of lines? + + jruc #lpobj + + +#x PULL b3,b4,b5,b6,b7,b8,b9,b10,b13,b14 + PULL a4,a13,a14 + rets + +;DJT Start + .endif +;DJT End + + +#******************************* +* Manual DMA +* A1=Constant color:Palette +* A2=Vsize:Hsize +* A3=Dest Y:X +* A4=SAG +* A5=Offset:Control +* Trashes A0,A14 + + SUBR QDMAN +; movk 1,a0 +; move a0,@QDMAFLG ;Q being modified + + move @DMAQCUR,a14,L + cmpi DMAQ,a14 + jrls #x ;Q full? + + movi >1000100,a0 ;No scale + rl 16,a5 ;Flip DMA & offset + mmtm a14,a0,a1,a2,a3,a4,a5 + rl 16,a5 ;Flip DMA & offset + move a14,@DMAQCUR,L + +#x +; clr a0 +; move a0,@QDMAFLG + rets + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Turn on the 2d with scaling display mode +* Trashes scratch + + SUBRP display_2dsclmodeon + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +#drawcode + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + + +#******************************* +* Turn on the 2d, with scaling and stars, display mode +* Trashes scratch + + .asg MEGBIT1,STARBUF +NSTARS .equ 900 +STARSZ .equ 32*6+16 + + SUBRP display_2dsclstarmodeon + + movi NSTARS,b0 ;>Init star array + movi STARBUF,a1 + movi -1,a0 +#silp move a0,*a1,L ;X + addi STARSZ,a1 + dsj b0,#silp + + movi #drawcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + + rets + +******************************** +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A5-A12,B0-B3 + +CFRAC .equ 2 + + .bss starcolor ,16 + +#drawcode + PUSH a13,a14 + PUSH b4 + + movk 3,a0 + callr rnd + move @starcolor,a6 + add a0,a6 + move a6,@starcolor + sll 32-3-6,a6 + srl 32-3,a6 ;Remove fraction + sll 5+CFRAC,a6 + + + movi NSTARS,a5 ;>Find a free star + movi STARBUF,a2 + movk 3,a3 +#flp move *a2,a0,L ;X + jrn #found + addi STARSZ,a2 +#fnxt dsj a5,#flp + jruc #nofree + +#found movi [200,0],a0 ;>Create star + move a0,*a2+,L ;X + movi [252,0],a0 + move a0,*a2+,L ;Y + + clr a0 + move a0,*a2+,L ;XV + movi ->3e000,a0 + move a0,*a2+,L ;YV + + movi >7ff,a0 + callr rnd + subi >3ff,a0 + move a0,*a2+,L ;XA + movi >3ff,a0 + callr rnd + addi >7ff,a0 + move a0,*a2+,L ;YA + + move a6,*a2+ ;Color type + dsj a3,#fnxt +#nofree + + movi #star_p,a0 ;>Update stars + calla pal_getf + move a0,@DMACMAP + + movi 512*8,b3 + lmo b3,b0 + move b0,@CONVDP + clr b4 + + movi 1<<(32-5-CFRAC),a11 + movi [400,0],a13 ;A13=X max+1 + movi [254,0],a14 ;A14=Y max+1 + move b2,a12 + movi NSTARS,b0 + movi STARBUF,a8 +#lp +; move *a8+,a2,L ;X +; move *a8+,a3,L ;Y +; move *a8+,a5,L ;XV +; move *a8+,a6,L ;YV +; move *a8+,a9,L ;XA +; move *a8+,a10,L ;YA + mmfm a8,a2,a3,a5,a6,a9,a10 ;YA,XA,YV,XV,Y,X + move *a8+,a1 ;Color + move a10,a10 + jrn #nxt + + add a2,a5 + add a3,a6 + add a5,a9 + add a6,a10 + cmp a13,a10 + jrhs #offscr ;X off screen? + cmp a14,a9 + jrlo #plot ;Y on screen? +#offscr + movi -1,a0 + move a0,*a8(-STARSZ),L + jruc #nxt +#plot + move a10,*a8(-STARSZ),L + move a9,*a8(-STARSZ+32),L + move a6,*a8(-STARSZ+32*2),L + move a5,*a8(-STARSZ+32*3),L + + move a1,a0 + sll 32-5-CFRAC,a0 + add a11,a0 + jrc #maxc ;Overflow? +; cmpi 32*4,a1 +; jrge #offscr + addk 1,a1 + move a1,*a8(-16) +#maxc srl CFRAC,a1 ;Remove fraction + srl 16,a10 + movx a10,a9 + addxy a12,a9 + pixt a1,*a9.XY +#nxt + dsj b0,#lp + + PULL b4 + PULL a13,a14 + + movi BAKLST,a0 + callr dma_objlst2d + + movi OBJLST,a0 + jruc dma_objlst2dscl + +#star_p + .word 256 + COLORW 01,01,01, 02,02,02, 03,03,03, 04,04,04 ;Grey + COLORW 05,05,05, 06,06,06, 07,07,07, 08,08,08 + COLORW 09,09,09, 10,10,10, 11,11,11, 12,12,12 + COLORW 13,13,13, 14,14,14, 15,15,15, 16,16,16 + COLORW 17,17,17, 18,18,18, 19,19,19, 20,20,20 + COLORW 21,21,21, 22,22,22, 23,23,23, 24,24,24 + COLORW 25,25,25, 26,26,26, 27,27,27, 28,28,28 + COLORW 29,29,29, 30,30,30, 31,31,31, 31,31,31 + COLORW 01,01,00, 02,02,00, 03,03,00, 04,04,00 ;Yellow + COLORW 05,05,00, 06,06,00, 07,07,00, 08,08,00 + COLORW 09,09,00, 10,10,00, 11,11,00, 12,12,00 + COLORW 13,13,00, 14,14,00, 15,15,00, 16,16,00 + COLORW 17,17,00, 18,18,00, 19,19,00, 20,20,00 + COLORW 21,21,00, 22,22,00, 23,23,00, 24,24,00 + COLORW 25,25,00, 26,26,00, 27,27,00, 28,28,00 + COLORW 29,29,00, 30,30,00, 31,31,00, 31,31,00 + COLORW 01,00,00, 02,00,00, 03,00,00, 04,00,00 ;Red + COLORW 05,00,00, 06,00,00, 07,00,00, 08,00,00 + COLORW 09,00,00, 10,00,00, 11,00,00, 12,00,00 + COLORW 13,00,00, 14,00,00, 15,00,00, 16,00,00 + COLORW 17,00,00, 18,00,00, 19,00,00, 20,00,00 + COLORW 21,00,00, 22,00,00, 23,00,00, 24,00,00 + COLORW 25,00,00, 26,00,00, 27,00,00, 28,00,00 + COLORW 29,00,00, 30,00,00, 31,00,00, 31,00,00 + COLORW 00,01,00, 00,02,00, 00,03,00, 00,04,00 ;Green + COLORW 00,05,00, 00,06,00, 00,07,00, 00,08,00 + COLORW 00,09,00, 00,10,00, 00,11,00, 00,12,00 + COLORW 00,13,00, 00,14,00, 00,15,00, 00,16,00 + COLORW 00,17,00, 00,18,00, 00,19,00, 00,20,00 + COLORW 00,21,00, 00,22,00, 00,23,00, 00,24,00 + COLORW 00,25,00, 00,26,00, 00,27,00, 00,28,00 + COLORW 00,29,00, 00,30,00, 00,31,00, 00,31,00 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 00,00,10, 00,00,11, 00,00,12 + COLORW 00,00,13, 00,00,14, 00,00,15, 00,00,16 + COLORW 00,00,17, 00,00,18, 00,00,19, 00,00,20 + COLORW 00,00,21, 00,00,22, 00,00,23, 00,00,24 + COLORW 00,00,25, 00,00,26, 00,00,27, 00,00,28 + COLORW 00,00,29, 00,00,30, 00,00,31, 00,00,31 + COLORW 00,00,01, 00,00,02, 00,00,03, 00,00,04 ;Lt blue + COLORW 00,00,05, 00,00,06, 00,00,07, 00,00,08 + COLORW 00,00,09, 01,01,10, 02,02,11, 03,03,12 + COLORW 04,04,13, 05,05,14, 06,06,15, 07,07,16 + COLORW 08,08,17, 09,09,18, 10,10,19, 11,11,20 + COLORW 12,12,21, 14,14,22, 16,16,23, 18,18,24 + COLORW 20,20,25, 22,22,26, 24,24,27, 26,26,28 + COLORW 28,28,29, 30,30,30, 30,30,31, 31,31,31 + COLORW 01,00,01, 02,00,02, 03,00,03, 04,00,04 ;Purple + COLORW 05,00,05, 06,00,06, 07,00,07, 08,00,08 + COLORW 09,00,09, 10,00,10, 11,00,11, 12,00,12 + COLORW 13,00,13, 14,00,14, 15,00,15, 16,00,16 + COLORW 17,00,17, 18,00,18, 19,00,19, 20,00,20 + COLORW 21,00,21, 22,00,22, 23,00,23, 24,00,24 + COLORW 25,00,25, 26,00,26, 27,00,27, 28,00,28 + COLORW 29,00,29, 30,00,30, 31,00,31, 31,00,31 + COLORW 00,01,01, 00,02,02, 00,03,03, 00,04,04 ;Cyan + COLORW 00,05,05, 00,06,06, 00,07,07, 00,08,08 + COLORW 00,09,09, 00,10,10, 00,11,11, 00,12,12 + COLORW 00,13,13, 00,14,14, 00,15,15, 00,16,16 + COLORW 00,17,17, 00,18,18, 00,19,19, 00,20,20 + COLORW 00,21,21, 00,22,22, 00,23,23, 00,24,24 + COLORW 00,25,25, 00,26,26, 00,27,27, 00,28,28 + COLORW 00,29,29, 00,30,30, 00,31,31, 00,31,31 +;DJT Start + .endif +;DJT End + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Zeros velocities for all objects on OBJLST + +STOPOBJS + clr a0 + movi OBJLST,a1 + jruc so20 + +so10 move a0,*a1(OXVEL),L + move a0,*a1(OYVEL),L + move a0,*a1(OZVEL),L +so20 move *a1,a1,L + jrnz so10 + + rets + + +******************************** +* Sort object list in Z:Y priority +* Trashes A0-A7 + + .align + + SUBR obj_yzsort + + movi OBJLST,a0 + movk 1,a1 ;Lowest Z + sll 31,a1 ;Make >80000000 + jruc yzlp + +yz0 move *a2(OZPOS),a6 ;Get Z + move *a2(OYPOS),a7 ;Get Y + cmp a1,a6 + jrgt priok ;Next Z > Current Z? + jrlt priswap + + cmp a5,a7 + jrge priok ;Next Y > Current Y? + +priswap dint ;>Make current after next + move a2,*a4,L ;Point last to next + move *a2,*a0,L ;Point current to block after next + move a0,*a2,L ;Point next to current + eint + move a2,a4 + jruc yzlp ;Continue sort of current obj + +priok move a0,a4 ;A4=*Last obj + move a2,a0 ;A0=*Current obj + move a6,a1 ;A1=Current Z + move a7,a5 ;A5=Current Y + +yzlp move *a0,a2,L ;A2=*Next obj + jrnz yz0 + + rets + + +************************************************************************** +* TEST IF OBJECT ON SCREEN +* A8=OBJECT +* RETURNS Z IF ON SCREEN + +*ENTER HERE AND PROVIDE YOUR OWN SCREEN BOUNDRIES +SCRTSTG + mmtm sp,a1,a2,a3 + jruc scrtst1 + +*NORMAL SCREEN BOUNDRIES +SCRTST + mmtm sp,a1,a2,a3 + move @SCRNTL,a2,L ;Get screen top left + move @SCRNLR,a3,L ;Get screen lower rgt + +scrtst1 move *a8(OYPOS),a0 + move *a8(OXPOS),a1 + sll 16,a0 + movx a1,a0 ;get top left of object + move @WORLDTL,a1,L + subxy a1,a0 ;subtract out world base + move *a8(OSIZE),a1,L + addxy a0,a1 ;get lower rt of object + + cmpxy a3,a0 ;is it lower than lower rt? + JRYGE scrtf_d ;lower + JRXGE scrtf_r ;to the right + + cmpxy a2,a1 + JRYLE scrtf_u ;above... + JRXLE scrtf_l ;to the left.. + + mmfm sp,a1,a2,a3 + clr a0 ;On screen Z + rets +scrtf_l movi 1,a0 ;Pass NZ + mmfm sp,a1,a2,a3 + rets + +scrtf_r movi 2,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_u movi 3,a0 + mmfm sp,a1,a2,a3 + rets + +scrtf_d movi 4,a0 + mmfm sp,a1,a2,a3 + rets + + +#******************************* +* Initialize display system +* Trashes scratch + + SUBR display_init + + pushst + dint + movi DIE+X2E,a0 + move a0,@INTENB ;Display int on, DMA int off + + clr a0 + move a0,@DMACTRL ;>Init DMA + move a0,@DMACTRL + move a0,@CMAPSEL ;Clear color map select + move a0,@DMATEST + move a0,@DMACONF + movi [511,0],a1 ;L/R (full width to fix glitch) + move a1,@DMAWINDOW,L + movi >30,a1 + move a1,@DMACONF ;Top/Bottom + movi [509,0],a1 + move a1,@DMAWINDOW,L + movi >1000100,a1 + move a1,@DMASCALEX,L + + movi -1,b13 ;DMAQ cnt + + clr a1 ;>Clr video mem + movi (SCRNE-512*8*2)/64,b0 +#clp move a0,*a1+,L + move a0,*a1+,L + dsj b0,#clp + ;>Set autoerase lines + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi ERASECOL,a14 ;Color pair + movi 512*8*2/16,b0 +#lp move a14,*a1+ + dsj b0,#lp + + + movi SCRNST,a1 ;Screen top left [Y,X] + move a1,@SCRNTL,L + movi SCRNEND,a1 ;Screen lower right [Y,X] + move a1,@SCRNLR,L + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + move a0,@SCROLLX,L + move a0,@SCROLLY,L + + move a0,@BAKLST,L ;Null backgnd object list + move a0,@OBJLST,L ;Null object list + + move a0,@dcode_p,L + + movi DMAQ+QMSIZE,a1 + move a1,@DMAQCUR,L ;Init misc DMA queue + + movi OBJSTR,a1,L ;>Init free list + move a1,@OFREE,L + movi NOBJ,b0 ;# of object blocks + +#olp move a1,a14 + addi OBSIZ,a1 + move a1,*a14,L ;link em up + dsj b0,#olp + + move a0,*a14,L ;Null end + + popst + + rets + + +******************************** +* Get a free object block +* Trashes scratch +* >A0=*Object or 0 (Z) + +GETOBJ + move @OFREE,a0,L + jrz nonelft ;None free? + + move *a0,a1,L + move a1,@OFREE,L ;Unlink + clr a1 + move a1,*a0(OPLINK),L + move a1,*a0(ODATA_p),L +getox + move a0,a0 + rets + +nonelft + .if DEBUG + LOCKUP + eint + .else + CALLERR 3,0 + .endif + jruc getox + + +******************************** +* Add object to free list +* Can trash A0-A1 (currently doesn't) + +FREEOBJ + move @OFREE,*a0+,L + subk 32,a0 + move a0,@OFREE,L + rets + + +#******************************* +* Unlink an object from object list +* A0=*Obj +* Trashes scratch + +; SUBR obj_unlink +; +; movi OBJLST,a14 +; +;#lp move a14,a1 ;A1=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #err +; cmp a14,a0 +; jrne #lp +; +; move *a0,*a1,L ;Unlink from obj list +; rets +; +;#err +; .if DEBUG +; LOCKUP +; eint +; .endif +; rets + + +******************************** +* Insert an object block into an object list +* List is sorted by increasing z and increasing y within constant z + + +#******************************* +* Insert background object +* A0=*Obj +* Trashes scratch + +INSBOBJ + movi BAKLST,a14 + jruc #strt + +******************************** +* Insert foreground object +* A0=*Obj +* Trashes scratch + +INSOBJ + + movi OBJLST,a14 + +#strt PUSH a2,a3,a4 + + move *a0(OZPOS),a1 + move *a0(OYPOS),a4 +#lp + move a14,a2 ;A2=*prev + move *a14,a14,L ;A14=*next + jrz #x + move *a14(OZPOS),a3 + cmp a3,a1 + jrgt #lp + jrlt #x + + move *a14(OYPOS),a3 ;Test y position + cmp a3,a4 + jrgt #lp + + +#x move a14,*a0,L ;Put *next in new block + move a0,*a2,L ;Put *new in prev block + + PULL a2,a3,a4 + rets + + +#******************************* +* Delete background object +* A0=*Obj + +DELBOBJ + + movi BAKLST,a14 + jruc #lp + + +******************************** +* Delete foreground object +* A8=*Obj + +DELOBJA8 + + move a8,a0 + +******************************** +* Delete foreground object +* A0=*Obj +* Trashes scratch + +DELOBJ + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz delerr + cmp a14,a0 + jrne #lp + + move *a0,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a0(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a0+,L ;Add to free list + subk 32,a0 + move a0,@OFREE,L + +#x rets + +delerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +******************************** +* FRANIM list an object, delete it and DIE +* A8=*Obj +* A9=*FRANIM list + +FRQDELDIE + + JSRP FRANIMQ + +#******************************* +* Delete foreground object and DIE +* A8=*Obj + +DELOBJDIE + + movi OBJLST,a14 + +#lp move a14,a1 ;A1=*Prev + move *a14,a14,L ;A14=*Next + jrz doderr + cmp a14,a8 + jrne #lp + + move *a8,*a1,L ;Unlink from obj list + + clr a1 + move a1,*a8(OXPOS) ;Indicates not in use for collisions + + move @OFREE,*a8+,L ;Add to free list + subk 32,a8 + move a8,@OFREE,L + +#x jauc SUCIDE + +doderr + .if DEBUG + LOCKUP + eint + .else + CALLERR 1,0 + .endif + jruc #x + + + +#******************************* +* Delete one class from the obj list +* A0=OID +* Trashes scratch + +obj_del1c + + clr a1 + +******************************** +* Delete a class from the obj list +* A0=OID +* A1=!Mask (Bits to remove) +* Trashes scratch + +obj_delc + move a2,b0 + move a3,b1 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match + +#lp move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x + +#cmp move *a14(OID),a2 + + cmpi TRANS_OBJ_ID,a2 ;transition effect obj. ? + jreq #lp ;br=yes + + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + + move *a14,*a3,L ;Unlink from obj list + + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp + +#x + move b1,a3 + move b0,a2 + rets + + + +********************************************** +* Delete the TRANSITION objs from the obj list +* A0=OID +* Trashes scratch + +del_transition_objs + move a2,b0 + move a3,b1 + movi OBJLST,a14 +; sext a0 +#dto_1 move a14,a3 ;A3=*Prev + move *a14,a14,L ;A14=*Next + jrz #x1 +#cmp1 move *a14(OID),a2 + cmp a0,a2 + jrne #dto_1 + move *a14,*a3,L ;Unlink from obj list + move @OFREE,*a14+,L ;Add to free list + subk 32,a14 + move a14,@OFREE,L + move *a3,a14,L + jrnz #cmp1 +#x1 move b1,a3 + move b0,a2 + rets + + + +#******************************* +* Check objlst for an object with a certain OID +* A0=OID +* A1=!Mask (Bits to remove) +* >A0=*Obj or 0 (Z) +* Trashes scratch + +EXISTOBJ + move a2,b0 + + movi OBJLST,a14 + sext a0 + andn a1,a0 ;Form match +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + andn a1,a2 ;Mask + cmp a0,a2 + jrne #lp + +#x move b0,a2 + move a14,a0 + rets + + +#******************************* +* Check if object on free list +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +;ISFREE +; movi OFREE,a1 +; jruc #lp + + +******************************** +* Check if object on OBJLST +* A0=*Obj +* >A0=*Obj or 0 (Z) +* Trashes scratch + +ISOBJ + movi OBJLST,a1 + +#lp move *a1,a1,L + jrz #x ;End? + cmp a0,a1 + jrne #lp ;No match? + + move a0,a0 ;Clr Z + rets + +#x clr a0 ;Set Z + rets + + +******************************** +* Add world coordinates to an object +* A0=*Obj +* Trashes scratch, !A0 + + SUBR obj_addworldxy + + move @WORLDTLX,a14,L + move *a0(OXVAL),a1,L + add a14,a1 + move a1,*a0(OXVAL),L + + move @WORLDTLY,a14,L + move *a0(OYVAL),a1,L + add a14,a1 + move a1,*a0(OYVAL),L + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* ADJNEWTL - ADJUST AN OBJECT TO A NEW SET OF X,Y WORLD COORDINATES * +* BEFORE THEY ARE STORED(TAKE EFFECT). * +* NOTE: CURRENT OBJECT COORDS. MUST BE ABSOLUTE WORLD. * +* A0 = PTR TO OBJECT * +* A4 = NEW WTLX, 32 BITS * +* A5 = NEW WTLY, 32 BITS * + +ADJNEWTL + PUSH a1,a2 + CALLR GSCRNREL ;SCREEN RELATIVE PLEASE + ADD A4,A1 + ADD A5,A2 ;ADJUST + MOVE A1,*A0(OXVAL),L + MOVE A2,*A0(OYVAL),L ;STORE + PULL a1,a2 + RETS + + +************************************************************************** +* * +* GSCRNREL - GET THE SCREEN RELATIVE X,Y COORDINATES OF AN OBJECT * +* IT IS ASSUMED THATE THE CURRENT X,Y COORDINATES ARE * +* WORLD ABSOLUTE. * +* A0 = PTR TO THE OBJECT BLOCK * +* RETURNS * +* A1 = X SCREEN RELATIVE, 32 BITS * +* A2 = Y SCREEN RELATIVE, 32 BITS * + +GSCRNREL + PUSH a5 + MOVE @WORLDTLX,A5,L + MOVE *A0(OXVAL),A1,L + SUB A5,A1 + MOVE @WORLDTLY,A5,L + MOVE *A0(OYVAL),A2,L + SUB A5,A2 + PULL a5 + RETS + + +************************************************************************** +* * +* SCRNRELV - MAKE THE X & Y VELOCITIES OF AN OBJECT RELATIVE TO THE * +* SCREEN. IN OTHER WORDS, ADJUST THEM SO THAT THE CURRENT * +* SCROLL RATE DOESN'T AFFECT THEM. * +* A0 = PTR TO OBJECT * +* * +************************************************************************** + +SCRNRELV + PUSH a1,a5 + MOVE @SCROLLX,A5,L + MOVE *A0(OXVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OXVEL),L + MOVE @SCROLLY,A5,L + MOVE *A0(OYVEL),A1,L + ADD A5,A1 + MOVE A1,*A0(OYVEL),L + PULL a1,a5 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* Adjust current object image with respect to it's anipt and flip flags +* A0=*Object +* A2=New YVAL +* A3=New XVAL +* A4=New FLAGS (Only DMA bits) +* Trashes A1,A14,B0-B1 +* >A2=Adjusted YVAL +* >A3=Adjusted XVAL + +GANISAG + PUSH a4,a6,a7 + + PUSH a2 + move *a0(OIMG),a1,L + move *a1,a2,L ;ISIZE + move a2,*a0(OSIZE),L + callr GANIOF + PULL a2 + + sub a6,a3 + sub a7,a2 ;adjust upper left corner + move a3,*a0(OXVAL),L + move a2,*a0(OYVAL),L + + move *a1(ICTRL),a1 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a1,a4 + move a4,*a0(OCTRL),L ;&OFFSET + + PULL a4,a6,a7 + rets + + +******************************** +* Begin an object +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* >A8=*Obj +* Trashes scratch + +BEGINOBJ + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJ2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJ2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move *a2(ICMAP),a0,L ;Get *palette + .if DEBUG + jrnn bopalerr ;No pallette? + .endif + calla pal_getf + +bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc bo20 + .endif + +begobjerr + .if DEBUG + LOCKUP ;Out of objects! + eint + .else + CALLERR 3,7 + .endif + move @OBJLST,a8,L ;Pass 1st obj on list + PULL a2,a3,a4,a6,a7,a9,a10 + rets + + + +#******************************* +* Begin an object with specified palette +* A0=XVAL, A1=YVAL, A2=*IMG, A3=ZPOS, A4=FLAGS, A5=OID, A6=XVEL, A7=YVEL +* B0=*Palette +* >A8=*Obj +* Trashes scratch + +BEGINOBJP + move @WORLDTLX,a8,L ;Adjust for world coord + add a8,a0 + btst B_3D,a4 + jrnz BEGINOBJP2 ;No Y add for 3D? + move @WORLDTLY,a8,L + add a8,a1 + +BEGINOBJP2 + PUSH a2,a3,a4,a6,a7,a9,a10 + move a0,a9 ;X + move a1,a10 ;Y + + move b0,a0 ;Get *palette + .if DEBUG + jrnn #bopalerr ;No pallette? + .endif + calla pal_getf + +#bo20 move @OFREE,a8,L ;Pointer to next available obj block + jrz begobjerr ;No objs? + move *a8,a1,L + move a1,@OFREE,L ;Adjust pointer to free list + + move a0,*a8(OPAL),L ;Set pallette & constant + clr a0 + move a0,*a8(ODATA_p),L ;Clr stuff + move a0,*a8(OXANI),L + move a0,*a8(OZVEL),L + move a0,*a8(OMISC) + +;oscale + movi 01000100H,a0 + move a0,*a8(OSCALE),L + + move a3,*a8(OZPOS) + move a5,*a8(OID) + move a6,*a8(OXVEL),L + move a7,*a8(OYVEL),L + + move a2,a1 ;*Img + move *a1,a2,L ;ISIZE + callr GANIOF ;Adjust animation offset + move *a1(ISAG),a3,L ;Get top left sag + + sub a6,a9 ;- x anioff + sub a7,a10 ;- y anioff + move a9,*a8(OXVAL),L + move a10,*a8(OYVAL),L + + move a1,*a8(OIMG),L + move a2,*a8(OSIZE),L + move a3,*a8(OSAG),L + move a4,*a8(OFLAGS) + move *a1(ICTRL),a0 ;Get DMA flags + andi >803f,a4 ;Kill mode bits + or a0,a4 + move a4,*a8(OCTRL),L ;&OFSET + + PULL a2,a3,a4,a6,a7,a9,a10 + + move a13,*a8(OPLINK),L + move a8,a0 + jruc INSOBJ ;Insert object into list + + + .if DEBUG +#bopalerr + LOCKUP ;Object doesn't have pallette! + eint + clr a0 + jruc #bo20 + .endif + + +#******************************* +* Set new image for an object +* A1=*Image hdr +* A4=New FLAGS +* A8=*Obj +* Trashes A1,A14 + + SUBR ANI + + PUSH a0,a2,a3,a4,a5,a6,a7 + + cmpi ROM,a1 + jrlo anierr + + move a1,a3 + move a4,a5 + move *a8(OIMG),a1,L + move *a8(OCTRL),a4 + cmp a1,a3 + jrne #1 ;Different img? + + sext a5 + cmp a4,a5 + jreq #x ;All the same? + +#1 move *a8(OSIZE),a2,L + callr GANIOF ;Get old animation offset + move a3,a1 ;New OIMG + srl 6,a4 + sll 6,a4 + or a5,a4 ;Set new OCTRL + move a6,a0 + move a7,a5 + move *a1(ISAG),a3,L ;Get top left sag + move *a1,a2,L ;ISIZE + callr GANIOF ;Get new animation offset + move a1,*a8(OIMG),L + sub a6,a0 ;Subtract new from old + sub a7,a5 + zext a4 ;Zero offset in A4 + + move a8,a6 ;Get push address of octrl,osag,osize + addi OCTRL+>60,a6 + mmtm a6,a2,a3,a4 ;Save new data + + subi OCTRL-OXVAL,a6 + move *a6,a7,L ;New OXVAL + add a0,a7 + move a7,*a6+,L + move *a6,a7,L ;New OYVAL + add a5,a7 + move a7,*a6,L + +#x PULL a0,a2,a3,a4,a5,a6,a7 + rets + +anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,7 + .endif + jruc #x + + +#******************************* +* Change an objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New flip flags & const +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq + + + PUSH a2,a3 + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + callr anipt_getxy + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + setf 5,0,0 + move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits + setf 6,0,0 + move a3,*a8(OCTRL) ;Write 6 low bits + setf 16,1,0 + + move a0,a2 + move a1,a3 + callr anipt_getxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x PULL a2,a3 + rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + +#******************************* +* Get an objects anipt XY (Doesn't check VFLIP) +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBRP anipt_getxy + + move a2,b0 + + move *a8(OIMG),a2,L + + move *a2(IANIOFFX),a0 + sll 16,a0 + move *a2(IANIOFFY),a1 + sll 16,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + + +#x move b0,a2 + rets + + + +#******************************* +* Change an objects image (doesn't check flip flags) +* A0=*New image +* A1=New OCTRL +* A8=*Obj +* Trashes scratch + + SUBRP obj_aniq_cnoff + + move a2,b0 + + move a1,*a8(OCTRL) ;Write new ctrl + + move *a8(OIMG),a14,L + move *a14(IANIOFFX),a2 + move *a14(IANIOFFY),a14 + + move a0,*a8(OIMG),L + move *a0(0),*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + + move *a0(IANIOFFY),a1 + move *a0(IANIOFFX),a0 + + sub a0,a2 ;Subtract new from old + sub a1,a14 + sll 16,a2 + sll 16,a14 + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a1,L ;New OXVAL + add a2,a1 + move a1,*a0+,L + move *a0,a1,L ;New OYVAL + add a14,a1 + move a1,*a0,L + + move b0,a2 + rets + + + +#******************************* +* Change an scaled objects image (Doesn't check VFLIP) +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* Trashes scratch, A2,A3 + + .ref anipt_getsclxy + + SUBRP obj_aniq_scld + + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + + calla anipt_getsclxy + + movb a3,*a8(OCTRL) + + move a2,*a8(OIMG),L + move *a2(0),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move a0,a2 + move a1,a3 + calla anipt_getsclxy + + sub a0,a2 ;Subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;Save scaled anipt + + move a8,a0 ;Get base address + addi OXVAL,a0 + move *a0,a14,L ;New OXVAL + add a2,a14 + move a14,*a0+,L + move *a0,a14,L ;New OYVAL + add a3,a14 + move a14,*a0,L + +#x rets + + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,0 + .endif + jruc #x + + + +******************************** +* Get the x and y positions of an objects animation point +* A8=*Object +* Trashes scratch +* >A2=Ani pt Y 16:16 +* >A3=Ani pt X 16:16 + +GETANIXY + PUSH a4,a6,a7 + move *a8(OIMG),a1,L + move *a8(OSIZE),a2,L + move *a8(OCTRL),a4 + callr GANIOF + move *a8(OXVAL),a3,L + move *a8(OYVAL),a2,L + add a6,a3 + add a7,a2 + PULL a4,a6,a7 + rets + + +#******************************** +* Get animation offset (Fast!) +* A1=*Image header, A2=H:W, A4=OCTRL +* Trashes A14 +*Rets: +* A6=X ani offset * 64K +* A7=Y ani offset * 64K + +GANIOF + move *a1(IANIOFF),a6,L + cmpi ROM,a1 + jrlo #err + +#h clr a7 + movy a6,a7 + sll 16,a6 ;Move to upper word + + btst B_FLIPH,a4 + jrz #v + move a2,a14 + subk 1,a14 + sll 16,a14 ;Move W to upper word + neg a6 + add a14,a6 ;Sub Width-1 + +#v btst B_FLIPV,a4 + jrz #x + move a2,a14 + neg a7 + srl 16,a14 + subk 1,a14 + sll 16,a14 + add a14,a7 ;Sub Hgt-1 + +#x rets + +#err clr a6 + jruc #h + + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen out (JSRP) + + .asg MEGBIT0,SCRNBUF + .asg MEGBIT1,PALBUF + + .bss scrnscl ,16 + + SUBR scrn_scaleout + + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + + movi >160,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + move a0,@IRQSKYE + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 3,a0 + add a0,a5 + move a5,*a14 + cmpi >7000,a5 + jrlt #lp + + clr a0 + move a0,@dcode_p,L + + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + + RETP + +#initcode + callr scrn_copy + movi scrn_scale,a0 + move a0,@dcode_p,L + jump a0 +;DJT Start + .endif +;DJT End + + +#******************************* +* Initialization for scrn_scalein (JSRP) + + SUBR scrn_scaleininit + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + SLEEPK 2 + + RETP + +;DJT Start + .if 0 +;DJT End +#******************************* +* Scale screen in (JSRP) + + SUBR scrn_scalein + + PUSHP a8 + + move @HALT,a0 + PUSHP a0 + movk 1,a0 + move a0,@HALT + + move @dtype,a0 + PUSHP a0 + move @gndstat,a0 + PUSHP a0 + move @dcode_p,a0,L + PUSHP a0 + + movi >7000,a0 + move a0,@scrnscl + + movi #initcode,a0 + move a0,@dcode_p,L + movi -1,a0 + move a0,@dtype + clr a0 + move a0,@gndstat + + + .if DEBUG +; movi >1a0,a0 +; move a0,@scrnscl +; SLEEP TSEC*2 + .endif + + +#lp SLEEPK 1 + + movi scrnscl,a14 + move *a14,a5 + move a5,a0 + srl 2,a0 + sub a0,a5 + move a5,*a14 + cmpi >100,a5 + jrgt #lp + + + PULLP a0 + move a0,@dcode_p,L + PULLP a0 + move a0,@gndstat + PULLP a0 + move a0,@dtype + + PULLP a0 + move a0,@HALT + + + PULLP a8 + RETP + + +#initcode + callr scrn_copy + movi scrn_scaledison,a0 + move a0,@dcode_p,L + jruc scrn_scale + + +#******************************* +* B2=Y offset for top of page : XPad offset +* Trashes A0-A3,A7 + + SUBRP scrn_copy + +; +; THIS COULD BE A PROBLEM.... +; + move b2,a0 + srl 16,a0 + xori >100,a0 ;Flip to the page being shown + sll 12,a0 ;*512*8 + addi SCRNXP*8,a0 ;A0=*Scrn mem + PUSH a0 + + movi SCRNBUF,a1 + movi 254,a3 + movi (512-400)*8,a7 +#cslp + movi 400/16,a2 +#cslp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cslp2 + + add a7,a0 + add a7,a1 + dsj a3,#cslp + + move @SYSCOPY,a0 + + .if WWFUNIT + andni PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else + andni 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + PULL a0 + movi PALBUF,a1 + movi 254,a3 +#cplp + movi 400/16,a2 +#cplp2 + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + move *a0+,*a1+,L + dsj a2,#cplp2 + + add a7,a0 + add a7,a1 + dsj a3,#cplp + + move @SYSCOPY,a0 + + .if WWFUNIT + ori PALENB,a0 + move a0,@SYSCOPY + .if DEBUG + andni LEDON,a0 + ori WROMINTCLR,a0 + .endif + .else +; ori 100000b,a0 + move a0,@SYSCOPY + .if DEBUG + andni 1000000b,a0 + .endif + .endif + + move a0,@SYSCTRL + + rets + + +#******************************* +* Copy screen data (throw out 1 in 5 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale140 + + PUSH a4,a14 + + movi >140,a5 + + move b2,a1 + srl 16,a1 + addi 25,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+40*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/5,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-320)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + + +#******************************* +* Copy screen data (throw out 1 in 3 pixels) +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale180 + + PUSH a4,a14 + + movi >180,a5 + + move b2,a1 + srl 16,a1 + addi 42,a1 + sll 12,a1 ;*512*8 + addi SCRNXP*8+68*8,a1 ;A1=*Scrn mem + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + addi SCRNBUF,a2 + addi PALBUF,a3 + movi 400/2/3,b0 ;Copy 1 line +#cslp + move *a3,*a6 ;Set pal latch + addk 16,a3 + move *a2+,*a1+ ;Copy 2 pixels + + move *a3,*a6 + addk 16,a3 + move *a2+,*a1+ + + addk 16,a3 + addk 16,a2 + + dsj b0,#cslp + + addi (512-264)*8,a1 + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets + + +******************************** + + SUBRP scrn_scaledison + + movi HEBLNKINIT,a0 ;Display on + move a0,@HEBLNK + movi scrn_scale,a0 + move a0,@dcode_p,L + + +#******************************* +* Copy screen data with variable down scaling +* B2=Y offset for top of page : XPad offset + + SUBRP scrn_scale + + move @scrnscl,a5 + cmpi >168,a5 + jrlt scrn_scale140 + cmpi >190,a5 + jrlt scrn_scale180 + + PUSH a4,a14 + + move b2,a9 + srl 16,a9 + movi 127<<8,a3 + divu a5,a3 + sub a3,a9 + addi 127,a9 + sll 12,a9 ;*512*8 + + addi (SCRNXP+200)*8,a9 ;A9=*Scrn mem + movi 100<<8,a3 + divu a5,a3 + sll 4,a3 ;*16 + sub a3,a9 + + movi DMACMAP,a6 + clr a7 ;Y line 8:8 + movi 200<<8,a10 +#lp + move a7,a2 + srl 8,a2 + sll 12,a2 ;*512*8 + move a2,a3 + + move a9,a1 + addi SCRNBUF,a2 + addi PALBUF,a3 + clr a8 ;X 8:8 +#cslp + move *a3,*a6 ;Set pal latch + move *a2,*a1 ;Copy 2 pixels + addk 16,a1 + + move a8,a0 + add a5,a8 + sra 8,a0 + move a8,a14 + sra 8,a14 + sub a0,a14 + +#nxtp + addk 16,a3 + addk 16,a2 + subk 1,a14 + jrgt #nxtp + + cmp a10,a8 + jrlt #cslp + + + addi 512*8,a9 ;Next line + + add a5,a7 + cmpi 254<<8,a7 + jrlt #lp + + +#x PULL a4,a14 + rets +;DJT Start + .endif +;DJT End + +#******************************* +* Object Z scaling math values +* +* Scale base constants to derive everything else from +* +;Original set +; .asg >180,S_XBEG ;Begining scale values for +; .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp +; +; .asg >100,S_XEND ;Ending scale values for +; .asg >100,S_YEND ; ref plyr (6'8") @ crt bt + + .asg >188,S_XBEG ;Begining scale values for + .asg >180,S_YBEG ; ref plyr (6'8") @ crt tp + + .asg >100,S_XEND ;Ending scale values for + .asg >f8,S_YEND ; ref plyr (6'8") @ crt bt + + .asg 1024,Sp_XRES ;Scale parameter resolutions + .asg 1024,Sp_YRES ; (># = bigger image) +; +; Court area element cnts +; + .asg 0,TOP_PAD ;Pad @ Z bt + .eval (CZMIN-GZMIN)/16, TOP_C ;Z bt to crt tp + .eval (CZMAX-GZMIN)/16-TOP_C, CRT_C ;Crt tp to crt bt + .eval (GZMAX-GZMIN)/16-TOP_C-CRT_C,BOT_C ;Crt bt to Z bt + .asg 8,BOT_PAD ;Pad @ Z tp +; +; Scale-rate subregion element cnts +; +;Original set +; .eval TOP_PAD+TOP_C, TOPRGN_C +; .eval CRT_C*3/8, RGN1_C +; .eval CRT_C*3/8, RGN2_C +; .eval CRT_C-RGN2_C-RGN1_C,RGN3_C +; .eval BOT_PAD+BOT_C, BOTRGN_C + + .eval TOP_PAD+TOP_C, TOPRGN_C + .eval CRT_C*3/8, RGN1_C + .eval CRT_C*3/8, RGN2_C + .eval CRT_C-RGN2_C-RGN1_C,RGN3_C + .eval BOT_PAD+BOT_C, BOTRGN_C +; +; Scale-rate subregion rate fractions +; +;Original set +; .asg 1/8,TOPRGN_Fr +; .asg 2/8,RGN1_Fr +; .asg 5/8,RGN2_Fr +; .asg 8/8,RGN3_Fr +; .asg 0/8,BOTRGN_Fr + + .asg 1/8,TOPRGN_Fr + .asg 3/8,RGN1_Fr + .asg 5/8,RGN2_Fr + .asg 8/8,RGN3_Fr + .asg 0/8,BOTRGN_Fr +; +; Scale math constants +; +Sk_XDRS .equ 1024*256 ;Scale dividend resolutions +Sk_YDRS .equ 1024*256 ; (do not change;see Sp_?RES) + +Sk_XDIV .equ 1024*Sk_XDRS ;Scale calc values +Sk_YDIV .equ 1024*Sk_YDRS ; (do not change;see Sp_?RES) + +Rk_XDIV .equ 1024*1024 ;Scale ratio calc values +Rk_YDIV .equ 1024*1024 ; (do not change;see Sp_?RES) +; +; Scale math constants - calculated +; + .asg 32,Fk ;Fraction multiplier + + .eval Fk*RGN1_C*RGN1_Fr,FrC + .eval FrC+Fk*RGN2_C*RGN2_Fr,FrC + .eval FrC+Fk*RGN3_C*RGN3_Fr,FrC + + .eval Fk*Sk_XDRS/S_XBEG,Sk_Xb + .eval Fk*Sk_YDRS/S_YBEG,Sk_Yb + .eval Fk*Sk_XDRS/S_XEND,Sk_Xe + .eval Fk*Sk_YDRS/S_YEND,Sk_Ye + +;-------------------- +; Scaler-table macro +; +SCLT .macro sxb,syb,sxe,sye + + .eval :sxb:*Sp_XRES,X + .eval :syb:*Sp_YRES,Y + + .eval (:sxe:-:sxb:)*Fk*Sp_XRES/FrC,Xr + .eval (:sye:-:syb:)*Fk*Sp_YRES/FrC,Yr + + .eval X-TOPRGN_C*Xr*TOPRGN_Fr,X ;Pull back so initial # is + .eval Y-TOPRGN_C*Yr*TOPRGN_Fr,Y ; still for top of court + + .loop TOPRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*TOPRGN_Fr,X + .eval Y+Yr*TOPRGN_Fr,Y + .endloop + + .loop RGN1_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN1_Fr,X + .eval Y+Yr*RGN1_Fr,Y + .endloop + + .loop RGN2_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN2_Fr,X + .eval Y+Yr*RGN2_Fr,Y + .endloop + + .loop RGN3_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*RGN3_Fr,X + .eval Y+Yr*RGN3_Fr,Y + .endloop + + .loop BOTRGN_C + .word Sk_XDIV/(X/Fk), Sk_YDIV/(Y/Fk) + .word Rk_XDIV/(Sk_XDIV/(X/Fk)), Rk_YDIV/(Sk_YDIV/(Y/Fk)) + .eval X+Xr*BOTRGN_Fr,X + .eval Y+Yr*BOTRGN_Fr,Y + .endloop + + .endm + +;-------------------- +; Object Z scaling tables + +;scalehead_t SCLT Sk_Xb*625/800,Sk_Yb*625/800,Sk_Xe*625/800,Sk_Ye*625/800 +scalehead_t SCLT Sk_Xb*580/800,Sk_Yb*580/800,Sk_Xe*580/800,Sk_Ye*580/800 +scalebighead_t SCLT Sk_Xb*840/800,Sk_Yb*840/800,Sk_Xe*840/800,Sk_Ye*840/800 +scalehugehead_t SCLT Sk_Xb*1100/800,Sk_Yb*1100/800,Sk_Xe*1100/800,Sk_Ye*1100/800 + +;Original set +; .asg 88/100,KT +; .asg 95/100,Kt +; .asg 105/100,Kn +; .asg 115/100,Kf +; .asg 122/100,KF + +;Mod 1 - larger than original set +; .asg 100/100,KT +; .asg 106/100,Kt +; .asg 116/100,Kn +; .asg 125/100,Kf + .asg 132/100,KF + +;Mod 2 - a little less large than mod 1 +; .asg 97/100,KT +; .asg 102/100,Kt +; .asg 112/100,Kn +; .asg 124/100,Kf +; .asg 131/100,KF + +;Mod 3 - a bump from 2 + .asg 97/100,KT + .asg 102/100,Kt + .asg 110/100,Kn + .asg 118/100,Kf + .asg 124/100,KF + +scale_t ;Start of large-image scale tables + +scale57_t SCLT Sk_Xb*Kn*670/800,Sk_Yb*670/800,Sk_Xe*Kn*670/800,Sk_Ye*670/800 +scale57et_t SCLT Sk_Xb*KT*670/800,Sk_Yb*670/800,Sk_Xe*KT*670/800,Sk_Ye*670/800 +scale57t_t SCLT Sk_Xb*Kt*670/800,Sk_Yb*670/800,Sk_Xe*Kt*670/800,Sk_Ye*670/800 +scale57f_t SCLT Sk_Xb*Kf*670/800,Sk_Yb*670/800,Sk_Xe*Kf*670/800,Sk_Ye*670/800 +scale57ef_t SCLT Sk_Xb*KF*670/800,Sk_Yb*670/800,Sk_Xe*KF*670/800,Sk_Ye*670/800 + +scale58_t SCLT Sk_Xb*Kn*680/800,Sk_Yb*680/800,Sk_Xe*Kn*680/800,Sk_Ye*680/800 +scale58et_t SCLT Sk_Xb*KT*680/800,Sk_Yb*680/800,Sk_Xe*KT*680/800,Sk_Ye*680/800 +scale58t_t SCLT Sk_Xb*Kt*680/800,Sk_Yb*680/800,Sk_Xe*Kt*680/800,Sk_Ye*680/800 +scale58f_t SCLT Sk_Xb*Kf*680/800,Sk_Yb*680/800,Sk_Xe*Kf*680/800,Sk_Ye*680/800 +scale58ef_t SCLT Sk_Xb*KF*680/800,Sk_Yb*680/800,Sk_Xe*KF*680/800,Sk_Ye*680/800 + +scale59_t SCLT Sk_Xb*Kn*690/800,Sk_Yb*690/800,Sk_Xe*Kn*690/800,Sk_Ye*690/800 +scale59et_t SCLT Sk_Xb*KT*690/800,Sk_Yb*690/800,Sk_Xe*KT*690/800,Sk_Ye*690/800 +scale59t_t SCLT Sk_Xb*Kt*690/800,Sk_Yb*690/800,Sk_Xe*Kt*690/800,Sk_Ye*690/800 +scale59f_t SCLT Sk_Xb*Kf*690/800,Sk_Yb*690/800,Sk_Xe*Kf*690/800,Sk_Ye*690/800 +scale59ef_t SCLT Sk_Xb*KF*690/800,Sk_Yb*690/800,Sk_Xe*KF*690/800,Sk_Ye*690/800 + +scale510_t SCLT Sk_Xb*Kn*700/800,Sk_Yb*700/800,Sk_Xe*Kn*700/800,Sk_Ye*700/800 +scale510et_t SCLT Sk_Xb*KT*700/800,Sk_Yb*700/800,Sk_Xe*KT*700/800,Sk_Ye*700/800 +scale510t_t SCLT Sk_Xb*Kt*700/800,Sk_Yb*700/800,Sk_Xe*Kt*700/800,Sk_Ye*700/800 +scale510f_t SCLT Sk_Xb*Kf*700/800,Sk_Yb*700/800,Sk_Xe*Kf*700/800,Sk_Ye*700/800 +scale510ef_t SCLT Sk_Xb*KF*700/800,Sk_Yb*700/800,Sk_Xe*KF*700/800,Sk_Ye*700/800 + +scale511_t SCLT Sk_Xb*Kn*710/800,Sk_Yb*710/800,Sk_Xe*Kn*710/800,Sk_Ye*710/800 +scale511et_t SCLT Sk_Xb*KT*710/800,Sk_Yb*710/800,Sk_Xe*KT*710/800,Sk_Ye*710/800 +scale511t_t SCLT Sk_Xb*Kt*710/800,Sk_Yb*710/800,Sk_Xe*Kt*710/800,Sk_Ye*710/800 +scale511f_t SCLT Sk_Xb*Kf*710/800,Sk_Yb*710/800,Sk_Xe*Kf*710/800,Sk_Ye*710/800 +scale511ef_t SCLT Sk_Xb*KF*710/800,Sk_Yb*710/800,Sk_Xe*KF*710/800,Sk_Ye*710/800 + +scale60_t SCLT Sk_Xb*Kn*720/800,Sk_Yb*720/800,Sk_Xe*Kn*720/800,Sk_Ye*720/800 +scale60et_t SCLT Sk_Xb*KT*720/800,Sk_Yb*720/800,Sk_Xe*KT*720/800,Sk_Ye*720/800 +scale60t_t SCLT Sk_Xb*Kt*720/800,Sk_Yb*720/800,Sk_Xe*Kt*720/800,Sk_Ye*720/800 +scale60f_t SCLT Sk_Xb*Kf*720/800,Sk_Yb*720/800,Sk_Xe*Kf*720/800,Sk_Ye*720/800 +scale60ef_t SCLT Sk_Xb*KF*720/800,Sk_Yb*720/800,Sk_Xe*KF*720/800,Sk_Ye*720/800 + +scale61_t SCLT Sk_Xb*Kn*730/800,Sk_Yb*730/800,Sk_Xe*Kn*730/800,Sk_Ye*730/800 +scale61et_t SCLT Sk_Xb*KT*730/800,Sk_Yb*730/800,Sk_Xe*KT*730/800,Sk_Ye*730/800 +scale61t_t SCLT Sk_Xb*Kt*730/800,Sk_Yb*730/800,Sk_Xe*Kt*730/800,Sk_Ye*730/800 +scale61f_t SCLT Sk_Xb*Kf*730/800,Sk_Yb*730/800,Sk_Xe*Kf*730/800,Sk_Ye*730/800 +scale61ef_t SCLT Sk_Xb*KF*730/800,Sk_Yb*730/800,Sk_Xe*KF*730/800,Sk_Ye*730/800 + +scale62_t SCLT Sk_Xb*Kn*740/800,Sk_Yb*740/800,Sk_Xe*Kn*740/800,Sk_Ye*740/800 +scale62et_t SCLT Sk_Xb*KT*740/800,Sk_Yb*740/800,Sk_Xe*KT*740/800,Sk_Ye*740/800 +scale62t_t SCLT Sk_Xb*Kt*740/800,Sk_Yb*740/800,Sk_Xe*Kt*740/800,Sk_Ye*740/800 +scale62f_t SCLT Sk_Xb*Kf*740/800,Sk_Yb*740/800,Sk_Xe*Kf*740/800,Sk_Ye*740/800 +scale62ef_t SCLT Sk_Xb*KF*740/800,Sk_Yb*740/800,Sk_Xe*KF*740/800,Sk_Ye*740/800 + +scale63_t SCLT Sk_Xb*Kn*750/800,Sk_Yb*750/800,Sk_Xe*Kn*750/800,Sk_Ye*750/800 +scale63et_t SCLT Sk_Xb*KT*750/800,Sk_Yb*750/800,Sk_Xe*KT*750/800,Sk_Ye*750/800 +scale63t_t SCLT Sk_Xb*Kt*750/800,Sk_Yb*750/800,Sk_Xe*Kt*750/800,Sk_Ye*750/800 +scale63f_t SCLT Sk_Xb*Kf*750/800,Sk_Yb*750/800,Sk_Xe*Kf*750/800,Sk_Ye*750/800 +scale63ef_t SCLT Sk_Xb*KF*750/800,Sk_Yb*750/800,Sk_Xe*KF*750/800,Sk_Ye*750/800 + +scale64_t SCLT Sk_Xb*Kn*760/800,Sk_Yb*760/800,Sk_Xe*Kn*760/800,Sk_Ye*760/800 +scale64et_t SCLT Sk_Xb*KT*760/800,Sk_Yb*760/800,Sk_Xe*KT*760/800,Sk_Ye*760/800 +scale64t_t SCLT Sk_Xb*Kt*760/800,Sk_Yb*760/800,Sk_Xe*Kt*760/800,Sk_Ye*760/800 +scale64f_t SCLT Sk_Xb*Kf*760/800,Sk_Yb*760/800,Sk_Xe*Kf*760/800,Sk_Ye*760/800 +scale64ef_t SCLT Sk_Xb*KF*760/800,Sk_Yb*760/800,Sk_Xe*KF*760/800,Sk_Ye*760/800 + +scale65_t SCLT Sk_Xb*Kn*770/800,Sk_Yb*770/800,Sk_Xe*Kn*770/800,Sk_Ye*770/800 +scale65et_t SCLT Sk_Xb*KT*770/800,Sk_Yb*770/800,Sk_Xe*KT*770/800,Sk_Ye*770/800 +scale65t_t SCLT Sk_Xb*Kt*770/800,Sk_Yb*770/800,Sk_Xe*Kt*770/800,Sk_Ye*770/800 +scale65f_t SCLT Sk_Xb*Kf*770/800,Sk_Yb*770/800,Sk_Xe*Kf*770/800,Sk_Ye*770/800 +scale65ef_t SCLT Sk_Xb*KF*770/800,Sk_Yb*770/800,Sk_Xe*KF*770/800,Sk_Ye*770/800 + +scale66_t SCLT Sk_Xb*Kn*780/800,Sk_Yb*780/800,Sk_Xe*Kn*780/800,Sk_Ye*780/800 +scale66et_t SCLT Sk_Xb*KT*780/800,Sk_Yb*780/800,Sk_Xe*KT*780/800,Sk_Ye*780/800 +scale66t_t SCLT Sk_Xb*Kt*780/800,Sk_Yb*780/800,Sk_Xe*Kt*780/800,Sk_Ye*780/800 +scale66f_t SCLT Sk_Xb*Kf*780/800,Sk_Yb*780/800,Sk_Xe*Kf*780/800,Sk_Ye*780/800 +scale66ef_t SCLT Sk_Xb*KF*780/800,Sk_Yb*780/800,Sk_Xe*KF*780/800,Sk_Ye*780/800 + +scale67_t SCLT Sk_Xb*Kn*790/800,Sk_Yb*790/800,Sk_Xe*Kn*790/800,Sk_Ye*790/800 +scale67et_t SCLT Sk_Xb*KT*790/800,Sk_Yb*790/800,Sk_Xe*KT*790/800,Sk_Ye*790/800 +scale67t_t SCLT Sk_Xb*Kt*790/800,Sk_Yb*790/800,Sk_Xe*Kt*790/800,Sk_Ye*790/800 +scale67f_t SCLT Sk_Xb*Kf*790/800,Sk_Yb*790/800,Sk_Xe*Kf*790/800,Sk_Ye*790/800 +scale67ef_t SCLT Sk_Xb*KF*790/800,Sk_Yb*790/800,Sk_Xe*KF*790/800,Sk_Ye*790/800 + +scale68_t SCLT Sk_Xb*Kn*800/800,Sk_Yb*800/800,Sk_Xe*Kn*800/800,Sk_Ye*800/800 +scale68et_t SCLT Sk_Xb*KT*800/800,Sk_Yb*800/800,Sk_Xe*KT*800/800,Sk_Ye*800/800 +scale68t_t SCLT Sk_Xb*Kt*800/800,Sk_Yb*800/800,Sk_Xe*Kt*800/800,Sk_Ye*800/800 +scale68f_t SCLT Sk_Xb*Kf*800/800,Sk_Yb*800/800,Sk_Xe*Kf*800/800,Sk_Ye*800/800 +scale68ef_t SCLT Sk_Xb*KF*800/800,Sk_Yb*800/800,Sk_Xe*KF*800/800,Sk_Ye*800/800 + +scale69_t SCLT Sk_Xb*Kn*810/800,Sk_Yb*810/800,Sk_Xe*Kn*810/800,Sk_Ye*810/800 +scale69et_t SCLT Sk_Xb*KT*810/800,Sk_Yb*810/800,Sk_Xe*KT*810/800,Sk_Ye*810/800 +scale69t_t SCLT Sk_Xb*Kt*810/800,Sk_Yb*810/800,Sk_Xe*Kt*810/800,Sk_Ye*810/800 +scale69f_t SCLT Sk_Xb*Kf*810/800,Sk_Yb*810/800,Sk_Xe*Kf*810/800,Sk_Ye*810/800 +scale69ef_t SCLT Sk_Xb*KF*810/800,Sk_Yb*810/800,Sk_Xe*KF*810/800,Sk_Ye*810/800 + +scale610_t SCLT Sk_Xb*Kn*820/800,Sk_Yb*820/800,Sk_Xe*Kn*820/800,Sk_Ye*820/800 +scale610et_t SCLT Sk_Xb*KT*820/800,Sk_Yb*820/800,Sk_Xe*KT*820/800,Sk_Ye*820/800 +scale610t_t SCLT Sk_Xb*Kt*820/800,Sk_Yb*820/800,Sk_Xe*Kt*820/800,Sk_Ye*820/800 +scale610f_t SCLT Sk_Xb*Kf*820/800,Sk_Yb*820/800,Sk_Xe*Kf*820/800,Sk_Ye*820/800 +scale610ef_t SCLT Sk_Xb*KF*820/800,Sk_Yb*820/800,Sk_Xe*KF*820/800,Sk_Ye*820/800 + +scale611_t SCLT Sk_Xb*Kn*830/800,Sk_Yb*830/800,Sk_Xe*Kn*830/800,Sk_Ye*830/800 +scale611et_t SCLT Sk_Xb*KT*830/800,Sk_Yb*830/800,Sk_Xe*KT*830/800,Sk_Ye*830/800 +scale611t_t SCLT Sk_Xb*Kt*830/800,Sk_Yb*830/800,Sk_Xe*Kt*830/800,Sk_Ye*830/800 +scale611f_t SCLT Sk_Xb*Kf*830/800,Sk_Yb*830/800,Sk_Xe*Kf*830/800,Sk_Ye*830/800 +scale611ef_t SCLT Sk_Xb*KF*830/800,Sk_Yb*830/800,Sk_Xe*KF*830/800,Sk_Ye*830/800 + +scale70_t SCLT Sk_Xb*Kn*840/800,Sk_Yb*840/800,Sk_Xe*Kn*840/800,Sk_Ye*840/800 +scale70et_t SCLT Sk_Xb*KT*840/800,Sk_Yb*840/800,Sk_Xe*KT*840/800,Sk_Ye*840/800 +scale70t_t SCLT Sk_Xb*Kt*840/800,Sk_Yb*840/800,Sk_Xe*Kt*840/800,Sk_Ye*840/800 +scale70f_t SCLT Sk_Xb*Kf*840/800,Sk_Yb*840/800,Sk_Xe*Kf*840/800,Sk_Ye*840/800 +scale70ef_t SCLT Sk_Xb*KF*840/800,Sk_Yb*840/800,Sk_Xe*KF*840/800,Sk_Ye*840/800 + +scale71_t SCLT Sk_Xb*Kn*850/800,Sk_Yb*850/800,Sk_Xe*Kn*850/800,Sk_Ye*850/800 +scale71et_t SCLT Sk_Xb*KT*850/800,Sk_Yb*850/800,Sk_Xe*KT*850/800,Sk_Ye*850/800 +scale71t_t SCLT Sk_Xb*Kt*850/800,Sk_Yb*850/800,Sk_Xe*Kt*850/800,Sk_Ye*850/800 +scale71f_t SCLT Sk_Xb*Kf*850/800,Sk_Yb*850/800,Sk_Xe*Kf*850/800,Sk_Ye*850/800 +scale71ef_t SCLT Sk_Xb*KF*850/800,Sk_Yb*850/800,Sk_Xe*KF*850/800,Sk_Ye*850/800 + +scale72_t SCLT Sk_Xb*Kn*860/800,Sk_Yb*860/800,Sk_Xe*Kn*860/800,Sk_Ye*860/800 +scale72et_t SCLT Sk_Xb*KT*860/800,Sk_Yb*860/800,Sk_Xe*KT*860/800,Sk_Ye*860/800 +scale72t_t SCLT Sk_Xb*Kt*860/800,Sk_Yb*860/800,Sk_Xe*Kt*860/800,Sk_Ye*860/800 +scale72f_t SCLT Sk_Xb*Kf*860/800,Sk_Yb*860/800,Sk_Xe*Kf*860/800,Sk_Ye*860/800 +scale72ef_t SCLT Sk_Xb*KF*860/800,Sk_Yb*860/800,Sk_Xe*KF*860/800,Sk_Ye*860/800 + +scale73_t SCLT Sk_Xb*Kn*870/800,Sk_Yb*870/800,Sk_Xe*Kn*870/800,Sk_Ye*870/800 +scale73et_t SCLT Sk_Xb*KT*870/800,Sk_Yb*870/800,Sk_Xe*KT*870/800,Sk_Ye*870/800 +scale73t_t SCLT Sk_Xb*Kt*870/800,Sk_Yb*870/800,Sk_Xe*Kt*870/800,Sk_Ye*870/800 +scale73f_t SCLT Sk_Xb*Kf*870/800,Sk_Yb*870/800,Sk_Xe*Kf*870/800,Sk_Ye*870/800 +scale73ef_t SCLT Sk_Xb*KF*870/800,Sk_Yb*870/800,Sk_Xe*KF*870/800,Sk_Ye*870/800 + +scale74_t SCLT Sk_Xb*Kn*880/800,Sk_Yb*880/800,Sk_Xe*Kn*880/800,Sk_Ye*880/800 +scale74et_t SCLT Sk_Xb*KT*880/800,Sk_Yb*880/800,Sk_Xe*KT*880/800,Sk_Ye*880/800 +scale74t_t SCLT Sk_Xb*Kt*880/800,Sk_Yb*880/800,Sk_Xe*Kt*880/800,Sk_Ye*880/800 +scale74f_t SCLT Sk_Xb*Kf*880/800,Sk_Yb*880/800,Sk_Xe*Kf*880/800,Sk_Ye*880/800 +scale74ef_t SCLT Sk_Xb*KF*880/800,Sk_Yb*880/800,Sk_Xe*KF*880/800,Sk_Ye*880/800 + +scale75_t SCLT Sk_Xb*Kn*890/800,Sk_Yb*890/800,Sk_Xe*Kn*890/800,Sk_Ye*890/800 +scale75et_t SCLT Sk_Xb*KT*890/800,Sk_Yb*890/800,Sk_Xe*KT*890/800,Sk_Ye*890/800 +scale75t_t SCLT Sk_Xb*Kt*890/800,Sk_Yb*890/800,Sk_Xe*Kt*890/800,Sk_Ye*890/800 +scale75f_t SCLT Sk_Xb*Kf*890/800,Sk_Yb*890/800,Sk_Xe*Kf*890/800,Sk_Ye*890/800 +scale75ef_t SCLT Sk_Xb*KF*890/800,Sk_Yb*890/800,Sk_Xe*KF*890/800,Sk_Ye*890/800 + +scale76_t SCLT Sk_Xb*Kn*900/800,Sk_Yb*900/800,Sk_Xe*Kn*900/800,Sk_Ye*900/800 +scale76et_t SCLT Sk_Xb*KT*900/800,Sk_Yb*900/800,Sk_Xe*KT*900/800,Sk_Ye*900/800 +scale76t_t SCLT Sk_Xb*Kt*900/800,Sk_Yb*900/800,Sk_Xe*Kt*900/800,Sk_Ye*900/800 +scale76f_t SCLT Sk_Xb*Kf*900/800,Sk_Yb*900/800,Sk_Xe*Kf*900/800,Sk_Ye*900/800 +scale76ef_t SCLT Sk_Xb*KF*900/800,Sk_Yb*900/800,Sk_Xe*KF*900/800,Sk_Ye*900/800 + +scale77ef_t SCLT Sk_Xb*KF*910/800,Sk_Yb*910/800,Sk_Xe*KF*910/800,Sk_Ye*910/800 + +scalebaby_t SCLT Sk_Xb*420/800,Sk_Yb*420/800,Sk_Xe*420/800,Sk_Ye*420/800 + +;-------------------- + + .asg 110/100,Ks + +scale_t_sm ;Start of small-image scale tables + +scale_t_size .equ scale_t_sm-scale_t + +scale57_t_sm SCLT Sk_Xb*Ks*Kn*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kn*670/800,Sk_Ye*Ks*670/800 +scale57et_t_sm SCLT Sk_Xb*Ks*KT*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KT*670/800,Sk_Ye*Ks*670/800 +scale57t_t_sm SCLT Sk_Xb*Ks*Kt*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kt*670/800,Sk_Ye*Ks*670/800 +scale57f_t_sm SCLT Sk_Xb*Ks*Kf*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*Kf*670/800,Sk_Ye*Ks*670/800 +scale57ef_t_sm SCLT Sk_Xb*Ks*KF*670/800,Sk_Yb*Ks*670/800,Sk_Xe*Ks*KF*670/800,Sk_Ye*Ks*670/800 + +scale58_t_sm SCLT Sk_Xb*Ks*Kn*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kn*680/800,Sk_Ye*Ks*680/800 +scale58et_t_sm SCLT Sk_Xb*Ks*KT*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KT*680/800,Sk_Ye*Ks*680/800 +scale58t_t_sm SCLT Sk_Xb*Ks*Kt*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kt*680/800,Sk_Ye*Ks*680/800 +scale58f_t_sm SCLT Sk_Xb*Ks*Kf*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*Kf*680/800,Sk_Ye*Ks*680/800 +scale58ef_t_sm SCLT Sk_Xb*Ks*KF*680/800,Sk_Yb*Ks*680/800,Sk_Xe*Ks*KF*680/800,Sk_Ye*Ks*680/800 + +scale59_t_sm SCLT Sk_Xb*Ks*Kn*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kn*690/800,Sk_Ye*Ks*690/800 +scale59et_t_sm SCLT Sk_Xb*Ks*KT*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KT*690/800,Sk_Ye*Ks*690/800 +scale59t_t_sm SCLT Sk_Xb*Ks*Kt*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kt*690/800,Sk_Ye*Ks*690/800 +scale59f_t_sm SCLT Sk_Xb*Ks*Kf*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*Kf*690/800,Sk_Ye*Ks*690/800 +scale59ef_t_sm SCLT Sk_Xb*Ks*KF*690/800,Sk_Yb*Ks*690/800,Sk_Xe*Ks*KF*690/800,Sk_Ye*Ks*690/800 + +scale510_t_sm SCLT Sk_Xb*Ks*Kn*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kn*700/800,Sk_Ye*Ks*700/800 +scale510et_t_sm SCLT Sk_Xb*Ks*KT*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KT*700/800,Sk_Ye*Ks*700/800 +scale510t_t_sm SCLT Sk_Xb*Ks*Kt*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kt*700/800,Sk_Ye*Ks*700/800 +scale510f_t_sm SCLT Sk_Xb*Ks*Kf*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*Kf*700/800,Sk_Ye*Ks*700/800 +scale510ef_t_sm SCLT Sk_Xb*Ks*KF*700/800,Sk_Yb*Ks*700/800,Sk_Xe*Ks*KF*700/800,Sk_Ye*Ks*700/800 + +scale511_t_sm SCLT Sk_Xb*Ks*Kn*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kn*710/800,Sk_Ye*Ks*710/800 +scale511et_t_sm SCLT Sk_Xb*Ks*KT*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KT*710/800,Sk_Ye*Ks*710/800 +scale511t_t_sm SCLT Sk_Xb*Ks*Kt*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kt*710/800,Sk_Ye*Ks*710/800 +scale511f_t_sm SCLT Sk_Xb*Ks*Kf*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*Kf*710/800,Sk_Ye*Ks*710/800 +scale511ef_t_sm SCLT Sk_Xb*Ks*KF*710/800,Sk_Yb*Ks*710/800,Sk_Xe*Ks*KF*710/800,Sk_Ye*Ks*710/800 + +scale60_t_sm SCLT Sk_Xb*Ks*Kn*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kn*720/800,Sk_Ye*Ks*720/800 +scale60et_t_sm SCLT Sk_Xb*Ks*KT*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KT*720/800,Sk_Ye*Ks*720/800 +scale60t_t_sm SCLT Sk_Xb*Ks*Kt*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kt*720/800,Sk_Ye*Ks*720/800 +scale60f_t_sm SCLT Sk_Xb*Ks*Kf*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*Kf*720/800,Sk_Ye*Ks*720/800 +scale60ef_t_sm SCLT Sk_Xb*Ks*KF*720/800,Sk_Yb*Ks*720/800,Sk_Xe*Ks*KF*720/800,Sk_Ye*Ks*720/800 + +scale61_t_sm SCLT Sk_Xb*Ks*Kn*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kn*730/800,Sk_Ye*Ks*730/800 +scale61et_t_sm SCLT Sk_Xb*Ks*KT*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KT*730/800,Sk_Ye*Ks*730/800 +scale61t_t_sm SCLT Sk_Xb*Ks*Kt*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kt*730/800,Sk_Ye*Ks*730/800 +scale61f_t_sm SCLT Sk_Xb*Ks*Kf*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*Kf*730/800,Sk_Ye*Ks*730/800 +scale61ef_t_sm SCLT Sk_Xb*Ks*KF*730/800,Sk_Yb*Ks*730/800,Sk_Xe*Ks*KF*730/800,Sk_Ye*Ks*730/800 + +scale62_t_sm SCLT Sk_Xb*Ks*Kn*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kn*740/800,Sk_Ye*Ks*740/800 +scale62et_t_sm SCLT Sk_Xb*Ks*KT*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KT*740/800,Sk_Ye*Ks*740/800 +scale62t_t_sm SCLT Sk_Xb*Ks*Kt*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kt*740/800,Sk_Ye*Ks*740/800 +scale62f_t_sm SCLT Sk_Xb*Ks*Kf*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*Kf*740/800,Sk_Ye*Ks*740/800 +scale62ef_t_sm SCLT Sk_Xb*Ks*KF*740/800,Sk_Yb*Ks*740/800,Sk_Xe*Ks*KF*740/800,Sk_Ye*Ks*740/800 + +scale63_t_sm SCLT Sk_Xb*Ks*Kn*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kn*750/800,Sk_Ye*Ks*750/800 +scale63et_t_sm SCLT Sk_Xb*Ks*KT*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KT*750/800,Sk_Ye*Ks*750/800 +scale63t_t_sm SCLT Sk_Xb*Ks*Kt*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kt*750/800,Sk_Ye*Ks*750/800 +scale63f_t_sm SCLT Sk_Xb*Ks*Kf*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*Kf*750/800,Sk_Ye*Ks*750/800 +scale63ef_t_sm SCLT Sk_Xb*Ks*KF*750/800,Sk_Yb*Ks*750/800,Sk_Xe*Ks*KF*750/800,Sk_Ye*Ks*750/800 + +scale64_t_sm SCLT Sk_Xb*Ks*Kn*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kn*760/800,Sk_Ye*Ks*760/800 +scale64et_t_sm SCLT Sk_Xb*Ks*KT*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KT*760/800,Sk_Ye*Ks*760/800 +scale64t_t_sm SCLT Sk_Xb*Ks*Kt*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kt*760/800,Sk_Ye*Ks*760/800 +scale64f_t_sm SCLT Sk_Xb*Ks*Kf*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*Kf*760/800,Sk_Ye*Ks*760/800 +scale64ef_t_sm SCLT Sk_Xb*Ks*KF*760/800,Sk_Yb*Ks*760/800,Sk_Xe*Ks*KF*760/800,Sk_Ye*Ks*760/800 + +scale65_t_sm SCLT Sk_Xb*Ks*Kn*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kn*770/800,Sk_Ye*Ks*770/800 +scale65et_t_sm SCLT Sk_Xb*Ks*KT*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KT*770/800,Sk_Ye*Ks*770/800 +scale65t_t_sm SCLT Sk_Xb*Ks*Kt*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kt*770/800,Sk_Ye*Ks*770/800 +scale65f_t_sm SCLT Sk_Xb*Ks*Kf*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*Kf*770/800,Sk_Ye*Ks*770/800 +scale65ef_t_sm SCLT Sk_Xb*Ks*KF*770/800,Sk_Yb*Ks*770/800,Sk_Xe*Ks*KF*770/800,Sk_Ye*Ks*770/800 + +scale66_t_sm SCLT Sk_Xb*Ks*Kn*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kn*780/800,Sk_Ye*Ks*780/800 +scale66et_t_sm SCLT Sk_Xb*Ks*KT*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KT*780/800,Sk_Ye*Ks*780/800 +scale66t_t_sm SCLT Sk_Xb*Ks*Kt*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kt*780/800,Sk_Ye*Ks*780/800 +scale66f_t_sm SCLT Sk_Xb*Ks*Kf*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*Kf*780/800,Sk_Ye*Ks*780/800 +scale66ef_t_sm SCLT Sk_Xb*Ks*KF*780/800,Sk_Yb*Ks*780/800,Sk_Xe*Ks*KF*780/800,Sk_Ye*Ks*780/800 + +scale67_t_sm SCLT Sk_Xb*Ks*Kn*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kn*790/800,Sk_Ye*Ks*790/800 +scale67et_t_sm SCLT Sk_Xb*Ks*KT*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KT*790/800,Sk_Ye*Ks*790/800 +scale67t_t_sm SCLT Sk_Xb*Ks*Kt*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kt*790/800,Sk_Ye*Ks*790/800 +scale67f_t_sm SCLT Sk_Xb*Ks*Kf*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*Kf*790/800,Sk_Ye*Ks*790/800 +scale67ef_t_sm SCLT Sk_Xb*Ks*KF*790/800,Sk_Yb*Ks*790/800,Sk_Xe*Ks*KF*790/800,Sk_Ye*Ks*790/800 + +scale68_t_sm SCLT Sk_Xb*Ks*Kn*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kn*800/800,Sk_Ye*Ks*800/800 +scale68et_t_sm SCLT Sk_Xb*Ks*KT*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KT*800/800,Sk_Ye*Ks*800/800 +scale68t_t_sm SCLT Sk_Xb*Ks*Kt*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kt*800/800,Sk_Ye*Ks*800/800 +scale68f_t_sm SCLT Sk_Xb*Ks*Kf*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*Kf*800/800,Sk_Ye*Ks*800/800 +scale68ef_t_sm SCLT Sk_Xb*Ks*KF*800/800,Sk_Yb*Ks*800/800,Sk_Xe*Ks*KF*800/800,Sk_Ye*Ks*800/800 + +scale69_t_sm SCLT Sk_Xb*Ks*Kn*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kn*810/800,Sk_Ye*Ks*810/800 +scale69et_t_sm SCLT Sk_Xb*Ks*KT*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KT*810/800,Sk_Ye*Ks*810/800 +scale69t_t_sm SCLT Sk_Xb*Ks*Kt*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kt*810/800,Sk_Ye*Ks*810/800 +scale69f_t_sm SCLT Sk_Xb*Ks*Kf*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*Kf*810/800,Sk_Ye*Ks*810/800 +scale69ef_t_sm SCLT Sk_Xb*Ks*KF*810/800,Sk_Yb*Ks*810/800,Sk_Xe*Ks*KF*810/800,Sk_Ye*Ks*810/800 + +scale610_t_sm SCLT Sk_Xb*Ks*Kn*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kn*820/800,Sk_Ye*Ks*820/800 +scale610et_t_sm SCLT Sk_Xb*Ks*KT*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KT*820/800,Sk_Ye*Ks*820/800 +scale610t_t_sm SCLT Sk_Xb*Ks*Kt*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kt*820/800,Sk_Ye*Ks*820/800 +scale610f_t_sm SCLT Sk_Xb*Ks*Kf*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*Kf*820/800,Sk_Ye*Ks*820/800 +scale610ef_t_sm SCLT Sk_Xb*Ks*KF*820/800,Sk_Yb*Ks*820/800,Sk_Xe*Ks*KF*820/800,Sk_Ye*Ks*820/800 + +scale611_t_sm SCLT Sk_Xb*Ks*Kn*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kn*830/800,Sk_Ye*Ks*830/800 +scale611et_t_sm SCLT Sk_Xb*Ks*KT*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KT*830/800,Sk_Ye*Ks*830/800 +scale611t_t_sm SCLT Sk_Xb*Ks*Kt*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kt*830/800,Sk_Ye*Ks*830/800 +scale611f_t_sm SCLT Sk_Xb*Ks*Kf*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*Kf*830/800,Sk_Ye*Ks*830/800 +scale611ef_t_sm SCLT Sk_Xb*Ks*KF*830/800,Sk_Yb*Ks*830/800,Sk_Xe*Ks*KF*830/800,Sk_Ye*Ks*830/800 + +scale70_t_sm SCLT Sk_Xb*Ks*Kn*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kn*840/800,Sk_Ye*Ks*840/800 +scale70et_t_sm SCLT Sk_Xb*Ks*KT*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KT*840/800,Sk_Ye*Ks*840/800 +scale70t_t_sm SCLT Sk_Xb*Ks*Kt*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kt*840/800,Sk_Ye*Ks*840/800 +scale70f_t_sm SCLT Sk_Xb*Ks*Kf*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*Kf*840/800,Sk_Ye*Ks*840/800 +scale70ef_t_sm SCLT Sk_Xb*Ks*KF*840/800,Sk_Yb*Ks*840/800,Sk_Xe*Ks*KF*840/800,Sk_Ye*Ks*840/800 + +scale71_t_sm SCLT Sk_Xb*Ks*Kn*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kn*850/800,Sk_Ye*Ks*850/800 +scale71et_t_sm SCLT Sk_Xb*Ks*KT*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KT*850/800,Sk_Ye*Ks*850/800 +scale71t_t_sm SCLT Sk_Xb*Ks*Kt*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kt*850/800,Sk_Ye*Ks*850/800 +scale71f_t_sm SCLT Sk_Xb*Ks*Kf*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*Kf*850/800,Sk_Ye*Ks*850/800 +scale71ef_t_sm SCLT Sk_Xb*Ks*KF*850/800,Sk_Yb*Ks*850/800,Sk_Xe*Ks*KF*850/800,Sk_Ye*Ks*850/800 + +scale72_t_sm SCLT Sk_Xb*Ks*Kn*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kn*860/800,Sk_Ye*Ks*860/800 +scale72et_t_sm SCLT Sk_Xb*Ks*KT*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KT*860/800,Sk_Ye*Ks*860/800 +scale72t_t_sm SCLT Sk_Xb*Ks*Kt*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kt*860/800,Sk_Ye*Ks*860/800 +scale72f_t_sm SCLT Sk_Xb*Ks*Kf*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*Kf*860/800,Sk_Ye*Ks*860/800 +scale72ef_t_sm SCLT Sk_Xb*Ks*KF*860/800,Sk_Yb*Ks*860/800,Sk_Xe*Ks*KF*860/800,Sk_Ye*Ks*860/800 + +scale73_t_sm SCLT Sk_Xb*Ks*Kn*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kn*870/800,Sk_Ye*Ks*870/800 +scale73et_t_sm SCLT Sk_Xb*Ks*KT*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KT*870/800,Sk_Ye*Ks*870/800 +scale73t_t_sm SCLT Sk_Xb*Ks*Kt*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kt*870/800,Sk_Ye*Ks*870/800 +scale73f_t_sm SCLT Sk_Xb*Ks*Kf*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*Kf*870/800,Sk_Ye*Ks*870/800 +scale73ef_t_sm SCLT Sk_Xb*Ks*KF*870/800,Sk_Yb*Ks*870/800,Sk_Xe*Ks*KF*870/800,Sk_Ye*Ks*870/800 + +scale74_t_sm SCLT Sk_Xb*Ks*Kn*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kn*880/800,Sk_Ye*Ks*880/800 +scale74et_t_sm SCLT Sk_Xb*Ks*KT*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KT*880/800,Sk_Ye*Ks*880/800 +scale74t_t_sm SCLT Sk_Xb*Ks*Kt*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kt*880/800,Sk_Ye*Ks*880/800 +scale74f_t_sm SCLT Sk_Xb*Ks*Kf*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*Kf*880/800,Sk_Ye*Ks*880/800 +scale74ef_t_sm SCLT Sk_Xb*Ks*KF*880/800,Sk_Yb*Ks*880/800,Sk_Xe*Ks*KF*880/800,Sk_Ye*Ks*880/800 + +scale75_t_sm SCLT Sk_Xb*Ks*Kn*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kn*890/800,Sk_Ye*Ks*890/800 +scale75et_t_sm SCLT Sk_Xb*Ks*KT*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KT*890/800,Sk_Ye*Ks*890/800 +scale75t_t_sm SCLT Sk_Xb*Ks*Kt*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kt*890/800,Sk_Ye*Ks*890/800 +scale75f_t_sm SCLT Sk_Xb*Ks*Kf*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*Kf*890/800,Sk_Ye*Ks*890/800 +scale75ef_t_sm SCLT Sk_Xb*Ks*KF*890/800,Sk_Yb*Ks*890/800,Sk_Xe*Ks*KF*890/800,Sk_Ye*Ks*890/800 + +scale76_t_sm SCLT Sk_Xb*Ks*Kn*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kn*900/800,Sk_Ye*Ks*900/800 +scale76et_t_sm SCLT Sk_Xb*Ks*KT*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KT*900/800,Sk_Ye*Ks*900/800 +scale76t_t_sm SCLT Sk_Xb*Ks*Kt*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kt*900/800,Sk_Ye*Ks*900/800 +scale76f_t_sm SCLT Sk_Xb*Ks*Kf*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*Kf*900/800,Sk_Ye*Ks*900/800 +scale76ef_t_sm SCLT Sk_Xb*Ks*KF*900/800,Sk_Yb*Ks*900/800,Sk_Xe*Ks*KF*900/800,Sk_Ye*Ks*900/800 + +scale77ef_t_sm SCLT Sk_Xb*Ks*KF*910/800,Sk_Yb*Ks*910/800,Sk_Xe*Ks*KF*910/800,Sk_Ye*Ks*910/800 + +scalebaby_t_sm SCLT Sk_Xb*Ks*420/800,Sk_Yb*Ks*420/800,Sk_Xe*Ks*420/800,Sk_Ye*Ks*420/800 + + + .end diff --git a/SRC/NEWLUP.DOC b/SRC/NEWLUP.DOC new file mode 100644 index 0000000..37e7fca --- /dev/null +++ b/SRC/NEWLUP.DOC @@ -0,0 +1,97 @@ +( ALTANTA HAWKS ) ( DETROIT ) ( MILWAUKEE ) + +BLAYLOCK, mookie HILL, grant BAKER, vin +MUTUMBO, dekembe RILEY, ron ALLEN, ray +SMITH, steve DUMARS, joe LANG, andrew +LAETNER, christian THORPE, otis ROBINSON, glen +NORMAN, ken AUGMON, stacey RESPERT, shawn + + +( BOSTON ) ( GOLDEN STATE ) ( MINNESOTTA ) + +BROWN, dee SPREWELL, latrell GUGLIOTTA, tom +HAMER, steve SEIKALY, rony MARBURY, stephon +BARROS, dana SMITH, joe GARNETT, kevin +RADJA, dino MULLIN, chris +FOX, rick + + +( CHARLOTTE ) ( HOUSTON ) ( NEW JERSEY ) + +RICE, glen OLAJUWAN, hakeem GILL, kendall +MASON, anthony HARRINGTON, othella KITTLES, kerry +DIVAC, vlade DREXLER, clyde PACK, robert +ZIDEK, george WILLIS, kevin BRADLEY, shawn +CURRY, del O'BANNON, ed + + +( CHICAGO ) ( INDIANA ) ( NEW YORK ) + +PIPPEN, scottie MILLER, reggie EWING, patrick +RODMAN, dennis DAMPIER, erick WALLACE, john +KUKOC, toni ROSE, jalen JOHNSON, larry +LONGLEY, luke SMITS, rik STARKS, john +KERR, steve DAVIS, dale HOUSTON, allan + + +( CLEVELAND ) ( CLIPPERS ) ( ORLANDO ) + +HILL, tyrone VAUGHT, loy HARDAWAY, anfernee +MILLS, chris ROGERS, rodney GRANT, horace +PHILLS, bobby MURRAY, lamond ANDERSON, nick +BRANDON, terrell RICHARDSON, pooh SCOTT, dennis +FERRY, danny BARRY, brent KONCAK, jon + + +( DALLAS ) ( LAKERS ) ( PHILADELPHIA ) + +KIDD, jason VAN EXEL, nick IVERSON, allen +HARPER, derek CEBALLOS, cedric MINOR, ryan +JACKSON, jim SCOTT, byron STACKHOUSE, jerry +MONTROSS, eric CAMPBELL, elden COLEMAN, derrick +MASHBURN, jamal JONES, eddie WEATHERSPOON,clarence + + +( DENVER ) ( MIAMI ) ( PHOENIX ) + +McDYESS, antonio MOURNING, alonzo JOHNSON, kevin +MARCIULIONIS,sarunas HARDAWAY, tim TISDALE, wayman +JACKSON, mark DANILOVIC, sasha MANNING, danny +ELLIS, dale HORRY, robert + CASSELL, sam + +( PORTLAND ) ( TORONTO ) + +ROBINSON, cliff ROGERS, carlos +RIDER, isaiah CAMBY, marcus +SABONIS, arvydas STOUDAMIRE, damon +ANDERSON, kenny JONES, popeye +CHILDRESS, randolph WILLIAMS, walt + + +( SACRAMENTO ) ( UTAH ) + +OWENS, billy STOCKTON, john +ABDUL-RAUF, mahmoud MALONE, karl +RICHMOND, mitch HORNACEK, jeff +GRANT, brian MORRIS, chris +EDNEY, tyus + + +( SAN ANTONIO ) ( VANCOUVER ) + +ELLIOTT, sean ANTHONY, greg +ROBINSON, david EDWARDS, blue +MAXWELL, vernon REEVES, bryant +JOHNSON, avery +DEL NEGRO, vinny + + +( SEATTLE ) ( WASHINGTON ) + +KEMP, shawn STRICKLAND, rod +PAYTON, gary WEBBER, chris +SCHREMPF, detlef HOWARD, juwan +HAWKINS, hersey MURESAN, gheorge +FORD, sherell CHEANEY, calbert + diff --git a/SRC/PAL.ASM b/SRC/PAL.ASM new file mode 100644 index 0000000..88d756e --- /dev/null +++ b/SRC/PAL.ASM @@ -0,0 +1,1291 @@ +************************************************************** +* +* Owner: none +* +* Software: ?, Shawn Liptak and Mark Turmell +* Initiated: 4/13/89 (palstuff) +* +* Modified: Shawn Liptak, 7/23/91 -New FADEIN/OUT (Total carnage) +* Shawn Liptak, 7/28/91 -Merged with fbstuff +* Shawn Liptak, 8/12/91 -PAL_TOWHT/PAL_FMWHT +* Shawn Liptak, 8/21/91 -Merged pall & palstuff +* Shawn Liptak, 9/13/91 -Clean up! +* Shawn Liptak, 9/17/91 -New PAL struct +* Shawn Liptak, 11/19/91 -Improved GETxPAL with CLNPAL +* Shawn Liptak, 2/20/92 -Basketball cleanup +* Shawn Liptak, 4/29/92 -Conditional bgndpal assembly +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/18/92 20:30 +************************************************************** + .title "palette allocator and fader control" + .file "pal.asm" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "bgndtbl.glo" + .include "imgtbl.glo" + .include "game.equ" + .include "macros.hdr" + .include "plyrhd6.tbl" + .include "plyrhd6.glo" + .include "imgpal8.asm" + .include "mugshot.tbl" + .include "mugshot.glo" + + +;refs + .ref IRQSKYE + .ref DIAGP + +;defs + .def BOON_F,TOBIAS_F,OURSL_F + .def EDDIE_F + .def FIFI_F + .def BUD_F + .def M_FIF_P + .def M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .def M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + +;equates + +FPALNUM .equ 8 +FPALSZ .equ 256*16 + + +;ram + + .bss fade_start,16 + .bss fade_end,16 + .bss fade_inc,16 + .bss fade_list,32 ;list of palettes not to fade + + + BSSX PALRAM ,0 ;Palette allocation ram + BSSX PALFRAM ,PALRSIZ*NMFPAL + BSSX PALBRAM ,PALRSIZ*NMBPAL + BSSX PALTRAM ,PALTSIZ*NUMPALT + + BSSX FADERAM ,FPALSZ*NMFPAL ;Fade mem for palettes + + BSSX palfmin ,16 + .bss irqskyeo,16 ;Orignal autoerase color + + +morfpal1 equ FADERAM+0*16*64 +morfpal2 equ FADERAM+1*16*64 +morfpal3 equ FADERAM+2*16*64 +morfpal4 equ FADERAM+3*16*64 +morfpal5 equ FADERAM+4*16*64 +morfpal6 equ FADERAM+5*16*64 +morfpal7 equ FADERAM+6*16*64 +morfpal8 equ FADERAM+7*16*64 +morfpal9 equ FADERAM+8*16*64 +morfpal10 equ FADERAM+9*16*64 +morfpal11 equ FADERAM+10*16*64 + + .def morfpal1,morfpal2 + .def morfpal3,morfpal4 + .def morfpal5,morfpal6 + .def morfpal7,morfpal8 + .def morfpal9,morfpal10 + .def morfpal11 + + .text + +******************************** +* Note: Scratch = A0-A1,A14,B0-B1 + + +#******************************* +* Clear out palette allocation and xfer ram +* Trashes scratch + + SUBR pal_init + + movi PALRAM,a0 ;*Pal list + movi PALRSIZ*NUMPAL/16,b0 ;# of words + + clr a1 +#l1 move a1,*a0+ + dsj b0,#l1 + + movi PALTRAM,a0 ;*xfer ram + movi PALTSIZ*NUMPALT/16,b0 ;# of words + +#l2 move a1,*a0+ + dsj b0,#l2 + +;always start with DIAGP as pal 0! + movi DIAGP,a0 + callr pal_getf + rets + + +#******************************* +* Cleanup unused palettes +* Trashes A1,A14,B0-B1 + + SUBR pal_clean + + PUSH a0,a2,a3,a4 + movi PALRAM+PALRSIZ,a2 ;Skip 1st pal + + movi NUMPAL-1,a3 ;Chk all pals + movi >0101,a4 ;2nd PAL # + +#lp move @OBJLST,a0,L + jrz cp30 ;No objs, chk backgnd + +cp20 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp20 + +cp30 move @BAKLST,a0,L ;Check in bgnd list + jrz cp60 ;No objects, clean it out + +cp50 move *a0(OPAL),a14 + cmp a14,a4 + jreq cp80 ;Used? Chk next + move *a0,a0,L + jrnz cp50 + +cp60 +; move *a2,a0,L +; cmpi WARPP,a0 +; jrne cp70 ;Not warp pal? +; +; movi CYCPID,a0 +; movi -1,a1 +; calla EXISTP +; move a0,a0 +; jrnz cp80 ;Found cycler? + +cp70 clr a0 ;Palette not used, free it + move a0,*a2,L + +cp80 addi >0101,a4 ;Next pal + .if PAL64 + btst 4,a4 + jrz cp90 + addi >3030,a4 + sext a4 ;For compare + .endif + +cp90 addk PALRSIZ,a2 + dsj a3,#lp + + PULL a0,a2,a3,a4 + rets + + +#******************************* +* Find the color map # to which the given palette is assigned +* A0=*Pallette +* >A0=PAL # (DMA format) or 0 (Z) +* Trashes scratch + + SUBR pal_find + + movi PALRAM,a1 + movi NUMPAL,b0 + +#lp move *a1+,a14,L ;Get * palette + cmp a0,a14 + jreq #ok ;Found? + dsj b0,#lp + clr a0 ;Set Z + rets + +#ok subi NUMPAL,b0 ;Compute pal # + neg b0 + move b0,a1 + + .if PAL64 + movk >f,a14 + and a1,a14 ;A14=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a14,a1 + .endif + + move a1,a0 ;Return pal # + sll 8,a1 + add a1,a0 + addk 1,a1 ;Clr Z (OK) + rets + + + +#******************************* +* Get a foreground palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBR pal_getf + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gfp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gfp4 + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp8 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp8 + + .if DEBUG +; LOCKUP +; eint + .endif + callr pal_clean + + movi PALFRAM,a1 ;>Check for a spare palette + movi NMFPAL,a3 +gfp20 move *a1+,a2,L + jrz getfp ;Palette empty? Grab it + dsj a3,gfp20 + +#err PULL a2,a3 + clr a0 ;Set Z error + rets + + +******************************** +* Get a background palette +* A0=*Palette +*Rets: +* A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + .if NMBPAL + + SUBR pal_getb + + PUSH a2,a3 + + movi PALRAM,a1 ;>Check if palette already exists + movi NUMPAL,a3 +gbp4 move *a1+,a2,L ;Get *palette + cmp a0,a2 + jreq getpn ;Already in color ram? + dsj a3,gbp4 + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp8 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp8 + + .if DEBUG + LOCKUP + eint + .endif + callr pal_clean + + movi PALBRAM,a1 ;>Check for a spare palette + movk NMBPAL,a3 +gbp10 move *a1+,a2,L + jrz gbp30 ;Palette empty? Grab it + dsj a3,gbp10 + jruc #err + + +getfp addk NMBPAL,a3 ;>Setup your new palette + + .else +getfp + + .endif + + +gbp30 PUSH a0,a1 + move a3,a1 ;Palette # + subi NUMPAL,a1 ;Compute palette # + neg a1 + + .if PAL64 + movk >f,a2 + and a1,a2 ;A2=4 low bits + srl 4,a1 ;Move B4/B5 to B6/B7 + sll 6,a1 + add a2,a1 + .endif + + sll 8,a1 ;*256 + move *a0+,a2 ;Get # colors in pal + callr pal_set ;Setup pal transfer + mmfm sp,a0,a1 + jrz #err ;Failed to get transfer? + move a0,-*a1,L ;Stuff palette * + +getpn subi NUMPAL,a3 ;Compute palette # + neg a3 + + .if PAL64 + movk >f,a1 + and a3,a1 ;A2=4 low bits + srl 4,a3 ;Move B4/B5 to B6/B7 + sll 6,a3 + add a1,a3 + .endif + + move a3,a0 ;Return palette # + sll 8,a3 + add a3,a0 ;Double it up for DMA + + PULL a2,a3 + addk 1,a1 ;Clr Z for OK + rets + + +#******************************* +* Setup palette transfer +* A0=* to palette color data +* A1=Bit 8-15 destination palette | Bit 0-7 start color +* A2=Color count (0-255) +* Rets: Z set if unable to setup transfer +* Trashes scratch + + SUBR pal_set + + move a3,b1 + + movi PALTRAM,a3 + movi NUMPALT,b0 ;# of palette transfers allowed + +#lp move *a3+,a14 + jrz #set ;Cell free? + addi PALTSIZ-16,a3 + dsj b0,#lp + .if DEBUG + LOCKUP + eint + .endif + jruc #x + +#set move a0,*a3+,L ;Set PALSRC + move a1,*a3 ;Set PALDEST + move a2,*a3(-48) ;Set PLDCNT (Must set last) + +#x move b1,a3 + move b0,b0 ;Return Z (error) or NZ (ok) + rets + + + +#******************************* +* Transfer palette data +* Called during vblank +* Looks through PALTRAM for transfers +* Trashes A0-A7 + + SUBR pal_transfer + + movi PALTRAM,a0 + movi NUMPALT,a3 ;# OF PALETTES + + clr a6 + movi COLRAM,a7 + +#lp move *a0,a4 ;Get count + jrz #x ;End? + + move a6,*a0+ ;Clear out tranfer count + move *a0+,a1,L ;Source address + move *a0+,a2 ;Destination palette + zext a2 + + .if PAL64 + move a2,a5 ;Convert to color ram address + sll 32-12,a5 + srl 32-12-4,a5 ;*16 + srl 14,a2 ;Move B14/15 to B6/7 + sll 6+4,a2 + add a5,a2 + .else + sll 4,a2 ;*16 for word addr + .endif + + add a7,a2 ;+color ram base address + + sll 32-9,a4 ;Make 0-511 + srl 32-9+1,a4 + jrnc #1 ;Even data count? + move *a1+,*a2+ + +#1 srl 1,a4 ;/2 data count + jrnc #2 ;Even? + move *a1+,*a2+,L + +#2 srl 1,a4 ;/2 data count + jrnc #3 ;Even? + move *a1+,*a2+,L + move *a1+,*a2+,L +#3 jrz #5 ;Cnt=0? + +#4 move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + move *a1+,*a2+,L + dsj a4,#4 + +#5 dsj a3,#lp + +#x rets + + + +#******************************* +* Black out selected palette +* A0=* palette to black out +* Trashes scratch + + SUBR pal_blacken + + PUSH a2 + + callr pal_find + jrz #err + sll 8,a0 + move a0,a1 + movi FADERAM,a0 + movk 32,b0 + clr a2 +#lp move a2,*a0+,L + dsj b0,#lp + movi FADERAM,a0 + movi 64,a2 + callr pal_set + +#err PULL a2 + rets + + +******************************** +* PUMP_RED PROCESS, CYCLE NUCLEAR REACTORS + +;PUMP_RED +; SLEEPK 18H +; MOVI REACTR,A0 +; MOVE A0,@KPBASE,L +; CALLR find_pal +; JRZ REDOUT +; SLL 8,A0 +; MOVE A0,A11 ;NEEDED LATER FOR pal_set +; +; MOVI 25,A10 ;PUMP RED A10 TIMES +; MOVI 128,A8 +;REDLOOP MOVI FADERAM,A0 +; ADDK 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,REDLOOP +;REDOUT +; MOVK 25,A10 ;PUMP RED A10 TIMES +;RED2 MOVI FADERAM,A0 +; SUBI 10H,A8 +; CALLR DO_MULT +; SLEEPK 1 +; DSJ A10,RED2 +; JRUC PUMP_RED +; +;DO_MULT +; MOVE A8,A2 +; PUSH a8,a10,a11 +; +; MOVE @KPBASE,A1,L ;REACTR,A1 +;;PARAMS +;; A0 - DEST RAM FOR PAL +;; A1 - SRC FOR PAL +;; A2 - COLOR MULTIPLIER +;; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128 +; +; move *a1+,a14 +; move a14,*a0+ +; SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS +; SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS +; MOVI >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED +;; MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN +;; MOVI >001F,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE +; MOVE A4,A9 +;; MOVE A6,A10 +;; MOVE A8,A11 +; SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED +;; SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN +;; SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE +;FADELPR +; MOVE *A1+,A3,W ;A3 - RED +; MOVE A3,A5 +; ANDI 03FFH,A5 +;; MOVE A3,A5 ;A5 - GREEN +;; MOVE A3,A7 ;A7 - BLUE +; AND A4,A3 +; CMPI 1001H,A3 +; JRC REDOKR +;; AND A6,A5 +;; AND A8,A7 +; MPYU A2,A3 +;; MPYU A2,A5 +;; MPYU A2,A7 +; CMP A9,A3 +; JRLE REDOKR +; MOVE A9,A3 +;REDOKR +;; CMP A10,A5 +;; JRLE GREENOK +;; MOVE A10,A5 +;;GREENOK +;; CMP A11,A7 +;; JRLE BLUEOK +;; MOVE A11,A7 +;;BLUEOK +; AND A9,A3 +; SRL 7,A3 +;; AND A10,A5 +; OR A5,A3 +;; OR A7,A3 +;; SRL 7,A3 +; MOVE A3,*A0+ +; DSJS A14,FADELPR +; +; +; PULL a8,a10,a11 +; +; movi FADERAM,a0 ;*Color data +; move a11,a1 ;Pal# +; move *a0+,a2 ;#Colors +; jruc pal_set + + + +******************************** +* Fade in all selected palettes from black +* A0=*Palette list to fade in (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* Trashes scratch,A7,A9-A10 +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadein + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadein + rets + +fadein + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fi30 + move a0,@irqskyeo ;Save color + +fi20 move *a11+,a0,L ;Get * palette + jrz fi70 ;0=End +fi30 callr pal_find + jrnz fi60 ;OK? + not a0 ;Make neg (should = -256) +fi60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fi20 + +fi70 clr a8 ;A8=Brightness + + +fi100 addk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11,a1,L + jrn fi200 + addk 32,a11 + move a8,a2 + callr pal_fadeae + +fi200 move *a11+,a1,L + jrz fi400 ;End? + move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jreq fi230 ;Couldn't find? + move *a0+,a2 ;#Colors + callr pal_set +fi230 addi FPALSZ,a5 + dsj a7,fi200 + +fi400 move a10,a0 + calla PRCSLP + cmpi 128,a8 + jrlo fi100 + +fi800 DIE + + + + +******************************** +* Fade out all selected palettes to black +* A0=*Palette list to fade out (autoerase + 0-8 pals) +* A1=Fade delay in ticks +* If 1st entry not neg then it enables autoerase fading + + + SUBR pal_fadeout + + clr a10 + move a10,@palfmin + + SUBR pal_fadeout2 + + move a0,a9 ;A9=*Palette list + move a1,a10 ;A10=Fade delay + CREATE0 fadeout + rets + +fadeout + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a0,L ;!-=Autoerase color + jrn fo30 + move @IRQSKYE,a0 ;Save color + move a0,@irqskyeo + +fo20 move *a11+,a0,L ;Get * palette + jrz fo70 ;0=End +fo30 callr pal_find + jrnz fo60 + not a0 ;Make neg +fo60 sll 8,a0 + move a0,*a6+ ;Save palette # + dsj a7,fo20 + +fo70 movi 128,a8 ;A8=Brightness + + +fo100 subk 8,a8 + + movi FADERAM,a5 + move a13,a6 + addi PDATA,a6 + movk FPALNUM,a7 + + move a9,a11 + move *a11+,a1,L + jrn fo220 + move a8,a2 + callr pal_fadeae + +fo200 move *a11+,a1,L + jrz fo400 +fo220 move a5,a0 + move a8,a2 + callr pal_fade + move a5,a0 ;*Palette colors + move *a6+,a1 ;Palette # + cmpi -256,a1 ;FF00 + jrz fo250 + move *a0+,a2 ;#Colors + callr pal_set +fo250 addi FPALSZ,a5 + dsj a7,fo200 + +fo400 move a10,a0 + calla PRCSLP + move @palfmin,a0 + cmp a0,a8 + jrgt fo100 + +fo800 DIE + + +******************************** +* Fade autoerase color + + SUBRP pal_fadeae ;A2=Brightness (0-128) + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pf1c + + +******************************** +* Fade a palette +* Each color in palette will be multiplied by a2 then divided by 128 +* A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) +* Trashes scratch + + SUBRP pal_fade + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 32-9,a14 ;Remove any flags + srl 32-9,a14 ;9 bits needed for # colors + +pf1c movk >1f,a8 ;A8=5 bit color mask + +pf100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + mpyu a2,a3 + mpyu a2,a5 + mpyu a2,a7 + srl 7,a3 ;/128 + srl 7,a5 + srl 7,a7 + + cmp a8,a3 + jrls pfrok + move a8,a3 + +pfrok cmp a8,a5 + jrls pfgok + move a8,a5 + +pfgok cmp a8,a7 + jrls pfbok + move a8,a7 + +pfbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pf100 + + PULL a3,a5,a7,a8 + rets + + + +************************************************************************** +* Fade palettes from black to their normal colors except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeinx + + PUSH a2,a6,a7,a8,a9,a10 + movk 8,a10 + jruc fbf10 + + +************************************************************************** +* Fade palettes down to black except for list +* A0=*List NOT to fade or 0 +* Trashes scratch + + SUBR pal_fadeoutx + + PUSH a2,a6,a7,a8,a9,a10 + movi -8,a10 + +fbf10 move a0,a6 + ;Start proc to fade each palette + clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +fbf20 move *a2+,a8,L ;Ptr to palette + jrz fbf70 + move a6,a7 ;A6=*List of palettes to skip + jrz fbf60 + +fbf50 move *a7+,a1,L + jrz fbf60 + cmp a1,a8 + jreq fbf70 ;Skip pal? + jruc fbf50 + +fbf60 CREATE0 fadeonep + +fbf70 addk 1,a9 + cmpi NUMPAL,a9 + jrlt fbf20 + +fbfx PULL a2,a6,a7,a8,a9,a10 + rets + + +************************************************************************** +* fadeonep - Fade one palette (Process) +* +* A8=*Palette to be faded +* A9=Palette slot # (0 to NUMPAL-1) +* A10=Add value per fade (!0) + +fadeonep + + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt fop60 + movi 128,a11 ;For dn fade + jruc fop60 + ;>Set up faded pal in process data space +foplp + move a11,a2 ;A2=Color Multiplier + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_fade + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 2 +fop60 add a10,a11 + cmpi 128,a11 + jrls foplp + + + SLEEPK 2 ;Wait on last pal_set + DIE + + +**************************************************************** +* Fade palettes from white to their normal colors except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_fmwht + + PUSH a2,a6,a7,a8,a9,a10 + movi -1,a10 + jruc ptw10 + + +**************************************************************** +* Brighten palettes to white except for list +* A0=*List NOT to fade or 0 +* A1=Do Autoerase (!0=Yes) + + SUBR pal_towht + + PUSH a2,a6,a7,a8,a9,a10 + move @IRQSKYE,a2 ;Save color + move a2,@irqskyeo + movk 1,a10 + +ptw10 move a0,a6 + move a1,a1 + jrz ptw15 ;Skip AE + CREATE0 addbrt_ae + ;Start proc to fade each palette +ptw15 clr a9 ;palette slot + movi PALRAM,a2 ;A2=*Palette table + +ptw20 move *a2+,a8,L ;Ptr to palette + jrz ptw70 + move a6,a7 ;A6=*List of palettes to skip + jrz ptw60 + +ptw50 move *a7+,a1,L + jrz ptw60 + cmp a1,a8 + jreq ptw70 ;Skip pal? + jruc ptw50 + +ptw60 CREATE0 brightenonep + +ptw70 addk 1,a9 + cmpi NUMPAL,A9 + jrlt ptw20 + +ptwx PULL a2,a6,a7,a8,a9,a10 + rets + + +******************************** +* Brighten one palette (Process) +* A8=*Palette to be faded +* A9=Palette slot # +* A10=Add value per loop (!0) + +brightenonep + .if PAL64 + movk >f,a2 + and a9,a2 ;A2=4 low bits + srl 4,a9 ;Move B4/B5 to B6/B7 + sll 6,a9 + add a2,a9 + .endif + + sll 8,a9 ;B8-15 dest pal, B0-7 color (0) + + clr a11 ;For up fade + move a10,a10 + jrgt bop20 + movk 31,a11 ;For dn fade +bop20 + ;Set up faded pal in process data space +boplp add a10,a11 + cmpi 31,a11 + jrhi bopx + move a11,a2 ;A2=Brightness + move a13,a0 + addi PDATA,a0 ;A0=Dest Ram for Pal + move a0,a5 + move a8,a1 ;A1=Src for Pal + callr pal_addb + + move a5,a0 ;>Move faded palette to palram + move a9,a1 + move *a0+,a2 ;Get # colors in palette + callr pal_set ;Set transfer + + SLEEPK 3 + jruc boplp + +bopx SLEEPK 1 ;give last xfer a chance to go + DIE + + +******************************** +* Change brightness of autoerase (Process) +* A10=Add value per loop (!0) + + SUBR addbrt_ae + + clr a11 ;For up fade + move a10,a10 + jrgt abae20 + movk 31,a11 ;For dn fade +abae20 +abaelp add a10,a11 + cmpi 31,a11 + jrhi abaex + move a11,a2 ;A2=Brightness + callr addbae + + SLEEPK 3 + jruc abaelp + +abaex DIE + + +******************************** +* Change brightness of autoerase +* A2=Brightness (-31 to 31) + + SUBRP addbae + + PUSH a3,a5,a7,a8 + + movi IRQSKYE,a0 + movi irqskyeo,a1 + movk 1,a14 + jruc pb1c + + +******************************** +* Change brightness of a palette +* Each color in palette will have A2 added to its RGB +* A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) +* Trashes scratch + + SUBRP pal_addb + + PUSH a3,a5,a7,a8 + + move *a1+,a14 ;# Colors + move a14,*a0+ + + sll 23,a14 ;Remove any flags + srl 23,a14 ;9 bits needed for # colors + +pb1c movk >1f,a8 ;A8=Mask for 5 bits of color + +pb100 move *a1+,a3 + movk >1f,a7 + and a3,a7 ;A7=Blue + srl 5,a3 + movk >1f,a5 + and a3,a5 ;A5=Green + srl 5,a3 ;A3=Red + + add a2,a3 + add a2,a5 + add a2,a7 + + cmp a8,a3 + jrls pbrok + move a8,a3 + +pbrok cmp a8,a5 + jrls pbgok + move a8,a5 + +pbgok cmp a8,a7 + jrls pbbok + move a8,a7 + +pbbok sll 10,a3 + sll 5,a5 + or a5,a3 + or a7,a3 + move a3,*a0+ ;Save color + dsj a14,pb100 + + PULL a3,a5,a7,a8 + rets + + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_up + + move a10,@fade_list,L + + clr a0 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + move a11,a0 ;movk 8 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* Fade palettes down (process) +* A10=* list palettes not to fade (0 terminated) +* A11=Fade increment (1-256) +*----------------------------------------------------------------------------- + + SUBR fade_down + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + clr a0 + move a0,@fade_end + + move a11,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_up_half + + move a10,@fade_list,L + + movi 32,a0 ;64;128 + move a0,@fade_start + + movi 256,a0 + move a0,@fade_end + + movk 32,a0 ;16 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** +* +* INPUT: a10 = * list palettes not to fade (0 terminated) +* +*----------------------------------------------------------------------------- + + SUBR fade_down_half + + move a10,@fade_list,L + + movi 256,a0 + move a0,@fade_start + + movi 112,a0 ;128 + move a0,@fade_end + + movk 16,a0 + move a0,@fade_inc + + jruc do_fade + +#***************************************************************************** + + SUBRP do_fade + + move @IRQSKYE,a0 + move a0,@irqskyeo + + move @fade_start,a10 +#fade_loop + + move @irqskyeo,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,@IRQSKYE + + + movi FADERAM,a4 + movi PALRAM,a1 + movi NUMPAL,a3 +#next_pal + move *a1+,a2,L ;Get *palette + jrz #empty_pal + + move @fade_list,a7,L + jrz #skip_check + jruc #start + +#next_check + cmp a9,a2 + jreq #done ;skip this palette +#start + move *a7+,a9,L + jrnz #next_check + +#skip_check + + move *a2+,a5 ;Number colours in palette + move a5,a8 + move a4,a6 + +#copy_loop + move *a2+,a11 + movk >1f,a7 + and a11,a7 ;A7 = Blue + srl 5,a11 + movk >1f,a9 + and a11,a9 ;A9 = Green + srl 5,a11 ;A11 = Red + + mpyu a10,a7 ; X (0 - 32) + srl 8,a7 ;/256 + mpyu a10,a9 + srl 8,a9 + mpyu a10,a11 + srl 8,a11 + + sll 10,a11 ;red + or a11,a7 + sll 5,a9 ;green + or a9,a7 + + move a7,*a6+ ;1 word + + dsj a8,#copy_loop + + + PUSH a1,a2 + move a4,a0 ;* colour data + movi NUMPAL,a1 + sub a3,a1 ;dest palette ( 0 - NUMPAL-1 ) + sll 8,a1 ; + move a5,a2 ;# colours + callr pal_set + PULL a1,a2 +#done +#empty_pal + addi FPALSZ,a4 + dsj a3,#next_pal + + SLEEPK 1 + + move @fade_start,a0 + move @fade_end,a1 + cmp a0,a1 + jrhi #fading_up + ;fading_down + move @fade_inc,a0 ;signed inc + sub a0,a10 + cmp a1,a10 + jrge #fade_loop + + DIE + +#fading_up + move @fade_inc,a0 ;signed inc + add a0,a10 + cmp a1,a10 + jrls #fade_loop + + DIE + + +#***************************************************************************** + .end + diff --git a/SRC/PATCH.ASM b/SRC/PATCH.ASM new file mode 100644 index 0000000..da8220f --- /dev/null +++ b/SRC/PATCH.ASM @@ -0,0 +1,70 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 2/20/92 -Started basketball cleanup +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/10/92 19:07 +************************************************************** + .option b,d,l,t + .mnolist + + .include "gsp.equ" + .include "macros.hdr" + + + .def TVPATCH,TVPATCHX + + + .ref dirq_wait + .ref dmaq_wait + .ref DISPLAYON + + .text + .even +OLDINTEN .word 0 + + + SUBR TVBP + + PUSH a0,a1 + PUSH b0,b1 + + move @INTENB,a0 ;Disable ROM protect interrupt (ext2) + move a0,@OLDINTEN + andni X2E,a0 + ori DIE,a0 ;Enable DIRQ + move a0,@INTENB + + PULL b0,b1 + PULL a0,a1 + rets + + + SUBR TVBPX + + PUSH a0 + + move @OLDINTEN,a0 ;Enable ROM protect interrupt (ext2) + ori X2E,a0 + move a0,@INTENB + + move @INTPEND,a0 ;Clear any pending X2E or DIE + andni X2E|DIE,a0 + move a0,@INTPEND + + move a0,@>1e00000 ;Clr FPGA rom protect + + PULL a0 + rets + + +TVPATCH: + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words + .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16 words +TVPATCHX: diff --git a/SRC/PATCH.TXT b/SRC/PATCH.TXT new file mode 100644 index 0000000..baf57fb --- /dev/null +++ b/SRC/PATCH.TXT @@ -0,0 +1,12 @@ + +P PLYR2 3562 FF912AC0 LOCKUP + nop + +P BB 560 FF8A8BE0 LOCKUP + nop + +P PLYR2 3001 FF9105D0 LOCKUP + nop + +P PLYR2 5091 FF918020 LOCKUP + nop diff --git a/SRC/PIF_BLIM.BAT b/SRC/PIF_BLIM.BAT new file mode 100644 index 0000000..0294966 --- /dev/null +++ b/SRC/PIF_BLIM.BAT @@ -0,0 +1,7 @@ +@echo off +if "%winpmt%"=="" set winpmt=%prompt% +set prompt=BLIMP-Win %winpmt% +cd img +ds en +blimp /out=logblimp.out +exit diff --git a/SRC/PIF_DOS.BAT b/SRC/PIF_DOS.BAT new file mode 100644 index 0000000..aedbb76 --- /dev/null +++ b/SRC/PIF_DOS.BAT @@ -0,0 +1,3 @@ +@echo off +if "%winpmt%"=="" set winpmt=%prompt% +set prompt=DOS-Win %winpmt% diff --git a/SRC/PIF_TV.BAT b/SRC/PIF_TV.BAT new file mode 100644 index 0000000..f528a8c --- /dev/null +++ b/SRC/PIF_TV.BAT @@ -0,0 +1,37 @@ +@echo off +if "%winpmt%"=="" set winpmt=%prompt% +set prompt=TV-Win %winpmt% + +:TOP +echo. +echo ToddView Batch +echo ============== +echo L)oad only +echo W)arm start +echo eX)it +choice /C:LWX "Select " +echo. + +REM Was it Ctrl-C,N? +if not errorlevel 1 goto TOP + +REM Was there an error? +if not errorlevel 255 goto CHKOPT +echo. +echo Aborting -- can not process ERRORLEVEL +echo. +goto END + +:CHKOPT +if errorlevel 3 goto END +if errorlevel 2 goto WARM + +tv bb /v +goto TOP + +:WARM +tv bb /v /w +goto TOP + +:END +exit diff --git a/SRC/PIF_WIMP.BAT b/SRC/PIF_WIMP.BAT new file mode 100644 index 0000000..187ba5e --- /dev/null +++ b/SRC/PIF_WIMP.BAT @@ -0,0 +1,7 @@ +@echo off +if "%winpmt%"=="" set winpmt=%prompt% +set prompt=WIMP-Win %winpmt% +cd img +ds en +newwimp /col=0x1084,0x7fff /u=z +exit diff --git a/SRC/PLYR.ASM b/SRC/PLYR.ASM new file mode 100644 index 0000000..84fa788 --- /dev/null +++ b/SRC/PLYR.ASM @@ -0,0 +1,12338 @@ +************************************************************** +;To Do for MARK: + + +;snd on ddunk start +;rndper combat +;fix spear ball +;fix spear ball z +;show hidden pass rating +;show hidden clutch rating +;Jordan layup from in too close +;Do dunks... +;Check all dunk_b code for lack of ball!!!!!!!!!!!! +;Give reasons to pick some teams... + +;pick up ball, along sideline + + +;1 ally opp jump up attempt per inbound for drone playing with a human +;3 successful drone ally oops per period - then stop +;If human goes up for an alley oop and is denied, don't have drone shoot. + + + +;done: Timer runs out on layup from dunk and ball doesn't continue! +;done: Slow down run tick cnt +;done: Turn smoke off when tvpanel is on screen +;done: Midway copyright info - hang logo on top +;done: Chk colors of ABA ball +;done: DDunk white-flash bug +;done: Get rid of all 0,0 ani pts - ball ani pts!! +;done: Chk Vancouver heads - one seemed to be facing down +;done: Better goaltend esp. on-fire +;done: Match make player tables to plyrat tables +;done: Less CPU assist +;done: Less intercepts! Ddunks harder to block! +;done: Lineup #5 swat +;done: Gill/Gilliam +;done: Turn off arrows on top of head more... +;done: Fewer intercepts +;done: Get Sean head darkened (small heads also?) +;done: Look at missed dunk offsets.... +;done: Layups more blockable +;done: Alley oop passes should be intercepted more! +;done: Radja head points +;done: New rules for when we flash white on a dunk... - Height! +;done: Don't let knock-downs keep the ball as often +;done: don't swat rebound +;done: don't grab off rim if rim hit time is less than 4 ticks? +;done: One-handed snag blocks = rebound +;done: Do shot delay at end of swats! In seq! +;done: No feet fire when jumping on defense +;done: Debounce shoot on drone dunk - he always laysup + +;MARK: Blocking drift? which way? +;MARK: Eldon Campbell was pushed out of a mini-dunk : CRASH!! +;MARK: Random Y vel on big guy pushdowns + +;MARK: Turn off falling down pass to alley ooper +;MARK: Ball hits glass wall on blocks! What art? +; Wierd collision on #5 type block +;MARK: Off-screen speed rules: Speed up offense, but slow'em dwn if passed 2 +;MARK: Slow down long passes! +;MARK: Better dunk flail +;MARK: In middle of dunk, 2 taps send drone teammate up for double dunk +;MARK: In middle of dunk, 1 tap sends drone teammate out to 3 pt range +;MARK: Other layups out of dunk... IE the old one! +;MARK: Fall down seqs +;MARK: Home game has expanded create player sfx, etc +;MARK: Ultimate title page +;MARK: Chk all img size bits +;MARK: Pushing a jump shooter problem +;MARK: Chk plyr push detect/accuracy +;MARK: Add weight att. to gameplay +;MARK: Perhaps do an extra check at 3pt shot to cause weak 3pt shooters to +; fail! +;MARK: Don't float toward teammate shot, (for put back---alley oop) +;MARK: During HEADCK, also listen for correct name speech! +;MARK: No look into wrong dir +;MARK: At end, check all dunk header tables for flip angle correctness! +;MARK: Could get rid of pals on all player images! +;MARK: Get Ed paper debris for outdoor court +;MARK: allow drone circus mode in some cases... +; #noalyo is the label in DRONE2.ASM +;MARK: don't attach to ball at block time if ball near grnd + + +;MARK: Inbound on the run - powerup? +;MARK: Running pass +;MARK: Consider other seqs for ddunks/alleys - careful of range checks +;MARK: Chk Cebalis mug shot +;MARK: Gambling option +;MARK: Fix mug shot Y anim +;MARK: Chk block skill attribute/jump a little higher? +;MARK: Attract show create a player +;MARK: Robotron after 10 consecutive wins... Shoot head in Robotron... +;MARK: NBA dudes in credits... Joe Amati, Greg Lassen, etc. +;MARK: Reuse previous initials at start of next game? Jamie!!! + + +************************************************************** +;To Do for SHAWN: + +;SHAWN: Have drones call for a pass when at positions where the art +; looks good... I can tell you... +; +; Tell drone to be aggressive like at end of qrtr +; or different d coverage - this could be a powerup type move or swirl! +;SHAWN: Don't swat while running @ loose ball +;SHAWN: Have dunking drone glitch to layup in final seconds +;SHAWN: On fire drones didn't even bother with a loose ball +;SHAWN: Drones shouldn't do the same thing @ the same time! They do!! +;SHAWN: Drones do spin move followed immediately by full-court shot +;SHAWN: Make sure smarter drone privilege works! +;SHAWN: Major jitter! Send drone out looking for an alley-oop - jitter city! +;SHAWN: I pass to drone, he shoots! + +;SHAWN: Drones have problem picking up loose ball esp. in Z +;SHAWN: Drone did elbows in backcourt, then threw up a full court shot! +;SHAWN: Have drones try to block alley oop passes/dunks + + +************************************************************** +;To Do for JEFF: (Put DONE in place of your name when complete) + +;done: Don't speed thru wipes at buyin scrns and coaching tips +; it is too fast - regular speed will do... +;done: Flash halftime/final stats leader +;done: Add nickname text +;done: Lineup ball/hand for #1 ddunk on right side of court +;done: Take out 2-press ddunk stuff +;done: Check 2PLYR KIT stuff +;done: Make sure bozo on final game stats stays long enough - too fast now? +;done: Don't default to chicken head!! Center head = highest priority! +;done: Player stat screen bullet next to shoulder on create player +;done: Verify next opponent page on team select plyr stat (PHILLY?) +;done: No air ball from ddunk layup! +;done: Make created players go even a little heavier (300 max) +;done: Have Jon turn up speech call vol - "Block it!" +;done: Get rid of "ooohhhhh" on ddunks + +;done: Keep putting in sounds +;done: Finish create a player shit +;done: Create player heads on final res. page +;done: Sound calls in diagnostics test mode +;done: Priviliges text/functions +;done: Fix alley-oop speech when it really wasn't one +;done: Get more custom pals for create player +;done: More grunts (on elbows, dunks, in-air flail) +;done: Make rejected speech more intelligent +;done: Rank stuff doesn't work!! Resolve ties on plates +;done: when teammate shoots for 3 and im in alleyoop & catch ball -> 3 pts. +;done: 2 for 1 on 3-ptrs at stats page +;done: Fix 3 pts flashing for 2 point alley oop put in +;done: Put name & trivia pts on prize page (Before question) +;done: Softly off of glass speech happened on pure swish +;done: Names at botm of scrn on stats pages need to go dwn 1 line - not the +; CPU word however! +;done: Too many pixels in between letters for small name in lower attribute +; box. F A G B O Y should look like FAGBOY! +;done: "Player of the game..." at half doesn't always come up +;done: Pump up Hot dog sound priority +;done: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;done: World record page needs "Individual stats" displayed +;done: Record stats pages needs "... Team ..." displayed +;done: "Switches hands" when there is a layup out of a dunk +;done: Higher priority for layups-out-of-dunks +;done: No music on start out of attract mode!! +;chkd: Snd system volume reset problem +;done: Fix favored by points on vs. screen +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;done: Put in secret players +;done: Do attract mode/sound volume +;done: Cannonball sound effect +;done: Get rid of long delay on sound board reset (at reset game time) + + +;done: Put in extra trivia questions +;done: Check all secret players, check audio for them as well... +;done: Don't fade down chick singing at end of game.... +;JEFF: Put back missed shot with alley oop dunk speech call +; Check variable must_rebound + +;done: put grunts on push downs!!! +;done: put noise on big dunks!!! +;JEFF: more dunks!?!?! +;JEFF: Plyr trails for team fire dunks - outdoor only?!? +;JEFF: Get Jordan, Barkley, Shaq look alike heads +;JEFF: Dunks - shadow trails, smoke from body, etc. +;done: Shot clock big bug! +;JEFF: Shot clock text on top of Goal tending text! +;done: Line up trivia question text +;JEFF: Hide some privileges in create player - smarter drone +;done: Default team pal in create player + +************************************************************** +;To Do for DAN: (Put DONE in place of your name when complete) + +;done: Reduce huge heads +;done: ABA ball off-fire after bucket (other too?) +;done: Legal text - attn New York text +;done: Paul & Cary shit +;done: Flash red/white on player win award text +;done: Make shots always go for adjusting % +;done: Team fire wants to adjust per CMOS timer setting +;done: Outdoor court fade up +;done: Trivia instructions screen & victory page +;done: attract whopper sounds +;done: Dress up board/eprom test +;done: Powerup nodrift... +;done: Power-up stuff +; plyr button moves +; head size(s) +; court +; ABA ball (hidden - not default!) +; Shot perc +;done: New imgs (cheer, nba, etc) +;done: Design team,thanks screens +;done: MDoc credits +;done: Put cheerleaders on court - outside perhaps +;done: Put in ZIP screens + +;DAN: Tournament ladder! Not! See Jamie in a month... +;DAN: Sound script remaining after game demo +;DAN: Do another powerup for regular sized guys! 80% of what they are now. +;DAN: Team on-fire backboard effects +;DAN: GT inbounding bug - no one picked up the ball +;DAN: Play with scale tables for better range +;DAN: Link in Robotron + +;DAN: Do alternate head scale tables +;DAN: Hot spot, 3 from any of many regions (3pt only?), non-consecutive +;DAN: DCS page +;DAN: PIC chip/diagnostics/sound chksums +;DAN: Proof text +;DAN: Games played wants to be in the trivia password +;DAN: TGA unzipper +;DAN: Out of position drifting plyr arrows @ start of qrtrs +;DAN: Chk for bog on release version +;DAN: Verify team fire & valid shot seqs +;DAN: TV Plate for individual players +;DAN: Operator message stuff + +;DAN: Press button bozo for team select +;DAN: Sound after trivia rules screen +;DAN: Sound after credit screen + +;DAN: Implement drone smart +;DAN: Floating in from behind hoop #2 or #1 arrow at start of periods + +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 9/17/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:21 +************************************************************** + + .file "plyr.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "imgtbl.glo" + .include "imgtbl7.glo" + .include "credturb.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref tunehalf_snd + .ref brush20_ascii + .ref swat_snd,sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd + .ref airball_sp,sht_stunk_sp,misd_mile_sp,way_shrt_sp,misd_evry_sp + .ref scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd + .ref sqk5_snd,sqk6_snd,pass_snd,fpass_snd + .ref fball_snd,overtime_sp,rainbow_sp + .ref whitsle_snd,baddec_sp,tuneend_snd + + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref shadow1,shadow2,shadow3,shadow4,shadow5,shadow6 + .ref shadow7,shadow8,shadow9,shadow10,shadow11,shadow12 + .ref shadow13,shadow14,shadow15,shadow16,shadow17,shadow18 + .ref ballshad2,ballshad4,ballshad5,ballshad7 + +; .ref p1taps +; .ref fatality +; .ref seq_stopfire + .ref brick_count + .ref last_power + .ref qtr_purchased + .ref call_scores + .ref last_name_time + .ref bast18_ascii + .ref player1_data + .ref player2_data + .ref player3_data + .ref player4_data + .if DRONES_2MORE + .ref player5_data + .ref player6_data + .endif + + .ref plyr_onfire + .ref pushed_speech + + .ref grand_champs_screen + .ref show_hiscore + + .ref rebound_delay + .ref def_play_reward,flash_reward,sinecos_get,slamming + .ref start_animate,pass_off,steals_off,idiot_box + + .ref GET_ADJ + .ref HANGF_R_P,HANGF_W_P + + .ref pass_to_speech + .ref shoots_speech + .ref shot_type,shot_percentage,shot_distance + + .ref plyr_getattributes,snd_play1ovr + + .ref scores,prt_top_scores + .ref score_add,score_showtvpanel2 + .ref score_showtvpanel,tvpanelon + .ref gmqrtr + .ref clock_active + .ref crplate_ptr + .ref shot_clock,shotimer + .ref arw_on1plyr + .ref pushing_delay + .ref cntrs_delay + .ref game_time + .ref sc_proc + .ref stick_number + .ref doalert_snd + .ref flash_bigtxt + + .ref player_data + .ref inc_player_stat + .ref stats_page,hint_page + .ref stats_page2 + .ref rank_screen +; .ref result_screen + .ref save_player_records + .ref game_purchased + .ref team1,team2 + .ref show_ot_msg,scr1 + + .ref winner_stays_on + .ref print_string_C2 + .ref mess_objid + .ref setup_message +; .ref omlgmd_ascii + + .ref pal_clean + .ref pal_getf,pal_set + .ref fade_down_half,fade_up_half + + .ref SCRTST + .ref IRQSKYE + .ref PCNT + .ref GAMSTATE,HALT + .ref gndx + .ref AUD,AUD1,GET_AUD,STORE_AUDIT + .ref PSTATUS2 + .ref RNDPER + .ref game_over + .ref TWOPLAYERS + + .ref scalebaby_t,scalehead_t,scalebighead_t,scalehugehead_t + .ref scale63_t,scale66_t + + .ref ball_convfmprel + .ref ballobj_p + .ref ballpnum,ballpnumlast,ballpnumshot,ballfree + .ref my_ballpnumlast + .ref ballrimhitcnt,ballbbhitcnt + .ref ballpasstime + .ref ballscorezhit + .ref ballptsforshot + .ref ballprcv_p + .ref ballgoaltcnt + .ref ballsclastp + .ref ballshotinair ;Shooter # if shot in air, else -1 + .ref inbound + .ref ballflash + .ref t1dunkcnt + .ref plyr_setptsdown + + .ref halftime_showclips + +; .ref plyr_smoketrail + + .ref drone_main,drone_adjskill +; .ref drone2on + .ref w3run1 + .ref w3stand1,w4stand1,w5stand1 + + .ref _switch_addr + .ref _switch2_addr + + .ref SHOTPER + .ref scale_t_size + .ref hangfnt38_ascii + .ref mess_line_spacing + .ref aly_pass_snd + .ref swith_hnd_sp,spn_shtup_sp + .ref dronesmrt +;symbols defined in this file + + +;uninitialized ram definitions + BSSX reduce_3ptr,16 + BSSX kp_scores ,32 + BSSX kp_team1 ,16 + BSSX kp_team2 ,16 + + BSSX pleasewt ,16 + BSSX PSTATUS ,16 ;Player in game bits (0-3) + ;/Must be in order! + BSSX P1CTRL ,16 ;P1 joy/but bits (0-3=UDLR, 4-6=B1-B3) + BSSX P2CTRL ,16 ;P2 (^ 8-14 are on for a on transition + BSSX P3CTRL ,16 ;P3 of 0-6) + BSSX P4CTRL ,16 ;P4 + .if DRONES_2MORE + BSSX P5CTRL ,16 ;P5 + BSSX P6CTRL ,16 ;P6 + .endif + + BSSX P1DATA ,PDSIZE ;Player 1 data + BSSX P2DATA ,PDSIZE ;P2 + BSSX P3DATA ,PDSIZE ;P3 + BSSX P4DATA ,PDSIZE ;P4 + .if DRONES_2MORE + BSSX P5DATA ,PDSIZE ;D5 ;always a drone + BSSX P6DATA ,PDSIZE ;D6 ;always a drone + .endif + + .bss pld ,PLDSZ*NUMPLYRS ;Plyr secondary data + BSSX plyrobj_t ,32*NUMPLYRS ;*player obj + BSSX plyrproc_t ,32*NUMPLYRS ;*player process + + BSSX plyrcharge ,16 ;!0=Dunker rammed an opponent + BSSX plyrpasstype ,16 ;!0=Turbo pass + BSSX plyrairballoff ,16 ;!0=No airball sound + + .bss plyrinautorbnd ,16 ;!0=A plyr is in auto rebound +; .bss drnzzcnt ,16 ;Drone zigzag mode cntdn +; .bss drnzzmode ,16 ;Drone zigzag mode (0-?) + + BSSX plyrpals_t ,256*16*NUMPLYRS ;Assembled palette for each plyr + BSSX assist_delay ,16 + BSSX assist_plyr ,16 + BSSX kp_qscrs ,(2*16)*7 ;Keep scores during game play + BSSX kp_qscrs2 ,(2*16)*7 ;Keep scores for attract mode +; +;Ram for secret power-ups (if add any, also add to 'clear_secret_powerup_ram') +; + BSSX pup_lockcombo ,16 ;Flag for locking power-up combos + + BSSX pup_bighead ,16 ;Bit 0-3 on = plyr 0-3 has big head + BSSX pup_hugehead ,16 ;Bit 0-3 on = plyr 0-3 has huge head + BSSX pup_showshotper ,16 + BSSX pup_notag ,16 ;Bit 0-3 on = dont show plyr 0-3 arrow + BSSX pup_nodrift ,16 ;Bit 0-3 on = no drift for block jumps + BSSX pup_noassistance,16 ;1=turn help off + BSSX pup_aba ,16 ;0=regular ball, !0=ABA ball + BSSX pup_court ,16 ;0=indoor, !0=outdoor + BSSX pup_showhotspots,16 ;Bit 0-3 on = show plyr 0-3 hotspots + + BSSX pup_tournament ,16 ;*4 + + BSSX pup_baby ,16 ;Flag for baby size mode + BSSX pup_nomusic ,16 ;Flag for no game-time music + BSSX pup_goaltend ,16 ;Bit 0-3 on = plyr 0-3 has powerup g.t. + BSSX pup_maxblock ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxsteal ,16 ;Bit 0-3 on = plyr 0-3 has stl power + BSSX pup_maxpower ,16 ;Powerup power - can't be pushed down + BSSX pup_maxspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_hypspeed ,16 ;Bit 0-3 on = plyr 0-3 max runing speed + BSSX pup_trbstealth ,16 ;Bit 0-3 on = plyr 0-3 shoes dont change color + BSSX pup_trbinfinite ,16 ;Bit 0-3 on = plyr 0-3 always has turbo + BSSX pup_nopush ,16 ;Bit 0-3 on = plyr 0-3 can't push + BSSX pup_fastpass ,16 ;Bit 0-3 on = plyr 0-3 has fast passing + + BSSX pup_strongmen ,16 ;Grnd champ flag 0,1 or 2 for team # + +;For moving during inbound! +; .bss inbound_lead ,16 ;Leading inbound pass flag + .bss drone_attempt ,16 ;Alley oop jump up attempts +; BSSX drone_alley_cnt ,16 ;3 successful drone alley oops/period + + +;equates for this file + +;DJT Start + .asg 15,HOTSPOTX_RNG + .asg 22,HOTSPOTZ_RNG + +;DJT End +IBX_INB .equ 345 +IBZ_INB .equ CZMID+10 +IBX_OOB .equ 415 +IBZ_OOB .equ CZMID-15 +IBX_CRT .equ 395 +IBZ_CRT .equ CZMID-15 + +IBX_DEF .equ 230 +IBZ_DEF1 .equ CZMID-50 +IBZ_DEF2 .equ CZMID+70 + + .if DEBUG + BSSX QUICK_TIP ,16 ;Set at game start. 1=quick + .if HEADCK + BSSX debug_plyr_num,16 + .endif + .endif + + .text + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_secret_powerup_ram + + clr a0 + move a0,@pup_lockcombo + move a0,@pup_bighead + move a0,@pup_hugehead + move a0,@pup_showshotper +;DJT Start + move a0,@pup_showhotspots +;DJT End + + move a0,@pup_nomusic + + SUBR clear_secret_powerup_tmode + + clr a0 + move a0,@pup_notag + move a0,@pup_nodrift + move a0,@pup_noassistance + + move a0,@pup_baby + move a0,@pup_goaltend + move a0,@pup_maxblock + move a0,@pup_maxsteal + move a0,@pup_maxpower + move a0,@pup_maxspeed + move a0,@pup_hypspeed + move a0,@pup_trbstealth + move a0,@pup_trbinfinite + move a0,@pup_nopush + move a0,@pup_fastpass + +;DJT Start +;DJT made showhotspots work in tourney-mode +;DJT End + move a0,@pup_strongmen + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; .if DRONES_2MORE +; SUBR add_drone_to_each_team +;; +;; First add a drone to team 1 +;; +; move @PSTATUS,a1 +; ori 4,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 4,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; +;; +;; Now add a drone to team 2 +;; +; move @PSTATUS,a1 +; ori 5,a1 ;Set bit +; move a1,@PSTATUS +; +; move @PSTATUS2,a1 +; ori 5,a1 ;Set bit saying this guy has started +; move a1,@PSTATUS2 ;and 50 cent buyin has happened! +; rets +; .endif + + +******************************** +* Start player processes + + SUBR plyr_start + +; movk 1,a0 +; move a0,@>fff80000,L + + callr joy_read2 + + clr a0 + move a0,@plyrinautorbnd + move a0,@plyrcharge + move a0,@plyrairballoff +; move a0,@pup_maxsteal +;DJT Start +; move a0,@pup_strongmen ;Grand champion playing flag + +; movk 1,a2 + clr a3 + move @player1_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set1 + move @player2_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #ck1 +#set1 + addk 1,a3 +#ck1 + move @player3_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jreq #set2 + move @player4_data+PR_TEAMSDEF,a0,L + cmpi ALL_TMS_DEFEATD,a0 + jrne #easy0 +#set2 + addk 2,a3 +#easy0 + move a3,@pup_strongmen ;Grand champion playing flag + +; jruc #easy + +#nea +;DJT End + +; clr a2 +; movk ADJDIFF,a0 ;Get difficulty level +; calla GET_ADJ +;;Which drone code do we use? +;;Level 1 uses old, above uses new shit... +; subk 1,a0 ;3 +; jrle #regdrn +; movk 1,a2 +;#regdrn +; move @PSTATUS,a0 +; cmpi 1,a0 +; jrz #hard +; cmpi 2,a0 +; jrz #hard +; cmpi 4,a0 +; jrz #hard +; cmpi 8,a0 +; jrnz #easy +;#hard +; movi 200,a0 +; calla RNDPER +; jrhi #easy +; movk 1,a2 ;Give hard drones 70% of time +; +;#easy move a2,@drone2on + + + +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d + + movk ADJHEADSZ,a0 ;Get head size + calla GET_ADJ ;1-2 + subk 1,a0 + jrle #adjoff ;No big heads? + move @pup_bighead,a2 + movk >f,a14 + xor a14,a2 + move a2,@pup_bighead +; clr a2 +; move a2,@pup_hugehead +#adjoff + + .if DEBUG + move @QUICK_TIP,a14 + jrz #refon + clr a0 + callr plyr_setac + jruc #refoff +#refon + CREATE0 plyr_referee +#refoff + .else + CREATE0 plyr_referee + .endif + + movi plyrproc_t+32*NUMPLYRS,a2 ;Set ptrs & cnt to make plyrs + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 ;-1 to fall thru for last one +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L +; jruc plyr_main ;#0 + + +#******************************* +* Main player control code (Process) +* A8=Plyr # (0-3) +* A9=*plyrobj_t for plyr # +* A13=*PDATA for plyr # + + + SUBR plyr_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + +; .ref inmatchup +; move @inmatchup,a0 +; jrnz #nohdcng ;br=no powerups on matchup screen +; +; move a8,a0 ;Chk powerup seqs +; sll 4,a0 +; addi P1CTRL,a0 +; move *a0,a0 +; sll 32-7,a0 ;Mask to just stick & 3 buttons +; srl 32-7,a0 + +; cmpi BUT1_M|JOYD_M,a0 ;Shoot, Down +; jrne #nostl +; move a8,a0 +; sll 4,a0 +; addi p1taps,a0 +; move *a0,a0 +; cmpi 5,a0 ;At least 5 taps? +; jrlt #nostl +; move @pup_maxsteal,a0 ;Powerup intercepts (Quick hands) +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_maxsteal +;#nostl +; cmpi BUT3_M|BUT2_M|JOYU_M,a0 ;Turbo, Pass, Up +; jrne #nohdcng +; move @pup_bighead,a0 ;Headsize override +; movk 1,a14 +; sll a8,a14 +; xor a14,a0 ;Flip bit +; move a0,@pup_bighead + +#nohdcng + movi -1,a1 + move a1,*a13(plyr_newdir) + movk 1,a0 + move a0,*a13(plyr_shtbutn) + + movk 30,a0 + move a0,*a13(plyr_turndelay) + + move a8,*a13(plyr_num) + move a8,a11 + + movk 1,a7 + xor a8,a7 + sll 5,a7 ;*32 + addi plyrproc_t,a7 + move *a7,a7,L + move a7,*a13(plyr_tmproc_p),L + + movi P2DATA-P1DATA,a7,W + mpyu a8,a7 + addi P1DATA,a7 + move a7,*a13(plyr_PDATA_p),L + + calla plyr_getattributes ;Set attribute_p + ;A10=*Uniform attr (ignores spechds) +;---------- +; setup tip-off img + +; move @inmatchup,a0 +; jrz #nmtch_1 +; movk 1,a14 +; move a14,*a13(plyr_nojoy) +; move a14,*a13(plyr_autoctrl) +; +; movi #pm1-#pmatch_t,a7,W ;set ptr to tip-off init table for +; mpyu a8,a7 ; this plyr +; addi #pmatch_t,a7 +; jruc #mtch_2 +;#nmtch_1 + + movi #pd1-#pdat_t,a7,W ;set ptr to tip-off init table for + mpyu a8,a7 ; this plyr + addi #pdat_t,a7 + +#mtch_2 + move *a7+,a0 ;Plyr PID + move a0,*a13(PROCID) + move *a7+,a1 ;Dir + move a1,*a13(plyr_dir) + move *a7+,a0 ;X offset + move @WORLDTLX+16,a1 + add a1,a0 + +;LOOK!!! + move @gmqrtr,a3 ;if not 1st qrtr, push them all over + jrz #not2 ; to the rgt side inbound + addi 400,a0 ;!!! +#not2 + sll 16,a0 ;X + clr a1 ;Y + move *a7+,a3 ;Z + move *a7,a2,L ;OIMG + movi DMAWNZ|M_3D,a4 +; cmpi 1,a8 +; jrnz #qkfix2 +; movi DMAWNZ|M_3D|M_FLIPH,a4 +;#qkfix2 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a9,L ;Save *obj + + movi scale63_t,a0 ;Temp size + move a0,*a8(ODATA_p),L + + SLEEPK 2 ;Wait for other plyrs init + +;---------- +; set up player attribute + + move a10,a6 ;A10=*Uniform attr (ignores spechds) + + move *a13(plyr_attrib_p),a7,L + move *a7,a0,L ;*scale_t + move a0,*a8(ODATA_p),L + move *a7(PAT_BVEL),a0 ;speed + move a0,*a13(plyr_bvel) +;DJT Start + + move *a7(PAT_HOTSPOT),a0 ;Hotspot + sll 5,a0 + addi hotspot_xz_t,a0,L + move *a0+,a14 + cmpi NUMPLYRS/2,a11 + jrlt #hs_px + subi WRLDMID,a14 + neg a14 + addi WRLDMID,a14 +#hs_px + move a14,*a13(plyr_hotspotx) + move *a0,a14 + move a14,*a13(plyr_hotspotz) +; +; see if & how we might want to screw with PAT_SKILL +; + move @PSTATUS,a1 + + movk 1100b,a2 ;Team2 wants to + movk 0011b,a3 ; chk team1 + cmpi 2,a11 + jrhs #chktm + movk 0011b,a2 ;Team1 wants to + movk 1100b,a3 ; chk team2 +#chktm + clr a0 ;Drone skill if human or human tm + and a1,a2 + jrnz #setskl ; br=is human or human tm + + move *a7(PAT_SKILL),a0 ;Drone skill if drone team + and a1,a3 + jrz #setskl ; br=other team is also all drones! + + clr a2 + clr a3 + clr a4 + + movk 2,a14 + xor a11,a14 + btst a14,a1 + jrz #noth1 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a5 ;- if no entry + or a5,a2 ;Set new ani +; move *a14+,a10 ;Delay +; jrnz #moses +; move *a13(plyr_ani1st_p),a14,L ;Head of list +; move *a14+,a10 +; +;#moses move *a14+,a0,L ;*Img +; move *a14+,a1 ;Flags (OCTRL) +; move a14,*a13(plyr_ani_p),L +; callr plyr_ani +; +; move *a13(plyr_aniy),a1 +; neg a1 +; move a1,*a8(OYPOS) ;Set on gnd +; +;#noa callr plyr_headalign +; jruc #pn03a +; +;#pn03b + +;---------- +; set appropriate team hoop target + + movi HOOPLX,a0 + movi HOOPRX,a1 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #sethp + SWAP a0,a1 +#sethp move a0,*a13(plyr_myhoopx) + move a1,*a13(plyr_ohoopx) + +; move *a13(plyr_num),a0 ;DEBUG +; subk 2,a0 +; jreq #num2 +; SLEEP 30000 +;#num2 + + SLEEPK 2 ;Wait for others to establish data + + .bss plyr_main_initdone,16 ;Plyr init done flag (0=not, !0=is) + movk 1,a0 + move a0,@plyr_main_initdone +;For moving during inbound! +; clr a14 +; move a14,@inbound_lead + +;------------------------------ +; Top of main player proc loop + +#lp + move @HALT,a0 + jrnz #halted + +; clr a9 + + .if IMGVIEW + move *a13(plyr_num),a0 + cmpi 0,a0 + jrz #yesx + cmpi 3,a0 + jrne #halted +#yesx + movk 1,a2 ;+=Me + jruc #nobl2 + .endif +; +;This could be a dipswitch setting for our home games +;FIX +; move @DIPSWITCH,a0 +; btst 0,a0 ;UJ2 switch 8 +; jrnz #notfair ;OFF? +; clr a0 +; move a0,*a13(plyr_ptsdown) +;#notfair +; + +;-------------------- +; Plyr ball-ownership handling + + clr a2 ;Clr owner flag (0=neither teammate) + move @ballpnum,a1 + move *a13(plyr_num),a0 + cmp a1,a0 ;Plyr have the ball? + jreq #has_ball ;br=yes + XORK 1,a0 ;No. Does his teammate? + cmp a1,a0 + jrne #not_tm ;br=no, other team or free + subk 1,a2 ;-=Teammate +#not_tm + move a2,*a13(plyr_ownball) ;Save owner flag + jruc #hadball + +#has_ball + move *a13(plyr_seqflgs),a14 + btst NOBALL_B,a14 ;Can plyr current seq hold the ball? + jrz #can_hold ;br=yes +#no_hold + move a2,@ballbbhitcnt ;No. Drop the ball + move a2,*a13(plyr_ownball) ;Save owner flag (0=neither teammate) + subk 1,a2 + move a2,@ballpnum ;Set to -1 for no plyr owner + move a2,@ballpnumlast + calla ball_convfmprel ;Yank ball from plyr-relative coord + jruc #hadball + +#can_hold + move *a13(plyr_ownball),a0 ;Yes. Did plyr already have it? + jrgt #hadball ;br=yes + + move @ballobj_p,a1,L ;No. Plyr just got the ball + move *a1(OYPOS),a0 + cmpi -28,a0 ;!!!Ball above dribble Y vel flip pnt? + jrlt #chk_rbnd ;br=yes, chk if rebound + move *a1(OYVEL),a0,L ;No. Chk Y vel to see if rebound + abs a0 + cmpi >c000,a0 ;!!!Ball rolling on the floor? + jrge #chk_rbnd ;br=no, chk if rebound + + move *a13(plyr_jmpcnt),a0 ;Yes. Is plyr in the air? + jrnz #no_hold ;br=yes, don't pick-up rolling ball +; calla seq_stopfire + movi PICKUP_SEQ,a0 ;No. Pick-up ball + move *a13(plyr_dir),a7 + callr plyr_setseq + jruc #own_ball + +#chk_rbnd + move @rebound_delay,a0 ;Ball just come off the boards? + jrz #own_ball ;br=no + move a2,@rebound_delay ;Yes, but was it a basket? + move @inbound,a0 + jrnn #own_ball ;br=yes, not a rebound + + movi PS_OFF_REB,a0 ;Assume offensive rebound + move *a13(plyr_num),a1 + move @ballpnumlast,a14 ;Plyr on the same team as plyr who + srl 1,a1 ; missed the basket? + srl 1,a14 + cmp a1,a14 + jrz #offrb ;br=yes + movi PS_DEF_REB,a0 ;No. Defensive rebound +#offrb + move *a13(plyr_num),a1 ;Inc plyr rebound stat + calla inc_player_stat + +#own_ball + movk 1,a2 + move a2,*a13(plyr_ownball) ;Save owner flag (+=plyr) +;added this to hopefully fix the ignoring of the pass button after pass + move a2,*a13(plyr_rcvpass) + move *a13(plyr_num),a14 + move a14,@my_ballpnumlast + PUSH a10 + move a13,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a10 + + move *a13(plyr_num),a0 + move @ballsclastp,a1 + srl 1,a0 ;Do team #s for shot clock compare + srl 1,a1 + cmp a0,a1 ;Need to reset the shot clock? + jreq #hadball ;br=no, same team has ball + + move *a13(plyr_num),a14 + move a14,@ballpnumshot + move a14,@ballsclastp + calla shot_clock ;New 24 + +;-------------------- +; Set turbo flag per button & availability + +#hadball + clr a0 ;>Setup turbo flag + move *a13(plyr_nojoy),a6 + jrn #newjoy ;Override plyr input? + move *a11,a6 +#newjoy btst BUT3_B,a6 ;Turbo but + jrz #turboff + move *a13(plyr_PDATA_p),a1,L + move *a1(ply_turbo),a1 + jrz #turboff ;No turbo left? + movk 1,a0 +#turboff + move a0,*a13(plyr_turbon) + +;-------------------- +; Calc dirs/dists to plyrs/hoops/ball + + move *a13(plyr_num),a4 ;>Do 1 in 4 ticks + move @PCNT,a0 + move a4,a1 + sll 32-2,a0 + sll 32-2,a1 + cmp a0,a1 + jrne #skip + + movk 1,a14 ;>Get teammates dir/dist + xor a4,a14 + sll 5,a14 ;*32 + addi plyrobj_t,a14 + move *a14,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_tmdir) + move a1,*a13(plyr_tmdist) + + srl 1,a4 ;>Get opponents dir/dist + movk 1,a14 + xor a14,a4 + sll 6,a4 ;*64 + addi plyrobj_t,a4 + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o1dir) + move a1,*a13(plyr_o1dist) + + move *a4+,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_o2dir) + move a1,*a13(plyr_o2dist) + + move @ballobj_p,a0,L + callr seekdirdist_obob128 + move a0,*a13(plyr_balldir) + move a1,*a13(plyr_balldist) + + move *a13(plyr_myhoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_hpdir) + move a1,*a13(plyr_hpdist) + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_ohpdir) + move a1,*a13(plyr_ohpdist) +#skip + +;-------------------- +; Set plyr defensive flag + + clr a14 ;>Setup defensive flag + move @ballpnum,a0 + jrn #setdef ;No owner? + move *a13(plyr_ownball),a0 + jrnz #setdef ;My team has? + + move *a13(plyr_hpdist),a0 + + move *a13(plyr_num),a1 + move @PSTATUS,a2 + btst a1,a2 + jrz #drn + cmpi 220*DIST_ADDITION,a0 ;stupid K!!! + jruc #ndrn +#drn + cmpi 310*DIST_ADDITION,a0 ;stupid K!!! +#ndrn jrge #setdef ;Too far from my hoop? + + move *a13(plyr_hpdir),a0 ;Find dir difference + move *a13(plyr_balldir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 ;stupid K!!! + jrle #dsml + subi >80,a0 ;stupid K!!! + abs a0 +#dsml subk 24,a0 ;stupid K!!! + jrle #setdef ;Not between ball and hoop? + + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #setdef + move *a13(plyr_o1dist),a1 + cmpi 7ch,a1 + jrlt #defon + move *a13(plyr_o2dist),a1 + cmpi 7ch,a1 + jrge #setdef +#defon movk 1,a14 +#setdef move a14,*a13(plyr_indef) + +;-------------------- +; Handle stagger/fall seqs + + move *a13(plyr_autoctrl),a0 + jrnz #tcc ;Temp computer control? + + move *a13(plyr_seqflgs),a0 + btst NOCOLLP_B,a0 + jrnz #nocol ;No collide? + callr plyr_chkpcollide +#nocol + move *a13(plyr_stagcnt),a2 + jrle #nostag + subk 1,a2 + move a2,*a13(plyr_stagcnt) + subk 15,a2 ;stupid K!!! + jrle #nostag + + move *a13(plyr_seq),a14 + subk 30-15,a2 ;stupid K!!! + jrle #chkstag ;Chk stag? + +; move @plyr_onfire,a1 +; jrz #noflm1 +; move @fatality,a2 ;bit 0=tm1, bit 1=tm2 +; jrz #noflm1 +; sll 3,a1 +; addi pbit_tbit,a1,L +; movb *a1,a1 ;Assume valid plyr_onfire +; move *a13(plyr_num),a3 +; srl 1,a3 ;make tm # 0 or 1 +; btst a3,a1 +; jrnz #noflm1 ;br=on the on-fire tm +; and a1,a2 +; jrz #noflm1 ;br=on-fire tm fatality not set +; movi 500,a0 ;### +; calla RNDPER +; jrls #noflm1 +;;Yes, this will be a flaming fall! +; movk 1,a9 +;#noflm1 +; + move *a13(plyr_seq),a14 + + movi FLYBACK_SEQ,a0 +; move a9,a9 +; jrz #noflm2 +; movi FFLYBACK_SEQ,a0 +;#noflm2 + cmp a0,a14 + jreq #cstag + +; cmpi FALL_SEQ,a14 +; jrge #cstag +; cmpi FFLYBACKWB2_SEQ,a14 +; jrgt #cstag + + cmpi FLYBACKWB_SEQ,a14 + jreq #cstag + cmpi FLYBACKWB2_SEQ,a14 + jreq #cstag + cmpi FLYBACK2_SEQ,a14 + jreq #cstag + + move *a13(plyr_ownball),a1 + jrgt #haveball + + move *a13(plyr_attrib_p),a1,L + move *a1(PAT_POWER),a1 + move @last_power,a2 ;Player pushing has this power + sub a1,a2 + abs a2 + +; movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm3 +; movi FFLYBACK_SEQ,a0 +;#noflm3 + cmpi 1,a2 + jrle #fall + + sll 4,a1 + PUSH a14 + addi #noblflail_t,a1 ;Powerful guys flail more often + move *a1,a0 + calla RNDPER + PULL a14 + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm4 +; movi FFLYBACK_SEQ,a0 +;#noflm4 + +; Will this work? + jrls #fall + jruc #flail + +#haveball + +;If toward rear edge of court and is being pushed back into crowd, always do +;normal flyback and never keep ball! + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm5 +; movi FFLYBACK_SEQ,a0 +;#noflm5 + + move *a8(OZPOS),a1 + cmpi CZMIN+40,a1 ;stupid K!!! + jrgt #not_rear + move *a8(OZVEL),a1,L + jrn #fall ;Heading over scores table? + +#not_rear + move @pushing_delay,a1 + jrnz #keepball +;DJT Start +; move @pup_strongmen,a1 +; jrz #notchamp ; br=no grand champs in game +;;A grand champion is playing! +; move *a13(plyr_num),a0 +; srl 1,a0 ; =team # (0,1) +; addk 1,a0 ; =team # (1,2) +; and a0,a1 +; jrz #notchamp ; br=plyr not on a grand champ team +; movi 900,a0 ;### +; calla RNDPER +; jrhi #keepball +; +;#notchamp +;DJT End + +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;I'm winning? + +;If player is in elbo mode, have him keep ball more often! + + movi 500,a0 ;### 40% chance of keeping ball if in + cmpi ELBO_SEQ,a14 ; ELBO; could also do ELBO2_SEQ + jrz #fbnorm + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm + movi 200,a0 + jruc #norm2 + +#norm + sll 4,a0 + addi #kpball_t,a0 ;Powerful guys, keep ball more often + move *a0,a0 +#norm2 + move *a13(plyr_ptsdown),a1 + jrle #fbnorm ;losing? no if <= + cmpi 15,a1 ;### < this many down? + jrle #fbmok + movk 15,a1 ;### no, set max +#fbmok sll 4,a1 + addi #flyb_t,a1 + move *a1,a14 + add a14,a0 + cmpi 1000,a0 ;### + jrge #keepball +#fbnorm + calla RNDPER + jrls #fb + +#keepball +;Yes, keep ball even though I've been pushed. + + clr a0 + move a0,*a13(plyr_dribmode) ;Allow dribble when he gets up + +;Rules for using short flyback/WITH BALL sequence: +;If in dunk, don't do short flybacks +;If in jump shot, 50% +;If losing, 50% +;What else? + + calla pushed_speech + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm6 +; movi FFLYBACKWB_SEQ,a0 +;#noflm6 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + + + move *a13(plyr_seq),a14 + subk SHOOT_SEQ,a14 ;Am I shooting? + jrz #_50_50 + + movi 50,a0 ;### + move *a13(plyr_ptsdown),a1 + jrle #i5050 +; jrle #fall ;I'm winning? + +#_50_50 +;I'm losing or shooting, 25% of time don't fly all the way back. + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm3 + movi 250,a0 ;### + jruc #i5050 + +#norm3 + sll 4,a0 + addi #shortfly_t,a0 ;Powerful guys keep ball more often + move *a0,a0 +; movi 250,a0 +#i5050 + calla RNDPER + jrhi #nofall + + movi FLYBACKWB_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm7 +; movi FFLYBACKWB_SEQ,a0 +;#noflm7 + jruc #fall +#nofall + +; move @HCOUNT,a1 +; andi 3,a1 ;andi 1 +; jrz #fall + +;He lucked out, fly short distance + +#flail move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACKWB2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm8 +; movi FFLYBACKWB2_SEQ,a0 +;#noflm8 + jruc #fall + +#fb +;Rules for using short flyback/NO BALL sequence: +;If in dunk, don't do short flybacks +;If losing, 35% +;What else? + calla pushed_speech + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm9 +; movi FFLYBACK_SEQ,a0 +;#noflm9 + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #fall ;In dunk? + +;If big guy, do short flyback more often! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 + + move @last_power,a2 ;Player pushing has this power + sub a0,a2 + abs a2 + cmpi 1,a2 + jrgt #norm5 + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm10 +; movi FFLYBACK_SEQ,a0 +;#noflm10 + + jruc #fall +#norm5 + + sll 4,a0 + move *a13(plyr_ptsdown),a1 + jrle #winshortfly ;Br= I'm winning! +;I'm losing + addi #shortfly_t,a0 + move *a0,a0 + jruc #flyout +#winshortfly ;Br= I'm winning! + addi #winshortfly_t,a0 + move *a0,a0 + + +#flyout +; move *a13(plyr_ptsdown),a1 +; jrle #fall ;Br= I'm winning! + +;I'm losing, 35% of time don't fly all the way back. +; addi 150,a0 +;#fbnorm2 + calla RNDPER + jrhi #fly_short + + movi FLYBACK_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm11 +; movi FFLYBACK_SEQ,a0 +;#noflm11 + jruc #fall + +#fly_short +;He lucked out, make him fly short distance + move *a8(OZVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OZVEL),L + move *a8(OXVEL),a0,L +; sra 2,a0 + sra 1,a0 + move a0,*a8(OXVEL),L + + movi FLYBACK2_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm12 +; movi FFLYBACK2_SEQ,a0 +;#noflm12 + + jruc #fall + +#chkstag + move *a13(plyr_jmpcnt),a1 + jrz #stag ;On gnd? + + movi FALL_SEQ,a0 ;If similar power, always do flyback +; move a9,a9 +; jrz #noflm13 +; movi FFALL_SEQ,a0 +;#noflm13 + + cmp a14,a0 + jrne #fall + jruc #cstag + +#stag subi STAGGER_SEQ,a14 + jreq #nostag + subk FALL_SEQ-STAGGER_SEQ,a14 + jreq #cstag + + movk 3,a0 + callr rnd + jrnz #nostag + movi STAGGER_SEQ,a0 + +#fall + move *a13(plyr_dir),a7 + callr plyr_setseq +#cstag clr a2 + move a2,*a13(plyr_stagcnt) +#nostag + +;-------------------- +; Eval plyr controls + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrnz #human + calla drone_main +#human +#tcc + move *a13(plyr_indef),a14 + jrz #nodef + move *a13(plyr_balldir),*a13(plyr_newdir) + +#nodef + move *a11,a6 ;A6=Ctrl bits + +; move *a13(plyr_jmpcnt),a0 +; jrnz #clrsb ;In air? + + movb *a13(plyr_seqflgs+NOJOY_B-7),a0 + jrn #clrsb ;Joy off? + + move *a13(plyr_nojoy),a0 + jrz #joyon ;Joystick on? + jrgt #clrsb +;dont allow a jump or steal when NOJOY is set, I expecting a pass!! + + btst BUT1_B,a0 + jrnz #lock + btst BUT2_B,a0 + jrnz #lock +; andni BUT1_M|BUT2_M,a0 + move a0,a6 + jruc #joyon + +#lock + .if DEBUG + LOCKUP + .endif + move a0,a6 + jruc #joyon + +#clrsb + srl 4,a6 ;Clr stick bits + sll 4,a6 + +#joyon + move *a13(plyr_dir),a7 ;A7=Dir + + move *a13(plyr_newdir),a0 + jrn #stick ;No forced dir? + sub a7,a0 + jrnz #turn + movi -1,a0 + move a0,*a13(plyr_newdir) + +;-------------------- +; Clr joy bits that make us go out of bounds + +#stick + move *a13(plyr_autoctrl),a1 ;No chk if under auto ctrl + jrnz #chkturn + + movk 1,a3 ;Generic K + move *a13(plyr_rcvpass),a1 + move *a13(plyr_seq),a2 + subi RUN_SEQ,a2 ;Set seq match (0) or nomatch (!0) + jrz #sldin + subi RUNTURB_SEQ-RUN_SEQ,a2 + jrz #sldin + subi RUNDRIB_SEQ-RUNTURB_SEQ,a2 + jrz #sldin + subi RUNDRIBTURB_SEQ-RUNDRIB_SEQ,a2 +#sldin + move *a8(OZPOS),a0 + + cmpi CZMIN+8,a0 ;stupid K!!! ;Is Z ok? Yes if > + jrgt #upok + movk JOYU_M,a14 ;No. Clr stick UP bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait + cmpi CZMIN+6,a0 ;stupid K!!! + jrgt #upok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #upok + addk 1,a0 ;Yes +#upok + cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movk JOYD_M,a14 ;No. Clr stick DN bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait1 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait1 + +#dnok + move a0,*a8(OZPOS) + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrgt #lok + movk JOYL_M,a14 ;No. Clr stick LF bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait2 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait2 + cmpi PLYRMINX-15,a0 + jrgt #lok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #lok + addk 1,a0 ;Yes +#lok + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrlt #rok + movk JOYR_M,a14 ;No. Clr stick RG bit + andn a14,a6 + + move a1,a1 ;Receiving a pass? No if 0 + jrz #nowait3 + move a3,*a13(plyr_nojoy) ;Tell player recieving a leading pass + move a3,*a13(plyr_turndelay) ; to turn and wait for pass +#nowait3 + cmpi PLYRMAXX+15,a0 + jrlt #rok + + move a2,a2 ;Match 1 of the seqs? No if !0 + jrnz #rok + subk 1,a0 ;Yes +#rok + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + +;-------------------- +; Change dir plyr img is facing + +#chkturn + move a6,a0 + sll 32-4,a0 + jrz #setdt ;No stick? + + srl 32-4-3,a0 ;>Convert to dir 0-127 + addi #dirc_t,a0 + movb *a0,a0 + + sub a7,a0 ;A0=Difference + jrz #samedir + +#turn move a0,a1 ;>Turn the shortest way + abs a0 + +; subk 6,a0 + subk 8,a0 ;Turn faster + + jrge #340 ;Far? + add a1,a7 ;Make exact + jruc #380 + +#340 cmpi 64-6,a0 + jrle #350 + neg a1 +#350 move a1,a1 + jrnn #360 +; subk 12,a7 ;-6 + subk 16,a7 ;-8 + +#360 +; addk 6,a7 ;+6 + addk 8,a7 ;+8 + +#380 sll 32-7,a7 ;Make 0-127 + srl 32-7,a7 + move a7,*a13(plyr_dir) + + movk >1f,a0 + callr rnd + jrnz #nosq ;No squeak? + move @PCNT,a0 + movk 3,a1 + and a1,a0 + sll 5,a0 + move @pup_court,a14 +; jrnz #nosq0 ;br=outdoor court + addi #sqsnds,a0 + jruc #nosq1 +#nosq0 + addi #sqsnds2,a0 +#nosq1 + move *a0,a0,L + calla snd_play1 +#nosq + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #nodir + move *a13(plyr_seqdir),a0 + move a7,a1 ;Dir + addk 8,a1 + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + cmp a0,a1 + jreq #nodir ;Already in this dir? + move *a13(plyr_seq),a0 + callr plyr_setseq +#nodir clr a0 + jruc #setdt + +#samedir + move *a13(plyr_dirtime),a0 + addk 1,a0 +#setdt move a0,*a13(plyr_dirtime) + +;---------- +; Movement/boundary check + +;LOOK!!! + move *a8(OXVEL),a2,L + move *a8(OZVEL),a3,L + + move *a13(plyr_jmpcnt),a0 + jrnz #drift ;Jumping? + + move *a13(plyr_seqflgs),a4 ;No, but still on the way down? + btst DRIFT_B,a4 + jrz #nodrift ;No if 0 + +#drift move *a8(OXPOS),a4 ;>Put drag on vel if we drift too far + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 + + move a3,a3 + jrge #zvpos + cmpi CZMIN+8,a5 + jrgt #chkx ;OK? + jruc #ydrag + +#zvpos cmpi GZMAX-6,a5 + jrlt #chkx ;OK? +#ydrag move a3,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a3 +#chkx + move a2,a2 + jrge #xvpos + cmpi PLYRMINX2,a4 + jrgt #setvel ;OK? + jruc #xdrag +#xvpos + cmpi PLYRMAXX2,a4 + jrlt #setvel ;OK? +#xdrag move a2,a0 ;-1/4 from vel + sra 2,a0 + sub a0,a2 + jruc #setvel + + +#nodrift + move a2,a0 ;>-1/4 from XZVEL + sra 2,a0 + sub a0,a2 + move a3,a0 + sra 2,a0 + sub a0,a3 + + btst NOMV_B,a4 + jrnz #setvel ;No moving? + + + move *a13(plyr_autoctrl),a1 + jrz #noautoc + movi >1a000,a14 + jruc #noturb + +#noautoc + move *a13(plyr_bvel),a14 + sll 4,a14 + + move *a13(plyr_num),a0 + move @pup_hypspeed,a1 + btst a0,a1 + jrz #nohyper + + +;Double turbo mode + addi >5800,a14 +#nohyper + + move *a13(plyr_ownball),a1 + jrle #nobal ;Have ball? + +;I own ball, if shot clock down to 10, and am over +;half court, slow down! I am trying to burn out the clock! + + move *a13(plyr_ohpdist),a1 +;This is approximately half court! + cmpi >174*DIST_ADDITION,a1 + jrlt #nobal + move @shotimer,a1,L + jrz #nobal + cmpi [1,0],a1 + jrz #nobal + + move *a13(plyr_ptsdown),a1 + jrgt #nobal ;If losing, don't slow down + +; subi >3000,a14 ;Slow him down + subi >4000,a14 ;Slow him down more! + +#nobal + move @game_time,a1,L + cmpi 050000h,a1 + jrge #noxtraspd + +;Under 50 seconds, speed up losing players! + +; move *a13(plyr_ptsdown),a1 ;>Adjust shot % +; jrle #noxtraspd + + move *a13(plyr_num),a1 + cmpi 2,a1 + jrge #tm2 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrle #noxtraspd + jruc #yes + +#tm2 move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrge #noxtraspd +#yes + addi >1c00,a14 +#noxtraspd + +;This offscrn flag gets set only when on defense! + move *a13(plyr_offscrn),a1 + jrz #onscrn +;We want to speed guy up when offscrn... But go even faster if he is trying +;to get back on the screen! +; addi >e000,a14 ;Speedup when offscrn + addi >8000,a14 ;Speedup when offscrn + +;Trying to come back? + move @WORLDTLX+16,a0 + addi 200,a0 + move *a8(OXPOS),a1 + cmp a1,a0 + jrgt #offlft +;Player is off screen to right + btst JOYL_B,a6 + jrz #cont + jruc #add + +#offlft + btst JOYR_B,a6 + jrz #cont +#add addi >8000,a14 ;Coming back! +#cont + + + clr a1 + move a1,*a13(plyr_offscrn) +#onscrn + + move *a13(plyr_ownball),a1 + jrz #chkturb +; subi >e00,a14 ;Slow offense down + subi >e80,a14 ;Slow offense down + move a1,a1 + jrn #chkturb ;Buddy has ball? +; subi >1000,a14 ;Slow him down + subi >1100,a14 ;Slow him down +#chkturb + move *a13(plyr_turbon),a0 + jrz #noturb +; addi >3e00,a14 + addi >3f00,a14 + +#noturb + movk 11b,a0 + and a6,a0 + jrz #nodiag ;Neither up or dn? + movk 1100b,a0 + and a6,a0 + jrz #nodiag ;Neither lft or rgt? + move a14,a0 + sra 3,a0 + sub a0,a14 ;-12% +#nodiag + +; btst 4,a6 ;3point DEBUG +; jrz #DEBUG +; movi >2000,a14 +;#DEBUG + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a0 + add a0,a4 + move *a8(OZPOS),a5 +;DJT Start +;; +;;show hotspot when plyr runs across +;;; move @pup_showhotspots,a0 ;Bit 0-3 on = show plyr 0-3 hotspots +;;; btst ,a0 +;;; jrz #hsnoshow +;; move *a13(plyr_hotspotx),a1 +;; sub a4,a1 +;; abs a1 +;; subk HOTSPOTX_RNG,a1 +;; jrnn #hsnoshow +;; move *a13(plyr_hotspotz),a1 +;; sub a5,a1 +;; abs a1 +;; subk HOTSPOTZ_RNG,a1 +;; jrnn #hsnoshow +;; PUSH a1,a7,a14 +;; .ref show_hotspot_plyr_coor +;; CREATE0 show_hotspot_plyr_coor +;; move a13,*a0(PA10),L +;; PULL a1,a7,a14 +;; +;;#hsnoshow +;DJT End + btst JOYU_B,a6 + jrz #noup + cmpi CZMIN+8,a5 + jrle #noup ;Min? + sub a14,a3 +#noup + btst JOYD_B,a6 + jrz #nodn + cmpi GZMAX-6,a5 + jrge #nodn ;Max? + add a14,a3 +#nodn + btst JOYL_B,a6 + jrz #chkr + sub a14,a2 + cmpi PLYRMINX,a4 + jrgt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + add a14,a2 + jruc #setvel +#chkr + btst JOYR_B,a6 + jrz #setvel + add a14,a2 + cmpi PLYRMAXX,a4 + jrlt #setvel ;In bounds? + move *a13(plyr_autoctrl),a0 + jrnz #setvel + sub a14,a2 + +#setvel move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L +#nomv + + +;------- + + ;>Do turbo meters + btst BUT3_B,a6 ;Turbo but + jrz #turdone + + +;Allow guy with ball to throw elbows if turbo button pressed twice quickly + btst BUT3_B+8,a6 + jrz #noelbo + + move *a13(plyr_tbutn),a14 + clr a0 + move a0,*a13(plyr_tbutn) + subk 1,a14 + jrlt #noelbo ;Too quick? + subk 8-1,a14 + jrgt #noelbo ;Too late? + + move *a13(plyr_seq),a14 + cmpi STNDWB_SEQ,a14 + jreq #ok + cmpi STNDWB2_SEQ,a14 + jreq #ok + cmpi STNDDRIB2_SEQ,a14 + jreq #ok + cmpi RUNDRIB_SEQ,a14 + jreq #ok + cmpi RUNDRIBTURB_SEQ,a14 + jreq #ok + subk STNDDRIB_SEQ,a14 + jrne #noelbo +#ok +; move *a13(plyr_num),a0 +; move @PSTATUS,a2 +; btst a0,a2 +; jrz #notingame + + move @gmqrtr,a0 + jrnz #s1 + + move @game_time,a0,L +;This check is here because we don't want accidental elbows when people +;are trying to win jump ball! + cmpi >2040906,a0 + jrge #noelbo + +#s1 + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7*2,a1 ;!!! Min cnt for elbow + jrle #noelbo ;Turbo too low? + move a1,*a2(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 4,a1 +; move a1,*a0(OFSET) + +#notingame + movi 60,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + + movi ELBO2_SEQ,a0 + move *a13(plyr_dribmode),a14 + jrn #elbw ;br=cant dribble...do elbows + move *a13(PA8),a14,L + + + move *a14(OZVEL),a1 + abs a1 + cmpi 0000100h,a1 + jrge #spin + move *a14(OXVEL),a14 + abs a14 + cmpi 00002700h,a14 + jrle #elbw +#spin + +;Don't allow consecutive spins + .ref last_spin + move @last_spin,a1 + move @PCNT,a14 + move a14,@last_spin + sub a1,a14 + abs a14 + cmpi 2*60,a14 + jrgt #norms + +;If spin, allow steals/pushes occasionally! +; movi 500,a0 +; calla RNDPER +; jrls #norms + + clr a0 + move a0,@steals_off ;Don't allow steals for 10 ticks +#norms + movi SPIN_MOVE_SEQ,a0 +#elbw + callr plyr_setseq + jruc #turdone + +#noelbo +; move *a13(plyr_num),a0 ;Don't allow drones to mess with +; move @PSTATUS,a2 ;img ofsets! +; btst a0,a2 +; jrz #turdone + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #turdone + btst a0,a1 + jrnz #turdone ;br=on-fire + + .ref refill_turbo + move @pup_trbinfinite,a1 + btst a0,a1 + jrz #doturb + move a11,a14 + move *a13(plyr_PDATA_p),a11,L + calla refill_turbo + move a14,a11 + jruc #turdone +#doturb + move *a13(plyr_PDATA_p),a0,L + move *a0(ply_turbo),a1 ;Turbo info in PxDATA (0...TURB_CNT-1) + jrz #turdone ;No turbo left? + move *a0(ply_turbo_dl),a2 ;Cnt for delaying dec of ply_turbo + subk 1,a2 + move a2,*a0(ply_turbo_dl) + jrnz #turdone + + subk 1,a1 + move a1,*a0(ply_turbo) ;Turbo meter size to get smaller + + movk 390/TURBO_CNT,a2 ;!!! Rate of decline + move a2,*a0(ply_turbo_dl) + movk 200/TURBO_CNT,a2 ;!!! Rate of replenish + move a2,*a0(used_turbo) + move *a0(ply_idiot_use),a2 + inc a2 + move a2,*a0(ply_idiot_use) + + sll 5,a1 + addi TURBO_52,a1 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + +; move *a0(ply_meter_imgs+40h),a0,L ;LITUP img +; move *a0(OFSET),a1 ;Need to shrink LITUP img +; addk 1,a1 +; move a1,*a0(OFSET) + +#turdone + move *a13(plyr_tbutn),a0 ;Ticks since turbo button last hit + addk 1,a0 + move a0,*a13(plyr_tbutn) + + + + + + move *a13(plyr_shtdly),a0 + jrle #nodly ;No delay? + +;Is Ball near ground, and player has high shtdly? + .if DEBUG + cmpi 30,a0 + jrlt #okz + + move @ballobj_p,a14,L + + move *a14(OYPOS),a14 + cmpi -40,a14 + jrle #okz ;Ball close to gnd? + move @inbound,a14 + jrnn #okz + move @ballpnum,a14 ;Plyr # who owns (0-3) or Neg + jrnn #okz +;Ball without owner, can't pick it up! +; LOCKUP +#okz + .endif + + subk 1,a0 + move a0,*a13(plyr_shtdly) +#nodly + +;---------- + + move *a13(plyr_rcvpass),a0 ;>Pass receiving + jrle #norcvp ;No pass? + subk 1,a0 + move a0,*a13(plyr_rcvpass) + jrgt #norcvp ;Not yet? +; move *a13(plyr_nojoy),a1 + move a0,*a13(plyr_nojoy) +; move @ballobj_p,a2,L +; move *a2(OYVEL+16),a0 +; jrge #balllow +; move *a8(OYPOS),a0 +; subk 10,a0 +; move *a2(OYPOS),a1 +; cmp a0,a1 +; jrgt #balllow +; subk REBOUND_SEQ,a1 +; jrne #noreb +; movk REBOUND_SEQ,a0 +; callr plyr_setseq +;#noreb + +#norcvp + move *a13(plyr_seq),a2 + cmpi RUNDRIBTURB_SEQ,a2 + jrhi #anicnt + + move a6,a1 ;>Change ani if no joy + sll 32-4,a1 + jrz #nojoy ;Joy neutral? + + movi 38,a14 ;stupid K!!!Delay before auto zturn toward ball + move *a13(plyr_ownball),a0 + jrz #indef + movi 60,a14 ;stupid K!!!^ +#indef + move a14,*a13(plyr_turndelay) + + move *a13(plyr_indef),a14 + jrz #nodef2 + + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + srl 32-4-3,a1 ;>Convert to dir 0-127 + addi #dirc_t,a1 + movb *a1,a1 + + sub a7,a1 + move a1,a14 ;Calc dir dist + abs a14 + cmpi >40,a14 + jrle #diffsml + neg a1 + subi >80,a14 + abs a14 +#diffsml + movk WALKFDEF_SEQ,a0 + cmpi 16,a14 + jrlt #setseq + movk WALKBDEF_SEQ,a0 + cmpi >30,a14 + jrgt #setseq + movk WALKLDEF_SEQ,a0 + move a1,a1 + jrn #setseq + movk WALKRDEF_SEQ,a0 + jruc #setseq + +#nodef2 +; +; clr a0 +; move a0,*a13(plyr_keeppal) +; + movk RUN_SEQ,a0 ;>Setup run sequence + move *a13(plyr_ownball),a14 + jrle #nobl + move *a13(plyr_dribmode),a14 + jrn #stndwb ;Can't drib? + movk RUNDRIB_SEQ,a0 +#nobl + move a0,a1 + move *a13(plyr_turbon),a14 + jrz #slow +;This points to turbo runs + addk 1,a0 ;Turbo version +#slow + addk 1,a1 + sub a2,a1 + subk 1,a1 + jrhi #setseq ;Different type? + + move *a13(plyr_ani_p),a14,L + move *a14+,a14 + jrnz #anicnt ;!At end? + jruc #setseq + +#nojoy + move *a13(plyr_seqflgs),a0 + btst WALK_B,a0 + jrnz #anicnt + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + movk STNDDRIBDEF_SEQ,a1 + move *a13(plyr_indef),a14 + jrnz #chkb + + movk STND2_SEQ,a0 + movk STNDDRIB_SEQ,a1 + + move *a13(plyr_turndelay),a14 + jrz #turnok1 + subk 1,a14 + move a14,*a13(plyr_turndelay) + subk 20,a14 + jrgt #chkb +#turnok1 + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 + movk STNDDRIB2_SEQ,a1 +#stnd1 + + move *a13(plyr_ownball),a14 + jrle #chka + move *a13(plyr_turndelay),a14 + jrz #turnok0 + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb + +#turnok0 + move *a13(plyr_ohpdir),a14 + move a14,*a13(plyr_newdir) + jruc #chkb +#chka + move *a13(plyr_turndelay),a14 + jrz #turnok + dec a14 + move a14,*a13(plyr_turndelay) + jruc #chkb +#turnok move *a13(plyr_balldir),a14 + move a14,*a13(plyr_newdir) + + + +#chkb move *a13(plyr_ownball),a14 + jrle #setseq + move a1,a0 + move *a13(plyr_dribmode),a14 + jrgt #setseq ;Dribbling? +#stndwb movk STNDWB_SEQ,a0 + move @inbound,a14 + jrnn #setseq + move *a13(plyr_num),a14 + btst 0,a14 + jrnz #setseq + movk STNDWB2_SEQ,a0 + +#setseq cmp a0,a2 + + .if 1 ;0 for plyr anim patch temp + jreq #anicnt + + .if IMGVIEW + movi debug_SEQ1,a0 + .endif + + callr plyr_setseq + + +;TEMP!!! anim patch temp + .else + movk STNDDRIB_SEQ,a0 + move *a13(plyr_seq),a1 + cmp a0,a1 + jrne #tmp0 + move *a13(plyr_seqdir),a1 + cmpi 4,a1 + jreq #anicnt +#tmp0 movi >40,a7 + callr plyr_setseq + .endif + + +#anicnt dsj a10,#noani + + move *a13(plyr_ani_p),a14,L ;>Set new ani +#getdel move *a14+,a10 ;Delay + jrnn #nocode ;Not code? + + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel + +#nocode jrnz #100 + move *a13(plyr_seqcode_p),a0,L + jrge #noendc + call a0 ;Can trash scratch, A2-A5 +#noendc move *a13(plyr_ani1st_p),a14,L ;Head of list + +#getdel2 + move *a14+,a10 + +;Sequences can start with a command! + jrnn #100 + ;Not code? + move *a14+,a0,L ;*Code + move a14,b4 + call a0 ;Can trash scratch, A2-A5 + move b4,a14 + jruc #getdel2 + + +#100 move *a14+,a0,L ;*Img + move *a14+,a1 ;Flags (OCTRL) + move *a13(plyr_anirevff),a2 ;Get reverse flip flag + xor a2,a1 + move a1,a4 + + move *a0(IANI2Z),*a13(plyr_ballzo) + + move a14,*a13(plyr_ani_p),L + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a4,a4 + jrnn #ynorm ;!YFree flag? + movi -200,a1 +#ynorm move a1,*a13(plyr_ballyo) + + move *a13(plyr_jmpcnt),a14 + jrnz #injmp ;Jumping? + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +;Don't allow long tick counts on the ground + cmpi 30,a10 + jrlt #injmp + movk 4,a10 +#injmp + + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 +#noani + +;------- + + + move *a13(plyr_jmpcnt),a0 ;>Jumping + jrz #noj + addk 1,a0 + move a0,*a13(plyr_jmpcnt) + + move *a13(plyr_hangcnt),a0 + jrle #nohang ;Not hanging? + subk 1,a0 + move a0,*a13(plyr_hangcnt) + jruc #pass ;Skip grav +#nohang + move *a8(OYVEL),a0,L + +; move *a13(plyr_ownball),a14 +; jrgt #grav ;Have ball? +;; btst BUT1_B,a6 ;Mario like jump +;; jrnz #grav +;; addi GRAV/2,a0 ;+Grav/2 +;#grav + addi GRAV,a0 ;+Gravity + jrn #200 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + jrlt #200 ;Above gnd + neg a14 + move a14,*a8(OYPOS) ;Set on gnd + + .if DEBUG +; clr a0 +; move a0,@slowmotion + .endif + + movk 1,a10 ;Run landing seq + clr a0 + move a0,*a13(plyr_jmpcnt) +#200 move a0,*a8(OYVEL),L + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #znubb ;In dunk? + + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrge #znubb + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + move a0,a3 + movi >20000,a14 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #undrbb ;Under backboard? + + subk 10,a1 + jrgt #znubb + cmpi HOOPRX-WRLDMID-8,a3 + jrlt #znubb ;!Under rim? +; cmpi HOOPRX-WRLDMID+13,a3 +; jrgt #znubb ;!Under rim? + + movi >10000,a14 + move *a8(OXVAL),a1,L + cmpi WRLDMID<<16,a1 + jrlt #rhoop + neg a14 +#rhoop add a14,a1 + move a1,*a8(OXVAL),L + + movi >10000,a14 +#undrbb + move *a8(OZVAL),a1,L + cmpi CZMID<<16,a1 + jrge #dzpos ;In front of? + neg a14 +#dzpos add a14,a1 + move a1,*a8(OZVAL),L + +#znubb + + move *a13(plyr_ownball),a1 + jrz #pass ;No ball? + jrlt #sblk ;Teammate has ball? + +; + move *a13(plyr_jmpcnt),a0 + subk 12,a0 + jrlt #pass ;Too soon? + move *a13(plyr_seq),a0 + cmpi DDUNK_STRT2_SEQ,a0 ;already in seq. ? + jreq #znub3 ;br=yes + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #znub3 + + btst BUT2_B+8,a6 ;pressed PASS button? + jrnz #ddnk ;br=yes + + btst BUT1_B+8,a6 ;pressed SHOOT button? + jrz #znub3 ;br=no +#ddnk +;FIX!!! +;this should really say something about 'lob pass' to teammate + + +;Need to "debounce" player shoot button so humans & drones don't do an +;automatic layup every time you dunk! + + +;Quick check: If Human is controlling drone, don't allow drone to layup +;as quickly as a human could. Wait longer before it falls into layup seq. + move *a13(plyr_num),a0 + move @PSTATUS,a14 + btst a0,a14 + jrnz #norm1 + xori 1,a0 + btst a0,a14 + jrz #norm1 + move *a13(plyr_jmpcnt),a0 + subi 40,a0 + jrlt #pass ;Too soon? +#norm1 + + + movk LAY_UP,a0 + move a0,@shot_type + + move *a13(plyr_slam_ticks),a14 + subk 10,a14 ;close to rim ? + move *a13(plyr_jmpcnt),a0 + sub a0,a14 + jrn #znub3 ;br=too late + + move *a13(plyr_dir),a7 + movi DDUNK_STRT2_SEQ,a0 + callr plyr_setseq + jruc #pass + +#znub3 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + addk 15,a1 + jrlt #chkb1 ;High enough? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + +; btst BUT2_B+8,a6 +; jrnz #dopass ;Air dish off pass? + + btst SHOOT_B,a0 + jrz #slp + + move @gmqrtr,a0 + jrnz #shoot2 + + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #shoot2 + ;Force him to shoot + movk 5,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell him to release ball at peak of jump + + jruc #shoot2 ;Too low? + +#chkb1 + + move *a13(plyr_seq),a0 + subk REBOUND_SEQ,a0 + jreq #reb + subk REBOUNDA_SEQ-REBOUND_SEQ,a0 + jrne #noreb +#reb + btst BUT1_B+8,a6 + jrz #noreb ;No press? + + move *a13(plyr_ohpdist),a14 +;This is for doing a layup out of a rebound +;He must be near, and be facing hoop + cmpi 150*DIST_ADDITION,a14 + jrgt #pass ;Too far? + + move *a13(plyr_ownball),a0 + jrle #pass ;Don't have? + + move *a13(plyr_ohpdir),a0 + move *a13(plyr_dir),a1 + sub a1,a0 + abs a0 + cmpi >40,a0 + jrle #rdsml + subi >80,a0 + abs a0 +#rdsml subk 32,a0 + jrgt #pass ;Not between ball and hoop? + + movk 2,a0 + move a0,@ballptsforshot + movk FINGER_ROLL,a0 + move a0,@shot_type + movk LAYUPREB_SEQ,a0 + callr plyr_setseq + jruc #pass + +#noreb + + btst BUT1_B,a6 + jrnz #pass ;Holding shoot button? + + btst BUT2_B+8,a6 + jrnz #dopass ;Air dish off pass? + + move *a13(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #slp ;Already started? + + btst SHOOT_B,a0 + jrz #slp + +#shoot2 + + +; move *a8(OIMG),a14,L +; move *a14(IANI2Y),a14 +; jrz #ok_shoot +;;Player shot seq. has some animation left before we can release ball +; ANDK 3,a10 +; jruc #pass +;#ok_shoot + + + callr plyr_shoot + movk 1,a10 + jruc #pass + + + + +#noj move @ballpnum,a0 + jrge #sblk ;Somebody has ball? + move *a13(plyr_seq),a0 + cmpi RUNDRIBTURB_SEQ,a0 + jrhi #sblk ;Doing something? + move @ballgoaltcnt,a0 + jrgt #sblk ;Going towards rim? + move *a13(plyr_balldist),a0 + cmpi 100*DIST_REDUCTION,a0 + jrgt #sblk ;Too far? + move @ballprcv_p,a1,L + jrnz #sblk ;Pass in progress? + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #sblk ;No jumping? + move *a13(plyr_autoctrl),a0 + jrnz #sblk ;Temp computer control? + callr plyr_tryrebound + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #slp ;No jumping? + + + +#sblk +; move *a13(plyr_seq),a0 +; cmpi LOB_PASS_SEQ,a0 +; jreq #pass +; btst BUT1_B+8,a6 ;>Shoot/block (But1) +; jrz #sblk2 +; btst BUT2_B+8,a6 ;pressing shoot and turbo ? +; jrz #sblk2 +; move *a13(plyr_ownball),a0 +; jrle #slp ;I don't have ball... +; movi LOB_PASS_SEQ,a0 +; move *a13(plyr_dir),a7 +; callr plyr_setseq ;lob ball to the net!! +; jruc #slp +;#sblk2 + btst BUT1_B,a6 ;>Shoot/block (But1) + jrz #pass + move *a13(plyr_ownball),a1 + jrn #drnshoot ;br=teammate has ball + + movk 1,a0 + move *a13(plyr_shtbutn),a14 + cmpi 2,a14 + jrle #scont + cmpi 9,a14 + jrge #scont + move *a13(plyr_seq),a0 + cmpi QSHOOT_SEQ,a0 + jrz #dblhit + cmpi TIP_SEQ,a0 + jrz #dblhit + cmpi TIPJ_SEQ,a0 + jrz #dblhit + + clr a0 +; move a0,*a13(plyr_shtbutn) +; callr plyr_startjmp +; jruc #pass + +#scont move a0,*a13(plyr_shtbutn) + +#alyoop + move *a13(plyr_seqflgs),a0 + btst NOJUMP_B,a0 + jrnz #pass ;No jumping? + btst DUNK_B,a0 + jrnz #pass ;Already in a dunk? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_rcvpass),a0 + jrgt #slp ;Teammate waiting on pass? + + callr plyr_startjmp + jruc #pass + +#drnshoot ;>Tell drone to shoot + +;Only have drone shoot on down transition! +;This is ship day! Is this wise?... No... + btst BUT1_B+8,a6 ;>Shoot/block (But1) + jrz #pass + +; btst BUT3_B,a6 +; jrnz #tshoot ;Turbo override? + + move *a13(plyr_turbon),a14 + jrnz #alyoop ;br=turbo is on!! + +;If human just let up on his turbo butn, don't have drone shoot just yet +;We need to debounce shoot button to avoid accidental drone shots +;Especially on full court shots! + +; move *a13(plyr_turbon),a0 +; cmpi 2,a0 ;Ticks sice last turbo button press +; jrle #pass + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + XORK 1,a1 + btst a1,a0 + jrnz #pass ;Teammate is a human? + + +;Lets ignore button if this is a full court shot and the shot clock and game +;time are not low. +;If low, allow stupid full court shot + + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_ohpdist),a14 + cmpi 174h*DIST_ADDITION,a14 + jrlt #cont_shot ;Drone is close enough? + + + move @game_time,a1,L + srl 8,a1 ;Remove tenths + subk 9,a1 + jrlt #cont_shot ;Less than 9 secs? +;Shot timer 10 or >? + move @shotimer+16,a1 ;Tens + jrnz #pass +; move @shotimer,a1 ;Ones +; subk 7,a1 +; jrge #pass + +#cont_shot + + + move *a13(plyr_tmproc_p),a0,L + movk DRN_SHOOT_M,a1 + move a1,*a0(plyr_d_cflgs) + + move *a0(plyr_ohpdist),a14 + cmpi 350*DIST_ADDITION,a14 + jrlt #pass ;Drone is close enough? + + move @gmqrtr,a14 + jrnz #pass + + move *a0(plyr_jmpcnt),a14 + jrnz #pass + + move *a13(plyr_idiotbit),a14 + btst 1,a14 + jrnz #pass + addk 2,a14 + move a14,*a13(plyr_idiotbit) + + movk 4,a0 + move *a13(plyr_num),a1 + calla idiot_box ;Tell drone to shoot ball + + + + +#pass ;>Pass/steal (But2) + move *a13(plyr_shtbutn),a0 + jrz #dblhit + inc a0 + move a0,*a13(plyr_shtbutn) +#dblhit + + move *a13(plyr_ownball),a2 + jrz #steal ;No ball? + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Waiting on pass? + + btst BUT2_B+8,a6 + jrz #slp + move *a13(plyr_seqflgs),a14 + btst PASS_B,a14 + jrnz #slp ;Passing? + + move @pass_off,a14 + jrnz #slp ;Lockout passing for now? + + move a2,a2 + jrlt #passtome +#dopass + + callr plyr_startpass + jruc #slp + +#passtome ;>Tell drone to pass + btst BUT3_B,a6 + jrnz #steal ;Turbo? + + move *a13(plyr_tmproc_p),a0,L + movk DRN_PASS_M,a1 +; btst 6,a6 +; jrz #regds ;No turbo? +; ori >8000,a1 +#regds move a1,*a0(plyr_d_cflgs) + jruc #slp + + + + +#steal + btst BUT2_B,a6 + jrz #slp ;No button? + move *a13(plyr_jmpcnt),a0 + jrnz #slp + move *a13(plyr_seq),a0 + move *a13(plyr_num),a14 + move @pup_nopush,a1 + btst a14,a1 + jrnz #nopush + btst BUT3_B,a6 + jrnz #push ;Turbo? + +#nopush +; cmpi STEALUP_SEQ,a0 +; jreq #slp + subi STEAL_SEQ,a0 + jreq #slp + + move *a13(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + move *a13(plyr_tmproc_p),a1,L + move *a1(plyr_rcvpass),a0 + jrgt #slp ;Getting pass? + +; move *a13(plyr_keeppal),a0 ;Getting up while on fire, on butt +; jrz #noflames +; calla seq_stopfire +;#noflames + +;FIX!!! Add STEALUP_SEQ here.... + + movi STEAL_SEQ,a0 +; movi STEALUP_SEQ,a0 + callr plyr_setseq + move *a13(plyr_balldir),*a13(plyr_newdir) + + jruc #slp + +#push + btst BUT2_B+8,a6 + jrz #slp ;No button? + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrle #slp ;Turbo too low? + subi PUSH_SEQ,a0 + jreq #slp + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a14 +;; cmp a0,a14 +;; jrz #notingame2 + btst a0,a14 + jrnz #notingame2 ;br=on-fire + + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +; subk 8,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 8,a1 +; move a1,*a0(OFSET) + +#notingame2 +; calla seq_stopfire + movi PUSH_SEQ,a0 + callr plyr_setseq + +#slp + move *a13(plyr_ownball),a1 + jrle #nob + callr plyr_setballxyz +#nob + +#halted + callr plyr_headalign + callr plyr_setshadow + +; .if DEBUG +; callr plyr_setgndaligndot +; .endif + + SLOOP 1,#lp + +;-------------------- +; plyr # bit val (1,2,3 or 4,8,C) to tm # bit val (1 or 2) + + .def pbit_tbit + .def pbit_tval + +pbit_tbit + .byte 0,1,1,1,2,0,0,0 + .byte 2,0,0,0,2,0,0,0 + +; plyr # bit val (1,2,3 or 4,8,C) to tm # val (0 or 1) + +pbit_tval + .byte -1, 0, 0, 0, 1,-1,-1,-1 + .byte 1,-1,-1,-1, 1,-1,-1,-1 + +;-------------------- + +; .ref W5ST1 +;; matchup-screen player init +;; PID,Dir,TLXoff,Z +;; OIMG +;#pmatch_t +; .word P1_PID,3<<4,118,CZMID+106 +; .long W5ST1 +;#pm1 .word P2_PID,3<<4,168,CZMID+64 +; .long W5ST1 +; .word P3_PID,3<<4,242,CZMID+64 +; .long W5ST1 +; .word P4_PID,3<<4,289,CZMID+106 +; .long W5ST1 +; .if DRONES_2MORE +; .word P5_PID,3<<4,195,CZMID ;last drone on team1 +; .long W5ST1 +; .word P6_PID,3<<4,195,CZMID ;last drone on team2 +; .long W5ST1 +; .endif + +; tip-off init +; PID,Dir,TLXoff,Z +; OIMG + +#pdat_t .word P1_PID,3<<4,120,CZMID-50 + .long w4stand1 +; .long w3run1 +#pd1 .word P2_PID,2<<4,180,CZMID-5 + .long w3stand1 +; .long w3run1 + .word P3_PID,7<<4,235,CZMID+5 + .long w5stand1 +; .long w3run1 + .word P4_PID,7<<4,280,CZMID+45 + .long w5stand1 +; .long w3run1 + .if DRONES_2MORE + .word P5_PID,1<<4,120,CZMID+50 ;last drone on team1 + .long w5stand1 +; .long w3run1 + .word P6_PID,5<<4,280,CZMID-50 ;last drone on team2 + .long w5stand1 +; .long w3run1 + .endif + + .def ltshoepal_t +ltshoepal_t +; COLORW 31,31,31, 27,27,27, 22,22,22, 18,18,18 +; COLORW 14,14,14 + .word 07fffh,077bdh,06f7bh + .word 06739h,05ef7h,05294h + .word 04a52h,04210h,039ceh + .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h ;Shoes use only 13 colors + .word 00000h +;dkshoepal_t +; COLORW 8,8,8, 6,6,6, 5,5,5, 4,4,4 +; COLORW 2,2,2 + + +#dirc_t .byte 0,0,4<<4,0,6<<4,7<<4,5<<4,0,2<<4,1<<4,3<<4,0,0,0,0,0 + +;;pdta_l .long P1DATA,P2DATA,P3DATA,P4DATA,P5DATA,P6DATA + + +#sqsnds .long sqk1_snd,sqk2_snd,sqk3_snd,sqk4_snd,sqk5_snd,sqk6_snd +#sqsnds2 + .long scuf1_snd,scuf2_snd,scuf3_snd,scuf4_snd,scuf2_snd,scuf3_snd + +#kpball_t +; .word 100,130,160,190,200,220,280,300,450,550,850 +; .word 190,200,220,280,300,450,550,600,650,650,650 + + .asg 80/100,#reduce +; .word 100,130,160,190,200,220,280,300,450,450,450 + + .word 100*#reduce,130*#reduce,160*#reduce,190*#reduce + .word 200*#reduce,220*#reduce,280*#reduce,300*#reduce + .word 450*#reduce,450*#reduce,450*#reduce + +#noblflail_t +; .word 50,65,80,80,80,80,100,130,170,250,250 + .word 85,100,105,110,115,120,150,190,250,250,300 + +#shortfly_t + .word 50,100,140,160,180,200,250,300,400,550,650 +; .word 140,160,180,200,250,300,400,550,650,650,650 + +#winshortfly_t + .word 50/2,100/2,100/2,120/2,150/2,150/2,200/2,300/2,450/2,550/2,550/2 + +#flyb_t +;Extra % chance of allowing losing team to keep ball after being pushed +;1 pt down up to 15 & over down +; .word 250,275,300,325,350,375,400,425,450,475,500 +; .word 500,500,500,500,500,500,500,500 + +; .word 25,50,75,100,125,150,175,200,225,250,275 +; .word 275,275,275,275,275,275,275,275,275 + + .asg 80/100,#reduce2 + .word 25*#reduce2,50*#reduce2,75*#reduce2,100*#reduce2,125*#reduce2 + .word 150*#reduce2,175*#reduce2,200*#reduce2,225*#reduce2,250*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + .word 275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2,275*#reduce2 + +RED_C .equ 3 ;0 ;No red with blu/blk/prp +GRN_C .equ 1 +BLU_C .equ 3 +PUR_C .equ 3 ;4 ;No blk/prp +BLK_C .equ 3 +WHT_C .equ 6 +;YEL_C .equ 7 + .asg >80,I ;Always keeps home colors +;;; +;;; updated to account to 30 teams +;;; +;;; referenced in BB3 for bench palette build +;;; + .def teampal_t +; 0 ATLANTA +; 1 BOSTON +; 2 CHARLOTTE +; 3 CHICAGO +; 4 CLEVELAND +; 5 DALLAS +; 6 DENVER +; 7 DETROIT +; 8 GOLDEN STATE +; 9 HOUSTON +; 10 INDIANA +; 11 LOS ANGELES (CLIPPERS) +; 12 LOS ANGELES (LAKERS) +; 13 MIAMI +; 14 MILWAUKEE +; 15 MINNESOTA +; 16 NEW JERSEY +; 17 NEW YORK +; 18 ORLANDO +; 19 PHILADELPHIA +; 20 PHOENIX +; 21 PORTLAND +; 22 SACRAMENTO +; 23 SAN ANTONIO +; 24 SEATTLE +; 25 TORONTO +; 26 UTAH +; 27 VANCOUVER +; 28 WASHINGTON + +teampal_t + .byte RED_C,GRN_C,BLU_C,RED_C,BLK_C + .byte BLU_C,BLK_C,BLU_C,BLU_C,RED_C + .byte BLK_C,RED_C,PUR_C,BLK_C,PUR_C + .byte BLU_C,BLU_C,BLU_C,BLK_C,RED_C + .byte PUR_C,BLK_C,BLK_C,BLK_C,GRN_C + .byte BLU_C,PUR_C,BLK_C,RED_C,BLK_C + +;DJT Start + .def hotspot_xz_t,hotspot_xz_tend + +hotspot_xz_t + .word WRLDMID+>17c,CZMID->82 + .word WRLDMID+>148,CZMID->82 + .word WRLDMID+>0d8,CZMID->80 + .word WRLDMID+>110,CZMID->7c + .word WRLDMID+>084,CZMID->7a + .word WRLDMID+>0ac,CZMID->60 + .word WRLDMID+>088,CZMID->40 + .word WRLDMID+>0d4,CZMID->40 + .word WRLDMID+>07c,CZMID->14 + .word WRLDMID+>0a4,CZMID+>00 + .word WRLDMID+>082,CZMID+>26 + .word WRLDMID+>0d4,CZMID+>48 + .word WRLDMID+>098,CZMID+>56 + .word WRLDMID+>0b6,CZMID+>7c + .word WRLDMID+>090,CZMID+>90 + .word WRLDMID+>0dc,CZMID+>98 + .word WRLDMID+>11c,CZMID+>ae + .word WRLDMID+>0b0,CZMID+>b8 + .word WRLDMID+>148,CZMID+>ba + .word WRLDMID+>0f6,CZMID+>ca + .word WRLDMID+>17c,CZMID+>be +hotspot_xz_tend + +NUM_HOTSPOTS .equ (hotspot_xz_tend-hotspot_xz_t)/32 + .def NUM_HOTSPOTS + +;DJT End + +******************************** +* Setup player sequence data +* A0=Sequence # +* A7=Dir 0-127 +* A13=*Player process +* >A10=New ani cnt +* Trashes scratch + + SUBR plyr_setseq + + cmpi TIP_SEQ,a0 + jrnz #bugok + move @scores,a14,L + jrz #bugok ;Game start? + .if DEBUG + LOCKUP + .endif + movk STND_SEQ,a0 + +#bugok + move a0,*a13(plyr_seq) + + sll 5,a0 ;*32 + addi pseq_t,a0 + move *a0,a0,L + move *a0+,a1 ;Get flags + move a1,*a13(plyr_seqflgs) + + + btst DRIBBLE_B,a1 ;>Calc new dribble mode + jrnz #d + + move *a13(plyr_dribmode),a14 + jrz #n + movi -1,a1 + jruc #setd + +#d move *a13(plyr_dribmode),a14 + jrnz #n + movk 1,a1 + +#setd move a1,*a13(plyr_dribmode) +#n + + move *a0+,a1,L ;Get *code + move a1,*a13(plyr_seqcode_p),L + move a7,a1 ;Dir + addk 8,a1 ;Round off + sll 32-7,a1 + srl 32-7+4,a1 ;Kill frac + move a1,*a13(plyr_seqdir) + + clr a14 ;Dir 5-7 have reversed FLIPH + cmpi 5,a1 + jrlt #nohf + movi M_FLIPH,a14 +#nohf move a14,*a13(plyr_anirevff) + + sll 32-3,a1 ;Clr bits + srl 32-3-5,a1 ;*32 + add a1,a0 + move *a0,a0,L + move a0,*a13(plyr_ani1st_p),L + move a0,*a13(plyr_ani_p),L + + movk 1,a10 + + rets + + +******************************** +* Delete a players processes and objects +* A0=Plyr # (0-3) + +; SUBRP plyr_del +; +; PUSH a2,a3 +; +; move a0,a2 +; move a0,a3 +; sll 5,a3 ;*32 +; addi pdel_t,a3 +; +; move *a3+,a0 +; calla KIL1C ;Kill process +; +; move *a3+,a0 +; calla obj_del1c ;Kill plyr images +; +; clr a0 +; sll 5,a2 ;*32 +; movi plyrobj_t,a1 +; add a2,a1 +; move a0,*a1,L +; +; addi plyrproc_t,a2 +; move a0,*a2,L +; +; PULL a2,a3 +; rets +; +; +;pdel_t .word P1_PID,CLSPLYR|TYPPLYR|SUBPL1 +; .word P2_PID,CLSPLYR|TYPPLYR|SUBPL2 +; .word P3_PID,CLSPLYR|TYPPLYR|SUBPL3 +; .word P4_PID,CLSPLYR|TYPPLYR|SUBPL4 + + + + +#******************************* +* Update player controls (called by main loop) + + SUBR joy_read + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne #x + move @HALT,a0 + jrnz #x + move @plyrproc_t,a0,L ;Get 1st plyr proc + move *a0(plyr_autoctrl),a0 + jrnz #x ;Temp computer control? + + SUBR joy_read2 ;Called by reftip + + move @PSTATUS,a0 ;Plyr start bits 0-3 + + .if TUNIT + + move @TWOPLAYERS,a14 ;!0=2 plyr kit + jrz #4p + + movi P2CTRL,a1 ;A1=*PxCTRL +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 2,a0 ;P2 + jrnc #no2p2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#no2p2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #x + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + jruc #x +#4p ;>4 player version + movi P1CTRL,a1 ;A1=*PxCTRL + +; move @SWITCH,a2 + move @_switch_addr,a2,L + move *a2,a2 + + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 1,a0 + jrnc #nop2 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop2 +; move @SWITCH2,a2 + move @_switch2_addr,a2,L + move *a2,a2 + + not a2 + + addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + addk 16,a1 + zext a2 + srl 8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + .else ;>YUNIT + + move @SWITCH,a2,L + not a2 + + srl 1,a0 ;P1 + jrnc #nop1 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop1 addk 16,a1 ;P2 + srl 8,a2 + srl 1,a0 + jrnc #nop2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + move a2,a3 + sll 32-8,a3 + srl 32-8,a3 + or a3,a14 + move a14,*a1 + +#nop2 addk 16,a1 ;P3 + srl 1,a0 + jrnc #nop3 + srl 16,a2 + move a2,a14 ;>Move bit 7 to 6 (But 3) + sll 32-6,a2 + srl 7,a14 + or a14,a2 + rl 6,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + +#nop3 srl 1,a0 ;P4 + jrnc #x + move @SWITCH+>20,a2 + not a2 + addk 16,a1 + sll 32-8,a2 + srl 32-8,a2 + move *a1,a14 + xor a2,a14 ;New with old. Changed bits are now on + and a2,a14 ;Keep down transitions + sll 8,a14 + or a2,a14 + move a14,*a1 + + + .endif + +#x + rets + +; .if 0 +; move @GAMSTATE,a0 +; subk INGAME,a0 +; jrne #x +; move @HALT,a0 +; jrnz #x +; move @plyrproc_t,a0,L ;Get 1st plyr proc +; move *a0(plyr_autoctrl),a0 +; jrnz #x ;Temp computer control? +; +; SUBRP joy_read2 ;Called by reftip +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; movi P1CTRL,a1 ;A1=*PxCTRL +; +; .if TUNIT +; +; move @SWITCH,a2 +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 1,a0 +; jrnc #nop2 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop2 +; move @SWITCH2,a2 +; not a2 +; +; addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 ;P4 +; jrnc #x +; addk 16,a1 +; zext a2 +; srl 8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; .else +; +; move @SWITCH,a2,L +; not a2 +; +; srl 1,a0 ;P1 +; jrnc #nop1 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop1 addk 16,a1 ;P2 +; srl 8,a2 +; srl 1,a0 +; jrnc #nop2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; move a2,a3 +; sll 32-8,a3 +; srl 32-8,a3 +; or a3,a14 +; move a14,*a1 +; +;#nop2 addk 16,a1 ;P3 +; srl 1,a0 +; jrnc #nop3 +; srl 16,a2 +; move a2,a14 ;>Move bit 7 to 6 (But 3) +; sll 32-6,a2 +; srl 7,a14 +; or a14,a2 +; rl 6,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +;#nop3 srl 1,a0 +; jrnc #x +; move @SWITCH+>20,a2 +; not a2 +; addk 16,a1 +; sll 32-8,a2 +; srl 32-8,a2 +; move *a1,a14 +; xor a2,a14 ;New with old. Changed bits are now on +; and a2,a14 ;Keep down transitions +; sll 8,a14 +; or a2,a14 +; move a14,*a1 +; +; +; .endif +; +;#x +; rets +; +; .endif + +#******************************* +* Check for collision with opponent players +* A8=*Obj +* A13=*Player process +* Trashes scratch + + .asg 1,BABY_DETECT + + SUBRP plyr_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a5 + add a5,a4 ;Img center X + move a4,a5 ;Copy for X box rgt + move *a8(OZPOS),a6 ;A6=my Z + + move *a8(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a8(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_1 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_1 +; move *a0(ICBZ),a11 ;A11=Z radius +; jrnz #pcc_2 +; movk 13,a11 ;stupid K!!!A11=Z radius + movk 13*2,a11 ;stupid K!!!A11=Z radius (for both) +;#pcc_2 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_3 + srl 1,a2 ;Yes. Half of X & Z ranges + srl 1,a11 +#pcc_3 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + sub a2,a4 ;A4=my box lft X + add a2,a5 ;A5=my box rgt X + + movi plyrobj_t,a7 ;Set ptr to other team + move *a13(plyr_num),a0 + subk 2,a0 + jrge #pcc_4 + addi 64,a7 +#pcc_4 + movk 2,b1 ;Lp cnt + +;-------------------- +; top of test loop + +#lp move *a7+,a9,L + + move *a9(OZPOS),a2 ;Chk Z + sub a6,a2 + abs a2 ;A2=ABS(dZ) +; move *a9(OIMG),a0,L +; move *a0(ICBZ),a3 ;Get Z radius +; jrnz #pcc_l1 +; movk 13,a3 ;stupid K!!!A11=Z radius +;#pcc_l1 +; .if BABY_DETECT +; move @pup_baby,a14 ;Plyr babies? No if 0 +; jrz #pcc_l2 +; srl 1,a3 ;Yes. Half of Z range +;#pcc_l2 +; .endif +; add a11,a3 + move a11,a3 ;!!!Replaces previous comments + cmp a3,a2 ;Z in range? No if >= + jrge #next + + move *a9(OXPOS),a1 ;Chk X + move *a9(OXANI+16),a2 + add a2,a1 ;Img center X + move *a9(OSIZEX),a2 ;Get SIZEX & bump up if small img + move *a9(OIMG),a0,L + move *a0(IFLAGS),a14 ;Large img? Yes if !- + jrnn #pcc_l3 + move a2,a14 ;Small img + srl 2,a14 + add a14,a2 ;=125% +#pcc_l3 + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_l4 + srl 1,a2 ;Yes. Half of X range +#pcc_l4 + .endif + srl 1+1,a2 ;Half for lft/rgt, more to tighten up + add a2,a1 ;A1=his box rgt + sub a4,a1 ;His rgt > my lft? No if <= + jrle #next + move a1,a10 ;A10=his rgt,my lft dX + add a4,a1 + sub a2,a1 + sub a2,a1 ;A1=his box lft + sub a5,a1 ;His lft < my rgt? No if >= + jrge #next + + abs a1 ;Make A10=ABS(nearer dX) + cmp a1,a10 + jrle #pcc_l5 + move a1,a10 +#pcc_l5 + move *a8(OYPOS),a0 ;Chk Y + move *a9(OYPOS),a1 + addi 75,a1 ;stupid K!!! Y difference + cmp a1,a0 + jrgt #next ;Opponent much higher? + +;---------- Detected + + move *a8(OXVEL),a14,L ;>Outer box collision + abs a14 + srl 15,a14 + jrnz #otrbnc ;Moving in X? Yes if !0 + move *a8(OZVEL),a2,L + abs a2 + srl 15,a2 + jrz #chkib ;Not moving in Z? Yes if 0 +#otrbnc + PUSH a6,a7 + clr a0 + clr a1 + move *a8(OXVEL),a6,L + move *a8(OZVEL),a7,L + callr seekdir_xyxy128 ;Customize? + PULL a6,a7 + + move *a13(plyr_num),a2 + sll 2,a2 ;*4 + move *a9(OPLINK),a1,L + move *a1(plyr_num),a1 + add a1,a2 + sll 4,a2 ;*16 + addi #c_t,a2 + move *a2,a2 ;Get my dir variable offset + add a13,a2 + move *a2,a2 ;Get dir + + sub a0,a2 + move a2,a14 + abs a14 + cmpi >40,a14 + jrle #dsml + neg a2 +#dsml move a2,a2 + jrge #angpos ;Positive angle? + addi >28+>28,a0 +#angpos subi >28,a0 + + addk 4,a0 + sll 32-7,a0 + srl 32-7+3,a0 ;Leave 4 bits + sll 4,a0 + addi #vel_t,a0 + + move *a0,a1 + move *a0(16*4),a0 + sll 1,a0 + sll 1,a1 + move *a8(OXVAL),a14,L + add a0,a14 + move a14,*a8(OXVAL),L + move *a8(OZVAL),a14,L + add a1,a14 + move a14,*a8(OZVAL),L + +#chkib + movk 6,a2 ;stupid K!!!Inner box delta + .if BABY_DETECT + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pcc_ib1 + srl 1,a2 ;Yes. Half of delta +#pcc_ib1 + .endif + sub a2,a10 ;X touch only slight? + jrle #next + + move *a9(OZPOS),a1 + sub a6,a1 + abs a1 ;Z distance + sub a2,a3 + cmp a3,a1 ;Z touch only slight? Yes if >= + jrge #next + + move *a8(OXVEL),a14,L ;>Inner box collision + move *a9(OXVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #xvdif ;XV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #skipxv ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#xvdif + move *a8(OXVAL),a1,L + sub a14,a1 + move a1,*a8(OXVAL),L +#skipxv + move *a8(OZVEL),a14,L + move *a9(OZVEL),a2,L + move a2,a3 + xor a14,a2 + move a2,a2 + jrn #zvdif ;ZV different dir? + move a14,a0 + abs a3 + abs a0 + cmp a3,a0 + jrlt #next ;My vel smaller? + xor a14,a2 ;Fix A2 + sub a2,a14 +#zvdif + move *a8(OZVAL),a1,L + sub a14,a1 + move a1,*a8(OZVAL),L + + + move *a13(plyr_ownball),a0 + jrgt #next ;I have ball? + + move *a13(plyr_stagcnt),a10 ;>Add some stagger + move *a9(OPLINK),a14,L + + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrz #nodunk ;!Dunking? + +;This dunker may not have the ball! Do I own it? + move *a14(plyr_num),a2 + move @ballpnum,a3 + cmp a2,a3 + jrnz #nodunk + + btst LAYUP_B,a0 + jrnz #nodunk ;Layup=don't disrupt ball + + addk 1,a10 + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #nodunk ;Same team? + + move *a13(plyr_jmpcnt),a0 + jrz #nopop + move *a8(OYPOS),a0 + move *a9(OYPOS),a1 + addk 9,a1 ;15 + + cmp a1,a0 + jrgt #nopop ;Dunker is higher? + + + move @slamming,a0 ;Ball already successfully into hoop + jrnz #nopop + + move @HCOUNT,a0 + sll 32-4,a0 + jrnz #noflsh + + calla flash_reward + +#noflsh +;Shawn, this % should also key off from ptsdown. The % should never get +;higher, but maybe get a bit lower for the good team? + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + sll 4,a0 + addi tryblk_t,a0 + move *a0,a0 + +; movk 22,a0 ;38,25,21,19 + + + move *a13(plyr_num),a14 + +; move @plyr_onfire,a3 +; btst a14,a3 +; jrz #nofire ;br=not on-fire +;;This guy on fire +; movi 75,a0 +;#nofire + + move @PSTATUS,a3 + btst a14,a3 + jrnz #cont + movk 18,a0 ;Drone is less +#cont + + calla RNDPER + jrls #nopop + +; movk >1f,a0 +; callr rnd +; jrnz #nopop + + + move a13,a3 + calla def_play_reward ;Good defensive play reward snds, etc + +;If player is still going up, give him ball, otherwise, maybe disrupt dunk + + move *a13(plyr_seq),a0 + cmpi BLOCKREJ_SEQ,a0 + jreq #disrupt + cmpi FASTBLOCKREJ_SEQ,a0 + jreq #disrupt + + movi 200,a0 + calla RNDPER + jrhi #disrupt + + move *a8(OYVEL),a0,L + jrn #gvbl + +#disrupt +;If coming down, disrupt ball + +; movi 200,a0 +; calla RNDPER +; jrhi #gvbl + +;Probably want to give swatter the ball if this is a rebound! +;Check goaltcnt? + + .ref deflected_speech + calla deflected_speech + + move *a13(plyr_dir),a0 + calla sinecos_get + + move @ballobj_p,a2,L + + sll 4,a0 + sll 4,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + movi -GRAV*21,a1 ;Towards roof + move a1,*a2(OYVEL),L + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + calla ball_convfmprel + + move *a9(OPLINK),a14,L + + clr a0 + move a0,*a14(plyr_ownball) + move a0,@ballbbhitcnt + + movk 15,a0 + move a0,*a13(plyr_shtdly) + move a0,*a14(plyr_shtdly) + + jruc #nopop + +#gvbl + .ref in_air_steal_speech + calla in_air_steal_speech + + move *a13(plyr_num),a0 ;Give defender the ball + move a0,@ballpnum + clr a0 + move a0,*a13(plyr_dribmode) + move a0,@ballbbhitcnt + +; movi steal_snd,a0 +; calla snd_play1 + +#nopop +; move @plyrcharge,a0 +; addk 1,a0 +; move a0,@plyrcharge + +#nodunk move *a14(plyr_jmpcnt),a3 + jrz #ongnd + addk 1,a10 ;Collided with a jumper +#ongnd + move *a13(plyr_seqflgs),a2 + btst EASYSTAG_B,a2 + jrz #nesy ;!An easy stagger? + move *a13(plyr_num),a0 + move *a14(plyr_num),a2 + srl 1,a0 + srl 1,a2 + cmp a0,a2 + jreq #setstg ;Same team? + addk 1,a10 +#nesy +#setstg move a10,*a13(plyr_stagcnt) + +#next dsj b1,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + +tryblk_t + .word 1,2,3,10,15,18,22,23,24,25,25 + +#c_t .word 0,plyr_tmdir,plyr_o1dir,plyr_o2dir + .word plyr_tmdir,0,plyr_o1dir,plyr_o2dir + .word plyr_o1dir,plyr_o2dir,0,plyr_tmdir + .word plyr_o1dir,plyr_o2dir,plyr_tmdir,0 + +#vel_t + .word -16384,-15137,-11585,-6270 + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137,-16384,-15137,-11585,-6270 + + + +#******************************* +* Change the players image +* A0=*New image +* A1=New OCTRL (low 8 bits) +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2,A3 + + SUBRP plyr_ani + + cmpi ROM,a0 + jrlo #anierr + + move a0,a2 + move a1,a3 + callr anipt_getsclxy ;get old XY ani's + + move a2,*a8(OIMG),L + movb a3,*a8(OCTRL) + move *a2(ISIZE),*a8(OSIZE),L + move *a2(ISAG),*a8(OSAG),L + + move *a13(plyr_attrib_p),a3,L + move *a3,a3,L ;Get *scale_t + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pa_1 + movi scalebaby_t,a3 ;Yes. Set baby *scale_t +#pa_1 + move *a2(IFLAGS),a14 ;Large img? Yes if !- + jrnn #cont + addi scale_t_size,a3 ;No. Set small img *scale_t +#cont + move a3,*a8(ODATA_p),L ;Save *scale_t + + move a0,a2 ;save old XY ani's + move a1,a3 + callr anipt_getsclxy ;get new XY ani's + + sub a0,a2 ;subtract new from old + sub a1,a3 + + move a0,*a8(OXANI),L ;save new X ani + sra 16,a1 ;Y ani int only + move a1,*a13(plyr_aniy) ;save new Y ani + + move a8,a0 ;set XVAL base addr + addi OXVAL,a0 + move *a0,a14,L ;mod XVAL with diff of old X ani to + add a2,a14 ; new X ani + move a14,*a0+,L + move *a0,a14,L ;mod YVAL with diff of old Y ani to + add a3,a14 ; new Y ani + move a14,*a0,L + +#x rets + +#anierr + .if DEBUG + LOCKUP + eint + .else + CALLERR 2,2 + .endif + jruc #x + + + +#******************************* +* Start player jumping (block, shoot, dunk) +* A1=Shot distance +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startjmp + + PUSH a6,a7,a9 + +;DJT Start + clr a14 + move a14,*a13(plyr_hotspotf) ;Clr hotspot jump flag + move a14,*a13(plyr_hotspotp) ;Clr hotspot shot % +;DJT End + + move *a13(plyr_ownball),a5 + jrz #blk ;We don't have ball? + + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + + move *a13(plyr_newdir),a9 ;Get old + move a0,*a13(plyr_newdir) ;Turn toward basket + + move a5,a5 + jrn #tag1 ;trick shot shit +; jrlt #blkd ;Teammate has ball? + +;DJT Start + move *a8(OXPOS),a0 ;Chk hotspot X + move *a8(OXANI+16),a14 + add a14,a0 + move *a13(plyr_hotspotx),a14 + sub a14,a0 + abs a0 + subk HOTSPOTX_RNG,a0 + jrnn #hsnoshow + + move *a8(OZPOS),a0 ;Chk hotspot Z + move *a13(plyr_hotspotz),a14 + sub a14,a0 + abs a0 + subk HOTSPOTZ_RNG,a0 + jrnn #hsnoshow + +;Shooter is on his hotspot! +;Do ball smoke puff + movk 1,a14 + move a14,*a13(plyr_hotspotf) ;Set hotspot jump flag + +#hsnoshow +;DJT End + clr a14 + move a14,@reduce_3ptr + + cmpi 1b0h,a1 ;400+15%;!!!Desperation shot? + jrge #desp ; br=yes + + cmpi 136h,a1 ;270+15%;!!!Long 3ptr? + jrge #3ptr ; br=yes + + cmpi 0c0h,a1 ;200+15%;!!!Hook allowed? + jrge #tag1 + +;Attempt a hook from the top of scrn down toward hoop +;Must be near top of scrn, near baseline, and running in same dir +;for at least several ticks. + move *a8(OZPOS),a0 + movi CZMID,a14 + sub a0,a14 +;Don't allow this hook from 3pt range + cmpi 110,a14 + jrgt #tag1 ;Near 3 pt range? + cmpi 70,a14 + jrgt #yes0 +;Yes, I am near top of scrn + + +;Attempt a hook from the bottom of scrn up toward hoop +;Must be near bottom of scrn, near baseline, and running in same dir +;for at least several ticks. +; move *a8(OZPOS),a0 + subi CZMID,a0 + cmpi 70,a0 + jrlt #tryhk2 +;Don't allow this hook from 3pt range + cmpi 98h,a0 + jrgt #tag1 ;Near 3 pt range? +;Yes, I am near bottom of scrn + +#yes0 + move *a13(plyr_seqdir),a14 + cmpi 2,a14 + jrz #tryhk1 + cmpi 6,a14 + jrnz #tryhk2 + +#tryhk1 +;Player is running horizontally +;Is he near near baseline? + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #reg ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 +; abs a14 + cmpi 110h,a14 ;160 + jrlt #tryhk2 + jruc #yes +#reg + move *a8(OXPOS),a14 + sub a14,a0 +; abs a0 + cmpi 140h,a0 ;160 + jrlt #tryhk2 +#yes +;Yes, near baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk2 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk2 + +;Attempt a running in #2 dir hook from near the top of scrn up toward hoop +;Must be past CRTMID, far away from baseline, and running in same #2 dir +;for at least several ticks. + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #tryhk3 +;Yes, I am above CRTMID + + + move *a13(plyr_seqdir),a14 + cmpi 1,a14 + jrz #tryhk2a + cmpi 7,a14 + jrnz #tryhk3 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tryhk2a ;Team1? +;Yes team 1 + movk 10h,a9 ;Fix wrong way hookshot! + +#tryhk2a +;Player is running up at a diagonal +;Is he near near baseline? + move *a13(plyr_ohpdist),a14 + cmpi 60h,a14 ;out farther...fade away + jrhs #tryhk3 + movi WRLDMID,a0 + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #rega ;Team1? + + move *a8(OXPOS),a14 + sub a0,a14 + cmpi 140h,a14 ;160 + jrgt #tryhk3 + jruc #yesa +#rega + move *a8(OXPOS),a14 + sub a14,a0 + cmpi 140h,a0 ;160 + jrgt #tryhk3 +#yesa +;Yes, far enough away from baseline + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrlt #tryhk3 +;Yes, I've been running in this dir for awhile! + + move a9,*a13(plyr_newdir) ;Turn toward basket + + jruc #hs ;Hook shot + + +#tryhk3 + +;Attempt a #1 or #5 dir hook (Running vertically) + move *a13(plyr_seqdir),a14 + jrz #ahook + subk 4,a14 + jrne #tag1 +#ahook + move *a13(plyr_ohpdir),a14 + addk 8,a14 ;Round off + sll 32-7,a14 + srl 32-7+4,a14 ;Kill frac + jrz #tag1 + cmpi 4,a14 + jrz #tag1 + + + + move *a13(plyr_num),a2 + srl 1,a2 + jrz #tg1 ;Team1? + cmpi 5,a14 + jrlt #tag1 ;Team 2 behind hoop + jruc #tgx +#tg1 cmpi 4,a14 + jrge #tag1 +#tgx + + + + move *a13(plyr_ohpdist),a14 + cmpi 40h,a14 ;48h + jrlt #tag1 ;Too close for hook? + move *a8(OZPOS),a14 + cmpi >448,a14 + jrlt #tag1 + cmpi >4a8,a14 + jrgt #tag1 +;Okay to do hook! + + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #hs ;Hook shot + +#tag1 + + move *a13(plyr_newdir),a0 + move a0,a3 + move a1,a4 ;A1=Distance to hoop for shot + ;>Skip dunks from behind the hoop + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-3,a0 ;Kill frac + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #lhoop ;Team2? + subk 5,a0 + jrlt #trydunk +#tag1a + move *a13(plyr_ownball),a5 + jrp #sj ;br=teammate doesn't have ball +#tag1b move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + + +;If behind hoop, I will try to do a hook shot... + +#lhoop move a0,a0 + jrz #trydunk + subk 4,a0 + jrlt #tag1a ;br=no dunk +; jrlt #sj + + +#trydunk ;>Try a dunk + move *a13(plyr_ownball),a5 + jrnn #td2 ;br=teammate doesn't have ball + cmpi 65,a4 ;too close for alleyoop ? + jrle #tag1b ;br=yes...do nothing + jruc #td2a + +#td2 + cmpi 42,a4 ;ADJ'd for new COURT SIZE +; cmpi 53,a4 ;ADJ'd for new COURT SIZE +; cmpi 60,a4 + jrle #velok ;Close to hoop, Allow dunk!! w/o turbo + +#td2a + move *a13(plyr_dir),a14 + sub a3,a14 + abs a14 + cmpi >40,a14 + jrle #nodov + subi >80,a14 + abs a14 +#nodov + subk 24,a14 + jrgt #sj ;!Facing basket? + + move *a13(plyr_PDATA_p),a14,L + move *a14(ply_turbo),a14 + subk 3,a14 ;!!! Min cnt for dunk + jrle #sj ;Turbo too low? + +;Shawn, stop dunker if he just made a real quick move. Should we do this? +; move *a13(plyr_dirtime),a14 +; subk 4,a14 +; jrgt #dnk_ok +; nop +; jruc #sj +; +;#dnk_ok + + cmpi 165,a4 ;Max dunk range (ADJ'd for new COURT) +; cmpi 170,a4 ;Max dunk range + jrge #sj ;Too far for dunk? + move *a8(OZPOS),a14 ;Chk Z range + cmpi CZMAX-34,a14 + jrhs #sj + cmpi CZMIN+34,a14 + jrls #sj + move *a8(OXVEL),a14,L ;>Chk velocity + abs a14 + srl 16,a14 + jrnz #velok + move *a8(OZVEL),a14,L + abs a14 + srl 16,a14 + jrz #sj +#velok + move *a13(plyr_ownball),a5 + jrn #aly1 ;alleyoop + +;Perhaps allow big guys to dunk through anybody! + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a0 + sll 4,a0 + addi dnkthru_t,a0 + move *a0,a0 + calla RNDPER + jrhi #dunk ;Yes, jump over anybody! + +; movk 7,a0 ;12% +; callr rnd +; jrz #dunk ;Ignore opponents? + +#aly1 +;Get opponents defense of dunks info + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1 + clr a7 +#tm1 + movi plyrproc_t,a14,L + add a7,a14 + move *a14,a14,L + + + + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof1 + btst a7,a0 + jrz #nof1 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd +#nof1 + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd +; jruc #temp + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #o1dok + addk 15,a2 ;drone has to be more open +#nrm + move a2,a14 + srl 1,a14 + add a14,a2 +#norm + move *a13(plyr_o1dist),a14 + cmp a14,a4 + jrlt #o1dok ;I'm closer? + +; cmpi 50,a14 + cmp a2,a14 + + jrgt #o1dok ;He's too far? + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml + +; subk 32,a2 + sub a0,a2 + + jrlt #trylyup ;In front of me? +#o1dok + + movi 64,a7 + move *a13(plyr_num),a14 + cmpi 2,a14 + jrlt #tm1a + clr a7 +#tm1a + movi plyrproc_t+32,a14,L + add a7,a14 + move *a14,a14,L + + move *a14(plyr_num),a7 + move @plyr_onfire,a0 +;; cmp a0,a7 +;; jrnz #nof2 + btst a7,a0 + jrz #nof2 ;br=not on-fire +;This defender is on fire! Make his defense of dunkers the best! + movk 11,a0 + jruc #gdd2 +#nof2 + + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 +#gdd2 + sll 4,a0 + movi #dist_t,a14 + add a0,a14 + move *a14,a2 ;Distance check + movi #width_t,a14 + add a0,a14 + move *a14,a0 ;Get width of check ;Distance check + + move *a13(plyr_ownball),a14 + jrnn #norm2 ;br=not an alleyoop + move *a13(plyr_num),a7 + move @PSTATUS,a14 + btst a7,a14 ;drone ? + jrnz #nrm2 ;br=no + move *a13(plyr_dirtime),a14 + subk 5,a14 + jrle #trylyup + addk 15,a2 ;drone has to be more open +#nrm2 + move a2,a14 + srl 1,a14 + add a14,a2 + +#norm2 + + move *a13(plyr_o2dist),a14 + cmp a14,a4 + jrlt #o2dok ;I'm closer? +; cmpi 50,a14 + cmp a2,a14 + jrgt #o2dok ;He's too far? + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml +; subk 32,a2 + sub a0,a2 + jrlt #trylyup ;In front of me? +#o2dok + +#dunk move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + + addk 8,a3 ;Round off + srl 4,a3 ;Kill frac + sll 5,a3 ;*32 + + + move *a13(plyr_ownball),a5 + jrp #noaly ;br=teammate doesn't have ball !! + + move *a13(plyr_tmproc_p),a14,L + move *a14(plyr_seqflgs),a0 + btst DUNK_B,a0 ;is teammate in dunk ? + jrnz #tmdnk ;br=yes + move *a14(plyr_ohpdist),a14 ;get teammates dist. from hoop + cmpi 375,a14 ;passer not in view of basket + +;Passer can be at about half court! His teammates cursor will flash white +;to alert him of an offscrn alley oop jump! +; cmpi >1EB,a14 ;passer not in view of basket + jrhs #x ;br=teammate too far away!! + + + +;Disallow alley oop jump if not good enough dunker! +; move *a13(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 4,a0 +; jrlt #x_red + +;Disallow alley oop jump if not enough turbo - then reduce turbo correct +;amount if it is ok + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #I_drone + + move *a13(plyr_PDATA_p),a2,L ;Shrink turbo meter for this plyr + move *a2(ply_turbo),a1 + subk TURBO_CNT/7,a1 ;Min cnt for alley oop + +;Flash him red if we are about to disallow alley oop! + + jrle #x_red ;Turbo too low? + move a1,*a2(ply_turbo) + + jruc #cont_aly + +#I_drone +;I am a drone, check my teammate, if human, then make sure +;drone does only 1 jump up attempt per inbound... + xori 1,a1 + btst a1,a0 + jrz #cont_aly ;Br=2 drones on same team - allow it + +;Has this drone already tried this jump 1 time? + + .ref balltmshotcnt + move @balltmshotcnt,a0 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a0 + jrnn #cont_aly ; br=a team is on-fire + + move @drone_attempt,a0 + jrnz #x + movk 1,a0 + move a0,@drone_attempt + +;Only allow drone teammates of a human to have scored 3 alley oops per period! + move *a13(plyr_alley_cnt),a0 + cmpi 3,a0 + jrge #x + + +#cont_aly +; move *a13(plyr_inflsh),a0 +; jrnz #skip1 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip1 + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DUNKSKILL),a14 +; subk 4,a14 ;if less than 4 dunk rating do layup alley + subk 3,a14 ;if less than 3 dunk rating do layup alley + jrgt #nrmaly + + movi ALLEYOOP10_SEQ,a0 ;dir 1 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP14_SEQ,a0 ;dir 5 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP11_SEQ,a0 ;dir 2 + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP13_SEQ,a0 ;dir 4 + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + movi ALLEYOOP12_SEQ,a0 ;dir 3 + jruc #qucklay2 +#nrmaly + movi ALLEYOOP8_SEQ,a0 + move *a13(plyr_seqdir),a14 + jrz #qucklay2 ;br=direction 1 + movi ALLEYOOP9_SEQ,a0 + cmpi 4,a14 + jreq #qucklay2 ;br=direction 5 + movi ALLEYOOP7_SEQ,a0 ;br=yes + cmpi 1,a14 + jreq #qucklay2 + cmpi 7,a14 + jreq #qucklay2 + movi ALLEYOOP5_SEQ,a0 ;br=yes + cmpi 3,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + cmpi 5,a14 ;dir 4 or 8 ? + jreq #qucklay2 ;br=yes + callr get_rndm_alleyoop_seq ;ret. a0 = alleyoop seq. + jruc #qucklay2 ;br=not in direction 1 +#tmdnk + +;Make this double dunker flash white upon take off... + +;At the very least, we should do this for the 1st period... + +; move *a13(plyr_inflsh),a0 +; jrnz #skip2 + + CREATE flashpid,flash_me + move a13,*a0(PDATA+32),L +;#skip2 + + movi DDUNK_RECV_SEQ,a0 + jruc #qucklay + + SUBRP flash_me + + SLEEPK 3 + move *a13(PDATA+32),a0,L ;Player proc ptr + + move *a0(plyr_inflsh),a14 + jrnz flash_me + + SLEEPK 4 + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a0 + jaz SUCIDE + movk 1,a14 + move a14,*a0(plyr_inflsh) + +;flash player white to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref white_pal + movi white_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 3,a10 +#again +;If on, flash plyr off scrn arrow + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw + + movi >0101,a2 + move a2,*a1(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 +#no_arw + + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;If on, restore normal arrow const status + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_lost_ptr),a14,L + move *a14(PA8),a1,L ;a8=0 if no side arw on or arw obj ptr + jrz #no_arw2 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a1(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#no_arw2 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + + SUBRP flash_me_red + + move *a13(PDATA+32),a0,L ;Player proc ptr + move *a0(plyr_jmpcnt),a14 + janz SUCIDE + movk 2,a14 + move a14,*a0(plyr_inflsh) + +;flash player red to alert him + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + .ref red_pal + movi red_pal,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + move *a9(OPAL),a11 + + movk 2,a10 +#again1 + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + move a0,*a9(OPAL) + + SLEEPK 3 + +;Restore normal player pal + move *a13(PDATA),a0 + move a0,*a8(OPAL) + move a11,*a9(OPAL) + + SLEEPK 3 + + dsj a10,#again1 + + clr a14 + move *a13(PDATA+32),a0,L ;Player proc ptr + move a14,*a0(plyr_inflsh) + + DIE + +#noaly + move *a13(plyr_tbutn),a14 + cmpi 4,a14 ;just pressed turbo ? + jrgt #dodnk ;br=no, do a dunk + + move *a13(plyr_ohpdist),a14 +; cmpi 75,a14 ;too close for QUICK LAYUP ? + cmpi 95,a14 ;too close for QUICK LAYUP ? + jrlt #dodnk ;br=yes, do dunk + + movk 2,a0 + move a0,@ballptsforshot + + movk LAY_UP,a0 + move a0,@shot_type + + movi QUICK_LAYUP_SEQ,a0 + jruc #qucklay +#dodnk + + .ref getdunkseq + calla getdunkseq + move a0,a0 + jrnz #sj + + + clr a0 + move a0,@shot_distance + + movk DUNK_SHORT,a0 + cmpi 80,a4 + jrle #short + + movk DUNK_MED,a0 + cmpi 120,a4 + jrle #med + + movk DUNK_LONG,a0 +#short +#med + move a0,@shot_type + + .if DEBUG + movi DUNKA_SEQ,a0 + movi DUNKA2_SEQ,a0 + movi DUNKA3_SEQ,a0 + movi DUNKB_SEQ,a0 + movi DUNKB2_SEQ,a0 + movi DUNKB3_SEQ,a0 + movi DUNKC_SEQ,a0 + movi DUNKD_SEQ,a0 + movi DUNKD2_SEQ,a0 + movi DUNKE_SEQ,a0 + movi DUNKE2_SEQ,a0 + movi DUNKF_SEQ,a0 + movi DUNKG_SEQ,a0 + movi DUNKG2_SEQ,a0 + movi DUNKJ_SEQ,a0 + movi DUNKJ2_SEQ,a0 + movi DUNKK_SEQ,a0 + movi DUNKK2_SEQ,a0 + movi DUNKL_SEQ,a0 + movi DUNKL2_SEQ,a0 + movi DUNKL3_SEQ,a0 + movi DUNKN_SEQ,a0 + movi DUNKN2_SEQ,a0 + movi DUNKN3_SEQ,a0 + movi DUNKO_SEQ,a0 + movi DUNKO2_SEQ,a0 + movi DUNKP_SEQ,a0 + movi DUNKP2_SEQ,a0 + movi DUNKP3_SEQ,a0 + movi DUNKQ_SEQ,a0 + movi DUNKQ2_SEQ,a0 + movi DUNKQ3_SEQ,a0 + movi DUNKR_SEQ,a0 + movi DUNKR2_SEQ,a0 + movi DUNKS_SEQ,a0 + movi DUNKS2_SEQ,a0 + movi DUNKT_SEQ,a0 + movi DUNKT2_SEQ,a0 + movi DUNKT3_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKT5_SEQ,a0 + movi DUNKU_SEQ,a0 + movi DUNKU2_SEQ,a0 + movi DUNKU3_SEQ,a0 + movi DUNKV_SEQ,a0 + movi DUNKV2_SEQ,a0 + movi DUNKV3_SEQ,a0 + movi DUNKV4_SEQ,a0 + movi DUNKW_SEQ,a0 + movi DUNKW2_SEQ,a0 + movi DUNKW3_SEQ,a0 + movi DUNKX_SEQ,a0 + movi DUNKX2_SEQ,a0 + movi DUNKX3_SEQ,a0 + movi DUNKY_SEQ,a0 + movi DUNKY2_SEQ,a0 + movi DUNKZ_SEQ,a0 + movi DUNKZ2_SEQ,a0 + movi DUNKZ3_SEQ,a0 + movi DUNKLAY_SEQ,a0 + movi DUNKLAY2_SEQ,a0 + movi DUNKLAY3_SEQ,a0 + movi DUNKLAY3A_SEQ,a0 + movi DUNKLAY3B_SEQ,a0 + movi DUNKLAY3C_SEQ,a0 + movi DUNKLAY4_SEQ,a0 + movi DUNKLAY5_SEQ,a0 + movi DUNKLAY6_SEQ,a0 + movi DUNKLAY7_SEQ,a0 + movi DUNKLAY7A_SEQ,a0 + movi DUNKLAY8_SEQ,a0 + movi DUNKT4_SEQ,a0 + movi DUNKU4_SEQ,a0 + movi DUNKU5_SEQ,a0 + movi DUNKU6_SEQ,a0 + movi DUNKU7_SEQ,a0 + movi DUNKU8_SEQ,a0 + + movi 1,a2 +; movi -1,a2 + + jrn #tstdnk + .endif + + move *a3,a2,L + move *a2+,a0 ;#Entries-1 + callr rndrng0 + sll 4,a0 ;*16 + add a2,a0 + move *a0,a0 + jrz #sj ;Null entry? +#tstdnk + + + .if DEBUG +;Shawn, I'm stuffing the dunk into ram so I can pause the game when someone +;has a problem with a dunk and I can jot down the dunk # and fix it. + .bss debug_dunk_num,16 + .ref slowmotion + + move a0,@debug_dunk_num + clr a1 + move a1,@slowmotion + .endif + + move a0,a2 + CREATE0 start_animate +; cmpi DUNKX_SEQ,a2 +; jreq #smk +; cmpi DUNKX2_SEQ,a2 +; jreq #smk +; cmpi DUNKX3_SEQ,a2 +; jrne #nosmk +;#smk CREATE0 plyr_smoketrail +; move a13,*a0(PA10),L +#nosmk move a2,a0 + +#qucklay + movk 2,a14 + move a14,@ballptsforshot +#qucklay2 + move *a13(plyr_dir),a7 + callr plyr_setseq ;Dunk! + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + +;strtsnd SLEEP 40 +; movi dnk_snd,a0 +; calla snd_play1 +; SLEEP 180 +; movi push1_snd,a0 +; calla snd_play1 +; DIE +; +;push1_snd .word >fd85,15,>8160,0 ;Push ugh +;dnk_snd .word >fda9,120,>8167,0 + +dnkthru_t + .word 0,0,0,0,0,0,0,100,150,250,350 + + +#dist_t .word 40*DIST_REDUCTION + .WORD 43*DIST_REDUCTION + .WORD 46*DIST_REDUCTION + .WORD 49*DIST_REDUCTION + .WORD 50*DIST_REDUCTION + .WORD 52*DIST_REDUCTION + .WORD 54*DIST_REDUCTION + .WORD 56*DIST_REDUCTION + .WORD 68*DIST_REDUCTION + .WORD 70*DIST_REDUCTION + .WORD 72*DIST_REDUCTION + .WORD 95*DIST_REDUCTION +#width_t + .word 27,29,31,33,36,37,38,39,40,43,45,70 + +#trylyup + move *a13(plyr_ownball),a14 + jrn #sj_red ;alleyoop + move @HCOUNT,a14 + btst 0,a14 + jrnz #sj + move *a13(plyr_ohpdist),a14 + cmpi 138*DIST_ADDITION,a14 + jrgt #sj + cmpi 35*DIST_ADDITION,a14 + jrlt #sj + +;#temp + move a3,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) ;Cancel turn + movk 2,a0 + move a0,@ballptsforshot + + movk FINGER_ROLL,a0 + move a0,@shot_type + + movi LAYUP_SEQ,a0 + jruc #sseq + +#hs + movk 2,a4 + move a4,@ballptsforshot + + movk HOOK_SHOT,a0 + move a0,@shot_type + + movk HOOK_SEQ,a0 + move *a13(plyr_turbon),a4 + jrnz #hs1 + movk HOOK2_SEQ,a0 ;Not a high arc + + +#hs1 move *a13(plyr_dir),a7 + callr plyr_setseq + + move *a13(plyr_seqdir),a14 + subk 2,a14 + jrz #x + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #x ;Team1? + movi M_FLIPH,a14 + move a14,*a13(plyr_anirevff) + jruc #x + + + +#sj ;>Start a jump shot seq + move *a13(plyr_ownball),a5 + jrnn #sj2 + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x + +#sj_red + move a9,*a13(plyr_newdir) ;Turn toward basket + jruc #x_red + + + + +#sj2 + .asg CZMIN+18,PT3_TOPZ + + movk 2,a4 ;Assume 2ptr + + move *a8(OZPOS),a0 + subi PT3_TOPZ,a0 + jrlt #3ptra + cmpi PT3_CNT*4,a0,W + jrge #3ptra + + .if 0 ;DEBUG code for 3pt line positioning + BSSX pt3_tval,16 + srl 2,a0 + move a0,a1 + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move a0,@pt3_tval + dec a0 + move *a13(plyr_num),a14 + subk 2,a14 + jrlt #3pt1 + neg a0 +#3pt1 addi WRLDMID,a0 + move *a8(OXANI+16),a14 + sub a14,a0 + move a0,*a8(OXPOS) + sll 2,a1 + addi PT3_TOPZ,a1 + move a1,*a8(OZPOS) + clr a0 + move a0,*a13(plyr_nojoy) + movk STNDDRIB_SEQ,a0 + jruc #sseq + .endif ;DEBUG end + + srl 2,a0 ;In 3pt arc Z range + sll 4,a0 + addi pt3_t,a0 + move *a0,a0 + move *a8(OXANI+16),a14 + move *a8(OXPOS),a2 + add a14,a2 + subi WRLDMID,a2 + abs a2 + sub a2,a0 ;Inside 3pt line? + jrle #2ptr ; br=yes + +; LOCKUP ;>3ptr from just outside the arc + cmpi 25,a0 ;22+15%;!!! + jrlt #3ptrx +#3ptr +; LOCKUP ;>3ptr from further out but NOT a desperation + movk 1,a4 + move a4,@reduce_3ptr +#3ptra +; LOCKUP ;>3ptr from top or bottom sideline + +#3ptrx + movk 3,a4 ;Is 3ptr + + movk _3_POINTS,a0 + move *a13(plyr_ohpdist),a14 +; cmpi 310*DIST_ADDITION,a0 ;!!!Chk distance from hoop (158 h) + cmpi 290*DIST_ADDITION,a14 + jrle #contxy + + movk LONG_RANGE,a0 + jruc #contxy +#2ptr + movk _2_POINTS,a0 + +; move a4,@ballptsforshot +; move *a13(plyr_tbutn),a14 +; cmpi 12,a14 +; jrgt #contxy +; movk LAYUP_SEQ,a0 +; jruc #sseq + +#contxy + move a0,@shot_type + move a4,@ballptsforshot + + movk UNDR_HOOP_SHT_SEQ,a0 ;for team 2 + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #tem2 ;br=team1 + movk UNDR_HOOP_SHT_SEQ2,a0 +#tem2 + .ref chck_plyr_under_hoop + calla chck_plyr_under_hoop + jrc #sseq + + movk SHOOT_SEQ,a0 + move *a13(plyr_shtbutn),a14 + jrnz #sseq + + movk QSHOOT_SEQ,a0 + movk 1,a14 + move a14,*a13(plyr_shtbutn) + jruc #sseq + +;-------------------- + +#desp + movi DESPERATION,a0 + move a0,@shot_type + + movk 3,a14 + move a14,@ballptsforshot + +;This is a heave grenade toss +;only do it if under 5 seconds in quarter + movk SHOOTDESP2_SEQ,a0 ;Heave + move @PCNT,a14 + btst 0,a14 + jrz #abc + movk SHOOTDESP_SEQ,a0 ;Heave +#abc + move @game_time,a14,L + cmpi >500,a14 + jrlt #heave ;Do it + +;FIX!! We need another desp shot +; move @PCNT,a0 +; ANDK 1,a0 +; sll 1,a0 +; addk SHOOTDESP_SEQ,a0 + + movi SHOOTDESP3_SEQ,a0 + +#heave + move *a13(plyr_newdir),a14 + move a14,*a13(plyr_dir) + movi -1,a14 + move a14,*a13(plyr_newdir) + jruc #sseq + +#blk +;Player has hit shoot/block button try to block shot or other... + +;Am I about to get a pass? + move *a13(plyr_rcvpass),a0 + jrgt #x ;Waiting on pass? + +;FIX!!! +;Realize that no jumping can occur offscrn... Perhaps this is OK +;Maybe allow block attempt if ball is in air (shot)... + move *a13(plyr_offtime),a14 + jrnz #x ;br=offscreen, dont jump + +;Does anyone own ball + move @ballpnum,a14 + jrn #inair ;br=no owner + + sll 5,a14 ;*32 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a0 + btst SHOOT_B,a0 +; jrz #faceb ;!Shooting? + jrnz #inair + +;Slow down drift fr this blocker! + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + PUSH A0 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball + PULL A0 + btst DUNK_B,a0 + jrz #blkd + movk 7,a0 + calla rndrng0 + sll 4,a0 + addi blktype_t,a0 + move *a0,a0 + +;What seq for trying to block a dunk? +; +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movi BLOCKREJ_SEQ,a0 +; movi REBOUND_SEQ,A0 + + jruc #sseq + +blktype_t + .word BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ,BLOCK_SEQ + .word REBOUND_SEQ,BLOCKREJ_SEQ + .word REBOUND_SEQ,FASTBLOCKREJ_SEQ + +#inair + +;if teammate shot ball, dont swat at the ball, just do a rebound seq. + move @ballshotinair,a1 + jrn #nstm ;br=ball hit something !! + move *a13(plyr_num),a14 + srl 1,a14 + srl 1,a1 + cmp a14,a1 + jreq #dorb ;br=plyrs, not on same team !! +#nstm + move @ballobj_p,a5,L + + move *a5(OYPOS),a1 +; cmpi -20,a1 + cmpi -40,a1 + jrge #faceb ;Ball close to gnd? + + move *a5(OXVAL),a6,L + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move @ballpnum,a14 + jrge #chkdist ;Other team has ball? + +;PUTBACK logic +; move *a13(plyr_num),a1 +; move @ballpnumlast,a14 ;Plyr on the same team as plyr who +; srl 1,a1 ; missed the basket? +; srl 1,a14 +; cmp a1,a14 +; jrnz #noffreb ;br=no +; +; move *a13(plyr_ohpdist),a14 +; cmpi 50,a14 +; jrhs #dorb ;br=not close enough for put-back dunk +; movi PUTBACK_SEQ,a0 +; jruc #sseq +;#noffreb + movk 20,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + +#chkdist +;TEMP!!! +; movi FASTBLOCKREJ_SEQ,a0 +; movi BLOCK_SEQ,a0 +; movk BLOCKREJ_SEQ,a0 +; movk REBOUND_SEQ,a0 +; +; jruc #sseq +; + sra 16,a6 + sra 16,a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + cmpi 120,a1 + jrge #blkd ;Too far to jump? + +; movk 1,a0 ;50% + movi 650,a0 + move @ballpnum,a1 + jrge #dornd + + move @ballgoaltcnt,a14 + jrle #dorb ;Do rebound? + + + +; movk 1,a0 ;50% + movi 650,a0 +;Do more rejections! +#dornd calla RNDPER +; jrnz #dorej + jrhi #dorej + +;Weak shot blockers will do swat, not grab! + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a0 + cmpi 5,a0 + jrlt #dorej + +#dorb movk REBOUND_SEQ,a0 + jruc #sseq +#dorej + movk BLOCKREJ_SEQ,a0 + jruc #sseq + + +#faceb move @ballobj_p,a5,L + move *a5(OXPOS),a6 + addk 6,a6 + move *a5(OZPOS),a7 + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward ball +;If near ball, and it's near ground, go ahead and try pickup + move *a13(plyr_balldist),a0 + cmpi >24,a0 + jrgt #blkd +;Pickup + movi PICKUP_SEQ,a0 ;No. Pick-up ball + jruc #sseq + +#blkd movk BLOCK_SEQ,a0 + + +#sseq move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7,a9 + rets + + +#x_red +;Missed alley oop attempt + move *a13(plyr_inflsh),a0 + jrnz #x + + move @PSTATUS,a0 ;Plyr start bits 0-3 + move *a13(plyr_num),a1 + btst a1,a0 + jrz #x + + + CREATE flashpid,flash_me_red + move a13,*a0(PDATA+32),L + + PULL a6,a7,a9 + rets + +pt3_t + .word 336,276,248,235,222,213,204,196 + .word 188,182,176,163,158,155,152,149 + .word 146,143,141,140,139,138,137,137 + .word 136,136,136,135,135,135,135,135 + .word 136,137,137,138,138,139,140,141 + .word 141,142,144,145,147,148,150,151 + .word 153,155,158,161,164,168,171,174 + .word 177,180,183,186,189,193,197,201 + .word 205,210,215,220,226,231,238,245 + .word 254,262,272,286,316 +PT3_CNT .equ ($-pt3_t)/16 + + .if CRTALGN + .word -1 + .endif + +#******************************* + SUBRP get_rndm_alleyoop_seq + + PUSH a1 + movk 4,a0 + calla rndrng0 + sll 4,a0 + addi alleyoop_seq_tbl,a0 + move *a0,a0 + PULL a1 + rets + +alleyoop_seq_tbl + .word ALLEYOOP1_SEQ + .word ALLEYOOP2_SEQ + .word ALLEYOOP3_SEQ + .word ALLEYOOP4_SEQ + .word ALLEYOOP6_SEQ + +#******************************* +* Player takes a shot (also called by seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_shoot + + PUSH a6,a7,a9,a10,a11 + + .ref bkbrd_proc_flg + clr a14 + move a14,@bkbrd_proc_flg ;just in case speech proc was killed + + move *a13(plyr_num),a0 ;Exit if plyr doesn't have + move @ballpnum,a1 ; the ball + cmp a0,a1 + jrne #x + + clr a1 + move *a13(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;Take care to update here when alley + jrlo #nally ; seq's are changed or added!!! + cmpi ALLEYOOP14_SEQ,a14 ;This stuff is elsewhere too!!! + jrhi #nally + movk 1,a1 +#nally + BSSX was_alley_shot,16 + move a1,@was_alley_shot + +; move @GAMSTATE,a0 +; cmpi INAMODE,a0 +; jrnz #nofake +; .ref do_ball_spark +; CREATE0 do_ball_spark +;#nofake + +;DJT Start + move @plyr_onfire,a14 ;Do on-fire shot snd? + btst a0,a14 + jrnz #fire ; br=on-fire + move *a13(plyr_hotspotp),a14 ;Do sound for hotspot shot? + jrz #cold ; br=no + move a0,a14 ;Chk hotspot shot cnt + sll 4,a14 + .ref hotspot_count + addi hotspot_count,a14 + move *a14,a14 + subk HOTSPOT_MINCNT,a14 + jrlt #cold ; br=hotspot not active yet +#fire + SOUND1 fball_snd +;DJT End +#cold + move @ballobj_p,a0,L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 ;Ball Y free? + jrne #notfree ; br=no + move @ballfree,a14 ;Yes. Was it already free? + jrnz #contv ; br=yes + + .if DEBUG + LOCKUP ;Should not occur! + .endif + + movk 1,a14 + move a14,@ballfree ;!0=ball free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 ;A1=ball ctr Y + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L + jruc #contv + +#notfree + clr a1 + move a1,*a0(OYVEL),L ;Clr vels + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;0=ball not free + +#contv + move *a13(plyr_ohoopx),a6 + movi CZMID,a7 + callr seekdirdist_obxz128 + move a0,a10 ;A10=hoop dir + move a1,a11 ;A11=hoop distance + + move *a13(plyr_attrib_p),a7,L ;Get plyr shot % attribute + move *a7(PAT_SHOTSKILL),a9 + + move @ballptsforshot,a0 + cmpi 3,a0 + jrnz #no3 + + +;Fades, lean-ins are also reduced via reduce_3ptr flag + +;Reduce 3-ptrs based on shoot attribute +;FIX!! This should also do an adjustment based on who it is and how good +;they are at 3 ptrs! Hill doesn't even shoot 'em! Rodman should be a 0! +;Store another flag for guys who don't even shoot them... + .ref SHT5 + cmpi SHT5,a9 + jrgt #oui + subi 200,a9 ;!!! ;Stat #0-4 reduce 3-ptrs +#oui + move @reduce_3ptr,a0 + jrz #no3 + subi 150,a9 ;!!!150?;Reduce 3-ptr + + +#no3 +;FIX!!! +;Make sure these are good numbers.... + cmpi 112,a11 ;!!! ;Close-in? + jrgt #notshort + addi 250,a9 ;!!! ;Improve for close-in +#notshort + cmpi 304,a11 ;!!! ;Far shot? + jrlt #notlong + subi 990,a9 ;!!! ;Reduce for far shot + +#notlong + move *a13(plyr_num),a4 ;>Process opponents dir/dist + srl 2,a4 + subb a4,a4 + addk 1,a4 + sll 1+5,a4 + addi plyrobj_t,a4 + + movk 2,a5 +#chkopp + move *a4+,a0,L + move *a0(OYPOS),a3 + callr seekdirdist_obob128 + + cmpi 50,a1 ;40 ;!!! ;Opponent tight-in, any angle? + jrgt #1far ; br=no + subi 240,a9 ;!!! +#1far + cmpi 85,a1 ;75 ;!!! ;Opponent close-in? + jrgt #nxtopp ; br=no + sub a10,a0 ;Yes. Process my hoop angle with his + abs a0 ; angle on me + cmpi >40,a0 + jrle #1dsml + subi >80,a0 + abs a0 +#1dsml + subk 20,a0 ;!!! ;Between me & hoop? + jrge #nxtopp ; br=no + sll 2,a1 ;!!! = 0 to 300 +;Make shot% reduce greatly if someone is in his face... + subi 390,a1 ;!!! =-390 to -90 ;350 + + move *a8(OYPOS),a2 + sub a3,a2 ;Shooter above opponent? + jrle #1above ; br=yes + addk 8,a2 + mpys a2,a1 + sra 3,a1 +#1above + add a1,a9 ;Decrease accuracy +#nxtopp + dsj a5,#chkopp + + move a11,a14 ;Decrease shot % per hoop distance + sll 1,a14 ;!!! + sub a14,a9 + + cmpi 50,a9 ;!!! ;Ensure valid minimun shot % + jrge #minok + movi 50,a9 ;!!! +#minok + + move *a13(plyr_num),a0 ;Get plyr brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 + cmpi 3,a1 ;!!! ;If too many in a row, make this + jrlt #nobrick ; shot go in +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + +;Too far to pump up this brick thrower? + cmpi 304,a11 ;!!! ;Far shot? + jrgt #nobrick + + movi 990,a9 ;!!! ;Set best shot % +#nobrick + + move *a13(plyr_ptsdown),a1 ;>Adjust shot % per score diff + move a1,a2 ;A2=plyr_ptsdown +; movk 20,a0 ;!!! ;% factor +;DJT Start + movk 15,a0 ;12 ;14 ;15 ;!!! ;% factor +;DJT End + mpys a0,a1 + add a1,a9 + + cmpi 50,a9 + jrge #minok1 + movi 50,a9 +#minok1 + + move a2,a2 ;Is plyr losing? + jrgt #nomis ; br=yes + movi 55,a0 ;!!! ;Randomly knock down his % + calla RNDPER + jrls #nomis + movi 350,a9 ;!!! +#nomis + move @game_time,a1,L + cmpi >400,a1 ;!!! ;Last seconds of qrtr? + jrgt #nohelp ; br=no + +*If end of qrtr/game, affect shots like this: +* +* 1. If 4th or overtime qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 75% of +* the time. (Regardless of shot distance) +* c. This shot (2 or 3) would win the game, then make it go in at +* least 30% of the time (Close in would be higher, but even bombs +* go in 30%) +* d. If this shot would pull me to within 1/2 points, then make it go +* in 90% of the time for max excitement without putting him ahead. +* +* 2. If 1/2/3rd qrtr has 5 seconds or less remaining and +* +* a. If score is already tied or I am ahead, do nothing. +* b. This shot (2 or 3) would tie the score, then make it go in 40% of +* the time at least. (Regardless of shot distance) +* c. If this shot would pull me to within or ahead by 1/2 points, then +* make it go in 50% of the time for max excitement) +* d. If I am losing by a larger margin than 4, then make it go in at +* least 60%. (Regardless of shot distance) + + move @gmqrtr,a3 + + move a2,a0 ;Game tied? + jrnz #notie ; br=no + + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + movi 50,a9 ;!!! ;Last second shot of a tie game + jruc #nohelp ; should almost never go in +#notie + jrgt #tryhelp ;Is plyr losing? br=yes + + addk 5,a0 ;!!! ;Winning by 5 or more? + jrgt #nohelp ; br=no + subk 3,a3 ;In 4th qrtr or OT? + jrlt #nohelp ; br=no + cmpi >200,a1 ;How close to qrtr being over? + jrgt #endgbig ;Last few seconds + jruc #willtie ;At the buzzer +#tryhelp + move @ballptsforshot,a14 + subk 3,a3 ;In 4th qrtr or OT? + jrge #endgame ; br=yes + + subk 5,a0 ;!!! ;Losing by more than 5? + jrgt #losebig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #willtie ; br=yes + + movi 100,a3 ;!!! ;Min % down 1-5, no tie shot + jruc #chkper +#willtie + movi 120,a3 ;!!! ;Min % down 1-5, is tie shot + jruc #chkper +#losebig + movi 120,a3 ;!!! ;Min % down >5 + jruc #chkper + +#endgame + subk 4,a0 ;!!! ;Losing by 4 or more? + jrge #endgbig ; br=yes + + cmp a2,a14 ;Will this shot tie the game? + jreq #endgtie ; br=yes + + move *a13(plyr_num),a0 + move @PSTATUS,a1 + btst a0,a1 ;Is plyr a drone? + jrnz #endgnod ; br=no + movk 1,a14 + xor a14,a0 + btst a0,a1 ;Is team mate a drone too? + jrnz #endgnod ; br=no + + movi 100,a3 ;!!! ;Min % drones down <4, no tie shot + jruc #chkper +#endgnod + movi 380,a3 ;!!! ;Min % down <4, no tie shot + jruc #chkper +#endgtie + movi 800,a3 ;!!! ;Min % for down <4, is tie shot + jruc #chkper +#endgbig + movi 300,a3 ;!!! ;Min % for down >3 + +#chkper + cmp a3,a9 ;Set min % if > current % + jrge #nohelp + move a3,a9 + +;-------------------- + +#nohelp +; movi 950,a9 + + move @ballobj_p,a7,L ;Is ball on fire? + move *a7(OPLINK),a0,L + move *a0(ball_onfire),a14 + jrz #nofire ; br=no + + addi 750,a9 ;!!! ;On-fire % increase + cmpi 328,a11 + jrlt #nofire + movi 100,a9 ;!!! ;On-fire & close-in % increase +#nofire +;DJT Start + move *a13(plyr_hotspotp),a14 ;Add any hotspot shot% bump + add a14,a9 +;DJT End + + calla ball_convfmprel + +;-------------------- + + move *a13(plyr_seq),a0 ;>Adjust % per plyr seq + cmpi DDUNK_STRT2_SEQ,a0 + jrnz #ntddnk2 + movi 500,a9 ;!!! + jruc #fixperc +#ntddnk2 + cmpi DUNKLAY5_SEQ,a0 + jrnz #ck2 + addi 760,a9 ;!!! + jruc #fixperc +#ck2 + cmpi DUNKLAY4_SEQ,a0 + jrnz #ck3 + addi 760,a9 ;!!! + jruc #fixperc +#ck3 + cmpi DUNKLAY3_SEQ,a0 + jrnz #ck4 + addi 760,a9 ;!!! + jruc #fixperc +#ck4 + cmpi DUNKLAY2_SEQ,a0 + jrnz #ck6 + addi 760,a9 ;!!! + jruc #fixperc +#ck6 + cmpi DUNKLAY3A_SEQ,a0 + jrnz #ck6a + addi 760,a9 ;!!! + jruc #fixperc +#ck6a + cmpi DUNKLAY6_SEQ,a0 + jrnz #ck7 + addi 760,a9 ;!!! +#fixperc +; movi 750,a0 ;!!! ;Should layups be blockable? + + +; movi 800,a0 ;!!! ;Should layups be blockable? +; calla RNDPER +; jrhi #fixde +;FIX!! Maybe +;Should layups be unblockable - time will tell +;Allow layups to be blocked... +;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#ck7 + cmpi LAYUPREB_SEQ,a0 + jreq #ly ;Layup? + cmpi DUNKLAY_SEQ,a0 + jreq #ly ;Layup? + cmpi LAYUP_SEQ,a0 ;Put back layup + jreq #ly + move *a13(plyr_seqflgs),a14 ;Chk funky new layups + btst LAYUP_B,a14 + jrz #noly +#ly +;DJT Start + movi 800,a9 ;!!! ;Base shot % for layup +; movi 850,a9 ;!!! ;Base shot % for layup +;DJT End +; movi 990,a9 ;!!! ;Base shot % for layup + + move *a13(plyr_ptsdown),a1 +;DJT Start + subk 2,a1 +;DJT End + jrge #noairb ;Losing by 2 or more? No airball + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + jrgt #noms ; br=yes + + movi 100,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #noms + movi 650,a9 ;!!! +#noms +;; movi 700,a0 ;!!! ;No blocked layups sometimes +; movi 800,a0 ;!!! ;No blocked layups sometimes +; calla RNDPER +; jrhi #fixde +;;FIX!! +;;Should layups be unblockable - time will tell +;;Remove this for now... 4/2/96 +; movi TSEC*2-20,a0 ;!!! ;Don't allow blocked layups +; callr plyr_setshtdly + jruc #fixde + +#noly + cmpi HOOK_SEQ,a0 + jreq #hk + cmpi HOOK2_SEQ,a0 + jrne #nohk +#hk +;DJT Start + movi 600,a9 ;!!! ;Base shot % for hook +; movi 700,a9 ;!!! ;Base shot % for hook +;DJT End + + movi 120,a0 ;!!! ;Pull down % sometimes + calla RNDPER + jrls #fixde + movi 450,a9 ;!!! +; jruc #fixde + +#nohk +#fixde + +;-------------------- + + move a10,a3 ;A3=hoop dir (0-7F) + move a11,a1 ;A1=hoop dist + sll 32-6,a3 ;Throw out dir msb for range of (0-3F) + srl 32-6,a3 + subk >20,a3 ;Make dir be just angle offset from + abs a3 ; dirs (0base) 2 or 6 (0-1F) + + move *a13(plyr_ohpdist),a14 ;distance from hoop + move a14,@shot_distance + movk 1,a14 + move a14,@shot_percentage ;start at 100% + + +;This flag disallows rejected rebounds for about 2 seconds after rim hit. +;Zero it upon new shot. + clr a0 + .ref must_rebound + move a0,@must_rebound + + + .if DEBUG +;(FIX!!!) + movk 1,a14 + move a14,@pup_showshotper + .endif + move @pup_showshotper,a14 + jrz #nosp + + PUSH a1,a2,a7,a8,a9,a10 + + move @crplate_ptr,a2,L + move *a2(ODATA_p),a7,L + jrz #makesp + + callr make_ssp_ptrs + + move *a7(PA10),a8,L + move *a8(OCTRL),a1 + move *a10,a0,L + calla obj_aniq_cnoff + + move *a7(PA8),a8,L + move *a8(OCTRL),a1 + move *a9,a0,L + calla obj_aniq_cnoff + + movi TSEC*2,a0 + move a0,*a7(PTIME) + jruc #madesp +#makesp + CREATE >6000,plyr_showshotpercent + move a0,*a2(ODATA_p),L +#madesp + PULL a1,a2,a7,a8,a9,a10 +#nosp + +;-------------------- + + movk 1,a10 ;A10=normal shot arc + + PUSH a1 + movk 16,a0 ;!!! All shots chance of flat arc + calla RNDPER + jrls #noflat0 + clr a10 ;A10=flat shot arc +#noflat0 + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 ;Doing a lay-up? + jrz #noflat ; br=no + movi 100,a0 ;!!! Lay-up chance of flat arc + calla RNDPER + jrls #noflat + clr a10 ;A10=flat shot arc +#noflat + PULL a1 + +; jruc #miss ;DEBUG +; jruc #good ;DEBUG + +;-------------------- +; See if we should do a bank shot + + subk >18,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + move @plyr_onfire,a0 ;Is someone on-fire? + jrnz #athoop ; br=yes, don't bank + +;; move *a13(plyr_num),a14 +;; move @plyr_onfire,a0 +;; btst a14,a0 ;Is the shooter on-fire? +;; jrz #cont ; br=no +;; move @PSTATUS,a0 +;; btst a14,a0 ;Is the shooter a human? +;; jrnz #athoop ; br=yes, don't bank +;;#cont + cmpi 100,a1 ;!!! Too far for short bank? + jrgt #longshot ; br=yes + +;; movk 2,a0 ;33% chance +;; move *a13(plyr_seqflgs),a14 +;; btst LAYUP_B,a14 +;; jrnz #fmfront + + move *a13(plyr_seq),a14 +;FIX!!! Determine which seq(s) should always close bank + cmpi DUNKLAY5_SEQ,a14 ;In a seq that wants a short bank? + jrz #offbb ; br=yes + + movk 4,a0 ;!!! 20% chance + addk 8,a3 ;More in front of board? + jrlt #fmfront ; br=yes + movk 3,a0 ;!!! 25% chance for steeper angles +#fmfront + callr rndrng0 + move a0,a0 ;Beat the odds? + jrnz #athoop ; br=no, don't bank + +#offbb ;>Close bank shot + movk 15,a10 ;!!! 1 in 16 chance of flat arc + + movi -10,a4 ;!!! =X offset + movi -8,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + and a0,a10 ;A10=flat shot arc + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes +#cbbad + movk 3,a0 ;Randomize X offset for some misses + callr rndrng0 + addk 1,a0 + sll 1,a0 + sub a0,a4 + movk 1,a0 ;Randomize Z offset for some misses + callr rndrng0 + sll 4,a0 + subk 8,a0 + move a0,a2 + jruc #cbdxdy + +#cbgood + move *a7(OZPOS),a3 + subi CZMID,a3 ;=ball Z delta from hoop + sll 8,a3 + + move *a7(OXPOS),a14 + move *a7(OIMG),a1,L + move *a1(IANIOFFX),a1 + add a1,a14 ;=ball ctr X + move *a13(plyr_ohoopx),a1 + sub a14,a1 ;=ball X delta from hoop + abs a1 + jrz #cbnodiv ; br=delta X=0 (should never be)? + divs a1,a3 +#cbnodiv + mpys a6,a3 + sra 8,a3 + move a3,a2 ;=Z offset +#cbdxdy + move a4,a0 ;=X offset + move a5,a1 ;=Y offset + jruc #calcshot + +#longshot ;>Long bank shot + addk 8,a3 ;!!! Would bank angle be too steep? + jrge #athoop ; br=yes, don't bank + + movk 3,a0 ;!!! 75% chance + callr rnd ;Beat the odds? + jrnz #athoop ; br=no, don't bank + + movi -12,a4 ;!!! =X offset + movi -10,a5 ;!!! =Y offset + movk 2,a6 ;!!! + + movi 999,a0 + callr rndrng0 + cmp a0,a9 ;Beat shot % odds? + jrgt #cbgood ; br=yes + jruc #cbbad ;Make shot miss + +;-------------------- + +#athoop + cmpi 55,a9 ;25 + jrge #notlng + cmpi >148,a11 + jrlt #notlng + + movi 120,a0 ;250 + calla RNDPER + jrls #noairb + jruc #airok +#notlng + movk >1f,a0 ;3% + cmpi 55,a11 + jrge #chkairb ;Not a close shot? + movi >7f,a0 ;1.5% +#chkairb + callr rnd + jrnz #noairb ;No air ball? + + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #noairb ;Losing by 2 or more? No airball + + move @plyr_onfire,a14 ;Is someone on-fire? + jrnz #noairb ; br=yes, don't do airball + +; move *a13(plyr_num),a0 +; btst a0,a14 ;Is the shooter on-fire? +; jrnz #noairb ; br=yes, don't do airball + + move *a13(plyr_o1dist),a14 ;Totally open shot? + cmpi 50*DIST_REDUCTION,a14 + jrlt #airok + move *a13(plyr_o2dist),a14 + cmpi 50*DIST_REDUCTION,a14 + jrgt #noairb +#airok + + movi -1,a0 + move a0,@plyrairballoff + + move a7,a2 + CREATE0 plyr_airballsnd + movi -1,a0 + move a0,@shot_percentage ;miss + move a2,a7 + + movk 20,a2 ;>Air ball ;18 + movk 1,a0 + callr rnd + jrnz #airf + neg a2 ;-Z +#airf + clr a0 ;=X offset + clr a1 ;=Y offset + +; movi -40,a0 +; movi -30,a1 ;Y + jruc #calcshot + +;-------------------- + +#noairb + movi 999,a0 ;>Shoot at hoop + callr rndrng0 + addi 50,a9 ;Adj for better % + cmp a0,a9 ;Beat shot % odds? + jrgt #good ; br=yes, make shot score + +#miss + clr a0 + move a0,@shot_percentage ;miss + + movk >1f,a0 ;Miss + callr rnd + sll 4,a0 + addi #misszx_t,a0 + move *a0,a5 + move *a0(8*16),a3 + + movk 1,a0 ;50% + callr rnd + jrnz #miss2 + + movk 2,a0 ;More towards rim edge + callr rndrng0 + addk 6,a0 ;7 ;Vel multiplier range + jruc #miss3 +#miss2 + movk 3,a0 ;Regular miss (they go in a fair amount) + callr rnd + addk 4,a0 ;6 ;Vel multiplier range +#miss3 + mpys a0,a3 + mpys a0,a5 + move a3,a0 + move a5,a2 + sra 12,a0 ;=X offset + sra 12,a2 ;=Z offset + + jruc #cyo + +#good + movk 4,a0 ;>Make shot score + callr rndrng0 + subk 2,a0 + move a0,a2 ;=Z offset + + movk 4,a0 + callr rndrng0 + subk 2,a0 ;=X offset +#cyo + movi -3,a1 ;=Y offset + +;-------------------- +; a0=shot X offset +; a1=shot Y offset +; a2=shot Z offset +; a7=ball *obj +; a10=!0 for normal shot arc, 0 for flat shot arc +; +;Dan, 5% shots go in about 50% of time, we need to make this more like 25%! +;I think... Maybe we should play a little longer.... + +#calcshot + move *a13(plyr_ohoopx),a3 + cmpi WRLDMID,a3 + jrlt #lhoop + neg a0 +#lhoop + add a0,a3 ;Add X offset + move *a7(OXPOS),a14 + move *a7(OIMG),a5,L + move *a5(IANIOFFX),a5 + add a5,a14 ;=ball ctr X + sub a14,a3 ;X delta + + movi CZMID,a5 + add a2,a5 + move *a7(OZPOS),a14 + sub a14,a5 ;Z delta + + move a1,a2 + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + cmpi 170,a4 + jrls #distok + move a4,a14 ;>Reduce excess + movi 170,a4 + sub a4,a14 + sra 3,a14 ;/8 + add a14,a4 +#distok + move a4,a1 + movi 110,a14 ;120 + mpys a14,a1 + move a1,a4 + sra 8,a4 ;/256 + + movi 50,a14 ;!!! Min tick for normal shot arc + move a10,a10 ;Normal or flat shot arc? + jrnz #chkmin ; br=normal + movi 35,a14 ;!!! Min tick for flat shot arc + move a4,a1 ;Reduce tick cnt 25% to flatten shot + sra 2,a1 + sub a1,a4 +#chkmin + cmp a14,a4 + jrge #divok + move a14,a4 + +#divok + move *a13(plyr_seq),a1 +;DJT Start + move *a13(plyr_seqflgs),a14 + btst LAYUP_B,a14 + jrz #hkck + +; jruc #hkck +; addk 2,a4 ;8 + + move @HCOUNT,a14 + btst 0,a14 + jrz #hko + subk 10,a4 + jruc #hko + +#hkck +;DJT End + cmpi HOOK_SEQ,a1 + jrnz #hky + addk 15,a4 ;Make hook shot go a bit higher + jruc #hko +#hky + cmpi HOOK2_SEQ,a1 + jrnz #hko + subk 10,a4 +#hko + addk 2,a4 + movk 10,a0 + calla RNDPER + jrls #regshot +;Try a rainbow! + move @shot_distance,a0 + +;This is OK... +;Check to make sure a rainbow can happen from corners + cmpi >104,a0 + jrgt #regshot + addk 20,a4 + + SOUND1 rainbow_sp + +#regshot + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + +; move *a8(OXVEL),a1,L +; sra 3,a1 +; add a1,a3 + + move @plyrairballoff,a0 + jrnn #nobrick1 + clr a0 + move a0,@plyrairballoff + + clr a0 + move a0,@ballgoaltcnt + + move a3,a0 + sra 2,a0 + sub a0,a3 +; move *a13(plyr_num),a14 +; cmpi 2,a14 +; jrge #nobrick1 +; add a0,a3 +; add a0,a3 +#nobrick1 + move a3,*a7(OXVEL),L + +; move *a8(OZVEL),a1,L +; sra 3,a1 ;/8 +; add a1,a5 + move a5,*a7(OZVEL),L + + movi -GRAVB/2,a1 + mpys a4,a1 + move *a7(OYVAL),a3,L ;Adjust for hgt difference + addi HOOPY-8,a2 + sll 16,a2 + sub a2,a3 ;- if above + divs a4,a3 + sub a3,a1 + + move a1,*a7(OYVEL),L + + addk 2,a4 +; subk 1,a4 ;Allows goaltend of airballs + + move a4,@ballgoaltcnt + + move *a13(plyr_num),a1 ;A1=Plyr # + move a1,@ballpnumshot + move a1,@ballpnumlast + move a1,@ballsclastp + move a1,@ballshotinair ;Shooter # if shot in air, else -1 + + clr a0 + move a0,@ballprcv_p,L + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,@plyrcharge + move a0,*a13(plyr_ownball) + not a0 ;=-1 + move a0,@ballpnum ;No owner + +;FIX!!! Need yo look into this... +;Don't allow ball collisions for x ticks.... +;This is for all shots! +; movi 50,a0 ;40 + movi 45,a0 ;40 + move a0,*a13(plyr_shtdly) + ;>Inc try shot stat +;If a player shoots a three and his teammate is in an ALLEY-OOP seq. +; then dont let'em catch it (unless teammate is a drone) + + move @ballptsforshot,a0 + subk 2,a0 + jrle #ignre + move *a13(plyr_tmproc_p),a0,L + move *a0(plyr_num),a14 + move @PSTATUS,a9 + btst a14,a9 + jrnz #ignre ;br=a human teammate + move *a0(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 + jrlo #ignre + cmpi ALLEYOOP14_SEQ,a14 + jrhi #ignre + movi 2*TSEC,a14 ;roughly 2 seconds. + move a14,*a0(plyr_shtdly) +#ignre + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrnz #x + + movi PS_2PTS_TRY,a0 + move @ballptsforshot,a14 + subk 2,a14 + jreq #2ptr + movk PS_3PTS_TRY,a0 +#2ptr calla inc_player_stat +;DJT Start +;;Shouldn't need to do this here +;; move *a13(plyr_num),a14 +;; movk 1,a1 +;; sll a14,a1 +;; move @pup_showhotspots,a0 +;; andn a1,a0 +;; move a0,@pup_showhotspots +;DJT End + +#x + move *a13(plyr_num),a0 ;Plyr # shooting + calla shoots_speech + + PULL a6,a7,a9,a10,a11 + rets + + +#misszx_t + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + .word 0,799,1567,2275,2896,3406,3784,4017 + .word 4096,4017,3784,3406,2896,2275,1567,799 + .word 0,-799,-1567,-2275,-2896,-3406,-3784,-4017 + .word -4096,-4017,-3784,-3406,-2896,-2275,-1567,-799 + + +#******************************* +* Make shot percentage digit ptrs +* A9=Percent (0-1000) +* >A10=*tens digit *img +* >A9=*ones digit *img +* Destroys A8 + + SUBR make_ssp_ptrs + + movk 10,a10 + divu a10,a9 + + cmpi 99,a9 + jrls #maxok + movi 99,a9 +#maxok + clr a8 + divu a10,a8 + sll 5,a8 + sll 5,a9 + movi #f_t,a10 + add a10,a9 + add a8,a10 + + rets + +#f_t + .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +#******************************* +* Show shot percentage (process) +* A9=Percent (0-1000) + + SUBRP plyr_showshotpercent + +;; PUSHP a11 ;Save hoop-2-plyr dist + + .if DEBUG + cmpi 5700,a9 + jrlo #pss +; LOCKUP +#pss + .endif + + callr make_ssp_ptrs + + move *a10,a2,L + movi [SCOREBRD_X+26,0],a0 + movi [SCOREBRD_Y+13,0],a1 + movi SCOREBRD_Z,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a10 + + move *a9,a2,L + movi [SCOREBRD_X+32,0],a0 + movi [SCOREBRD_Y+13,0],a1 + calla BEGINOBJ2 + + movi SHOTPER,a9,L ;Change credit plate + move @crplate_ptr,a11,L + move *a9(ISAG),*a11(OSAG),L + + SLEEP TSEC*2 + + move *a11(OIMG),a9,L ;Restore previous credit plate + move *a9(ISAG),*a11(OSAG),L + clr a9 + move a9,*a11(ODATA_p),L + +;; PULLP a11 ;Retrieve hoop-2-plyr dist + + move a10,a0 + calla DELOBJ + jauc DELOBJDIE + + + +#******************************* +* Make sound for airball (process) + + SUBRP plyr_airballsnd + + SLEEP 80 + + move @plyrairballoff,a0 + jrnz #x + .ref crwd_arbl_sp + SOUND1 crwd_arbl_sp + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #airbl_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#x DIE + +#airbl_sp_tbl + .long airball_sp + .long sht_stunk_sp + .long misd_mile_sp + .long way_shrt_sp + .long misd_evry_sp + + +#******************************* +* Start player pass to teammate +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBRP plyr_startpass + + PUSH a6,a7 + + move *a13(plyr_tmproc_p),a4,L + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp1a ;br=not dunk,in air = no pass + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #x ;br=both in dunk = no pass + + jruc #cont +#psp1a + move *a4(plyr_jmpcnt),a0 + jrnz #x +#cont + move *a13(plyr_seqdir),a14 + move a14,*a13(plyr_old_seqdir) + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + move a10,a2 + move a4,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + move a2,a10 + move a4,@ballprcv_p,L + + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + + move *a4(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #psp2 ;br=teammate not in a dunk + +; DONT worry about this, cause plyr_pass isn't called for nine ticks after +; the pass button was pushed...thus startdunk will have been called +; and velocities set!! +; +; move *a4(plyr_jmpcnt),a14 +; jrz #x + move *a4(plyr_slam_ticks),a2 + move *a4(plyr_jmpcnt),a14 + sub a14,a2 + jrle #x ;br=to late for pass +; subk 20,a2 ;at least 20 ticks b4 slam ? + subk 26,a2 ;at least 25 ticks b4 slam ? + jrle #x ;br=no + + callr seekdirdist_obxz128 + move a0,*a13(plyr_newdir) ;Turn toward alley-ooper + + clr a2 + move *a13(plyr_ptsdown),a14 + addk 3,a14 + jrge #losing + movi 100,a0 ;Make alleys doink sometimes + calla RNDPER ; if plyr is ahead + jrls #losing + movi 500,a2 +#losing + move a2,@shot_distance + movi ALLEYOOP_PAS_SEQ,a0 + move *a13(plyr_jmpcnt),a14 + jrz #reg + movi PASSDO_SEQ,a0 + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #reg + movi PASSDO2_SEQ,a0 + +#reg + +; move *a13(plyr_dir),a7 + move *a13(plyr_newdir),a7 ;Turn toward alley-ooper + callr plyr_setseq +; jruc #end + movi -1,a3 + jruc #bhin + +#psp2 + move @inbound,a0 + jrnn #notnl4 ;Inbounding the ball? + +;DEBUG - Check no look pass code/art +; jruc #nlcont + + +;How often do we try a no look pass? + movi 200,a0 + calla RNDPER + jrls #notnl4 ;BR=nope + + move *a13(plyr_jmpcnt),a14 + jrnz #notnl4 ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notnl4 ;Too short? + subi 320*DIST_REDUCTION,a14 + jrgt #notnl4 ;Too far? + +#nlcont + +;Check to see if teammate is in an ok position to receive a no look +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #nldir2 + +;Allow 2 angle + cmpi 2,a0 + jrz #nldo1 + +;Allow 6 angle if I X flip passer + + cmpi 6,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#nldo1 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2 ;2 direction possibility +;Facing up & right on scrn + cmpi 1,a1 + jrnz #nldir2a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #nldo2 + cmpi 3,a0 + jrnz #nldir2a + +#nldo2 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir2a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #nldir3 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #nldo2 + cmpi 6,a0 + jrz #nldo2 + +#nldir3 +;Facing right on scrn + cmpi 2,a1 + jrnz #nldir3a + +;Allow 4 angle + cmpi 4,a0 +; jrz #nldo3 +; cmpi 3,a0 + jrnz #nldir3a + +#nldo3 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir3a +;Facing left on scrn + cmpi 6,a1 + jrnz #nldir4 + +;Allow 4 angle + cmpi 4,a0 + jrz #nldo3 +; cmpi 6,a0 +; jrz #nldo3 + + +#nldir4 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #nldir4a + +;Allow 5 angle + cmpi 5,a0 +; jrz #nldo2 +; cmpi 3,a0 + jrnz #nldir4a + +#nldo4 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir4a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #nldir5 + +;Allow 3 angle + cmpi 3,a0 + jrz #nldo4 +; cmpi 6,a0 +; jrz #nldo2 + +#nldir5 +;Facing down on scrn + cmpi 4,a1 + jrnz #notnl4 + +;Allow 6 angle + cmpi 6,a0 +; jrz #nldo5 +; cmpi 3,a0 + jrnz #nldir5a + +#nldo5 + movi PASSNL_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#nldir5a +;Allow 2 angle if I X flip passer + + cmpi 2,a0 + jrnz #notnl4 + +;X flip after seq starts + movi PASSNL_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta + + +#notnl4 + +;DEBUG - Check behind the back pass code/art +; jruc #bhcont + + + movi 350,a0 + calla RNDPER + jrls #notbh + + move *a13(plyr_jmpcnt),a14 + jrnz #notbh ;In air? + + move *a13(plyr_tmdist),a14 + cmpi 90*DIST_REDUCTION,a14 + jrlt #notbh ;Too short? + subi 360*DIST_REDUCTION,a14 + jrgt #notbh ;Too far? + +;Only decent passers can do behind the back passes + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a14 + cmpi 5,a14 + jrlt #notbh + + move *a13(plyr_o1dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + move *a13(plyr_o2dist),a1 + cmpi >78*DIST_REDUCTION,a1 + jrlt #notbh + +;Want to stop ball from being inbounded using the BHPASS + + move @inbound,a0 + jrn #bhcont ;Inbounding the ball? + +;I'm ahead, maybe still do cocky inbound + + move *a13(plyr_ptsdown),a1 + jrgt #notbh ;If losing, don't bhpass + addk 6,a1 + jrge #notbh ;If ahead by 7 or more, allow attempt +#bhcont + +;Check to see if teammate is in an ok position to receive a behind the back +;pass based on what direction passer is facing and teammate is located. + +;Directions are 0-7 +; +; +; 0 +; 7 1 +; 6 2 +; 5 3 +; 4 +; +; +;Rules for T1HINDR10-6 art: +; +;If passer is facing 0 and teammate is in 1,2 then do it, +;or if passer is facing 0, but art is flipped, and teammate is in 7,8 then +;do it. +; + + + callr seekdirdist_obxz128 + move a1,a2 + +; move *a13(plyr_dir),a14 +; sub a0,a14 +; abs a14 +; cmpi >20,a14 +; jrhs #notbh + + move a0,a14 + addi >40,a14 + sll 32-7,a14 + srl 32-7,a14 + + addk 8,a0 ;Round off + sll 32-7,a0 + srl 32-7+4,a0 ;Kill frac + + move *a13(plyr_seqdir),a1 +; move a1,*a13(plyr_old_seqdir) + +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up scrn + cmpi 0,a1 + jrnz #dir2 + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do1 + cmpi 2,a0 + jrz #do1 + +;Allow 6,7 angle if I X flip passer + + cmpi 6,a0 + jrz #do1a + cmpi 7,a0 + jrnz #notbh + +#do1a +;X flip after seq starts + movi PASSBH_SEQ,a0 + move a0,a3 + callr plyr_setseq + + movi M_FLIPH,a3 + move a3,*a13(plyr_anirevff) + clr a3 + dec a3 + jruc #bhconta +#do1 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + + +#dir2 ;2 direction possibility +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir2a + +;Allow 1,2 angle + cmpi 1,a0 + jrz #do2 + cmpi 2,a0 + jrnz #dir2a +#do2 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir2a +; +; a0 = teammates dir +; a1 = passers seq. dir +; +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir3 + +;Allow 6,7 angle + cmpi 6,a0 + jrz #do2 + cmpi 7,a0 + jrz #do2 + + +#dir3 +;Facing up & right on scrn + cmpi 1,a1 + jrnz #dir3a + +;Allow 0,7 angle also + cmpi 0,a0 + jrz #do3 + cmpi 7,a0 + jrnz #dir3a +#do3 +;Do PASSBH2 because we already have a #2 BHPASS! + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas + +#dir3a +;Facing up & left on scrn + cmpi 7,a1 + jrnz #dir4 + +;Allow 0,1 angle also + cmpi 0,a0 + jrz #do3 + cmpi 1,a0 + jrz #do3 + +#dir4 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir4a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do4 + cmpi 3,a0 + jrnz #dir4a +#do4 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir4a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir5 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do4 + cmpi 6,a0 + jrz #do4 + +#dir5 +;Do #3 horizontal facing behind the back passes +;Facing right on scrn + cmpi 2,a1 + jrnz #dir5a + +;Allow 0,1 angle + cmpi 0,a0 + jrz #do5 + cmpi 1,a0 + jrnz #dir5a +#do5 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir5a +;Facing left on scrn + cmpi 6,a1 + jrnz #dir6 + +;Allow 0,7 angle + cmpi 0,a0 + jrz #do5 + cmpi 7,a0 + jrz #do5 + +#dir6 +;Do #4 facing behind the back passes +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir6a + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrnz #dir6a +#do6 + movi PASSBH_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir6a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir7 + +;Allow 3,4,5 angle + cmpi 3,a0 + jrz #do6 + cmpi 4,a0 + jrz #do6 + cmpi 5,a0 + jrz #do5 +#dir7 +;Facing down & right on scrn + cmpi 3,a1 + jrnz #dir7a + +;Allow 2,3 angle + cmpi 2,a0 + jrz #do7 + cmpi 3,a0 + jrnz #dir7a +#do7 + movi PASSBH2_SEQ,a0 + move a14,*a4(plyr_newdir) + move *a13(plyr_dir),a7 + jruc #bhpas +#dir7a +;Facing down & left on scrn + cmpi 5,a1 + jrnz #dir8 + +;Allow 5,6 angle + cmpi 5,a0 + jrz #do7 + cmpi 6,a0 + jrz #do7 + +#dir8 +#notbh + callr seekdirdist_obxz128 ;>Turn toward teammate + move a0,*a13(plyr_dir) + + move a0,*a13(plyr_newdir) + + move a0,a7 + move a0,a3 + + addi >40,a0 + sll 32-7,a0 + srl 32-7,a0 + move a0,*a4(plyr_newdir) + move a1,a2 + + movi PASSDO_SEQ,a0 + + move *a13(plyr_jmpcnt),a14 + jrz #contpass + +;Fix dunks attempted stat + + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrz #nodnk + + PUSH a0 + + movk PS_DUNKS_TRY,a0 ;>Dec dunk stats + move *a13(plyr_num),a1 + .ref dec_player_stat + calla dec_player_stat + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla dec_player_stat + + PULL a0 + +#nodnk + + move *a13(plyr_tmdist),a14 + cmpi 110*DIST_REDUCTION,a14 + jrgt #ss + movi PASSDO2_SEQ,a0 + jrnz #ss ;Air dish off pass? +#contpass + + movi PASSS_SEQ,a0 + cmpi 170*DIST_ADDITION,a2 ;50 + jrle #ss + +;If a good passer... + + movi PASSC_SEQ,a3 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a5 + cmpi 6,a5 + jrlt #normp + movi FASTPASSC_SEQ,a3 +#normp + movk 7,a0 + callr rnd + jrnz #normchest ;12% regular chest? + movi PASSNEWOH_SEQ,a3 + cmpi 6,a5 + jrlt #normchest + movi FASTPASSNEWOH_SEQ,a3 +#normchest + move a3,a0 + +#ss +#bhpas + .if DEBUG +;Test different types of passing + jruc #skipem + movi PASSS_SEQ,a0 ;Short pass + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSC_SEQ,a0 ;Fast long chest pass + movi PASSDO_SEQ,a0 ;Dish off + movi PASSDO2_SEQ,a0 ;Dish off no big arm extend + movi PASSNL_SEQ,a0 ;No look pass +; movi PASSNL2_SEQ,a0 ; +; movi PASSNL3_SEQ,a0 ; + movi PASSC_SEQ,a0 ;Long chest pass + movi FASTPASSNEWOH_SEQ,a0 ;Fast new overhead pass + movi PASSBH_SEQ,a0 ;Behind back pass + movi PASSNEWOH_SEQ,a0 ;New overhead pass + + movi PASSC_SEQ,a0 ;Long chest pass +#skipem + .endif + + move a0,a3 + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrgt #bhconta +;If close pass, rotate now instead of calculating where I should be +;if this is a leading pass... + + callr plyr_setseq + +#bhconta +; subk PASSOH_SEQ,a3 +; jreq #nolead + + cmpi PASSNL_SEQ,a3 + jrnz #noleadnl + jrz #lead_nl +; cmpi PASSNL2_SEQ,a3 +; jrnz #noleadnl + +#lead_nl +;Try a leading pass even on a no look pass + move *a4(plyr_dirtime),a1 + jrz #nolead_nl + subk 10,a1 ;10 + jrlt #nolead_nl + +#noleadnl + +; cmpi 35,a2 +; jrlt #nolead ;Too close? + + move *a4(plyr_dirtime),a1 + jrz #nolead_notm + +;Shawn, I increased this because we were getting to many missed leading +;passes. Because the receiver would bump into a defender and get thrown +;off course. + + subk 8,a1 ;8 + jrgt #leadingpass + + move *a4(plyr_o1dist),a0 + + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrlt #nolead_ocls ;Opponent too close? + move *a4(plyr_o2dist),a0 + cmpi 25*DIST_ADDITION,a0 +; cmpi 35,a0 + jrge #leadingpass + + +;Additional checks are required here to determine if this will cause the +;leading pass to fly off scrn and cause the receiver to become stuck +;against the glass wall. + +; move *a13(plyr_tmdist),a2 + cmpi 30*DIST_ADDITION,a2 ;30 + jrlt #nolead_tm ;Too close? + move *a4(plyr_dirtime),a1 + subk 4,a1 + jrgt #leadingpass + +#nolead_notm +; LOCKUP ;Not running long enough + move @PCNT,a0 + + ANDK 1,a0 +; ANDK 3,a0 +;TEMP!!! +; jrnz #nolead + jruc #nolead + jruc #leadingpass + +#nolead_nl +; LOCKUP ;A no look pass + jruc #nolead + +#nolead_ocls +; LOCKUP ;Opponent too close + jruc #nolead + +#nolead_tm +; LOCKUP ;Teammate too close + + +#nolead + movk 1,a0 + move a0,*a4(plyr_nojoy) + + jruc #end + + +#leadingpass + move *a4(plyr_jmpcnt),a1 + jrnz #nolead ;He's jumping? + + +;Disallow leading behind the back pass if using #4 or #2 behind back pass art +;and teammate is running toward passer +;At the moment, receiver must be running horizontally away from me! (2 or 6) + +;FIX!!! Make new rules here for not allowing leading behind the back passes + +; cmpi PASSBH2_SEQ,a3 +; jrz #tst +; cmpi PASSBH_SEQ,a3 +; jrne #notst +; +;#tst +;; move @PCNT,a14 +;; ANDK 3,a14 +;; jrnz #notst +; +;; move *a13(plyr_seqdir),a1 +;; move *a4(plyr_seqdir),a0 +;; cmpi 5,a1 +;; jrge #ck1 +;; cmpi 2,a0 +;; jrz #bhin +;; jruc #nolead +;;#ck1 cmpi 6,a0 +;; jrne #nolead +;; jruc #bhin +;#notst + +;Will be a leading pass, rotate passer so that pass will go to where +;receiver will be when he receives the pass + + + move *a13(plyr_tmproc_p),a4,L + move *a4(PA8),a2,L ;Get teammates obj + move *a2(OXPOS),a6 + move *a2(OXANI+16),a14 + add a14,a6 + move *a2(OZPOS),a7 + +;All passes are not 32 ticks however! + move *a2(OXVEL),a0,L ;Where will teammate be in 32 ticks? + sra 16-5,a0 + +;Subtract a few ticks + move *a2(OXVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a6 + move *a2(OZVEL),a0,L + sra 16-5,a0 + + + move *a2(OZVEL),a14,L + sra 15,a14 + add a14,a0 + + + add a0,a7 + + callr seekdirdist_obxz128 ;>Turn toward where teammate will be + move a0,*a13(plyr_dir) + move a0,*a13(plyr_newdir) + + +#bhin + move *a4(PA11),a0,L ;>Keep teammate moving in same dir + move *a0,a0 + sll 32-4,a0 + srl 32-4,a0 + ori >8000,a0 + move a0,*a4(plyr_nojoy) ;Neg + move a0,*a4(plyr_newdir) + +#end + +;Check teammates position along all boundaries +;and make sure he is set inside of buffer + +;If teammate is running horizontally along the top or bottom of court, +;push him slightly toward center of screen and allow leading pass... + move *a4(PA8),a1,L ;>Keep teammate moving in same dir + move *a1(OZPOS),a0 + cmpi CZMIN+8,a0 + jrgt #upok + movi CZMIN+10,a0 + move a0,*a1(OZPOS) + jruc #ck_ok + +#upok cmpi CZMAX-6,a0 ;stupid K!!! ;Is Z ok? Yes if < + jrlt #dnok + movi CZMAX-8,a0 ;stupid K!!! ;Is Z ok? Yes if < + move a0,*a1(OZPOS) + jruc #ck_ok + +#dnok +;Don't do a leading pass if teammate is running vertically against either +;court edge! +; move *a1(OXPOS),a0 +; move *a1(OXANI+16),a14 +; add a14,a0 +; cmpi PLYRMINX,a0 ;Is X ok? Yes if > +; jrgt #lok +; movi PLYRMINX+2,a0 ;Is X ok? Yes if > +; move a0,*a1(OXPOS) +; jruc #ck_ok +; +;#lok cmpi PLYRMAXX,a0 ;Is X ok? Yes if < +; jrlt #ck_ok +; movi PLYRMAXX-2,a0 ;Is X ok? Yes if < +; move a0,*a1(OXPOS) + +#ck_ok + +;Player dir changes if a leading pass should happen... +;If alley oop, don't do this setseq + move a3,a3 ;Alley oop type pass? + jrn #no + + move *a13(plyr_tmdist),a14 + cmpi 170,a14 + jrle #no + +;I must have already done the setseq! +;Watch this for bugs... + move *a13(plyr_dir),a7 + move a3,a0 + callr plyr_setseq + +#no + + movk 30,a0 + move a0,*a4(plyr_rcvpass) + + move *a4(plyr_seqflgs),a0 + btst SAMEDIR_B,a0 + jrz #x + movi -1,a0 + move a0,*a4(plyr_newdir) ;Kill dir change + + +#x PULL a6,a7 + rets + + +#******************************* +* Player lobs the ball from a dunk (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_lob_ball + + PUSH a6,a9,a10,a11,a12 + + move *a13(plyr_tmproc_p),a6,L + move *a6(plyr_seq),a14 + cmpi DDUNK_RECV_SEQ,a14 + jrne #shtbl ;br=player not in correct seq. +; +; Get teammates distance from hoop, and time remaining before get to hoop +; + move *a6(plyr_slam_ticks),a4 + move *a6(plyr_jmpcnt),a14 + sub a14,a4 ;ticks before reach rim + jrn #shtbl ;br=player cant recv. pass + +;this is a fudge factor...catch ball 10 ticks before slam ball + movk 10,a0 + calla rndrng0 + addk 10,a0 + sub a0,a4 +; subk 10,a4 + jrn #shtbl ;br=not enough time... + + calla ball_convfmprel + move @ballobj_p,a0,L + + move *a6(PA8),a8,L ;Get * teammates obj + move *a8(OXVAL),a3,L + move *a8(OXANI),a14,L + add a14,a3 + move *a8(OXVEL),a1,L + + move *a8(OZVAL),a5,L + move *a8(OZVEL),a14,L + + move *a8(OYVAL),a10,L + move *a8(OYVEL),a9,L + + move a4,b0 ;>Calc where ball should go + +#poslp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + subk 1,b0 ;1 step + jrgt #poslp +#outb + move *a0(OZVAL),a1,L + sub a1,a5 ;Z delta + + move *a0(OXVAL),a1,L +; move *a0(OXANI+16),a14 ;ALWAYS A ZERO +; add a14,a1 + sub a1,a3 ;X delta + + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move a10,a3 ;- if ball above dest + move *a0(OYVAL),a10,L ;Adjust for hgt difference + sub a10,a3 ;- if ball above dest + move a4,a5 + + movi -GRAVB/2,a1 + mpys a4,a1 + divs a4,a3 + add a3,a1 + move a1,*a0(OYVEL),L + + move *a13(PA8),a8,L + + clr a14 + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + move *a13(plyr_num),a1 + inc a1 + move a1,@assist_plyr + movi 3*60+30,a0 + move a0,@assist_delay + + subk 3,a5 +; subk 2,a5 + move a5,*a6(plyr_shtdly) + + move a6,@ballprcv_p,L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + movi -1,a0 + move a0,@ballpnum ;No owner + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + +;Don't reattach to my lobbed pass + movk 30,a0 + move a0,*a13(plyr_shtdly) + + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type + + move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrnz #npas ;br=plyr not on fire + + .ref lob_ball_speech + calla lob_ball_speech + jruc #x +#npas + movi fpass_snd,a0,L + calla snd_play1 + + +#x PULL a6,a9,a10,a11,a12 + rets + +#shtbl + callr plyr_shoot + + movi swith_hnd_sp,a0,L + move @HCOUNT,a14 + btst 0,a14 + jrnz #shtbl2 +;FIX!! + movi spn_shtup_sp,a0,L +; movi a_fngr_rl_sp,a0,L +#shtbl2 + calla snd_play1 + + PULL a6,a9,a10,a11,a12 + rets + + +#******************************* +* Player passes to teammate (called from seq) +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + + SUBR plyr_pass + + PUSH a6,a9,a10,a11,a12 + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have ball? + + calla ball_convfmprel + + move @ballobj_p,a0,L + + move *a13(plyr_tmproc_p),a6,L + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OXPOS),a3 + move *a2(OXANI+16),a14 + add a14,a3 + move *a2(OZPOS),a5 + + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move a3,a4 ;>Calc distance (long+short/2.667) + move a5,a14 + abs a4 + abs a14 + cmp a14,a4 + jrhs #xbig + SWAP a14,a4 +#xbig sra 1,a14 ;/2 + add a14,a4 + sra 2,a14 ;/8 + sub a14,a4 + + PUSH a0 + + move @inbound,a0 + jrnn #no_speech + + cmpi 100,a4 ;too close to call + jrlt #no_speech + + move *a13(plyr_num),a1 + calla pass_to_speech + +#no_speech + PULL a0 + + move *a13(plyr_attrib_p),a14,L + move *a14(PAT_PASS),a2 + sll 4,a2 + movi #longpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 95,a1 ;>Calc time + + cmpi 300,a4 + jrgt #ct + + movi #shortpas_t,a1 + add a2,a1 + move *a1,a1 + +; movi 115,a1 + + +#ct move *a13(plyr_turbon),a14 + jrz #noturb ;No turbo? + addi #turbopas_t,a2 + move *a2,a2 + sub a2,a1 + +; subi 32,a1 ;Quicker + +#noturb + move a14,@plyrpasstype ;0=Normal, !0=Turbo + + mpys a4,a1 + sra 10,a1 ;/1024 + move a1,a4 + subk 16,a1 + jrge #nshrt ;!Short? + movk 16,a4 ;Min +#nshrt + + move *a6(PA8),a2,L ;Get * teammates obj + + move *a2(OYVAL),a10,L + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrlo #noaly + cmpi ALLEYOOP14_SEQ,a14 + jrhi #noaly + movk 2,a14 ;Make alley-oops always 2 ptrs + move a14,@ballptsforshot + movk DUNK_LONG,a14 + move a14,@shot_type +;this was added so that there is no out-of-bounds check on alley oops + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + move *a2(OYVEL),a9,L + +#vellp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + subk 1,b0 ;1 step + jrgt #vellp + jruc #outb +#noaly +;For moving during inbound! +; move @inbound_lead,a14 +; jrnz #ledpas + + + move *a6(plyr_nojoy),a14 + jrnn #nolead +#ledpas + move a4,b0 ;>Calc where ball should go + move *a2(OXVAL),a3,L + move *a2(OXANI),a14,L + add a14,a3 + move *a2(OZVAL),a5,L + + move *a2(OXVEL),a1,L + move *a2(OZVEL),a14,L + +;Added yvel into calc + move *a2(OYVEL),a9,L + +#bndlp add a1,a3 ;Walk through movements + add a14,a5 + add a9,a10 + addi GRAVB,a9 + cmpi (PLYRMINX)<<16,a3 + jrle #outb2 + cmpi (PLYRMAXX)<<16,a3 + jrge #outb2 + cmpi (CZMIN+8)<<16,a5 + jrle #outb3 + cmpi (GZMAX-6)<<16,a5 + jrge #outb3 + + subk 1,b0 ;1 step + jrgt #bndlp + + jruc #outb + +#outb3 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb2 + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 + + add a1,a3 + add a14,a5 + add a9,a10 + addi GRAVB,a9 +#outb + sra 16,a3 + sra 16,a5 + + move *a6(plyr_jmpcnt),a14 + jrnz #chkoop ;In jump? + move *a2(OYVAL),a10,L ;Not an alley-oop. Restore YVAL + jruc #nooff + +#chkoop + clr a1 + clr a11 + clr a12 + + move *a6(plyr_seq),a14 + cmpi ALLEYOOP1_SEQ,a14 ;M1SPDU1-20 frames + jrne #nxtd1 + movi -9,a1 ;y pos additive + movk 22,a11 + movi -33,a12 + jruc #drevs +#nxtd1 + cmpi ALLEYOOP2_SEQ,a14 ;W3FLDU1-13 frames + jrne #nxtd2 + movi -48,a1 ;y pos additive + movi -18,a11 + movk 3,a12 + jruc #drevs +#nxtd2 + cmpi ALLEYOOP3_SEQ,a14 ;W3CRZDU2-20 frames + jrne #nxtd3 + movi -1,a1 ;y pos additive + movi -5,a11 + movk 5,a12 + jruc #drevs +#nxtd3 + cmpi ALLEYOOP4_SEQ,a14 ;S3BKDU1-16 + jrne #nxtd4 + movi -37,a1 ;y pos additive + movk 5,a11 + movi -5,a12 + jruc #drevs +#nxtd4 + cmpi ALLEYOOP5_SEQ,a14 ;M3SPRDU1-11 frames + jrne #nxtd5 + movi -50,a1 ;y pos additive + movk 10,a11 + movi -20,a12 + jruc #drevs +#nxtd5 + cmpi ALLEYOOP6_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd6 + movi -35,a1 ;y pos additive + movk 5,a11 + movi -10,a12 + jruc #drevs +#nxtd6 + cmpi ALLEYOOP7_SEQ,a14 ;W3SPNDU1-21 frames + jrne #nxtd7 + movi -50,a1 ;y pos additive + movi -14,a11 ;norm. X additive + movk 5,a12 ;flip X additive + jruc #drevs +#nxtd7 + cmpi ALLEYOOP8_SEQ,a14 ;only angle 1 + jrne #nxtd8 + movi -60,a1 ;y pos additive + movk 30,a11 + movi -30,a12 + jruc #drevs + +#nxtd8 + cmpi ALLEYOOP9_SEQ,a14 ;only angle 5 + jrne #nxtd9 + movi -33,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 + jruc #drevs +#nxtd9 + cmpi ALLEYOOP10_SEQ,a14 ;only angle 1, <5 dnk rating + jrne #nxtd10 + movi -47,a1 ;y pos additive + movk 25,a11 ;x pos additive + movi -25,a12 +#nxtd10 + cmpi ALLEYOOP11_SEQ,a14 ;only angle 2, <5 dnk rating + jrne #nxtd11 + movi -23,a1 ;y pos additive + movk 2,a11 ;x pos additive + movi -2,a12 +#nxtd11 + cmpi ALLEYOOP12_SEQ,a14 ;only angle 3, <5 dnk rating + jrne #nxtd12 + movi -17,a1 ;y pos additive + movi -15,a11 ;x pos additive + movi 15,a12 +#nxtd12 + cmpi ALLEYOOP13_SEQ,a14 ;only angle 4, <5 dnk rating + jrne #nxtd13 + movi -26,a1 ;y pos additive + movk 5,a11 ;x pos additive + movi -5,a12 +#nxtd13 + cmpi ALLEYOOP14_SEQ,a14 ;only angle 5, <5 dnk rating + jrne #drevs + movi -34,a1 ;y pos additive + movk 1,a11 ;x pos additive + movi -1,a12 +#drevs + sll 16,a1 + add a1,a10 + move *a6(plyr_anirevff),a1 + jrnz #nooff + move a12,a11 + +#nooff + move *a0(OXPOS),a1 + move *a0(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + move *a0(OZPOS),a1 + sub a1,a5 ;Y delta + + move *a6(plyr_jmpcnt),a14 + jrz #nolead ;In jump? + add a11,a3 + +#nolead + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move a3,*a0(OXVEL),L + move a5,*a0(OZVEL),L + + move *a0(OYVAL),a3,L ;get balls Y +;; move *a2(OYVAL),a14,L +; move a10,a14 ;teammates Y val + sub a10,a3 ;a3=delta Y + +; move *a6(plyr_jmpcnt),a14 +; jrnz #fine ;In jump? +; move a10,a14 +;#fine + sra 2,a10 + add a10,a3 + + move a4,a5 + move *a6(plyr_nojoy),a2 + jrn #nopoh ;Leading pass? + + subk 4,a5 ;leading pass, get there a faster... +#nopoh + movi -GRAVB/2,a1 + move *a13(plyr_jmpcnt),a2 + jrnz #level ;In jump? + + move *a6(plyr_jmpcnt),a2 + jrnz #level ;In jump? No bounce pass + + +;Don't allow bnc pass in close! + move *a13(plyr_tmdist),a14 + cmpi 130*DIST_REDUCTION,a14 + jrlt #level + + + + move @PCNT,a14 + andi 0fh,a14 + jrnz #level + +;Try a bounce pass +;Desperation pass? If so, don't allow bounce pass + move *a8(OIMG),a14,L + .ref T4DESPA5 + cmpi T4DESPA5,a14 + jrz #level + + move *a13(plyr_seq),a14 ;>Chk for overhead pass + cmpi PASSNEWOH_SEQ,a14 + jrz #level + cmpi PASSNL_SEQ,a14 + jrz #level + move *a13(plyr_seqdir),a14 + cmpi 0,a14 + jrz #level + cmpi 1,a14 + jrz #level + cmpi 7,a14 + jrz #level + + move *a0(OYVAL),a3,L ;Adjust for hgt difference + movi -GRAVB/2,a1 + srl 1,a4 +#level + mpys a4,a1 + divs a4,a3 + sub a3,a1 + move a1,*a0(OYVEL),L + + move *a13(plyr_num),a0 + move a0,@ballpnumshot + move a0,@ballpnumlast + move a0,@ballsclastp + + movi -1,a0 + move a0,@ballpnum ;No owner +; move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + move a0,@ballscorezhit +; move a0,@ballbbhitcnt + move a0,@ballpasstime + move a0,*a13(plyr_ownball) + move a0,*a6(plyr_shtdly) ;Tell teammate he can catch ball!! + movk 30,a0 + move a0,*a13(plyr_shtdly) + + addk 5,a5 +; addk 32,a5 + move a5,*a6(plyr_rcvpass) ;Tell teammate when to expect pass + + + movi pass_snd,a0,L + move *a6(plyr_seqflgs),a14 ;is teammate in dunk ? + btst DUNK_B,a14 + jrz #rpas + movi aly_pass_snd,a0,L ;passing to alley-opper +#rpas move @plyr_onfire,a14 + move *a13(plyr_num),a5 + btst a5,a14 + jrz #npas ;br=plyr not on fire + movi fpass_snd,a0,L +#npas calla snd_play1 + + + +#x PULL a6,a9,a10,a11,a12 + rets + + +#longpas_t + .word 103,101,99,97,95,93 + .word 91,89,87,85,83 +#shortpas_t + .word 127,124,121,118,115,112 + .word 109,106,103,100,97 +#turbopas_t + .word 28,29,30,31,32,33 + .word 35,38,41,44,44 + + +#******************************* +* Try a rebound if possible +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch, A2-A5 + +RTIME .equ 25 + + SUBRP plyr_tryrebound + + PUSH a6,a7 + + move @plyrinautorbnd,a1 + jrnz #x ;Someone else doing? + + move @game_time,a14,L + cmpi >500,a14 + jrge #heave ;Do it + + move *a13(plyr_num),a0 + move @ballpnumshot,a1 + cmp a0,a1 + jrz #x + XORI 1,a1 + cmp a1,a0 + jrz #x ;Br=teammate shot + +#heave + ;>Chk my start + move *a8(OZPOS),a1 ;Get SZ + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #posok + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + + subk 12,a1 + jrgt #posok + cmpi HOOPRX-WRLDMID-8,a3 + jrge #x ;Under rim? + + +#posok + move @ballobj_p,a5,L + + + movk RTIME,a0 ;>Find new Y pos in x ticks + move *a5(OYVAL),a4,L + move *a5(OYVEL),a2,L + movi GRAVB,a1 +#newblp + add a2,a4 + add a1,a2 + dsj a0,#newblp + + sra 16,a4 + + cmpi -140,a4 + jrlt #x ;Too hi? + + addk 30,a4 + move *a8(OYPOS),a0 + cmp a0,a4 + jrge #x ;Ball lower than plyr? + + + + move *a5(OXVAL),a6,L ;>Find new XZ pos in x ticks + move *a5(OXANI),a14,L + add a14,a6 + move *a5(OZVAL),a7,L + + move a6,a0 ;>Chk ball pos + move a7,a1 + sra 16,a0 + sra 16,a1 + + subi CZMID,a1 + abs a1 + subk 12,a1 + jrgt #bposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim or backboard? +#bposok + + movk RTIME,a0 + move *a5(OXVEL),a1,L + mpys a0,a1 + add a1,a6 + move *a5(OZVEL),a1,L + mpys a0,a1 + add a1,a7 + + sra 16,a6 + sra 16,a7 + + move a6,a0 ;>Chk my destination + move a7,a1 + + subi CZMID,a1 + abs a1 + cmpi 40,a1 + jrgt #eposok + subi WRLDMID,a0 + abs a0 + cmpi HOOPRX-WRLDMID+13,a0 + jrge #x ;Under backboard? + subk 14,a1 + jrgt #eposok + cmpi HOOPRX-WRLDMID-10,a3 + jrge #x ;Under rim? +#eposok + + move *a13(plyr_num),a14 + sll 5,a14 + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #eposok2 ;br=not a created player + btst 5,a0 ;SUPER AUTO-REBOUND privilege? + jrz #eposok2 ;br=no + + callr seekdirdist_obxz128 + cmpi 70,a1 ;close enough to jump? + jrlt #eposok3 ;br=yes + jruc #x +#eposok2 + callr seekdirdist_obxz128 + cmpi 60,a1 + jrge #x ;Too far to jump? + +#eposok3 + move a0,*a13(plyr_newdir) ;Turn where ball is headed + + movk REBOUNDA_SEQ,a0 + move a0,@plyrinautorbnd + + move *a13(plyr_dir),a7 + callr plyr_setseq + + +#x PULL a6,a7 + rets + + +#******************************* +* Clear auto rebound flag - Called when SEQ_REBOUNDA lands + + SUBR clr_autorbnd + + clr a0 + move a0,@plyrinautorbnd + rets + + +#******************************* +* Set the ball xyz position from player +* A8=*Plyr obj +* A13=*Plyr process +* Trashes scratch + + SUBRP plyr_setballxyz +;LOOK!!! + move @ballobj_p,a0,L + + move *a8(OZPOS),a1 ;>Set Z + move *a13(plyr_ballzo),a14 + add a14,a1 + move a1,*a0(OZPOS) + + move *a8(OXVAL),a1,L ;>Set X + move a1,b0 + move *a13(plyr_ballxo),a14,L + add a14,a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFX),a14 + sll 16,a14 + sub a14,a1 + move a1,*a0(OXVAL),L + + move *a8(OXANI),a14,L ;Make 3D ball X+ani = plyr X+ani + sub a14,a1 + move b0,a14 + sub a1,a14 + move a14,*a0(OXANI),L + + move *a13(plyr_ballyo),a1 + cmpi -200,a1 + jreq #bfree ;Ball Y free? + + move *a0(OIMG),a14,L ;>Set Y + move *a14(IANIOFFY),a14 + sub a14,a1 + move *a8(OYPOS),a14 + add a14,a1 + move a1,*a0(OYPOS) + clr a1 + move a1,*a0(OYVEL),L ;Stop grav from accumulating + move a1,*a0(OXVEL),L + move a1,*a0(OZVEL),L + move a1,@ballfree ;!Free + + rets + +#bfree + move @ballfree,a14 + jrnz #x ;Already free? + movk 1,a14 + move a14,@ballfree ;Free + move *a0(OYPOS),a1 + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + add a14,a1 + movi ->a00,a14 ;Push it towards gnd + mpys a14,a1 + addi >16000,a1 + move a1,*a0(OYVEL),L +#x rets + + +#******************************* +* Get a scaled objects anipt XY +* A8=*Obj +* >A0=Scaled Ani X (16:16) +* >A1=Scaled Ani Y +* Trashes scratch + + SUBR anipt_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANIOFFX),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANIOFFY),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 2nd anipt XY +* A8=*Obj +* >A0=Scaled Ani2 X (16:16) +* >A1=Scaled Ani2 Y +* Trashes scratch + + SUBR anipt2_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + add a14,a0 + addk 32,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI2X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI2Y),a1 + cmpi -200,a1 ;stupid K!!! alert!!! + jrne #ynorm + sll 16,a1 + jruc #cflip +#ynorm mpys a14,a1 + +#cflip move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Get a scaled objects 3rd anipt XY +* A8=*Obj +* >A0=Scaled Ani3 X (16:16) +* >A1=Scaled Ani3 Y +* Trashes scratch + + SUBR anipt3_getsclxy + + move a2,b0 + + move *a8(ODATA_p),a0,L + move *a8(OIMG),a2,L + + move *a8(OZPOS),a14 + subi GZBASE,a14 + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a2(IANI3X),a1 + mpys a14,a1 + + move *a0,a14 + sll 4,a14 ;*16 + move a1,a0 + move *a2(IANI3Y),a1 + mpys a14,a1 + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #x ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a0 + add a2,a0 ;+size + +#x move b0,a2 + rets + + +#******************************* +* Align shadow obj with player obj and set ani +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A4 + + SUBRP plyr_setshadow + + move *a13(plyr_shadobj_p),a4,L + + move *a8(OZPOS),a0 + move a0,a1 + subi 50,a1 ;Adjust + move a1,*a4(OZPOS) + + subi CZMIN,a0 ;-Base + jrge #zok + clr a0 +#zok srl 5,a0 ;/32 + move *a8(OYPOS),a1 + move *a13(plyr_aniy),a14 + add a14,a1 ;Ani pt position + sra 4,a1 ;/16 (Neg) + add a1,a0 + + addk (#ani_t-#sani_t)/32,a0 + jrnn #pss_0 + clr a0 +#pss_0 + movk (#bani_t-#sani_t)/32-1,a14 + cmp a0,a14 + jrge #pss_1 + move a14,a0 +#pss_1 + move @pup_baby,a14 ;Plyr babies? No if 0 + jrz #pss_2 + addk (#bani_t-#sani_t)/32,a0 +#pss_2 + sll 5,a0 ;*32 + addi #sani_t,a0 + + move *a0,a2,L + move a2,*a4(OIMG),L ;Set new img + move *a2,a14,L + move a14,*a4(OSIZE),L + move *a2(ISAG),*a4(OSAG),L + + callr anipt_getsclxy + + move *a2(IANIOFFX),a3 + sll 16,a3 + move a3,*a4(OXANI),L + + move *a8(OXVAL),a14,L + add a0,a14 ;Ani X + sub a3,a14 + move a14,*a4(OXVAL),L + + move *a2(IANIOFFY),a3 + neg a3 + move a3,*a4(OYPOS) + + rets + + +#sani_t + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow15,shadow15,shadow15 + .long shadow15,shadow14,shadow13,shadow12 +#ani_t .long shadow11,shadow10,shadow9,shadow8 + .long shadow7,shadow6,shadow5,shadow4 + .long shadow3,shadow2,shadow1,shadow1 + .long shadow1,shadow1,shadow1 + +#bani_t + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad7,ballshad7,ballshad7 + .long ballshad7,ballshad5,ballshad4,ballshad2 + .long shadow18,shadow18,shadow17,shadow17 + .long shadow16,shadow16,shadow15,shadow15 + .long shadow14,shadow14,shadow13,shadow13 + .long shadow12,shadow12,shadow11 + + +#******************************* +* Align head obj with player obj +* A8=*Obj +* A13=*Plyr process +* Trashes scratch, A2-A6 + + SUBR plyr_headalign + + move *a13(plyr_headobj_p),a6,L ;>A6=*Head obj + + SUBR plyr_headalign2 + + move *a8(OIMG),a0,L ;>Set Z + move *a8(OZPOS),a14 + move *a0(IANI3Z),a1 + add a1,a14 + move a14,*a6(OZPOS) + sub a1,a14 + neg a1 + move a1,*a6(OMISC) ;Z offset + + ;>Calc head scale anixy (A3,A5) + subi GZBASE,a14 ;-Base + jrge #zok + clr a14 +#zok srl 4,a14 ;/16 + sll 6,a14 ;*64 + move *a6(ODATA_p),a0,L + addk 32,a0 + add a14,a0 + + move *a0+,a14 + sll 4,a14 ;*16 + move *a6(OIMG),a2,L + + move *a2(IANIOFFX),a3 + mpys a14,a3 + + move *a0,a14 + sll 4,a14 ;*16 + + move *a2(IANIOFFY),a5 + mpys a14,a5 + + move *a6(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nohf ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + sll 16,a2 ;*64K + neg a3 + add a2,a3 ;+size +#nohf + + callr anipt3_getsclxy + + move *a8(OYVAL),a14,L + add a1,a14 ;Ani3 Y + sub a5,a14 + move a14,*a6(OYVAL),L + + move *a8(OXVAL),a14,L + move a14,a1 + add a0,a14 ;Ani3 X + sub a3,a14 + move a14,*a6(OXVAL),L + + move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani + add a0,a1 + sub a14,a1 + move a1,*a6(OXANI),L + + rets + +;#******************************* +;* Align arw obj with player obj +;* A8=*Obj +;* a6=Arw Obj +;* Trashes scratch, A2-A6 +; +; SUBR plyr_arwalign +; +; +; move *a8(OIMG),a0,L ;>Set Z +; move *a8(OZPOS),a14 +; move *a0(IANI3Z),a1 +; add a1,a14 +; move a14,*a6(OZPOS) +; sub a1,a14 +; neg a1 +; move a1,*a6(OMISC) ;Z offset +; +; ;>Calc head scale anixy (A3,A5) +; subi GZBASE,a14 ;-Base +; jrge #zok +; clr a14 +;#zok srl 4,a14 ;/16 +; sll 6,a14 ;*64 +; move *a6(ODATA_p),a0,L +; addk 32,a0 +; add a14,a0 +; +; move *a0+,a14 +; sll 4,a14 ;*16 +; move *a6(OIMG),a2,L +; +; move *a2(IANIOFFX),a3 +; mpys a14,a3 +; +; move *a0,a14 +; sll 4,a14 ;*16 +; +; move *a2(IANIOFFY),a5 +; mpys a14,a5 +; +;; move *a6(OCTRL),a14 +;; btst B_FLIPH,a14 +;; jrz #nohf ;No flip? +;; +;; move *a2,a2 ;ISIZEX +;; subk 1,a2 +;; sll 16,a2 ;*64K +;; neg a3 +;; add a2,a3 ;+size +;;#nohf +; +; callr anipt3_getsclxy +; +; move *a8(OYVAL),a14,L +; add a1,a14 ;Ani3 Y +; sub a5,a14 +; move a14,*a6(OYVAL),L +; +; move *a8(OXVAL),a14,L +; move a14,a1 +; add a0,a14 ;Ani3 X +; sub a3,a14 +; move a14,*a6(OXVAL),L +; +; +; move *a8(OXANI),a0,L ;Make head X+ani = plyr X+ani +; add a0,a1 +; sub a14,a1 +; move a1,*a6(OXANI),L +; +; +; rets +; + + + + +#******************************* +* Referee tosses up ball (process) + + SUBRP plyr_referee + + + .asg 12,REFCTR_OX ;Ref Xoff so toss to be centered + +;Show player #0 pal to verify pal build +; .ref show_plyr_pal +; CREATE0 show_plyr_pal + + clr a0 + move a0,@ditch_meter + + .if DEBUG + move @QUICK_TIP,a0 + jrnz #skipq + .endif + + clr a9 + movk 1,a11 + CREATE METER_PID,jumpball_meter + movk 1,a9 + movk 2,a11 + CREATE METER_PID,jumpball_meter + .ref jumpball_meter + .if DEBUG +#skipq + .endif + + movk 1,a0 + callr plyr_setac + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi shadow7,a2 + movi CZMID-30-1,a3 + movi DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; movi 50,a0 +; move a0,*a8(OMISC) ;Z offset + move a8,a11 ;A11=ref shadow *obj + + movi [WRLDMID+REFCTR_OX,0],a0 + clr a1 + movi REFWHS1,a2 + movi CZMID-30,a3 + movi DMAWNZ|M_3D|M_NOCOLL,a4 + calla BEGINOBJ2 + + movi #att_t,a0,L + move a0,*a13(plyr_attrib_p),L + move *a0,a0,L + move a0,*a8(ODATA_p),L + + SLEEPK 5 + + movk 1,a0 + move a0,*a13(plyr_ownball) ;!0=Ref has ball + +; clr a0 + movk 25,a0 + move a0,*a13(plyr_ballzo) + + movi #ani_l,a9 + .if DEBUG + move @QUICK_TIP,a14 + jrz #skipq2 + movi #ani_l_quick_tip,a9 +#skipq2 + .endif + movk 1,a10 +#lp + dsj a10,#noani + +#getwt move *a9+,a10 + jrz #refdone + jrnn #nocode + + move *a9+,a0,L ;Call function + call a0 + jruc #getwt +#nocode + move *a9+,a0,L + movk M_WRNONZ,a1 + callr plyr_ani + + callr anipt2_getsclxy + move a0,*a13(plyr_ballxo),L + sra 16,a1 + move a1,*a13(plyr_ballyo) + + move *a13(plyr_aniy),a1 + neg a1 + move a1,*a8(OYPOS) ;Set on gnd + +#noani + move *a13(plyr_ownball),a0 + jrz #noball ;Tossed up? + + callr plyr_setballxyz +#noball + callr joy_read2 ;Scan buttons since ac is on + + clr a0 + move a0,@P1CTRL + move a0,@P4CTRL + + movi P1CTRL,a1 ;>Kill unwanted bits + movk 4,b0 +#jlp move *a1,a0 + andi BUT1_M<<8+BUT1_M,a0 + move a0,*a1+ + dsj b0,#jlp + + SLEEPK 1 + move @HALT,a0 + jrnz #noball + jruc #lp + +#refdone + SLEEPK 5 + calla SCRTST + jrz #refdone ;Still on screen? + move a11,a0 + calla DELOBJ + jauc DELOBJDIE + + +#att_t .long scale66_t,REF_P + + .if DEBUG +#ani_l_quick_tip +; Quick jump ball for debugging + WL -1,#tossball + WL -1,#step_back + WL -1,#ac_off + W0 + .endif + +#ani_l + + WL TSEC,REFWHS1 + WL 4,REFWHS2 + WL 4,REFWHS3 + WL 4,REFWHS4 + WL 4,REFWHS5 + WL 4,REFWHS6 + WL 4,REFWHS7 + WL 4,REFWHS8 + WL -1,#do_whstle + WL 15,REFWHS9 + WL 4,REFWHS8 + WL 4,REFWHS7 + WL 4,REFWHS6 + WL 4,REFWHS5 + WL 4,REFWHS4 + WL 4,REFWHS3 + WL 4,REFWHS2 + WL 4,REFWHS1 + + WL 3,REFTOS1 + WL 3,REFTOS2 + WL 3,REFTOS3 + WL 3,REFTOS4 + WL 3,REFTOS5 + WL 3,REFTOS6 + WL 3,REFTOS7 + WL 3,REFTOS8 + WL 3,REFTOS9 + WL 3,REFTOS10 + WL 3,REFTOS11 + WL 3,REFTOS12 + WL 3,REFTOS13 + + WL -1,#tossball ;109 TICKS + + + WL 3,REFTOS14 + WL 4,REFTOS15 + WL -1,#start_jumps + WL 3,REFTOS16 + WL 3,REFTOS17 + WL 3,REFTOS18 + WL 3,REFTOS19 + WL -1,#step_back + + + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL -1,#ac_off ;85 AFTER TOSS + WL -1,#tip_off_spch + WL 3,REFRUN1 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 3,REFRUN6 + WL 3,REFRUN7 + WL 3,REFRUN8 + WL 3,REFRUN9 + WL 3,REFRUN10 + WL 3,REFRUN11 + WL 3,REFRUN1 + WL 3,REFRUN2 + WL 3,REFRUN3 + WL 3,REFRUN4 + WL 3,REFRUN5 + WL 2,REFRUN6 + WL -1,#stop_back + WL 4,REFSTN1 + WL 4,REFSTN2 + WL 4,REFSTN4 +;REFROT1 + W0 + +#tip_off_spch + .ref tip_off_speech + CREATE0 tip_off_speech + rets + +#do_whstle + movi whitsle_snd,a0 + jauc snd_play1 + + +#tossball + move @ballobj_p,a1,L + movi >fffa4800,a0 + clr a2 + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + movi -GRAVB,a0 + movk 3,a2 +#normq + .endif + + move a0,*a1(OYVEL),L + clr a0 + move a0,@clock_active ;Turn on clock + + move a2,*a13(plyr_ownball) ;Let go + rets + + +#step_back + movi -11800h,a0 ;-14000h + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + + rets + +#start_jumps + + move a11,a2 + + move @plyrproc_t+32,a11,L + CREATE TIPID,plyr_tip + + move @plyrproc_t+32*2,a11,L + CREATE TIPID,plyr_tip + + + move a2,a11 + + rets + +#ac_off + clr a0 + jruc plyr_setac + + +#stop_back + clr a0 + move a0,*a8(OZVEL),L + move a0,*a11(OZVEL),L + rets + + +#******************************* +* Jump at ball for tip (Process) +* A11=*Plyr process + + .bss t1bcnt ,16 ;Team1 (p1) # button hits + .bss t2bcnt ,16 ;Team2 (p2) ^ + + SUBRP plyr_tip + + move *a11(PA8),a8,L + + PUSH a13 + move a11,a13 + + movi TIPJ_SEQ,a0 + move *a13(plyr_dir),a7 + callr plyr_setseq + move a10,*a13(PA10),L + + PULL a13 + + + + .if DEBUG +; Quick jump ball for debugging + move @QUICK_TIP,a14 + jrz #normq + SLEEPK 6 + clr a0 + jruc #cont +#normq + .endif + + SLEEPK 15 + movi -GRAVB*30-4000h,a0 +#cont + move a0,*a8(OYVEL),L + + + movi 8800h,a0 + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #norm ;No flip? + neg a0 +#norm + move a0,*a8(OXVEL),L + + + movk 1,a0 ;Start jump + move a0,*a11(plyr_jmpcnt) + + movi t1bcnt,a9 ;>Count button1 down presses + move *a11(plyr_num),a1 + btst 1,a1 + jrz #t1 + addk 16,a9 +#t1 clr a0 + move @PSTATUS,a14 + btst a1,a14 + jrnz #human ;Human opponent? + movk 3,a0 ;Drones # presses +#human move a0,*a9 + + .if DEBUG +;Quick jump ball for debugging + move @QUICK_TIP,a14 + jrnz #skipq + .endif + SLEEPK 25 +#skipq + + move @plyrobj_t+32,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + movi -2800h,a14 + move a14,*a0(OXVEL),L + + + + move @plyrobj_t+64,a0,L +; move *a0(OXVEL),a14,L +; sra 2,a14 +; neg a14 + + movi 2800h,a14 + move a14,*a0(OXVEL),L + +; movk 1,a10 ;temp!!! +; movk 25,a10 +;#lp +; move *a11(PA11),a0,L +; move *a0,a0 +; btst BUT1_B+8,a0 +; jrz #noprs ;No down transition? +; move *a9,a0 ;+1 cnt +; addk 1,a0 +; move a0,*a9 +;#noprs +; SLEEPK 1 +; dsj a10,#lp + + move *a11(plyr_num),a5 + + move @plyrproc_t+32,a0,L + move *a0(plyr_meter_time),a0 + move @plyrproc_t+64,a1,L + move *a1(plyr_meter_time),a1 +; move a0,a14 +; add a1,a14 +; jrnz #gotone +; inc a0 +;#gotone + +; movi t1bcnt,a2 +; move *a2+,a0 +; move *a2+,a1 + + btst 1,a5 + jrnz #tm1 + SWAP a0,a1 +#tm1 + .if DEBUG + move @QUICK_TIP,a14 + jrnz #contq + .endif + cmp a1,a0 + jrlt #x ;Less presses than opponent? + jrne #contq + .ref meter_maxxed + move @meter_maxxed,a0 + jrnz #shitpile + move @HCOUNT,a0 + andi 1,a0 + addk 1,a0 + move a0,@meter_maxxed +#shitpile + cmp a0,a5 + jrne #x +#contq + movi >fffea000,a0 + movi >ffff1000,a1 + movi -9,a3 + btst 1,a5 + jrz #tm1a + + neg a0 + neg a1 + neg a3 +#tm1a + move @ballobj_p,a2,L + + move *a2(OXPOS),a4 + add a3,a4 + move a4,*a2(OXPOS) + move a0,*a2(OXVEL),L + move a1,*a2(OZVEL),L + + movi -GRAVB*10,a0 + move a0,*a2(OYVEL),L + + movi TIPID,a0 + calla KIL1C + + movk 1,a0 + .ref ditch_meter + move a0,@ditch_meter + +#x + +;call ball slap sound + SOUND1 swat_snd + + DIE + + +#******************************* +* End of quarter (JSRP by score) + + SUBR plyr_endofqrtr + + movi 1000,a0 + move a0,@cntrs_delay ;Delay credit timers + +;DJT Start + .ref firstbskt,t1ispro,t2ispro + move @gmqrtr,a0 ;Next quarter + addk 1,a0 + subk 7,a0 + jrn #qcap + clr a0 +#qcap + addk 7,a0 +;DJT End + move a0,@gmqrtr + subk 1,a0 + jrne #not1st + + movi AUD_1STQUARTR,a0 ;>1st guarter + calla AUD1 + + JSRP plyr_endqfinishshot + + clr a0 + move a0,@kp_qscrs,L + move a0,@kp_qscrs+32,L + move a0,@kp_qscrs+64,L + move a0,@kp_qscrs+96,L + move a0,@kp_qscrs+128,L ;overtime 1 + move a0,@kp_qscrs+160,L ;overtime 2 + move a0,@kp_qscrs+192,L ;overtime 3 + move @scores,a0 + move a0,@kp_qscrs + move @scores+16,a0 + move a0,@kp_qscrs+16 + + .ref tuneq1_snd + .ref tuneq1ed_snd + .ref crwdbed_kill + move @pup_nomusic,a14 + jrz #play1 + SOUND1 tuneq1_snd +#play1 + SOUND1 tuneq1ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + +#delay_spch + SLEEP 90 + .ref at_hlftme_sp + SOUND1 at_hlftme_sp + DIE + +#not1st + subk 1,a0 + jrne #nothalf + + movi AUD_HALFTIME,a0 ;>2nd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + sub a14,a0 + move a0,@kp_qscrs+32 + move @scores+16,a0 + move @kp_qscrs+16,a14 + sub a14,a0 + move a0,@kp_qscrs+48 + + CREATE0 #delay_spch +; .ref at_hlftme_sp +; SOUND1 at_hlftme_sp + + .ref tuneq2_snd + .ref tuneq2ed_snd + move @pup_nomusic,a14 + jrz #play2 + SOUND1 tuneq2_snd +#play2 + SOUND1 tuneq2ed_snd + SOUND1 crwdbed_kill + JSRP halftime_showclips + +; SUBR plyr_eoq_lockcont ;Continuation point after clip lockup + + clr a0 + JSRP stats_page2 + + movi t1dunkcnt,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk + movi t1dunkcnt+16,a2 ;>Setup most dunking team for board shatter + move *a2,a1 + cmpi 3,a1 + jrlt #nobrk2 ;!Enough dunks? + subk 2,a1 + neg a1 + move a1,*a2 ;New cnt +#nobrk2 + +;LOOK!!! What's THIS?!? +;Restart players here? + + move @plyrproc_t,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+32,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+64,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + move @plyrproc_t+96,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + + + .if DRONES_2MORE + move @plyrproc_t+128,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + move @plyrproc_t+160,a8,L + move *a8(plyr_headobj_p),a0,L + calla DELOBJ + move *a8(plyr_shadobj_p),a0,L + calla DELOBJ + move a8,a0 + calla KILL + .endif + + + move @plyrobj_t,a0,L + calla DELOBJ + move @plyrobj_t+32,a0,L + calla DELOBJ + move @plyrobj_t+64,a0,L + calla DELOBJ + move @plyrobj_t+96,a0,L + calla DELOBJ + + + .if DRONES_2MORE + move @plyrobj_t+128,a0,L + calla DELOBJ + move @plyrobj_t+160,a0,L + calla DELOBJ + .endif + + + movi P1_PID,a0 + calla KIL1C + movi P2_PID,a0 + calla KIL1C + movi P3_PID,a0 + calla KIL1C + movi P4_PID,a0 + calla KIL1C + + + .if DRONES_2MORE + movi P5_PID,a0 + calla KIL1C + movi P6_PID,a0 + calla KIL1C + .endif + + + movi P1_PID,a0 + calla obj_del1c + movi P2_PID,a0 + calla obj_del1c + movi P3_PID,a0 + calla obj_del1c + movi P4_PID,a0 + calla obj_del1c + + + .if DRONES_2MORE + movi P5_PID,a0 + calla obj_del1c + movi P6_PID,a0 + calla obj_del1c + .endif + + CREATE0 doplyrs + + calla pal_clean + + clr a0 + move a0,@plyr_main_initdone + move a0,@DISPLAYON + + +;LOOK!!! + movi ARWPID,a0 + calla KIL1C + movi arwid,a0 + calla obj_del1c + movi ARWPID,a0 + calla obj_del1c + + CREATE0 delay_arws + +; movk 1,a0 +; move a0,@HALT + +; movi >1e0c3100,a0 +; move a0,@WORLDTLX,L +; clr a0 +; move a0,@WORLDTLY,L +; move @ballobj_p,a0,L +; movi >1e7d6caf,a1 +; move a1,*a0(OXVAL),L +; movi >ffc265df,a1 +; move a1,*a0(OYVAL),L +; movi >0476c52d,a1 +; move a1,*a0(OZVAL),L +; movi >2500,a1 +; move a1,*a0(OZVEL),L +; clr a1 +; move a1,*a0(OXVEL),L +; move a1,*a0(OYVEL),L + +; clr a0 +; move a0,@HALT +#plyrwt + SLEEPK 1 + move @plyr_main_initdone,a0 ;Wait for plyrs to init + jrz #plyrwt + + SLEEPK 1 + + PUSH a8,a13 + + move @plyrproc_t,a13,L + move @plyrobj_t,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip + setf 16,1,0 + + move @plyrproc_t+32,a13,L + move @plyrobj_t+32,a8,L + move *a8(OIMG),a2,L ;>Set new head img + move *a2(IANI3ID),a1 + sll 5,a1 ;*32 + move *a2(IANI3Z),a14 + neg a14 + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_HEADT_p),a0,L + add a1,a0 + move *a0,a4,L + + move *a13(plyr_headobj_p),a3,L + move a14,*a3(OMISC) + move a4,*a3(OIMG),L ;Set new img + move *a4,a14,L + move a14,*a3(OSIZE),L + move *a4(ISAG),*a3(OSAG),L + + setf 1,0,0 + move *a8(OCTRL+4),*a3(OCTRL+4) ;Copy HFlip bit + move *a2(IFLAGS+FLIPH_IFB),a14 ;Chk reverse bit + jrz #nohflip2 + move *a3(OCTRL+4),a14 ;Reverse hflip + addk 1,a14 + move a14,*a3(OCTRL+4) +#nohflip2 + setf 16,1,0 + + PULL a8,a13 + + movk 1,a0 + move a0,@DISPLAYON +; movk 1,a0 +; move a0,@HALT + jruc #tob + +;-------------------- + +delay_arws + SLEEPK 10 ;Give players a chance to start + + .ref start_arws + calla start_arws + +; SLEEP 1*60 + SLEEPK 8 + + clr a0 + move a0,@HALT + + DIE + +;-------------------- + +doplyrs +; move @pup_bighead,a0 +; zext a0 +; cmpi >eaea,a0 +; jrnz #no_3d +; movk >f,a2 +; move a2,@pup_maxsteal +; jruc #adjoff +;#no_3d +; clr a2 +; movk ADJHEADSZ,a0 ;Get head size +; calla GET_ADJ ;1-2 +; subk 1,a0 +; jrle #adjoff ;No big heads? +; movk >f,a2 +;#adjoff +; move a2,@pup_bighead + + movi plyrproc_t+32*NUMPLYRS,a2 + movi plyrobj_t+32*(NUMPLYRS-1),a9 + movk NUMPLYRS-1,a8 +#strtp + CREATE0 plyr_main + move a0,-*a2,L ;Save *proc + subk 32,a9 + dsj a8,#strtp + + move a13,-*a2,L + jruc plyr_main ;#0 + +;-------------------- + +#nothalf + subk 1,a0 + jrne #not3rd + + movi AUD_3RDQUARTR,a0 ;>3rd quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+64 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+80 + + .ref tuneq3_snd + .ref tuneq3ed_snd + move @pup_nomusic,a14 + jrz #play3 + SOUND1 tuneq3_snd +#play3 + SOUND1 tuneq3ed_snd + SOUND1 crwdbed_kill + + JSRP hint_page + jruc #tob + + +#not3rd + +;2/9/93 +; clr a0 +; move a0,@gmqrtr +; jruc mark + + subk 1,a0 + jrne #not4th + + movi AUD_4THQUARTR,a0 ;>4th quarter + calla AUD1 + + JSRP plyr_endqfinishshot + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+96 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + sub a14,a0 + move a0,@kp_qscrs+112 + + .ref tuneq4_snd + move @pup_nomusic,a14 + jrz #play4 + SOUND1 tuneq4_snd +#play4 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #tie + +#endofg callr endgame_audits ;>End of game + + .ref tune_wingame + SOUND1 tune_wingame + SOUND1 crwdbed_kill + + SLEEP TSEC*2 + + .ref victory_speech + calla victory_speech + + SLEEP TSEC*2+30 + +; JSRP result_screen + +;The TRIVIA GAME is called within 'stats_page' + movk 1,a0 + JSRP stats_page + + clr a0 + move a0,@IRQSKYE + + calla display_blank + calla save_player_records + .ref update_team_stats_records + calla update_team_stats_records + .ref update_world_records + calla update_world_records + calla display_unblank + + JSRP rank_screen + + JSRP grand_champs_screen ;if a champ is found then +; move a10,a10 ;print the hiscore screen next +; jrz #no_champ + +; JSRP show_hiscore + +;#no_champ + + clr a0 + + move a0,@qtr_purchased,L ;clr 4x16 + move a0,@qtr_purchased+20h,L + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + move @kp_qscrs,a0,L + move a0,@kp_qscrs2,L + move @kp_qscrs+32,a0,L + move a0,@kp_qscrs2+32,L + move @kp_qscrs+64,a0,L + move a0,@kp_qscrs2+64,L + move @kp_qscrs+96,a0,L + move a0,@kp_qscrs2+96,L + move @kp_qscrs+128,a0,L + move a0,@kp_qscrs2+128,L + move @kp_qscrs+160,a0,L + move a0,@kp_qscrs2+160,L + move @kp_qscrs+192,a0,L + move a0,@kp_qscrs2+192,L + + JSRP winner_stays_on + +; move @PSTATUS,a0 +; jrz #x +; jruc game_start2 +;#x + jauc game_over + + +#not4th + JSRP plyr_endqfinishshot ;>Overtime + + move @gmqrtr,a0 + subk 5,a0 ;which overtime ? + jrne #notot1 ;br=not 1st + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+128 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+144 + jruc #otdne +#notot1 + subk 1,a0 + jrne #notot2 + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+160 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+176 + jruc #otdne +#notot2 + subk 1,a0 + jrne #otdne + + move @scores,a0 + move @kp_qscrs,a14 + move @kp_qscrs+32,a1 + move @kp_qscrs+64,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+96,a1 + add a1,a14 + move @kp_qscrs+128,a1 + add a1,a14 + move @kp_qscrs+160,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+192 + move @scores+16,a0 + move @kp_qscrs+16,a14 + move @kp_qscrs+48,a1 + move @kp_qscrs+80,a2 + add a1,a14 + add a2,a14 + move @kp_qscrs+112,a1 + add a1,a14 + move @kp_qscrs+144,a1 + add a1,a14 + move @kp_qscrs+176,a1 + add a1,a14 + sub a14,a0 + move a0,@kp_qscrs+208 + +#otdne + .ref tuneot_snd + move @pup_nomusic,a14 + jrz #play5 + SOUND1 tuneot_snd +#play5 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jrne #endofg + + +;Display Double or Triple OT message, keep going... + +#tie ;>Tie + movi AUD_OVERTIME,a0 + calla AUD1 + + .ref tuneoted_snd + SOUND1 tuneoted_snd + SOUND1 crwdbed_kill + + movk 1,a0 + move a0,@HALT + +;DJT Start +; movi 6*TSEC+10-70+60-20,a11 +; CREATE0 scr1 +;DJT End + CREATE0 show_ot_msg + + SLEEP 120 + + SOUND1 overtime_sp + + SLEEP 110 + + movk 12,a1 ;Free time into OT for + movi P1DATA,a2 + + move @game_purchased,a0 + movk 4,b0 + clr a3 + +#tlp btst a3,a0 + jrz #nx ;No full game? + move a1,*a2(ply_time) ;Give xtra time +#nx addi PDSIZE,a2 + addk 1,a3 + dsj b0,#tlp + + move b0,@game_purchased + + move @team1,a0 + move a0,@kp_team1 + move @team2,a0 + move a0,@kp_team2 + move @scores,a0,L + move a0,@kp_scores,L + + JSRP hint_page + +; jruc #tob +; +; move @ballpnum,a11 +; jrnn #ok1 +; move @ballpnumshot,a11 +;#ok1 +; srl 1,a11 +; subk 1,a11 +; CREATE0 plyr_takeoutball3 +; jruc #tob2 + + +#tob +;DJT Start + move @plyr_onfire,a0 + jrnz #nodrnfr + move @t1ispro,a0 + jrnz #chk2 ; br=tm1 not champ level + move @PSTATUS,a14 + andi >C,a14 + jrz #drnfr +#chk2 + move @t2ispro,a0 + jrnz #nodrnfr ; br=tm2 not champ level + move @PSTATUS,a14 + andi 3,a14 + jrnz #nodrnfr +#drnfr + subk 1,a0 + move a0,@firstbskt +;;not .ref do_smkn +;;here CREATE0 do_smkn +#nodrnfr +;DJT End + + CREATE0 test + + + .ref random_ads + calla random_ads + + calla pal_clean + movi nofade_t,a10 + CREATE0 fade_up_half + + CREATE0 fix_floor + +;Take this out to stop ball being inbounded after score +;FIX!!! where'd this buggy hunk-o-junk come from? + +; move @gmqrtr,a11 +; sll 32-1,a11 +; move @gmqrtr,a0 +; cmpi 2,a0 +; jrnz #not2 +; CREATE0 plyr_takeoutball ;takepid(?) +; jruc #tob2 +;#not2 CREATE0 plyr_takeoutball2 +;#tob2 + +;What's up with this mod? + move @gmqrtr,a11 + sll 32-1,a11 + CREATE0 plyr_takeoutball2 + + clr a0 + move a0,@cntrs_delay ;Delay credit timers +;LOOK!!! + move @gmqrtr,a14 + cmpi 2,a14 + jrz #skp + move a0,@HALT +#skp clr a0 +;movi 2<<10+4<<5+9,a0 + move a0,@IRQSKYE + + move @gmqrtr,a14 + cmpi 2,a14 + jrnz #skpz + CREATE0 delay_numbs + RETP + + + +test +;Del old side arrows for all players & in plyr_lost A8 + movi plyrproc_t,a9 + movk 4,a10 +#lp move *a9+,a0,L + move *a0(plyr_lost_ptr),a2,L + move *a2(PA8),a0,L + jrz #nxt + clr a14 + move *a2(PA9),a1,L + move a14,*a1(OSCALE) + movk 10,a14 + move a14,*a2(PTIME) + calla DELOBJ + clr a0 + move a0,*a2(PA8),L +#nxt dsj a10,#lp + + DIE + +#skpz +;Make sure #'s are on at start of qrtr + movi P1DATA,a10 ;Turn on #'s at start of qrtr + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + RETP + +delay_numbs +;Make sure #'s are on at start of qrtr + SLEEPK 20 ;Turn on #'s at start of 2nd half + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + DIE + +fix_floor + SLEEPK 12 + .ref fix_floorclr + calla fix_floorclr + DIE + +#******************************* + + SUBRP endgame_audits + +; movi 0100b,a0 +; move a0,@PSTATUS2 +; +; movi 28,a0 +; move a0,@scores +; movi 49,a0 +; move a0,@scores+10h + + + movi AUD_COMPLETED,a0 ;>4th quarter + calla AUD1 + + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrhi #t1_wins +#t2_wins + movi AUD_LOS_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_WIN_SCORE,a0 + move @scores+10h,a1 + calla AUD + + jruc #cont + +#t1_wins + movi AUD_WIN_SCORE,a0 + move @scores,a1 + calla AUD + + movi AUD_LOS_SCORE,a0 + move @scores+10h,a1 + calla AUD +#cont + + move @PSTATUS2,a0 + andi 011b,a0 + jrnz #team1_human +;#team1_cpu + move @scores,a4 ;CPU SCORE + move @scores+10h,a5 ;HUMAN SCORE + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + jruc #cont2 + +#team1_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores,a1 ;human score + calla AUD + + +#cont2 + move @PSTATUS2,a0 + andi 01100b,a0 + jrnz #team2_human +;#team2_cpu + move @scores+10h,a4 ;CPU SCORE + move @scores,a5 ;HUMAN SCORE + + + movi AUD_CPUGAMES,a0 ;a cpu team + calla AUD1 + movi AUD_CPUSCORES,a0 + move a4,a1 ;cpu score + calla AUD + callr do_cpu_stats + rets + +#team2_human + movi AUD_HUMGAMES,a0 ;a human team + calla AUD1 + movi AUD_HUMSCORES,a0 + move @scores+10h,a1 ;human score + calla AUD + + +;Now total all human vs. human games, and audit left side winners + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #novs + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #novs +;Was a human vs. human game. + movi AUD_HUMANVSHUMAN,a0 + calla AUD1 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 + jrlo #tm2_wins + movi AUD_WINSONLEFT,a0 + calla AUD1 +#tm2_wins +#novs + rets + + +#******************************* +* Update CPU stats +* A4=Cpu score +* A5=Human score + +do_cpu_stats + + cmp a4,a5 + jrhi #cpu_loses + +;cpu_wins + movi AUD_CPUWINS,a0 ;CPU victories + 1 + calla AUD1 + + movi AUD_CPUWINMARG,a0 + calla GET_AUD ;RET in A1 + + sub a5,a4 + cmp a1,a4 + jrls #not_higher + move a4,a1 + movi AUD_CPUWINMARG,a0 ;new win margin + calla STORE_AUDIT + rets + +#cpu_loses + movi AUD_CPULOSMARG,a0 + calla GET_AUD ;RET in A1 + + sub a4,a5 ;HUMAN - CPU SCORE + cmp a1,a5 + jrls #not_higher + move a5,a1 + movi AUD_CPULOSMARG,a0 ;new loss margin + calla STORE_AUDIT +#not_higher + rets + + + +#******************************* +* Let shot finish at end of quarter (JSRP) + + SUBRP plyr_endqfinishshot + + movi TSEC*5/2,a10 +#lp + move @ballpnum,a0 + jrnn #stop ;Somebody has ball? + move @ballobj_p,a2,L + move *a2(OYPOS),a0 + cmpi -15,a0 + jrgt #stop ;Ball near gnd? + + SLEEPK 2 + +#gbcnt dsj a10,#lp + +#stop + move @ballpnum,a0 + jrn #no_owner + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrz #no_owner + move *a0(plyr_jmpcnt),a1 + cmpi 15,a1 + jrlt #no_owner + +; jrnz #was_bad +; btst SHOOT_B,a1 +; jrz #no_owner +;#was_bad + CREATE0 dobad +#no_owner + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + clr a0 + move a0,@sc_proc,L + move a0,@game_time,L + + movk 1,a0 + move a0,@HALT + + move @tvpanelon,a0,L + jrz #turnon + + movi CLSDEAD|tvid,a0 + clr a1 + calla EXISTOBJ + jrz #turnon + + move @tvpanelon,a0,L + movi 6*TSEC,a1 + move a1,*a0(PTIME) +#turnon + +;DJT Start + movi 3*TSEC+10+30,a11 + move @gmqrtr,a0 + subk 4,a0 + jrn #no_ot + movi 6*TSEC+10-70+60-20,a11 +#no_ot + CREATE0 scr1 +; CREATE0 score_showtvpanel2 +;DJT End + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt #fade + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq #fade + + SLEEP 90 + +; move @tvpanelon,a0,L +; jrz #turnon +; movi 6*TSEC,a1 +; move a1,*a0(PTIME) +;#turnon + +;Turn on winning team message + +; SOUND1 tune_gmovr + + .ref winning_msg + CREATE0 winning_msg + jruc #fade + +#fade + SLEEPK 1 +;Must wait for flash me routine to finish + movi flashpid,a0 + clr a1 + not a1 + calla EXISTP + jrnz #fade + + calla pal_clean + + movi nofade_t,a10 + CREATE0 fade_down_half + +#x RETP + +dobad SLEEP 100 + SOUND1 baddec_sp + DIE + +nofade_t ;Pals not to fade + .long scorep,NEWPLATPP + .long SGMD8RED,SGMD8WHT + .long textp,cred_p + .long ledw,ledr + .long NEWPLATPP,NBALOG_P + .long TURBO_B_P,TURBO_G_P,TURBO_Y_P,TURBO_R_P + .long BST18Y_P,BST18W_P,BST18R_P + .long BAST_W_P,BAST_Y_P + .long BRUSH_W_P,BRUSH_Y_P,BRUSH_R_P + .long HANGF_R_P,HANGF_W_P + .long LED_P,TIMPLT_P + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P + .long BRSH_R_P + .long BALLBAK_P + .long FFRAM_B_P + .long LOG_ATLP + .long LOG_BOSP + .long LOG_CHAP + .long LOG_CHIP + .long LOG_CLEP + .long LOG_DALP + .long LOG_DENP + .long LOG_DETP + .long LOG_DETNP + .long LOG_GOLP + .long LOG_HOUP + .long LOG_INDP + .long LOG_LACP + .long LOG_LALP + .long LOG_MIAP + .long LOG_MILP + .long LOG_MINP + .long LOG_MINNP + .long LOG_NEJP + .long LOG_NEYP + .long LOG_ORLP + .long LOG_PHIP + .long LOG_PHXP + .long LOG_PORP + .long LOG_SACP + .long LOG_SANP + .long LOG_SEAP + .long LOG_TORP + .long LOG_UTAP + .long LOG_UTANP + .long LOG_VANP + .long LOG_WASP + .long 0 + + + + +#******************************* +* Player goaltended (Process) +* A11=*Plyr obj + + SUBR plyr_goaltending + + move *a11(OPLINK),a11,L + move *a11(plyr_num),a0 + + srl 1,a0 + move a0,a11 + XORK 1,a0 + sll 4,a0 ;0 or 16 + + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + calla plyr_setptsdown + + + movk PS_2PTS_MADE,a0 ;>Inc try shot stat + subk 2,a3 + jreq #2ptr + movk PS_3PTS_MADE,a0 +#2ptr move @ballpnumshot,a1 + calla inc_player_stat + + calla prt_top_scores ;Update scores at scrn top + + movi TSEC*2,a0 + callr plyr_setshtdly + + CREATE0 goaltend_text + + SOUND1 whitsle_snd + + move @tvpanelon,a0,L + jrz #turnon + movi 4*TSEC+10-70,a1 + move a1,*a0(PTIME) + jruc #alrdyon +#turnon + CREATE0 score_showtvpanel +#alrdyon + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + + SLEEP 30 + + clr a0 + move a0,@ballptsforshot + + jruc plyr_takeoutball3 + +#******************************* +* Show goaltending message (JSRP) + + SUBRP goaltend_text + +; move @ballobj_p,a2,L ;clear out ball vels +; clr a0 +; move a0,*a2(OXVEL),L +; move a0,*a2(OYVEL),L +; move a0,*a2(OZVEL),L +; +; movk 4,a3 +; movi plyrobj_t,a2,L ;clear out player vels +;#velini_lp +; move *a2+,a1,L +; move a0,*a1(OXVEL),L +; move a0,*a1(OYVEL),L +; move a0,*a1(OZVEL),L +; dsj a3,#velini_lp +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@HALT + + movk 3,a10 + CREATE0 doalert_snd + + move @game_time,a0,L + jaz SUCIDE + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_goaltend,a4 + calla print_string2b + + movi 84,a0 + move a0,@mess_cursx2 + movi 127,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP 1*TSEC + + .ref goal_tend_sp + SOUND1 goal_tend_sp + + SLEEP 1*TSEC + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + +; clr a0 +; move a0,@HALT + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,9,0,131,77,HANGF_R_P,kern_chars + +#str_goaltend + .string "G",1,-1,"O",1,-5,"A",1,3,"L",0 + .string "T",1,-6,"E",1,-6,"N",1,-6,"D",1,-2,"I",1,-5,"N",1,-3,"G",0 + .even + + +#******************************* +* Control players for taking the ball out (Process) +* A11=Team who gets ball (0=1, !0=2) + + STRUCTPD + WORD ptob_pball ;Plyr # (0-3) who gets ball + WORD ptob_pball2 ;P# who gets ball passed to him + + + SUBR plyr_takeoutball + +; move @ballpnumshot,@ballpnum ;DEBUG +; move @ballpnumshot,a2 +; sll 5,a2 ;*32 +; addi plyrproc_t,a2 +; move *a2,a1,L +; clr a0 +; move a0,*a1(plyr_dribmode) ;Reset dribble +; movi -1,a0 +; move a0,@inbound +; DIE + + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movi TSEC+20,a0 + callr plyr_setshtdly + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movi plyrproc_t,a0 ;Assume team 1 is inbounding + clr a2 + move @PSTATUS,a3 + movk 2,a9 + move a11,a11 + jrz #t1 + addk 32,a0 ;Team 2 is inbounding + addk 32,a0 + movk 1,a2 + srl 2,a3 + clr a9 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move a2,@inbound ;Inbounding team (0-1) + add a2,a2 ;Make 0 or 1 a 0 or 2 + + andi 3,a3 ;Only look @ selected team bits + jrz #two_same ;Closest inbounds if both drones + cmpi 010b,a3 + jreq #1st ;If human/drone, drone always + jrlo #2nd ; inbounds + +#two_same + move *a8(plyr_balldist),a0 ;Both drone or human. Plyr closest + move *a7(plyr_balldist),a1 ; to ball inbounds + cmp a1,a0 + jrle #1st ;1st in team if <= +#2nd + move a7,a8 ;2nd in team + addk 1,a2 +#1st + move a2,*a13(ptob_pball) ;=inbounding plyr # + XORK 1,a2 + move a2,*a13(ptob_pball2) ;=inbound teammate plyr # + + + movi TSEC*3,a10 ;Max wait for ball to be gotten +#gblp1 + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + SLEEPK 1 + + + .if DEBUG + move @plyrproc_t,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+32,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+64,a0,L + move *a0(plyr_nojoy),a0 + jrnz #lock + move @plyrproc_t+96,a0,L + move *a0(plyr_nojoy),a0 + jrz #ok +#lock + .if DEBUG + LOCKUP + .endif +#ok + .endif + + + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + jrz #atball + dsj a10,#gblp1 ;Don't wait longer then A10 + jruc #atball2 +#atball + move *a8(plyr_jmpcnt),a0 ;Wait for inbounder to land if still + jrnz #gblp1 ; in a jump but has the ball +#atball2 + clr a0 + move a0,*a8(plyr_shtdly) + + + movi TSEC*1,a10 ;Max wait for ball to be picked up +#gblp2 + movi -1,a0 ;Make sure noone has it + move a0,@ballpnum + move a0,@ballpnumlast + SLEEPK 1 + move @ballpnum,a0 ;Does anyone have it now? + jrn #gbcnt2 + move *a13(ptob_pball),a2 + cmp a0,a2 ;Is it the inbounding plyr? Yes if = + jreq #gotball +#gbcnt2 + callr plyrtob_moveo3 ;Move other plyrs to their spots + + move @ballobj_p,a3,L ;Figure ball coor for inbounder to + move *a3(OXPOS),a0 ; chase + addk 6,a0 ;stupid K!!! + move *a3(OZPOS),a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to the ball + dsj a10,#gblp2 ;Don't wait longer then A10 +#gotball + move *a13(ptob_pball),a0 ;Grab the ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + + movi TSEC*3,a10 ;Max wait for inbounder to get OOB +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + move a2,@ballpnum + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrz #outofb ;He's there if 0 + dsj a10,#outlp ;Don't wait longer then A10 +#outofb + movi -1,a0 + move a0,*a8(plyr_dribmode) + calla call_scores + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +; .if DEBUG +; LOCKUP +; .endif +#inpos +; +; +;FIX!!! Allow movement during inbounds +; +; clr a14 +; movi plyrproc_t,a0,L ;Assume team 1 is inbounding +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; movk 1,a14 +; move a0,*a13(plyr_autoctrl) +; +; +; +; + SLEEPK 30 ;Pause before inbounding + + move *a13(ptob_pball),a0 ;Set inbounder as ball owner + move a0,@ballpnum + + movk 20,a0 ;Don't call pass on inbound + move a0,@last_name_time + + +plyrtob_dopass + move *a13(ptob_pball),a10 ;>Pass with turbo + sll 4,a10 + addi P1CTRL,a10 + movi (BUT2_M|BUT3_M)<<8|BUT2_M|BUT3_M,a0 + move a0,*a10 + + movi TSEC*2,a2 ;Max wait for pass to start +#waitp + PUSHP a2 + SLEEPK 1 + PULLP a2 + move *a8(plyr_seqflgs),a0 + btst PASS_B,a0 + jrnz #passing + dsj a2,#waitp ;Don't wait longer then A2 +#passing + clr a0 ;Clr inbounder PxCRTL + + move a0,@drone_attempt ;Alley oop jump up attempts + + move a0,*a10 + not a0 ;Inbounding off + move a0,@inbound + +;Take out for moving during inbound! + + SLEEPK 30 + jruc #runinlp +; +;;Start here for moving during inbound! +; +; SLEEPK 1 +; +; movk 1,a0 +; move a0,@inbound_lead +; +; SLEEPK 1 +; +; move *a13(ptob_pball),a0 +; XORK 1,a0 +; sll 5,a0 +; addi plyrproc_t,a0,L +; move *a0+,a1,L +; clr a14 +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +; move *a13(ptob_pball),a0 +; btst 1,a0 +; jrz #tm1 +;;Team 2 is inbounding +; +; movi plyrproc_t,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; jruc #ext +; +;#tm1 +;;Team 1 is inbounding +; +; movi plyrproc_t+64,a0,L +; move *a0+,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; move *a0,a1,L +; move a14,*a1(plyr_autoctrl) +; move a14,*a1(plyr_nojoy) +; +;#ext +; PUSHP a9 +; movk 30,a9 +;#lpit SLEEPK 1 +; callr joy_read2 +; +; move *a13(ptob_pball),a0 +; sll 4,a0 +; addi P1CTRL,a0 +; clr a14 +; move a14,*a0 +; +; dsjs a9,#lpit +; PULLP a9 +; +; +; clr a0 +; move a0,@inbound_lead + + + +#runinlp + SLEEPK 1 ;Wait till inbounder is back on court + movi -IBX_CRT,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl2 ;Team2 on def + neg a0 +#outl2 addi WRLDMID,a0 + movi IBZ_CRT,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to court spot + jrz #cont ;Wait till he gets there + +;For moving during inbound! + +; PUSHP a9,a10,a11 +; move a13,a11 +; move a0,a9 +; move @tmp_fix,a10,L +; CREATE0 fuck +; PULLP a9,a10,a11 + + jruc #runinlp ;Wait till he gets there +#cont + move a11,a0 + calla shot_clock ;New 24 + + clr a0 + move a0,@plyrinautorbnd ;In case seq didn't clr + move a0,@ballflash + move a0,@pass_off + move a0,@steals_off + move a0,@slamming + + + move *a13(ptob_pball),a0 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + clr a14 + move a14,*a0(plyr_nojoy) + + clr a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + clr a0 + movi plyr_d_cflgs,a1 + callr plyr_setprocword + + .ref drone_setuptob + calla drone_setuptob + + + +;This patch allows clock to be displayed at start of qrtrs and to not get +;an overlapped time when someone scores.. + move @game_time,a14,L + cmpi >2040906,a14 + jrlt #goclock + SLEEP 45 +#goclock + clr a0 + move a0,@clock_active ;Start game clock again + DIE + + + + +;For moving during inbound! +;fuck +; move *a11(ptob_pball),a0 +; sll 5,a0 +; addi plyrproc_t,a0 +; move *a0,a0,L +; move a9,*a10 +; ori 8000h,a9 +; move a9,*a0(plyr_nojoy) +; DIE + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Teleport players to their positions +* A11=Team who gets ball (0=1, !0=2) + + .asg 60h,FACE_LEFT + .asg 20h,FACE_RIGHT + + SUBR plyr_takeoutball2 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 1,a0 + callr plyr_setac + + clr a0 + move a0,@P1CTRL,L ;Clr p1 & p2 & + move a0,@P3CTRL,L ; p3 & p4 + .if DRONES_2MORE + move a0,@P5CTRL,L ; & p5 & p6 + .endif + + move a0,@WORLDTLY,L ;Set for plyr 1 with the ball + movi [WRLDMID-200-MAX_VIEW1+15,0],a1 + movk 1,a2 ;Plyr 2 receives + movi #t1_setup_table,a10 + move a11,a11 + jrz #setib + movk 1,a0 ;Set for plyr 4 with the ball + movi [WRLDMID-200+MAX_VIEW1-15,0],a1 + movk 2,a2 ;Plyr 3 receives + movi #t2_setup_table,a10 +#setib + move a0,@inbound ;Inbounding team + move a1,@WORLDTLX,L + subi [WRLDMID-200,0],a1 + move a1,@gndx,L + movi -1,a0 + move a0,@ballpnumlast + + move a2,*a13(ptob_pball2) ;=1|2 + XORK 1,a2 + move a2,*a13(ptob_pball) ;=0|3 + move a2,@ballpnum + + PUSH a13 + sll 5,a2 + movi plyrobj_t,a8 + add a2,a8 + move *a8,a8,L ;*Plyr obj + addi plyrproc_t,a2 + move *a2,a13,L ;*Plyr process + callr plyr_setballxyz + PULL a13 + + move @pup_court,a0 + jrz #nootd + .ref otdscroller_wake,otdscroll_p ;fix no city on otd at half + move @otdscroll_p,a0,L + movi otdscroller_wake,a14 + move a14,*a0(PWAKE),L +#nootd + movk NUMPLYRS,a14 ;>Teleport them +#init_loop + PUSH a14 + move *a10+,a0 ;=Plyr # (0-3) + move *a10+,a4 ;=ZPOS + sll 16,a4 ;Make it ZVAL + move *a10+,a5 ;=XPOS + sll 16,a5 ;Make it XVAL + move *a10+,a7 ;Direction facing + callr plyr_init + PULL a14 + dsj a14,#init_loop + +; move @gmqrtr,a14 +; subk 2,a14 +; jrnz #qkfix +; clr a14 +; move a14,@HALT +; SLEEPK 1 +; movk 1,a14 +; move a14,@HALT +;#qkfix + SLEEP 60 + + movk 20,a0 + move a0,@last_name_time ;Don't call pass on inbound + + jruc plyrtob_dopass + + +;normal setup (left) +#t1_setup_table + .word 0,IBZ_OOB, WRLDMID-IBX_OOB, 20h ;ply,z,x,face + .word 1,IBZ_INB, WRLDMID-IBX_INB, 60h ;ply,z,x,face + .word 2,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 3,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID-IBX_DEF, 60h ;ply,z,x,face + .endif + +;normal setup (right) +#t2_setup_table + .word 3,IBZ_OOB, WRLDMID+IBX_OOB, 60h ;ply,z,x,face + .word 2,IBZ_INB, WRLDMID+IBX_INB, 20h ;ply,z,x,face + .word 0,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 1,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .if DRONES_2MORE + .word 4,IBZ_DEF1, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .word 5,IBZ_DEF2, WRLDMID+IBX_DEF, 20h ;ply,z,x,face + .endif + + +#***************************************************************************** +* Control players for taking the ball out (Process) +* Created by goaltending +* A11=Team who gets ball (0=1, !0=2) + + SUBR plyr_takeoutball3 + + movi TOB_PID,a0 ;Kill any other plyr_takeoutball + move a0,*a13(PROCID) + calla KIL1C + + movi -1,a0 + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + movk 25,a0 + callr plyr_setshtdly + + SLEEPK 1 + + movi -1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + + move a11,a0 + jrz #setib + movk 1,a0 +#setib + move a0,@inbound ;Inbounding team + + movk 1,a0 + callr plyr_setac + + clr a0 ;Clr staggers + movi plyr_stagcnt,a1 + callr plyr_setprocword + + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a2 + jrz #t1 + clr a9 + addk 32,a0 + addk 32,a0 + movk 2,a2 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_hpdist),a0 + move *a7(plyr_hpdist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(ptob_pball) + move a2,@ballpnum + XORK 1,a2 + move a2,*a13(ptob_pball2) + movi -1,a0 + move a0,@ballpnumlast + +#outlp + SLEEPK 1 + + move *a13(ptob_pball),a0 ;Ensure goaltender has ball + move a0,@ballpnum + clr a0 + move a0,*a8(plyr_dribmode) + + callr plyrtob_moveo3 ;Move other plyrs to their spots + + movi -IBX_OOB,a0 ;Set X per team inbounding + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + movi IBZ_OOB,a1 + move *a13(ptob_pball),a2 + callr plyrtob_seekxy ;Move inbounder to OOB spot + jrnz #outlp ;He's not there yet if !0 + + + movi TSEC*3,a10 ;Max wait for other 3 to get in place +#wtlp + SLEEPK 1 + + callr plyrtob_moveo3 ;Move other plyrs to their spots + jrz #inpos ;They're there if 0 + dsj a10,#wtlp ;Don't wait longer then A10 +#inpos + SLEEP 60 ;Pause before inbounding + + jruc plyrtob_dopass + + +#***************************************************************************** +* Clear out plyr variables +* a0 = player number in (0-3) +* a4 = player Z VAL +* a5 = player X VAL +* a7 = player direction (00h - 7fh) + + SUBR plyr_init + + PUSH a8,a10,a13 + + sll 5,a0 ;x 32 bits + movi plyrproc_t,a13 + add a0,a13 + move *a13,a13,L ;*plyr process + + addi plyrobj_t,a0 + move *a0,a8,L ;*plyr object + + move a4,*a8(OZVAL),L + callr anipt_getsclxy ;a0 = anix, a1 = aniy + move a0,*a8(OXANI),L + neg a1 + move a1,*a8(OYVAL),L + sub a0,a5 + move a5,*a8(OXVAL),L + + movk STND_SEQ,a0 + callr plyr_setseq + + clr a0 + + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + + move a0,*a13(plyr_jmpcnt) + move a0,*a13(plyr_dribmode) + move a0,*a13(plyr_offscrn) + move a0,*a13(plyr_d_cflgs) + move a0,*a13(plyr_hangcnt) + move a0,*a13(plyr_nojoy) + move a0,*a13(plyr_shtdly) +; move a0,*a13(plyr_passbtime) + move a0,*a13(plyr_slam_ticks) + move a0,*a13(plyr_rcvpass) + move a0,*a13(plyr_ownball) + move a0,*a13(plyr_stagcnt) + + movi -1,a0 + move a0,*a13(plyr_newdir) + + movk 1,a0 + move a0,*a13(PA10),L ;reset sequence wake count + + PULL a8,a10,a13 + rets + + +******************************** +* Set new autoctrl value +* A0=autoctrl # +* Trashes scratch + + SUBRP plyr_setac + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_autoctrl) + dsj b0,#aclp + + rets + + +#******************************* +* Set new shtdly value +* A0=shtdly # +* Trashes scratch + + SUBR plyr_setshtdly + + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a1,L + move a0,*a1(plyr_shtdly) + dsj b0,#aclp + + rets + + +#******************************* +* Set word in plyr's proc +* A0=# +* A1=Proc offset +* Trashes scratch + + SUBRP plyr_setprocword + + move a2,b1 + movi plyrproc_t,a14 + movk NUMPLYRS,b0 +#aclp + move *a14+,a2,L + add a1,a2 + move a0,*a2 + dsj b0,#aclp + + move b1,a2 + + rets + + +#******************************* +* Move the other 3 guys who aren't getting the ball +* A9=1st pnum of team on defense (0/2) +* A11=Team who gets ball (0=1, !0=2) +* >A0=0 if all players in position (Pass CC) +* Trashes scratch, A1-A4 + + SUBRP plyrtob_moveo3 + + movi -IBX_DEF,a0 ;Set X's per team inbounding + movi -IBX_INB,a4 + move a11,a11 + jrz #t2 ;Team1 gets? + neg a0 + neg a4 +#t2 addi WRLDMID,a0 + addi WRLDMID,a4 + + move a0,a3 ;>Send defenders to their spots + movi IBZ_DEF1,a1 + move a9,a2 + callr plyrtob_seekxy + PUSH a0 + + move a3,a0 + movi IBZ_DEF2,a1 + addk 1,a2 + callr plyrtob_seekxy + PUSH a0 + + move a4,a0 ;>Send teammate to spot + movi IBZ_INB,a1 + move *a13(ptob_pball2),a2 + callr plyrtob_seekxy + PULL a1 + or a1,a0 + PULL a1 + or a1,a0 + + rets + + +#******************************* +* Push stick to move plyr towards an XZ location +* A0=X to seek +* A1=Z +* A2=Player # (0-3) +* >A0=Joy bits set or 0 (Pass CC) +* Trashes scratch + + SUBRP plyrtob_seekxy + + PUSH a2,a8,a11 + + move a0,b0 + + sll 4,a2 ;*16 + move a2,a11 + addi P1CTRL,a11 + sll 1,a2 + addi plyrobj_t,a2 + move *a2,a8,L + + + move *a8(OXPOS),a2 + move *a8(OXANI+16),a14 + add a14,a2 + +; .if DEBUG +; cmpi WRLDMID-IBX_OOB-15,a2 +; jrle #bugout +; cmpi WRLDMID+IBX_OOB+15,a2 +; jrlt #nobug +;#bugout +; LOCKUP +;#nobug +; .endif + + sub a0,a2 + + clr a0 + + move a2,a14 + abs a2 + subk 10,a2 + jrle #onx + move a14,a14 + jrlt #nolft + subk 4,a0 ;Left + +#nolft addk 8,a0 ;Rgt +#onx + move *a8(OZPOS),a2 + +; .if DEBUG +; cmpi CZMIN-17,a2 +; jrle #bugout1 +; cmpi CZMAX+17,a2 +; jrlt #nobug1 +;#bugout1 +; LOCKUP +;#nobug1 +; .endif + + sub a1,a2 + move a2,a14 + abs a2 + subk 10,a2 + jrle #onz + move a14,a14 + jrlt #noup + subk 1,a0 ;Up + +#noup addk 2,a0 ;Dn +#onz + + move a0,*a11 +;For moving during inbound! +; .bss tmp_fix,16 +; move a11,@tmp_fix,L + move a0,a0 + jrnz #x + + move b0,a14 + move *a8(OXANI+16),a2 + sub a2,a14 + move a14,*a8(OXPOS) + + move a1,*a8(OZPOS) + + move *a8(OXVEL),a1,L + sra 1,a1 + move a1,*a8(OXVEL),L + move *a8(OZVEL),a1,L + sra 1,a1 + move a1,*a8(OZVEL),L + +#x PULL a2,a8,a11 + move a0,a0 + rets + + +#******************************* +* Get dir for object to face an XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBRP seekdir_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + +******************************** +* Get dir for src XY to face an XY +* A0=Src X +* A1=Src Y +* A6=Dest X +* A7=Dest Y +* >A0=0-127 +* Trashes A0-A2,A14 + + SUBR seekdir_xyxy128 + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x + movi >7f,a0 + and a2,a0 + rets + + +#******************************* +* Get dir and distance from object to object +* A0=*Dest obj +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2,A6,A7 + + SUBRP seekdirdist_obob128 + + move *a0(OXPOS),a6 ;Get SX + move *a0(OXANI+16),a14 + add a14,a6 + move *a0(OZPOS),a7 ;Get SZ + +#******************************* +* Get dir and distance from object to XZ +* A6=Dest X +* A7=Dest Z +* A8=*Source obj +* >A0=0-127 +* >A1=Distance +* Trashes scratch, A2 + + SUBR seekdirdist_obxz128 + + move *a8(OXPOS),a0 ;Get SX + move *a8(OXANI+16),a14 + add a14,a0 + move *a8(OZPOS),a1 ;Get SZ + + clr a2 ;Octant 0-1 + sub a6,a0 ;A0=SrcX-DestX + jrgt #o45_67 + abs a0 + sub a7,a1 ;A1=SrcY-DestY + jrnn #gotoct + movk 2,a2 ;Oct 2-3 + abs a1 + jruc #d_sw +#o45_67 + movk 4,a2 ;Oct 4-5 + sub a7,a1 ;A1=SrcY-DestX + abs a1 + jrnn #o_up + movk 6,a2 ;Oct 6-7 +#d_sw + SWAP a0,a1 ;Swap XY delts for oct 23 & 67 +#o_up + sll 4,a2 ;Oct*16 + +#gotoct + clr a14 + cmp a1,a0 ;>Cmp slope + jrhs #300 + + move a0,b0 ;Save distance + move a1,b1 + + srl 4,a1 ;Bigger/16 + jrnz #250 + jruc #x +#lp1 + addk 1,a2 ;Next 1/16 oct + add a1,a14 ;+1/16 +#250 + cmp a0,a14 + jrlo #lp1 + jruc #x + +#300 + move a0,b1 ;Save distance + move a1,b0 + + addk 31,a2 ;End of next octant + + srl 4,a0 ;Bigger/16 + jrnz #350 + jruc #x +#lp2 + subk 1,a2 ;Next 1/16 oct + add a0,a14 ;+1/16 +#350 + cmp a1,a14 + jrlo #lp2 + +#x ;>Calc distance (long+short/2.667) + srl 1,b0 ;Shorter/2 + add b0,b1 + srl 2,b0 ;Shorter/8 + sub b0,b1 + move b1,a1 + + movi >7f,a0 + and a2,a0 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + +;--------------------------------------- + + .if CRTALGN + +#******************************* +* Create ground alignment dots for debugging (Process) + + SUBR gnd_aligndots + + .ref hoopl_t,hoopr_t + + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + + + .if 0 ;1=SHOW 3PT DOTS, 0=DON'T + movi pt3_t,a11 + movi PT3_TOPZ,a3 + jruc #3pstrt +#3plp + neg a0 + addi 200,a0 + sll 16,a0 + clr a1 ;Y lft + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + move *a11+,a0 ;X rgt + addi 200,a0 + sll 16,a0 + clr a1 ;Y rgt + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + addk 4,a3 ;Z inc +#3pstrt move *a11,a0 ;X lft + jrnn #3plp + .endif + + + .if 0 ;1=SHOW HOOP DOTS, 0=DON'T + movi hoopl_t,a11 ;>Setup left hoop dots + jruc #hlstrt +#hllp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hlstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hlstrt move *a11+,a0 ;X + jrnz #hllp ;!End? + + movi hoopr_t,a11 ;>Setup rgt hoop dots + jruc #hrstrt +#hrlp + sll 16,a0 + move *a11+,a1 ;Y + sll 16,a1 + move *a11+,a3 ;Z + move *a11+,a14 + jrn #hrstrt ;Keep in to not show score pts! + addi 300,a3 + calla BEGINOBJ2 + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset +#hrstrt move *a11+,a0 ;X + jrnz #hrlp ;!End? + .endif + + + .if 0 ;1=SHOW BACKBOARD DOTS, 0=DON'T + .asg ((BBRD_ZWID/2)*3/32),FC8 ;Fudge cnt X offset + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (-BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200+FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z+BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + + movi (BBRD_X+200-FC8) << 16,a0 + movi (BBRD_Y-BBRD_YWID) << 16,a1 + movi BBRD_Z-BBRD_ZWID/2,a3 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + .endif + + + .if 0 ;1=SHOW COURT DOTS, 0=DON'T + movi #init_t,a11 ;>Setup gnd dot images + jruc #5 +#lp + addi 200,a0 + sll 16,a0 + clr a1 ;Y + move *a11+,a3 ;Z + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) +#5 move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + .endif + + +;-------------------- +; Cycle dot color + + move *a8(OPAL),a9 + sll 8,a9 + addk 1,a9 ;Color 1 + clr a10 +#plp + move a10,a0 + addi #color_t,a0 + move a9,a1 + movk 1,a2 ;#Colors + calla pal_set + SLEEPK 10 + addk 16,a10 + sll 32-6,a10 ;0-3 color # + srl 32-6,a10 + jruc #plp + + +#x0 .equ LFTCRT_X-WRLDMID ;-350 +#x1 .equ RGTCRT_X-WRLDMID ;350 + +#z0 .equ GZMIN +#z0a .equ GZMIN+(CZMIN-GZMIN)/4 +#z0b .equ GZMIN+(CZMIN-GZMIN)/2 +#z0c .equ GZMIN+(CZMIN-GZMIN)*3/4 +#z1 .equ CZMIN ;1000 +#z1a .equ CZMIN+(CZMAX-CZMIN)/16 +#z1b .equ CZMIN+(CZMAX-CZMIN)/8 +#z1c .equ CZMIN+(CZMAX-CZMIN)*3/16 +#z2 .equ CZMIN+(CZMAX-CZMIN)/4 ;1095 +#z2a .equ CZMIN+(CZMAX-CZMIN)*5/16 +#z2b .equ CZMIN+(CZMAX-CZMIN)*3/8 +#z2c .equ CZMIN+(CZMAX-CZMIN)*7/16 +#z3 .equ CZMIN+(CZMAX-CZMIN)/2 ;1190 +#z3a .equ CZMIN+(CZMAX-CZMIN)*9/16 +#z3b .equ CZMIN+(CZMAX-CZMIN)*5/8 +#z3c .equ CZMIN+(CZMAX-CZMIN)*11/16 +#z4 .equ CZMIN+(CZMAX-CZMIN)*3/4 ;1284 +#z4a .equ CZMIN+(CZMAX-CZMIN)*13/16 +#z4b .equ CZMIN+(CZMAX-CZMIN)*7/8 +#z4c .equ CZMIN+(CZMAX-CZMIN)*15/16 +#z5 .equ CZMAX + +#init_t + .word 4000 ;TEMP!!! + .word #x0,#z0, 0,#z0, #x1,#z0 + .word #x0,#z0a, 0,#z0a, #x1,#z0a + .word #x0,#z0b, 0,#z0b, #x1,#z0b + .word #x0,#z0c, 0,#z0c, #x1,#z0c + .word #x0,#z1, 0,#z1, #x1,#z1 + .word #x0,#z1a, 0,#z1a, #x1,#z1a + .word #x0,#z1b, 0,#z1b, #x1,#z1b + .word #x0,#z1c, 0,#z1c, #x1,#z1c + .word #x0,#z2, 0,#z2, #x1,#z2 + .word #x0,#z2a, 0,#z2a, #x1,#z2a + .word #x0,#z2b, 0,#z2b, #x1,#z2b + .word #x0,#z2c, 0,#z2c, #x1,#z2c + .word #x0,#z3, 0,#z3, #x1,#z3 + .word #x0,#z3a, 0,#z3a, #x1,#z3a + .word #x0,#z3b, 0,#z3b, #x1,#z3b + .word #x0,#z3c, 0,#z3c, #x1,#z3c + .word #x0,#z4, 0,#z4, #x1,#z4 + .word #x0,#z4a, 0,#z4a, #x1,#z4a + .word #x0,#z4b, 0,#z4b, #x1,#z4b + .word #x0,#z4c, 0,#z4c, #x1,#z4c + .word #x0,#z5, 0,#z5, #x1,#z5 + .word 4000 + +#color_t + COLORW 0,0,0, 0,16,0, 0,31,0, 0,16,0 + +#alignimg_t + .word 1,1,0,0 + .long 0 + .word >1000 + .long #test_p + +#test_p .word 1, 0 + + .endif + + .end + + + + + diff --git a/SRC/PLYR.EQU b/SRC/PLYR.EQU new file mode 100644 index 0000000..f8722dc --- /dev/null +++ b/SRC/PLYR.EQU @@ -0,0 +1,377 @@ +******************************** +* Player/game constants and structures +*.Last mod - 2/5/93 14:49 +; +; Ball data structure +; + STRUCTPD + WORD ball_anix ;X anipt offset + WORD ball_aniy ;Y ^ + APTR ball_ani1st_p ;*1st ani_l pos + APTR ball_ani_p ;*Current ani_l pos + WORD ball_zsznum ;Z size # 0-? + WORD ball_collcnt ;# of collisions in a row + WORD ball_onfire ;!0=Flaming +;unused WORD ball_xscrllmin ; +;unused WORD ball_xscrllmax ; +; +; Player data structure +; +;DJT Start + STRUCTPD ;92 Words max +;DJT End + WORD plyr_num ;P# (0-3) + APTR plyr_tmproc_p ;*Teammates process + APTR plyr_PDATA_p ;*PxDATA + APTR plyr_attrib_p ;*Players attribute table + WORD plyr_seq ;Current ani sequence # + WORD plyr_seqflgs ;^ flags + WORD plyr_seqdir ;^ dir 0-7 + APTR plyr_seqcode_p ;*Code to run when seq at end + APTR plyr_ani1st_p ;*1st ani_l pos + APTR plyr_ani_p ;*Current ani_l pos + WORD plyr_anirevff ;Xored into aniflags to reverse FLIPH + WORD plyr_dribmode ;-=Can't dribble, 0=Can drib, +=Dribbling +; WORD plyr_passbtime ;0=Pass off, +=# ticks since pass pressed + WORD plyr_slam_ticks ;ticks until slam ball (minus launch ticks) + WORD plyr_rcvpass ;+=# ticks till you rcv pass + WORD plyr_bvel ;Base velocity/16 + WORD plyr_turbon ;!0=Turbo on + WORD plyr_ownball ;-=Teammate, 0=Neither, +=I have ball + LONG plyr_ballxo ;Ball X offset (16:16) + WORD plyr_ballyo ;Ball Y offset + WORD plyr_ballzo ;Z^ + WORD plyr_shtdly ;After shot delay for coll + WORD plyr_myhoopx ;Plyrs hoop X + WORD plyr_ohoopx ;Opponents hoop X +;DJT Start + WORD plyr_hotspotp ;Plyrs hotspot shot % + WORD plyr_hotspotf ;Plyrs hotspot jump flag + WORD plyr_hotspotx ;Plyrs hotspot X + WORD plyr_hotspotz ;Plyrs hotspot z + APTR plyr_hotspot_p ;Plyrs hotspot *proc +;DJT End + WORD plyr_tmdir ;Teammates dir + WORD plyr_tmdist ;^ distance + WORD plyr_o1dir ;Opponent 1 dir + WORD plyr_o1dist ;^ dist + WORD plyr_o2dir ;Opponent 1 dir + WORD plyr_o2dist ;^ dist + WORD plyr_balldir ;Balls dir + WORD plyr_balldist ;^ dist + WORD plyr_hpdir ;Plyrs hoop dir + WORD plyr_hpdist ;^ dist + WORD plyr_ohpdir ;Opponents hoop dir + WORD plyr_ohpdist ;^ dist + WORD plyr_indef ;!0=In defensive posture + WORD plyr_nojoy ;0=Use joystick, +=Ignore joy, -=Use this instead + WORD plyr_autoctrl ;!0=Plyr under temp computer control + WORD plyr_dir ;Current dir 0-127 (3:4) + WORD plyr_newdir ;New dir or -1 + WORD plyr_dirtime ;# ticks stick pushed and facing current dir + WORD plyr_jmpcnt ;0=No jmp, +=# ticks since jump + WORD plyr_hangcnt ;0=No hang, +=Hang cnt down + WORD plyr_aniy ;Current frames y anipt + WORD plyr_stagcnt ;+x each innerbox collision + WORD plyr_ptsdown ;# pts losing by (neg # if winning) + WORD plyr_d_mode ;-=Defense, 0=Get ball, +=Offense + WORD plyr_d_skill ;0=Average, -=Poorer, +=Better + WORD plyr_d_cflgs ;Drone command flags + WORD plyr_d_seekcnt ;!0=Cntdn to continue seek + WORD plyr_d_seekx ;X to seek + WORD plyr_d_seeky ;Y ^ + APTR plyr_headobj_p ;*Head obj + APTR plyr_shadobj_p ;*Shadow obj +; APTR plyr_aligndot_p ;*Alignment obj + WORD plyr_offscrn ;!0=Plyr is on defense & off trailing scrn edge + WORD plyr_offtime ;Amount of time off scrn for idiot box + WORD plyr_tbutn ;Ticks sice last turbo button press + WORD plyr_turndelay ;Ticks before turning toward action (stands) + WORD plyr_idiotbit ;Bit 0=drn pass,1=drn shoot,2=dunk,3=shoot + WORD plyr_shtbutn ;Ticks sice last shoot button press + WORD plyr_inair_pass ;-=cant pass to teamate in air, +=can +; WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; WORD plyr_hdkeeppal ;Keep head pal for reuse upon finish of flames + LONG plyr_kpzvel ;Keep ZVEL for flyback skids on butt + LONG plyr_kpxvel ;Keep XVEL for flyback skids on butt + LONG plyr_meter_proc ;Jump ball meter + WORD plyr_meter_time ;Jump ball meter + WORD plyr_old_seqdir ;dir 0-7 - for behind back pass + WORD plyr_offset_flag ;0 or 1, Have I already offset this flyback? + WORD plyr_hold_block ;Ticks block being held for rejections + LONG plyr_lost_ptr ;Player lost arrow process ptr for arw flash + WORD plyr_inflsh ;In red flash flag + WORD plyr_alley_cnt ;# of alley oops + + + STRUCT 0 ;Plyr secondary data + WORD pld_d_nastycnt ;0=Normal, +=Nasty cntdn + + WORD pld_d_grddist ;% distance to guard opp (0-256) + WORD pld_d_lowsecagr ;Low second aggressive time (1-5) + LABEL PLDSZ ;Struc size + + + STRUCT 0 ;Plyr attribute table +;Size,speed,shot%,dunk ability,defensive ability,steal skill,drone skill + APTR PAT_SCL_p ;*Scale table (keep 1st) + WORD PAT_BVEL ;Base velocity/16 + WORD PAT_SHOTSKILL ;Base shooting % + WORD PAT_DUNKSKILL ;Dunk tables this guy can do + WORD PAT_DEFSKILL ;Defensive skill (Blocks) + WORD PAT_STLSKILL ;Defensive steal skill + WORD PAT_SKILL ;Drone base skill + APTR PAT_PALF_p ;*Body flesh palette + APTR PAT_PALU_p ;*Body uniform ^ + APTR PAT_PALU2_p ;*Body 2nd uniform ^ + APTR PAT_PALT_p ;*Body trim ^ + APTR PAT_PALT2_p ;*Body 2nd trim ^ + APTR PAT_HEADT_p ;*Head_t + WORD PAT_PASS ;Player passing skill + WORD PAT_POWER ;Player power/intimidation factor + WORD PAT_CLUTCH ;Player clutch performer stat +;DJT Start + WORD PAT_HOTSPOT ;Player hotspot # +;DJT End + APTR PAT_PALSW_p ;*Body swipe palette + APTR PAT_PALSW2_p ;*Body 2nd swipe ^ + APTR PAT_PALVP_p ;*Body vertical panel ^ + APTR PAT_PALVP2_p ;*Body 2nd vertical panel ^ + APTR PAT_SIZE +; +; Sequence table define/build macros +; +SEQ .macro n,d +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm +SEQG .macro n,d + .global :d: +:n: .equ SOFF + .eval SOFF+1,SOFF + .if SEQT + .long :d: + .endif + .endm + + .global pseq_t + .if SEQT +pseq_t + .endif +; +; Sequence table +; + .asg 0,SOFF + SEQ NULL_SEQ ,0 + SEQG STND_SEQ ,stnd_t ;Stand + SEQ STND2_SEQ ,stnd2_t ;Stand straight up + SEQG STNDDEF_SEQ ,stnddef_t + SEQG STNDWB_SEQ ,stndwb_t ;^ with ball + SEQG STNDWB2_SEQ ,stndwb2_t + SEQ STNDDRIB_SEQ ,stnddrib_t + SEQ STNDDRIB2_SEQ ,stnddrib2_t + SEQ STNDDRIBDEF_SEQ ,stnddribdef_t + SEQG WALKFDEF_SEQ ,walkfdef_t + SEQG WALKBDEF_SEQ ,walkbdef_t + SEQG WALKLDEF_SEQ ,walkldef_t + SEQG WALKRDEF_SEQ ,walkrdef_t + SEQG RUN_SEQ ,run_t + SEQG RUNTURB_SEQ ,runturb_t ;Must follow run! + SEQG RUNDRIB_SEQ ,rundrib_t + SEQG RUNDRIBTURB_SEQ ,rundribturb_t ;Must follow rundrib! + SEQ BLOCK_SEQ ,block_t + SEQ BLOCKREJ_SEQ ,blockrej_t ;Reject block + SEQ FASTBLOCKREJ_SEQ,fastblockrej_t ;Fast reject block + SEQ REBOUND_SEQ ,rebound_t ;Rebound + SEQ REBOUNDA_SEQ ,rebounda_t ;Auto rebound + SEQ NOSPEAR_SEQ ,nospear_t ;Turn a spear into a grab + SEQ SHOOT_SEQ ,shoot_t ;Shoot ball + SEQ QSHOOT_SEQ ,qshoot_t ;Shoot ball quickly + SEQ UNDR_HOOP_SHT_SEQ,undr_hoop_sht_tbl ;fade sideways and shoot + SEQ UNDR_HOOP_SHT_SEQ2,undr_hoop_sht_tbl2 ;fade sideways and shoot + SEQG HOOK_SEQ ,hook_t ;Hook shot + SEQG HOOK2_SEQ ,hook2_t ;Hook shot lower arc + SEQG LAYUP_SEQ ,layup_t ;Layups + SEQG LAYUPREB_SEQ ,layupreb_t ;Layup from rebound + SEQ SHOOTDESP_SEQ ,shootdesp_t ;Desperation (keep in order!) + SEQ SHOOTDESP2_SEQ ,shootdesp2_t + SEQ SHOOTDESP3_SEQ ,shootdesp3_t + SEQ PASSS_SEQ ,passs_t ;Short pass + SEQ PASSC_SEQ ,passc_t ;Long chest pass + SEQ FASTPASSC_SEQ ,fastpassc_t ;Fast long chest pass +; SEQ PASSOH_SEQ ,passoh_t ;Overhead pass + SEQ PASSNEWOH_SEQ ,passnewoh_t ;New overhead pass + SEQ FASTPASSNEWOH_SEQ,fastpassnewoh_t ;Fast new overhead pass + SEQ PASSDO_SEQ ,passdo_t ;Dish off + SEQ PASSDO2_SEQ ,passdo2_t ;Dish off no big arm extend + SEQ PASSBH_SEQ ,passbh_t ;Behind back pass + SEQ PASSBH2_SEQ ,passbh2_t ;Behind back pass option #2 + SEQG PASSNL_SEQ ,passnl_t ;No look pass +; SEQG PASSNL2_SEQ ,passnl2_t ; +; SEQG PASSNL3_SEQ ,passnl3_t ; + SEQ STEAL_SEQ ,steal_t ;Swipe at ball +;FIX!!! Check all references to regular STEAL_SEQ! +; SEQ STEALUP_SEQ ,stealup_t ;Swipe at ball - swat upward + SEQG PUSH_SEQ ,push_t ;Push opponent + SEQG STAGGER_SEQ ,stagger_t ;Staggered + SEQG FALL_SEQ ,fall_t ;Fall down + SEQG FLYBACK_SEQ ,flyback_t ;Pushed + SEQG FLYBACK2_SEQ ,flyback2_t ;Pushed - nofall + SEQG FLYBACKWB_SEQ ,flybackwb_t ;Pushed (have ball) + SEQG FLYBACKWB2_SEQ ,flybackwb2_t ;Pushed (have ball) - no fall +; SEQG FFALL_SEQ ,ffall_t ;Fall down - Catch fire! +; SEQG FFLYBACK_SEQ ,fflyback_t ;Pushed - Catch fire! +; SEQG FFLYBACK2_SEQ ,fflyback2_t ;Pushed - nofall - Catch fire! +; SEQG FFLYBACKWB_SEQ ,fflybackwb_t ;Pushed (have ball) +; SEQG FFLYBACKWB2_SEQ ,fflybackwb2_t ;Pushed (have ball) - no fall + SEQG PICKUP_SEQ ,pickup_t ;Pickup ball + SEQG ELBO_SEQ ,elbo_t ;Throw elbows + SEQG ELBO2_SEQ ,elbo2_t ;Throw elbows slower + SEQG TIP_SEQ ,tip_t ;Tip stand + SEQG TIPJ_SEQ ,tipj_t ;Tip jump + SEQG TIPSTND_SEQ ,tipstnd_t ;Stand before jump ball + SEQG SPIN_MOVE_SEQ ,spinmove_t ;avoid plr by spinning around him +; SEQG LOB_PASS_SEQ ,lobpass_t ;lob the ball to the hoop +; SEQG PUTBACK_SEQ ,putback_t ;put-back slam +; SEQG GOOD_BLOCK_SEQ ,good_block_t ;Jump into this on good block + + SEQG DUNKA_SEQ ,dunka_t + SEQG DUNKA2_SEQ ,dunka2_t + SEQG DUNKA3_SEQ ,dunka3_t + SEQG DUNKB_SEQ ,dunkb_t + SEQG DUNKB2_SEQ ,dunkb2_t ;Under hoop dunk + SEQG DUNKB3_SEQ ,dunkb3_t ;Under hoop dunk - quick + SEQG DUNKC_SEQ ,dunkc_t + SEQG DUNKD_SEQ ,dunkd_t + SEQG DUNKD2_SEQ ,dunkd2_t ;Dunkd option + SEQG DUNKE_SEQ ,dunke_t + SEQG DUNKE2_SEQ ,dunke2_t ;Dunke option + SEQG DUNKF_SEQ ,dunkf_t + SEQG DUNKG_SEQ ,dunkg_t + SEQG DUNKG2_SEQ ,dunkg2_t ;Under hoop dunk + SEQG DUNKJ_SEQ ,dunkj_t + SEQG DUNKJ2_SEQ ,dunkj2_t ;Dunkj option + SEQG DUNKK_SEQ ,dunkk_t + SEQG DUNKK2_SEQ ,dunkk2_t + SEQG DUNKL_SEQ ,dunkl_t + SEQG DUNKL2_SEQ ,dunkl2_t + SEQG DUNKL3_SEQ ,dunkl3_t + SEQG DUNKN_SEQ ,dunkn_t + SEQG DUNKO_SEQ ,dunko_t + SEQG DUNKP_SEQ ,dunkp_t + SEQG DUNKP2_SEQ ,dunkp2_t + SEQG DUNKP3_SEQ ,dunkp3_t + SEQG DUNKQ_SEQ ,dunkq_t + SEQG DUNKQ2_SEQ ,dunkq2_t + SEQG DUNKR_SEQ ,dunkr_t + SEQG DUNKR2_SEQ ,dunkr2_t + SEQG DUNKS_SEQ ,dunks_t + SEQG DUNKS2_SEQ ,dunks2_t + SEQG DUNKU_SEQ ,dunku_t + SEQG DUNKU2_SEQ ,dunku2_t +;all seq. from here down, scroller moves slower (height range ?) + SEQG DUNKU3_SEQ ,dunku3_t + SEQG DUNKU4_SEQ ,dunku4_t + SEQG DUNKU5_SEQ ,dunku5_t + SEQG DUNKU6_SEQ ,dunku6_t + SEQG DUNKU7_SEQ ,dunku7_t + SEQG DUNKU8_SEQ ,dunku8_t + SEQG DUNKQ3_SEQ ,dunkq3_t + SEQG DUNKO2_SEQ ,dunko2_t + SEQG DUNKN2_SEQ ,dunkn2_t ;Under hoop dunk + SEQG DUNKN3_SEQ ,dunkn3_t ;Under hoop dunk + SEQG DUNKT_SEQ ,dunkt_t + SEQG DUNKT2_SEQ ,dunkt2_t + SEQG DUNKT3_SEQ ,dunkt3_t + SEQG DUNKT4_SEQ ,dunkt4_t + SEQG DUNKT5_SEQ ,dunkt5_t + SEQG DUNKV_SEQ ,dunkv_t + SEQG DUNKV2_SEQ ,dunkv2_t + SEQG DUNKV3_SEQ ,dunkv3_t + SEQG DUNKV4_SEQ ,dunkv4_t + SEQG DUNKW_SEQ ,dunkw_t + SEQG DUNKW2_SEQ ,dunkw2_t + SEQG DUNKW3_SEQ ,dunkw3_t + SEQG DUNKX_SEQ ,dunkx_t + SEQG DUNKX2_SEQ ,dunkx2_t + SEQG DUNKX3_SEQ ,dunkx3_t + SEQG DUNKY_SEQ ,dunky_t + SEQG DUNKY2_SEQ ,dunky2_t ;Cool + SEQG DUNKZ_SEQ ,dunkz_t + SEQG DUNKZ2_SEQ ,dunkz2_t + SEQG DUNKZ3_SEQ ,dunkz3_t + SEQG DUNKLAY_SEQ ,dunklay_t + SEQG DUNKLAY2_SEQ ,dunklay2_t + SEQG DUNKLAY3_SEQ ,dunklay3_t + SEQG DUNKLAY3A_SEQ ,dunklay3a_t + SEQG DUNKLAY3B_SEQ ,dunklay3b_t + SEQG DUNKLAY3C_SEQ ,dunklay3c_t + SEQG DUNKLAY4_SEQ ,dunklay4_t + SEQG DUNKLAY5_SEQ ,dunklay5_t + SEQG DUNKLAY6_SEQ ,dunklay6_t + SEQG DUNKLAY7_SEQ ,dunklay7_t + SEQG DUNKLAY7A_SEQ ,dunklay7a_t + SEQG DUNKLAY8_SEQ ,dunklay8_t + SEQG QUICK_LAYUP_SEQ ,quicklay_t + SEQG ALLEYOOP_PAS_SEQ,alleyoop_pas_t +; SEQG DDUNK_STRT_SEQ ,ddunk_strt_t + SEQG DDUNK_STRT2_SEQ ,ddunk_strt2_t +;dont change order + SEQG ALLEYOOP1_SEQ ,alley_oop1_t + SEQG ALLEYOOP2_SEQ ,alley_oop2_t + SEQG ALLEYOOP3_SEQ ,alley_oop3_t + SEQG ALLEYOOP4_SEQ ,alley_oop4_t + SEQG ALLEYOOP5_SEQ ,alley_oop5_t + SEQG ALLEYOOP6_SEQ ,alley_oop6_t + SEQG ALLEYOOP7_SEQ ,alley_oop7_t + SEQG ALLEYOOP8_SEQ ,alley_oop8_t + SEQG ALLEYOOP9_SEQ ,alley_oop9_t + SEQG ALLEYOOP10_SEQ ,alley_oop10_t ;dir 1 - <5 dnk attrib + SEQG ALLEYOOP11_SEQ ,alley_oop11_t ;dir 2 - <5 dnk attrib + SEQG ALLEYOOP12_SEQ ,alley_oop12_t ;dir 3 - <5 dnk attrib + SEQG ALLEYOOP13_SEQ ,alley_oop13_t ;dir 4 - <5 dnk attrib + SEQG ALLEYOOP14_SEQ ,alley_oop14_t ;dir 5 - <5 dnk attrib +;dont change order + SEQG DDUNK_RECV_SEQ ,ddunk_recv_t + + .if IMGVIEW + SEQG debug_SEQ1 ,debug_t1 + SEQG debug_SEQ4 ,debug_t4 + .endif + +;Seq flags + .asg 0,SOFF + FLAG WALK ;In a defensive walk + FLAG DUNK ;Dunk sequence + FLAG NOJUMP ;Can't jump + FLAG NOMV ;No XZ movement + FLAG EASYSTAG ;Easier to stagger + FLAG NOBALL ;Can't hold ball + FLAG BLOCKREB ;Blocking/rebounding + FLAG DRIFT ;In air drifting + FLAG DRIBBLE ;Doing dribble + FLAG SHOOT ;Shooting the ball + FLAG PASS ;Passer + FLAG NOSTEAL ;Ball can't be stolen + FLAG NOCOLLP ;No collisions with other plyrs + FLAG NOJOY ;Ignore plyrs joystick + FLAG SAMEDIR ;Don't change dir if rcving pass + FLAG LAYUP ;A layup sequence from a dunk + +;Drone command flags + .asg 0,SOFF + FLAG DRN_PASS ;Tell drone to pass + FLAG DRN_SHOOT ;^ shoot + +;PxCTRL flags + .asg 0,SOFF + FLAG JOYU + FLAG JOYD + FLAG JOYL + FLAG JOYR + FLAG BUT1 + FLAG BUT2 + FLAG BUT3 diff --git a/SRC/PLYR2.ASM b/SRC/PLYR2.ASM new file mode 100644 index 0000000..3825d3b --- /dev/null +++ b/SRC/PLYR2.ASM @@ -0,0 +1,6437 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/17/93 17:54 +************************************************************** + .file "plyr2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + + .include "ballshad.glo" + .include "imgtbl7.glo" + .include "imgtbl.glo" + .include "credturb.glo" + .include "arrow.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds external + + .ref FLAME_F_13,FLAME2F_13 + + .ref ohmy,intercept,into_stnd_sp + .ref stealsb + .ref swish_snd1,swish_snd2,swish_snd3 + .ref swish_snd4,swish_snd5,swish_snd6 + .ref miss1_snd,miss2_snd,miss3_snd,miss4_snd + .ref dunk_snd1,dunk_snd2,dunk_snd3,dunk_snd4 + .ref missd1_snd,hitbkbd_snd,swat_snd,boo1_snd + .ref hitbkbd2_snd,miss5_snd,dunk_snd5 + .ref cheer_snd,cheer1_snd,cheer2_snd,cheer3_snd,cheer4_snd + .ref steal_snd + + .ref on_fire_sp,dribble_snd,push1_snd + .ref dribble3_snd + .ref pup_court,pup_aba + + +;symbols externally defined + + .ref pup_maxpower + .ref shot_percentage + .ref gmqrtr + .ref shot_distance + + .ref AUD1,AUD + .ref nogood_speech,GAMSTATE + + .ref rejected_speech + .ref rejected_dnk_speech + .ref rebound_speech + .ref intercepted_speech + .ref stolen_speech + + .ref rebound_delay + .ref pushing_delay + .ref team1 + + .ref shot_type + .ref shoots_speech,scored_speech + + .ref steals_off + .ref pass_off + .ref PSTATUS + + .ref game_time + .ref scores,prt_top_scores + .ref tvpanelon + .ref score_add,score_showtvpanel + .ref stick_number + .ref sclockx,sc_proc +; .ref movie_test + .ref net_ani,rimlf,rimrf + .ref arw_on1plyr + + .ref pal_getf + + .ref PCNT + .ref HALT + .ref gndx + .ref RNDPER + .ref SHAKER + .ref GET_ADJ + + .ref plyrobj_t,plyrproc_t + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref plyrcharge + .ref plyrpasstype + .ref plyrairballoff + .ref ball_smokepuff + + .ref seekdir_xyxy128 + .ref seekdirdist_obxz128 + .ref plyr_setseq,plyr_takeoutball +; .ref plyr_freethrow + .ref plyr_goaltending + .ref plyr_setshtdly + + .ref inc_player_stat + .ref flsh1_snd,flsh3_snd,flsh4_snd + + +;symbols defined in this file + + .def hoopl_t,hoopr_t + + +;uninitialized ram definitions + + .bss off_boxy,16 + + BSSX plyr_onfire ,16 ;Bit 0-3=plyr 0-3 on-fire; 0 for none + BSSX ballobj_p ,32 ;* basketball obj + BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg + BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose + BSSX ballpnumshot ,16 ;Last plyr who shot (0-3) + BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock + BSSX ballshotinair ,16 ;Shooter # if shot in air, else -1 + +;Stucture - Keep in order! + BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg + BSSX ballnumscored ,16 ;# times last plyr scored + BSSX balltmscored ,16 ;Last team-shot scored (0=tm2,32=tm1) + BSSX balltmshotcnt ,16 ;# times last team-shot scored +;End of structure + + BSSX ballfree ,16 ;!0=Ball free to move + BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored + + BSSX ballrimhitcnt ,16 ;# times rim hit since last shot + BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot + BSSX in_cylinder ,16 ;Cntdwn after first rim hit on shots + BSSX must_rebound ,16 ;Convert block/rej art into rebound + + BSSX ballptsforshot ,16 ;Point value for current shot (1-3) + BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0 + BSSX ballpasstime ,16 ;# ticks since passed + BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down + BSSX ballflash ,16 ;!0=Ball flashing + BSSX inbound ,16 ;Inbounding team (0-1) or Neg + BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R) + + BSSX cntl_team ,16 ;Team in control (0,1,-1) + BSSX cntl_team_last ,16 ;Team in control (0,1,-1) + BSSX scrl_divs_cur ,16 ;Scroller current divisor + BSSX scrl_divs_dest ,16 ;Scroller acceleration target divisor + +; .bss movieshown ,16 ;!0=Movie has been played + + BSSX slamming ,16 ;!0=Ball going into rim from dunking + +;DJT Start + BSSX t1ispro ,16 ;= - regular, + pro, 0 champ + BSSX t2ispro ,16 + +;DJT End + BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order) + .bss t2dunkcnt ,16 ;^ -=# dunks till we can break board + +;DJT Start + BSSX hotspot_count ,16*NUMPLYRS ;Plyrs hotspot shot cnt +;DJT End + BSSX brick_count ,16*NUMPLYRS ;# bricks each player has thrown up + BSSX last_power ,16 ;Player pushing has this power + +;DJT original_names removed +; BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8) + + BSSX my_ballpnumlast ,16 ;last player to own ball +;equates for this file + + + .text + + +#******************************* +* Play bell, flash ball on ABA ball powerup + +church +;Wait for HALT to get set! + SLEEPK 8 + +#lpz SLEEPK 1 ;waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + .ref robo_3_snd + SLEEPK 20 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + SLEEPK 27 + callr flash_ball + SOUND1 robo_3_snd + DIE + +#******************************* +* Ball main code (Process) + + SUBR ball_main + + move a13,a1 ;>Clr PDATA & PSDATA areas + addi PDATA,a1 + movi (PRCSIZ-PDATA)/16,a2 + clr a0 +#clrpd move a0,*a1+ + dsj a2,#clrpd + + move @WORLDTLX+16,a0 ;Init ball obj + addi 200,a0 + sll 16,a0 + movi [-80,0],a1 ;In air + .ref NBALL101 + movi NBALL101,a2 + move @pup_aba,a14 + jrz #notd + .ref ABALL101 + movi ABALL101,a2 + PUSH a0,a1,a2 + + + CREATE0 church + + + PULL a0,a1,a2 +#notd + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSENMY|TYPBALL,a5 + clr a6 + movi ->20000,a7 + calla BEGINOBJ2 + move a8,@ballobj_p,L + callr ball_getshadow ;Init ball shadow + + clr a0 ;Init various ball stats/counts + move a0,@ballpnumshot + move a0,@ballscorezhit + move a0,@ballbbhitcnt + move a0,@ballgoaltcnt + move a0,@ballflash + move a0,@t1dunkcnt + move a0,@t2dunkcnt + move a0,@off_boxy + move a0,@puffcnt +;DJT Start + move a0,@brick_count,L + move a0,@brick_count+20h,L +;DJT End + + subk 1,a0 + move a0,@ballpnum + move a0,@ballpnumlast + move a0,@ballpnumscored + move a0,@balltmscored +;DJT Start + BSSX firstbskt ,16 + move a0,@firstbskt +;DJT End + + move a0,*a13(ball_zsznum) + move a0,@bbshatter + movk 1,a0 + move a0,@ballfree ;Free + +; movk 3,a0 +; move a0,*a13(ball_numforfire) + + move *a8(OIMG),a0,L + move *a0(IANIOFFX),*a13(ball_anix) + + movk 1,a10 ;A10=Anim cntdn + + movi DIVS_RATE1,a0 + move a0,@scrl_divs_cur + movi DIVS_RATE2,a0 + move a0,@scrl_divs_dest + + move @WORLDTLX,a0,L + subi [WRLDMID-200,0],a0 + move a0,@gndx,L + + SLEEPK 4 ;Wait for others to establish data + + .if DEBUG + clr a0 + move a0,@#tmp_debounce + move a0,@#halt_ball + .endif + +;---------- +; main proc loop + +#lp + .if DEBUG + + .bss #tmp_debounce,16 + .bss #halt_ball,16 + .ref get_but_val_down + +;This is for halting the ball in midair - Allows checking blocks, rebound +;targeting, etc. + .if HEADCK + .else + jruc #no ;Take this out when testing blocks + .endif + + clr a0 + calla get_but_val_down + jrz #no + + move @#tmp_debounce,a14 + jrnz #held + + movk 1,a0 + move a0,@#tmp_debounce + + .if HEADCK + .ref game_start + clr a8 ;A8=Player # + movi P1DATA,a11 ;A11=*plyr data + jauc game_start + .endif + + move @#halt_ball,a0 + xori 1,a0 + move a0,@#halt_ball + jrz #held + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + jruc #held + +#no clr a0 + move a0,@#tmp_debounce +#held + + move @#halt_ball,a0 + jrnz #halted2 + .endif + move @HALT,a0 + + .if DEBUG + BSSX RIM_STEP,16 + jrz #nohalt + move @RIM_STEP,a14 + jrz #nohalt + .ref get_all_buttons_cur2 + .ref get_all_buttons_down2 + calla get_all_buttons_down2 + jrz #halted + clr a0 +#nohalt + + move a0,a0 + .endif + + jrnz #halted + + move @ballgoaltcnt,a0 ;Dec goal tend cnt if >0 + jrle #skipgt + subk 1,a0 + move a0,@ballgoaltcnt +#skipgt + +;---------- +; check if its time for ball on-fire effects + + move @plyr_onfire,a3 ;Get last plyr on-fire bits or 0 + + move @balltmscored,a1 ;Chk if a team is on-fire + jrn #notmfire ; br=no + move @balltmshotcnt,a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #notmfire ; br=no + + movk 2+1,a2 ;Set team 1 on-fire + move a1,a1 ;Was it team 1? + jrnz #chkownr ; br=yes + movk 8+4,a2 ;Set team 2 on-fire + jruc #chkownr + +#notmfire + clr a2 ;Set for no on-fire + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + jrn #chkhot ; br=no plyr on-fire + move @ballnumscored,a4 ;# times last plyr scored + +; move @fire_flags,a1 +; btst a0,a1 ;Been on-fire before? +; jrz #frstfire +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #notff +;#frstfire + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#notff + jrlt #chkhot ;Enough for on-fire? br=no + + movk 1,a2 ;Set new plyr on-fire + sll a0,a2 + +#chkownr + .if DUNKTST + jruc #chkhot ;When testing dunks - PUT IN! + .endif + + move @ballpnum,a1 + jrn #noownr + + btst a1,a3 ;Ball owner last plyr # on-fire? + jrz #chkhot ; br=no + jruc #hot ;Do smoke puffs + +; sll 5,a1 +; addi plyrproc_t,a1 +; move *a1,a1,L +; move *a1(plyr_seqflgs),a1 ;Chk owner ani seq +; btst DUNK_B,a1 ;Dunking? +; jrnz #hot ; br=yes, do smoke puffs +; jruc #chkhot ;No, holding or dribbling on-fire + + +#noownr + move @ballpnumlast,a1 ;Get last owner team # + srl 1,a1 + move a3,a14 ;Get last plyr # on-fire team # + sll 3,a14 + .ref pbit_tval + addi pbit_tval,a14,L + movb *a14,a14 + cmp a1,a14 ;On the same team? + jrnz #chkhot ; br=no, no smoke puffs + + move @ballpnumshot,a1 ;Last shooter=last plyr # on-fire? + btst a1,a3 + jrnz #hot ; br=yes, do smoke puffs + + move @ballprcv_p,a4,L ;Pass in progress? + jrz #chkhot ; br=no, no smoke puffs + move *a4(plyr_tmproc_p),a4,L ;Get passer *proc + move *a4(plyr_num),a4 ;Get passer plyr # + btst a4,a3 ;Passer plyr #=last plyr # on-fire? + jrz #chkhot ; br=no, no smoke puffs +#hot + .bss puffcnt,16 + move @puffcnt,a0 ;Do smoke puffs + subk 1,a0 + jrnn #nopuff + +;Reduce bog by not doing puffs when score plate is present... + move @tvpanelon,a14,L + jrnz #nopuff0 + CREATE0 ball_smokepuff +#nopuff0 + + + movk 3-1,a0 +#nopuff + move a0,@puffcnt + +;---------- +; do current ball on-fire status + +#chkhot + move a3,a0 ;Skip if someone is on-fire + jrnz #skip ; br=yes + move a2,a2 ;Did someone go on-fire? + jrz #skip ; br=no + + movi AUD_TM_FIRE,a0 ;>Audit team on-fires + move @ballnumscored,a14 ;Was it a team on-fire? + subk ONFIRE_MINCNT,a14 + jrn #aud ; br=yes + movi AUD_NUMHOTSTRK,a0 ;>Audit plyr on-fires + movk ONFIRE_MINCNT+1,a14 ;Set for # of on-fire shots to allow + move a14,@ballnumscored +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD1 +#noaud +; move @fire_flags,a14 ;Set plyr been on-fire bit +; or a2,a14 +; move a14,@fire_flags + + SOUND1 on_fire_sp + + movk 32,a0 ;Set bogus plyr # for ball not on-fire + move a2,@plyr_onfire ;Save new on-fire plyr bit val or 0 + +#skip + clr a14 ;0 for ball not on-fire +; movi -1,a4 ;Cause ani change + + move @ballpnum,a1 + jrnn #ck1 + move @ballpnumlast,a1 + jrn #setb +#ck1 + movk 1,a6 + sll a1,a6 + and a0,a6 + jrz #setb + movk 1,a14 ;!0 for ball on-fire +#setb + move a14,*a13(ball_onfire) +; move a4,*a13(ball_zsznum) ;Cause ani change + +;---------- +; check ball X coor limits + +;DJT Start + move *a8(OXPOS),a6 ;Add ani X to check ball center + move *a13(ball_anix),a14 + add a14,a6 + + move @ballpnum,a5 ;Ball owned? Yes if >=0 + jrge #zok + + move *a8(OXVEL),a1,L + cmpi LFTCRT_X,a6 ;Chk left X limit + jrlt #xlow + cmpi RGTCRT_X,a6 ;Chk right X limit + jrle #xok + + move a1,a1 + jrlt #xok + movi RGTCRT_X,a6 ;Too far. Pull it back & go 0 X vel + jruc #xbad +#xlow + move a1,a1 + jrp #xok + movi LFTCRT_X,a6 ;Too far. Pull it back & go 0 X vel +#xbad + .asg 5,PASSFUDGECNT + BSSX passfudge,16 + + move @ballprcv_p,a1,L + jrz #xnop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#xnop +;DJT End + move a6,a5 ;(OXPOS+anix) wants to remain in A6 + sub a14,a5 ;Adjust for ani X + move a5,*a8(OXPOS) + clr a1 + move a1,*a8(OXVEL),L ;Clr X vel +#xok + +;---------- +; check ball Z coor limits + +;DJT removed + move *a8(OZPOS),a0 ;No + move *a8(OZVEL),a1,L ;Chk vel for which limit to chk + jreq #zok ;No chk if not moving + jrgt #zvpos + + cmpi CZMIN,a0 ;Neg vel. Chk upper Z limit + jrge #zok + movi CZMIN,a0 ;Too far. Pull it back & go 0 Z vel + jruc #zbad + +#zvpos cmpi CZMAX-2,a0 ;Pos vel. Chk lower Z limit + jrlt #zok + movi CZMAX-2,a0 ;Too far. Pull it back & go 0 Z vel + +;DJT Start +#zbad + move @ballprcv_p,a1,L + jrz #znop + movk PASSFUDGECNT,a1 + move a1,@passfudge +#znop +;DJT End + move a0,*a8(OZPOS) + clr a1 + move a1,*a8(OZVEL),L ;Clr Z vel +#zok ;(ballpnum) wants to remain in A5 + +;---------- +; check for anim kill & a basket + + move a5,a5 ;Ball owned? No if <0 + jrn #no_own + + clr a14 ;Yes. Clr pass timer + move a14,@ballpasstime + move *a13(ball_onfire),a14 ;On fire? + jrnz #scroll + movk 2,a10 ;No. Keep ball from animating + jruc #scroll + +#no_own move @ballprcv_p,a5,L ;No owner. Passing? + jrnz #skpcol + callr ball_bbcollision ;No. Chk for a basket +#skpcol + move @ballpasstime,a0 ;Shot or pass, inc pass timer + addk 1,a0 + move a0,@ballpasstime + +;---------- +; do world-scroll X + +#scroll + move @inbound,a0 ;Doing an inbound? + jrn #not_inbounding +#dunking + jrnz #ib_rgt + movi [WRLDMID-200-MAX_VIEW1,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt + movi [WRLDMID-200+MAX_VIEW1,0],a3 ;TARGX = rgt side limit +#do_ib + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #do_scroll + +#not_inbounding + movi DIVS_RATE2,a0 ;Set default target rate + move a0,@scrl_divs_dest + + move @ballpnum,a5 ;Ball owned? + jrnn #plyr_has_ball + move a6,a3 ;No. TARGX = ball X + move @ballprcv_p,a0,L ;Passing? No if 0 + jrz #not_passing + move @ballpnumlast,a5 ;Yes or was. Still is or loose? + jrn #not_passing + + movi DIVS_RATE3,a0 ;Pass. Set new target rate + move a0,@scrl_divs_dest + move @plyrpasstype,a1 ;Normal or turbo pass? Normal if 0 + jrz #plyr_passed + move a0,@scrl_divs_cur ;Turbo. Set new current rate + jruc #plyr_passed + +#not_passing + move @ballpnumlast,a5 ;Not owned. Is it a shot or loose? + jrnn #plyr_shooting + movi -1,a0 ;Loose. Set for no team in control + move a0,@cntl_team + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + jruc #adj_targx + +#plyr_has_ball + move a5,a0 ;Owned (A5 = plyrpnum) + sll 5,a0 + addi plyrobj_t,a0 ;Get owner's OBJ ptr + move *a0,a0,L + move *a0(OXPOS),a3 + move *a0(OXANI+16),a1 + add a1,a3 ;TARGX = owner X + ani X offset +#plyr_passed ;(TARGX = ball X, A5 = plyrpnumlast) +#plyr_shooting ;(TARGX = ball X, A5 = plyrpnumlast) + move a5,a0 ;Set current team in control (0 or 1) + srl 1,a0 ; by who A5 is (owner or last owner) + move a0,@cntl_team + sll 5,a5 + addi plyrproc_t,a5 ;Get plyr PROC ptr + move *a5,a5,L + move *a5(plyr_seqflgs),a1 + btst DUNK_B,a1 ;Is it a dunk? No if 0 + jrz #not_dunking + subk 1,a0 ;Yes. Dec team control for condition + + + +;This causes the scroller to drift a little further than the end of the court. +;But not as far as an inbound pass. + jrnz #ib_rgt0 + movi [WRLDMID-200-MAX_VIEW1+20,0],a3 ;TARGX = lft side limit + jruc #do_ib +#ib_rgt0 + movi [WRLDMID-200+MAX_VIEW1-20,0],a3 ;TARGX = rgt side limit + jruc #do_ib +; jruc #dunking ; to select which side to scroll to + + + +#not_dunking + movi DIVS_DELTA,a0 ;Pass or jump/layup + move @scrl_divs_cur,a1 + move @scrl_divs_dest,a2 + cmp a1,a2 ;Need to accel cur to dest? + jreq #adj_targx + jrgt #add + sub a0,a1 ;Accelerate + cmp a1,a2 + jrle #set_divs + jruc #lim +#add + add a0,a1 ;Decelerate + cmp a1,a2 + jrge #set_divs +#lim + move a2,a1 +#set_divs + move a1,@scrl_divs_cur + +#adj_targx + move @cntl_team,a0 ;Adj TARGX to team in control + jrn #noteam ;Team 0 or 1 or no team if - + jrnz #adj_t1 + addi SCRL_EDGE_OFF*2,a3 ;2x to fall thru the SUBI +#adj_t1 + subi SCRL_EDGE_OFF,a3 + +#noteam + move @cntl_team,a0 ;Chk for turnover/loss of control + move @cntl_team_last,a1 + cmp a0,a1 + jreq #chk_targx + move a0,@cntl_team_last ;Whoever had it lost it + movi DIVS_RATE1,a0 ;Set new current rate + move a0,@scrl_divs_cur + +#chk_targx + cmpi WRLDMID-MAX_VIEW2,a3 ;Chk TARGX to lft MAX2 + jrge #trgx_ok1 + movi WRLDMID-MAX_VIEW2,a3 ;Too far. Set lft MAX2 + jruc #chk_cur +#trgx_ok1 + cmpi WRLDMID+MAX_VIEW2,a3 ;Chk TARGX to rgt MAX2 + jrle #trgx_ok2 + movi WRLDMID+MAX_VIEW2,a3 ;Too far. Set rgt MAX2 +#chk_cur + move @scrl_divs_cur,a0 + cmpi DIVS_RATE2,a0 + jrhs #trgx_ok2 + movi DIVS_RATE2,a0 + move a0,@scrl_divs_cur + move a0,@scrl_divs_dest +#trgx_ok2 + subi 200,a3 ;Adj TARGX to WORLDTLX + sll 16,a3 + +#do_scroll + move @scrl_divs_cur,a7 ;Do world-scroll X + move @WORLDTLX,a1,L + move a1,a5 + sub a3,a5 ;DIFFX=WORLDTLX-TARGX + jreq #no_scroll + jrlt #scr_rgt +#scr_lft + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + sub a5,a1 ; step + cmpi [WRLDMID-200-MAX_VIEW1,0],a1 ;Chk new X to lft MAX1 + jrle #no_scroll + jruc #scr_inb +#scr_rgt + abs a5 + subi [SCROLL_BUFFER,0],a5 ;No scroll if in "window" + jrle #no_scroll + divu a7,a5 ;DIFFX/scrl_divs_cur + sll 8,a5 ;Move to int portion & + add a5,a1 ; step + cmpi [WRLDMID-200+MAX_VIEW1,0],a1 ;Chk new X to rgt MAX1 + jrge #no_scroll +#scr_inb + move @inbound,a0 ;Go scroll if not inbounding (if neg) + jrn #scr_set + move @WORLDTLX,a0,L ;Inbounding + sub a1,a0 ;No scroll if the difference between + abs a0 ; old WORLDTLX & scrolled TLX is + cmpi INBND_MINX,a0 ; minimal + jrlt #no_scroll +#scr_set + move a1,@WORLDTLX,L ;Set new TLX + subi [WRLDMID-200,0],a1 + move a1,@gndx,L ;Set new ground-base X + +#no_scroll + +;---------- +; do world-scroll Y + + move *a8(OZPOS),a14 + cmpi CZMAX,a14 + jrlt #zin + movi CZMAX-1,a14 +#zin + subi CZMIN,a14 ;Sub min crt Z + sra 1,a14 ;YOFF=Z*3/8 + move a14,a0 + sra 2,a14 + sub a14,a0 ;TARGY=YOFF + movi YBUFF_NORM,a1 ;Set default buffer count + movk (-YRATE_NORM)&31,a2 ;Set default Y rate shift count + + move @ballpnum,a14 ;Ball owned? + jrn #no_owner ; br=not owned + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L ;Get owner *PROC + move *a14(plyr_seqflgs),a5 + btst PASS_B,a5 ;Is it a pass? + jrnz #no_yalt ; br=yes + btst DUNK_B,a5 ;Is it a dunk? + jrz #do_yalt ; br=no + + movi YBUFF_DUNK1,a1 ;Set buffer count + move *a14(plyr_seq),a5 ;Get dunk ani seq # + cmpi DUNKU2_SEQ,a5 ;Dunk that needs different buffering? + jrlt #do_yalt ; br=no + movi YBUFF_DUNK2,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt + +#no_owner + move @ballprcv_p,a14,L ;Passing? + jrz #free ; br=no + move *a14(plyr_rcvpass),a3 ;Is or was. Missed? + jrle #free ; br=yes + + move *a14(plyr_seq),a3 ;Pass in progress + cmpi ALLEYOOP1_SEQ,a3 ;Is it an oop? + jrlo #no_oop + cmpi ALLEYOOP14_SEQ,a3 ;Is it an oop? + jrls #ys_yalt ;br=no +#no_oop + cmpi DDUNK_RECV_SEQ,a3 + jrne #no_yalt ; br=no +#ys_yalt + movi YBUFF_ALLEY,a1 ;Set buffer count + movk (-YRATE_SLOW)&31,a2 ;Set Y rate shift count + jruc #do_yalt +#free + .if DEBUG + .asg 0,YALTOFF ;Scroller Y offset for debug + .else + .asg 0,YALTOFF ;Always 0! + .endif + + .if VSCR_CNT + move @ballshotinair,a14 ;Shooter # if shot in air, else -1 + jrnn #do_yalt ; br=shot in the air + cmpi GNDI_H-VSCR_CNT-YALTOFF,a0 + jrle #do_yalt + subi GNDI_H,a0 + jruc #chk_trgy ;Go scroll up + .endif + +#do_yalt + move *a8(OYPOS),a14 + add a14,a0 ;TARGY+=BallAltitude +#no_yalt + add a1,a0 ;Add buffer count to TARGY + cmpi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + jrlt #chk_trgy ;Did it go pos? 0 it if so + movi -VSCR_CNT-CLIP_CNT-YALTOFF,a0 + +#chk_trgy + move @WORLDTLY+16,a1 ;Int part of WORLDTLY + sub a1,a0 ;DIFFY=TARGY-WORLDTLY + jreq #wy_skip + sra a2,a0 ;Shift-div DIFFY to calc step + jrnz #wy_sok ;Don't allow step of 0 + addk 1,a0 +#wy_sok + add a0,a1 ;Step WORLDTLY + cmpi YMIN_VIEW,a1 ;In allowed range? + jrge #wy_set + movi YMIN_VIEW,a1 +#wy_set + move a1,@WORLDTLY+16 ;Set new TLY + + .asg -80,YBUFF_BOX + .ref crbox1_p ;sky box, all + + move @pup_court,a14 ;No skybox to scroll if outside + jrnz #wy_skip + neg a1 + addi YBUFF_BOX,a1 + jrgt #chk_boxy + move @off_boxy,a0 + jrz #wy_skip + clr a1 + jruc #do_boxy +#chk_boxy + move a1,a0 + sra 3,a1 ;Take frac of Y diff (3/32) + sra 5,a0 + sub a0,a1 + move @off_boxy,a0 +#do_boxy + sub a1,a0 + jreq #wy_skip + move a1,@off_boxy + movi crbox1_p,a3 ;sky box, all + movk 5,a5 +#boxy + move *a3+,a2,L + move *a2(OYPOS),a14 + sub a0,a14 + move a14,*a2(OYPOS) + dsj a5,#boxy + +#wy_skip + +;---------- + + .ref do_ball_ani + calla do_ball_ani + +;---------- +; check ball Y coor bounce + + move *a8(OYVEL),a2,L + move *a8(OYPOS),a1 + move *a13(ball_aniy),a3 + add a3,a1 +; +; cmpi HOOPY-10,a1 ;TEMP!!! Floats ball +; + jrlt #agnd ;Above gnd? br=yes + + movi -1,a0 + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + clr a0 + calla plyr_setshtdly + + cmpi >7f00,a2 ;>4000 + jrlt #nosnd + + movi dribble3_snd,a0,L + move @pup_court,a14 + jrnz #ply1 ;br=outdoor court + movi dribble_snd,a0,L +#ply1 calla snd_play1 +#nosnd + neg a3 +; +; addi HOOPY-10,A3 ;TEMP!!! Floats ball +; + move a3,*a8(OYPOS) ;Set on gnd + neg a2 + move a2,a3 ;Take 1/4 off YVEL + sra 2,a3 + sub a3,a2 +;; move @ballpnum,a0 ;Plyr # who owns (0-3) or Neg +;; jrnn #agnd ; br=owned, dribbling +;; sra 1,a3 ;Take another 1/8 off YVEL +;; sub a3,a2 +#agnd + addi GRAVB,a2 + move a2,*a8(OYVEL),L + + move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow + move *a8(OXANI),*a9(OXANI),L + move *a8(OZPOS),a0 + subk 10,a0 ;Adjust + move a0,*a9(OZPOS) + +#halted2 +;Did ball just hit the rim? If yes, skip collisions! +;I hope this variable never gets thrashed! + move @in_cylinder,a0 + jrnz #halted + callr ball_chkpcollide + +#halted + SLOOP 1,#lp + + +******************************** +* Get shadow obj for ball +* A8=*Obj +* >A9=*Shadow obj +* Trashes scratch, A2-A7 + + SUBRP ball_getshadow + + PUSH a8 + + move *a8(OXVAL),a0,L + movi [-2,0],a1 + movi ballshad5,a2 + move *a8(OZPOS),a3 + subk 10,a3 ;Z + move *a8(OCTRL),a4 + andi M_FLIPH|M_FLIPV,a4 + ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,a9 + movk 10,a0 + move a0,*a8(OMISC) ;Z offset + + PULL a8 + rets + + +#******************************* +* Check ball for collisions with backboard/hoop +* A6=Ball ani XPOS +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, B2-B3 + + SUBRP ball_bbcollision + + PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11 + + move *a8(OYPOS),a7 ;A7=Ball Y + move *a8(OSIZEY),a14 + srl 1,a14 + add a14,a7 ;=Ball center Y + + .if DEBUG + move @RIM_STEP,a0 + jrz #ttt2 + clr a14 + cmpi HOOPY+20,a7 + jrge #ttt1 + move *a8(OZPOS),a0 + movi CZMID,A1 + sub a1,a0 + abs a0 + cmpi 20,a0 + jrge #ttt1 + movi HOOPLX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt0 + movk 4,a14 +#ttt0 + movi HOOPRX,a0 + sub a6,a0 + abs a0 + cmpi 24,a0 + jrhi #ttt1 + movk 4,a14 +#ttt1 + .ref slowmotion + .ref pup_notag + move a14,@slowmotion + movk 15,a14 + move a14,@pup_notag +#ttt2 + .endif + + cmpi HOOPY+20,a7 ;Below all collision pts? Yes if >= + jrge #x + + clr b2 ;B2=Rim collision flag + + move @shot_distance,a14 + cmpi >150*DIST_ADDITION,a14 ;!!!Close or far shot? + jrlt #ok + + move @ballscorezhit,a0 ;Far, but have we hit 1st score zone? + jrp #ok ; br=yes, continue score detect + + movi 200,a0 ;!!!Far. Set long odds + cmpi >1c0*DIST_ADDITION,a14 ;!!!How far? + jrlt #far + movi 20,a0 ;!!!Very far. Set longer odds +#far + move @game_time,a1,L + cmpi >400,a1 ;!!!Improve odds if qrtr almost over + jrgt #nohelp + addi 150,a0 ;!!! +#nohelp + calla RNDPER ;Scoreable or unscoreable? + jrhi #ok + movi lhoopl_t,a10 ;Set ptr for unscoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi lhoopr_t,a10 + movi HOOPRX,b3 + jruc #left +#ok + movi hoopl_t,a10 ;Set ptr for scoreable hoop + movi HOOPLX,b3 ;B3=Hoop X + cmpi WRLDMID,a6 + jrlt #left + movi hoopr_t,a10 + movi HOOPRX,b3 +#left + move *a8(OZPOS),a5 ;A5=Ball Z + move @ballscorezhit,a0 ;Haven't scored? No if >= + jrge #chkpts + + move *a8(OZVEL),a0,L ;Yes. Slow XYZ vels + sra 1,a0 + move a0,*a8(OZVEL),L ;=-1/2 ZVEL + + move *a8(OYVEL),a0,L + move a0,a14 + sra 2,a14 + sub a14,a0 + move a0,*a8(OYVEL),L ;=-1/4 YVEL + + move a6,a0 ;Pull ball toward hoop center X + move b3,a14 + sub a14,a0 ;=BALLX-HOOPX + sll 16-4,a0 ;XVELPULLCTR=(INT:FRC)/16 + + move *a8(OXVEL),a1,L + sub a0,a1 ;=XVEL-XVELPULLCTR + move a1,a14 + sra 2,a14 + sub a14,a1 + move a1,*a8(OXVEL),L ;=-1/4 XVEL + + jruc #chkbb + +;---------- +; Top of rim pt chk loop + +#lp + move *a10+,a3 ;Rim Y + move *a10+,a4 ;Rim Z + move *a10+,a11 ;Rim zone # + sub a6,a2 + sub a7,a3 + sub a5,a4 + abs a2 + abs a3 + abs a4 + + .asg 4,DX_RNG ;!!! + .asg 4,DY_RNG ;!!! + .asg 4,DZ_RNG ;!!! + .asg 5,MAX_RNG ;!!! + + cmpi DX_RNG,a2 + jrgt #nxt + cmpi DY_RNG,a3 + jrgt #nxt + cmpi DZ_RNG,a4 + jrgt #nxt + + cmp a3,a2 ;Sort A10,A12,A13 to most,mid,least + jrge #20 + SWAP a2,a3 +#20 + cmp a4,a3 + jrge #sorted + SWAP a3,a4 + + cmp a3,a2 + jrge #sorted + SWAP a2,a3 +#sorted + srl 1,a3 ;1/2 of delta mid + srl 2,a4 ;1/4 of delta least + add a3,a2 ;Sum the deltas + add a4,a2 + subk MAX_RNG,a2 ;Too far? Yes if > + jrgt #nxt + + move @sc_proc,a0,L ;No. Any shot clock going? + jrz #no24clock +;; move *a0(PROCID),a14 +;; cmpi clockid,a14 +;; jrz #cont +;; LOCKUP +;;#cont + clr a14 ;Yes. Clr so we don't do this again + move a14,@sc_proc,L + PUSH a7,a10 ;Go turn it off + movi sclockx,a7 + movi clockid,a1 + move *a0(PA10),a10,L + calla XFERPROC + PULL a7,a10 +#no24clock + clr a0 + move a0,@ballgoaltcnt + + movi 3*60+30,a0 ;!!!Set Rebound stat time limit + move a0,@rebound_delay + + movi -1,a0 ;Tell shot clock ball has no owner + move a0,@ballsclastp + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + + move a11,a11 ;Scoreable? Yes if <= + jrle #notrim + + .if DEBUG + move @RIM_STEP,a0 + jrz #nobprs + calla get_all_buttons_cur2 + andi 2020202h,a0 + jrz #nobp + movk 1,a0 + move a0,@HALT + jruc #x +#nobp + clr a0 + move a0,@HALT +#nobprs + .endif + + move @ballrimhitcnt,a0 ;No. Already hit the rim? Yes if !0 + jrnz #skipit + + PUSH a0,a7,a11 ;No + + +;To disallow people from swatting (or rebounding) ball off of rim, we will +;ignore ball collisions for x ticks after the first rim hit.... +;Yikes! + movk 12,a0 + move a0,@in_cylinder + +;Disallow slap rejection of ball within 120 ticks - rejection art will +;glitch into rebound art within this time limit... + movi 120,a0 + move a0,@must_rebound + + + + move @ballpnumshot,a0 ;Set ptr to shooter brick cnt + sll 4,a0 + addi brick_count,a0 + move *a0,a1 ;Inc brick cnt (in case it is one?) + inc a1 + move a1,*a0 + move b3,a11 ;A11=Hoop X + CREATE NOG_PID,no_good_check ;Let it say "No good" (if it is?) + PULL a0,a7,a11 +#skipit + addk 1,a0 ;Inc rim hit cnt + move a0,@ballrimhitcnt + + move b2,b2 ;Hit already? Yes if !0 + jrnz #not1st + + addk 1,b2 ;No. Set hit flag + cmpi 2,a11 ;Hit in a rim-bend zone? No if < + jrlt #nobend + clr a0 ;Yes. Do rim bend anim + move @rimlf,a1,L ;Assume doing lft hoop + cmpi WRLDMID,a6 ;Bend lft or rgt rim? Lft if < + jrlt #netani + movk 1,a0 ;Set for rgt hoop + move @rimrf,a1,L +#netani + move *a1(OIMG),a1,L ;Deref *obj + cmpi FLAME_F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + cmpi FLAME2F_13,a1,L ;Is it burnt hoop img? Yes if = + jreq #nobend + movk NET_MISS_CLOSE,a1 ;No, we can bend it + move @shot_distance,a14 + cmpi 300*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #nani + movk NET_MISS_FAR,a1 +#nani + calla net_ani +#nobend + move @pup_court,a0 + jrz #indrct ;br=indoor court! + SOUND1 miss5_snd + jruc #not1st +#indrct + move @PCNT,a0 ;Do rnd rim-bounce sound + sll 32-2,a0 ; (choose 1 of 4 possible) + srl 32-2-5,a0 + addi rim_snds,a0 + move *a0,a0,L + calla snd_play1 + +#not1st + PUSH A5,A6,A7,A11,A12,A13 ;Move ball back out of rim detection + sll 16,a6 + sll 16,a7 ;A7=Y:0 + sll 16,a5 + move a6,a9 ;A9=X:0 + move a5,a11 ;A11=Z:0 + + movk OXVEL,a0 + add a8,a0 + mmfm a0,a6,a5,a4,a3,a2,a1 ;Get VELs & VALs (X,Y,Z,X,Y,Z) + movx a3,a9 ;Copy VAL fracs to ball detect POSs + movx a2,a7 + movx a1,a11 + + .bss ballrimhit_x,32 + .bss ballrimhit_y,32 + .bss ballrimhit_z,32 + + move a9,@ballrimhit_x,L + move a7,@ballrimhit_y,L + move a11,@ballrimhit_z,L + cmpi 1,b2 ;Hit already? Yes if > + jrls #yes1st ; br=no + PULL A5,A6,A7,A11,A12,A13 + jruc #notstk +#yes1st + sra 4,a6 ;!!!Take frac of VELs + sra 4,a5 ;!!! + sra 4,a4 ;!!! + + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a0 ; to calc detection deltas + sll 16,a0 + sub a0,a9 ;=dX + move *a10+,a0 + sll 16,a0 + sub a0,a7 ;=dY + move *a10+,a0 + sll 16,a0 + sub a0,a11 ;=dZ + addk 16,a10 +#velstep + sub a6,a3 ;Step back the ball + sub a5,a2 + sub a4,a1 + sub a6,a9 ;Step back the deltas + sub a5,a7 + sub a4,a11 + move a9,a12 ;Get abs of delta integers + abs a12 + srl 16,a12 + move a7,a13 + abs a13 + srl 16,a13 + move a11,a14 + abs a14 + srl 16,a14 + + cmpi DX_RNG,a12 + jrgt #velset + cmpi DY_RNG,a13 + jrgt #velset + cmpi DZ_RNG,a14 + jrgt #velset + + cmp a13,a12 ;Sort A12,A13,A14 to most,mid,least + jrge #30 + SWAP a12,a13 +#30 + cmp a14,a13 + jrge #velsort + SWAP a13,a14 + + cmp a13,a12 + jrge #velsort + SWAP a12,a13 +#velsort + srl 1,a13 ;1/2 of delta mid + srl 2,a14 ;1/4 of delta least + add a13,a12 ;Sum the deltas + add a14,a12 + subk MAX_RNG,a12 ;Too far? No if <= + jrle #velstep +#velset + move a5,a5 ;Keep steping if ball Y has still + jrnn #posyv ; stepped over the collision pt Y + move a7,a7 + jrn #velstep + jruc #velst +#posyv + move a7,a7 + jrnn #velstep +#velst + move a3,*a8(OXVAL),L + move a2,*a8(OYVAL),L + move a1,*a8(OZVAL),L + PULL A5,A6,A7,A11,A12,A13 + + move *a13(ball_collcnt),a1 ;Might ball be stuck? + subk 3,a1 ;!!!No if < + jrlt #notstk + callr ball_stuck ;Go try unstick & + jruc #limvels ; exit detect loop + +#notstk + subi 4*16,a10 ;Retrieve coords we detected against + move *a10+,a2 ; for deflection + move *a10+,a3 + move *a10+,a4 + addk 16,a10 + callr ball_deflect + jruc #limvels ; exit detect loop +; jruc #nxt ;Go chk next pt + +#notrim + callr ball_score ;Score if really a basket + move @ballscorezhit,a0 ;Did it score? + jrn #limvels ; br=yes + +#chkpts +#nxt + move *a10+,a2 ;Rim X + jrnz #lp ;End of table? No if !0 + +;---------- +; Do velocity limits + +#limvels + move b2,a1 ;Chk consecutive rim collisions + jrz #svcol ;Hit rim this time? br=no, reset cnt + move *a13(ball_collcnt),a1 ;Inc consecutive cnt + addk 1,a1 +#svcol + move a1,*a13(ball_collcnt) + jrz #chkbb ;No rim collision? br=no + + move *a8(OXVEL),a2,L ;Yes. Limit max X&Z VEL + move *a8(OZVEL),a3,L + move *a8(OYVEL),a4,L + move a4,a14 + sra 8,a14 ;=YVEL/256 + move a2,a0 + move a3,a1 + abs a0 ;=abs(XVEL) + abs a1 ;=abs(ZVEL) + cmp a0,a1 ;Make A1 whichever is faster, X|Z + jrge #sclvlp + move a0,a1 +#sclvlp + cmpi >18000,a1 ;>12000;!!!X|Z VEL within max? Yes if < + jrle #chkyv + srl 1,a1 ;Shift down X&Z + sra 1,a2 + sra 1,a3 + add a14,a4 ;Bump Y fractionally + jruc #sclvlp +#chkyv + move a2,*a8(OXVEL),L ;Store back (new) X&Z vels + move a3,*a8(OZVEL),L + + cmpi ->44000,a4 ;!!!Limit max up YVEL + jrge #yupok + movi ->44000,a4 ;!!! +#yupok + cmpi >30000,a4 ;!!!Limit max dn YVEL + jrle #ydnok + movi >30000,a4 ;!!! +#ydnok + move a4,*a8(OYVEL),L ;Store back (new) Y vel + +;---------- +; Detect backboard + + .asg 4,BBRD_X_BC ;# frac bits to keep in XVAL detect + .asg 4,BBRD_X_DEPTH ;# frac bits to keep in XVAL detect + +#chkbb + subi BBRD_Z,a5 ;Chk Z + move a5,a2 + abs a2 + cmpi BBRD_ZWID/2,a2 + jrgt #x + subi BBRD_Y-BBRD_YWID/2,a7 ;Chk Y + abs a7 + cmpi BBRD_YWID/2,a7 + jrgt #x + move *a8(OXVAL),a6,L ;Add ani X to check ball center + move *a13(ball_anix),a14 + sll 16,a14 + add a14,a6 + subi [WRLDMID,0],a6,L ;Chk X + move a6,a2 + abs a6 + sra 16-BBRD_X_BC,a6 +;; sub a5,a6 ;Fudge with (now 3/32) Z offset from +;; sra 1,a5 ; bbrd ctr to retard/advance X detect +;; sub a5,a6 + cmpi BBRD_X << BBRD_X_BC,a6 + jrlt #x + + movi -1,a0 ;Detect + move a0,@ballshotinair ;Shooter # if shot in air, else -1 + move *a8(OXVEL),a0,L ;Make sure ball continues + abs a0 ; towards ctr crt + move a0,a1 ;Slow down XVEL + srl 2,a1 ;-25% + sub a1,a0 + move a2,a2 + jrn #lbb ;Lft bbrd? Yes if - + neg a0 +#lbb + move a0,*a8(OXVEL),L + move *a8(OXVAL),a1,L ;Give XVAL a quick kick in new dir + add a0,a1 + add a0,a1 + move a1,*a8(OXVAL),L + + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #softbbhit + movi hitbkbd_snd,a0,L + move @pup_court,a14 + jrz #indr ;br=indoor court + movi hitbkbd2_snd,a0,L +#indr calla snd_play1 +#softbbhit + .ref backbrd_hit_speech + CREATE0 backbrd_hit_speech + move @ballbbhitcnt,a0 + addk 1,a0 + move a0,@ballbbhitcnt + + subk 7,a0 ;!!! Stuck on bbrd? No if < + jrlt #x + movi >20000,a0 ;!!! ZVEL(!) to kick it from bbrd + move *a8(OZPOS),a1 + cmpi CZMID,a1 ;Kick it which way? Out if > + jrgt #newzv + neg a0 ;In +#newzv + move a0,*a8(OZVEL),L ;Try to unstick + +#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11 + rets + + + .asg HOOPLX,X + .asg HOOPY,Y + .asg CZMID,Z +hoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X+1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X-1 ,Y+6 ,Z ,-2 + + .word X+3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X-3 ,Y+8 ,Z ,-2 + .word 0 + + .asg HOOPRX,X +hoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X ,Y ,Z ,-1 ;Score spots + .word X ,Y+3 ,Z ,-1 + + .word X-1 ,Y+6 ,Z ,-2 + .word X ,Y+6 ,Z-1 ,-2 + .word X ,Y+6 ,Z+1 ,-2 + .word X+1 ,Y+6 ,Z ,-2 + + .word X-3 ,Y+8 ,Z ,-2 + .word X ,Y+8 ,Z-3 ,-2 + .word X ,Y+8 ,Z+3 ,-2 + .word X+3 ,Y+8 ,Z ,-2 + .word 0 + + +;-------------------- +; Long range shot tables; no score pts + + .asg HOOPLX,X +lhoopl_t + .word X+8 ,Y ,Z ,4 ;Rim + .word X+6 ,Y ,Z-6 ,3 + .word X+6 ,Y ,Z+6 ,3 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X-6 ,Y ,Z-6 ,1 + .word X-6 ,Y ,Z+6 ,1 + .word X-8 ,Y ,Z ,1 + + .word X+4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X-4 ,Y ,Z ,1 + + .word 0 + + .asg HOOPRX,X +lhoopr_t + .word X-8 ,Y ,Z ,4 ;Rim + .word X-6 ,Y ,Z-6 ,3 + .word X-6 ,Y ,Z+6 ,3 + .word X-3 ,Y ,Z-8 ,1 + .word X-3 ,Y ,Z+8 ,1 + .word X ,Y ,Z-9 ,2 + .word X ,Y ,Z+9 ,2 + .word X+3 ,Y ,Z-8 ,1 + .word X+3 ,Y ,Z+8 ,1 + .word X+6 ,Y ,Z-6 ,1 + .word X+6 ,Y ,Z+6 ,1 + .word X+8 ,Y ,Z ,1 + + .word X-4 ,Y ,Z ,3 ;No-score spots + .word X ,Y ,Z-4 ,2 + .word X ,Y ,Z ,2 + .word X ,Y ,Z+4 ,2 + .word X+4 ,Y ,Z ,1 + + .word 0 + +rim_snds + .long miss1_snd,miss4_snd,miss2_snd,miss3_snd + + +#******************************* +* Deflect ball from what it hit +* A2=Hit X +* A3=Hit Y +* A4=Hit Z +* ballrimhit_x=ball ctr X @ hit +* ballrimhit_y=ball ctr Y @ hit +* ballrimhit_z=ball ctr Z @ hit +* A8=*Ball obj +* A13=*Ball process +* Trashes scratch, A0-A4 + +;LOOK!!! + SUBRP ball_deflect + + PUSH a5,a6,a7,a9,a10,a11 + + move @ballrimhit_x,a6,L + move @ballrimhit_y,a7,L + move @ballrimhit_z,a5,L + move *a8(OXVEL),a14,L + sub a14,a6 + move *a8(OYVEL),a14,L + sub a14,a7 + move *a8(OZVEL),a14,L + sub a14,a5 + +;; move *a8(OXVAL),a6,L +;; move *a8(OYVAL),a7,L +;; move *a8(OZVAL),a5,L +;; +;; move *a13(ball_anix),a14 ;Add ani X to check ball center +;; sll 16,a14 +;; add a14,a6 +;; +;; move *a8(OSIZEY),a14 +;; sll 16-1,a14 ;Shf up -1 to divide SIZEY in half +;; add a14,a7 ;=Ball center Y + + sll 16,a2 + sll 16,a3 + sll 16,a4 + +;; sra 12,a5 +;; sra 12,a6 +;; sra 12,a7 +;; sll 4,a2 +;; sll 4,a3 +;; sll 4,a4 +;;; sll 4,a5 +;;; sll 4,a6 +;;; sll 4,a7 + + PUSH a2,a3,a6,a7 + + move a6,a0 ;>Deflect XZ + move a5,a1 + move a2,a6 + move a4,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OZVEL),a9,L + sra 1,a3 ;Shf to avoid mpy overflows + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Z + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OZVEL),L + + PULL a2,a3,a6,a7 + + move a6,a0 ;>Deflect XY + move a7,a1 + move a2,a6 + move a3,a7 + callr seekdir_xyxy128 + move a0,a14 + neg a0 + addi >80,a0 + callr sinecos_get + + move *a8(OXVEL),a3,L + move *a8(OYVEL),a9,L + sra 1,a3 + sra 1,a9 + + move a3,a5 ;>Rotate to 0 + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + neg a9 ;Neg Y + + move a14,a0 + callr sinecos_get + + move a3,a5 ;>Rotate back + move a9,a11 + mpys a1,a3 ;X*COS + mpys a0,a11 ;Z*SIN + sub a11,a3 ;X-Z + mpys a0,a5 ;X*SIN + mpys a1,a9 ;Z*COS + add a5,a9 ;X+Z + sra 12,a3 + sra 12,a9 + + sla 1,a3 + sla 1,a9 + move a3,*a8(OXVEL),L + move a9,*a8(OYVEL),L + + PULL a5,a6,a7,a9,a10,a11 + rets + + +#******************************* +* Ball stuck on rim, try to unstick +* A8=*Ball obj +* B3=Hoop X +* Trashes scratch, A2,A3 + + SUBRP ball_stuck + + PUSH a4,a5,a6,a7 + + move *a8(OIMG),a4,L + move *a8(OXANI+16),a5 + move *a4(IANIOFFX),a0 + move a0,*a8(OXANI+16) + + move b3,a6 ;>Give vel towards or away from center + movi CZMID,a7 + callr seekdirdist_obxz128 + + move a5,*a8(OXANI+16) + + srl 3,a0 ;Dir 0-15 + sll 4,a0 ;*16 + addi #dx_t,a0 + move *a0,a2 + move *a0(#dz_t-#dx_t),a3 + subk 10,a1 + jrle #tcent ;Towards center? + neg a2 + neg a3 + sra 1,a2 ;/2 + sra 1,a3 +#tcent + sll 3,a2 ;*8 + sll 3,a3 + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + move *a8(OXVAL),a0,L + add a2,a0 + move a0,*a8(OXVAL),L + move *a8(OZVAL),a0,L + add a3,a0 + move a0,*a8(OZVAL),L + + move @HCOUNT,a14 + btst 0,a14 + jrz #noyvc ;Skip yvel change? + + movi -GRAVB*7,a1 + move *a8(OYPOS),a0 + cmpi HOOPY+6,a0 + jrlt #abv ;Ball above rim? + neg a1 +#abv move a1,*a8(OYVEL),L + +#noyvc + clr a1 + move a1,*a13(ball_collcnt) + + PULL a4,a5,a6,a7 + rets + + +#dz_t + .word -16384,-15137,-11585,-6270 +#dx_t + .word 0,6270,11585,15137,16384,15137,11585,6270 + .word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270 + + +#******************************* +* Ball touching score zone, score if valid +* A8=*Ball obj +* A11=-1/-2 (upper spot / lower spot) +* Trashes scratch + + SUBRP ball_score + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + + move *a8(OYVEL),a0,L + jrle #x ;Moving up? + + addk 1,a11 + jrne #low + + movk 1,a0 ;Upper zone hit + move a0,@ballscorezhit + jruc #x + +#low + move @ballscorezhit,a0 + jrle #x ;No top hit? + + movi -1,a0 + move a0,@ballscorezhit + + movi NOG_PID,a0 ;kill no good process + calla KIL1C + + move @ballptsforshot,a1 + jrz #x ;Goaltending? + + clr a10 + + movk 16,a0 ;Team 2 + clr a2 + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #left + clr a0 ;Team 1 + movk 32,a2 +#left + addi scores,a0 ;+Base + move @ballptsforshot,a1 + move a1,a3 + calla score_add + + clr a0 + move a0,@rebound_delay + + callr plyr_setptsdown + + movk PS_2PTS_MADE,a0 ;>Inc made shot stat + subk 2,a3 + jrz #2ptr + movk PS_3PTS_MADE,a0 +#2ptr + move @ballpnumshot,a1 + calla inc_player_stat + +; calla scored_speech + calla prt_top_scores ;Update scores at scrn top + + CREATE0 score_showtvpanel + + move a2,a11 ;A11=who takes-out ball (0=1, !0=2) + + .if DUNKTST + .else + CREATE0 plyr_takeoutball ;When testing dunks - TAKE OUT! + .endif + + movi TSEC*1,a0 + calla plyr_setshtdly + + movi P1DATA,a10 + calla stick_number + movi P2DATA,a10 + calla stick_number + movi P3DATA,a10 + calla stick_number + movi P4DATA,a10 + calla stick_number + +;DJT Start +;---------- +; Do hotspot count + + move @ballpnumshot,a0 + move a0,a1 + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_hotspotf),a0 ;Chk hotspot jump flag + jrz #nohs ; br=not made from hotspot + sll 4,a1 + addi hotspot_count,a1 ;Inc hotspot shot cnt + move *a1,a0 + inc a0 + move a0,*a1 + subk HOTSPOT_MINCNT,a0 + jrne #nohs + .ref got_hspot_sp + SOUND1 got_hspot_sp +#nohs + +;DJT End +;---------- +; Do plyr on-fire logic + + move @ballpnumshot,a0 ;Get scoring plyr # + movi ballpnumscored,a3 + move *a3+,a1 ;Get last scoring plyr # + move *a3+,a4 ;Get # times last plyr scored + move *a3+,a5 ;Get last team-shot scored (0=tm2,32=tm1) + move *a3,a7 ;Get # times last team-shot scored +;DJT Start + + move @firstbskt,a14 + move a0,@firstbskt + jrnn #nodrnfr + + move a0,a14 ;Get opposition tNispro value + srl 1,a14 + sll 4,a14 + neg a14 + addi t1ispro+16,a14 + move *a14,a14 ;Are they pro or champ? + jrn #nodrnfr ; br=no + + move a0,a1 ;Set last scoring plyr # + movk ONFIRE_MINCNT-1,a4 ;Set # times last plyr scored + move a0,a5 ;Set last team-shot scored (0=tm2,32=tm1) + srl 1,a5 + subk 1,a5 + jrz #drnfr + movk 32,a5 +#drnfr + movk TMFIRE_MINCNT-1,a7 ;Set # times last team-shot scored +#nodrnfr +;DJT End + + move a0,a14 ;Clr scoring plyr brick cnt + sll 4,a14 + addi brick_count,a14 + clr a11 + move a11,*a14 + + move a0,a10 ;Get scoring plyr *proc + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move *a10(plyr_seq),a6 ;Get scoring plyr ani seq # + + movi AUD_ALLEYOOPS,a14 + cmpi ALLEYOOP1_SEQ,a6 ;Was it an oop? + jrlo #notoop + cmpi ALLEYOOP14_SEQ,a6 + jrls #yestmsht +#notoop + .ref was_alley_shot + move @was_alley_shot,a14 ;Still might have been! + jrz #fuckthis ; br=yes,was an alley-oop layup + movi AUD_ALLEYOOPS,a14 + jruc #yestmsht ; br=yes,was an alley-oop layup +#fuckthis + movi AUD_DBLE_DNKS,a14 + cmpi DDUNK_RECV_SEQ,a6 ;Was it a double dunk? +; jreq #yestmsht + jreq #yestmsht2 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrhs #ply1st ; br=yes + jruc #notmsht +#yestmsht + PUSH a0 + +;If I am a drone, and my teammate is a human, we end up allowing only +;3 per period. + +;NOTE: Double dunks do not count toward this maximum. + move *a10(plyr_alley_cnt),a0 ;3 successful drone alley oops/period + inc a0 + move a0,*a10(plyr_alley_cnt) + jruc #cont_oop +#yestmsht2 + PUSH a0 +#cont_oop + + move @GAMSTATE,a0 + cmpi INAMODE,a0 ;Don't audit if in attract + jrz #noaud + move a14,a0 + calla AUD1 +#noaud + PULL a0 + cmpi TMFIRE_MINCNT,a7 ;Is a team on-fire? + jrlo #notmfire ; br=no + cmp a5,a2 ;Same team as last time? + jreq #ply1st ; br=yes +#notmfire + addk 1,a7 ;Assume it is same team + cmp a5,a2 ;Same team as last time? + jreq #sametm ; br=yes +; move a2,a5 ;Set new last team-shot scored + movk 1,a7 ;Set new team-shot cnt + jruc #notm1 +#sametm + cmpi TMFIRE_MINCNT,a7 ;Did a team go on-fire? + jrlo #notmsht ; br=no + PUSH a0,a1,a7,a9 + move a5,a9 + .ref tmfire_timer + CREATE tmfireid,tmfire_timer + PULL a0,a1,a7,a9 + jruc #plyfireout + +#notmsht + cmp a5,a2 ;Same team as last time? + jreq #sametm1 ; br=yes + clr a7 ;Set new team-shot cnt +#notm1 + move a2,a5 ;Set new last team-shot scored + cmpi ONFIRE_MINCNT,a4 ;Was a plyr on-fire? + jrlt #ply1st ; br=no, set new 1st timer + jruc #plyfireout ;Go put out fire +#sametm1 + cmpi ONFIRE_MINCNT,a4 ;Last scoring plyr # on-fire? + jrge #sametm2 ; br=yes + cmp a1,a0 ;Same plyr as last time? + jrne #ply1st ; br=no + jruc #sameplr +#sametm2 + move @plyr_onfire,a14 + btst a0,a14 ;Is scoring plyr on-fire? + jrz #savefire ; br=no, teammate is on-fire +#sameplr + .if (DUNKTST==0)|(DUNKTST==2) + addk 1,a4 ;When testing dunks - TAKE OUT! + .endif + cmpi ONFIRE_MAXCNT,a4 ;Time to put out fire? + jrlt #savefire ; br=no + +#plyfireout + clr a1 ;Put out plyr on-fire + move a1,@plyr_onfire ;Save new on-fire bits +#ply1st + movk 1,a4 ;Set new # times last plyr scored + +#savefire + move a7,*a3 ;Save # times last team-shot scored + move a5,-*a3 ;Save last team-shot scored (0=tm2,32=tm1) + move a4,-*a3 ;Save # times last plyr scored + move a0,-*a3 ;Save last scoring plyr # + +;---------- +; Do a net animation + + move *a10(plyr_seqflgs),a6 ;Get plyr shot ani seq # + + move @pup_court,a0 + jrz #indrct2 ;br=indoor court! + movi dunk_snd5,a11,L + jruc #crt2 +#indrct2 + movk 3,a0 + calla rndrng0 + move a0,a11 + sll 5,a11 + addi dnk_snd_tbl,a11 + move *a11,a11,L +#crt2 + movk NET_DUNK,a1 ;Dunk netani # + btst DUNK_B,a6 ;Was it a dunk? Yes if !0 + jrnz #netani + + CREATE0 plyr_jscrowdsnd ;For good jump shot + + movk 3,a0 + calla rndrng0 + move @pup_court,a14 + jrz #indoor ;br=outdoor court + addk 4,a0 +#indoor + move a0,a11 + sll 5,a11 + addi swish_snd_tbl,a11 + move *a11,a11,L + movk NET_MIDZ_FAR,a0 ;Mid crt far netani # + movk NET_MIDZ_CLOSE,a1 ;Mid crt close netani # + move *a8(OXVEL),a14,L + move *a8(OZVEL),a4,L + abs a14 + abs a4 + cmp a4,a14 + jrgt #gotnet + movk NET_DEEPZ_FAR,a0 ;Deep Z far netani # + movk NET_DEEPZ_CLOSE,a1 ;Deep Z close netani # + move *a8(OZVEL),a4,L + jrnn #gotnet + movk NET_NEARZ_FAR,a0 ;Near Z far netani # + movk NET_NEARZ_CLOSE,a1 ;Near Z close netani # +#gotnet + move @shot_distance,a14 + cmpi 180*DIST_ADDITION,a14 ;!!!Shot close or far? + jrlt #rndani + move a0,a1 ;Use far netani # +#rndani + move @PCNT,a0 ;Choose one of the ani versions + sll 32-2,a0 + srl 32-31,a0 + add a0,a1 +#netani + move *a3(32),a4 ;Chk for team on-fire + cmp a2,a4 + jrnz #notmf ; br=not + move *a3(48),a4 ;Maybe. Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrnn #nethot ; br=yes, team on-fire +#notmf + move *a3(16),a4 ;Chk for plyr on-fire +; move *a3,a14 +; move @fire_flags,a0 +; btst a14,a0 +; jrz #nor2 +; subk ONFIRE_MINCNT+1,a4 ;# shots for on-fire if was before +; jruc #nor3 +;#nor2 + subk ONFIRE_MINCNT,a4 ;# shots for on-fire +;#nor3 + jrlt #nothot ;Enough for on-fire? br=no + move @plyr_onfire,a0 ;Is shooter the one on-fire? + jrz #nethot ; br=yes, just went on-fire + move *a3,a14 ;Maybe. Was he on-fire before? + btst a14,a0 + jrz #nothot +#nethot + .ref rim_fire_snd + movi rim_fire_snd,a11,L + movk NET_ONFIRE,a1 ;Burn netani # - all net +; move @ballrimhitcnt,a0 +; jrz #nothot + move @HCOUNT,a0 + srl 1,a0 + jrnc #hotshk + movk NET_ROLLINFIRE,a1 ;Burn netani # - off rim +#hotshk + PUSH a1,a6,a10,a11 + .ref SHAKER ;2 + movk 24,a10 + calla SHAKER ;2 + move *a3(48),a4 ;Chk shot cnt + subk TMFIRE_MINCNT,a4 + jrn #nosalt ; br=yes, team on-fire + .ref rim_salt + CREATE0 rim_salt +#nosalt + PULL a1,a6,a10,a11 +#nothot + move a2,a0 + calla net_ani ;Do net ani + + move a11,a0 + calla snd_play1 ;Do net sound + + +; .if 0 +; subk 2,a4 +; jrlt #cold ;The scorer is cold? +; movi heatup_snd,a0 +; subk 3-2,a4 +; jrlt #hsnd +; movi onfire_snd,a0 +;#hsnd +; move @ballpnumshot,a1 +; move @ballpnumscored,a14 +; cmp a1,a14 +; jrne #cold ;Teammates the hot one? +; calla snd_play1 +;#cold +; .endif + + + move *a8(OXVEL),a0,L ;>Slow XZ vel + sra 1,a0 + move a0,*a8(OXVEL),L + move *a8(OZVEL),a0,L + sra 1,a0 + move a0,*a8(OZVEL),L + + movi >14000,a0 ;!!!temp(?) + move a0,*a8(OYVEL),L + + btst DUNK_B,a6 + jrz #noshake ;!dunk? + btst LAYUP_B,a6 + jrnz #noshake ;!dunk? + + movk PS_DUNKS_MADE,a0 + move @ballpnumshot,a1 + move a1,a2 + calla inc_player_stat + srl 1,a2 ;0-1 + move a2,a3 + XORK 1,a2 ;Inbounding team (0-1) + + .if DUNKTST + .else + move a2,@inbound ;When testing dunks - TAKE OUT! + .endif + + movk 20,a10 + calla SHAKER ;2 + +;FIXX!!! TEMP!!! +; sll 4,a3 ;*16 +; addi t1dunkcnt,a3 +; move *a3,a0 +; addk 1,a0 +; jrnc #noshat ;No overflow? +; +; move *a10(plyr_seq),a0 +; movi #dunk_t,a1 +;#dlp move *a1+,a14 +; jrn #noshat2 ;End of table? +; cmp a14,a0 +; jrne #dlp ;Wimpy dunk? +; +; move @PSTATUS,a0 ;Plyr start bits 0-3 +; move @ballpnumshot,a1 +; btst a1,a0 +; jrz #noshat2 ;Drone? +; +; +; move @bbshatter,a0 ;Already happened +; jrnz #noshat2 +; +;; jruc #noshat2 ;THE NBA SUCKS! +; +; .ref gmqrtr +; move @gmqrtr,a0 +; cmpi 3,a0 +; jrlt #noshat2 +; +; move *a10(plyr_attrib_p),a0,L +; move *a0(PAT_DUNKSKILL),a0 +; cmpi 9,a0 +; jrlt #noshat2 +; +; clr a0 +; move a0,*a3 ;Reset cnt +; move a0,@t1dunkcnt +; move a0,@t2dunkcnt +; +; movk 32,a0 +; cmpi 2,a1 +; jrlt tm1 +;;Knock down team 1 +; move @plyrproc_t,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+32,a1,L +; move a0,*a1(plyr_stagcnt) +; jruc #doit +;tm1 +; move @plyrproc_t+64,a1,L +; move a0,*a1(plyr_stagcnt) +; move @plyrproc_t+96,a1,L +; move a0,*a1(plyr_stagcnt) +;#doit +; CREATE0 board_shatter +; movi HOOP_PID,a0 +; calla KIL1C +; move a2,a0 +; movk 5,a1 ;Big rim bend +; calla net_ani +; movk 18,a10 ;Big shake +; jruc #shake +;#noshat +; move a0,*a3 +;#noshat2 +; movk 24,a10 +;#shake calla SHAKER ;2 + +#noshake + + +; move @movieshown,a0 +;; jrnz #x +; jruc #x +; +; movk 7,a0 +; callr rnd +; jrnz #x +; +; movk 1,a0 +; move a0,@movieshown +; +; CREATE0 movie_test + + calla scored_speech + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +dnk_snd_tbl + .long dunk_snd2,dunk_snd4,dunk_snd3,dunk_snd1 + +swish_snd_tbl + .long swish_snd2,swish_snd3,swish_snd1,swish_snd2 + .long swish_snd4,swish_snd5,swish_snd6,swish_snd4,swish_snd5 + +#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ + .word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ + .word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ + .word DUNKP2_SEQ + .word DUNKP3_SEQ + .word DUNKR_SEQ + .word DUNKR2_SEQ + .word DUNKU2_SEQ + .word DUNKU3_SEQ + .word DUNKX_SEQ + .word DUNKX2_SEQ + .word DUNKX3_SEQ + .word DUNKY_SEQ + .word DUNKY2_SEQ + .word DUNKZ_SEQ + .word DUNKZ2_SEQ + .word DUNKZ3_SEQ + .word DUNKT2_SEQ + .word DUNKT3_SEQ + .word DUNKT4_SEQ + .word DUNKT_SEQ + .word DUNKU_SEQ + .word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ + .word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ + .word DUNKQ_SEQ + .word DUNKQ3_SEQ + .word DUNKO2_SEQ + .word DUNKW3_SEQ + .word DUNKW2_SEQ + .word DUNKW_SEQ + + .word -1 + + +******************************** +* Get sine and cosine +* A0=Angle (0-127) (Not neg!) +* >A0=Sine (0-4096) +* >A1=Cos (0-4096) +* Preserves A14 + + SUBR sinecos_get + + sll 32-7,a0 + srl 32-7-4,a0 ;*16 + addi sine_t,a0 + move *a0(cos_t-sine_t),a1 + move *a0,a0 + rets + +sine_t + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 +cos_t + .word 0,201,401,601,799,995,1189,1380 + .word 1567,1751,1931,2106,2275,2440,2598,2751 + .word 2896,3035,3166,3290,3406,3513,3612,3703 + .word 3784,3857,3920,3973,4017,4052,4076,4091 + + .word 4096,4091,4076,4052,4017,3973,3920,3857 + .word 3784,3703,3612,3513,3406,3290,3166,3035 + .word 2896,2751,2598,2440,2275,2106,1931,1751 + .word 1567,1380,1189,995,799,601,401,201 + + .word 0,-200,-401,-601,-799,-995,-1189,-1380 + .word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750 + .word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703 + .word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091 + + .word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857 + .word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035 + .word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751 + .word -1567,-1380,-1189,-995,-799,-601,-401,-201 + + + +#******************************* +* Check for ball collision with a player +* A8=*Ball obj +* Trashes scratch + + SUBR ball_chkpcollide + + PUSH a2,a3,a4,a5,a6,a7,a10,a11 + + movk NUMPLYRS,a7 + + move *a8(OXPOS),a4 + move *a8(OXANI+16),a14 + + + move *a8(OSIZEX),a6 + srl 1,a6 + add a6,a4 + sra 1,a14 + add a14,a4 ;A4=Center X + + + + move *a8(OZPOS),a6 ;A6=Z + movi plyrobj_t,a5 + +; Select Z-range for plyr collision per ball altitude/speed + movk 18,a10 ;A10=Z coll radius + move *a8(OYPOS),a0 + cmpi -28,a0 + jrlt #lp + move *a8(OYVEL),a0,L + abs a0 + cmpi >c000,a0 + jrgt #lp + movi 35,a10 ;Larger radius + +#lp move *a5+,a11,L + + move *a11(OPLINK),a2,L + move *a2(plyr_attrib_p),a2,L + move *a2(PAT_DEFSKILL),a2 + sll 4,a2 + subk 18,a10 + jrz #tbl1 + addi tbl2,a2 + jruc #tbo +#tbl1 + addi tbl1,a2 +#tbo move *a2,a10 + + move *a11(OZPOS),a2 ;>Chk Z + sub a6,a2 + abs a2 + sub a10,a2 + jrge #nxt + + move *a11(OXPOS),a1 ;>Chk box X + move *a11(OXANI+16),a14 + add a14,a1 + move *a11(OSIZEX),a14 + + srl 1,a14 ;/2 + + move a14,a3 + srl 2,a3 + sub a3,a14 + + sub a14,a1 + cmp a1,a4 + jrle #nxt ;Center X <= lft? + + sll 1,a14 + +; move a14,a3 +; srl 2,a3 +; add a3,a14 + + add a14,a1 + cmp a1,a4 + jrge #nxt ;Center X >= rgt? + + move *a11(OYPOS),a1 + move *a8(OYPOS),a0 + + +;DJT Start + + addk 3,a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_seq),a14 + + cmpi BLOCKREJ_SEQ,a14 + jrz #higher_bally + cmpi FASTBLOCKREJ_SEQ,a14 + jrnz #reg_bally + +#higher_bally + addi 20,a0 + +#reg_bally + + +; move *a11(OPLINK),a14,L +; move *a14(plyr_seq),a14 +;DJT End + cmpi RUNDRIBTURB_SEQ,a14 + jrhi #handhi ;Hand higher than shoulder? + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl3,a14 + move *a14,a14 + add a14,a0 + + +;TBL3 should get larger as def skill improves +;FIX!! +;DEBUG! +; addk 10,a0 ;Take out + + +#handhi cmp a1,a0 + jrlt #nxt ;Too hi? + + move *a11(OPLINK),a3,L + move *a3(plyr_shtdly),a14 + jrgt #nxt5 ;Can't touch? + + move @ballpnum,b0 ;a14 + jrn #ok + +;Ball is owned by someone + + sll 5,b0 ;a14 + addi plyrproc_t,b0 ;a14 + move *b0,b0,L ;a14,a14,L + move b0,a14 + cmp a14,a3 + jrz #skpz + move *b0(plyr_seqflgs),b0 ;a14 a6 + btst LAYUP_B,b0 + jrnz #guydunking + btst DUNK_B,b0 + jrnz #guydunking +#skpz + move *a14(plyr_seq),a14 + cmpi SHOOT_SEQ,a14 + jrnz #ok + jruc #nxt5 + +; .word 0,0,0,0,0,0,0,0,0,0,0,50/2,100/2,150/2,300/2,400/2 +; .word 500/2,600/2,700/2,800/2,999/2,999/2 + +; .word 0,0,0,0,0,0,0,0,0,0,0,100,200,300,600,800 +; .word 999,999,999,999,999,999 + +;DJT Start + .word 0,0,0,0,0,0,0,100,130,170 +tkdnk_t .word 200 + .word 300,400,600,800,800,999,999,999,999,999,999 + +#guydunking +;Guy with ball is dunking! + PUSH a0,a1,a2 + + move *a14(plyr_num),a2 ;A2=Plyr# of guy dunking + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a0 ;A0=Power of guy dunking + move @pup_maxpower,a1 + btst a2,a1 + jrz #nochng ; br=not max power + movk 9,a0 ;Max power! Can't take ball! +#nochng + move *a11(OPLINK),a14,L + move *a14(plyr_num),a2 ;A2=Plyr# of guy taking ball + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 ;A14=Power of guy taking ball + cmpi 4,a14 + jrle #nxt0z ; br=power can't take ball! + +;If taker is a drone team & dunker is a pro player, +; allow more blocked dunks! + + srl 1,a2 ;Start with plyr# 0 or 2 + sll 1,a2 + move @PSTATUS,a1 + btst a2,a1 + jrnz #notdrns ; br=not a drone + addk 1,a2 ;Chk plyr# 1 or 3 + btst a2,a1 + jrnz #notdrns ; br=teammate not a drone + srl 1,a2 + sll 4,a2 + neg a2 + addi t1ispro+16,a2,L ;Chk dunker team ispro + move *a2,a2 + jrnn #dnkpro ; br=dunker is a pro/champ +#notdrns + move @HCOUNT,a1 ;Cut blocked dunks in half! + btst 0,a1 + jrz #nxt0z ; br=no block +#dnkpro + sub a14,a0 ;A0=Dunkpwr-Takepwr; -10...10 + sll 4,a0 + addi tkdnk_t,a0,L + move *a0,a0 + jrz #ok0 + calla RNDPER + jrls #ok0 +#nxt0z ;3 power can't take ball! + PULL a0,a1,a2 + jruc #nxt ;To big, don't lose ball! +#ok0 + PULL a0,a1,a2 +;DJT End +#ok + move *a3(plyr_jmpcnt),a14 + jrle #ongnd + move *a3(plyr_aniy),a14 + add a14,a1 + sra 2,a14 ;/4 + sub a14,a1 ;75% down from top + cmp a1,a0 + jrge #nxt3 ;Ball too low? +#ongnd + + move *a3(plyr_seqflgs),a14 + btst BLOCKREB_B,a14 + jrz #nobr ;No? + +;FIX!! +;TWEAK this z-rng + addk 18-12,a2 + jrge #nxt2 ;Too far from Z? + ;>Chk box X + move *a11(OIMG),a2,L + move *a2(IANI2X),a0 + + move *a11(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof ;No flip? + + move *a2,a2 ;ISIZEX + subk 1,a2 + neg a0 + add a2,a0 ;+size +#nof + move *a11(OXPOS),a14 + add a14,a0 + sub a4,a0 + abs a0 + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl4,a14 + move *a14,a14 + sub a14,a0 +; subk 12,a0 + + jrge #nxt4 ;Too far from X? + + + move @ballpnum,a1 + jrn #noow ;No owner? + move *a3(plyr_num),a14 + cmp a1,a14 + jreq #nxt ;I own? + + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Teammate owns? + + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #noow ;If on fire, don't miss as often + btst a0,a1 + jrnz #noow ;If on fire, don't miss as often + + move *a11(OPLINK),a14,L + move *a14(plyr_attrib_p),a14,L + move *a14(PAT_DEFSKILL),a14 + sll 4,a14 + addi tbl5,a14 + move *a14,a0 + calla RNDPER + jrhi #nxt + +; movk 1,a0 +; callr rnd +; jrnz #nxt5 ;50% skip? + +#noow + PUSH a7 + CREATE0 fix_airb + PULL a7 + +; movk 1,a0 +; move a0,@plyrairballoff ;Shut off eventual airball snd + + move @ballprcv_p,a2,L + cmp a3,a2 + jreq #rcvok ;The receiver is touching it? + + + move @ballgoaltcnt,a0 ;>Chk goaltending + jrle #skipgt + move @ballpnumshot,a1 + move *a3(plyr_num),a14 + srl 1,a1 + srl 1,a14 + cmp a1,a14 + jreq #nxt ;Same team? + +;Turmell, allow ball to be blocked at peak of arc + move *a8(OYVEL),a0,L + move a0,a2 + sra 14,a0 + jrle #nogt +;Turmell + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #nogt + btst a0,a1 ;Blocker on-fire? + jrnz #nogt ; br=yes, allow goaltend + +;Try #goalt + move *a3(plyr_ptsdown),a0 + + subk 5,a0 + jrlt #normgt ;I'm losing by 5? +; cmpi [3,8000h],a2 + cmpi [3,0000h],a2 + jrlt #nogt + jruc #gt +#normgt +; cmpi [2,8000h],a2 + cmpi [2,0000h],a2 + jrlt #nogt + +#gt +; movk 6,a0 +; calla rnd +; jrnz #nxt + + move *a3(plyr_num),a0 + move @plyr_onfire,a1 + btst a0,a1 + jrnz #do_gt + + +;This was throwing away most blocks if it were to be a goal tend! +;Took out 4/5/96 - 2 days before shipping... Genius! +; movk 6,a0 + movk 5,a0 + calla rnd + jrnz #nxt + +#do_gt + + + move @plyrairballoff,a0 + jrn #nogt + move @shot_percentage,a0 + jrn #nogt + + + move *a3(plyr_num),a0 + .ref pup_goaltend + move @pup_goaltend,a14 + btst a0,a14 ;Plyr arrow-off bit set? + jrz #nosec1 ;br=no goaltending allowed +; sll 4,a0 ;Secret goaltend +; .ref p1taps +; addi p1taps,a0 +; move *a0,a0 +; cmpi 24,a0 +; jrnz #nosec1 + + movi 700,a0 ;Let this guy get away with GT + calla RNDPER + jrhi #nogt + +; jruc #nogt + +#nosec1 + move a7,a2 + CREATE0 plyr_goaltending ;Pass A11 + move a2,a7 + jruc #skipgt +#nogt + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;call rejected speech here + calla rejected_speech + + SOUND1 steal_snd + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#skipgt + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + + move *a3(plyr_seq),a2 + cmpi REBOUND_SEQ,a2 + jreq #agiveball + cmpi REBOUNDA_SEQ,a2 + jrnz #fix + + +#agiveball + PUSH a3 + +;call rebound speech here + move @ballpnum,a0 + jrn #ballfree + + SOUND1 stealsb +; calla stolen_speech + + jruc #skiprbnd +#ballfree + move @ballgoaltcnt,a0 ;>Chk goaltending + jrgt #skiprbnd + move @ballprcv_p,a0,L + jrz #isreb + calla intercepted_speech + jruc #skiprbnd +#isreb + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + move @inbound,a0 + jrnn #skiprbnd + +;Player touches ball for a rebound, it attaches to one hand. +;As soon as player touches ball, slam hands together for +;a more dramatic looking rebound + move *a3(PA10),a14 + cmpi 100,a14 + jrgt #landing + movk 1,a0 + move a0,*a3(PA10) +#landing + + + move @gmqrtr,a0 + jrnz #okr + move @game_time,a0,L + cmpi >2050400,a0 + jrgt #nor + +#okr + calla rebound_speech +#nor + movi 80,a0 + move a0,@pushing_delay +;After grabbing rebound, don't allow stolen rebound! +;5% of time, allow stolen rebound after 15 ticks! (That was old game) + movk 15,a2 + movi 50,a0 + calla RNDPER + jrhi #reg + movi 40,a2 +#reg move a2,a0 + calla plyr_setshtdly + PULL a3 + + jruc #x + +fix_airb + movk 1,a0 + move a0,@plyrairballoff ;Shut off eventual airball snd + DIE + +#skiprbnd + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + PULL a3 + jruc #giveball +#fix + cmpi FASTBLOCKREJ_SEQ,a2 + jreq #rej + subk BLOCKREJ_SEQ,a2 + jreq #rej + + movk 3,a0 ;>Regular block + callr rnd + +;This is for a block dunk, but if a player jumps in front of a pass +;this code is also executed. And ball has a chance of bouncing back at +;full speed toward passer! + + jrnz #glance_off + +;DJT Start + move @tvpanelon,a0 ;Kill bogus "stolen!" if just scored + .if DEBUG + jrz #dorej + LOCKUP +#dorej + .endif ;DEBUG + jrnz #giveball + +;DJT End + SOUND1 steal_snd + movi 80,a0 + move a0,@pushing_delay + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr + PULL a7,a10 + +;Block dunk stat + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + +;dunk rejected speech here! +;FIX, this is where bogus rejected speech calls come from + calla rejected_dnk_speech +;DJT Start + .if DEBUG +; LOCKUP + .endif ;DEBUG +;DJT End +;Go into rebound sequence to make spear look better + jruc #giveball + +#glance_off + PUSH a3 + movi 15,a0 + calla plyr_setshtdly + PULL a3 + + move @ballgoaltcnt,a0 + jrgt #ablk + +;This is when a pass or sometimes when a dunk gets rejected! +;This also happens when a player jumps on a ball which is sitting on ground! + + move *a8(OYPOS),a0 + addk 30,a0 ;Not if ball near ground + jrgt #x + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + +; movi -GRAV*22,a1 ;Towards roof + movi -GRAV*20,a1 ;Towards roof + + move a1,*a8(OYVEL),L + +;New, 1/22/93 + move @PCNT,a0 + ANDK 7,a0 + jrnz #x + + movk 25,a0 + move a0,*a3(plyr_shtdly) +;dunk rejected speech here! (plyr doesn't have ball though) +;(Why is this being called, if plyr doesn't keep ball, its not rejected!!) +;FIX!!! +; calla rejected_dnk_speech + jruc #x + +#ablk +;2/3/92 + clr a0 + move a0,@ballgoaltcnt + +; LOCKUP + +;2/3/92 + movi -GRAV*15,a1 ;Towards roof + move a1,*a8(OYVEL),L + + + movk >1f,a0 + callr rnd + btst 0,a0 + jrz #noxf + move *a8(OXVEL),a2,L + neg a2 + move a2,*a8(OXVEL),L +#noxf + btst 1,a0 + jrz #nxt + move *a8(OZVEL),a2,L + neg a2 + move a2,*a8(OZVEL),L + +; clr a0 +; move a0,@ballgoaltcnt + + jruc #nxt + +#rej + move @must_rebound,a0 + jrz #cont + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1 + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1 + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #cont +#rej1 + move *a3(plyr_ohpdist),a14 + cmpi 55,a14 + jrgt #cont0 + +;Still allow slap of ball if it is right on the rim (approx.) + .if DEBUG + LOCKUP + .endif + + jruc #cont + +#cont0 +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrnz #convert_rej ;Br=I was trying to swat a rebound! +#cont + + movk PS_BLOCKS,a0 ;It's a block + move *a3(plyr_num),a1 + calla inc_player_stat + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*21,a1 ;Towards roof ;18 + move a1,*a8(OYVEL),L + movk 15,a0 + move a0,*a3(plyr_shtdly) + + callr def_play_reward ;Good defensive play reward + + clr a0 + move a0,@ballgoaltcnt + jruc #nxt + +#nobr + move @ballpnum,a2 + jrlt #giveball ;No owner? + move *a3(plyr_num),a14 + cmp a2,a14 + jreq #nxt ;I already have it? + + move *a3(plyr_seq),a0 + +; cmpi STEALUP_SEQ,a0 +; jreq #doit + subi STEAL_SEQ,a0 + jrne #nxt +;#doit + + +;Shawn, we should probably adjust this % based upon ptsdown! +;200 is if you are losing, but if you are winning, slowly reduce % + +;Turmell + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl1,a0 + move *a0,a0 +; movi 190,a0 ;120 + + calla RNDPER + jrls #nxt ;No steal? + + sll 5,a2 ;*32 + addi plyrproc_t,a2 + move *a2,a2,L + + move *a2(plyr_seqflgs),a0 + btst NOSTEAL_B,a0 + jrnz #nxt ;Ball can't be stolen? + + + move @steals_off,a0 + jrnz #nxt + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown + move *a3(plyr_attrib_p),a0,L + move *a0(PAT_STLSKILL),a0 + sll 4,a0 + addi stl2,a0 + move *a0,a0 +; movi 180,a0 + + calla RNDPER + jrhi #giveballflsh ;20% give him the ball? +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #giveballflsh ;temp + +; movk 15,a0 ;>Knock it away + movk 20,a0 ;>Knock it away + move a0,*a2(plyr_shtdly) + move a0,*a3(plyr_shtdly) + + callr loose_ball + SOUND1 swat_snd +; callr get_swat + jruc #nxt + + SUBR loose_ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + callr ball_convfmprel ;was rel2 + + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + movi 50,a0 + calla RNDPER + jrls #noy + movi 40000h,a0 + calla rndrng0 + move *a8(OYVEL),a1,L + sub a0,a1 + move a1,*a8(OYVEL),L +#noy + + callr flash_ball + .ref ball_loose_spch + PUSH a7 + CREATE0 ball_loose_spch + PULL a7 + + rets + + + .asg 75/100,lo_stl ;85,77 +;This is for stealing ball +stl1 .word 160*lo_stl,170*lo_stl,180*lo_stl,195*lo_stl,200*lo_stl + .word 205*lo_stl,215*lo_stl,245*lo_stl,260*lo_stl,285*lo_stl + .word 300*lo_stl + +;stl1 .word 160*lo_stl,165*lo_stl,170*lo_stl,175*lo_stl,180*lo_stl +; .word 185*lo_stl,190*lo_stl,195*lo_stl,200*lo_stl,202*lo_stl +; .word 204*lo_stl +;This is for sticking to ball after a successfull steal +;Otherwise, ball will dribble away! + +stl2 .word 160,170,180,195,200 + .word 205,215,225,230,235 + .word 250 + + +#giveballflsh + +;steals ball speech (ball sticks to player) + calla stolen_speech + + callr flash_ball + SOUND1 swat_snd +; callr get_swat +; SOUND1 cheer_snd +;FIXX!!! +;Debug - don't have ball skip away on steal! +; jruc #nxt ;temp for checking distance for steals + +; movk 30,a0 + movi 40,a0 + move a0,@steals_off + movk 25,a0 + move a0,@pass_off + movi 80,a0 + move a0,@pushing_delay + + +#giveball +;Pick up ball bug.... If @ballprcv_p has a value, intercept style collisions +;occur, so rarely can you pick up the ball.... + move @ballprcv_p,a2,L + jrz #norcvr ;No pass receiver? + cmp a3,a2 +;DJT Start + jrne #notrcvr ;The receiver has it? No if != + move *a3(plyr_seq),a0 + cmpi ALLEYOOP1_SEQ,a0 ;Is it an oop? + jrlo #rcvok + cmpi ALLEYOOP14_SEQ,a0 ;Is it an oop? + jrhi #rcvok + .ref aly_rcv_snd + movi aly_rcv_snd,a0,L + calla snd_play1 + jruc #rcvok + +#notrcvr +;DJT End + movi 99,a0 + callr rndrng0 + + clr a14 + move *a3(plyr_ptsdown),a1 + jrle #normint ;!Losing? + + cmpi 15,a1 + jrle #maxpts2 + movk 15,a1 + +#maxpts2 + +; movi 150,a14 ;Secret steal power! + movi 50,a14 ;Secret steal power! + move *a3(plyr_num),a6 + .ref pup_maxsteal + move @pup_maxsteal,a4 + btst a6,a4 + jrnz #normint + + sll 4,a1 + addi #int_t,a1 + move *a1,a14 + +#normint + +;Let's see if this pass is intended for an alley ooper! +;If so, do more intercepts! + move @ballprcv_p,a1,L ;*Plyr proc who gets this pass or 0 + jrz #nxtck + move *a1(plyr_jmpcnt),a4 + jrz #nxtck + move *a1(plyr_seq),a1 + cmpi ALLEYOOP1_SEQ,a1 + jrlt #nxtck + cmpi ALLEYOOP14_SEQ,a1 + jrgt #nxtck +;More intercepts if alley oop... +;DJT Start + movi 600,a0 ;% for alley intercept + jruc #nxtck1 +; addi 75,a14 ;25 ;Alley oop steal power! +;DJT End +#nxtck + + move @ballpasstime,a1 + subk 3,a1 + abs a1 + srl 1,a1 ;/2 + add a14,a1 + addk 1,a1 ;1% to 100% + cmp a1,a0 + jrge #nxt ;% failed? + +;Still too many steals + +;Bumped this up because we still had too many intercepted passes... +; movi 500,a0 ;650 ,450 +;TRIED new value +; movi 750,a0 + movi 850,a0 +;DJT Start +#nxtck1 +;DJT End + calla RNDPER + jrhi #nxt ;br=yes skip it + + PUSH a2,a8 + + move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago + move *a8(OZVAL),a7,L + + move *a8(OXVEL),a1,L + sll 2,a1 + sub a1,a6 + move *a8(OZVEL),a1,L + sll 2,a1 + sub a1,a7 + + sra 16,a6 + sra 16,a7 + + move a11,a8 + + calla seekdirdist_obxz128 + move a0,*a3(plyr_newdir) ;Turn toward ball + + PULL a2,a8 + + move *a2(plyr_rcvpass),a0 + jrle #rcvok0 ;Already caught? + +;; clr a14 ;Intercepted +; +; Just set it to 1 so plyr_main, etc., can take care of the rest + movk 1,a14 ;Intercepted + move a14,*a2(plyr_rcvpass) +;; move *a2(plyr_jmpcnt),a0 +;; jrnz #inair ;Jumping? +;; move a14,*a2(plyr_nojoy) +;;#inair + + +;Shawn, Sometimes the ball can be intercepted and you do not fall thru +;this ball flash, etc. code (Below). I moved the flash/snd stuff up +;in front of the code which checks if ball has already been caught, but then +;when an errant pass is picked up, it does the flash stuff. + + callr def_play_reward ;Good defensive play reward + +; movi 50,a0 ;4% of intercepts are just deflects + movi 40,a0 ;4% of intercepts are just deflects + calla RNDPER + jrls #nope + +;Sometimes, just have ball bounce off the defender + + SOUND1 intercept + + move *a3(plyr_dir),a0 + callr sinecos_get + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a8(OZVEL),L + move a1,*a8(OXVEL),L + movi -GRAV*25,a1 ;Towards roof + move a1,*a8(OYVEL),L + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #x + movk PS_TURNOVERS,a0 + calla inc_player_stat + jruc #x ;#nxt + +#nope + +;intercepted speech call here + + move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0 + jrz #nopass + + move @ballpasstime,a0 ;# ticks since passed + cmpi 6,a0 + jrle #cntstl ;#nopass + + calla intercepted_speech + jruc #cntstl + +#nopass + calla stolen_speech + +#cntstl + + movk PS_STEALS,a0 + move *a3(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown2 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown2 + jruc #rcvok + +#rcvok0 + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + +#rcvok + clr a14 + move a14,@ballprcv_p,L + +#norcvr + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + + +;Player is jumping up with standard 1 handed block frms, if he is going to +;attach to ball, then lets jump into spear seq. which looks like a strong +;2 handed grab. Rebound art basically... + +; .ref w1blokl3 +; .ref w1blokl4 +; .ref w2blokl3 +; .ref w2blokl4 +; .ref w3blokl3 +; .ref w3blokl4 +; .ref w4blokl3 +; .ref w4blokl4 +; .ref w5blokl3 +; +;;Player spearing the ball? +; move *a11(OIMG),a0,L +; cmpi w1blokl3,a0 +; jrz #convert_rej +; cmpi w1blokl4,a0 +; jrz #convert_rej +; cmpi w2blokl3,a0 +; jrz #convert_rej +; cmpi w2blokl4,a0 +; jrz #convert_rej +; cmpi w3blokl3,a0 +; jrz #convert_rej +; cmpi w3blokl4,a0 +; jrz #convert_rej +; cmpi w4blokl3,a0 +; jrz #convert_rej +; cmpi w4blokl4,a0 +; jrz #convert_rej +; cmpi w5blokl3,a0 +; jrz #convert_rej +; cmpi w5blokl4,a0 +; jrz #convert_rej + .ref w1blokl1 + .ref w5blokl4 + +; move @must_rebound,a0 +; jrnz #convert_rej0 ;Br=I was trying to stab a rebound! + +;Player spearing the ball? + move *a11(OIMG),a0,L + cmpi w1blokl1,a0 + jrlt #tagx + cmpi w5blokl4,a0 + jrgt #tagx +;DJT Start + .if DEBUG + LOCKUP + .endif ;DEBUG +;DJT End + jruc #convert_rej + +#tagx + move @must_rebound,a0 + jrz #x + +#convert_rej0 + move *a3(plyr_seq),a0 + cmpi BLOCK_SEQ,a0 + jrz #rej1a + cmpi BLOCKREJ_SEQ,a0 + jrz #rej1a + cmpi FASTBLOCKREJ_SEQ,a0 + jrnz #x +#rej1a + +;Could also check my proximity to floor... + move *a3(plyr_jmpcnt),a14 + jrz #x + +#convert_rej +;DJT removed + movk NOSPEAR_SEQ,a0 +;This sequence is simply a two handed rebound + move *a3(plyr_dir),a7 + PUSH a13 + move a3,a13 + calla plyr_setseq + movk 1,a0 + move a0,*a13(PA10),L + PULL a13 + + clr a0 + move a0,@ballgoaltcnt + + move *a3(plyr_num),a14 + move a14,@ballpnum + clr a0 + move a0,*a3(plyr_dribmode) ;Reset dribble + move a0,@ballbbhitcnt + movi 80,a0 + move a0,@pushing_delay + movi 15,a0 + calla plyr_setshtdly + jruc #x + + +#nxt5 +;DJT Start +; .if DEBUG +; move @ballpnum,a14 +; jrnn #nxt +; move *a8(OYPOS),a0 +; move *a8(OSIZEY),a1 +; addk 1,a1 +; add a1,a0 +; jrn #nxt +; LOCKUP +; .endif ;DEBUG + nop + nop +;DJT End +#nxt2 + nop + nop +#nxt3 + nop + nop +#nxt4 + nop + nop + + +#nxt dsj a7,#lp + + +#x PULL a2,a3,a4,a5,a6,a7,a10,a11 + rets + +tbl1 .word 16+2,17+2,18+2,18+2,18+2,18+2,18+2,19+2,20+2,21+2,22+2,23+2 +;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18 +tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40 +;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35 +tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15 + +tbl4 .word 11*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,12*DIST_ADDITION+2,12*DIST_ADDITION+2 + .word 12*DIST_ADDITION+2,13*DIST_ADDITION+2,14*DIST_ADDITION+2 + .word 15*DIST_ADDITION+2,16*DIST_ADDITION+2,17*DIST_ADDITION+2 + +;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12 +;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200 +tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500 + + +#goalt_t +;Extra % chance of allowing losing team to get away with a goaltend +;1 pt down up to 15 & over down + .word 0,35,45,55,60,65,70,75,75 + .word 75,80,90,90,90,90,90 + +#int_t +;Bonus % of losing team getting an intercept +;1 pt down up to 15 & over down +;Turmell +;Don't have so many interceptions for losing teams + .word 0,3,5,6,8,9,10,11,12,12 + .word 12,13,14,15,17,19 + +; .word 0,4,7,10,12,15,19,20,20,20 +; .word 20,20,22,25,27,30 + + +******************************** +* Random swat sound + +; SUBR get_swat +; SOUND1 swat_snd +; rets + + +; movk 3,a0 +; callr rndrng0 +; sll 5,a0 +; addi #swtsnds,a0 +; move *a0,a0,L +; calla snd_play1 +; rets +; +;#swtsnds +; .long swat_snd,swat_snd,swat_snd,swat_snd + + +******************************** +* Good defensive play reward + + SUBR def_play_reward + + callr flash_ball + + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + + PUSH a7,a10 + move a3,a10 + calla arw_on1plyr ;Guy who picks up ball gets arw + PULL a7,a10 + + rets + + + SUBR flash_reward + + callr flash_ball +; SOUND1 cheer_snd + SOUND1 swat_snd +; callr get_swat + rets + + + +#******************************* +* Flash ball + + SUBRP flash_ball + + move @inbound,a0 + jrnn #x + move @ballflash,a0 + jrnz #x + PUSH a7 + CREATE0 ball_flash + PULL a7 +#x rets + + +ball_flash + movk 1,a0 + move a0,@ballflash + + move @ballobj_p,a8,L ;Basketball obj + + movi 1010h,a2 + move a2,*a8(OCONST) + + movk 4,a10 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + +; move @inbound,a0 +; jrnn #die + + dsj a10,#again + +#die clr a0 + move a0,@ballflash + + move @HCOUNT,a14 + btst 0,a14 + jrz #die2 + SOUND1 cheer_snd +#die2 + DIE + + +#******************************* +* Jump shot crowd sounds (process) + + SUBR plyr_jscrowdsnd + + SLEEPK 10 + + movk 10,a0 + calla rndrng0 + move a0,a8 + sll 5,a8 + addi #crwd_noise_sp_tbl,a8 + move *a8,a0,L + calla snd_play1 + DIE + + +#crwd_noise_sp_tbl + .long cheer3_snd + .long cheer2_snd + .long cheer1_snd + .long cheer2_snd + .long cheer3_snd + .long cheer_snd + .long cheer1_snd + .long cheer2_snd + .long cheer_snd + .long cheer2_snd + .long cheer2_snd + + +#******************************* +* Convert ball from player relative +* Trashes scratch + + SUBR ball_convfmprel + +; move @ballobj_p,a0,L +; +; move *a0(OIMG),a1,L ;Get ball ani X +; move *a1(IANIOFFX),a1 +; sll 16,a1 +; move *a0(OXANI),a14,L ;Get ball/plyr ani X combo & +; move a1,*a0(OXANI),L ; make new ani X ball only +; sub a14,a1 +; +; move *a0(OZPOS),a14 ;Do Z proj on old/new ani X diff +; PRJX2Z a1,a14,16-1 ;(16-1)=*64k/2 +; +; move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to +; sub a1,a14 ; make ball not jerk when released +; move a14,*a0(OXVAL),L +; + move @ballobj_p,a0,L + + SUBR convfmprel + move *a0(OXANI),a1,L ;Get ball ani X + move *a0(OZPOS),a14 ;Do Z proj on old ani X + PRJX2Z a1,a14,16-2 + + move *a0(OXVAL),a14,L ;Adjust ball X by proj'd amount to + add a1,a14 ; make ball not jerk when released + move a14,*a0(OXVAL),L + + clr a14 + move a14,*a0(OXANI),L + + rets + + +#******************************* +* Set ptsdown for each plyr +* Trashes scratch + + .ref pup_noassistance + + SUBR plyr_setptsdown + + PUSH a2,a3,a4,a5,a6 + + movi scores,a14 + move *a14+,a0 + move *a14+,a4 + sub a0,a4 ;+ if losing, - if winning + + move @PSTATUS,a5 + + movi plyrproc_t,a6 + movk NUMPLYRS,a3 +#lp + move a4,a2 + srl 1,a5 + jrnc #set ;Drone? + + move @PSTATUS,a0 + move a0,a1 + sll 32-2,a0 + jrz #set ;Drone team? + ANDK >c,a1 + jrz #set ;Drone team? + + move @pup_noassistance,a0 + jrnz #noset + + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrz #set ;On? +#noset + clr a2 +#set + move *a6+,a0,L + move a2,*a0(plyr_ptsdown) + + .if DRONES_2MORE + LOCKUP + .else + cmpi NUMPLYRS-1,a3 + jrne #nxt + neg a4 + .endif + +#nxt dsj a3,#lp + + PULL a2,a3,a4,a5,a6 + rets + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBRP rndrng0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +**************************************************************** +* Sequence code may trash scratch, A2-A5 + +#***************************************** +* +* A13=*PxCTRL +* RETURNS: carry clear if player under hoop +* + SUBR chck_plyr_under_hoop + + PUSH a0,a1 + move *a13(plyr_seqdir),a1 + + move *a8(OXPOS),a0 + move *a8(OZPOS),a1 + + move *a13(plyr_num),a14 + srl 1,a14 + jrz #tm1 ;br=team 1, right hoop + cmpi HOOPLX-16,a0 + jrhs #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 +#tm1 + cmpi HOOPRX-35,a0 + jrls #nsq0 ;br=player not behind hoop + cmpi CZMID-150,a1 + jrlo #nsq0 ;br=player not under hoop + cmpi CZMID+125,a1 + jrgt #nsq0 ;br=player not under hoop + jruc #nsq1 + +#nsq0 clrc + jruc #nsq2 +#nsq1 + setc + +#nsq2 + PULL a0,a1 + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A8=*plyr obj +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_shadow_trail + + PUSH a10,a11 + move *b4+,b0,L ;create RATE and delete rate + move b0,a10 + + move *a13(plyr_headobj_p),a11,L + CREATE TRAIL_HNDLR_PID,plr_trail_proc_disbatcher + + PULL a10,a11 + rets + + +#***************************************************************************** +* This PROCESS handles the disbatching of process for the player trail +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +* +****************************************************************************** + SUBRP plr_trail_proc_disbatcher + +ptp_0 movy a10,a9 ;get create RATE + srl 16,a9 +ptp_1 SLEEPK 1 + dsj a9,ptp_1 + CREATE PLYR_TRAIL_OBJ_PID,plyr_trail + jruc ptp_0 + +****************************************************************************** +* This PROCESS creates a copy of the image at X rate and delete it +* +* INPUT: reg a8 - * plyr obj +* reg a10 - rate and delete time +* reg a11 - * plyr head obj +****************************************************************************** + SUBRP plyr_trail + +;player body + clr a0 + clr a1 + move *a8(OIMG),a2,L + clr a3 + move *a8(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a6 ;x vel + clr a7 ;y vel + move a8,a9 + calla BEGINOBJ +; calla BEGINOBJP + + move *a9(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a9(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a9(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a9(OXANI),a14,L + move a14,*a8(OXANI),L + move *a9(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a9(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + move a8,a9 ;save plyr obj ptr + +;player head + + move *a11(OIMG),a2,L + move *a11(OFLAGS),a4 + movi PLR_TRAIL_ID,a5 + clr a0 ;x + clr a1 ;y + clr a3 ;z + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + + move *a11(OPAL),a14 + move a14,*a8(OPAL) + move *a11(OXVAL),a14,L + move a14,*a8(OXVAL),L + move *a11(OYVAL),a14,L + move a14,*a8(OYVAL),L + move *a11(OZVAL),a14,L + subi 8<<16,a14 ;force shadow under plyr + move a14,*a8(OZVAL),L + + move *a11(OXANI),a14,L + move a14,*a8(OXANI),L + move *a11(OCTRL),a14 + ori M_NOCOLL,a14 + move a14,*a8(OCTRL) + move *a11(ODATA_p),a14,L + move a14,*a8(ODATA_p),L + + clr a11 + movx a10,a11 +pt_1 + SLEEPK 1 + move *a9(OZPOS),a14 ;player body Z + dec a14 + move a14,*a8(OZPOS) + move a14,*a9(OZPOS) + dsj a11,pt_1 + + calla DELOBJA8 ;delete player body + move a9,a8 + calla DELOBJA8 ;delete player head + DIE + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_allow_alleyoop + + clr a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A13=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_disallow_alleyoop + + clr a14 + not a14 + move a14,*a13(plyr_inair_pass) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset + + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 + movi CZMID,a14 +; move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + +#***************************************** +* Sequence - adjust players X,Y, and/or Z +* Set a flag that says "I have already been offset" for FLYBACKS +* +* A11=*PxCTRL +* B4=*Next data in seq list + + SUBR seq_offset2 + + move *a13(plyr_offset_flag),a14 + jrz #cont + addi 48,b4 + rets +#cont movk 1,a14 + move a14,*a13(plyr_offset_flag) + move *b4+,b0 ;get X offset + move b0,a0 + move *a8(OXPOS),a14 + + move *a8(OCTRL),a1,W + btst B_FLIPH,a1 + jrz #sx ;No flip? + neg a0 +#sx add a0,a14 + move a14,*a8(OXPOS) + + move *b4+,b0 ;get Y offset + move b0,a0 + move *a8(OYPOS),a14 + add a0,a14 + move a14,*a8(OYPOS) + + move *b4+,b0 ;get Z offset + move b0,a0 +; movi CZMID,a14 + move *a8(OZPOS),a14 + add a0,a14 + move a14,*a8(OZPOS) + rets + + +******************************** +* Sequence - stand +* A11=*PxCTRL +* >B4=*Start of seq list + + SUBR seq_stand +;trying to stop a player in a DISH_OFF seq. receiving pass, dont allow +;joystick if pass on the way +; + move @ballprcv_p,a14,L + cmp a14,a13 + jreq stnd1 + move *a13(plyr_nojoy),a14 + jrn stnd1 + move *a13(plyr_rcvpass),a14 + jrnz stnd1 + clr a0 + move a0,*a13(plyr_nojoy) +stnd1 + + +;Make this STND_SEQ if in close + movk STND2_SEQ,a0 ;Set stand sequence + + move *a13(plyr_o1dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrlt #stnd0 + move *a13(plyr_o2dist),a14 + cmpi 155*DIST_REDUCTION,a14 + jrgt #stnd1 +#stnd0 + movk STND_SEQ,a0 +#stnd1 + + + move *a13(plyr_ownball),a1 + jrle #set + + + move *a13(plyr_num),a2 + srl 1,a2 + XORK 1,a2 + sll 6,a2 ;*64 + addi plyrproc_t,a2 + move *a2+,a4,L + move *a2+,a5,L + move *a13(plyr_o1dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #chko2 ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a4(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jreq #doelbo +#chko2 + move *a13(plyr_o2dist),a0 + cmpi 60*DIST_REDUCTION,a0 + jrge #stndwb ;Too far? + subi 30*DIST_REDUCTION,a0 + jrlt #doelbo ;In close? + move *a5(plyr_seq),a14 + + +; cmpi STEALUP_SEQ,a14 +; jreq #doelbo + + + subi STEAL_SEQ,a14 + jreq #doelbo + subk PUSH_SEQ-STEAL_SEQ,a14 + jrne #stndwb +#doelbo + move *a13(plyr_autoctrl),a14 + jrnz #stndwb + + move @game_time,a1,L ;If under 2 secs, no elbow + cmpi >200,a1 + jrle #stndwb + + movi ELBO_SEQ,a0 + move *a13(plyr_seq),a14 + cmp a0,a14 + jrne #setnostl ;!In elbo? + move *a11,a1 + sll 32-6,a1 + jrz #set ;No buttons? + + +#stndwb + movk STNDWB_SEQ,a0 + move *a13(plyr_seq),a14 + cmpi ELBO2_SEQ,a14 + jrne #set + movk STNDWB2_SEQ,a0 ;stops glitch from elbo swing to stand +#set calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + rets + + + +#setnostl + calla plyr_setseq + + move *a13(plyr_ani1st_p),a0,L + move a0,b4 + + movi 140,a0 + move a0,@steals_off ;Don't allow steals for 60 ticks + movi 80,a0 + move a0,@pushing_delay + rets + + + +******************************** +* Sequence - See if we should stand from steal +* A6=Button bits + + SUBR seq_stealstand + +;Turmell + move *a13(plyr_ownball),a0 + jrp seq_stand + + btst 5,a6 + jrz seq_stand + rets + + +#******************************* +* Sequence - Set new direction (for dunks) +* B4=*Next data in seq list +* >A7=New dir + + SUBR seq_newdir + + move *b4+,b0 + move b0,a7 + move *a13(plyr_anirevff),a0 + jrz #x + srl 4,a7 + sll 3,a7 + addi #t,a7 + movb *a7,a7 +#x move a7,*a13(plyr_dir) + rets + +#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16 + + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_turbo + + movk RUN_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + +#******************************* +* Sequence - Check turbo button from mid run +* B4=*Next data in seq list + + SUBR seq_ck_drib_turbo + + movk RUNDRIB_SEQ,a0 ;>Setup run sequence + + move *a13(plyr_turbon),a14 + jrz #cont + +;Skip next frame of animation + next seq_command + addi 112,b4 + movk RUNDRIBTURB_SEQ,a0 ;>Setup run sequence +#cont + move a0,*a13(plyr_seq) + rets + + + +#******************************* +* Sequence - Skip 1 frame of animation +* B4=*Next data in seq list + + SUBR seq_skip_1frm + + addi 64,b4 + rets + + + +#******************************* +* Sequence - Keep falling player from finishing his get up animation until +* he is on the ground + + SUBR seq_stayinair + + move *a13(plyr_jmpcnt),a0 + jrz #x + subi 2*32+3*16,b4 +#x rets + +#******************************* +* Sequence - Keep zx vel for later skid on butt + + SUBR seq_keepzx + + move *a8(OXVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpxvel),L + move *a8(OZVEL),a0,L + sla 1,a0 + move a0,*a13(plyr_kpzvel),L + rets + +#******************************* +* Sequence - set injury for this player + + SUBR seq_injury + + movk PS_INJURY,a0 ;>Inc try shot stat + move *a13(plyr_num),a1 + calla inc_player_stat + + rets + +#******************************* +* Sequence - Restore zx vel for skid on butt + + SUBR seq_stuffzx + + move *a13(plyr_kpxvel),a0,L + move a0,*a8(OXVEL),L + move *a13(plyr_kpzvel),a0,L + move a0,*a8(OZVEL),L + + rets + +#******************************* +* Sequence - Change into fire pal + +; SUBR seq_strtfire +; +;;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames +; +; move *a13(plyr_keeppal),a0 +; jrnz #x +; move *a8(OPAL),a0 +; move a0,*a13(plyr_keeppal) +; movi FIREFALP,a0 +; calla pal_getf +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_headobj_p),a1,L +; move *a1(OPAL),a14 +; move a14,*a13(plyr_hdkeeppal) +; move a0,*a1(OPAL) +;#x +; rets + +#******************************* +* Sequence - Change back from fire pal + +; SUBR seq_stopfire +; +; move *a13(plyr_keeppal),a0 +; jrz #x +; move a0,*a8(OPAL) +;;Do head also +; move *a13(plyr_hdkeeppal),a0 +; move *a13(plyr_headobj_p),a1,L +; move a0,*a1(OPAL) +; clr a0 +; move a0,*a13(plyr_keeppal) +;#x +; rets + +#******************************* +* Sequence - Start smoke + +; SUBR seq_smoke +; +; .ref plyr_smoketrail2 +; CREATE0 plyr_smoketrail2 +; move a13,*a0(PA10),L +; +; rets + + +#******************************* +* Sequence - Call a sound +* B4=*Next data in seq list + + SUBR seq_snd + + move *b4+,b0,L + move b0,a0 + jauc snd_play1 + +#******************************* +* Sequence - Turn off the NOBALL flag + + SUBR seq_noballoff + + move *a13(plyr_seqflgs),a0 + andni NOBALL_M,a0 + move a0,*a13(plyr_seqflgs) + + rets + + +#******************************* +* Sequence - reset seq, in case dir changed + + SUBR seq_resetseq + + clr a0 + move a0,*a13(plyr_nojoy) + + move *a13(plyr_seq),a0 + move a6,a1 + sll 32-4,a1 + jrnz #set ;Pushing joy? + + movk STNDDEF_SEQ,a0 ;>Setup stand sequence + move *a13(plyr_ownball),a14 + jrle #set + movk STNDDRIBDEF_SEQ,a1 + +#set jruc plyr_setseq + + +#******************************* +* Sequence - Start of run +* B4=*Next data in seq list + + SUBR seq_run + +;Used to skip 1st frame for sequential #3 run! + + move b4,a0 + addi 4*16,a0 + move a0,*a13(plyr_ani1st_p),L + rets + + +#******************************* +* Sequence - jump +* A6=Button bits + + SUBR seq_jump + + move *a13(plyr_seq),a14 + cmpi LAYUP_SEQ,a14 + jreq #jmp + cmpi HOOK_SEQ,a14 + jreq #jmp + cmpi HOOK2_SEQ,a14 + jreq #jmp + +;No head fake if under 4 secs + + move @game_time,a0,L + cmpi >400,a0 + jrlt #jmp + + btst 4,a6 ;But1 (Shoot/block) + jrnz seq_jump2 ;Fake? + .ref head_fake_speech + calla head_fake_speech + jruc seq_stand ;Fake? + + + SUBR seq_jump2 + +#jmp + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move *a8(OXVEL),a2,L ;>Reduce vel + move *a8(OZVEL),a3,L + sra 2,a2 + sra 2,a3 + + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jrz #nodesp + + move *a13(plyr_turbon),a5 + + move *a13(plyr_num),a14 + move @plyr_onfire,a0 +;; cmp a0,a14 +;; jrnz #fire1 ;If on fire, don't do turbo jump! + btst a14,a0 ;If on fire, don't do turbo jump! + jrz #fire1 ; br=not on-fire + clr a5 + jruc #fire +#fire1 + + move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump! + move *a1(ply_turbo),a1 +; cmpi TURBO_CNT/2,a1 ;!!! Min cnt for tall jump +;Allow more turbo jumps... + cmpi TURBO_CNT/4,a1 ;!!! Min cnt for tall jump + jrlt #fire ;Turbo too low? + + move *a13(plyr_turbon),a5 + jrnz #turb ;Br=taller jump! +;#fire + sra 1,a2 + sra 1,a3 +;LOOK!!! +#fire +#turb + + + +;Keep - may need this on some desperation shot! +; move *a13(plyr_seq),a0 +; subk SHOOTDESP3_SEQ,a0 +; jrne #nodesp +; movi >20000,a2 ;For this desperation shot, we +; move *a13(plyr_num),a0 ;need some x velocity +; subk 2,a0 +; jrlt #nodesp +; movi ->20000,a2 + + +#nodesp + + + move a2,*a8(OXVEL),L + move a3,*a8(OZVEL),L + + + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->70,a1 + mpys a14,a1 + addi ->24000,a1 + + move a5,a5 + jrz #notur + addi ->8000,a1 +#notur + move *a13(plyr_seq),a0 + cmpi LAYUP_SEQ,a0 + jreq #noly2 + addi ->8000,a1 +#noly2 + move *a13(plyr_seqflgs),a0 + btst SHOOT_B,a0 + jrz #notsh + move a1,a0 ;-1/16 + sra 4,a0 + sub a0,a1 + + move *a13(plyr_seq),a14 + cmpi QSHOOT_SEQ,a14 + jrnz #notsh + sra 1,a1 + +#notsh + move a1,*a8(OYVEL),L + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; .ref show_hotspot_plyr_coor +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + .ref pup_showhotspots + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @tvpanelon,a1,L ;Get tvpanel status + + move @plyr_onfire,a0 ;Chk if on-fire + btst a14,a0 + jrz #notfire ; br=shooter not on fire + + move *a13(plyr_hotspotf),a0 ;On fire. Chk hotspot jump flag + jrnz #fchkhs ; br=from hotspot + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else forget it + jruc #nofire + +#fchkhs + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + jrz #fhoths ; br=1st hotspot shot + subk HOTSPOT_MINCNT,a0 + jrlt #fnohs ; br=hotspot not active yet +#fhoths + movi HOTSPOT_SHTPER,a0 ;Active hotspot! Bump shot% + move a0,*a13(plyr_hotspotp) +#fnohs + .ref hs_shot_snd + SOUND1 hs_shot_snd ;Do hotspot sound + move a1,a1 ;See if fire would bog out + jrz #dofire ; br=no, else do the disc +#dodisc + move *a13(plyr_hotspot_p),a0,L ;Plyr hotspot proc exist? + jrnz #disc + .ref show_hotspot_plyr_coor + CREATE0 show_hotspot_plyr_coor + move a13,*a0(PA10),L + jruc #nofire +#disc + .ref update_hotspot_plyr_coor + calla update_hotspot_plyr_coor + jruc #nofire + +#notfire + move *a13(plyr_hotspotf),a0 ;No fire. Chk hotspot jump flag + jrz #nofire ; br=not from hotspot + move a14,a0 ;Chk hotspot shot cnt + sll 4,a0 + addi hotspot_count,a0 + move *a0,a0 + cmpi HOTSPOT_MINCNT,a0,W + jrge #fhoths ; br=hotspot hot shot! + movk 1,a1 ;Set to do disc only + move a0,a0 ;1st hotspot shot? + jrz #fhoths ; br=yes + jruc #fnohs ;Just do disc & sound + +#dofire + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + rets + + + +#******************************* +* Sequence - start block jump +* B4=*Next data in seq list + + SUBR seq_block + + PUSH a6,a7,a9 + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move @ballpnum,a14 + jrn #binair ;Ball in air? + + move *a13(plyr_myhoopx),a0 + movi CZMID,a1 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk + +#float_at_hp + move a0,a6 ;>Jump at rim + move a1,a7 + movi -200<<16,a9 + addk 6,a6 + cmpi WRLDMID,a6 + jrlt #calcintercept + subk 6+6,a6 + jruc #calcintercept + +#nodunk +;Check teammate of guy holding ball to see if he is alley oop jumping! + move @ballpnum,a14 + xori 1,a14 + + sll 5,a14 + addi plyrproc_t,a14 + move *a14,a14,L + move *a14(plyr_seqflgs),a2 + btst DUNK_B,a2 + jrz #nodunk2 +;Yes, he is alley oop jumping. +;If near him, jump up and float toward my hoop - just like if I were trying +;to block a dunker with the ball. + +;If near guy with the ball, just jump straight up in front of him. + move *a13(plyr_balldist),a2 + cmpi >40,a2 ;About 3 feet away from ball + + jrgt #float_at_hp ;this guy wants to jump up and + ;disrupt the alley oop jumper! + PULL a6,a7,a9 + addk 32,b4 ;Skip + jruc seq_jump2 + +#nodunk2 + move *a13(plyr_seq),a14 + subk BLOCK_SEQ,a14 + jrne #noblk + addk 32,b4 ;Skip + + PULL a6,a7,a9 + +;If not near ball, jump lower and ignore turbo jump! + + move *a13(plyr_balldist),a0 + cmpi >e0*DIST_REDUCTION,a0 ;About 10 feet away from ball +; cmpi >100*DIST_REDUCTION,a0 ;About 10 feet away from ball + jrlt seq_jump2 + +;If near my own hoop, I am probably trying to G.T.! So allow high jump! + move @ballshotinair,a0 ;Shooter # if shot in air, else -1 + jrn #cont + move *a13(plyr_hpdist),a0 + cmpi 70,a0 ;About 3 feet away from my hoop + jrlt seq_jump2 +#cont + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,*a8(OXVEL),L ;Zero vel + move a0,*a8(OZVEL),L + +;LOOK!!! + move *a8(OZPOS),a14 ;894 to 1379 (Z range 486) + subi 400,a14 + movi ->30,a1 ;Smaller vertical jump + mpys a14,a1 + addi ->24000,a1 + + move a1,*a8(OYVEL),L + + rets + +#noblk + move *a5(OXPOS),a6 ;>In front of plyr between basket + move *a5(OXANI+16),a14 + add a14,a6 + move *a5(OZPOS),a7 + movi -200<<16,a9 + + sub a6,a0 + sub a7,a1 + move a0,a2 + move a1,a3 + abs a2 + abs a3 + cmp a3,a2 + jrge #scl + move a3,a2 + jruc #scl + +#scllp sra 1,a0 ;Scale down + sra 1,a1 + srl 1,a2 +#scl cmpi 22,a2 + jrgt #scllp + + add a0,a6 + add a1,a7 + + jruc #calcintercept + +#binair + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 30,b0 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + addi GRAVB,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + +#calcintercept + + move *b4+,b0,L + move b0,a2 ;*Key img + +;Time till impact? + movk 30,a4 + + clr a3 + clr a5 + move @ballprcv_p,a0,L + cmp a13,a0 + jreq #setvel ;I'm receiving? + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + +; move *a13(plyr_dir),a14 +; addk 8,a14 ;Round up +; srl 4,a14 ;Lose frac +; sll 4,a14 ;*16 +; addi #z_t,a14 +; move *a14,a5 + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + +;Very important! Maximum x/z float for defender blocks/rebounds +;Should be linked to attribute! + movk 30,a1 ;Max delta (Old) +; movi 40,a1 ;Max delta + move *a13(plyr_seq),a14 + subk REBOUND_SEQ,a14 + jrne #noreb +;Fly further if rebound art sequence + addk 32,a1 +; addk 20,a1 ;TE value +; addk 10,a1 + +#noreb cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel +;PUTBACK logic +; move *a13(plyr_seq),a1 +; cmpi PUTBACK_SEQ,a1 +; jrne #noput +; clr a3 ;no drift toward ball +; clr a5 ;no drift toward ball +; move a3,*a8(OXVEL),L +; move a5,*a8(OZVEL),L +; movi ->33000,a1 +; move a1,*a8(OYVEL),L +; jruc #x +;#noput + + move *a13(plyr_num),a14 + .ref pup_nodrift + move @pup_nodrift,a1 + btst a14,a1 + jrz #dodrift + clr a3 + clr a5 +#dodrift + + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + +;DJT Start +;If a swat sequence, allow greater y vel + + move *a13(plyr_seq),a3 + cmpi BLOCKREJ_SEQ,a3 + jrz #higher_vel + cmpi FASTBLOCKREJ_SEQ,a3 + jrnz #reg_vel +#higher_vel + movk 24,a4 +#reg_vel +;DJT End + + + + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 +;Bug? Code usually has to use minimum allowed vel. +;Mimimum jumping height! + + move @ballgoaltcnt,a14 ;Not owned. Is it a shot or loose? + jrnz #shot +;This is rebound time +;DJT Start +;Chk if ball has just hit rim +;Let player jump higher in this time if close to rim + move @in_cylinder,a14 + subk 5,a14 + jrlt #normin + + move *a13(plyr_hpdist),a0 + cmpi 100,a0 + jrge #normin + + cmpi ->3c000,a1 + jrlt #minok + .if DEBUG + LOCKUP + .endif ;DEBUG + movi ->3c000,a1 ;Min + jruc #minok +#normin +;DJT End + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min + jruc #minok +#shot + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 + btst a14,a6 + jrz #norm +;Guy is on fire, trying to block a shot, make minimum jump go higher! + cmpi ->4c000,a1 + jrlt #minok + movi ->4c000,a1 ;Min + jruc #minok +#norm + + + cmpi ->3c000,a1 + jrlt #minok + movi ->3c000,a1 ;Min +#minok + + move *a13(plyr_num),a14 + move @plyr_onfire,a6 +;; cmp a14,a6 +;; jrnz #nofire + btst a14,a6 + jrz #nofire + +;This guy on fire, let him jump higher! +; cmpi ->50200,a1 ;T.E. +; cmpi ->52200,a1 ;Old hangtime +; cmpi ->58200,a1 ;Cool value + cmpi ->54200,a1 ;Current value + jrgt #maxok + movi ->54200,a1 + jruc #maxok + +#nofire +;Maximum jumping height! +;FIX!! Should be linked to attribute! +; cmpi ->4b200,a1 ;4a200 +; jrgt #maxok +; movi ->4b200,a1 + + move *a13(plyr_num),a6 +;This is tied in with super blocks for create a player or powerup!! + .ref blkpower + move @blkpower,a14 + btst a6,a14 + jrz #norm1 +;FIX!! + jruc #norm1 ;Temp! + +;Powerup blocking ability + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#norm1 +;DJT Start + move *a13(plyr_seq),a6 + move *a13(plyr_ptsdown),a14 + jrgt #losing ;If losing, jump higher + +;If a block rej seq, allow this higher jump +;Allow this for winning team also + + cmpi BLOCKREJ_SEQ,a6 + jrz #higher + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher + cmpi ->4b200,a1 ;Let him jump higher + jrgt #maxok + movi ->4b200,a1 + jruc #maxok +#higher + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 + jruc #maxok +#losing +; cmpi ->4b700,a1 ;Let him jump higher + +;If a block rej seq, allow this higher jump +;Do this for winning team also + cmpi BLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi FASTBLOCKREJ_SEQ,a6 + jrz #higher_j + cmpi ->4b700,a1 ;Let him jump higher + jrgt #maxok + movi ->4b700,a1 + jruc #maxok +#higher_j + cmpi ->50000,a1 ;Let him jump higher + jrgt #maxok + movi ->50000,a1 +;DJT End +#maxok + move a1,*a8(OYVEL),L + + +#x PULL a6,a7,a9 + rets + + +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Sequence - Auto rebound jump +* B4=*Next data in seq list + + SUBR seq_rebounda + + move @ballpnum,a14 + jrge seq_stand ;Someone grabbed ball? + + + PUSH a6,a7,a9 + + + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + + move @ballobj_p,a5,L ;>Calc where ball is headed + + move *a5(OXVAL),a6,L + move *a5(OXANI),a0,L + add a0,a6 + move *a5(OZVAL),a7,L + move *a5(OYVAL),a9,L + + move *a5(OXVEL),a0,L + move *a5(OZVEL),a1,L + move *a5(OYVEL),a2,L + movk 20,b0 + movi GRAVB,a14 +#newblp + add a0,a6 + add a1,a7 + add a2,a9 + add a14,a2 + dsj b0,#newblp + + sra 16,a6 + sra 16,a7 + + + move *b4+,b0,L + move b0,a2 ;*Key img + + movk 20,a4 + + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 + movi 850,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + + move *a13(plyr_newdir),a14 + jrge #ndok + move *a13(plyr_dir),a14 +#ndok addk 8,a14 + sll 32-7,a14 + srl 32-7+4,a14 + subk 4,a14 + jrle #nof ;No flip? + neg a1 +#nof + add a1,a6 + + + move a6,a3 + move a7,a5 + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + + move *a8(OZPOS),a1 + sub a1,a5 ;Z delta + + movi 50,a1 ;Max delta (was 30) + cmp a1,a3 + jrlt #x1ok + move a1,a3 +#x1ok + cmp a1,a5 + jrlt #z1ok + move a1,a5 +#z1ok + neg a1 + cmp a1,a3 + jrgt #x2ok + move a1,a3 +#x2ok + cmp a1,a5 + jrgt #z2ok + move a1,a5 +#z2ok + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 +#setvel + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + sub a9,a3 ;- if above + divs a4,a3 + sub a3,a1 + cmpi ->1c000,a1 + jrlt #minok + movi ->1c000,a1 ;Min +#minok +; cmpi ->4a000,a1 +; jrgt #maxok + +; LOCKUP +; PULL a6,a7,a9 +; jruc seq_stand + +#maxok move a1,*a8(OYVEL),L + + + PULL a6,a7,a9 + rets + + +#******************************* +* Sequence - start dunk jump +* B4=*Next data in seq list + + SUBR seq_strtdunk + + move *b4+,b0,L + move b0,a2 ;*Slam img + + move *b4+,b0 + move b0,a4 ;#ticks till we reach rim + + move a4,*a13(plyr_slam_ticks) + movk 1,a0 ;Start jump + move a0,*a13(plyr_jmpcnt) + + clr a0 + move a0,@was_alley_shot ;A dunk is not an alley! + + move *a13(plyr_ohoopx),a3 + + move *a2(IANIOFFX),a1 + move *a2(IANI2X),a14 + sub a14,a1 +; movi 850,a0 + movi 900,a0 + mpys a0,a1 + sra 10,a1 ;/1024 + +; move *a13(plyr_dir),a14 +; addk 8,a14 +; sll 32-7,a14 +; srl 32-7+4,a14 +; subk 4,a14 +; jrle #nof ;No flip? +; neg a1 +;#nof + + move *a8(OCTRL),a14 + btst B_FLIPH,a14 + jrz #nof + neg a1 +#nof + add a1,a3 + + + move *a8(OXPOS),a1 + move *a8(OXANI+16),a14 + add a14,a1 + sub a1,a3 ;X delta + + move *a13(plyr_dir),a14 + addk 8,a14 ;Round up + srl 4,a14 ;Lose frac + sll 4,a14 ;*16 + addi #z_t,a14 + move *a14,a5 + move *a8(OZPOS),a1 + sub a1,a5 ;Y delta + + sll 16,a3 + sll 16,a5 + divs a4,a3 + divs a4,a5 + + move *a13(plyr_seqflgs),a0 + btst LAYUP_B,a0 + jrz #nolay + + movk LAY_UP,a0 + move a0,@shot_type + + movk 3,a14 + move a3,a7 + divs a14,a7 + sub a7,a3 + + move a5,a7 + divs a14,a7 + sub a7,a5 + +; sra 1,a3 +; sra 1,a5 + jruc #layin +#nolay + movk PS_DUNKS_TRY,a0 ;>Inc dunk stats + move *a13(plyr_num),a1 + calla inc_player_stat + +#layin + move a3,*a8(OXVEL),L + move a5,*a8(OZVEL),L + + movi -GRAV/2,a1 + mpys a4,a1 + move *a8(OYVAL),a3,L ;Adjust for hgt difference + subi (HOOPY+12)<<16,a3 ;- if above + divs a4,a3 + sub a3,a1 + move a1,*a8(OYVEL),L + + clr a0 + move a0,@plyrcharge + move a0,@slamming + + movi PS_2PTS_TRY,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + + cmpi 62,a4 ;60 + jrlt #nofl + + PUSH a10 + clr a10 + cmpi 48h,a4 + jrlt #nosnd + movi 10,a0 ;2% do bogus snd + calla RNDPER + jrls #nosnd + movk 1,a10 +#nosnd + move a7,a2 + CREATE0 plyr_camflash + move a2,a7 + PULL a10 + +#nofl + +;DJT Start +; TEMP TEMP TEMP TEMP TEMP TEMP TEMP +; CREATE0 show_hotspot_plyr_coor +; move a13,*a0(PA10),L + +;Do fire circles under shooting player only + move *a13(plyr_num),a14 + move @ballpnum,a0 + cmp a14,a0 + jrnz #nofire ; br=not shooter + + movk 1,a1 ;1st shot turns off show hotspot pup + sll a14,a1 + move @pup_showhotspots,a0 + andn a1,a0 + move a0,@pup_showhotspots + + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire ; br=shooter not on fire + + move @tvpanelon,a0,L + jrnz #nofire ; br=don't bog out + + .ref fire_circle + CREATE0 fire_circle + move a13,*a0(PA10),L +;DJT End + +#nofire + + + + rets + +;LOOK!!! +#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8 + .word CZMID-12,CZMID-8,CZMID,CZMID+8 + .word CZMID+12 + + +#******************************* +* Flash cameras in crowd + + .ref gndpos_t + + SUBR plyr_camflash + + move @pup_court,a14 + jrnz #die ;br=outdoor court, no camera flashes + + movk 7,a0 + callr rnd + addk 17,a0 + move a0,a8 +#lp CREATE0 plyr_cflsh + move a10,a10 + jrz #nosnd + CREATE0 plyr_cflsh_snd +#nosnd + movk 4,a0 ;7 + callr rnd +; addk 2,a0 + addk 4,a0 + calla PRCSLP + dsj a8,#lp +#die + DIE + +plyr_cflsh_snd + movk 3,a0 + callr rndrng0 + sll 5,a0 + addi flsh_t,a0 +;FIX!!! Ugly camera flash snd + move *a0,a0,L +#s1 calla snd_play1 + DIE + +flsh_t .long flsh1_snd,flsh3_snd,flsh3_snd,flsh4_snd + + +plyr_cflsh +;Give flashes a tall y range + movi >96,a0 + callr rndrng0 + subi >69,a0 + move a0,a2 + + movi 399,a0 + callr rndrng0 + move @WORLDTLX+16,a14 + subi >2000-200,a14 + add a14,a0 + sll 16,a0 ;X + + move a2,a1 + sll 16,a1 ;Y + + movi nflash1,a2 + movi 290,a3 + movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + movi gndpos_t,a1 + move a1,*a8(ODATA_p),L + + movi #f_l,a9 + movk 1,a0 + callr rnd + jrnz #1 + movi #f2_l,a9 +#1 + SLEEPK 2 + jauc FRQDELDIE + + +#f_l LW nflash2,2 + LW nflash3,2 + LW nflash3a,2 + LW nflash3,2 + LW nflash2,2 + LWL0 nflash1,2 + +#f2_l LW nflash4,2 + LW nflash5,1 + LW nflash6,1 + LW nflash5,1 + LWL0 nflash4,2 + + +#******************************* +* Sequence - slam ball through hoop (dunk) +* B4=*Next data in seq list + + SUBR seq_slamball + + + move @ballpnum,a0 + move *a13(plyr_num),a1 + cmp a0,a1 + jrne #x ;I don't have it? + + movk 1,a0 + move a0,@slamming + + move @ballobj_p,a5,L + + move *a5(OIMG),a1,L ;>Convert ball from player relative + move *a1(IANIOFFX),a1 + sll 16,a1 + move a1,*a5(OXANI),L + + +;Shawn, the ball isn't lined up for players scoring on left side of court + + move *a13(plyr_ohoopx),a7 ;>Set ball over rim +; THE BALL WASN'T BEING PLACED IN THE MIDDLE OF THE RIM!!! (WHY?!?!?) + subk 9,a7 +; subk 6,a7 + +; move *a13(plyr_seq),a0 +; cmpi DUNKT6_SEQ,a0 +; jrz #yes + + movi 35,a0 + calla RNDPER + jrls #noadjst + +#yes + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #nofix + addk 9,a7 +; addk 1,a7 +#nofix + subk 6,a7 + +#noadjst + + move a7,*a5(OXPOS) + + movi HOOPY-8,a14 + move a14,*a5(OYPOS) + movi CZMID,a14 + move a14,*a5(OZPOS) + +; movk >1f,a0 ;3% +; callr rnd +; jrnz #dunknorm + + movi 25,a0 + calla RNDPER + jrls #dunknorm + ;>Missed dunk + move *a13(plyr_ptsdown),a0 + subk 2,a0 + jrge #dunknorm ;I'm loosing by 5? + +; move *a13(plyr_num),a0 +; move @plyr_onfire,a14 +; btst a0,a14 +; jrnz #dunknorm + + move @plyr_onfire,a14 +;; jrnn #dunknorm + jrnz #dunknorm ;br=someone on-fire + + SOUND1 missd1_snd +; SOUND1 boo1_snd +; SOUND1 cheer1_snd + + movi >3ffff,a0 + callr rnd + subi >20000,a0 + move a0,a2 + movi >1ffff,a0 + callr rnd + addi >4000,a0 + move *a13(plyr_num),a1 + subk 2,a1 + jrge #t2 + neg a0 +#t2 movi -GRAVB*40,a3 ;Up + jruc #setxyz + +#dunknorm + +;Only flash screen white if on fire... + move *a13(plyr_num),a14 + move @plyr_onfire,a0 + btst a14,a0 + jrz #nofire + + .ref flash_white + calla flash_white +#nofire + +;Deliver a facial? + move *a13(plyr_o1dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrlt #dlvr + move *a13(plyr_o2dist),a0 + cmpi 35*DIST_REDUCTION,a0 + jrgt #nodlvr +#dlvr + move *a13(plyr_num),a0 + cmpi 2,a0 + jrlt #cktm2 +;check tm1 + +; Start opponent on fire here! + + move @plyrproc_t,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+32,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr + jruc #dlv +#cktm2 + move @plyrproc_t+64,a0,L + move *a0(plyr_stagcnt),a1 + move @plyrproc_t+96,a2,L + move *a2(plyr_stagcnt),a2 + add a2,a1 + cmpi 13,a1 + jrlt #nodlvr +#dlv + movi 350,a0 + calla RNDPER + jrhi #nodlvr + .ref call_facial_speech + calla call_facial_speech +#nodlvr + + CREATE0 #dunk_cheer + clr a0 + clr a2 + movi GRAVB*4,a3 +#setxyz move a0,*a5(OXVEL),L + move a2,*a5(OZVEL),L + move a3,*a5(OYVEL),L + + + move *a8(OXVEL),a1,L + move *a8(OZVEL),a2,L + + move *b4+,b0 ;Get # ticks we hang + move b0,a0 + move a0,*a13(plyr_hangcnt) + subk 2,a0 + jrlt #nohang +; move *a13(plyr_seq),a1 +; cmpi DUNKX3_SEQ,a1 +; jrnz #dck1 +;;Align dunkkx3 +; move *a8(OYPOS),a1 +; addk 5,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1 +; subi >2e,a1 ;2c +;#fix1 addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck1 +; cmpi DUNKX_SEQ,a1 +; jrnz #dck2 +;;Align dunkkx +; move *a8(OYPOS),a1 +; addk 9,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1a +; subi >2e,a1 ;2c +;#fix1a addi >18,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +;#dck2 +; cmpi DUNKX2_SEQ,a1 +; jrnz #dck3 +;;Align dunkkx +; move *a8(OYPOS),a1 +; subk 2,a1 +; move a1,*a8(OYPOS) +; move *a8(OXPOS),a1 +; move *a8(OXVEL),a2,L +; jrnn #fix1b +; subi >2e,a1 ;2c +;#fix1b addi >16,a1 +; move a1,*a8(OXPOS) +; jruc #fix2 +#dck3 + +#fix2 + clr a1 ;0 velocity + clr a2 + move a1,*a8(OYVEL),L +#nohang sra 1,a1 + sra 1,a2 + move a1,*a8(OXVEL),L + move a2,*a8(OZVEL),L + + move *a13(plyr_num),a1 + move a1,@ballpnumshot + move a1,@ballpnumlast + movi -1,a0 + move a0,@ballpnum ;No owner + clr a0 + move a0,@ballscorezhit + move a0,@ballrimhitcnt + move a0,@ballbbhitcnt + move a0,*a13(plyr_ownball) + movi TSEC+20,a0 + move a0,*a13(plyr_shtdly) + + rets + +#x addk 16,b4 + rets + +******************************* +#dunk_cheer + SLEEPK 15 + + movk 8,a0 + calla rndrng0 + move a0,a8 + sll 6,a8 + addi #dunk_crwd_sp_tbl,a8 + + move *a8+,a0,L + calla snd_play1 + SLEEPK 9 + move *a8,a0,L + jrz #done + calla snd_play1 +#done + SLEEP 5*60 + clr a0 + move a0,@slamming + DIE + + +#dunk_crwd_sp_tbl + .long cheer2_snd,0 + .long cheer1_snd,0 + .long cheer2_snd,0 + .long cheer3_snd,0 + .long cheer1_snd,cheer2_snd + .long cheer2_snd,0 + .long cheer2_snd,cheer3_snd + .long cheer4_snd,cheer1_snd + .long cheer2_snd,0 + +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd +; +; SLEEP 5*60 +; +; clr a0 +; move a0,@slamming + + DIE + + +#******************************* +* Sequence - push opponent in front of me + + SUBR seq_push + +;We have to make the accuracy dependent upon ptsdown! Except when pushing +;my own teammate, then keep it easy. + + PUSH a11 + + move *a13(plyr_dir),a3 + + move *a13(plyr_o1dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o1far ;Too far? + clr a5 ;O1 + move *a13(plyr_o1dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o1dsml + subi >80,a2 + abs a2 +#o1dsml subk 32,a2 ;16 + jrlt #pusho ;In front of me? + +#o1far + + move *a13(plyr_o2dist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #o2far ;Too far? + movk 32,a5 ;O2 + move *a13(plyr_o2dir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #o2dsml + subi >80,a2 + abs a2 +#o2dsml subk 32,a2 ;16 + jrlt #pusho +#o2far + +;Checking for teammate also + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #x ;I am a stupid drone? Drones never + ;push human teammate! + + move *a13(plyr_tmdist),a14 + subi 50*DIST_REDUCTION,a14 + jrgt #x ;Too far? + movi -1,a5 + move *a13(plyr_tmdir),a2 + sub a3,a2 + abs a2 + cmpi >40,a2 + jrle #tmdsml + subi >80,a2 + abs a2 +#tmdsml subk 16,a2 + jrlt #push + jruc #x + +;Make it harder to push team who is down by 5 or more pnts +;The CMOS game difficulty setting should also check this. + +#pusho + +;Fix up, make it harder, not impossible! + +; move *a13(plyr_num),a0 +; srl 1,a0 +; sll 4,a0 +; move a0,a1 +; XORK 16,a1 +; addi scores,a0 +; move *a0,a0 +; addi scores,a1 +; move *a1,a1 +; subk 5,a0 +; cmp a0,a1 +; jrge #push +; +;;Maybe ignore this successful push of an opponent (Teammate can always get it!) +;;50% of time +; movk 1,a0 +; callr rnd +; jrz #x + +#push + move @inbound,a0 + jrnn #x + + move *a13(plyr_num),a0 ;>Nail him + + move a5,a5 + jrnn #push_op ;Pushing opponent + + XORK 1,a0 ;Get teammate + sll 5,a0 + addi plyrproc_t,a0 + jruc #get_prc + +#push_op + +; PUSH a0 +; movi 100,a0 +; calla RNDPER +; jrls #no_facial +; movi facial_snd,a0 +; calla snd_play1 +;#no_facial +; PULL a0 + + srl 1,a0 + XORK 1,a0 + sll 6,a0 ;*64 + addi plyrproc_t,a0 + add a5,a0 + +#get_prc + move *a0,a5,L ;A5=*O proc + + move *a5(plyr_seqflgs),a14 +; movi 300,a0 +;% of time to ignore push if player is in layup sequence! + movi 500,a0 + btst LAYUP_B,a14 +;DJT Start + jrz #xz2n + move *a5(plyr_num),a14 + move @PSTATUS,a1 + btst a14,a1 ;Is pushee a human doing a layup? + jrz #xz2 ; br=no, do normal + move *a13(plyr_num),a14 + btst a14,a1 ;Is pusher a drone? + jrz #skpck ; br=yes, always succeed with push! + jruc #xz2 ;Do normal +#xz2n +;DJT End + move *a5(plyr_seq),a14 + cmpi SPIN_MOVE_SEQ,a14 + jrz #xz ;br=push SPINNING dude 15% of time + cmpi ELBO_SEQ,a14 + jrz #xz + cmpi ELBO2_SEQ,a14 + jrz #xz + cmpi REBOUND_SEQ,a14 + jrz #xz + cmpi REBOUNDA_SEQ,a14 + jrnz #skpck + +#xz + movi 150,a0 ;200 +#xz2 ;Layups 30% + calla RNDPER + jrls #x ;br=nope +#skpck + + move *a5(PA8),a2,L + move *a2(OYPOS),a0 + move *a8(OYPOS),a1 + sub a0,a1 + + cmpi >54,a1 ;>60,5c,58 + jrgt #x ;Too far above me? + +;player pushed speech here + + + move *a13(plyr_num),a14 + move @pup_maxpower,a0 + btst a14,a0 + jrz #nochng +;This guy has max power! Don't knock him down! + movk 9,a3 + jruc #maxp +#nochng + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_POWER),a3 +#maxp + move a3,@last_power ;For later analysis + + move *a13(plyr_dir),a0 + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + + sll 4,a0 ;*128 + sll 4,a1 + + move *a5(plyr_attrib_p),a14,L + move *a14(PAT_POWER),a14 + sub a3,a14 + move a14,a3 + cmpi 6,a14 + +;If the pusher is smaller than pushee, fly +;back just a short distance. + + jrge #shortfal + + sll 2,a0 ;*128 + sll 2,a1 + jruc #sh1 +#shortfal + PUSH a0,a1 + SOUND1 push1_snd + PULL a0,a1 +#sh1 + move a0,a11 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp2 + movk 1,a0 + move a0,*a5(plyr_jmpcnt) +#injmp2 + movi -GRAVB*11,a0 ;Up ;19 +; movi -GRAVB*18,a0 ;Up ;19 + move @HCOUNT,a14 + andi 07,a14 + jrnz #notlow + movi -GRAVB*9,a0 ;Up +; movi -GRAVB*14,a0 ;Up +#notlow + move a0,*a2(OYVEL),L +#injmp + movk 32,a0 + cmpi 7,a3 + jrlt #notsml + + movi 650,a0 + calla RNDPER + jrhi #notsml + +;35% of time, do small push away +; move @HCOUNT,a3 +; btst 0,a3 +; jrz #notsml + + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 16,a0 ;16 +#notsml + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #nochng1 +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + move *a2(OZVEL),a0,L + sra 2,a0 + move a0,*a2(OZVEL),L + move *a2(OXVEL),a0,L + sra 2,a0 + move a0,*a2(OXVEL),L + + SOUND1 push1_snd + + movk 16,a0 + move @HCOUNT,a1 + btst 0,a1 + jrz #nochng1 + movk 24,a0 ;16 +#nochng1 + move a0,*a5(plyr_stagcnt) + + move @ballpnum,a0 + move *a5(plyr_num),a1 + cmp a0,a1 + jrne #nobl ;Doesn't have ball? + +;Sometimes have pushed player keep ball! + + movk PS_STEALS,a0 + move *a13(plyr_num),a1 + calla inc_player_stat + move @my_ballpnumlast,a1 + jrn #noown3 + movk PS_TURNOVERS,a0 + calla inc_player_stat +#noown3 + + move @ballprcv_p,a0,L + jrz #ok_ball +;Messing with ball vels but pass has gotten triggered? +; .if DEBUG +; LOCKUP +; .endif + clr a0 + move a0,@ballprcv_p,L + +; callr flash_ball + SOUND1 steal_snd + SOUND1 swat_snd +; callr get_swat + +;Fall thru... +; jruc #nobl +#ok_ball + callr flash_ball + + move @ballobj_p,a4,L + movi >1ffff,a2 ;>Give rnd velocity + movi >10000,a3 + move a2,a0 + callr rnd + sub a3,a0 + move a0,*a4(OXVEL),L + move a2,a0 + callr rnd + sub a3,a0 + +;If pushed over scorers table, have ball drift down screen + + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear + + movi 40,a0 + move a0,*a5(plyr_shtdly) ;can't scoop up ball + + clr a0 + move a0,@ballbbhitcnt + not a0 ;=-1 + move a0,@ballpnum + move a0,@ballpnumlast + + movi [2,0],a0 +#not_rear + move a0,*a4(OZVEL),L + +;Make sure owner is losing ball! +; move @ballpnum,a0 +; jrn #nobl +; movi -1,a0 +; move a0,@ballpnum ;a14 + +#nobl + move *a5(plyr_num),a14 + sll 5,a14 + addi plyrobj_t,a14 + move *a14,a14,L + move *a14(OZPOS),a1 + cmpi >410,a1 + jrgt #not_rear2 + + move a11,a11 + jrnn #not_rear2 + + move *a5(plyr_ownball),a0 + jrle #not_rear2 ;br=hey, i dont have ball + SOUND1 into_stnd_sp + +#not_rear2 + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on push + move @plyr_onfire,a1 +;; cmp a0,a1 +;; jrz #x + btst a0,a1 + jrnz #x ;br=plyr on-fire + + move *a13(plyr_PDATA_p),a2,L + move *a2(ply_turbo),a1 + subk (TURBO_CNT*2)/13,a1 ;!!! Min cnt for push + jrge #clrbl + clr a1 +#clrbl + move a1,*a2(ply_turbo) + sll 5,a1 + .ref TURBO_52 + addi TURBO_52,a1 + move *a2(ply_meter_imgs+32),a0,L + move *a1(0),*a0(OSAG),L + +#x PULL a11 + rets + +; subk 7,a1 +; move a1,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; addk 7,a1 +; move a1,*a0(OFSET) +; +; jruc #x +; +;#clrbl +; move *a13(plyr_PDATA_p),a2,L +; move *a2(ply_turbo),a14 +; clr a0 +; move a0,*a2(ply_turbo) +; move *a2(ply_meter_imgs+40h),a0,L +; move *a0(OFSET),a1 ;Shrink meter +; add a14,a1 +; move a1,*a0(OFSET) +; +; +;#x PULL a11 +; rets + + +#******************************* +* Sequence - elbo opponents around me + + SUBR seq_elbo + + move *a13(plyr_num),a4 + srl 1,a4 + XORK 1,a4 + sll 6,a4 ;*64 + addi plyrproc_t,a4 + + move *a13(plyr_o1dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #o1far ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #o1far ;Skip? (50%) + + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o1dir),a0 + callr #elbo +#o1far + + move *a13(plyr_o2dist),a14 + subi 40*DIST_REDUCTION,a14 + jrge #x ;Too far? + + move @HCOUNT,a14 + btst 0,a14 + jrz #x ;Skip? (50%) + + addk 32,a4 + move *a4,a5,L ;A5=*O proc + move *a13(plyr_o2dir),a0 + callr #elbo + +#x rets + + +#elbo + move *a5(PA8),a2,L ;>Make opponent fly + + move a0,a1 + addi >40,a1 + sll 32-7,a1 + srl 32-7,a1 + move a1,*a5(plyr_newdir) + callr sinecos_get + +;Possibly elbos toss should be shorter? + sll 5,a0 ;*32 + sll 5,a1 + move a0,*a2(OZVEL),L + move a1,*a2(OXVEL),L + move *a5(plyr_jmpcnt),a0 + jrnz #injmp + movk 1,a0 + move a0,*a5(plyr_jmpcnt) + movi -GRAVB*9,a0 ;Up 15 +; movi -GRAVB*12,a0 ;Up 15 + move a0,*a2(OYVEL),L + + move *a5(plyr_num),a14 + move @pup_maxpower,a1 + btst a14,a1 + jrz #injmp +;This guy has max power! Don't knock him down! + movi -GRAVB*7,a0 ;7 +; movi -GRAVB*8,a0 ;7 + move a0,*a2(OYVEL),L + movk 24,a0 ;16 + move @HCOUNT,a1 + btst 0,a1 + jrz #ko + movk 16,a0 ;16 +#ko + move a0,*a5(plyr_stagcnt) + rets + +#injmp + movk 32,a0 + move a0,*a5(plyr_stagcnt) + + rets + +#***************************************************************************** +; a8 = * ball object +; a11 = hoop x + + .asg 22,DIAM + .asg PDATA,GAME_QTR + + SUBRP no_good_check + + move @gmqrtr,a0 + move a0,*a13(GAME_QTR) + +#loop + SLEEPK 1 + + move @game_time,a0,L ;If at beginning of qrtr, no speech! + cmpi >2050400,a0 ;!!! + jrgt #snuffit + + move @gmqrtr,a0 + move *a13(GAME_QTR),a1 + cmp a0,a1 ;If not in same qrtr, no speech! + jrne #snuffit + + move *a8(OYPOS),a0 ;Ball Y in range? No if > + cmpi HOOPY+15,a0 + jrgt #no_good + + move *a8(OXPOS),a0 ;Calc delta X for ball to hoop + move *a8(OXANI+10h),a1 + add a1,a0 + sub a11,a0 + abs a0 + subk DIAM,a0 ;Ball X in range? No if > + jrgt #no_good + + move *a8(OZPOS),a0 ;Calc delta Z for ball to hoop + subi CZMID,a0 + abs a0 + subk DIAM,a0 ;Ball Z in range? No if > + jrgt #no_good + + jruc #loop + +#no_good + calla nogood_speech + +#snuffit + DIE + +****************************************************************************** + .end + + diff --git a/SRC/PLYR3.ASM b/SRC/PLYR3.ASM new file mode 100644 index 0000000..1ba4aea --- /dev/null +++ b/SRC/PLYR3.ASM @@ -0,0 +1,4167 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 9/17/92 +* +* Modified: Mark Turmell, 1/6/93 -Split from PLYR.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/23/93 15:13 +************************************************************** + .file "plyr3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + .include "hotspot.tbl" + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "audit.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtbl7.glo" + .include "imgtbl1.glo" + + .include "plyrhd.glo" + .include "plyrhd2.glo" + .include "plyrhd5.glo" + .include "HOTSPOT.GLO" + + .include "ball.tbl" + .include "ballshad.tbl" + .include "ballshad.glo" + + +;sounds external + + + +;symbols externally defined + +;DJT Start + .ref game_time +;DJT End + .ref gug1,BEdwrd1 + + .ref pup_court,pup_aba + .ref anipt_getsclxy + .ref BAKMODS,BGND_UD1 +; .ref snd_play1ovr + .ref IRQSKYE + .ref dpageflip + .ref GAMSTATE + .ref COLCYC + .ref system_savegame,system_restoregame + .ref tvpanelon + .ref RNDRNG0 + .ref READ_DIP + + .ref pal_getf + +;From plyrat3.asm + .ref sd_h +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h +; .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + .ref Cow_h + .ref fifi_h + .ref FIFI_F + .ref Alien_h + .ref Mel_h + .ref Mik_h + .ref Joe_h + .ref Ang_h + .ref Lis_h + .ref Guido_h + .ref Ber_h + .ref Chk_h + .ref Fat_h + .ref Fra_h + .ref Gor_h + .ref Gre_h + .ref Old_h + .ref Pig_h + .ref Wiz_h + .ref eric_h + .ref madball_h + .ref jackjr_h + .ref kim_h + .ref clown_h + .ref ape_h + .ref cheech_h + .ref mar_h + .ref bardo_h + .ref oursler_h + .ref mxv_h + .ref eddie_h + .ref dim_h + .ref mike_h + .ref sean_h + .ref bud_h + .ref BUD_F + .ref bardo_h + .ref willy_h + + .ref plyrobj_t + .ref BOON_F,TOBIAS_F,OURSL_F + .ref EDDIE_F + +;symbols defined in this file + + .def NBALL101,NBALL601,ABALL101 + + .def plr_heads_small,plr_heads_small_end + .def SM_HEADS_CNT + + +;uninitialized ram definitions + +; .bss cycram ,9*16 +; .bss clipbits ,32 ;Bit set for each clip # shown +; +; BSSX clipsrunning ,32 + + BSSX ditch_meter,16 + +;equates for this file + + + .text + +#******************************* +* do ball animation + + SUBR do_ball_ani + + move *a8(OZPOS),a2 ;No + subi CZMIN-32,a2 ;-Base -32 to go 1 smaller @ crt top + jrge #zge + clr a2 +#zge + srl 5,a2 + move *a13(ball_zsznum),a4 + sub a2,a4 + jrne #newani ;Same Z range? br=no + dsj a10,#skipa + +#newani + move a2,*a13(ball_zsznum) + sll 5,a2 + move a2,a3 + move *a8(OPAL),a1 ;Chk for correct palette + sll 32-8,a1 + srl 32-8-5,a1 + .ref PALRAM + addi PALRAM-32,a1 + move *a1,a1,L + movi BBALL_P,a0 ;=reg ball pal + move *a13(ball_onfire),a14 ;Is someone on-fire? + jrz #nofpal ; br=no + addi #anif_t,a2 + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #notd ; br=no + movi BBALFLA_P,a0 ;=blue ball pal + jruc #notd +#nofpal + addi #ani_t,a2 + move @pup_aba,a14 + jrz #notd + movi ABALL_P,a0 ;=reg ball pal + addi #ania_t-#ani_t,a2 +#notd + cmp a1,a0 ;Does ball have the right palette? + jreq #gotp ; br=yes + calla pal_getf + move a0,*a8(OPAL) ;Set correct palette + +#gotp + move *a13(ball_ani1st_p),a1,L + move *a2,a2,L + cmp a1,a2 + jreq #sameseq + + addi #shad_t,a3 ;Set new shadow img + move *a3,a0,L + move a0,*a9(OIMG),L + move *a0,a14,L + move a14,*a9(OSIZE),L + move *a0(ISAG),*a9(OSAG),L + move *a0(IANIOFFY),a14 + neg a14 + move a14,*a9(OYPOS) + + move a2,*a13(ball_ani1st_p),L + jruc #newz + +#sameseq + move *a13(ball_onfire),a14 + jrnz #movin ;On fire? + move *a8(OXVEL),a0,L + abs a0 + srl 2,a0 + jrnz #movin + movk 5,a10 + move *a8(OZVEL),a0,L + abs a0 + srl 2,a0 + jrz #skipa +#movin + move *a13(ball_ani_p),a2,L + move *a2+,a0,L ;*Next img + jrnz #notend + move a1,a2 +#newz + move *a2+,a0,L ;*1st img +#notend + move *a2+,a10 + move a2,*a13(ball_ani_p),L + + move a0,*a8(OIMG),L ;Set new ball img + movb *a0(ICTRL+7),*a8(OCTRL+7) ;Set 5 z comp & 3 bpp bits + move *a0,a2,L + move a2,*a8(OSIZE),L + move *a0(ISAG),*a8(OSAG),L + move *a0(IANIOFFX),a2 + move *a0(IANIOFFY),*a13(ball_aniy) + move *a13(ball_anix),a1 + move a2,*a13(ball_anix) + move *a8(OXPOS),a0 + add a1,a0 ;Old ani X + sub a2,a0 ;-New ani X + move a0,*a8(OXPOS) + +#skipa + rets + + +#ani_t + .long #b1_l + + .long #b1_l,#b1_l,#b1_l,#b2_l,#b2_l,#b3_l + .long #b3_l,#b4_l,#b5_l,#b6_l,#b7_l + + .long #b8_l,#b8_l,#b8_l,#b8_l,#b8_l,#b8_l + +; .long #b1_l +; +; .long #b2_l,#b2_l,#b3_l,#b3_l,#b4_l,#b4_l +; .long #b5_l,#b6_l,#b7_l,#b8_l,#b9_l +; +; .long #b10_l,#b10_l,#b10_l,#b10_l,#b10_l,#b10_l + + .asg 2,D + +;DJT Start + .def CBANI_T +CBANI_T +;DJT End +#b1_l + LWLWLWLW NBALL101,D,NBALL102,D,NBALL103,D,NBALL104,D + LWLWLWLW NBALL105,D,NBALL106,D,NBALL107,D,NBALL108,D + LWLWLWLW NBALL109,D,NBALL110,D,NBALL111,D,NBALL112,D + LWLWLWLW NBALL113,D,NBALL114,D,NBALL115,D,NBALL116,D + LWLWLWLW NBALL117,D,NBALL118,D,NBALL119,D,NBALL120,D + LWLWLWLW NBALL121,D,NBALL122,D,NBALL123,D,NBALL124,D + LWLWLWLW NBALL125,D,NBALL126,D,NBALL127,D,NBALL128,D + LWLW NBALL129,D,NBALL130,D + .long 0 + +#b2_l + LWLWLWLW NBALL201,D,NBALL202,D,NBALL203,D,NBALL204,D + LWLWLWLW NBALL205,D,NBALL206,D,NBALL207,D,NBALL208,D + LWLWLWLW NBALL209,D,NBALL210,D,NBALL211,D,NBALL212,D + LWLWLWLW NBALL213,D,NBALL214,D,NBALL215,D,NBALL216,D + LWLWLWLW NBALL217,D,NBALL218,D,NBALL219,D,NBALL220,D + LWLWLWLW NBALL221,D,NBALL222,D,NBALL223,D,NBALL224,D + LWLWLWLW NBALL225,D,NBALL226,D,NBALL227,D,NBALL228,D + LWLW NBALL229,D,NBALL230,D + .long 0 + +#b3_l + LWLWLWLW NBALL301,D,NBALL302,D,NBALL303,D,NBALL304,D + LWLWLWLW NBALL305,D,NBALL306,D,NBALL307,D,NBALL308,D + LWLWLWLW NBALL309,D,NBALL310,D,NBALL311,D,NBALL312,D + LWLWLWLW NBALL313,D,NBALL314,D,NBALL315,D,NBALL316,D + LWLWLWLW NBALL317,D,NBALL318,D,NBALL319,D,NBALL320,D + LWLWLWLW NBALL321,D,NBALL322,D,NBALL323,D,NBALL324,D + LWLWLWLW NBALL325,D,NBALL326,D,NBALL327,D,NBALL328,D + LWLW NBALL329,D,NBALL330,D + .long 0 + +#b4_l + LWLWLWLW NBALL401,D,NBALL402,D,NBALL403,D,NBALL404,D + LWLWLWLW NBALL405,D,NBALL406,D,NBALL407,D,NBALL408,D + LWLWLWLW NBALL409,D,NBALL410,D,NBALL411,D,NBALL412,D + LWLWLWLW NBALL413,D,NBALL414,D,NBALL415,D,NBALL416,D + LWLWLWLW NBALL417,D,NBALL418,D,NBALL419,D,NBALL420,D + LWLWLWLW NBALL421,D,NBALL422,D,NBALL423,D,NBALL424,D + LWLWLWLW NBALL425,D,NBALL426,D,NBALL427,D,NBALL428,D + LWLW NBALL429,D,NBALL430,D + .long 0 + +#b5_l + LWLWLWLW NBALL501,D,NBALL502,D,NBALL503,D,NBALL504,D + LWLWLWLW NBALL505,D,NBALL506,D,NBALL507,D,NBALL508,D + LWLWLWLW NBALL509,D,NBALL510,D,NBALL511,D,NBALL512,D + LWLWLWLW NBALL513,D,NBALL514,D,NBALL515,D,NBALL516,D + LWLWLWLW NBALL517,D,NBALL518,D,NBALL519,D,NBALL520,D + LWLWLWLW NBALL521,D,NBALL522,D,NBALL523,D,NBALL524,D + LWLWLWLW NBALL525,D,NBALL526,D,NBALL527,D,NBALL528,D + LWLW NBALL529,D,NBALL530,D + .long 0 + +#b6_l + LWLWLWLW NBALL601,D,NBALL602,D,NBALL603,D,NBALL604,D + LWLWLWLW NBALL605,D,NBALL606,D,NBALL607,D,NBALL608,D + LWLWLWLW NBALL609,D,NBALL610,D,NBALL611,D,NBALL612,D + LWLWLWLW NBALL613,D,NBALL614,D,NBALL615,D,NBALL616,D + LWLWLWLW NBALL617,D,NBALL618,D,NBALL619,D,NBALL620,D + LWLWLWLW NBALL621,D,NBALL622,D,NBALL623,D,NBALL624,D + LWLWLWLW NBALL625,D,NBALL626,D,NBALL627,D,NBALL628,D + LWLW NBALL629,D,NBALL630,D + .long 0 + +#b7_l + LWLWLWLW NBALL701,D,NBALL702,D,NBALL703,D,NBALL704,D + LWLWLWLW NBALL705,D,NBALL706,D,NBALL707,D,NBALL708,D + LWLWLWLW NBALL709,D,NBALL710,D,NBALL711,D,NBALL712,D + LWLWLWLW NBALL713,D,NBALL714,D,NBALL715,D,NBALL716,D + LWLWLWLW NBALL717,D,NBALL718,D,NBALL719,D,NBALL720,D + LWLWLWLW NBALL721,D,NBALL722,D,NBALL723,D,NBALL724,D + LWLWLWLW NBALL725,D,NBALL726,D,NBALL727,D,NBALL728,D + LWLW NBALL729,D,NBALL730,D + .long 0 + +#b8_l + LWLWLWLW NBALL801,D,NBALL802,D,NBALL803,D,NBALL804,D + LWLWLWLW NBALL805,D,NBALL806,D,NBALL807,D,NBALL808,D + LWLWLWLW NBALL809,D,NBALL810,D,NBALL811,D,NBALL812,D + LWLWLWLW NBALL813,D,NBALL814,D,NBALL815,D,NBALL816,D + LWLWLWLW NBALL817,D,NBALL818,D,NBALL819,D,NBALL820,D + LWLWLWLW NBALL821,D,NBALL822,D,NBALL823,D,NBALL824,D + LWLWLWLW NBALL825,D,NBALL826,D,NBALL827,D,NBALL828,D + LWLW NBALL829,D,NBALL830,D + .long 0 + +;;#b9_l +;; LWLWLWLW NBALL901,D,NBALL902,D,NBALL903,D,NBALL904,D +;; LWLWLWLW NBALL905,D,NBALL906,D,NBALL907,D,NBALL908,D +;; LWLWLWLW NBALL909,D,NBALL910,D,NBALL911,D,NBALL912,D +;; LWLWLWLW NBALL913,D,NBALL914,D,NBALL915,D,NBALL916,D +;; LWLWLWLW NBALL917,D,NBALL918,D,NBALL919,D,NBALL920,D +;; LWLWLWLW NBALL921,D,NBALL922,D,NBALL923,D,NBALL924,D +;; LWLWLWLW NBALL925,D,NBALL926,D,NBALL927,D,NBALL928,D +;; LWLW NBALL929,D,NBALL930,D +;; .long 0 +;; +;;#b10_l +;; LWLWLWLW NBALL1001,D,NBALL1002,D,NBALL1003,D,NBALL1004,D +;; LWLWLWLW NBALL1005,D,NBALL1006,D,NBALL1007,D,NBALL1008,D +;; LWLWLWLW NBALL1009,D,NBALL1010,D,NBALL1011,D,NBALL1012,D +;; LWLWLWLW NBALL1013,D,NBALL1014,D,NBALL1015,D,NBALL1016,D +;; LWLWLWLW NBALL1017,D,NBALL1018,D,NBALL1019,D,NBALL1020,D +;; LWLWLWLW NBALL1021,D,NBALL1022,D,NBALL1023,D,NBALL1024,D +;; LWLWLWLW NBALL1025,D,NBALL1026,D,NBALL1027,D,NBALL1028,D +;; LWLW NBALL1029,D,NBALL1030,D +;; .long 0 + + +#anif_t + .long #bf1_l + + .long #bf1_l,#bf1_l,#bf1_l,#bf2_l,#bf2_l,#bf3_l + .long #bf3_l,#bf4_l,#bf5_l,#bf6_l,#bf7_l + + .long #bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l,#bf8_l + +; .long #bf1_l +; +; .long #bf2_l,#bf2_l,#bf3_l,#bf3_l,#bf4_l,#bf4_l +; .long #bf5_l,#bf6_l,#bf7_l,#bf8_l,#bf9_l +; +; .long #bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l,#bf10_l + + + .asg 2,D + +#bf1_l + LWLWLWLW FBALL101,D,FBALL102,D,FBALL103,D,FBALL104,D + LWLWLWLW FBALL105,D,FBALL106,D,FBALL107,D,FBALL108,D + LWLWLWLW FBALL109,D,FBALL110,D,FBALL111,D,FBALL112,D + LWLWLWLW FBALL113,D,FBALL114,D,FBALL115,D,FBALL116,D + LWLWLWLW FBALL117,D,FBALL118,D,FBALL119,D,FBALL120,D + LWLWLWLW FBALL121,D,FBALL122,D,FBALL123,D,FBALL124,D + LWLWLWLW FBALL125,D,FBALL126,D,FBALL127,D,FBALL128,D + LWLW FBALL129,D,FBALL130,D + .long 0 + +#bf2_l + LWLWLWLW FBALL201,D,FBALL202,D,FBALL203,D,FBALL204,D + LWLWLWLW FBALL205,D,FBALL206,D,FBALL207,D,FBALL208,D + LWLWLWLW FBALL209,D,FBALL210,D,FBALL211,D,FBALL212,D + LWLWLWLW FBALL213,D,FBALL214,D,FBALL215,D,FBALL216,D + LWLWLWLW FBALL217,D,FBALL218,D,FBALL219,D,FBALL220,D + LWLWLWLW FBALL221,D,FBALL222,D,FBALL223,D,FBALL224,D + LWLWLWLW FBALL225,D,FBALL226,D,FBALL227,D,FBALL228,D + LWLW FBALL229,D,FBALL230,D + .long 0 + +#bf3_l + LWLWLWLW FBALL301,D,FBALL302,D,FBALL303,D,FBALL304,D + LWLWLWLW FBALL305,D,FBALL306,D,FBALL307,D,FBALL308,D + LWLWLWLW FBALL309,D,FBALL310,D,FBALL311,D,FBALL312,D + LWLWLWLW FBALL313,D,FBALL314,D,FBALL315,D,FBALL316,D + LWLWLWLW FBALL317,D,FBALL318,D,FBALL319,D,FBALL320,D + LWLWLWLW FBALL321,D,FBALL322,D,FBALL323,D,FBALL324,D + LWLWLWLW FBALL325,D,FBALL326,D,FBALL327,D,FBALL328,D + LWLW FBALL329,D,FBALL330,D + .long 0 + +#bf4_l + LWLWLWLW FBALL401,D,FBALL402,D,FBALL403,D,FBALL404,D + LWLWLWLW FBALL405,D,FBALL406,D,FBALL407,D,FBALL408,D + LWLWLWLW FBALL409,D,FBALL410,D,FBALL411,D,FBALL412,D + LWLWLWLW FBALL413,D,FBALL414,D,FBALL415,D,FBALL416,D + LWLWLWLW FBALL417,D,FBALL418,D,FBALL419,D,FBALL420,D + LWLWLWLW FBALL421,D,FBALL422,D,FBALL423,D,FBALL424,D + LWLWLWLW FBALL425,D,FBALL426,D,FBALL427,D,FBALL428,D + LWLW FBALL429,D,FBALL430,D + .long 0 + +#bf5_l + LWLWLWLW FBALL501,D,FBALL502,D,FBALL503,D,FBALL504,D + LWLWLWLW FBALL505,D,FBALL506,D,FBALL507,D,FBALL508,D + LWLWLWLW FBALL509,D,FBALL510,D,FBALL511,D,FBALL512,D + LWLWLWLW FBALL513,D,FBALL514,D,FBALL515,D,FBALL516,D + LWLWLWLW FBALL517,D,FBALL518,D,FBALL519,D,FBALL520,D + LWLWLWLW FBALL521,D,FBALL522,D,FBALL523,D,FBALL524,D + LWLWLWLW FBALL525,D,FBALL526,D,FBALL527,D,FBALL528,D + LWLW FBALL529,D,FBALL530,D + .long 0 + +#bf6_l + LWLWLWLW FBALL601,D,FBALL602,D,FBALL603,D,FBALL604,D + LWLWLWLW FBALL605,D,FBALL606,D,FBALL607,D,FBALL608,D + LWLWLWLW FBALL609,D,FBALL610,D,FBALL611,D,FBALL612,D + LWLWLWLW FBALL613,D,FBALL614,D,FBALL615,D,FBALL616,D + LWLWLWLW FBALL617,D,FBALL618,D,FBALL619,D,FBALL620,D + LWLWLWLW FBALL621,D,FBALL622,D,FBALL623,D,FBALL624,D + LWLWLWLW FBALL625,D,FBALL626,D,FBALL627,D,FBALL628,D + LWLW FBALL629,D,FBALL630,D + .long 0 + +#bf7_l + LWLWLWLW FBALL701,D,FBALL702,D,FBALL703,D,FBALL704,D + LWLWLWLW FBALL705,D,FBALL706,D,FBALL707,D,FBALL708,D + LWLWLWLW FBALL709,D,FBALL710,D,FBALL711,D,FBALL712,D + LWLWLWLW FBALL713,D,FBALL714,D,FBALL715,D,FBALL716,D + LWLWLWLW FBALL717,D,FBALL718,D,FBALL719,D,FBALL720,D + LWLWLWLW FBALL721,D,FBALL722,D,FBALL723,D,FBALL724,D + LWLWLWLW FBALL725,D,FBALL726,D,FBALL727,D,FBALL728,D + LWLW FBALL729,D,FBALL730,D + .long 0 + +#bf8_l + LWLWLWLW FBALL801,D,FBALL802,D,FBALL803,D,FBALL804,D + LWLWLWLW FBALL805,D,FBALL806,D,FBALL807,D,FBALL808,D + LWLWLWLW FBALL809,D,FBALL810,D,FBALL811,D,FBALL812,D + LWLWLWLW FBALL813,D,FBALL814,D,FBALL815,D,FBALL816,D + LWLWLWLW FBALL817,D,FBALL818,D,FBALL819,D,FBALL820,D + LWLWLWLW FBALL821,D,FBALL822,D,FBALL823,D,FBALL824,D + LWLWLWLW FBALL825,D,FBALL826,D,FBALL827,D,FBALL828,D + LWLW FBALL829,D,FBALL830,D + .long 0 + +;;#bf9_l +;; LWLWLWLW FBALL901,D,FBALL902,D,FBALL903,D,FBALL904,D +;; LWLWLWLW FBALL905,D,FBALL906,D,FBALL907,D,FBALL908,D +;; LWLWLWLW FBALL909,D,FBALL910,D,FBALL911,D,FBALL912,D +;; LWLWLWLW FBALL913,D,FBALL914,D,FBALL915,D,FBALL916,D +;; LWLWLWLW FBALL917,D,FBALL918,D,FBALL919,D,FBALL920,D +;; LWLWLWLW FBALL921,D,FBALL922,D,FBALL923,D,FBALL924,D +;; LWLWLWLW FBALL925,D,FBALL926,D,FBALL927,D,FBALL928,D +;; LWLW FBALL929,D,FBALL930,D +;; .long 0 +;; +;;#bf10_l +;; LWLWLWLW FBALL1001,D,FBALL1002,D,FBALL1003,D,FBALL1004,D +;; LWLWLWLW FBALL1005,D,FBALL1006,D,FBALL1007,D,FBALL1008,D +;; LWLWLWLW FBALL1009,D,FBALL1010,D,FBALL1011,D,FBALL1012,D +;; LWLWLWLW FBALL1013,D,FBALL1014,D,FBALL1015,D,FBALL1016,D +;; LWLWLWLW FBALL1017,D,FBALL1018,D,FBALL1019,D,FBALL1020,D +;; LWLWLWLW FBALL1021,D,FBALL1022,D,FBALL1023,D,FBALL1024,D +;; LWLWLWLW FBALL1025,D,FBALL1026,D,FBALL1027,D,FBALL1028,D +;; LWLW FBALL1029,D,FBALL1030,D +;; .long 0 + + +#ania_t + .long #ba1_l + + .long #ba1_l,#ba1_l,#ba1_l,#ba2_l,#ba2_l,#ba3_l + .long #ba3_l,#ba4_l,#ba5_l,#ba6_l,#ba7_l + + .long #ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l,#ba8_l + +; .long #ba1_l +; +; .long #ba2_l,#ba2_l,#ba3_l,#ba3_l,#ba4_l,#ba4_l +; .long #ba5_l,#ba6_l,#ba7_l,#ba8_l,#ba9_l +; +; .long #ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l,#ba10_l + + .asg 2,D + +#ba1_l + LWLWLWLW ABALL101,D,ABALL102,D,ABALL103,D,ABALL104,D + LWLWLWLW ABALL105,D,ABALL106,D,ABALL107,D,ABALL108,D + LWLWLWLW ABALL109,D,ABALL110,D,ABALL111,D,ABALL112,D + LWLWLWLW ABALL113,D,ABALL114,D,ABALL115,D,ABALL116,D + LWLWLWLW ABALL117,D,ABALL118,D,ABALL119,D,ABALL120,D + LWLWLWLW ABALL121,D,ABALL122,D,ABALL123,D,ABALL124,D + LWLWLWLW ABALL125,D,ABALL126,D,ABALL127,D,ABALL128,D + LWLW ABALL129,D,ABALL130,D + .long 0 + +#ba2_l + LWLWLWLW ABALL201,D,ABALL202,D,ABALL203,D,ABALL204,D + LWLWLWLW ABALL205,D,ABALL206,D,ABALL207,D,ABALL208,D + LWLWLWLW ABALL209,D,ABALL210,D,ABALL211,D,ABALL212,D + LWLWLWLW ABALL213,D,ABALL214,D,ABALL215,D,ABALL216,D + LWLWLWLW ABALL217,D,ABALL218,D,ABALL219,D,ABALL220,D + LWLWLWLW ABALL221,D,ABALL222,D,ABALL223,D,ABALL224,D + LWLWLWLW ABALL225,D,ABALL226,D,ABALL227,D,ABALL228,D + LWLW ABALL229,D,ABALL230,D + .long 0 + +#ba3_l + LWLWLWLW ABALL301,D,ABALL302,D,ABALL303,D,ABALL304,D + LWLWLWLW ABALL305,D,ABALL306,D,ABALL307,D,ABALL308,D + LWLWLWLW ABALL309,D,ABALL310,D,ABALL311,D,ABALL312,D + LWLWLWLW ABALL313,D,ABALL314,D,ABALL315,D,ABALL316,D + LWLWLWLW ABALL317,D,ABALL318,D,ABALL319,D,ABALL320,D + LWLWLWLW ABALL321,D,ABALL322,D,ABALL323,D,ABALL324,D + LWLWLWLW ABALL325,D,ABALL326,D,ABALL327,D,ABALL328,D + LWLW ABALL329,D,ABALL330,D + .long 0 + +#ba4_l + LWLWLWLW ABALL401,D,ABALL402,D,ABALL403,D,ABALL404,D + LWLWLWLW ABALL405,D,ABALL406,D,ABALL407,D,ABALL408,D + LWLWLWLW ABALL409,D,ABALL410,D,ABALL411,D,ABALL412,D + LWLWLWLW ABALL413,D,ABALL414,D,ABALL415,D,ABALL416,D + LWLWLWLW ABALL417,D,ABALL418,D,ABALL419,D,ABALL420,D + LWLWLWLW ABALL421,D,ABALL422,D,ABALL423,D,ABALL424,D + LWLWLWLW ABALL425,D,ABALL426,D,ABALL427,D,ABALL428,D + LWLW ABALL429,D,ABALL430,D + .long 0 + +#ba5_l + LWLWLWLW ABALL501,D,ABALL502,D,ABALL503,D,ABALL504,D + LWLWLWLW ABALL505,D,ABALL506,D,ABALL507,D,ABALL508,D + LWLWLWLW ABALL509,D,ABALL510,D,ABALL511,D,ABALL512,D + LWLWLWLW ABALL513,D,ABALL514,D,ABALL515,D,ABALL516,D + LWLWLWLW ABALL517,D,ABALL518,D,ABALL519,D,ABALL520,D + LWLWLWLW ABALL521,D,ABALL522,D,ABALL523,D,ABALL524,D + LWLWLWLW ABALL525,D,ABALL526,D,ABALL527,D,ABALL528,D + LWLW ABALL529,D,ABALL530,D + .long 0 + +#ba6_l + LWLWLWLW ABALL601,D,ABALL602,D,ABALL603,D,ABALL604,D + LWLWLWLW ABALL605,D,ABALL606,D,ABALL607,D,ABALL608,D + LWLWLWLW ABALL609,D,ABALL610,D,ABALL611,D,ABALL612,D + LWLWLWLW ABALL613,D,ABALL614,D,ABALL615,D,ABALL616,D + LWLWLWLW ABALL617,D,ABALL618,D,ABALL619,D,ABALL620,D + LWLWLWLW ABALL621,D,ABALL622,D,ABALL623,D,ABALL624,D + LWLWLWLW ABALL625,D,ABALL626,D,ABALL627,D,ABALL628,D + LWLW ABALL629,D,ABALL630,D + .long 0 + +#ba7_l + LWLWLWLW ABALL701,D,ABALL702,D,ABALL703,D,ABALL704,D + LWLWLWLW ABALL705,D,ABALL706,D,ABALL707,D,ABALL708,D + LWLWLWLW ABALL709,D,ABALL710,D,ABALL711,D,ABALL712,D + LWLWLWLW ABALL713,D,ABALL714,D,ABALL715,D,ABALL716,D + LWLWLWLW ABALL717,D,ABALL718,D,ABALL719,D,ABALL720,D + LWLWLWLW ABALL721,D,ABALL722,D,ABALL723,D,ABALL724,D + LWLWLWLW ABALL725,D,ABALL726,D,ABALL727,D,ABALL728,D + LWLW ABALL729,D,ABALL730,D + .long 0 + +#ba8_l + LWLWLWLW ABALL801,D,ABALL802,D,ABALL803,D,ABALL804,D + LWLWLWLW ABALL805,D,ABALL806,D,ABALL807,D,ABALL808,D + LWLWLWLW ABALL809,D,ABALL810,D,ABALL811,D,ABALL812,D + LWLWLWLW ABALL813,D,ABALL814,D,ABALL815,D,ABALL816,D + LWLWLWLW ABALL817,D,ABALL818,D,ABALL819,D,ABALL820,D + LWLWLWLW ABALL821,D,ABALL822,D,ABALL823,D,ABALL824,D + LWLWLWLW ABALL825,D,ABALL826,D,ABALL827,D,ABALL828,D + LWLW ABALL829,D,ABALL830,D + .long 0 + +;;#ba9_l +;; LWLWLWLW ABALL901,D,ABALL902,D,ABALL903,D,ABALL904,D +;; LWLWLWLW ABALL905,D,ABALL906,D,ABALL907,D,ABALL908,D +;; LWLWLWLW ABALL909,D,ABALL910,D,ABALL911,D,ABALL912,D +;; LWLWLWLW ABALL913,D,ABALL914,D,ABALL915,D,ABALL916,D +;; LWLWLWLW ABALL917,D,ABALL918,D,ABALL919,D,ABALL920,D +;; LWLWLWLW ABALL921,D,ABALL922,D,ABALL923,D,ABALL924,D +;; LWLWLWLW ABALL925,D,ABALL926,D,ABALL927,D,ABALL928,D +;; LWLW ABALL929,D,ABALL930,D +;; .long 0 +;; +;;#ba10_l +;; LWLWLWLW ABALL1001,D,ABALL1002,D,ABALL1003,D,ABALL1004,D +;; LWLWLWLW ABALL1005,D,ABALL1006,D,ABALL1007,D,ABALL1008,D +;; LWLWLWLW ABALL1009,D,ABALL1010,D,ABALL1011,D,ABALL1012,D +;; LWLWLWLW ABALL1013,D,ABALL1014,D,ABALL1015,D,ABALL1016,D +;; LWLWLWLW ABALL1017,D,ABALL1018,D,ABALL1019,D,ABALL1020,D +;; LWLWLWLW ABALL1021,D,ABALL1022,D,ABALL1023,D,ABALL1024,D +;; LWLWLWLW ABALL1025,D,ABALL1026,D,ABALL1027,D,ABALL1028,D +;; LWLW ABALL1029,D,ABALL1030,D +;; .long 0 + + +#shad_t + .long ballshad7 + + .long ballshad7,ballshad7,ballshad7,ballshad6,ballshad6,ballshad5 + .long ballshad5,ballshad4,ballshad4,ballshad3,ballshad2 + + .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + +; .long ballshad9 +; +; .long ballshad8,ballshad8,ballshad7,ballshad7,ballshad7,ballshad7 +; .long ballshad6,ballshad5,ballshad4,ballshad4,ballshad2 +; +; .long ballshad2,ballshad2,ballshad2,ballshad2,ballshad2,ballshad2 + + +#******************************* +* Show halftime intro and clips (JSRP) + + +CLIPTEST .equ 0 + + SUBR halftime_showclips + + movi 4*60,a10 + +#stop SLEEPK 1 + subk 1,a10 + jrle #tvout + move @tvpanelon,a0,L + jrnz #stop +#tvout + + RETP + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fadeaside + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofdsd + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrz #nofdsd ;br=a drone! + move *a13(plyr_num),a0 + .ref get_stick_val_cur + calla get_stick_val_cur ;ret. a0=joy switch value + + move *a13(plyr_num),a14 + srl 1,a14 + jrnz #fdtm2 ;br=team 1 + + cmpi JOY_LEFT,a0 + jrne #nofdsd ;br=dont do fade-aside + movi -2500h*6,a1 ;x velocity + jruc #fdtm1 +#fdtm2 + cmpi JOY_RIGHT,a0 + jrne #nofdsd + movi 2500h*6,a1 ;x velocity + addk 32,b4 ;skip over fade-away seq. ptr +#fdtm1 + move *b4,b4,L ;set new seq. + move a1,*a8(OXVEL),L + rets + +#nofdsd + addi 32*2,b4 + rets + + +************************************************************** +* +************************************************************** + SUBR seq_handle_fade_away + + move *a13(plyr_seq),a0 + cmpi SHOOT_SEQ,a0 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 25,a14 ;too close to hoop ? + jrlt #nofadwy ;br=yes + + move *a13(plyr_num),a14 + move @PSTATUS,a0 + btst a14,a0 + jrnz #humn ;br=not a drone! + move *a13(plyr_ohpdist),a14 + cmpi >ff,a14 ;too far from hoop ? + jrgt #nofadwy ;br=yes + + move *a13(PA8),a2,L + move *a2(OXANI+16),a1 + move *a2(OXPOS),a2 ;my X pos. + add a1,a2 + + movk 2,a14 ;team 2 + move *a13(plyr_num),a5 + srl 1,a5 ;get opponents proc. + jrz #drnf2 ;br=team 1 + clr a14 +#drnf2 + sll 5,a14 + addi plyrobj_t,a14 + move *a14+,a5,L ;get opponent #1's X + move *a5(OXANI+16),a1 + move *a5(OXPOS),a5 + add a1,a5 + + move *a14,a3,L ;get opponent #2's X + move *a3(OXANI+16),a1 + move *a3(OXPOS),a3 + add a1,a3 + + move *a13(plyr_seqdir),a14 + move a14,a0 + + move *a13(plyr_o1dist),a1 + cmpi 70,a1 + jrgt #ckop2 ;br=opponent #1 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp ;br=team 2 + cmp a5,a2 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp + cmp a2,a5 ;is opponent #1 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 + +#ckop2 + move *a13(plyr_o2dist),a1 + cmpi 70,a1 + jrgt #nofadwy ;br=opponent #2 to far + move *a13(plyr_anirevff),a1 + jrnz #lhp2 ;br=team 2 + cmp a3,a2 ;is opponent #2 behind me ? + jrgt #fdin ;br=yes + jruc #drnfd2 +#lhp2 + cmp a2,a3 ;is opponent #2 behind me ? + jrlt #drnfd2 ;br=no + +#fdin + xori 4,a0 ;change to opp. dir (FADE IN) + jruc #drnfd2 +#humn + move *a13(plyr_seqdir),a14 + + move *a13(plyr_num),a0 + calla get_stick_val_cur ;ret. a0=joy switch value + + sll 32-4,a0 + srl 32-4-4,a0 + addi joy_dir_tbl,a0 + move *a0,a0 + jrn #nofadwy ;br=joy. not in correct dir. + +;This is a lean in or fade away, reduce % only if a 3 pt shot + movk 1,a4 + .ref reduce_3ptr + move a4,@reduce_3ptr + +#drnfd2 + move a0,a2 + sll 6,a0 + addi vels_tbl,a0 + move *a0+,a1,L ;get X vel + move *a0,a0,L ;get Z vel + + cmp a2,a14 + jreq #fdawy + xori 4,a2 ;change to opposite dir + cmp a2,a14 + jrne #nofadwy + + move *a13(plyr_ohpdist),a14 + cmpi 60,a14 ;too close for fade-in ? + jrlt #nofadwy ;br=yes + addk 32,b4 ;do FADE-IN seq +#fdawy + move *b4,b4,L + move a1,*a8(OXVEL),L +;#nox + move a0,*a8(OZVEL),L + rets +#nofadwy + addi 32*2,b4 + rets + + +joy_dir_tbl + .word -1,-1,-1,-1,2,3,1,-1,6,5,7,-1,-1,-1,-1,-1,-1,-1 + +vels_tbl + .long 0 , 0 ;direction 1 + .long -21efh*7, 21efh*7 ;^ 2 (3000h * .707) + .long -3000h*6, 0 ;^ 3 + .long -21efh*7,-21efh*7 ;^ 4 + .long 0 , 0 ;^ 5 + .long 21efh*7,-21efh*7 ;^ 6 + .long 3000h*6, 0 ;^ 7 + .long 21efh*7, 21efh*7 ;^ 8 + + +#******************************* +* Dispatch salt explosions from rim at on fire time +* A8=*Ball object + + SUBR rim_salt + + movk 8,a9 +#lp CREATE0 #do_salt + SLEEPK 2 + dsj a9,#lp + DIE + +#do_salt + movi #salt_t,a9 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + + movi 10000h,a0 + calla RNDRNG0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + addi 10000h,a0 + move a0,a7 + btst 0,a7 + jrz #1 + movi #salt2_t,a9 +#1 + move *a8(OZPOS),a3 + addk 1h,a3 + move *a8(OYVAL),a1,L + move *a8(OXVAL),a0,L + addi [10,0],a0 + + move *a8(OXPOS),a14 + cmpi WRLDMID,a14 + jrlt #lft + addi [6,0],a0 + movi DMAWNZ|M_FLIPH|M_NOCOLL|M_3D|M_NOSCALE,a4 +#lft + movi SALTA01,a2 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#salt_t + .ref SALTTR_P + LW SALTA01,1 + LW SALTA02,2 + LW SALTA03,2 + LW SALTA04,2 + LW SALTA05,2 + LW SALTA06,2 + LW SALTA07,2 + LW SALTA08,3 + LW SALTA09,3 + LWL0 SALTA10,3 + +#salt2_t + LW SALTB01,2 + LW SALTB02,2 + LW SALTB03,2 + LW SALTB04,2 + LW SALTB05,2 + LW SALTB06,2 + LW SALTB07,2 + LW SALTB08,3 + LW SALTB09,3 + LW SALTB10,3 + LWL0 SALTB11,3 + + +;DJT Start +#******************************* +* Shot hotspots powerup + + .ref ballpnum,pup_showhotspots,amodeloop + + SUBR plyr_showhotspots + + SLEEPK 8 ;Wait for things to init + + movi pup_showhotspots,a11,L ;Ptr for checking the pup + +;;; move @GAMSTATE,a14 +;;; subk INAMODE,a14 +;;; jrnz #nam +;;; jrz amode_showhotspots ;!!! +;;; move @amodeloop,a14 +;;; andi 3,a14 +;;; subk 3,a14 +;;; jrz amode_showhotspots +;;;#nam + + .if HOTSPOT + move @plyrproc_t,a10,L + .ref hotspot_xz_t + movi hotspot_xz_t,a9,L +#s1 + move *a9(0),*a10(plyr_hotspotx) ;hotspot X + move *a9(16),*a10(plyr_hotspotz) ;hotspot Z + CREATE0 show_hotspot_proc_coor + SLEEPK 1 + addk 32,a9 + .ref hotspot_xz_tend + cmpi hotspot_xz_tend,a9,L + jrnz #s1 +#s99 + .endif + .if DEBUG + movk >f,a14 + move a14,*a11 + .endif + move *a11,a14 ;Any players have it enabled? + jaz SUCIDE ; br=no + +#lpclr + movi -1,a8 ;Plyr# thats showing hotspot +#lp + SLEEPK 4 + move @game_time,a14,L ;Die for sure at end of 1st qrtr + jrz #kill_showhotspot + + move @ballpnum,a6 ;Anyone have the ball? + jrnn #chkplyr ; br=yes + move a8,a8 ;Need to kill a show? + jrn #lp ; br=no show going +#kill + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) + jruc #lpclr + +#chkplyr + cmp a6,a8 ;Is a show going? + jrne #noshow ; br=not for this guy anyway + move *a11,a14 ;Is plyr pup still active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #kill ; br=this plyr isn't + movk 2,a14 ;Keep plyr hotspot active + move a14,*a9(PA11) + jruc #lp + +#noshow + move a8,a8 ;Need to kill a show? + jrn #newplyr ; br=no show going + movk 1,a14 ;Kill show next time through + move a14,*a9(PA11) +#newplyr + move *a11,a14 ;Is plyr pup active? + jrz #kill_showhotspot ; br=no plyrs are! + btst a6,a14 + jrz #lpclr ; br=this plyr isn't + + move a6,a8 ;Set up a new show + sll 5,a6 + addi plyrproc_t,a6,L + move *a6,a10,L ;Get plyr *proc + .if DEBUG + .ref CLOCK_OFF + move @CLOCK_OFF,a14 + jrz #t99 + move *a10(plyr_hotspot_p),a14,L + move a14,a9 + jrnz #lp +#t99 + .endif + CREATE0 show_hotspot_proc_coor + move a0,a9 + jruc #lp + +#kill_showhotspot + + DIE + +;;;#* +;;; .asg CLSDEAD|555,CLSHSM +;;; +;;; SUBRP amode_showhotspots +;;; +;;; move *a11,a14 ;Any players have it enabled? +;;; jaz SUCIDE ; br=no +;;; +;;; movi #hsmes,a9,L +;;; clr a10 +;;; clr a3 +;;; movi >8000|M_NOCOLL|M_3D|M_NOSCALE,a4 +;;; movi CLSHSM,a5 +;;; clr a0 +;;; clr a6 +;;; clr a7 +;;;#mkhsm +;;; move *a9+,a2,L +;;; jrz #lpclr +;;; clr a1 +;;; PUSH a0 +;;; calla BEGINOBJ2 +;;; PULL a0 +;;; move *a8(OSIZEX),a14 +;;; sll 16,a14 +;;; add a14,a0 +;;; movi 50,a14 ;stupid K!!! +;;; move a14,*a8(OMISC) ;save Z offset +;;; move a10,*a8(ODATA_p),L ;Link the obj list +;;; move a8,a10 +;;; jruc #mkhsm +;;; +;;;#lpclr +;;; movi -1,a8 ;Plyr# thats showing hotspot +;;;#lp +;;; SLEEPK 4 +;;; move @game_time,a14,L ;Die for sure at end of 1st qrtr +;;; jrz #kill_showhotspot +;;; +;;; move @ballpnum,a6 ;Anyone have the ball? +;;; jrnn #chkplyr ; br=yes +;;; move a8,a8 ;Need to kill a show? +;;; jrn #lp ; br=no show going +;;;#kill +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#kill1 +;;; move a10,a0 +;;;#khsm +;;; move *a0(OCTRL),a14 ;Turn off hotspot msg +;;; andni 3,a14 +;;; move a14,*a0(OCTRL) +;;; move *a0(ODATA_p),a0,L +;;; jrnz #khsm +;;; jruc #lpclr +;;; +;;;#chkplyr +;;; move a8,a14 ;Is a hotspot showing? +;;; jrn #nohsm ; br=no +;;; sll 5,a14 +;;; addi plyrproc_t,a14,L ;Get plyr hotspot *obj +;;; move *a14,a14,L +;;; move *a14(plyr_hotspot_p),a14,L +;;; jrz #nohsm +;;; move *a14(PA8),a14,L +;;; +;;; move *a14(OXVAL),a0,L ;Get hotspot coords +;;; move *a14(OYVAL),a1,L +;;; move *a14(OZVAL),a2,L +;;; subk 10,a1 +;;; move a10,a3 +;;; move *a3(OXVAL),a5,L +;;;#mhsm +;;; move *a3(OXVAL),a4,L +;;; sub a5,a0 +;;; add a4,a0 +;;; move a4,a5 +;;; move a0,*a3(OXVAL),L ;Move hotspot msg +;;; move a1,*a3(OYVAL),L +;;; move a2,*a3(OZVAL),L +;;; move *a3(ODATA_p),a3,L +;;; jrnz #mhsm +;;;#nohsm +;;; cmp a6,a8 ;Is a show going? +;;; jrne #noshow ; br=not for this guy anyway +;;; move *a11,a14 ;Is plyr pup still active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill ; br=this plyr isn't +;;; movk 2,a14 ;Keep plyr hotspot active +;;; move a14,*a9(PA11) +;;; jruc #lp +;;; +;;;#noshow +;;; move a8,a8 ;Need to kill a show? +;;; jrn #newplyr ; br=no show going +;;; movk 1,a14 ;Kill show next time through +;;; move a14,*a9(PA11) +;;;#newplyr +;;; move *a11,a14 ;Is plyr pup active? +;;; jrz #kill_showhotspot ; br=no plyrs are! +;;; btst a6,a14 +;;; jrz #kill1 ;lpclr ; br=this plyr isn't +;;; +;;; move a6,a8 ;Set up a new show +;;; sll 5,a6 +;;; addi plyrproc_t,a6,L +;;; move a10,a5 +;;; move *a6,a10,L ;Get plyr *proc +;;; CREATE0 show_hotspot_proc_coor +;;; move a0,a9 +;;; move a5,a10 +;;;#ahsm +;;; move *a5(OCTRL),a14 ;Turn on hotspot msg +;;; ori 2,a14 +;;; move a14,*a5(OCTRL) +;;; move *a5(ODATA_p),a5,L +;;; jrnz #ahsm +;;; jruc #lp +;;; +;;;#kill_showhotspot +;;; movi CLSHSM,a0 +;;; calla obj_del1c +;;; +;;; DIE +;;; +;;; .ref B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;;;#hsmes +;;; .long B8TCYC_H +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long B8TCYC_S +;;; .long B8TCYC_P +;;; .long B8TCYC_O +;;; .long B8TCYC_T +;;; .long 0 + + +#******************************* +* Hotspot disc under feet +* A10=*Plyr process + + SUBR show_hotspot_proc_coor + + move *a10(plyr_hotspotx),a0 ;hotspot X + move *a10(plyr_hotspotz),a3 ;hotspot Z + jruc #dospot + + SUBR show_hotspot_plyr_coor + + move *a10(plyr_num),a8 ;Get plyr *obj + sll 5,a8 + addi plyrobj_t,a8,L + move *a8,a8,L + + move *a8(OZPOS),a3 ;hotspot Z + + move *a10(plyr_shadobj_p),a8,L + + move *a8(OXPOS),a0 ;hotspot X + move *a8(OXANI+16),a2 + add a2,a0 + +#dospot + sll 16,a0 + subi 50,a3 + + clr a1 ;hotspot Y + + move *a10(plyr_num),a11 + sll 5,a11 + addi #hotspot_t,a11,L + .ref TWOPLAYERS + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + addi #2p_t-#hotspot_t,a11 +#nkit + move *a11,a11,L ;Get hotspot pal ptr + movi #hotspot_ani,a9,L ;Starting *ani + + move a11,b0 + move *a9+,a2,L + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJP2 + movi 50,a0 ;stupid K!!! + move a0,*a8(OMISC) ;save Z offset + + move a13,*a10(plyr_hotspot_p),L ;give plyr proc access + + movk 3,a11 ;!!! timeout counter +#lp + SLEEPK 1 + + move @game_time,a14,L + jrz kill_hotspot + move *a9+,a0,L + jrnz #lp1 + movi #hotspot_ani,a9,L ;Starting *ani + move *a9+,a0,L + move @HALT,A14 + jrnz #lp1 + .if DEBUG + move @CLOCK_OFF,a14 + jrnz #lp1 + .endif + subk 1,a11 + jrz kill_hotspot +#lp1 + move *a0(IANIOFFX),*a8(OXANI+16) + move *a8(OCTRL),a1 + calla obj_aniq_cnoff + jruc #lp + +kill_hotspot + clr a14 + move a14,*a10(plyr_hotspot_p),L ;kill plyr proc access + jauc DELOBJDIE + +;-------------------- +* A13=*Plyr process +*Trashes A0,A14 + + SUBR update_hotspot_plyr_coor + + move *a13(plyr_hotspot_p),a0,L ;get plyr hotspot *proc + + movk 3,a14 ;!!! Reset timeout counter + move a14,*a0(PA11),L + + rets + + + .ref HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P +#hotspot_t + .long HOTC_B_P,HOTC_G_P + .long HOTC_Y_P,HOTC_R_P +#2p_t + .long HOTC_B_P,HOTC_B_P + .long HOTC_R_P,HOTC_R_P + +#hotspot_ani + .long HOTCRC01 + .long HOTCRC02 + .long HOTCRC03 + .long HOTCRC04 + .long HOTCRC05 + .long HOTCRC06 + .long HOTCRC07 + .long HOTCRC08 + .long HOTCRC09 + .long HOTCRC10 + .long HOTCRC11 + .long HOTCRC12 + .long HOTCRC13 + .long HOTCRC12 + .long HOTCRC11 + .long HOTCRC10 + .long HOTCRC09 + .long HOTCRC08 + .long HOTCRC07 + .long HOTCRC06 + .long HOTCRC05 + .long HOTCRC04 + .long HOTCRC03 + .long HOTCRC02 + .long 0 + +;; move *a10(plyr_shadobj_p),a8,L +;; +;; move *a8(OXANI+16),a1 ;X +;; move *a8(OXPOS),a0 +;; add a1,a0 +;; addi 14,a0 +;; sll 16,a0 +;; +;; clr a1 ;Y +;; +;; move *a8(OZPOS),a3 ;Z +;; addi 22h,a3 +;; +;; move *a10(plyr_num),a9 +;; sll 6,a9 +;; addi #hotspot_disc_t,a9,L +;; .ref TWOPLAYERS +;; move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players +;; jrz #nkit +;; addi 2p_hd_t-hotspot_disc_t,a9 +;;#nkit +;; move *a9+,a2,L ;Get hotspot img ptr +;; move *a9,a9,L ;Get cycle RAM ptr +;; move *a2(ICMAP),a11,L ;Get img *pal +;; +;; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +;; movi CLSDEAD,a5 +;; clr a6 +;; clr a7 +;; calla BEGINOBJ2 +;; move a8,*a13(PDATA),L ;Save *obj +;; +;; move a11,a8 ;Get obj *pal +;; movi [1,15],a10 ;1st,last color +;; movk 2,a11 ;Rate +;; CREATE CYCPID,COLCYC +;; move a0,a11 ;Save *proc +;; +;; movi 50,a0 ;!!! Stupid K +;;#lp +;; calla PRCSLP +;; movk 1,a0 +;; .ref game_time +;; move @game_time,a14,L +;; jrz kill_hotspot +;; move @HALT,A14 +;; jrnz #lp +;; +;;kill_hotspot +;; move a11,a0 ;Get *proc & kill it +;; calla KILL +;; +;; move *a13(PDATA),a8,L ;Get *obj & kill it +;; jauc DELOBJDIE +;; +;; +;; .bss spotcycram1,15*2*16 ;Palette cycle mem +;; .bss spotcycram2,15*2*16 +;; .bss spotcycram3,15*2*16 +;; .bss spotcycram4,15*2*16 +;; +;;#hotspot_disc_t +;; .ref HOTblu,HOTgrn,HOTyel,HOTred +;; .long HOTblu,spotcycram1,HOTgrn,spotcycram2 +;; .long HOTyel,spotcycram3,HOTred,spotcycram4 +;;#2p_hd_t +;; .long HOTblu,spotcycram1,HOTblu,spotcycram2 +;; .long HOTred,spotcycram3,HOTred,spotcycram4 + +;DJT End +#******************************* +* Fire circle under feet +* A8=*Src obj +* A10=*Plyr process + + SUBR fire_circle + + + move @pup_court,a14 + jrz #notd + + CREATE0 #foot_smoke + CREATE0 #foot_smoke2 +#notd + + movi #fire_circle_t,a9 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 14,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi HOTNA_01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; movi scale50_t,a0 +; move a0,*a8(ODATA_p),L + SLEEPK 1 + jauc FRQDELDIE + + +#fire_circle_t + .ref HOT_P + LW HOTNA_01,1 + LW HOTNA_02,2 + LW HOTNA_03,2 + LW HOTNA_04,2 + LW HOTNA_05,2 + LW HOTNA_06,2 + LW HOTNA_07,2 + LW HOTNA_08,3 + LW HOTNA_09,3 + LW HOTNA_10,3 + LW HOTNA_11,3 + LW HOTNA_12,4 + LWL0 HOTNA_13,4 + +#foot_smoke + SLEEPK 2 +#foot_smoke2 + movi #smoke_t,a9 + + movi 20000h,a0 + calla RNDRNG0 + subi 10000h,a0 + move a0,a6 + movi 60000h,a0 + calla RNDRNG0 + neg a0 + move a0,a7 + + move *a10(plyr_shadobj_p),a8,L + move *a8(OXANI+16),a0 + move *a8(OXPOS),a2 + add a0,a2 + addi 8,a2 + move a2,a0 + sll 16,a0 + + clr a1 + + move *a8(OZPOS),a3 + addi 22h,a3 + + movi SMOKE01,a2 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + SLEEPK 1 + jauc FRQDELDIE + + +#smoke_t + .ref SMOKE_P + LW SMOKE01,1 + LW SMOKE02,2 + LW SMOKE03,2 + LW SMOKE04,2 + LW SMOKE05,2 + LW SMOKE06,2 + LW SMOKE07,2 + LW SMOKE08,3 + LW SMOKE09,3 + LWL0 SMOKE10,3 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +;* A10=*Plyr process + +; SUBR ball_smoketrail +; +; movi 8000,a11 +;#lp CREATE0 ball_smokepuff +; SLEEPK 2 +; dsj a11,#lp +; DIE + + +;#******************************* +;* Start sparks in AMODE +; +; SUBR do_ball_spark +; +; movi 45,a11 +;#lp CREATE0 ball_spark +; SLEEPK 4 +; dsj a11,#lp +; DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj + + SUBR ball_smokepuff + + move a8,a11 + +; move @HCOUNT,a0 +; sll 32-1,a0 +; jrnz #nosprk +; CREATE0 ball_spark +;#nosprk + movk 3,a0 + callr rnd + sll 5,a0 + + + .ref balltmshotcnt + move @balltmshotcnt,a14 + subk TMFIRE_MINCNT,a14 + jrn #reg + +;Use blue smoke for team on fire + addi smoke_team_t,a0 + jruc #cont +#reg + + addi smoke_t,a0 +#cont move *a0,a9,L + + move *a8(OZPOS),a3 ;puff ZPOS + movk 3,a0 + callr rnd +; subk 2,a0 ;-2 to 1 + add a0,a3 + + move *a8(OXVAL),a0,L ;puff XPOS @ ball mid X + move *a8(OSIZEX),a2 + sll 16-1,a2 + add a2,a0 + + move *a8(OYVAL),a1,L ;puff YPOS @ ball mid Y + move *a8(OSIZEY),a2 + sll 16-1,a2 + add a2,a1 + + move *a9+,a2,L ;puff IMG + + move *a2(IANIOFF),a6,L ;Add ani X,Y so obj X,Y is still + clr a7 ; ball mid X,Y + movy a6,a7 + sll 16,a6 + add a6,a0 + add a7,a1 + + movi DMAWNZ|M_3D|M_NOCOLL,a4 + movi CLSDEAD,a5 + move *a8(OXVEL),a6,L ;puff XVEL & YVEL + move *a8(OYVEL),a7,L + sra 2,a6 + sra 2,a7 + calla BEGINOBJ2 + + movi scale50_t,a0 ;puff *scale + move a0,*a8(ODATA_p),L + move *a11(OZVEL),a0,L ;puff ZVEL + sra 2,a0 + move a0,*a8(OZVEL),L + + calla anipt_getsclxy ;Adjust for scaled puff ani X,Y + move *a8(OXVAL),a14,L + sub a0,a14 + move a14,*a8(OXVAL),L + move *a8(OYVAL),a14,L + sub a1,a14 + move a14,*a8(OYVAL),L + + move *a11(OXANI),a14,L ;Get ball ani X + jrz #alp ; br=skip if 0 + move a14,*a8(OXANI),L ;Save it to puff & go resolve for X + move a8,a0 + .ref convfmprel + calla convfmprel + jruc #alp + +#lp + move *a8(OCTRL),a1 + move *a0(ICTRL),a14 + andi >8003,a1 + or a14,a1 + move a1,*a8(OCTRL) + calla obj_aniq_scld + clr a0 + move a0,*a8(OXANI),L ;Clr scaled anipt +#alp + move *a9+,a0 ;Any flags with sleep cnt? + jrnn #slp ; br=no + move a0,a2 + move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL) + move a2,a0 + sll 32-8,a0 ;Keep 8 lsbs for sleep cnt + srl 32-8,a0 +#slp + calla PRCSLP + move *a9+,a0,L + jrnz #lp + jauc DELOBJDIE + + +smoke_t + .long smoko_l,smokw_l,smoko_l,smokp_l +smoke_team_t + .long smokb_l,smokw_l,smokb_l,smokb_l + +smoko_l + LW XPLOD_YEL,2 + LWL SMOK1_01,2+>8000,SMOK_O_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,1 ;2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokw_l + LW XPLOD_BRT,2 + LWL SMOK1_02,2+>8000,SMOK_W_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokb_l + LW XPLOD_BLU,2 + LWL SMOK1_01,2+>8000,SMOK_B_P + LW SMOK1_02,2 + LW SMOK1_03,2 + LWL SMOK1_04,2+>8000,SMOK_W_P + LW SMOK1_05,2 + LW SMOK1_06,2 + LW SMOK1_07,1 ;2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 +smokp_l + LW XPLOD_BLU,2 + LWL SMOK1_02,2+>8000,SMOK_P_P + LW SMOK1_03,2 + LW SMOK1_04,2 + LWL SMOK1_05,2+>8000,SMOK_W_P + LW SMOK1_06,2 + LW SMOK1_07,2 + LW SMOK1_08,1 ;2 + LW SMOK1_09,1 ;2 + LW SMOK1_10,1 ;2 + LW SMOK1_11,1 ;2 + LWL0 SMOK1_12,1 ;2 + + +SCLT .macro sx,sy,sxa,sya + .eval :sx:*1048,X ;Convert (has slight error) + .eval :sy:*1048,Y + .eval :sxa:*1048,XA + .eval :sya:*1048,YA + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*1/4,X + .eval Y+YA*1/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*2/4,X + .eval Y+YA*2/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA*3/4,X + .eval Y+YA*3/4,Y + .endloop + .loop 10 + .word >10000000/X,>10000000/Y + .word >100000/(>10000000/X),>100000/(>10000000/Y) + .eval X+XA,X + .eval Y+YA,Y + .endloop + .endm + +;-------------------- +; Generate scale tables + +;scale30_t +; SCLT 300,300,19,19 + +;scale50_t +; SCLT 500,500,31,31 + +scale50_t + SCLT 330,330,18,18 + + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#******************************* +* +* A3 - direction +* >a0 - dunk seq. + + SUBR getdunkseq + + + move *a13(plyr_num),a0 ;If on fire, don't use turbo on run + .ref plyr_onfire + move @plyr_onfire,a1 + btst a0,a1 + jrnz set5 ;br=player is on fire!! + + move *a13(plyr_attrib_p),a0,L + move *a0(PAT_DUNKSKILL),a0 + +; movk 9,a0 + + sll 5,a0 + addi jmp_t,a0 + move *a0,a0,L + jump a0 + +set5 + addi d5u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d5s_t-d5u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 60,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d5m_t-d5s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d5l_t-d5m_t,a3,W + jruc #shortd +; +set4 + addi d4u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d4s_t-d4u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d4m_t-d4s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d4l_t-d4m_t,a3,W + jruc #shortd + +; +set3 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d3s_t-d3u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d3m_t-d3s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d3l_t-d3m_t,a3,W + jruc #shortd + +; +set2 + addi d3u_t,a3 + + cmpi 40,a4 + jrle #shortd ;Under hoop? + addi d2s_t-d2u_t,a3 + + cmpi 70,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d2m_t-d2s_t,a3,W + + cmpi 100,a4 ;Med range + jrle #shortd + addi d2l_t-d2m_t,a3,W + jruc #shortd + +; +set1 + addi d1u_t,a3 + + cmpi 40,a4 +; cmpi 60,a4 + jrle #shortd ;Under hoop? + addi d1s_t-d1u_t,a3 + + cmpi 70,a4 ;Short range +; cmpi 80,a4 ;Short range + jrle #shortd + + move *a13(plyr_turbon),a14 + jrz #sj + + addi d1m_t-d1s_t,a3,W + + cmpi 100,a4 ;Med range +; cmpi 110,a4 ;Med range + jrle #shortd + + addi d1l_t-d1m_t,a3,W + + +#shortd clr a0 + rets +#sj movk 1,a0 + rets + + +; +; Which set of dunks to use based on 0-10 attribute level +; +jmp_t .long set1,set1,set1,set2,set2 + .long set3,set4,set4,set5,set5,set5 + + +#**************************************************************************** + + +;Set of dunks for #5 skill level + +d5u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d5s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d5m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d5l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 4-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKA2_SEQ,DUNKP2_SEQ + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2s_t .word 3-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ + +#d3s_t .word 1-1 + .word DUNKU3_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKP2_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t + .word 13-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKK_SEQ + .word DUNKK2_SEQ,DUNKK_SEQ,DUNKZ3_SEQ,DUNKR2_SEQ + .word DUNKU2_SEQ,DUNKY2_SEQ,DUNKLAY_SEQ,DUNKC_SEQ + .word DUNKZ3_SEQ + + +#d2m_t + .word 14-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKJ2_SEQ + .word DUNKK_SEQ,DUNKN_SEQ,DUNKC_SEQ,DUNKP_SEQ + .word DUNKT_SEQ,DUNKT2_SEQ,DUNKZ3_SEQ,DUNKZ2_SEQ + .word DUNKY2_SEQ,DUNKZ2_SEQ + + +#d3m_t + .word 12-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKQ_SEQ,DUNKV_SEQ + .word DUNKLAY_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKD_SEQ + .word DUNKK_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKT_SEQ + + +#d4m_t + .word 9-1 + .word DUNKJ2_SEQ,DUNKP_SEQ,DUNKQ_SEQ,DUNKT2_SEQ + .word DUNKP_SEQ,DUNKX2_SEQ,DUNKX3_SEQ,DUNKD_SEQ + .word DUNKE2_SEQ + + +#d5m_t + .word 3-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKY2_SEQ,DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ + + +#d2l_t .word 32-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKN_SEQ,DUNKN2_SEQ,DUNKN3_SEQ,DUNKO_SEQ + .word DUNKP_SEQ,DUNKP3_SEQ,DUNKG2_SEQ,DUNKF_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT3_SEQ,DUNKLAY2_SEQ + .word DUNKT5_SEQ,DUNKU2_SEQ,DUNKW3_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ,DUNKY2_SEQ,DUNKZ2_SEQ,DUNKY_SEQ + .word DUNKLAY6_SEQ,DUNKX3_SEQ,DUNKZ3_SEQ,DUNKLAY_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + + +#d3l_t .word 37-1 + .word DUNKB_SEQ,DUNKK2_SEQ,DUNKD_SEQ,DUNKG2_SEQ + .word DUNKL_SEQ,DUNKN_SEQ,DUNKN2_SEQ,DUNKJ_SEQ + .word DUNKN3_SEQ,DUNKO_SEQ,DUNKP3_SEQ,DUNKQ_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKT3_SEQ,DUNKV_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKV3_SEQ,DUNKW_SEQ + .word DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ,DUNKP3_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKY2_SEQ + .word DUNKLAY3A_SEQ,DUNKV_SEQ,DUNKLAY7_SEQ,DUNKO2_SEQ + .word DUNKL2_SEQ + + +#d4l_t .word 21-1 + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKY_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKQ2_SEQ,DUNKX2_SEQ + .word DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKP3_SEQ,DUNKT5_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKD_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW2_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #4 skill players + +d4u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d4s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d4m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d4l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 3-1 + .word DUNKA3_SEQ,DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 3-1 + .word DUNKA3_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d3u_t .word 3-1 + .word DUNKD2_SEQ,DUNKL3_SEQ,DUNKU3_SEQ + +#d4u_t .word 4-1 + .word DUNKD2_SEQ,DUNKE_SEQ,DUNKL3_SEQ,DUNKP2_SEQ + +#d5u_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 6-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKR_SEQ + .word DUNKLAY3C_SEQ,DUNKP2_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR2_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKZ3_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + + +#d2m_t .word 16-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKR_SEQ,DUNKT_SEQ,DUNKJ2_SEQ + .word DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKZ3_SEQ,DUNKLAY8_SEQ + .word DUNKP_SEQ,DUNKY2_SEQ,DUNKJ2_SEQ,DUNKT2_SEQ + + +#d3m_t .word 11-1 + .word DUNKB_SEQ,DUNKD_SEQ,DUNKJ2_SEQ,DUNKV_SEQ + .word DUNKY2_SEQ,DUNKT_SEQ,DUNKT2_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKLAY_SEQ,DUNKX3_SEQ + + +#d4m_t .word 8-1 + .word DUNKJ2_SEQ,DUNKX3_SEQ,DUNKE2_SEQ,DUNKD_SEQ + .word DUNKP_SEQ,DUNKQ_SEQ,DUNKX2_SEQ,DUNKT2_SEQ + + +#d5m_t .word 3-1 + .word DUNKP_SEQ,DUNKE2_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 12-1 + .word DUNKB3_SEQ,DUNKU2_SEQ,DUNKK2_SEQ,DUNKN_SEQ + .word DUNKN2_SEQ,DUNKP3_SEQ,DUNKU2_SEQ,DUNKY2_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ3_SEQ,DUNKP3_SEQ + + +#d2l_t .word 25-1 + .word DUNKZ3_SEQ,DUNKB_SEQ,DUNKK2_SEQ,DUNKB3_SEQ + .word DUNKF_SEQ,DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ + .word DUNKY2_SEQ,DUNKK2_SEQ,DUNKT3_SEQ,DUNKT5_SEQ + .word DUNKN2_SEQ,DUNKP_SEQ,DUNKP3_SEQ,DUNKT_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKZ2_SEQ,DUNKS_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKU2_SEQ + + +#d3l_t .word 28-1 + .word DUNKB_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKQ_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKY2_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ,DUNKQ3_SEQ + .word DUNKY_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW_SEQ,DUNKW3_SEQ + .word DUNKX_SEQ,DUNKLAY8_SEQ,DUNKO2_SEQ,DUNKL2_SEQ + +#d4l_t .word 21-1 + .word DUNKJ_SEQ,DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKD_SEQ,DUNKK2_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKT3_SEQ,DUNKY2_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU8_SEQ,DUNKT4_SEQ + .word DUNKY_SEQ + + +#d5l_t .word 5-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #3 skill players + +d3u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d3s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d3m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d3l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 2-1 + .word DUNKS2_SEQ,DUNKU3_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 2-1 + .word DUNKD2_SEQ,DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKD2_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 4-1 + .word DUNKA2_SEQ,DUNKS2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 4-1 + .word DUNKA2_SEQ,DUNKP2_SEQ,DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d3s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d4s_t .word 3-1 + .word DUNKE_SEQ,DUNKE_SEQ,DUNKP2_SEQ + +#d5s_t .word 2-1 + .word DUNKE_SEQ,DUNKP2_SEQ + + +;MEDIUM to hoop +#d1m_t .word 12-1 + .word DUNKA_SEQ,DUNKA2_SEQ,DUNKB3_SEQ,DUNKC_SEQ + .word DUNKK_SEQ,DUNKLAY6_SEQ,DUNKR2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY3A_SEQ,DUNKLAY7_SEQ,DUNKLAY3B_SEQ + + +#d2m_t .word 16-1 + .word DUNKA2_SEQ,DUNKB_SEQ,DUNKK_SEQ,DUNKC_SEQ + .word DUNKP_SEQ,DUNKR_SEQ,DUNKJ2_SEQ,DUNKZ3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKZ3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3C_SEQ,DUNKLAY5_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d3m_t .word 15-1 + .word DUNKD_SEQ,DUNKJ2_SEQ,DUNKK_SEQ,DUNKLAY3B_SEQ + .word DUNKQ_SEQ,DUNKV_SEQ,DUNKX3_SEQ,DUNKB_SEQ + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKX2_SEQ,DUNKLAY8_SEQ + .word DUNKLAY6_SEQ,DUNKLAY7A_SEQ,DUNKX2_SEQ + + +#d4m_t .word 11-1 + .word DUNKD_SEQ,DUNKE2_SEQ,DUNKX3_SEQ,DUNKP_SEQ + .word DUNKT2_SEQ,DUNKJ2_SEQ,DUNKLAY6_SEQ,DUNKX2_SEQ + .word DUNKQ_SEQ,DUNKQ_SEQ,DUNKX2_SEQ + +#d5m_t .word 4-1 + .word DUNKE2_SEQ,DUNKP_SEQ,DUNKLAY6_SEQ,DUNKZ_SEQ + + +;FAR from hoop +#d1l_t .word 11-1 + .word DUNKB3_SEQ,DUNKB3_SEQ,DUNKK2_SEQ,DUNKN2_SEQ + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKY_SEQ,DUNKLAY7_SEQ + .word DUNKLAY_SEQ,DUNKLAY3_SEQ,DUNKLAY3B_SEQ + + +#d2l_t .word 28-1 + .word DUNKA_SEQ,DUNKB_SEQ,DUNKB_SEQ,DUNKB3_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ2_SEQ,DUNKP3_SEQ + .word DUNKP_SEQ,DUNKK2_SEQ,DUNKN2_SEQ,DUNKY_SEQ + .word DUNKS_SEQ,DUNKT_SEQ,DUNKT_SEQ,DUNKT3_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY3B_SEQ,DUNKLAY8_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ,DUNKU2_SEQ,DUNKX3_SEQ + + +#d3l_t .word 29-1 + .word DUNKB_SEQ,DUNKB2_SEQ,DUNKD_SEQ,DUNKX_SEQ + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKW_SEQ + .word DUNKK2_SEQ,DUNKL_SEQ,DUNKN2_SEQ,DUNKP3_SEQ + .word DUNKQ_SEQ,DUNKQ2_SEQ,DUNKS_SEQ,DUNKT_SEQ + .word DUNKT_SEQ,DUNKT3_SEQ,DUNKT5_SEQ,DUNKU2_SEQ + .word DUNKV_SEQ,DUNKV2_SEQ,DUNKW3_SEQ,DUNKLAY8_SEQ + .word DUNKY_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ,DUNKLAY6_SEQ + .word DUNKLAY7A_SEQ + + +#d4l_t .word 18-1 + .word DUNKD_SEQ,DUNKG_SEQ,DUNKP_SEQ,DUNKQ_SEQ + .word DUNKG2_SEQ,DUNKJ_SEQ,DUNKK2_SEQ,DUNKX_SEQ + .word DUNKQ2_SEQ,DUNKT3_SEQ,DUNKLAY6_SEQ,DUNKY_SEQ + .word DUNKT5_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX2_SEQ + .word DUNKT4_SEQ,DUNKU8_SEQ + + +#d5l_t .word 6-1 + .word DUNKP_SEQ,DUNKW_SEQ,DUNKW3_SEQ,DUNKX_SEQ + .word DUNKLAY6_SEQ,DUNKZ_SEQ + + +#**************************************************************************** +;Set of dunks for #2 skill players + +d2u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d2s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d2m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d2l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKU3_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKU3_SEQ,DUNKLAY3C_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d3s_t .word 1-1 + .word DUNKLAY3C_SEQ + +#d4s_t .word 1-1 + .word DUNKA2_SEQ + +#d5s_t .word 1-1 + .word DUNKE_SEQ + + +;MEDIUM to hoop +#d1m_t .word 6-1 + .word DUNKA2_SEQ,DUNKC_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2m_t .word 13-1 + .word DUNKP_SEQ,DUNKR_SEQ,DUNKA2_SEQ,DUNKC_SEQ,DUNKA_SEQ + .word DUNKLAY8_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKJ2_SEQ + .word DUNKLAY3_SEQ + + +#d3m_t .word 14-1 + .word DUNKJ2_SEQ,DUNKP3_SEQ,DUNKQ_SEQ,DUNKLAY8_SEQ + .word DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY7A_SEQ + .word DUNKT_SEQ,DUNKD_SEQ + + +#d4m_t .word 5-1 + .word DUNKQ_SEQ,DUNKE2_SEQ,DUNKJ_SEQ,DUNKD_SEQ + .word DUNKLAY6_SEQ + + +#d5m_t .word 2-1 + .word DUNKE2_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 7-1 + .word DUNKP3_SEQ,DUNKU2_SEQ,DUNKLAY_SEQ,DUNKLAY3C_SEQ + .word DUNKLAY3_SEQ,DUNKLAY3B_SEQ,DUNKLAY7_SEQ + + +#d2l_t .word 10-1 + .word DUNKLAY2_SEQ,DUNKLAY3_SEQ,DUNKLAY3A_SEQ,DUNKLAY7A_SEQ + .word DUNKLAY7_SEQ,DUNKLAY8_SEQ,DUNKA_SEQ,DUNKB3_SEQ + .word DUNKB2_SEQ,DUNKLAY_SEQ + + +#d3l_t .word 12-1 + .word DUNKG_SEQ,DUNKG2_SEQ,DUNKJ_SEQ,DUNKQ_SEQ + .word DUNKD_SEQ,DUNKLAY_SEQ,DUNKLAY2_SEQ,DUNKLAY3_SEQ + .word DUNKLAY3A_SEQ,DUNKLAY6_SEQ,DUNKLAY7_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 3-1 + .word DUNKJ_SEQ,DUNKLAY6_SEQ,DUNKG_SEQ + + +#d5l_t .word 3-1 + .word DUNKP_SEQ,DUNKW3_SEQ,DUNKLAY6_SEQ + + +#**************************************************************************** +;Set of dunks for #1 skill players + +d1u_t .long #d1u_t,#d2u_t,#d3u_t,#d4u_t + .long #d5u_t,#d4u_t,#d3u_t,#d2u_t, #d1u_t + +d1s_t .long #d1s_t,#d2s_t,#d3s_t,#d4s_t + .long #d5s_t,#d4s_t,#d3s_t,#d2s_t, #d1s_t + +d1m_t .long #d1m_t,#d2m_t,#d3m_t,#d4m_t + .long #d5m_t,#d4m_t,#d3m_t,#d2m_t, #d1m_t + +d1l_t .long #d1l_t,#d2l_t,#d3l_t,#d4l_t + .long #d5l_t,#d4l_t,#d3l_t,#d2l_t, #d1l_t + +;UNDER hoop +#d1u_t .word 1-1 + .word DUNKS2_SEQ + +#d2u_t .word 1-1 + .word DUNKA3_SEQ + +#d3u_t .word 1-1 + .word DUNKD2_SEQ + +#d4u_t .word 1-1 + .word DUNKE_SEQ + +#d5u_t .word 1-1 + .word DUNKE_SEQ + + +;NEAR hoop +#d1s_t .word 2-1 + .word DUNKLAY7_SEQ,DUNKLAY6_SEQ + +#d2s_t .word 1-1 + .word DUNKLAY6_SEQ + +#d3s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY7_SEQ + +#d4s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5s_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;MEDIUM to hoop +#d1m_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d2m_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d3m_t .word 3-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ,DUNKLAY3C_SEQ + + +#d4m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + +#d5m_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;FAR from hoop +#d1l_t .word 2-1 + .word DUNKLAY5_SEQ,DUNKLAY6_SEQ + + +#d2l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY7_SEQ + + +#d3l_t .word 2-1 + .word DUNKLAY6_SEQ,DUNKLAY8_SEQ + + +#d4l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +#d5l_t .word 2-1 + .word DUNKLAY3C_SEQ,DUNKLAY6_SEQ + + +;Small heads! + .def Gug_h + .def BEdwrds_h + .def Brown_h + .def KAnderson_h + .def Willis_h + .def Mourn_h + .def Kukoc_h + .def Jack_h + .def Mash_h + .def Dumars_h + .def Rodman_h + .def Webber_h + .def Horry_h + .def Smits_h + .def Campbell_h + .def Baker_h + .def Rider_h + .def Morris_h + .def Mason_h + .def Starks_h + .def AHard_h + .def NAnders_h + .def Weath_h + .def Brad_h + .def KJohn_h + .def CRobinson_h + .def Rich_h + .def Payton_h + .def Mckey_h + .def Benoit_h + .def Cheaney_h + + + .def Robertson_h + .def Chapman_h + .def Lang_h + .def Scott_h + .def Webb_h +; .def MJohnson_h + .def Ruffin_h + +Robertson_h + HDMAC Robertsn1 +Chapman_h + HDMAC Chapman1 +Lang_h + HDMAC Lang1 +Scott_h + HDMAC Scott1 +Webb_h + HDMAC Webb1 +;MJohnson_h +; HDMAC MJohnson1 +Ruffin_h + HDMAC Ruffin1 + + + +Gug_h + HDMAC gug1 +BEdwrds_h + HDMAC BEdwrd1 +Brown_h + HDMAC BROWN1 +KAnderson_h + HDMAC K_AND1 +Willis_h + HDMAC WILLIS1 +Mourn_h + HDMAC MOURN1 +Kukoc_h + HDMAC KUKOC1 +Jack_h + HDMAC JACK1 +Mash_h + HDMAC MASH1 +Dumars_h + HDMAC DUMARS1 +Rodman_h +; HDMAC ALIEN01 + HDMAC RODMAN1 +Webber_h + HDMAC WEBBER1 +Horry_h + HDMAC HORRY1 +Smits_h + HDMAC SMITS1 +Campbell_h + HDMAC CAMP1 +Baker_h + HDMAC BAKER1 +Rider_h + HDMAC RIDER1 +Morris_h + HDMAC MORRIS1 +Mason_h + HDMAC MASON1 +Starks_h + HDMAC STARKS1 +AHard_h + HDMAC A_HARD1 +NAnders_h + HDMAC N_AND1 +Weath_h + HDMAC WEATH1 +Brad_h + HDMAC BRAD1 +KJohn_h + HDMAC K_JOHN1 +CRobinson_h + HDMAC C_ROB1 +Rich_h + HDMAC RICH1 +Payton_h + HDMAC PAYTON1 +Mckey_h + HDMAC MCKEY1 +Benoit_h + HDMAC BENOIT1 +Cheaney_h + HDMAC CHEAN1 + + +; This table contains the SMALL head img. table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; +plr_heads_small + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h + .long kim_h + .long fifi_h + .long Gor_h + .long LJohnson_h + .long Mik_h + .long Lis_h + .long madball_h + .long Old_h + .long jackjr_h + .long clown_h + .long mar_h + .long Ghill_h + .long Ber_h + .long Olajuwon_h + .long Fat_h + .long Ang_h + .long ape_h + .long Mourn_h + .long Fra_h + .long AHard_h + .long Guido_h + .long Gre_h + .long Pig_h + .long Kemp_h + .long cheech_h + .long Mel_h + .long Wiz_h + .long Webber_h + .long Joe_h + .long mxv_h + .long eddie_h + .long oursler_h + .long bardo_h + .long willy_h + .long eric_h + .long sean_h + .long mike_h + .long dim_h + +plr_heads_small_end + .long Cow_h + .long Alien_h + .long Pippen_h + .long Chk_h +plr_heads_small_end2 + + +SM_HEADS_CNT equ ((plr_heads_small_end-plr_heads_small)/32) + +; +; This table contains the SMALL head flesh pal table ptrs. for the heads in +; 'CREATE PLAYER' (coresponds with mugshots_tbl in select3.asm) +; + .def plr_flesh_pal_tbl +plr_flesh_pal_tbl + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F + .long KIM_F + .long FIFI_F + .long GOR_F + .long johnson_f + .long MIK_F + .long LIS_F + .long MADBAL_F + .long OLD_F + .long JACKJR_F + .long CLOWN_F + .long MAR_F + .long GHILL_F + .long BER_F + .long Hakeem_f + .long FAT_F + .long ANG_F + .long VIKAPE_F + .long MOURN_F + .long FRA_F + .long A_HARD_F + .long GUIDO_F + .long GRE_F + .long PIG_F + .long kemp_f + .long CHEECH_F + .long MEL_F + .long WIZ_F + .long WEBBER_F + .long JOE_F + .long MXV_F + .long EDDIE_F + .long OURSL_F + .long BARD_F + .long WIL_F + .long ERI_F + .long SEA_F + .long MIKE_F + .long DIM_F + + .long COW_F + .long ALIEN_F + .long pippin_f + .long CHK_F +plr_flesh_pal_tbl_end + +#***************************************************************************** +* +* a9 = meter to display on which side? 0 or 1 +* a11 = player number (0 - 3 ) + +GETUP_SIZE equ 80 ;102 ;174 ;99 +MAX_TIME equ 6*TSEC +INV_MULT equ 256*GETUP_SIZE/MAX_TIME +ONSCR_X equ 173+1 +OFFSCR_X equ 221 + + STRUCTPD + LONG IPTR_FRAME + LONG IPTR_GREEN + WORD DISPLAY_VAL + LONG BUTN_PROC + + SUBR jumpball_meter + + clr a0 + move a0,@meter_maxxed + +;Human players only! + .ref PSTATUS + .ref plyrproc_t + SLEEPK 11 + .ref HALT +#lpx move @HALT,a0 + jrz #contx + SLEEPK 1 + jruc #lpx +#contx + + +; move @PSTATUS,a0 +; btst a11,a0 +; jaz SUCIDE + + SLEEP 40 + + clr a0 + move a0,*a13(DISPLAY_VAL) + + ;set our x-position based on PLYR_SIDE + movi [OFFSCR_X,0],a10 + move a9,a9 + jrnz #p2 + + dec a10 + neg a10 +#p2 + + .ref RECVRBLK,JMPBAL_R,JMPBAL_L + + movi RECVRBLK,a2 ;* image (green bar) + movi [109,0],a1 ;y pos + movi 1801h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_GREEN),L + movi JMPBAL_R,a2 ;* image (frame) + move a9,a9 + jrnz #p2_meter + movi JMPBAL_L,a2 ;* image (frame) +#p2_meter + movi [189,0],a1 ;y pos + movi 1800h,a3 ;z pos + callr #begin_obj + move a8,*a13(IPTR_FRAME),L + + move a11,a10 + sll 5,a10 + addi plyrproc_t,a10 + move *a10,a10,L + move a13,*a10(plyr_meter_proc),L + + movi 200,a0 + move a0,*a10(plyr_meter_time) + + CREATE0 #ck_butns + move a0,*a13(BUTN_PROC),L + + + SUBR slide_offscr + +;Don't allow a meter to come out for awhile (unless flung) + + movk 10,a11 + +#offscr_loop + move a11,a11 + jrz #update + dec a11 + jruc #cont +#update + movi [OFFSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a14 + jrnz #onscr + +#cont + SLEEPK 1 + jruc #offscr_loop + +#exit_offscr + SLEEP 40 + movk 10,a11 +#exit_loop + movi [OFFSCR_X,0],a0 + callr #set_x + SLEEPK 1 + dsjs a11,#exit_loop + + move *a13(IPTR_FRAME),a0,L + calla DELOBJ + move *a13(IPTR_GREEN),a0,L + calla DELOBJ + move *a13(BUTN_PROC),a0,L + calla KILL + DIE + +#onscr + move a14,a11 + + movi GETUP_SIZE,a0 + move a0,*a13(DISPLAY_VAL) + +; MOVI 0BDH,A0 ;Meter announce sound +; CALLA triple_sound + + movi 120,a6 + move *a10(plyr_meter_time),a5 + +#onscr_loop + + movi [ONSCR_X,0],a0 + callr #set_x + + move *a10(plyr_meter_time),a7 + + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move *a13(DISPLAY_VAL),a0 + move a0,a2 + move a0,a4 + cmp a0,a7 ;has getup been incremented? + jrle #ok1 + + move a7,a11 + movi GETUP_SIZE,a0 + mpyu a0,a7 ;* GETUP_SIZE + divu a11,a7 ;/ INITIAL GETUP TIME + + move a7,a3 + sub a2,a3 + cmpi 10,a3 + jrlt #ok0 + addk 9,a2 + move a2,a7 + move a7,a3 + sub a4,a3 +#ok0 + srl 1,a3 + sub a3,a7 + +#ok1 + + subk 1,a6 + jrnz #dont_bother + move *a10(plyr_meter_time),a0 + sub a0,a5 + +#dont_bother + + PUSH a5,a6 + callr #update_meter + PULL a5,a6 + + move a7,a7 + jrz #exit_offscr + move @ditch_meter,a0 + jrnz #exit_offscr + + + PUSHP a5,a6 + SLEEPK 1 + PULLP a5,a6 + jruc #onscr_loop + +********** +#ck_butns + + movk 20,a8 +#lp1 move *a10(plyr_meter_time),a0 + subk 6,a0 + move a0,*a10(plyr_meter_time) + SLEEPK 1 + dsj a8,#lp1 + +#ck_butns2 + .ref PCNT + move @PCNT,a0 + ANDK 1,a0 + jrnz #no + + move *a10(plyr_meter_time),a0 + inc a0 + cmpi 155,a0 + jrge #stop2 + move a0,*a10(plyr_meter_time) +;DJT Start +#no + move @PSTATUS,a14 + btst a11,a14 + jrnz #conta +;Jumpball player is not in game +;Check teammate 0 or 3 + movk 1,a0 + xor a11,a0 + btst a0,a14 + jrnz #getbut +;drone + srl 1,a0 + sll 4,a0 + neg a0 + .ref t1ispro + addi t1ispro+16,a0,L + move *a0,a14 + movi 190,a0 ;!!! regular + move a14,a14 + jrn #drnchk + movi 260,a0 ;!!! pro + move a14,a14 + jrp #drnchk + movi 390,a0 ;!!! champ +#drnchk +;DJT End + .ref RNDPER + calla RNDPER + jrhi #yes + jruc #no2 + +#conta move a11,a0 + .ref get_but_val_down +#getbut calla get_but_val_down + jrz #no2 +#yes + move *a10(plyr_meter_time),a0 + subk 4,a0 + jrz #stop + jrn #stop + move a0,*a10(plyr_meter_time) +#no2 + + SLEEPK 1 + jruc #ck_butns2 + +#stop + clr a0 +#stop2 + move a0,*a10(plyr_meter_time) + +; move a0,a0 +; jrnz #notmax + + BSSX meter_maxxed,16 + move @meter_maxxed,a0 + jrnz #notmax + move a11,@meter_maxxed + +#notmax + +;Killed by creating process + SLEEP 7fffh + + DIE + + + +********** + SUBRP #set_x + + move a9,a9 + jrnz #p22 + neg a0 +#p22 +; addi [200-1,0],a0 ;center of screen + addi [0afh,0],a0 ;center of screen + move a13,a14 + addi IPTR_FRAME,a14 + move *a14,a8,L + move *a8(OXVAL),a1,L + sub a1,a0 + sra 2,a0 + movk 3-1,a1 +#lp move *a14+,a8,L + move *a8(OXVAL),a2,L + add a0,a2 + move a2,*a8(OXVAL),L + dsj a1,#lp + rets + + +********** + SUBRP #begin_obj + + movi [200-1,0],a0 ;x pos + add a10,a0 + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +********** + SUBRP #update_meter + + move *a13(DISPLAY_VAL),a0 + add a0,a7 + srl 1,a7 + move a7,*a13(DISPLAY_VAL) + move a7,a1 + + neg a1 + addi GETUP_SIZE,a1 + jrp #ok + clr a1 +#ok movi GETUP_SIZE,a0 + cmp a0,a1 ;meter can't be taller + jrle #ok2 ;than GETUP_SIZE pixels + move a0,a1 +#ok2 move *a13(IPTR_GREEN),a8,L + + MOVI GETUP_SIZE,A2 + SUB A1,A2 + MOVE A2,*A8(OSIZEY) + MOVI RECVRBLK,A0 + MOVE *A0(ICTRL),A5 + SRL 12,A5 + MOVE A1,A3 + MPYU A5,A3 + MOVE *A0(ISIZEX),A5 + MPYU A5,A3 + MOVE *A0(ISAG),A0,L + ADD A3,A0 + MOVE A0,*A8(OSAG),L + + rets + +#***************************************************************************** +* +* a0 = # ticks to add +* a13 = * wrestler process + + SUBR inc_getup_time + + PUSH a14 + move *a13(plyr_meter_time),a14 + cmpi 20,a14 + jrlt #exit + add a0,a14 + move a14,*a13(plyr_meter_time) +#exit + PULL a14 + rets + + +;#***************************************************************************** +;* +;* makes your getup meter go away if you've got one out. +; +; SUBR ditch_getup_meter_a9 +; PUSH a13 +; move a9,a13 +; callr ditch_getup_meter +; PULL a13 +; rets +; +; SUBR ditch_getup_meter +; +; move *a13(GETUP_TIME),a0 +; jrz #cont +; move *a13(PLYR_DIZZY),a0 +; jrnz #cont +; +;;This guy has a getup meter on screen and is running out of control! +;;Cause getup meter to slide off screen. +; +; move *a13(METER_PROC),a0,L +; jrz #cont ;skip if we don't have a meter. +; PUSH a8,a9,a10 +; move *a0(PA8),a8,L +; move *a0(PA9),a9,L +; move *a0(PA10),a10,L +; movi GETUP_PID,a1 +; movi slide_offscr,a7 +; calla XFERPROC +; PULL a8,a9,a10 +; +;#cont rets + + + + + +;******************************** +;* Spark from flaming ball (Process) +;* A8/A11=*Ball obj +; +; SUBR ball_spark +; +; movi spark_l,a9 +; +; move *a11(OXVEL),a6,L +; sra 2,a6 +; movk >a,a0 +; callr rnd +; subk 5,a0 +; sll 14,a0 ;XVel +; add a0,a6 +; +;; movk 3,a0 +;; callr rnd +;; jrnz #xnorm +;; sll 2,a6 ;*4 +;#xnorm +; +; move *a11(OYVEL),a7,L +; movk >3,a0 +; callr rnd +; sll 16,a0 ;YVel +; neg a0 +; add a0,a7 +; +; +;; move *a11(OYVEL),a7,L +;; sra 2,a7 +;; movk >a,a0 +;; callr rnd +;; subk 5,a0 +;; sll 15,a0 ;YVel +;; add a0,a7 +;; neg a7 +;; +;; movk 3,a0 +;; callr rnd +;; jrnz #ynorm +;; sll 2,a7 ;*4 +;#ynorm +; move *a8(OZPOS),a3 +; movk 3,a0 +; callr rnd +; subk 2,a0 +; add a0,a3 ;-2 to 1 +; +; move *a8(OXPOS),a0 +;; move *a8(OSIZEX),a2 +;; srl 1,a2 ;/2 +;; add a2,a0 +; move *a8(OXANI+16),a2 +; add a2,a0 +; move *a8(OYPOS),a1 +; move *a8(OSIZEY),a2 +; srl 1,a2 ;/2 +; add a2,a1 +; +; sll 16,a0 +; sll 16,a1 +; movi spark1,a2 +; movi DMAWNZ|M_3D|M_NOSCALE,a4 +; movi CLSDEAD,a5 +; calla BEGINOBJ2 +; +; move *a11(OZVEL),a2,L +; sra 2,a2 ;/4 +; movk >f,a0 +; callr rnd +; subk 7,a0 +; sll 14,a0 +; add a0,a2 +; move a2,*a8(OZVEL),L +; +; +; movk 3,a11 +;; callr rnd +;; addk 1,a0 +;; move a0,a11 +; jruc #strt +; +;#lp dsj a10,#noani +;#strt +; move a11,a10 +; move *a9,a0,L +; jrz #die ;noani +; addk 32,a9 +; +; move *a8(OCTRL),a1 +; calla obj_aniq +;#noani +; SLEEPK 3 +; move *a8(OYVEL),a2,L +; addi GRAV*2,a2 +; move a2,*a8(OYVEL),L +; jrn #lp ;Going up? +; move *a8(OYVAL),a1,L +; jrlt #lp ;Above gnd? +; clr a1 +; move a1,*a8(OYVAL),L +; +;; move @HCOUNT,a14 +;; sll 32-2,a14 +;; jrz #die +;; neg a2 +;; sra 3,a2 +;; move a2,*a8(OYVEL),L +;; cmpi -(GRAV*2),a2 +;; jrlt #lp +;; +; +;#die +; clr a0 +; move a0,*a8(OXVEL),L +; move a0,*a8(OYVEL),L +; move a0,*a8(OZVEL),L +;; SLEEPK 4 +; +; jauc DELOBJDIE +; +; +;spark_l +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5 +; .long spark1 +; .long spark2 +; .long spark3 +; .long spark4 +; .long spark5,0 + +; .endif + +; movi STATIC_p,a8 +; movi cycram,a9 +; movi [1,62],a10 ;1st,last color +; movk 5,a11 ;Rate +; CREATE CYCPID,COLCYC + +;--------------------------------------- + + .if 0 ;vid clips .if 0 + + jruc #x ;Skip clips for ROMKIT + + calla READ_DIP + btst DPNOVIDCLIPS_B,a0 + jrnz #x ;Clips off? + + + calla system_savegame + + movi >12345678,a0 + move a0,@clipsrunning,L + + + movk INPLYRINFO,a0 + move a0,@GAMSTATE + + clr a0 + move a0,@dtype ;2D + + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + JSRP scrn_scaleininit + + movi half_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + SLEEPK 2 + + JSRP scrn_scalein + +; movi 4<<10+4<<5+4,a0 + clr a0 + move a0,@IRQSKYE ;background color + + + CREATE0 plyr_jscrowdsnda + + SLEEPK 10 + +; SOUND1 report_snd + + movi -1,a0 + move a0,@dpageflip ;No erasure + +#test + movk 2,a5 ;# clips to show + clr a6 +#lp + move a6,a0 + addk 1,a6 + sll 5,a0 + addi #xy_t,a0 + move *a0+,a10,L ;XY + + move @clipbits,a2,L + cmpi >3ffff,a2 ;18 bits + jrlo #ok + clr a2 +#ok +#crlp movk 18-1,a0 ;Total # clips + calla RNDRNG0 + btst a0,a2 + jrnz #crlp ;Have already shown? + + movk 1,a14 ;Set bit + sll a0,a14 + or a14,a2 + move a2,@clipbits,L + + .if CLIPTEST + clr a0 + .endif + + sll 5,a0 + addi #mv_t,a0 + move *a0,a8,L + + clr a9 + PUSHP a5,a6 + PUSHP a8 + + move a10,a0 + sll 32-12,a0 + srl 7,a0 ;X + move a10,a1 + srl 12,a1 + sll 16,a1 ;Y + movi scobars,a2 + movi 500,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + SLEEPK 30 + calla DELOBJA8 + + PULLP a8 + PUSHP a10 + + .ref movie_run + + JSRP movie_run + PULLP a10 + + PULLP a5,a6 + + dsj a5,#lp + + .if CLIPTEST + jruc #test ;Infinite loop + .endif + + movi TSEC*1+30,a10 +#butlp + SLEEPK 1 + .ref get_all_buttons_cur + calla get_all_buttons_cur + move a0,a0 + jrnz #exit1 + dsj a10,#butlp +#exit1 + + calla display_blank + + clr a0 + move a0,@clipsrunning,L + + calla system_restoregame + +#x RETP + + +plyr_jscrowdsnda + CREATE0 scrms + SLEEP 40 + SOUND1 cheer1_snd + SOUND1 cheer2_snd + SLEEP 35 + SOUND1 cheer1_snd + SOUND1 cheer2_snd +; SLEEP 24 +; SOUND1 cheer1_snd +; SOUND1 cheer2_snd + DIE + +scrms + SOUND1 scrm1_snd + SLEEP 15 + SOUND1 scrm2_snd + SLEEP 15 + SOUND1 scrm3_snd + SLEEP 15 + SOUND1 scrm4_snd + SLEEP 15 + DIE + + .ref scrm1_snd,scrm2_snd,scrm3_snd,scrm4_snd + + +half_mod + .long htclipsBMOD + .word 0,0 + .long 0 + +#xy_t .long (88+52*512)*8 +; .long (212+52*512)*8 +; .long (88+140*512)*8 + .long (212+140*512)*8 +#mv_t + .long V4C_F + .long V5C_F + .long V6C_F + .long V8C_F + .long V10C_F + .long V11C_F + .long V13C_F + .long V14C_F + .long V15C_F + .long V17C_F + .long V18C_F + .long V19C_F + .long V20C_F + .long V22C_F + .long V23C_F + .long VNEW2_F + .long V1C_F + .long V3C_F + +; .long V7C_F +; .long VNEW1_F + + + .endif ;vid clips .if 0 + +;-------------------- + + .if 0 ;plyr smoketrail .if 0 + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail + + movk 15,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 4 + dsj a11,#lp + + DIE + +#******************************* +* Smoke trail (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBR plyr_smoketrail2 + + movk 20,a11 +#lp CREATE0 plyr_smokepuff + SLEEPK 1 + dsj a11,#lp + + DIE + + +#******************************* +* Smoke trail puff (Process) +* A8=*Src obj +* A10=*Plyr process + + SUBRP plyr_smokepuff + + move *a10(plyr_dir),a10 + srl 2,a10 + + move *a8(OZPOS),a3 + movk 3,a0 + callr rnd + subk 2,a0 + add a0,a3 ;-2 to 1 + + movk 3,a0 + callr rnd + sll 5,a0 ;*32 + addi smoke_t,a0 + move *a0,a9,L + + move *a8(OXVEL),a6,L + move *a8(OYVEL),a7,L + sra 2,a6 ;/4 + sra 2,a7 + + move *a8(OXPOS),a0 + move *a8(OSIZEX),a2 + srl 1,a2 ;/2 + add a2,a0 + move *a8(OYPOS),a1 + move *a8(OSIZEY),a2 + srl 1,a2 ;/2 + add a2,a1 + sll 4,a10 ;*16 + addi mslstxy_t,a10 + move *a10(8*16),a2 + add a2,a0 ;+X offset + move *a10,a2 + add a2,a1 ;+YO + sll 16,a0 ;X + sll 16,a1 ;Y + movi CLDB1ORNG,a2 + movi DMAWNZ|M_3D|M_NOCOLL,a4 ;No collisions + movi CLSDEAD,a5 + calla BEGINOBJ2 + movi scale50_t,a0 + move a0,*a8(ODATA_p),L + SLEEPK 3 + jauc FRQDELDIE + +mslstxy_t + .word 12,12,11,10,8,6,3,1 ;Y + .word 0,-1,-3,-6,-8,-10,-11,-12 ;X + .word -12,-12,-11,-10,-8,-6,-3,-1 + .word 0,1,3,6,8,10,11,12 + .word 12,12,11,10,8,6,3,1 + + .endif ;plyr smoketrail .if 0 + +;--------------------------------------- + + .if 0 ;NOP out free throw, plyr alignment dots + +#******************************* +* Control players for free throws (Process) +* A11=Team who scored (0=2, !0=1) + + STRUCTPD + WORD pft_pball ;Plyr # (0-3) who gets ball + WORD pft_pball2 ;P# who gets ball passed to him + APTR pft_bbobj ;*Backboard/crowd object + + + SUBR plyr_freethrow + + jruc plyr_takeoutball + + movi TSEC,a10 ;>Let shot finish +#lp movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + dsj a10,#lp + + + movi [20,0],a0 + movi [20,0],a1 +; movi ftbackbd,a2 + movi [500,0],a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(pft_bbobj),L + + + movk 1,a0 + callr plyr_setac + + clr a2 + movk 2,a9 ;A9=1st p# of team on defense + movi plyrproc_t,a0 + move a11,a11 + jrz #t1 + movk 2,a2 + clr a9 + addi 32*2,a0 +#t1 + move *a0+,a8,L ;A8=*Proc of plyr who gets ball + move *a0+,a7,L + move *a8(plyr_balldist),a0 + move *a7(plyr_balldist),a1 + cmp a1,a0 + jrle #1st ;Closer? + move a7,a8 + addk 1,a2 ;2nd in team +#1st + move a2,*a13(pft_pball) + XORK 1,a2 + move a2,*a13(pft_pball2) + + + movi TSEC*4,a10 ;>Get ball + +#gblp + movi -1,a0 + move a0,@ballpnum + SLEEPK 1 + + callr plyrtob_moveo3 + + move @ballobj_p,a3,L + move *a3(OXPOS),a0 + addk 6,a0 + move *a3(OZPOS),a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + + move @ballpnum,a0 + jrn #gbcnt + cmp a0,a2 + jreq #gotball + +#gbcnt dsj a10,#gblp + +#gotball + move *a13(pft_pball),a0 + move a0,@ballpnum + + + movi TSEC*3,a10 ;>Run out of bounds + +#outlp + SLEEPK 1 + + callr plyrtob_moveo3 + + movi -370,a0 + move a11,a11 + jrz #outl ;Team2 on def + neg a0 +#outl addi WRLDMID,a0 + move a0,a3 + movi CZMID-20,a1 + move *a13(pft_pball),a2 + callr plyrtob_seekxy + jrz #outofb + +; move *a8(PA8),a2,L ;Get * obj +; move *a2(OXPOS),a0 +; move *a2(OXANI+16),a14 +; add a14,a0 +; abs a0 +; abs a3 +; sub a0,a3 +; subk 20,a3 +; jrlt #outofb + + dsj a10,#outlp + +#outofb + movi TSEC*3,a10 ;>Wait for other 3 to get in place + +#wtlp SLEEPK 1 + callr plyrtob_moveo3 + jrz #inpos + dsj a10,#wtlp +#inpos + + move *a13(pft_pball),a10 ;>Pass with turbo + sll 4,a10 ;*16 + addi P1CTRL,a10 + movi >60,a0 + move a0,*a10 + + SLEEPK 10 + clr a0 + move a0,*a10 + + SLEEP 40 + + clr a0 + callr plyr_setac + + move *a13(pft_bbobj),a0,L + calla DELOBJ + + DIE + + +******************************** +* Start an alignment dot for a player +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_getgndaligndot + + PUSH a2,a3,a4,a5,a6,a7,a8 + + clr a0 ;X + clr a1 ;Y + movi CZMIN,a3 ;Z + movi #alignimg_t,a2 + movi >800c|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ + movi >101,a0 + move a0,*a8(OCONST) + movi -300,a0 + move a0,*a8(OMISC) ;Z offset + + move a8,*a13(plyr_aligndot_p),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +******************************** +* Set alignment dot to players position +* A8=*Plyr obj +* A13=*Plyr proc +* Trashes scratch + + SUBRP plyr_setgndaligndot + + PUSH a2,a3,a4,a5,a6,a7 + + callr anipt_getsclxy + move *a8(OXVAL),a14,L + add a14,a0 + move *a13(plyr_aligndot_p),a2,L + move a0,*a2(OXVAL),L + + move *a8(OZPOS),a14 + addi 300,a14 + move a14,*a2(OZPOS) + + PULL a2,a3,a4,a5,a6,a7 + rets + + .endif + +;--------------------------------------- + + .if 0 ;NOP out board shatter, shards + +#******************************* +* Shatter backboard (Process) + + SUBRP board_shatter + +;FIX!!! + DIE + + SOUND1 explode_snd + + SOUND1 ohmy + + CREATE0 board_glssnd + movk 10,a1 + move a1,*a0(PTIME) + + move @ballpnumshot,a11 + movk 10,a8 + move a11,a0 + subk 2,a0 + jrnz #n0 + addk 1,a0 +#n0 move a0,@bbshatter +#shlp + movk 13,a2 +#shlp2 CREATE0 board_shard + dsj a2,#shlp2 + SLEEPK 1 + dsj a8,#shlp + + DIE + +board_glssnd +;Turmell + SLEEPK 10 + SOUND1 explode_snd + SLEEPK 20 + SOUND1 glass_snd + DIE + +******************************** +* Flying shard of glass (Process) +* A11=Plyr # who shot the ball (0-3) + + STRUCTPD + APTR shd_ani1st_p ;*1st ani_l pos + + SUBRP board_shard + + movk 10,a0 + callr rndrng0 + sll 5,a0 ;*32 + addi #shard_t,a0 + move *a0,a9,L + move *a9+,a0,L + PUSHP a0 + move a9,*a13(shd_ani1st_p),L + + movk >f,a0 + callr rnd + subk 5,a0 + move a0,a6 + sll 13,a6 ;XVel + + movk 3,a0 + callr rnd + jrnz #xnorm + sll 2,a6 ;*4 +#xnorm + movk >f,a0 + callr rnd + subk 6,a0 + move a0,a7 + sll 14,a7 ;YVel + + movk 3,a0 + callr rnd + jrnz #ynorm + sll 2,a7 ;*4 +#ynorm + + movi 36,a0 + callr rndrng0 + move a0,a1 + neg a1 ;Y offset + + movi HOOPLX-13,a0 + subk 2,a11 + jrge #p23 + movi HOOPRX+13,a0 + neg a6 +#p23 + sll 16,a0 + addi HOOPY,a1 + sll 16,a1 + movi shard1_1,a2 + movi CZMID,a3 + movi DMAWNZ|M_3D|M_NOSCALE,a4 + movi CLSDEAD,a5 + calla BEGINOBJ2 + + movk 7,a0 + callr rnd + subk 4,a0 + sll 16,a0 + move a0,*a8(OZVEL),L + + movk 1,a0 + callr rnd + addk 1,a0 + move a0,a11 + jruc #strt + +#lp dsj a10,#noani +#strt + move a11,a10 +; move *a9+,a10 +; jrz #x + move *a9+,a0,L + jrnz #ani + move *a13(shd_ani1st_p),a9,L + move *a9+,a0,L +#ani + move *a8(OCTRL),a1 + calla obj_aniq +#noani + SLEEPK 1 + move *a8(OYVEL),a2,L + addi GRAV,a2 + move a2,*a8(OYVEL),L + jrn #lp ;Going up? + move *a8(OYVAL),a1,L + jrlt #lp ;Above gnd? + clr a1 + move a1,*a8(OYVAL),L + move @HCOUNT,a14 + sll 32-2,a14 + jrz #shatter + neg a2 + sra 2,a2 + move a2,*a8(OYVEL),L + cmpi -(GRAV*2),a2 + jrlt #lp + +#shatter + clr a0 + move a0,*a8(OXVEL),L + move a0,*a8(OYVEL),L + move a0,*a8(OZVEL),L + +; movk 3,a0 +; callr rnd +; sll 5,a0 ;*32 +; addi #shat_t,a0 +; move *a0,a9,L + PULLP a9 + movk 3,a10 + jruc #strt2 + +#lp2 +; dsj a10,#noani2 +; movk 2,a10 + move *a8(OCTRL),a1 + calla obj_aniq +#noani2 + SLEEPK 1 +#strt2 move *a9+,a0,L + jrnz #lp2 + + + jauc DELOBJDIE + + +#shard_t + .long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t + .long s1_t,s6_t,s8_t + +s1_t + .long st4_t + .long shard1_1 + .long shard1_2 + .long shard1_3 + .long shard1_4 + .long shard1_5 + .long shard1_6 + .long shard1_7 + .long shard1_8 + .long 0 +s2_t + .long st3_t + .long shard2_1 + .long shard2_2 + .long shard2_3 + .long shard2_4 + .long shard2_5 + .long shard2_6 + .long shard2_7 + .long shard2_8 + .long 0 +s3_t + .long st2_t + .long shard3_1 + .long shard3_2 + .long shard3_3 + .long shard3_4 + .long shard3_5 + .long shard3_6 + .long shard3_7 + .long shard3_8 + .long shard3_9 + .long shard3_10 + .long shard3_11 + .long shard3_12 + .long 0 +s4_t + .long st1_t + .long shard4_1 + .long shard4_2 + .long shard4_3 + .long shard4_4 + .long shard4_5 + .long shard4_6 + .long shard4_7 + .long shard4_8 + .long shard4_9 + .long shard4_10 + .long 0 +s5_t + .long st2_t + .long shard5_1 + .long shard5_2 + .long shard5_3 + .long shard5_4 + .long shard5_5 + .long shard5_6 + .long shard5_7 + .long shard5_8 + .long 0 +s6_t + .long st4_t + .long shard6_1 + .long shard6_2 + .long shard6_3 + .long shard6_4 + .long shard6_5 + .long shard6_6 + .long shard6_7 + .long shard6_8 + .long 0 +s7_t + .long st2_t + .long shard7_1 + .long shard7_2 + .long shard7_3 + .long shard7_4 + .long shard7_5 + .long shard7_6 + .long shard7_7 + .long shard7_8 + .long shard7_9 + .long shard7_10 + .long 0 +s8_t + .long st4_t + .long shard8_1 + .long shard8_2 + .long shard8_3 + .long shard8_4 + .long shard8_5 + .long shard8_6 + .long shard8_7 + .long shard8_8 + .long shard8_9 + .long shard8_10 + .long 0 + +;#shat_t +; .long st1_t,st2_t,st3_t,st4_t +st1_t .long shat1_1 + .long shat1_2 + .long shat1_3 + .long shat1_4 + .long shat1_5 + .long 0 +st2_t .long shat2_1 + .long shat2_2 + .long shat2_3 + .long shat2_4 + .long shat2_5 + .long 0 +st3_t .long shat3_1 + .long shat3_2 + .long shat3_3 + .long shat3_4 + .long shat3_5 + .long 0 +st4_t .long shat4_1 + .long shat4_2 + .long shat4_3 + .long shat4_4 + .long shat4_5 + .long 0 + + .endif + +;--------------------------------------- + + + .end diff --git a/SRC/PLYRAT.ASM b/SRC/PLYRAT.ASM new file mode 100644 index 0000000..cba4123 --- /dev/null +++ b/SRC/PLYRAT.ASM @@ -0,0 +1,2422 @@ +;DJT Start whole file changed!! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 10/5/92 -Split from plyr2.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/13/93 0:55 +************************************************************** + .file "plyrat.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .asg 0,SEQT + .include "plyr.equ" + + .include "imgtblp.glo" +; .include "imgpal3.asm" + .include "imgtbl.glo" + .include "imgtbl1.glo" + .include "imgtblm.glo" + .include "plyrhd6.glo" + .include "plyrhd6a.glo" + + +;sounds external + + +;symbols externally defined + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref scale77ef_t + + .ref team1,team2 + + +;From plyrat3.asm +;DJT Start + .ref marbry_h + .ref allen_h + .ref camb_h + .ref damp_h + .ref dun_h + .ref ham_h + .ref harr_h + .ref iversn_h + .ref kit_h + .ref minr_h + .ref rily_h + .ref wal_h + +;DJT End + .ref sd_h + .ref jeff_h + .ref dan_h + .ref carym_h + .ref eug_h + .ref bud_h + .ref jhey_h + .ref jfer_h + .ref jcartn + .ref nicke_h + .ref jroot_h + .ref bardo_h + .ref willy_h + .ref mxv_h + .ref eddie_h + .ref min_h + .ref quinn_h + .ref jon_h +;DJT Start + .ref heithb_h + .ref mattb_h + .ref madball_h + +;DJT End +; .ref RA_H + .ref Blaylock_h + .ref Ssmith_h + .ref Knorman_h +; .ref Henderso_h + .ref Barros_h + .ref Montross_h + .ref Radja_h + .ref Curry_h + .ref Zidek_h + .ref Kerr_h + .ref Thill_h + .ref Cmills_h + .ref Phills_h + .ref Kidd_h + .ref Pjones_h + .ref Rauf_h + .ref Pack_h + .ref Mcdyes_h + .ref Ghill_h + .ref Tmills_h + .ref Thorpe_h + .ref Sprewell_h + .ref Jsmith_h + .ref Cassel_h + .ref Ddavis_h + .ref Mckee_h + .ref Vaught_h + .ref Rrogers_h + .ref Lmurray_h + .ref Richardson_h + .ref Bbarry_h + .ref Vanexel_h + .ref Ceballos_h + .ref Ejones_h + .ref Bowens_h + .ref Grobinson_h + .ref EMurdock_h + .ref Respert_h +; .ref Rooks_h + .ref Garnett_h + .ref Gilliam_h + .ref Obannon_h + .ref Dscott_h + .ref Wright_h + .ref Stackhouse_h + .ref Wperson_h + .ref Finley_h + .ref Strickland_h + .ref Sabonis_h + .ref Bwilliams_h + .ref Childress_h + .ref Wwilliams_h + .ref Bgrant_h + .ref Marciulonis_h + .ref Ajohnson_h + .ref Sford_h + .ref Crogers_h + .ref Stoudamire_h + .ref Anthony_h +; .ref Gattison_h + .ref Breeves_h + .ref Jhoward_h + .ref McCloud_h + .ref Houston_h + .ref Muresan_h + .ref KEdwards_h + .ref Fox_h + .ref Ferry_h + .ref Mullin_h + .ref Longley_h + .ref MJackson_h + .ref Danilovic_h + .ref OMiller_h + .ref Delnegro_h + .ref Douglas_h + .ref WAnderson_h + .ref TMurray_h + .ref Koncak_h + .ref Rose_h + .ref Brandon_h +; .ref Coles_h + .ref DHarper_h + .ref Edney_h + .ref VMaxwell_h + +;From plyrat2.asm + .ref Laetner_h + .ref Hawkins_h + .ref LJohnson_h + .ref Divac_h + .ref KMalone_h + .ref Stockton_h + .ref Ewing_h + .ref Seikaly_h + .ref Miller_h + .ref Mutumbo_h + .ref Oakley_h + .ref Olajuwon_h + .ref Rice_h + .ref DRobinson_h + .ref Schrempf_h + .ref Smith_h + .ref Tisdale_h + .ref Kemp_h + .ref Pippen_h + .ref Gill_h + .ref Mullin_h + .ref Person_h + .ref Augmon_h + .ref Benjamin_h + .ref Coleman_h + .ref Drexler_h + .ref DEllis_h + .ref Elliot_h + .ref Hardaway_h + .ref DHarper_h + .ref HCGrant_h + .ref Hornacek_h + .ref Manning_h + +;From plyr3.asm + .ref Gug_h + .ref BEdwrds_h + .ref Brown_h + .ref KAnderson_h + .ref Willis_h + .ref Mourn_h + .ref Kukoc_h + .ref Jack_h + .ref Mash_h + .ref Dumars_h + .ref Rodman_h + .ref Webber_h + .ref Horry_h + .ref Smits_h + .ref Campbell_h + .ref Baker_h + .ref Rider_h + .ref Morris_h + .ref Mason_h + .ref Starks_h + .ref AHard_h + .ref NAnders_h + .ref Weath_h + .ref Brad_h + .ref KJohn_h + .ref CRobinson_h + .ref Rich_h + .ref DEllis_h + .ref Payton_h + .ref Mckey_h + .ref Benoit_h + .ref Cheaney_h + + .ref Robertson_h + .ref Chapman_h + .ref Lang_h + .ref Scott_h + .ref Webb_h +; .ref MJohnson_h + .ref Ruffin_h + .ref roan_h + .ref turmel_h + .ref jamie_h + .ref patf_h + .ref mperry_h + .ref neilf_h + .ref mdoc_h + .ref Old_h + .ref Wiz_h + .ref edboon_h + .ref jtobias_h + .ref oursler_h + .ref marty_h + .ref carlos_h + .ref jason_h + .ref amrich_h + .ref jigget_h + .ref north_h + .ref mund_h + +;symbols refined in this file + +; .def EB_H,JTO_H ;RA_H + .def spechds_t + .def ATL_t + .def DEFAULT_t + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .global BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .global SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .global DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .global DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .global SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + +;uninitialized ram definitions + + BSSX created_plyr1_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + BSSX created_plyr2_attrib_tables,512 + BSSX created_plyr3_attrib_tables,512 + BSSX created_plyr4_attrib_tables,512 ;sizeof ATL_t in plyrat.asm + +; BSSX created_plyr1_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr2_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr3_attrib_tables,PLYRAT_TBL_SIZE +; BSSX created_plyr4_attrib_tables,PLYRAT_TBL_SIZE + +;equates for this file + + + + .text + + +GrantG_F: + .word 53 + .word 00H,07293H,07292H,06E52H,06E50H,06630H,0662FH,0662FH + .word 0620FH,0620EH,05E0FH,05E0EH,05DCEH,05DCCH,05DCBH,059CCH + .word 05DABH,055ABH,051ABH,0518BH,05169H,04D6BH,05168H,04D69H + .word 05169H,05168H,04949H,04948H,04949H,04D45H,04948H,04927H + .word 04508H,04507H,04505H,04505H,03CE7H,040E4H,03CE5H,03CE5H + .word 034E8H,03CC6H,034C6H,038C4H,034A4H,030A4H,03484H,03083H + .word 02C84H,02C63H,02843H,02423H,02023H + +GRANTG_P: + .word 64 + .word 03E0H,040E5H,030A3H,02C83H,02443H,01C21H,02863H,034C5H + .word 038A3H,04D04H,04506H,04D48H,05168H,05546H,04927H,0516BH + .word 04529H,03D07H,03CE4H,02421H,01001H,05125H,03462H,04505H + .word 0558BH,04D47H,05988H,055ADH,059CCH,065CAH,05DABH,06231H + .word 069EAH,01C22H,01022H,061EDH,05E0EH,07E71H,02C84H,030A5H + .word 01824H,06E2FH,038A4H,040A3H,07671H,06A71H,05881H,01809H + .word 01891H,02556H,01C6FH,07A0H,072B7H,0565CH,076B3H,0E65H + .word 010B6H,03113H,07F1AH,0D84H,051F5H,056DFH,041B4H,0B01H + +Horna_f: + .word 53 + .word 00H,07F59H,07F57H,07F37H,07F34H,07EF5H,07EF3H,07EF3H + .word 07EB3H,07EB1H,07EB3H,07EB1H,07E71H,07E6FH,07E6DH,07E6FH + .word 07E4EH,07A2DH,0762DH,0760EH,071EBH,06DEDH,071E9H,06DEBH + .word 071CAH,071C9H,069ABH,069A9H,065ABH,06DA5H,065A9H,06987H + .word 06169H,06167H,06165H,06145H,05927H,05D23H,05925H,05525H + .word 04D29H,05506H,04D06H,050E3H,04CC4H,044C4H,048A3H,04482H + .word 04084H,03C62H,03842H,03422H,03002H + +HORNA_P: + .word 60 + .word 04010H,07EF3H,07EB3H,07EB2H,07E6FH,07E2DH,07E0CH,07DEBH + .word 07DCAH,0760CH,075CAH,071EBH,075A9H,06DC9H,06988H,065A9H + .word 06966H,06188H,06566H,05DA9H,06167H,05D67H,05945H,05565H + .word 0516AH,0498BH,05525H,05504H,04D45H,04D24H,058A1H,04524H + .word 03549H,048E3H,03528H,03906H,03106H,03CA1H,02CE7H,028E5H + .word 024C6H,028A3H,020A5H,020A4H,03400H,01C84H,02042H,01863H + .word 01C42H,01463H,01C40H,01442H,01821H,0C00H,01400H,0C01H + .word 0C00H,0400H,0801H,0800H + +Manning_f: + .word 53 + .word 00H,0724FH,0724EH,06E0EH,06E0CH,065ECH,065EBH,065EBH + .word 061CBH,061CAH,05DCBH,05DCAH,05D8AH,05D88H,05D87H,05988H + .word 05D67H,05567H,05167H,05147H,05125H,04D27H,05124H,04D25H + .word 05125H,05124H,04905H,04904H,04905H,04D01H,04904H,048E3H + .word 044C4H,044C3H,044C1H,044C1H,03CA3H,040A0H,03CA1H,03CA1H + .word 034A4H,03C82H,03482H,03880H,03460H,03060H,03440H,03040H + .word 02C40H,02C20H,02800H,02400H,02000H + +MANNING_P: + .word 64 + .word 03E0H,01C20H,03061H,030A3H,030E6H,02CC6H,040E5H,03C8BH + .word 01800H,01000H,071C9H,04D48H,044E4H,03CC4H,05104H,02400H + .word 02840H,03CC3H,03882H,03082H,02C40H,04906H,061ECH,02862H + .word 06189H,05946H,048C4H,038A3H,02463H,05967H,04925H,02063H + .word 068CEH,065ECH,048E3H,0C00H,01C00H,0598BH,06188H,04504H + .word 030C5H,0764EH,061CBH,02484H,0720DH,05546H,03507H,07A93H + .word 01822H,07E0H,01400H,06CC8H,02041H,01C43H,0504BH,01C84H + .word 028E8H,028A6H,02084H,028A5H,04006H,05611H,041D0H,03543H + + .def OFFNBA_P +OFFNBA_P: + .word 64 + .word 01565H,00H,074H,095H,0B6H,0F6H,0136H,04D5H + .word 0842H,0CF6H,0D36H,0C63H,01516H,01537H,014A5H,01977H + .word 018C6H,021B7H,02529H,031F9H,0318CH,035ADH,03DEFH,03E59H + .word 04210H,0425AH,04A52H,04E73H,05294H,056DBH,056B5H,05AD6H + .word 05AFCH,05EF7H,06739H,06B5DH,06F7BH,06F9DH,0739CH,0739DH + .word 077BDH,07401H,07404H,07423H,07444H,077BEH,07BDEH,07802H + .word 078A6H,07909H,0792AH,0796CH,079EFH,07A11H,07A73H,07A95H + .word 07FFFH,07F59H,07F7CH,07FBDH,07FFEH,02DH,05C23H,03401H + + +;Speeds + +;These have been reduced from TE! Used to be >1040 +;BV .equ >1040->80+>42*1 + +BV .equ >1040->80+>42*1 +BV1 .equ >1040->80+>42*2 +BV2 .equ >1040->80+>42*3 +BV3 .equ >1040->80+>42*4 +BV4 .equ >1040->80+>42*5 +BV5 .equ >1040->80+>42*6 +BV6 .equ >1040->80+>42*7 +BV7 .equ >1040->80+>42*8 +BV8 .equ >1040->80+>42*10+>20 +BV9 .equ >1040->80+>42*11+>30 +BV10 .equ >1040->80+>42*12+>40 + +;Drone skills +DSKL0 .equ 0 +DSKL1 .equ 1 +DSKL2 .equ 2 +DSKL3 .equ 3 +DSKL4 .equ 4 +DSKL5 .equ 5 +DSKL_1 .equ -1 +DSKL_2 .equ -2 +DSKL_3 .equ -3 +DSKL_4 .equ -4 +DSKL_5 .equ -5 +DSKL_6 .equ -6 +DSKL_7 .equ -7 +DSKL_8 .equ -8 +DSKL_9 .equ -9 +DSKL_10 .equ -10 +DSKL_11 .equ -11 + +;Shot skill % +;SHT0 .equ 890 ;890 +;SHT1 .equ 910 ;910 +;SHT2 .equ 960 ;960 +;SHT3 .equ 980 ;980 +;SHT4 .equ 1000 ;1000 +;SHT5 .equ 1020 ;1020 +;SHT6 .equ 1040 ;1040 +;SHT7 .equ 1060 +;SHT8 .equ 1070 +;SHT9 .equ 1090 +;SHT10 .equ 1150 + +;12/15/93 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 + +;12/16/93 +;SHT0 .equ 860 ;890 +;SHT1 .equ 890 ;910 +;SHT2 .equ 920 ;960 +;SHT3 .equ 970 ;980 +;SHT4 .equ 1040 ;1000 +;SHT5 .equ 1070 ;1020 +;SHT6 .equ 1080 ;1040 +;SHT7 .equ 1100 +;SHT8 .equ 1130 +;SHT9 .equ 1150 +;SHT10 .equ 1200 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;3/15/96 +;SHT0 .equ 820 ;890 +;SHT1 .equ 840 ;910 +;SHT2 .equ 890 ;960 +;SHT3 .equ 930 ;980 +;SHT4 .equ 1020 ;1000 +;SHT5 .equ 1040 ;1020 +;SHT6 .equ 1060 ;1040 +;SHT7 .equ 1080 +;SHT8 .equ 1100 +;SHT9 .equ 1120 +;SHT10 .equ 1150 +;SHT11 .equ 1201 ;MK SPECIAL FLAG + +;12/16/93 +SHT0 .equ 860 ;890 +SHT1 .equ 890 ;910 +SHT2 .equ 920 ;960 +SHT3 .equ 970 ;980 +SHT4 .equ 1040 ;1000 +SHT5 .equ 1070 ;1020 +SHT6 .equ 1080 ;1040 +SHT7 .equ 1100 +SHT8 .equ 1130 +SHT9 .equ 1150 +SHT10 .equ 1200 +SHT11 .equ 1201 ;MK SPECIAL FLAG + +;Dunk ability +DNK0 .equ 0 +DNK1 .equ 1 +DNK2 .equ 2 +DNK3 .equ 3 +DNK4 .equ 4 +DNK5 .equ 5 +DNK6 .equ 6 +DNK7 .equ 7 +DNK8 .equ 8 +DNK9 .equ 9 +DNK10 .equ 10 + +;Defensive block ability +DEF0 .equ 0 +DEF1 .equ 1 +DEF2 .equ 2 +DEF3 .equ 3 +DEF4 .equ 4 +DEF5 .equ 5 +DEF6 .equ 6 +DEF7 .equ 7 +DEF8 .equ 8 +DEF9 .equ 9 +DEF10 .equ 10 + +;Defensive steal ability +;SDEF0 .equ 180 +;SDEF1 .equ 185 +;SDEF2 .equ 190 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 210 +;SDEF7 .equ 215 +;SDEF8 .equ 220 +;SDEF9 .equ 225 +;SDEF10 .equ 230 + +;SDEF0 .equ 160 +;SDEF1 .equ 170 +;SDEF2 .equ 180 ;Old normal +;SDEF3 .equ 195 +;SDEF4 .equ 200 +;SDEF5 .equ 205 +;SDEF6 .equ 215 +;SDEF7 .equ 245 +;SDEF8 .equ 260 +;SDEF9 .equ 285 +;SDEF10 .equ 300 + +SDEF0 .equ 0 +SDEF1 .equ 1 +SDEF2 .equ 2 ;Old normal +SDEF3 .equ 3 +SDEF4 .equ 4 +SDEF5 .equ 5 +SDEF6 .equ 6 +SDEF7 .equ 7 +SDEF8 .equ 8 +SDEF9 .equ 9 +SDEF10 .equ 10 + + + .def ply_city_tbl +; +; This table is used by 'change uniform' in CREATE PLAYER +; +ply_city_tbl + .long ATL_t + .long BOST_t + .long CHAR_t + .long CHI_t + .long CLEV_t + .long DEFAULT_t ;default team + .long DAL_t + .long DEN_t + .long DET_t + .long GOLD_t + .long HOU_t + .long IND_t + .long LAC_t + .long LAL_t + .long MIAMI_t + .long MILW_t + .long MINN_t + .long NJ_t + .long NY_t + .long ORL_t + .long PHIL_t + .long PHX_t + .long PORT_t + .long SAC_t + .long SANANT_t + .long SEA_t + .long TORONTO_t + .long UTAH_t + .long VANCOU_t + .long WASH_t + .long CUST_1t + .long CUST_2t + .long CUST_3t + .long CUST_4t + .long CUST_5t + .long CUST_6t + .long CUST_7t + .long CUST_8t + .long CUST_9t + .long CUST_10t + +;-------------------- +; Table used for bench plyr img palette build + + .def team_city_tbl + +team_city_tbl + .long ATL_t,BOST_t,CHAR_t,CHI_t + .long CLEV_t,DAL_t,DEN_t,DET_t + .long GOLD_t,HOU_t,IND_t,LAC_t + .long LAL_t,MIAMI_t,MILW_t,MINN_t + .long NJ_t,NY_t,ORL_t,PHIL_t + .long PHX_t,PORT_t,SAC_t,SANANT_t + .long SEA_t,TORONTO_t,UTAH_t,VANCOU_t + .long WASH_t + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ATL_t + LWWWWWW scale61_t,BV9,SHT7,DNK0,DEF1,SDEF9,DSKL5 + .long BLAYLO_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Blaylock_h + .word 7,2,9,0 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +ATL_tend + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL5 + .long Mutumbo_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT8,DNK5,DEF2,SDEF5,DSKL5 + .long SSMITH_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Ssmith_h + .word 4,5,6,19 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale611_t,BV7,SHT7,DNK3,DEF5,SDEF5,DSKL5 + .long laet_f, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Laetner_h + .word 5,6,8,11 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + LWWWWWW scale68_t,BV7,SHT6,DNK6,DEF5,SDEF4,DSKL5 + .long KNORMA_F, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Knorman_h + .word 4,4,2,4 + .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P + + .def PLYRAT_TBL_SIZE +PLYRAT_TBL_SIZE equ ATL_tend-ATL_t + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +BOST_t + LWWWWWW scale61_t,BV8,SHT5,DNK7,DEF1,SDEF7,DSKL5 + .long BROWN_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Brown_h + .word 5,2,2,18 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P +;new + LWWWWWW scale69f_t,BV6,SHT7,DNK5,DEF7,SDEF3,DSKL5 + .long HAM_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,ham_h + .word 6,7,1,14 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale511_t,BV9,SHT9,DNK1,DEF1,SDEF7,DSKL5 + .long BARROS_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Barros_h + .word 6,1,5,8 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale611_t,BV7,SHT7,DNK7,DEF9,SDEF7,DSKL5 + .long RADJA_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Radja_h + .word 1,8,6,7 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + LWWWWWW scale67ef_t,BV5,SHT7,DNK5,DEF5,SDEF8,DSKL5 + .long FOX_F, UN_BOSP_P,UN_BOSS_P, TR_BOSP_P,TR_BOSS_P,Fox_h + .word 7,9,7,9 + .long SW_BOSP_P,SW_BOSS_P,VP_BOSP_P,VP_BOSS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHAR_t + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL5 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,14 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale67ef_t,BV6,SHT6,DNK5,DEF3,SDEF3,DSKL5 + .long MASON_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Mason_h + .word 4,9,6,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale71_t,BV5,SHT4,DNK4,DEF9,SDEF5,DSKL5 + .long divac_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Divac_h + .word 6,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF2,DSKL5 + .long ZIDEK_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Zidek_h + .word 3,8,2,18 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF1,SDEF8,DSKL5 + .long CURRY_F, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Curry_h + .word 4,2,7,15 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CHI_t + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,6 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale68_t,BV7,SHT1,DNK4,DEF7,SDEF5,DSKL5 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,12 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale611t_t,BV7,SHT7,DNK6,DEF5,SDEF7,DSKL5 + .long KUKOC_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kukoc_h + .word 8,5,10,13 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale72f_t,BV5,SHT5,DNK3,DEF7,SDEF2,DSKL5 + .long LONG_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Longley_h + .word 6,8,2,18 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + LWWWWWW scale63_t,BV6,SHT9,DNK0,DEF1,SDEF6,DSKL5 + .long KERR_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Kerr_h + .word 4,2,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +CLEV_t + LWWWWWW scale69f_t,BV6,SHT6,DNK6,DEF6,SDEF3,DSKL5 + .long THILL_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Thill_h + .word 4,8,7,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale66_t,BV7,SHT7,DNK3,DEF5,SDEF4,DSKL5 + .long CMILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Cmills_h + .word 4,5,2,1 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale65_t,BV8,SHT7,DNK1,DEF4,SDEF8,DSKL5 + .long PHILLS_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Phills_h + .word 7,5,2,8 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale511_t,BV9,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long BRAND_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Brandon_h + .word 7,2,9,18 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + LWWWWWW scale610_t,BV4,SHT7,DNK2,DEF2,SDEF5,DSKL5 + .long FERRY_F, UN_CLEP_P,UN_CLES_P, TR_CLEP_P,TR_CLES_P,Ferry_h + .word 5,7,8,11 + .long SW_CLEP_P,SW_CLES_P,VP_CLEP_P,VP_CLES_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DAL_t + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL5 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DHARP_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,DHarper_h + .word 5,5,5,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale66_t,BV7,SHT7,DNK5,DEF4,SDEF5,DSKL5 + .long JACK_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Jack_h + .word 5,4,7,0 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale70f_t,BV4,SHT3,DNK7,DEF6,SDEF1,DSKL5 + .long MONTRO_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Montross_h + .word 3,8,3,14 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + LWWWWWW scale68f_t,BV8,SHT9,DNK8,DEF7,SDEF4,DSKL5 + .long MASH_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Mash_h + .word 5,3,9,10 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEN_t + LWWWWWW scale69_t,BV7,SHT6,DNK7,DEF7,SDEF5,DSKL5 + .long MCDYES_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mcdyes_h + .word 3,1,7,20 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale65_t,BV4,SHT8,DNK1,DEF1,SDEF8,DSKL5 + .long MARCIU_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Marciulonis_h + .word 2,5,7,17 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale61f_t,BV7,SHT6,DNK1,DEF4,SDEF9,DSKL5 + .long MJACKS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,MJackson_h + .word 9,4,4,11 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,16 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P +;kill + LWWWWWW scale67_t,BV7,SHT8,DNK2,DEF1,SDEF6,DSKL5 + .long DELLIS_F, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,DEllis_h + .word 5,6,8,4 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DET_t + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,15 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;new +;; LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF5,SDEF7,DSKL5 +;; .long RILY_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,rily_h +;; .word 6,3,2,19 +;; .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale63f_t,BV6,SHT8,DNK0,DEF1,SDEF6,DSKL5 + .long DUMARS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Dumars_h + .word 8,4,9,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale610f_t,BV7,SHT5,DNK7,DEF7,SDEF4,DSKL5 + .long THORPE_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Thorpe_h + .word 5,9,2,2 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P +;kill + LWWWWWW scale68t_t,BV8,SHT5,DNK7,DEF2,SDEF6,DSKL5 + .long Augmon_f, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Augmon_h + .word 4,3,8,10 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +GOLD_t + LWWWWWW scale65_t,BV9,SHT8,DNK8,DEF2,SDEF7,DSKL5 + .long SPREWE_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Sprewell_h + .word 4,4,8,10 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale70f_t,BV4,SHT5,DNK7,DEF5,SDEF3,DSKL5 + .long KONCAK_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Koncak_h + .word 3,6,2,17 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale610t_t,BV7,SHT7,DNK9,DEF8,SDEF7,DSKL5 + .long JSMITH_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Jsmith_h + .word 2,7,3,8 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + LWWWWWW scale67_t,BV4,SHT9,DNK2,DEF4,SDEF8,DSKL5 + .long mullin_f, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Mullin_h + .word 7,5,8,11 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +;kill + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Willis_h + .word 1,9,4,0 + .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +HOU_t + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL5 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,0 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;new + LWWWWWW scale610f_t,BV4,SHT4,DNK6,DEF8,SDEF2,DSKL5 + .long HARR_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,harr_h + .word 4,9,2,5 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale67_t,BV7,SHT8,DNK9,DEF2,SDEF8,DSKL5 + .long Drex_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Drexler_h + .word 8,3,8,3 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + LWWWWWW scale70t_t,BV5,SHT5,DNK7,DEF4,SDEF4,DSKL5 + .long WILLIS_F, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Willis_h + .word 1,9,4,18 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P +;kill (MAYBE!!!) +;Kenny Smith + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,4 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +IND_t + LWWWWWW scale67t_t,BV7,SHT9,DNK6,DEF5,SDEF6,DSKL5 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,4,9,6 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P +;new + LWWWWWW scale610f_t,BV4,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long DAMP_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,damp_h + .word 4,8,2,5 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale68_t,BV9,SHT6,DNK6,DEF6,SDEF8,DSKL5 + .long ROSE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Rose_h + .word 8,4,9,2 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale74f_t,BV6,SHT7,DNK3,DEF6,SDEF4,DSKL5 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + LWWWWWW scale611_t,BV5,SHT4,DNK6,DEF8,SDEF5,DSKL5 + .long DDAVIS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Ddavis_h + .word 2,6,2,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAC_t + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF6,SDEF6,DSKL5 + .long VAUGHT_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Vaught_h + .word 1,7,8,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67ef_t,BV6,SHT5,DNK5,DEF3,SDEF2,DSKL5 + .long RROGER_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Rrogers_h + .word 2,8,5,19 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale67_t,BV8,SHT6,DNK5,DEF4,SDEF8,DSKL5 + .long LMURRA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Lmurray_h + .word 6,5,9,12 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale61_t,BV8,SHT4,DNK1,DEF1,SDEF8,DSKL5 + .long PRICHA_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Richardson_h + .word 8,1,2,9 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + LWWWWWW scale66t_t,BV8,SHT6,DNK9,DEF4,SDEF6,DSKL5 + .long BBARRY_F, UN_LACP_P,UN_LACS_P, TR_LACP_P,TR_LACS_P,Bbarry_h + .word 5,5,8,8 + .long SW_LACP_P,SW_LACS_P,VP_LACP_P,VP_LACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +LAL_t + LWWWWWW scale61_t,BV10,SHT7,DNK1,DEF1,SDEF6,DSKL5 + .long EXEL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Vanexel_h + .word 8,2,9,3 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale67_t,BV8,SHT9,DNK7,DEF2,SDEF8,DSKL5 + .long CEBALL_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ceballos_h + .word 2,3,8,0 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Scott_h + .word 4,4,9,14 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF8,DSKL5 + .long CAMP_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Campbell_h + .word 1,5,3,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL5 + .long EJONES_F, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h + .word 8,4,2,7 + .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MIAMI_t + LWWWWWW scale610f_t,BV8,SHT6,DNK9,DEF9,SDEF4,DSKL5 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,15 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale60f_t,BV9,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long Hrdaway_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Hardaway_h + .word 8,5,6,5 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + LWWWWWW scale66f_t,BV5,SHT8,DNK2,DEF5,SDEF4,DSKL5 + .long DANILO_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Danilovic_h + .word 5,5,4,6 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Wwilliams_h + .word 6,6,3,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P +;kill + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL5 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,2 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MILW_t + LWWWWWW scale611_t,BV8,SHT7,DNK8,DEF7,SDEF5,DSKL5 + .long BAKER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Baker_h + .word 4,5,6,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P +;new + LWWWWWW scale65t_t,BV9,SHT8,DNK6,DEF2,SDEF6,DSKL5 + .long ALLEN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,allen_h + .word 5,2,8,11 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale611_t,BV6,SHT5,DNK6,DEF9,SDEF4,DSKL5 + .long Lang_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Lang_h + .word 2,8,4,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale67f_t,BV7,SHT9,DNK6,DEF2,SDEF7,DSKL5 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF1,SDEF7,DSKL5 + .long RESPER_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Respert_h + .word 7,1,9,10 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +MINN_t + LWWWWWW scale610_t,BV7,SHT7,DNK5,DEF7,SDEF9,DSKL5 + .long gug_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Gug_h + .word 6,6,3,1 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;new + LWWWWWW scale62t_t,BV8,SHT8,DNK5,DEF3,SDEF7,DSKL5 + .long MARBRY_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,marbry_h + .word 6,4,3,13 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + LWWWWWW scale611t_t,BV8,SHT5,DNK8,DEF8,SDEF5,DSKL5 + .long GARNET_F, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Garnett_h + .word 4,2,3,18 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P +;kill + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL5 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,2 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NJ_t + LWWWWWW scale65_t,BV8,SHT6,DNK5,DEF5,SDEF7,DSKL5 + .long gill_f, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gill_h + .word 7,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P +;new + LWWWWWW scale69t_t,BV6,SHT7,DNK7,DEF7,SDEF3,DSKL5 + .long KIT_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,kit_h + .word 5,6,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF9,DSKL5 + .long PACK_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Pack_h + .word 9,3,2,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale76et_t,BV5,SHT5,DNK8,DEF10,SDEF4,DSKL5 + .long BRAD_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Brad_h + .word 3,2,4,19 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + LWWWWWW scale68_t,BV8,SHT5,DNK6,DEF5,SDEF9,DSKL5 + .long OBANN_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Obannon_h + .word 5,4,8,14 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +NY_t + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL5 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,10,8,20 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +;new + LWWWWWW scale69f_t,BV5,SHT7,DNK6,DEF7,SDEF4,DSKL5 + .long WAL_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,wal_h + .word 5,7,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL5 + .long johnson_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,LJohnson_h + .word 7,8,8,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale65t_t,BV9,SHT8,DNK2,DEF2,SDEF7,DSKL5 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,5 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + LWWWWWW scale66_t,BV8,SHT10,DNK2,DEF3,SDEF4,DSKL5 + .long HOUSTO_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Houston_h + .word 5,1,7,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +ORL_t + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL5 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,4,10,14 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale611_t,BV5,SHT5,DNK3,DEF7,SDEF3,DSKL5 + .long shiek_f, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Seikaly_h + .word 4,8,4,0 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,8,4,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale66_t,BV7,SHT8,DNK3,DEF4,SDEF8,DSKL5 + .long N_AND_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,NAnders_h + .word 4,4,4,12 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + LWWWWWW scale68_t,BV7,SHT9,DNK3,DEF4,SDEF4,DSKL5 + .long DSCOTT_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Dscott_h + .word 5,3,4,7 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHIL_t +;new + LWWWWWW scale60t_t,BV9,SHT9,DNK0,DEF1,SDEF9,DSKL5 + .long IVER_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,iversn_h + .word 7,3,6,5 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;new +;; LWWWWWW scale65_t,BV6,SHT8,DNK6,DEF4,SDEF6,DSKL5 +;; .long MINR_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,minr_h +;; .word 7,5,2,12 +;; .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL5 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,8 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale610ef_t,BV5,SHT7,DNK6,DEF5,SDEF3,DSKL5 + .long Cole_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Coleman_h + .word 3,8,2,11 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P +;kill + LWWWWWW scale67f_t,BV5,SHT6,DNK6,DEF6,SDEF4,DSKL5 + .long WEATH_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Weath_h + .word 5,6,7,6 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PHX_t + LWWWWWW scale61_t,BV9,SHT8,DNK2,DEF3,SDEF8,DSKL5 + .long K_JOHN_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,KJohn_h + .word 8,2,9,17 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale69ef_t,BV4,SHT8,DNK6,DEF6,SDEF4,DSKL5 + .long tisdale_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Tisdale_h + .word 5,8,7,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610_t,BV5,SHT5,DNK7,DEF5,SDEF4,DSKL5 + .long Manning_f, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Manning_h + .word 3,6,6,5 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale610t_t,BV8,SHT6,DNK8,DEF8,SDEF7,DSKL5 + .long HORRY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Horry_h + .word 5,6,9,0 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + LWWWWWW scale63_t,BV9,SHT6,DNK1,DEF1,SDEF4,DSKL5 + .long CASSEL_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Cassel_h + .word 6,1,2,16 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +PORT_t + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL5 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,1 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale65f_t,BV7,SHT5,DNK9,DEF1,SDEF4,DSKL5 + .long RIDER_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Rider_h + .word 2,4,6,10 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale73ef_t,BV4,SHT6,DNK5,DEF7,SDEF3,DSKL5 + .long SABONI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Sabonis_h + .word 2,9,4,15 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale61t_t,BV10,SHT6,DNK0,DEF3,SDEF8,DSKL5 + .long K_AND_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,KAnderson_h + .word 9,3,6,3 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + LWWWWWW scale62_t,BV9,SHT5,DNK0,DEF1,SDEF6,DSKL5 + .long CHILD_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Childress_h + .word 8,2,8,11 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SAC_t + LWWWWWW scale69_t,BV7,SHT7,DNK6,DEF2,SDEF4,DSKL5 + .long BOWENS_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bowens_h + .word 7,6,6,11 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale61_t,BV8,SHT8,DNK0,DEF1,SDEF8,DSKL5 + .long RAUF_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rauf_h + .word 8,2,9,0 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale65f_t,BV7,SHT8,DNK2,DEF1,SDEF9,DSKL5 + .long RICH_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Rich_h + .word 6,7,8,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale69f_t,BV5,SHT5,DNK6,DEF9,SDEF2,DSKL5 + .long BGRANT_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Bgrant_h + .word 1,6,6,6 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + LWWWWWW scale510et_t,BV10,SHT6,DNK0,DEF0,SDEF8,DSKL5 + .long EDNEY_F, UN_SACP_P,UN_SACS_P, TR_SACP_P,TR_SACS_P,Edney_h + .word 8,1,4,1 + .long SW_SACP_P,SW_SACS_P,VP_SACP_P,VP_SACS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SANANT_t + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL5 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL5 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64t_t,BV7,SHT8,DNK3,DEF3,SDEF5,DSKL5 + .long VMAX_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,VMaxwell_h + .word 6,4,4,3 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale511_t,BV10,SHT5,DNK0,DEF1,SDEF8,DSKL5 + .long AJOHN_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Ajohnson_h + .word 9,1,2,0 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + LWWWWWW scale64_t,BV7,SHT6,DNK1,DEF1,SDEF7,DSKL5 + .long DELNEG_F, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Delnegro_h + .word 3,3,2,13 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +SEA_t + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL5 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,5 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale64_t,BV10,SHT7,DNK0,DEF2,SDEF10,DSKL5 + .long PAYTON_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Payton_h + .word 8,3,8,2 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale610t_t,BV5,SHT8,DNK5,DEF4,SDEF2,DSKL5 + .long schremp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Schrempf_h + .word 4,6,2,14 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale63_t,BV6,SHT7,DNK0,DEF4,SDEF6,DSKL5 + .long hawkins_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Hawkins_h + .word 5,3,7,0 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + LWWWWWW scale67t_t,BV7,SHT4,DNK4,DEF4,SDEF4,DSKL5 + .long FORD_F, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Sford_h + .word 6,3,4,1 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +TORONTO_t + LWWWWWW scale611t_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL5 + .long CROGER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Crogers_h + .word 5,8,1,0 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +;new + LWWWWWW scale610t_t,BV7,SHT8,DNK8,DEF9,SDEF4,DSKL5 + .long CAMB_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,camb_h + .word 5,7,7,9 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale510_t,BV10,SHT7,DNK0,DEF1,SDEF8,DSKL5 + .long STOUD_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Stoudamire_h + .word 9,1,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68f_t,BV5,SHT4,DNK7,DEF6,SDEF4,DSKL5 + .long PJONES_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Pjones_h + .word 3,8,3,5 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + LWWWWWW scale68_t,BV8,SHT7,DNK7,DEF8,SDEF5,DSKL5 + .long WWILLI_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wwilliams_h + .word 6,6,3,3 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +UTAH_t + LWWWWWW scale61_t,BV7,SHT8,DNK0,DEF1,SDEF10,DSKL5 + .long stock_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Stockton_h + .word 10,2,8,2 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL5 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,18 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale64_t,BV5,SHT7,DNK2,DEF2,SDEF7,DSKL5 + .long Horna_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Hornacek_h + .word 5,5,6,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + LWWWWWW scale68_t,BV5,SHT7,DNK5,DEF4,SDEF8,DSKL5 + .long MORRIS_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Morris_h + .word 4,6,2,9 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P +;kill + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL5 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,3 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +VANCOU_t + LWWWWWW scale61_t,BV8,SHT5,DNK1,DEF2,SDEF7,DSKL5 + .long ANTHON_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Anthony_h + .word 7,4,2,5 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale64_t,BV7,SHT7,DNK4,DEF5,SDEF8,DSKL5 + .long BEdwrd_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,BEdwrds_h + .word 3,6,7,11 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + LWWWWWW scale70ef_t,BV5,SHT6,DNK4,DEF8,SDEF5,DSKL5 + .long BREEV_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Breeves_h + .word 2,10,2,16 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL5 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,2 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P +;kill + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL5 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,4 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +WASH_t + LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF1,SDEF7,DSKL5 + .long STRICK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Strickland_h + .word 10,3,6,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL5 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale69f_t,BV7,SHT8,DNK6,DEF3,SDEF5,DSKL5 + .long JHOW_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Jhoward_h + .word 4,7,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,4 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + LWWWWWW scale67_t,BV7,SHT6,DNK6,DEF2,SDEF6,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 2,5,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P + + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +DEFAULT_t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Cheaney_h + .word 5,2,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P +CUST_1t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST1P,UN_CUST1P, TR_CUST1P,TR_CUST1P,Cheaney_h + .word 5,2,8,9 + .long SW_CUST1P,SW_CUST1P,VP_CUST1P,VP_CUST1P +CUST_2t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST2P,UN_CUST2P, TR_CUST2P,TR_CUST2P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST2P,SW_CUST2P,VP_CUST2P,VP_CUST2P +CUST_3t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST3P,UN_CUST3P, TR_CUST3P,TR_CUST3P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST3P,SW_CUST3P,VP_CUST3P,VP_CUST3P +CUST_4t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST4P,UN_CUST4P, TR_CUST4P,TR_CUST4P,Cheaney_h + .word 5,2,8,15 + .long SW_CUST4P,SW_CUST4P,VP_CUST4P,VP_CUST4P +CUST_5t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST5P,UN_CUST5P, TR_CUST5P,TR_CUST5P,Cheaney_h + .word 5,2,8,0 + .long SW_CUST5P,SW_CUST5P,VP_CUST5P,VP_CUST5P +CUST_6t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST6P,UN_CUST6P, TR_CUST6P,TR_CUST6P,Cheaney_h + .word 5,2,8,6 + .long SW_CUST6P,SW_CUST6P,VP_CUST6P,VP_CUST6P +CUST_7t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST7P,UN_CUST7P, TR_CUST7P,TR_CUST7P,Cheaney_h + .word 5,2,8,19 + .long SW_CUST7P,SW_CUST7P,VP_CUST7P,VP_CUST7P +CUST_8t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST8P,UN_CUST8P, TR_CUST8P,TR_CUST8P,Cheaney_h + .word 5,2,8,11 + .long SW_CUST8P,SW_CUST8P,VP_CUST8P,VP_CUST8P +CUST_9t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,Cheaney_h + .word 5,2,8,4 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P +CUST_10t + LWWWWWW scale67_t,BV8,SHT8,DNK3,DEF4,SDEF7,DSKL5 + .long CHEAN_F, UN_CUS10P,UN_CUS10P, TR_CUS10P,TR_CUS10P,Cheaney_h + .word 5,2,8,18 + .long SW_CUS10P,SW_CUS10P,VP_CUS10P,VP_CUS10P + + + +UN_CUST1P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +TR_CUST1P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +SW_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +VP_CUST1P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + +TR_CUST2P: + .word 17 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,06f7bh,06b5ah,06739h + .word 06318h,05ef7h,05ad6h,056b5h,05294h,04e73h,04a52h,04631h + .word 04210h + +UN_CUST2P: + .word 25 + .word 00000h,07fffh,07bdeh,077bdh,0739ch,0737bh,06f5ah,06b39h + .word 06718h,06718h,05ed6h,05ab5h,05694h,05273h,04e52h,04a31h + .word 04610h,041efh,03dceh,039adh,0358ch,0316bh,02d4ah,02929h + .word 02508h + +VP_CUST2P: + .word 12 + .word 00000h,07fffh,07fffh,077bdh,06f7bh,06739h,05ef7h,056b5h + .word 04e73h,04631h,03defh,035adh + + +SW_CUST3P: + .word 12 + .word 00000h,07d40h,07dc0h,07e40h,07ec0h,07f60h,07fe0h,07f60h + .word 07ec0h,07e40h,07dc0h,07d40h + +TR_CUST3P: + .word 17 + .word 00000h,07d40h,07da0h,07e00h,07e60h,07ec0h,07f20h,07f80h + .word 07fe0h,07f80h,07f40h,07ee0h,07e80h,07e20h,07de0h,07d80h + .word 07d20h + +UN_CUST3P: + .word 25 + .word 00000h,06118h,058d6h,05495h,04c54h,04812h,04411h,04011h + .word 03c10h,03c0fh,0380eh,0340eh,0340dh,0300ch,02c0bh,02c0bh + .word 0280ah,02409h,02409h,02008h,01c07h,01c07h,01405h,00c03h + .word 00802h + +VP_CUST3P: + .word 12 + .word 00000h,07d40h,07da0h,07e00h,07e80h,07ee0h,07f60h,07ec0h + .word 07e40h,07dc0h,07d40h,014a0h + + + +SW_CUST4P: + .word 12 + .word 00000h,003e0h,003a0h,00360h,00320h,002c0h,00280h,00240h + .word 001c0h,00180h,00140h,000a0h + + +TR_CUST4P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST4P: + .word 25 + .word 00000h,003e0h,003c0h,003a0h,00380h,00360h,00340h,00320h + .word 00300h,002e0h,002c0h,002a0h,00280h,00260h,00240h,00220h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00140h + .word 00120h + +VP_CUST4P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + + +SW_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST5P: + .word 17 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07aa0h,07280h,06e60h + .word 06a40h,06600h,061e0h,05dc0h,059a0h,05580h,05160h,04d40h + .word 04940h + +UN_CUST5P: + .word 25 + .word 00000h,07df9h,07d98h,07d37h,07cf6h,07c96h,07c55h,07c15h + .word 07813h,07412h,07011h,06c10h,0680fh,0640eh,0600dh,05c0ch + .word 0580bh,0540ah,05009h,04c09h,04808h,04407h,04006h,03c06h + .word 03805h + +VP_CUST5P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + + +SW_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + +TR_CUST6P: + .word 17 + .word 00000h,07d5dh,07d3bh,07d1ah,07cf8h,07cd7h,07cb6h,078b4h + .word 07493h,07092h,06870h,0646fh,0604eh,0584ch,0544bh,04c49h + .word 04848h + +UN_CUST6P: + .word 25 + .word 00000h,0318ch,0294ah,02529h,02108h,01ce7h,018c6h,018c6h + .word 014a5h,014a5h,01084h,01084h,00c63h,00c63h,00842h,00421h + .word 00421h,00000h,00000h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +VP_CUST6P: + .word 12 + .word 00000h,07d9dh,07d5bh,07d38h,07d16h,078f4h,070d2h,068b0h + .word 0608eh,0588ch,0508ah,04888h + + +SW_CUST7P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + +TR_CUST7P: + .word 17 + .word 00000h,07d8bh,07949h,07507h,074e6h,070a4h,06c63h,06c42h + .word 06820h,06800h,06000h,05800h,05000h,04c00h,04400h,03c00h + .word 03800h + +UN_CUST7P: + .word 25 + .word 00000h,074c5h,070a4h,06c62h,06841h,06400h,06400h,06000h + .word 05c00h,05800h,05400h,05000h,04c00h,04800h,04800h,04400h + .word 04000h,03c00h,03800h,03400h,03000h,03000h,02800h,02000h + .word 01800h + +VP_CUST7P: + .word 12 + .word 00000h,00380h,00340h,00300h,002c0h,00280h,00240h,00200h + .word 001c0h,00180h,00140h,00100h + + +SW_CUST8P: + .word 12 + .word 00000h,07f60h,07f20h,07f00h,07ee0h,07680h,06e40h,06600h + .word 05dc0h,059a0h,05160h,04940h + +TR_CUST8P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUST8P: + .word 25 + .word 00000h,07f80h,07b40h,07700h,072e0h,072a0h,06e80h,06e80h + .word 06e60h,06a40h,06a40h,06a20h,06600h,061e0h,061c0h,05dc0h + .word 05da0h,05980h,05960h,05560h,05120h,04d00h,048e0h,044c0h + .word 040c0h + +VP_CUST8P: + .word 12 + .word 00000h,03defh,0318ch,0294ah,01ce7h,01084h,00842h,00000h + .word 00000h,00000h,00000h,00000h + + +SW_CUST9P: + .word 12 + .word 00000h,05ef7h,056b5h,04e73h,04631h,04210h,039ceh,0318ch + .word 0294ah,02529h,01ce7h,014a5h + +TR_CUST9P: + .word 17 + .word 00000h,05ef7h,056b5h,05294h,04e73h,04a52h,04631h,04210h + .word 039ceh,035adh,0318ch,02d6bh,0294ah,02529h,01ce7h,018c6h + .word 014a5h + +UN_CUST9P: + .word 25 + .word 00000h,05ef7h,05ad6h,056b5h,05294h,05294h,04e73h,04a52h + .word 04631h,04210h,04210h,03defh,039ceh,035adh,035adh,0318ch + .word 02d6bh,0294ah,0294ah,02529h,02108h,01ce7h,01ce7h,018c6h + .word 014a5h + +VP_CUST9P: + .word 12 + .word 00000h,07d8ah,074e6h,06c62h,06400h,05c00h,05800h,05000h + .word 04c00h,04400h,03c00h,03800h + + +SW_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + +TR_CUS10P: + .word 17 + .word 00000h,03defh,035adh,0318ch,0294ah,02529h,01ce7h,018c6h + .word 01084h,00842h,00421h,00000h,00000h,00000h,00000h,00000h + .word 00000h + +UN_CUS10P: + .word 25 + .word 00000h,07de0h,07dc0h,07dc0h,079a0h,075a0h,07180h,06d80h + .word 06960h,06560h,06140h,05d40h,05920h,05500h,05100h,04ce0h + .word 048e0h,044e0h,040c0h,03cc0h,038a0h,034a0h,03480h,03080h + .word 02c80h + +VP_CUS10P: + .word 12 + .word 00000h,07de0h,07dc0h,07580h,06960h,06140h,05920h,05100h + .word 044e0h,03ca0h,034a0h,02c80h + + + +;;Special defeated all 27 teams team: +;; +;; LWWWWWW scale610f_t,BV7,SHT4,DNK9,DEF8,SDEF3,DSKL4 ;Can shatter +;; WASP_P, UWASS_P_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,KMalone_h +;; .word 5,9,8 +;; LWWWWWW scale611_t,BV8,SHT5,DNK10,DEF8,SDEF3,DSKL0 +;; .long FL22_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Kemp_h +;; .word 3,8,6 +;; LWWWWWW scale71_t,BV7,SHT3,DNK8,DEF9,SDEF3,DSKL_3 +;; .long FL43_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Robinson_h +;; .word 5,7,7 +;; +;;; LWWWWWW scale610_t,BV8,SHT5,DNK7,DEF9,SDEF7,DSKL1 +;;; .long FL22_p, UN_1_p,UN_14_p, TR_2_p,TR_11_p,Rodman_h +;;; .word 5,9,4 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF5,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,Barkley_h +;; .word 5,9,9 +;; +;; LWWWWWW scale610t_t,BV7,SHT6,DNK9,DEF6,SDEF5,DSKL3 ;Can shatter +;; .long FL9_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Drexler_h +;; .word 5,4,6 +;; LWWWWWW scale67t_t,BV10,SHT8,DNK3,DEF4,SDEF7,DSKL2 +;; .long FL34_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,AHard_h +;; .word 8,2,5 +;; LWWWWWW scale72f_t,BV7,SHT4,DNK9,DEF9,SDEF4,DSKL2 ;Shatter +;; .long FL13_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Ewing_h +;; .word 2,8,9 +;; LWWWWWW scale61t_t,BV9,SHT7,DNK0,DEF1,SDEF7,DSKL0 +;; .long FL36_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,KAnderson_h +;; .word 9,2,5 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK8,DEF8,SDEF2,DSKL0 +;; .long FL4_p, UN_14_p,UN_5_p, TR_4_p,TR_4_p,Coleman_h +;; .word 2,9,8 +;; LWWWWWW scale66_t,BV7,SHT9,DNK5,DEF6,SDEF8,DSKL2 +;; .long FL33_p, UN_1_p,UN_14_p, TR_7_p,TR_7_p,NAnders_h +;; .word 5,6,4 +;; LWWWWWW scale61_t,BV8,SHT9,DNK0,DEF0,SDEF10,DSKL4 +;; .long FL49_p, UN_7_p,UN_14_p, TR_2_p,TR_10_p,Stockton_h +;; .word 9,0,6 +;; LWWWWWW scale61_t,BV8,SHT7,DNK0,DEF0,SDEF7,DSKL3 +;; .long FL2_p, UN_3_p,UN_14_p, TR_2b_p,TR_2b_p,KJohn_h +;; .word 8,1,1 +;; LWWWWWW scale65_t,BV7,SHT7,DNK7,DEF7,SDEF7,DSKL0 +;; .long FL14_p, UN_6_p,UN_14_p, TR_3_p,TR_6_p,Gill_h +;; .word 6,6,6 +;; LWWWWWW scale65_t,BV7,SHT9,DNK3,DEF2,SDEF5,DSKL_8 +;; .long FL34_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rich_h +;; .word 6,8,7 +;; LWWWWWW scale76et_t,BV7,SHT3,DNK9,DEF9,SDEF7,DSKL_9 +;; .long FL27_p, UN_4_p,UN_14_p, TR_7_p,TR_4_p,Brad_h +;; .word 6,5,1 +;; LWWWWWW scale57_t,BV10,SHT6,DNK10,DEF0,SDEF7,DSKL_8 +;; .long FL52_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Webb_h +;; .word 3,0,4 +;; LWWWWWW scale63_t,BV8,SHT7,DNK0,DEF2,SDEF4,DSKL1 +;; .long FL36_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Dumars_h +;; .word 5,3,8 +;; LWWWWWW scale65t_t,BV8,SHT6,DNK3,DEF1,SDEF6,DSKL2 +;; .long FL34_p, UN_5_p,UN_14_p, TR_5_p,TR_5_p,Starks_h +;; .word 6,2,6 +;; LWWWWWW scale72_t,BV5,SHT1,DNK8,DEF9,SDEF2,DSKL_7 ;Can shatter +;; .long FL32_p, UN_8_p,UN_14_p, TR_8_p,TR_7_p,Mutumbo_h +;; .word 1,8,2 +;; LWWWWWW scale610_t,BV8,SHT6,DNK10,DEF8,SDEF4,DSKL0 ;Can shatter +;; .long FL53_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Wilkins_h +;; .word 2,3,8 +;; LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF7,SDEF8,DSKL0 +;; .long FL41_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,RHarper_h +;; .word 3,4,6 +;; LWWWWWW scale65_t,BV9,SHT4,DNK9,DEF5,SDEF5,DSKL_10 +;; .long FL36_p, UN_5_p,UN_14_p, TR_2_p,TR_7_p,Rider_h +;; .word 5,6,5 +;; LWWWWWW scale67t_t,BV7,SHT9,DNK5,DEF4,SDEF5,DSKL0 +;; .long FL30_p, UN_10_p,UN_14_p, TR_9_p,TR_7_p,Miller_h +;; .word 6,4,8 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK9,DEF5,SDEF3,DSKL0 ;Can shatter +;; .long FL25_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,LJohnson_h +;; .word 3,9,7 +;; LWWWWWW scale71_t,BV8,SHT2,DNK9,DEF9,SDEF3,DSKL1 +;; .long FL35_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Olajuwon_h +;; .word 4,8,8 +;; LWWWWWW scale611t_t,BV7,SHT4,DNK7,DEF9,SDEF2,DSKL_2 +;; .long FL2_p, UN_11_p,UN_14_p, TR_6_p,TR_6_p,Baker_h +;; .word 1,2,2 +;; LWWWWWW scale62_t,BV8,SHT9,DNK0,DEF0,SDEF4,DSKL5 +;; .long FL15_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Armstrng_h +;; .word 5,0,9 +;; LWWWWWW scale64t_t,BV6,SHT4,DNK1,DEF3,SDEF2,DSKL1 +;; .long FL48_p, UN_4_p,UN_14_p, TR_9_p,TR_4_p,Maxwell_h +;; .word 7,0,2 +;; LWWWWWW scale71_t,BV7,SHT5,DNK8,DEF9,SDEF4,DSKL0 +;; .long FL34_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,Mourn_h +;; .word 5,9,9 +;; LWWWWWW scale68f_t,BV7,SHT9,DNK5,DEF4,SDEF4,DSKL_6 +;; .long FL42_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Rice_h +;; .word 2,3,8 +;; LWWWWWW scale62_t,BV9,SHT6,DNK0,DEF0,SDEF8,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Hardaway_h +;; .word 5,4,6 +;; LWWWWWW scale66_t,BV8,SHT6,DNK1,DEF3,SDEF5,DSKL_11 +;; .long FL34_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Jack_h +;; .word 9,5,6 +;; LWWWWWW scale68_t,BV8,SHT6,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +;; .long FL38_p, UN_4_p,UN_14_p, TR_2_p,TR_4_p,Pippen_h +;; .word 7,3,5 +;; LWWWWWW scale65f_t,BV9,SHT5,DNK9,DEF6,SDEF7,DSKL_6 +;; .long FL44_p, UN_1_p,UN_14_p, TR_4_p,TR_4_p,Miner_h +;; .word 7,2,8 +;; LWWWWWW scale60_t,BV10,SHT8,DNK0,DEF0,SDEF7,DSKL1 +;; .long FL50_p, UN_9_p,UN_14_p, TR_4_p,TR_7_p,Thomas_h +;; .word 8,1,9 +;; LWWWWWW scale610f_t,BV8,SHT4,DNK8,DEF8,SDEF3,DSKL_4 +;; .long FL17_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Webber_h +;; .word 7,9,0 +;; LWWWWWW scale68t_t,BV8,SHT8,DNK7,DEF6,SDEF3,DSKL_11 +;; .long FL13_p, UN_5_p,UN_14_p, TR_6_p,TR_6_p,Mash_h +;; .word 4,8,6 +;; LWWWWWW scale69_t,BV5,SHT7,DNK7,DEF5,SDEF5,DSKL1 +;; .long FL54_p, UN_2_p,UN_15_p, TR_3_p,TR_10_p,Worthy_h +;; .word 5,4,6 +;; LWWWWWW scale67_t,BV4,SHT10,DNK3,DEF3,SDEF4,DSKL_4 +;; .long FL31_p, UN_5_p,UN_14_p, TR_9_p,TR_7_p,Mullin_h +;; .word 5,5,9 +;; LWWWWWW scale610f_t,BV7,SHT7,DNK7,DEF5,SDEF4,DSKL0 +;; .long FL28_p, UN_4_p,UN_14_p, TR_1_p,TR_4_p,Manning_h +;; .word 2,6,7 + + + +;;MORTAL KOMBAT +;;Scorpion +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UNI_SCO_P,UNI_SCO_P, TR__BLK_P,TR__BLK_P,SC_H +; .word 2,3,8 +;Raiden +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_14_p,UN_14_p, TR_2_p,TR_2_p,RA_H +; .word 2,3,8 +;;Reptile +; LWWWWWW scale610_t,BV9,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL31_p, UN_6_p,UN_6_p, TR__BLK_P,TR__BLK_P,RP_H +; .word 2,3,8 +;;Sub Zero +; LWWWWWW scale610_t,BV8,SHT11,DNK10,DEF8,SDEF6,DSKL5 +; .long FL47_p, UN_8_p,UN_8_p, TR__BLK_P,TR__BLK_P,SZ_H +; .word 2,3,8 +;;Hoskins +; LWWWWWW scale62t_t,BV8,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL27_p, UN_7_p,UN_14_p, TR_2_p,TR_2_p,KH_H +; .word 2,3,8 +;;Olivia +; LWWWWWW scale62_t,BV9,SHT10,DNK10,DEF8,SDEF6,DSKL5 +; .long FL3_p, UN_6_p,UN_14_p, TR_2_p,TR_2_p,OL_H +; .word 2,3,8 +;;Turmell +; LWWWWWW scale70_t,BV10,SHT11,DNK10,DEF9,SDEF9,DSKL5 +; .long FL27_p, UN_12_p,UN_14_p, TR_2_p,TR_7_p,mt_h +; .word 9,9,9 + + +; **NOTE***: +; **NOTE***: +; +; if this tables HEAD img ptr. and there order are modified/changed +; 'our_heads_small' (in select2.asm) table needs to be updated. +; +; **NOTE***: +; **NOTE***: + +;Size, speed, shot%, dunks, block defense, steals, drone skill +;Flesh pal, Pri uniform pal, Alt uniform pal, Pri trim pal, Alt trim pal, head +;Pass ability, power, clutch, hotspot +;Pri swipe pal, Alt swipe pal, Pri vertical panel pal, Alt vertical panel pal + +spechds_t + LWWWWWW scale68_t,BV10,SHT9,DNK9,DEF6,SDEF8,DSKL5 + .long JEFF_F, UN_CUST9P,UN_CUST9P, TR_CUST9P,TR_CUST9P,jeff_h + .word 8,8,8,14 + .long SW_CUST9P,SW_CUST9P,VP_CUST9P,VP_CUST9P ;JOHNSON + + LWWWWWW scale68f_t,BV10,SHT9,DNK7,DEF7,SDEF6,DSKL5 + .long SAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,sd_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DIVITA + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF9,SDEF8,DSKL5 + .long TURMEL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,turmel_h + .word 7,6,8,7 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;TURMELL + + LWWWWWW scale65et_t,BV10,SHT9,DNK9,DEF8,SDEF9,DSKL5 + .long DAN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,dan_h + .word 7,9,9,9 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;THOMPSON + + LWWWWWW scale68f_t,BV10,SHT5,DNK6,DEF6,SDEF6,DSKL5 + .long EUGG_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eug_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;GEER + + LWWWWWW scale59_t,BV10,SHT8,DNK5,DEF6,SDEF6,DSKL5 + .long JOHNC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jcartn + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;CARLTON + + LWWWWWW scale59_t,BV10,SHT9,DNK7,DEF6,SDEF6,DSKL5 + .long JEN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jfer_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEDRICK + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long HEY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jhey_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JON HEY + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long WIL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,willy_h + .word 7,6,8,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AIR MORRIS + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long BARD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bardo_h + .word 7,6,8,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;STEVE BARDO + + LWWWWWW scale70t_t,BV10,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MIN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,min_h + .word 7,6,8,12 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MINIFEE + + LWWWWWW scale58f_t,BV8,SHT9,DNK9,DEF6,SDEF6,DSKL5 + .long MARTY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,marty_h + .word 7,6,8,13 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARTINEZ + + LWWWWWW scale65f_t,BV9,SHT6,DNK6,DEF6,SDEF6,DSKL5 + .long CARLOS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carlos_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PESINA + + LWWWWWW scale65t_t,BV9,SHT7,DNK7,DEF7,SDEF6,DSKL5 + .long WIZ_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Wiz_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;LIPTAK + + LWWWWWW scale63f_t,BV9,SHT8,DNK6,DEF8,SDEF6,DSKL5 + .long EDDIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,eddie_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;EDDIE + + LWWWWWW scale66f_t,BV9,SHT8,DNK7,DEF8,SDEF6,DSKL5 + .long MXV_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mxv_h + .word 7,6,8,1 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MIKE V + + LWWWWWW scale66_t,BV10,SHT9,DNK5,DEF7,SDEF5,DSKL5 + .long JAMIE_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jamie_h + .word 7,6,8,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JAMIE + + LWWWWWW scale66_t,BV10,SHT9,DNK8,DEF7,SDEF6,DSKL5 + .long NIK_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,nicke_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NICK E. + + LWWWWWW scale64et_t,BV10,SHT7,DNK8,DEF6,SDEF6,DSKL5 + .long ROOT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jroot_h + .word 7,6,8,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. ROOT + + LWWWWWW scale59_t,BV10,SHT9,DNK9,DEF7,SDEF6,DSKL5 + .long CARY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,carym_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MEDNICK + + LWWWWWW scale69_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long ROH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,roan_h + .word 7,6,8,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;DAN ROAH + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long PAT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,patf_h + .word 7,6,8,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;PAT F. + + LWWWWWW scale66_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long BOON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,edboon_h + .word 7,6,8,14 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ED BOON + + LWWWWWW scale61_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long TOBIAS_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jtobias_h + .word 7,6,8,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;J. TOBIAS + + LWWWWWW scale65_t,BV10,SHT8,DNK9,DEF7,SDEF6,DSKL5 + .long OURSL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,oursler_h + .word 7,6,8,20 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;OURSLER + + LWWWWWW scale65_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long JASON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jason_h + .word 7,7,7,17 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JASON + + LWWWWWW scale67_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long QUINN_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,quinn_h + .word 7,7,7,11 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;QUINN + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long PERRY_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mperry_h + .word 7,7,7,16 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;M. PERRY + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long NEILF_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,neilf_h + .word 7,7,7,15 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;N. FUNK + + LWWWWWW scale68_t,BV8,SHT8,DNK8,DEF8,SDEF7,DSKL5 + .long MDOC_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mdoc_h + .word 7,7,7,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MDOC + + LWWWWWW scale68_t,BV7,SHT1,DNK6,DEF2,SDEF2,DSKL5 + .long BUD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,bud_h + .word 3,3,3,19 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;BUD + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long OLD_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Old_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MARIUS + + LWWWWWW scale611f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MUND_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mund_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MUNDAY + + LWWWWWW scale610f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long NORTH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,north_h + .word 6,6,6,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;NORTH + + LWWWWWW scale69f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long AMRICH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,amrich_h + .word 6,6,6,0 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;AMRICH + + LWWWWWW scale610ef_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JIGGET_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jigget_h + .word 6,6,6,8 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;JIGGETS + + LWWWWWW scale66f_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long JON_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,jon_h + .word 6,6,6,2 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;ZIRIN + + LWWWWWW scale64t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long HEITH_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,heithb_h + .word 6,6,6,18 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;HEITH BETTLEMAN + + LWWWWWW scale511t_t,BV8,SHT7,DNK5,DEF4,SDEF7,DSKL5 + .long MATT_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,mattb_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + + LWWWWWW scale511et_t,BV7,SHT8,DNK3,DEF6,SDEF7,DSKL5 + .long MADBAL_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,madball_h + .word 6,6,6,5 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MATT BETTLEMAN + +;FIXX!!! +;Superstar special guests + LWWWWWW scale67_t,BV8,SHT8,DNK9,DEF8,SDEF9,DSKL5 + .long pippin_f, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h + .word 7,6,8,11 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;PIPPEN + + LWWWWWW scale68_t,BV7,SHT2,DNK3,DEF5,SDEF4,DSKL1 + .long RODMAN_F, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Rodman_h + .word 4,9,3,0 + .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P ;RODMAN + + LWWWWWW scale67f_t,BV7,SHT7,DNK8,DEF5,SDEF4,DSKL0 + .long johnson_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,LJohnson_h + .word 7,8,8,5 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;LARRY JOHNSON + + LWWWWWW scale68_t,BV7,SHT10,DNK5,DEF2,SDEF6,DSKL_6 + .long Rice_f, UN_CHAP_P,UN_CHAS_P, TR_CHAP_P,TR_CHAS_P,Rice_h + .word 2,5,9,3 + .long SW_CHAP_P,SW_CHAS_P,VP_CHAP_P,VP_CHAS_P ;GLENN RICE + + LWWWWWW scale64_t,BV9,SHT4,DNK5,DEF6,SDEF6,DSKL_11 + .long KIDD_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,Kidd_h + .word 8,4,8,18 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;JASON KIDD + + LWWWWWW scale72t_t,BV6,SHT4,DNK8,DEF10,SDEF5,DSKL_7 + .long Mutumbo_f, UN_DENP_P,UN_DENS_P, TR_DENP_P,TR_DENS_P,Mutumbo_h + .word 3,9,7,6 + .long SW_DENP_P,SW_DENS_P,VP_DENP_P,VP_DENS_P ;MUTUMBO + + LWWWWWW scale68_t,BV9,SHT8,DNK8,DEF5,SDEF8,DSKL1 + .long GHILL_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Ghill_h + .word 8,5,9,5 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;GRANT HILL + + LWWWWWW scale70_t,BV7,SHT7,DNK8,DEF10,SDEF7,DSKL1 + .long Hakeem_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Olajuwon_h + .word 7,10,7,2 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;HAKEEM + + LWWWWWW scale67t_t,BV7,SHT8,DNK6,DEF5,SDEF5,DSKL0 + .long OMILLER_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Miller_h + .word 5,2,9,7 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;R. MILLER + + LWWWWWW scale74f_t,BV5,SHT7,DNK3,DEF4,SDEF4,DSKL0 + .long SMITS_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Smits_h + .word 2,9,9,0 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;SMITS + + LWWWWWW scale610f_t,BV8,SHT7,DNK9,DEF9,SDEF4,DSKL0 + .long MOURN_F, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Mourn_h + .word 3,10,7,12 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;MOURNING + + LWWWWWW scale67f_t,BV6,SHT9,DNK6,DEF2,SDEF7,DSKL_2 + .long GROBIN_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Grobinson_h + .word 4,7,8,19 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;G. ROBINSON + + LWWWWWW scale70f_t,BV6,SHT7,DNK8,DEF10,SDEF4,DSKL2 + .long ewing_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Ewing_h + .word 2,9,8,12 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;EWING + + LWWWWWW scale65t_t,BV9,SHT7,DNK2,DEF2,SDEF7,DSKL2 + .long STARKS_F, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Starks_h + .word 8,5,8,9 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;STARKS + + LWWWWWW scale67t_t,BV10,SHT8,DNK8,DEF7,SDEF8,DSKL2 + .long A_HARD_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,AHard_h + .word 8,5,10,8 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;A. HARDAWAY + + LWWWWWW scale610_t,BV6,SHT5,DNK6,DEF8,SDEF4,DSKL5 + .long GrantG_F, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,HCGrant_h + .word 4,7,4,3 + .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P ;H. GRANT + + LWWWWWW scale66_t,BV8,SHT7,DNK8,DEF3,SDEF5,DSKL_9 + .long STACK_F, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Stackhouse_h + .word 5,4,7,0 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;STACKHOUSE + + LWWWWWW scale610_t,BV8,SHT6,DNK6,DEF7,SDEF6,DSKL3 + .long C_ROB_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,CRobinson_h + .word 2,7,8,14 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;C. ROBINSON + + LWWWWWW scale71_t,BV8,SHT8,DNK6,DEF10,SDEF5,DSKL_3 + .long Robins_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,DRobinson_h + .word 4,9,6,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;D. ROBINSON + + LWWWWWW scale68_t,BV8,SHT8,DNK7,DEF5,SDEF4,DSKL_3 + .long Elliot_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Elliot_h + .word 2,4,8,7 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;S. ELLIOT + + LWWWWWW scale610_t,BV8,SHT8,DNK10,DEF9,SDEF6,DSKL0 + .long kemp_f, UN_SEAP_P,UN_SEAS_P, TR_SEAP_P,TR_SEAS_P,Kemp_h + .word 3,7,7,15 + .long SW_SEAP_P,SW_SEAS_P,VP_SEAP_P,VP_SEAS_P ;KEMP + + LWWWWWW scale69ef_t,BV7,SHT8,DNK8,DEF5,SDEF8,DSKL4 + .long kmalone_f, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,KMalone_h + .word 6,10,7,5 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;K. MALONE + + LWWWWWW scale610f_t,BV8,SHT8,DNK8,DEF4,SDEF6,DSKL_4 + .long WEBBER_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Webber_h + .word 6,8,7,6 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;WEBBER + + LWWWWWW scale77ef_t,BV4,SHT5,DNK2,DEF9,SDEF3,DSKL_5 + .long MURESA_F, UN_WASP_P,UN_WASS_P, TR_WASP_P,TR_WASS_P,Muresan_h + .word 1,9,4,10 + .long SW_WASP_P,SW_WASS_P,VP_WASP_P,VP_WASS_P ;MURESAN + +;New Superstar special guests removed from teams + LWWWWWW scale68_t,BV7,SHT7,DNK5,DEF5,SDEF5,DSKL_11 + .long MCCLOU_F, UN_DALP_P,UN_DALS_P, TR_DALP_P,TR_DALS_P,McCloud_h + .word 4,5,2,11 + .long SW_DALP_P,SW_DALS_P,VP_DALP_P,VP_DALS_P ;G. MCCLOUD + + LWWWWWW scale610ef_t,BV4,SHT6,DNK2,DEF2,SDEF4,DSKL1 + .long TMILLS_F, UN_DETP_P,UN_DETS_P, TR_DETP_P,TR_DETS_P,Tmills_h + .word 5,6,8,19 + .long SW_DETP_P,SW_DETS_P,VP_DETP_P,VP_DETS_P ;T. MILLS + + LWWWWWW scale63t_t,BV6,SHT6,DNK1,DEF1,SDEF7,DSKL1 + .long smith_f, UN_HOUP_P,UN_HOUS_P, TR_HOUP_P,TR_HOUS_P,Smith_h + .word 7,4,4,19 + .long SW_HOUP_P,SW_HOUS_P,VP_HOUP_P,VP_HOUS_P ;K. SMITH + + LWWWWWW scale610_t,BV7,SHT5,DNK5,DEF7,SDEF7,DSKL0 + .long MCKEE_F, UN_INDP_P,UN_INDS_P, TR_INDP_P,TR_INDS_P,Mckee_h + .word 6,5,3,10 + .long SW_INDP_P,SW_INDS_P,VP_INDP_P,VP_INDS_P ;D. MCKEE + + LWWWWWW scale64_t,BV6,SHT8,DNK2,DEF4,SDEF2,DSKL_8 + .long Chapman_f, UN_MIAP_P,UN_MIAS_P, TR_MIAP_P,TR_MIAS_P,Chapman_h + .word 6,3,9,1 + .long SW_MIAP_P,SW_MIAS_P,VP_MIAP_P,VP_MIAS_P ;R. CHAPMAN + + LWWWWWW scale70f_t,BV3,SHT4,DNK4,DEF7,SDEF3,DSKL0 + .long Benja_f, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Benjamin_h + .word 1,9,1,13 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;B. BENJAMIN + + LWWWWWW scale61f_t,BV6,SHT6,DNK0,DEF1,SDEF6,DSKL_2 + .long DOUGLA_F, UN_MILP_P,UN_MILS_P, TR_MILP_P,TR_MILS_P,Douglas_h + .word 6,3,3,18 + .long SW_MILP_P,SW_MILS_P,VP_MILP_P,VP_MILS_P ;S. DOUGLAS + + LWWWWWW scale57_t,BV10,SHT5,DNK9,DEF0,SDEF7,DSKL_8 + .long Webb_f, UN_MINP_P,UN_MINS_P, TR_MINP_P,TR_MINS_P,Webb_h + .word 6,0,5,9 + .long SW_MINP_P,SW_MINS_P,VP_MINP_P,VP_MINS_P ;S. WEBB + + LWWWWWW scale69f_t,BV6,SHT7,DNK6,DEF6,SDEF7,DSKL0 + .long GILLIA_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,Gilliam_h + .word 4,8,2,3 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;A. GILLIAM + + LWWWWWW scale63_t,BV7,SHT6,DNK1,DEF1,SDEF8,DSKL0 + .long KEDWAR_F, UN_NEJP_P,UN_NEJS_P, TR_NEJP_P,TR_NEJS_P,KEdwards_h + .word 3,2,3,9 + .long SW_NEJP_P,SW_NEJS_P,VP_NEJP_P,VP_NEJS_P ;K. EDWARDS + + LWWWWWW scale69f_t,BV5,SHT5,DNK7,DEF2,SDEF5,DSKL2 + .long Oakley_f, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,Oakley_h + .word 4,8,2,19 + .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P ;C. OAKLEY + + LWWWWWW scale61_t,BV8,SHT7,DNK1,DEF1,SDEF4,DSKL_9 + .long Ruffin_f, UN_PHLP_P,UN_PHLS_P, TR_PHLP_P,TR_PHLS_P,Ruffin_h + .word 7,1,4,14 + .long SW_PHLP_P,SW_PHLS_P,VP_PHLP_P,VP_PHLS_P ;T. RUFFIN + + LWWWWWW scale66_t,BV8,SHT7,DNK4,DEF5,SDEF8,DSKL_10 + .long WPERS_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Wperson_h + .word 4,5,9,20 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;W. PERSON + + LWWWWWW scale67_t,BV9,SHT7,DNK9,DEF2,SDEF7,DSKL_8 + .long FINLEY_F, UN_PHXP_P,UN_PHXS_P, TR_PHXP_P,TR_PHXS_P,Finley_h + .word 4,2,9,19 + .long SW_PHXP_P,SW_PHXS_P,VP_PHXP_P,VP_PHXS_P ;M. FINLEY + + LWWWWWW scale68f_t,BV6,SHT4,DNK6,DEF5,SDEF4,DSKL3 + .long BWILLI_F, UN_PORP_P,UN_PORS_P, TR_PORP_P,TR_PORS_P,Bwilliams_h + .word 4,5,4,19 + .long SW_PORP_P,SW_PORS_P,VP_PORP_P,VP_PORS_P ;B. WILLIAMS + + LWWWWWW scale68f_t,BV6,SHT6,DNK4,DEF4,SDEF4,DSKL_10 + .long Person_f, UN_SANP_P,UN_SANS_P, TR_SANP_P,TR_SANS_P,Person_h + .word 2,6,7,5 + .long SW_SANP_P,SW_SANS_P,VP_SANP_P,VP_SANS_P ;C. PERSON + + LWWWWWW scale64f_t,BV6,SHT6,DNK1,DEF6,SDEF9,DSKL_6 + .long Robertsnf, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Robertson_h + .word 7,4,8,19 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;A. ROBERTSON + + LWWWWWW scale69ef_t,BV4,SHT5,DNK2,DEF9,SDEF4,DSKL_6 + .long OMILLER_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,OMiller_h + .word 4,8,2,14 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;O. MILLER + + LWWWWWW scale67_t,BV4,SHT7,DNK5,DEF3,SDEF3,DSKL_6 + .long MURRAY_F, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,TMurray_h + .word 2,5,7,8 + .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P ;T. MURRAY + + LWWWWWW scale68_t,BV6,SHT5,DNK6,DEF5,SDEF5,DSKL4 + .long BENOIT_F, UN_UTAP_P,UN_UTAS_P, TR_UTAP_P,TR_UTAS_P,Benoit_h + .word 5,5,4,12 + .long SW_UTAP_P,SW_UTAS_P,VP_UTAP_P,VP_UTAS_P ;D. BENOIT + + LWWWWWW scale64f_t,BV7,SHT8,DNK1,DEF3,SDEF4,DSKL0 + .long Scott_f, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,Scott_h + .word 4,4,9,7 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;B. SCOTT + + LWWWWWW scale61_t,BV8,SHT6,DNK1,DEF1,SDEF9,DSKL_2 + .long EMURD_F, UN_VANP_P,UN_VANS_P, TR_VANP_P,TR_VANS_P,EMurdock_h + .word 6,2,5,17 + .long SW_VANP_P,SW_VANS_P,VP_VANP_P,VP_VANS_P ;E. MURDOCK + + +;These are superstar players (Or leftover art) that can be picked with name +;and pin # - allowing them to be 'traded' from team to team +;Make sure these guys work - get their birthdays for pin #'s +; LWWWWWW scale68_t,BV8,SHT11,DNK10,DEF5,SDEF9,DSKL5 ;Can shatter +; .long NFL55_p, UN_CHIP_P,UN_CHIS_P, TR_CHIP_P,TR_CHIS_P,Pippen_h +; .word 7,3,5,0 +; .long SW_CHIP_P,SW_CHIS_P,VP_CHIP_P,VP_CHIS_P +; LWWWWWW scale69_t,BV6,SHT5,DNK6,DEF8,SDEF5,DSKL0 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Henderso_h +; .word 4,4,3,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale62f_t,BV6,SHT5,DNK5,DEF4,SDEF6,DSKL_6 +; .long NFL55_p, UN_GLDP_P,UN_GLDS_P, TR_GLDP_P,TR_GLDS_P,Coles_h +; .word 5,5,5,0 +; .long SW_GLDP_P,SW_GLDS_P,VP_GLDP_P,VP_GLDS_P +; LWWWWWW scale610_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL_10 +; .long NFL55_p, UN_ATLP_P,UN_ATLS_P, TR_ATLP_P,TR_ATLS_P,Rooks_h +; .word 1,8,4,0 +; .long SW_ATLP_P,SW_ATLS_P,VP_ATLP_P,VP_ATLS_P +; LWWWWWW scale68_t,BV7,SHT6,DNK5,DEF6,SDEF4,DSKL_6 +; .long NFL55_p, UN_NEYP_P,UN_NEYS_P, TR_NEYP_P,TR_NEYS_P,WAnderson_h +; .word 5,2,7,0 +; .long SW_NEYP_P,SW_NEYS_P,VP_NEYP_P,VP_NEYS_P +; LWWWWWW scale68f_t,BV5,SHT5,DNK6,DEF6,SDEF3,DSKL0 +; .long NFL55_p, UN_ORLP_P,UN_ORLS_P, TR_ORLP_P,TR_ORLS_P,Gattison_h +; .word 4,6,5,0 +; .long SW_ORLP_P,SW_ORLS_P,VP_ORLP_P,VP_ORLS_P +; LWWWWWW scale66_t,BV8,SHT7,DNK5,DEF7,SDEF4,DSKL1 +; .long NFL55_p, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,Ejones_h +; .word 8,4,2,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P +; LWWWWWW scale611_t,BV5,SHT4,DNK7,DEF7,SDEF4,DSKL_9 +; .long NFL55_p, UN_TORP_P,UN_TORS_P, TR_TORP_P,TR_TORS_P,Wright_h +; .word 4,5,4,0 +; .long SW_TORP_P,SW_TORS_P,VP_TORP_P,VP_TORS_P +; LWWWWWW scale69f_t,BV7,SHT8,DNK1,DEF5,SDEF8,DSKL1 +; .long MJohnson_f, UN_LALP_P,UN_LALS_P, TR_LALP_P,TR_LALS_P,MJohnson_h +; .word 9,7,9,0 +; .long SW_LALP_P,SW_LALS_P,VP_LALP_P,VP_LALS_P + +**************************************************************** + + .end diff --git a/SRC/PLYRAT2.ASM b/SRC/PLYRAT2.ASM new file mode 100644 index 0000000..f793242 --- /dev/null +++ b/SRC/PLYRAT2.ASM @@ -0,0 +1,668 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat2.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "imgtbl.glo" + .include "plyrhd.glo" + .asg 0,SEQT + .include "plyr.equ" + .include "game.equ" ;Display proc equates + .include "imgtblp.glo" + .include "plyrhd6a.tbl" + .include "plyrhd6a.glo" + + .def OFFNBA + +;sounds external + + +;symbols externally defined + + .ref team1,team2,OFFNBA_P + .ref special_heads,spechds_t + .ref ATL_t,name_sort,player_names + .ref tm1set,tm2set + .ref attrib1_obj,attrib2_obj + .ref attrib3_obj,attrib4_obj + + .ref BV,BV1,BV2,BV3,BV4,BV5,BV6,BV7,BV8,BV9,BV10 + .ref SHT0,SHT1,SHT2,SHT3,SHT4,SHT5,SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + .ref DNK0,DNK1,DNK2,DNK3,DNK4,DNK5,DNK6,DNK7,DNK8,DNK9,DNK10 + .ref DEF0,DEF1,DEF2,DEF3,DEF4,DEF5,DEF6,DEF7,DEF8,DEF9,DEF10 + .ref SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5,SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + + .ref scale57_t,scale57et_t,scale57t_t,scale57f_t,scale57ef_t + .ref scale58_t,scale58et_t,scale58t_t,scale58f_t,scale58ef_t + .ref scale59_t,scale59et_t,scale59t_t,scale59f_t,scale59ef_t + .ref scale510_t,scale510et_t,scale510t_t,scale510f_t,scale510ef_t + .ref scale511_t,scale511et_t,scale511t_t,scale511f_t,scale511ef_t + .ref scale60_t,scale60et_t,scale60t_t,scale60f_t,scale60ef_t + .ref scale61_t,scale61et_t,scale61t_t,scale61f_t,scale61ef_t + .ref scale62_t,scale62et_t,scale62t_t,scale62f_t,scale62ef_t + .ref scale63_t,scale63et_t,scale63t_t,scale63f_t,scale63ef_t + .ref scale64_t,scale64et_t,scale64t_t,scale64f_t,scale64ef_t + .ref scale65_t,scale65et_t,scale65t_t,scale65f_t,scale65ef_t + .ref scale66_t,scale66et_t,scale66t_t,scale66f_t,scale66ef_t + .ref scale67_t,scale67et_t,scale67t_t,scale67f_t,scale67ef_t + .ref scale68_t,scale68et_t,scale68t_t,scale68f_t,scale68ef_t + .ref scale69_t,scale69et_t,scale69t_t,scale69f_t,scale69ef_t + .ref scale610_t,scale610et_t,scale610t_t,scale610f_t,scale610ef_t + .ref scale611_t,scale611et_t,scale611t_t,scale611f_t,scale611ef_t + .ref scale70_t,scale70et_t,scale70t_t,scale70f_t,scale70ef_t + .ref scale71_t,scale71et_t,scale71t_t,scale71f_t,scale71ef_t + .ref scale72_t,scale72et_t,scale72t_t,scale72f_t,scale72ef_t + .ref scale73_t,scale73et_t,scale73t_t,scale73f_t,scale73ef_t + .ref scale74_t,scale74et_t,scale74t_t,scale74f_t,scale74ef_t + .ref scale75_t,scale75et_t,scale75t_t,scale75f_t,scale75ef_t + .ref scale76_t,scale76et_t,scale76t_t,scale76f_t,scale76ef_t + .ref team_city_tbl + .ref Brown_h + .ref player1_data,player2_data,player3_data,player4_data + .ref ply_city_tbl + .ref plr_heads_small + .ref body_scale_table + .ref plr_flesh_pal_tbl +;symbols defined in this file + + + .def Laetner_h + .def Hawkins_h + .def LJohnson_h + .def Divac_h + .def KMalone_h + .def Stockton_h + .def Ewing_h + .def Seikaly_h + .def Miller_h + .def Mutumbo_h + .def Oakley_h + .def Olajuwon_h + .def Rice_h + .def DRobinson_h + .def Schrempf_h + .def Smith_h + .def Tisdale_h + .def Kemp_h + .def Pippen_h + .def Gill_h + .def Mullin_h + .def Person_h + .def Augmon_h + .def Benjamin_h + .def Coleman_h + .def Drexler_h + .def Elliot_h + .def Hardaway_h + .def HCGrant_h + .def Hornacek_h + .def Manning_h + + .ref created_plyr1_attrib_tables + .ref created_plyr2_attrib_tables + .ref created_plyr3_attrib_tables + .ref created_plyr4_attrib_tables + +;uninitialized ram definitions + + .ref PLYRAT_TBL_SIZE + +;equates for this file + + .text + +;----------------------------------------------------------------------------- +; This routine is called to setup the players attribute table if this +; player is playing with a CREATED CHARACTER, the values are read from the +; players record. +; +; called from SELECT.ASM ('player_cursor' process) +; +; INPUT: a8 = player number +; a13 = *Plyr process +; +; RETURNS: carry clear, if created player ram table setup +; a10 - ptr. to attribute ram area +;----------------------------------------------------------------------------- + SUBR setup_created_plyr_attrib_tbl + + PUSH a7 + move a8,a14 + sll 5,a14 + addi plyr_data_ptr_table,a14,L + move *a14,a0,L + + move *a0(PR_CREATED_PLYR),a14 ;player 'created' ? + jrle mpat_9 ;br=nope... + +;get addr. of players attribute table array + move a8,a1 + sll 5,a1 + addi created_plyr_attrib_ptr_table,a1 + move *a1,a1,L ;ptr. to 'created' plyr. attrib. tbl + +;figure out SCALE for players body + + move *a0(PR_HEIGHT_PTS),a2 ;0-10 (which LINE in table) + sll 5,a2 + addi body_scale_table,a2,L + move *a2,a2,L ;get scale table ptr. + move *a0(PR_WEIGHT_PTS),a14 ;0-10 (which LINE in table) + srl 1,a14 ;divide by 2 (0,2,4,6,8 valid) + sll 5,a14 + add a14,a2 + move *a2,a3,L ;get scale factor table ptr. + move a3,*a1(PAT_SCL_p),L ;1st element is scale ptr +;speed + move *a0(PR_SPEED_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi speed_table,a2,L + move *a2,a2 + move a2,*a1(PAT_BVEL) ;write data to array + +;shot % + move *a0(PR_SHOOT_PTS),a2 ;0-10 (BV?) + sll 4,a2 ;get offset for table + addi shot_percent_table,a2,L + move *a2,a2 + move a2,*a1(PAT_SHOTSKILL) ;write data to array + +;dunk + move *a0(PR_DUNKS_PTS),a2 ;0-10 (DNK?) + sll 4,a2 ;get offset for table + addi dunk_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DUNKSKILL) ;write data to array + +;block + move *a0(PR_BLOCKS_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi block_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_DEFSKILL) ;write data to array + +;steal + move *a0(PR_STEAL_PTS),a2 ;0-10 + sll 4,a2 ;get offset for table + addi steal_ability_table,a2,L + move *a2,a2 + move a2,*a1(PAT_STLSKILL) ;write data to array + +;drone skill + movk 3,a2 + move a2,*a1(PAT_SKILL) ;write data to array + +;body flesh palette ptr. + + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_flesh_pal_tbl,a2,L + move *a2,a2,L + move a2,*a1(PAT_PALF_p),L + + move *a0(PR_UNIFORM_NBR),a7 + andni 40h,a7 ;clr HOME team bit + + cmpi 5,a7 ;default team pal. ? + jrne #nrm ;yes + move @team1,a7 ;assume team 1 + move a8,a14 + srl 1,a14 + jrz #tm1 + move @team2,a7 +#tm1 + sll 5,a7 + addi team_city_tbl,a7 + move *a7,a7,L + jruc #deflt +#nrm + sll 5,a7 + addi ply_city_tbl,a7,L + move *a7,a7,L +#deflt + +;body uniform 1 palette ptr. + move *a7(PAT_PALU_p),a2,L + move a2,*a1(PAT_PALU_p),L + +;body uniform 2 palette ptr. + move *a7(PAT_PALU2_p),a2,L + move a2,*a1(PAT_PALU2_p),L + +;body trim 1 palette ptr. + move *a7(PAT_PALT_p),a2,L + move a2,*a1(PAT_PALT_p),L + +;body trim 2 palette ptr. + move *a7(PAT_PALT2_p),a2,L + move a2,*a1(PAT_PALT2_p),L + +;head_t ptr. + move *a0(PR_HEAD_NBR),a2 + sll 5,a2 + addi plr_heads_small,a2,L + move *a2,a2,L ;HEAD frame to show + move a2,*a1(PAT_HEADT_p),L + +;passing + movk 6,a2 + move a2,*a1(PAT_PASS),W ;write data to array + +;power + move *a0(PR_POWER_PTS),a2 ;0-10 + move a2,*a1(PAT_POWER),W ;write data to array + +;clutch + clr a2 + move a2,*a1(PAT_CLUTCH),W ;write data to array + +;DJT Start +;hotspot + move *a0(PR_PIN_NBR1),a2 + move *a0(PR_PIN_NBR2),a14 + add a14,a2 + move *a0(PR_PIN_NBR3),a14 + add a14,a2 + move *a0(PR_PIN_NBR4),a14 + add a14,a2 + move *a0(PR_WON),a14 + add a14,a2 + movk 1010b,a14 + xor a14,a2 + .ref NUM_HOTSPOTS + movi NUM_HOTSPOTS,a14 + modu a14,a2 + move a2,*a1(PAT_HOTSPOT),W ;write data to array + +;DJT End +;jersey swipe pal1 + move *a7(PAT_PALSW_p),a2,L + move a2,*a1(PAT_PALSW_p),L ;write data to array + +;jersey swipe pal2 + + move *a7(PAT_PALSW2_p),a2,L + move a2,*a1(PAT_PALSW2_p),L ;write data to array + +;vertical swipe pal1 + + move *a7(PAT_PALVP_p),a2,L + move a2,*a1(PAT_PALVP_p),L ;write data to array + +;vertical swipe pal2 + + move *a7(PAT_PALVP2_p),a2,L + move a2,*a1(PAT_PALVP2_p),L ;write data to array + +;save table ptr. + move a1,*a13(plyr_attrib_p),L + move a1,a10 + clrc + jruc mpat_9a + +mpat_9 setc +mpat_9a PULL a7 + rets + +#******************************* +* Set * to player attribute table +* A8=Plyr # +* A13=*Plyr process +* >A10=*Attribute for uniform (ignores spechds) +* Trashes scratch + + SUBR plyr_getattributes + + callr setup_created_plyr_attrib_tbl + jrnc #norm3 ;br=create plyr. (built ram table) + + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 ;get team nbr. +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 ;get team nbr. again + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + .if HEADCK + .ref debug_plyr_num + move @debug_plyr_num,a10 + move a10,a1 + inc a1 + move a1,@debug_plyr_num + .ref show_name + CREATE0 show_name + .endif + + + + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + move a1,a10 + +;if player is playing with special initials use those attributes + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 ;a0=head nbr of special head + jrn #norm2 + +#ncrtd + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 move a1,*a13(plyr_attrib_p),L +#norm3 rets + + + +;a_tbl .long attrib1_obj+20h,attrib2_obj+20h +; .long attrib3_obj+20h,attrib4_obj+20h + +a1_tbl .long team1,team1 + .long team2,team2 + .long team1,team2 + +a2_tbl .long tm1set,tm1set + .long tm2set,tm2set + .long tm1set,tm2set + +a3_tbl .long 0,32 + .long 0,32 + .long 0,32 + + +#******************************** +* A8=plyr # 0-3 +* >A0=*plyr head img + + SUBR getwindowhead + + move a8,a0 + sll 5,a0 + addi plyr_data_ptr_table,a0 + move *a0,a0,L ;get player data pointer + move *a0(PR_CREATED_PLYR),a14 + jrle #nocrt + move *a0(PR_HEAD_NBR),a0 + sll 5,a0 + addi plr_heads_small,a0,L + move *a0,a0,L ;Created player HEAD + move *a0(5*32),a0,L ;get 5th head + jruc #exit +#nocrt + move a8,a0 + sll 5,a0 + movi a1_tbl,a1 ;team1 or team2 + add a0,a1 + move *a1,a2,L + movi a2_tbl,a1 ;tm1set or tm2set + add a0,a1 + move *a1,a3,L + movi a3_tbl,a1 ;0 or 32 + add a0,a1 + move *a1,a4,L + + movi player_names,a10 + move *a2,a0 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 + dec a0 + jrnz #lp3 +;DJT End +#out3 + move *a2,a0 + sll 4,a0 + add a3,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + add a4,a10 + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + +;addi 320 for each name + movi ATL_t,a1 +#lp5 cmpi 0,a10 + jrz #out + addi PLYRAT_TBL_SIZE,a1 + dec a10 + jruc #lp5 + +#out + + move a8,a0 + sll 4,a0 ;*16 + addi special_heads,a0 + move *a0,a0 + jrn #norm2 + movi PAT_SIZE,a1 + mpyu a0,a1 + addi spechds_t,a1 +#norm2 + addi 272+16,a1 ;272 + move *a1,a0,L + move *a0(5*32),a0,L +#exit + rets + +;================== +; TABLES +;================== + +; +; This table contains the HEIGHT/WEIGHT scale table pointers +; +; 1st:height & skinny, 2nd:height & normal, 3rd:height & chubby +; +;scale_factor_table +; .long scale57_t,scale57_t,scale60_t +; .long scale60_t,scale61_t,scale61f_t +; .long scale62_t,scale62_t,scale62t_t +; .long scale65_t,scale65t_t,scale65f_t +; .long scale66_t,scale66t_t,scale66f_t +; .long scale69_t,scale69t_t,scale69f_t +; .long scale610_t,scale610t_t,scale610f_t +; .long scale70_t,scale70t_t,scale70f_t +; .long scale71_t,scale72f_t,scale72f_t +; .long scale74_t,scale74_t,scale72f_t +; .long scale76et_t,scale74_t,scale74f_t + + +; +; Just a table of PLAYERS data pointers +; +plyr_data_ptr_table + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +; +; This table contains the addresses of each players attribute table array +; +; These arrays are used only if the player is playing with a character +; which was CREATED +; +created_plyr_attrib_ptr_table + .long created_plyr1_attrib_tables + .long created_plyr2_attrib_tables + .long created_plyr3_attrib_tables + .long created_plyr4_attrib_tables + +; +; Plyr attributes defined in plyrat.asm +; +speed_table + .word BV,BV1,BV2,BV3,BV4,BV5 + .word BV6,BV7,BV8,BV9,BV10 + +shot_percent_table + .word SHT0,SHT1,SHT2,SHT3,SHT4,SHT5 + .word SHT6,SHT7,SHT8,SHT9,SHT10,SHT11 + +dunk_ability_table + .word DNK0,DNK1,DNK2,DNK3,DNK4,DNK5 + .word DNK6,DNK7,DNK8,DNK9,DNK10 + +block_ability_table + .word DEF0,DEF1,DEF2,DEF3,DEF4,DEF5 + .word DEF6,DEF7,DEF8,DEF9,DEF10 + +steal_ability_table + .word SDEF0,SDEF1,SDEF2,SDEF3,SDEF4,SDEF5 + .word SDEF6,SDEF7,SDEF8,SDEF9,SDEF10 + +;in makeplr.asm +; +; This is the table I use which converts the HEIGHT_PTS and WEIGHT_PTS +; to an actual in-game SCALE table ptr. +; +; .long scale57_t +; .long scale61_t +; .long scale62_t +; .long scale65_t +; .long scale66_t +; .long scale69_t +; .long scale610_t +; .long scale70_t +; .long scale71_t +; .long scale74_t +; .long scale76et_t + + + +Laetner_h + HDMAC laet1 +Hawkins_h + HDMAC hawkins1 +LJohnson_h + HDMAC johnson1 +Divac_h + HDMAC divac1 +KMalone_h + HDMAC kmalone1 +Stockton_h + HDMAC stock1 +Ewing_h + HDMAC ewing1 +Seikaly_h + HDMAC shiek1 +Miller_h + HDMAC Miller1 +Mutumbo_h + HDMAC Mutumbo1 +Oakley_h + HDMAC Oakley1 +Olajuwon_h + HDMAC Hakeem1 +Rice_h + HDMAC Rice1 +DRobinson_h + HDMAC Robins1 +Schrempf_h + HDMAC schremp1 +Smith_h + HDMAC smith1 +Tisdale_h + HDMAC tisdale1 +Kemp_h + HDMAC kemp1 +Pippen_h + HDMAC pippin1 +Gill_h + HDMAC gill1 +Mullin_h + HDMAC mullin1 +Person_h + HDMAC Person1 +Augmon_h + HDMAC Augmon1 +Benjamin_h + HDMAC Benja1 +Coleman_h + HDMAC Cole1 +Drexler_h + HDMAC Drex1 +Elliot_h + HDMAC Elliot1 +Hardaway_h + HDMAC Hrdaway1 +HCGrant_h + HDMAC GrantG1 +Hornacek_h + HDMAC Horna1 +Manning_h + HDMAC Manning1 + + .end diff --git a/SRC/PLYRAT3.ASM b/SRC/PLYRAT3.ASM new file mode 100644 index 0000000..9e3e304 --- /dev/null +++ b/SRC/PLYRAT3.ASM @@ -0,0 +1,556 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 11/20/92 +* +* Modified: Shawn Liptak, 12/?/92 -Split from plyrat.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 16:20 +************************************************************** + .file "plyrat3.asm" + .title "basketball player code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "macros.hdr" ;Macros + .include "game.equ" + .include "macros.hdr" ;Macros + .include "plyrhd5.glo" +;; .include "plyrhd4.tbl" + .include "plyrhd2.tbl" + .include "plyrhd.glo" + .include "plyrhd6.glo" + + + .def gug1,BEdwrd1 + +; .def lighten1 +; .def lighten2 +; .def lighten3 +; .def lighten4 +; .def lighten5 +; .def lighten6 +; .def lighten7 + + .def DEllis_h + .def sd_h +; .def RA_H + .def Blaylock_h + .def Ssmith_h + .def Knorman_h +; .def Henderso_h + .def Barros_h + .def Montross_h + .def Radja_h + .def Curry_h + .def Zidek_h + .def Kerr_h + .def Thill_h + .def Cmills_h + .def Phills_h + .def Kidd_h + .def Pjones_h + .def Rauf_h + .def Pack_h + .def Mcdyes_h + .def Ghill_h + .def Tmills_h + .def Thorpe_h + .def Sprewell_h + .def Jsmith_h + .def Cassel_h + .def Ddavis_h + .def Mckee_h + .def Vaught_h + .def Rrogers_h + .def Lmurray_h + .def Richardson_h + .def Bbarry_h + .def Vanexel_h + .def Ceballos_h + .def Ejones_h + .def Bowens_h + .def Grobinson_h + .def EMurdock_h + .def Respert_h +; .def Rooks_h + .def Garnett_h + .def Gilliam_h + .def Obannon_h + .def Dscott_h + .def Wright_h + .def Stackhouse_h + .def Wperson_h + .def Finley_h + .def Strickland_h + .def Sabonis_h + .def Bwilliams_h + .def Childress_h + .def Wwilliams_h + .def Bgrant_h + .def Marciulonis_h + .def Ajohnson_h + .def Sford_h + .def Crogers_h + .def Stoudamire_h + .def Anthony_h +; .def Gattison_h + .def Breeves_h + .def Jhoward_h + .def McCloud_h + .def Houston_h + .def Muresan_h + .def KEdwards_h + .def Fox_h + .def Ferry_h + .def Longley_h + .def MJackson_h + .def Danilovic_h + .def OMiller_h + .def Delnegro_h + .def Douglas_h + .def WAnderson_h + .def TMurray_h + .def Koncak_h + .def Rose_h + .def Brandon_h +; .def Coles_h + .def DHarper_h + .def Edney_h + .def VMaxwell_h + .def Cow_h + .def Alien_h + .def Mel_h + .def Mik_h + .def Joe_h + .def Ang_h + .def Lis_h + .def Guido_h +;DJT Start + + .def marbry_h + .def allen_h + .def camb_h + .def damp_h + .def dun_h + .def ham_h + .def harr_h + .def iversn_h + .def kit_h + .def minr_h + .def rily_h + .def wal_h + +;DJT End + .def Ber_h + .def Chk_h + .def Fat_h + .def Fra_h + .def Gor_h + .def Gre_h + .def Old_h + .def Pig_h + .def Wiz_h + .def fifi_h + .def eric_h + .def madball_h + .def jackjr_h + .def kim_h + .def clown_h + .def ape_h + .def cheech_h + .def mar_h + .def bardo_h + .def willy_h + .def sean_h + .def jeff_h + .def dan_h + .def carym_h + .def eug_h + .def bud_h + .def jhey_h + .def jfer_h + .def jcartn + .def nicke_h + .def jroot_h + .def mxv_h + .def min_h + .def eddie_h + .def roan_h + .def turmel_h + .def jamie_h + .def patf_h + .def mperry_h + .def neilf_h + .def edboon_h + .def jtobias_h + .def oursler_h + .def marty_h + .def carlos_h + .def jason_h + .def quinn_h + .def jon_h + .def mike_h + .def dim_h + .def mdoc_h + .def amrich_h + .def jigget_h + .def north_h + .def mund_h +;DJT Start + .def heithb_h + .def mattb_h + .text + +heithb_h + HDMAC2 HEITH01 +mattb_h + HDMAC2 MATT01 +;DJT End +quinn_h + HDMAC QUINN01 +edboon_h + HDMAC BOON01 +jtobias_h + HDMAC TOBIAS01 +oursler_h + HDMAC OURSL01 +marty_h + HDMAC2 MARTY01 +carlos_h + HDMAC2 CARLOS01 +jason_h + HDMAC2 JASON01 +roan_h + HDMAC ROH01 +turmel_h + HDMAC TURMEL01 +jamie_h + HDMAC JAMIE01 +patf_h + HDMAC PAT01 +mperry_h + HDMAC PERRY01 +mdoc_h + HDMAC MDOC01 +neilf_h + HDMAC2 NEILF01 +fifi_h + HDMAC FIFI01 +jeff_h + HDMAC JEFF01 +dan_h + HDMAC DAN01 +carym_h + HDMAC2 CARY01 +eddie_h + HDMAC EDDIE01 +eug_h + HDMAC EUGG01 +bud_h + HDMAC BUD01 +jhey_h + HDMAC HEY01 +jfer_h + HDMAC JEN01 +jcartn + HDMAC JOHNC01 +nicke_h + HDMAC NIK01 +jroot_h + HDMAC ROOT01 +eric_h + HDMAC ERI01 +kim_h + HDMAC KIM01 +mar_h + HDMAC MAR01 +roh_h + HDMAC ROH01 +sean_h + HDMAC SEA01 +cheech_h + HDMAC CHEECH01 +clown_h + HDMAC CLOWN01 +madball_h + HDMAC MADBAL01 +ape_h + HDMAC VIKAPE01 +amrich_h + HDMAC AMRICH01 +bardo_h + HDMAC BARD01 +dim_h + HDMAC2 DIM01 +jackjr_h + HDMAC JACKJR01 +jigget_h + HDMAC2 JIGGET01 +jon_h + HDMAC JON01 +mike_h + HDMAC MIKE01 +min_h + HDMAC MIN01 +mund_h + HDMAC MUND01 +mxv_h + HDMAC MXV01 +north_h + HDMAC2 NORTH01 +willy_h + HDMAC WIL01 + +;college heads + +marbry_h + HDMAC MARBRY01 +allen_h + HDMAC ALLEN01 +camb_h + HDMAC CAMB01 +damp_h + HDMAC DAMP01 +dun_h + HDMAC DUN01 +ham_h + HDMAC HAM01 +harr_h + HDMAC HARR01 +iversn_h + HDMAC IVER01 +kit_h + HDMAC KIT01 +minr_h + HDMAC MINR01 +rily_h + HDMAC RILY01 +wal_h + HDMAC WAL01 + +;college heads + + +Ber_h + HDMAC BER01 +Chk_h + HDMAC CHK01 +Fat_h + HDMAC FAT01 +Fra_h + HDMAC FRA01 +Gor_h + HDMAC GOR01 +Gre_h + HDMAC GRE01 +Old_h + HDMAC OLD01 +Pig_h + HDMAC PIG01 +Wiz_h + HDMAC WIZ01 + +Cow_h + HDMAC COW01 +Alien_h + HDMAC ALIEN01 +Mel_h + HDMAC MEL_01 +Mik_h + HDMAC MIK_01 +Joe_h + HDMAC JOE_01 +Ang_h + HDMAC ANG_01 +Lis_h + HDMAC LIS_01 +Guido_h + HDMAC GUIDO01 + +sd_h + HDMAC SAL01 +;RA_H +; HDMAC RAIDEN01 +Blaylock_h + HDMAC BLAYLO1 +Ssmith_h + HDMAC SSMITH1 +Knorman_h + HDMAC KNORMA1 +;Henderso_h +; HDMAC HENDER1 +Barros_h + HDMAC BARROS1 +Montross_h + HDMAC MONTRO1 +Radja_h + HDMAC RADJA1 +Curry_h + HDMAC CURRY1 +Zidek_h + HDMAC ZIDEK1 +Kerr_h + HDMAC KERR1 +Thill_h + HDMAC THILL1 +Cmills_h + HDMAC CMILLS1 +Phills_h + HDMAC PHILLS1 +Kidd_h + HDMAC KIDD1 +Pjones_h + HDMAC PJONES1 +Rauf_h + HDMAC RAUF1 +Pack_h + HDMAC PACK1 +Mcdyes_h + HDMAC MCDYES1 +Ghill_h + HDMAC GHILL1 +Tmills_h + HDMAC TMILLS1 +Thorpe_h + HDMAC THORPE1 +Sprewell_h + HDMAC SPREWE1 +Jsmith_h + HDMAC JSMITH1 +Cassel_h + HDMAC CASSEL1 +Ddavis_h + HDMAC DDAVIS1 +Mckee_h + HDMAC MCKEE1 +Vaught_h + HDMAC VAUGHT1 +Rrogers_h + HDMAC RROGER1 +Lmurray_h + HDMAC LMURRA1 +Richardson_h + HDMAC PRICHA1 +Bbarry_h + HDMAC BBARRY1 +Vanexel_h + HDMAC EXEL1 +Ceballos_h + HDMAC CEBALL1 +Ejones_h + HDMAC EJONES1 +Bowens_h + HDMAC BOWENS1 +Grobinson_h + HDMAC GROBIN1 +EMurdock_h + HDMAC EMURD1 +Respert_h + HDMAC RESPER1 +;Rooks_h +; HDMAC ROOKS1 +Garnett_h + HDMAC GARNET1 +Gilliam_h + HDMAC GILLIA1 +Obannon_h + HDMAC OBANN1 +Dscott_h + HDMAC DSCOTT1 +Wright_h + HDMAC WRIGHT1 +Stackhouse_h + HDMAC STACK1 +Wperson_h + HDMAC WPERS1 +Finley_h + HDMAC FINLEY1 +Strickland_h + HDMAC STRICK1 +Sabonis_h + HDMAC SABONI1 +Bwilliams_h + HDMAC BWILLI1 +Childress_h + HDMAC CHILD1 +Wwilliams_h + HDMAC WWILLI1 +Bgrant_h + HDMAC BGRANT1 +Marciulonis_h + HDMAC MARCIU1 +Ajohnson_h + HDMAC AJOHN1 +Sford_h + HDMAC FORD1 +Crogers_h + HDMAC CROGER1 +Stoudamire_h + HDMAC STOUD1 +Anthony_h + HDMAC ANTHON1 +;Gattison_h +; HDMAC GATTIS1 +Breeves_h + HDMAC BREEV1 +Jhoward_h + HDMAC JHOW1 +McCloud_h + HDMAC MCCLOU1 +Houston_h + HDMAC HOUSTO1 +Muresan_h + HDMAC MURESA1 +KEdwards_h + HDMAC KEDWAR1 +Fox_h + HDMAC FOX1 +Ferry_h + HDMAC FERRY1 +Longley_h + HDMAC LONG1 +MJackson_h + HDMAC MJACKS1 +Danilovic_h + HDMAC DANILO1 +OMiller_h + HDMAC OMILLER1 +Delnegro_h + HDMAC DELNEG1 +Douglas_h + HDMAC DOUGLA1 +WAnderson_h + HDMAC WANDERS1 +TMurray_h + HDMAC MURRAY1 +Koncak_h + HDMAC KONCAK1 +Rose_h + HDMAC ROSE1 +Brandon_h + HDMAC BRAND1 +;Coles_h +; HDMAC COLES1 +DHarper_h + HDMAC DHARP1 +Edney_h + HDMAC EDNEY1 +VMaxwell_h + HDMAC VMAX1 +DEllis_h + HDMAC DELLIS1 + + .END + + diff --git a/SRC/PLYRDSEQ.ASM b/SRC/PLYRDSEQ.ASM new file mode 100644 index 0000000..f9619b4 --- /dev/null +++ b/SRC/PLYRDSEQ.ASM @@ -0,0 +1,2956 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrdseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" +; .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdseq.tbl" + .include "dunks.glo" + .include "dunks2.glo" + + .def zwilpal,PLYRFX2_P,PLYRFX3_P,XEWILPAL + .def PLYRFIX_P + .def NEWILFIX + .def NEWILPAL + + +;sounds external + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + .ref seq_offset + + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech +; .ref seq_shadow_trail +; .ref seq_alleyoop_speech + .ref goes_up_sp + .ref tks2_hoop_sp + .ref raises_up_sp + .ref sumrslts_sp + .ref shot_type + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! +; .ref PLYRFX2_P + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 +JAM_ALLEYOOP equ 5 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +#***************************************** +* Sequence - goto new line +* +* A13=*PxCTRL +* + SUBR seq_goto_line + + move *b4+,b4,L ;get line addr + rets + + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +#******************************** + + +#******************************** +alley_oop1_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 35,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 3,M1SPDU12,F + WLW 3,M1SPDU13,F + WLW 3,M1SPDU14,F + WLW 3,M1SPDU15,F + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,2 ;Ball centers in hoop at + WLW 2,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop2_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3FLDU1,F + WLW 39,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,4 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop3_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,75 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 29,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,4 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop4_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 +#1 +#5 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 39,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 2,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,3 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +alley_oop5_t +;(direction 4,8 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 41,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 + +; WLW 3,M3SPRDU1,F +; WLLW -1,seq_strtdunk,M3SPRDU9,70 +; WLW -1,seq_jam_speech,JAM_ALLEYOOP +; WLW 3,M3SPRDU2,F +; WLW 3,M3SPRDU3,F +; WLW 3,M3SPRDU4,F +; WLW 50,M3SPRDU5,F +; WLW 5,M3SPRDU5,F +; WLW 3,M3SPRDU6,F +; WLW 2,M3SPRDU7,F +; WLW 1,M3SPRDU8,F +; WLW -1,seq_slamball,3 +; WLW 11,M3SPRDU8,F +; WLW 500,M3SPRDU9,F +; WLW 3,M3SPRDU10,F +; WLW 3,M3SPRDU11,F +; WLW -1,seq_newdir,4*16 +; W0 + + +#******************************** +alley_oop6_t +;(direction 3 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 15,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,3 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#******************************** +alley_oop7_t +;(direction 2,6 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#5 +#2 +#3 +#4 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 + + +#******************************** +alley_oop8_t +;(direction 1 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,M5OHPB1,FF + WLLW -1,seq_strtdunk,M2DKDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,raises_up_sp + WLW 3,M5OHPB2,FF + WLW 3,W3SDTUK4,FF + WLW 3,W3SDTUK5,FF + WLW 36,W3SDTUK6,FF + WLW 3,W3SDTUK7,FF + WLW 3,W3SDTUK8,FF + WLW 3,W3SDTUK9,FF + WLW 3,W3SDTUK10,FF + WLW 3,W3SDTUK11,FF + WLW 3,W3SDTUK12,FF + WLW 3,W3SDTUK13,FF + WLW 3,W3SDTUK14,FF + WLW 3,W3SDTUK15,FF + WLW 2,M2DKDU12,FF + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,FF + WLW 500,M2DKDU14,FF + WLW 3,M2DKDU15,FF + WLW 3,M2DKDU16,FF + WLW -1,seq_newdir,1*16 + W0 + W0 + +#******************************** +alley_oop9_t +;(direction 5 only) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,74 + WLW -1,seq_jam_speech,JAM_ALLEYOOP + WLL -1,seq_snd,goes_up_sp + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 50,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#******************************** +alley_oop10_t +;(direction 1 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S1SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S1SETLA5,64-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F +;DJT Start + WLW 38-10,S1SETLA4,F +;DJT End + WLW 1,S1SETLA4,F + WL -1,seq_wait_for_pass + WLW 5,S1SETLA4,F + WLW 2,S1SETLA5,F + WLW 1,S1SETLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S1SETLA6,F + WLW 500,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#******************************** +alley_oop11_t +;(direction 2 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 2,S2HBHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S2HBHLA6,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F +;DJT Start + WLW 43-10,S2HBHLA4,F +;DJT End + WLW 1,S2HBHLA4,F + WL -1,seq_wait_for_pass + WLW 5,S2HBHLA4,F + WLW 2,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 500,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 3,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop12_t +;(direction 3 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S3BEHLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S3BETLA6,76-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S3BETLA2,F + WLW 3,S3BETLA3,F + WLW 3,S3BETLA4,F +;DJT Start + WLW 42-10,S3BETLA5,F +;DJT End + WLW 1,S3BETLA5,F + WL -1,seq_wait_for_pass + WLW 5,S3BETLA5,F + WLW 2,S3BETLA6,F + WLW 2,S3BETLA7,F + WLW 1,S3BETLA8,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 2,S3BETLA8,F + WLW 500,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#******************************** +alley_oop13_t +;(direction 4 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S4SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S4SETLA5,76-10 +;DJT End + WLL -1,seq_snd,goes_up_sp + WLW 3,S4SETLA2,F +;DJT Start + WLW 43-10,S4SETLA3,F +;DJT End + WLW 1,S4SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +alley_oop14_t +;(direction 5 only) + .word DFLGS|LAYUP_M + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 3,S5SETLA1,F +;DJT Start + WLLW -1,seq_strtdunk,S5SETLA5,65-10 +;DJT End + WLL -1,seq_snd,raises_up_sp + WLW 3,S5SETLA2,F +;DJT Start + WLW 38-10,S5SETLA3,F +;DJT End + WLW 1,S5SETLA3,F + WL -1,seq_wait_for_pass + WLW 5,S5SETLA3,F + WLW 2,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,seq_set_shot_type + WL -1,plyr_shoot + WLW 1,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_set_shot_type + move *a13(plyr_ownball),a14 + jrle ssst_1 + +; movk LAY_UP,a0 +;I did this cause it wouldn't assemble if included 'game.equ' + movk 5,a0 + move a0,@shot_type +ssst_1 + rets + + + +;This hold the player on the hold frame until he receives a pass +;,if one is on the way + +seq_wait_for_pass + move *a13(plyr_rcvpass),a14 + jrle hfp_1 ;br=player not recieving pass + subi 48+64,b4 +hfp_1 rets + + + +#******************************** +dunka_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + + +#1 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,73 ;Next frame begins elevation + WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_high_dnk_spch +; WLL -1,seq_shadow_trail,[7,15] ;rate,cnt til delete + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 41,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,16 ;Ball centers in hoop at + WLW 15,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F + WLW 3,M1SPDU20,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka2_t +;(medium range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,36 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 + +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,36 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 3,M1SPDU2,F + WLW 3,M1SPDU3,F + WLW 3,M1SPDU4,F + WLW 3,M1SPDU5,F + WLW 3,M1SPDU6,F + WLW 3,M1SPDU7,F + WLW 3,M1SPDU8,F + WLW 3,M1SPDU9,F + WLW 3,M1SPDU10,F + WLW 3,M1SPDU11,F + WLW 2,M1SPDU12,F + WLW 2,M1SPDU13,F + WLW 2,M1SPDU14,F + WLW 2,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,17 ;Ball centers in hoop at + WLW 16,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + +#******************************** +dunka3_t +;(short range) + .word DFLGS ;Flags for sequence + .long seq_stand ;Code for end of sequence + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU18,25 ;Next frame begins elevation + WLL -1,seq_goto_line,#1a + W0 +#2 + WLW 2,M1SPDU1,F + WLLW -1,seq_strtdunk,M1SPDU17,25 ;Next frame begins elevation +#1a WLW -1,seq_jam_speech,JAM_EASY ;Anncr excitement level + WL -1,seq_low_dnk_spch + WLW 2,M1SPDU2,F + WLW 1,M1SPDU3,F + WLW 2,M1SPDU4,F + WLW 1,M1SPDU5,F + WLW 2,M1SPDU6,F + WLW 1,M1SPDU7,F + WLW 2,M1SPDU8,F + WLW 1,M1SPDU9,F + WLW 1,M1SPDU10,F + WLW 1,M1SPDU11,F + WLW 1,M1SPDU12,F + WLW 1,M1SPDU13,F + WLW 1,M1SPDU14,F + WLW 1,M1SPDU15,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,M1SPDU16,F + WLW -1,seq_slamball,8 ;Ball centers in hoop at + WLW 6,M1SPDU16,F + WLW 500,M1SPDU17,F + WLW 3,M1SPDU18,F ;Lands on ground + WLW 3,M1SPDU19,F ;Lands on ground + WLW 3,M1SPDU20,F ;Lands on ground + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkb_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,70 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_high_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 3,M3TUKDU8,F + WLW 45,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,9 + WLW 2,M3TUKDU13,F + WLW 7,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,M3TUKDU1,F + WLLW -1,seq_strtdunk,M3TUKDU14,59 + WLW -1,seq_jam_speech,JAM_EASY + WL -1,seq_low_dnk_spch + WLW 3,M3TUKDU2,F + WLW 3,M3TUKDU3,F + WLW 3,M3TUKDU4,F + WLW 3,M3TUKDU5,F + WLW 3,M3TUKDU6,F + WLW 3,M3TUKDU7,F + WLW 34,M3TUKDU8,F + WLW 3,M3TUKDU9,F + WLW 3,M3TUKDU10,F + WLW 2,M3TUKDU11,F + WLW 1,M3TUKDU12,F + WLW 1,M3TUKDU13,F + WLWWW -1,seq_offset,4,0,0 + WLW -1,seq_slamball,8 + WLW 5,M3TUKDU13,F + WLW 3,M3TUKDU14,F + WLW 500,M3TUKDU15,F + WLW 3,M3TUKDU16,F + WLW 3,M3TUKDU17,F + WLW -1,seq_newdir,0*16 +#1 +#4 +#5 + W0 + +#******************************** +dunkb3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,85 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 55,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU8,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 3,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 43,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + +#******************************** +dunkc_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU7,42 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 4,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 4,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 2,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 9,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 4,M2DKDU15,F + WLW 4,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#2 + WLW 3,M2DKDU1,F + WLLW -1,seq_strtdunk,M2DKDU14,75 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,M2DKDU2,F + WLW 3,M2DKDU3,F + WLW 3,M2DKDU4,F + WLW 3,M2DKDU5,F + WLW 45,M2DKDU6,F + WLW 3,M2DKDU7,F + WLW 3,M2DKDU8,F + WLW 3,M2DKDU9,F + WLW 2,M2DKDU10,F + WLW 2,M2DKDU11,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#3 +#4 +#5 + W0 + + + +#******************************** +dunkd_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,74 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M3SPRDU2,F + WLW 3,M3SPRDU3,F + WLW 3,M3SPRDU4,F + WLW 57,M3SPRDU5,F + WLW 3,M3SPRDU6,F + WLW 3,M3SPRDU7,F + WLW 2,M3SPRDU8,F + WLW -1,seq_slamball,15 + WLW 11,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkd2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 2,M3SPRDU1,F + WLLW -1,seq_strtdunk,M3SPRDU9,24 + WLW -1,seq_jam_speech,JAM_MED + WLW 2,M3SPRDU1,F + WLW 2,M3SPRDU2,F + WLW 2,M3SPRDU3,F + WLW 2,M3SPRDU4,F + WLW 2,M3SPRDU5,F + WLW 2,M3SPRDU6,F + WLW 1,M3SPRDU7,F + WLW 1,M3SPRDU8,F + WLW -1,seq_slamball,9 + WLW 15,M3SPRDU8,F + WLW 500,M3SPRDU9,F + WLW 3,M3SPRDU10,F + WLW 3,M3SPRDU11,F + WLW -1,seq_newdir,4*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunke_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,27 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,M5REVDU2,F + WLW 2,M5REVDU3,F + WLW 4,M5REVDU4,F + WLW 2,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 1,M5REVDU7,F + WLW 1,M5REVDU8,F + WLW 1,M5REVDU9,F + WLW 1,M5REVDU10,F + WLW 1,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,13 + WLW 10,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + +#******************************** +dunke2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 +#5 + WLW 4,M5REVDU1,F + WLLW -1,seq_strtdunk,M5REVDU14,76 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 52,M5REVDU4,F + WLW 3,M5REVDU5,F + WLW 2,M5REVDU6,F + WLW 2,M5REVDU7,F + WLW 2,M5REVDU8,F + WLW 2,M5REVDU9,F + WLW 2,M5REVDU10,F + WLW 2,M5REVDU11,F + WLW 1,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#1 +#2 +#3 + W0 + + +#******************************** +dunkf_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1TUKDU1,F + WLLW -1,seq_strtdunk,S1TUKDU8,95 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S1TUKDU2,F + WLW 3,S1TUKDU3,F + WLW 73,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-9 + WLW 12,S1TUKDU4,F + WLWWW -1,seq_offset,0,0,-18 + WLW 2,S1TUKDU5,F + WLWWW -1,seq_offset,0,0,-10 + WLW 2,S1TUKDU6,F + WLW 1,S1TUKDU7,F + WLW -1,seq_slamball,18 + WLW 15,S1TUKDU7,F + WLW 500,S1TUKDU8,F + WLW 3,S1TUKDU9,F + WLW 3,S1TUKDU10,F + WLW 3,S1TUKDU11,F + WLW -1,seq_newdir,0*16 +#3 +#4 +#5 + W0 + + +#******************************** +dunkg_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,78 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 49,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 2,S3BKDU10,F + WLW 1,S3BKDU11,F + WLW 1,S3BKDU12,F + WLW -1,seq_slamball,8 + WLW 8,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkg2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,S3BKDU1,F + WLLW -1,seq_strtdunk,S3BKDU14,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,S3BKDU2,F + WLW 3,S3BKDU2,F + WLW 3,S3BKDU3,F + WLW 3,S3BKDU4,F + WLW 3,S3BKDU5,F + WLW 56,S3BKDU6,F + WLW 3,S3BKDU7,F + WLW 3,S3BKDU8,F + WLW 3,S3BKDU9,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU10,F + WLW 3,S3BKDU11,F + WLW 2,S3BKDU12,F + WLW -1,seq_slamball,11 + WLW 10,S3BKDU12,F + WLWWW -1,seq_offset,-8,0,0 + WLW 500,S3BKDU14,F + WLW 3,S3BKDU15,F + WLW 3,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + +#******************************** +dunkj_t +;(medium,far range, 8-10 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,87 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 58,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 3,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,10 + WLW 9,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkj2_t +;(medium range, 5-7 skill) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,67 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3SPRDU3,F + WLW 3,W3SPRDU4,F + WLW 3,W3SPRDU5,F + WLW 3,W3SPRDU6,F + WLW 3,W3SPRDU7,F + WLW 3,W3SPRDU8,F + WLW 38,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#5 + W0 + + +#******************************** +dunkk_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,50 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLL -1,seq_goto_line,#1a +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,58 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 2,W3SPNDU19,F + WLW 2,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,15 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + + +#******************************** +dunkk2_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,W3SPNDU14,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 +#3 +#4 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU19,84 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F +#1a WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU11,F + WLW 32,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 2,W3SPNDU16,F + WLW 2,W3SPNDU17,F + WLW 2,W3SPNDU18,F + WLW 1,W3SPNDU19,F + WLW 1,W3SPNDU20,F + WLW 1,W3SPNDU21,F + WLW -1,seq_slamball,13 + WLW 11,W3SPNDU21,F + WLW 500,W3SWDU10,F + WLW 3,W3SWDU11,F + WLW 3,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#5 + W0 + + +#******************************** +dunkl_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,86 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 67,W3SMDU5,F + WLW 3,W3SMDU6,F + WLW 3,W3SMDU7,F + WLW 1,W3SMDU8,F + WLWWW -1,seq_offset,0,0,18 + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkl2_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT +;DJT Start + .ref goes_flyg_sp + .ref helicptr_snd + WLL -1,seq_snd,goes_flyg_sp + WLL -1,seq_snd,helicptr_snd +;DJT End + WLW 2,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 2,W3CRZDU9,F + + WLW 2,S8HLSP08,FF + WLW 2,S8HLSP09,FF + WLW 2,S8HLSP10,FF + WLW 2,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 2,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 2,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 2,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 2,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 2,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 2,S8HLSP07,FF + WLW 2,S8HLSP08,FF + WLW 1,S8HLSP09,FF + + WLW 2,S8HLSP10,FF + WLW 1,S8HLSP11,FF + WLW 2,S8HLSP12,FF + WLW 1,S8HLSP13,FF + WLW 2,S8HLSP14,FF + WLW 1,S8HLSP15,FF + WLW 2,S8HLSP16,FF + WLW 1,S8HLSP01,FF + WLW 2,S8HLSP02,FF + WLW 1,S8HLSP03,FF + WLW 2,S8HLSP04,FF + WLW 1,S8HLSP05,FF + WLW 2,S8HLSP06,FF + WLW 1,S8HLSP07,FF + WLW 2,S8HLSP08,FF + + WLW 2,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 1,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 1,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#2 +#4 +#5 + W0 + + +#******************************** +dunkl3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,30 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_low_dnk_spch + WLW 2,W3FLDU2,F + WLW 2,W3FLDU3,F + WLW 2,W3FLDU4,F + WLW 2,W3FLDU5,F + WLW 2,W3FLDU6,F + WLW 2,W3FLDU7,F + WLW 1,W3FLDU8,F + WLW 1,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 12,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + +#1 +#5 + W0 + + +#******************************** +dunkn_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,80 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 55,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 3,W3FLDU9,F + WLW 3,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 13,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 2,W3FLDU1,F + WLLW -1,seq_strtdunk,W3FLDU12,90 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3FLDU1,F + WLW 61,W3FLDU2,F + WLW 3,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,15 + WLW 14,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunkn2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 56,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,79 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 57,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 2,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#******************************** +dunkn3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,89 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 68,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 1,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,95 + WLW -1,seq_jam_speech,JAM_MED + WL -1,seq_high_dnk_spch + WLW 75,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,9 + WLW 9,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko_t +;(medium,far range, skill 6-10) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 + W0 + +#2 +#3 + WLW 3,W3SPNDU1,F + WLLW -1,seq_strtdunk,W3SPNDU17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 54,W3SPNDU9,F + WLWWW -1,seq_offset,0,0,18 + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 2,W3SPNDU5,F + WLW 2,W3SPNDU4,F + WLW 1,W3SPNDU3,F + WLW 1,W3SPNDU2,F + WLW -1,seq_slamball,8 + WLW 8,W3SPNDU2,F + WLW 500,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#******************************** +dunko2_t +;(far range, skill 6-10) + + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 + +#3 + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,sumrslts_sp + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +#******************************** +dunkp_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,81 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 50,W2THPW6,F + WLW 3,W2THPW7,F + WLW 3,W2THPW8,F + WLW 3,W2THPW9,F + WLW 3,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 56,W4THPW5,F + WLW 3,W4THPW6,F + WLW 3,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 3,W4THPW8,F + WLW 2,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp2_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,42 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W2THPW2,F + WLW 2,W2THPW3,F + WLW 2,W2THPW4,F + WLW 2,W2THPW5,F + WLW 10,W2THPW6,F + WLW 1,W2THPW7,F + WLW 1,W2THPW8,F + WLW 1,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 2,M2DKDU15,F + WLW 2,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#1 +#3 + W0 + +#4 +#5 + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,28 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 2,W4THPW2,F + WLW 2,W4THPW3,F + WLW 2,W4THPW4,F + WLW 15,W4THPW5,F + WLW 1,W4THPW6,F + WLW 1,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 1,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 10,W4THPW9,F + WLW 500,W4THPW10,F + WLW 2,W4THPW11,F + WLW 2,W4THPW12,F + WLW 2,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + +#******************************** +dunkp3_t +;(medium, far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 +#2 +#3 + WLLW -1,seq_strtdunk,M5REVDU14,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 30,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 +#4 +#5 + W0 + +#******************************** +dunkq_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3PLDDU15,76 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 48,W3PLDDU9,F + WLW 3,W3PLDDU10,F + WLW 3,W3PLDDU11,F + WLW 3,W3PLDDU12,F + WLW 3,W3PLDDU13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3PLDDU14,F + WLW -1,seq_slamball,16 + WLW 14,W3PLDDU14,F + WLW 500,W3PLDDU15,F +; WLW 3,W3PLDDU16,F + WLW -1,seq_newdir,3*16 +#1 +#2 +#5 + W0 + +#******************************** +dunkq2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W3SPRDU1,F + WLLW -1,seq_strtdunk,W3SPRDU14,85 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPRDU2,F + WLW 3,W3PLDDU5,F + WLW 3,W3PLDDU6,F + WLW 3,W3PLDDU7,F + WLW 3,W3PLDDU8,F + WLW 28,W3PLDDU9,F + WLW 4,W3PLDDU10,F + WLW 4,W3PLDDU11,F + WLW 4,W3PLDDU12,F + WLW 23,W3SPRDU9,F + WLW 3,W3SPRDU10,F + WLW 3,W3SPRDU11,F + WLW 3,W3SPRDU12,F + WLW 1,W3SPRDU13,F + WLW -1,seq_slamball,8 + WLW 8,W3SPRDU13,F + WLW 500,W3SPRDU14,F + WLW 4,S3BKDU15,F + WLW 4,S3BKDU16,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#5 + W0 + + +#******************************** +dunkr_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,M5REVDU1,F + WLLW -1,seq_strtdunk,M5OHPB10,65 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 3,M5REVDU2,F + WLW 3,M5REVDU3,F + WLW 18,M5REVDU4,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU10,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU6,F + WLW 3,M5OHPB4,F + WLWWW -1,seq_offset,0,0,20 + WLW 3,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#1 +#2 +#3 +#5 + W0 + + +#******************************** +dunkr2_t +;(short,medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,66 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,M5OHPB3,F + WLW 3,M5OHPB4,F + WLW 45,M5OHPB5,F + WLW 3,M5OHPB6,F + WLW 3,M5OHPB7,F + WLW 3,M5OHPB8,F + WLW 3,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,20 + WLW 20,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 +#4 +#5 + W0 + + + .bss KP_TMPX ,32 ;Keep xvel for hook shot + .bss KP_TMPZ ,32 ;Keep zvel for hook shot + + +#******************************** + +hook_t +hook2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,w3hks1,F + WLW 3,w3hks2,F + WL -1,seq_jump + WLW 3,w3hks3,F + WLW 3,w3hks4,F + WLW 3,w3hks5,F + WL -1,plyr_shoot + WLW 50,w3hks6,F + WLW 3,w3hks7,F + WLW 3,w3hks8,F + WLW 3,w3hks9,F + WLW 3,w3hks10,F + WLW -1,seq_newdir,2*16 + W0 +#2 + WL -1,#store_xvel2 + WLW 3,w4hks1,F + WLW 3,w4hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w4hks3,F + WLW 3,w4hks4,F + WLW 29,w4hks5,F + WL -1,plyr_shoot + WLW 2,w4hks5,F + WLW 50,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 + W0 + +#3 + WL -1,#top_bot + WL -1,#store_xvel + WLW 3,w1hks1,F + WLW 3,w1hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w1hks3,F + WLW 29,w1hks4,F + WL -1,plyr_shoot + WLW 3,w1hks5,F + WLW 50,w1hks6,F + WLW 3,w1hks7,F + WLW 3,w1hks8,F + WLW 3,w1hks9,F + WLW 3,w1hks10,F + WLW -1,seq_newdir,0*16 + W0 + +#top_bot + move *a8(OZPOS),a0 + cmpi CZMID,a0 + jrgt #ret +;Yes, I am above CRTMID + movi #3a,b4 +#ret rets + +#3a +;Top of screen #3 hook shot + WL -1,#store_xvel + WLW 3,w5hks1,F + WLW 3,w5hks2,F + WL -1,seq_jump + WL -1,#restore_xvel + WLW 3,w5hks3,F + WLW 3,w5hks4,F + WLW 29,w5hks5,F + WL -1,plyr_shoot + WLW 2,w5hks6,F + WLW 50,w5hks7,F + WLW 3,w5hks8,F + WLW 3,w5hks9,F + WLW 3,w5hks10,F + WLW -1,seq_newdir,4*16 + W0 + + +#4 +#5 + WLW 3,w3fhks1,F + WLW 3,w3fhks2,F + WL -1,seq_jump + WLW 3,w3fhks3,F + WLW 3,w3fhks4,F + WLW 3,w3fhks5,F + WL -1,plyr_shoot + WLW 2,w3fhks5,F + WLW 50,w3fhks6,F + WLW 3,w3fhks7,F + WLW 3,w3fhks8,F + WLW 3,w3fhks9,F + WLW -1,seq_newdir,3*16 + W0 + +#store_xvel + + move *a8(OXVEL),a0,L + sra 2,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 2,a0 + move a0,@KP_TMPZ,L + rets + +#store_xvel2 + + move *a8(OXVEL),a0,L + sra 3,a0 + move a0,@KP_TMPX,L + move *a8(OZVEL),a0,L + sra 3,a0 + move a0,@KP_TMPZ,L + rets +#restore_xvel + + move @KP_TMPX,a0,L + move a0,*a8(OXVEL),L + move @KP_TMPZ,a0,L + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay_t +;(medium,far range, 7-10) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 3,W3SPLY2,F + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WL -1,#zfloat + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0a000h,a0 + move a0,*a8(OZVEL),L + rets + + + +#******************************** +dunklay2_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,65 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 3,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 3,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLWWW -1,seq_offset,0,-19,0 + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,2*16 +#1 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi -0e000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay3_t +;(medium,far range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 + WLW 3,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY12,55 + WLW 3,W3SPLY2,F + WL -1,#zfloat + WLW 3,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 3,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 25,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F +; WLW 3,S1SETLA10,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0e000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay3a_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,M3SPRLA7,60 + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 2,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLW 2,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY13,60 + WLW 1,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 1,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 1,W3SPLY7,F + WLW 1,W3SPLY8,F + WLW 1,W3SPLY9,F + WLW 1,W3SPLY10,F + + WLW 2,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 2,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + + WLW 3,W3SPLY14,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY11,F + + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3b_t +;(medium,far range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,M3SPRLA7,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 8,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 + W0 +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,64 + WLW 2,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 2,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 2,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 2,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 9,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 3,W3SPLY17,F + WLW 3,W3SPLY18,F + WLW 3,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay3c_t +;(short medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3SPLY2,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 2,W3SPLY15,F + WLW 2,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 1,W3SPLY18,F + WL -1,plyr_shoot + WLW 50,W3SPLY18,F + WLW -1,seq_newdir,3*16 + W0 + +#2 +#3 + WLW 2,W3SPLY1,F + WLLW -1,seq_strtdunk,W3SPLY18,55 + WLW 2,W3SPLY1,F + WLW 3,W3SPLY2,F + WLW 2,W3SPLY3,F + WLW 3,W3SPLY4,F + WLW 2,W3SPLY5,F + WLW 3,W3SPLY6,F + WLW 2,W3SPLY7,F + WLW 3,W3SPLY8,F + WLW 2,W3SPLY9,F + WLW 3,W3SPLY10,F + WLW 3,W3SPLY11,F + WLW 3,W3SPLY12,F + WLW 3,W3SPLY13,F + WLW 3,W3SPLY14,F + WLW 3,W3SPLY15,F + WLW 3,W3SPLY16,F + WLW 2,W3SPLY17,F + WLW 2,W3SPLY18,F + WLW 2,W3SPLY19,F + WLW 1,W3SPLY20,F + WL -1,plyr_shoot + WLW 50,W3SPLY20,F + WLW -1,seq_newdir,3*16 +#4 +#5 + W0 + + +#******************************** +dunklay4_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + +#******************************** +dunklay5_t +;(medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 1,W3SETLA3,FF + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA3,FF + WLW 25,W3SETLA4,FF + WLW 3,W3SETLA5,FF + WLW 2,W3SETLA6,FF + WLW 1,W3SETLA7,FF + WL -1,plyr_shoot + WLW 500,W3SETLA7,FF + WLW 3,W3SETLA8,FF + WLW 3,W3SETLA9,FF + WLW -1,seq_newdir,0*16 + W0 +#2 +#3 + WLW 1,W3SETLA1,F + WLLW -1,seq_strtdunk,W3PLDDU8,54 + WLW 3,W3SETLA2,F + WLW 3,W3SETLA3,F + WL -1,#zfloat + WLW 25,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 2,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_shoot + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 +#4 +#5 + W0 + + +#zfloat + move *a8(OZVEL),a0,L + addi 0a000h,a0 + move a0,*a8(OZVEL),L + rets + + +#******************************** +dunklay6_t +;(short,medium range) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,S1SETLA1,F + WLLW -1,seq_strtdunk,S1SETLA2,52 + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 24,S1SETLA4,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 500,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WLW 2,M3SPRLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 30,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WL -1,plyr_shoot + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 +#4 + WLW 3,S4SETLA1,F + WLLW -1,seq_strtdunk,S4SETLA2,52 + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 30,S4SETLA4,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 500,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WLLW -1,seq_strtdunk,S5SETLA2,52 + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 30,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 500,S5SETLA6,F + WLW 3,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + + +#******************************** +dunklay7_t +;(medium range, 7-10 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,S3BEHLA1,FF + WLLW -1,seq_strtdunk,M1SPDU10,58 + WLW 3,S3BEHLA2,FF + WLW 32,S3BEHLA3,FF + WLW 4,S3BEHLA4,FF + WLW 4,S3BEHLA5,FF + WLW 3,S3BEHLA6,FF + WL -1,plyr_shoot + WLW 500,S3BEHLA6,FF + WLW 3,S3BEHLA7,FF + WLW 3,S3BEHLA8,FF + WLW 3,S3BEHLA9,FF + WLW -1,seq_newdir,1*16 + W0 + +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BEHLA8,58 + WLW 3,S3BEHLA2,F + WLW 32,S3BEHLA3,F + WLW 4,S3BEHLA4,F + WLW 4,S3BEHLA5,F + WLW 3,S3BEHLA6,F + WL -1,plyr_shoot + WLW 500,S3BEHLA6,F + WLW 3,S3BEHLA7,F + WLW 3,S3BEHLA8,F + WLW 3,S3BEHLA9,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunklay7a_t +;(medium range, 1-6 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3BEHLA1,F + WLLW -1,seq_strtdunk,S3BETLA6,59 + WLW 3,S3BETLA2,F + WLW 35,S3BETLA3,F + WLW 4,S3BETLA4,F + WLW 4,S3BETLA5,F + WLW 4,S3BETLA6,F + WLW 4,S3BETLA7,F + WLW 2,S3BETLA8,F + WL -1,plyr_shoot + WLW 500,S3BETLA8,F + WLW 3,S3BETLA9,F + WLW 3,S3BETLA10,F + WLW -1,seq_newdir,1*16 +#1 +#4 +#5 + W0 + +#******************************** +dunklay8_t +;(med,far range, 1-5 skill) + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 2,w4hks1,F + WLLW -1,seq_strtdunk,w4hks6,50 + WLW 3,w4hks2,F + WLW 3,w4hks3,F + WLW 26,w4hks4,F + WL -1,plyr_shoot + WLW 1,w4hks4,F + WLW 3,w4hks5,F + WLW 500,w4hks6,F + WLW 3,w4hks7,F + WLW 3,w4hks8,F + WLW 3,w4hks9,F + WLW 3,w4hks10,F + WLW -1,seq_newdir,3*16 +#1 +#4 +#5 + W0 + + + +NEWILPAL: +PLYRFX2_P: +PLYRFX3_P: +XEWILPAL: +zwilpal: +PLYRFIX_P +NEWILFIX +;PLYRRCH_P + .word 0 + .end diff --git a/SRC/PLYRDSQ2.ASM b/SRC/PLYRDSQ2.ASM new file mode 100644 index 0000000..a3b8969 --- /dev/null +++ b/SRC/PLYRDSQ2.ASM @@ -0,0 +1,2045 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson +* Initiated: 2/3/96 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +****************************************************************************** + .file "plyrdsq2.asm" + .title "dunk tables 2" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "world.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrdsq2.tbl" + .include "dunks.glo" + .include "dunks2.glo" + +;symbols externally defined + + .ref tarzan + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_stand + .ref seq_snd + .ref seq_offset + .ref seq_high_dnk_spch + .ref seq_low_dnk_spch + .ref seq_jam_speech + .ref seq_goto_line + .ref tomahk_hm_sp,tomahk_dk_sp,ooooooh_sp,hiabv_rim_sp + .ref plyr_lob_ball + .ref goes_up_sp,raises_up_sp + .ref cannonbal_sp + + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************** +* Dunk sequences + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + + +#******************************** +ddunk_recv_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLL -1,seq_randm,#1a + WLW 2,W3FLDU3,F + WLLW -1,seq_strtdunk,W3FLDU12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 65,W3FLDU3,F + WLW 3,W3FLDU4,F + WLW 3,W3FLDU5,F + WLW 3,W3FLDU6,F + WLW 3,W3FLDU7,F + WLW 3,W3FLDU8,F + WLW 2,W3FLDU9,F + WLW 1,W3FLDU10,F + WLW 1,W3FLDU11,F + WLW -1,seq_slamball,20 + WLW 15,W3FLDU11,F + WLW 500,W3FLDU12,F + WLW 3,W3FLDU13,F + WLW -1,seq_newdir,0*16 + W0 +#1a + WLW 3,W3SPNDU1,FF + WLLW -1,seq_strtdunk,M5REVDU11,85 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SPNDU2,F + WLW 3,W3SPNDU3,F + WLW 3,W3SPNDU4,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F + WLW 31,W3SPNDU11,F + WLW 3,M5REVDU5,F + WLW 3,M5REVDU6,F + WLW 3,M5REVDU7,F + WLW 3,M5REVDU8,F + WLW 3,M5REVDU9,F + WLW 3,M5REVDU10,F + WLW 3,M5REVDU11,F + WLW 3,M5REVDU12,F + WLWWW -1,seq_offset,3,0,0 + WLW 1,M5REVDU13,F + WLW -1,seq_slamball,8 + WLW 8,M5REVDU13,F + WLW 500,M5REVDU14,F + WLW 3,M5REVDU15,F + WLW 3,M5REVDU16,F + WLW -1,seq_newdir,6*16 + W0 + +#2 + WLL -1,seq_randm,#2a + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 54,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 + +#2a + WLW 3,W2THPW1,F + WLLW -1,seq_strtdunk,W2THPW12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W2THPW2,F + WLW 3,W2THPW3,F + WLW 3,W2THPW4,F + WLW 3,W2THPW5,F + WLW 59,W2THPW6,F + WLW 3,W2THPW7,F + WLW 2,W2THPW8,F + WLW 2,W2THPW9,F + WLW 1,W2THPW10,F + WLWWW -1,seq_offset,0,0,20 ;infront of net + WLW 1,W2THPW11,F + WLW -1,seq_slamball,15 + WLW 15,W2THPW11,F + WLW 500,W2THPW12,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +; WLL -1,seq_randm,#3a +; WLW 3,W3SMDU1,F +; WLLW -1,seq_strtdunk,W3SMDU9,86 +; WLW -1,seq_jam_speech,JAM_GREAT +; WLW 3,W3SMDU2,F +; WLW 3,W3SMDU3,F +; WLW 3,W3SMDU4,F +; WLW 69,W3SMDU5,F +; WLW 2,W3SMDU6,F +; WLW 2,W3SMDU7,F +; WLW 1,W3SMDU8,F +; WLW -1,seq_slamball,15 +; WLW 15,W3SMDU8,F +; WLW 500,W3SMDU9,F +; WLW 4,W3SWDU11,F +; WLW 4,W3SWDU12,F +; WLW -1,seq_newdir,2*16 +; W0 +;#3a + WLW 3,W3CANN02,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,tarzan + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 14,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLL -1,seq_randm,#4a + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 57,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#4a + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLWWW -1,seq_offset,0,0,-20 ;behind net + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 66,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#5a + + WLW 3,W4THPW1,F + WLLW -1,seq_strtdunk,W4THPW10,86 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,raises_up_sp + WLW 3,W4THPW2,F + WLW 3,W4THPW3,F + WLW 3,W4THPW4,F + WLW 69,W4THPW5,F + WLW 3,W4THPW6,F + WLW 2,W4THPW7,F + WLW 2,W4THPW8,F + WLW 1,W4THPW9,F + WLW -1,seq_slamball,15 + WLW 5,W4THPW9,F + WLW 500,W4THPW10,F + WLW 3,W4THPW11,F + WLW 3,W4THPW12,F + WLW 3,W4THPW13,F + WLW -1,seq_newdir,3*16 + W0 + + +seq_randm + move @HCOUNT,a14 + btst 0,a14 + jrnz sran_1 + move *b4,b4,L + rets +sran_1 + addk 32,b4 + rets + + +#******************************** +ddunk_strt2_t + + +;FIX!!! +;Add these options to double dunks +;quicklay_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +; +;#1 +; WLW 2,S1SETLA1,F +; WL -1,seq_jump +; WLW 3,S1SETLA2,F +; WLW 3,S1SETLA3,F +; WLW 3,S1SETLA4,F +; WLW 70,S1SETLA5,F +; WLW 2,S1SETLA5,F +; WLW 70,S1SETLA6,F +; WLW 3,S1SETLA7,F +; WLW 3,S1SETLA8,F +; WLW 3,S1SETLA9,F +; WLW -1,seq_newdir,0*16 +; W0 +; +;#2 +; WL -1,pick_rand2 +; WLW 2,S2HBHLA1,F +; WL -1,seq_jump +; WLW 3,S2HBHLA2,F +; WLW 3,S2HBHLA3,F +; WLW 3,S2HBHLA4,F +; WLW 3,S2HBHLA5,F +; WLW 70,S2HBHLA6,F +; WLW 1,S2HBHLA6,F +; WLW 3,S2HBHLA7,F +; WLW 3,S2HBHLA8,F +; WLW 70,S2HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3 +; WL -1,pick_rand3 +; WLW 2,M3SPRLA1,F +; WL -1,seq_jump +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 70,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 70,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#3a +; WLW 2,S3HBHLA1,F +; WL -1,seq_jump +; WLW 3,S3HBHLA2,F +; WLW 70,S3HBHLA3,F +; WLW 3,S3HBHLA3,F +; WLW 70,S3HBHLA4,F +; WLW 3,S3HBHLA6,F +; WLW 3,S3HBHLA7,F +; WLW 3,S3HBHLA8,F +; WLW 3,S3HBHLA9,F +; WLW -1,seq_newdir,1*16 +; W0 +; +;#4 +; WLW 3,S4SETLA1,F +; WL -1,seq_jump +; WLW 3,S4SETLA2,F +; WLW 3,S4SETLA3,F +; WLW 3,S4SETLA4,F +; WLW 70,S4SETLA5,F +; WLW 1,S4SETLA5,F +; WLW 70,S4SETLA6,F +; WLW 3,S4SETLA7,F +; WLW 3,S4SETLA8,F +; WLW 3,S4SETLA9,F +; WLW -1,seq_newdir,3*16 +; W0 +; +;#5 +; WLW 3,S5SETLA1,F +; WL -1,seq_jump +; WLW 3,S5SETLA2,F +; WLW 3,S5SETLA3,F +; WLW 3,S5SETLA4,F +; WLW 70,S5SETLA5,F +; WLW 2,S5SETLA5,F +; WLW 3,S5SETLA6,F +; WLW 70,S5SETLA7,F +; WLW 3,S5SETLA8,F +; WLW 3,S5SETLA9,F +; WLW 3,S5SETLA10,F +; WLW -1,seq_newdir,3*16 +; W0 + + + .word DFLGS|LAYUP_M + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,#zfloat + WLW 3,W3SETLA4,F + WLW 3,W3SETLA5,F + WLW 3,W3SETLA6,F + WLW 1,W3SETLA7,F + WL -1,plyr_lob_ball + WLW 500,W3SETLA7,F + WLW 3,W3SETLA8,F + WLW 3,W3SETLA9,F + WLW -1,seq_newdir,0*16 + W0 +#3 + WL -1,seq_randm,#3a + WL -1,#zfloat + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#3a + WLW 2,M3SPRLA1,F + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 2,M3SPRLA5,F + WL -1,plyr_lob_ball + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 500,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WL -1,#zfloat + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 2,S5SETLA5,F + WL -1,plyr_lob_ball + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 500,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +#zfloat + clr a0 + move *a13(plyr_seqdir),a14 + jrz #noflt + subk 1,a14 + jrz #noflt + subk 6,a14 + jrz #noflt + move *a8(OZVEL),a0,L + addi -0f000h,a0 +#noflt move a0,*a8(OZVEL),L + + move *a8(OXVEL),a0,L + sra 1,a0 + move a0,*a8(OXVEL),L + rets + + + +#******************************** +dunkq3_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#4 +#5 + W0 +#3 + WLL -1,maybe_chnge_seq,#3a + WLW 3,W3SMDU1,F + WLLW -1,seq_strtdunk,W3SMDU9,95 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,goes_up_sp + WLW 3,W3SMDU2,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU4,F + WLW 13,W3SMDU5,F + WLW 3,W3SMDU4,F + WLW 3,W3SMDU3,F + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN30,F + WLW 2,W3CANN32,F + + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 2,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +#3a + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,95 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU3,F + + WLW 3,W3SMDU2,F + WLW 2,W3CANN04,F + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLL -1,seq_snd,cannonbal_sp + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + + WLW 2,W3SMDU2,F + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 5,W3SMDU5,F + WLW 2,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + + +maybe_chnge_seq + move @HCOUNT,a14 + btst 0,a14 + jrnz mcs_1 + move *b4,b4,L + rets +mcs_1 + addk 32,b4 + rets + + +#******************************** +dunks_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,S3SORDU1,F + WLLW -1,seq_strtdunk,S3SORDU6,80 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,S3SORDU2,F + WLW 3,S3SORDU3,F + WLW 3,S3SORDU4,F + WLW 67,S3SORDU5,F + WLW -1,seq_slamball,15 + WLW 15,S3SORDU5,F + WLW 500,S3SORDU6,F + WLW 3,S3SORDU7,F + WLW 3,S3SORDU8,F + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunks2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M5OHPB10,20 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_low_dnk_spch + WLW 2,M5OHPB2,F + WLW 2,M5OHPB3,F + WLW 2,M5OHPB4,F + WLW 4,M5OHPB5,F + WLW 2,M5OHPB6,F + WLW 1,M5OHPB7,F + WLW 1,M5OHPB8,F + WLW 1,M5OHPB9,F + WLWWW -1,seq_offset,0,0,20 + WLW -1,seq_slamball,15 + WLW 12,M5OHPB9,F + WLW 500,M5OHPB10,F + WLW 3,M5OHPB11,F + WLW 3,M5OHPB12,F + WLW -1,seq_newdir,0*16 +#2 +#3 +#4 +#5 + W0 + + +#******************************** +dunkt_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 +#1 +#4 +#5 + W0 + +#******************************** +dunkt2_t +;(medium range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,52 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 3,W3CRZDU16,F + WLW 1,W3CRZDU17,F + WLWWW -1,seq_offset,3,0,0 + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunkt3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +;del WLW 3,W3CRZDU1,F + WLW 2,W3CRZDU2,F + WLLW -1,seq_strtdunk,W3CRZDU18,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 3,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 39,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,19 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#4 +#5 + W0 + +#******************************** +dunkt4_t +;(far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,S8ALY201,F + WLLW -1,seq_strtdunk,S8ALY212,70 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY202,F + WLW 3,S8ALY203,F + WLW 3,S8ALY204,F + WLW 3,S8ALY205,F + WLW 3,S8ALY206,F + WLW 3,S8ALY207,F + WLW 44,S8ALY208,F + WLW 3,S8ALY209,F + WLW 2,S8ALY210,F + WLW 2,S8ALY211,F + WLW 2,S8ALY212,F + WLW 1,S8ALY213,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY213,F + WLW 500,S8ALY214,F + WLW -1,seq_newdir,0*16 + W0 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,S8ALY414,76 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 47,S8ALY406,F + WLW 3,S8ALY407,F + WLW 3,S8ALY408,F + WLW 3,S8ALY409,F + WLW 2,S8ALY410,F + WLW 2,S8ALY411,F + WLW 2,S8ALY412,F + WLW 1,S8ALY413,F + WLW -1,seq_slamball,15 + WLW 10,S8ALY413,F + WLW 500,S8ALY414,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#3 +#5 + W0 + + +#******************************** +dunkt5_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 +#3 +#4 + WLW 3,W3CRZDU1,F + WLLW -1,seq_strtdunk,W3CRZDU18,77 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3CRZDU2,F + WLW 2,W3CRZDU3,F + WLW 3,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 3,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 3,W3CRZDU8,F + WLW 2,W3CRZDU9,F + WLW 3,W3CRZDU10,F + WLW 2,W3CRZDU11,F + WLW 3,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 3,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 3,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 3,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 3,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 3,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 3,W3CRZDU15,F + WLW 2,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 2,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 + W0 + +#1 +#5 + W0 + +#******************************** +dunku_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + + .ref ball_convfmprel,plyr_setshtdly + .ref ballfree,ballobj_p,ballpnum + +;#seq_bounce_ball_off_floor +; +; calla ball_convfmprel +; move @ballobj_p,a0,L +; +; clr a14 +; move a14,*a0(OZVEL),L +; move a14,*a13(plyr_ownball) +; not a14 +; move a14,@ballpnum ;No owner +; move a14,@ballfree ;0=ball not free +; +; movi 97c00h,a14 +; move a14,*a0(OYVEL),L +; movi -200000,a14 +; move a14,*a0(OXVEL),L +; +; movi 30,a0 +; calla plyr_setshtdly +; rets + +#******************************** +dunku2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,M5OHPB1,F + WLLW -1,seq_strtdunk,M2DKDU14,79 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,M5OHPB2,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 40,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,81 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W3SDTUK2,F + WLW 3,W3SDTUK3,F + WLW 3,W3SDTUK4,F + WLW 3,W3SDTUK5,F + WLW 3,W3SDTUK6,F + WLW 3,W3SDTUK7,F + WLW 3,W3SDTUK8,F + WLW 3,W3SDTUK9,F + WLW 37,W3SDTUK10,F + WLW 3,W3SDTUK11,F + WLW 3,W3SDTUK12,F + WLW 3,W3SDTUK13,F + WLW 3,W3SDTUK14,F + WLW 3,W3SDTUK15,F + WLW 3,M2DKDU12,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 15,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku3_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 2,M5OHPB1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,M5OHPB2,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 + W0 +#2 +#3 + WLW 3,W3SDTUK1,F + WLLW -1,seq_strtdunk,W3SDTUK10,31 + WLW -1,seq_jam_speech,JAM_GOOD + WLW 2,W3SDTUK2,F + WLW 2,W3SDTUK3,F + WLW 2,W3SDTUK4,F + WLW 2,W3SDTUK5,F + WLW 2,W3SDTUK6,F + WLW 2,W3SDTUK7,F + WLW 2,W3SDTUK8,F + WLW 2,W3SDTUK9,F + WLW 2,W3SDTUK10,F + WLW 2,W3SDTUK11,F + WLW 2,W3SDTUK12,F + WLW 2,W3SDTUK13,F + WLWWW -1,seq_offset,0,0,18 ;in front of net + WLW 1,W3SDTUK14,F + WLW 1,W3SDTUK15,F + WLW 1,M2DKDU12,F + WLW 1,M2DKDU13,F + WLW -1,seq_slamball,15 + WLW 12,M2DKDU13,F + WLW 500,M2DKDU14,F + WLW 3,M2DKDU15,F + WLW 3,M2DKDU16,F + WLW -1,seq_newdir,1*16 +#4 +#5 + W0 + +#******************************** +dunku4_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku5_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku6_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku7_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + W0 + +#******************************** +dunku8_t +;(med,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#4 + WLW 3,S8ALY401,F + WLLW -1,seq_strtdunk,W3SMDU9,83 + WLW -1,seq_jam_speech,JAM_GREAT + WLW 3,S8ALY402,F + WLW 3,S8ALY403,F + WLW 3,S8ALY404,F + WLW 3,S8ALY405,F + WLW 3,S8ALY406,F + WLL -1,seq_goto_line,#4a + +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W3SMDU9,92 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W3SPNDU5,F + WLW 3,W3SPNDU6,F + WLW 3,W3SPNDU7,F + WLW 3,W3SPNDU8,F + WLW 3,W3SPNDU9,F + WLW 3,W3SPNDU10,F +#4a WLW 3,W3SPNDU11,F + WLW 3,W3SPNDU12,F + WLW 3,W3SPNDU13,F + WLW 3,W3SPNDU14,F + WLW 3,W3SPNDU15,F + WLW 3,W3SPNDU16,F + WLW 3,W3SPNDU17,F + WLW 3,W3SPNDU18,F + WLW 3,W3SPNDU19,F + WLW 3,W3SPNDU20,F + + WLW 2,W3CANN06,F + WLW 2,W3CANN08,F + WLW 2,W3CANN10,F + WLW 2,W3CANN12,F + WLW 2,W3CANN14,F + WLW 2,W3CANN16,F + WLW 2,W3CANN18,F + WLW 2,W3CANN20,F + WLW 2,W3CANN22,F + WLW 2,W3CANN24,F + WLW 2,W3CANN26,F + WLW 2,W3CANN28,F + WLW 2,W3CANN06,F + WLW 2,W3CANN04,F + WLW 2,W3SMDU2,F + + WLW 2,W3SMDU3,F + WLW 2,W3SMDU4,F + WLW 1,W3SMDU5,F + WLW 1,W3SMDU6,F + WLW 1,W3SMDU7,F + WLW 1,W3SMDU8,F + WLW -1,seq_slamball,15 + WLW 15,W3SMDU8,F + WLW 500,W3SMDU9,F + WLW 4,W3SWDU11,F + WLW 4,W3SWDU12,F + WLW -1,seq_newdir,2*16 + W0 + +; WLW 2,W3CRZDU3,F +; WLW 2,W3CRZDU15,F +; WLW 1,W3CRZDU16,F +; WLWWW -1,seq_offset,0,0,18 +; WLW 1,W3CRZDU17,F +; WLW -1,seq_slamball,15 +; WLW 10,W3CRZDU17,F +; WLW 500,W3CRZDU18,F +; WLW 3,W3CRZDU19,F +; WLW 3,W3CRZDU20,F +; WLW -1,seq_newdir,0*16 +; W0 +#1 +#3 +#5 + W0 + +#******************************** +dunkv_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,75 + WL -1,seq_high_dnk_spch + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 38,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,81 + WLW -1,seq_jam_speech,JAM_GREAT + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv3_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,110 + WLL -1,seq_snd,ooooooh_sp + WLW 3,W3ARMSP3,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 3,W3ARMSP16,F + WLW 3,W3ARMSP4,F + WLW 3,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 3,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 3,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 3,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 3,W3ARMSP13,F + WLW 2,W3ARMSP14,F + WLW 3,W3ARMSP15,F + WLW 2,W3ARMSP16,F + + WLW 3,W3ARMSP4,F + WLW 2,W3ARMSP5,F + WLW 3,W3ARMSP6,F + WLW 2,W3ARMSP7,F + WLW 3,W3ARMSP8,F + WLW 2,W3ARMSP9,F + WLW 3,W3ARMSP10,F + WLW 2,W3ARMSP11,F + WLW 3,W3ARMSP12,F + WLW 2,W3ARMSP13,F + WLW 3,W3ARMSP14,F + WLW 2,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_dk_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkv4_t +;(short range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 + WLW 3,W3ARMSP1,F + WLLW -1,seq_strtdunk,W3ARMSP17,24 +; WLW 1,W3ARMSP3,F + WLW 1,W3ARMSP4,F + WLW 1,W3ARMSP5,F + WLW 1,W3ARMSP6,F + WLW 1,W3ARMSP7,F + WLW 1,W3ARMSP8,F + WLW 1,W3ARMSP9,F + WLW 1,W3ARMSP10,F + WLW 1,W3ARMSP11,F + WLW 1,W3ARMSP12,F + WLW 1,W3ARMSP13,F + WLW 1,W3ARMSP14,F + WLW 1,W3ARMSP15,F + WLW 1,W3ARMSP16,F + WLW -1,seq_slamball,15 + WLL -1,seq_snd,tomahk_hm_sp + WLW 7,W3ARMSP16,F + WLW 500,W3ARMSP17,F + WLW -1,seq_newdir,2*16 + +#1 +#2 +#4 +#5 + W0 + +#******************************** +dunkw_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,84 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 46,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 3,W4SDSLM15,F + WLW 3,W4SDSLM16,F + WLW 3,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw2_t +;(medium,far range) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 +#5 + WLW 3,W4SDSLM1,F + WLLW -1,seq_strtdunk,W4SDSLM17,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W4SDSLM3,F + WLW 3,W4SDSLM4,F + WLW 3,W4SDSLM6,F + WLW 3,W4SDSLM7,F + WLW 3,W4SDSLM8,F + WLW 3,W4SDSLM9,F + WLW 3,W4SDSLM10,F + WLW 56,W4SDSLM12,F + WLW 3,W4SDSLM13,F + WLW 3,W4SDSLM14,F + WLW 2,W4SDSLM15,F + WLW 2,W4SDSLM16,F + WLW 1,W4SDSLM17,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W4SDSLM18,F + WLW -1,seq_slamball,15 + WLW 10,W4SDSLM18,F + WLW 500,W3PLDDU15,F + WLW -1,seq_newdir,3*16 +#1 +#2 + W0 + +#******************************** +dunkw3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 3,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 3,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 3,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 3,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 3,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 44,W3SPLD14,F + WLW 3,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 3,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + WLW 2,W3SPLD20,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,15 + WLW 15,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 1,W3SPLD02,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#5a + WLW 3,W3SPLD02,F +#3 +#4 + WLW 3,W3SPLD01,F + WLLW -1,seq_strtdunk,W3CRZDU18,90 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W3SPLD02,F +#5a WLW 2,W3SPLD03,F + WLW 2,W3SPLD04,F + WLW 2,W3SPLD05,F + WLW 2,W3SPLD06,F + WLW 2,W3SPLD07,F + WLW 2,W3SPLD08,F + WLW 2,W3SPLD09,F + WLW 2,W3SPLD10,F + WLW 2,W3SPLD11,F + WLW 2,W3SPLD12,F + WLW 2,W3SPLD13,F + WLW 17,W3SPLD14,F + WLW 2,W3SPLD15,F + WLW 2,W3SPLD16,F + WLW 2,W3SPLD17,F + WLW 2,W3SPLD18,F + WLW 2,W3SPLD19,F + + WLW 2,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + + WLW 2,W3CRZDU3,F + WLW 2,W3CRZDU4,F + WLW 2,W3CRZDU5,F + WLW 2,W3CRZDU6,F + WLW 2,W3CRZDU7,F + WLW 2,W3CRZDU8,F + WLW 3,W3CRZDU9,F + WLW 2,W3CRZDU10,F + WLW 3,W3CRZDU11,F + WLW 2,W3CRZDU12,F + WLW 2,W3CRZDU13,F + WLW 2,W3CRZDU14,F + WLW 2,W3CRZDU15,F + WLW 1,W3CRZDU16,F + WLWWW -1,seq_offset,0,0,18 + WLW 1,W3CRZDU17,F + WLW -1,seq_slamball,8 + WLW 6,W3CRZDU17,F + WLW 500,W3CRZDU18,F + WLW 3,W3CRZDU19,F + WLW 3,W3CRZDU20,F + WLW -1,seq_newdir,0*16 +#1 +#2 + W0 + +#******************************** +dunkx2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL2D01,F + WLLW -1,seq_strtdunk,W8FL2D17,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL2D02,F + WLW 3,W8FL2D03,F + WLW 3,W8FL2D04,F + WLW 3,W8FL2D05,F + WLW 3,W8FL2D06,F + WLW 3,W8FL2D07,F + WLW 3,W8FL2D08,F + WLW 3,W8FL2D09,F + WLW 38,W8FL2D10,F + WLW 3,W8FL2D11,F + WLW 2,W8FL2D12,F + WLW 2,W8FL2D13,F + WLW 2,W8FL2D14,F + WLW 2,W8FL2D15,F + WLW 1,W8FL2D16,F + WLW -1,seq_slamball,15 + WLW 10,W8FL2D16,F + WLW 500,W8FL2D17,F + WLW -1,seq_newdir,3*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunkx3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#3 +#4 + WLW 3,W8FL3D01,F + WLLW -1,seq_strtdunk,W8FL3D15,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8FL3D02,F + WLW 3,W8FL3D03,F + WLW 3,W8FL3D04,F + WLW 3,W8FL3D05,F + WLW 3,W8FL3D06,F + WLW 3,W8FL3D07,F + WLW 42,W8FL3D08,F + WLW 3,W8FL3D09,F + WLW 3,W8FL3D10,F + WLW 2,W8FL3D11,F + WLW 2,W8FL3D12,F + WLW 2,W8FL3D13,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 1,W8FL3D14,F + WLW -1,seq_slamball,8 + WLW 7,W8FL3D14,F + WLW 500,W8FL3D15,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#5 + W0 + +#******************************** +dunky_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,85 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD20,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,89 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch +#2a WLW 3,W3OHSD02,F + WLW 3,W3OHSD03,F + WLW 3,W3OHSD04,F + WLW 3,W3OHSD05,F +#1a WLW 3,W3OHSD06,F + WLW 3,W3OHSD07,F + WLW 3,W3OHSD08,F + WLW 3,W3OHSD09,F + WLW 3,W3OHSD10,F + WLW 3,W3OHSD11,F + WLW 3,W3OHSD12,F + WLW 3,W3OHSD13,F + WLW 40,W3OHSD14,F + WLW 3,W3OHSD15,F + WLW 3,W3OHSD16,F + WLW 3,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunky2_t + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 + WLW 3,W3OHSD05,F + WLLW -1,seq_strtdunk,W3OHSD20,73 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#1a + +#2 + WLW 3,W3OHSD03,F + WLLW -1,seq_strtdunk,W3OHSD20,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLL -1,seq_goto_line,#2a + +#3 + WLW 3,W3OHSD01,F + WLLW -1,seq_strtdunk,W3OHSD21,71 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 2,W3OHSD02,F +#2a WLW 2,W3OHSD03,F + WLW 2,W3OHSD04,F + WLW 2,W3OHSD05,F +#1a WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 2,W3OHSD19,F + WLW 2,W3OHSD20,F + WLW 2,W3OHSD21,F + WLW 2,W3OHSD22,F + WLW 2,W3OHSD23,F + WLW 2,W3OHSD06,F + WLW 2,W3OHSD07,F + WLW 2,W3OHSD08,F + WLW 2,W3OHSD09,F + WLW 2,W3OHSD10,F + WLW 2,W3OHSD11,F + WLW 2,W3OHSD12,F + WLW 2,W3OHSD13,F + WLW 2,W3OHSD14,F + WLW 2,W3OHSD15,F + WLW 2,W3OHSD16,F + WLW 2,W3OHSD17,F + WLW 2,W3OHSD18,F + WLW 1,W3OHSD19,F + WLW 1,W3OHSD20,F + WLW 1,W3OHSD21,F + WLW 1,W3OHSD22,F + WLW -1,seq_slamball,15 + WLW 9,W3OHSD22,F + WLW 500,W3OHSD23,F + WLW 3,W3OHSD24,F + WLW 3,W3OHSD25,F + WLW 3,W3OHSD26,F + WLW -1,seq_newdir,2*16 +#4 +#5 + W0 + +#******************************** +dunkz_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#5 + WLW 3,W8CLSD01,F + WLLW -1,seq_strtdunk,W8CLSD12,65 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_low_dnk_spch + WLW 3,W8CLSD02,F + WLW 3,W8CLSD03,F + WLW 3,W8CLSD04,F + WLW 3,W8CLSD05,F + WLW 45,W8CLSD06,F + WLW 2,W8CLSD07,F + WLW 2,W8CLSD08,F + WLW 2,W8CLSD09,F + WLW 1,W8CLSD10,F + WLW -1,seq_slamball,15 + WLW 10,W8CLSD10,F + WLW 3,W8CLSD11,F + WLW 500,W8CLSD12,F + WLW -1,seq_newdir,4*16 + W0 +#1 +#2 +#3 +#4 + W0 + +#******************************** +dunkz2_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#2 + WLW 3,W8OHP201,F + WLLW -1,seq_strtdunk,W8OHP215,75 + WLW -1,seq_jam_speech,JAM_GOOD + WL -1,seq_high_dnk_spch + WLW 3,W8OHP202,F + WLW 3,W8OHP203,F + WLW 3,W8OHP204,F + WLW 3,W8OHP205,F + WLW 3,W8OHP206,F + WLW 43,W8OHP207,F + WLW 3,W8OHP208,F + WLW 3,W8OHP209,F + WLW 2,W8OHP210,F + WLW 2,W8OHP211,F + WLW 2,W8OHP212,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8OHP213,F + WLW 1,W8OHP214,F + WLW -1,seq_slamball,20 + WLW 15,W8OHP214,F + WLW 500,W8OHP215,F + WLW -1,seq_newdir,1*16 + W0 +#1 +#3 +#4 +#5 + W0 + +#******************************** +dunkz3_t +;(medium, far) + .word DFLGS + .long seq_stand + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 +#1 +#2 + WLW 3,W8UND101,F + WLLW -1,seq_strtdunk,W8UND119,75 + WLW -1,seq_jam_speech,JAM_GREAT + WL -1,seq_high_dnk_spch + WLW 3,W8UND102,F + WLW 3,W8UND103,F + WLW 3,W8UND104,F + WLW 3,W8UND105,F + WLW 3,W8UND106,F + WLW 3,W8UND107,F + WLW 3,W8UND108,F + WLW 3,W8UND109,F + WLW 3,W8UND110,F + WLW 33,W8UND111,F + WLW 3,W8UND112,F + WLW 3,W8UND113,F + WLW 2,W8UND114,F + WLW 2,W8UND115,F + WLW 2,W8UND116,F + WLW 2,W8UND117,F + WLWWW -1,seq_offset,0,0,18 ;infront of net + WLW 2,W8UND118,F + WLW 1,W8UND119,F + WLW -1,seq_slamball,15 + WLW 10,W8UND119,F + WLW 500,W8UND120,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#4 +#5 + W0 + + + +****************************************************************************** + .end diff --git a/SRC/PLYRLSEQ.ASM b/SRC/PLYRLSEQ.ASM new file mode 100644 index 0000000..1e57179 --- /dev/null +++ b/SRC/PLYRLSEQ.ASM @@ -0,0 +1,446 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/24/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:06 +************************************************************** + .file "plyrlseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" ;Gsp asm equates + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "dunks.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" +; .include "layup.tbl" +; .include "plyrd2sq.tbl" +; .include "hangs.tbl" + + +;sounds external + +;symbols externally defined + + .ref XEWILPAL + + .ref plyr_shoot + .ref plyr_pass + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_resetseq + .ref seq_stand + .ref seq_snd + +; .ref seq_lay_up_start + .ref seq_jam_speech + .ref seq_call_name + .ref rndrng0 + +JAM_NONE equ 0 +JAM_EASY equ 1 +JAM_MED equ 2 +JAM_GOOD equ 3 +JAM_GREAT equ 4 + +;symbols defined in this file + +; .def T2DUNK3,T2DUNK4,T2DUNK5 +; .def T2DUNK6,T2DUNK7,T2DUNK8,T2DUNK9 +; .def T2DUNK10 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + .ref plyr_lob_ball + + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + .asg DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M,DFLGS + +;#* +;dnkr_lob_ball_t +; .word NOJUMP_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; .asg 3,N +;#1 +;#2 +; W0 +;#3 +; WLW 2,M3SPRLA1,F +; WLW 3,M3SPRLA2,F +; WLW 3,M3SPRLA3,F +; WLW 3,M3SPRLA4,F +; WLW 3,M3SPRLA5,F +; WL -1,plyr_lob_ball +; WLW 2,M3SPRLA5,F +; WLW 3,M3SPRLA6,F +; WLW 3,M3SPRLA7,F +; WLW 50,M3SPRLA8,F +; WLW 3,M3SPRLA9,F +; WLW 3,M3SPRLA10,F +; WLW -1,seq_newdir,1*16 +; W0 +;#4 +;#5 +; W0 + +#* +quicklay_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 70,S1SETLA5,F + WLW 2,S1SETLA5,F + WLW 70,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WL -1,pick_rand2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 70,S2HBHLA6,F + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 70,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WL -1,pick_rand3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 70,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 70,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 2,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA2,F + WLW 70,S3HBHLA3,F + WLW 3,S3HBHLA3,F + WLW 70,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 70,S4SETLA5,F + WLW 1,S4SETLA5,F + WLW 70,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 70,S5SETLA5,F + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 70,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + +pick_rand2 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand2_tbl,a0 + move *a0,a0,L + jrz rs2 + move a0,b4 ;sequence to run +rs2 + rets + + +rand2_tbl + .long #3a,0,0,#3a,0,#3a,0 + + + +pick_rand3 + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi rand3_tbl,a0 + move *a0,a0,L + jrz rs3 + move a0,b4 ;sequence to run +; move a0,*a13(plyr_ani1st_p) +rs3 rets + + +rand3_tbl + .long #3a,0,#3a,0,0,#3a,0 +; .long #3a,#3a,#3a,#3a,#3a,#3a,#3a + + +#* +layup_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WL -1,seq_jump + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F +; WLW 40,S1SETLA5,F + WLW 3,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + +#2 + WLW 2,S2HBHLA1,F + WL -1,seq_jump + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F +; WLW 40,S2HBHLA6,F + WLW 3,S2HBHLA6,F + WL -1,plyr_shoot + WLW 1,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,M3SPRLA1,F + WL -1,seq_jump + WLW 3,M3SPRLA2,F + WLW 3,M3SPRLA3,F + WLW 3,M3SPRLA4,F + WLW 3,M3SPRLA5,F + WL -1,plyr_shoot + WLW 2,M3SPRLA5,F + WLW 3,M3SPRLA6,F + WLW 3,M3SPRLA7,F + WLW 50,M3SPRLA8,F + WLW 3,M3SPRLA9,F + WLW 3,M3SPRLA10,F + WLW -1,seq_newdir,1*16 + W0 + +#3a + WLW 1,S3HBHLA1,F + WL -1,seq_jump + WLW 3,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 3,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 2,S4SETLA1,F + WL -1,seq_jump + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 3,S4SETLA5,F + WL -1,plyr_shoot + WLW 3,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 + +#5 + WLW 3,S5SETLA1,F + WL -1,seq_jump + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 3,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +layupreb_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +#1 + WLW 2,S1SETLA1,F + WLW 3,S1SETLA2,F + WLW 3,S1SETLA3,F + WLW 3,S1SETLA4,F + WLW 1,S1SETLA5,F + WL -1,plyr_shoot + WLW 2,S1SETLA5,F + WLW 50,S1SETLA6,F + WLW 3,S1SETLA7,F + WLW 3,S1SETLA8,F + WLW 3,S1SETLA9,F + WLW -1,seq_newdir,0*16 + W0 + + +#2 + WLW 2,S2HBHLA1,F + WLW 3,S2HBHLA2,F + WLW 3,S2HBHLA3,F + WLW 3,S2HBHLA4,F + WLW 3,S2HBHLA5,F + WLW 1,S2HBHLA6,F + WL -1,plyr_shoot + WLW 2,S2HBHLA6,F + WLW 3,S2HBHLA7,F + WLW 3,S2HBHLA8,F + WLW 50,S2HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#3 + WLW 2,S3HBHLA1,F + WLW 3,S3HBHLA2,F + WLW 1,S3HBHLA3,F + WL -1,plyr_shoot + WLW 3,S3HBHLA3,F + WLW 50,S3HBHLA4,F + WLW 3,S3HBHLA6,F + WLW 3,S3HBHLA7,F + WLW 3,S3HBHLA8,F + WLW 3,S3HBHLA9,F + WLW -1,seq_newdir,1*16 + W0 + +#4 + WLW 3,S4SETLA1,F + WLW 3,S4SETLA2,F + WLW 3,S4SETLA3,F + WLW 3,S4SETLA4,F + WLW 1,S4SETLA5,F + WL -1,plyr_shoot + WLW 1,S4SETLA5,F + WLW 50,S4SETLA6,F + WLW 3,S4SETLA7,F + WLW 3,S4SETLA8,F + WLW 3,S4SETLA9,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,S5SETLA1,F + WLW 3,S5SETLA2,F + WLW 3,S5SETLA3,F + WLW 3,S5SETLA4,F + WLW 1,S5SETLA5,F + WL -1,plyr_shoot + WLW 2,S5SETLA5,F + WLW 3,S5SETLA6,F + WLW 50,S5SETLA7,F + WLW 3,S5SETLA8,F + WLW 3,S5SETLA9,F + WLW 3,S5SETLA10,F + WLW -1,seq_newdir,3*16 + W0 + + + .end + + + + + diff --git a/SRC/PLYRRSEQ.ASM b/SRC/PLYRRSEQ.ASM new file mode 100644 index 0000000..cc25eda --- /dev/null +++ b/SRC/PLYRRSEQ.ASM @@ -0,0 +1,1024 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrrseq.tbl" + + + +;sounds external + +;swipe_snd .word >f584,>4,>8119,0 ;swipe at ball + +;symbols externally defined + +; .ref plyr_pass,plyr_shoot +; .ref seq_newdir +; .ref seq_slamball +; .ref seq_strtdunk +; .ref seq_jump +; .ref seq_jump2 + .ref seq_resetseq +; .ref seq_stand +; .ref seq_stealstand +; .ref seq_block,seq_push,seq_rebounda +; .ref seq_run +; .ref seq_snd +; .ref clr_autorbnd + +;FIX!!!! We can get rid of the pal data for these pals in imgpal3 before +;game ships! Check zwilpal, etc. All unused pals! + .ref PLYRFIX_P + .ref NEWILFIX + +;symbols defined in this file + + .def w3run1 + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +#* +run_t +runturb_t + .word 0 + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +;runturb_t +; .word 0 +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + +;FIX!!! +;Could reduce overhead here! + +#1 + .ref seq_ck_turbo + .ref seq_skip_1frm + .ref seq_ck_drib_turbo + + WL -1,seq_ck_turbo + WLW 1,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 2,w1run1,F + WL -1,seq_skip_1frm + WLW 1,w1run1,F + WL -1,seq_ck_turbo + WLW 3,w1run2,F + WL -1,seq_skip_1frm + WLW 2,w1run2,F + WL -1,seq_ck_turbo + WLW 3,w1run3,F + WL -1,seq_skip_1frm + WLW 2,w1run3,F + WL -1,seq_ck_turbo + WLW 3,w1run4,F + WL -1,seq_skip_1frm + WLW 2,w1run4,F + WL -1,seq_ck_turbo + WLW 3,w1run5,F + WL -1,seq_skip_1frm + WLW 2,w1run5,F + WL -1,seq_ck_turbo + WLW 3,w1run6,F + WL -1,seq_skip_1frm + WLW 2,w1run6,F + WL -1,seq_ck_turbo + WLW 3,w1run7,F + WL -1,seq_skip_1frm + WLW 2,w1run7,F + WL -1,seq_ck_turbo + WLW 3,w1run8,F + WL -1,seq_skip_1frm + WLW 2,w1run8,F + WL -1,seq_ck_turbo + WLW 3,w1run9,F + WL -1,seq_skip_1frm + WLW 2,w1run9,F + WL -1,seq_ck_turbo + WLW 3,w1run10,F + WL -1,seq_skip_1frm + WLW 2,w1run10,F + WL -1,seq_ck_turbo + WLW 3,w1run11,F + WL -1,seq_skip_1frm + WLW 2,w1run11,F + W0 +#2 + WL -1,seq_ck_turbo + WLW 1,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 2,w2run1,F + WL -1,seq_skip_1frm + WLW 1,w2run1,F + WL -1,seq_ck_turbo + WLW 3,w2run2,F + WL -1,seq_skip_1frm + WLW 2,w2run2,F + WL -1,seq_ck_turbo + WLW 3,w2run3,F + WL -1,seq_skip_1frm + WLW 2,w2run3,F + WL -1,seq_ck_turbo + WLW 3,w2run4,F + WL -1,seq_skip_1frm + WLW 2,w2run4,F + WL -1,seq_ck_turbo + WLW 3,w2run5,F + WL -1,seq_skip_1frm + WLW 2,w2run5,F + WL -1,seq_ck_turbo + WLW 3,w2run6,F + WL -1,seq_skip_1frm + WLW 2,w2run6,F + WL -1,seq_ck_turbo + WLW 3,w2run7,F + WL -1,seq_skip_1frm + WLW 2,w2run7,F + WL -1,seq_ck_turbo + WLW 3,w2run8,F + WL -1,seq_skip_1frm + WLW 2,w2run8,F + WL -1,seq_ck_turbo + WLW 3,w2run9,F + WL -1,seq_skip_1frm + WLW 2,w2run9,F + WL -1,seq_ck_turbo + WLW 3,w2run10,F + WL -1,seq_skip_1frm + WLW 2,w2run10,F + WL -1,seq_ck_turbo + WLW 3,w2run11,F + WL -1,seq_skip_1frm + WLW 2,w2run11,F + W0 +#3 +; WL -1,seq_run + WL -1,seq_ck_turbo + WLW 3,w3run1,F + WL -1,seq_skip_1frm + WLW 2,w3spr1,F + WL -1,seq_ck_turbo + WLW 3,w3run2,F + WL -1,seq_skip_1frm + WLW 2,w3spr2,F + WL -1,seq_ck_turbo + WLW 3,w3run3,F + WL -1,seq_skip_1frm + WLW 2,w3spr3,F + WL -1,seq_ck_turbo + WLW 3,w3run4,F + WL -1,seq_skip_1frm + WLW 2,w3spr4,F + WL -1,seq_ck_turbo + WLW 3,w3run5,F + WL -1,seq_skip_1frm + WLW 2,w3spr5,F + WL -1,seq_ck_turbo + WLW 3,w3run6,F + WL -1,seq_skip_1frm + WLW 2,w3spr6,F + WL -1,seq_ck_turbo + WLW 3,w3run7,F + WL -1,seq_skip_1frm + WLW 2,w3spr7,F + WL -1,seq_ck_turbo + WLW 3,w3run8,F + WL -1,seq_skip_1frm + WLW 2,w3spr8,F + WL -1,seq_ck_turbo + WLW 3,w3run9,F + WL -1,seq_skip_1frm + WLW 2,w3spr9,F + WL -1,seq_ck_turbo + WLW 3,w3run10,F + WL -1,seq_skip_1frm + WLW 2,w3spr10,F + WL -1,seq_ck_turbo + WLW 3,w3run11,F + WL -1,seq_skip_1frm + WLW 2,w3spr11,F + W0 +#4 + WL -1,seq_ck_turbo + WLW 3,w4run1,F + WL -1,seq_skip_1frm + WLW 2,w4spr1,F + WL -1,seq_ck_turbo + WLW 3,w4run2,F + WL -1,seq_skip_1frm + WLW 2,w4spr2,F + WL -1,seq_ck_turbo + WLW 3,w4run3,F + WL -1,seq_skip_1frm + WLW 2,w4spr3,F + WL -1,seq_ck_turbo + WLW 3,w4run4,F + WL -1,seq_skip_1frm + WLW 2,w4spr4,F + WL -1,seq_ck_turbo + WLW 3,w4run5,F + WL -1,seq_skip_1frm + WLW 2,w4spr5,F + WL -1,seq_ck_turbo + WLW 3,w4run6,F + WL -1,seq_skip_1frm + WLW 2,w4spr6,F + WL -1,seq_ck_turbo + WLW 3,w4run7,F + WL -1,seq_skip_1frm + WLW 2,w4spr7,F + WL -1,seq_ck_turbo + WLW 3,w4run8,F + WL -1,seq_skip_1frm + WLW 2,w4spr8,F + WL -1,seq_ck_turbo + WLW 3,w4run9,F + WL -1,seq_skip_1frm + WLW 2,w4spr9,F + WL -1,seq_ck_turbo + WLW 3,w4run10,F + WL -1,seq_skip_1frm + WLW 2,w4spr10,F + WL -1,seq_ck_turbo + WLW 3,w4run11,F + WL -1,seq_skip_1frm + WLW 2,w4spr11,F + W0 +#5 + WL -1,seq_ck_turbo + WLW 3,w5run1,F + WL -1,seq_skip_1frm + WLW 2,w5run1,F + WL -1,seq_ck_turbo + WLW 3,w5run2,F + WL -1,seq_skip_1frm + WLW 2,w5run2,F + WL -1,seq_ck_turbo + WLW 3,w5run3,F + WL -1,seq_skip_1frm + WLW 2,w5run3,F + WL -1,seq_ck_turbo + WLW 3,w5run4,F + WL -1,seq_skip_1frm + WLW 2,w5run4,F + WL -1,seq_ck_turbo + WLW 3,w5run5,F + WL -1,seq_skip_1frm + WLW 2,w5run5,F + WL -1,seq_ck_turbo + WLW 3,w5run6,F + WL -1,seq_skip_1frm + WLW 2,w5run6,F + WL -1,seq_ck_turbo + WLW 3,w5run7,F + WL -1,seq_skip_1frm + WLW 2,w5run7,F + WL -1,seq_ck_turbo + WLW 3,w5run8,F + WL -1,seq_skip_1frm + WLW 2,w5run8,F + WL -1,seq_ck_turbo + WLW 3,w5run9,F + WL -1,seq_skip_1frm + WLW 2,w5run9,F + WL -1,seq_ck_turbo + WLW 3,w5run10,F + WL -1,seq_skip_1frm + WLW 2,w5run10,F + WL -1,seq_ck_turbo + WLW 3,w5run11,F + WL -1,seq_skip_1frm + WLW 2,w5run11,F + W0 + +#* +rundrib_t +rundribturb_t + .word DRIBBLE_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N + +; .word DRIBBLE_M +; .long 0 +; .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a +; .asg 2,N2 + + + +#1 + WL -1,seq_ck_drib_turbo + WLW 1,w1drun1,F + WL -1,seq_skip_1frm + WLW 1,w1drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w1drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w1drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w1drun2,F + WL -1,seq_skip_1frm + WLW 2,w1drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun3,F + WL -1,seq_skip_1frm + WLW 2,w1drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun4,F + WL -1,seq_skip_1frm + WLW 2,w1drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun5,F + WL -1,seq_skip_1frm + WLW 2,w1drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun6,F + WL -1,seq_skip_1frm + WLW 2,w1drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun7,F + WL -1,seq_skip_1frm + WLW 2,w1drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun8,F + WL -1,seq_skip_1frm + WLW 2,w1drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun9,F + WL -1,seq_skip_1frm + WLW 2,w1drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun10,F + WL -1,seq_skip_1frm + WLW 2,w1drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w1drun11,F + WL -1,seq_skip_1frm + WLW 2,w1drun11,F + W0 +#2 + WL -1,seq_ck_drib_turbo + WLW 1,w2drun1,F + WL -1,seq_skip_1frm + WLW 1,w2drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w2drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w2drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w2drun2,F + WL -1,seq_skip_1frm + WLW 2,w2drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun3,F + WL -1,seq_skip_1frm + WLW 2,w2drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun4,F + WL -1,seq_skip_1frm + WLW 2,w2drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun5,F + WL -1,seq_skip_1frm + WLW 2,w2drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun6,F + WL -1,seq_skip_1frm + WLW 2,w2drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun7,F + WL -1,seq_skip_1frm + WLW 2,w2drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun8,F + WL -1,seq_skip_1frm + WLW 2,w2drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun9,F + WL -1,seq_skip_1frm + WLW 2,w2drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun10,F + WL -1,seq_skip_1frm + WLW 2,w2drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w2drun11,F + WL -1,seq_skip_1frm + WLW 2,w2drun11,F + W0 +#3 + WL -1,seq_ck_drib_turbo + WLW 1,w3drun1,F + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w3drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w3dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w3drun2,F + WL -1,seq_skip_1frm + WLW 2,w3dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun3,F + WL -1,seq_skip_1frm + WLW 2,w3dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun4,F + WL -1,seq_skip_1frm + WLW 2,w3dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun5,F + WL -1,seq_skip_1frm + WLW 2,w3dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun6,F + WL -1,seq_skip_1frm + WLW 2,w3dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun7,F + WL -1,seq_skip_1frm + WLW 2,w3dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun8,F + WL -1,seq_skip_1frm + WLW 2,w3dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun9,F + WL -1,seq_skip_1frm + WLW 2,w3dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun10,F + WL -1,seq_skip_1frm + WLW 2,w3dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w3drun11,F + WL -1,seq_skip_1frm + WLW 2,w3dspr11,F + W0 +#4 + WL -1,seq_ck_drib_turbo + WLW 1,w4drun1,F + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F + WL -1,seq_ck_drib_turbo + WLW 2,w4drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w4dspr1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w4drun2,F + WL -1,seq_skip_1frm + WLW 2,w4dspr2,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun3,F + WL -1,seq_skip_1frm + WLW 2,w4dspr3,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun4,F + WL -1,seq_skip_1frm + WLW 2,w4dspr4,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun5,F + WL -1,seq_skip_1frm + WLW 2,w4dspr5,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun6,F + WL -1,seq_skip_1frm + WLW 2,w4dspr6,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun7,F + WL -1,seq_skip_1frm + WLW 2,w4dspr7,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun8,F + WL -1,seq_skip_1frm + WLW 2,w4dspr8,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun9,F + WL -1,seq_skip_1frm + WLW 2,w4dspr9,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun10,F + WL -1,seq_skip_1frm + WLW 2,w4dspr10,F + WL -1,seq_ck_drib_turbo + WLW 3,w4drun11,F + WL -1,seq_skip_1frm + WLW 2,w4dspr11,F + W0 +#5 + WL -1,seq_ck_drib_turbo + WLW 1,w5drun1,F + WL -1,seq_skip_1frm + WLW 1,w5drun1,F + WL -1,seq_ck_drib_turbo + WLW 2,w5drun1,F|M_YF + WL -1,seq_skip_1frm + WLW 1,w5drun1,F|M_YF + WL -1,seq_ck_drib_turbo + WLW 3,w5drun2,F + WL -1,seq_skip_1frm + WLW 2,w5drun2,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun3,F + WL -1,seq_skip_1frm + WLW 2,w5drun3,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun4,F + WL -1,seq_skip_1frm + WLW 2,w5drun4,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun5,F + WL -1,seq_skip_1frm + WLW 2,w5drun5,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun6,F + WL -1,seq_skip_1frm + WLW 2,w5drun6,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun7,F + WL -1,seq_skip_1frm + WLW 2,w5drun7,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun8,F + WL -1,seq_skip_1frm + WLW 2,w5drun8,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun9,F + WL -1,seq_skip_1frm + WLW 2,w5drun9,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun10,F + WL -1,seq_skip_1frm + WLW 2,w5drun10,F + WL -1,seq_ck_drib_turbo + WLW 3,w5drun11,F + WL -1,seq_skip_1frm + WLW 2,w5drun11,F + W0 + + + +;#1 +; WLW 1,w1drun1,F +; WLW N-1,w1drun1,F|M_YF +; WLW N,w1drun2,F +; WLW N,w1drun3,F +; WLW N,w1drun4,F +; WLW N,w1drun5,F +; WLW N,w1drun6,F +; WLW N,w1drun7,F +; WLW N,w1drun8,F +; WLW N,w1drun9,F +; WLW N,w1drun10,F +; WLW N,w1drun11,F +; W0 +;#1a +; WLW 1,w1dspr1,F +; WLW N2-1,w1dspr1,F|M_YF +; WLW N2,w1dspr2,F +; WLW N2,w1dspr3,F +; WLW N2,w1dspr4,F +; WLW N2,w1dspr5,F +; WLW N2,w1dspr6,F +; WLW N2,w1dspr7,F +; WLW N2,w1dspr8,F +; WLW N2,w1dspr9,F +; WLW N2,w1dspr10,F +; WLW N2,w1dspr11,F +; W0 +;#2 +; WLW 1,w2drun1,F +; WLW N-1,w2drun1,F|M_YF +; WLW N,w2drun2,F +; WLW N,w2drun3,F +; WLW N,w2drun4,F +; WLW N,w2drun5,F +; WLW N,w2drun6,F +; WLW N,w2drun7,F +; WLW N,w2drun8,F +; WLW N,w2drun9,F +; WLW N,w2drun10,F +; WLW N,w2drun11,F +; W0 +;#2a +; WLW 1,w2dspr1,F +; WLW N2-1,w2dspr1,F|M_YF +; WLW N2,w2dspr2,F +; WLW N2,w2dspr3,F +; WLW N2,w2dspr4,F +; WLW N2,w2dspr5,F +; WLW N2,w2dspr6,F +; WLW N2,w2dspr7,F +; WLW N2,w2dspr8,F +; WLW N2,w2dspr9,F +; WLW N2,w2dspr10,F +; WLW N2,w2dspr11,F +; W0 +;#3 +; WLW 1,w3drun1,F +; WLW N-1,w3drun1,F|M_YF +; WLW N,w3drun2,F +; WLW N,w3drun3,F +; WLW N,w3drun4,F +; WLW N,w3drun5,F +; WLW N,w3drun6,F +; WLW N,w3drun7,F +; WLW N,w3drun8,F +; WLW N,w3drun9,F +; WLW N,w3drun10,F +; WLW N,w3drun11,F +; W0 +;#3a +; WLW 1,w3dspr1,F +; WLW N2-1,w3dspr1,F|M_YF +; WLW N2,w3dspr2,F +; WLW N2,w3dspr3,F +; WLW N2,w3dspr4,F +; WLW N2,w3dspr5,F +; WLW N2,w3dspr6,F +; WLW N2,w3dspr7,F +; WLW N2,w3dspr8,F +; WLW N2,w3dspr9,F +; WLW N2,w3dspr10,F +; WLW N2,w3dspr11,F +; W0 +;#4 +; WLW 1,w4drun1,F +; WLW N-1,w4drun1,F|M_YF +; WLW N,w4drun2,F +; WLW N,w4drun3,F +; WLW N,w4drun4,F +; WLW N,w4drun5,F +; WLW N,w4drun6,F +; WLW N,w4drun7,F +; WLW N,w4drun8,F +; WLW N,w4drun9,F +; WLW N,w4drun10,F +; WLW N,w4drun11,F +; W0 +;#4a +; WLW 1,w4dspr1,F +; WLW N2-1,w4dspr1,F|M_YF +; WLW N2,w4dspr2,F +; WLW N2,w4dspr3,F +; WLW N2,w4dspr4,F +; WLW N2,w4dspr5,F +; WLW N2,w4dspr6,F +; WLW N2,w4dspr7,F +; WLW N2,w4dspr8,F +; WLW N2,w4dspr9,F +; WLW N2,w4dspr10,F +; WLW N2,w4dspr11,F +; W0 +;#5 +; WLW 1,w5drun1,F +; WLW N-1,w5drun1,F|M_YF +; WLW N,w5drun2,F +; WLW N,w5drun3,F +; WLW N,w5drun4,F +; WLW N,w5drun5,F +; WLW N,w5drun6,F +; WLW N,w5drun7,F +; WLW N,w5drun8,F +; WLW N,w5drun9,F +; WLW N,w5drun10,F +; WLW N,w5drun11,F +; W0 +;#5a +; WLW 1,w5dspr1,F +; WLW N2-1,w5dspr1,F|M_YF +; WLW N2,w5dspr2,F +; WLW N2,w5dspr3,F +; WLW N2,w5dspr4,F +; WLW N2,w5dspr5,F +; WLW N2,w5dspr6,F +; WLW N2,w5dspr7,F +; WLW N2,w5dspr8,F +; WLW N2,w5dspr9,F +; WLW N2,w5dspr10,F +; WLW N2,w5dspr11,F +; W0 + + +;nba_run2.img +;---> !STANCE1,!STANCE2,!STANCE3,!STANCE4,!STANCE5,w1dfcr1,w1dfcr2,w1dfcr3 +;---> w1dfcr4,w1dfcr5,w1dfcr6,w1dfcr7,w1dfcr8,w1dfcr9,w1dfcr10,w2dfcr1 +;---> w2dfcr2,w2dfcr3,w2dfcr4,w2dfcr5,w2dfcr6,w3dfcr1,w3dfcr2,w3dfcr3,w3dfcr4 +;---> w3dfcr5,w3dfcr6,w3dfcr7,w3dfcr8,w3dfcr9,w4dfcr1,w4dfcr2,w4dfcr3,w4dfcr4 +;---> w4dfcr5,w4dfcr6,w4dfcr7,w4dfcr8,w4dfcr9,w5dfcr1,w5dfcr2,w5dfcr3,w5dfcr4 +;---> w5dfcr5,w5dfcr6,w5dfcr7,w5dfcr8,w5dfcr9 + +;walkfdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wfdef1_l,#wfdef2_l,#wfdef3_l,#wfdef4_l +; .long #wfdef5_l,#wfdef4_l,#wfdef3_l,#wfdef2_l +; +;#wfdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd6,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd2,F +; W0 +;#wfdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd6,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd2,F +; W0 +;#wfdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd6,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd2,F +; W0 +;#wfdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd6,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd2,F +; W0 +;#wfdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd6,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd2,F +; W0 +; +; +;walkbdef_t +; .word WALK_M +; .long seq_resetseq +; .long #wbdef1_l,#wbdef2_l,#wbdef3_l,#wbdef4_l +; .long #wbdef5_l,#wbdef4_l,#wbdef3_l,#wbdef2_l +; +;#wbdef1_l +; WLW 3,w1defwd1,F +; WLW 3,w1defwd2,F +; WLW 3,w1defwd3,F +; WLW 3,w1defwd4,F +; WLW 3,w1defwd5,F +; WLW 3,w1defwd6,F +; W0 +;#wbdef2_l +; WLW 3,w2defwd1,F +; WLW 3,w2defwd2,F +; WLW 3,w2defwd3,F +; WLW 3,w2defwd4,F +; WLW 3,w2defwd5,F +; WLW 3,w2defwd6,F +; W0 +;#wbdef3_l +; WLW 3,w3defwd1,F +; WLW 3,w3defwd2,F +; WLW 3,w3defwd3,F +; WLW 3,w3defwd4,F +; WLW 3,w3defwd5,F +; WLW 3,w3defwd6,F +; W0 +;#wbdef4_l +; WLW 3,w4defwd1,F +; WLW 3,w4defwd2,F +; WLW 3,w4defwd3,F +; WLW 3,w4defwd4,F +; WLW 3,w4defwd5,F +; WLW 3,w4defwd6,F +; W0 +;#wbdef5_l +; WLW 3,w5defwd1,F +; WLW 3,w5defwd2,F +; WLW 3,w5defwd3,F +; WLW 3,w5defwd4,F +; WLW 3,w5defwd5,F +; WLW 3,w5defwd6,F +; W0 + + +stnddef_t + .word EASYSTAG_M + .long 0 + .long #sdef1_l,#sdef2_l,#sdef3_l,#sdef4_l + .long #sdef5_l,#sdef4_l,#sdef3_l,#sdef2_l + + +#sdef1_l + WLW 5,w1defst1,F + WLW 5,w1defst2,F + WLW 5,w1defst3,F + WLW 5,w1defst4,F + WLW 5,w1defst3,F + WLW 5,w1defst2,F + W0 +#sdef2_l + WLW 5,w2defst1,F + WLW 5,w2defst2,F + WLW 5,w2defst3,F + WLW 5,w2defst4,F + WLW 5,w2defst3,F + WLW 5,w2defst2,F + W0 +#sdef3_l + WLW 5,w3defst1,F + WLW 5,w3defst2,F + WLW 5,w3defst3,F + WLW 5,w3defst4,F + WLW 5,w3defst3,F + WLW 5,w3defst2,F + W0 +#sdef4_l + WLW 5,w4defst1,F + WLW 5,w4defst2,F + WLW 5,w4defst3,F + WLW 5,w4defst4,F + WLW 5,w4defst3,F + WLW 5,w4defst2,F + W0 +#sdef5_l + WLW 5,w5defst1,F + WLW 5,w5defst2,F + WLW 5,w5defst3,F + WLW 5,w5defst4,F + WLW 5,w5defst3,F + WLW 5,w5defst2,F + W0 + +#* +walkfdef_t +walkbdef_t +walkldef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr2,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr6,F + W0 +#2 + WLW 2,w2dfcr1,F +; WLW 2,w2dfcr6,F + WLW 2,w2dfcr5,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr2,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr9,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr2,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr9,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr2,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr9,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr2,F + W0 + +#* +walkrdef_t + .word WALK_M + .long seq_resetseq + .long #1,#2,#3,#4 + .long #5,#4,#3,#2 + +#1 + WLW 2,w1dfcr1,F + WLW 2,w1dfcr6,F + WLW 2,w1dfcr5,F + WLW 2,w1dfcr4,F + WLW 2,w1dfcr3,F + WLW 2,w1dfcr2,F + W0 +#2 + WLW 2,w2dfcr1,F + WLW 2,w2dfcr2,F + WLW 2,w2dfcr3,F + WLW 2,w2dfcr4,F + WLW 2,w2dfcr5,F +; WLW 2,w2dfcr6,F + W0 +#3 + WLW 2,w3dfcr1,F + WLW 2,w3dfcr2,F + WLW 2,w3dfcr3,F + WLW 2,w3dfcr4,F + WLW 2,w3dfcr5,F + WLW 2,w3dfcr6,F + WLW 2,w3dfcr7,F + WLW 2,w3dfcr8,F + WLW 2,w3dfcr9,F + W0 +#4 + WLW 2,w4dfcr1,F + WLW 2,w4dfcr2,F + WLW 2,w4dfcr3,F + WLW 2,w4dfcr4,F + WLW 2,w4dfcr5,F + WLW 2,w4dfcr6,F + WLW 2,w4dfcr7,F + WLW 2,w4dfcr8,F + WLW 2,w4dfcr9,F + W0 +#5 + WLW 2,w5dfcr1,F + WLW 2,w5dfcr2,F + WLW 2,w5dfcr3,F + WLW 2,w5dfcr4,F + WLW 2,w5dfcr5,F + WLW 2,w5dfcr6,F + WLW 2,w5dfcr7,F + WLW 2,w5dfcr8,F + WLW 2,w5dfcr9,F + W0 + + .end + + + \ No newline at end of file diff --git a/SRC/PLYRSEQ.ASM b/SRC/PLYRSEQ.ASM new file mode 100644 index 0000000..c1ba149 --- /dev/null +++ b/SRC/PLYRSEQ.ASM @@ -0,0 +1,2882 @@ +;I'm not putting initials in plyrseq files! +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrseq.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 1,SEQT + .include "plyr.equ" + .include "plyrseq.glo" + .include "plyrseq3.glo" + .include "behind.tbl" + .include "plyrdsp.tbl" + .include "plyrjsht.tbl" + .include "dunks.glo" + .include "world.equ" + +;sounds external + + .ref swipe_snd + +;symbols externally defined + + .ref plyr_pass,plyr_shoot + .ref seq_newdir + .ref seq_slamball + .ref seq_strtdunk + .ref seq_jump + .ref seq_jump2 + .ref seq_resetseq + .ref seq_stand + .ref seq_stealstand + .ref seq_block,seq_push,seq_rebounda + .ref seq_run + .ref seq_snd + .ref clr_autorbnd + + .ref rndrng0 + .ref seq_handle_fade_away,seq_handle_fadeaside + .ref fades_sp,fadeaway_sp,leans_bck_sp + .ref leans_sp,leans_in_sp,pull_jmpr_sp + .ref bslne_lnr_sp + .ref seq_goto_line +;symbols defined in this file + +; .def w3run1 +; .def w3desp1 +; .def w1blok3,w2blok3,w4blok3,w5blok3 +; .def w1blok2,w2blok2,w4blok2,w5blok2 +; .def w5dst1 + + .ref w1jupa + .ref w2jupa + .ref w3jupa + .ref w4jupa + .ref w5jupa + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + .bss keep_xvel,32 + .bss keep_zvel,32 + + .text + + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + +;#* +;putback_t +;;(very close range only) +;; .word DUNK_M|NOJUMP_M|NOJOY_M|NOCOLLP_M ;DFLGS +; .word NOJUMP_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4 +; .long #5,#4,#3,#2 +;#1 +; WLW 3,w2blokl1,FF +; WLW 3,w2blokl2,FF +; WLW 3,w2blokl3,FF +; WLL -1,seq_block,w2blokl4 +; WLW 27,w2blokl4,FF +; WLW 500,w2blokl5,FF +; WLW 3,w2blokl6,FF +; WLW 3,w2blokl7,FF +; WLW -1,seq_newdir,1*16 +; W0 +; +;; WLW 3,w2blokl1,F +;; WLLW -1,seq_strtdunk,w2blokl3,19 +;; WLW 3,w2blokl2,F +;; WLW 3,w2blokl3,F +;; WLW 12,w2blokl4,F +;; WLL -1,check_own_ball,#1a +;; WLW 1,w2blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w2blokl5,F +;; WLW 3,w2blokl6,F +;; WLW 3,w2blokl7,F +;; WLW -1,seq_newdir,1*16 +;; W0 +; +;#1a +; WLW 500,w2blokl4,F +; WLW 3,w2blokl7,F +; WLW -1,seq_newdir,1*16 +; W0 +; +; +;#2 +;#3 +;#4 +; WLW 3,w3blokl1,FF +; WLW 3,w3blokl2,FF +; WLW 3,w3blokl3,FF +; WLL -1,seq_block,w3blokl4 +; WLW 27,w3blokl4,FF +; WLW 500,w3blokl5,FF +; WLW 3,w3blokl6,FF +; WLW 3,w3blokl7,FF +; WLW -1,seq_newdir,2*16 +; W0 +; +;; WLW 3,w3blokl1,F +;; WLLW -1,seq_strtdunk,w3blokl3,19 +;; WLW 3,w3blokl2,F +;; WLW 3,w3blokl3,F +;; WLW 12,w3blokl4,F +;; WLL -1,check_own_ball,#3a +;; WLW 1,w3blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w3blokl5,F +;; WLW 3,w3blokl6,F +;; WLW 3,w3blokl7,F +;; WLW -1,seq_newdir,2*16 +;; W0 +; +;#3a +; WLW 500,w3blokl4,F +; WLW 3,w3blokl7,F +; WLW -1,seq_newdir,2*16 +; W0 +; +;#5 +; WLW 3,w4blokl1,FF +; WLW 3,w4blokl2,FF +; WLW 3,w4blokl3,FF +; WLL -1,seq_block,w4blokl4 +; WLW 27,w4blokl4,FF +; WLW 500,w4blokl5,FF +; WLW 3,w4blokl6,FF +; WLW 3,w4blokl7,FF +; WLW -1,seq_newdir,3*16 +; W0 +; +;; WLW 3,w4blokl1,F +;; WLLW -1,seq_strtdunk,w4blokl3,19 +;; WLW 3,w4blokl2,F +;; WLW 3,w4blokl3,F +;; WLW 12,w4blokl4,F +;; WLL -1,check_own_ball,#5a +;; WLW 1,w4blokl5,F +;; WLW -1,seq_slamball,3 +;; WLL -1,seq_snd,put_back_sp +;; WLW 500,w4blokl5,F +;; WLW 3,w4blokl6,F +;; WLW 3,w4blokl7,F +;; WLW -1,seq_newdir,3*16 +;; W0 +;; +;#5a +; WLW 500,w4blokl4,F +; WLW 3,w4blokl7,F +; WLW -1,seq_newdir,3*16 +; W0 +; +; +;check_own_ball +; move *b4+,b0,L ;get Alternative ending for seq +; move *a13(plyr_ownball),a14 +; jrp cob_1 ;I own the ball, do reg. end +; move b0,b4 ;change to Alternative ending +;cob_1 rets + + +stnd2_t .word EASYSTAG_M + .long 0 + .long #s1_l,#s2_l,#s3_l,#s4_l + .long #s5_l,#s4_l,#s3_l,#s2_l +#s1_l + WLW 5,w1stand1,F + WLW 5,w1stand2,F + WLW 5,w1stand3,F + WLW 5,w1stand4,F + WLW 5,w1stand3,F + WLW 5,w1stand2,F + W0 +#s2_l + WLW 5,w2stand1,F + WLW 5,w2stand2,F + WLW 5,w2stand3,F + WLW 5,w2stand4,F + WLW 5,w2stand3,F + WLW 5,w2stand2,F + W0 +#s3_l + WLW 5,w3stand1,F + WLW 5,w3stand2,F + WLW 5,w3stand3,F + WLW 5,w3stand4,F + WLW 5,w3stand3,F + WLW 5,w3stand2,F + W0 +#s4_l + WLW 5,w4stand1,F + WLW 5,w4stand2,F + WLW 5,w4stand3,F + WLW 5,w4stand4,F + WLW 5,w4stand3,F + WLW 5,w4stand2,F + W0 +#s5_l + WLW 5,w5stand1,F + WLW 5,w5stand2,F + WLW 5,w5stand3,F + WLW 5,w5stand4,F + WLW 5,w5stand3,F + WLW 5,w5stand2,F + W0 + + +;stndwb_t +; .word EASYSTAG_M|NOMV_M +; .long 0 +; .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l +; .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l +; +;#stndwb1_l +; WLW 5,w1stwbl1,F +; WLW 5,w1stwbl2,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl4,F +; WLW 5,w1stwbl3,F +; WLW 5,w1stwbl2,F +; W0 +;#stndwb2_l +; WLW 5,w2stwbl1,F +; WLW 5,w2stwbl2,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl4,F +; WLW 5,w2stwbl3,F +; WLW 5,w2stwbl2,F +; W0 +;#stndwb3_l +; WLW 5,w3stwbl1,F +; WLW 5,w3stwbl2,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl4,F +; WLW 5,w3stwbl3,F +; WLW 5,w3stwbl2,F +; W0 +;#stndwb4_l +; WLW 5,w4stwbl1,F +; WLW 5,w4stwbl2,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl4,F +; WLW 5,w4stwbl3,F +; WLW 5,w4stwbl2,F +; W0 +;#stndwb5_l +; WLW 5,w5stwbl1,F +; WLW 5,w5stwbl2,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl4,F +; WLW 5,w5stwbl3,F +; WLW 5,w5stwbl2,F +; W0 + +stnddrib_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd1_l,#stndd2_l,#stndd3_l,#stndd4_l + .long #stndd5_l,#stndd4_l,#stndd3_l,#stndd2_l + +#stndd1_l + WLW 1,w1dst1,F + WLW 2,w1dst1,F|M_YF + WLW 3,w1dst2,F + WLW 3,w1dst3,F + WLW 3,w1dst4,F + WLW 3,w1dst5,F + WLW 3,w1dst6,F + WLW 3,w1dst7,F + WLW 3,w1dst8,F + WLW 3,w1dst9,F + WLW 3,w1dst10,F + W0 + +#stndd2_l + WLW 1,w2dst1,F + WLW 2,w2dst1,F|M_YF + WLW 3,w2dst2,F + WLW 3,w2dst3,F + WLW 3,w2dst4,F + WLW 3,w2dst5,F + WLW 3,w2dst6,F + WLW 3,w2dst7,F + WLW 3,w2dst8,F + WLW 3,w2dst9,F + WLW 3,w2dst10,F + W0 + +#stndd3_l + WLW 1,w3dst1,F + WLW 2,w3dst1,F|M_YF + WLW 3,w3dst2,F + WLW 3,w3dst3,F + WLW 3,w3dst4,F + WLW 3,w3dst5,F + WLW 3,w3dst6,F + WLW 3,w3dst7,F + WLW 3,w3dst8,F + WLW 3,w3dst9,F + WLW 3,w3dst10,F + W0 + +#stndd4_l + WLW 1,w4dst1,F + WLW 2,w4dst1,F|M_YF + WLW 3,w4dst2,F + WLW 3,w4dst3,F + WLW 3,w4dst4,F + WLW 3,w4dst5,F + WLW 3,w4dst6,F + WLW 3,w4dst7,F + WLW 3,w4dst8,F + WLW 3,w4dst9,F + WLW 3,w4dst10,F + W0 + +#stndd5_l + WLW 1,w5dst1,F + WLW 2,w5dst1,F|M_YF + WLW 3,w5dst2,F + WLW 3,w5dst3,F + WLW 3,w5dst4,F + WLW 3,w5dst5,F + WLW 3,w5dst6,F + WLW 3,w5dst7,F + WLW 3,w5dst8,F + WLW 3,w5dst9,F + WLW 3,w5dst10,F + W0 + + +stnddrib2_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #stndd21_l,#stndd22_l,#stndd23_l,#stndd24_l + .long #stndd25_l,#stndd24_l,#stndd23_l,#stndd22_l + +#stndd21_l + WLW 1,w1drcr1,F + WLW 1,w1drcr1,F|M_YF + WLW 2,w1drcr2,F + WLW 2,w1drcr3,F + WLW 2,w1drcr4,F + WLW 2,w1drcr5,F + WLW 2,w1drcr6,F + WLW 2,w1drcr7,F + WLW 2,w1drcr8,F + WLW 2,w1drcr9,F + WLW 2,w1drcr10,F + WLW 2,w1drcr11,F + WLW 2,w1drcr12,F + W0 +#stndd22_l + WLW 1,w2drcr1,F + WLW 1,w2drcr1,F|M_YF + WLW 2,w2drcr2,F + WLW 2,w2drcr3,F + WLW 2,w2drcr4,F + WLW 2,w2drcr5,F + WLW 2,w2drcr6,F + WLW 2,w2drcr7,F + WLW 2,w2drcr8,F + WLW 2,w2drcr9,F + WLW 2,w2drcr10,F + WLW 2,w2drcr11,F + WLW 2,w2drcr12,F + W0 +#stndd23_l + WLW 1,w3drcr1,F + WLW 1,w3drcr1,F|M_YF + WLW 2,w3drcr2,F + WLW 2,w3drcr3,F + WLW 2,w3drcr4,F + WLW 2,w3drcr5,F + WLW 2,w3drcr6,F + WLW 2,w3drcr7,F + WLW 2,w3drcr8,F + WLW 2,w3drcr9,F + WLW 2,w3drcr10,F + WLW 2,w3drcr11,F + WLW 2,w3drcr12,F + W0 +#stndd24_l + WLW 1,w4drcr1,F + WLW 1,w4drcr1,F|M_YF + WLW 2,w4drcr2,F + WLW 2,w4drcr3,F + WLW 2,w4drcr4,F + WLW 2,w4drcr5,F + WLW 2,w4drcr6,F + WLW 2,w4drcr7,F + WLW 2,w4drcr8,F + WLW 2,w4drcr9,F + WLW 2,w4drcr10,F + WLW 2,w4drcr11,F + WLW 2,w4drcr12,F + W0 +#stndd25_l + WLW 1,w5drcr1,F + WLW 1,w5drcr1,F|M_YF + WLW 2,w5drcr2,F + WLW 2,w5drcr3,F + WLW 2,w5drcr4,F + WLW 2,w5drcr5,F + WLW 2,w5drcr6,F + WLW 2,w5drcr7,F + WLW 2,w5drcr8,F + WLW 2,w5drcr9,F + WLW 2,w5drcr10,F + WLW 2,w5drcr11,F + WLW 2,w5drcr12,F + W0 + + +stnddribdef_t + .word EASYSTAG_M|DRIBBLE_M + .long 0 + .long #sdd1_l,#sdd1_l,#sdd3_l,#sdd4_l + .long #sdd5_l,#sdd4_l,#sdd3_l,#sdd1_l +#sdd1_l + WLW 1,w1drcr1,F + WLW 2,w1drcr1,F|M_YF + WLW 3,w1drcr2,F + WLW 3,w1drcr3,F + WLW 3,w1drcr4,F + WLW 3,w1drcr5,F + WLW 3,w1drcr6,F + WLW 3,w1drcr7,F + WLW 3,w1drcr8,F + WLW 3,w1drcr9,F + WLW 3,w1drcr10,F + WLW 3,w1drcr11,F + WLW 3,w1drcr12,F + W0 +#sdd3_l + WLW 1,w3drcr1,F + WLW 2,w3drcr1,F|M_YF + WLW 3,w3drcr2,F + WLW 4,w3drcr3,F + WLW 4,w3drcr4,F + WLW 4,w3drcr5,F + WLW 4,w3drcr6,F + WLW 4,w3drcr7,F + WLW 4,w3drcr8,F + WLW 4,w3drcr9,F + WLW 4,w3drcr10,F + WLW 4,w3drcr11,F + WLW 4,w3drcr12,F + W0 +#sdd4_l + WLW 1,w4drcr1,F + WLW 2,w4drcr1,F|M_YF + WLW 3,w4drcr2,F + WLW 3,w4drcr3,F + WLW 3,w4drcr4,F + WLW 3,w4drcr5,F + WLW 3,w4drcr6,F + WLW 3,w4drcr7,F + WLW 3,w4drcr8,F + WLW 3,w4drcr9,F + WLW 3,w4drcr10,F + WLW 3,w4drcr11,F + WLW 3,w4drcr12,F + W0 +#sdd5_l + WLW 1,w5drcr1,F + WLW 2,w5drcr1,F|M_YF + WLW 3,w5drcr2,F + WLW 3,w5drcr3,F + WLW 3,w5drcr4,F + WLW 3,w5drcr5,F + WLW 3,w5drcr6,F + WLW 3,w5drcr7,F + WLW 3,w5drcr8,F + WLW 3,w5drcr9,F + WLW 3,w5drcr10,F + WLW 3,w5drcr11,F + WLW 3,w5drcr12,F + W0 + + +#* +block_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 + WLW 2,w1blokl1,F + WLW 2,w1blokl2,F + WLL -1,seq_block,w1blokl4 + WLW 3,w1blokl3,F + WLW 99,w1blokl4,F +;If art doesn't strike ball, we fall to ground and land! +;If art does strike ball, we jump into good_block_t sequence (Below) + WLW 3,w1blokl3,F + WLW 2,w1blokl2,F + WLW 2,w1blokl1,F + W0 +#2 + WLW 2,w2blokl1,F + WLW 2,w2blokl2,F + WLL -1,seq_block,w2blokl4 + WLW 3,w2blokl3,F + WLW 99,w2blokl4,F + WLW 3,w2blokl3,F + WLW 2,w2blokl2,F + WLW 2,w2blokl1,F + W0 +#3 + WLW 2,w3blokl1,F + WLW 2,w3blokl2,F + WLL -1,seq_block,w3blokl4 + WLW 3,w3blokl3,F + WLW 99,w3blokl4,F + WLW 3,w3blokl3,F + WLW 2,w3blokl2,F + WLW 2,w3blokl1,F + W0 +#4 + WLW 2,w4blokl1,F + WLW 2,w4blokl2,F + WLL -1,seq_block,w4blokl4 + WLW 3,w4blokl3,F + WLW 99,w4blokl4,F + WLW 3,w4blokl3,F + WLW 2,w4blokl2,F + WLW 2,w4blokl1,F + W0 +#5 + WLW 2,w5blokl1,F + WLW 2,w5blokl2,F + WLL -1,seq_block,w5blokl1 + WLW 3,w5blokl3,F + WLW 99,w5blokl4,F + WLW 3,w5blokl3,F + WLW 2,w5blokl2,F + WLW 2,w5blokl1,F + W0 + + +#* +;good_block_t +;;Block_t sequence successfully hit ball! +;;Follow thru with swat & possibly cradle ball (Stick to it) +; .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M +; .long seq_stand +; .long #1,#2,#3,#4,#5,#4,#3,#2 +; +; +;#1 +; WLW 3,w1blokl4,F +; WLW 3,w1blokl5,F +; WLW 99,w1blokl6,F +; WLW 3,w1blokl7,F +; WLW 3,w1blokl8,F +; W0 +;#2 +; WLW 3,w2blokl4,F +; WLW 3,w2blokl5,F +; WLW 99,w2blokl6,F +; WLW 3,w2blokl7,F +; WLW 3,w2blokl8,F +; W0 +;#3 +; WLW 3,w3blokl4,F +; WLW 99,w3blokl5,F +; WLW 3,w3blokl6,F +; WLW 3,w3blokl7,F +; WLW 3,w3blokl8,F +; W0 +;#4 +; WLW 3,w4blokl4,F +; WLW 3,w4blokl5,F +; WLW 99,w4blokl6,F +; WLW 3,w4blokl7,F +; WLW 3,w4blokl8,F +; W0 +;#5 +; WLW 3,w5blokl4,F +; WLW 99,w5blokl5,F +; WLW 3,w5blokl6,F +; WLW 3,w5blokl7,F +; WLW 3,w5blokl8,F +; W0 +;#* + +nospear_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 1,w1blokl4,F + WLW 3,w1reb5,F + WLW 99,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#2 + WLW 1,w2blokl4,F + WLW 3,w2reb3,F +; WLW 1,w2reb4,F + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 99,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#3 +; WLW 1,w3blokl4,F +; WLW 3,w3reb3,F +; WLW 1,w3reb4,F +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 99,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#4 + WLW 1,w4blokl4,F + WLW 3,w4reb5,F + WLW 99,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 1,w5blokl4,F + WLW 3,w5reb5,F + WLW 99,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 + + +#* +blockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F ;20 + + WLW 1,w1rej2,F ;20 + WL -1,seq_hold_block + + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 2,w1rej4,F + WLW 2,w1rej5,F + WLW 2,w1rej6,F + WLW 2,w1rej7,F + WLW 2,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 + +seq_stop_shoulder +;This stops goaltends from registering when the swat has followed thru and +;a collision still happens! + move *a13(plyr_ownball),a0 + jrp #own + movi 50,a0 + move a0,*a13(plyr_shtdly) +#own rets + + +seq_set_hold + move *b4+,b0 + move b0,a0 + move a0,*a13(plyr_hold_block) + rets + +seq_hold_block + move *a13(plyr_hold_block),a0 + dec a0 + move a0,*a13(plyr_hold_block) + jrz #cont_blk +;Check to see if player is still keeping his arm cocked + .ref get_block_but_cur + move *a13(plyr_num),a0 + .ref PSTATUS + move @PSTATUS,a1 + btst a0,a1 + jrnz #notdrn +;Have drone keep arm cocked for a random time... +;Drone logic could improve here! + movi 900,a0 + .ref RNDPER + calla RNDPER + jrhi #cont_blk + subi 48+64,b4 + rets + +#notdrn move *a13(plyr_num),a0 + calla get_block_but_cur + jrz #cont_blk +;Player is still holding button down, hold on swat frame! +;Go back to swat frame in front of hold block entry + subi 48+64,b4 +#cont_blk + rets + + + +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 2,w2rej4,F + WLW 2,w2rej5,F + WLW 2,w2rej6,F + WLW 2,w2rej7,F + WLW 2,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +;Save art +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 3,w3rej2,F +; WLW 3,w3rej3,F +; WLW 17,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 3,w3rej5,F +; WLW 3,w3rej6,F +; WLW 3,w3rej7,F +; WLW 3,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 + WLW -1,seq_set_hold,25 + WLW 3,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 2,w4rej5,F + WLW 2,w4rej6,F + WLW 2,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +fastblockrej_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1rej1,F + WLL -1,seq_block,w1rej6 ;29 + WLW -1,seq_set_hold,25 + WLW 6,w1rej2,F + WLW 1,w1rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w1rej3,F + WLW 1,w1rej4,F + WLW 2,w1rej5,F + WLW 1,w1rej6,F + WLW 2,w1rej7,F + WLW 1,w1rej8,F + WL -1,seq_stop_shoulder + WLW 77,w1rej9,F + WLW 3,w1rej10,F + WLW 3,w1rej11,F + W0 +#2 +#3 + WLW 2,w2rej1,F + WLL -1,seq_block,w2rej6 + WLW -1,seq_set_hold,25 + WLW 6,w2rej2,F + WLW 1,w2rej2,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w2rej3,F + WLW 1,w2rej4,F + WLW 2,w2rej5,F + WLW 1,w2rej6,F + WLW 2,w2rej7,F + WLW 1,w2rej8,F + WL -1,seq_stop_shoulder + WLW 77,w2rej9,F + WLW 3,w2rej10,F + WLW 3,w2rej11,F + W0 + +; WLW 2,w3rej1,F +; WLL -1,seq_block,w3rej6 +; WLW 2,w3rej2,F +; WLW 2,w3rej3,F +; WLW 21,w3rej4,F +; WLL -1,seq_snd,swipe_snd +; WLW 2,w3rej5,F +; WLW 2,w3rej6,F +; WLW 2,w3rej7,F +; WLW 2,w3rej8,F +; WLW 77,w3rej9,F +; WLW 3,w3rej10,F +; WLW 3,w3rej11,F +; W0 +#4 +#5 + WLW 2,w4rej1,F + WLL -1,seq_block,w4rej1 +; WLL -1,seq_block,w4rej6 + WLW -1,seq_set_hold,25 + WLW 2,w4rej2,F + WLW 6,w4rej3,F + WLW 1,w4rej3,F + WL -1,seq_hold_block + WLL -1,seq_snd,swipe_snd + WLW 2,w4rej4,F + WLW 1,w4rej5,F + WLW 2,w4rej6,F + WLW 1,w4rej7,F + WLW 2,w4rej8,F + WL -1,seq_stop_shoulder + WLW 77,w4rej9,F ;Land + WLW 3,w4rej10,F + WLW 3,w4rej11,F + W0 + +#* +rebound_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w1reb5 + WLW 3,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + W0 +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_block,w2reb6 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +#2a + WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + W0 +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_block,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; W0 +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_block,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_block,w5reb7 + WLW 3,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + W0 +#5a + WLW 5,w5reb8,F + WLW 3,w5reb9,F + W0 + +#* +rebounda_t + .word NOJUMP_M|DRIFT_M|BLOCKREB_M|NOSTEAL_M|NOJOY_M|NOCOLLP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +; .long #2,#2,#2,#2,#2,#2,#2,#2 +#1 + WLW 2,w1reb10,F + WLW 2,w1reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w1reb5 + WLW 2,w1reb8,F + WLW 27,w1reb5,F + WLW 500,w1reb7,F + WLW 3,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 +#1a + WLW 5,w1reb8,F + WLW 3,w1reb9,F + WLW 3,w1reb10,F + WL -1,clr_autorbnd + W0 + + +#ck_ball +;If ball is near head, and is close enough, no need to jump high! + move *a13(plyr_balldist),a0 + cmpi >30,a0 + jrgt #cont + + .ref ballobj_p + move @ballobj_p,a0,L + move *a0(OYPOS),a14 +;Could add in yvel here also for some more accuracy + cmpi -100,a14 + jrlt #cont + + + move *a13(plyr_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 +#cont + rets + +#tbl .long #1a,#2a,#3a,#4a,#5a,#4a,#3a,#2a + +#2 + WLW 2,w2reb1,F + WLW 2,w2reb2,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w2reb3 + WLW 27,w2reb3,F +; WLW 1,w2reb4,F ;Land + WLW 1,w2reb5,F + WLW 1,w2reb6,F + WLW 500,w2reb7,F + WLW 3,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +#2a WLW 5,w2reb8,F + WLW 3,w2reb9,F + WLW 3,w2reb10,F + WL -1,clr_autorbnd + W0 + +;#3 +; WLW 2,w3reb1,F +; WLW 2,w3reb2,F +; WL -1,#ck_ball +; WLL -1,seq_rebounda,w3reb3 +; WLW 27,w3reb3,F +; WLW 1,w3reb4,F ;Land +; WLW 1,w3reb5,F +; WLW 1,w3reb6,F +; WLW 500,w3reb8,F +; WLW 3,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 +;#3a +; WLW 5,w3reb9,F +; WLW 3,w3reb10,F +; WL -1,clr_autorbnd +; W0 + +#3 +#4 + WLW 2,w4reb10,F + WLW 2,w4reb9,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w4reb4 + WLW 2,w4reb8,F + WLW 2,w4reb7,F + WLW 2,w4reb5,F + WLW 27,w4reb4,F + WLW 500,w4reb7,F + WLW 3,w4reb8,F + WLW 3,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#3a +#4a + WLW 5,w4reb9,F + WLW 3,w4reb10,F + WL -1,clr_autorbnd + W0 +#5 + WLW 2,w5reb9,F + WLW 2,w5reb8,F + WL -1,#ck_ball + WLL -1,seq_rebounda,w5reb7 + WLW 2,w5reb7,F + WLW 27,w5reb5,F + WLW 500,w5reb7,F + WLW 3,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 +#5a WLW 5,w5reb8,F + WLW 3,w5reb9,F + WL -1,clr_autorbnd + W0 + +#* + +fadeaside_seq1a ;team 2 + WL -1,#store_vels +; WLW 3,W1UNDR1,F +; WLW 3,W1UNDR2,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 77,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 3,W1UNDR7,F + WLW 77,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +fadeaside_seq1 ;team1 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 77,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 3,W1UNDR7,FF + WLW 77,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +fadeaway_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W2FADAW4,F + WLW 77,W2FADAW5,F + WLW 3,W2FADAW6,F + WLW 3,W2FADAW7,F + WLW 77,W2FADAW8,F + WLW 3,W2FADAW9,F + WLW 3,W2FADAW10,F + WLW 3,W2FADAW11,F + WLW 3,W2FADAW12,F + WLW 3,W2FADAW13,F + WLW -1,seq_newdir,1*16 + W0 + +fadein_seq2 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W2FADIN4,F + WL -1,#announce_fadein + WLW 3,W2FADIN5,F + WLW 3,W2FADIN6,F + WLW 77,W2FADIN7,F + WLW 3,W2FADIN8,F + WLW 3,W2FADIN9,F + WLW 3,W2FADIN10,F + WLW 77,W2FADIN11,F + WLW 3,W2FADIN12,F + WLW 3,W2FADIN13,F + WLW -1,seq_newdir,1*16 + W0 + +fadeaway_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W3FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W3FADAW4,F + WLW 3,W3FADAW5,F + WLW 77,W3FADAW6,F + WLW 3,W3FADAW7,F + WLW 3,W3FADAW8,F + WLW 77,W3FADAW9,F + WLW 3,W3FADAW10,F + WLW 8,W3FADAW11,F + WLW 4,W3FADAW12,F + WLW 4,W3FADAW13,F + WLW -1,seq_newdir,2*16 + W0 + +fadein_seq3 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 1,W3FADIN5,F + WL -1,#announce_fadein + WLW 2,W3FADIN5,F + WLW 3,W3FADIN6,F + WLW 77,W3FADIN7,F + WLW 3,W3FADIN8,F + WLW 3,W3FADIN9,F + WLW 3,W3FADIN10,F + WLW 77,W3FADIN11,F + WLW 3,W3FADIN12,F + WLW 3,W3FADIN13,F + WLW -1,seq_newdir,2*16 + W0 + +fadeaway_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 3,W4FADAW3,F + WL -1,#announce_fadeaway + WLW 3,W4FADAW4,F + WLW 77,W4FADAW5,F + WLW 3,W4FADAW6,F + WLW 77,W4FADAW7,F + WLW 3,W4FADAW8,F + WLW 3,W4FADAW9,F + WLW 3,W4FADAW10,F + WLW 3,W4FADAW11,F + WLW 3,W4FADAW12,F + WLW 3,W4FADAW13,F + WLW -1,seq_newdir,3*16 + W0 + +fadein_seq4 + WL -1,#store_vels + WL -1,seq_jump + WL -1,#restore_vels + WLW 2,W4FADIN2,F + WL -1,#announce_fadein + WLW 2,W4FADIN3,F + WLW 2,W4FADIN4,F + WLW 77,W4FADIN5,F + WLW 2,W4FADIN8,F + WLW 2,W4FADIN9,F + WLW 77,W4FADIN10,F + WLW 3,W4FADIN11,F + WLW 3,W4FADIN12,F + WLW 3,W4FADIN13,F + WLW -1,seq_newdir,3*16 + W0 + +fadeaside_seq5a + WL -1,#store_vels + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 77,W5UNDR6,F +; WLW 3,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 4,W5UNDR10,F + WLW 4,W5UNDR11,F + W0 + +fadeaside_seq5 + WL -1,#store_vels + WLW 3,W5UNDR2,FF + WLW 3,W5UNDR3,FF + WL -1,seq_jump + WL -1,#restore_vels + WL -1,#announce_side_fade + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 77,W5UNDR6,FF +; WLW 3,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 4,W5UNDR10,FF + WLW 4,W5UNDR11,FF + W0 + +#announce_side_fade + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #side_fade_sp_tbl,a0 + move *a0,a0,L + jrz #asf + calla snd_play1 +#asf rets + + +#announce_fadeaway + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadeaway_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no rets + +#announce_fadein + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fadein_sp_tbl,a0 + move *a0,a0,L + jrz #no + calla snd_play1 +#no1 rets + + +#side_fade_sp_tbl + .long fades_sp + .long leans_sp + .long 0 + .long pull_jmpr_sp + .long leans_sp + .long fades_sp + .long 0 + .long fades_sp + +#fadeaway_sp_tbl + .long fades_sp + .long leans_bck_sp + .long fades_sp + .long 0 + .long fadeaway_sp + .long fades_sp + .long 0 + .long leans_bck_sp + .long fades_sp + +#fadein_sp_tbl + .long leans_sp + .long 0 + .long leans_in_sp + .long pull_jmpr_sp + .long leans_sp + .long leans_in_sp + .long pull_jmpr_sp + .long 0 + .long leans_sp + + + +#store_vels + move *a8(OXVEL),a0,L + move a0,@keep_xvel,L + move *a8(OZVEL),a0,L + move a0,@keep_zvel,L + rets + +#restore_vels + move @keep_xvel,a0,L + move a0,*a8(OXVEL),L + move @keep_zvel,a0,L + move a0,*a8(OZVEL),L + rets + + +#* +undr_hoop_sht_tbl ;(team 2) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 +#2 +#8 + WLW 2,w2js1,F +#1a + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 +#1 + WLW 2,w1js1,F + WLL -1,seq_goto_line,#1a + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 +#3 +#7 + WLW 2,w3js1,F + + WLW 3,W1UNDR1,F + WLW 3,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 3,W5UNDR1,F + WLW 3,W5UNDR2,F + WLW 3,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +#* +undr_hoop_sht_tbl2 ;(team 1) +; .word NOJUMP_M|NOJOY_M + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#1 + WLW 2,w1js1,FF + WLL -1,seq_goto_line,#1a +#2 + WLW 2,w2js1,FF + WLL -1,seq_goto_line,#1a +#8 + WLW 2,w2js1,F + WLL -1,seq_goto_line,#8a +#1a + WLW 2,W1UNDR1,FF + WLW 2,W1UNDR2,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels + WLW 3,W1UNDR3,FF + WLW 3,W1UNDR4,FF + WLW 25,W1UNDR5,FF + WL -1,plyr_shoot + WLW 1,W1UNDR5,FF + WLW 3,W1UNDR6,FF + WLW 77,W1UNDR7,FF + WLW 3,W1UNDR8,FF + WLW 3,W1UNDR9,FF + WLW -1,seq_newdir,0*16 + W0 + +#3 +#7 + WLW 2,w3js1,F +#8a + WLW 2,W1UNDR1,F + WLW 2,W1UNDR2,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels3 + WLW 3,W1UNDR3,F + WLW 3,W1UNDR4,F + WLW 25,W1UNDR5,F + WL -1,plyr_shoot + WLW 1,W1UNDR5,F + WLW 3,W1UNDR6,F + WLW 77,W1UNDR7,F + WLW 3,W1UNDR8,F + WLW 3,W1UNDR9,F + WLW -1,seq_newdir,0*16 + W0 + +#5 + WLW 2,W5UNDR1,FF + WLW 2,W5UNDR2,FF + WLW 2,W5UNDR3,FF + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,FF + WLW 3,W5UNDR5,FF + WLW 26,W5UNDR6,FF + WL -1,plyr_shoot + WLW 2,W5UNDR7,FF + WLW 3,W5UNDR8,FF + WLW 77,W5UNDR9,FF + WLW 3,W5UNDR10,FF + WLW 3,W5UNDR11,FF + WLW -1,seq_newdir,4*16 + W0 + +#4 + WLW 2,w4js1,F +#6 + WLW 2,W5UNDR1,F + WLW 2,W5UNDR2,F + WLW 2,W5UNDR3,F + WL -1,seq_jump + WLL -1,seq_snd,bslne_lnr_sp + WL -1,set_vels2 + WLW 3,W5UNDR4,F + WLW 3,W5UNDR5,F + WLW 26,W5UNDR6,F + WL -1,plyr_shoot + WLW 2,W5UNDR7,F + WLW 3,W5UNDR8,F + WLW 77,W5UNDR9,F + WLW 3,W5UNDR10,F + WLW 3,W5UNDR11,F + WLW -1,seq_newdir,4*16 + W0 + + + +set_vels + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv_1 ;br=team 2 + movi -00f000h,a14 +sxv_1 move a14,*a8(OXVEL),L + + movi 013000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels2 + movi 00f000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv2_1 ;br=team 2 + movi -00f000h,a14 +sxv2_1 move a14,*a8(OXVEL),L + + movi -00f000h,a14 + move a14,*a8(OZVEL),L + rets + + +set_vels3 + movi 006000h,a14 + move *a13(plyr_num),a0 + srl 1,a0 + jrnz sxv3_1 ;br=team 2 + movi -006000h,a14 +sxv3_1 move a14,*a8(OXVEL),L + + movi 025000h,a14 + move a14,*a8(OZVEL),L + rets + + +#* +shoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq1,fadeaside_seq1a + WLW N,w1js2,F + WLW 1,w1js3,F + WL -1,seq_jump + WLW 2,w1js3,F + WLW 77,w1js4,F + WLW 3,w1js5,F + WLW 3,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 4,w1js9,F + WLW 4,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq2,fadein_seq2 + WLW 1,w2js3,F + WL -1,seq_jump + WLW 2,w2js3,F + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 4,w2js8,F + WLW 4,w2js9,F + WLW 4,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq3,fadein_seq3 + WLW 1,w3js3,F + WL -1,seq_jump + WLW 2,w3js3,F + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 4,w3js9,F + WLW 4,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLLL -1,seq_handle_fade_away,fadeaway_seq4,fadein_seq4 + WLW 1,w4js3,F + WL -1,seq_jump + WLW 2,w4js3,F + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 4,w4js8,F + WLW 4,w4js9,F + WLW 4,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLLL -1,seq_handle_fadeaside,fadeaside_seq5,fadeaside_seq5a + WLW N,w5js2,F + WLW 1,w5js3,F + WL -1,seq_jump + WLW 2,w5js3,F + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 4,w5js9,F + WLW 4,w5js10,F + W0 + +#* +qshoot_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N +#1 + WLW N,w1js1,F + WLW N,w1js2,F + WLW N,w1js3,F + WL -1,seq_jump2 + WLW 77,w1js4,F + WLW N,w1js5,F + WLW N,w1js6,F + WLW 77,w1js7,F + WLW 4,w1js8,F + WLW 3,w1js9,F + WLW 3,w1js10,F + W0 +#2 + WLW N,w2js1,F + WLW N,w2js2,F + WLW N,w2js3,F + WL -1,seq_jump2 + WLW 77,w2js4,F + WLW 3,w2js5,F + WLW 3,w2js6,F + WLW 77,w2js7,F + WLW 3,w2js8,F + WLW 3,w2js9,F + WLW 3,w2js10,F + W0 +#3 + WLW N,w3js1,F + WLW N,w3js2,F + WLW N,w3js3,F + WL -1,seq_jump2 + WLW 77,w3js4,F + WLW 3,w3js5,F + WLW 3,w3js6,F + WLW 3,w3js7,F + WLW 77,w3js8,F + WLW 3,w3js9,F + WLW 3,w3js10,F + W0 +#4 + WLW N,w4js1,F + WLW N,w4js2,F + WLW N,w4js3,F + WL -1,seq_jump2 + WLW 77,w4js4,F + WLW 3,w4js5,F + WLW 3,w4js6,F + WLW 77,w4js7,F + WLW 3,w4js8,F + WLW 3,w4js9,F + WLW 3,w4js10,F + W0 +#5 + WLW N,w5js1,F + WLW N,w5js2,F + WLW N,w5js3,F + WL -1,seq_jump2 + WLW 77,w5js4,F + WLW 3,w5js5,F + WLW 3,w5js6,F + WLW 3,w5js7,F + WLW 77,w5js8,F + WLW 3,w5js9,F + WLW 3,w5js10,F + W0 + +#* +;Hold and shoot desperations +shootdesp_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 +#2 +#3 +#4 +#5 +;Use this as a pass also! + WLW 3,T4DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 3,T4DESPA2,F + WL -1,seq_jump + WL -1,#lower_jump + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_shoot + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + W0 + +#lower_jump + move *a8(OYVEL),a0,L + sra 1,a0 + move a0,*a8(OYVEL),L + + jruc lower_jump + + +#* +shootdesp3_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 +#2 +#3 +#4 +#5 + WLW 4,T3DESPB1,F + WLW 4,T3DESPB2,F + WL -1,seq_jump + WL -1,lower_jump + WLW 50,T3DESPB3,F + WLW 3,T3DESPB4,F + WLW 3,T3DESPB5,F + WLW 50,T3DESPB6,F + WLW 3,T3DESPB7,F + WLW 3,T3DESPB8,F +;Never see these frames +; WLW 4,T3DESPB9,F +; WLW 4,T3DESPB10,F + W0 + + +lower_jump +; move *a8(OYVEL),a0,L +; sra 1,a0 +; move a0,*a8(OYVEL),L + +;Give seq a little x drift + movi >10000,a2 ;For this desperation shot, we + move *a13(plyr_num),a0 ;need some x velocity + subk 2,a0 + jrlt #ok + movi ->10000,a2 +#ok move a2,*a8(OXVEL),L + rets + + +#* +;Grenade launch - last second shot +shootdesp2_t + .word NOJUMP_M|SHOOT_M|NOJOY_M + .long seq_stand + .long #3,#3,#3,#3,#3,#3,#3,#3 +#3 + WLW 2,T3DESPA1,F + WLL -1,seq_snd,swipe_snd + WLW 2,T3DESPA2,F + WLW 2,T3DESPA3,F + WLW 2,T3DESPA4,F + WL -1,seq_jump + WLW 2,T3DESPA5,F + WLW 2,T3DESPA6,F + WL -1,plyr_shoot + WLW 66,T3DESPA7,F +;Never see these frames +; WLW 4,T3DESPA8,F +; WLW 4,T3DESPA9,F +; WLW 4,T3DESPA10,F + W0 + +#* +;shootdesp3_t +; .word NOJUMP_M|SHOOT_M|NOJOY_M +; .long seq_stand +; .long #3,#3,#3,#3,#3,#3,#3,#3 +;#3 +; WLW 4,T2DESP1,F +; WLW 4,T2DESP2,F +; WL -1,seq_jump +; WLW 12h,T2DESP3,F +; WLW 62h,T2DESP4,F +; WLW 28,T2DESP5,F +; WLW 4,T2DESP6,F +; W0 + + +#* ;(chest pass) +passc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 3,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + +#* ;(fast, chest pass) +fastpassc_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passc1_l,#passc2_l,#passc3_l,#passc4_l + .long #passc5_l,#passc4_l,#passc3_l,#passc2_l + .asg 2,N +#passc1_l + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass + WLW N,w1cp5,F + WLW N,w1cp6,F + WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#passc2_l + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass + WLW N,w2cp5,F + WLW N,w2cp6,F + WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#passc3_l + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass + WLW N,w3cp5,F + WLW N,w3cp6,F + WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#passc4_l + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass + WLW N,w4cp5,F + WLW N,w4cp6,F + WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#passc5_l + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass + WLW N,w5cp5,F + WLW N,w5cp6,F + WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(dish out, of dunk, or rebound!) +passdo_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo1_l,#passdo2_l,#passdo3_l,#passdo4_l + .long #passdo5_l,#passdo4_l,#passdo3_l,#passdo2_l + +#passdo1_l + WL -1,dble_yvel + WLW 1,w1jupa,F + WL -1,plyr_pass + WLW 4,w1jupa,F + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo2_l + WL -1,dble_yvel + WLW 1,w2jupa,F + WL -1,plyr_pass + WLW 4,w2jupa,F + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo3_l + WL -1,dble_yvel + WLW 1,w3jupa,F + WL -1,plyr_pass + WLW 4,w3jupa,F + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo4_l + WL -1,dble_yvel + WLW 1,w4jupa,F + WL -1,plyr_pass + WLW 4,w4jupa,F + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo5_l + WL -1,dble_yvel + WLW 1,w5jupa,F + WL -1,plyr_pass + WLW 4,w5jupa,F + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + +passdo2_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #passdo21_l,#passdo22_l,#passdo23_l,#passdo24_l + .long #passdo25_l,#passdo24_l,#passdo23_l,#passdo22_l + +#passdo21_l + WL -1,dble_yvel + WLW 1,w1js4,F + WL -1,plyr_pass + WLW 77,w1js4,F + WLW 4,w1js2,F + WLW 3,w1js1,F + W0 +#passdo22_l + WL -1,dble_yvel + WLW 1,w2js4,F + WL -1,plyr_pass + WLW 77,w2js4,F + WLW 3,w2js3,F + WLW 3,w2js2,F + WLW 2,w2js1,F + W0 +#passdo23_l + WL -1,dble_yvel + WLW 1,w3js5,F + WL -1,plyr_pass + WLW 77,w3js5,F + WLW 3,w3js4,F + WLW 3,w3js3,F + WLW 3,w3js2,F + WLW 2,w3js1,F + W0 +#passdo24_l + WL -1,dble_yvel + WLW 1,w4js5,F + WL -1,plyr_pass + WLW 77,w4js5,F + WLW 3,w4js4,F + WLW 3,w4js3,F + WLW 3,w4js2,F + WLW 2,w4js1,F + W0 +#passdo25_l + WL -1,dble_yvel + WLW 1,w5js4,F + WL -1,plyr_pass + WLW 77,w5js4,F + WLW 3,w5js3,F + WLW 3,w5js2,F + WLW 2,w5js1,F + W0 + + +dble_yvel + move *a8(OYVEL),a14,L + jrz #ex + addi 30000h,a14 + move a14,*a8(OYVEL),L + rets +#ex +; LOCKUP +; nop + rets + + +#* ;(short, chest pass) +passs_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1cp1,F + WLW N,w1cp2,F + WLW N,w1cp3,F + WLW N,w1cp4,F + WL -1,plyr_pass +; WLW N,w1cp5,F + WLW N,w1cp4,F + WLW N,w1cp3,F + WLW N,w1cp2,F + WLW N,w1cp1,F + W0 +#2 + WLW N,w2cp1,F + WLW N,w2cp2,F + WLW N,w2cp3,F + WLW N,w2cp4,F + WL -1,plyr_pass +; WLW N,w2cp5,F + WLW N,w2cp4,F + WLW N,w2cp3,F + WLW N,w2cp2,F + WLW N,w2cp1,F + W0 +#3 + WLW N,w3cp1,F + WLW N,w3cp2,F + WLW N,w3cp3,F + WLW N,w3cp4,F + WL -1,plyr_pass +; WLW N,w3cp5,F + WLW N,w3cp4,F + WLW N,w3cp3,F + WLW N,w3cp2,F + WLW N,w3cp1,F + W0 +#4 + WLW N,w4cp1,F + WLW N,w4cp2,F + WLW N,w4cp3,F + WLW N,w4cp4,F + WL -1,plyr_pass +; WLW N,w4cp5,F + WLW N,w4cp4,F + WLW N,w4cp3,F + WLW N,w4cp2,F + WLW N,w4cp1,F + W0 +#5 + WLW N,w5cp1,F + WLW N,w5cp2,F + WLW N,w5cp3,F + WLW N,w5cp4,F + WL -1,plyr_pass +; WLW N,w5cp5,F + WLW N,w5cp4,F + WLW N,w5cp3,F + WLW N,w5cp2,F + WLW N,w5cp1,F + W0 + + +#* ;(overhead pass) +passnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 3,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW N-2,w1ohp7,F + WL -1,plyr_pass + WLW N-1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW N-1,w2ohp6,F + WL -1,plyr_pass + WLW N-1,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l +;If passer is facing #4 or #5 and we are doing a #3 pass, sometimes use +;desperation art as a pass! + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW N-1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 + +choose_desp + move *a13(plyr_tmdist),a14 + cmpi 180,a14 + jrlt #not + movi 600,a0 + calla RNDPER + jrls #not +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + cmpi 3,a0 + jrz #yes + cmpi 4,a0 + jrz #yes + cmpi 5,a0 + jrnz #not + +#yes + movi #desp_pass,b4 +#not + rets + .def T4DESPA5 + +#desp_pass + WLW 3,T4DESPA1,F + WLW 3,T4DESPA2,F + WLW 3,T4DESPA3,F + WLW 3,T4DESPA4,F + WLW 1,T4DESPA5,F + WL -1,plyr_pass + WLW 2,T4DESPA5,F + WLW 50,T4DESPA6,F + WLW 3,T4DESPA7,F + WLW 3,T4DESPA8,F +;Never see these frames +; WLW 4,T4DESPA9,F +; WLW 4,T4DESPA10,F + WLW -1,seq_newdir,2*16 + W0 + + + + +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW N-1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW N-2,w5ohp7,F + WL -1,plyr_pass + WLW N-1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + +#* ;(fast, overhead pass) +fastpassnewoh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #passnoh1_l,#passnoh2_l,#passnoh3_l,#passnoh4_l + .long #passnoh5_l,#passnoh4_l,#passnoh3_l,#passnoh2_l + + .asg 2,N +#passnoh1_l + WLW N,w1ohp1,F + WLW N,w1ohp2,F + WLW N,w1ohp3,F + WLW N,w1ohp4,F + WLW N,w1ohp5,F + WLW N,w1ohp6,F + WLW 1,w1ohp7,F + WL -1,plyr_pass + WLW 1,w1ohp7,F + WLW N,w1ohp8,F + WLW N,w1ohp9,F + WLW N,w1ohp10,F + WLW N,w1ohp11,F + W0 +#passnoh2_l + WLW N,w2ohp1,F + WLW N,w2ohp2,F + WLW N,w2ohp3,F + WLW N,w2ohp4,F + WLW N,w2ohp5,F + WLW 1,w2ohp6,F + WL -1,plyr_pass + WLW 1,w2ohp6,F + WLW N,w2ohp7,F + WLW N,w2ohp8,F + WLW N,w2ohp9,F + WLW N,w2ohp10,F + WLW N,w2ohp11,F + W0 +#passnoh3_l + WL -1,choose_desp + + WLW N,w3ohp1,F + WLW N,w3ohp2,F + WLW N,w3ohp3,F + WLW N,w3ohp4,F + WLW N,w3ohp5,F + WLW 1,w3ohp6,F + WL -1,plyr_pass + WLW 1,w3ohp6,F + WLW N,w3ohp7,F + WLW N,w3ohp8,F + WLW N,w3ohp9,F + WLW N,w3ohp10,F + WLW N,w3ohp11,F + W0 +#passnoh4_l + WLW N,w4ohp1,F + WLW N,w4ohp2,F + WLW N,w4ohp3,F + WLW N,w4ohp4,F + WLW N,w4ohp5,F + WLW N,w4ohp6,F + WLW 1,w4ohp7,F + WL -1,plyr_pass + WLW 1,w4ohp7,F + WLW N,w4ohp8,F + WLW N,w4ohp9,F + WLW N,w4ohp10,F + WLW N,w4ohp11,F + W0 +#passnoh5_l + WLW N,w5ohp1,F + WLW N,w5ohp2,F + WLW N,w5ohp3,F + WLW N,w5ohp4,F + WLW N,w5ohp5,F + WLW N,w5ohp6,F + WLW 1,w5ohp7,F + WL -1,plyr_pass + WLW 1,w5ohp7,F + WLW N,w5ohp8,F + WLW N,w5ohp9,F + WLW N,w5ohp10,F + WLW N,w5ohp11,F + W0 + + + +#* +passbh_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#1 + WL -1,#choose +#1a + WLW N,T1HINDR10,F + WLW N,T1HINDR9,F + WLW N-1,T1HINDR8,F + WLW N-1,T1HINDR7,F + WL -1,plyr_pass + WLW N+1,T1HINDR6,F + WLW N,T1HINDR7,F + WLW N,T1HINDR8,F + WLW N,T1HINDR9,F + WLW N,T1HINDR10,F + WLW -1,seq_newdir,0*16 + W0 + +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + + +#2 +#8 + WLW N,T2HINDR10,F + WLW N,T2HINDR9,F + WLW N-1,T2HINDR8,F + WLW N-1,T2HINDR7,F + WL -1,plyr_pass + WLW N+1,T2HINDR6,F + WLW N,T2HINDR7,F + WLW N,T2HINDR8,F + WLW N,T2HINDR9,F + WLW N,T2HINDR10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDR10,F + WLW N,T3HINDR9,F + WLW N-1,T3HINDR8,F + WLW N-1,T3HINDR7,F + WL -1,plyr_pass + WLW N+1,T3HINDR6,F + WLW N,T3HINDR7,F + WLW N,T3HINDR8,F + WLW N,T3HINDR9,F + WLW N,T3HINDR10,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#5 +#6 + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + +#* +passbh2_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a +;Should never get here... + +#8 +#2 + WLW N,T2HINDL10,F + WLW N,T2HINDL9,F + WLW N-1,T2HINDL8,F + WLW N-1,T2HINDL7,F + WL -1,plyr_pass + WLW N+1,T2HINDL6,F + WLW N,T2HINDL7,F + WLW N,T2HINDL8,F + WLW N,T2HINDL9,F + WLW N,T2HINDL10,F + WLW -1,seq_newdir,1*16 + W0 + +#3 +#7 + WLW N,T3HINDL10,F + WLW N,T3HINDL9,F + WLW N-1,T3HINDL8,F + WLW N-1,T3HINDL7,F + WL -1,plyr_pass + WLW N+1,T3HINDL6,F + WLW N,T3HINDL7,F + WLW N,T3HINDL8,F + WLW N,T3HINDL9,F + WLW N,T3HINDL10,F + WLW -1,seq_newdir,2*16 + W0 +#4 + WLW N,T4HINDL10,F + WLW N,T4HINDL9,F + WLW N-1,T4HINDL8,F + WLW N-1,T4HINDL7,F + WL -1,plyr_pass + WLW N+1,T4HINDL6,F + WLW N,T4HINDL7,F + WLW N,T4HINDL8,F + WLW N,T4HINDL9,F + WLW N,T4HINDL10,F + WLW -1,seq_newdir,3*16 + W0 +#5 +#6 +;Is this seq used? + WLW N,T4HINDR10,F + WLW N,T4HINDR9,F + WLW N-1,T4HINDR8,F + WLW N-1,T4HINDR7,F + WL -1,plyr_pass + WLW N+1,T4HINDR6,F + WLW N,T4HINDR7,F + WLW N,T4HINDR8,F + WLW N,T4HINDR9,F + WLW N,T4HINDR10,F + WLW -1,seq_newdir,3*16 + W0 + + +#* +steal_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stealstand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 1,T1SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE6,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE9,F + WLW 1,T1SWPE10,F + WLW 1,T1SWPE11,F + WLW 1,T1SWPE12,F + WL -1,seq_stealstand + WLW 1,T1SWPE11,F + WLW 1,T1SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T1SWPE9,F + WLW 1,T1SWPE8,F + WLW 1,T1SWPE7,F + WLW 1,T1SWPE6,F + WLW 1,T1SWPE5,F + WL -1,seq_stealstand + WLW 1,T1SWPE4,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE1,F + WLW 1,T1SWPE2,F + WLW 1,T1SWPE3,F + WLW 1,T1SWPE4,F + W0 +#2 + WLW 1,T2SWPE3,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE4,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE6,F + WLW 1,T2SWPE7,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE10,F + WL -1,seq_stealstand + WLW 1,T2SWPE11,F + WLW 1,T2SWPE12,F + WLL -1,seq_snd,swipe_snd + WLW 1,T2SWPE11,F + WLW 1,T2SWPE10,F + WLW 1,T2SWPE9,F + WLW 1,T2SWPE8,F + WLW 1,T2SWPE7,F + WL -1,seq_stealstand + WLW 1,T2SWPE6,F + WLW 1,T2SWPE5,F + WLW 1,T2SWPE4,F + WLW 1,T2SWPE3,F + WLW 1,T2SWPE2,F + WLW 1,T2SWPE1,F + WLW 1,T2SWPE2,F + W0 +#3 + WLW 1,T3SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE6,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE9,F + WLW 1,T3SWPE10,F + WLW 1,T3SWPE11,F + WLW 1,T3SWPE12,F + WL -1,seq_stealstand + WLW 1,T3SWPE11,F + WLW 1,T3SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T3SWPE9,F + WLW 1,T3SWPE8,F + WLW 1,T3SWPE7,F + WLW 1,T3SWPE6,F + WLW 1,T3SWPE5,F + WL -1,seq_stealstand + WLW 1,T3SWPE4,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE1,F + WLW 1,T3SWPE2,F + WLW 1,T3SWPE3,F + WLW 1,T3SWPE4,F + W0 +#4 + WLW 1,T4SWPE6,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE7,F + WLW 1,T4SWPE8,F + WLW 1,T4SWPE9,F + WLW 1,T4SWPE10,F + WLW 1,T4SWPE11,F + WLW 1,T4SWPE12,F + WLW 1,T4SWPE11,F + WL -1,seq_stealstand + WLW 1,T4SWPE10,F + WLW 1,T4SWPE9,F + WLL -1,seq_snd,swipe_snd + WLW 1,T4SWPE8,F + WLW 1,T4SWPE7,F + WLW 1,T4SWPE6,F + WLW 1,T4SWPE5,F + WLW 1,T4SWPE4,F + WL -1,seq_stealstand + WLW 1,T4SWPE3,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE1,F + WLW 1,T4SWPE2,F + WLW 1,T4SWPE3,F + WLW 1,T4SWPE4,F + WLW 1,T4SWPE5,F + W0 +#5 + WLW 1,T5SWPE5,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE6,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE9,F + WLW 1,T5SWPE10,F + WLW 1,T5SWPE11,F + WLW 1,T5SWPE12,F + WL -1,seq_stealstand + WLW 1,T5SWPE11,F + WLW 1,T5SWPE10,F + WLL -1,seq_snd,swipe_snd + WLW 1,T5SWPE9,F + WLW 1,T5SWPE8,F + WLW 1,T5SWPE7,F + WLW 1,T5SWPE6,F + WLW 1,T5SWPE5,F + WL -1,seq_stealstand + WLW 1,T5SWPE4,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE1,F + WLW 1,T5SWPE2,F + WLW 1,T5SWPE3,F + WLW 1,T5SWPE4,F + W0 + +#* +push_t + .word NOMV_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +#1 + WLW 2,w1push1,F + WLW 2,w1push2,F + WLW 4,w1push3,F + WL -1,seq_push + WLW 2,w1push4,F + WLW 2,w1push5,F + WLW 2,w1push6,F + WLW 2,w1push7,F + WLW 2,w1push8,F + WLW 2,w1push9,F + WLW 2,w1push10,F + WLW 2,w1push11,F + W0 +#2 + WLW 2,w2push1,F + WLW 2,w2push2,F + WLW 4,w2push3,F + WL -1,seq_push + WLW 2,w2push4,F + WLW 2,w2push5,F + WLW 2,w2push6,F + WLW 2,w2push7,F + WLW 2,w2push8,F + WLW 2,w2push9,F + WLW 2,w2push10,F + WLW 2,w2push11,F + W0 +#3 + WLW 2,w3push1,F + WLW 2,w3push2,F + WLW 4,w3push3,F + WL -1,seq_push + WLW 2,w3push4,F + WLW 2,w3push5,F + WLW 2,w3push6,F + WLW 2,w3push7,F + WLW 2,w3push8,F + WLW 2,w3push9,F + WLW 2,w3push10,F + WLW 2,w3push11,F + W0 +#4 + WLW 2,w4push1,F + WLW 2,w4push2,F + WLW 4,w4push3,F + WL -1,seq_push + WLW 2,w4push4,F + WLW 2,w4push5,F + WLW 2,w4push6,F + WLW 2,w4push7,F + WLW 2,w4push8,F + WLW 2,w4push9,F + WLW 2,w4push10,F + WLW 2,w4push11,F + W0 +#5 + WLW 2,w5push1,F + WLW 2,w5push2,F + WLW 4,w5push3,F + WL -1,seq_push + WLW 2,w5push4,F + WLW 2,w5push5,F + WLW 2,w5push6,F + WLW 2,w5push7,F + WLW 2,w5push8,F + WLW 2,w5push9,F + WLW 2,w5push10,F + WLW 2,w5push11,F + W0 + + .end + + + + + + diff --git a/SRC/PLYRSEQ2.ASM b/SRC/PLYRSEQ2.ASM new file mode 100644 index 0000000..13c6e45 --- /dev/null +++ b/SRC/PLYRSEQ2.ASM @@ -0,0 +1,1751 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 12/11/92 -Split from plyrseq.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 1/5/93 18:03 +************************************************************** + .file "plyrseq2.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "gsp.equ" ;Gsp asm equates + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + .include "plyrseq2.tbl" + .include "pass.tbl" + .include "flail.tbl" + .include "world.equ" + + +;sounds external + + .ref flail_snd,elbow1_snd,elbow2_snd + .ref land_snd,boo_snd + .ref fall1_snd + + +;symbols externally defined + + .ref white_pal + + .ref seq_offset2 + .ref PLYRFIX_P + + .ref seq_injury + .ref seq_stuffzx + .ref seq_keepzx + .ref seq_stayinair + .ref seq_elbo,seq_snd,seq_stand,plyr_pass + + .ref plyr_shoot + .ref seq_newdir + .ref seq_noballoff + +;symbols defined in this file + +; .def FIREFALP +; .def zwilpal + +; .def PLYRFIX_P +; .def NEWILFIX + + .ref PLYRFX3_P + +;uninitialized ram definitions + + + +;equates for this file + +M_YF .equ >8000 ;Y free (OFLAGS) + + + .text + +******************************************* + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + + +tip_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long 0 + .long #1,#2,#3,#4,#5,#4,#3,#2 + + .asg 3,N + +#1 +#2 + WLW N,w2tipst1,F + WLW N,w2tipst2,F + WLW N,w2tipst3,F + WLW N,w2tipst4,F + WLW N,w2tipst5,F + WLW N,w2tipst4,F + WLW N,w2tipst3,F + WLW N,w2tipst2,F + W0 + +#3 +#4 +#5 + WLW 4,w4tipst1,F + WLW 4,w4tipst2,F + WLW 4,w4tipst3,F + WLW 4,w4tipst4,F + WLW 4,w4tipst5,F + WLW 4,w4tipst4,F + WLW 4,w4tipst3,F + WLW 4,w4tipst2,F + W0 + +#* +tipj_t + .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2tip1,F + WLW 3,w2tip2,F + WLW 3,w2tip3,F + WLW 3,w2tip4,F + WLW 3,w2tip5,F + WLW 25,w2tip6,F + WLW 60,w2tip7,F + WLW 3,w2tip5,F + WLW 3,w2tip4,F + W0 +#3 +#4 +#5 + WLW 3,w4tip1,F + WLW 3,w4tip2,F + WLW 3,w4tip3,F + WLW 3,w4tip4,F + WLW 3,w4tip5,F + WLW 25,w4tip6,F + WLW 60,w4tip7,F + WLW 3,w4tip5,F + WLW 3,w4tip4,F + W0 + +#* + +tipstnd_t +; .word NOJOY_M|NOCOLLP_M|NOBALL_M|NOJUMP_M + .word NOJOY_M|NOCOLLP_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + + +#1 +#2 + WLW 3,w2hndne5,F + WLW 3,w2hndne4,F + WLW 3,w2hndne3,F + WLW 3,w2hndne2,F + WLW 3,w2hndne1,F + WLW 3,w2hndhp1,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp4,F + + WLW 26,w2hndhp5,F + WLW 17,w2hndhp5,F + WLW 3,w2hndhp4,F + WLW 3,w2hndhp3,F + WLW 3,w2hndhp2,F + WLW 3,w2hndhp1,F + WLW 4,w2hndne1,F + WLW 4,w2hndne2,F + WLW 4,w2hndne3,F + WLW 4,w2hndne4,F + WLW 4,w2hndne5,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hnesw2,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw4,F + WLW 4,w2hnesw3,F + WLW 4,w2hnesw2,F + WLW 4,w2hnesw1,F + + WLW 4,w2hndne5,F + WLW 4,w2hndne4,F + WLW 4,w2hndne3,F + WLW 4,w2hndne2,F + WLW 3,w2hndne1,F + + .ref w2stand1 + + WLW 1,w2stand1,F + W0 + +#3 +#4 +#5 + WLW 24,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 29,w4hndhp5,F + WLW 4,w4hndhp4,F + WLW 4,w4hndhp3,F + WLW 4,w4hndhp2,F + WLW 16,w4hndhp1,F + WLW 4,w4hndne1,F + WLW 4,w4hndne2,F + WLW 4,w4hndne3,F + WLW 4,w4hndne4,F + WLW 4,w4hndne5,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw4,F + WLW 4,w4hnesw3,F + WLW 4,w4hnesw2,F + WLW 4,w4hnesw1,F + + WLW 2,w4hndne5,F + WLW 2,w4hndne4,F + WLW 2,w4hndne3,F + WLW 2,w4hndne2,F + WLW 2,w4hndne1,F + + W0 + +#* +alleyoop_pas_t + .word PASS_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + +#1 + WLW 3,W1ALPAS1,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS3,F + WL -1,plyr_pass + WLW 2,W1ALPAS3,F + WLW 4,W1ALPAS4,F + WLW 3,W1ALPAS3,F + WLW 3,W1ALPAS2,F + WLW 3,W1ALPAS1,F + W0 + +#2 + WLW 3,W2ALPAS1,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS3,F + WL -1,plyr_pass + WLW 2,W2ALPAS3,F + WLW 4,W2ALPAS4,F + WLW 3,W2ALPAS3,F + WLW 3,W2ALPAS2,F + WLW 3,W2ALPAS1,F + W0 + +#3 + WLW 3,W3ALPAS1,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS3,F + WL -1,plyr_pass + WLW 2,W3ALPAS3,F + WLW 4,W3ALPAS4,F + WLW 3,W3ALPAS3,F + WLW 3,W3ALPAS2,F + WLW 3,W3ALPAS1,F + W0 + +#4 + WLW 3,W4ALPAS1,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS3,F + WL -1,plyr_pass + WLW 2,W4ALPAS3,F + WLW 4,W4ALPAS4,F + WLW 3,W4ALPAS3,F + WLW 3,W4ALPAS2,F + WLW 3,W4ALPAS1,F + W0 + +#5 + WLW 3,W5ALPAS1,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS3,F + WL -1,plyr_pass + WLW 2,W5ALPAS3,F + WLW 4,W5ALPAS4,F + WLW 3,W5ALPAS3,F + WLW 3,W5ALPAS2,F + WLW 3,W5ALPAS1,F + W0 + + +#* +;passnl2_t +;passnl3_t +passnl_t + .word PASS_M|NOJOY_M + .long seq_stand + .long #1,#1,#1,#1,#1,#1,#1,#1 + + .asg 3,N +#choose +;Need to look at dir I was facing - not where pass code tells me to face. + move *a13(plyr_old_seqdir),a0 + sll 5,a0 + addi #tbl,a0 + move *a0,a0,L + move a0,b4 + rets + +#tbl .long #1a,#2,#3,#4,#5,#6,#7,#8 + +#1 + WL -1,#choose +#1a + WLW 3,W1NLPR1,F + WLW 3,W1NLPR2,F + WL -1,plyr_pass + WLW 3,W1NLPR3,F + WLW 4,W1NLPR4,F + WLW 3,W1NLPR3,F + WLW 3,W1NLPR2,F + WLW 3,W1NLPR1,F + WLW -1,seq_newdir,0*16 + W0 +#2 +#8 + WLW 3,W2NLPR1,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR3,F + WL -1,plyr_pass + WLW 4,W2NLPR4,F + WLW 3,W2NLPR3,F + WLW 3,W2NLPR2,F + WLW 3,W2NLPR1,F + WLW -1,seq_newdir,1*16 + W0 +#3 +#7 + WLW 3,W3NLPR1,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR4,F + WL -1,plyr_pass + WLW 1,W3NLPR4,F + WLW 3,W3NLPR3,F + WLW 3,W3NLPR2,F + WLW 3,W3NLPR1,F + WLW -1,seq_newdir,2*16 + W0 +#4 +#6 + WLW 3,W4NLPR1,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR3,F + WL -1,plyr_pass + WLW 4,W4NLPR4,F + WLW 3,W4NLPR3,F + WLW 3,W4NLPR2,F + WLW 3,W4NLPR1,F + WLW -1,seq_newdir,3*16 + W0 +#5 + WLW 3,W5NLPR1,F + WLW 3,W5NLPR2,F + WL -1,plyr_pass + WLW 3,W5NLPR3,F + WLW 4,W5NLPR4,F + WLW 3,W5NLPR3,F + WLW 3,W5NLPR2,F + WLW 3,W5NLPR1,F + WLW -1,seq_newdir,4*16 + W0 + + +#* +stagger_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N ;4 +#1 + WLW N,w1flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai2,F + WLW N,w1flai1,F + W0 + +#2 + WLW N,w2flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai2,F + WLW N,w2flai1,F + W0 +#3 + WLW N,w3flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai3,F + WLW N,w3flai2,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F + WLL -1,seq_snd,boo_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai2,F + WLW N,w4flai1,F + W0 + +#5 + WLW N,w5flai2,F + WLL -1,seq_snd,boo_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai4,F + WLW N,w5flai3,F + WLW N,w5flai2,F + W0 + +#* +fall_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +seq_clr_flag + clr a0 + move a0,*a13(plyr_offset_flag) + rets +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WLW N,w2fall10,F + WLW 10,w2fall11,F + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall9,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + + +#* +flyback_t + .word NOMV_M|NOBALL_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb_t + .word NOMV_M|NOJUMP_M|NOJOY_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLWWW -1,seq_offset2,0,-32,0 + WLW N,w1fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w1fall2,F + WLW N,w1fall3,F + WL -1,seq_clr_flag + WLW N,w1fall4,F + WLW N,w1fall5,F + WLW N,w1fall6,F + WLW N,w1fall7,F + WLW N,w1fall8,F + WLW N,w1fall9,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w1fall10,F + WLL -1,seq_snd,land_snd + WLW N,w1fall11,F + WLW N,w1fall12,F + WLW N,w1fall13,F + WLW 10,w1fall14,F + WL -1,seq_noballoff + WLW N,w1fall15,F + WLW N,w1fall16,F + WLW N,w1fall17,F + WLW N,w1fall18,F + WLW N,w1fall19,F + WLW N,w1fall20,F + WLW N,w1fall21,F + WLW N,w1fall22,F + WLW N,w1fall23,F + W0 + +#2 + WLWWW -1,seq_offset2,0,-30,0 + WLW N,w2fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w2fall2,F + WLW N,w2fall3,F + WL -1,seq_clr_flag + WLW N,w2fall4,F + WLW N,w2fall5,F + WLW N,w2fall6,F + WLW N,w2fall7,F + WLW N,w2fall8,F + WL -1,seq_stayinair + WLW N,w2fall9,F + WLL -1,seq_snd,land_snd + WL -1,seq_injury + WLW N,w2fall10,F + WLW 10,w2fall11,F + WL -1,seq_noballoff + WLW N,w2fall12,F + WLW N,w2fall13,F + WLW N,w2fall14,F + WLW N,w2fall15,F + WLW N,w2fall16,F + WLW N,w2fall17,F + WLW N,w2fall18,F + WLW N,w2fall19,F + WLW N,w2fall20,F + WLW N,w2fall21,F + W0 +#3 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w3fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w3fall2,F + WLW N,w3fall3,F + WL -1,seq_clr_flag + WLW N,w3fall4,F + WLW N,w3fall5,F + WLW N,w3fall6,F + WLW N,w3fall7,F + WLW N,w3fall8,F + WLW N,w3fall9,F + WLW N,w3fall10,F + WLW N,w3fall11,F + WLW N,w3fall12,F + WL -1,seq_stayinair + WLW N,w3fall13,F + WL -1,seq_injury + WLL -1,seq_snd,land_snd + WLW 10,w3fall14,F + WL -1,seq_noballoff + WLW N,w3fall15,F + WLW N,w3fall16,F + WLW N,w3fall17,F + WLW N,w3fall18,F + WLW N,w3fall19,F + WLW N,w3fall20,F + WLW N,w3fall21,F + WLW N,w3fall22,F + WLW N,w3fall23,F + WLW N,w3fall24,F + W0 +#4 + WLWWW -1,seq_offset2,0,-37,0 + WLW N,w4fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w4fall2,F + WLW N,w4fall3,F + WL -1,seq_clr_flag + WLW N,w4fall4,F + WLW N,w4fall5,F + WLW N,w4fall6,F + WLW N,w4fall7,F + WLW N,w4fall8,F + WLW N,w4fall9,F + WLW N,w4fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w4fall11,F + WLL -1,seq_snd,land_snd + WLW N,w4fall12,F + WLW 10,w4fall13,F + WL -1,seq_noballoff + WLW N,w4fall14,F + WLW N,w4fall15,F + WLW N,w4fall16,F + WLW N,w4fall17,F + WLW N,w4fall18,F + WLW N,w4fall19,F + WLW N,w4fall20,F + WLW N,w4fall21,F + WLW N,w4fall22,F + W0 + +#5 + WLWWW -1,seq_offset2,0,-42,0 + WLW N,w5fall1,F + WLL -1,seq_snd,fall1_snd +; WLL -1,seq_snd,boo_snd + WLW N,w5fall2,F + WLW N,w5fall3,F + WL -1,seq_clr_flag + WLW N,w5fall4,F + WLW N,w5fall5,F + WLW N,w5fall6,F + WLW N,w5fall7,F + WLW N,w5fall8,F + WLW N,w5fall10,F + WL -1,seq_stayinair + WL -1,seq_injury + WLW N,w5fall11,F + WLL -1,seq_snd,land_snd + WLW N,w5fall12,F + WLW N,w5fall13,F + WLW 10,w5fall14,F + WL -1,seq_noballoff + WLW N,w5fall15,F + WLW N,w5fall16,F + WLW N,w5fall17,F + WLW N,w5fall18,F + WLW N,w5fall19,F + WLW N,w5fall20,F + WLW N,w5fall21,F + WLW N,w5fall22,F + W0 + +#* +flyback2_t ;(push, no fall) + .word NOMV_M|NOJOY_M|NOBALL_M|NOJUMP_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 +flybackwb2_t + .word NOMV_M|NOJOY_M|NOJUMP_M|NOSTEAL_M|NOCOLLP_M|SAMEDIR_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 3,N +#1 + WLW N,w1flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w1flai2,F + WLW N,w1flai3,F + WLW N,w1flai4,F + WLW N,w1flai5,F + WLW N,w1flai6,F + WLW N,w1flai7,F + WLW N,w1flai8,F + W0 + +#2 + WLW N,w2flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w2flai2,F + WLW N,w2flai3,F + WLW N,w2flai4,F + WLW N,w2flai5,F + WLW N,w2flai6,F + WLW N,w2flai7,F + WLW N,w2flai8,F + WLW N,w2flai9,F + WLW N,w2flai11,F + W0 +#3 + WLW N,w3flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w3flai2,F + WLW N,w3flai3,F + WLW N,w3flai4,F + WLW N,w3flai5,F + WLW N,w3flai6,F + WLW N,w3flai7,F + WLW N,w3flai8,F + WLW N,w3flai9,F + WLW N,w3flai1,F + W0 +#4 + WLW N,w4flai1,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w4flai2,F + WLW N,w4flai3,F + WLW N,w4flai4,F + WLW N,w4flai5,F + WLW N,w4flai6,F + WLW N,w4flai7,F + WLW N,w4flai8,F + W0 + +#5 + WLW N,w5flai2,F +; WLL -1,seq_snd,boo_snd + WLL -1,seq_snd,flail_snd + WLW N,w5flai3,F + WLW N,w5flai4,F + WLW N,w5flai5,F + WLW N,w5flai6,F + WLW N,w5flai7,F + WLW N,w5flai8,F + WLW N,w5flai10,F + WLW N,w5flai11,F + W0 + + +#* +pickup_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 2,N +#1 + WLW N,w1pikup1,F|M_YF + WLW N,w1pikup2,F|M_YF + WLW N,w1pikup3,F + WLW N,w1pikup4,F + WLW N,w1pikup5,F + WLW N,w1pikup4,F + WLW N,w1pikup3,F + WLW N,w1pikup2,F + WLW N,w1pikup1,F + W0 +#2 + WLW N,w2pikup1,F|M_YF + WLW N,w2pikup2,F|M_YF + WLW N,w2pikup3,F + WLW N,w2pikup4,F + WLW N,w2pikup5,F + WLW N,w2pikup4,F + WLW N,w2pikup3,F + WLW N,w2pikup2,F + WLW N,w2pikup1,F + W0 +#3 + WLW N,w3pikup1,F|M_YF + WLW N,w3pikup2,F|M_YF + WLW N,w3pikup3,F + WLW N,w3pikup4,F + WLW N,w3pikup5,F + WLW N,w3pikup4,F + WLW N,w3pikup3,F + WLW N,w3pikup2,F + WLW N,w3pikup1,F + W0 +#4 + WLW N,w4pikup1,F|M_YF + WLW N,w4pikup2,F|M_YF + WLW N,w4pikup3,F + WLW N,w4pikup4,F + WLW N,w4pikup5,F + WLW N,w4pikup4,F + WLW N,w4pikup3,F + WLW N,w4pikup2,F + WLW N,w4pikup1,F + W0 +#5 + WLW N,w5pikup1,F|M_YF + WLW N,w5pikup2,F|M_YF + WLW N,w5pikup3,F + WLW N,w5pikup4,F + WLW N,w5pikup5,F + WLW N,w5pikup4,F + WLW N,w5pikup3,F + WLW N,w5pikup2,F + WLW N,w5pikup1,F + W0 + + +#* +elbo_t + .word NOMV_M|NOSTEAL_M|NOJUMP_M|NOJOY_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 5,N + +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N-1,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N-1,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N-1,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N-1,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + +#* +;Slower elbo swing +elbo2_t + .word NOMV_M|NOJOY_M|NOSTEAL_M|NOJUMP_M + .long seq_stand + .long #1,#2,#3,#4,#5,#4,#3,#2 + .asg 4,N +#1 +#2 + WLW N-1,w1elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w1elbo4,F + WLW N-2,w1elbo3,F + WLW N+4,w1elbo1,F + WLW N-1,w1elbo3,F + WLW N-2,w1elbo4,F + WLW N-2,w1elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w1elbo6,F + WLW N-2,w1elbo7,F + WLW N+6,w1elbo8,F + WLW N-1,w1elbo7,F + WLW N-2,w1elbo6,F + WLW N-2,w1elbo5,F + W0 +#3 +#4 +#5 + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow1_snd + WL -1,seq_elbo + WLW N-1,w4elbo6,F + WLW N-2,w4elbo7,F + WLW N+4,w4elbo8,F + WLW N-1,w4elbo7,F + WLW N-2,w4elbo6,F + WLW N-1,w4elbo5,F + WLL -1,seq_snd,elbow2_snd + WLW N-2,w4elbo4,F + WLW N+6,w4elbo3,F + WLW N-1,w4elbo4,F + WLW N-2,w4elbo5,F + W0 + + + .ref plyr_setseq +#* +spinmove_t + .word NOJOY_M|NOSTEAL_M|NOJUMP_M|NOCOLLP_M + .long #chnge_seq + .long #1,#2,#3,#4,#5,#6,#7,#8 + +#chnge_seq + clr a14 + move a14,*a13(plyr_dribmode) + + movi RUNDRIB_SEQ,a0 + calla plyr_setseq + rets + +#1 + WL -1,#speech_call + WLW 2,W3SPMVA5,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA6,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA7,F + WLW 2,W3SPMVA8,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d1 + WL -1,#lose_ball + WLW 2,W3SPMVA11,F + WLW 2,W3SPMVA12,F + WL -1,#set_xzvels_d1 + WLW 2,W3SPMVA13,F + WLW 2,W3SPMVA14,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA15,F + WLW 2,W3SPMVA16,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA1,F + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d1a + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + W0 + +#lose_ball + + .ref plyr_onfire + .ref PCNT + BSSX last_spin,16 + + movi 50,a0 + +; move *a13(plyr_num),a14 +; move @plyr_onfire,a1 +; btst a14,a1 +; jrz #no +; +;;If guy is on fire, don't allow consecutive spins without +;;a great chance of losing the ball! +; move @last_spin,a1 +; move @PCNT,a14 +; move a14,@last_spin +; sub a1,a14 +; abs a14 +; cmpi 4*60,a14 +; jrgt #no +; movi 300,a0 +;#no + .ref RNDPER + calla RNDPER + jrls #ex + + move *a13(plyr_ptsdown),a1 ;Is plyr losing? + addk 1,a1 + jrnn #ex + + + PUSH a8 + movk 15,a0 + move a0,*a13(plyr_shtdly) + clr a0 + move a0,*a13(plyr_ownball) + .ref ballobj_p + move @ballobj_p,a8,L + .ref loose_ball + calla loose_ball + + .ref steal_snd + SOUND1 steal_snd + + movi >10000,a2 ;>Give rnd velocity + movi >8000,a3 + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #xpos + neg a0 +#xpos move a0,*a8(OXVEL),L + move a2,a0 + callr rnd + add a3,a0 + btst 0,a0 + jrz #ypos + neg a0 +#ypos move a0,*a8(OZVEL),L + + + + + PULL a8 +#ex + rets + +******************************** +* Get random # with mask +* A0=Mask +* >A0=Rnd # (Pass CC) +* Trashes scratch + + SUBRP rnd + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + and a1,a0 + rets + +#2 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d2 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#3 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d3 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d3a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#4 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d4 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 +#5 + + WL -1,#speech_call + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA15,FF + WLW 2,W3SPMVA14,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA13,FF + WLW 2,W3SPMVA12,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA11,FF + WLW 2,W3SPMVA10,FF + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA9,FF + WLW 2,W3SPMVA8,FF + WL -1,#lose_ball + WL -1,#set_xzvels_d5 + WLW 2,W3SPMVA7,FF + WLW 2,W3SPMVA6,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA5,FF + WLW 2,W3SPMVA4,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA3,FF + WLW 2,W3SPMVA2,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA1,FF + WLW 2,W3SPMVA20,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA19,FF + WLW 2,W3SPMVA18,FF + WL -1,#set_xzvels_d5a + WLW 2,W3SPMVA17,FF + WLW 2,W3SPMVA16,FF +; WL -1,#reset_dribble + W0 + +#6 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d6 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#7 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d7 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d7a + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + +#8 + WL -1,#speech_call + WLW 2,W3SPMVA1,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA2,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA3,F + WLW 2,W3SPMVA4,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA5,F + WLW 1,W3SPMVA6,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA7,F + WLW 1,W3SPMVA8,F + WL -1,#lose_ball + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA9,F + WLW 2,W3SPMVA10,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA11,F + WLW 1,W3SPMVA12,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA13,F + WLW 1,W3SPMVA14,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA15,F + WLW 1,W3SPMVA16,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA17,F + WLW 2,W3SPMVA18,F + WL -1,#set_xzvels_d8 + WLW 2,W3SPMVA19,F + WLW 2,W3SPMVA20,F +; WL -1,#reset_dribble + W0 + + .ref spin_mv1_sp,spin_mv2_sp,spin_mv3_sp + .ref spins_out_sp + +#speech_call + .ref spn_mv_snd + SOUND1 spn_mv_snd + + movi spins_out_sp,a0 + move @HCOUNT,a14 +; btst 3,a14 +; jrnz #x + btst 1,a14 + jrnz #x1 + + movi spin_mv1_sp,a0 + move *a13(plyr_ohpdist),a1 + cmpi >174*DIST_ADDITION,a1 + jrgt #x + movi spin_mv3_sp,a0 + move @HCOUNT,a14 + btst 0,a14 + jrnz #x + movi spin_mv2_sp,a0 +#x calla snd_play1 +#x1 rets + +;DJT Start + .asg 24000h,XVEL_15 ;24000h + .asg 58000h,ZVEL_15 ;50000h + .asg 5a400h,XVEL_37 ;52000h + .asg 22000h,ZVEL_37 ;22000h + .asg 47500h,XVEL_2468 ;40D00h + .asg 49f00h,ZVEL_2468 ;43300h + +;DJT End +#set_xzvels_d1 + callr check_x_bounds + jrnc #sd1 +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd11 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd11 move a14,*a8(OXVEL),L + +#sd1 callr check_z_bounds + jrnc #sd1a +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1a rets + + +#set_xzvels_d1a + callr check_x_bounds + jrnc #sd1b +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb12 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb12 move a14,*a8(OXVEL),L + +#sd1b callr check_z_bounds + jrnc #sd1c +;DJT Start + movi -ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd1c rets + + +#set_xzvels_d2 + callr check_x_bounds + jrnc #sd2a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd2a callr check_z_bounds + jrnc #sd2b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd2b rets + + +#set_xzvels_d3 + callr check_x_bounds + jrnc #sd3a +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3a callr check_z_bounds + jrnc #sd3b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3b rets + + +#set_xzvels_d3a + callr check_x_bounds + jrnc #sd3c +;DJT Start + movi XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd3c callr check_z_bounds + jrnc #sd3d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd3d rets + + +#set_xzvels_d4 + callr check_x_bounds + jrnc #sd4a +;DJT Start + movi XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd4a callr check_z_bounds + jrnc #sd4b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd4b rets + + +#set_xzvels_d5 + callr check_x_bounds + jrnc #sd5a +;DJT Start + movi XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sd51 +;DJT Start + movi -XVEL_15,a14 +;DJT End +#sd51 move a14,*a8(OXVEL),L + +#sd5a callr check_z_bounds + jrnc #sd5b +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5b rets + + +#set_xzvels_d5a + callr check_x_bounds + jrnc #sd5c +;DJT Start + movi -XVEL_15,a14 +;DJT End + move *a8(OXPOS),a0 + cmpi WRLDMID,a0 + jrlt #sb52 +;DJT Start + movi XVEL_15,a14 +;DJT End +#sb52 move a14,*a8(OXVEL),L + +#sd5c callr check_z_bounds + jrnc #sd5d +;DJT Start + movi ZVEL_15,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd5d rets + + +#set_xzvels_d6 + callr check_x_bounds + jrnc #sd6a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd6a callr check_z_bounds + jrnc #sd6b +;DJT Start + movi ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd6b rets + + +#set_xzvels_d7 + callr check_x_bounds + jrnc #sd7a +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7a callr check_z_bounds + jrnc #sd7b +;DJT Start + movi ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7b rets + + +#set_xzvels_d7a + callr check_x_bounds + jrnc #sd7c +;DJT Start + movi -XVEL_37,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd7c callr check_z_bounds + jrnc #sd7d +;DJT Start + movi -ZVEL_37,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd7d rets + + +#set_xzvels_d8 + callr check_x_bounds + jrnc #sd8a +;DJT Start + movi -XVEL_2468,a14 +;DJT End + move a14,*a8(OXVEL),L + +#sd8a callr check_z_bounds + jrnc #sd8b +;DJT Start + movi -ZVEL_2468,a14 +;DJT End + move a14,*a8(OZVEL),L +#sd8b rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_x_bounds + + move *a8(OXPOS),a0 + move *a8(OXANI+16),a14 + add a14,a0 + cmpi PLYRMINX,a0 ;Is X ok? Yes if > + jrle #stp ;br=dont allowed furter movement + cmpi PLYRMAXX,a0 ;Is X ok? Yes if < + jrge #stp ;br=dont allowed furter movement + setc + rets +#stp + clrc + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP check_z_bounds + + move *a8(OZPOS),a0 + cmpi CZMIN+8,a0 + jrle #czb + cmpi CZMAX-6,a0 + jrge #czb + setc + rets +#czb + clrc + rets + + + .end + + + + diff --git a/SRC/PLYRSTND.ASM b/SRC/PLYRSTND.ASM new file mode 100644 index 0000000..554e159 --- /dev/null +++ b/SRC/PLYRSTND.ASM @@ -0,0 +1,246 @@ +************************************************************** +* +* Owner: TURMELL +* +* Software: Shawn Liptak, Mark Turmell +* Initiated: 10/8/92 +* +* Modified: Shawn Liptak, 10/8/92 -Split from BB.asm +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/18/92 1:40 +************************************************************** + .file "plyrstnd.asm" + .title "basketball plyr sequence code" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "game.equ" + .include "macros.hdr" + + .asg 0,SEQT + .include "plyr.equ" + .include "stand.tbl" + .include "plyrhd3.tbl" + .include "plyrhd2.glo" + + + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + + .ref w3stwb3fix ;fix for buggy locked img + + .ref PLYRFIX_P + +;sounds external + +;symbols externally defined + +;symbols defined in this file + +;uninitialized ram definitions + +;equates for this file + + .if IMGVIEW + .else + .def W5ST1 + .endif + +M_YF .equ >8000 ;Y free (OFLAGS) + + .text + +******************************** + + + .asg M_WRNONZ,F + .asg M_WRNONZ|M_FLIPH,FF + + +stnd_t .word EASYSTAG_M + .long 0 + .long #stnd1_l,#stnd2_l,#stnd3_l,#stnd4_l + .long #stnd5_l,#stnd4_l,#stnd3_l,#stnd2_l + + + .asg 5,N ;5 +#stnd1_l + WLW N,W1ST1,F + WLW N,W1ST2,F + WLW N,W1ST3,F + WLW N,W1ST4,F + WLW N,W1ST5,F + WLW N,W1ST6,F + WLW N,W1ST5,F + WLW N,W1ST4,F + WLW N,W1ST3,F + WLW N,W1ST2,F + W0 +#stnd2_l + WLW N,W2ST1,F + WLW N,W2ST2,F + WLW N,W2ST3,F + WLW N,W2ST4,F + WLW N,W2ST5,F + WLW N,W2ST6,F + WLW N,W2ST5,F + WLW N,W2ST4,F + WLW N,W2ST3,F + WLW N,W2ST2,F + W0 +#stnd3_l + WLW N,W3ST1,F + WLW N,W3ST2,F + WLW N,W3ST3,F + WLW N,W3ST4,F + WLW N,W3ST5,F + WLW N,W3ST6,F + WLW N,W3ST5,F + WLW N,W3ST4,F + WLW N,W3ST3,F + WLW N,W3ST2,F + W0 +#stnd4_l + WLW N,W4ST1,F + WLW N,W4ST2,F + WLW N,W4ST3,F + WLW N,W4ST4,F + WLW N,W4ST5,F + WLW N,W4ST6,F + WLW N,W4ST5,F + WLW N,W4ST4,F + WLW N,W4ST3,F + WLW N,W4ST2,F + W0 +#stnd5_l + WLW N,W5ST1,F + WLW N,W5ST2,F + WLW N,W5ST3,F + WLW N,W5ST4,F + WLW N,W5ST5,F + WLW N,W5ST6,F + WLW N,W5ST5,F + WLW N,W5ST4,F + WLW N,W5ST3,F + WLW N,W5ST2,F + W0 + +stndwb_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + +#stndwb1_l + WL 5,w1stwb1,F + WL 5,w1stwb2,F + WL 5,w1stwb3,F + WL 5,w1stwb4,F + WL 5,w1stwb3,F + WL 5,w1stwb2,F + W0 +#stndwb2_l + WL 5,w2stwb1,F + WL 5,w2stwb2,F + WL 5,w2stwb3,F + WL 5,w2stwb4,F + WL 5,w2stwb3,F + WL 5,w2stwb2,F + W0 +#stndwb3_l + WL 5,w3stwb1,F + WL 5,w3stwb2,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb4,F +; WL 5,w3stwb3,F + WL 5,w3stwb3fix,F ;fix for buggy locked img + WL 5,w3stwb2,F + W0 +#stndwb4_l + WL 5,w4stwb1,F + WL 5,w4stwb2,F + WL 5,w4stwb3,F + WL 5,w4stwb4,F + WL 5,w4stwb3,F + WL 5,w4stwb2,F + W0 +#stndwb5_l + WL 5,w5stwb1,F + WL 5,w5stwb2,F + WL 5,w5stwb3,F + WL 5,w5stwb4,F + WL 5,w5stwb3,F + WL 5,w5stwb2,F + W0 + +#* +stndwb2_t + .word EASYSTAG_M|NOMV_M + .long 0 + .long #stndwb1_l,#stndwb2_l,#stndwb3_l,#stndwb4_l + .long #stndwb5_l,#stndwb4_l,#stndwb3_l,#stndwb2_l + + + .asg 5,N ;5 +#stndwb1_l + + WLW N,w1stwbl1,F + WLW N,w1stwbl2,F + WLW N,w1stwbl3,F + WLW N,w1stwbl4,F + WLW N,w1stwbl3,F + WLW N,w1stwbl2,F + W0 +#stndwb2_l + WLW N,w2stwbl1,F + WLW N,w2stwbl2,F + WLW N,w2stwbl3,F + WLW N,w2stwbl4,F + WLW N,w2stwbl3,F + WLW N,w2stwbl2,F + W0 +#stndwb3_l + WLW N,w3stwbl1,F + WLW N,w3stwbl2,F + WLW N,w3stwbl3,F + WLW N,w3stwbl4,F + WLW N,w3stwbl3,F + WLW N,w3stwbl2,F + W0 +#stndwb4_l + WLW N,w4stwbl1,F + WLW N,w4stwbl2,F + WLW N,w4stwbl3,F + WLW N,w4stwbl4,F + WLW N,w4stwbl3,F + WLW N,w4stwbl2,F + W0 +#stndwb5_l + WLW N,w5stwbl1,F + WLW N,w5stwbl2,F + WLW N,w5stwbl3,F + WLW N,w5stwbl4,F + WLW N,w5stwbl3,F + WLW N,w5stwbl2,F + W0 + + .end + + diff --git a/SRC/QUEST.DOC b/SRC/QUEST.DOC new file mode 100644 index 0000000..494a29e --- /dev/null +++ b/SRC/QUEST.DOC @@ -0,0 +1,837 @@ +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT NBA PLAYER SURPASSED NATE ARCHIBALD",1 + .string "AS THE ALL-TIME SCORING LEADER AT THE",1 + .string "UNIVERSITY OF TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +;question25 +; .string "WHAT CHICAGO BULLS PLAYER WENT ON THE",1 +; .string "INJURED LIST ON MARCH 18, 1995 WHEN",1 +; .string "MICHAEL JORDAN CAME OUT OF RETIREMENT ?",0 +; .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +;question29 +; .string "WHO WAS THE ONLY ROOKIE TO PLAY IN",1 +; .string "THE 1992 NBA ALL-STAR GAME ?",0 +; .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +;question40 +; .string "WHAT NBA CENTER WAS A TEAMMATE OF",1 +; .string "SHAQUILLE O'NEAL IN COLLEGE ?",0 +; .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +;question62 +; .string "WHAT ORLANDO MAGIC PLAYER ALSO HAS",1 +; .string "RELEASED A CD WITH RAP MUSIC ?",0 +; .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +;question84 +; .string "WITH WHICH SELECTION IN THE FIRST ROUND",1 +; .string "DID THE CHICAGO BULLS DRAFT",1 +; .string "MICHAEL JORDAN IN 1984 ?",0 +; .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +;question91 +; .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 +; .string "FOR THE 1992-93 SEASON ?",0 +; .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +;question107 +; .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 +; .string "PLAYER OF THE YEAR FOR THE 1991-92",1 +; .string "SEASON ?",0 +; .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +;question115 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "STEALS DURING THE 1989-90 SEASON ?",0 +; .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +;question119 +; .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 +; .string "REBOUNDING DURING THE 1987 SEASON ?",0 +; .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +;question141 +; .string "WHO WAS NAMED NBA COACH OF THE YEAR",1 +; .string "FOR THE 1993-1994 NBA SEASON ?",0 +; .even +;question142 +; .string "WHAT CURRENT NBA COACH WAS NAMED",1 +; .string "COACH OF THE YEAR FOR THE 1970-1971",1 +; .string "NBA SEASON ?",0 +; .even +;question143 +; .string "WHAT TEAM DID DICK MOTTA COACH WHEN",1 +; .string "HE WAS NAMED COACH OF THE YEAR ?",0 +; .even +;question144 +; .string "WHAT POSITION DOES CHARLES BARKLEY",1 +; .string "PLAY ?",0 +; .even +;question145 +; .string "WHAT POSITION DOES MICHAEL JORDAN",1 +; .string "PLAY ?",0 +; .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +;question148 +; .string "WHAT YEAR WAS MICHAEL JORDAN BORN ?",1 +; .even +; +;Add more birthday questions... +; +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID KEITH JENNINGS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHICH OF THE FOLLOWING TEAMS WAS AN",1 + .string "EXPANSION TEAM DURING THE 1990-91",1 + .string "NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHO WAS THE FIRST PICK OVERALL IN",1 + .string "THE 1994 NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT TEAM DID NEGELE KNIGHT PLAY FOR",1 + .string "DURING THE 1990-1991 NBA SEASON ?",0 + .even +;question183 +; .string "WHAT NBA PLAYER WAS IN THE CHICAGO",1 +; .string "WHITESOX MINOR LEAGUE BASEBALL SYSTEM",1 +; .string "IN 1994 ?",0 +; .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +question200 + .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 + .string "PLAY ?",0 + .even + diff --git a/SRC/RECORD.ASM b/SRC/RECORD.ASM new file mode 100644 index 0000000..9bb31af --- /dev/null +++ b/SRC/RECORD.ASM @@ -0,0 +1,5909 @@ +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: 9-27-92 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/5/92 19:34 +* +* Updated to account for pin number rather than month and day +****************************************************************************** + + .file "record.asm" + .title "CMOS records etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "game.equ" + .include "world.equ" + .include "audit.equ" + .include "link.equ" + .include "macros.hdr" + .include "imgtbl.glo" + .include "bgndtbl.glo" + +****************************************************************************** + + .global sort_wins + .global save_record + .global save_player_records + + .global get_player_record,get_free_record,put_plr_record + .global find_record + + .global show_player_records + .global clear_player_records + + .global message_palette + .global mess_space_width + .global print_string,print_string2 + .global print_string_C,print_string_C2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx,mess_cursy + .global setup_message + .global message_buffer + .global get_initials_string +;DJT Start + .global dec_to_asc,dec_to_pct,dec_to_asc2 +;DJT End + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_string_R,print_string_R2 + .global get_name_string + .global player_stats + .global hiscore_type + +****************************************************************************** + + .ref pal_getf + .ref morf_pal + .ref morfpal1,morfpal2 + .ref morfpal3,morfpal4 + .ref morfpal5,morfpal6 + .ref morfpal7,morfpal8 + .ref morfpal9,morfpal10 + .ref morfpal11 + .ref create_title_bar + .ref create_hi_score_page_objs + + .ref bast18_ascii,brush20_ascii + .ref bast8t_ascii,bast8_ascii + .ref brush50_ascii + + .ref CYCLE_TABLE,bounce_snd + + .ref get_teams_pop,sorted_teams + .ref BAKMODS + .ref BGND_UD1 + .ref SET_PAGE + .ref WC_BYTE,RC_BYTE + .ref WC_BYTEI,RC_BYTEI + .ref WC_WORD,RC_WORD + .ref WC_WORDI,RC_WORD + .ref WC_LONG,RC_LONG + .ref WC_LONGI,RC_LONG + + .ref dpageflip + .ref IRQSKYE + .ref KILBGND + .ref get_all_buttons_cur + .ref get_all_buttons_cur2 + + .ref get_all_sticks_down2 + .ref get_all_buttons_cur2 + + .ref WIPEOUT + .ref CLR_SCRN + .ref COLRTEMP + .ref obj_del1c + .ref get_all_sticks_down + .ref get_all_sticks_cur,get_all_sticks_cur2 + + .ref team1,team2 + .ref PSTATUS,PSTATUS2 + .ref scores + .ref SOUNDSUP + .ref mess_line_spacing + .ref clear_buffers + .ref rndrng0 + .ref win_snd,GAINED_TXT + +****************************************************************************** + + .asg 4,REC_MINGAMES ;Min # games req'd for high scores +; +; RECORD equates (for the 'default_records' table) +; +NAME1 equ 0h +NAME2 equ 8h +NAME3 equ 10h +NAME4 equ 18h +NAME5 equ 20h +NAME6 equ 28h +PIN1 equ 30h +PIN2 equ 38h +PIN3 equ 40h +PIN4 equ 48h +GAMPLYD equ 50h +WINS equ 60h +WINSTRK equ 70h +TMSDEF equ 80h + + +_30BITS equ 0111111111111111111111111111111b +_27BITS equ 0111111111111111111111111111b +_16BITS equ 01111111111111111b +_11BITS equ 011111111111b +_10BITS equ 01111111111b +_8BITS equ 011111111b +_7BITS equ 001111111b +_6BITS equ 000111111b +_5BITS equ 000011111b +_4BITS equ 000001111b +_1BIT equ 000000001b + +;DJT Start +;DJT .equs not needed + + .asg 8,HISCORE_TABLES + .if TRIVCON + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TRIVCON + .if TEAMPOP + .eval 1+HISCORE_TABLES,HISCORE_TABLES + .endif ;TEAMPOP +;DJT End + + +TEAM_RECORD_ORIGIN equ RECORD_ORIGIN+(NUM_PRECORDS*(PKDPR_SIZE*2))+16 +WORLD_REC_ORIGIN equ TEAM_RECORD_ORIGIN+(NUM_TM_RECORDS*(PKDTR_SIZE*2))+16 + + + + BSSX player1_data, PR_SIZE + BSSX player2_data, PR_SIZE + BSSX player3_data, PR_SIZE + BSSX player4_data, PR_SIZE + .if DRONES_2MORE + BSSX player5_data, PR_SIZE ;always a drone + BSSX player6_data, PR_SIZE ;always a drone + .endif + + BSSX kp_p1_crtplr, 16 + BSSX kp_p1_name1, 16 + BSSX kp_p1_name2, 16 + BSSX kp_p1_name3, 16 + BSSX kp_p1_name4, 16 + BSSX kp_p1_name5, 16 + BSSX kp_p1_name6, 16 + BSSX kp_p1_hdnbr, 16 + + BSSX kp_p2_crtplr, 16 + BSSX kp_p2_name1, 16 + BSSX kp_p2_name2, 16 + BSSX kp_p2_name3, 16 + BSSX kp_p2_name4, 16 + BSSX kp_p2_name5, 16 + BSSX kp_p2_name6, 16 + BSSX kp_p2_hdnbr, 16 + + BSSX kp_p3_crtplr, 16 + BSSX kp_p3_name1, 16 + BSSX kp_p3_name2, 16 + BSSX kp_p3_name3, 16 + BSSX kp_p3_name4, 16 + BSSX kp_p3_name5, 16 + BSSX kp_p3_name6, 16 + BSSX kp_p3_hdnbr, 16 + + BSSX kp_p4_crtplr, 16 + BSSX kp_p4_name1, 16 + BSSX kp_p4_name2, 16 + BSSX kp_p4_name3, 16 + BSSX kp_p4_name4, 16 + BSSX kp_p4_name5, 16 + BSSX kp_p4_name6, 16 + BSSX kp_p4_hdnbr, 16 + + + .bss temp_record, PR_SIZE + .bss packed_record, ((PKDPR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss player_stats, PS_SIZE*10h*4 + + .bss packed_tm_record, ((PKDTR_SIZE+15)/16)*16+32 + ;word align & pad 32 bits at end + + .bss tm_stat_ram, TR_SIZE + + + .bss record_sort_ptrs, 32*NUM_PRECORDS + +record_sort_ram equ SCRATCH+8*256*1024 + + + .bss hiscore_type, 16 + + + .bss packed_wrld_record, ((PKDWR_SIZE+15)/16)*16+32 ;word align & pad 32 bits + .bss wrld_recrd_ram, WR_SIZE + .bss hiscore_cnt,16 ;nbr of lines of data on screen + + .text + + + .asg 0,NAME1A + .asg 8,NAME2A + .asg 16,NAME3A + .asg 24,NAME4A + .asg 32,NAME5A + .asg 40,NAME6A + .asg 48,PIN1A + .asg 56,PIN2A + .asg 64,PIN3A + .asg 72,PIN4A + .asg 80,WINSTREAK + .asg 96,NAME1B + .asg 104,NAME2B + .asg 112,NAME3B + .asg 120,NAME4B + .asg 128,NAME5B + .asg 136,NAME6B + .asg 144,PIN1B + .asg 152,PIN2B + .asg 160,PIN3B + .asg 168,PIN4B + .asg 176,PTS_IN_GAME + .asg 192,NAME1C + .asg 200,NAME2C + .asg 208,NAME3C + .asg 216,NAME4C + .asg 224,NAME5C + .asg 232,NAME6C + .asg 240,PIN1C + .asg 248,PIN2C + .asg 256,PIN3C + .asg 264,PIN4C + .asg 272,REBNDS + .asg 288,NAME1D + .asg 296,NAME2D + .asg 304,NAME3D + .asg 312,NAME4D + .asg 320,NAME5D + .asg 328,NAME6D + .asg 336,PIN1D + .asg 344,PIN2D + .asg 352,PIN3D + .asg 360,PIN4D + .asg 368,ASSISTS + +;----------------------------------------------------------------------------- +; Reset all cmos world records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR reset_world_records + +;winstreak + movi default_wrld_records,a9,L + + movb *a9(NAME1A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1A + movb *a9(NAME2A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2A + movb *a9(NAME3A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3A + movb *a9(NAME4A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4A + movb *a9(NAME5A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5A + movb *a9(NAME6A),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6A + movb *a9(PIN1A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1A + movb *a9(PIN2A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2A + movb *a9(PIN3A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3A + movb *a9(PIN4A),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4A + move *a9(WINSTREAK),a0 + move a0,@wrld_recrd_ram+WR_WINSTREAK + +;points in game + movb *a9(NAME1B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1B + movb *a9(NAME2B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2B + movb *a9(NAME3B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3B + movb *a9(NAME4B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4B + movb *a9(NAME5B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5B + movb *a9(NAME6B),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6B + movb *a9(PIN1B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1B + movb *a9(PIN2B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2B + movb *a9(PIN3B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3B + movb *a9(PIN4B),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4B + move *a9(PTS_IN_GAME),a0 + move a0,@wrld_recrd_ram+WR_PTS_IN_GAME + +;rebounds in game + movb *a9(NAME1C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1C + movb *a9(NAME2C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2C + movb *a9(NAME3C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3C + movb *a9(NAME4C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4C + movb *a9(NAME5C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5C + movb *a9(NAME6C),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6C + movb *a9(PIN1C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1C + movb *a9(PIN2C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2C + movb *a9(PIN3C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3C + movb *a9(PIN4C),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4C + move *a9(REBNDS),a0 + move a0,@wrld_recrd_ram+WR_REBNDS_IN_GAME + +;ASSISTS in game + + movb *a9(NAME1D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME1D + movb *a9(NAME2D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME2D + movb *a9(NAME3D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME3D + movb *a9(NAME4D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME4D + movb *a9(NAME5D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME5D + movb *a9(NAME6D),a0 + subi '@',a0 + move a0,@wrld_recrd_ram+WR_NAME6D + movb *a9(PIN1D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN1D + movb *a9(PIN2D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN2D + movb *a9(PIN3D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN3D + movb *a9(PIN4D),a0 + subi '0',a0 + move a0,@wrld_recrd_ram+WR_PIN4D + move *a9(ASSISTS),a0 + move a0,@wrld_recrd_ram+WR_ASSISTS_IN_GAME + + callr put_world_record_in_cmos + rets ;nope + + +default_wrld_records + .string "DIVITA", "0000" + .word 2 ;winstreaks + .string "TURMEL", "0000" + .word 10 ;points in game + .string "DANIEL", "0000" + .word 3 ;rebounds in game + .string "EUGENE", "0000" + .word 4 ;assists in game + .even + + +;----------------------------------------------------------------------------- +; This routine stores the world record values from RAM to CMOS +;----------------------------------------------------------------------------- + SUBR put_world_record_in_cmos + + PUSH a6 + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a6(WR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1A) + + move *a6(WR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2A) + + move *a6(WR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3A) + + move *a6(WR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4A) + + move *a6(WR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5A) + + move *a6(WR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6A) + + move *a6(WR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1A) + + move *a6(WR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2A) + + move *a6(WR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3A) + + move *a6(WR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4A) + + move *a6(WR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_WINSTREAK) + +;points in game + + move *a6(WR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1B) + + move *a6(WR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2B) + + move *a6(WR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3B) + + move *a6(WR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4B) + + move *a6(WR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5B) + + move *a6(WR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6B) + + move *a6(WR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1B) + + move *a6(WR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2B) + + move *a6(WR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3B) + + move *a6(WR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4B) + + move *a6(WR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_PTS_IN_GAME) + +;rebounds + move *a6(WR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1C) + + move *a6(WR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2C) + + move *a6(WR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3C) + + move *a6(WR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4C) + + move *a6(WR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5C) + + move *a6(WR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6C) + + move *a6(WR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1C) + + move *a6(WR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2C) + + move *a6(WR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3C) + + move *a6(WR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4C) + + move *a6(WR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_REBNDS_IN_GAME) + +;ASSISTS + move *a6(WR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME1D) + + move *a6(WR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME2D) + + move *a6(WR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME3D) + + move *a6(WR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME4D) + + move *a6(WR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME5D) + + move *a6(WR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_NAME6D) + + move *a6(WR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN1D) + + move *a6(WR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN2D) + + move *a6(WR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN3D) + + move *a6(WR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a2(PKDWR_PIN4D) + + move *a6(WR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a2(PKDWR_ASSISTS_IN_GAME) + + callr calc_wrld_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDWR_CHECKSUM) + + PUSH a7 + movi WORLD_REC_ORIGIN,a7 ;start addr. + movi PKDWR_SIZE/8,a3 ;number bytes to write + movi packed_wrld_record,a2 +wric_1 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,wric_1 + + PULL a7 + PULL a6 + rets + + +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; Called from GAME OVER +; +; +; INPUT: nothing +; RETURNS: carry clear if player made the 'world record' record +;----------------------------------------------------------------------------- + SUBR update_world_records + + PUSH a6,a7,a10,a11 + callr get_world_record_from_cmos ;ret a6 - ptr to ram + + movi wrld_recrd_ram,a6,L + + move @PSTATUS2,a0 + btst 0,a0 ;plyr 1 in game ? + jrz uwr_1 ;br=nope + movi player1_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_1 ;br=plyr 1, no initials + move *a2(PR_COUNT),a0 + jrn uwr_1 ;br=plyr didn't enter inits. + movi player_stats+(0*PS_SIZE*10h),a3 + callr check_stats_against_world_record + +uwr_1 move @PSTATUS2,a0 + btst 1,a0 ;plyr 2 in game ? + jrz uwr_2 ;br=nope + movi player2_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_2 ;br=plyr 2, no initials + move *a2(PR_COUNT),a0 + jrn uwr_2 ;br=plyr didn't enter inits. + movi player_stats+(1*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_2 move @PSTATUS2,a0 + btst 2,a0 ;plyr 3 in game ? + jrz uwr_3 ;br=nope + movi player3_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_3 ;br=plyr 3, no initials + move *a2(PR_COUNT),a0 + jrn uwr_3 ;br=plyr didn't enter inits. + movi player_stats+(2*PS_SIZE*10h),a3 + callr check_stats_against_world_record + + +uwr_3 move @PSTATUS2,a0 + btst 3,a0 ;plyr 4 in game ? + jrz uwr_4 ;br=nope + movi player4_data,a2,L + move *a2(PR_NAME1),a0 + jrle uwr_4 ;br=plyr 4, no initials + move *a2(PR_COUNT),a0 + jrn uwr_4 ;br=plyr didn't enter inits. + movi player_stats+(3*PS_SIZE*10h),a3 + callr check_stats_against_world_record +uwr_4 + callr put_world_record_in_cmos + PULL a6,a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +; This routine checks the see if the player beat any of +; the 'world records', if so - update world record +; +; INPUT: reg a2 - ptr. to player data +; reg a3 - ptr to player game stat. data +; reg a6 - ptr. to ram copy of 'world record' record +;----------------------------------------------------------------------------- + SUBR check_stats_against_world_record + + move a2,a10 + addi PR_NAME1,a10 + +;check 'winstreak' + move *a2(PR_WINSTREAK),a14 + move *a6(WR_WINSTREAK),a0 + cmp a14,a0 + jrhi csawr_1 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1A,a11 + callr replace_world_rec_data + +;check 'points in game' +csawr_1 +;DJT Start + move *a3(PS_2PTS_MADE*10h),a14 + move *a3(PS_3PTS_MADE*10h),a0 +;DJT End + add a0,a14 + sll 1,a14 ;x 2 + add a0,a14 ;3 pts + move *a6(WR_PTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_2 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1B,a11 + callr replace_world_rec_data + +;check 'rebounds in game' +csawr_2 + move *a3(PS_OFF_REB*10h),a14 + move *a3(PS_DEF_REB*10h),a0 + add a0,a14 + move *a6(WR_REBNDS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_3 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1C,a11 + callr replace_world_rec_data + +;check 'assists' +csawr_3 + move *a3(PS_ASSISTS*10h),a14 + move *a6(WR_ASSISTS_IN_GAME),a0 + cmp a14,a0 + jrhi csawr_4 ;br=plyr didn't beat this record + move a6,a11 + addi WR_NAME1D,a11 + callr replace_world_rec_data +csawr_4 + rets + + +;----------------------------------------------------------------------------- +; This routine just replaces the name/pin number in the world record +; with the new champs name/pin number +; +; INPUT: reg. a10 - ptr. to first name letter in player data ram +; reg. a11 - ptr. to 'world record' name (ram copy) +; reg. a14 - new world record value to enter +;----------------------------------------------------------------------------- + SUBR replace_world_rec_data + + PUSH a10 + movk 10,a1 ;6 letters in name, 4 pin numbers +rwrd_1 move *a10+,a0 ;get data from player record + move a0,*a11+ ;put data in world record ram copy + dsj a1,rwrd_1 + move a14,*a11 ;save new world rec. value + PULL a10 + rets + + + .asg 10,PLR_NAME_PIN_CNT +;----------------------------------------------------------------------------- +; This routine searches the 'world record' record to see if +; this player is in it. +; +; +; INPUT: a2 = ptr to player data (player record) +; RETURNS: a14 = bit number(s) set for which world record (0-3 bits) +;----------------------------------------------------------------------------- + SUBR check_world_records + + PUSH a2 + callr get_world_record_from_cmos + PULL a2 + clr a14 + + movi wrld_recrd_ram,a6 + + move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1A,a5 + +;check winstreaks + movk PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_0 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_2 ;br=MATCH for winstreaks + dsj a8,ipwr_0 + inc a14 +; ori 0001h,a14 ;plyr. has this WORLD REC. + +;check pts per game +ipwr_2 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1B,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_3 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_5 ;br=MATCH for pts. per game + dsj a8,ipwr_3 + inc a14 +; ori 0010h,a14 ;plyr. has this WORLD REC. + +;check rebounds +ipwr_5 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1C,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_6 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_8 ;br=MATCH for rebounds + dsj a8,ipwr_6 + inc a14 +; ori 0100h,a14 ;plyr. has this WORLD REC. + +;check ASSISTS +ipwr_8 move a6,a5 + move a2,a3 + addi PR_NAME1,a3 + addi WR_NAME1D,a5 + + movi PLR_NAME_PIN_CNT,a8 ;name + pin number +ipwr_9 move *a3+,a0 + move *a5+,a1 + cmp a0,a1 + jrne ipwr_b ;br=MATCH for ASSISTS + dsj a8,ipwr_9 + inc a14 +; ori 1000h,a14 ;plyr. has this WORLD REC. +ipwr_b rets + + +;----------------------------------------------------------------------------- +; This routine stores thre world record values from RAM to CMOS +; +; RETURNS: a6 = ptr. to world record ram +;----------------------------------------------------------------------------- + SUBR get_world_record_from_cmos + + movi packed_wrld_record,a2 + movi PKDWR_SIZE/8,a3 ;number bytes to fetch + movi WORLD_REC_ORIGIN,a7 ;start addr. +gwr_1 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gwr_1 + + movi packed_wrld_record,a2 + movi wrld_recrd_ram,a6 + +;winstreak + move *a2(PKDWR_NAME1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1A) + + move *a2(PKDWR_NAME2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2A) + + move *a2(PKDWR_NAME3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3A) + + move *a2(PKDWR_NAME4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4A) + + move *a2(PKDWR_NAME5A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5A) + + move *a2(PKDWR_NAME6A),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6A) + + move *a2(PKDWR_PIN1A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1A) + + move *a2(PKDWR_PIN2A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2A) + + move *a2(PKDWR_PIN3A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3A) + + move *a2(PKDWR_PIN4A),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4A) + + move *a2(PKDWR_WINSTREAK),a0 + andi _8BITS,a0 + move a0,*a6(WR_WINSTREAK) + +;points in game + + move *a2(PKDWR_NAME1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1B) + + move *a2(PKDWR_NAME2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2B) + + move *a2(PKDWR_NAME3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3B) + + move *a2(PKDWR_NAME4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4B) + + move *a2(PKDWR_NAME5B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5B) + + move *a2(PKDWR_NAME6B),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6B) + + move *a2(PKDWR_PIN1B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1B) + + move *a2(PKDWR_PIN2B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2B) + + move *a2(PKDWR_PIN3B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3B) + + move *a2(PKDWR_PIN4B),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4B) + + move *a2(PKDWR_PTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_PTS_IN_GAME) + +;rebounds + move *a2(PKDWR_NAME1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1C) + + move *a2(PKDWR_NAME2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2C) + + move *a2(PKDWR_NAME3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3C) + + move *a2(PKDWR_NAME4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4C) + + move *a2(PKDWR_NAME5C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5C) + + move *a2(PKDWR_NAME6C),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6C) + + move *a2(PKDWR_PIN1C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1C) + + move *a2(PKDWR_PIN2C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2C) + + move *a2(PKDWR_PIN3C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3C) + + move *a2(PKDWR_PIN4C),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4C) + + move *a2(PKDWR_REBNDS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_REBNDS_IN_GAME) + +;ASSISTS + move *a2(PKDWR_NAME1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME1D) + + move *a2(PKDWR_NAME2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME2D) + + move *a2(PKDWR_NAME3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME3D) + + move *a2(PKDWR_NAME4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME4D) + + move *a2(PKDWR_NAME5D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME5D) + + move *a2(PKDWR_NAME6D),a0 + andi _5BITS,a0 + move a0,*a6(WR_NAME6D) + + move *a2(PKDWR_PIN1D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN1D) + + move *a2(PKDWR_PIN2D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN2D) + + move *a2(PKDWR_PIN3D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN3D) + + move *a2(PKDWR_PIN4D),a0 + andi _5BITS,a0 + move a0,*a6(WR_PIN4D) + + move *a2(PKDWR_ASSISTS_IN_GAME),a0 + andi _8BITS,a0 + move a0,*a6(WR_ASSISTS_IN_GAME) + + move *a2(PKDWR_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(WR_CHECKSUM) + callr calc_wrld_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gwr_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr reset_world_records +gwr_2 + rets + + +#***************************************************************************** +* INPUT: a6 = * temp world record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_wrld_rec_checksum + + PUSH a1 + clr a0 + + move *a6(WR_NAME1A),a1 + xor a1,a0 + move *a6(WR_NAME2A),a1 + xor a1,a0 + move *a6(WR_NAME3A),a1 + xor a1,a0 + move *a6(WR_NAME4A),a1 + xor a1,a0 + move *a6(WR_NAME5A),a1 + xor a1,a0 + move *a6(WR_NAME6A),a1 + xor a1,a0 + move *a6(WR_PIN1A),a1 + xor a1,a0 + move *a6(WR_PIN2A),a1 + xor a1,a0 + move *a6(WR_PIN3A),a1 + xor a1,a0 + move *a6(WR_PIN4A),a1 + xor a1,a0 + move *a6(WR_WINSTREAK),a1 + xor a1,a0 + + move *a6(WR_NAME1B),a1 + xor a1,a0 + move *a6(WR_NAME2B),a1 + xor a1,a0 + move *a6(WR_NAME3B),a1 + xor a1,a0 + move *a6(WR_NAME4B),a1 + xor a1,a0 + move *a6(WR_NAME5B),a1 + xor a1,a0 + move *a6(WR_NAME6B),a1 + xor a1,a0 + move *a6(WR_PIN1B),a1 + xor a1,a0 + move *a6(WR_PIN2B),a1 + xor a1,a0 + move *a6(WR_PIN3B),a1 + xor a1,a0 + move *a6(WR_PIN4B),a1 + xor a1,a0 + move *a6(WR_PTS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1C),a1 + xor a1,a0 + move *a6(WR_NAME2C),a1 + xor a1,a0 + move *a6(WR_NAME3C),a1 + xor a1,a0 + move *a6(WR_NAME4C),a1 + xor a1,a0 + move *a6(WR_NAME5C),a1 + xor a1,a0 + move *a6(WR_NAME6C),a1 + xor a1,a0 + move *a6(WR_PIN1C),a1 + xor a1,a0 + move *a6(WR_PIN2C),a1 + xor a1,a0 + move *a6(WR_PIN3C),a1 + xor a1,a0 + move *a6(WR_PIN4C),a1 + xor a1,a0 + move *a6(WR_REBNDS_IN_GAME),a1 + xor a1,a0 + + move *a6(WR_NAME1D),a1 + xor a1,a0 + move *a6(WR_NAME2D),a1 + xor a1,a0 + move *a6(WR_NAME3D),a1 + xor a1,a0 + move *a6(WR_NAME4D),a1 + xor a1,a0 + move *a6(WR_NAME5D),a1 + xor a1,a0 + move *a6(WR_NAME6D),a1 + xor a1,a0 + move *a6(WR_PIN1D),a1 + xor a1,a0 + move *a6(WR_PIN2D),a1 + xor a1,a0 + move *a6(WR_PIN3D),a1 + xor a1,a0 + move *a6(WR_PIN4D),a1 + xor a1,a0 + move *a6(WR_ASSISTS_IN_GAME),a1 + xor a1,a0 + + andi _8BITS,a0 + PULL a1 + rets + +#*---------------------------------------------------------------------------- +; Clears out all cmos team records +; +; Called from FACTORY RESTORE +;----------------------------------------------------------------------------- + SUBR clear_team_records + + clr a0 + movi TR_SIZE/16,a1 + movi tm_stat_ram,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_TM_RECORDS,a11 ;nbr records + movi TEAM_RECORD_ORIGIN,a10 ;start addr. +#clear_loop + PUSH a10,a11 + + callr put_temp_tm_record ;write out record + + PULL a10,a11 + addi PKDTR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + rets + + +#***************************************************************************** +* INPUT: a6 = * team data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_tm_record + + PUSH a6 + movi tm_stat_ram,a6 + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a1 + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a2(PKDTR_PTS_ALLOWED) + + move *a6(TR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a2(PKDTR_WINS) + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDTR_SIZE/8,a3 ;number bytes to write + movi packed_tm_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and stores +; the data in ram +; +; INPUT: a0 = team number (0-NUM_TEAMS) +; +;OUTPUT: a6 = ptr. to team stats ram +;----------------------------------------------------------------------------- + SUBRP get_cmos_team_record_into_ram + + callr get_team_record_from_cmos + +;unpack values + movi tm_stat_ram,a6,L + movi packed_tm_record,a2 + + move *a2(PKDTR_PTS_SCORED),a1 ;total points scored + andi _16BITS,a1 + move a1,*a6(TR_PTS_SCORED) + + move *a2(PKDTR_PTS_ALLOWED),a1 ;total points allowed + andi _16BITS,a1 + move a1,*a6(TR_PTS_ALLOWED) + + move *a2(PKDTR_WINS),a1 ;total team wins + andi _11BITS,a1 + move a1,*a6(TR_WINS) + + move *a2(PKDTR_TM_CHECKSUM),a1 + andi _8BITS,a1 + move a1,*a6(TR_TM_CHECKSUM) + callr calc_team_rec_checksum ;8 bit xor checksum + cmp a0,a1 + jreq gctrir_2 ;br=checksums ok. + + .if DEBUG + LOCKUP + eint + .endif + callr clear_team_records +gctrir_2 + rets + + +;----------------------------------------------------------------------------- +; This routine get the appriopate team record from CMOS and returns +; the pointer to the packed ram +; +; INPUT: a0 = team number (0-NUM_TEAMS-1) +; +;OUTPUT: a2 = ptr. to team stats ram +; a7 = ptr. to team stats record +;----------------------------------------------------------------------------- + SUBRP get_team_record_from_cmos + + PUSH a0,a3,a14 + +;compute offset into team record CMOS based on team number + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a0,a0 + jreq gctr_1 ;dont add a offset if 0th team +gctr_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a0,gctr_0 +gctr_1 + +;read team record into ram + movi PKDTR_SIZE/8,a3 ;number bytes to fetch + movi packed_tm_record,a2 +gctr_2 + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,gctr_2 + + movi packed_tm_record,a2 + PULL a0,a3,a14 + rets + + + + .asg 0,TM1_SCORE + .asg 16,TM2_SCORE + + +;----------------------------------------------------------------------------- +; This routine updates the last two NBA teams records which played +; a FULL GAME. +; +; INPUT: none +; RETURN: none +;----------------------------------------------------------------------------- + SUBR update_team_stats_records + + +;team 1 + move @PSTATUS2,a0 + andi 011b,a0 ;human plyr 1 or 2 ? + jrz utsr_2 ;br=nope + + move @team1,a0 + jrn utsr_2 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + move *a1(TM2_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_1 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_1 + move @team1,a1 + callr put_team_record_in_cmos + +;team 2 +utsr_2 + move @PSTATUS2,a0 + andi 01100b,a0 ;human plyr 3 or 4 ? + jrz utsr_4 ;br=nope + + move @team2,a0 + jrn utsr_4 + callr get_cmos_team_record_into_ram + movi tm_stat_ram,a6,L + + movi scores,a1 ;addr of team scores + move *a1(TM2_SCORE),a0 ;score from team 2 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_SCORED),a14 + add a0,a14 + move a14,*a6(TR_PTS_SCORED) + + move *a1(TM1_SCORE),a0 ;score from team 1 + srl 1,a0 ;divide 1/2 (more resoultion) + move *a6(TR_PTS_ALLOWED),a14 + add a0,a14 + move a14,*a6(TR_PTS_ALLOWED) + + move *a1(TM2_SCORE),a0 ;score from team 1 + move *a1(TM1_SCORE),a14 ;score from team 2 + cmp a14,a0 ;did team1 win ? + jrlo utsr_3 ;br=no + move *a6(TR_WINS),a0 + inc a0 + move a0,*a6(TR_WINS) +utsr_3 + move @team2,a1 + callr put_team_record_in_cmos +utsr_4 rets + + +;----------------------------------------------------------------------------- +; This routine saves data from team stat ram to team records +; +; INPUT: reg a0 - NBA team number +; reg a6 - ptr. to team stat ram +;----------------------------------------------------------------------------- + SUBRP put_team_record_in_cmos + + movi packed_tm_record,a2 + + move *a6(TR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_SCORED) ;total points scored + + move *a6(TR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDTR_PTS_ALLOWED) ;total points allowed + + move *a6(TR_WINS),a0 + andi _11BITS,a0 + move a0,*a2(PKDTR_WINS) ;total team wins + + callr calc_team_rec_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDTR_TM_CHECKSUM) + +;compute addr of team record + + movi TEAM_RECORD_ORIGIN,a7 ;start addr. of recs + move a1,a1 + jrz ptrc_1 ;dont add a offset if 0th team +ptrc_0 addi (PKDTR_SIZE*2),a7 ;size of rec in words + dsj a1,ptrc_0 +ptrc_1 + movi PKDTR_SIZE/8,a3 ;nbr of bytes per rec + movi packed_tm_record,a2 +ptrc_2 + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,ptrc_2 + rets + +;----------------------------------------------------------------------------- +* INPUT: a6 = * temp team record ram +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +;----------------------------------------------------------------------------- + SUBRP calc_team_rec_checksum + + PUSH a1 + clr a0 + move *a6(TR_PTS_SCORED),a1 + xor a1,a0 + move *a6(TR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(TR_WINS),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + +;----------------------------------------------------------------------------- +; This routine computes the TEAMS defensive and offensive rank +; +; +; INPUT: a0 - NBA team number (0-28) +;RETURN: a6 - ptr. to team stat. ram +; +; Destroys all registers +;----------------------------------------------------------------------------- + SUBR compute_team_def_off_rank + + PUSH a1 + callr get_cmos_team_record_into_ram ;ret.a6 - ptr to team stat ram + + movi NUM_TM_RECORDS,a3 ;nbr. records to parse + movi NUM_TEAMS-1,a0 + movk NUM_TEAMS,a4 ;current off. rank (worst) + move a4,a5 ;current def. rank (worst) + + move *a6(TR_PTS_SCORED),a14 + move *a6(TR_PTS_ALLOWED),a11 +ctor_1 + callr get_team_record_from_cmos ;get teams stats in packed ram + +;offensive rank + move *a2(PKDTR_PTS_SCORED),a1 + andi _16BITS,a1 ;unpack pts. scored + cmp a14,a1 ;is this team worse ? + jrgt ctor_2 ;br=yes + dec a4 ;better rank + +;defensive rank +ctor_2 + move *a2(PKDTR_PTS_ALLOWED),a1 + andi _16BITS,a1 ;unpack pts. allowed + cmp a11,a1 ;is this team worse ? + jrgt ctor_3 ;br=yes + dec a5 ;better rank + +ctor_3 dsj a0,ctor_1 + + movi tm_stat_ram,a6,L + + move a4,a4 + jrgt ctor_4 + movk 1,a4 +ctor_4 + move a4,*a6(TR_OFF_RANK) + + move a5,a5 + jrgt ctor_5 + movk 1,a5 +ctor_5 + move a5,*a6(TR_DEF_RANK) + PULL a1 + rets + +#****************************************************************************** +* This routine boosts the players attribute points if he has +* a winning streak. +******************************************************************************* + SUBR award_plr_attrib_pts + + movk 3,a10 ;start with player 4 + clr a11 +#apap_0 + move a10,a0 + sll 5,a0 + addi #plr_data_tbl,a0 + move *a0,a0,L + move *a0(PR_NAME1),a14 + jrle #nxt + move *a0(PR_CREATED_PLYR),a14 + jrle #nxt + move *a0(PR_TOTAL_PTS),a14 +;DJT Start +; cmpi 69,a14 ;too many ? + cmpi 62,a14 ;too many ? +;DJT End + jrhs #nxt ;br=plyr has too many points + + move *a0(PR_WON),a5 + +;must add 1 to value if won game, cause stats are not updated yet + + move @scores,a8 + move @scores+16,a9 + move a10,a14 + srl 1,a14 + jrz #tm1 ;br=team 1 + sub a9,a8 + jrnn #nxt ;br=lost + inc a5 + jruc #tmd +#tm1 + sub a8,a9 + jrnn #nxt ;br=player lost + inc a5 +#tmd + movk 3,a1 + modu a1,a5 ;divide by 3 + jrnz #nxt ;br=not third win + + movk 2,a9 ;2 pts. + move *a0(PR_WON),a14 + subk 12,a14 ;12 wins ? + jrle #wn16 ;br=no +;DJT Start +; movk 2,a9 ;2 pts. + movk 1,a9 ;1 pt. +;DJT End +#wn16 + move *a0(PR_TOTAL_PTS),a14 + add a9,a14 + move a14,*a0(PR_TOTAL_PTS) + + move a10,a9 + sll 4,a9 + addi #plyr_box_xs,a9 + move *a9,a9 + sll 16,a9 + move a9,a0 + movi [150,0],a1 + +;create box + movi firstwin,a2,L + movi 20500,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi ATTRIB_PLAQ_ID,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;create message + + move a9,a0 + movi [150,0],a1 + movi GAINED_TXT,a2,L + movi 20600,a3 ;z pos (sorting) + calla BEGINOBJ2 + + inc a11 + SOUND1 win_snd + +#nxt + dec a10 + jrge #apap_0 +; dsj a10,#apap_0 + + move a11,a11 + jrz #ext ;br=no plyrs reached level + + SLEEP 175 + + movi ATTRIB_PLAQ_ID,a0 + calla obj_del1c +#ext RETP + + + +#plr_data_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#plyr_box_xs + .word 1,100,200,300 + + + +#****************************************************************************** +* This routine is called from GAME OVER +******************************************************************************* + SUBRP save_player_records +;DJT Start + +;Top five teams +_UTA .equ 26 +_SAN .equ 23 +_ORL .equ 18 +_SEA .equ 24 +_CHI .equ 3 +;DJT End + + move @scores,a0 ;team 1 scores + move @scores+10h,a1 ;team 2 scores + +;normalize scores, cause maybe someone is fucking with us, cheating to get +; on the high score pages + + cmpi 80,a0 + jrls #vok + movi 80,a0 +#vok + cmpi 20,a0 + jrhs #vok1 + movk 20,a0 +#vok1 + cmpi 80,a1 + jrls #vok2 + movi 80,a1 +#vok2 + cmpi 20,a1 + jrhs #vok3 + movk 20,a1 +#vok3 + move @PSTATUS2,a14 + andi 0011b,a14 + jrz #chktm2 ;br=no humans plyrs on team 1 + move @player1_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player1_data+PR_PTS_SCORED + + move @player2_data+PR_PTS_SCORED,a14 + add a0,a14 + move a14,@player2_data+PR_PTS_SCORED + + move @player1_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player1_data+PR_PTS_ALLOWED + + move @player2_data+PR_PTS_ALLOWED,a14 + add a1,a14 + move a14,@player2_data+PR_PTS_ALLOWED + +#chktm2 + move @PSTATUS2,a14 + andi 01100b,a14 + jrz #chktm ;br=no humans plyrs on team 2 + move @player3_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player3_data+PR_PTS_SCORED + + move @player4_data+PR_PTS_SCORED,a14 + add a1,a14 + move a14,@player4_data+PR_PTS_SCORED + + move @player3_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player3_data+PR_PTS_ALLOWED + + move @player4_data+PR_PTS_ALLOWED,a14 + add a0,a14 + move a14,@player4_data+PR_PTS_ALLOWED + +#chktm + move @scores,a0 + move @scores+10h,a1 + cmp a0,a1 + jrgt #t2_wins +;#t1_wins + move @player1_data+PR_WON,a0 + inc a0 + move a0,@player1_data+PR_WON + move @player1_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap1 + move a0,@player1_data+PR_WINSTREAK +#no_wrap1 + + move @player2_data+PR_WON,a0 + inc a0 + move a0,@player2_data+PR_WON + move @player2_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap2 + move a0,@player2_data+PR_WINSTREAK +#no_wrap2 + + clr a0 + move a0,@player3_data+PR_WINSTREAK + move a0,@player4_data+PR_WINSTREAK + + move @team2,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 01100b,a0 ;count wins for top five teams + jrz #t2cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t2cpu + move @player1_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player1_data+PR_TEAMSDEF,L + move @player2_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player2_data+PR_TEAMSDEF,L + jruc #cont1 + +#t2_wins + move @player3_data+PR_WON,a0 + inc a0 + move a0,@player3_data+PR_WON + move @player3_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap3 + move a0,@player3_data+PR_WINSTREAK +#no_wrap3 + + move @player4_data+PR_WON,a0 + inc a0 + move a0,@player4_data+PR_WON + move @player4_data+PR_WINSTREAK,a0 + inc a0 + andi _6BITS,a0 + jrz #no_wrap4 + move a0,@player4_data+PR_WINSTREAK +#no_wrap4 + + clr a0 + move a0,@player1_data+PR_WINSTREAK + move a0,@player2_data+PR_WINSTREAK + + move @team1,a0 + movk 1,a1 + sll a0,a1 + + move @PSTATUS2,a0 ;if opponent is human then don't + andi 011b,a0 ;count wins for top five teams + jrz #t1cpu + andni (1<<_CHI) | (1<<_SEA) | (1<<_ORL) | (1<<_SAN) | (1<<_UTA),a1 +#t1cpu + move @player3_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player3_data+PR_TEAMSDEF,L + move @player4_data+PR_TEAMSDEF,a0,L + or a1,a0 + move a0,@player4_data+PR_TEAMSDEF,L +#cont1 + + calla dec_lastplay + + move *a13(PC_DATADDR),a0,L + PUSHP a0 + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1 + move @player1_data+PR_NAME1,a0 + jrle #no1 + movi player1_data,a6 + calla save_record +#no1 + move @PSTATUS,a0 + btst 1,a0 + jrz #no2 + move @player2_data+PR_NAME1,a0 + jrle #no2 + movi player2_data,a6 + calla save_record +#no2 + move @PSTATUS,a0 + btst 2,a0 + jrz #no3 + move @player3_data+PR_NAME1,a0 + jrle #no3 + movi player3_data,a6 + calla save_record +#no3 + move @PSTATUS,a0 + btst 3,a0 + jrz #no4 + move @player4_data+PR_NAME1,a0 + jrle #no4 + movi player4_data,a6 + calla save_record +#no4 + calla get_all_records ;resort players + calla sort_wins ;for new ranking + + + move @PSTATUS,a0 + btst 0,a0 + jrz #no1b + move @player1_data+PR_NAME1,a0 + jrle #no1b + movi player1_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no1b + + move @PSTATUS,a0 + btst 1,a0 + jrz #no2b + move @player2_data+PR_NAME1,a0 + jrle #no2b + movi player2_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no2b + + move @PSTATUS,a0 + btst 2,a0 + jrz #no3b + move @player3_data+PR_NAME1,a0 + jrle #no3b + movi player3_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no3b + + move @PSTATUS,a0 + btst 3,a0 + jrz #no4b + move @player4_data+PR_NAME1,a0 + jrle #no4b + movi player4_data,a0 + move a0,*a13(PC_DATADDR),L ;start of player data + callr get_player_record ;re-calc rank etc.. +#no4b + PULLP a0 + move a0,*a13(PC_DATADDR),L + rets + + + +#***************************************************************************** + + SUBR clear_player_stats + + clr a0 + movi player_stats,a1 + movi PS_SIZE*4,b0 +#clear_next + move a0,*a1+ + dsj b0,#clear_next + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* RETURN: a14 = stat amount +* +* +* TRASHES: a0,a1 +*----------------------------------------------------------------------------- + + SUBR get_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR inc_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + inc a14 + move a14,*a0 + rets + +#***************************************************************************** +* +* INPUT: a0 = stat number (use equates in GAME.EQU) +* a1 = player number +* +* TRASHES: a0,a1,a14 +*----------------------------------------------------------------------------- + + SUBR dec_player_stat + + movi PS_SIZE,a14 + mpyu a14,a1 ;player number * PS_SIZE + add a1,a0 ;+ stat offset + sll 4,a0 ;x 16 bits + addi player_stats,a0 ;+ base address + move *a0,a14 + dec a14 + move a14,*a0 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a0 = 8 bit checksum value +* +* calculates an 8 bit xor checksum of the player data +*----------------------------------------------------------------------------- + SUBRP calc_checksum + + PUSH a1 + clr a0 + + move *a6(PR_COUNT),a1 + xor a1,a0 + move *a6(PR_WON),a1 + xor a1,a0 + move *a6(PR_LOST),a1 + xor a1,a0 + move *a6(PR_LASTPLAY),a1 + xor a1,a0 + move *a6(PR_NAME1),a1 + xor a1,a0 + move *a6(PR_NAME2),a1 + xor a1,a0 + move *a6(PR_NAME3),a1 + xor a1,a0 + move *a6(PR_NAME4),a1 + xor a1,a0 + move *a6(PR_NAME5),a1 + xor a1,a0 + move *a6(PR_NAME6),a1 + xor a1,a0 + move *a6(PR_PIN_NBR1),a1 + xor a1,a0 + move *a6(PR_PIN_NBR2),a1 + xor a1,a0 + move *a6(PR_PIN_NBR3),a1 + xor a1,a0 + move *a6(PR_PIN_NBR4),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF),a1 + xor a1,a0 + move *a6(PR_TEAMSDEF+10h),a1 + xor a1,a0 + move *a6(PR_WINSTREAK),a1 + xor a1,a0 + move *a6(PR_TOTAL_PTS),a1 + xor a1,a0 + move *a6(PR_HEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_WEIGHT_PTS),a1 + xor a1,a0 + move *a6(PR_SPEED_PTS),a1 + xor a1,a0 + move *a6(PR_POWER_PTS),a1 + xor a1,a0 + move *a6(PR_SHOOT_PTS),a1 + xor a1,a0 + move *a6(PR_DUNKS_PTS),a1 + xor a1,a0 + move *a6(PR_STEAL_PTS),a1 + xor a1,a0 + move *a6(PR_BLOCKS_PTS),a1 + xor a1,a0 + move *a6(PR_HEAD_NBR),a1 + xor a1,a0 + move *a6(PR_CREATED_PLYR),a1 + xor a1,a0 + move *a6(PR_NICKNAME_NBR),a1 + xor a1,a0 + move *a6(PR_PTS_SCORED),a1 + xor a1,a0 + move *a6(PR_PTS_ALLOWED),a1 + xor a1,a0 + move *a6(PR_UNIFORM_NBR),a1 + xor a1,a0 + move *a6(PR_TRIVIA_PTS),a1 + xor a1,a0 + move *a6(PR_PRIVILEGES),a1 + xor a1,a0 + andi _8BITS,a0 + PULL a1 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record +*----------------------------------------------------------------------------- + SUBRP get_temp_record + + PUSH a6,a7 + movi temp_record,a6 + jruc #start + + SUBRP get_plr_record + + PUSH a6,a7 ;a6 = * player data +#start + movi RECORD_SELECT,A1 + calla SET_PAGE + + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to fetch + movi packed_record,a2 +#next_word + calla RC_BYTEI + movb a0,*a2 + addk 8,a2 + dsj a3,#next_word + + movi packed_record,a2 + + move *a2(PKDPR_COUNT),a1 ;total plays count + andi _10BITS,a1 + move a1,*a6(PR_COUNT) + + move *a2(PKDPR_WON),a0 + andi _10BITS,a0 + move a0,*a6(PR_WON) + + sub a0,a1 ;total plays - wins = losses + + move a1,*a6(PR_LOST) + + move *a2(PKDPR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a6(PR_LASTPLAY) + + move *a2(PKDPR_NAME1),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME1) + + move *a2(PKDPR_NAME2),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME2) + + move *a2(PKDPR_NAME3),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME3) + + move *a2(PKDPR_NAME4),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME4) + + move *a2(PKDPR_NAME5),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME5) + + move *a2(PKDPR_NAME6),a0 + andi _5BITS,a0 + move a0,*a6(PR_NAME6) + + move *a2(PKDPR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR1) + + move *a2(PKDPR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR2) + + move *a2(PKDPR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR3) + + move *a2(PKDPR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a6(PR_PIN_NBR4) + + move *a2(PKDPR_TEAMSDEF),a1,L + andi _30BITS,a1 + move a1,*a6(PR_TEAMSDEF),L + + move *a2(PKDPR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a6(PR_WINSTREAK) + + move *a2(PKDPR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a6(PR_TOTAL_PTS) + + move *a2(PKDPR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_HEIGHT_PTS) + + move *a2(PKDPR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_WEIGHT_PTS) + + move *a2(PKDPR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SPEED_PTS) + + move *a2(PKDPR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_POWER_PTS) + + move *a2(PKDPR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_SHOOT_PTS) + + move *a2(PKDPR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_DUNKS_PTS) + + move *a2(PKDPR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_STEAL_PTS) + + move *a2(PKDPR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a6(PR_BLOCKS_PTS) + + move *a2(PKDPR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a6(PR_HEAD_NBR) + + move *a2(PKDPR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a6(PR_CREATED_PLYR) + + move *a2(PKDPR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a6(PR_NICKNAME_NBR) + + move *a2(PKDPR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_SCORED) + + move *a2(PKDPR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a6(PR_PTS_ALLOWED) + + move *a2(PKDPR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a6(PR_UNIFORM_NBR) + + move *a2(PKDPR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a6(PR_TRIVIA_PTS) + + move *a2(PKDPR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a6(PR_PRIVILEGES) + + PUSH a2 + clr a0 + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + move a0,*a6(PR_NUMDEF) ;number teams defeated + PULL a2 + + move *a2(PKDPR_CHECKSUM),a0 + andi _8BITS,a0 + move a0,*a6(PR_CHECKSUM) + move a0,a1 + callr calc_checksum + cmp a0,a1 + jreq #checksum_ok + + .if DEBUG + LOCKUP + eint + .endif + + callr clear_record ;bad checksum, so delete record +#checksum_ok + PULL a6,a7 + rets + + + +#***************************************************************************** +* INPUT: a6 = * player data +* a10 = * cmos record dest +*----------------------------------------------------------------------------- + SUBRP put_temp_record + + PUSH a6 + movi temp_record,a6 + jruc #start + + SUBRP put_plr_record + + PUSH a6 +#start + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi packed_record,a2 + + move *a6(PR_COUNT),a1 + andi _10BITS,a1 + move a1,*a2(PKDPR_COUNT) + + move *a6(PR_WON),a0 + andi _10BITS,a0 + move a0,*a2(PKDPR_WON) + + sub a0,a1 + move a1,*a6(PR_LOST) ;used for calc checksum + + move *a6(PR_LASTPLAY),a0 + andi _11BITS,a0 + move a0,*a2(PKDPR_LASTPLAY) + + move *a6(PR_NAME1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME1) + + move *a6(PR_NAME2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME2) + + move *a6(PR_NAME3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME3) + + move *a6(PR_NAME4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME4) + + move *a6(PR_NAME5),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME5) + + move *a6(PR_NAME6),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_NAME6) + + move *a6(PR_PIN_NBR1),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR1) + + move *a6(PR_PIN_NBR2),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR2) + + move *a6(PR_PIN_NBR3),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR3) + + move *a6(PR_PIN_NBR4),a0 + andi _5BITS,a0 + move a0,*a2(PKDPR_PIN_NBR4) + + move *a6(PR_TEAMSDEF),a0,L + andi _30BITS,a0 + move a0,*a2(PKDPR_TEAMSDEF),L + + move *a6(PR_WINSTREAK),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_WINSTREAK) + + move *a6(PR_TOTAL_PTS),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_TOTAL_PTS) + + move *a6(PR_HEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_HEIGHT_PTS) + + move *a6(PR_WEIGHT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_WEIGHT_PTS) + + move *a6(PR_SPEED_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SPEED_PTS) + + move *a6(PR_POWER_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_POWER_PTS) + + move *a6(PR_SHOOT_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_SHOOT_PTS) + + move *a6(PR_DUNKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_DUNKS_PTS) + + move *a6(PR_STEAL_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_STEAL_PTS) + + move *a6(PR_BLOCKS_PTS),a0 + andi _4BITS,a0 + move a0,*a2(PKDPR_BLOCKS_PTS) + + move *a6(PR_HEAD_NBR),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_HEAD_NBR) + + move *a6(PR_CREATED_PLYR),a0 + andi _1BIT,a0 + move a0,*a2(PKDPR_CREATED_PLYR) + + move *a6(PR_NICKNAME_NBR),a0 + andi _6BITS,a0 + move a0,*a2(PKDPR_NICKNAME_NBR) + + move *a6(PR_PTS_SCORED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_SCORED) + + move *a6(PR_PTS_ALLOWED),a0 + andi _16BITS,a0 + move a0,*a2(PKDPR_PTS_ALLOWED) + + move *a6(PR_UNIFORM_NBR),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_UNIFORM_NBR) + + move *a6(PR_TRIVIA_PTS),a0 + andi _8BITS,a0 + move a0,*a2(PKDPR_TRIVIA_PTS) + + move *a6(PR_PRIVILEGES),a0 + andi _7BITS,a0 + move a0,*a2(PKDPR_PRIVILEGES) + + callr calc_checksum ;8 bit xor checksum + andi _8BITS,a0 + move a0,*a2(PKDPR_CHECKSUM) + + PUSH a7 + move a10,a7 + + movi PKDPR_SIZE/8,a3 ;number bytes to write + movi packed_record,a2 +#next_word + movb *a2,a0 + calla WC_BYTEI + addk 8,a2 + dsj a3,#next_word + + PULL a7 + PULL a6 + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- +* RETURN: a10 = * matching CMOS record (a10 = 0 if no match found) +* a11 = record number +*----------------------------------------------------------------------------- + SUBRP find_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + clr a11 + movi RECORD_ORIGIN,a10 +#search_loop + callr get_temp_record ;data in temp_record + callr compare_record + jrne #no_match + rets + +#no_match + addi PKDPR_SIZE*2,a10 ;cmos words + + inc a11 + cmpi NUM_PRECORDS-1,a11 + jrlo #search_loop +; dsj a11,#search_loop + clr a10 + rets + + +#***************************************************************************** +* INPUT: NONE +*----------------------------------------------------------------------------- +* RETURN: a10 = * free CMOS record +*----------------------------------------------------------------------------- + SUBRP get_free_record + + movi RECORD_SELECT,A1 + calla SET_PAGE + + movi 1024,a8 ;last play count (max) + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 + move a10,a9 ;least used record to date +#search_loop + callr get_temp_record +; move @temp_record+PR_COUNT,a0 +; jrz #free_record + + move @temp_record+PR_COUNT,a0 + jrnz #plyd + move @temp_record+PR_CREATED_PLYR,a0 + jrle #free_record ;br=!created plr & no gme plyd +#plyd + move @temp_record+PR_LASTPLAY,a0 + + cmp a8,a0 ;a0-a8 + jrhs #skip ;skip if a0 >= a8 + move a0,a8 + move a10,a9 ;least used record to date +#skip ;(lowest lastplay count) + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#search_loop + move a9,a10 + rets + +#free_record + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP compare_record + + move @temp_record+PR_COUNT,a1 ;valid record? + jrnz #mybe ;br=so far... + + move @temp_record+PR_CREATED_PLYR,a1 ;created player ? + jrle #no_match ;br=yes, and no games played + +#mybe move *a6(PR_NAME1),a0 + move @temp_record+PR_NAME1,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME2),a0 + move @temp_record+PR_NAME2,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME3),a0 + move @temp_record+PR_NAME3,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME4),a0 + move @temp_record+PR_NAME4,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME5),a0 + move @temp_record+PR_NAME5,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_NAME6),a0 + move @temp_record+PR_NAME6,a1 + cmp a0,a1 + jrne #no_match + + move *a6(PR_PIN_NBR1),a0 ;just entered pin number #1 + move @temp_record+PR_PIN_NBR1,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR2),a0 ;just entered pin number #2 + move @temp_record+PR_PIN_NBR2,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR3),a0 ;just entered pin number #3 + move @temp_record+PR_PIN_NBR3,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + + move *a6(PR_PIN_NBR4),a0 ;just entered pin number #4 + move @temp_record+PR_PIN_NBR4,a1 ;number in players record + cmp a0,a1 ;do they match ? + jrne #no_match ;br=no + rets ;Z set + +#no_match + movi 1,a0 ;clear Z + rets + +#***************************************************************************** +* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 ) +* RETURN: a2 = player rank +* a9 = ptr to record sort array +*----------------------------------------------------------------------------- + SUBR get_plr_rank + + PUSH a8 + movk 1,a2 + movi record_sort_ptrs,a9 +#loop + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + cmp a4,a0 + jreq #found_match + + addi 20h,a9 + inc a2 + cmpi NUM_PRECORDS,a2 + jrls #loop +#found_match + PULL a8 + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP get_player_record + + move *a13(PC_DATADDR),a6,L ;start of player data + + callr find_record + move a10,a10 + jrz #no_match + callr get_plr_record + +; movi NUM_PRECORDS,a4 +; sub a11,a4 ;record number + + move a11,a4 + + callr get_plr_rank + move *a13(PC_DATADDR),a6,L ;start of player data + move a2,*a6(PR_RANK) + rets + +;DJT Start + SUBR gpr_no_match +;DJT End +#no_match + clr a0 + move a0,*a6(PR_COUNT) + move a0,*a6(PR_WON) + move a0,*a6(PR_LOST) + move a0,*a6(PR_LASTPLAY) + move a0,*a6(PR_TEAMSDEF),L + move a0,*a6(PR_NUMDEF) + move a0,*a6(PR_NUMDEFOLD) + move a0,*a6(PR_WINSTREAK) + move a0,*a6(PR_TOTAL_PTS) + move a0,*a6(PR_HEIGHT_PTS) + move a0,*a6(PR_WEIGHT_PTS) + move a0,*a6(PR_SPEED_PTS) + move a0,*a6(PR_POWER_PTS) + move a0,*a6(PR_SHOOT_PTS) + move a0,*a6(PR_DUNKS_PTS) + move a0,*a6(PR_STEAL_PTS) + move a0,*a6(PR_BLOCKS_PTS) + move a0,*a6(PR_HEAD_NBR) + move a0,*a6(PR_CREATED_PLYR) + move a0,*a6(PR_NICKNAME_NBR) + move a0,*a6(PR_PTS_SCORED) + move a0,*a6(PR_PTS_ALLOWED) + move a0,*a6(PR_UNIFORM_NBR) + move a0,*a6(PR_TRIVIA_PTS) + move a0,*a6(PR_PRIVILEGES) + movi NUM_PRECORDS,a0 +; movi 300,a0 + move a0,*a6(PR_RANK) + rets + + +#***************************************************************************** +* INPUT: a6 = * player data +*----------------------------------------------------------------------------- + SUBRP save_record + + callr find_record + move a10,a10 + jrnz #found_match + movk 1,a0 ;1st game + move a0,*a6(PR_COUNT) + movi 50,a0 + move a0,*a6(PR_LASTPLAY) + callr get_free_record + callr put_plr_record + rets + +#found_match + + move *a6(PR_COUNT),a0 + cmpi 1023,a0 + jrhs #at_max + inc a0 ;play count (check for wrap!!!) + move a0,*a6(PR_COUNT) +#at_max + move *a6(PR_LASTPLAY),a0 + addi 50,a0 + cmpi 1023,a0 + jrle #ok + movi 1023,a0 +#ok + move a0,*a6(PR_LASTPLAY) ;zero lastplay count + move *a6(PR_NUMDEF),a0 + move a0,*a6(PR_NUMDEFOLD) + callr put_plr_record + rets + + +#***************************************************************************** +* decs lastplay count for all records +*----------------------------------------------------------------------------- + SUBRP dec_lastplay + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#dec_loop + PUSH a10,a11 + + callr get_temp_record ;read record + move @temp_record+PR_LASTPLAY,a0 + jrz #at_min + dec a0 + move a0,@temp_record+PR_LASTPLAY + callr put_temp_record ;write out record +#at_min + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#dec_loop + rets + +#***************************************************************************** + + SUBR get_all_records + + PUSH a12 + + movi record_sort_ptrs,a12 + clr a11 + movi RECORD_ORIGIN,a10 + movi record_sort_ram,a9 +#get_next + PUSH a9,a10,a11,a12 + + callr get_temp_record ;read record + + PULL a9,a10,a11,a12 + + move a11,*a9(RS_RECORD_NUM) + + move @temp_record+PR_COUNT,a0 + subk REC_MINGAMES,a0 + jrle #inval + move @temp_record+PR_NAME1,a0 + jrgt #vldnme +#inval + movi 500,a14 + move a14,*a9(RS_OFF_RANK) ;AVG. PTS scored + movi 7000,a14 + move a14,*a9(RS_DEF_RANK) ;AVG. PTS allowed + clr a14 + move a14,*a9(RS_TRIVIA_PTS) + move a14,*a9(RS_WINS) + jruc #nonme +#vldnme + move @temp_record+PR_TRIVIA_PTS,a0 + move a0,*a9(RS_TRIVIA_PTS) + + move @temp_record+PR_PTS_SCORED,a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins* + move a1,*a9(RS_OFF_RANK) ;AVG. PTS scored + + move @temp_record+PR_PTS_ALLOWED,a0 + movi 100,a1 + mpyu a0,a1 ;*1000 + move @temp_record+PR_COUNT,a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_DEF_RANK) ;AVG. PTS allowed + + move @temp_record+PR_WON,a0 ;wins + move a0,*a9(RS_WINS) + jrnz #has_wins +#nonme + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + clr a0 + move a0,*a9(RS_AVERAGE) + move a0,*a9(RS_TEAMSDEF) + move a0,*a9(RS_STREAK) + jruc #cont1 + +#has_wins + movi 1000,a1 + mpyu a0,a1 ;wins*1000 + move @temp_record+PR_COUNT,a0 ;games played + move a0,*a9(RS_GAMES_PLAYED) + divu a0,a1 ;wins*1000/played + move a1,*a9(RS_AVERAGE) + + move @temp_record+PR_NUMDEF,a0 ;number teams defeated + move a0,*a9(RS_TEAMSDEF) + + move @temp_record+PR_WINSTREAK,a0 + move a0,*a9(RS_STREAK) + +#cont1 + move a9,*a12+,L + addi RS_SIZE,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + inc a11 + cmpi NUM_PRECORDS,a11 + jrlo #get_next + + PULL a12 ;process SP + rets + + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS defensive rank +; +;INPUT: a0 - players defensive ability +; >a0 - players defensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_def_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpdr_1 + move *a10+,a14,L + move *a14(RS_DEF_RANK),a14 + cmpi 7000,a14 ;brand new record ? + jreq cpdr_1a ;br=yep + cmp a14,a0 ;is this player better ? + jrgt cpdr_2 ;br=worse rank +cpdr_1a + dec a1 ;new rank +cpdr_2 + dsj a2,cpdr_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpdr_3 PULL a2,a9,a10 + rets + +;----------------------------------------------------------------------------- +; This routine computes the PLAYERS offensive rank +; +;INPUT: a0 - players offensive ability +; >a0 - players offensive rank +;----------------------------------------------------------------------------- + SUBR compute_plyr_off_rank + + PUSH a2,a9,a10 + + movi record_sort_ptrs,a10,L + movi NUM_PRECORDS-1,a2 ;loop count + movi NUM_PRECORDS-1,a1 ;start as worst +cpor_1 + move *a10+,a14,L + move *a14(RS_OFF_RANK),a14 + cmp a14,a0 ;is this player better ? + jrlo cpor_2 ;br= + dec a1 ;new rank +cpor_2 + dsj a2,cpor_1 + addk 1,a1 ;not ZERO rank allowed + move a1,a0 +cpor_3 PULL a2,a9,a10 + rets + + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on wins +* player must have 5 wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + + SUBRP sort_wins + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* INPUT: call get_all_records to build ram copy of records +* +* sorts players based on streaks +* then on wins +* then sorted on average (wins / games played) +* then on teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_streak + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_STREAK),a0 + move *a5(RS_STREAK),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sorts teams based on games played +* then sorted on wins +* then sorted on average (wins / games played) +* then different teams defeated +*----------------------------------------------------------------------------- + SUBRP sort_exp + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap + +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + +#****************************************************************************** +* +* INPUT: call get_all_records to build ram copy of records +* +* sort teams based on different teams defeated +* then on wins +* then sorted on average (wins / games played) +*----------------------------------------------------------------------------- + SUBRP sort_champs + + movi NUM_PRECORDS-1,a11 +#loop1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +; jrlo #swap +#swap + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +#no_swap + addi 20h,a9 + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets + + +#****************************************************************************** +* INPUT: defeated teams in A1 +* RETURN: a0 = # teams defeated +*------------------------------------------------------------------------------ + SUBR calc_num_defeated + + PUSH a1,a2 + clr a0 + movi NUM_TEAMS,a2 +;;;; movk 27,a2 +#next_team + srl 1,a1 + jrnc #not_def + inc a0 ;teams defeated count ++ +#not_def + dsj a2,#next_team + PULL a1,a2 + rets + +#***************************************************************************** +* clears out all cmos player records (and fills in SPECIAL PLAYER records) +* and puts in defaults for high score table +*----------------------------------------------------------------------------- + SUBRP clear_player_records + + clr a0 + movi PR_SIZE/16,a1 + movi temp_record,a2 +#clrit + move a0,*a2+ + dsj a1,#clrit + + movi NUM_PRECORDS,a11 + movi RECORD_ORIGIN,a10 +#clear_loop + PUSH a10,a11 + + callr put_temp_record ;write out record + + PULL a10,a11 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#clear_loop + + movk 8,a11 ;23 lines in 'team_inits' table + + movi RECORD_ORIGIN,a10 + movi #default_records,a9 +#init_loop + PUSH a9,a10,a11 + + movb *a9(NAME1),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME1 + movb *a9(NAME2),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME2 + movb *a9(NAME3),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME3 + movb *a9(NAME4),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME4 + movb *a9(NAME5),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME5 + movb *a9(NAME6),a0 + subi '@',a0 + move a0,@temp_record+PR_NAME6 + + movb *a9(PIN1),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR1 + + movb *a9(PIN2),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR2 + + movb *a9(PIN3),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR3 + + movb *a9(PIN4),a0 + subi '0',a0 + move a0,@temp_record+PR_PIN_NBR4 + + move *a9(GAMPLYD),a0 + move a0,@temp_record+PR_COUNT ;games played + + move *a9(WINS),a0 + move a0,@temp_record+PR_WON ;wins + + move *a9(WINSTRK),a0 + move a0,@temp_record+PR_WINSTREAK + + clr a0 + move a0,@temp_record+PR_NICKNAME_NBR + move a0,@temp_record+PR_CREATED_PLYR + move a0,@temp_record+PR_TRIVIA_PTS + move a0,@temp_record+PR_PRIVILEGES + movi 150,a0 + move a0,@temp_record+PR_PTS_SCORED + movi 350,a0 + move a0,@temp_record+PR_PTS_ALLOWED + + move *a9(TMSDEF),a0,L + move a0,@temp_record+PR_TEAMSDEF,L + + movi 1023,a0 + move a0,@temp_record+PR_LASTPLAY + + + callr put_temp_record + PULL a9,a10,a11 + + addi 10*10h,a9 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a11,#init_loop + rets + + +RECMAC .macro NAME,PIN_NUM,PLAYED,WINS,STREAK,DEFEATED + .string ":NAME:" + .string ":PIN_NUM:" + .word :PLAYED:,:WINS:,:STREAK: + .long :DEFEATED: + .endm + .even +; +; if change number of lines in this table...must change +; code in 'clear_player_records' (roughly line 1650) +; +#default_records + RECMAC "TURMEL", "0000", 5,4,4,000001001000000100010000000000b +;DJT Start + RECMAC "JAPPLE", "1111", 28,28,28,011111111111111111111111110111b +; RECMAC "JAPPLE", "0000", 5,4,4,000001010010000100000000000000b +;DJT End + RECMAC "DIVITA", "0000", 5,1,0,000000000000000000000100000000b + RECMAC "EUGENE", "0000", 5,3,0,000000000001010100000000000000b + RECMAC "JENIFR", "0000", 5,3,2,000010010000010000000000000000b + RECMAC "DANIEL", "0000", 5,2,2,000001000010010100000000000000b + RECMAC "CARLTN", "0000", 5,2,1,000000001000010000000000000000b + RECMAC "CARLOS", "0000", 5,2,0,000000000000000000000000101000b + RECMAC "MARTIN", "0000", 5,3,3,000000000010000000001000000001b + .even + + +#***************************************************************************** +* +* INPUT: a10 = * cmos record to delete + + SUBRP clear_record + + clr a0 + move a0,@temp_record+00h,L + move a0,@temp_record+20h,L + move a0,@temp_record+40h,L + callr put_temp_record ;write out record + rets + +#***************************************************************************** +* +* INPUT: a0 = hiscore type +* +;DJT Start +* 0 (best overall player) +* 1 (grand champions) +* 2 (world records) +* 3 (best win %) +* 4 (most games won) +* 5 (best offensive player) +* 6 (best defensive player) +* 7 (experienced players) +* 8 (win streak) +* 9 (most trivia points) +* 10 (most popular teams) +;DJT End +* +*----------------------------------------------------------------------------- + .asg 24,YOFF + .asg 61,COL0 ;# + .asg COL0+23,COL0b ;1-8 + .asg 160,COL1 ;initials + .asg 253,COL2 ;wins + .asg COL2+2,COL3 ;dash + .asg COL3+15,COL4 ;losses + .asg 318,COL5 ;average + + SUBR show_hiscore + + andi 7,a0 + move a0,@hiscore_type + + callr get_all_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi #hiscore_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + calla create_hi_score_page_objs + + movi [1,31],a8 ;START COLOR,# COLORS TO CYCLE + movi BST18B2_P,a9 ;PAL NAME + movi BSTCYCB_P,a10 + movk 2,a11 ;RATE OF CYCLE IN TICKS + CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + clr a0 +#loopit + move a0,@hiscore_type + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + movi TYPTEXT+1,a0 ;delete text + calla obj_del1c + movi TYPTEXT+2,a0 ;delete text + calla obj_del1c + movi TYPTEXT+3,a0 ;delete text + calla obj_del1c + movi TYPTEXT+4,a0 ;delete text + calla obj_del1c + movi TYPTEXT+5,a0 ;delete text + calla obj_del1c + movi TYPTEXT+6,a0 ;delete text + calla obj_del1c + movi TYPTEXT+7,a0 ;delete text + calla obj_del1c + movi TYPTEXT+8,a0 ;delete text + calla obj_del1c + + callr print_hiscore_heading + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #sort_routines,a0 + move *a0,a0,L + call a0 + + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #print_methods,a0 + move *a0,a0,L + JSRPR a0 + + move @hiscore_type,a0 + jrnz #no_unblank + +; SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank +#no_unblank + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt + + movi 3*TSEC,a10 +#waitt + SLEEPK 1 + dsj a10,#waitd + move @hiscore_cnt,a14 ;wait until done sliding on + jrgt #waitt + +#waitd movi TYPTEXT+8,a8 + movi TYPTEXT+1,a9 + CREATE HISCR_SCALE_PID,create_scale_processes +#skipt + SLEEPK 25 + movi 6*TSEC,a10 +#delay + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit0 + dsj a10,#delay + jruc #exit +#exit0 + movi HISCR_SCALE_PID,a0 + calla KIL1C + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #skipt2 ;br=dont do obj. transition +#exit + movi HISCR_SCALE_PID,a0 + calla KIL1C + + move @hiscore_type,a0 ;get 'showing' hiscore page + cmpi 2,a0 ;no trans. for first 3 pages + jrls #skipt2 + +; SLEEP 120 ;delay before wipe off screen + + movi 2*TSEC,a10 +#delay1 + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #skipt2 + dsj a10,#delay1 +#exit1 + movi TYPTEXT+1,a8 + movi TYPTEXT+8,a9 +;; JSRP explode_screen_clear + JSRP slide_lines_right + +#skipt2 move @hiscore_type,a0 + inc a0 + cmpi HISCORE_TABLES,a0 + jrle #loopit + + movi CYCPID,a0 + calla KIL1C + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +print_hiscore_heading + + movi #heading1_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings1,a0 + move *a0,a4,L + calla print_string_C2 + + movi #heading2_setup,a2 + calla setup_message + move @hiscore_type,a0 + sll 5,a0 ;x 32 bits + addi #headings2,a0 + move *a0,a4,L + calla print_string_C2 + rets + + + .def COLTAB2 +COLTAB2 + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + + .word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh + .word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh + .word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh + .word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh + .word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh + .word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh + .word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh + .word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh + .word -1 + + + .def BSTCYCB_P,BSTCYCY_P + +BSTCYCY_P +; .word 64 + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + + .word 07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh + .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h + .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h + .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h + .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h + .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h + .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h + .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h + .word -1 + + +BSTCYCB_P +; .word 64 + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + + .word 001f9h,0023ah,0027bh,002bch,0031ch,0035dh,0039eh + .word 003ffh,003ffh,003dfh,0039fh,0037fh,0035fh,0031fh,002ffh + .word 002dfh,0029fh,0027fh,0025fh,0025fh,0027fh,0029fh,002bfh + .word 002dfh,002ffh,0031fh,0033fh,0035fh,0037fh,0039fh,0035fh + .word 0031fh,002ffh,002bfh,0027fh,0025fh,0025fh,0027fh,0029fh + .word 0029fh,002bfh,002dfh,002ffh,002ffh,0031fh,0033fh,0033fh + .word 0035fh,0037fh,0039fh,0039fh,003bfh,0039fh,0035eh,0033dh + .word 0031dh,002dch,002bch,0029bh,0025bh,0023ah,0021ah,0021ah + .word -1 + + + +;BSTCYCY_P +; .word 64 +; .word 00000h,07f00h,07f20h,07f40h,07f60h,07fa0h,07fe0h,07fefh +; .word 07fffh,07fefh,07fe0h,07f80h,07f20h,07ec0h,07e40h,07de0h +; .word 07e00h,07e40h,07e60h,07ea0h,07ec0h,07f00h,07f20h,07f00h +; .word 07ec0h,07ea0h,07a80h,07a60h,07a20h,07a00h,079e0h,075a0h +; .word 07580h,07560h,075a0h,075c0h,07600h,07a21h,07a61h,07a82h +; .word 07ac3h,07ae3h,07b24h,07b44h,07f65h,07fa6h,07fc6h,07fe7h +; .word 07fe0h,07fe5h,07fech,07ff2h,07ff9h,07fffh,07fdch,07fd8h +; .word 07fb5h,07f91h,07f6eh,07f6ah,07f47h,07f23h,07f20h,07f00h +; .word -1 + + + + + +;#morf_plist1 +; .long GOLD +; .long 63 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 0 +; +;#morf_plist2 +; .long GOLD +; .long 55 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 8 +; .long 0 +; +;#morf_plist3 +; .long GOLD +; .long 48 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 15 +; .long 0 +; +;#morf_plist4 +; .long GOLD +; .long 41 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 22 +; .long 0 +; +;#morf_plist5 +; .long GOLD +; .long 34 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 29 +; .long 0 +; +;#morf_plist6 +; .long GOLD +; .long 27 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 36 +; .long 0 +; +;#morf_plist7 +; .long GOLD +; .long 20 +; .long WHITE2PAL +; .long GOLD +; .long 63 +; .long WHITEPAL +; .long GOLD +; .long 43 +; .long 0 +; +; +;#morf_plist10 +; .long LGMDGLD +; .long 66 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 0 +; +;#morf_plist9 +; .long LGMDGLD +; .long 54 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 12 +; .long 0 +; +;#morf_plist8 +; .long LGMDGLD +; .long 42 +; .long LGMDGLDlt +; .long LGMDGLD +; .long 24 +; .long 0 + + +****************************************************************************** + .even +#print_methods + .long #method0 ;0 (best overall player) + .long #method2b ;1 (grand champions) + .long #method6 ;2 (world records) + .long #method1 ;3 (best win %) + .long #method1 ;4 (most games won) + .long #method4 ;5 (best offensive player) + .long #method5 ;6 (best defensive player) + .long #method2 ;7 (experienced players) + .long #method1b ;8 (win streak) +;DJT Start + .if TRIVCON + .long #method8 ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #method3 ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + .asg 50,TOP_LINE + + .asg 75,STAT1_X + .asg 166,STAT1_Y + + .asg 150,STAT2_X + .asg 166,STAT2_Y + + .asg 213,STAT3_X + .asg 166,STAT3_Y + + .asg 271,STAT4_X + .asg 166,STAT4_Y + + .asg 346,STAT5_X + .asg 166,STAT5_Y + + .asg 70,STAT6_X + .asg 220,STAT6_Y + + .asg 150,STAT7_X + .asg 220,STAT7_Y + + .asg 256,STAT8_X + .asg 220,STAT8_Y + + .asg 341,STAT9_X + .asg 220,STAT9_Y + +****************************************************************************** +* prints BEST players name and his/her stats +*----------------------------------------------------------------------------- +#method0 + + movi record_sort_ptrs,a9 + move *a9,a8,L ;get first rec. sort ptr. + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 + movi message_buffer,a3 ;* string dest + calla get_name_string +;print name + movi name_str_setup,a2 + calla setup_message + calla print_string_C + +;print stats + movi temp_record,a6 + + movi stats_msg_setup,a2 + calla setup_message + + movk 11,a0 + move a0,@mess_line_spacing + movi stats_msg,a4,L + calla print_string_C2 + +;print wins/loses + + movi BAST_W_P,a14 + move a14,@message_palette,L + + movi STAT1_X,a0 + move a0,@mess_cursx + movi STAT1_Y,a0 + move a0,@mess_cursy + + move *a8(RS_WINS),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + + movi str_sl,a4 + calla concat_rom_string + + move *a8(RS_GAMES_PLAYED),a0 + move *a8(RS_WINS),a14 + sub a14,a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + +;print win streak + + movi STAT2_X,a0 + move a0,@mess_cursx + movi STAT2_Y,a0 + move a0,@mess_cursy + + move *a8(RS_STREAK),a0 + movi 1024,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print win avg + + movi STAT3_X,a0 + move a0,@mess_cursx + movi STAT3_Y,a0 + move a0,@mess_cursy + + movi str_per,a4,L + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + cmpi 1000,a0 + jrlo #nmax + + movi #str_1000,a4 + calla copy_rom_string + jruc #skp2 +#nmax + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string +#skp2 calla print_string_C + +;print defensive rank + + movi STAT4_X,a0 + move a0,@mess_cursx + movi STAT4_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a0 + callr compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print offensive rank + + movi STAT5_X,a0 + move a0,@mess_cursx + movi STAT5_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a0 + callr compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print avg. pts scored + + movi STAT6_X,a0 + move a0,@mess_cursx + movi STAT6_Y,a0 + move a0,@mess_cursy + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank + +;print avg. pts allowed + + movi STAT7_X,a0 + move a0,@mess_cursx + movi STAT7_Y,a0 + move a0,@mess_cursy + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank + +;print teams defeated + + movi STAT8_X,a0 + move a0,@mess_cursx + movi STAT8_Y,a0 + move a0,@mess_cursy + + move *a8(RS_TEAMSDEF),a0 + movi NUM_TEAMS,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + +;print games played + + movi STAT9_X,a0 + move a0,@mess_cursx + movi STAT9_Y,a0 + move a0,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a0 + movi 2048,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + RETP + + +name_str_setup + PRINT_STR brush50_ascii,10,0,200,60,BRSH50G_P,0 + +stats_msg_setup + PRINT_STR bast8_ascii,6,0,215,140,BAST_Y_P,0 + +stats_msg + .string " WIN WIN WIN DEFENSIVE OFFENSIVE",1 + .string "RECORD STREAK AVG. RANK RANK ",1 + .string "",1 + .string "",1 + .string "",1 + .string "AVG. PTS. AVG. PTS. TEAMS GAMES ",1 + .string " SCORED ALLOWED DEFEATED PLAYED ",0 +; .string " SCORED ALLOWED DEFEATED PLAYED ",0 + .even + +str_sl + .string "/",0 + .even + +str_per + .string ".",0 + .even + + +;DJT Start + .if TRIVCON +;DJT End +****************************************************************************** +* prints 8 players trivia points total +*----------------------------------------------------------------------------- +#method8 + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#nxt_plr + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+23,a0 + move a0,@mess_cursx + move @temp_record+PR_TRIVIA_PTS,a0 + movi 999,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_pts,a4 + calla concat_rom_string + calla print_string_C + +; move @mess_cursy,a0 +; addi YOFF,a0 +; move a0,@mess_cursy + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#nxt_plr + RETP + +#str_pts + .string " PTS.",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +****************************************************************************** +* prints 8 players offensive ratings +*----------------------------------------------------------------------------- +#method4 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth4 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_OFF_RANK),a7 + callr print_playing_rank +; callr print_off_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth4 + RETP + +;----------------------------------------------------------------------------- +; This routine prints the OFFENSIVE or DEFENSIVE rank +; +; reg a7 - defensive or offensive value +;----------------------------------------------------------------------------- + SUBRP print_playing_rank + + calla clear_buffers + + clr a6 + movi 100,a1 ;max value + divu a1,a6 + + move a6,a0 + movi 99,a1 ;max value + calla dec_to_asc + calla concat_string + + movi #str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value +;DJT Start + calla dec_to_asc2 +;DJT End + calla concat_string + calla print_string + rets + +; jruc pdr_2 +;pdr_1 +; movi str_00,a4 +; calla print_string2 +;pdr_2 rets +; +; +;str_00 +; .string "00.00",0 +; .even + + +****************************************************************************** +* prints 8 players defensive ratings +*----------------------------------------------------------------------------- +#method5 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) +#meth5 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4,a0 + move a0,@mess_cursx + + calla clear_buffers + + move *a8(RS_DEF_RANK),a7 + callr print_playing_rank +; callr print_def_rank + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#meth5 + RETP + + + + .asg 200,WINSTRK_X + .asg 58,WINSTRK_Y + .asg 200,PTS_X + .asg WINSTRK_Y+40,PTS_Y + .asg 200,ASSISTS_X + .asg PTS_Y+40,ASSISTS_Y + .asg 200,REBNDS_X + .asg ASSISTS_Y+40,REBNDS_Y + +****************************************************************************** +* prints world records +*----------------------------------------------------------------------------- +#method6 + +;print 'winstreaks' title + movi winstrk_msg_setup1,a2 + calla setup_message + movi wrld_rec_msg1,a4,L + calla print_string_C2 + + +;print 'points in game' title + movi PTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg2,a4,L + calla print_string_C2 + +;print 'assists' title + movi ASSISTS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg3,a4,L + calla print_string_C2 + +;print 'rebounds' title + movi REBNDS_Y,a0 + move a0,@mess_cursy + movi wrld_rec_msg4,a4,L + calla print_string_C2 + + callr get_world_record_from_cmos + +;winstreak data + movi wrld_recrd_ram+WR_NAME1A,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi winstrk_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_WINSTREAK,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;points per game data + movi wrld_recrd_ram+WR_NAME1B,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi pts_game_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_PTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;assists data + movi wrld_recrd_ram+WR_NAME1D,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi assists_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_ASSISTS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + +;rebounds data + movi wrld_recrd_ram+WR_NAME1C,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi rebnd_msg_setup2,a2 + calla setup_message + calla print_string_C + + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + + move @mess_cursx,a0 + addi 100,a0 + move a0,@mess_cursx + + move @wrld_recrd_ram+WR_REBNDS_IN_GAME,a0 ;* src NAME + movi 256,a1 + calla dec_to_asc + calla concat_string + calla print_string_C + RETP + + + +winstrk_msg_setup1 + PRINT_STR bast8_ascii,6,0,WINSTRK_X,WINSTRK_Y,BAST_W_P,0 + +winstrk_msg_setup2 + PRINT_STR brush20_ascii,6,0,WINSTRK_X,WINSTRK_Y+10,BRSHGYGP,0 + +pts_game_msg_setup2 +; PRINT_STR bast18_ascii,6,0,PTS_X,PTS_Y+10,BST18Y_P,0 + PRINT_STR brush20_ascii,6,0,PTS_X,PTS_Y+10,BRSHGYGP,0 + +assists_msg_setup2 + PRINT_STR brush20_ascii,6,0,ASSISTS_X,ASSISTS_Y+10,BRSHGYGP,0 + +rebnd_msg_setup2 + PRINT_STR brush20_ascii,6,0,REBNDS_X,REBNDS_Y+10,BRSHGYGP,0 + + +wrld_rec_msg1 + .string "WINSTREAK",0 + .even + +wrld_rec_msg2 + .string "POINTS IN GAME",0 + .even + +wrld_rec_msg3 + .string "ASSISTS IN GAME",0 + .even + +wrld_rec_msg4 + .string "REBOUNDS IN GAME",0 + .even + +****************************************************************************** +* prints rank, name, win-loss, average +*----------------------------------------------------------------------------- +#method1 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 ;nbr. of lines (8 ranks) + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_WON,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL2,a0 + move a0,@mess_cursx + calla print_string_R + + movi COL3,a0 + move a0,@mess_cursx + movi #str_dash,a4 + calla print_string2 + + move @temp_record+PR_LOST,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL4,a0 + move a0,@mess_cursx + calla print_string + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1 +#not_zip + cmpi 1000,a0 + jrlo #not_max + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2 +#not_max + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1 movi COL5,a0 + move a0,@mess_cursx +#skip2 calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player + RETP + + +#winpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- + SUBR slide_lines_right + + PUSHP a1,a2,a3 + +;set obj. velocities + clr a11 + move a8,a10 +slr_00 + movi OBJLST,a2 + move *a2,a2,L ;get next obj. ptr + jrz slr_5 ;br=no obj. list +slr_0 + move *a2(OID),a14 + cmp a10,a14 ;is ID > than range start ? + jrne slr_1 ;br=nope + + inc a11 ;count nbr. of matching ID's + + movi [30,0],a14 + move a14,*a2(OXVEL),L + movi [0,0],a14 + move a14,*a2(OYVEL),L + +slr_1 move *a2,a2,L + jrnz slr_0 + + SLEEPK 5 + + inc a10 + cmp a9,a10 + jrls slr_00 + + +;watch objs until get to dest. (offscreen) + + movi 40,a10 ;MAX time (40 ticks) +slr_2 + SLEEPK 1 + dec a10 + jrle slr_5 ;br=exceeded max loop count + + movi OBJLST,a2 +slr_3 + move *a2,a2,L ;get next obj. ptr + jrz slr_2 ;br=no obj. lst + + move *a2(OID),a14 + cmp a8,a14 ;is ID > than range start ? + jrlo slr_3 ;br=nope + cmp a9,a14 ;is ID <= than range end ? + jrhi slr_3 ;br=nope + + move *a2(OXPOS),a14 ;get obj X + cmpi 460,a14 ;obj off rght edge of screen ? + jrlo slr_3 ;br=nope + + move *a2(OXVEL),a14,L + jrz slr_3 ;br=vel. already cleared + + clr a14 + move a14,*a2(OXVEL),L ;stop obj. from moving + dsj a11,slr_3 ;br=more objs. to watch +slr_5 + PULLP a1,a2,a3 + RETP + +;----------------------------------------------------------------------------- +; This PROCESS just launches other processes to scale the hi-score data +; +; INPUT: reg a8 - first OBJ id to scale (highest) +; reg a9 - last OBJ id to scale (lowest) +;----------------------------------------------------------------------------- + SUBRP create_scale_processes + +#cscl SLEEPK 10 + + CREATE HISCR_SCALE_PID,scale_hiscore_lines + dec a8 + cmp a8,a9 + jrls #cscl + DIE + +;----------------------------------------------------------------------------- +; This PROCESS scales objects with matching ID +; +; INPUT: reg a8 - OBJ id to scale +;----------------------------------------------------------------------------- + SUBRP scale_hiscore_lines + + SLEEP 27 ;delay before start + + movk 2,a10 ;do scale effect twice +shl_0a + movi hiscr_scl_tbl,a11,L ;table of scale steps +shl_0b + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz shl_5 ;br=no obj. list +shl_0 + move *a0(OID),a14 + cmp a8,a14 ;does ID match ? + jrne shl_1 ;br=nope + + move *a11,a14,L ;get new scale factor + move a14,*a0(OSCALE),L + +;found matching object ID + +shl_1 + move *a0,a0,L + jrnz shl_0 +shl_5 + SLEEPK 2 + + addi 32,a11 + move *a11,a0,L ;point to next line in table + jrnz shl_0b + + SLEEP 85 + + dsj a10,shl_0a ;next obj. ID + DIE + + +hiscr_scl_tbl + .long 01140114h + .long 01280128h + .long 013c013ch + .long 01500150h + .long 01640164h + .long 01780178h + .long 01640164h + .long 01500150h + .long 013c013ch + .long 01280128h + .long 01140114h + .long 01000100h ;back to reg. size (1 to 1) + .long 0 + + +;hiscr_scl_tbl2 +; .long 01140114h +; .long 01280128h +; .long 013c013ch +; .long 01500150h +; .long 01640164h +; .long 01780178h +; .long 018C018Ch +; .long 0 + +;----------------------------------------------------------------------------- +; This PROCESS gives a velocity to all obj. with matching ID +; +; INPUT: a8 - obj id +; a11 - destination Y coor. +;----------------------------------------------------------------------------- + SUBR slide_line_up + +;set velocities + + movi OBJLST,a0 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no obj. list +sinl_0 + move *a0(OID),a14 + cmp a14,a8 + jrne sinl_1 + movi [-10,0],a14 + move a14,*a0(OYVEL),L +sinl_1 + move *a0,a0,L + jrnz sinl_0 + +;now watch obj. until get to dest. + +sinl_1a + SLEEPK 1 + movi OBJLST,a0 +sinl_2 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_2 ;br=no + move *a0(OYPOS),a14 ;get obj Y + cmp a14,a11 ;any obj. at dest. ? + jrlt sinl_1a ;br=no + +;obj at dest. + + movi OBJLST,a0 +sinl_3 + move *a0,a0,L ;get next obj. ptr + jrz sinl_5 ;br=no ID match found, exit + move *a0(OID),a14 + cmp a14,a8 ;do ID's match ? + jrne sinl_3 ;br=no + clr a14 + move a14,*a0(OYVEL),L ;stop obj. from moving + +;account for img. Y offset + move *a0(OIMG),a14,L + move *a14(IANIOFFY),a14 + move a11,a9 + sub a14,a9 + move a9,*a0(OYPOS) ;set Y coor. + jruc sinl_3 +sinl_5 + move @hiscore_cnt,a14 + dec a14 + move a14,@hiscore_cnt + DIE + + + + +****************************************************************************** +* prints rank, name, streak, average +*----------------------------------------------------------------------------- +#method1b + + .asg 96,OFFX + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player1b + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 + addi #winpals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL4+22,a0 + move a0,@mess_cursx + move @temp_record+PR_WINSTREAK,a0 + movi 64,a1 ;max value (6 bits in record) + calla dec_to_asc + calla copy_string + movi #str_wins,a4 + calla concat_rom_string + calla print_string_C + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player1b + RETP + + +#str_wins + .string " WINS",0 + .even + + +#streakpals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* prints rank, name, games played, average +*----------------------------------------------------------------------------- +#method2 + + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi record_sort_ptrs,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_player2 + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + movk 9,a0 + sub a10,a0 ;1-8 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #exppals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + + movi temp_record+PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + movi COL1,a0 + move a0,@mess_cursx + calla print_string_C + + move @temp_record+PR_COUNT,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL3,a0 + move a0,@mess_cursx + calla print_string_C + + movi #str_dot,a4 + calla copy_rom_string + + move *a8(RS_AVERAGE),a0 + jrnz #not_zip2 + + movi #str_0,a4 + calla copy_rom_string + jruc #skip1b +#not_zip2 + cmpi 1000,a0 + jrlo #not_max2 + + movi #str_1000,a4 + calla copy_rom_string + movi COL5-9,a0 + move a0,@mess_cursx + jruc #skip2b + +#not_max2 + movi 999,a1 ;max value + calla dec_to_pct + calla concat_string +#skip1b + movi COL5,a0 + move a0,@mess_cursx +#skip2b + calla print_string + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2 + RETP + +#exppals + .long BST18B2_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + .long BSTGWW_P + +****************************************************************************** +* name only +* champions screen (only prints 3 players) +*----------------------------------------------------------------------------- +#method2b + + .asg 112,LCOL0 + .asg 132,LCOL1 + .asg 209,LCOL1a + .asg 267,LCOL2 + .asg 70,YOFF2 + + movi LN0b_setup,a2 + calla setup_message + + movk 3,a10 + movi record_sort_ptrs,a9 + +#next_player2b + PUSHP a9,a10 + + movk 4,a0 + sub a10,a0 ;1-3 + move a0,a14 + + sll 5,a14 ;x 32 bits + addi #champals-20h,a14 + move *a14,a14,L + move a14,@message_palette,L + +; movk 3,a1 ;max value +; calla dec_to_asc +; calla copy_string +; movi LCOL0-6,a0 +; move a0,@mess_cursx +; calla print_string_C +; +; movi LCOL0-46,a0 +; move a0,@mess_cursx +; movi #str_num,a4 +; calla print_string_C2 + + move *a9,a8,L + move *a8(RS_RECORD_NUM),a0 + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a0,a1 + addi RECORD_ORIGIN,a1 + move a1,a10 + callr get_temp_record + +; movi LCOL2,a0 + movi LCOL1a,a0 + move a0,@mess_cursx + + move @temp_record+PR_NUMDEF,a0 + cmpi NUM_TEAMS,a0 + jrge #is_champ + + movi #str_none,a4 + calla print_string_C2 + jruc #not_champ +#is_champ + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C + +#not_champ + move @mess_cursy,a0 + addi YOFF2,a0 + move a0,@mess_cursy + + PULLP a9,a10 + addi 20h,a9 + dsj a10,#next_player2b + RETP + +#str_none + .string ". . . . . .",0 + .even + + +#champals + .long BRSH50G_P + .long BRSH50W_P + .long BRSH50W_P + + +;DJT Start + .if TEAMPOP +;DJT End +****************************************************************************** +* prints rank, team name +*----------------------------------------------------------------------------- +#method3 + + .asg 115,TCOL1 + movi LN0_setup,a2 + calla setup_message + + movi 260,a0 + move a0,@mess_cursy ;draw data off-screen + + movk 8,a10 + move a10,@hiscore_cnt + + movi sorted_teams,a9 + + movi TOP_LINE,a11 ;start Y (rank #1) + +#next_team + PUSHP a9,a10 + + move @mess_objid,a0 + addk 1,a0 + move a0,@mess_objid ;ID+1 from hiscore heading + + PUSHP a9 + movk 9,a0 + sub a10,a0 ;1-8 + + move a0,a14 + sll 5,a14 ;x 32 bits +;DJT Start + addi #winpals-20h,a14 +; addi #teampals-20h,a14 +;DJT End + move *a14,a14,L + move a14,@message_palette,L + + movk 8,a1 ;max value + calla dec_to_asc + calla copy_string + movi COL0b,a0 + move a0,@mess_cursx + calla print_string_C + + movi COL0,a0 + move a0,@mess_cursx + movi #str_num,a4 + calla print_string2 + + movi TCOL1,a0 + move a0,@mess_cursx + PULLP a9 + move *a9,a0 ;team number (0-29) + sll 5,a0 + addi #team_names,a0 + move *a0,a4,L + calla print_string2 + + move @mess_objid,a8 + CREATE0 slide_line_up + + addi YOFF,a11 + + PULLP a9,a10 + addi 10h,a9 + dsj a10,#next_team + RETP + +;DJT Start + .endif ;TEAMPOP +;DJT End + +;DJT Start +;#teampals +; .long BST18B2_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +; .long BSTGWW_P +;DJT End + + +****************************************************************************** +#sort_routines + .long #sort_best ;0 (best overall player) + .long #sort_champs ;1 (grand champions) + .long #sort_world_records ;2 (world records) + .long #sort_win_prcnt ;3 (greatest win %) + .long #sort_wins ;4 (most wins) + .long #sort_offensive ;5 (best offensive players) + .long #sort_defensive ;6 (best defensive players) + .long #sort_exp ;7 (experienced players) + .long #sort_streak ;8 (win streaks) +;DJT Start + .if TRIVCON + .long #sort_trivia_pts ;9 (most trivia points) + .endif ;TRIVCON + .if TEAMPOP + .long #sort_teams ;10 (most popular teams) + .endif ;TEAMPOP +;DJT End + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_win_prcnt + + movi NUM_PRECORDS-1,a11 +#lop1 + movi NUM_PRECORDS-1,a10 + + movi record_sort_ptrs,a9 + + clr a14 +#lop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_AVERAGE),a0 + move *a5(RS_AVERAGE),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swp + jrlo #swp + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swp + +#swp + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swp +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#lop2 + move a14,a14 + jrz #dne + dsj a11,#lop1 +#dne + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_world_records + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TRIVCON +;DJT End +#sort_trivia_pts + + movi NUM_PRECORDS-1,a11 +#loop1 movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +#loop2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_TRIVIA_PTS),a0 + move *a5(RS_TRIVIA_PTS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare average + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi #no_swap + jrlo #swap + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs #no_swap +#swap + movk 1,a14 + + move a5,*a9,L + move a4,*a9(20h),L + +#no_swap +;; addi RS_SIZE,a9 + addi 20h,a9 + + dsj a10,#loop2 + move a14,a14 + jrz #done + dsj a11,#loop1 +#done + rets +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; overall to worst. +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_best + + movi NUM_PRECORDS-1,a11 +bst_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +bst_2 + move *a9,a4,L + move *a9(20h),a5,L +;FIX!! +;; move *a4(RS_GAMES_PLAYED),a0 + + move *a4(RS_AVERAGE),a0 + sll 2,a0 + move *a5(RS_AVERAGE),a1 + sll 2,a1 ;weight the average + + move *a4(RS_WINS),a0 + add a2,a0 + move *a5(RS_WINS),a1 + add a2,a1 + + move *a4(RS_STREAK),a2 + add a2,a0 + move *a5(RS_STREAK),a2 + add a2,a1 + + move *a4(RS_TEAMSDEF),a2 + add a2,a0 + move *a5(RS_TEAMSDEF),a2 + add a2,a1 + cmp a1,a0 + jrhi noswap_bst + jrlo swap_bst + +;same, so compare games played + move *a4(RS_GAMES_PLAYED),a0 + move *a5(RS_GAMES_PLAYED),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_bst +swap_bst + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_bst + addi 20h,a9 + dsj a10,bst_2 + move a14,a14 + jrz done_so + dsj a11,bst_1 +done_bst + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; offensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_offensive + + movi NUM_PRECORDS-1,a11 +so_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +so_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_OFF_RANK),a0 + move *a5(RS_OFF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_so + jrlo swap_so + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_so +swap_so + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_so + addi 20h,a9 + dsj a10,so_2 + move a14,a14 + jrz done_so + dsj a11,so_1 +done_so + rets + +;----------------------------------------------------------------------------- +; This routine sorts the player records ptrs. in order of best +; defensive rank to worst. If tie, sorted by games played +; Player must have 5 wins +; +; INPUT: call get_all_records to build ram copy of records +;----------------------------------------------------------------------------- +#sort_defensive + + movi NUM_PRECORDS-1,a11 +sd_1 + movi NUM_PRECORDS-1,a10 + movi record_sort_ptrs,a9 + clr a14 +sd_2 + move *a9,a4,L + move *a9(20h),a5,L + + move *a4(RS_GAMES_PLAYED),a0 + jrz noswap_sd + move *a5(RS_GAMES_PLAYED),a0 + jrz noswap_sd + + move *a4(RS_DEF_RANK),a0 + move *a5(RS_DEF_RANK),a1 + cmp a1,a0 ;a0-a1 + jrlo noswap_sd + jrhi swap_sd + +;same, so compare wins + move *a4(RS_WINS),a0 + move *a5(RS_WINS),a1 + cmp a1,a0 ;a0-a1 + jrhi noswap_sd + jrlo swap_sd + +;same, so compare teams defeated + move *a4(RS_TEAMSDEF),a0 + move *a5(RS_TEAMSDEF),a1 + cmp a1,a0 ;a0-a1 + jrhs noswap_sd +swap_sd + movk 1,a14 + move a5,*a9,L + move a4,*a9(20h),L +noswap_sd + addi 20h,a9 + dsj a10,sd_2 + move a14,a14 + jrz done_sd + dsj a11,sd_1 +done_sd + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_wins + callr sort_wins + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_exp + callr sort_exp + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_champs + callr sort_champs + rets + +;;----------------------------------------------------------------------------- +;;----------------------------------------------------------------------------- +;#sort_losses +; callr sort_losses +; rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .if TEAMPOP +;DJT End +#sort_teams + calla get_teams_pop + rets +;DJT Start + .endif ;TEAMPOP +;DJT End + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +#sort_streak + calla sort_streak + rets + +LN0_setup + PRINT_STR bast18_ascii,6,0,200,50,BSTGYG_P,0 +LN0b_setup + PRINT_STR brush50_ascii,6,2,200,50,BRSH50G_P,0 +#heading1_setup + PRINT_STR brush20_ascii,6,0,200,7,BRSHGYOP,0 +#heading2_setup + PRINT_STR bast8_ascii,7,0,200,29+3,BAST_Y_P,0 + +#hiscore_mod + .long ATTRACTBMOD + .word 0,0 + .long 0 + +#headings1 + .long #hd0,#hd1,#hd2,#hd3,#hd4,#hd5 +;DJT Start + .long #hd6,#hd7,#hd8 + .if TRIVCON + .long #hd9 + .endif ;TRIVCON + .if TEAMPOP + .long #hda + .endif ;TEAMPOP + .long #hd1 +;DJT End + +#headings2 + .long #hd20,#hd21,#hd22,#hd23,#hd24,#hd25 +;DJT Start + .long #hd26,#hd27,#hd28 + .if TRIVCON + .long #hd29 + .endif ;TRIVCON + .if TEAMPOP + .long #hd30 + .endif ;TEAMPOP + .long #hd21 +;DJT End + +#hd0 .string "BEST OVERALL PLAYER",0 +#hd1 .string "GRAND CHAMPIONS",0 +#hd2 .string "WORLD RECORDS",0 +#hd3 .string "GREATEST PLAYERS",0 +#hd4 .string "BIGGEST WINNERS",0 +#hd5 .string "BEST OFFENSIVE PLAYERS",0 +#hd6 .string "BEST DEFENSIVE PLAYERS",0 +#hd7 .string "EXPERIENCED PLAYERS",0 +#hd8 .string "CURRENT WINNING STREAK",0 +;DJT Start + .if TRIVCON +#hd9 .string "TRIVIA MASTERS",0 + .endif ;TRIVCON + .if TEAMPOP +#hda .string "MOST POPULAR TEAMS",0 + .endif ;TEAMPOP +;DJT End + +;DJT Start +#hd20 .string "(all stats based on 5 games minimum)",0 +;DJT End +#hd21 .string "(defeated all 29 nba teams)",0 +#hd22 .string "(best individual records)",0 +#hd23 .string "(best win percentage)",0 +#hd24 .string "(most games won)",0 +#hd25 .string "(avg. team pts. scored per game)",0 +#hd26 .string "(avg. team pts. allowed per game)",0 +#hd27 .string "(most games played)",0 +#hd28 .string "(consecutive wins)",0 +;DJT Start + .if TRIVCON +#hd29 .string "(best NBA knowledge)",0 + .endif ;TRIVCON + .if TEAMPOP +#hd30 .string "(at this location)",0 + .endif ;TEAMPOP +;DJT End + +#str_dash + .string "-",0 +#str_dot + .string ".",0 +#str_1000 + .string "1.000",0 +#str_0 + .string ".000",0 +#str_num + .string "#",0 + + .even + +#team_names + .long #t0,#t1,#t2,#t3 + .long #t4,#t5,#t6,#t7 + .long #t8,#t9,#t10,#t11 + .long #t12,#t13,#t14,#t15 + .long #t16,#t17,#t18,#t19 + .long #t20,#t21,#t22,#t23 + .long #t24,#t25,#t26,#t27,#t28 + + +#t0 .string "ATLANTA HAWKS",0 +#t1 .string "BOSTON CELTICS",0 +#t2 .string "CHARLOTTE HORNETS",0 +#t3 .string "CHICAGO BULLS",0 +#t4 .string "CLEVELAND CAVALIERS",0 +#t5 .string "DALLAS MAVERICKS",0 +#t6 .string "DENVER NUGGETS",0 +#t7 .string "DETROIT PISTONS",0 +#t8 .string "GOLDEN ST. WARRIORS",0 +#t9 .string "HOUSTON ROCKETS",0 +#t10 .string "INDIANA PACERS",0 +#t11 .string "L.A. CLIPPERS",0 +#t12 .string "L.A. LAKERS",0 +#t13 .string "MIAMI HEAT",0 +#t14 .string "MILWAUKEE BUCKS",0 +#t15 .string "MINNESOTA TIMBERWLVS",0 +#t16 .string "NEW JERSEY NETS",0 +#t17 .string "NEW YORK KNICKS",0 +#t18 .string "ORLANDO MAGIC",0 +#t19 .string "PHILADELPHIA 76ERS",0 +#t20 .string "PHOENIX SUNS",0 +#t21 .string "PORTLAND TRAILBLZERS",0 +#t22 .string "SACRAMENTO KINGS",0 +#t23 .string "SAN ANTONIO SPURS",0 +#t24 .string "SEATTLE SUPERSONICS",0 +#t25 .string "TORONTO RAPTORS",0 +#t26 .string "UTAH JAZZ",0 +#t27 .string "VANCOUVER GRIZZLIES",0 +#t28 .string "WASHINGTON BULLETS",0 + .even + + +#***************************************************************************** + +RECORDS_ONSCREEN equ 10 + + SUBRP show_player_records + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + .asg 80,COL0 + .asg 90,COL1 + .asg 170,COL2 + .asg 215,COL3 + .asg 280,COL4 + .asg 310,COL5 + .asg 22,YOFF + + movi bast18_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movi TYPTEXT,a0 + move a0,@mess_objid + + movk 3,a0 + move a0,@mess_space_width ;space char width + clr a0 + move a0,@mess_spacing ;spacing between chars + + movi BST18G_P,a0 + move a0,@message_palette,L + + clr a4 +#display_loop + PUSHP a4 + callr display_audits + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + movk 6,a10 +#loopy + SLEEPK 1 + calla get_all_sticks_down2 + move a0,a0 + jrnz #got_stick + dsj a10,#loopy + +#wait_for_input + SLEEPK 1 + calla get_all_buttons_cur2 + jrnz #exit + +#got_stick + PULLP a4 + calla get_all_sticks_cur2 + btst 1,a0 + jrz #no_down + move a4,a1 + addi RECORDS_ONSCREEN,a1 + cmpi NUM_PRECORDS,a1 + jrhs #no_down + addi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_down + btst 0,a0 + jrz #no_up + move a4,a4 + jrz #no_up + subi RECORDS_ONSCREEN,a4 + jruc #display_loop +#no_up + PUSHP a4 + jruc #wait_for_input +#exit + PULLP a4 + RETP + +#***************************************************************************** +* INPUT: a4 = starting record (0 - NUM_PRECORDS-1) +*----------------------------------------------------------------------------- + SUBRP display_audits + + movi TYPTEXT,a0 ;delete text + calla obj_del1c + + movi 20,a0 + move a0,@mess_cursy ;message cursor pos Y + + movi PKDPR_SIZE*2,a1 ;cmos words + mpyu a4,a1 + movi RECORD_ORIGIN,a10 + add a1,a10 + movi RECORDS_ONSCREEN,a6 +#search_loop +;DJT Start + cmpi NUM_PRECORDS,a4 + jrhs #done + +;DJT End + PUSH a6,a10 + PUSH a4 + + callr get_temp_record ;data in temp_record + + movi str_obr,a4 + calla copy_rom_string + clr a0 + move a0,@mess_cursx ;message cursor pos X + + PULL a1 + move a1,a0 + inc a1 + PUSH a1 + movi 999,a1 ;max value + calla dec_to_asc + calla concat_string + movi str_cbr,a4 + calla concat_rom_string + calla print_string + + movi temp_record+PR_NAME1,a4 ;* src initials + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi COL2,a0 + move a0,@mess_cursx ;message cursor pos X + + move @temp_record+PR_COUNT,a0 + jrnz #not_empty + + movi str_unused,a4 + calla print_string_C2 + jruc #skipit +#not_empty + calla print_string_C ;centered + + movi COL0,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_COUNT,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string + + movi COL4,a0 + move a0,@mess_cursx ;message cursor pos X + move @temp_record+PR_LASTPLAY,a0 + movi 1023,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_R + +#skipit + + move @mess_cursy,a0 ;message cursor pos Y + addi YOFF,a0 + move a0,@mess_cursy ;message cursor pos Y + + PULL a4 + PULL a6,a10 + addi PKDPR_SIZE*2,a10 ;cmos words + dsj a6,#search_loop +;DJT Start +#done +;DJT End + rets + +str_num .string "#",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_sp .string " ",0 +str_2sp .string " ",0 + .even + +str_unused + .string "UNUSED",0 + .even + + +;----------------------------------------------------------------------------- +; This routine moves all objects, in the ID range, offscreen +; +; INPUT: reg a8 - starting OBJ id to move +; reg a9 - last OBJ id to move +;----------------------------------------------------------------------------- +; SUBR explode_screen_clear +; +; PUSHP a1,a2,a3 +; clr a11 +; +; movi OBJLST,a2 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_5 ;br=no obj. list +;esc_0 +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_1 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_1 ;br=nope +; +; inc a11 ;count nbr. of matching ID's +; +; movk 14,a0 +; calla rndrng0 +; addk 1,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrhs esc_0a ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0a sll 16,a3 +; move a3,*a2(OXVEL),L +; +; movk 10,a0 +; calla rndrng0 +; addk 10,a0 +; move a0,a3 +; +; movi 100,a0 +; calla rndrng0 +; cmpi 50,a0 ;50/50 change of negating vel. +; jrls esc_0b ;br=positive velocity +; +; move a3,a14 +; sub a14,a3 +; sub a14,a3 ;make velocity negative +;esc_0b sll 16,a3 +; move a3,*a2(OYVEL),L +; +;esc_1 move *a2,a2,L +; jrnz esc_0 +; +;;watch objects until get to dest. (offscreen) +; +; movi 3*TSEC,a10 ;MAX time (6 seconds) +;esc_2 +; SLEEPK 1 +; dec a10 +; jrle esc_5 ;br=exceeded max loop count +; +; movi OBJLST,a2 +;esc_3 +; move *a2,a2,L ;get next obj. ptr +; jrz esc_2 ;br=no obj. lst +; move *a2(OID),a14 +; cmp a8,a14 ;is ID > than range start ? +; jrlo esc_3 ;br=nope +; cmp a9,a14 ;is ID <= than range end ? +; jrhi esc_3 ;br=nope +; +;;OBJ ID in range +; +;; move *a2(OCTRL),a14,W ;get obj. control flags +;; xori M_FLIPH,a14 +;; move a14,*a2(OCTRL) +;; +;; move *a2(OCTRL),a14 ;get obj X +;; xori M_FLIPV,a14 +;; move a14,*a2(OCTRL) +; +; move *a2(OXPOS),a14 ;get obj X +; cmpi -30,a14 ;obj off left edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 405,a14 ;obj off rght edge of screen ? +; jrgt esc_4 ;br=yep +; +; move *a2(OYPOS),a14 ;get obj Y +; cmpi -30,a14 ;obj off top edge of screen ? +; jrlt esc_4 ;br=yep +; cmpi 260,a14 ;obj off botm edge of screen ? +; jrlt esc_3 ;br=nope +;esc_4 +;;; move *a2(OMISC),a14,L +;;; jrnz esc_3 ;br=obj. is done moving +; move *a2(OXVEL),a14,L +; jrnz esc_4a +; move *a2(OYVEL),a14,L +; jrz esc_3 +;esc_4a +; clr a14 +; move a14,*a2(OXVEL),L ;stop obj. from moving +; move a14,*a2(OYVEL),L ;stop obj. from moving +;;; movk 1,a14 +;;; move a14,*a2(OMISC) ;mark obj. done !! +; dsj a11,esc_3 +;esc_5 +; PULLP a1,a2,a3 + RETP + + +****************************************************************************** + .end diff --git a/SRC/REVUP.DOC b/SRC/REVUP.DOC new file mode 100644 index 0000000..6a5a78b --- /dev/null +++ b/SRC/REVUP.DOC @@ -0,0 +1,21 @@ +9/3/96 + + +Here is the list of the changes from NBA Hangtime version L1.1 to +version M1.2: + + 1) Grand Champion leading-space initials crash bugfix + + 2) Watchdog failure during CPU board SRAM check bugfix + + 3) Watchdog & Process KO auditing bugfix + + 4) Points per Game world record bugfix + + 5) Hi-score decimal followed by a zero display problem bugfix + + 6) "DIPSWITCH TEST SELECT" message corrected + + 7) Ball-to-player detection improved + + 8) NUM_PRECORDS reduced from 410 to 195 for 8K CMOS support diff --git a/SRC/ROBO.ASM b/SRC/ROBO.ASM new file mode 100644 index 0000000..cb21730 --- /dev/null +++ b/SRC/ROBO.ASM @@ -0,0 +1,5105 @@ +************************************************************** +* +* Software: Jason Skiles +* Initiated: 4 Oct 93 +* +* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/8/93 11:15 +************************************************************** + + .file "robo.asm" + .title "robotron game" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.h" + .include "link.equ" + +; .include "roboimg.glo" + .include "roboimg.tbl" + .include "fontsimg.glo" + + ;kludge + .ref robo_p + +#***************************************************************************** + + ;from ADJUST.ASM + .ref BINBCD + + ;from COLL2.ASM + .ref collisions,CCCCount + + ;from DCSSOUND.ASM + .ref nosounds,SNDSND + + ;from DISPLAY.ASM + .ref pal_getf,STOPOBJS,fg2bg + + ;from MAIN.ASM + .ref dpageflip,IRQSKYE + + ;from MPROC.ASM + .ref KIL1C + + ;from STRING.ASM + .ref setup_message,print_string_R,mess_objid,copy_string + .ref dec_to_asc + + ;from UTIL.ASM + .ref get_all_buttons_cur,get_stick_val_cur,RNDRNG0,get_start_cur + .ref WIPEOUT,CYCLE_TABLE,civani,civanic + + ;from WRESTLE.ASM + .if DEBUG + .ref CPULEFT + .endif + .ref HALT,PCNT + + ;for WRESTLE.ASM + .def RE_DEADPLAYER,RE_WAVEDONE,RE_ABORT,RE_BACKUP + + .ref _switch_addr,_switch2_addr,ADD_VOICE + +#***************************************************************************** + + BSSX robo_end, 16 ;reason for wave end + BSSX robotron_score, 32 ;UHL score + .bss player_dead, 16 + .bss starts_down, 16 ;are both starts down? + .bss player_object, 32 ;pointer to char1 obj + .bss gun_proc, 32 ;gun process address + .bss robo_wave, 16 ;which wave to perform? + .bss live_badguys, 16 ;wave-preserving badguy count + .bss forward, 16 ;skip wave + .bss backward, 16 ;drop back a wave + +#***************************************************************************** + +ROBO_DEBUG equ 0 +WAVE_CONTROL equ 0 +BOG_MONITOR equ 0 + +ROBO_PAGE equ 0*256 + +ROBJ_MOM equ 1 +ROBJ_DAD equ 2 +ROBJ_KID equ 3 + +;termination causes +RE_DEADPLAYER equ 1 +RE_WAVEDONE equ 2 +RE_ABORT equ 3 +RE_BACKUP equ 4 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + .ref robo_icon_trigger + .ref p1icon_total + .ref p2icon_total + + + SUBR robo_check + + .if DEBUG + jruc #robo_ok + .endif + jruc #robo_end + + move @p1icon_total,a0,L + move @robo_icon_trigger,a14 + cmp a0,a14 + jrle #robo_ok + move @p2icon_total,a0,L + cmp a0,a14 + jrgt #robo_end +#robo_ok + sll 1,a14 + move a14,@robo_icon_trigger + callr reset_roboscore + callr robo_sound_init + +; movi -1,a0 +; calla ADD_VOICE + + clr a0 +#robo_loop + JSRP robo_game + move @robo_end,a14 + cmpi RE_DEADPLAYER,a14 + jreq #player_died + cmpi RE_WAVEDONE,a14 + jreq #wave_successful + cmpi RE_ABORT,a14 + jreq #wave_aborted + cmpi RE_BACKUP,a14 + jreq #back_up + jruc #robo_end + +#player_died + jruc #robo_loop + +#wave_successful + inc a0 + cmpi 16,a0 + jrne #robo_loop + jruc #robo_end + +#wave_aborted + jruc #robo_end + +#back_up + dec a0 + jrnn #robo_loop + clr a0 + jruc #robo_loop + +#robo_end + RETP + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBRP reset_roboscore + + clr a14 + move a14,@robotron_score,L + rets + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** + + SUBR robo_game + + sla 4,a0 + move a0,@robo_wave,W + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + clr a0 + move a0,@HALT + move a0,@dtype ;2d mode + move a0,@IRQSKYE + move a0,@CCCCount + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + calla nosounds ;kill the select music + + ;draw the frame + move @robo_wave,a0 + addi #border_colors,a0 + move *a0,a0,W + callr draw_frame + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + + clr a14 + move a14,@player_dead,W ;clear the done flag + + ;initialize the robo palette color cycles + callr robo_pal_cycles + + ;initialize the badguy count + clr a14 + move a14,@live_badguys,W + + ;place the wave count + callr wave_count + + ;create the score monitor + CREATE ROBOSCORE_PID,score + + ;set up the player object + CREATE ROBOMAN_PID,our_hero ;start the little guy up + CREATE PLYRGUN_PID,player_gun ;give him a weapon + move a0,@gun_proc,L ;save the address + + ;set up some grunts + move @robo_wave,a0 + addi #wave_grunts,a0 + move *a0,a0,W + move @robo_wave,a2 + addi #grunt_speeds,a2 + move *a2,a2,W + callr make_grunts + + ;make some hulks + move @robo_wave,a0 + addi #wave_hulks,a0 + move *a0,a0,W + callr make_hulks + + ;sphereoids + move @robo_wave,a0 + addi #wave_sphereoids,a0 + move *a0,a0,W + callr make_sphereoids + + ;quarks + move @robo_wave,a0 + addi #wave_quarks,a0 + move *a0,a0,W + callr make_quarks + + ;make a few posts + move @robo_wave,a0 + addi #wave_posts,a0 + move *a0,a0,W + + move @robo_wave,a1 + addi #post_types,a1 + move *a1,a1,W + + move @robo_wave,a2 + addi #post_colors,a2 + move *a2,a2,W + + callr make_posts + + ;and some people + move @robo_wave,a0 + move a0,a1 + move a0,a2 + addi #wave_moms,a0 + addi #wave_dads,a1 + addi #wave_kids,a2 + move *a0,a0,W + move *a1,a1,W + move *a2,a2,W + callr make_humans + + ;start the collision checker + CREATE COLL_PID,collisions + + ;create the both-start-btn watcher + clr a0 + move a0,@starts_down,W + move a0,@forward,W + move a0,@backward,W + CREATE MISC_PID,watch_both_starts + + .if WAVE_CONTROL + CREATE MISC_PID,wave_mover + .endif + + .if DEBUG + .if BOG_MONITOR + CREATE MISC_PID,bog_o_meter + .endif + .endif + + calla display_unblank + +#not_done + SLEEPK 1 + move @live_badguys,a14 + jrz #wave_done + + move @player_dead,a14 + jrnz #dead_hero + + move @starts_down,a14 + jrnz #wave_abort + + move @forward,a14 + jrnz #wave_done + + move @backward,a14 + jrnz #back_up + jruc #not_done + + +#wave_done + movi RE_WAVEDONE,a14 + jruc #quit +#dead_hero + movi RE_DEADPLAYER,a14 + jruc #quit +#wave_abort + movi RE_ABORT,a14 + jruc #quit + +#back_up + movi RE_BACKUP,a14 + jruc #quit + +#quit + move a14,@robo_end,W + + ;put the wave back in a0 just like we found it + move @robo_wave,a0,W + sra 4,a0 + RETP + + +#border_colors + .if ROBO_DEBUG + .word 1 + .endif + .word 01,06,01,14,07,03,02,08 + .word 00,10,01,06,01,14,07,03 + +#wave_grunts + .if ROBO_DEBUG + .word 4 + .endif +; .word 15,17,22,34,20,30,00,30 +; .word 30,25,30,00,30,27,25,30 + + .word 15,17,22,34,20,32,00,35 + .word 60,25,35,00,35,27,25,35 + +#grunt_speeds + .if ROBO_DEBUG + .word 1000 + .endif + .word 20,15,15,15,15,15,15,15 + .word 15,15,14,14,14,14,14,13 + +#wave_posts + .if ROBO_DEBUG + .word 15 + .endif + .word 05,15,25,25,20,25,00,25 + .word 00,20,25,00,25,05,20,25 + +#post_types + .if ROBO_DEBUG + .word 0 + .endif + .word 0,1,3,8,4,2,0,7 + .word 0,5,0,1,3,8,4,2 + +#post_colors + .if ROBO_DEBUG + .word 0Fh + .endif + .word 15,14,11,13,14,15,14,11 + .word 14,10,15,14,11,13,14,15 + +#wave_hulks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,05,06,07,00,07,12,08 + .word 04,00,08,13,08,20,02,03 + +#wave_sphereoids + .if ROBO_DEBUG + .word 0 + .endif + .word 00,01,03,04,01,04,00,05 + .word 05,01,05,00,05,02,01,05 + +#wave_quarks + .if ROBO_DEBUG + .word 0 + .endif + .word 00,00,00,00,00,00,10,00 + .word 00,00,00,12,00,00,00,00 + +#wave_moms + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,15,03,04,03 + .word 03,00,03,03,03,05,00,03 + +#wave_dads + .if ROBO_DEBUG + .word 2 + .endif + .word 01,01,02,02,00,03,04,03 + .word 03,22,03,03,03,05,00,03 + +#wave_kids + .if ROBO_DEBUG + .word 2 + .endif + .word 00,01,02,02,01,03,04,03 + .word 03,00,03,03,03,05,22,03 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* PLAYER SECTION +* + + ;reg use + ; a4 - current position in animation script + ; a5 - head of current animation script + ; a6 - tail of current animation script + ; a8 - player object + ; a9 - motion count accumulator + ; a10 - direction of motion + + SUBRP our_hero + + ;create the player object + movi [#start_x,0],a0 + movi [#start_y,0],a1 + movi man_d1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPPLYR,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the global pointer + move a8,@player_object,L + + ; initiailize direction of motion + clr a10 + +#not_done + PUSHP a4,a5,a6 + SLEEPK 1 + PULLP a4,a5,a6 + + ; move him first + callr #move_player + + ; change his animation frame, if neccesary + callr #change_frame + + jruc #not_done + +#player_dead + ;kill the gun process + move @gun_proc,a0,L + calla KILL + + movi BULLET_PID,a0 + calla KIL1C + + movi GRUNT_PID,a0 + calla KIL1C + + movi HULK_PID,a0 + calla KIL1C + + movi HUMAN_PID,a0 + calla KIL1C + + movi SPHEREOID_PID,a0 + calla KIL1C + + movi ENFORCER_PID,a0 + calla KIL1C + + movi SPARK_PID,a0 + calla KIL1C + + movi QUARK_PID,a0 + calla KIL1C + + movi TANK_PID,a0 + calla KIL1C + + movi SHELL_PID,a0 + calla KIL1C + + calla STOPOBJS + + ;switch frames + movi robo_dead,a0,L + calla civanic + + ;death sound + movi RS_DIE,a0 + calla robo_sound + + SLEEP 120 + movk 1,a14 + move a14,@player_dead,W + + DIE + +****************************************************************************** +* +* player move routine +* + + SUBRP #move_player + + clr a0 + calla get_stick_val_cur + btst JOYDN,a0 + jrnz #move_down + btst JOYUP,a0 + jrnz #move_up + btst JOYRGT,a0 + jrnz #move_right + btst JOYLFT,a0 + jrnz #move_left + jruc #no_move + +#move_down + btst JOYRGT,a0 + jrnz #move_downright + btst JOYLFT,a0 + jrnz #move_downleft + + ;increment Y + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_up + btst JOYRGT,a0 + jrnz #move_upright + btst JOYLFT,a0 + jrnz #move_upleft + + ;decrement Y + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + jruc #move_done + +#move_right + ;increment X + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_left + ;decrement X + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upright + ; decrement Y and increment X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_upleft + ; decrement Y and decrement X + move *a8(OYPOS),a14,W + dec a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downright + ; increment Y and increment X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + inc a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_downleft + ; increment Y and decrement X + move *a8(OYPOS),a14,W + inc a14 + move a14,*a8(OYPOS),W + move *a8(OXPOS),a14,W + dec a14 + move a14,*a8(OXPOS),W + jruc #move_done + +#move_done + ; check bounds + move *a8(OXPOS),a14,W + cmpi #low_x,a14,W + jrgt #not_lowx + ; too low on x + inc a14 + move a14,*a8(OXPOS),W + +#not_lowx + cmpi #high_x,a14,W + jrle #not_highx + ; too high on x + dec a14 + move a14,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a14,W + cmpi #low_y,a14,W + jrgt #not_lowy + ; too low on y + inc a14 + move a14,*a8(OYPOS),W + +#not_lowy + cmpi #high_y,a14,W + jrle #not_highy + ; too high on y + dec a14 + move a14,*a8(OYPOS),W + +#not_highy +#no_move + +#done_moving + rets + +****************************************************************************** +* +* player animation routine +* + + + SUBRP #change_frame + ;reg use + ; a0 scratch + ; a1 sctatch + ; a3 new direction of motion + ; a10 old direction of motion - update + + clr a0 + clr a2 + calla get_stick_val_cur + move a0,a3 + + cmp a0,a10 + jreq #same_direction + jruc #new_direction + +#new_direction + ; start a new script. first use the joystick bits to compute an + ; offset into the script table. + X32 a0 ;multiply by 32 + addi #script_map,a0 ;add the address of the script table + move *a0,a0,L ;get the address of the script + + ; get the tail and head of the image list for this script + move *a0+,a6,L + move a0,a5 + + ;a5 now points to the first image in the script. change to it. + move *a5,a0,L + calla civanic + + ;set the new direction thingie and script pointer + move a3,a10 + move a5,a4 + + ;set the motion count + movi #motion_count,a9 + jruc #done_changing + +#same_direction + ;check the motion count + dec a9 + jrnz #done_changing + + ;reset the motion count + movi #motion_count,a9 + + ;increment the pointer, wrap if neccesary + addi 20h,a4 + cmp a4,a6 + jrne #no_wrap + move a5,a4 + +#no_wrap + ;a4 is the new image. change to it. + move *a4,a0,L + calla civanic + + jruc #done_changing + +#done_changing + rets + + +****************************************************************************** +* +* player collision routines +* + + SUBR player_die + PUSH a1,a7 + + ;we hit some kind of bad guy and are dead + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADPLAYER_PID,a1 + movi #player_dead,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* player configuration data +* + +;start position +#start_x equ 197 +#start_y equ 123 + +; motion boundaries +#low_x equ 53 +#high_x equ 347-7 +#low_y equ 45 +#high_y equ 231-12 + +;motion count - controls animation speed +#motion_count equ 2 ;there will be trouble if this is zero + +; walking animation scripts +#ani_holdstill + .long #ani_holdstillx + .long man_d1 +#ani_holdstillx + +#ani_walkup + .long #ani_walkupx + .long man_u1 + .long man_u2 + .long man_u1 + .long man_u3 +#ani_walkupx + +#ani_walkdown + .long #ani_walkdownx + .long man_d1 + .long man_d2 + .long man_d1 + .long man_d3 +#ani_walkdownx + +#ani_walkright + .long #ani_walkrightx + .long man_r1 + .long man_r2 + .long man_r1 + .long man_r3 +#ani_walkrightx + +#ani_walkleft + .long #ani_walkleftx + .long man_l1 + .long man_l2 + .long man_l1 + .long man_l3 +#ani_walkleftx + +#ani_bad + .long #ani_badx + .long robo_bad +#ani_badx + +; direction - script mappings: use AND combo of joy bits as index +#script_map + .long #ani_holdstill + .long #ani_walkup + .long #ani_walkdown + .long #ani_bad + .long #ani_walkleft + .long #ani_walkleft + .long #ani_walkleft + .long #ani_bad + .long #ani_walkright + .long #ani_walkright + .long #ani_walkright + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad + .long #ani_bad +#script_mapx + + +#***************************************************************************** +* +* player gun process +* + + ;reg use + ;a9 time till next shot is allowed + + SUBRP player_gun + + clr a9 + jruc #sleep + +#check_shot + movk 1,a0 + calla get_stick_val_cur + jrz #sleep ;no shot + + ;fire in the indicated direction + move a0,a10 + CREATE BULLET_PID,bullet + movi #rate_of_fire,a9 + + ;shoot sound + movi RS_SHOOT,a0 + callr robo_sound + + jruc #sleep + +#too_soon + dec a9 + jruc #sleep + +#sleep + SLEEPK 1 + move a9,a9 + jrnz #too_soon + jruc #check_shot + +#done + DIE + +#rate_of_fire equ 6 ;min ticks between shots + + +#***************************************************************************** +* +* player bullet process +* + + ;reg use + ; a4 velocity accumulator (used to pick the correct bullet) + ; a5 vert indicator + ; a8 bullet object + ;a10 (in) stick bits + + SUBRP bullet + + ;create a bullet object + movi [500,0],a0 + clr a1 + movi bullet_hrz,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSPLYR|TYPBULLET,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the speed and start position + move @player_object,a9,L + clr a4 + clr a5 + move *a9(OXPOS),a0,W + addk #bstart_xoff,a0 + move a0,*a8(OXPOS),W + move *a9(OYPOS),a0,W + addk #bstart_yoff,a0 + move a0,*a8(OYPOS),W + + btst JOYRGT,a10 + jrz #not_right + move *a8(OXPOS),a14,W ;pos + addi #bstart_radj,a14 + move a14,*a8(OXPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + inc a4 + +#not_right + + btst JOYLFT,a10 + jrz #not_left + move *a8(OXPOS),a14,W ;pos + addi #bstart_ladj,a14 + move a14,*a8(OXPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OXVEL),L + dec a4 + +#not_left + + btst JOYUP,a10 + jrz #not_up + move *a8(OYPOS),a14,W ;pos + addi #bstart_uadj,a14 + move a14,*a8(OYPOS),W + movi -#bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + dec a4 + inc a5 + +#not_up + + btst JOYDN,a10 + jrz #not_down + move *a8(OYPOS),a14,W ;pos + addi #bstart_dadj,a14 + move a14,*a8(OYPOS),W + movi #bullet_speed,a0 ;speed + move a0,*a8(OYVEL),L + inc a4 + inc a5 + +#not_down + + ;set the image + movi bullet_hrz,a0 + move a5,a5 + jrz #horiz + movi bullet_vrt,a0 +#horiz + + ;vert/horz is set. check for diagonal instead + cmpi 1,a4 + jreq #image_set + cmpi -1,a4 + jreq #image_set + + ;it's a diagonal. if a4 is 0, use frontslash + move a4,a4 + jrz #front_slash + movi bullet_bck,a0 + jruc #image_set + +#front_slash + movi bullet_fnt,a0 + +#image_set + calla civanic + +#loop + callr bounds_check + move a0,a0 + jrnz #hit_wall + SLEEPK 1 + jruc #loop + +#hit_wall + ;zoinks! We've hit a wall. back up to be flush against it. + ; a2 holds the number of pixels we have to back up. + + ;well, we can overlap on the wall a LITTLE. say, 2 pixels. + subk 2,a2 + + move *a8(OXVEL),a0,L + jrz #y_adjust + jrn #neg_xvel + move *a8(OXPOS),a0,W + sub a2,a0 + move a0,*a8(OXPOS),W + jruc #y_adjust +#neg_xvel + move *a8(OXPOS),a0,W + add a2,a0 + move a0,*a8(OXPOS),W + +#y_adjust + move *a8(OYVEL),a0,L + jrz #kill_bullet + jrn #neg_yvel + move *a8(OYPOS),a0,W + sub a2,a0 + move a0,*a8(OYPOS),W + jruc #kill_bullet +#neg_yvel + move *a8(OYPOS),a0,W + add a2,a0 + move a0,*a8(OYPOS),W + +#kill_bullet + SLEEPK 1 + calla DELOBJA8 + DIE + + +****************************************************************************** +* +* player bullet collision routines +* + + SUBR bullet_die + PUSH a1,a7,a9,a10,a11 + + ;we hit some kind of bad guy and are stopped. + movi CLSDEAD,a14 + move a14,*A8(OID) + move *a8(OPLINK),a0,L + movi DEADBULLET_PID,a1 + movi #kill_bullet,a7 + calla XFERPROC + + PULL a1,a7,a9,a10,a11 + rets + + +#bullet_speed equ 00080000h ;pixels per frame + +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;hero anim point is top left. bullet anim point is center. use these to +; adjust the starting position of the bullet. +; No. The bullet anim points are gone now. Unk. +#bstart_xoff equ 3 +#bstart_yoff equ 5 + +#bstart_radj equ 7 +#bstart_ladj equ -13 +#bstart_uadj equ -14 +#bstart_dadj equ 8 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* GRUNT SECTION +* + + ;reg use + ; a0 (in) # of grunts + ; a1 scratch + ; a2 (in) initial speed + + SUBRP make_grunts + + move a0,a0 + jrz #done + +#another_grunt + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_grunt + cmpi #mid_x2,a9 + jrge #place_grunt + cmpi #mid_y1,a10 + jrle #place_grunt + cmpi #mid_y2,a10 + jrge #place_grunt + jruc #get_pos + +#place_grunt + ;assign a random starting position + move a2,a11 + CREATE GRUNT_PID,grunt + PULLP a0 + dsj a0,#another_grunt + +#done + rets + + +#min_x equ 53 ;grunt start outer boundaries +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-13 + +#mid_x1 equ 200-60 ;grunt start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +#***************************************************************************** +* +* grunt process +* + + STRUCTPD + WORD #ACCEL_TIMER ;UHW accelerator count + LONG #DEATH_SEQUENCE ;UHL anim to use when dying + ; (set by coll routines) + + ;reg use + ; a8 object handle + ; a9 (in) starting x + ; a9 (use) ticks between moves + ;a10 (in) starting y + ;a10 (use) ticks until next move + ;a11 (in) initial speed + ;a11 (use) frame count + + SUBRP grunt + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create a grunt object + move a9,a0 + sla 16,a0 + move a10,a1 + sla 16,a1 + movi grunt_1,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPGRUNT,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize move timer + move a11,a9 + + ;initialize time till next move + move a9,a0 + calla RNDRNG0 + add a11,a0 + move a0,a10 + + ;initialize accel counter + movi #acceleration,a14 + move a14,*a13(#ACCEL_TIMER),W + + ;initialize frame counter + clr a11 + +#loop + move *a13(#ACCEL_TIMER),a14,W + dec a14 + jrnz #no_accel + + movi #acceleration,a14 + cmpi #top_speed,a9 + jreq #no_accel + dec a9 + +#no_accel + move a14,*a13(#ACCEL_TIMER),W + SLEEPK 1 + + dsj a10,#loop + callr #move_grunt + move a9,a10 + jruc #loop + +#die + ;we've croaked + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;set up the animation + move *a13(#DEATH_SEQUENCE),a9,L + move *a8(OCTRL),a0 + +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + +****************************************************************************** +* +* grunt move routine +* + + SUBRP #move_grunt + move @player_object,a14,L + + ;move in X + move *a14(OXPOS),a0,W + move *a8(OXPOS),a1,W + sub a1,a0 + jrz #done_movex + jrn #move_left + jruc #move_right + +#move_left + move *a8(OXPOS),a1,W + addi -#xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#move_right + move *a8(OXPOS),a1,W + addi #xmotion_inc,a1 + move a1,*a8(OXPOS),W + jruc #done_movex + +#done_movex + + move *a14(OYPOS),a0,W + move *a8(OYPOS),a1,W + sub a1,a0 + jrz #done_movey + jrn #move_up + jruc #move_down + +#move_up + move *a8(OYPOS),a1,W + addi -#ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#move_down + move *a8(OYPOS),a1,W + addi #ymotion_inc,a1 + move a1,*a8(OYPOS),W + jruc #done_movey + +#done_movey + + ;step through the animation + inc a11 + cmpi 4,a11 + jrne #no_wrap + clr a11 + +#no_wrap + move a11,a14 + X32 a14 + addi #walk_script,a14 + move *a14,a0,L + calla civanic + + ;sound + movi RS_GRUNT,a0 + callr robo_sound + rets + + +****************************************************************************** +* +* grunt collision routines +* + + SUBR grunt_shot + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a14 + jruc #death_set +#vert_bullet + movi #die_horz,a14 + jruc #death_set +#diag_13 + movi #die_diag24,a14 + jruc #death_set +#diag_24 + movi #die_diag13,a14 + jruc #death_set + +#death_set + + move *a8(OPLINK),a0,L + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + movi #grunt_points,a0 + callr score_points + + ;die sound + movi RS_HIT,a0 + calla robo_sound + + PULL a1,a7 + rets + + + SUBR grunt_die + ;hit a mine or something + + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi #die_vert,a14 + move a14,*a0(#DEATH_SEQUENCE),L + movi DEADGRUNT_PID,a1 + movi #die,a7 + move *a0(PA9),a9,L + move *a0(PA10),a10,L + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* grunt configuration data +* + + +#walk_script + .long grunt_1 + .long grunt_2 + .long grunt_1 + .long grunt_3 +#walk_scriptx + +#die_vert + .long grunt_xv1 + .long grunt_xv2 + .long grunt_xv3 + .long grunt_xv4 + .long 0 +#die_vertx + +#die_horz + .long grunt_xh1 + .long grunt_xh2 + .long grunt_xh3 + .long grunt_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long grunt_xdf1 + .long grunt_xdf2 + .long grunt_xdf3 + .long grunt_xdf4 + .long 0 +#die_diag13x + +#die_diag24 + .long grunt_xdb1 + .long grunt_xdb2 + .long grunt_xdb3 + .long grunt_xdb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + +#acceleration equ 100 ;decrement motion clock every X cycles +#top_speed equ 3 ;as fast as they get +#xmotion_inc equ 0004h +#ymotion_inc equ 0004h + +#grunt_points equ 100 ;points for killing a grunt + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* POST SECTION +* + ;reg use + ; a0 - (in) # of posts to create + ; a1 - (in) type (0-8) + ; a2 - (in) color (0-F) + + SUBRP make_posts + + move a0,a9 ;move the inputs to safer spots + jrz #done + + move a1,a10 ;type + + move a2,a11 ;color + sla 8,a11 + or a2,a11 + +#another_post +#get_pos + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a2 ;hide a0 + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a2,a1 ;put it back + + addi #min_x,a0 + addi #min_y,a1 + + cmpi #mid_x1,a0 + jrle #place_post + cmpi #mid_x2,a0 + jrge #place_post + cmpi #mid_y1,a1 + jrle #place_post + cmpi #mid_y2,a1 + jrge #place_post + jruc #get_pos + +#place_post + sla 16,a0 ;X pos + sla 16,a1 ;Y pos + + ;create the post object + move a10,a14 + X32 a14 + addi #post_types,a14 + move *a14,a14,L + move *a14,a2,L ;DON'T advance + + clr a3 + movi DMACNZ,a4 + movi CLSNEUT|TYPPOST,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a10,*a8(OMISC),W ;stuff the type in the object + + move a11,*a8(OCONST),W + + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + + dsj a9,#another_post + +#done + rets + + +#min_x equ 53 ;post start outer boundaries +#max_x equ 347-17 +#min_y equ 45 +#max_y equ 231-10 + +#mid_x1 equ 200-50 ;post start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +****************************************************************************** +* +* post collision routines +* + + SUBR post_die + + movi CLSDEAD,a14 + move a14,*a8(OID),W + CREATE DEADPOST_PID,kill_post + + rets + + + ;reg use + ; a8 - * image + ; a9 - anim pointer + + SUBR kill_post + + move *a8(OMISC),a0,W + X32 a0 + addi #post_types,a0 + move *a0,a9,L + move *a8(OCTRL),a14,W + xori DMACNZ,a14 + ori DMAWNZ,a14 + move a14,*a8(OCTRL),W +#kploop + move *a9+,a0,L + jrz #kpdone + calla civanic + SLEEPK #die_speed + jruc #kploop + +#kpdone + calla DELOBJA8 + DIE + + +#die_speed equ 3 + +#post_types + .long #star ;0 + .long #crystal ;1 + .long #diamond ;2 + .long #square ;3 + .long #rectangle ;4 + .long #R2084 ;5 + .long #pcube ;6 + .long #spiral ;7 + .long #triangle ;8 + .long 0 +#post_typesx + +#star + .long star_1,star_2,star_3,0 + +#crystal + .long crystal_1,crystal_2,crystal_3,0 + +#diamond + .long diamond_1,diamond_2,diamond_3,0 + +#square + .long square_1,square_2,square_3,0 + +#rectangle + .long rectangle_1,rectangle_2,rectangle_3,0 + +#R2084 + .long R2084_1,R2084_2,R2084_3,0 + +#pcube + .long pcube_1,pcube_2,pcube_3,0 + +#spiral + .long spiral_1,spiral_2,spiral_3,0 + +#triangle + .long triangle_1,triangle_2,triangle_3,0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HUMAN SECTION +* + + .bss humans_saved, 16 + + ;reg use + ; a0 # of moms + ; a1 # of dads + ; a2 # of kids + + SUBRP make_humans + + ;initialize the savecount + clr a14 + move a14,@humans_saved,W + + ;first make the moms + move a0,a0 + jrz #skip_moms +#mom_loop + PUSHP a0,a1,a2 + callr #rand_position + movi ROBJ_MOM,a9 + CREATE HUMAN_PID,human + PULLP a0,a1,a2 + dsj a0,#mom_loop + +#skip_moms + + ;dads + move a1,a1 + jrz #skip_dads +#dad_loop + PUSHP a1,a2 + callr #rand_position + movi ROBJ_DAD,a9 + CREATE HUMAN_PID,human + PULLP a1,a2 + dsj a1,#dad_loop + +#skip_dads + + ;kids + move a2,a2 + jrz #skip_kids +#kid_loop + PUSHP a2 + callr #rand_position + movi ROBJ_KID,a9 + CREATE HUMAN_PID,human + PULLP a2 + dsj a2,#kid_loop + +#skip_kids + rets + + + ;reg use + ; no input + ;a10 - (ret) an X val + ;a11 - (ret) a Y val + + SUBRP #rand_position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a10 + addi #min_x,a10 + + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a11 + addi #min_y,a11 + + rets + + +****************************************************************************** +* +* human process +* + STRUCTPD + LONG #HITPOST ;UHL post we've hit + + ;reg use + ; a8 - hObject + ; a9 - (in) OID + ; a9 - (use) image table address (#mom_table, #dad_table...) + ;a10 - (in) x + ;a10 - (use) direction of motion (1-8) + ;a11 - (in) y + ;a11 - (use) frame index (0-3) + + + SUBRP human + + cmpi ROBJ_MOM,a9 + jreq #init_mom + cmpi ROBJ_DAD,a9 + jreq #init_dad + cmpi ROBJ_KID,a9 + jreq #init_kid + + LOCKUP ;bad objid + +#init_mom + movi #mom_table,a9 + jruc #make_obj + +#init_dad + movi #dad_table,a9 + jruc #make_obj + +#init_kid + movi #kid_table,a9 + jruc #make_obj + +#make_obj + ;cweate a widdle people object + move a10,a0 + sla 16,a0 + move a11,a1 + sla 16,a1 + move *a9(#walk_down),a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSNEUT|TYPHUMAN,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;choose a direction of motion + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + + ;set the frame index + movi 3,a11 + callr #advance_frame + +#move_loop + SLEEPK #sleep_time + callr #rand_dirchange + callr #move_onestep + move a0,a0 + jrnz #hit_wall + callr #advance_frame + jruc #move_loop + +#hit_wall + ;sleep first because: If you move and bump into both a wall and a + ; post at the same time (could happen), and then you immediately + ; reverse direction, you'll then get flipped AGAIN when you hit + ; the post and get forwarded right through the wall. yuck. so + ; instead when you hit a wall, wait a frame and let the post + ; collisions sort themselves out, THEN change direction. + SLEEPK 1 + callr #reverse_direction + callr #advance_frame + jruc #move_loop + +#hit_post + callr post_adjust + callr #advance_frame + jruc #move_loop + +#saved + ;sound + movi RS_RESCUE,a0 + callr robo_sound + + ;increment the save count + move @humans_saved,a14,W + inc a14 + move a14,@humans_saved,W + + cmpi 5,a14 + jrle #no_cap + movi 5,a14 +#no_cap + dec a14 + + PUSH a14 + sla 4,a14 + addi #score_table,a14 + move *a14,a0,W + callr score_points + PULL a14 + + X32 a14 + addi #saved_table,a14 + move *a14,a0,L + calla civanic + + SLEEP 120 + calla DELOBJA8 + jruc #done + +#killed + movi skull,a0 + calla civanic + + SLEEP 120 + calla DELOBJA8 +; jruc #done ;fall through + +#done + DIE + + +****************************************************************************** +* Human has bounced into or started inside a post. Make it better. +* Do this by reversing the direction of the human and moving it forward +* in the new direction until it's clear of the post. +* + + ;reg use + ; a0 - X overlap + ; a1 - Y overlap + + SUBRP post_adjust + PUSH a0,a1,a2,a3,a7 + + move *a13(#HITPOST),a7,L + + callr #reverse_direction + + ;calculate degree of X and Y overlap + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + jrn #yvel_neg + jrz #yvel_zero + +#yvel_pos + move *a7(OYPOS),a1 + move *a7(OSIZEY),a14 + add a14,a1 + move *a8(OYPOS),a14 + sub a14,a1 + jruc #do_xvel +#yvel_zero + movi 100h,a1 + jruc #do_xvel +#yvel_neg + move *a8(OYPOS),a1 + move *a8(OSIZEY),a14 + add a14,a1 + move *a7(OYPOS),a14 + sub a14,a1 +; jruc #do_xvel + +#do_xvel + move *a2,a3,W ;x vel + jrn #xvel_neg + jrz #xvel_zero + +#xvel_pos + move *a7(OXPOS),a0 + move *a7(OSIZEX),a14 + add a14,a0 + move *a8(OXPOS),a14 + sub a14,a0 + jruc #ovlap_done +#xvel_zero + movi 100h,a0 + jruc #ovlap_done +#xvel_neg + move *a8(OXPOS),a0 + move *a8(OSIZEX),a14 + add a14,a0 + move *a7(OXPOS),a14 + sub a14,a0 +; jruc #ovlap_done + +#ovlap_done + ;a0 and a1 are the X and Y overlaps, respectively. We need only + ; worry about the smallest of the two and move that many steps. Note + ; that if velocity in a given direction is zero, the overlap is + ; set to some outrageously large value so that the other direction + ; is all that counts. + cmp a1,a0 + jrle #low_set + move a1,a0 +#low_set + ;a0 is now the smallest. + move a0,a1 + move a10,a2 + X32 a2 + addi #walk_increments,a2 + move *a2+,a3,W ;y vel + mpys a3,a1 + move *a2,a3,W ;x vel + mpys a0,a3 + move a3,a0 + + ;a0 and a1 now hold X and Y adjustments, respectively. + move *a8(OXPOS),a14 + add a0,a14 + move a14,*a8(OXPOS) + move *a8(OYPOS),a14 + add a1,a14 + move a14,*a8(OYPOS) + + PULL a0,a1,a2,a3,a7 + rets + + +****************************************************************************** +* +* human movement/animation routine +* + + ;reg use + ; a0 - scratch + ; a0 (out) - walls hit (0-2) + ; a1 - scratch + ; a8 - (in) hObject + ; a9 - (in) image table address (#mom_table, #dad_table...) + ;a10 - (in) direction of motion (1-8) + ;a11 - (in) frame index (0-3) + + SUBRP #move_onestep + + ;move the object + move a10,a1 + X32 a1 + addi #walk_increments,a1 + move *a1+,a14,W + move *a8(OYPOS),a0,W + add a14,a0 + move a0,*a8(OYPOS),W + move *a1+,a14,W + move *a8(OXPOS),a0,W + add a14,a0 + move a0,*a8(OXPOS),W + + clr a1 + move *a8(OXPOS),a0,W + + cmpi #min_x,a0 + jrge #not_lowx + + ;low x + inc a1 + movi #min_x,a0 + move a0,*a8(OXPOS),W + +#not_lowx + cmpi #max_x,a0 + jrle #not_highx + + ;high x + inc a1 + movi #max_x,a0 + move a0,*a8(OXPOS),W + +#not_highx + + move *a8(OYPOS),a0,W + + cmpi #min_y,a0 + jrge #not_lowy + + ;low y + inc a1 + movi #min_y,a0 + move a0,*a8(OYPOS),W + +#not_lowy + cmpi #max_y,a0 + jrle #not_highy + + ;high y + inc a1 + movi #max_y,a0 + move a0,*a8(OYPOS),W + +#not_highy + move a1,a0 + rets + + +****************************************************************************** +* Changes direction one time in #dirchange_chance. +* + + SUBRP #rand_dirchange + + ;1 chance in #dirchange_chance of spontaneously switching direction + movi #dirchange_chance,a0 + calla RNDRNG0 + move a0,a0 + jrnz #dirchange_done + movi 7,a0 + calla RNDRNG0 + inc a0 + move a0,a10 + +#dirchange_done + rets + + +****************************************************************************** +* Reverses direction +* + + SUBRP #reverse_direction + + ;reverse direction of motion + subi 4,a10 + jrp #rd_done + addi 8,a10 +#rd_done + rets + +****************************************************************************** +* Advances the frame +* + + SUBRP #advance_frame + + ;advance the frame and set the new image + inc a11 + cmpi 4,a11 + jrne #no_wrap + ;wraparound. reset to start + clr a11 + +#no_wrap + ;calculate the next frame + move a9,a0 + move a10,a1 + sla 4,a1 ;mult by 10h + addi #motion_table,a1 + + ;a1 now points to one of the entries in #motion table + move *a1,a1,W + add a1,a0 + + ;a0 now points to an entry in #xxx_table + move a11,a1 + X32 a1 ;mult by 20h + add a1,a0 + move *a0,a0,L + + calla civanic + + rets + + +****************************************************************************** +* +* human collision routines +* + + SUBR human_saved + PUSH a1,a7 + + ;change the obj id + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi SAVEDHUMAN_PID,a1 + movi #saved,a7 + calla XFERPROC + + PULL a1,a7 + rets + + SUBR human_killed + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADHUMAN_PID,a1 + movi #killed,a7 + calla XFERPROC + + PULL a1,a7 + rets + + + SUBR human_hitpost + PUSH a1,a7 + + move a0,a1 + move *a8(OPLINK),a0,L + move a1,*a0(#HITPOST),L + move *a0(PA8),a8,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HUMAN_PID,a1 + movi #hit_post,a7 + calla XFERPROC + + PULL a1,a7 + rets + +****************************************************************************** +* +* human configuration data +* + + +#min_x equ 53 ;human start/motion outer boundaries +#max_x equ 347-11 +#min_y equ 45 +#max_y equ 231-13 + +#sleep_time equ 7 +#x_step equ 1 +#y_step equ 1 + +#dirchange_chance equ 40 + +#walk_increments + .word 0,0 ;because direction is 1-8, not 0-7 + .word -#y_step,0 + .word -#y_step,#x_step + .word 0,#x_step + .word #y_step,#x_step + .word #y_step,0 + .word #y_step,-#x_step + .word 0,-#x_step + .word -#y_step,-#x_step +#walk_incrementsx + +#motion_table + .word 0 ;because direction is 1-8, not 0-7 + .word #walk_up + .word #walk_right + .word #walk_right + .word #walk_right + .word #walk_down + .word #walk_left + .word #walk_left + .word #walk_left +#motion_tablex + +;image table direction offsets +#walk_left equ 0000h +#walk_right equ #walk_left + (4 * 20h) +#walk_up equ #walk_right + (4 * 20h) +#walk_down equ #walk_up + (4 * 20h) + +#score_table + .word 1000,2000,3000,4000,5000 +#score_tablex + +;image tables +#mom_table + .long mom_l1 + .long mom_l2 + .long mom_l1 + .long mom_l3 + + .long mom_r1 + .long mom_r2 + .long mom_r1 + .long mom_r3 + + .long mom_u1 + .long mom_u2 + .long mom_u1 + .long mom_u3 + + .long mom_d1 + .long mom_d2 + .long mom_d1 + .long mom_d3 +#mom_tablex + +#dad_table + .long dad_l1 + .long dad_l2 + .long dad_l1 + .long dad_l3 + + .long dad_r1 + .long dad_r2 + .long dad_r1 + .long dad_r3 + + .long dad_u1 + .long dad_u2 + .long dad_u1 + .long dad_u3 + + .long dad_d1 + .long dad_d2 + .long dad_d1 + .long dad_d3 +#dad_tablex + +#kid_table + .long kid_l1 + .long kid_l2 + .long kid_l1 + .long kid_l3 + + .long kid_r1 + .long kid_r2 + .long kid_r1 + .long kid_r3 + + .long kid_u1 + .long kid_u2 + .long kid_u1 + .long kid_u3 + + .long kid_d1 + .long kid_d2 + .long kid_d1 + .long kid_d3 +#kid_tablex + +#saved_table + .long one_k + .long two_k + .long three_k + .long four_k + .long five_k +#saved_tablex + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* HULK SECTION +* + + ;reg use + ; a0 - (in) # of hulks + + SUBRP make_hulks + + move a0,a0 + jrz #done + +#another_hulk + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_hulk + cmpi #mid_x2,a9 + jrge #place_hulk + cmpi #mid_y1,a10 + jrle #place_hulk + cmpi #mid_y2,a10 + jrge #place_hulk + jruc #get_pos + +#place_hulk + ;assign a random starting position + CREATE HULK_PID,hulk + PULLP a0 + dsj a0,#another_hulk + +#done + rets + + +#min_x equ 53 ;hulk start outer boundaries +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#mid_x1 equ 200-50 ;hulk start inner boundaries +#mid_x2 equ 200+50 +#mid_y1 equ 138-50 +#mid_y2 equ 138+50 + + +#***************************************************************************** +* +* hulk process +* + + STRUCTPD + LONG #PD_SCRIPT ;UHL script head + WORD #PD_FRAME_NDX ;UHW frame index + + ;reg use + ; a8 - object handle + ; a9 - (in) starting x + ; a9 - (use) frame change count + ;a10 - (in) starting y + ;a11 - direction of motion (0-3) + + SUBRP hulk + + ;choose a direction of motion + movi 3,a0 + calla RNDRNG0 + move a0,a11 + + X32 a0 + addi #anim_list,a0 + move *a0,a6,L + move a6,*a13(#PD_SCRIPT),L + clr a7 + move a7,*a13(#PD_FRAME_NDX),W + + ;create the hulk object + move a9,a0 ;x pos + sla 16,a0 + move a10,a1 ;y pos + sla 16,a1 + + move a7,a14 ;img + X32 a14 + add a6,a14 + move *a14,a2,L + + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPHULK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the move counter + movi #move_freq/2,a0 + calla RNDRNG0 + addi #move_freq,a0 + move a0,a9 + +#loop + SLEEPK 1 + dsj a9,#loop + callr #move_hulk + movi #move_freq,a9 + jruc #loop + + +#been_shot ;we immediately wake up here if we've been hit and moved + ; by a player bullet. + callr #do_bounds_check + jruc #loop + + DIE + + +****************************************************************************** +* +* hulk move routine +* + + ;reg use + ; a0 scratch + ; a1 scratch + ; a8 object handle + ;a11 direction of motion (0-3) + + SUBRP #move_hulk + ;move him + move a11,a14 + X32 a14 + addi #move_table,a14 + move *a14+,a0,W + move *a14,a1,W + move *a8(OXPOS),a14,W + add a0,a14 + move a14,*a8(OXPOS),W + move *a8(OYPOS),a14,W + add a1,a14 + move a14,*a8(OYPOS),W + + ; + ;note the fall-through here + ; + + ;bounds check + SUBRP #do_bounds_check + clr a1 + + clr a0 + move *a8(OXPOS),a0,W + cmpi #low_x,a0 + jrlt #too_left + cmpi #high_x,a0 + jrgt #too_right + jruc #vert_check + +#too_left + movi #low_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_LEFT,a1 + jruc #vert_check + +#too_right + movi #high_x,a14 + move a14,*A8(OXPOS),W + ori M_HIT_RIGHT,a1 +; jruc #vert_check + +#vert_check + clr a0 + move *a8(OYPOS),a0,W + cmpi #low_y,a0 + jrlt #too_high + cmpi #high_y,a0 + jrgt #too_low + jruc #done_boundcheck + +#too_high + movi #low_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_TOP,a1 + jruc #done_boundcheck + +#too_low + movi #high_y,a14 + move a14,*A8(OYPOS),W + ori M_HIT_BOTTOM,a1 + jruc #done_boundcheck + +#done_boundcheck + move a1,a1 + jrnz #change_direction + +#no_wallhit + movi #turn_prob,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrnz #done_moving + + ;spontaneous direction change. random for now +; jruc #change_direction ;fall through + +#change_direction + ;turn 90 degrees by randomly incrementing or decrementing direction + movi 1,a0 + PUSH a1 + calla RNDRNG0 + PULL a1 + move a0,a0 + jrz #inc_direction + dec a11 + jruc #dir_rangecheck + +#inc_direction + inc a11 + +#dir_rangecheck + cmpi -1,a11 + jrne #dir_notlow + movi 3,a11 + +#dir_notlow + cmpi 4,a11 + jrne #dir_changed + clr a11 + +#dir_changed + + ;verify that this is a good direction + cmpi 0,a11 + jreq #validate_up + cmpi 1,a11 + jreq #validate_right + cmpi 2,a11 + jreq #validate_down + cmpi 3,a11 + jreq #validate_left + +#validate_up + andi M_HIT_TOP,a1 + jrnz #change_direction + jruc #valid_dir +#validate_right + andi M_HIT_RIGHT,a1 + jrnz #change_direction + jruc #valid_dir +#validate_down + andi M_HIT_BOTTOM,a1 + jrnz #change_direction + jruc #valid_dir +#validate_left + andi M_HIT_LEFT,a1 + jrnz #change_direction + jruc #valid_dir + +#valid_dir + + move a11,a0 + X32 a0 + addi #anim_list,a0 + move *a0,a0,L + move a0,*a13(#PD_SCRIPT),L + +#done_moving + +#new_frame + move *a13(#PD_FRAME_NDX),a14,W + move *a13(#PD_SCRIPT),a6,L + inc a14 + cmpi 4,a14 + jrne #no_wrap + clr a14 +#no_wrap + move a14,*a13(#PD_FRAME_NDX),W + X32 a14 + add a6,a14 + move *a14,a0,L + calla civanic + + rets + + +****************************************************************************** +* +* hulk collision routines +* + + SUBR hulk_pushback + PUSH a1,a7,a9,a10,a11,a13 + + ;immediately move the hulk in the direction of the bullet's motion + move *a0(OXVEL),a14,L + sra 17,a14 + move *a8(OXPOS),a1,W + add a14,a1 + move a1,*a8(OXPOS),W + + move *a0(OYVEL),a14,L + sra 17,a14 + move *a8(OYPOS),a1,W + add a14,a1 + move a1,*a8(OYPOS),W + + ;wake up at the collision check + move *a8(OPLINK),a0,L + move *a0(PA9),a9,L + move *a0(PA10),a10,L + move *a0(PA11),a11,L + movi HULK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + PULL a1,a7,a9,a10,a11,a13 + + rets + + +****************************************************************************** +* +* hulk configuration data +* + +#step_x equ 4 +#step_y equ 4 + +#low_x equ 53 ;hulk move boundaries +#high_x equ 347-13 +#low_y equ 45 +#high_y equ 231-16 + +#move_freq equ 8 ;frames between moves + +#turn_prob equ 30 ;chance per frame of spontaneously changing + ;direction +#move_table + .word 0,-#step_y + .word #step_x,0 + .word 0,#step_y + .word -#step_x,0 +#move_tablex + +#anim_list + .long #anim_vert + .long #anim_right + .long #anim_vert + .long #anim_left +#anim_listx + +#anim_vert + .long hulk_ud1 + .long hulk_ud2 + .long hulk_ud1 + .long hulk_ud3 +#anim_vertx + +#anim_left + .long hulk_l1 + .long hulk_l2 + .long hulk_l1 + .long hulk_l3 +#anim_leftx + +#anim_right + .long hulk_r1 + .long hulk_r2 + .long hulk_r1 + .long hulk_r3 +#anim_rightx + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPHEREOID SECTION +* + + ;reg use + ; a0 - (in) # of sphereoids + + SUBRP make_sphereoids + + move a0,a0 + jrz #done + +#another_sphereoid + PUSHP a0 + +#get_pos + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_sphereoid + cmpi #mid_x2,a9 + jrge #place_sphereoid + cmpi #mid_y1,a10 + jrle #place_sphereoid + cmpi #mid_y2,a10 + jrge #place_sphereoid + jruc #get_pos + +#place_sphereoid + ;assign a random starting position + CREATE SPHEREOID_PID,sphereoid + PULLP a0 + dsj a0,#another_sphereoid + +#done + rets + + +#mid_x1 equ 200-80 ;sphereoid start inner boundaries +#mid_x2 equ 200+80 +#mid_y1 equ 138-80 +#mid_y2 equ 138+80 + + +******************************************************************************* +* +* sphereoid process +* + + STRUCTPD + LONG #OXACC ;UHL x acceleration + LONG #OYACC ;UHL y acceleration + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP sphereoid + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the sphereoid object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPHEREOID,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_va + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time/2,a0 + calla RNDRNG0 + addi #youth_time*3/4,a0 + move a0,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;adjust velocities + callr #acc_add + + ;bounds check + callr #in_bounds + + ;adjust vel and acc if it's time + dec a11 + jrnz #no_va_change + callr #set_va + +#no_va_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14,W + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE ENFORCER_PID,enforcer + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time/2,a0 + calla RNDRNG0 + addi #spawn_time*3/4,a0 + move a0,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + +#been_shot + ;crud. we've been shot. score the points + movi #sphereoid_points,a0 + callr score_points + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;clear the velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;go through the death routine + movi #parent_script,a10,L + move *a8(OCTRL),a14,W + xori DMAWNZ,a14 + ori DMACNZ,a14 + move a14,*a8(OCTRL),W + movi #diecolor,a14 + move a14,*a8(OCONST),W + movi robo_p,a0 + calla pal_getf + move a0,*a8(OPAL),W + +#die_loop + SLEEPK #anim_speed + move *a10+,a0,L + jrz #score_msg + calla civanic + jruc #die_loop + +#score_msg + movi #score_image,a0 + move *a8(OCTRL),a1,W + xori DMACNZ,a1 + ori DMAWNZ,a1 + calla civani + movi #score_xoff,a14 + move a14,*a8(ODXOFF),W + movi #score_yoff,a14 + move a14,*a8(ODYOFF),W + SLEEP #score_time + jruc #expire + +#die_peacefully + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #set_va + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OXVEL),L + + movi #high_v*2,a0 + calla RNDRNG0 + subi #high_v,a0 + move a0,*a8(OYVEL),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OXACC),L + + movi #high_a*2,a0 + calla RNDRNG0 + subi #high_a,a0 + move a0,*a13(#OYACC),L + + movi #va_change_time,a0 + calla RNDRNG0 + inc a0 + move a0,a11 + + rets + + + SUBRP #acc_add + move *a13(#OXACC),a14,L + move *a8(OXVEL),a0,L + add a14,a0 + move a0,*a8(OXVEL),L + + move *a13(#OYACC),a14,L + move *a8(OYVEL),a0,L + add a14,a0 + move a0,*a8(OYVEL),L + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + move a0,*a13(#OXACC),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + move a0,*a13(#OYACC),L + +#done_check + rets + + +****************************************************************************** +* +* sphereoid collision routines +* + + SUBR sphereoid_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPHERE_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* sphereoid configuration data +* + +#anim_speed equ 3 + +#va_change_time equ 180 + +#sphereoid_points equ 1000 + +#youth_time equ 180 ;time before we have kids +#spawn_time equ 120 ;time between kids +#old_age_time equ 180 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned enforcers +#max_kids equ 7 ;upper limit + +#high_v equ 00004000h +#high_a equ 00000C00h + +#min_x equ 53 ;sphereoid move bounds +#max_x equ 347-15 +#min_y equ 45 +#max_y equ 231-15 + +#score_image equ one_k ;image on being shot +#diecolor equ 0909h ;color on being shot +#score_time equ 60 ;time to display score value +#score_xoff equ -3 ;shotimage offset +#score_yoff equ -5 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long 0 + +#parent_script + .long circle_1 + .long circle_2 + .long circle_3 + .long circle_4 + .long circle_5 + .long circle_6 + .long circle_7 + .long circle_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* ENFORCER SECTION +* + + .bss num_enforcers, 16 ;active enforcers + .bss picket_duty, 32 ;*img of picket enforcer + + ;reg use + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow phase) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP enforcer + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + inc a14 + move a14,@num_enforcers,W + + ;create the enforcer object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPENFORCER,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #new_course + movi #turn_time,a9 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#main_loop + SLEEPK 1 + dec a9 + jrnz #no_turn + + + ;picket phase + ;two cases: we're on picket duty, or we're not. + move @picket_duty,a14,L + cmp a14,a8 + jreq #on_picket + + ;we're not on picket duty + ;if we're the only enforcer, quit now. + move @num_enforcers,a14,W + cmpi 1,a14 + jreq #picket_done + + ;there are multiple enforcers. If there is no picket, see if we + ; take the job. If there is, quit. + move @picket_duty,a14,L + jrnz #picket_done + + ;there is no picket. + movi #picket_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;we're going to take picket duty + move a8,@picket_duty,L + jruc #picket_done + +#on_picket + ;we are on picket duty + ;if we're the only enforcer, see if we leave picket mode. + move @num_enforcers,a14,W + cmpi 1,a14 + jrne #multiple_enforcers + + ;we're the only enforcer + movi #stand_down_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;and we've decided to stand down. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L + jruc #picket_done + +#multiple_enforcers + ;we may abandon our post + movi #abandon_post_prob,a0 + calla RNDRNG0 + move a0,a0 + jrnz #picket_done + + ;yep. we quit. +; clr a0 ;unneccesary. it's already 0 from above. + move a0,@picket_duty,L +; jruc #picket_done + +#picket_done + + ;change course + callr #new_course + movi #turn_time,a9 + +#no_turn + + dec a11 + jrnz #no_shot + + ;fire a spark + PUSHP a10 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE SPARK_PID,spark + PULLP a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + move @num_enforcers,a14,W + dec a14 + move a14,@num_enforcers,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #new_course + + ;two cases. picket or !picket + move @picket_duty,a14,L + cmp a8,a14 + jrne #nc_notpicket + +#nc_picket + ;we're on picket duty. if we're not against a wall, move toward the + ; nearest one. if we are against a wall but not in a corner, move + ; toward the nearest corner. if we're in a corner, sit tight. +; jruc #nc_done + +#nc_notpicket + ;velocity is the distance between enforcer and player / 64 / 2 + move @player_object,a0,L + move *a0(OXVAL),a14,L + move *a8(OXVAL),a1,L + sub a1,a14 + sra 7,a14 + + move a14,*a8(OXVEL),L + + move *a0(OYVAL),a14,L + move *a8(OYVAL),a1,L + sub a1,a14 + sra 7,a14 + move a14,*a8(OYVEL),L + +#nc_done + rets + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* enforcer collision routines +* + + SUBR enforcer_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADNFORCER_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #enforcer_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* enforcer configuration data +* + +#enforcer_points equ 100 + +#picket_prob equ 4 ;one chance in X of becoming the picket if + ; there are multiple enforcers and none is + ; on the job already. + +#stand_down_prob equ 4 ;one chance in X of leaving picket duty if + ; we're the only enforcer left. + +#abandon_post_prob equ 8 ;one chance in X of leaving picket duty if + ; there are other enforcers around. + +#turn_time equ 150 +#fire_time equ 90 + +#grow_speed equ 6 + +#min_x equ 53 ;enforcer move bounds +#max_x equ 347-9 +#min_y equ 45 +#max_y equ 231-11 + +#grow_script + .long enf_g1 + .long enf_g2 + .long enf_g3 + .long enf_g4 + .long enf_g5 + .long enf_1 + .long 0 +#grow_scriptx + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 +#die_vertx + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 +#die_horzx + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 +#die_diag13x + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 +#die_diag24x + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SPARK SECTION +* + + ;reg use + ; a6 (use) x acc + ; a7 (use) y acc + ; a8 (use) *image + ; a9 (use) anim timer + ; a10 (in) initial X + ; a10 (use) anim pointer + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP spark + + ;create a spark object + move a10,a0 + move a11,a1 + + movi #script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSPARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + ;and then add a little 'spin' by giving them some acceleration + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a6 + movi #high_acc*2,a0 + calla RNDRNG0 + subi #high_acc,a0 + move a0,a7 + + movi #anim_time,a9 + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + ;apply accelerations + move *a8(OXVEL),a14,L + add a6,a14 + move a14,*a8(OXVEL),L + + move *a8(OYVEL),a14,L + add a7,a14 + move a14,*a8(OYVEL),L + + dec a9 + jrnz #no_anim + + move *a10+,a0,L + jrnz #no_wrap + movi #script,a10 + move *a10+,a0,L +#no_wrap + calla civanic + movi #anim_time,a9 + +#no_anim + dec a11 + jrz #expire + jruc #loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + clr a6 + move a6,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + clr a7 + move a7,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* spark collision routines +* + + SUBR spark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSPARK_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* spark configuration data +* + +#life_time equ 180 ;how long they last +#anim_time equ 3 ;frame rate + +#high_acc equ 00000200h ;top acceleration + +#min_x equ 53 ;spark move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + +#script + .long spark_1 + .long spark_2 + .long spark_3 + .long spark_4 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* QUARK SECTION +* + + ;reg use + ; a0 - (in) # of quarks + + SUBRP make_quarks + + move a0,a0 + jrz #done + +#another_quark + PUSHP a0 + +#get_pos + ;assign a random starting position + movi #max_x-#min_x,a0 + calla RNDRNG0 + move a0,a9 + movi #max_y-#min_y,a0 + calla RNDRNG0 + move a0,a10 + + addi #min_x,a9 + addi #min_y,a10 + + cmpi #mid_x1,a9 + jrle #place_quark + cmpi #mid_x2,a9 + jrge #place_quark + cmpi #mid_y1,a10 + jrle #place_quark + cmpi #mid_y2,a10 + jrge #place_quark + jruc #get_pos + +#place_quark + CREATE QUARK_PID,quark + PULLP a0 + dsj a0,#another_quark + +#done + rets + + +#mid_x1 equ 200-60 ;quark start inner boundaries +#mid_x2 equ 200+60 +#mid_y1 equ 138-60 +#mid_y2 equ 138+60 + + +******************************************************************************* +* +* quark process +* + + STRUCTPD + WORD #OCHILDREN ;UHW # of children left to spawn + WORD #OSTAGE ;UHW stage in life cycle + + ;reg use + ; a7 (use) event timer (related to #OSTAGE) + ; a8 (use) * object + ; a9 (in) x pos + ; a9 (use) anim counter + ;a10 (in) y pos + ;a10 (use) frame pointer + ;a11 (use) time until next vel change + + SUBRP quark + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the quark object + move a9,a0 ;x pos + sll 16,a0 + move a10,a1 ;y pos + sll 16,a1 + movi #standard_script,a10 + move *a10+,a2,L ;img + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPQUARK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;initialize anim counter + movi #anim_speed,a9 + + ;set initial velocities and accelerations + callr #set_v + + ;initialize life cycle and event timer + movi #STAGE_YOUTH,a14 + move a14,*a13(#OSTAGE),W + movi #youth_time,a7 + +#loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_anim + + ;advance the frame + move *a10+,a0,L + jrnz #newframe + + ;reset script. depends on the stage + move *a13(#OSTAGE),a14,W + cmpi #STAGE_PARENT,a14 + jreq #set_parent_script + movi #standard_script,a10 + jruc #script_set +#set_parent_script + movi #parent_script,a10 + +#script_set + move *a10+,a0,L + +#newframe + calla civanic + + ;reset the counter + movi #anim_speed,a9 + +#no_anim + ;bounds check + callr #in_bounds + + ;adjust vel if it's time + dec a11 + jrnz #no_v_change + callr #set_v + +#no_v_change + + ;do event? + dec a7 + jrnz #no_event + + ;event. depends on the stage in the life cycle + move *a13(#OSTAGE),a14 + cmpi #STAGE_YOUTH,a14 + jreq #youth_event + cmpi #STAGE_PARENT,a14 + jreq #parent_event + ;default + jruc #dotage_event + +#youth_event + ;switch to middle age + movi #STAGE_PARENT,a14 + move a14,*a13(#OSTAGE),W + + ;set the number of kids to be spawned + movi #max_kids-#min_kids,a0 + calla RNDRNG0 + addi #min_kids,a0 + move a0,*a13(#OCHILDREN),W + + ;set the spawn timer + movi #spawn_time,a7 + jruc #no_event + +#parent_event + ;spawn a brat + PUSHP a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + CREATE TANK_PID,tank + PULLP a10,a11 + + ;decrement the kid count + move *a13(#OCHILDREN),a14,W + dec a14 + jrz #barren + move a14,*a13(#OCHILDREN),W + movi #spawn_time,a7 + jruc #no_event + +#barren + ;that was the last kid. age + movi #STAGE_DOTAGE,a14 + move a14,*a13(#OSTAGE),W + movi #old_age_time,a7 + jruc #no_event + +#dotage_event + ;nothing fancy. just die. + jruc #die_peacefully + +#no_event + jruc #loop + + +#been_shot + ;crud. we've been shot + +#die_peacefully + + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a11 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a1,W + movi #min_x,a0 + move *a8(ODXOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #x_adjust + + move *a8(OSIZEX),a0,W + neg a0 + move *a8(ODXOFF),a14,W + add a14,a0 + addi #max_x,a0 + cmp a0,a1 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a1,W + movi #min_y,a0 + move *a8(ODYOFF),a14,W + add a14,a0 + cmp a0,a1 + jrlt #y_adjust + + move *a8(OSIZEY),a0,W + neg a0 + move *a8(ODYOFF),a14,W + add a14,a0 + addi #max_y,a0 + cmp a0,a1 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* quark collision routines +* + + SUBR quark_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADQUARK_PID,a1 + movi #been_shot,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* quark configuration data +* + +#anim_speed equ 3 + +#v_change_time equ 600 ;time between random course changes + +#youth_time equ 90 ;time before we have kids +#spawn_time equ 90 ;time between kids +#old_age_time equ 120 ;time between last kid and natural death + +#min_kids equ 3 ;lower limit on spawned tanks +#max_kids equ 7 ;upper limit + +#high_v equ 0001C000h + +#min_x equ 53 ;quark move bounds +#max_x equ 347-0 +#min_y equ 45 +#max_y equ 231-0 + +;life cycle stages +#STAGE_YOUTH equ 0000h +#STAGE_PARENT equ 0001h +#STAGE_DOTAGE equ 0002h + +#standard_script + .long quark_1 + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long 0 + +#parent_script + .long quark_1 + .long quark_2 + .long quark_3 + .long quark_4 + .long quark_5 + .long quark_6 + .long quark_7 + .long quark_8 + .long 0 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* TANK SECTION +* + + STRUCTPD + WORD #OSHOTS ;UHW shots left to be fired + + ;reg use + ; a7 (use) anim timer + ; a8 (use) *img + ; a9 (use) next move timer (move/fire phase) + ; a9 (use) frame pointer (death phase) + ; a10 (in) initial X + ; a10 (use) frame pointer (grow + move/fire phases) + ; a11 (in) initial Y + ; a11 (use) next shot timer (move/fire phase) + + SUBRP tank + + ;increment the badguy count + move @live_badguys,a14,W + inc a14 + move a14,@live_badguys,W + + ;create the tank object + move a10,a0 + move a11,a1 + movi #grow_script,a10 + move *a10+,a2,L + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPTANK,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;grow phase + +#grow_loop + SLEEPK #grow_speed + move *a10+,a0,L + jrz #mf_phase + calla civanic + jruc #grow_loop + +#mf_phase + ;begin move/fire phase. set initial course + callr #set_v + movi #anim_time,a7 + movi #right_script,a10 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + movi #num_shots,a14 + move a14,*a13(#OSHOTS),W + +#main_loop + PUSHP a7 + SLEEPK 1 + PULLP a7 + dec a9 + jrnz #no_turn + + ;change course + callr #set_v + +#no_turn + + dec a11 + jrnz #no_shot + + move *a13(#OSHOTS),a14,W + jrz #no_shot + + ;fire a shell + PUSHP a7,a10,a11 + move *a8(OXVAL),a10,L + move *a8(OYVAL),a11,L + create SHELL_PID,tank_shell + PULLP a7,a10,a11 + movi #fire_time/2,a0 + calla RNDRNG0 + addi #fire_time*3/4,a0 + move a0,a11 + +#no_shot + + ;bounds check + callr #in_bounds + + ;animate? + dec a7 + jrnz #no_anim + move *a10+,a0,L + jrnz #no_wrap + movi #right_script,a10 + move *a10+,a0,L + +#no_wrap + calla civanic + movi #anim_time,a7 + +#no_anim + jruc #main_loop + +#die + ;decrement the badguy count + move @live_badguys,a14,W + dec a14 + move a14,@live_badguys,W + + ;zero our velocity + clr a14 + move a14,*a8(OXVEL),L + move a14,*a8(OYVEL),L + + ;set up the animation +#dieloop + move *a9+,a0,L + jrz #dead_n_buried + calla civanic + sleepk #death_speed + jruc #dieloop + +#dead_n_buried + calla DELOBJA8 + + DIE + + + SUBRP #set_v + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_x + + subi #high_v,a0 + +#positive_x + move a0,*a8(OXVEL),L + + movi #high_v,a0 + calla RNDRNG0 + cmpi #high_v/2,a0 + jrgt #positive_y + + subi #high_v,a0 + +#positive_y + move a0,*a8(OYVEL),L + + movi #v_change_time/2,a0 + calla RNDRNG0 + addi #v_change_time/2,a0 + move a0,a9 + + rets + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14,W + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* tank collision routines +* + + SUBR tank_die + ;hit by player gunfire + PUSH a1,a7 + + ;jeepers. we're dead. + movi CLSDEAD,a14 + move a14,*a8(OID),W + + move *a0(OXVEL),a14,L + jrz #vert_bullet + move *a0(OYVEL),a1,L + jrz #horz_bullet + + add a1,a14 + jrz #diag_13 + jruc #diag_24 + +#horz_bullet + movi #die_vert,a9 + jruc #death_set +#vert_bullet + movi #die_horz,a9 + jruc #death_set +#diag_13 + movi #die_diag24,a9 + jruc #death_set +#diag_24 + movi #die_diag13,a9 + jruc #death_set + +#death_set + move *a8(OPLINK),a0,L + movi DEADTANK_PID,a1 + movi #die,a7 + move *a0(PA10),a10,L + calla XFERPROC + + movi #tank_points,a0 + callr score_points + + PULL a1,a7 + rets + + +****************************************************************************** +* +* tank configuration data +* + +#tank_points equ 200 + +#num_shots equ 21 + +#v_change_time equ 250 +#fire_time equ 90 + +#high_v equ 00010000h + +#grow_speed equ 6 +#anim_time equ 2 + +#min_x equ 53 ;tank move bounds +#max_x equ 347-13 +#min_y equ 45 +#max_y equ 231-16 + +#grow_script + .long tank_g1 + .long tank_g2 + .long tank_g3 + .long tank_g4 + .long tank_1 + .long 0 + +#right_script + .long tank_1 + .long tank_2 + .long tank_3 + .long tank_4 + .long 0 + +#die_vert + .long enf_xv1 + .long enf_xv2 + .long enf_xv3 + .long enf_xv4 + .long enf_xv5 + .long 0 + +#die_horz + .long enf_xh1 + .long enf_xh2 + .long enf_xh3 + .long enf_xh4 + .long 0 + +#die_diag13 + .long enf_xf1 + .long enf_xf2 + .long enf_xf3 + .long enf_xf4 + .long 0 + +#die_diag24 + .long enf_xb1 + .long enf_xb2 + .long enf_xb3 + .long enf_xb4 + .long 0 + +#death_speed equ 3 ;death seq anim speed + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* SHELL SECTION +* + + ;reg use + ; a8 (use) *image + ; a10 (in) initial X + ; a11 (in) initial Y + ; a11 (use) life timer + + SUBRP tank_shell + + ;create a shell object + move a10,a0 + move a11,a1 + movi shell,a2 + clr a3 + movi DMAWNZ,a4 + movi CLSENMY|TYPSHELL,a5 + clr a6 + clr a7 + calla BEGINOBJW + + ;set the initial velocity. + move @player_object,a0,L + move *a0(OXVAL),a1,L + move *a8(OXVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OXVEL),L + + move *a0(OYVAL),a1,L + move *a8(OYVAL),a2,L + sub a2,a1 + sra 5,a1 + move a1,*a8(OYVEL),L + + movi #life_time,a11 + +#loop + PUSHP a6,a7 + SLEEPK 1 + PULLP a6,a7 + + ;bounds check + callr #in_bounds + + dsj a11,#loop + +#expire + calla DELOBJA8 + + DIE + + + SUBRP #in_bounds + + move *a8(OXPOS),a14,W + movi #min_x,a0 + cmp a0,a14 + jrlt #x_adjust + + movi #max_x,a0 + cmp a0,a14 + jrgt #x_adjust + jruc #y_check + +#x_adjust + move a0,*a8(OXPOS),W + move *a8(OXVEL),a0,L + neg a0 + move a0,*a8(OXVEL),L + +#y_check + move *a8(OYPOS),a14 + movi #min_y,a0 + cmp a0,a14 + jrlt #y_adjust + + movi #max_y,a0 + cmp a0,a14 + jrgt #y_adjust + jruc #done_check + +#y_adjust + move a0,*a8(OYPOS),W + move *a8(OYVEL),a0,L + neg a0 + move a0,*a8(OYVEL),L + +#done_check + rets + + +****************************************************************************** +* +* shell collision routines +* + + SUBR shell_die + PUSH a1,a7 + + movi CLSDEAD,a14 + move a14,*a8(OID),W + move *a8(OPLINK),a0,L + movi DEADSHELL_PID,a1 + movi #expire,a7 + calla XFERPROC + + PULL a1,a7 + rets + + +****************************************************************************** +* +* shell configuration data +* + +#life_time equ 240 ;how long they last + +#min_x equ 53 ;shell move bounds +#max_x equ 347-7 +#min_y equ 45 +#max_y equ 231-7 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* color cycling processes +* + + SUBRP robo_pal_cycles + + ;laser flash cycle + movi [0Ah,1],a8 ;cycle color A + movi robo_p,a9 ;pal name + movi COLTAB_LFLASH,a10 ;use the LFLASH table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;rgb cycle + movi [0Bh,1],a8 ;cycle color B + movi robo_p,a9 ;pal name + movi COLTAB_RGB,a10 ;use the RGB table + movk 8,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;decay cycle + movi [0Ch,1],a8 ;cycle color C + movi robo_p,a9 ;pal name + movi COLTAB_DECAY,a10 ;use the DECAY table + movk 2,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;laser cycle + movi [0Dh,1],a8 ;cycle color D + movi robo_p,a9 ;pal name + movi COLTAB_LASER,a10 ;use the LASER table + movk 20,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;blue-purple-red cycle + movi [0Eh,1],a8 ;cycle color E + movi robo_p,a9 ;pal name + movi COLTAB_BLUPURRED,a10 ;use the BPR table + movk 1,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + ;red-gold cycle + movi [0Fh,1],a8 ;cycle color F + movi robo_p,a9 ;pal name + movi COLTAB_REDGOLD,a10 ;use the RED-GOLD table + movk 10,a11 ;cycle speed + CREATE CYCPID,CYCLE_TABLE + + rets + + +COLTAB_LFLASH + .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .word -1 + +; .word 7C00h,7FFFh,7FFFh,03E0h,7FFFh,7FFFh,001Fh,7FFFh,7FFFh + +COLTAB_RGB + .WORD 07C00H,001FH,77A0h,741Ah + .word -1 + +; .word 7C00h,03E0h,001Fh + +COLTAB_DECAY + .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H + .word -1 + +; .word 7FFFh,6F7Bh,5EF7h,4E73h,3DEFh,2D6Bh,1CE7h,0C63h,0000h + +COLTAB_LASER + .word 7C1Fh,7FFFh,7F00h + .word -1 + +COLTAB_BLUPURRED + .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH +; .word 001Fh,7C1Fh,7C00h + .word -1 + +COLTAB_REDGOLD + .word 7C00h,7F00h + .word -1 + + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* score stuff +* + + ;reg use + ; a11 score + + SUBRP score + + ;initialize score + move @robotron_score,a11,L + callr #print_score + +#loop + SLEEPK 1 + move @robotron_score,a14,L + cmp a11,a14 + jrne #score_change + jruc #loop + +#score_change + move a14,a11 + callr #zorch_score + callr #print_score + jruc #loop + + DIE + + + SUBRP #zorch_score + movi TYPTEXT|SUBSCOR,a0 + calla obj_del1c + + rets + + + SUBRP #print_score + + movi #score_setup,a2 + calla setup_message + movi TYPTEXT|SUBSCOR,a14 + move a14,@mess_objid + move @robotron_score,a0,L + movi #max_score,a1 + calla dec_to_asc + calla copy_string + calla print_string_R + + rets + + +#score_setup + JAM_STR robotron_ascii,3,1,#score_xpos,#score_ypos,robo_p,0 + .even + +#max_score .equ 9999999 ;that's all dec_to_asc can handle + +****************************************************************************** +* adds to score +* >a0 amount to add + + SUBRP score_points + + move @robotron_score,a14,L + add a0,a14 + move a14,@robotron_score,L + rets + + +#score_ypos .equ 36 +#score_xpos .equ 130 + +#***************************************************************************** +****************************************************************************** +****************************************************************************** +* +* miscellaneous functions / processes +* + +****************************************************************************** +* Draws the frame +* >a0=color value +* + + SUBRP draw_frame + + + move a0,a9 + sla 8,a9 + or a0,a9 + + movi robo_p,a0 + calla pal_getf + move a0,a10 + + movi #frame_data,a11 + +#loop + move *a11+,a0,L + jrz #done + move *a11+,a1,L + movi #frame_image,a2 + movi 100,a3 ;z pos + movi DMACAL,a4 ;DMA flags + movi CLSDEAD,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + move a8,a0 + calla fg2bg + + move *a11+,a14,W + move a14,*a8(OSIZEX),W + move *a11+,a14,W + move a14,*a8(OSIZEY),W + + move a9,*a8(OCONST),W + move a10,*a8(OPAL),W + + jruc #loop +#done + rets + + +#frame_image equ man_d1 + +#frame_data + .long [53,0],[43,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [53,0],[231,0] ;position X,Y + .word 294,2 ;size X,Y + + .long [50,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long [347,0],[43,0] ;position X,Y + .word 3,190 ;size X,Y + + .long 0 + +#frame_datax + + +#***************************************************************************** +* Draws the wave indicator +* + + SUBRP wave_count + + ;wave text + movi [#wave_x,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + movi wave_text,a2 ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;ones digit +; move @robo_wave,a2,W +; addi HEXTODEC+0010h,a2 ;extra 10 cuz we count from 0 +; move *a2,a2,W +; andi 00FFh,a2 + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + andi 0Fh,a2 + X32 a2 + addi #wave_font,a2 + + movi [#wave_onesx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + + ;tens digit + move @robo_wave,a0,W + sra 4,a0 + inc a0 + calla BINBCD + move a0,a2 + srl 4,a2 + andi 0Fh,a2 + jrz #done + X32 a2 + addi #wave_font,a2 + movi [#wave_tensx,0],a0 ;x pos + movi [#wave_y,0],a1 ;y pos + move *a2,a2,L ;* image + clr a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + +#done + rets + +#wave_y .equ 234 +#wave_x .equ 198 +#wave_tensx .equ 184 +#wave_onesx .equ 188 + +#wave_font + .long rsmall_0 + .long rsmall_1 + .long rsmall_2 + .long rsmall_3 + .long rsmall_4 + .long rsmall_5 + .long rsmall_6 + .long rsmall_7 + .long rsmall_8 + .long rsmall_9 +#wave_fontx + +#***************************************************************************** +* Check to see if an object is completely on the playfield +* a8=OBJ +* >a0=walls hit (bit 0=top, 1=right, 2=bottom, 3=left) +* >a2=degree of overlap (in pixels) +* Trashes scratch + + SUBRP bounds_check + PUSH a1,a3 + clr a0 + clr a2 + clr a3 + + ;check for hit top + move *a8(OYPOS),a1 + move *a8(ODYOFF),a14 + sub a14,a1 + cmpi #low_y,a1 + jrgt #not_high + movi #low_y,a2 + sub a1,a2 + ori M_HIT_TOP,a0 + jruc #not_low ;assume won't be both high and low + +#not_high + ;check for hit bottom + move *a8(ODYOFF),a14 ;subtract the offset AGAIN because + sub a14,a1 ; we assume the anim point is there + move *a8(OSIZEY),a14 ; to center the object. + add a14,a1 + cmpi #high_y,a1 + jrlt #not_low + move a1,a2 + subi #high_y,a2 + ori M_HIT_BOTTOM,a0 + +#not_low + ;check for hit left + move *a8(OXPOS),a1 + move *a8(ODXOFF),a14 + sub a14,a1 + cmpi #low_x,a1 + jrgt #not_left + movi #low_x,a3 + sub a1,a3 + ori M_HIT_LEFT,a0 + jruc #done ;assume won't be both right and left + +#not_left + move *a8(ODXOFF),a14 + sub a14,a1 + move *a8(OSIZEX),a14 + add a14,a1 + cmpi #high_x,a1 + jrlt #done + move a1,a3 + subi #high_x,a3 + ori M_HIT_RIGHT,a0 + +#done + ;a2 is y overlap, a3 is x overlap. a2 should be greatest of the two. + cmp a2,a3 + jrn #retval_set + move a3,a2 +#retval_set + PULL a1,a3 + rets + + +;boundaries +#low_x equ 53 +#high_x equ 346 +#low_y equ 45 +#high_y equ 230 + +;ret values +B_HIT_TOP equ 0 +B_HIT_BOTTOM equ 2 +B_HIT_LEFT equ 3 +B_HIT_RIGHT equ 1 + +M_HIT_TOP equ 0001h +M_HIT_BOTTOM equ 0004h +M_HIT_LEFT equ 0008h +M_HIT_RIGHT equ 0002h + + +#***************************************************************************** +* If ever both start buttons are down, this proc sets the robo_done flag +* and dies. +* + + SUBRP watch_both_starts + +#loop + SLEEPK 4 ;no need to check EVERY frame + clr a0 + calla get_start_cur + jrz #loop + movk 1,a0 + calla get_start_cur + jrz #loop + + ;both starts are down. + movk 1,a0 + move a0,@starts_down + + DIE + +#***************************************************************************** +* Watches for wave advance/back up key combo. +* + + SUBRP wave_mover + +#loop + SLEEPK 4 + calla get_all_buttons_cur + jrz #loop + + cmpi 1,a0 + jreq #back + cmpi 2,a0 + jreq #fwd + jruc #loop + +#back + move a0,@backward + jruc #done +#fwd + move a0,@forward + +#done + DIE + + + .if DEBUG + +#***************************************************************************** +* Makes bog meters +* + + SUBRP bog_o_meter + + movi robo_p,a0 + calla pal_getf + move a0,a9 + + ;create the background + movi [360,0],a0 + movi [192,0],a1 + movi man_d1,a2 + clr a3 + movi DMACAL|M_FLIPV,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0707h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + movi 128,a0 + move a0,*a8(OSIZEY) + move a8,a10 + + ;create the foreground + movi [360,0],a0 + movi [65,0],a1 + movi man_d1,a2 + movi 1,a3 + movi DMACAL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJW + + move a9,*a8(OPAL) + movi 0808h,a14 + move a14,*a8(OCONST) + + movi 8,a0 + move a0,*a8(OSIZEX) + + movi #scale,a9 + +#loop + SLEEPK 2 + move @CPULEFT,a1 + jrnz #nobog + + ;BOG!! + nop +#nobog + mpyu a9,a1 + srl 16,a1 + move a1,*a8(OSIZEY) + cmpi 10h,a1 + jrle #red + + movi 0707h,a0 + move a0,*a10(OCONST) + jruc #loop +#red + movi 0101h,a0 + move a0,*a10(OCONST) + jruc #loop + + DIE + +#scale equ 800000h/03DCh + + .endif + +#***************************************************************************** + +robotron_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,rfont_exc,0,0,0,0,0,0 ;$20 SP! " # $ % & ' + .long rfont_lparens,rfont_rparens,0,0,rfont_comma,0,rfont_period,rfont_fslash ;$28 ( ) * + , - . / + .long rfont_0,rfont_1,rfont_2,rfont_3,rfont_4,rfont_5,rfont_6,rfont_7 ;$30 0 1 2 3 4 5 6 7 + .long rfont_8,rfont_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$40 @ A B C D E F G + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$48 H I J K L M N O + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$50 P Q R S T U V W + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,rfont_a,rfont_b,rfont_c,rfont_d,rfont_e,rfont_f,rfont_g ;$60 ` a b c d e f g + .long rfont_h,rfont_i,rfont_j,rfont_k,rfont_l,rfont_m,rfont_n,rfont_o ;$68 h i j k l m n o + .long rfont_p,rfont_q,rfont_r,rfont_s,rfont_t,rfont_u,rfont_v,rfont_w ;$70 p q r s t u v w + .long rfont_x,rfont_y,rfont_z,0,0,0,0,0 ;$78 x y z { | } ~ + +#***************************************************************************** +* +* Sound section +* >a0 = snd call + +RS_GRUNT .equ 0 +RS_DIE .equ 1 +RS_RESCUE .equ 2 +RS_SHOOT .equ 3 +RS_HIT .equ 4 + +sp_grunt .equ 1<<8 +sp_shoot .equ 2<<8 +sp_hit .equ 3<<8 +sp_rescue .equ 4<<8 +sp_die .equ 5<<8 + +robosnd_tbl + ; duration, call# + .word sp_grunt|6,96 ;0 = grunt footstep + .word sp_die|96,98 ;1 = die + .word sp_rescue|39,99 ;2 = rescue + .word sp_shoot|17,102 ;3 = shoot + .word sp_hit|23,100 ;4 = hit +robosnd_end + + .bss rs_snd,16 ;current sound call (0-3) + .bss rs_time,32 ;timeout on current call (long)PCNT + .bss rs_pri,16 ;priority on current call + .bss last_grunt_snd,32 ;PCNT of last grunt footstep + + + SUBRP robo_sound_init + + clr a14 + move a14,@rs_snd + move a14,@rs_time,L + move a14,@last_grunt_snd,L + rets + + + SUBRP robo_sound + + PUSH a2,a3,a4 + + ;reggies: + ;a0 = call index + ;a1 = priority + ;a2 = duration + ;a3 = call # + + ;decode table index + move a0,a14 + X32 a14 + addi robosnd_tbl,a14 + move *a14,a1,W + srl 8,a1 + move *a14+,a2,W + andi 0FFh,a2 + move *a14,a3,W + + ;check old duration - if there's nothing going on, do the sound. + move @rs_time,a4 + move @PCNT,a14,L + cmp a4,a14 + jrgt #dosnd + + ;old sound still going. check for an override + TEST a0 + jrnz #ng + move @rs_snd,a14 + jrz #grxgr ;special grunt-overriding-grunt case + +#ng move @rs_pri,a14 + cmp a14,a1 + jrge #dosnd + jruc #done + +#grxgr ;do new call if old one has 3 or fewer ticks to live + move @rs_time,a14,L + move @PCNT,a4,L + sub a4,a14 + cmpi 3,a4 + jrle #dosnd + jruc #done + +#dosnd calla SNDSND + move a0,@rs_snd + move @PCNT,a14,L + add a2,a14 + move a14,@rs_time,L + move a1,@rs_pri + +#done PULL a2,a3,a4 + rets + + +****************************************************************************** + + .end + diff --git a/SRC/SCORE.ASM b/SRC/SCORE.ASM new file mode 100644 index 0000000..e6ce46a --- /dev/null +++ b/SRC/SCORE.ASM @@ -0,0 +1,4811 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell/Jeff Johnson/Dan Thomspon +* Initiated: 7/17/90 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 9/25/95 +************************************************************** + .file "score.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "imgtbl.glo" + + .include "leds.tbl" + .include "city.tbl" + .include "arrow.tbl" + .include "arrow.glo" + + .include "credturb.glo" + .include "credit.tbl" + .include "hotspot.glo" + + .include "powertxt.tbl" + .include "powertxt.glo" + + .asg 0,SEQT + .include "plyr.equ" + + +;sounds + .ref cntdown_snd,snd_play1 + .ref horn_snd + .ref powrup_awrd1,powrup_awrd2 + .ref powrup_awrd3,powrup_awrd4 + .ref alert_snd,whitsle_snd + .ref showtm,tick_snd +;DJT Start + .ref tfire_tcksnd,tfire_outsnd +;DJT End + .ref warn_snd,minute_sp,win_snd + .ref tuneq1_snd + .ref tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + +;symbols externally defined + + .ref print_string2b,kern_chars,mess_justify,mess_cursx,mess_cursy + .ref mess_cursx2 + .ref crplate_ptr + .ref RNDRNG0 +; .ref lighten1 +; .ref lighten2 +; .ref lighten3 +; .ref lighten4 +; .ref lighten5 +; .ref lighten6 +; .ref lighten7 + .ref CYCLE_TABLE,bast18_ascii + .ref clear_secret_powerup_tmode + .ref HANGF_R_P + + .ref pup_nodrift + .ref pup_hypspeed + .ref pup_baby,pup_strongmen,pup_bighead + .ref pup_hugehead + .ref pup_maxpower,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_trbstealth + .ref pup_goaltend,pup_trbinfinite + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + + .ref get_but_val_down + .ref get_start_cur + .ref special_heads + .ref plyr_onfire + .ref qtr_purchased,idiot_box + .ref update_shoes + .ref flash_bigtxt + .ref setup_message,print_string_C2,print_string + .ref copy_string,print_string_C + .ref dec_to_asc + + .ref bast8_ascii,bast8t_ascii + .ref hangfnt38_ascii + + .ref mess_line_spacing + .ref TWOPLAYERS + .ref mess_objid + + .ref inc_player_stat + .ref assist_plyr + .ref blink_plyr + .ref msg_ram + .ref get_but_val_cur + .ref start_animate + .ref plyr_endofqrtr,WFLG + .ref ballgoaltcnt + .ref ballflash + .ref PALRAM,PCNT,pal_clean + .ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS + .ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF + .ref init_t1a,init_t2a,init_t3a,init_t4a + .ref timertcnt,prt_status + .ref names,name_flop,name_cnt + .ref plyrobj_t,PSTATUS2 + .ref anipt_getsclxy + .ref CR_CONTP,inbound + .ref HALT + .ref OWINDOW,RD15FONT,AUD,WNDWON +;DJT Start + .ref CWINDOW,LOWZ +;DJT End + .ref HEXTOASC,WIPEOUT + .ref STRCNRMO + .ref plyrproc_t,pal_getf + .ref team1,team2 + .ref gndpos_t + .ref plyr_takeoutball3 + .ref ballpnumshot,ballpnum + .ref ballobj_p + .ref get_all_buttons_down + .ref get_all_starts_down + .ref AUD1 + .ref brush20_ascii,brush50_ascii + .ref shot_clock_speech + .ref sht_ball_sp,ot_alert_snd + .ref start_crowd_noise + .ref tm_fire_tune + +;symbols defined in this file + + .def LED_00,LED_0,last_score,tvpanelon,LED_MAX,QUARTR01,SHOTPER + .def sclockx + +;uninitialized ram definitions + + +; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr + BSSX conttimers,16*4 ;Continue timer value. 4 players + .bss shotram,3*32 + BSSX shotimer,32 + .bss temp,16 + BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits + BSSX clock_speed,16 + BSSX gmqrtr,16 ;0-5 4=overtime,5=final score + .bss bclok_imgs,32*4 ;images for big clock at botm of scrn + .bss clock_imgs,32*2 ;images for main clock at top of scrn + .bss score_imgs,32*2 ;*Imgs for score table score (Must follow^) + BSSX scores,16*2 ;scores for both teams + .bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr + + .bss msg_flop,16 ;Flop message variable 0 or 1 + BSSX BTIME,16 + BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn + .bss flsh_ptrs,6*32 ;Bigscr imgs for red flash + .bss last_score,32 ;#scores for red flash + BSSX clock_active,16 ;0=clock tick down, 1=hold clock + BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr + BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on + BSSX _2plyr_competitive,16 ;1=no stay on machine, 0=stay on + .bss CMOS_clock_speed,16 ;Ram copy of CMOS adjustment + +; BSSX p1taps,16 ;Keep in order +; BSSX p2taps,16 +; BSSX p3taps,16 +; BSSX p4taps,16 + + .if DEBUG | DUNKTST + BSSX CLOCK_OFF,16 ;Debug: 0=On, 1=Off + .endif + + .text + +************************** +;game timer fractions + +timer_table +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h +; .word 0e000h + +; .asg 4f00h,BASETM + .asg 5100h,BASETM + + .word BASETM*70/100 ;1 (slowest) + .word BASETM*85/100 ;2 (slower) + .word BASETM ;3 (default) ;Approx 10 minutes + .word BASETM*115/100 ;4 (faster) + .word BASETM*130/100 ;5 (fastest) + + + .asg 3,FLAME_ANICNT + +tfire_timer_tbl + .word 130*TSEC/FLAME_ANICNT/100 + .word 115*TSEC/FLAME_ANICNT/100 + .word TSEC/FLAME_ANICNT + .word 85*TSEC/FLAME_ANICNT/100 + .word 70*TSEC/FLAME_ANICNT/100 + +;---------- + + .asg 151,SCOREMAX ;When to "MAX" score imgs + + +#****************************************************************** +* Player is off screen for too long - put up an arrow pointing him out +* +*a10=0-3 for plyr # + + .asg 0,SCX_L ;40 ;0 + .asg 398,SCX_R ;358 ;398 + .asg 28,SIDEARW_W + + .asg SCX_L+4+40,PON_L + .asg SCX_R-4-40,PON_R + + .asg SCX_L-8+40,POF_L + .asg SCX_R+8-40,POF_R + + .asg SCX_L, ARWLX_L + .asg SCX_R-SIDEARW_W,ARWLX_R + + .asg ARWLX_L+40,ARWIX_L + .asg ARWLX_R-40,ARWIX_R + .asg 52,ARWY_O + + .asg 360,TLX_O + + .asg 2,IDIOT_MSG + .asg 6*50,IDIOT_CNT + + + SUBR plyr_lost + + SLEEPK 2 ;Make sure plyr gets started + + move a10,a11 ;Keep plyr # handy + + sll 5,a10 + move a10,a9 + addi plyrproc_t,a10 + move *a10,a10,L ;Get plyr *proc + addi plyrobj_t,a9 + move *a9,a9,L ;Get plyr *obj + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA),L ;Clr shoe *pal + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a13(PDATA+48) ;turbo replenish ctr + move a8,*a10(plyr_offtime) ;Plyr is on screen! +;Player lost arrow process ptr for arw flash + move a13,*a10(plyr_lost_ptr),L + +#top + SLEEPK 3 + calla update_shoes + SLEEPK 3 + calla update_shoes + +#do_rep + move *a10(plyr_PDATA_p),a0,L ;Deref plyr *proc for *data + + move *a0(used_turbo),a14 + jrle #do_rp + subk 1,a14 + move a14,*a0(used_turbo) + jruc #no_rep +#do_rp +;DJT Start + callr replenish_turbo +;Mike Vinikour wants 7! + movk 8,a1 ;!!! Regular replenish factor + move @PSTATUS,a14 + btst a11,a14 ;Drone or human? + jrnz #do_r ; br=human + movk 1,a2 + xor a11,a2 + btst a2,a14 ;Drone or human teammate? + jrnz #do_r ; br=human + srl 1,a2 + sll 4,a2 + neg a2 + .ref t1ispro + addi t1ispro+16,a2,L ;Chk other team win level + move *a2,a2 + jrn #do_r ; br=novice, not many wins + movk 4,a1 ;!!! Pro replenish factor + jrp #do_r ; br=pro, many wins but not champ yet + movk 1,a1 ;!!! Champ replenish factor +#do_r + move *a13(PDATA+48),a14 ;turbo replenish ctr + addk 1,a14 + cmp a1,a14 ;9 ;Quicken replenish + jrlt #no_rrp + callr replenish_turbo + clr a14 +#no_rrp + move a14,*a13(PDATA+48) ;turbo replenish ctr +;DJT End + +#no_rep + move *a9(OSCALE),a1 ;Get plyr obj screen lft X + cmpi PON_R,a1 + jrge #noton_r + move *a9(OSIZEX),a2 ;Add for plyr obj screen rgt X + add a1,a2 + cmpi PON_L,a2 + jrle #noton_l + + move a8,a8 ;Active off arw? + jrz #top ;br=no + + move a8,a0 ;Kill arw *obj + calla DELOBJ + + clr a8 ;Clr arw *obj + move a8,*a13(PDATA+32) ;Clr off cnt + move a8,*a10(plyr_offtime) ;Plyr is on screen! + + callr arw_on1plyr ;Turn on overhead arw + + jruc #top + +#noton_l + cmpi POF_L,a2 ;All the way off? + jrle #off_l ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_l + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_l ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_l + move a11,a14 ;Other team has it + subk 1,a14 ;Is plyr off wrong side? + jrle #nown_l ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_l + movi ARWIX_L,a0 + move @WORLDTLX+16,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_l + neg a3 + sra 3,a3 + jruc #ps_l +#nn_l + sra 3,a3 + neg a3 +#ps_l + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi lft_lst,a2 ;Off lft side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi lf2_lst,a2 + jruc #off_sc + +#noton_r + cmpi POF_R,a1 ;All the way off? + jrge #off_r ;br=yes + clr a14 + move a14,*a10(plyr_offtime) ;Plyr is on screen! + move a8,a8 ;In neutral zone. Active off arw? + jrz #top ;br=no +#off_r + movk 1,a14 + move a14,*a10(plyr_offtime) ;Plyr is offscreen! + + move @ballpnum,a14 ;>Chk if other team owns ball + jrn #nown_r ;Ball owned? br=no + move *a10(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball + jrnz #nown_r + move a11,a14 ;Other team has it + subk 2,a14 ;Is plyr off wrong side? + jrge #nown_r ;br=no + move a14,*a10(plyr_offscrn) ;Plyr is off, spd him up +#nown_r + movi ARWIX_R,a0 + move @WORLDTLX+16,a14 + addi TLX_O,a14 + move *a9(OXPOS),a3 + sub a14,a3 + jrnn #nn_r + neg a3 + sra 3,a3 + jruc #ps_r +#nn_r + sra 3,a3 + neg a3 +#ps_r + move a8,a8 ;Active off arw? + jrnz #arw_on ;br=yes + + movi rgt_lst,a2 ;Off rgt side + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #off_sc + movi rg2_lst,a2 + +#off_sc + sub a3,a0 + clr a3 + + sll 5,a11 + add a11,a2 + srl 5,a11 + move *a2,a2,L ;Get arw *img + + PUSH a0 + sll 16,a0 + clr a1 + movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 ;Get arw *obj + +; move *a10(plyr_num),a14 +; sll 5,a14 +; .ref player_data +; addi player_data,a14,L +; move *a14,a14,L +; move *a14(PR_PRIVILEGES),a14 +; jrle #nxtt +; btst 0,a14 ;NO TAG ARROW privilege ? +; jrnz #tag_of ;br=yes +;#nxtt +; move @pup_notag,a14 ;>POWER-UP LOGIC +; btst a11,a14 ;Plyr arrow-off bit set? +; jrz #tag_on ;br=no, show arrow +;#tag_of +; move a8,a0 +; calla OBJOFF +;#tag_on + PULL a0 + +#arw_on + sub a3,a0 + + move *a8(OXPOS),a4 + move a4,a14 + sub a0,a14 + abs a14 + subk 2,a14 + jrle #arw_yz + cmp a0,a4 + jrz #arw_yz + jrlt #arw_xinc + + cmpi ARWLX_L,a4 + jrz #arw_yz + subk 1,a4 + jruc #arw_x +#arw_xinc + cmpi ARWLX_R,a4 + jrz #arw_yz + addk 1,a4 +#arw_x + move a4,*a8(OXPOS) +#arw_yz + move *a9(OZPOS),a0 + move a0,*a8(OZPOS) + + subi GZBASE,a0 ;-Base + jrge #zok + clr a0 +#zok + move a0,a14 + sra 1,a0 ;Z/2 + sra 3,a14 ;Z/8 + sub a14,a0 ;=Z/2.667 + addi GND_Y-ARWY_O,a0 + move @WORLDTLY+16,a14 + abs a14 + add a14,a0 + move a0,*a8(OYPOS) + + move @PSTATUS,a14 ;No idiot box if drone + btst a11,a14 + jrz #bot + + move *a13(PDATA+32),a14 ;Not, but is it time yet? + inc a14 + move a14,*a13(PDATA+32) + cmpi IDIOT_CNT,a14 + jrlt #bot + + move @gmqrtr,a14 ;Yes, but no idiot box after 1st qrtr + jrnz #zcnt + + move @inbound,a14 ;Not, but no idiot box if inbounding + jrnn #zcnt + + movk IDIOT_MSG,a0 ;Tell plyr where he is! + move a11,a1 + calla idiot_box +#zcnt + clr a14 + move a14,*a13(PDATA+32) ;Reset off cnt + +#bot + SLEEPK 1 + move @HALT,a14 + jrnz #bot + move @PCNT,a14 ;Bump turbo replenish rate when + andi 3,a14 ; off-screen (every 4th, not 6th) + jrnz #no_rep + jruc #do_rep + + +lft_lst .long arrown1l,arrown2l,arrown3l,arrown4l +lf2_lst .long arrown1l2p,arrown1l2p,arrown2l2p,arrown2l2p + +rgt_lst .long arrown1r,arrown2r,arrown3r,arrown4r +rg2_lst .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* Individual # +* +* a10=plyr proc of whom to stick an arrow on + + SUBR arw_on1plyr + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(plyr_PDATA_p),a0,L ;*PxDATA + move *a0(head_arw_img),a0,L + move *a0(OPLINK),a0,L + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 2*60+15,a11 ;Time for arw to be on +;Carlton hates these arrows... Shorten lifespan. + movi 110,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram + + SUBR stick_number + +;Stick player number on top of player + + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + PUSH a7,a8,a9,a11 + move @GAMSTATE,a0 + subk INAMODE,a0 + jrz #x + + move *a10(head_arw_img),a9,L + move *a9(OPLINK),a0,L + + .if DEBUG + calla process_exist + jrnz #ok + LOCKUP +#ok + .endif + + movi ARWPID,a1 + movi arwon,a7 + move *a0(PA8),a8,L + move *a0(PA9),a9,L +; movi 4*60,a11 ;Time for arw to be on + movi 3*60+15,a11 ;Time for arw to be on + calla XFERPROC + +#x + PULL a7,a8,a9,a11 + rets + + +#****************************************************************** +* +* Turn on a player arrow/# on top of his head +* +* a10=PxDATA ram +* a11=plyr # (0-3) + + SUBR stick_numbers + + movi plyrproc_t,a0 + movi #arwt_t,a2 + move a11,*a13(PDATA+64) ;Save plyr # + + sll 5,a11 + add a11,a0 + add a11,a2 + addi plyrobj_t,a11 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + addi NUMPLYRS*32,a2 +#not2 + move *a0,a0,L + move a0,*a13(PDATA+32),L ;Save plyr *proc + + movi [-100,0],a1 + move *a2,a2,L + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + movi arwid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a0 + calla OBJOFF + + move a8,*a10(head_arw_img),L ;Save arw *obj + + move a8,a9 ;A9=arw *obj + move *a11,a8,L ;A8=plyr *obj to stick to + +; movi 4*60,a11 ;Time for arw to be on + movi 3*60,a11 ;Time for arw to be on + +;-------------------- + +arwon + move @PSTATUS,a0 + move *a13(PDATA+64),a14 + btst a14,a0 ;No arw if plyr is a drone + jrz #arwait ;br=no arw + +;don't turn on ARROW if players' powerup is set + move a14,a1 + sll 5,a14 + .ref player_data + addi player_data,a14,L + move *a14,a14,L + move *a14(PR_PRIVILEGES),a14 + jrle #nxtt + btst 0,a14 ;NO TAG ARROW privilege ? + jrnz #arwtop ;br=yes +#nxtt + move @pup_notag,a0 + btst a1,a0 ;plyrs bit set ? + jrnz #arwtop ;br=yep, dont show arrow + + move a9,a0 + calla OBJON + +#arwtop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 4,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 30,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + subi 35,a2 ;!!! + move a2,*a9(OYPOS) + +#wtlp + SLEEPK 1 + move @HALT,a0 + jrnz #wtlp + dsj a11,#arwtop + + move a9,a0 + calla OBJOFF + +#arwait SLEEP 60 + move a9,a0 + calla OBJOFF + jruc #arwait + +#arwt_t .long arrown1t,arrown2t,arrown3t,arrown4t + .long arrown1t,arrown1t2p,arrown2t2p,arrown4t + + +#****************************************************************** +* +* a10=PxDATA ram + + SUBR stick_cpu + + move @PSTATUS,a0 + btst a11,a0 + janz SUCIDE + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jaz SUCIDE + + move a10,*a13(PDATA),L +; SLEEP 4*60-40 + + move *a13(PROCID),a5 ;get pid for stick img oid + + movi [-65,0],a1 + movi cpu,a2 + clr a3 + movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 + clr a6 + clr a7 + calla BEGINOBJ2 + + move a8,a9 + + sll 5,a11 + addi plyrobj_t,a11 + + move *a11,a8,L ;A8=plyr *obj to stick to + + movi 15*60,a11 ;Time for cpu to be on +#metop +; calla anipt_getsclxy ;co'ed 12/21/95 DJT +; srl 16,a0 + move *a8(OXANI+16),a0 + + move *a8(OXPOS),a2 + add a0,a2 + subk 7,a2 ;!!! + move a2,*a9(OXPOS) + + move *a8(OZPOS),A2 + addk 3,a2 ;!!! + move a2,*a9(OZPOS) + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a0,L + move *a0(OYPOS),A2 + addi 20,a2 ;!!! + move a2,*a9(OYPOS) + + move *a13(PDATA),a0,L ;Drone become human? + move *a0(ply_time),a0 + cmpi 25,a0 + jrlt #mex ;br=no + + move a9,a8 + jauc DELOBJDIE + +#mex SLEEPK 1 + move @HALT,a0 + jrnz #mex + dsj a11,#metop + move a9,a0 + calla DELOBJ + DIE + +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; addk 3,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; sub a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop +; +; +;light_t +; LWW lighten1,1,10 +; LWW lighten2,-2,20 +; LWW lighten3,-5,37 +; LWW lighten4,2,44 +; LWW lighten5,4,56 +; LWW lighten6,4,65 +; LWW lighten7,1,69 +; .long 0 +; +;#****************************************************************** +;* +;* a10=PxDATA ram +; +; SUBR stick_spark2 +; +; movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4 +; move *a13(PROCID),a5 ;get pid for stick img oid +; movi [-65,0],a1 +; movi lighten1,a2 +; clr a3 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a8,a9 +; +; sll 5,a11 +; addi plyrobj_t,a11 +; +; move *a11,a8,L ;player img to stick to +;#metop0 +; move a9,a0 +; movi 400h,a14 +; move a14,*a0(OYPOS) +; calla OBJOFF +; movi light_t,a10 +; movi 4*60,a0 ;4*60,a0 +; calla RNDRNG0 +; addi 30,a0 ;30 +; calla PRCSLP +; move a9,a0 +; calla OBJON +; movk 1,a0 +; move a0,*a13(PDATA) +;#metop +; +; move *a13(PDATA),a0 +; dec a0 +; move a0,*a13(PDATA) +; jrnz #cont +; movk 3,a0 +; move a0,*a13(PDATA) +; +; move *a10+,a0,L +; jrz #metop0 +; SWAP a8,a9 +; move *a8(OFLAGS),a1 +; calla obj_aniq +; SWAP a8,a9 +; move *a10+,a0 +; move a0,*a13(PDATA+16) +; move *a10+,a0 +; move a0,*a13(PDATA+32) +; +;#cont +; +; calla anipt_getsclxy ;GETANIXY +; srl 16,a0 +; +; move *a8(OZPOS),a2 +; addk 3,a2 +; move a2,*a9(OZPOS) +; +; move *a8(OXPOS),a2 +; subk 7,a2 +; add a0,a2 +; move *a13(PDATA+16),a0 +; add a0,a2 +; move a2,*a9(OXPOS) +; +; move *a8(OPLINK),a0,L +; move *a0(plyr_headobj_p),a0,L +; move *a0(OYPOS),a2 +; addi 44h,a2 +; move *a13(PDATA+32),a0 +; sub a0,a2 +; addi 10,a2 +; move a2,*a9(OYPOS) +; +; +;#mex SLEEPK 1 +;; move @HALT,a0 +;; jrnz #mex +; jruc #metop + +#********************************************************************* +* Called from main loop to update credit counters, etc. + + SUBR cr_cntrs_update + + move @cntrs_delay,a0 ;Selection screen delay + jrle #cr1 + dec a0 + move a0,@cntrs_delay +#x rets + +#cr1 + .if IMGVIEW + rets ;Debug - no credit cntdwn + .endif + + move @GAMSTATE,a2 + jrn #x ;In diagnostics? + cmpi INAMODE,a2 + jreq #x + cmpi ININTRO,a2 + jreq #x ;In stats? + subk INPLYRINFO,a2 + jreq #x ;In stats? + + move @name_cnt,a0 + dec a0 + move a0,@name_cnt + jrnz main0 + movi 110,a0 ;Shorter time for player names message + move a0,@name_cnt + + move @GAMSTATE,a0 + subk INGAME,a0 ;If not ingame, don't change messages + jrne main0 + + move @name_flop,a0 + XORK 1,a0 + move a0,@name_flop + jrnz #showpnames + + ;replace names with correct buyin message + movi 210,a0 ;Longer time for buyin message / meter + move a0,@name_cnt + + movi insert,a11 + calla CR_CONTP ;Credits to cont + jrlo #no00 ;No? + movi start,a11 +#no00 + movi insert,a10 + calla CR_STRTP ;Credits to start + jrlo #no1 ;No? + movi start,a10 +#no1 + + movi P1DATA,a9 + clr a3 + movk 4,a4 + + movi LED_P,a0 + calla pal_getf + move a0,a5 + +#msglp + + .ref pleasewt + move @pleasewt,a14 + btst a3,a14 + jrnz #nxta + + + move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players + jrz #not2 + cmpi P1DATA,a9 + jrz #nxt + cmpi P4DATA,a9 + jrz #nxt +#not2 + + + move *a9(ply_messages),a8,L + jrz #nxt + move a10,a0 + move @PSTATUS2,a14 + btst a3,a14 + jrz #no2 ;This player has never been started + move a11,a0 +#no2 + +; jruc #nxta + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + move *a9(ply_meter_imgs),a0,L + calla OBJOFF + move *a9(ply_meter_imgs+32),a0,L + calla OBJOFF +; move *a9(ply_meter_imgs+64),a0,L +; calla OBJOFF + +#nxt + jruc #nxta + +#nxta + addi PDSIZE,a9 + addk 1,a3 + dsj a4,#msglp + + jruc main0 + + +;-------------------- + +#showpnames + +;Try to swap buyin message and turbo meters for player names + + movi BAST_Y_P,a0 ;scorep + calla pal_getf + move a0,a5 + + movk 4,a4 + movi P1DATA,a9 + movi names,a10 + clr a3 + +; Top of loop + +#pnlp + move @pleasewt,a14 ;Skip if "please" + btst a3,a14 + jrnz #nxtpn + + move *a9(ply_messages),a8,L ;Skip & chk if name should be + jrz #noani ; shown if no message (if 0) + + move a8,a0 ;Turn off message obj + calla OBJOFF + + move *a9(ply_meter_imgs),a0,L ;Move down name obj Y + move *a0(OYPOS),a14 + cmpi 5,a14 + jrnz #dip + movi 15,a14 + jruc #dip2 +#dip + movi 18,a14 +#dip2 + move a14,*a0(OYPOS) ;Turn on name obj + calla OBJON + + move @TWOPLAYERS,a0 + jrz #not2p + + cmpi 1,a3 + jrz #not2p + cmpi 2,a3 + jrz #not2p + + move a8,a0 ;Definite drone. Make sure(!) + calla OBJOFF ; message obj is off & go + jruc #inhr ; show drone name +#not2p + movi tocontrol,a0 ;Turn on "to control" in + movi MSGOCTRL,a1 ; message obj & go show plyr + calla obj_aniq_cnoff ; name + jruc #inhr + +#noani + move *a9(ply_time),a1 + subk 23,a1 + jrlt #nxtpn +#inhr + move *a9(ply_meter_imgs),a8,L ;change box to name + move a5,*a8(OPAL) + move *a10,a0,L +;DJT Start + jrn #inhr1 ; br=not college player + move *a8(OIMG),a0,L ;Default college name *img +#inhr1 +;DJT End + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#nxtpn + addi PDSIZE,a9 + addk 1,a3 + addk 32,a10 + dsj a4,#pnlp + +;-------------------- + +main0 move @timertcnt,a3 ;>Update player timers + subk 1,a3 + jrgt mlp120 + +;Could put all this stuff inside the individual players process + + clr a0 + move a0,@msg_ram,L + move a0,@msg_ram+32,L + move a0,@msg_ram+64,L + move a0,@msg_ram+96,L + + movi msg_ram,a9 + movk 4,a3 ;# players + movi P1DATA,a0 +mlp100 + move *a0(ply_time),a1 + jrz mlp103 + cmpi 3500,a1 + jrz mlp103 +; subk 1,a1 + move a1,*a0(ply_time) + jrnz mlp101 + +;somebody just let their timer expire! + +mlp101 +mlp103 addi PDSIZE,a0 + dsj a3,mlp100 + + + move @msg_flop,a0 + XORK 1,a0 + move a0,@msg_flop + jrz mlp105 +;hide meter and turn on insert coin message if timer < 10 + movi insert,a10 + calla CR_CONTP ;Credits to cont + jrlo #no ;No? + movi start,a10 +#no + movi msg_ram,a9 + movk 4,a3 +#lp move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJOFF + + move *a2(ply_meter_imgs+32),a8,L + move a10,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 07h,a0 ;5 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJOFF + + dsj a3,#lp + + jruc mlp110 + + +meters_t + .long 0,TURBO_01b,TURBO_01g,TURBO_01y,TURBO_01r + + +mlp105 + movi msg_ram,a9 + movk 4,a3 +#lp2 move *a9+,a2,L + jrz mlp110 + move *a2(ply_meter_imgs),a0,L + calla OBJON + + move *a2(ply_meter_imgs+32),a8,L + move a3,a0 + sll 5,a0 + addi meters_t,a0 + move *a0,a0,L + +; movi METERg,a0 ;change back to meter + + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + + movk 17,a0 ;11 + move a0,*a8(OYPOS) + +; move *a2(ply_meter_imgs+64),a0,L +; calla OBJON + + dsj a3,#lp2 + +mlp110 +;;;;;;; calla prt_cr_timers <- Did nothing! + +;FIX!!!! +;Grab this rate from CMOS + movi 80,a3 ;Cr-timer rate of decline +mlp120 move a3,@timertcnt + + rets + + +#******************************* +* Show tv score/time panel (Process) + + SUBR score_showtvpanel2 + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + movi 4*TSEC+10,a11 ;12* + move @game_time,a0,L + jrnz scr1 + + + movi 3*TSEC+10+30,a11 + + move @gmqrtr,a0 ;Ran out of time + subk 4,a0 + jrlt scr1 + move @scores,a0 + move @scores+16,a1 + cmp a0,a1 + jreq scr1 + + + + movi 6*TSEC+10+30,a11 + jruc scr1 + + SUBR score_showtvpanel + + move @tvpanelon,a0,L + jrnz #die + + move a13,@tvpanelon,L + + SLEEP 35 ;TSEC*2 + + movi 3*TSEC-40,a11 + + SUBR scr1 +; calla pal_clean + + move a13,@tvpanelon,L + PUSH A11 + move @bclok_imgs,a0,L + calla ISOBJ + jrz tv2 + move *a0(OIMG),a1,L + cmpi clock2,a1 + jrnz tv2 + movk 1,a0 ;=clock already on scrn + jruc tv3 + +tv2 + clr a0 +tv3 callr tv_score ;display big tv look score plate + + PULL A0 + move a11,a0 + calla PRCSLP + + move @game_time,a0,L ;clock expired while panel was up + jrz tv3a + +#tv4 SLEEPK 1 + move @HALT,a0 + jrnz #tv4 + +tv3a movi CLSDEAD|tvid,a0 + calla obj_del1c + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + move @game_time,a0,L ;clock expired while panel was up + jrz tv4 + + movb @game_time+24,a0 + jrz #x + +tv4 movi tvid,a0 ;Delete big clock at botm of scrn + calla KIL1C + movi CLSDEAD|bclockid,a0 + calla obj_del1c + +#x + clr a0 + move a0,@tvpanelon,L + +#die DIE + + +#****************************************************************** +* Redraw scoreboard credits message after a credit is registered. +* Service credit or other! Called at other times also! +* +* Trashes scratch + + + SUBR update_scorebrd + +;If scoreboard is on screen, not in free play, erase old credits digits +;and display new ones. Also tell quarter timer balls not to show up +;for awhile. + +;must be a better check for score board on screen! + + PUSH a8,a11 + + move @GAMSTATE,a0 + subk INGAME,a0 + jrne xo + +; movi 40,a0 +; move a0,@cr_delay + + movi CLSDEAD|creditid,a0 + calla obj_del1c ;Kill credit imgs + callr prt_credits ;Do updated credit imgs + + calla CR_STRTP ;Have credits to start? + movi insert,a10 ;Assume no (C unaffected) + jrlo #no_s ;No if < (if C set) + movi start,a10 ;Yes +#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + movi start,a3 + jrlo #no_c ;No if < (if C set) + move a3,a11 ;Yes + movi insert,a3 +#no_c + +*********************************************************** + +#us_p1 + move @TWOPLAYERS,a0 + jrnz #us_p2 + + move a10,a0 + move @PSTATUS2,a4 + btst 0,a4 + jrz #no_c1 + move a11,a0 ;A continue +#no_c1 + move @P1DATA+ply_messages,a8,L + jrz #no_m1 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m1 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p2 +#no_m1 + move @P1DATA+ply_meter_imgs+32,a8,L + jrz #us_p2 + move *a8(OIMG),a1,L + cmpi TURBO_01b,a1 + jrz #us_p2 + cmp a0,a1 + jrz #us_p2 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +********************************************************** + +#us_p2 + move a10,a0 + move @PSTATUS2,a4 + btst 1,a4 + jrz #no_c2 + move a11,a0 +#no_c2 + move @P2DATA+ply_messages,a8,L + jrz #no_m2 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m2 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p3 +#no_m2 + move @P2DATA+ply_meter_imgs+32,a8,L + jrz #us_p3 + move *a8(OIMG),a1,L + cmpi TURBO_01g,a1 + jrz #us_p3 + cmpi TURBO_01b,a1 + jrz #us_p3 + cmp a0,a1 + jrz #us_p3 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p3 + move a10,a0 + move @PSTATUS2,a4 + btst 2,a4 + jrz #no_c3 + move a11,a0 +#no_c3 + move @P3DATA+ply_messages,a8,L + jrz #no_m3 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz #no_m3 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc #us_p4 +#no_m3 + move @P3DATA+ply_meter_imgs+32,a8,L + jrz #us_p4 + move *a8(OIMG),a1,L + cmpi TURBO_01y,a1 + jrz #us_p4 + cmpi TURBO_01r,a1 + jrz #us_p4 + cmp a0,a1 + jrz #us_p4 ;already correct message + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +*********************************************************** + +#us_p4 + move @TWOPLAYERS,a0 + jrnz xo + + move a10,a0 + move @PSTATUS2,a4 + btst 3,a4 + jrz #no_c4 + move a11,a0 +#no_c4 + move @P4DATA+ply_messages,a8,L + jrz #no_m4 + move *a8(OIMG),a2,L + cmp a3,a2 + jrnz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + jruc xo +#no_m4 + move @P4DATA+ply_meter_imgs+32,a8,L + jrz xo + move *a8(OIMG),a1,L + cmpi TURBO_01r,a1 + jrz xo + cmp a0,a1 + jrz xo + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +xo + PULL a8,a11 + rets + +#**************************************************************** +* Print credits or free play message in top score board +* +* Trashes a0-a7 + + SUBR prt_credits + + PUSH a8,a9 + MOVK ADJFREPL,A0 + CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz freep + + calla CRED_P + sll 5,a0 + addi #creds,a0 + move *a0,a2,L + movi SCOREBRD_X+56,a0 + movk SCOREBRD_Y+2,a1 + jruc prt_cr +freep + movi FREEPLT,a2 + movi SCOREBRD_X,a0 + movi SCOREBRD_Y,a1 +prt_cr + movi SCOREBRD_Z+1,a3 + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|creditid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + PULL a8,a9 + rets + +#creds .long CRED_00,CRED_00+9*16*01,CRED_00+9*16*02,CRED_00+9*16*03,CRED_00+9*16*04 + .long CRED_00+9*16*05,CRED_00+9*16*06,CRED_00+9*16*07,CRED_00+9*16*08,CRED_00+9*16*09 + .long CRED_00+9*16*10,CRED_00+9*16*11,CRED_00+9*16*12,CRED_00+9*16*13,CRED_00+9*16*14 + .long CRED_00+9*16*15,CRED_00+9*16*16,CRED_00+9*16*17,CRED_00+9*16*18,CRED_00+9*16*19 + .long CRED_00+9*16*20,CRED_00+9*16*21,CRED_00+9*16*22,CRED_00+9*16*23,CRED_00+9*16*24 + .long CRED_00+9*16*25,CRED_00+9*16*26,CRED_00+9*16*27,CRED_00+9*16*28,CRED_00+9*16*29 + .long CRED_00+9*16*30,CRED_00+9*16*31,CRED_00+9*16*32,CRED_00+9*16*33,CRED_00+9*16*34 + .long CRED_00+9*16*35,CRED_00+9*16*36,CRED_00+9*16*37,CRED_00+9*16*38,CRED_00+9*16*39 + .long CRED_00+9*16*40,CRED_00+9*16*41,CRED_00+9*16*42,CRED_00+9*16*43,CRED_00+9*16*44 + .long CRED_00+9*16*45,CRED_00+9*16*46,CRED_00+9*16*47,CRED_00+9*16*48,CRED_00+9*16*49 + .long CRED_00+9*16*50,CRED_00+9*16*51,CRED_00+9*16*52,CRED_00+9*16*53,CRED_00+9*16*54 + .long CRED_00+9*16*55,CRED_00+9*16*56,CRED_00+9*16*57,CRED_00+9*16*58,CRED_00+9*16*59 + .long CRED_00+9*16*60,CRED_00+9*16*61,CRED_00+9*16*62,CRED_00+9*16*63,CRED_00+9*16*64 + .long CRED_00+9*16*65,CRED_00+9*16*66,CRED_00+9*16*67,CRED_00+9*16*68,CRED_00+9*16*69 + .long CRED_00+9*16*70,CRED_00+9*16*71,CRED_00+9*16*72,CRED_00+9*16*73,CRED_00+9*16*74 + .long CRED_00+9*16*75,CRED_00+9*16*76,CRED_00+9*16*77,CRED_00+9*16*78,CRED_00+9*16*79 + .long CRED_00+9*16*80,CRED_00+9*16*81,CRED_00+9*16*82,CRED_00+9*16*83,CRED_00+9*16*84 + .long CRED_00+9*16*85,CRED_00+9*16*86,CRED_00+9*16*87,CRED_00+9*16*88,CRED_00+9*16*89 + .long CRED_00+9*16*90,CRED_00+9*16*91,CRED_00+9*16*92,CRED_00+9*16*93,CRED_00+9*16*94 + .long CRED_00+9*16*95,CRED_00+9*16*96,CRED_00+9*16*97,CRED_00+9*16*98,CRED_00+9*16*99 + +#numbs .long font60,font61,font62,font63,font64 + .long font65,font66,font67,font68,font69 + + +**************************************************************** +* Start main game clock + + SUBR clock_strt + + movi ADJSPEED,a0 ;Get game clk speed (1-5) + calla GET_ADJ + move a0,@CMOS_clock_speed + + clr a0 + move a0,@tvpanelon,L + move a0,@ballflash + + callr prt_credits + callr prt_qrtr + + movi clock_imgs,a10 + movi #init_t,a11 ;>Setup status images + jruc #status +#lp + move *a11+,a1 ;Y + move *a11+,a3 ;Z + move *a11+,a2,L ;*IMG + sll 16,a0 + sll 16,a1 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;M_3DQ + movi CLSDEAD|gclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L +; movi gndpos_t+32*16,a1 +; move a1,*a8(ODATA_p),L + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + +;---------- +; Top of clock loop + +#lp1 calla prt_top_clock ;Update clk +#lp1a SLEEPK 1 + move @HALT,a0 + jrnz #lp1a + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a0 ;When testing dunks - PUT IN! + jrnz #lp1a + .endif + + .if IMGVIEW + jruc #lp1a ;Debug - no time clk on + .endif + + move @clock_active,a0 ;Clk stopped (inbounding)? Yes if !0 + jrnz #lp1a + +;We shouldn't do this GET_ADJ during game loop! +;Get at start of game 1 time only! +; movi ADJSPEED,a0 ;Get game clk speed (1-5) +; calla GET_ADJ + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + + sll 4,a0 + addi timer_table-16,a0 + move *a0,a1 + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + addi 200h,a1 ;100h;Yes. Make clk run faster! +#not4 +; movi >ffff,a1 ;Debug - make clk super fast! + + move @clock_speed,a0 ;Add to clk speed frac + add a1,a0 + move a0,@clock_speed + jrnc #lp1a ;Time for a clk tick? No if !C + + movi game_time,a10 + + movb *a10,a0 ;Get 10ths byte + jrz #tag ;Full sec? Yes if 0 + dec a0 ;No. Dec 10ths + movb a0,*a10 + move *a10,a0,L ;Chk if qrtr over. Yes if 0 + jrz #qtrend + srl 32-8,a0 ;Under a min left? + jrnz #lp1a ;No if !0 - no clk update + jruc #lp1 ;Update clk +#tag + movk 9,a0 ;Reset 10ths + movb a0,*a10 + + movb *a10(1*8),a0 ;Get secs byte + jrz #tag1 ;Full ten? Yes if 0 + dec a0 ;No. Dec secs + movb a0,*a10(1*8) + jruc #lp1 ;Update clk +#tag1 + movk 9,a0 ;Reset secs + movb a0,*a10(1*8) + +;DJT Start +;; movb *a10(3*8),a0 ;Get mins byte +;; cmpi 3,a0 ;Time to adjust drone skills? +;; jrhs #nodaj1 ;No if >= +;; calla drone_adjskill ;Yes. Pass A0 +;;#nodaj1 +;DJT End + movb *a10(2*8),a0 ;Get tens byte + jrz #tag2 ;Full min? Yes if 0 + dec a0 ;No. Dec tens + movb a0,*a10(2*8) + jruc #lp1 ;Update clk +#tag2 + movk 5,a0 ;Reset tens + movb a0,*a10(2*8) + + movb *a10(3*8),a0 ;Get mins byte + cmpi 3,a0 ;Time to adjust drone skills? + jrhs #nodaj ;No if >= + + cmpi 1,a0 + jrnz #reg +; LOCKUP +;Bong clock on outside court at 1 minute +; .ref pup_court +; move @pup_court,a14 +; jrz #reg + .ref chrch_bel_sp + SOUND1 chrch_bel_sp +#reg +;DJT Start + movb *a10(3*8),a0 ;Get mins byte + .ref drone_adjskill + calla drone_adjskill ;Yes. Pass A0 +;DJT End +#nodaj + movb *a10(3*8),a0 ;Get mins byte & dec it + dec a0 + movb a0,*a10(24) + jrnz #lp1 ;Update clk if more than a min left + +;Rearrange top clock to allow tenths + + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a0(OXPOS),a14 + move a14,*a1(OXPOS) + move *a1(OSIZEX),a1 + add a1,a14 + move a14,*a0(OXPOS) + calla prt_top_clock ;Update clk + + CREATE0 tick_tock ;Qrtr almost over sounds + CREATE0 one_min_to_go + +;Possibly rearrange bottom clock + + move @bclok_imgs,a0,L ;Screen bottom clk on? + calla ISOBJ + jrnz #bclkon + CREATE tvid,scr_clock ;No. Turn on bottom clk + + SLEEPK 2 + + move @bclok_imgs,a0,L +#bclkon + move *a0(OIMG),a1,L ;Is bottom clk min:sec or sec:10th? + cmpi clock,a1 + jrnz #lp1 ;Assume sec:10th if !0 + +;Rearrange bottom clock to allow tenths + + move a0,a8 ;Make bottom clk sec:10th + movi clock2,a0 + move *a8(OCTRL),a1 + calla obj_aniq + + move @bclok_imgs+32,a1,L + movi >136-15,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+64,a1,L + movi >116-10,a0 + move a0,*a1(OXPOS) + move @bclok_imgs+96,a1,L + movi >120-10,a0 + move a0,*a1(OXPOS) + jruc #lp1 ;Update clk + +;---------- +; Quarter ended. +; +; Rearrange clock imgs back to min:sec + +#qtrend + clr a0 + calla drone_adjskill + move @clock_imgs,a0,L + move @clock_imgs+32,a1,L + move *a1(OXPOS),a14 + move a14,*a0(OXPOS) + move *a0(OSIZEX),a0 + add a0,a14 + move a14,*a1(OXPOS) + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + clr a0 + move a0,@clock_speed ;Reset clk speed frac + move a0,@game_time,L ;Make clk 0:00.0 + calla prt_top_clock ;Update clk + + move @tvpanelon,a0,L ;Is tv panel on? Yes if !0 + jrnz #tag3 + movi tvid,a0 ;No. Delete bottom clk that is on + calla KIL1C ; screen by itself + movi CLSDEAD|bclockid,a0 + calla obj_del1c +#tag3 + SOUND1 horn_snd + + move @_4plyrsingame,a0 + jrnz #skip + move @PSTATUS,a0 + cmpi >f,a0 ;Is it a 4 plyr game? Yes if 0 + jrz #skip + movk 1,a0 + move a0,@_4plyrsingame +#skip + move @_2plyr_competitive,a0 + jrnz #skip1 ;br=not 2 plr competitive + move @PSTATUS,a0 + cmpi 1111b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1010b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 1001b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0110b,a0 + jreq #skip1 ;br=2 plyr competitive + cmpi 0101b,a0 + jreq #skip1 ;br=2 plyr competitive + movk 1,a0 + move a0,@_2plyr_competitive +#skip1 + JSRP plyr_endofqrtr + + SUBR cliplockretp ;Restore point for clip lockup code + + movk 1,a0 ;Make clk inactive + move a0,@clock_active + + movi P1DATA,a11 ;Refill turbo meters between qrtrs + callr refill_turbo + movi P2DATA,a11 + callr refill_turbo + movi P3DATA,a11 + callr refill_turbo + movi P4DATA,a11 + callr refill_turbo + + callr prt_qrtr ;Update score plate + + movi QRTRTIME,a0 ;>Regular qrtr time + move @gmqrtr,a1 + subk 4,a1 ;In an OT qrtr? No if < + jrlt #regqtr + +; Setup for OT quarter + +; SOUND1 intoot_snd + + move @tvpanelon,a0,L ;Is tv panel on? No if 0 + jrz #skp + calla process_exist ;Yes. Its process better exist! + jrz #tvpwt + movi tv3a,a7 ;Turn off tv panel + calla XFERPROC +#tvpwt + SLEEPK 1 + move @tvpanelon,a0,L ;Wait for tv panel to turn off + jrnz #tvpwt +#skp +;;;; movk 1,a0 ;>OT qrtr time + movi QRTRTIME,a0 ;>OT qrtr time + +; Common setup for regular & OT quarter + +#regqtr + move a0,@game_time,L + +;Make sure alley oop cnt + clr a0 ;3 successful drone alley oops/period + move @plyrproc_t,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+32,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+64,a14,L + move a0,*a14(plyr_alley_cnt) + move @plyrproc_t+96,a14,L + move a0,*a14(plyr_alley_cnt) + + CREATE tvid,scr_clock + + move @gmqrtr,a0 + subk 2,a0 + jrnz #tag4 + CREATE0 do_show +#tag4 + callr start_qrtr_tune + SLEEPK 1 + calla start_crowd_noise + + jruc #lp1 ;Reenter main loop + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR start_qrtr_tune + + .ref pup_nomusic,tuneend_snd + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrz #play + SOUND1 tuneend_snd + move @gmqrtr,a14 +;DJT Start + jrnz #noplay + .ref hangtime_snd + SOUND1 hangtime_snd + jruc #nodrnfr +#noplay + .ref firstbskt,thr_smkn_sp + move @firstbskt,a0 + jrnn #nodrnfr + CREATE0 do_smkn +#nodrnfr +;DJT End + rets +#play + move @balltmshotcnt,a14 ;Is it a team on-fire? + subk TMFIRE_MINCNT,a14 + jrlt #no ; br=no + SOUND1 tm_fire_tune + rets +#no + move @gmqrtr,a0 + jrnz #not1 + SOUND1 tuneq1_snd + rets + +#not1 cmpi tune_tc,a0 + jrle #tag5 + movk tune_tc,a0 +#tag5 + sll 5,a0 + addi tune_t-32,a0 + move *a0,a0,L + calla snd_play1 +;DJT Start + jruc #noplay +;DJT End + + +tune_t .long tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd +tune_tc .equ ($-tune_t)/32 + + + + +;DJT Start +;---------- +; + + SUBR do_smkn + + movi plyrobj_t,a10,L + movi plyrproc_t,a11,L + move @PSTATUS,a14 + andi 3,a14 + jrz #tmsmk + addi 64,a10 + addi 64,a11 +#tmsmk + movi TSEC*2,a8,W ;!!! + move *a11,a9,L + move *a9(PA9),a9,L + .ref drone_mean + CREATE0 drone_mean + move a0,a2 + move *a11(32),a9,L + move *a9(PA9),a9,L + CREATE0 drone_mean + move a0,a3 + movi TSEC,a0,W ;!!! + .ref rndrng0 + calla rndrng0 + addi TSEC,a0,W ;!!! + move a0,*a2(PTIME) + move a0,*a3(PTIME) + move a10,a9 + + movk 5,a0 + move @gmqrtr,a14 + jrz #tmsmk1 + movk 20,a0 +#tmsmk1 + calla PRCSLP + callr #tmcircs + SLEEPK 30 + SOUND1 thr_smkn_sp + SLEEPK 6 + callr #tmcircs + SLEEP 36 + callr #tmcircs + SLEEP 36 + callr #tmcircs + + DIE + +#tmcircs + .ref fire_circle,netmush_snd + move *a9,a8,L + move *a11,a10,L + CREATE0 fire_circle + move *a9(32),a8,L + move *a11(32),a10,L + CREATE0 fire_circle + SOUND1 netmush_snd + rets + +;DJT End +;---------- +; + + SUBRP do_show + + SLEEP 120 + SOUND1 showtm + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP one_min_to_go + + SLEEPK 1 + SOUND1 minute_sp + jrc one_min_to_go + DIE + + +;---------- +; Gets created at 1 minute mark in each quarter! + + SUBRP tick_tock + + SLEEP 10*60 ;Wait before able to do sounds +#tick + SLEEP 36 + move @game_time,a0,L ;Qrtr over? Yes if 0 + jaz SUCIDE + srl 16,a0 ;Under 10 secs left? No if !0 + jrnz #tick + move @clock_active,a0 ;Yes. Clk active? No if !0 + jrnz #tick + + movi tick_snd,a0 ;Yes. Do tick or tock sound +; XORK 1,a9 +; jrz #tok +; movi tock_snd,a0 +;#tok + calla snd_play1 + jruc #tick + + +;---------- +; Clock/scores init table + + .asg SCOREBRD_X,X + .asg SCOREBRD_Y,Y + .asg SCOREBRD_Z,Z +#init_t +;minutes, seconds + .word X+21,Y+23,Z + .long MINCOL00 + .word X+33,Y+23,Z + .long LED_00 +;scores + .word X+5, Y+11,Z + .long LED_00 + .word X+49,Y+11,Z + .long LED_00 + + .word 4000 + + +#**************************************************************** +* + +prt_qrtr + move @gmqrtr,a2 + cmpi qrtrt_c,a2 + jrlt #do_ot + movk 4,a2 ;!!!Default for OT overflow +#do_ot + sll 5,a2 + addi qrtrt1,a2 + move *a2,a2,L + move @crplate_ptr,a3,L + move a2,*a3(OIMG),L + move *a2(ISAG),*a3(OSAG),L + + rets + + +qrtrt1 .long QUARTR01,QUARTR02,QUARTR03,QUARTR04 + .long OT01,OT02,OT03,OT04 +qrtrt_c .equ ($-qrtrt1)/32 + + +; movi CLSDEAD|qrtrid,a0 +; calla obj_del1c ;kill credit/qrtr imgs +; +; movi [SCOREBRD_X+24,0],a0 +; movi [SCOREBRD_Y+25,0],a1 +; movi SCOREBRD_Z+1,a3 +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; +; move @gmqrtr,a2 +; cmpi qrtrt_c,a2 +; jrlt #do_ot +; movk 4,a2 +;#do_ot +; sll 5,a2 +; addi qrtrt1,a2 +; move *a2,a2,L +; movi CLSDEAD|qrtrid,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +;;; move a0,*a10+,L +;; movi gndpos_t+32*16,a1 +;; move a1,*a8(ODATA_p),L +; +; rets +; +; .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 +; .long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4 + + +************************************************************************** +* Completely refill turbo meter +* +* a11=PxDATA + + SUBR refill_turbo + movk 1,a1 + move a1,*a11(ply_turbo_dl) ;Reset turbo cnt delay + + movi TURBO_CNT-1,a1 ;!!! Max turbo meter + move a1,*a11(ply_turbo) + sll 5,a1 + addi TURBO_52,a1 ;TURBO_60 + move *a11(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L + + rets + +; clr a2 +; cmpi P1DATA,a11 +; jrz #1 +; movk 1,a2 +; cmpi P2DATA,a11 +; jrz #1 +; movk 2,a2 +; cmpi P3DATA,a11 +; jrz #1 +; movk 3,a2 +;#1 +; +; +;; move @PSTATUS,a1 +;; btst a2,a1 +;; jrz #notingame +; +; move *a11(ply_meter_imgs+40h),a2,L ;LITUP img +; clr a1 +; move a1,*a2(OFSET) +; movi >2f,a2 ;2f ;OSIZEX of litup meter img +; move a2,*a11(ply_turbo) ;max out turbo meter +; movk 1,a2 +; move a2,*a11(ply_turbo_dl) ;turbo cnt delay +; +;;#notingame +; rets + + +************************************************************************** +* Replenish turbo meter +* +* a0=PxDATA +* Destroys A1,A2 + + SUBRP replenish_turbo + move *a0(ply_turbo),a1 + cmpi TURBO_CNT-1,a1 ;!!! Max turbo meter + jrz #x + addk 1,a1 + move a1,*a0(ply_turbo) + sll 5,a1 + .def TURBO_52 + addi TURBO_52,a1 ;TURBO_60 + move *a0(ply_meter_imgs+32),a2,L + move *a1(0),*a2(OSAG),L +#x + rets + +; move *a0(ply_meter_imgs+32),a2,L ;LITUP img +; move *a2(OFSET),a1 ;Need to shrink LITUP img +; jrz #x +; subk 1,a1 +; move a1,*a2(OFSET) +; move *a0(ply_turbo),a1 +; addk 1,a1 +; move a1,*a0(ply_turbo) +;#x +; rets + + +******************************** +* A0=*scores +* A1=# to add + + SUBR score_add + + move a1,@clock_active + move a0,@last_score,L ;Most recent team to score + ;used for red flash + move *a0,a14 + add a1,a14 + move a14,*a0 + + PUSH a1,a7,a9 + + move @ballpnumshot,a9 + move @plyr_onfire,a0 + btst a9,a0 + jrz #noaud ;br=not on fire + + movi AUD_HOTSTRKPTS,a0 ;Audit plyr on-fire pts + .ref ballnumscored + move @ballnumscored,a14 ;Was it a plyr on-fire? + subk ONFIRE_MINCNT,a14 + jrnn #aud ; br=yes + movi AUD_TM_FIRE_PTS,a0 ;Audit team on-fire pts +#aud + move @GAMSTATE,a14 + cmpi INAMODE,a14 ;Don't audit if in attract + jrz #noaud + calla AUD +#noaud + move a1,a10 + CREATE CYCPID,flsh_bgnd + CREATE0 start_animate + + move @assist_plyr,a1 + jrz #sx + dec a1 + +;;TEAM METER logic +; movk 2,a14 +; .ref update_team_meter +; calla update_team_meter + + movk PS_ASSISTS,a0 + calla inc_player_stat +#sx + PULL a1,a7,a9 + + rets + +;-------------------- +; a9=plyr # 0-3 +; a10=# of pts scored + +flsh_bgnd + SLEEPK 20 + + move @game_time,a0,L + jaz SUCIDE + + sll 4,a9 ;Get obj XVAL per plyr # + addi #x_t,a9 + move *a9,a0 + sll 16,a0 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 ;Set other obj K's + movi CLSDEAD,a5 + clr a6 + clr a7 + + cmpi 3,a10 ;How many pts scored? + jrnz #not3 + + clr a1 ;Do 3 ptr animation + movi THREPNTS,a2 + movi >7590,a3 + calla BEGINOBJ2 + + SLEEPK 1 +;FIX!!! Get new sound... +; .ref win_snd +; SOUND1 win_snd + + SLEEPK 19 + movk 5,a9 +#f30 + movk 10,a10 + movi THREP1,a11 +#f31 + move @game_time,a0,L + jrz #fout + move *a11+,a0,L + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 2 + dsj a10,#f31 + dsj a9,#f30 + + SLEEPK 20 + + jruc #fout + +; movi >0101,a2 +; move a2,*a8(OCONST) +; +; movk 14,a10 +;#f30 +; move @game_time,a0,L +; jrz #fout +; callr const_on +; SLEEPK 4 +; callr const_off +; SLEEPK 7 +; dsj a10,#f30 +; +; jruc #fout + +#not3 + clr a1 ;Do 2 ptr animation + movi bbal_w,a2 + movi 290,a3 + calla BEGINOBJ2 + movk 8,a10 +#f1 + move @game_time,a0,L + jrz #fout + move a8,a0 + calla OBJON + SLEEPK 3 + move a8,a0 + calla OBJOFF + SLEEPK 3 + dsj a10,#f1 + +#fout + move a8,a0 + calla DELOBJ + calla pal_clean + + DIE + +#x_t + .word 9,59h,0ebh,13bh + + +;-------------------- +; + + SUBR bracket_drw + + clr a0 + movi [1,0],a1 + movi bbal,a2 ;bracket + movi 290,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +#set move @ballpnum,a0 + jrn #frbl + sll 4,a0 + addi #x_t2,a0 + move *a0,a0 + move a0,*a8(OXPOS) + SLEEPK 3 + jruc #set +#frbl move a8,a0 + calla OBJOFF + +#frlp SLEEPK 3 + + move @ballpnum,a0 + jrn #frlp + move a8,a0 + calla OBJON + jruc #set + +#x_t2 + .word 9,59h,0ebh,13bh + + +************************************************************************** +* + + SUBRP prt_top_clock + + PUSH a2,a3,a4,a5,a6,a7,a8 + + movi #mincol,a0 + move @game_time,a1,L ;print minutes + jrz #tag4 + srl 32-8,a1 + jrnz #tag4 + movi #tenths,a0 + movb @game_time+0,a1 ;print 10ths of sec +#tag4 + sll 5,a1 + add a1,a0 + move *a0,a0,L + move @clock_imgs,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print secs + move a0,a1 + sll 3,a0 + sll 1,a1 + add a1,a0 + movb @game_time+8,a1 + add a1,a0 + cmpi 10,a0 + jrhs #tag5 + addi SCOREMAX+1,a0 +#tag5 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move @clock_imgs+32,a8,L + move a0,*a8(OSAG),L + + PULL a2,a3,a4,a5,a6,a7,a8 + rets + +#mincol .long MINCOL00,MINCOL01,MINCOL02,MINCOL03 + +#tenths .long TENTHS00,TENTHS01,TENTHS02,TENTHS03,TENTHS04 + .long TENTHS05,TENTHS06,TENTHS07,TENTHS08,TENTHS09 + +;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 + + +;******************************************************************** +;* Print all 4 players credit timers if in game +;* Trashes scratch, A9 +; +; SUBR prt_cr_timers +; +; rets ;Big NOP - not longer needed!!! +; +; PUSH a8,a11 +; +; +; movi P1DATA,a9 +; clr a11 +;prt05 move @PSTATUS,a0 ;Plyr start bits 0-3 +; btst a11,a0 +; jrz #nxt +; +;;Check to see if player name is in place of credit timer! If so, don't try +;;to print out timers +; +; move *a9(ply_meter_imgs),a8,L +; jrz #nxt +; +; move *a8(OIMG),a0,L +; cmpi LED_00,a0 +; jrne #nxt ;Not counter? +; +; move *a9(ply_time),a0 +; cmpi 1000,a0 +; jrlo prt07 +;; movi 999,a0 +; movi LED_MAX,a0 +; jruc prt09 +;prt07 +; sll 5,a0 +; addi LED_0,a0 +;prt09 move *a0,a0,L +; move a0,*a8(OSAG),L +; +;#nxt addi PDSIZE,a9 +; inc a11 +; cmpi 4,a11 +; jrnz prt05 +; +; PULL a8,a11 +; rets + + +#*********************************************************************** +* Print small scores at top of screen + + SUBR prt_top_scores + + PUSH a2,a3,a4,a5,a6,a7,a8 + movi SCOREMAX,a2 + + move @score_imgs,a8,L ;Team 1 + move @scores,a0 + cmp a2,a0 + jrlo #smax1 + move a2,a0 +#smax1 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + move @score_imgs+32,a8,L ;Team 2 + move @scores+16,a0 + cmp a2,a0 + jrlo #smax2 + move a2,a0 +#smax2 + sll 5,a0 + addi LED_0,a0 + move *a0,a0,L + move a0,*a8(OSAG),L + + + move @tvpanelon,a0,L + jrz #x + movi 3*60,a1 ;Add time to score plate proc! + move a1,*a0(PTIME) + + callr prt_bigscr + + CREATE0 flash_red + +#x PULL a2,a3,a4,a5,a6,a7,a8 + rets + + +#**************************************************************** +* Turn on T.V. look score plate at the bottom of the screen. +* Handle game clock, quarter #, team names, and score. Then turn +* off everything except maybe the game time. +* + + SUBRP tv_score + +;Jeff, when you turn this pc on, use a BEGINOBJP because it has no pal +;in its header... +;---> TUBEPIEC + +; rets + + move a0,a0 + jrnz tv4x ;br=clock already on scrn + CREATE tvid,scr_clock +tv4x +;DJT Start + movi CLSDEAD|tvid,a0 + calla obj_del1c + +;DJT End +; movi [9,0],a0 + clr a0 +; movi [185,0],a1 + movi [0e7h,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi metal1,a2 + movi LOGOTUBE,a2 + movi CLSDEAD|tvid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + clr a0 + movi [0e7h,0],a1 +; movi metal2,a2 + movi SCORTUBE,a2 + calla BEGINOBJ2 + +;DJT Start + movi [-9,0],a0 + move @gmqrtr,a2 + sll 5,a2 + addi qrtrt,a2 + + move @game_time,a1,L + jrnz #skip + + addi tie_eqrtrt-qrtrt,a2 + move @scores,a1 + move @scores+16,a3 + cmp a1,a3 + jrz #skip + + addi eqrtrt-tie_eqrtrt,a2 + move @gmqrtr,a3 + subk 4,a3 + jrn #skip + clr a0 +#skip + move *a2,a2,L + movi [186+45,0],a1 + movi 5002,a3 + calla BEGINOBJ2 +;DJT End + movi [66,0],a0 + movi [181,0],a1 + move @team1,a2 +;; cmpi 27,a2 + cmpi NUM_TEAMS,a2 + jrnz #reg +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185-3,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185-3,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 + jruc #nx +#reg + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 + +#nx + movi [66,0],a0 + movi [185+20,0],a1 + move @team2,a2 + + cmpi NUM_TEAMS,a2 +;; cmpi 27,a2 + jrnz #reg2 + +;FIX!!! +;Special team named JAM + movi NUM_TEAMS,a2 + +; movi [185+18,0],a1 +; movi OSGEMD_J,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [4ch,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_A,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; movi [5bh,0],a0 +; movi [185+18,0],a1 +; movi OSGEMD_M,a2 +; movi GREENPAL,b0 +; calla BEGINOBJP2 +; jruc #nx2 +#reg2 + + sll 5,a2 + addi team_nms,a2 + move *a2,a2,L + calla BEGINOBJ2 +#nx2 + callr prt_bigscr ;score routine will update + ;these big digits + CREATE0 flash_red + rets + + +team_nms + .long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP + .long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT + .long SEA,TORO,UTAH,VANC,WASH,WASH,WASH,WASH + + +******************************** + +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +******************************** + +flash_red + + SLEEPK 10 + clr a9 + move @last_score,a0,L + jaz SUCIDE + cmpi scores,a0 + jrz #tm1 + movi 96,a9 +#tm1 movk 10,a11 + addi flsh_ptrs,a9 +#lp +; movi MD_16r,a0 + movi BST18R_P,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + movi BST18W_P,a0 +; movi MD_16,a0 + calla pal_getf + move *a9,a8,L + move a0,*a8(OPAL) + move *a9(32),a8,L + move a0,*a8(OPAL) + move *a9(64),a8,L + move a0,*a8(OPAL) + SLEEPK 5 + dsj a11,#lp + + clr a0 + move a0,@last_score,L + DIE + + + +#************************************************************************ +* Print big score digits that are part of the tv score panel +* Trashes scratch, A2-A8 + + SUBRP prt_bigscr + + PUSH a9,a10 + + clr a0 + movi flsh_ptrs,a1 + move a1,a10 + movk 6,b0 +#clp move a0,*a1+,L + dsj b0,#clp + + + movi CLSDEAD|tvscrid,a0 + calla obj_del1c + + + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tvscrid,a5 + clr a6 + clr a7 + + + move @scores,a0 ;Team 1 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [184+1-4,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + + + move @scores+16,a0 ;Team 2 + calla BINBCD + move a0,a9 + + srl 8,a0 ;>Hundereds + jrz #nohun2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [309-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#nohun2 + addk 32,a10 + + move a9,a0 ;>Tens + srl 4,a0 + jrz #notens2 + + sll 32-4,a0 + srl 32-4-5,a0 ;*32 + addi #n_t,a0 + move *a0,a2,L + + movi [326-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10,L +#notens2 + addk 32,a10 + + sll 32-4,a9 ;>Ones + srl 32-4-5,a9 ;*32 + addi #n_t,a9 + move *a9,a2,L + + movi [343-16+3,0],a0 + movi [204+1,0],a1 + movi BST18W_P,b0 + calla BEGINOBJP2 + move a8,*a10+,L + + PULL a9,a10 + + rets + +#n_t + .long SCOR18_0,SCOR18_1a,SCOR18_2,SCOR18_3,SCOR18_4,SCOR18_5,SCOR18_6 + .long SCOR18_7,SCOR18_8,SCOR18_9 + + +#************************************************************************ +* Turn on three images for big clock portion of TV score plate +* Start a process which updates these imgs +* That process must die when other tv score stuff is deleted! +* + SUBRP scr_clock + + movi #init_t,a11 + movi bclok_imgs,a10 ;for holding onto img pointer + move @game_time,a5,L + srl 24,a5 + jrnz #status +; jrnz reg + movi #init_t2,a11 + jruc #status +;reg movi #init_t,a11 +; jruc #status +#lp + move *a11+,a1 + sll 16,a0 + sll 16,a1 + move *a11+,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|bclockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp ;!End? + + callr prt_tvtime + movi gclockid,a0 + clr a1 + not a1 + calla EXISTP + jrz #lp1 + + + move @game_time,a1,L + jrz #lp1 + + + movk 3,a1 + move a1,*a0(PTIME) ;get in sync with top clock + SLEEPK 3 +#lp1 + callr prt_tvtime + SLEEPK 3 + + jruc #lp1 + + + SUBRP prt_tvtime + + movb @game_time+24,a0 ;print minutes + jrnz #tag4 + movb @game_time+0,a0 ;print 10ths of sec +#tag4 sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>20,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+16,a0 ;print 10 secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>40,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + + movb @game_time+8,a0 ;print secs + sll 5,a0 + addi numbs,a0 + move *a0,a0,L + move @bclok_imgs+>60,a8,L + move *a8(OCTRL),a1 + calla obj_aniq + rets + +#init_t + .word 2-10,185+46,5010 + .long clock + .word 305-26-10,230,5020 + .long BRSH12_0 + .word 315-21-10,230,5020 + .long BRSH12_0 + .word 325-21-10,230,5020 + .long BRSH12_0 + .word 4000 + +#init_t2 + .word 2-10,185+46,5010 + .long clock2 + .word >130-10,230,5020 + .long BRSH12_0 + .word >116-10,230,5020 + .long BRSH12_0 + .word >120-10,230,5020 + .long BRSH12_0 + .word 4000 + +qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT + .long TripleOT,final +eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final + .long final,final,final,final +tie_eqrtrt + .long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT + .long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT + + +#**************************************************************** +* Team on-fire timer +* A9=team on fire (!0=team 1, 0=team 2) +* Trashes scratch + + SUBR tmfire_timer + + .ref tm_onfire_sp + SOUND1 tm_onfire_sp + CREATE0 tm_zone_msg + SLEEPK 3 + + move a9,a11 + + move @pup_nomusic,a14 + jrz #play + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay +#play + SOUND1 tm_fire_tune +#noplay + + movi [68,0],a10 + move a9,a9 + jrnz #tm1 + movi [296,0],a10 +#tm1 + move a10,a0 + movi [3,0],a1 + movi 5000,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD|tmfireid,a5 + clr a6 + clr a7 + movi FFRAM_B_P,b0 + movi #frame,a14 + move *a14+,a2,L + move a14,*a13(PDATA),L ;Fire-frame ani *table + calla BEGINOBJP2 + move a0,a9 + + move a10,a0 + addi [8,0],a0 + movi [20,0],a1 + movi LED_00,a2 + subk 1,a3 + calla BEGINOBJ2 + +; movi LED_35,a14 ;!!!Fire time + movi LED_25,a14 ;!!!Fire time + move *a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L ;Seconds display/timer + + move @CMOS_clock_speed,a0 ;RAM copy of CMOS adjustment + sll 4,a0 + addi tfire_timer_tbl-16,a0 + move *a0,a0 + move @PSTATUS,a14 + cmpi >f,a14 ;Is it a 4 plyr game? No if !0 + jrnz #not4 + subk 1,a0 ;Yes. Make clk run faster! +#not4 + move a0,*a13(PDATA+64) ;Timer count + +#lptick + move *a13(PDATA+64),a10 ;Timer count +#lp + SLEEPK FLAME_ANICNT + move @HALT,a0 + jrnz #lp + + move @balltmshotcnt,a14 ;Team stil on-fire? + subk TMFIRE_MINCNT,a14 + jrn #notmfire ; br=no + + move *a13(PDATA),A14,L ;Fire-frame ani *table + move *a14+,a0,L + jrnz #ani1 + movi #frame,a14 + move *a14+,a0,L +#ani1 + move a14,*a13(PDATA),L + SWAP a8,a9 + move *a8(OCTRL),a1 + calla obj_aniq + SWAP a8,a9 + + move @clock_active,a0 ;Clock active? + jrnz #lp + + dsj a10,#lp + +;KEEP this shit around... + +;Only decrement team zone timer when that particular team is in possession +;of the ball. + +;cntl_team = Team in control (0,1,-1) +;a11 = team on fire (!0=team 1, 0=team 2) + + .ref cntl_team + move @cntl_team,a0 + jrn #lptick + jrz #t1 +;Team 2 + move a11,a11 + jrz #cont + jruc #lptick + +#t1 +;Team 1 + move a11,a11 + jrz #lptick + +#cont + + move *a13(PDATA+32),a14,L + cmpi LED_0,a14 + jrz #clean_up + move -*a14,a0,L + move a0,*a8(OSAG),L + move a14,*a13(PDATA+32),L + + cmpi LED_5,a14 + jrgt #lptick + +;DJT Start +;DJT ;FIX!!! Get different snd + SOUND1 tfire_tcksnd ;warn_snd;Warn players clock is running down +;DJT End + jruc #lptick + +#clean_up +;DJT Start + SOUND1 tfire_outsnd ;Team fire done sound +;DJT End + clr a0 + .ref balltmshotcnt + move a0,@balltmshotcnt +#notmfire + clr a0 + move a0,@plyr_onfire + + move @pup_nomusic,a14 + jrz #play1 + move @GAMSTATE,a14 + subk INAMODE,a14 + jrnz #noplay1 +#play1 + callr start_qrtr_tune +#noplay1 + + move a9,a0 + calla DELOBJ + jauc DELOBJDIE + +#frame + .long FFRAME01,FFRAME02,FFRAME03,FFRAME04 + .long FFRAME05,FFRAME06,FFRAME07,FFRAME08 + .long FFRAME09,FFRAME10,FFRAME11,FFRAME12 + .long FFRAME13,FFRAME14,FFRAME15,FFRAME16 + .long FFRAME17,FFRAME18,FFRAME19,FFRAME20 + .long 0 + + +#**************************************************************** +* Start shot clock timer, when clock gets down to 10 seconds, +* then display the clock in the lower corner furthest away from +* the hoop. +* A0=0 shooting at rgt hoop, 1=left hoop +* Trashes scratch + + SUBR shot_clock + + .if HEADCK + rets + .endif + + .if DEBUG | DUNKTST + move @CLOCK_OFF,a14 + jrz #ok + rets +#ok + .endif + + PUSH a7,a8 + + move a0,a8 + + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + + CREATE clockid,clock24 + move a0,@sc_proc,L + + movi [1,0],a0 + move a0,@shotimer,L + + PULL a7,a8 + rets + + + SUBRP clock24 + clr a10 + movk 7,a9 ;13 + + movi game_time,a1 +;check to see if less than 24 seconds remain on clock. If so, die! + movb *a1(8),a0 ;restuff single seconds byte + movb *a1(16),a2 ;grab 10 seconds byte + + + movb *a1(24),a3 ;grab minutes byte + jrnz #lp +;Possibly less than a minute left + + move a2,a2 + jrnz #not + +#nosc + clr a0 + move a0,@sc_proc,L + DIE +#not + cmpi 1,a2 + jrnz #lp + cmpi 5,a0 + jrle #nosc + +#lp + SLEEP 40 + move @HALT,a0 + jrnz #lp + +; jruc #lp + + dsj a9,#lp + +#lp0 SLEEPK 10 + + move @tvpanelon,a0,L + jrnz #lp0 + move @ballgoaltcnt,a0 + jrgt #lp0 + move @ballpnum,a0 + jrn #skp + sll 5,a0 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_jmpcnt),a14 + jrnz #lp0 + move *a0(plyr_seqflgs),a0 + btst DUNK_B,a0 + jrnz #lp0 ;!Dunking? +#skp + SLEEPK 10 + +;wait 13 seconds before we actually display shot clock in corner +;left side hoop + + movi #init_t,a11 + movi shotram,a10 ;for holding onto img pointer + move a8,a8 + jrnz hoopl + movi #init_t2,a11 +hoopl + jruc #status + + movi #init_t,a11 + jruc #status +#lp2 + move *a11+,a1 ;Y + sll 16,a0 + sll 16,a1 + move *a11+,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move *a11+,a2,L + movi CLSDEAD|clockid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a0,*a10+,L ;hold onto img pointer + +#status move *a11+,a0 ;X + cmpi 4000,a0 + jrne #lp2 ;!End? + +#lp3 + move @tvpanelon,a0,L + jrnz #x + + move @shotram+32,a8,L ;first digit + move @shotram+64,a9,L ;second digit + move @shotimer,a2,L + clr a0 + movy a2,a0 + srl 11,a0 + addi bnumbs,a0 + move *a0,a0,L + move *a8(OCTRL),a1 + calla obj_aniq + +;Do 2nd digit + sll 16,a2 + srl 11,a2 + addi bnumbs,a2 + move *a2,a0,L + move a9,a8 + move *a8(OCTRL),a1 + calla obj_aniq + +#lp3t SLEEP 32 + move @HALT,a0 + jrnz #lp3t + + move @shotimer,a0 + jrz #tag + dec a0 + move a0,@shotimer + + cmpi 4,a0 + jrgt #nowarn + jrne #nospch + + move @ballpnum,a14 + jrn #nospch + SOUND1 sht_ball_sp +#nospch + SOUND1 warn_snd ;Warn players shot clock is running down +#nowarn + + jruc #lp3 +#tag move @shotimer+16,a0 + jrz #tag1 + dec a0 + move a0,@shotimer+16 + movk 9,a0 + move a0,@shotimer + jruc #lp3 +#tag1 +; SOUND1 error_found + +#tag1X + SLEEPK 1 + +;Shot clock ran out - turnover! Unless the ball is in the air toward hoop! + move @ballgoaltcnt,a0 + jrgt markdi + + movk 1,a0 + move a0,@clock_active + + CREATE0 shot_text + CREATE0 shot_clock_speech + + move @ballpnum,a11 + jrnn #ok1 + move @ballpnumshot,a11 +#ok1 + srl 1,a11 + subk 1,a11 + CREATE0 plyr_takeoutball3 + + +#showstick + movi P1DATA,a10 + callr stick_number + movi P2DATA,a10 + callr stick_number + movi P3DATA,a10 + callr stick_number + movi P4DATA,a10 + callr stick_number + + + SLEEP TSEC*3 + + clr a0 + move a0,@clock_active + +sclockx move a10,a10 + jrz #x2 +#x movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs +#x2 clr a0 + move a0,@sc_proc,L +#die DIE + +markdi SLEEP 120 + movi clockid,a0 + calla KIL1C ;Kill existing shot clock proc + movi CLSDEAD|clockid,a0 + calla obj_del1c ;Delete any 24 second shot clock imgs + jruc #x2 + +numbs + .ref BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .ref BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5 + .long BRSH12_6,BRSH12_7,BRSH12_8,BRSH12_9 +; .long font90,font91,font92,font93,font94,font95,font96,font97 +; .long font98,font99 + +bnumbs + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5 + .long BRSH20_6,BRSH20_7,BRSH20_8,BRSH20_9 + + +#init_t + .word >13d,>e0,5000 + .long NSHOTCLK + .word >143,>d9,5000 + .long BRSH20_0 ;font90r + .word >158,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + +#init_t2 + .word >1c,>e0,5000 + .long NSHOTCLK + .word >22,>d9,5000 + .long BRSH20_0 ;font90r + .word >37,>d9,5000 + .long BRSH20_0 ;font90r + .word 4000 + + +#******************************** +* Print in the zone text + + SUBR tm_zone_msg + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 120-8-44,a0 + move a0,@mess_cursy + movi #str_inzone,a4 + calla print_string_C2 + + .ref flash_blu_txt + CREATE0 flash_blu_txt + move a0,a9 + + movk 5,a10 + CREATE0 #doannc_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + +#doannc_snd + + SOUND1 win_snd + SLEEPK 20 + dsj a10,#doannc_snd + + DIE + + +#ln0_setup + PRINT_STR brush20_ascii,13,0,200,70,BRSH_B_P,0 + +#str_inzone + .string "TEAM FIRE!",0 + .even + + +#******************************** +* Print shot clock violation text + + SUBRP shot_text + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_shtclk1,a4 + calla print_string2b + + movi 56,a0 + move a0,@mess_cursx2 + movi 128,a0 + move a0,@mess_cursy + + addk 8,a4 + calla print_string2b + + CREATE0 flash_bigtxt + move a0,a9 + + movk 5,a10 + CREATE0 doalert_snd + + SLEEP TSEC*2 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + DIE + + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,31,68,HANGF_R_P,kern_chars + +#str_shtclk1 + .string "S",1,-4,"H",1,-3,"O",1,2,"T " + .string "C",1,-4,"L",1,2,"OC",1,-3,"K",0 + .string "V",1,-6,"I",1,-1,"O",1,-3,"L",1,1,"A",1,3 + .string "T",1,-3,"I",1,-1,"O",1,-3,"N",0 + .even + + +#* + + SUBR show_ot_msg + +;Display Double or Triple OT message, keep going... + SLEEP 60 + + movi #ln0_setup,a2 + calla setup_message + move *a2,a0,L + move a0,@mess_justify,L ;justification method + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 76,a0 + move @gmqrtr,a1 + subk 5,a1 + jrn #ot1 + + sll 5,a1 + addi #ot_t,a1 + move *a1(3*32),a0 + move a0,@mess_cursx2 + movi 50,a0 + move a0,@mess_cursy + + move *a1,a4,L + calla print_string2b + + move @mess_cursy,a0 + addi 50,a0 +#ot1 + move a0,@mess_cursy + movi 61,a0 + move a0,@mess_cursx2 + + movi #str_shtclk2,a4 + calla print_string2b + + movk 5,a10 ;8 + SOUND1 ot_alert_snd +; CREATE0 doalert_snd + CREATE0 flash_bigtxt + move a0,a9 + + SLEEP TSEC*3+20 + + move a9,a0 + calla KILL + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + DIE + + + SUBR doalert_snd + SOUND1 whitsle_snd +#al + SOUND1 alert_snd + SLEEP 20 + dsj a10,#al + DIE + + +#ot_t .long #str_shtclk1a,#str_shtclk1b,#str_shtclk1c + .long 96,107,41 + +#ln0_setup + PRINT_STR hangfnt38_ascii,14,0,200,128,HANGF_R_P,kern_chars + +#str_shtclk1a + .string "D",1,-1,"O",1,-1,"U",1,-5,"B",1,-4,"L",1,1,"E",0 +#str_shtclk1b + .string "T",1,-5,"R",1,-1,"I",1,-2,"P",1,-4,"L",1,1,"E",0 +#str_shtclk1c + .string "QU",1,-7,"A",1,2,"D",1,-2,"R",1,-1 + .string "U",1,-4,"P",1,-4,"L",1,1,"E",0 +#str_shtclk2 + .string "O",1,2,"V",1,-7,"E",1,-4,"R",1,3,"T",1,-3 + .string "I",1,-1,"M",1,-5,"E",0 + .even + + +#******************************** +* fix_dropout_msgs +* + + BSSX plyrsdropped,16 + + SUBR fix_dropout_msgs + +; calla CR_STRTP ;Have credits to start? +; movi insert,a10 ;Assume no (C unaffected) +; jrlo #no_s ;No if < (if C set) +; movi start,a10 ;Yes +;#no_s + calla CR_CONTP ;Have credits to continue? + movi insert,a11 ;Assume no (C unaffected) + jrlo #no_c ;No if < (if C set) + movi start,a11 ;Yes +#no_c + +#fdm_p1 +; move a10,a0 ;Assume new plyr start +; move @PSTATUS2,a4 ;Chk has-started bit +; btst 0,a4 ;Is it a continue? No if 0 +; jrz #new1 +; move a11,a0 ;Continue +;#new1 + move @P1DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p2 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p2 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 1,a4 +; jrz #new2 +; move a11,a0 ;Continue +;#new2 + move @P2DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p3 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p3 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 2,a4 +; jrz #new3 +; move a11,a0 ;Continue +;#new3 + move @P3DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_p4 + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +#fdm_p4 +; move a10,a0 +; move @PSTATUS2,a4 +; btst 3,a4 +; jrz #new4 +; move a11,a0 ;Continue +;#new4 + move @P4DATA+ply_messages,a8,L + move *a8(OIMG),a0,L + cmpi please,a0 + jrnz #fdm_drop + move a11,a0 + movi MSGOCTRL,a1 + calla obj_aniq_cnoff + +;-------------------- + +#fdm_drop + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 0,a1 + jrz #n1 + btst 0,a0 + jrnz #n1 + movi P1DATA,a3 + movi P1DATA+ply_messages,a9 + movi init_t1a,a11 + callr do_drop +#n1 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 1,a1 + jrz #n2 + btst 1,a0 + jrnz #n2 + movi P2DATA,a3 + movi P2DATA+ply_messages,a9 + movi init_t2a,a11 + callr do_drop +#n2 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 2,a1 + jrz #n3 + btst 2,a0 + jrnz #n3 + movi P3DATA,a3 + movi P3DATA+ply_messages,a9 + movi init_t3a,a11 + callr do_drop +#n3 + move @PSTATUS,a0 + move @plyrsdropped,a1 + btst 3,a1 + jrz #n4 + btst 3,a0 + jrnz #n4 + movi P4DATA,a3 + movi P4DATA+ply_messages,a9 + movi init_t4a,a11 + callr do_drop +#n4 + callr update_scorebrd ;make sure we show correct message + rets + +;-------------------- +; A3=PnDATA of player who dropped out +; A9=ply_messages of player who dropped out +; A11=init_tNa of player who dropped out + +do_drop + move *a9,a0,L + jrz #ddrp + calla DELOBJ +#ddrp + clr a2 + move *a3(ply_meter_imgs),a0,L + calla OBJOFF + move *a3(ply_meter_imgs+32),a0,L + calla DELOBJ ;OBJOFF + move a2,*a3(ply_meter_imgs+32),L + + calla prt_status + rets + + +;obj position values + .asg 50<<16,P1_X + .asg 150<<16,P2_X + .asg 250<<16,P3_X + .asg 350<<16,P4_X + .asg 240<<16,PWRUP_Y ;bottom most power-up award + .asg 9<<16,IMG_SPC + + + +;----------------------------------------------------------------------------- +; This routine plots the POWER-UP award text image. +; +; INPUT: reg. a0 - ptr. to xy position table +; reg. a2 - ptr. to img +; +;RETURNS: reg a8 - ptr. to obj. +;----------------------------------------------------------------------------- + SUBR create_powerup_msg + + move *a0,a0,L ;get X value + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|124,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + CREATE0 cntrl_powerup_bar + rets + + + + .asg 280<<16,KILL_X + +;----------------------------------------------------------------------------- +; This PROCESS flashes the POWER-UP bar as it appears on the +; screen and after 4 seconds sends it off screen +; +; INPUT: reg a8 - ptr. to power-up bar obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP cntrl_powerup_bar + + move a10,a0 + sll 5,a0 + addi powerup_snd_tbl,a0 + move *a0,a0,L + calla snd_play1 + + movi pwrup_pal_tbl,a9,L +fpm_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + cmpi pwrup_pal_tbl_end,a9 + jrlo fpm_1 + + SLEEP TSEC*4 + + movi [7,0],a1,L + move a1,*a8(OYVEL),L ;now, move obj. off screen + +fpm_2 SLEEPK 2 + move *a8(OYVAL),a14,L + cmpi KILL_X,a14 + jrlo fpm_2 + calla DELOBJA8 + DIE + + +powerup_snd_tbl + .long powrup_awrd1,powrup_awrd2 + .long powrup_awrd3,powrup_awrd4 + + +pwrup_pal_tbl + .long TUBEB10_P + .long TUBEB09_P + .long TUBEB08_P + .long TUBEB07_P + .long TUBEB06_P + .long TUBEB05_P + .long TUBEB04_P + .long TUBEB03_P + .long TUBEB02_P + .long TUBEB01_P + .long TUBEB_Y_P +pwrup_pal_tbl_end + + +TUBEB01_P: + .word 63 + .word 0318ch,04e9fh,03e1fh,031bfh,02d9eh,0257fh,0257eh,0215fh + .word 01d3dh,018ffh,0213ch,01d1dh,018fch,018f9h,00cbch,010bbh + .word 018f8h,00cbbh,010bah,00cbah,0089bh,00c9ah,00cb9h,0089ah + .word 00c99h,00899h,0087ah,00c98h,00879h,00c97h,014d4h,00878h + .word 00c96h,00877h,00c95h,00876h,00875h,00874h,00c73h,00873h + .word 00854h,00872h,00852h,00871h,00851h,00870h,00850h,0086fh + .word 0084fh,0086eh,0084eh,0084dh,0084ch,0084bh,0084ah,00849h + .word 00848h,00847h,00846h,00845h,00844h,00421h,07fe0h + +TUBEB02_P: + .word 63 + .word 0318ch,05affh,04a7fh,03e1fh,039ffh,031dfh,031dfh,02dbfh + .word 0299fh,0255fh,02d9fh,0297fh,0255fh,0255ch,0191fh,01d1eh + .word 0255bh,0191eh,01d1dh,0191dh,014feh,018fdh,0191ch,014fdh + .word 018fch,014fch,014ddh,018fbh,014dch,018fah,02137h,014dbh + .word 018f9h,014dah,018f8h,014d9h,014d8h,014d7h,018d6h,014d6h + .word 014b7h,014d5h,014b5h,014d4h,014b4h,014d3h,014b3h,014d2h + .word 014b2h,014d1h,014b1h,014b0h,014afh,014aeh,014adh,014ach + .word 014abh,014aah,014a9h,014a8h,014a7h,01084h,07fe0h + +TUBEB03_P: + .word 63 + .word 0318ch,06b7fh,05affh,04e9fh,04a7fh,0425fh,0425fh,03e3fh + .word 03a1fh,035dfh,03e1fh,039ffh,035dfh,035dfh,0299fh,02d9fh + .word 035dfh,0299fh,02d9fh,0299fh,0257fh,0297fh,0299fh,0257fh + .word 0297fh,0257fh,0255fh,0297fh,0255fh,0297eh,031bbh,0255fh + .word 0297dh,0255eh,0297ch,0255dh,0255ch,0255bh,0295ah,0255ah + .word 0253bh,02559h,02539h,02558h,02538h,02557h,02537h,02556h + .word 02536h,02555h,02535h,02534h,02533h,02532h,02531h,02530h + .word 0252fh,0252eh,0252dh,0252ch,0252bh,02108h,07fe0h + +TUBEB04_P: + .word 63 + .word 0318ch,07bffh,06b7fh,05f1fh,05affh,052dfh,052dfh,04ebfh + .word 04a9fh,0465fh,04e9fh,04a7fh,0465fh,0465fh,03a1fh,03e1fh + .word 0465fh,03a1fh,03e1fh,03a1fh,035ffh,039ffh,03a1fh,035ffh + .word 039ffh,035ffh,035dfh,039ffh,035dfh,039ffh,0423fh,035dfh + .word 039ffh,035dfh,039ffh,035dfh,035dfh,035dfh,039deh,035deh + .word 035bfh,035ddh,035bdh,035dch,035bch,035dbh,035bbh,035dah + .word 035bah,035d9h,035b9h,035b8h,035b7h,035b6h,035b5h,035b4h + .word 035b3h,035b2h,035b1h,035b0h,035afh,0318ch,07fe4h + + +TUBEB05_P: + .word 63 + .word 0318ch,07fffh,07bffh,06f9fh,06b7fh,0635fh,0635fh,05f3fh + .word 05b1fh,056dfh,05f1fh,05affh,056dfh,056dfh,04a9fh,04e9fh + .word 056dfh,04a9fh,04e9fh,04a9fh,0467fh,04a7fh,04a9fh,0467fh + .word 04a7fh,0467fh,0465fh,04a7fh,0465fh,04a7fh,052bfh,0465fh + .word 04a7fh,0465fh,04a7fh,0465fh,0465fh,0465fh,04a5fh,0465fh + .word 0463fh,0465fh,0463fh,0465fh,0463fh,0465fh,0463fh,0465eh + .word 0463eh,0465dh,0463dh,0463ch,0463bh,0463ah,04639h,04638h + .word 04637h,04636h,04635h,04634h,04633h,04210h,07fe8h + +TUBEB06_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07bffh,073dfh,073dfh,06fbfh + .word 06b9fh,0675fh,06f9fh,06b7fh,0675fh,0675fh,05b1fh,05f1fh + .word 0675fh,05b1fh,05f1fh,05b1fh,056ffh,05affh,05b1fh,056ffh + .word 05affh,056ffh,056dfh,05affh,056dfh,05affh,0633fh,056dfh + .word 05affh,056dfh,05affh,056dfh,056dfh,056dfh,05adfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056bfh,056bfh,056beh,056bdh,056bch + .word 056bbh,056bah,056b9h,056b8h,056b7h,05294h,07fech + +TUBEB07_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07bffh,077dfh,07fffh,07bffh,077dfh,077dfh,06b9fh,06f9fh + .word 077dfh,06b9fh,06f9fh,06b9fh,0677fh,06b7fh,06b9fh,0677fh + .word 06b7fh,0677fh,0675fh,06b7fh,0675fh,06b7fh,073bfh,0675fh + .word 06b7fh,0675fh,06b7fh,0675fh,0675fh,0675fh,06b5fh,0675fh + .word 0673fh,0675fh,0673fh,0675fh,0673fh,0675fh,0673fh,0675fh + .word 0673fh,0675fh,0673fh,0673fh,0673fh,0673fh,0673fh,0673fh + .word 0673fh,0673eh,0673dh,0673ch,0673bh,06318h,07ff0h + +TUBEB08_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07bffh,07fffh + .word 07fffh,07bffh,07fffh,07bffh,077ffh,07bffh,07bffh,077ffh + .word 07bffh,077ffh,077dfh,07bffh,077dfh,07bffh,07fffh,077dfh + .word 07bffh,077dfh,07bffh,077dfh,077dfh,077dfh,07bdfh,077dfh + .word 077bfh,077dfh,077bfh,077dfh,077bfh,077dfh,077bfh,077dfh + .word 077bfh,077dfh,077bfh,077bfh,077bfh,077bfh,077bfh,077bfh + .word 077bfh,077bfh,077bfh,077bfh,077bfh,0739ch,07ff4h + +TUBEB09_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07ff8h + +TUBEB10_P: + .word 63 + .word 0318ch,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP nodrift_message + + move @pup_nodrift,a14 + jrz #nondm + SLEEPK 10 + .ref is_legal_sp + SOUND1 is_legal_sp +#nondm + DIE + + +;----------------------------------------------------------------------------- +; This routine checks if any secret power-ups were awarded, if true then +; a message is displayed showing the power-up +;----------------------------------------------------------------------------- + SUBR doflshs + +;Wait for HALT to get set! + SLEEPK 8 + + callr tournament_on ;Clr powerup bits rigt now! + jrc #lpz ; br=in tourney mode + CREATE0 nodrift_message ;Do speech while instructions are up + +#lpz + SLEEPK 1 ;I quess, waiting for idiot boxes + move @HALT,a0 + jrnz #lpz + +; SLEEP 2*60-50 + +; CREATE0 shot_percent_msg + CREATE0 cpu_assist_off + CREATE0 baby_message + + clr a10 + CREATE0 check_plr_powerups + movk 1,a10 + CREATE0 check_plr_powerups + movk 2,a10 + CREATE0 check_plr_powerups + movk 3,a10 + CREATE0 check_plr_powerups + + calla pal_clean + + SLEEP TSEC*3 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + calla pal_clean + DIE + + +;----------------------------------------------------------------------------- +; This process flashes player white to alert him that a POWER-UP was awarded +; +; +; INPUT: reg a8 - ptr. to player obj. +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_white + + move *a8(OPLINK),a0,L + move *a0(plyr_headobj_p),a9,L + + movi >f8f8,a2 + move a2,*a8(OCONST) + movi >3f3f,a2 + move a2,*a9(OCONST) + + movk 7,a10 +#again + callr const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + callr const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a9(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 3 + + dsj a10,#again + DIE + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR tournament_on + +;Check to see if any of the 4 players has turned on tournament mode! + move @pup_tournament,a0 + jrnz #se2a ;br=yep + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #se2a ;On? Br=yes + clrc + rets + +#se2a + calla clear_secret_powerup_tmode +; clr a0 +; move a0,@p1taps +; move a0,@p2taps +; move a0,@p3taps +; move a0,@p4taps +; move a0,@pup_maxsteal + setc ;Yes, tournament mode on! + rets + +#************************************* +* Show computer assistance off message + + SUBRP cpu_assist_off + + callr tournament_on + jrnc #set ;br=yep, tournament mode enabled + +;tournament mode msg. + + movk 1,a0 + move a0,@pup_noassistance + + SOUND1 win_snd + + movi [200,0],a0,L + movi [44,0],a1,L + movi TOURMODE2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [61,0],a1,L + movi NOCPU2,a2,L + calla BEGINOBJ2 + + movi [200,0],a0,L + movi [73,0],a1,L + movi SECRETS2,a2,L + calla BEGINOBJ2 + jruc #setin2 + +;cpu assistance adj. was set +#set + movk ADJCOMPASS,a0 ;Computer assistance + calla GET_ADJ ;0-1 + jrnz #setca ;On? Br=yes + move @pup_noassistance,a0 + jrnz #setcb ;br=wasn't set by player(s) + jruc #set3 +#setca + movk 1,a0 + move a0,@pup_noassistance +#setcb + SOUND1 win_snd + + movi [200,0],a0,L + movi [52,0],a1,L + movi ASISTOFF2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +#setin2 + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean +#set3 DIE + + + +#******************************* +* Show secret messages + + SUBRP shot_percent_msg + + + .if DUNKTST + movk 1,a0 + move a0,@pup_showshotper + .else + move @pup_showshotper,a0 + jaz SUCIDE ;When testing dunks - TAKE OUT! + .endif + + SOUND1 win_snd + + movi [200,0],a0,L + movi [40,0],a1,L + movi SHOTPERC2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + + + +#******************************* +* Show cpu substitution message + + SUBR cpu_subs + + SLEEP 5 + + movi #ln0_setup,a2 + move a8,a8 + jrz #ok + movi #ln0_setupa,a2 +#ok + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi #str_subs,a4 + calla print_string_C2 + + DIE + + +#ln0_setup + PRINT_STR bast18_ascii,3,0,101,130,BST18W_P,0 +#ln0_setupa + PRINT_STR bast18_ascii,3,0,300,130,BST18W_P,0 + +#str_subs + .string "CPU",0 + + .even + + +;----------------------------------------------------------------------------- +; This PROCESS checks and displays the activated power-ups +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBRP check_plr_powerups + +; callr tournament_on +; jac cpp_1 + move @PSTATUS,a0 + btst a10,a0 + jreq cpp_1 ;br=plyr not in game + movi PWRUP_Y,a9 ;starting Y position + + move a9,a1 + callr big_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp0 ;br=nope + + SLEEPK 2 + +#noslp0 move a9,a1 + callr huge_plyr_head_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp1 ;br=nope + + SLEEPK 2 + +#noslp1 move a9,a1 + callr shotperc_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp2 ;br=nope + + SLEEPK 2 + +#noslp2 move a9,a1 + callr notag_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #nosl2 ;br=nope + + SLEEPK 2 + +#nosl2 move a9,a1 + callr showhotspots_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp3 ;br=nope + + SLEEPK 2 + +#noslp3 move a9,a1 + callr stealth_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp4 ;br=nope + + SLEEPK 2 + +#noslp4 move a9,a1 + callr infinite_turbo_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp5 ;br=nope + + SLEEPK 2 + +#noslp5 move a9,a1 + callr fast_passing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp6 ;br=nope + + SLEEPK 2 + +#noslp6 move a9,a1 + callr steal_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp7 ;br=nope + + SLEEPK 2 + +#noslp7 move a9,a1 + callr maximum_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp8 ;br=nope + + SLEEPK 2 + +#noslp8 move a9,a1 + callr hyper_speed_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslp9 ;br=nope + + SLEEPK 2 + +#noslp9 move a9,a1 + callr no_pushing_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpa ;br=nope + + SLEEPK 2 + +#noslpa move a9,a1 + callr maximum_power_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpb ;br=nope + + SLEEPK 2 + +#noslpb move a9,a1 + callr goal_tending_msg + sub a11,a9 + move a11,a11 ;was power-up displayed ? + jreq #noslpc ;br=nope + + SLEEPK 2 + +#noslpc +cpp_1 DIE + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP no_pushing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_nopush,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOPUSH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP stealth_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbstealth,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_STELTH,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP fast_passing_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_fastpass,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_FSTPAS,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXSPD,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP notag_msg + +;DEBUG!!! +;Get rid of arrows for testing shit.... +;FIXX!!! + +; movk 15,a0 +; move a0,@pup_notag +; rets + + clr a11 ;assume plyr didn't activate this power-up + move @pup_notag,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_NOARRW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP infinite_turbo_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_trbinfinite,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_UNLIMT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP showhotspots_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showhotspots,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HOTSPT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP goal_tending_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_goaltend,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_GOALTN,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +;FIX!!! + BSSX blkpower,16 +;Need powerup for super blocking ability + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP maximum_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxpower,a0 + or a3,a0 + move a0,@pup_maxpower +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxpower,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_MAXPOW,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP big_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_bighead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP huge_plyr_head_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hugehead,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_BIGHED,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP hyper_speed_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_hypspeed,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_HYPRSP,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP shotperc_msg + + clr a11 ;assume plyr didn't activate this power-up + move @pup_showshotper,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_SHTPCT,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +; +; INPUT: a1 - Y value +; a10 - player number +; +; RETURN: a11 - next Y position offset +;----------------------------------------------------------------------------- + SUBRP steal_power_msg + + move @pup_strongmen,a0 + jrz #notst +;Grand champ playing - make drones have max power +;DJT Start + subk 2,a0 + jrp #notst ; br=both teams have grand champs! + movk >3,a3 + jrz #tag1 ; br=team 2 has grand champs! + movk >c,a3 +#tag1 +;DJT End + move @pup_maxsteal,a0 + or a3,a0 + move a0,@pup_maxsteal +#notst + clr a11 ;assume plyr didn't activate this power-up + move @pup_maxsteal,a0 + btst a10,a0 + jrz #nxt + move a10,a0 + sll 5,a0 + addi xy_tbl,a0 + movi M_QIKHND,a2,L + callr create_powerup_msg + movi IMG_SPC,a11 +#nxt rets + + +xy_tbl + .long P1_X + .long P2_X + .long P3_X + .long P4_X + + +#***************************************************************************** +; +; This routine checks if players has activated the +; power-up +;----------------------------------------------------------------------------- + SUBRP baby_message + + callr tournament_on + jac SUCIDE + move @pup_baby,a0 + jaz SUCIDE + SOUND1 win_snd + + movi [200,0],a0,L + movi [64,0],a1,L + movi BABYPLAY2,a2,L + movi 19500,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSDEAD|123,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP TSEC*4 + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + calla pal_clean + DIE + diff --git a/SRC/SCORE2.ASM b/SRC/SCORE2.ASM new file mode 100644 index 0000000..cc689c9 --- /dev/null +++ b/SRC/SCORE2.ASM @@ -0,0 +1,2231 @@ +************************************************************** +* +* Owner: JOHNSON +* +* Software: Mark Turmell +* Initiated: 7/17/90 +* +* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up +* Shawn Liptak, 2/18/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:10 +************************************************************** + .file "score2.asm" + .title "score stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "world.equ" ;Court-world defs + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + .asg 0,SEQT + .include "plyr.equ" + + .include "arrow.glo" + + +;symbols externally defined + + .ref IRQSKYE + .ref SOUNDSUP + .ref get_all_buttons_cur2 + .ref TWOPLAYERS +; .ref player_toggle1 ;0 = no toggle +; .ref player_toggle2 ;0 = no toggle + .ref pal_set,amode_start,GAMSTATE,P1DATA + .ref KILBGND + .ref pal_clean + .ref WIPEOUT + .ref WNDWON + .ref WFLG + .ref get_but_val_cur,PSTATUS,cntrs_delay,HALT,GET_ADJ + .ref names,pal_getf,team1,team2 + .ref AUD,AUD1,scores,PSTATUS2 + .ref UNIT_CLR,get_all_buttons_down + .ref player1_data,player2_data,inbound + .ref player3_data,player4_data + .if DRONES_2MORE + .ref player5_data,player6_data + .endif + .ref pup_trbstealth + .ref un_wipe_horizontal,wipe_stack_vert_up + .ref wipe_horz_stag_dwn + .ref do_scrn_transition + .ref CREATE_NO_DEL_OBJS,NO_CREATE_DEL_OBJS + .ref brush20_ascii,brush50_ascii + .ref infoex_snd,bounce_snd + .ref mess_cursy,mess_objid + .ref setup_message,print_string_C2 + .ref fade_down + .ref HANGF_R_P,HANGF_W_P + .ref BAKMODS,BGND_UD1 + .ref BKGDBMOD + .ref gndstat,dtype,dpageflip + .ref tuneend_snd,tune_gmovr + .ref kp_qscrs,kp_qscrs2,kp_team1,kp_team2,kp_scores + .ref kp_p1_crtplr,kp_p2_crtplr,kp_p3_crtplr,kp_p4_crtplr + .ref kp_p1_name1,kp_p1_name2,kp_p1_name3,kp_p1_name4 + .ref kp_p1_name5,kp_p1_name6,kp_p1_hdnbr + .ref kp_p2_name1,kp_p2_name2,kp_p2_name3,kp_p2_name4 + .ref kp_p2_name5,kp_p2_name6,kp_p2_hdnbr + .ref kp_p3_name1,kp_p3_name2,kp_p3_name3,kp_p3_name4 + .ref kp_p3_name5,kp_p3_name6,kp_p3_hdnbr + .ref kp_p4_name1,kp_p4_name2,kp_p4_name3,kp_p4_name4 + .ref kp_p4_name5,kp_p4_name6,kp_p4_hdnbr + +;symbols defined in this file + + .def player_data + +;uninitialized ram definitions + + BSSX idiot_bits,16 + BSSX fontram,30*32 ;font imgs for red/white flashing + +;equates first originated in this file +CONT_MAX equ 10 + + .text + +#***************************************************************************** +* +* Increment dropout count & add in score differential + + SUBR dropout_stats + + movi AUD_NUMDROPOUT,a0 + calla AUD1 + + move @scores,a1 + move @scores+10h,a0 + sub a0,a1 + abs a1 + movi AUD_DROPDIFF,a0 + calla AUD + + move @PSTATUS2,a0 + andi 011b,a0 + jrz #t1_cpu + move @PSTATUS2,a0 + andi 01100b,a0 + jrz #t2_cpu + + movi AUD_DROPVSHUM,a0 + calla AUD1 + rets + +#t1_cpu +#t2_cpu + movi AUD_DROPVSCPU,a0 + calla AUD1 + rets + +#************************************ +* Instructions +* + + SUBR instructions + clr a11 + move @PSTATUS,a0 + btst 0,a0 + jrz #nx1 + CREATE 1123,print_inst +#nx1 + movk 1,a11 + + move @PSTATUS,a0 + btst 1,a0 + jrz #nx2 + CREATE 1123,print_inst +#nx2 + movk 2,a11 + move @PSTATUS,a0 + btst 2,a0 + jrz #nx3 + CREATE 1123,print_inst +#nx3 + movk 3,a11 + move @PSTATUS,a0 + btst 3,a0 + jrz #nx4 + CREATE 1123,print_inst +#nx4 SLEEPK 1 + movi 1123,a0 + clr a1 + not a1 + calla EXISTP + jrnz #nx4 + RETP + + +* A11=Plyr # (0-3) + + SUBR print_inst + + SLEEPK 1 + +;Check player experience first! + + move a11,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + subk 5,a7 + jage SUCIDE + +#no_inits + + move a11,*a13(PDATA+288) + +;; CREATE0 do_warns + + move a11,a0 + movi 35*60,a0 + move a0,@cntrs_delay + + sll 5,a11 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi firstwin,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x + addi 4*32,a0 +#not2x + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + CREATE0 flsh_box + +;Blink this img red/wht + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi ply2_t,a2 +#not2 + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi joycontrol,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colormessage,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+96),L + +;Turn on msgs + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi colors_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2x2 + addi 4*32,a2 +#not2x2 + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+128),L + +;Turn on arws + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4fh,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [0ch,0],a0 + movi arws_t,a2 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2c + movi arws2_t,a2 +#not2c + add a11,a2 + move *a2,a2,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+160),L + +;Turn on head + .ref getwindowhead + +; movi team1,a1 + cmpi 64,a11 + jrlt #tag0 + movk 2,a8 + calla getwindowhead + PUSHP a0 +; movi team2,a1 + movk 3,a8 + calla getwindowhead + move a0,a1 + PULLP a0 + jruc #tagout +#tag0 +; calla getwindowhead + clr a8 + calla getwindowhead + PUSHP a0 + movk 1,a8 + calla getwindowhead + move a0,a1 + PULLP a0 +#tagout + +;a0=plyr 1 head img +;a1=plyr 2 head img + + move a0,a2 + cmpi 0,a11 + jrz #tag1 + cmpi 64,a11 + jrz #tag1 + move a1,a2 + +#tag1 + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [61h+2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [4ch+2,0],a0 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+224),L + + movi names,a0 + add a11,a0 + move *a0,a2,L +;DJT Start + jrn #notcol1 + .ref AUGMON + movi AUGMON,a2,L ;Default college img +#notcol1 +;DJT End + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [23h,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + addi [32h,0],a0 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+256),L +;DJT Start + + movi names,a0 ;Was it a college player? + add a11,a0 + move *a0,a0,L + jrn #notcol2 ; br=no + .ref original_names + movi original_names,a0 ;Get college *name + add a11,a0 + move *a0,a0,L + move a0,*a8(ODATA_p),L + move *a8(OFLAGS),a0 ;Set obj type + addi M_CHARGEN+M_PIXSCAN,a0,W ;Set chargen flags + move a0,*a8(OFLAGS) + clr a0 + move a0,*a8(OMISC) ;Clr so char_gen calcs new X +#notcol2 +;DJT End + + + SLEEPK 12 + +;Make sure the proper player presses his button + + movi 10*60,a8 +#whopper_with_cheese + SLEEPK 1 + + move *a13(PDATA+288),a0 + calla get_but_val_cur + + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + move *a13(PDATA+96),a0,L + calla DELOBJ + move *a13(PDATA+128),a0,L + calla DELOBJ + move *a13(PDATA+160),a0,L + calla DELOBJ + move *a13(PDATA+224),a0,L + calla DELOBJ + move *a13(PDATA+256),a0,L + calla DELOBJ + +;Show second page of instructions + + move @PSTATUS,a0 + move *a13(PDATA+288),a1 + XORK 1,a1 + btst a1,a0 + jrnz #no_drone + + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [4,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi dronetxt,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi ply2_t,a2 +#not2a + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + CREATE0 blink_plyr + move a0,*a13(PDATA+192),L + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese1 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit1 + dsj a9,#whopper_with_cheese1 + +#exit1 + move *a13(PDATA+192),a0,L + calla KILL + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + +#no_drone + +;3rd page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message4,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [1,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message7,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 11*60,a9 +#whopper_with_cheese2 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit2 + dsj a9,#whopper_with_cheese2 +#exit2 + + SOUND1 infoex_snd + + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +;4th page of instructions + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message9,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + movi #boxy_t,a0 + add a11,a0 + move *a0,a1,L + addi [2,0],a1 + movi #boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi message2,a2 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + + SLEEP 12 + +;Make sure the proper player presses his button + + movi 10*60,a9 +#whopper_with_cheese3 + SLEEPK 1 + move *a13(PDATA+288),a0 + calla get_but_val_cur + move a0,a0 + jrnz #exit3 + dsj a9,#whopper_with_cheese3 + +#exit3 + + SOUND1 infoex_snd + + movi 30,a9 + movk 8,a10 + +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+32),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + move *a13(PDATA+64),a0,L + move *a0(OYPOS),a1 + add a10,a1 + move a1,*a0(OYPOS) + + dsj a9,#lft + + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + +; clr a0 +; move a0,@HALT +; move a0,@cntrs_delay + + DIE + + +colors_t +; .long red,yellow,green,blue + .long blue,green,yellow,red +;For kit + .long blue,blue,red,red +arws_t + .long arrown1r,arrown2r,arrown3r,arrown4r +arws2_t + .long arrown1r2p,arrown1r2p,arrown2r2p,arrown2r2p + +#boxy_t .long [48-8,0],[48+70+8,0],[48-8,0],[48+70+8,0] +#boxx_t .long [7,0],[64h,0],[0c3h,0],[120h,0] +ply_t .long plyr1,plyr2,plyr3,plyr4 +ply2_t .long plyr1,plyr1,plyr2,plyr2 +pal_t + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;normal 4 plyr + .long HINT_B_P,HINT_B_P,HINT_B_P,HINT_B_P ;KIT +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ; +; .long GROWBOXb,GROWBOXb,GROWBOXr,GROWBOXr ;kit + + + +#*************************************************************** +* Shake screen as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + BSSX #SHK_ON,16 ;is a shake in progress? + BSSX #Y_ADJ,32 ;current deviation from rest + BSSX shakers_started,16 + BSSX shakers_finished,16 + BSSX shakers_killed,16 + + SUBR SHAKER2 + + ;check for a valid a10 + move a10,a10 + jrn #done + jrz #done + + move @#SHK_ON,a0 + jrz #no_shake + + ;abort shake currently in progress + movi SHAKE_PID,a0 + calla KIL1C + move @#Y_ADJ,a14,L + move @WORLDTLY,a0,L + sub a14,a0 + move a0,@WORLDTLY,L + + move @shakers_killed,a14 + inc a14 + move a14,@shakers_killed + +#no_shake + ;set the 'in progress' flag + movk 1,a14 + move a14,@#SHK_ON + + ;create the shaker process + CREATE SHAKE_PID,#shaker + +#done + rets + +#shaker + ;a9 = index into sine table + ;a10 = time left + ;a11 = original time left + + ;initialize + movi #last_entry,a9 + move a10,a11 + + move @shakers_started,a14 + inc a14 + move a14,@shakers_started + +#loop + ;calculate the new offset + + ;get the cosine + move a9,a14 + sll 4,a14 + addi #sine_table,a14 + move *a14,a0,W + + ;get the exp (index is 64 - (64 * a10 / a11) + move a10,a1 + sll 6,a1 + divu a11,a1 + neg a1 + addi 64,a1 + sll 4,a1 + addi #exp_table,a1 + move *a1,a1,W + + ;multiply + mpys a0,a1 + + ;scale + sra 5,a1 + mpyu a11,a1 + + move a1,@#Y_ADJ,L + + ;update the table pointer + dec a9 + jrnn #table_ok +;;;; dsj a9,#table_ok +;;;; movi #last_entry,a9 +#table_ok + + ;apply it + move @WORLDTLY,a14,L + add a14,a1 + move a1,@WORLDTLY,L + + ;nap + SLEEPK 1 + + ;undo it + move @#Y_ADJ,a14,L + move @WORLDTLY,a1,L + sub a14,a1 + move a1,@WORLDTLY,L + + ;loop + dsj a10,#loop + + ;all done + clr a14 + move a14,@#SHK_ON + move a14,@#Y_ADJ,L + + move @shakers_finished,a14 + inc a14 + move a14,@shakers_finished + + DIE + + + ;36-degree increments +#cosine_table ;deg + .word 828 ;324 + .word 316 ;288 + .word -315 ;252 + .word -827 ;216 + .word -102 ;180 + .word -827 ;144 + .word -315 ;108 + .word 316 ;72 + .word 828 ;36 + .word 1024 ;0 + +#sine_table ;deg + .word -601 ;324 + .word -973 ;288 + .word -973 ;252 + .word -601 ;216 + .word 0 ;180 + .word 602 ;144 + .word 974 ;108 + .word 974 ;72 + .word 602 ;36 + .word 0 ;0 +#last_entry equ 9 + + ;values of e^(-x) for values from 0 to 7, in 64 divisions + ; e.g. e^-1.5 is the 32nd entry + ; all values are multiplied by 1024 + +#exp_table ;damps at speed 5 + .word 1024,945,873,807,745,688,636,587 + .word 542,501,463,427,395,364,337,311 + .word 287,265,245,226,209,193,178,165 + .word 152,140,130,120,110,102,94,87 + .word 80,74,68,63,58,54,50,46 + .word 42,39,36,33,31,28,26,24 + .word 22,20,19,17,16,15,14,13 + .word 12,11,10,9,8,8,7,6 + + + + +#*************************************************************** +* Shake screen as as if an earthquake is in effect +* A10 = # ticks to shake and power of shake +* Note: time to shake must be more than 6 ticks + + .BSS AMP,16 + .BSS AMPCNT,16 + .BSS XSET,16 + .BSS YSET,16 + BSSX SHK_ON,16 + + .ref RNDRNG0 + + SUBR SHAKER + + move @SHK_ON,a0 + jrnz #x + move a10,a11 + movk 8,a0 + move a0,@SHK_ON + divs a0,a11 + move a0,@AMP + move a11,@AMPCNT + + CREATE0 shakelp +#x RETS + +shakelp + move @AMP,a0 + calla RNDRNG0 + move a0,@XSET + move @AMP,a0 + calla RNDRNG0 + move a0,@YSET + move @HCOUNT,a14 + btst 0,a14 + jrz #shakey + + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLX,L + SLEEPK 1 + move @XSET,a1 + move @WORLDTLX,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLX,L + jruc shakelp + +#shakey + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + add a1,a0 + move a0,@WORLDTLY,L + SLEEPK 1 + move @YSET,a1 + move @WORLDTLY,a0,L + sll 16,a1 + sub a1,a0 + move a0,@WORLDTLY,L + move @AMPCNT,a2 + dec a2 + move a2,@AMPCNT + jrnz #ampok + move a11,@AMPCNT + move @AMP,a0 + cmpi 1,a0 + jrz #ampok + dec a0 + move a0,@AMP +#ampok + dsj a10,shakelp + move a10,@SHK_ON + + DIE + + +;; SUBR do_warns +;; DIE +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; SLEEPK 20 +;; SOUND1 warn2_snd +;; DIE + +#************************************ +* Create idiot box process to give the player a message +* A0=Message # +* A1=Plyr # (0-3) + + SUBR idiot_box + + .if DUNKTST | DEBUG + rets ;When testing dunks - PUT IN! + .endif + + PUSH a7,a10,a11 + + .ref game_time + move @game_time,a14,L + cmpi >900,a14 + jrlt #x + + move a1,a14 + sll 5,a14 + addi player_data,a14 + move *a14,a14,L + move *a14(PR_COUNT),a7 + jrn #no_inits + move a0,a0 + jrz #no_inits + subk 5,a7 + jrge #x + +#no_inits + move @PSTATUS,a14 + btst a1,a14 + + jrnz #notdrn ;Drone? + move a0,a0 + jrnz #x ;Out of credit message? + +#notdrn + move a0,a10 + move a1,a11 + CREATE0 idiot_box2 + +#x PULL a7,a10,a11 + rets + +player_data + .long player1_data,player2_data + .long player3_data,player4_data + .if DRONES_2MORE + .long player5_data,player6_data + .endif + +#************************************ +* Idiot box (process) +* A10=Message # +* A11=Plyr # (0-3) + + SUBRP idiot_box2 + +;Check player experience first! + +#slp SLEEPK 1 + + move @idiot_bits,a0 + btst a11,a0 + jrnz #slp + move @inbound,a0 + jann SUCIDE ;#slp + + move a11,a0 + sll 4,a0 + addi bit_t,a0 + move *a0,a0 + move @idiot_bits,a1 + or a0,a1 + move a0,@idiot_bits + + movi 5*60,a0 + move a0,@HALT + move a0,@cntrs_delay + + sll 5,a11 + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi infobox,a2 + movi 19990,a3 ;z pos + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA),L + + movi pal_t,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2xx + addi 4*32,a0 +#not2xx + + add a11,a0 + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + + CREATE0 flsh_box + +;Blink this img red/wht + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + movi ply_t,a2 + + + + + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi ply2_t,a2 +#not2b + + + + + add a11,a2 + move *a2,a2,L ;Player #x + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+32),L + + CREATE0 blink_plyr + + movi msg_t,a2 + sll 5,a10 + add a10,a2 + move *a2,a2,L + + move a0,a10 ;Keep blink proc + + movi boxy_t,a0 + add a11,a0 + move *a0,a1,L + movi boxx_t,a0 + add a11,a0 + move *a0,a0,L + clr a6 + clr a7 + calla BEGINOBJ2 + move a8,*a13(PDATA+64),L + + SLEEP TSEC*1 + + movi 4*60,a8 +#whopper_with_cheese + SLEEPK 1 + calla get_all_buttons_down + move a0,a0 + jrnz #exit + dsj a8,#whopper_with_cheese + +#exit move a10,a0 + calla KILL + + SOUND1 infoex_snd + + movi 30,a9 + movi -8,a10 + cmpi 64,a11 + jrlt #lft +;Send box off to right + movk 8,a10 +#lft SLEEPK 1 +;Send box off to lft + move *a13(PDATA),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+32),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + move *a13(PDATA+64),a0,L + move *a0(OXPOS),a1 + add a10,a1 + move a1,*a0(OXPOS) + dsj a9,#lft + + move *a13(PDATA),a0,L + calla DELOBJ + move *a13(PDATA+32),a0,L + calla DELOBJ + move *a13(PDATA+64),a0,L + calla DELOBJ + + + addi bit_and,a11 + move *a11,a0,L + move @idiot_bits,a1 + and a0,a1 + move a1,@idiot_bits + + move a1,a1 + janz SUCIDE + + move @PSTATUS,a0 + jaz SUCIDE + + clr a0 + move a0,@HALT + move a0,@cntrs_delay + + DIE + + + SUBR blink_plyr + SLEEPK 15 + SUBR blink_plyr2 + SLEEPK 5 + +blink_plyr1 + movi SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 4 + movi SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 7 + jruc blink_plyr1 + + + SUBR flsh_box + + SLEEPK 2 + +;White color in instruction plate pal + movi >0101,a2 + move a2,*a8(OCONST) + + movk 3,a10 +#again + callr const_on + + SLEEPK 3 + + callr const_off + + SLEEPK 3 + + dsj a10,#again + DIE + + +bit_t .word 1,2,4,8 +bit_and .long >e,>d,>b,>7 +boxy_t .long [48,0],[48+70,0],[48,0],[48+70,0] +boxx_t .long [7,0],[47h+6,0],[0dah+6,0],[127h-23,0] +msg_t .long message1,message2,message3,message4,message5,message6 + .long message7,message2a +const_on + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + + +const_off + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + rets + +#***************************************************************************** + SUBR flash_bigtxt + SUBR flash_bigtxt2 + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi HANGF_W_P,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi HANGF_R_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#* + SUBR flash_blu_txt + + movi OBJLST,a14 + movi fontram,a3 + clr a4 + move a4,*a3,L + +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a14,*a3+,L + move a4,*a3,L + jruc #lp + +#x + movi BRSHGWKP,a0 + calla pal_getf + movi fontram,a3 + +#lp2 + move *a3+,a1,L + jrz #xx + move a0,*a1(OPAL) + jruc #lp2 + +#xx SLEEPK 3 + + movi BRSH_B_P,a0 + calla pal_getf + movi fontram,a3 + +#lp3 + move *a3+,a1,L + jrz #xxx + move a0,*a1(OPAL) + jruc #lp3 + +#xxx SLEEPK 5 + jruc #x + + +#************************************************************************* +* Game over process + + SUBR game_over + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + movk INGAMEOV,a0 + move a0,@GAMSTATE + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + move @player1_data+PR_CREATED_PLYR,a14 + move a14,@kp_p1_crtplr + move @player1_data+PR_NAME1,a14 + move a14,@kp_p1_name1 + move @player1_data+PR_NAME2,a14 + move a14,@kp_p1_name2 + move @player1_data+PR_NAME3,a14 + move a14,@kp_p1_name3 + move @player1_data+PR_NAME4,a14 + move a14,@kp_p1_name4 + move @player1_data+PR_NAME5,a14 + move a14,@kp_p1_name5 + move @player1_data+PR_NAME6,a14 + move a14,@kp_p1_name6 + move @player1_data+PR_HEAD_NBR,a14 + move a14,@kp_p1_hdnbr + + move @player2_data+PR_CREATED_PLYR,a14 + move a14,@kp_p2_crtplr + move @player2_data+PR_NAME1,a14 + move a14,@kp_p2_name1 + move @player2_data+PR_NAME2,a14 + move a14,@kp_p2_name2 + move @player2_data+PR_NAME3,a14 + move a14,@kp_p2_name3 + move @player2_data+PR_NAME4,a14 + move a14,@kp_p2_name4 + move @player2_data+PR_NAME5,a14 + move a14,@kp_p2_name5 + move @player2_data+PR_NAME6,a14 + move a14,@kp_p2_name6 + move @player2_data+PR_HEAD_NBR,a14 + move a14,@kp_p2_hdnbr + + move @player3_data+PR_CREATED_PLYR,a14 + move a14,@kp_p3_crtplr + move @player3_data+PR_NAME1,a14 + move a14,@kp_p3_name1 + move @player3_data+PR_NAME2,a14 + move a14,@kp_p3_name2 + move @player3_data+PR_NAME3,a14 + move a14,@kp_p3_name3 + move @player3_data+PR_NAME4,a14 + move a14,@kp_p3_name4 + move @player3_data+PR_NAME5,a14 + move a14,@kp_p3_name5 + move @player3_data+PR_NAME6,a14 + move a14,@kp_p3_name6 + move @player3_data+PR_HEAD_NBR,a14 + move a14,@kp_p3_hdnbr + + move @player4_data+PR_CREATED_PLYR,a14 + move a14,@kp_p4_crtplr + move @player4_data+PR_NAME1,a14 + move a14,@kp_p4_name1 + move @player4_data+PR_NAME2,a14 + move a14,@kp_p4_name2 + move @player4_data+PR_NAME3,a14 + move a14,@kp_p4_name3 + move @player4_data+PR_NAME4,a14 + move a14,@kp_p4_name4 + move @player4_data+PR_NAME5,a14 + move a14,@kp_p4_name5 + move @player4_data+PR_NAME6,a14 + move a14,@kp_p4_name6 + move @player4_data+PR_HEAD_NBR,a14 + move a14,@kp_p4_hdnbr + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + .ref clear_secret_powerup_ram + calla clear_secret_powerup_ram + + clr a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + calla WIPEOUT ;Fixed (?) game over stuff + clr a0 ;Fixed (?) game over stuff + move a0,@dtype ;2D ;Fixed (?) game over stuff + + movi LN1b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_game,a4 + calla print_string_C2 + + movi LN2b_setup,a2 + calla setup_message + movi CLSNEUT|TYPTEXT|SUBMES1,a0 + move a0,@mess_objid ;OBJ ID's for text + movi #str_over,a4 + calla print_string_C2 + + movi OBJLST,a10 + jruc #start +#next_obj + move *a10(OID),a0 + cmpi CLSNEUT|TYPTEXT|SUBMES1,a0 + jrne #not_gover + movi 30002,a0 + move a0,*a10(OZPOS) ;higher priority than black window +#not_gover +#start + move *a10,a10,L + jrnz #next_obj + + movk 1,a0 + move a0,@HALT + + movi JOIN_CYCLE_PID,a0 + calla KIL1C + movi CYCPID2,a0 + calla KIL1C + movi CYCPID,a0 + calla KIL1C + + SLEEPK 3 + + movk 1,a0 ;Fixed (?) game over stuff + move a0,@DISPLAYON ;Fixed (?) game over stuff + + movi #pal_t,a10 + movi 64,a11 + CREATE0 fade_down + + SLEEP 2*TSEC + + clr a0 + move a0,@DISPLAYON ;Turn the display off + + .ref result_screen + JSRP result_screen + + SOUND1 tuneend_snd + SOUND1 tune_gmovr + + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + calla WIPEOUT + + SLEEPK 1 + + movk 1,a0 + move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + + jauc amode_start ;Start attract mode + + +#pal_t .long BRSH50R_P,0 + +LN1b_setup + PRINT_STR brush50_ascii,6,0,200,57,BRSH50R_P,0 +LN2b_setup + PRINT_STR brush50_ascii,6,0,200,128,BRSH50R_P,0 +#str_game + .byte "GAME",0 +#str_over + .byte "OVER",0 + .even + +game_ovr_mod + .long BKGDBMOD + .word 0,0 + .long 0 + + + +#************************************************************************* +* Game over processing - called at end of 'CREATE-A-PLAYER' +* + SUBR game_over_processing + + movi AUDBONE,a0 ;DEC CMOS CNT OF GAMES STARTED + movi -1,a1 + calla AUD + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + +; movk 1,a0 +; move a0,@HALT + + clr a1 ;kill all processes + calla KILALL + + clr a1 + move a1,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a1,@player2_data+PR_CREATED_PLYR ;seen in amode + move a1,@player3_data+PR_CREATED_PLYR + move a1,@player4_data+PR_CREATED_PLYR + + calla pal_clean +; clr a0 +; move a0,@DISPLAYON ;Turn the display off + + calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS + +; calla WIPEOUT +; movk 1,a0 +; move a0,@DISPLAYON ;Turn the display back on + clr a0 + move a0,@WFLG + rets + + +#****************************************************************** +* Note: Scratch = A0-A2,A14,B0-B1 +* A9=plyr *obj +* A10=plyr *proc +* A11=plyr # +* A13=plyr_lost *proc + + SUBR update_shoes + +; .if IMGVIEW +; rets +; .endif + + move a11,a0 + sll 5,a0 + addi player_data,a0,L + move *a0,a0,L + move *a0(PR_PRIVILEGES),a0 + jrle #ushs ;br=not a created player + btst 1,a0 ;STEALTH TURBO privilege ? + jrnz #x ;br=yes +#ushs + move @pup_trbstealth,a14 + btst a11,a14 ;Plyr have stealth turbo? + jrnz #x ;br=yes + +; move *a10(plyr_keeppal),a14 +; jrnz #x ;Br=flames on body mode + + movi wht_shoes,a0 ;*pal data +; btst 0,a11 +; jrz #noblk +; movi blk_shoes,a0 ;*pal data +;#noblk + move *a10(PA11),a14,L + move *a14,a14 ;A14=Ctrl bits + btst 6,a14 ;Turbo but down? + jrz #noturb ;br=no + move *a10(plyr_PDATA_p),a14,L ;Deref plyr *proc for *data + move *a14(ply_turbo),a14 ;No turbo left? + jrz #noturb ;br=none left + + move @PSTATUS,a14 + btst a11,a14 ;Plyr human or drone? + jrz #noturb ;br=drone + + movi shoec_t,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #not_2p + movi shoec_t_kit,a0 +#not_2p + move a11,a14 + sll 5,a14 + add a14,a0 + move *a0,a0,L ;*pal data +; btst 0,a11 +; jrz #nogrn +; movi grn_shoes,a0 ;*pal data +;#nogrn + +#noturb + move @GAMSTATE,a14 ;No pal change in attract + cmpi INAMODE,a14 + jrz #x + move *a13(PDATA),a14,L ;Nothing to do if already set + cmp a0,a14 + jrz #x + move a0,*a13(PDATA),L ;Save *pal data + + move *a9(OPAL),a1 + andi 0ff00h,a1 + addi 93,a1 ;!!!Starting color # +; movk 16,a2 ;!!!Color cnt + movk 13,a2 ;!!!Color cnt + calla pal_set +#x + rets + + +shoec_t + .long #blu,#grn,#yel,#red +shoec_t_kit + .long #blu,#blu,#red,#red + +#red +; COLORW 31,0,0 +; COLORW 26,0,0 +; COLORW 20,0,0 +; COLORW 15,0,0 +; COLORW 10,0,0 +;SHOER_P: + .word 07c00h,07000h,06800h,05c00h,05000h,04800h,03c00h + .word 03000h,02800h,01c00h,01000h,00800h,00000h + +; .word 07d06h,07cc4h,07482h +; .word 06c40h,06400h,05800h +; .word 05000h,04800h,03800h +; .word 03000h,02800h,02000h +; .word 01800h,00c00h,00400h +; .word 00000h +#grn +; COLORW 0,(31-7),0 +; COLORW 0,(27-7),0 +; COLORW 0,(22-7),0 +; COLORW 0,(18-7),0 +; COLORW 0,(14-7),0 +;SHOEG_P: + .word 003e0h,00380h,00340h,002e0h,00280h,00240h,001e0h + .word 00180h,00140h,000e0h,00080h,00040h,00000h + +; .word 00b66h,00324h,002e2h +; .word 002a0h,00260h,00200h +; .word 001c0h,001a0h,00160h +; .word 00120h,000e0h,000a0h +; .word 00060h,00000h,00000h +; .word 00000h +#blu +; COLORW 0,10,31 +; COLORW 0,8,27 +; COLORW 0,6,22 +; COLORW 0,4,18 +; COLORW 0,0,14 +;SHOEB_P: + .word 001ffh,001dch,0019ah,00177h,00154h,00112h,000efh + .word 000cch,0008ah,00067h,00044h,00002h,00000h + +; .word 02ddfh,0259fh,01d5fh +; .word 0151fh,00cdeh,0007bh +; .word 00039h,00017h,00015h +; .word 00013h,00011h,0000fh +; .word 0000dh,0000ah,00008h +; .word 00007h +#yel +; COLORW 31,31,0 +; COLORW 27,27,0 +; COLORW 22,22,0 +; COLORW 18,18,0 +; COLORW 14,14,0 +;SHOEY_P: + .word 07fe0h,07380h,06b40h,05ee0h,05280h,04a40h,03de0h + .word 03180h,02940h,01ce0h,01080h,00840h,00000h + + +; .word 07fe6h,07bc4h,07382h +; .word 06b40h,06300h,056a0h +; .word 04e60h,04620h,035a0h +; .word 02d60h,02520h,01ce0h +; .word 014a0h,00840h,00000h +; .word 00000h +wht_shoes +; COLORW 31,31,31 +; COLORW 27,27,27 +; COLORW 22,22,22 +; COLORW 18,18,18 +; COLORW 14,14,14 +; +;SHOEW_P: + .word 077bdh,06f7bh,06318h,05ad6h,04e73h,04631h,039ceh + .word 0318ch,02529h,01ce7h,01084h,00842h,00000h + + +; .word 07fffh,077bdh,06f7bh +; .word 06739h,05ef7h,05294h +; .word 04a52h,04210h,039ceh +; .word 0318ch,0294ah,02108h +; .word 018c6h,00c63h,00421h +; .word 00000h + +;-------------------- + + .if 0 + + SUBR drwnbalogo + + SLEEP 3*60 + movi [3,0],a10 + movi [-300,0],a11 +#drw + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 120 + movi stay,a9 + CREATE0 logo_drift + SLEEP 120 + movi nbalogo,a9 + CREATE0 logo_drift + SLEEP 14*60 + movi [-3,0],a10 + movi [520,0],a11 + jruc #drw + + +logo_drift + + move a11,a0 + movi [40,0],a1 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + move a9,a2 + movi CLSDEAD,a5 + move a10,a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + + SUBR drw_cards +;Turn on backboard and hoop base + movi [200,0],a0 + movi [20,0],a1 + movi bkbd1,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd2,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 +; + movi [200,0],a0 + movi [20,0],a1 + movi bkbd3,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +;Turn on a top card + movi player_t,a10 + + movk 26,a9 + movi [-100,0],a0 + movi [20,0],a1 + movi card_g,a2 + movi >7591,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [1,0],a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 700/3+120 + + jauc DELOBJDIE + +px .equ -100 +py .equ 20 +boxx .equ -100 +boxy .equ 20 + +player_t + .long card_g + .word boxx,boxy + .long r_hbar + .word boxx,boxy + .long r_vbar + .word boxx,boxy + .long AUG_ATL + .word px,py + .long augmon_90 + .word boxx+80,boxy+30 + + .long 0 + +;---> card_g,card_v,l_hbar,l_vbar,r_hbar,r_vbar,lohaus_90,iuzzo_90,mchale_90 +;---> laim_90,edwards_90,gugli_90,augmon_90,barkley_90,benj_90,coleman_90 +;---> daug_90,day_90,divac_90,drexler_90,elliot_90,ellis_90,smith_90 +;---> stockton_90,thomas_90,tisdale_90,ellison_90,ewing_90,gill_90,grant_90 +;---> hardaway_90,harper_90,hawkins_90,horna_90,jackson_90,johnson_90,kemp_90 +;---> laetner_90,lewis_90,majerle_90,malone_90,manning_90,miller_90,mullin_90 +;---> mutumbo_90,mcdan_90,oakley_90,olaj_90,oneal_90,person_90,petro_90 +;---> pippen_90,porter_90,price_90,rice_90,robinson_90,rodman_90,schrempf_90 +;---> seik_90,skiles_90,webb_90,wilkins_90,worthy_90 + + +#******************************** +* Print starring NBA players list + + SUBR starring + + clr a0 + move a0,@HALT + move a0,@IRQSKYE ;background color + + CREATE0 starring_nms + + movi 46,a10 + movi guyhds,a9 + + SLEEPK 20 +#lp +;Do left side + movi [-90,0],a0 + movi [92,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [-90+4,0],a0 + movi [92+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [4,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + +; SLEEPK 10 + +;Do right side + movi [400+4,0],a0 + movi [15+67,0],a1 + move *a9+,a2,L + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi [400,0],a0 + movi [15,0],a1 + movi t_plateV,a2 + movi 1,a3 ;Z + movi DMAWNZ|M_NOCOLL,a4 + movi CLSDEAD,a5 + movi [-5,8000h],a6 + clr a7 + calla BEGINOBJ + + CREATE0 del_me + + movi 22,a11 +#lplp SLEEPK 1 + + calla get_all_buttons_cur2 + jrz #nob + + clr a0 + move a0,@SOUNDSUP ;turn all sounds on + SOUND1 bounce_snd + movk 1,a0 + move a0,@SOUNDSUP ;turn all sounds off + jruc #x +#nob dsj a11,#lplp + dsj a10,#lp + + SLEEP 2ah + +#x calla pal_clean + + RETP + +del_me SLEEP 74h + calla DELOBJA8 + DIE + + +#******************************** +* Print starring NBA players list + + SUBRP starring_nms + + movi #ln0_setup,a2 + calla setup_message + + movi CLSDEAD|124,a0 + move a0,@mess_objid + + movi 195,a0 + move a0,@mess_cursy + movi #str_1,a4 + calla print_string_C2 + + movi #ln0_setup1,a2 + calla setup_message + + movi CLSDEAD|123,a0 + move a0,@mess_objid + + movi 219,a0 + move a0,@mess_cursy + + movi #guys,a10 + + SLEEP 40 + +; clr a9 + +#lp move *a10+,a4,L + jrz #x + calla print_string_C2 + + SLEEPK 11 + + movi 219,a0 + +; XORK 1,a9 +; jrz #tag1 +; movi 224,a0 +;#tag1 + move a0,@mess_cursy + + movi CLSDEAD|123,a0 + calla obj_del1c ;delete text + + jruc #lp +#x + movi CLSDEAD|124,a0 + calla obj_del1c ;delete text + + calla pal_clean + + DIE + + +#guys .long #str_2,#str_3,#str_3a,#str_3b,#str_4,#str_5,#str_5a,#str_5b + .long #str_6,#str_7,#str_7a,#str_8 +; .long #str_7,#str_7a,#str_8 + + .long #str_9,#str_9a,#str_10,#str_11,#str_11a,#str_12,#str_13 + .long #str_13a,#str_13b,#str_14 + .long #str_15,#str_15a,#str_15b,#str_15c,#str_16,#str_17,#str_17a + .long #str_18,#str_19,#str_19a,#str_20 + .long #str_21,#str_21a,#str_43,#str_22,#str_23a,#str_24 + .long #str_24a,#str_25 + .long #str_25b + .long #str_26 + .long #str_27,#str_27a,#str_28,#str_29,#str_29a,#str_29b + .long #str_30,#str_31a +; .long #str_30,#str_31,#str_31a + .long #str_31b,#str_31c,#str_32 + .long #str_33,#str_33a,#str_34,#str_34a,#str_35,#str_36,#str_37 + .long #str_37a,#str_37b,#str_38 +; .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43,#str_43a + .long #str_39,#str_39a,#str_40,#str_41,#str_42,#str_43a + .long #str_43b,#str_44 + .long #str_45,#str_46,#str_47,#str_47a,#str_47b,#str_23,#str_48,#str_49 + .long #str_49a,#str_50 + .long #str_51,#str_51a,#str_52,#str_52a,#str_53,#str_54 + .long #str_55,#str_55a + .long 0 + +#ln0_setup + PRINT_STR brush20_ascii,12,1,200,6,BRSH_W_P,0 + +#ln0_setup1 + PRINT_STR brush20_ascii,12,1,200,6,BRSHGYOP,0 + +#str_1 + .string "STARRING:",0 +#str_2 + .string "Clyde Drexler",0 +#str_3 + .string "Terry Porter",0 +#str_3a + .string "Cliff Robinson",0 +#str_3b + .string "Harvey Grant",0 +#str_4 + .string "James Worthy",0 +#str_5 + .string "Vlade Divac",0 +#str_5a + .string "Anthony Peeler",0 +#str_5b + .string "Elden Campbell",0 +#str_6 + .string "Charles Barkley",0 +#str_7 + .string "Dan Majerle",0 +#str_7a + .string "Kevin Johnson",0 +#str_8 + .string "Dominique Wilkins",0 +; .string "Danny Manning",0 +#str_9 + .string "Ron Harper",0 +#str_9a + .string "Stanley Roberts",0 +#str_10 + .string "Tim Hardaway",0 +#str_11 + .string "Chris Mullin",0 +#str_11a + .string "Chris Webber",0 +#str_12 + .string "Shawn Kemp",0 +#str_13 + .string "Gary Payton",0 +#str_13a + .string "Kendall Gill",0 +#str_13b + .string "Detlef Schrempf",0 +#str_14 + .string "Wayman Tisdale",0 +#str_15 + .string "Spud Webb",0 +#str_15a + .string "Lionel Simmons",0 +#str_15b + .string "Bobby Hurley",0 +#str_15c + .string "Mitch Richmond",0 +#str_16 + .string "Hakeem Olajuwon",0 +#str_17 + .string "Kenny Smith",0 +#str_17a + .string "Sean Elliot",0 +#str_18 + .string "David Robinson",0 +#str_19 + .string "Dale Ellis",0 +#str_19a + .string "Dennis Rodman",0 +#str_20 + .string "Karl Malone",0 +#str_21 + .string "David Benoit",0 +#str_21a + .string "John Stockton",0 +;#str_21b +; .string "Stephen Howard",0 +#str_22 + .string "Jamal Mashburn",0 +#str_23 + .string "Derek Harper",0 +#str_23a + .string "Jimmy Jackson",0 +#str_24 + .string "Christian Laettner",0 +#str_24a + .string "Isaiah Rider",0 +#str_25 + .string "Chuck Person",0 +;#str_25a +; .string "Tony Scott",0 +#str_25b + .string "Willie Morris Jr.",0 +#str_26 + .string "Dikembe Mutombo",0 +#str_27 + .string "Laphonso Ellis",0 +#str_27a + .string "Rodney Rogers",0 +#str_28 + .string "Scottie Pippen",0 +#str_29 + .string "Horace Grant",0 +#str_29a + .string "B.J. Armstrong",0 +#str_29b + .string "Toni Kukoc",0 +#str_30 + .string "Isiah Thomas",0 +;#str_31 +; .string "Bill Laimbeer",0 +#str_31a + .string "Joe Dumars",0 +#str_31b + .string "Lindsey Hunter",0 +#str_31c + .string "Robert Horry",0 +#str_32 + .string "Reggie Miller",0 +#str_33 + .string "Rik Smits",0 +#str_33a + .string "Malik Sealy",0 +#str_34 + .string "Mark Price",0 +#str_34a + .string "Larry Nance",0 +#str_35 + .string "Brad Daughrty",0 +#str_36 + .string "Brad Lohaus",0 +#str_37 + .string "Blue Edwards",0 +#str_37a + .string "Vin Baker",0 +#str_37b + .string "Todd Day",0 +#str_38 + .string "Danny Manning",0 +; .string "Dominique Wilkins",0 +#str_39 + .string "Stacey Augmon",0 +#str_39a + .string "Kevin Willis",0 +#str_40 + .string "Larry Johnson",0 +#str_41 + .string "Alonzo Mourning",0 +#str_42 + .string "Hersey Hawkins",0 +#str_43 + .string "Jeff Hornacek",0 +#str_43a + .string "Shawn Bradley ",0 +#str_43b + .string "Clarence Weatherspoon",0 +#str_44 + .string "Xavier McDaniel",0 +#str_45 + .string "Dee Brown",0 +#str_45a + .string "Kevin Gamble",0 +#str_46 + .string "Patrick Ewing",0 +#str_47 + .string "Charles Oakley",0 +#str_47a + .string "Anthony Mason",0 +#str_47b + .string "John Starks",0 +#str_48 + .string "Derrick Coleman",0 +#str_49 + .string "Kenny Anderson",0 +#str_49a + .string "Benoit Benjamin",0 +#str_50 + .string "Tom Gugliotta",0 +#str_51 + .string "Pervis Ellison",0 +#str_51a + .string "Calbert Cheaney",0 +#str_52 + .string "Nick Anderson",0 +#str_52a + .string "Scott Skiles",0 +#str_53 + .string "Anfernee Hardaway",0 +;#str_53a +; .string "Mike Iuzzolino",0 +#str_54 + .string "Glen Rice",0 +#str_55 + .string "Rony Seikaly",0 +#str_55a + .string "Harold Miner",0 + + .even + .endif + + .end + + + diff --git a/SRC/SCREEN.ASM b/SRC/SCREEN.ASM new file mode 100644 index 0000000..566adcd --- /dev/null +++ b/SRC/SCREEN.ASM @@ -0,0 +1,995 @@ +;----------------------------------------------------------------------------- +* +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-26-95 +; +; COPYRIGHT (C) 1995 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 8/24/95 +;----------------------------------------------------------------------------- + .file "screen.asm" + .title "screen transition effects" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .asg 0,SEQT + .include "plyr.equ" + + +MAX_OBJS equ 20 +OBJ_Z_VAL equ 30005 +RAM_OBJ_SIZE equ (32+(16*2)) +SKIP_ALT_TBL_PTR equ 32 + + + .def do_scrn_transition + .def wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .def wipe_horizontal,un_wipe_horizontal + .def wipe_stack_vertical,un_wipe_vertical + .def wipe_horz_comb + .def wipe_stack_vert_up + .def wipe_center_up_dwn,unwipe_center_up_dwn + .def transition_flag + .def CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .def NO_CREATE_DEL_OBJS,NO_CREATE_NO_DEL_OBJS + + .ref dpageflip,dtype + .ref del_transition_objs + .ref get_all_buttons_cur,get_all_buttons_down + .ref HALT + .ref snd_play1 + .ref trns1_snd,trns2_snd,trns3_snd,trns4_snd + .ref trnd1_snd,trnd2_snd,trnd3_snd,trnd4_snd + .ref untrns1_snd,untrns2_snd,untrns3_snd,untrns4_snd + .ref gmqrtr + + + .bss num_objects,16 + .bss trans_tbl_ptr,32 + .bss del_flag,16 + .bss transition_flag,16 ;0=no transition goin, else 1 + + .bss obj_data,RAM_OBJ_SIZE*MAX_OBJS ;ptr. to obj,xvel,yvel + .bss my_halt,16 + ;delay cnt,indx cnt + + .text + +; +; Options for TRANSITION effects +; +CREATE_NO_DEL_OBJS equ 0 ;create objs., move them +CREATE_DEL_OBJS equ 1 ;create objs., move them and delete +NO_CREATE_NO_DEL_OBJS equ 2 ;no create objs, move previous +NO_CREATE_DEL_OBJS equ 3 ;no create objs, move previous, delete + + +LWWWWWWWLLL .macro l1,w,w2,w3,w4,w5,w6,w7,l4,l5,l6 + .long :l1: + .word :w:,:w2:,:w3:,:w4:,:w5:,:w6:,:w7: + .long :l4:,:l5:,:l6: + .endm + +LINE_LENGTH .equ (32+(16*7)+(32*3)) + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +; +; NOTE: If you want to add a transition effect. +; +; 1) MUST follow format of one the existing tables +; 2) .def your table name +; 3) Must end table with '4000' +; 4) Dont have more than MAX_OBJS +; +; +; DEFINITION of each table line: +; 1) IMG - ptr to img to use as transition obj +; 2) STARTX - starting X coor. of above obj. +; 3) STARTY - starting Y coor. of above obj. +; 4) ENDX - ending X coor. of above obj. +; 5) ENDY - ending Y coor. of above obj. +; 6) TICKS - ticks to reach destination +; 7) DELAY - Nbr. tick delay before animate this object +; 8) INDEX - starting offset into anim. table (param passed to below rts) +; 9) ROUTINE - routine to call before obj. is moved (every time) +; + + .asg 0,NO_DELAY + .asg 0,NO_INDX + +; +;ROM transition table offsets +; + .asg 0,IMGPTR + .asg 32,STARTX + .asg 48,STARTY + .asg 64,ENDX + .asg 80,ENDY + .asg 96,TICKS_TO_DEST + .asg 112,DELAY_CNT + .asg 128,INDEX_CNT + .asg 144,ROUTINE + .asg 176,STRT_SND_PTR + .asg 208,END_SND_PTR + +;RAM obj. data table offsets + .asg 0,OBJ_PTR + .asg 32,DELAY_CNT_RAM + .asg 48,INDEX_CNT_RAM + + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_center_up_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,13,15,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 29,15,10,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 61,15, 5,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-41,-6, 93,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,125,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,157,15, 5,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,189,15,10,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,259,-6,221,15,15,1,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +unwipe_center_up_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,-35,15, 0,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,-35,15, 5,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,-35,15,10,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,-35,15,15,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,15,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15,10,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 5,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +wipe_horz_stag_dwn + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01, 400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR01, 400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR01,-414,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR01, 400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR01,-414,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_stag_dwn + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR01,-6, -3,-414, -3,13, 0,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6, 29, 400, 29,13, 3,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6, 61,-414, 61,13, 6,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6, 93, 400, 93,13, 9,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR01,-6,125,-414,125,13,12,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR01,-6,157, 400,157,13,15,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR01,-6,189,-414,189,13,18,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR01,-6,221, 400,221,13,21,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horizontal + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,400, -3,-6, -3,15, 0,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400, 29,-6, 29,15, 3,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400, 61,-6, 61,15, 6,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400, 93,-6, 93,15, 9,0,chg_img_hor,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,400,125,-6,125,15,12,0,chg_img_hor,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,400,157,-6,157,15,15,0,chg_img_hor,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,400,189,-6,189,15,18,0,chg_img_hor,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,400,221,-6,221,15,21,0,chg_img_hor,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_comb + .long wipe_horz_fast ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,15,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,15,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,15,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,15,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,15,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horizontal + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-406, -3,13,21,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-406, 29,13,18,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-406, 61,13,15,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-406, 93,13,12,0,chg_img_hor,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-406,125,13, 9,0,chg_img_hor,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-406,157,13, 6,0,chg_img_hor,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-406,189,13, 3,0,chg_img_hor,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-406,221,13, 0,0,chg_img_hor,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vert_up + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,256,-6, -3,15, 0,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 29,15, 4,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 61,15, 8,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6, 93,15,12,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,125,15,16,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,157,15,20,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,189,15,24,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,256,-6,221,15,28,2,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_stack_vertical + .long wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6,-41,-6, -3,15,28,1,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 29,15,24,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 61,15,20,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6, 93,15,16,0,chg_img_vert,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,125,15,12,0,chg_img_vert,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,157,15, 8,0,chg_img_vert,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,189,15, 4,0,chg_img_vert,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-6,-35,-6,221,15, 0,0,chg_img_vert,trns4_snd,trnd4_snd + .long 4000 + .even + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_vertical + .long un_wipe_horz_fast ;(fast version) + LWWWWWWWLLL TRANBR15,-6, -3,-6,256,15,28,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29,-6,256,15,24,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-6,256,15,20,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93,-6,256,15,16,0,chg_img_vert,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-6,256,15,12,0,chg_img_vert,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157,-6,256,15, 8,0,chg_img_vert,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-6,256,15, 4,0,chg_img_vert,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221,-6,256,15, 0,0,chg_img_vert,untrns4_snd,0 + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15, 400, -3,-6, -3,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414, 29,-6, 29,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400, 61,-6, 61,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414, 93,-6, 93,10,0,0,simply_rets,trns4_snd,trnd4_snd + LWWWWWWWLLL TRANBR15, 400,125,-6,125,10,0,0,simply_rets,trns1_snd,trnd1_snd + LWWWWWWWLLL TRANBR15,-414,157,-6,157,10,0,0,simply_rets,trns2_snd,trnd2_snd + LWWWWWWWLLL TRANBR15, 400,189,-6,189,10,0,0,simply_rets,trns3_snd,trnd3_snd + LWWWWWWWLLL TRANBR15,-414,221,-6,221,10,0,0,simply_rets,trns4_snd,trnd4_snd + .long 4000 + .even + + +; +; img, startX, startY, endX, endY, ticks 2 dest +; delay cnt, index pos., routine to call, sound +; +un_wipe_horz_fast + .long 0 ;alternate effect + LWWWWWWWLLL TRANBR15,-6, -3,-414, -3,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6, 29, 400, 29,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6, 61,-414, 61,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6, 93, 400, 93,8,0,0,simply_rets,untrns4_snd,0 + LWWWWWWWLLL TRANBR15,-6,125,-414,125,8,0,0,simply_rets,untrns1_snd,0 + LWWWWWWWLLL TRANBR15,-6,157, 400,157,8,0,0,simply_rets,untrns2_snd,0 + LWWWWWWWLLL TRANBR15,-6,189,-414,189,8,0,0,simply_rets,untrns3_snd,0 + LWWWWWWWLLL TRANBR15,-6,221, 400,221,8,0,0,simply_rets,untrns4_snd,0 + .long 4000 + .even + + + +;----------- CODE ------------ +;----------- CODE ------------ +;----------- CODE ------------ + +transition_option_tbl + .word 0,0 ;create objs, dont delete obj. when done + .word 0,1 ;create objs, delete obj. when done + .word 1,0 ;dont create objs, dont delete obj. when done + .word 1,1 ;dont create objs, delete obj. when done + + +;----------------------------------------------------------------------------- +; This routine reads and performs the actions from a TRANSITION TABLE SCRIPT +; +; must be JSRP'd +; +; INPUT: reg. a0 : ptr. to transition definition table +; reg. a14 : option +; +; destroys: a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14 +;----------------------------------------------------------------------------- + SUBRP do_scrn_transition + + move @HALT,a1 + move a1,@my_halt + clr a1 + move a1,@HALT + + move a0,@trans_tbl_ptr,L ;save TRANSITION table ptr. + + movk 1,a0 + move a0,@transition_flag ;in TRANSITION state + +;set options + sll 5,a14 ;*32 + addi transition_option_tbl,a14,L + move *a14(16),a0 + move a0,@del_flag ;delete flag + +; if a button is down, change effect to a super fast transition + + move @gmqrtr,a0 + jrgt nbtn_1 ;dont allow fast tran. in game + + calla get_all_buttons_cur + jreq nbtn_1 + move @trans_tbl_ptr,a0,L + move *a0,a0,L ;get alternate effect ptr. + jreq nbtn_1 ;if zero, regular + move a0,@trans_tbl_ptr,L ;save new TRANSITION table ptr. + +;if a0=1 then NO OBJECTS ARE CREATED...assumes prior transition effect +nbtn_1 + move *a14,a0 ;create objs. flag + jrne dst_1a ;br=dont create objs. +; +; Create objects in TRANSITION effect table +; + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr. + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L + clr a0 + move a0,@num_objects + + movi OBJ_Z_VAL,a3 ;z pos (ABOVE EVERYTHING) + movi TRANS_OBJ_ID,a5 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel +dst_1 + move *a10(IMGPTR),a2,L ;get ptr. to img + move *a10(STARTX),a0 ;get X coor. + sll 16,a0 + move *a10(STARTY),a1 ;get Y coor. + sll 16,a1 + calla BEGINOBJ2 + move a8,*a9(OBJ_PTR),L ;save ptr. to obj. + + move @num_objects,a0 + inc a0 + move a0,@num_objects + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;next transition obj. setup line + + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne dst_1 ;br=nope +dst_1a + callr set_obj_ram +; +; Now watch the objects +; +dst_3 + SLEEPK 1 + callr maybe_set_obj_velocity + callr call_all_table_routines + calla calc_num_objs_at_dest + move @num_objects,a0 + cmp a0,a14 ;ALL objs. reached dest. ? + jrlo dst_3 ;br=nope + + move @del_flag,a14 + jreq dos_2 ;br=dont delete objects. + +;dont clear flag if not deleting objs. (cant seen screen) + clr a0 + move a0,@transition_flag ;in TRANSITION state + + movi TRANS_OBJ_ID,a0 + calla del_transition_objs ;delete transition effect objs. + calla clear_trans_obj_data_ram +dos_2 +; SLEEPK 1 ;hide bog caused by RETP + + move @my_halt,a14 + move a14,@HALT + RETP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR maybe_set_obj_velocity + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +uodc_0 + move *a9(OBJ_PTR),a8,L ;get obj. ptr. + move *a9(DELAY_CNT_RAM),a1 ;get current delay count + jrn uodc_1 ;br=velocity already set + dec a1 + move a1,*a9(DELAY_CNT_RAM) ;store updated delay count + move a1,a1 ;is delay = -1 + jrnn uodc_1 ;br= nope, exit + callr set_obj_velocity + + move *a10(STRT_SND_PTR),a0,L + jrz uodc_1 + PUSH a14 + calla snd_play1 + PULL a14 + +uodc_1 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne uodc_0 + rets + +;----------------------------------------------------------------------------- +; This routine just computes the obj. velocity based on START X,Y and END X,Y +; and the TICK_TO_DEST variable +; +; INPUT: a10 - ptr. to tranisition table +; a8 - ptr. to obj. ram area +;----------------------------------------------------------------------------- + SUBR set_obj_velocity + +;compute X velocity + move *a10(ENDX),a1 + move *a10(STARTX),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 ;dont do a 64 bit divide + move a1,*a8(OXVEL),L + +;compute Y velocity + move *a10(ENDY),a1 + move *a10(STARTY),a0 + sub a0,a1 + sll 16,a1 + move *a10(TICKS_TO_DEST),a0 + divs a0,a1 + move a1,*a8(OYVEL),L + rets + +;----------------------------------------------------------------------------- +; This routine sets all the DELAYS and INDEXes for each object in the +; transition table +;----------------------------------------------------------------------------- + SUBR set_obj_ram + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +sor_0 + move *a10(DELAY_CNT),a0 + move a0,*a9(DELAY_CNT_RAM) ;set DELAY count + + move *a10(INDEX_CNT),a0 + move a0,*a9(INDEX_CNT_RAM) ;set INDEX count + + addi RAM_OBJ_SIZE,a9,L ;next obj. ram area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne sor_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR call_all_table_routines + + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +catr_1 + move *a9(OBJ_PTR),a8,L + jrz catr_2 ;br=invalid obj...no routine + move *a9(DELAY_CNT_RAM),a0 + jrnn catr_2 ;obj. is waiting to move..no routine + move *a10(ROUTINE),a0,L + call a0 +catr_2 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne catr_1 + rets + +;----------------------------------------------------------------------------- +; This routine calculates the number of objects at their destination +; +; returns: a14 = count +;----------------------------------------------------------------------------- + SUBR calc_num_objs_at_dest + + clr a14 + move @trans_tbl_ptr,a10,L ;get TRANSITION table ptr + addi SKIP_ALT_TBL_PTR,a10 ;bypass other trans. tbl ptr. + movi obj_data,a9,L +cno_1 + move *a9(OBJ_PTR),a8,L + +;ignore object until its delay time is negative + move *a9(DELAY_CNT_RAM),a0 ;is object animating..yet ? + jrnn cno_3 ;br=nope + + move *a8(OXVEL),a0,L + jrnz cno_1aa + move *a8(OYVEL),a0,L + jrz cno_2c ;obj. has no VELOCITY, skip +cno_1aa + move *a8(OXVEL),a1,L + jrn cno_1a ;br=negative VELOCTIY + + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at X dest. + jruc cno_1b +cno_1a + move *a8(OXVAL),a0,L + move *a10(ENDX),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at X dest. + +;obj. at X dest. now see if at Y dest. + +cno_1b + move *a8(OYVEL),a1,L + jrn cno_2a ;br=negative VELOCTIY + + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrgt cno_3 ;br=obj. not at Y dest. + jruc cno_2b +cno_2a + move *a8(OYVAL),a0,L + move *a10(ENDY),a1 + sll 16,a1 + cmp a0,a1 + jrlt cno_3 ;br=obj. not at Y dest. + +;stop object from moving (and set OXVAL to ENDX,Y) + +cno_2b clr a0 + move a0,*a8(OYVEL),L + move a0,*a8(OXVEL),L + +;just in case obj. moved passed ENDX,ENDY + move *a10(ENDX),a1 + sll 16,a1 + move a1,*a8(OXVAL),L + move *a10(ENDY),a1,L + sll 16,a1 + move a1,*a8(OYVAL),L + + move *a10(END_SND_PTR),a0,L + jrz cno_2c + PUSH a14 + calla snd_play1 + PULL a14 + +cno_2c + inc a14 +cno_3 + addi RAM_OBJ_SIZE,a9,L ;next obj. ram data area + addi LINE_LENGTH,a10,L ;add offset to table pointer + move *a10,a0,L ;check for end of table + cmpi 4000,a0 ;at end of table ? + jrne cno_1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR clear_trans_obj_data_ram + + movi MAX_OBJS,a0 ;counter + movi obj_data,a1,L + clr a14 +ctop_1 move a14,*a1+,L ;1 long and 2 words + move a14,*a1+,L + dsj a0,ctop_1 + rets + + +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ +;----------- TRANSITION ACTION ROUTINES ------------ + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_obj_to_gone +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_down_tbl,a0,L ;pt. to next scale factor +; cmpi scale_down_tbl_end,a0 ;at end of table ? +; jrhs sotg_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;sotg_1 rets + +;----------------------------------------------------------------------------- +; This routine (called from TRANSITION table) scales the obj. +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR scale_upward +; +; move *a9(INDEX_CNT_RAM),a0 +; inc a0 +; move a0,a14 +; sll 5,a0 +; addi scale_up_tbl,a0,L ;pt. to next scale factor +; cmpi scale_up_tbl_end,a0 ;at end of table ? +; jrhs su_1 +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a0,a0,L ;get scale factor +; move a0,*a8(OSCALE),L +;su_1 rets +; + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +; SUBR rotate_left +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_left_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_left_tbl_end,a1 ;at end of table ? +; jrhs rl_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rl_1 rets + +;----------------------------------------------------------------------------- +; This routine scales and spins obj. downward to destination +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- +; SUBR rotate_right +; +; move *a9(INDEX_CNT_RAM),a1 +; inc a1 +; move a1,a14 +; sll 5,a1 +; addi rotate_right_tbl,a1 ;pt. at scale factor and frame +; cmpi rotate_right_tbl_end,a1 ;at end of table ? +; jrhs rr_1 ;br=yes +; move a14,*a9(INDEX_CNT_RAM) ;save new count +; move *a1,a0,L ;NEW img +; movi DMAWNZ|M_SCRNREL,a1 ;DMA flags +; calla obj_aniq +;rr_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Vertical wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_vert + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_vert_img_tbl,a0,L + cmpi wipe_vert_img_tbl_end,a0,L ;at end of table ? + jrhs civw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +civw_1 rets + +;----------------------------------------------------------------------------- +; This routine changes the image for the Horizontal wipe +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR chg_img_hor + + move *a9(INDEX_CNT_RAM),a0 + inc a0 + move a0,a14 + sll 5,a0 + addi wipe_hor_img_tbl,a0,L + cmpi wipe_hor_img_tbl_end,a0,L ;at end of table ? + jrhs cihw_1 ;br=yes + move a14,*a9(INDEX_CNT_RAM) ;save new count + move *a0,a0,L ;NEW img + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq +cihw_1 rets + +;----------------------------------------------------------------------------- +; A dummy routine for TRANSITION effect tables +; +; INPUT: a8 - ptr. to obj +; a9 - ptr. to obj ram area +; a10 - ptr. to transition table +;----------------------------------------------------------------------------- + SUBR simply_rets + rets + + + +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ +;----------- DATA TABLES ------------ + +;scale_down_tbl +; .long 01000100H +; .long 01200120H +; .long 01400140H +; .long 01600160H +; .long 01800180H +; .long 02000200H +; .long 02200220H +; .long 02400240H +; .long 02600260H +; .long 02800280H +; .long 03000300H +; .long 03200320H +; .long 03400340H +;scale_down_tbl_end +; +; +;scale_up_tbl +; .long 03400340H +; .long 03200320H +; .long 03000300H +; .long 02800280H +; .long 02600260H +; .long 02400240H +; .long 02200220H +; .long 02000200H +; .long 01800180H +; .long 01600160H +; .long 01400140H +; .long 01200120H +; .long 01000100H +;scale_up_tbl_end +; +; +;rotate_left_tbl +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN10 +; .long NBASPN10 +; .long NBASPN11 +; .long NBASPN11 +; .long NBASPN12 +; .long NBASPN12 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN07 +;rotate_left_tbl_end +; +; +;rotate_right_tbl +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +; .long NBASPN14 +; .long NBASPN14 +; .long NBASPN13 +; .long NBASPN13 +; .long NBASPN12 +; .long NBASPN11 +; .long NBASPN10 +; .long NBASPN09 +; .long NBASPN09 +; .long NBASPN08 +; .long NBASPN08 +; .long NBASPN07 +; .long NBASPN07 +; .long NBASPN06 +; .long NBASPN06 +; .long NBASPN05 +; .long NBASPN05 +; .long NBASPN04 +; .long NBASPN04 +; .long NBASPN03 +; .long NBASPN03 +; .long NBASPN02 +; .long NBASPN02 +; .long NBASPN01 +; .long NBASPN01 +; .long NBASPN15 +; .long NBASPN15 +;rotate_right_tbl_end + + +wipe_hor_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_hor_img_tbl_end + +wipe_vert_img_tbl + .long TRANBR01 + .long TRANBR02 + .long TRANBR03 + .long TRANBR04 + .long TRANBR05 + .long TRANBR06 + .long TRANBR06 + .long TRANBR07 + .long TRANBR08 + .long TRANBR09 + .long TRANBR09 + .long TRANBR10 + .long TRANBR11 + .long TRANBR12 + .long TRANBR13 + .long TRANBR13 + .long TRANBR14 + .long TRANBR15 + .long TRANBR15 +wipe_vert_img_tbl_end + +****************************************************************************** + .end + diff --git a/SRC/SELECT.ASM b/SRC/SELECT.ASM new file mode 100644 index 0000000..900db47 --- /dev/null +++ b/SRC/SELECT.ASM @@ -0,0 +1,6432 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 5-5-95 +; +; Modified: +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 1/15/93 15:29 +;.Last mod - 5/21/95 +;----------------------------------------------------------------------------- + .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 "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "credturb.glo" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" +; .include "mugshot.glo" + .ref RAD_MK2 + + .include "imgtblp.glo" + .include "imgpalm.asm" + .include "imgtblm.glo" + + .def RODMANBP + .def RODMANKP + .def RODMANOP + .def RODMANPP + .def RODMANRP + .def RODMANWP + .def RODMANYP + .def RODMANGP + + .ref censor_players_name + .ref player_heads,player_names ;table addr. + .ref our_names,our_heads + .ref player_attribs ;table addr. + .ref print_players_name + .ref mess_objid + .ref options_screen + .ref del_option_screen_stuff + .ref do_scrn_transition + .ref un_wipe_vertical + .ref wipe_stack_vert_up + .ref wipe_horz_stag_dwn,un_wipe_horz_stag_dwn + .ref wipe_horizontal,un_wipe_horizontal + .ref NO_CREATE_DEL_OBJS,CREATE_NO_DEL_OBJS + .ref transition_flag + .ref create_player_head_backdrops + .ref print_name + .ref delete_team_city_names + .ref create_name_backplate + .ref create_plr_mugshots_tbl + + .ref buyin_screen + .ref bast8_ascii,bast8t_ascii + .ref kill_countdown_timer + .ref create_name_objs + .ref blink_tmslct + .ref del_name_backplates + .ref print_subsitution_title + .ref flash_backdrop,print_subsitution_directions + .ref del_winner_stay_free_msg + .ref team_sqaud_cnts + .ref create_team_squad_nbr + .ref update_team_squad_nbr + .ref update_player_head_backdrop + .ref cpu_subs + .ref setup_speech +;DJT Start + .ref set_names,plyrname_fix +;DJT End + .ref print_team_stats + .ref del_team_stats + .ref plyr_plaques + .ref script_play1 +;DJT Start +;DJT refs moved down to references + .ref ask_yes_no,del_yes_no_buttons +;DJT End + .ref create_title_bar + .ref wipe_center_up_dwn + .ref tm_sel_cur1,tm_sel_cur2 + .ref tm_sel_hd_l1,tm_sel_hd_l2 + .ref tm_sel_hd_r1,tm_sel_hd_r2 + .ref tm_sel_sel1,tm_sel_sel2 + .ref tm_sel_ran1,tm_sel_ran2 + .ref tm_sel_stats + .ref tuneend_snd + .ref hide_plyr_attribs + .ref sel_rndmend1,sel_rndmend2 + .ref T_HAWKS + .ref BALLBAK1 + + .def plate1_objs,plate2_objs + .def tm1_cur_pos,tm2_cur_pos + .def update_statbox_images + .def create_menu,create_pin_nbr_objs + .def pin_nbr_table,name_table + .def save_selection + .def move_cursor,update_cursor + .def button_actions + .def scrnrel_off + .def tm1_random_cycle_cnt,tm2_random_cycle_cnt + .def tm1_random_team_nbr,tm2_random_team_nbr + .def create_plyr + .def p1_pin_nbr,p2_pin_nbr,p3_pin_nbr,p4_pin_nbr + .def create_and_watch_credits + .def create_credit_plate + .def cur_pos ;cursor pos. 0,1 or 2 on OPTIONS scrn + .def TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + + .bss p1_pin_nbr,16*4 ;4 digit pin number + .bss p2_pin_nbr,16*4 ;4 digit pin number + .bss p3_pin_nbr,16*4 ;4 digit pin number + .bss p4_pin_nbr,16*4 ;4 digit pin number + + .bss create_plyr,16 ;-1=can't create plyr, 0=could, 1=creating + + .bss lastjoy1,16 + .bss lastjoy2,16 + .bss joyholdcnt1,16 + .bss joyholdcnt2,16 + .bss tm1_random_sel,16 ;flag=1 if random selecting + .bss tm2_random_sel,16 ;flag=1 if random selecting + .bss tm1_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm2_random_team_nbr,16 ;team nbr. to goto if random select + .bss tm1_random_cycle_cnt,16 ;moves before goto random team + .bss tm2_random_cycle_cnt,16 ;moves before goto random team + .bss cur_pos,16 ;cursor pos. 0,1 or 2 on OPTIONS scrn + + .bss tm1_show_tm_stats,16 ;0=dont show, else show stats + .bss tm2_show_tm_stats,16 ;0=dont show, else show stats + + .def delete_text + .def obj_on,obj_off + +;DJT Start +;DJT Not needed here +;DJT End + .ref design_player + .ref logos + .ref city_table_start + .ref city_table_end + .ref TUBE_G_P,TUBE_O_P,TUBE_Y_P,TUBE_R_P + + .def get_teams_pop + .def game_purchased + .def initials_entry + + .ref create_team_sel_header + .ref OBJOFF,OBJON + .ref challenger2 + .ref challenger + .ref attrib_off + .ref attrib_on + .ref update_attribs + .ref check_suckup + .ref ingame_mess + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .ref get_all_sticks_cur + .ref get_all_sticks_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_special_initials + + .ref call_team_name + .ref CR_CONTP + .ref qtr_purchased + .ref gmqrtr + .ref fullgame_purchased + + .ref message_buffer + .ref print_string_C + .ref mess_cursx,copy_string + .ref mess_line_spacing + .ref setup_message,print_string_C2 + .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 scores + + .ref DELBOBJ + .ref cursor_snd1,cursor_snd2 + .ref cursor_snd3,cursor_snd4 + .ref select_snd1,select_snd2 + .ref select_snd3,select_snd4 + .ref welcome_sc,adv_stats +;DJT ref moved down to reference +;; .ref winner_stays_msg + .ref show_create_plyr_info + .ref creditscreen + +; +; Sounds +; + +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 + + .ref name_sort + +;symbols defined externally + + .global player1_data,player2_data,player3_data,player4_data + + .ref pup_strongmen + .ref show_hiscore + .ref show_player_records + .ref GET_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 + .ref create_team_city_names + + .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 + BSSX 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 ;name...then stats (ie. speed..) + BSSX attrib2_obj, 32*9 + BSSX attrib3_obj, 32*9 + BSSX attrib4_obj, 32*9 + + + BSSX head1_obj, 32 + BSSX head2_obj, 32 + BSSX head3_obj, 32 + BSSX head4_obj, 32 + BSSX head5_obj, 32 + BSSX head6_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,32 ;plate behind team1 heads + .bss plate2_objs,32 ;plate behind team2 heads + + BSSX force_selection,16 + BSSX in_team_select,16 + BSSX in_team_subs,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 + + .bss tm1_cur_pos,16 + .bss tm2_cur_pos,16 + + BSSX tm1set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team1 + BSSX tm2set,(NUM_TEAMS+1)*16 ;array holds head combo. 4 team2 + + .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 p1_hide_atts,16 + .bss p2_hide_atts,16 + .bss p3_hide_atts,16 + .bss p4_hide_atts,16 + + .bss fixbug,16 + + .text + +NORM_LINEUP_COMBOS equ 5 ;0-5 +EXPND_LINEUP_COMBOS equ 25 ;0-25 + +SCROLL_SPEED equ 8 + +XTRA_CRTIME equ >7fff ;20*60 +MAX_CRTIME equ >7fff ;30*60 + +PSEL_START_DELAY equ 22 ;# frames before repeating +PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat + +MENU_LEVELS equ 2 ;for enter initials + + +;equates for team select +TM_NAMES_ON_SCRN equ 7 +MIDDLE_TEAM_NAME equ 4 + +;DJT Start +;DJT Not needed here +;DJT End + + + +;Destination Y coor. for 'TOP TEN PLAYER' plaques..etc + .asg 183,PLAQUE_Y + +#***************************************************************************** +; New team selection screen +;----------------------------------------------------------------------------- + SUBR new_team_select_screen + + +;wipe obj. over screen + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + + calla del_option_screen_stuff + + movi team_select_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz ntss_1 + movi team_select_mod,a0 +ntss_1 move a0,@BAKMODS,L + calla BGND_UD1 + + clr a0 + .ref rodman_colors + move a0,@rodman_colors,L + move a0,@exit_status + move a0,@force_selection + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + + clr a10 + CREATE0 challenger2 + movk 1,a10 + CREATE0 challenger2 + + calla create_team_sel_header + clr a0 + calla create_player_head_backdrops + + clr a0 ;atlanta first (init. hi-lighted name) + calla create_logos + clr a0 + calla create_player_heads + calla create_player_names + + callr setup_random_team_select_ram + + CREATE TEAM1_SEL_PID,team1_team_select + CREATE TEAM2_SEL_PID,team2_team_select + + movk 1,a0 + move a0,@in_team_select + calla delete_text + calla del_offscreen_bobjs + + CREATE0 blink_tmslct + + SLEEPK 3 + + calla update_logos + calla update_player_heads + calla update_player_names + +;wipe objs off screen -- reveal new screen + movi un_wipe_horz_stag_dwn,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + SLEEPK 1 + + .ref best_player_plaques + CREATE0 best_player_plaques + + SUBRP subs_in + +;I took this out, cause we no longer have EXPANED rosters +; +; 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 ALL_TMS_DEFEATD,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 ALL_TMS_DEFEATD,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 28*TSEC,a10 + CREATE CNTDWN_PID,timeout + +#wait_loop + SLEEPK 1 + calla update_logos + calla update_player_names + calla update_player_heads + + move @exit_status,a0 + jrnz #wait_loop + + calla kill_countdown_timer +; 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_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 + movi 40,a10 +#wait_loop3 + SLEEPK 1 + PUSH a10 + calla update_logos + calla update_player_names + calla update_player_heads + PULL a10 + dsj a10,#wait_loop3 + RETP + + + .asg 32,TEAM_NBR +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team1_team_nbr + + move @tm1_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team1 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR set_team2_team_nbr + + move @tm2_cur_pos,a14 + addi MIDDLE_TEAM_NAME-1,a14 ;wasn't zero relative + move a14,a0 + sll 4,a14 + sll 5,a0 + add a0,a14 + addi city_table_start,a14 + move *a14(TEAM_NBR),a14 + move a14,@team2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team2_city_names + + move @tm2_cur_pos,a14 + movi [TM2_X+7,0],a0,L + movi TM2_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team1_city_names + + move @tm1_cur_pos,a14 + movi [TM1_X-84,0],a0,L + movi TM1_NAME_OBJS,a5 + calla create_team_city_names + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR setup_random_team_select_ram + + clr a0 + move a0,@tm1_random_sel ;not in random select mode + move a0,@tm2_random_sel ;not in random select mode + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm1_random_team_nbr + movi NUM_TEAMS-1,a0 ;0-29 + calla RNDRNG0 ;random team + move a0,@tm2_random_team_nbr + movk 15,a0 + move a0,@tm1_random_cycle_cnt + move a0,@tm2_random_cycle_cnt + rets + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP and DOWN) and plots +; the city names based on joystick movement +;----------------------------------------------------------------------------- + SUBRP team1_team_select + +#wait_for_players + SLEEPK 2 + move @PSTATUS,a0 + andi 011b,a0 ;did player 1 or 2 buyin ? + jrz #wait_for_players ;br=nope...not yet +; +; player 1 and/or 2 active +; + move @exit_status,a0 + ori 1<<0,a0 + move a0,@exit_status ;exit + + clr a0 + calla update_player_head_backdrop + clr a0 + calla create_team_squad_nbr + move a8,@teamset1_obj,L + + CREATE0 team1_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitution + + CREATE0 team1_random_select + clr a9 + calla create_name_backplate + clr a0 + move a0,@tm1_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 + move a0,@team1 + calla create_team1_city_names + + clr a0 + move a0,@lastjoy1 ;no joystick data..yet + move a0,@joyholdcnt1 +#rj_1 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj1_die ;br=in halftime substitutions + + callr update_tm1_rnd_select_ram +;DJT Start + move @tm1_cur_pos,a2 +;DJT End + move @tm1_random_sel,a0 + jrn #rj_1 ;br=done picking random team + jrgt #ju1 ;br=still picking random team + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy1,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_1a + move a0,@lastjoy1 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt1 + jruc #rj_1b +#rj_1a + move @joyholdcnt1,a14 + jrz #rj_1b ;br=scroll fast + dec a14 + move a14,@joyholdcnt1 + move a14,a14 + jrnz #rj_1 ;br=hasn't held long enough +#rj_1b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd1 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_1 +#ju1 + subk 1,a2 + jrnn #jd1 + movk NUM_TEAMS-1,a2 +#jd1 + subk NUM_TEAMS,a2 + jrn #rj_1c + subk NUM_TEAMS,a2 +#rj_1c + addk NUM_TEAMS,a2 + move a2,@tm1_cur_pos + SOUND1 tm_sel_cur1 +;DJT End + + callr set_team1_team_nbr + movi TM1_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team1_city_names + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset1_obj,a8,L + calla update_team_squad_nbr + + move @tm1_show_tm_stats,a14 + jreq #rj_1 ;br=stats aren't activated + move @team1,a0 + clr a1 + calla print_team_stats + jruc #rj_1 +;DJT Start +;DJT stuff removed +;DJT End +#rj1_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team1_random_select + +t1rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 0,a14 + jrz t1rs_2 + + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t1rs_1 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t1rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm1_random_sel ;in random select mode + SOUND1 tm_sel_ran1 +t1rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm1_rnd_select_ram + + move @tm1_random_sel,a0 ;in random select mode ? + jrle #ut1_1 ;br=nope + move @tm1_random_cycle_cnt,a0 + dec a0 + move a0,@tm1_random_cycle_cnt + move a0,a0 + jrge #ut1_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut1_0 + move @tm1_random_team_nbr,a0 + move @team1,a1 + cmp a0,a1 ;at random team ? + jrne #ut1_1 ;br=nope + movi -1,a0 + move a0,@tm1_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend1 +#ut1_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM1 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team1_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t1sh + SLEEPK 1 + move @exit_status,a14 + btst 0,a14 + jrz #selct1 + + move @force_selection,a0 + jrnz #selct1 + move @tm1_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t1sh ;br=yep...wait + + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t1sh1 + + move @in_team_subs,a14 + jrnz #t1sh3 ;br=dont allow during team subs + move @tm1_show_tm_stats,a14 + jrne #t1sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm1_show_tm_stats ;turn on team stats + move @team1,a0 + clr a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t1sh3 +#t1sh1 +; move @tm1_show_tm_stats,a14 +; jrz #t1sh2 + clr a14 + move a14,@tm1_show_tm_stats ;turn off team stats + movi TM1_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t1sh2 + move @team1_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + cmpi SHOOT_BUTTON,a0 + jreq #selct1 + +;read teammates turbo button + clr a0 ;plyr 1 is teammate + move @team1_control,a14 ;player selecting team 1 + jrnz #t1sh2a + movk 1,a0 ;plyr 2 is teammate +#t1sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t1sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo1 + +#t1sh3 + move @team1_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass1 + cmpi JOY_RIGHT,a0 + jrne #t1sh +; +; Goto next lineup +; +#turbo1 + SOUND1 tm_sel_hd_r1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok ;br=yes + clr a14 +#valok + move a14,*a0 ;save new sqaud count (nbr.) + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Goto previous lineup +; +#pass1 + SOUND1 tm_sel_hd_l1 + + move @team1,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm1set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok1a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +; movi NORM_LINEUP_COMBOS,a14 ;reset value to last combination +#valok1a + move a14,*a0 ;save new lineup nbr. + move @teamset1_obj,a8,L + calla update_team_squad_nbr + jruc #t1sh +; +; Select this lineup!! +; +#selct1 + SOUND1 tm_sel_sel1 + + movi TEAM1_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + clr a10 + move @plate1_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp + move @team1,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team1,a8 + CREATE0 call_team_name +#skp + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<0,a0 + move a0,@exit_status ;exit +#wait1 + SLEEPK 1 + move @PSTATUS,a0 + andi 011b,a0 + jrnz #wait1 + DIE + + + +;----------------------------------------------------------------------------- +; This (PROCESS) watches joystick (UP,DOWN, LEFT or RIGHT) and plots +; the city names, logos and heads based on joystick movement and table +;----------------------------------------------------------------------------- + SUBRP team2_team_select + +#wait_for_players2 + SLEEPK 2 + move @PSTATUS,a0 + andi 01100b,a0 ;did player 3 or 4 buyin ? + jrz #wait_for_players2 ;br=nope...not yet +; +; player 3 and/or 4 active +; + move @exit_status,a0 + ori 1<<1,a0 + move a0,@exit_status ;exit + + movk 1,a0 + calla update_player_head_backdrop + movk 1,a0 + calla create_team_squad_nbr + move a8,@teamset2_obj,L + + CREATE0 team2_swap_heads ;watch buttons + +;if were in halftime, dont allow player to change CITY, just swap heads + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitution + + CREATE0 team2_random_select + movk 1,a9 + calla create_name_backplate + clr a0 + move a0,@tm2_cur_pos + addi MIDDLE_TEAM_NAME-1,a0 ;wasn't zero relative + move a0,@team2 + calla create_team2_city_names + + clr a0 + move a0,@lastjoy2 ;no joystick data..yet + move a0,@joyholdcnt2 +#rj_2 + SLEEPK 2 + move @in_team_subs,a0 + jrnz #rj2_die ;br=in halftime substitutions + + callr update_tm2_rnd_select_ram +;DJT Start + move @tm2_cur_pos,a2 +;DJT End + move @tm2_random_sel,a0 ;get status + jrn #rj_2 ;br=still picking random team + jrgt #ju2 ;br=done picking random team + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + + move @lastjoy2,a1 ;get last JOYSTICK position + cmp a0,a1 + jreq #rj_2a + move a0,@lastjoy2 ;save new position + movi DELAY_B4_SCROLL+6,a14 ;held for 40 ticks before fast + move a14,@joyholdcnt2 + jruc #rj_2b +#rj_2a + move @joyholdcnt2,a14 + jrz #rj_2b ;br=scroll fast + dec a14 + move a14,@joyholdcnt2 + move a14,a14 + jrnz #rj_2 ;br=hasn't held long enough +#rj_2b +;DJT Start + addk 1,a2 + btst JOYDN,a0 + jrne #jd2 + subk 1,a2 + btst JOYUP,a0 + jreq #rj_2 +#ju2 + subk 1,a2 + jrnn #jd2 + movk NUM_TEAMS-1,a2 +#jd2 + subk NUM_TEAMS,a2 + jrn #rj_2c + subk NUM_TEAMS,a2 +#rj_2c + addk NUM_TEAMS,a2 + move a2,@tm2_cur_pos + SOUND1 tm_sel_cur2 +;DJT End + + callr set_team2_team_nbr + movi TM2_NAME_OBJS,a0 + calla delete_team_city_names + calla create_team2_city_names + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + + move @tm2_show_tm_stats,a14 + jreq #rj_2 ;br=stats aren't activated + move @team2,a0 + movk 1,a1 + calla print_team_stats + jruc #rj_2 +;DJT Start +;DJT stuff removed +;DJT End +#rj2_die + DIE + +;----------------------------------------------------------------------------- +; This (PROCESS) watches for UP-TURBO for random team select +;----------------------------------------------------------------------------- + SUBRP team2_random_select + +t2rs_1 + SLEEPK 2 + move @exit_status,a14 + btst 1,a14 + jrz t2rs_2 + + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_cur ;ret. a0=joy switch value + cmpi JOY_UP,a0 + jrne t2rs_1 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi TURBO_BUTTON,a0 + jrne t2rs_1 + +;random team select, activated + movk 1,a0 + move a0,@tm2_random_sel ;in random select mode + SOUND1 tm_sel_ran2 +t2rs_2 + DIE + +;----------------------------------------------------------------------------- +; This routine handles the updating of the teams' random team select +; ram and the selecting of the random team +; +; INPUT: nothing +; OUTPUT: nothing +;----------------------------------------------------------------------------- + SUBR update_tm2_rnd_select_ram + + move @tm2_random_sel,a0 ;in random select mode or done? + jrle #ut2_1 ;br=nope + move @tm2_random_cycle_cnt,a0 + dec a0 + move a0,@tm2_random_cycle_cnt + move a0,a0 + jrge #ut2_1 ;br=not done cycling yet +; +; Done cycling...now move cursor until get to random team +; +#ut2_0 + move @tm2_random_team_nbr,a0 + move @team2,a1 + cmp a0,a1 ;at random team ? + jrne #ut2_1 ;br=nope + movi -1,a0 + move a0,@tm2_random_sel ;can't change team but can change heads + SOUND1 sel_rndmend2 +#ut2_1 rets + +;----------------------------------------------------------------------------- +; This process watches TEAM2 buttons...during the select team screen +;----------------------------------------------------------------------------- + SUBRP team2_swap_heads + +; +; Watch for button presses and JOYSTICK +; +#t2sh + SLEEPK 1 + move @exit_status,a14 + btst 1,a14 + jrz #selct2 + + move @force_selection,a0 + jrnz #selct2 + move @tm2_random_sel,a0 ;in random select mode ? + cmpi 1,a0 ;anything but 1, says allow head change + jreq #t2sh ;br=yep...wait + + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_cur + cmpi PASS_BUTTON,a0 + jrne #t2sh1 + + move @in_team_subs,a14 + jrnz #t2sh3 ;br=dont allow during team subs + move @tm2_show_tm_stats,a14 + jrne #t2sh2 ;br=team stats visible + + movk 1,a0 + move a0,@tm2_show_tm_stats ;turn on team stats + move @team2,a0 + movk 1,a1 + calla print_team_stats + SOUND1 tm_sel_stats + jruc #t2sh3 +#t2sh1 +; move @tm2_show_tm_stats,a14 +; jrz #t2sh2 + clr a14 + move a14,@tm2_show_tm_stats ;turn off team stats + movi TM2_STAT_OBJS,a5 ;object ID + calla del_team_stats + +#t2sh2 + move @team2_control,a0 ;player selecting team 1 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + cmpi SHOOT_BUTTON,a0 + jreq #selct2 + +;read teammates turbo button + movk 2,a0 ;plyr 3 is teammate + move @team2_control,a14 ;player selecting team 2 + cmp a0,a14 ;player 3 ? + jrne #t2sh2a ;br=yes + movk 3,a0 ;plyr 4 is teammate +#t2sh2a + move @PSTATUS,a14 + btst a0,a14 + jrz #t2sh3 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq #turbo2 + +#t2sh3 + move @team2_control,a0 ;player selecting team 1 + calla get_stick_val_down ;ret. a0=joy switch value + cmpi JOY_LEFT,a0 + jreq #pass2 + cmpi JOY_RIGHT,a0 + jrne #t2sh + +; +; Goto next lineup +; +#turbo2 + SOUND1 tm_sel_hd_r2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get current squad nbr + inc a14 ;next squad + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + cmp a1,a14 ;valid ? + jrlo #valok2 ;br=yes + clr a14 +#valok2 + move a14,*a0 ;save new squad nbr + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Goto previous lineup +; +#pass2 + SOUND1 tm_sel_hd_l2 + + move @team2,a0 + sll 4,a0 ;offset into TEAM LINEUP array + move a0,a1 + addi tm2set,a0 ;point to team + move *a0,a14 ;get lineup number for team + + addi team_sqaud_cnts,a1 + move *a1,a1 ;get MAX squads count + + dec a14 ;prev. player head combination + jrnn #valok2a ;br=not negative + dec a1 ;make zero relative + move a1,a14 +#valok2a + move a14,*a0 ;save new lineup nbr. + move @teamset2_obj,a8,L + calla update_team_squad_nbr + jruc #t2sh +; +; Select this lineup!! +; +#selct2 + SOUND1 tm_sel_sel2 + + movi TEAM2_SEL_PID,a0 + calla KIL1C ;dont allow plyr to change city name + + movk 1,a10 + move @plate2_objs,a11,L ;plate behind heads + CREATE0 flash_backdrop + + move @gmqrtr,a0 + jrnz #skp2 + move @team2,a0 + addi AUD_ATL,a0 + calla AUD1 ;inc audit + move @team2,a8 + CREATE0 call_team_name +#skp2 + SOUND1 select_snd1 + move @exit_status,a0 + andni 1<<1,a0 + move a0,@exit_status ;exit +#wait2 + SLEEPK 1 + move @PSTATUS,a0 + andi 01100b,a0 + jrnz #wait2 + DIE + + +#****************************************************************************** +****************************************************************************** + 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 + +;;;; JSRP show_player_records + + clr a0 + move a0,@HALT + move a0,@in_team_select + move a0,@toggle1_time + move a0,@toggle2_time + move a0,@pup_strongmen + + movi NUM_TEAMS,a1 +;; 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,@team1_switch + move a0,@team2_switch + +;;;; SOUND1 tune1_snd + + 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 + + clr a0 + movi player1_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p1_il move a0,*a1+ + dsj a2,#p1_il + + movi player2_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p2_il move a0,*a1+ + dsj a2,#p2_il + + movi player3_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p3_il move a0,*a1+ + dsj a2,#p3_il + + movi player4_data+PR_NAME1,a1 + movi NAME_LETTERS,a2 +#p4_il move a0,*a1+ + dsj a2,#p4_il + + movk 1,a0 ;page flipping on + move a0,@dpageflip + +; movi 4<<10+4<<5+7,a0 + clr 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 + move a0,@WORLDTLY,L + + SLEEPK 2 + + +;;FIXX!!! begin +; .ref TRIVIA_TEST +; .ref tune_cap_snd +; .ref trivia_game +; .ref game_over +; +; move @TRIVIA_TEST,a0 +; jrz #notriva +; +; movk 1,a0 +; move a0,@DISPLAYON +; calla display_unblank +; +; movi player1_data,a1 +; movk 13,a0 ;'MIDWAY' +; move a0,*a1(PR_NAME1) +; movk 9,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 23,a0 +; move a0,*a1(PR_NAME4) +; movk 1,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; movi 99,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player2_data,a1 +; movk 20,a0 +; move a0,*a1(PR_NAME1) +; movk 21,a0 +; move a0,*a1(PR_NAME2) +; movk 18,a0 +; move a0,*a1(PR_NAME3) +; movk 13,a0 +; move a0,*a1(PR_NAME4) +; movk 5,a0 +; move a0,*a1(PR_NAME5) +; movk 12,a0 +; move a0,*a1(PR_NAME6) +; movi 10,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player3_data,a1 +; movk 8,a0 +; move a0,*a1(PR_NAME1) +; movk 15,a0 +; move a0,*a1(PR_NAME2) +; movk 20,a0 +; move a0,*a1(PR_NAME3) +; movk 15,a0 +; move a0,*a1(PR_NAME4) +; movk 14,a0 +; move a0,*a1(PR_NAME5) +; movk 5,a0 +; move a0,*a1(PR_NAME6) +; movi 1,a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; movi player4_data,a1 +; movk 2,a0 +; move a0,*a1(PR_NAME1) +; movk 1,a0 +; move a0,*a1(PR_NAME2) +; movk 4,a0 +; move a0,*a1(PR_NAME3) +; movk 2,a0 +; move a0,*a1(PR_NAME4) +; movk 15,a0 +; move a0,*a1(PR_NAME5) +; movk 25,a0 +; move a0,*a1(PR_NAME6) +; clr a14 +; move a14,*a1(PR_TRIVIA_PTS) +; +; SOUND1 tune_cap_snd +; JSRP trivia_game +; SOUND1 tuneend_snd +; jauc game_over +;#notriva +;;FIXX!!! end + + movi option_screen_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi option_screen_mod_kit,a0 +#not2 move a0,@BAKMODS,L + calla BGND_UD1 + + CREATE0 strt_snd + + CREATE0 monitor_buyins + CREATE0 team_control ;determine which plyr control joystick + 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 +;;;; JSRP winner_stays_msg ;skip if 2 player kit +;;;;#2_plyrs + + JSRP options_screen + cmpi 0,a0 ;create player ? + jrne #entr_init ;br=nope + JSRP design_player + + .ref game_over_processing + calla game_over_processing + + JSRP show_create_plyr_info + JSRP creditscreen + movk 1,a0 + jruc #timed_out + +#entr_init + dec a0 ;0=enter initials, 1=just select team + jrnz #skip_name ;br=SELECT TEAM, no initials + +;;;; 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 + +; 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 new_team_select_screen + movk 3,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 + +; SOUND1 tuneend_snd + +; movk 1,a0 +; move a0,@inmatchup + + JSRP matchup_screen + + clr a0 + move a0,@in_team_select + move a0,@inmatchup + +#timed_out + RETP + + + +;----------------------------------------------------------------------------- +; GAME_START sound making PROCESS +;----------------------------------------------------------------------------- +strt_snd +;DJT Start + SLEEP 80 ;65 +;DJT End + SCRIPT1 welcome_sc + 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 + + + +#****************************************************************************** +******************************************************************************* + SUBRP delete_text + + movi TYPTEXT,a0 ;object ID + clr a1 ;mask + calla obj_delc + rets + + +#****************************************************************************** +* Get initials, and pin number +****************************************************************************** + SUBRP name_entry + +;wipe obj. over screen +;; movi wipe_stack_vert_up,a0,L + movi wipe_center_up_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + +;build new bkgnd + + calla del_winner_stay_free_msg + calla KILBGND ;Kill all old background objs + calla pal_clean + calla del_option_screen_stuff + + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTL,L + + movi name_entry_mod_kit,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrnz nmety_1 + movi name_entry_mod,a0 +nmety_1 move a0,@BAKMODS,L + calla BGND_UD1 + + 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 + clr a0 + move a0,@exit_status + +;wipe objs off screen -- reveal new screen + movi un_wipe_vertical,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + calla delete_text + + 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 CYCPID2,a0 ;kill cycler + calla KIL1C + + calla kill_countdown_timer + RETP + +#***************************************************************************** +****************************************************************************** + +BOX_IMG_WIDTH equ 100 +BOX_WIDTH equ 94 +BOX_HEIGHT equ 105 +OPEN_SPEED equ 4 +BOX_PSIZE equ 6 ;bits per pixel + +BOX_Y equ 70 +BOX_X equ 200 + + + SUBRP suckup_credits + + calla check_suckup ;credits unused? + jrnz #snuffit + + SOUND1 win_snd + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;left side of big box + movi [BOX_X-BOX_IMG_WIDTH+4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + move a8,a10 +; move a8,*a13(PDATA+0h),L + +;middle of big box + movi [BOX_X-1,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi WINPIECE,a2 ;* image + movi 20500,a3 ;z pos + calla BEGINOBJ2 + move a8,a9 + +;right side of big box + movi [BOX_X-4,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi firstwin,a2 ;* image + movi 19999,a3 ;z pos + calla BEGINOBJ2 + +;create 'use up remaining credits' msg + movi [BOX_X-BOX_IMG_WIDTH+2,0],a0 ;x val + movi [BOX_Y,0],a1 ;y val + movi useupbx,a2 ;* image + movi 20600,a3 ;z pos + 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 + 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 INIT18SPC,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 INIT18SPC,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 INIT18SPC,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 + + +#***************************************************************************** +****************************************************************************** + SUBRP print_pin_number + + PUSH a1 + clr a5 + movk 1,a7 ;num objs + move *a13(PC_PIN_NBR1),a8,L + calla obj_off + move *a13(PC_PIN_NBR2),a8,L + calla obj_off + move *a13(PC_PIN_NBR3),a8,L + calla obj_off + move *a13(PC_PIN_NBR4),a8,L + calla obj_off + + move *a13(PC_DATADDR),a2,L ;start of player data + move *a2+,a0 + move *a13(PC_PIN_NBR1),a8,L ;a8=* pin_number img + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 1st pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 1st nbr. ? + jrls #noast1 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast1 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast1 +; cmpi INGA16SPC,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_PIN_NBR2),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 2nd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player enter 2nd nbr. ? + jrls #noast2 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast2 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast2 +; cmpi INGA16SPC,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_PIN_NBR3),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 3rd pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 3rd nbr ? + jrls #noast3 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast3 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast3 +; cmpi INGA16SPC,a0 +; jreq #is_space3 +; calla obj_on +;#is_space3 + 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_PIN_NBR4),a8,L + move *a8(OIMG),a0,L + +;show '*' or '-' for pin number + movi INGA16SUB,a0,L ;assume 4th pin nbr. not entered + move *a13(PC_CHARPOS),a14 + subi NAME_LETTERS-1,a14 + cmp a7,a14 ;has player entered 4th nbr ? + jrls #noast4 ;br=nope + movi INGA16AST,a0,L ;show '*' for entered nbr. +#noast4 + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + calla obj_on + +; move *a8(OIMG),a0,L +;#noast4 +; cmpi INGA16SPC,a0 +;; cmpi OSGEMD_SPC,a0 +; jreq #is_space4 +; calla obj_on +;#is_space4 + 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_PIN_NBR1,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 1,a6 ;1 pixel spacing + dsj a7,#loop ;another img? + PULL a1 + 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 ;6 letters in name,pin number + .long #name0,#name1,#name2,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#month,#day + +***************************** +#name0 +#name1 +#name2 +#name3 +#name4 +#name5 + 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_players_name +; calla print_initials + rets + +#pin1 +#pin2 +#pin3 +#pin4 + move *a13(PC_CHARPOS),a0 ;3-6 + subi NAME_LETTERS,a0 ;just to make shifting easier + sll 5,a0 ;x 32 bits + addi PC_PIN_NBR1,a0 + add a13,a0 + move *a0,a8,L ;* object + calla update_image + calla print_pin_number + rets + +;player game name logic (only during CREATE PLAYER) + +#***************************************************************************** +* 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 + +; move *a13(PC_MENULEVEL),a0 +; cmpi 0,a0 ;entering name ? +; jrne ui_1 ;br=yep, USE smaller font + addi alpha_table2,a1 +; jruc ui_2 + +;ui_1 addi alpha_table,a1 +ui_2 move *a1,a0,L ;image addr + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + rets + +#***************************************************************************** +****************************************************************************** + .asg 57,X1 + .asg 148,X2 + .asg 251,X3 + .asg 342,X4 + .asg 200+TEAMSEL_PAGE-16,PNAMES_Y + + SUBR create_player_names ;and attributes + +; +; Name 1 (team 1) +; + movi player1_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr1 ;br=nope + movi X1,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam2 + +#nocr1 movi [X1,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 BEGINOBJ2 + move a8,@name1_obj,L +; +; Name 2 (team 1) +; +#nam2 + movi player2_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr2 ;br=nope + movi X2,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam3 + +#nocr2 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name2_obj,L +; +; Name 3 (team 2) +; +#nam3 movi player3_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr3 ;br=nope + movi X3,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam4 + +#nocr3 movi [X3,0],a0 ;x val + movi [PNAMES_Y,0],a1 ;y val + movi AUGMON,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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name3_obj,L +; +; Name 4 (team 2) +; +#nam4 movi player4_data,a4 + move *a4(PR_CREATED_PLYR),a1 ;is player created ? + jrle #nocr4 ;br=nope + movi X4,a0 + movi PNAMES_Y,a1 + calla print_name + jruc #nam5 + +#nocr4 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 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@name4_obj,L +; +; Attributes image for NAME 1 (team 1) +; +#nam5 movi [X1-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,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 BEGINOBJ2 + move a8,@attrib1_obj,L +; +; Attribute image for NAME 2 (team 1) +; + movi [X2-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib2_obj,L +; +; Attribute image for NAME 3 (team 2) +; + movi [X3-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib3_obj,L +; +; Attribute image for NAME 4 (team 2) +; + movi [X4-40,0],a0 ;x val + movi [PNAMES_Y+10,0],a1 ;y val + movi ATTRIBS,a2 ;attribs,a2 ;* image + calla BEGINOBJ2 + move a8,@attrib4_obj,L +; +; Now fill in the values for each name (with 'bars') +; + movi [X1-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib1_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X2-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib2_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X3-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib3_obj+20h,a10 ;point past player name + calla #create_attrib + + movi [X4-3,0],a0 ;x val + movi [PNAMES_Y+11,0],a1 ;y val + movi attrib4_obj+20h,a10 ;point past player name + calla #create_attrib + rets + + +ATTRIBSYP: + .word 3 + .word 00180h,00000h,07fe0h + + +****************************************************************************** +* a0 = x +* a1 = y +* a10 = * attrib obj +* +* Changed to plot 'bar' rather than numbers +* +****************************************************************************** +#create_attrib + movk 6,a2 ;# of attributes +#atloop + PUSH a0,a1,a2,a10 + movi ATTBAR00,a2 ;* image + movi 1200,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a0,a1,a2,a10 + move a8,*a10+,L + addi [6,0],a1 ;y spacing +#noadj dsj a2,#atloop + rets + + +;#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 ;a10 = tbl addr. of X,Y coor. for heads + move *a10+,a11 + sll 16,a11 ;y pos (contsant, except middle head) +; +; Head 1 (team 1) +; + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd1 +#ntcr1 + 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 +; +; Head 2 (team 1) +; +;; 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 +;; +; Head 2 (team 1) +; + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd2a +#ntcr2 + movi RAD_MK2,a2 ;* image + move @special_heads+10h,b0 + jrn #nrmhd2a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd2a + 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 +; +; Head 1 (team 2) +; + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd3 +#ntcr3 + 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 + +; +; Head 2 (team 2) +; +;; 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,@head5_obj,L +; +; Head 2 (team 2) +; + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a2 ;is player created ? + jrle #ntcr4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img + jruc #nrmhd4a +#ntcr4 + movi RAD_MK2,a2 ;* image + move @special_heads+30h,b0 + jrn #nrmhd4a + sll 5,b0 ;x 32 bits + addi our_heads,b0 + move *b0,b0,L + move b0,a2 +#nrmhd4a + 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 + + +#xy_starts + .long #stxy1,#stxy2,#stxy3,#stxy4,#stxy5 + +;team select screen head positions +#stxy1 .word 174 ;Y + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;match-up screen head positions +#stxy2 .word 186 ;Y + .word 24,153,242,370 + +;team subsitution head positions +#stxy3 .word 174 + .word 13,192 ,207,386 ;head 1 X, head 2 X...etc + +;final results page +#stxy4 .word 168 + .word 29,177,223,373 ;head 1 X, head 2 X...etc + +;halftime stats page +#stxy5 .word 103 ;Y value + .word 28,177,223,372 ;head 1 X, head 2 X...etc + + +#***************************************************************************** +***************************************************************************** + SUBR update_player_heads + + PUSH a10 +; +; Update Team 1 heads, first +; + move @team1,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont1a + move @gmqrtr,a14 + cmpi 2,a14 ;half time ? + jrnz #cont1a + move @fixbug,a14 + jrz #do_team2 +#cont1a + move @team1,a0 + jrnn #valid_team1 + move @head1_obj,a8,L ;turn off 3 heads on TEAM 1 + calla obj_off + move @head2_obj,a8,L + calla obj_off + jruc #do_team2 + +#valid_team1 +;DJT Start + movi player_heads,a10 + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;7 combinations * 3 heads +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp ;point to first LINEUP of team1 +#out + move @team1,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm1set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out1a +; dec a14 +; jrn #out1b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out1a +;#out1b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 1) +; + move @head1_obj,a8,L + calla obj_on + move *a10,a2,L ;* HEAD image + + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp1 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp1 + move @special_heads,b0 + jrnn #spec_head1 ;br=not -1 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + .ref check_rodman + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* NEW image + 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) + calla obj_aniq ;change object image +#spec_head1 +; +; Head 2 (team 1) +; + move @head2_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head) + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp2 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp2 + move @special_heads+10h,b0 + jrnn #spec_head2 + move *a2(ICMAP),a0,L ;Get *palette + clr a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head2 +; +; Update Team 2 heads +; +#do_team2 + move @team2,a0 + cmpi NUM_TEAMS,a0 + jrnz #cont3a + move @gmqrtr,a14 + cmpi 2,a14 ;halftime ? + jrnz #cont3a + move @fixbug,a14 + jrz #x +#cont3a + move @team2,a0 + jrnn #valid_team2 + move @head3_obj,a8,L ;turn off 3 heads for TEAM 2 + calla obj_off + move @head4_obj,a8,L + calla obj_off + jruc #x + +#valid_team2 +;DJT Start + movi player_heads,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;DJT End + dec a2 + jruc #lp2 ;point to first LINEUP of team2 +#out2 + move @team2,a0 + sll 4,a0 ;mult. by 16 (for offset into array) + addi tm2set,a0 ;add to begining of array + move *a0,a14 ;get head combination number + sll 6,a14 + add a14,a10 + +; clr a0 ;start with no offset +;; +;; Compute offset into head_table based on current team LINEUP (0-5) +;; +;#out2a +; dec a14 +; jrn #out2b ;br=offset computed +; addi 2*32,a0 ;add in one LINE length +; jruc #out2a +;#out2b +; add a0,a10 ;a10 = ptr. to heads + +; +; Head 1 (team 2) +; + move @head3_obj,a8,L + calla obj_on + move *a10,a2,L ;* image + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp3 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp3 + move @special_heads+20h,b0 + jrnn #spec_head3 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head3 +; +; Head 2 (team 2) +; + move @head4_obj,a8,L + calla obj_on + move *a10(20h),a2,L ;* image (2nd head, team 2) + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrle #ducp4 ;br=nope + move *a14(PR_HEAD_NBR),a2 ;get head number + sll 5,a2 + addi create_plr_mugshots_tbl,a2 + move *a2,a2,L ;get mugshot img +#ducp4 + move @special_heads+30h,b0 + jrnn #spec_head4 + move *a2(ICMAP),a0,L ;Get *palette + movk 1,a14 + calla check_rodman + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + move a2,a0 ;* image + 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) + calla obj_aniq ;change object image +#spec_head4 +; +; Head 3 (team 2) +; +;; move @head6_obj,a8,L +;; calla obj_on +;; move *a10(40h),a2,L ;* image (3rd head, team 2) +;; move @special_heads+30h,b0 +;; jrnn #spec_head5 +;; 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 +;; 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) +;; calla obj_aniq ;change object image +;;#spec_head5 +#x + PULL a10 + clr a0 + move a0,@fixbug + rets + + +#***************************************************************************** +* This PROCESS flashes the players MUGSHOT +* +* INPUT: a8 - player number +* + SUBR flash_plyrs_mugshot + + sll 5,a8 + addi hd_obj_ptrs_tbl,a8 + move *a8,a8,L ;get player mugshot ptr. + move *a8,a8,L ;get player mugshot IMG ptr. + + move *a8(OPAL),a0 + move a0,*a13(PDATA) + + movi MUG_WHT_P,a0 + calla pal_getf + move a0,*a13(PDATA+16) + + .ref win_snd + SOUND1 win_snd + + movk 6,a10 +#again + move *a13(PDATA+16),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + move *a13(PDATA),a0 + move a0,*a8(OPAL) + + SLEEPK 3 + + dsj a10,#again +#die + DIE + + +hd_obj_ptrs_tbl + .long head1_obj + .long head2_obj + .long head3_obj + .long head4_obj + + +MUG_WHT_P: + .word 254 + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + + +#***************************************************************************** +* Modified to account for new table structure and LESS attributes +* and CREATED PLAYER logic +* + SUBR 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 +;DJT Start + movi player_names,a10 ;table in score2.asm + move @team1,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp cmpi 0,a2 + jrz #out +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp +#out +; +; Compute offset into player_names table +; + move @team1,a0 + sll 4,a0 ;mult. by 16 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player1_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec1 ;br=yes + + 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 (for player name) + move @special_heads,b0 + jrnn #spec1 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol1 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam1 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec1 ; br=yes, hasn't changed +#notsam1 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec1 +#notcol1 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec1 + movi player2_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec2 ;br=yes + + move @name2_obj,a8,L + calla obj_on + movk 1,a1 ;bit 1 + movi attrib2_obj,a11 + calla flash_player_name + + move *a10(20h),a0,L ;image addr (2nd name, team 1) + move @special_heads+10h,b0 + jrnn #spec2 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol2 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam2 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec2 ; br=yes, hasn't changed +#notsam2 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec2 +#notcol2 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec2 + +;if player 1 is a CREATED player, special logic + move @special_heads,a10 + jrnn #hda1 ;br=special head + + movi player1_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p1ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp1 ;br=no + +#hda1 + move @p1_hide_atts,a14 + jrnn #plyr2 + clr a10 ;plyr 3 + move a10,@p1_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr2 +#ncp1 + movi attrib1_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr2 +#p1ntc + movi attrib1_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3 cmpi 0,a2 + jrz #out3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult. by 128 (8 attribs) + addi player_attribs,a10 ;a10=points to player attribs. + + PUSH a10 + move @special_heads,a6 + calla update_attribs + PULL a10 + +;if player 2 is a CREATED player, special logic +#plyr2 + move @special_heads+10h,a10 + jrnn #hda2 ;br=special head + + movi player2_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p2ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp2 + +#hda2 + move @p2_hide_atts,a14 + jrnn #do_team2 + movk 1,a10 ;plyr 3 + move a10,@p2_hide_atts + CREATE0 hide_plyr_attribs + jruc #do_team2 +#ncp2 + movi attrib2_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #do_team2 + +#p2ntc movi attrib2_obj+20h,a11 + movi player_names,a10 + move @team1,a2 +#lp3x cmpi 0,a2 + jrz #out3x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 ;mult by 128 (8 attribs) + addi player_attribs,a10 ;10=pt to plyr attrib + move @special_heads+10h,a6 + calla update_attribs +; +; Now do TEAM 2 +; +#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 +;DJT Start + movi player_names,a10 + move @team2,a2 +;;;; movi team_sqaud_cnts,a0,L +#lp2 cmpi 0,a2 + jrz #out2 +;;;; move *a0+,a14 +;;;; sll 6,a14 ;!!! *64 bits/squad +;;;; add a14,a10 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;DJT End +;;;; addi 20*64,a10 + dec a2 + jruc #lp2 +#out2 +; +; Compute offset into player_names table +; + move @team2,a0 + sll 4,a0 ;mult. by 16 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 ;mult by 64 + add a14,a10 + + movi player3_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec3 ;br=yes + + 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 @special_heads+20h,b0 + jrnn #spec3 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol3 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam3 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec3 ; br=yes, hasn't changed +#notsam3 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec3 +#notcol3 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec3 + movi player4_data,a1 + move *a1(PR_CREATED_PLYR),a1 ;is player created ? + jrp #spec4 ;br=yes + + 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 @special_heads+30h,b0 + jrnn #spec4 +;DJT Start + + move *a8(OFLAGS),a14 ;Get old flags + move a0,a0 ;College player? + jrn #notcol4 ; br=no + sll 5,a0 + addi col_name_ptrs,a0,L + move *a0,a0,L + move *a8(ODATA_p),a1,L ;Get old *string + cmp a1,a0 ;Is it the same? + jrne #notsam4 ; br=not + btst B_CHARGEN,a14 ;Is chargen flag set too? + jrnz #spec4 ; br=yes, hasn't changed +#notsam4 + ori M_CHARGEN+M_PIXSCAN,a14 ;Set chargen flags + move a14,*a8(OFLAGS) + move a0,*a8(ODATA_p),L + clr a14 + move a14,*a8(OMISC) ;Clr so char_gen calcs new X + jruc #spec4 +#notcol4 + andni M_CHARGEN+M_PIXSCAN,a14 ;Ensure chargen flags clear + move a14,*a8(OFLAGS) +;DJT End + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image +#spec4 + +;if player 3 is a CREATED player, special logic + move @special_heads+20h,a10 + jrnn #hda3 ;br=special head + + movi player3_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p3ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp3 ;br=no + +#hda3 + move @p3_hide_atts,a14 + jrnn #plyr_4 + movk 2,a10 ;plyr 3 + move a10,@p3_hide_atts + CREATE0 hide_plyr_attribs + jruc #plyr_4 +#ncp3 + movi attrib3_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #plyr_4 + +#p3ntc movi attrib3_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6 cmpi 0,a2 + jrz #out6 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp5 + + sll 7,a10 + addi player_attribs,a10 + + PUSH a10 + move @special_heads+20h,a6 + calla update_attribs + PULL a10 + +;if player 4 is a CREATED player, special logic +#plyr_4 + move @special_heads+30h,a10 + jrnn #hda4 ;br=special head + + movi player4_data,a10,L + move *a10(PR_CREATED_PLYR),a11 + jrle #p4ntc ;br=nope, plyr not created + move *a10(PR_PRIVILEGES),a11 + btst 3,a11 ;HIDE ATTRIBUTES privilege ? + jrz #ncp4 ;br=no + +#hda4 + move @p4_hide_atts,a14 + jrnn #done + movk 3,a10 ;plyr 3 + move a10,@p4_hide_atts + CREATE0 hide_plyr_attribs + jruc #done +#ncp4 + movi attrib4_obj+20h,a11 + addi PR_SPEED_PTS,a10,L ;pt. at 1st attrib. in record + clr a6 + not a6 + calla update_attribs + jruc #done + +#p4ntc movi attrib4_obj+20h,a11 + movi player_names,a10 + move @team2,a2 +#lp6x cmpi 0,a2 + jrz #out6x + addi NEXT_TEAM_NAMES,a10 ;compute offset into table +;;;; 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 + cmp a1,a0 + jrnz #lp4y + sll 7,a10 + addi player_attribs,a10 + move @special_heads+30h,a6 + calla update_attribs +#done 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 +; +; Team 1 (logo) +; + sll 5,a0 ;x 32 bits + addi #startxys,a0 + move *a0,a2,L ;a2=addr. of xy table to use + move *a2+,a1,L + move *a2,a0 ;x val + sll 16,a0 + PUSH a1,a2 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo1_obj,L +; +; Team 1 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo1_obj+20h,L +; +; Team 2 (logo) +; + PULL a1,a2 ;y val + move *a2,a0 ;x val + PUSH a1,a2 + sll 16,a0 + movi T_HAWKS,a2 ;* image (atlanta hawks) + movi 2000,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,@logo2_obj,L +; +; Team 2 (logo shadow) +; + PULL a1,a2 + move *a2+,a0 ;x val + sll 16,a0 + movi BALLBAK1,a2 + movi 1900,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + calla BEGINOBJ2 + move a8,@logo2_obj+20h,L + rets + + +#startxys .long #stxy1,#stxy2,#stxy3,#stxy4 + +;team select logo positions +#stxy1 .long (TM1_Y-35-5)<<16 ;Y + .word TM1_X+50,TM2_X-50 ;1st logo X, 2nd logo X + + +;match-up screen logo positions +;DJT Start +#stxy2 .long 135<<16 ;140<<16 ;Y + .word 80,311 +;DJT End + + +;halftime subsitution logo positions +#stxy3 .long 65<<16 + .word 75,325 + +;final result page +#stxy4 .long 61<<16 + .word 101,297 + + +****************************************************************************** +****************************************************************************** + SUBR update_logos + + + move @tm1_show_tm_stats,a14 + jrne #tm1off ;br=team stats visible + + move @logo1_obj,a8,L + calla obj_on + move @logo1_obj+20h,a8,L + calla obj_on + move @team1,a0 + jrnn #valid_team1 +#tm1off + 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 (logo) + PULL a0 +; move @logo1_obj+20h,a8,L +; movi DMACNZ,a1 ;DMA flags +; calla obj_aniq ;change object image (shadow) + +#team2 + move @tm2_show_tm_stats,a14 + jrne #tm2off ;br=team stats visible + + move @logo2_obj,a8,L + calla obj_on + move @logo2_obj+20h,a8,L + calla obj_on + move @team2,a0 + jrnn #valid_team2 +#tm2off + 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 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 + +#***************************************************************************** +* +* INPUT: reg a0 = which/where to put heading image and text +****************************************************************************** + SUBR create_heading + + move @GAMSTATE,a1 + cmpi INPLYRDESIGN,a1 +;DJT Start + jreq #not_2pc ;no heading in CREATE PLAYER + subk INAMODE,a1 ; or AMODE CREATE PLAYER + jreq #not_2pc + +;DJT End + + move *a13(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2pa + addk 4,a0 ;adjust for KIT setup +#not_2pa + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + + 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 +;;;; subi 00280000h,a0,L ;adjust for anim. point + +;create title bar (part 1) + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move *a13(PC_PLAYNUM),a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit2 +#nkit addi #heading_setup_tbl,a0,L + +#kit2 move *a0,a2,L ;get setup str. table ptr. + calla setup_message + move *a13(PC_OBJID),a0 ;OBJ ID + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + +;compute which string to use + move *a13(PC_MENULEVEL),a0 + sll 5,a0 ;mult. by 32 + addi #title_str_table,a0 + move *a0,a4,L + calla print_string_C2 +#not_2pc + rets + + +****************************************************************************** +* +* INPUT: reg a10 = player number +****************************************************************************** + SUBR create_heading2 + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + addk 4,a0 ;adjust for KIT setup +#not2 + sll 5,a0 ;x 32 bits + move a0,b0 + addi #heading_imgs,a0 + addi #heading_pals,b0 + move *a0,a2,L ;* image + + move a10,a0 + sll 6,a0 ;x16x4 + addi #center_xs,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2a + addi 20h,a0 +#not2a + move *a0,a0 + sll 16,a0 ;shift up past fractional + +;create title bar + movi [NAMENT_PAGE+9,0],a1 ;y val + movk 4,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;OBJ ID + clr a6 ;x vel + clr a7 ;y vel + move *b0,b0,L ;get palette + calla BEGINOBJP2 + +;now print TITLE on bar + + move a10,a0 + sll 5,a0 + + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nokit ;br=not KIT + addi #heading_setup_tbl_kit,a0,L + jruc #kit +#nokit addi #heading_setup_tbl,a0,L + +#kit move *a0,a2,L ;get setup str. table ptr. + calla setup_message + +;compute which string to use + movi stats_str,a4,L + calla print_string_C2 + rets + + + +#heading_imgs + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;normal + .long TEAMBR2,TEAMBR2,TEAMBR2,TEAMBR2 ;kit + +#heading_pals + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;normal + .long TUBE_B_P,TUBE_G_P,TUBE_Y_P,TUBE_R_P ;kit + + +#heading_setup_tbl + .long p1_heading_str_setup + .long p2_heading_str_setup + .long p3_heading_str_setup + .long p4_heading_str_setup + +#heading_setup_tbl_kit + .long p1_heading_str_setup_kit + .long p2_heading_str_setup_kit + .long p3_heading_str_setup_kit + .long p4_heading_str_setup_kit + + +p1_heading_str_setup + PRINT_STR bast8_ascii,4,0,56,11,BAST_W_P,0 +p2_heading_str_setup + PRINT_STR bast8_ascii,4,0,151,11,BAST_W_P,0 +p3_heading_str_setup + PRINT_STR bast8_ascii,4,0,248,11,BAST_W_P,0 +p4_heading_str_setup + PRINT_STR bast8_ascii,4,0,344,11,BAST_W_P,0 + +p1_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,53,11,BAST_W_P,0 +p2_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,103,11,BAST_W_P,0 +p3_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,297,11,BAST_W_P,0 +p4_heading_str_setup_kit + PRINT_STR bast8_ascii,4,0,346,11,BAST_W_P,0 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;player 4 + +#title_str_table + .long initials_str + .long pin_nbr_str + .long stats_str + + +initials_str + .string "NAME",0 + .even +pin_nbr_str + .string "PIN NUMBER",0 + .even +stats_str + .string "STATS",0 + .even + + +#***************************************************************************** +* a5 = object ID (pin number objects) +****************************************************************************** + SUBRP create_pin_nbr_objs + + movk 4,a2 ;4 digits in pin_number +#obj_loop1 + PUSH a0,a1,a2,a5 + + movi [400h | (213-7),0],a1 ;assume not in CREATE PLyr (y val) + + move @GAMSTATE,a0 + cmpi INPLYRDESIGN,a0 +;DJT Start + jreq #gyval2 ; br=in CREATE PLAYER + subk INAMODE,a0 + jrne #gyval1 ; br=not AMODE CREATE PLAYER +#gyval2 +;DJT End + + movi [217|400h,0],a1 ;y val +#gyval1 + clr a0 ;x val + movi INGA16SUB,a2 ;* image + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + 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_loop1 + 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 MENU_LEVELS,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 + sll 4,a0 + addi save_data_tbl,a0 ;get actual value to store!! + move *a0,a0 ;get char. value + move a0,*a1 ;save char selected + rets + + +save_data_tbl + .word 1 ;a or 1 (pin) + .word 2 ;b or 2 + .word 3 ;c or 3 + .word 4 ;d or 4 + .word 5 ;e or 5 + .word 6 ;f or 6 + .word 7 ;g or 7 + .word 8 ;h or 8 + .word 9 ;i ot 9 + .word 10 ;j + .word 11 ;k + .word 12 ;l + .word 13 ;m + .word 14 ;n + .word 15 ;o + .word 16 ;p + .word 17 ;q + .word 18 ;r + .word 19 ;s + .word 20 ;t + .word 21 ;u + .word 22 ;v + .word 23 ;w + .word 24 ;x + .word 25 ;y + .word 26 ;z + .word 27 ;! + .word 28 ;del + .word 29 ;spc + .word 0 ;end + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete + + move *a13(PC_CURSPOS),a0 + cmpi DEL_CHAR,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 END_CHAR,a0 +; movi -1,a0 + clr 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 check_end + + move *a13(PC_CURSPOS),a0 + cmpi END_CHAR,a0 ;delete icon? + jrne #no_end +#chkend + setc + rets +#no_end + 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,a3,L +; calla SNDSND + move *a0,a0,L + calla snd_play1 + + move *a13(PC_CURSOBJ),a8,L + calla obj_on +; +; Don't flash cursor if entering PIN NUMBER +; + move *a13(PC_CHARPOS),a0 +;; cmpi 7,a0 +;; jrhs #flsh ;br=blink if entering game name + cmpi NAME_LETTERS,a0 + jrhs #noflsh ;br=entering pin number +; movi 0202h,a9 ;const flash colour (black) +#flsh movi 0101h,a9 ;const flash colour (white) + + movi 0202h,a10 ;const colour + JSRP flash_cursor +#noflsh + 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,#name3,#name4,#name5 + .long #pin1,#pin2,#pin3,#pin4 +;;;; .long #pltr1,#pltr2,#pltr3,#pltr4,#pltr5,#pltr6 +;;;; .long #name0,#name1,#name2,#mont,,#day + +#name0 +#name1 +#name2 +#name3 +#name4 + calla check_end + jrnc #x11 ;br=plyr didn't select END + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x111a + subk INAMODE,a14 + jrne #x111 +#x111a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x111 calla censor_players_name + jrnc #x1 ;br=NAUGHTY word found... + movi NAME_LETTERS,a0 ;set so that PIN nbr is next + move a0,*a13(PC_CHARPOS) + jrc #x2 + +#x11 calla check_delete + jrc #x1 + calla inc_charpos +#x1 rets + +#name5 + calla check_delete + jrc #x3 + move *a13(PC_PLAYNUM),a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 +;DJT Start + jreq #x211a + subk INAMODE,a14 + jrne #x211 +#x211a +;DJT End + clr a0 ;used 'player1_data' in CREATE PLAYER +#x211 calla censor_players_name + jrnc #x3 ;br=NAUGHTY word found... + calla inc_charpos +#x2 calla next_menu + calla hide_name_objs + clr a0 + calla move_cursor + calla create_heading +#x3 rets + + + +#pin1 +#pin2 +#pin3 + calla check_delete_pin_nbr + jrc #pinx1 + calla inc_charpos +#pinx1 rets + +#pin4 + calla check_delete_pin_nbr + jrc #pinx2 + 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 create_heading ;show stats, if any +#pinx2 rets + + +#***************************************************************************** +****************************************************************************** + SUBRP check_delete_pin_nbr + + move *a13(PC_CURSPOS),a0 + cmpi 11,a0 ;delete icon? + jrne #no_delete + + move *a13(PC_CHARPOS),a0 ;no delete, but can't select + cmpi NAME_LETTERS,a0 + jreq #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 + +#***************************************************************************** +* hide all name images off bottom of screen +****************************************************************************** + SUBRP hide_name_objs + + movi PC_NAM1OBJ,a3 + add a13,a3 + movk 10,a2 ;6 name objs to hide + pin number (4) +#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 + +#***************************************************************************** +* INPUT: a9 = const colour for flash +* a10 = const colour to revert to +*----------------------------------------------------------------------------- + SUBR flash_cursor + + movk 2,a11 +#again + move a9,*a8(OCONST) + SLEEPK 2 + move a10,*a8(OCONST) + SLEEPK 2 + 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 1919h,a2 +; move a2,*a8(OCONST) +; calla const_on +; move *a11(20h),a8,L +; 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 +MESSAGE_Y equ 208<<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 58,149,251,343 ;x val (normal 4-player game) + +#msg_x2 .word 0,101,295,0 ;x val (KIT) + + +#***************************************************************************** +* 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 + + +#***************************************************************************** +****************************************************************************** + 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_NAME1,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) +; movi END_CHAR,a0 + clr a0 + move a0,*a1(PR_NAME1) + move a0,*a1(PR_NAME2) + move a0,*a1(PR_NAME3) + move a0,*a1(PR_NAME4) + move a0,*a1(PR_NAME5) + move a0,*a1(PR_NAME6) + move a0,*a1(PR_PIN_NBR1) + move a0,*a1(PR_PIN_NBR2) + move a0,*a1(PR_PIN_NBR3) + move a0,*a1(PR_PIN_NBR4) + + 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 INGA16_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 0202h,a0 + move a0,*a8(OCONST) + move a8,*a13(PC_CURSOBJ),L + + move *a13(PC_OBJID),a5 + ori 10h,a5 ;ID + calla create_name_objs + calla create_pin_nbr_objs + + clr a0 + move a0,*a13(PC_CHARPOS) + +;;;; calla create_initials_pin_nbr_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 @transition_flag,a0 + jrnz #loop ;br -> 1=doin screen transition + +; 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 MENU_LEVELS,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 + move *a13(PC_OBJID),a0 + ori 10h,a0 + calla obj_del1c + + 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 + +;DJT Start + .if TRIVCON +;DJT End + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrlo ano_1 + move *a13(PC_PLAYNUM),a10 +;DJT Start + .ref qualify_plaque + CREATE0 qualify_plaque + .ref print_trivia_info + calla print_trivia_info +;DJT End + + JSRP ask_yes_no + + move *a13(PC_PLAYNUM),a10 + calla del_yes_no_buttons ;and instructions + + move a11,a11 + jrnz ano_1 ;br='NO' selected +;DJT Start + .ref show_trivia_stuff + JSRP show_trivia_stuff + .endif ;TRIVCON +;DJT End + +ano_1 move a13,a11 + CREATE0 plyr_plaques + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a13(PC_PLAYNUM),a10 + calla check_special_initials ;look for designer heads...etc + + JSRP print_player_stats + + move *a13(PC_DATADDR),a3,L ;start of player data + move *a3(PR_NAME1),a0 + jrgt #valid +; move *a3(PR_PIN_NBR1),a0 +; jrle #invalid + +; jrnn #valid +;; cmpi END_CHAR,a0 +;; jrlo #valid ;br=name is fine! +; +;is ENDXXXXX,0000 ;so erase his ass +; +#invalid +; movi -1,a0 +; movi END_CHAR,a0 + clr a0 + move a0,*a3(PR_NAME1) + move a0,*a3(PR_NAME2) + move a0,*a3(PR_NAME3) + move a0,*a3(PR_NAME4) + move a0,*a3(PR_NAME5) + move a0,*a3(PR_NAME6) + move a0,*a3(PR_PIN_NBR1) + move a0,*a3(PR_PIN_NBR2) + move a0,*a3(PR_PIN_NBR3) + move a0,*a3(PR_PIN_NBR4) +; clr a0 + move a0,*a3(PR_COUNT) +#valid + +; 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 +; +; +;#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 NUM_TEAMS,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 adv_stats +#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 + + + +#obj_ids + .word TYPTEXT|SUBPL1 + .word TYPTEXT|SUBPL2 + .word TYPTEXT|SUBPL3 + .word TYPTEXT|SUBPL4 + +#center_xs ;for menu data (letters and pin number objs) + .word 54,60, 0,0 ;player 1 + .word 150,151,101,0 ;player 2 + .word 248,254,295,0 ;player 3 + .word 344,345,0,0 ;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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + + 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 ALL_TMS_DEFEATD,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,a3,L +; calla SNDSND + 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 + + movi DMAWNZ,a4 ;DMA flags + +; move @GAMSTATE,a3 +; cmpi INPLYRDESIGN,a3 +; jrne #cp_1 ;not in CREATE PLAYER +; +; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +;#cp_1 + movk 8,a3 ;z pos + 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,WGSF_B_P + .long INGA_Y_P,INGA_Y_P,INGA_WDP,INGA_WDP,INGA_Y_P + .long 0,0,0,0 + .long SGMD8WHT,SGMD8WHT ;left & right city columns + + +#***************************************************************************** +****************************************************************************** + SUBR credits + + clr a0 ;y offset + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nt2p + movi [1,0],a0 +#nt2p calla create_credits + 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 + +#***************************************************************************** +; This process creates/updates the CREDITS value during CREATE PLAYER mode +****************************************************************************** + SUBR create_and_watch_credits + + movi [2,0],a0 ;y offset + calla create_credits + + move @credit1_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit2_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + + move @credit3_obj,a8,L + move *a8(OXVAL),a0,L + subi 00100000h,a0 + move a0,*a8(OXVAL),L ;move all CREDIT obj. left + +#credit_loop + calla update_credits + SLEEPK 1 + jruc #credit_loop + + + + .asg 240<<16,CREDIT_Y + .asg 211<<16,CREDIT_X + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_credit_plate + + movi CREDIT_X-03300000,a0 ;X coor. + movi CREDIT_Y-00000000,a1 ;Y coor. + movi CREDTOOB,a2,L + movi 70,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 + clr a5 + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + +#***************************************************************************** +****************************************************************************** + 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 18000-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 ;"CREDIT" + + 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 18000-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 ;1st credit digit + + + 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 18000-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 ;3rd credit digit or FREEPLAY + + 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,a5 ;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 237<<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,a4 ;DMA flags +;; 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 + +;Positions for 4-player version +#credit_positions + .long 34<<16 ;player 1 + .long 126<<16 ;player 2 + .long 228<<16 ;player 3 + .long 321<<16 ;player 4 + +;Positions for KIT +#credit_positions2 + .long 0 ;player 1 + .long 80<<16 ;player 2 + .long 274<<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 + jrz #4_plyrs + + move @PSTATUS,a0 + subk 6,a0 + jrnz #2_plyrs + jruc #cyc_kil + +#4_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 + + move @PSTATUS,a0 + subk 15,a0 + jrnz #2_plyrs +#cyc_kil + movi JOIN_CYCLE_PID,a0 + calla KIL1C +#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 ;'join in' img + 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 * + +;update palette and bits per pixel + PUSH a0 + move *a0(ICMAP),a0,L + calla pal_getf + move a0,*a8(OPAL) + PULL a0 + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a0(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) +; 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 + + 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 +;me PUSH a4 + move a4,a11 + 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 + +;me PULL a4 + move a11,a4 + +#no_player +#purchased +#no_purchase + inc a4 + cmpi 4,a4 + jrlt #next + + SLEEPK 2 + jruc #loopit + +#images + .long FulGameblu,FulGamegrn + .long FulGameyel,FulGamered + .long FulGameblu,FulGameblu + .long FulGamered,FulGamered + +#plaque_xs + .word 13,105,207,299 + .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 + + + +;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 +; + +#***************************************************************************** + + 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 + + +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,@IRQSKYE ;background color + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + +;build new background + + movi wipe_horz_stag_dwn,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill all old background objs + clr a0 + movi -1,a1 + calla obj_delc + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + + movi subsitution_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #sub2 + movi subsitution_kit_mod,a0 +#sub2 move a0,@BAKMODS,L + calla BGND_UD1 + + SLEEPK 1 + + +;;Just in case someone bought in during game play, and teamx_control had not +;;been set! +; +; move @team1_control,a0 +; jrn #no1 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #tm1ok +;#no1 +; move @PSTATUS,a0 +; btst 0,a0 +; jrz #nop1 +; clr a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop1 +; move @PSTATUS,a0 +; btst 1,a0 +; jrz #nop2 +; movk 1,a0 +; move a0,@team1_control +; jruc #tm1ok +;#nop2 +; movi -1,a0 +; move a0,@team1_control +;#tm1ok +; move @team2_control,a0 +; jrn #no2 +; move @PSTATUS,a1 +; btst a0,a1 +; jrnz #team2_ok +;#no2 +; move @PSTATUS,a0 +; btst 2,a0 +; jrz #nop3 +; movk 2,a0 +; move a0,@team2_control +; jruc #tm2ok +;#nop3 +; move @PSTATUS,a0 +; btst 3,a0 +; jrz #nop4 +; movk 3,a0 +; move a0,@team2_control +; jruc #team2_ok +;#nop4 +; movi -1,a0 +; move a0,@team2_control +;#tm2ok + + 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 +;DJT Start + + move @team1,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm1set,a2,L + move a0,*a2 + clr a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl + move @team2_control,a0 + jrnn #noscrambl2 +;DJT Start + + move @team2,a2 ;CPU team. Do RNDPER for new squad # + sll 4,a2 ; based on total possible per team + movi team_sqaud_cnts,a2,L + add a2,a0 + move *a0,a0 + subk 1,a0 + calla RNDRNG0 + addi tm2set,a2,L + move a0,*a2 + movk 1,a8 + CREATE0 cpu_subs +;DJT End + +#noscrambl2 + CREATE0 credits3 + + movi [175,0],a0 ;x val + movi [238,0],a1 ;y val + movi CREDTOOB,a2 + movi 2700,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movk 2,a0 + calla create_title_bar + calla print_subsitution_title + calla print_subsitution_directions + + clr a0 + calla create_player_head_backdrops + movk 2,a0 + calla create_logos + movk 2,a0 + calla create_player_heads + calla create_player_names + + calla update_logos + calla update_player_heads + calla update_player_names + +; callr hide_ball_under_logo + + movk 1,a0 + move a0,@in_team_select + move a0,@fixbug + move a0,@in_team_subs + + movi -1,a0 + move a0,@p1_hide_atts + move a0,@p2_hide_atts + move a0,@p3_hide_atts + move a0,@p4_hide_atts + + clr a0 + move a0,@exit_status + move a0,@force_selection + +;; CREATE0 team_control ;determine which plyr control joystick + CREATE0 team1_team_select + CREATE0 team2_team_select + + SLEEPK 6 + + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + SLEEPK 1 + +;what the hell !!! +;DJT Start + movi OBJLST,a1 + jruc so20 +so10 move *a1(OFLAGS),a0 + andi DMAWNZ+M_CHARGEN+M_PIXSCAN,a0 + move a0,*a1(OFLAGS) +so20 move *a1,a1,L + jrnz so10 +;DJT End + + JSRP subs_in + + clr a0 + move a0,@in_team_subs + + .ref kill_flsh_txt_proc + calla kill_flsh_txt_proc + +; movi HIT_PTS_FRACTION,a0,L +; calla obj_del1c ;delete instructions + + calla setup_speech + calla set_names +;DJT Start + + movk 3,a0 +#nfx + calla plyrname_fix + dsj a0,#nfx +;DJT End + RETP + +**************************************************************** +* +* this is a cheat, cause I dont want to change a bunch of code +* so i just put the logo backdrops offscreen!! +* +**************************************************************** + SUBR hide_ball_under_logo + + move @logo1_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + + move @logo2_obj+20h,a0,L + move *a0(OXPOS),a14 + addi 400,a14 + move a14,*a0(OXPOS) + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + + +****************************************************************************** + .asg 16,X ;distance in X + .asg 24,Y ;22 ;distance in Y (from UPPER LFT CRNR of IMG) + +name_table + .word 5,5*6 ;width, width * height in letters + ;img, xoff, yoff + .word 01,2,000, 02,X*1,000, 03,X*2,000, 04,X*3,000, 05,X*4,000 ;abcde + .word 06,2,Y*1, 07,X*1,Y*1, 08,X*2+1,Y*1, 09,X*3+4,Y*1, 10,X*4+1,Y*1 ;fghij + .word 11,2,Y*2, 12,X*1+2,Y*2, 13,X*2-3,Y*2, 14,X*3,Y*2, 15,X*4,Y*2 ;klmno + .word 16,2,Y*3, 17,X*1+1,Y*3, 18,X*2+1,Y*3, 19,X*3+1,Y*3,20,X*4,Y*3 ;pqrst + .word 21,2,Y*4, 22,X*1-1,Y*4, 23,X*2-2,Y*4, 24,X*3+2,Y*4,25,X*4+1,Y*4 ;uvwxy + .word 26,2,Y*5, 27,X*1+3,Y*5, 28,X*2,Y*5, 29,X*3,Y*5, 30,X*4-1,Y*5 ;z! 7fff ;30*60 +;TEAMSEL_PAGE equ 0*256 +;NAMENT_PAGE equ 1*256 + + .asg >5e+5,x1 + .asg >a1+5,x1a + .asg >e4+5,x2a + .asg >ad+5,x1b + .asg >12f5+2,y1 + .asg >131f,y1a + + + .def ladder_imgs0 + .def ladder_imgs1,ladder_imgs2,ladder_imgs3,ladder_imgs4 + .def ladder_imgs5,ladder_imgs6 + + +ladder_imgs0 +ladder_imgs1 +ladder_imgs2 +ladder_imgs3 +ladder_imgs4 +ladder_imgs5 +ladder_imgs6 +;2 +; +; +; .long HPR_DAL,x1+400,y1 +; .long JAC_DAL,x1,y1 +; .long MAS_DAL,x2a,y1 +; .long T_MAVS,x1b,y1a +; +; .long THM_DET,x1,y1->b3 +; .long DUM_DET,x1a,y1->b3 +; +; .long ELL_DET,x2a,y1->b3 +;; .long HOR_HOU,x2a,y1->b3 +; .long T_PISS,x1b,y1a->b3 +; +; .long 0 +; +;ladder_imgs1 +;;4 +; .long BAK_MLW,x1,y1->b3*2-2 +; .long EDW_MLW,x1a,y1->b3*2-2 +; .long DAY_MLW,x2a,y1->b3*2-2 +; .long T_BUCKS,x1b,y1a->b3*2-2 +; +; .long GUG_WAS,x1,y1->b3*3-2 +; .long ELL_WAS,x1a,y1->b3*3-2 +; .long CHE_WAS,x2a,y1->b3*3-2 +; .long T_BULTS,x1b,y1a->b3*3-2 +; +; .long SIM_SAC,x1,y1->b3*4-4 +; .long HUR_SAC,x1a,y1->b3*4-4 +; .long RIC_SAC,x2a,y1->b3*4-4 +; .long T_KINGS,x1b,y1a->b3*4-4 +; +; .long LTN_MIN,x1,y1->b3*5-4 +; .long PRS_MIN,x1a,y1->b3*5-4 +; .long RID_MIN,x2a,y1->b3*5-4 +; .long T_TWOLV,x1b,y1a->b3*5-4 +; +; .long 0 +; +;ladder_imgs2 +;;4 +; .long PEE_LAK,x1,y1->b3*6-6 +; .long DIV_LAK,x1a,y1->b3*6-6 +; .long CAM_LAK,x2a,y1->b3*6-6 +; .long T_LAKS,x1b,y1a->b3*6-6 +; +; .long WLK_ATL,x1,y1->b3*7-6 +;; .long MAN_CLP,x1,y1->b3*7-6 +; .long HRP_CLP,x1a,y1->b3*7-6 +; .long ROB_CLP,x2a,y1->b3*7-6 +; .long T_CLIPS,x1b,y1a->b3*7-6 +; +; .long MCD_BOS,x1,y1->b3*8-8 +; .long BRO_BOS,x1a,y1->b3*8-8 +; .long GAM_BOS,x2a,y1->b3*8-8 +; .long T_CELTS,x1b,y1a->b3*8-8 +; +; .long WEA_PHL,x1,y1->b3*9-8 +;; .long BRA_PHL,x1a,y1->b3*9-8 +; .long BRA_PHL,x2a,y1->b3*9-8 +; .long HRN_PHL,x2a+400,y1->b3*9-8 +; .long T_76RS,x1b,y1a->b3*9-8 +; +; .long 0 +; +;ladder_imgs3 +;;4 +; .long MIL_IND,x1,y1->b3*10-10 +; .long SMI_IND,x1a,y1->b3*10-10 +; .long SEL_IND,x2a,y1->b3*10-10 +; .long T_PACER,x1b,y1a->b3*10-10 +; +; .long COL_NEJ,x1,y1->b3*11-10 +; .long AND_NEJ,x1a,y1->b3*11-10 +; .long MOR_NEJ,x2a,y1->b3*11-10 +; .long T_NETS,x1b,y1a->b3*11-10 +; +; .long PRC_CLE,x1,y1->b3*12-12 +; .long DAU_CLE,x1a,y1->b3*12-12 +; .long NAN_CLE,x2a,y1->b3*12-12 +; .long T_CAVS,x1b,y1a->b3*12-12 +; +; .long MUT_DEN,x1,y1->b3*13-12 +; .long ELL_DEN,x1a,y1->b3*13-12 +; .long ROG_DEN,x2a,y1->b3*13-12 +; .long T_NUGS,x1b,y1a->b3*13-12 +; +; .long 0 +; +;ladder_imgs4 +;;4 +; .long HRD_GLD,x1,y1->b3*14-14 +; .long MUL_GLD,x1a,y1->b3*14-14 +; .long WEB_GLD,x2a,y1->b3*14-14 +; .long T_WARS,x1b,y1a->b3*14-14 +; +; .long DRX_PRT,x1,y1->b3*15-14 +; .long POR_PRT,x1a,y1->b3*15-14 +; .long ROB_PRT,x2a,y1->b3*15-14 +; .long T_BLAZ,x1b,y1a->b3*15-14 +; +; .long RCE_MIA,x1,y1->b3*16-16 +; .long SKL_MIA,x1a,y1->b3*16-16 +; .long MIN_MIA,x2a,y1->b3*16-16 +; .long T_HEAT,x1b,y1a->b3*16-16 +; +; .long JON_CHA,x1,y1->b3*17-16 +; .long HWK_CHA,x1a,y1->b3*17-16 +; .long MOU_CHA,x2a,y1->b3*17-16 +; .long T_HORS,x1b,y1a->b3*17-16 +; +; .long 0 +; +;ladder_imgs5 +;;4 +; .long SKL_ORL,x1,y1->b3*18-18 +; .long HAR_ORL,x1a,y1->b3*18-18 +; .long AND_ORL,x2a,y1->b3*18-18 +; .long T_MAGIC,x1b,y1a->b3*18-18 +; +; .long ROB_SAN,x1,y1->b3*19-18 +; .long ROD_SAN,x1a,y1->b3*19-18 +; .long ELS_SAN,x2a,y1->b3*19-18 +; .long T_SPURS,x1b,y1a->b3*19-18 +; +; .long MLN_UTA,x1,y1->b3*20-20 +; .long STK_UTA,x1a,y1->b3*20-20 +; .long BEN_UTA,x2a,y1->b3*20-20 +; .long T_JAZZ,x1b,y1a->b3*20-20 +; +; .long EWG_NEY,x1,y1->b3*21-20 +; .long MAS_NEY,x1a,y1->b3*21-20 +; .long STA_NEY,x2a,y1->b3*21-20 +; .long T_KNIKS,x1b,y1a->b3*21-20 +; +; .long 0 +; +;ladder_imgs6 +;;4 +; .long MAN_CLP,x1,y1->b3*22-22 +;; .long WLK_ATL,x1,y1->b3*22-22 +; .long AUG_ATL,x1a,y1->b3*22-22 +; .long WLS_ATL,x2a,y1->b3*22-22 +; .long T_HAWKS,x1b,y1a->b3*22-22 +; +;; .long BRK_PHX,x1,y1->b3*23-22 +;; .long MAJ_PHX,x1,y1->b3*23-22 +; .long MAJ_PHX,x1a,y1->b3*23-22 +; .long JOH_PHX,x2a,y1->b3*23-22 +; .long T_SUNS,x1b,y1a->b3*23-22 +; +; .long OLA_HOU,x1,y1->b3*24-24 +; .long MAX_HOU,x1a,y1->b3*24-24 +;; .long ELL_DET,x2a,y1->b3 +;; .long ELL_DET,x2a,y1->b3*24-24 +; .long HOR_HOU,x2a,y1->b3*24-24 +; .long T_ROCKS,x1b,y1a->b3*24-24 +; +; .long KMP_SEA,x1,y1->b3*25-24 +; .long PAY_SEA,x1a,y1->b3*25-24 +; .long GIL_SEA,x2a,y1->b3*25-24 +; .long T_SONICS,x1b,y1a->b3*25-24 +; +; +; .long 0 + + +#***************************************************************************** +* a8 = sleep time +* a9 = palette to change +* a10 = * palette list +* a11 = * morf pal ram + + +START_PAL equ PDATA +CUR_PAL equ PDATA+20h +PAL_ADDR equ PDATA+40h +MORF_PAL equ PDATA+60h +SLEEP_TIME equ PDATA+80h + + SUBR morf_pal + + + move a8,*a13(SLEEP_TIME) + move a10,*a13(START_PAL),L + move a10,*a13(CUR_PAL),L + move a11,*a13(MORF_PAL),L + +#wait + SLEEPK 1 + + move a9,a0 + calla pal_find + jrz #wait + srl 8,a0 + sll 8,a0 + move a0,*a13(PAL_ADDR),L + + move *a13(MORF_PAL),a1,L + move *a10,a2,L + move *a2+,a3 ;num colours +#loop + move *a2+,*a1+ + dsj a3,#loop + +; SLEEP 4 + move *a13(SLEEP_TIME),a10 +#dly1 + SLEEPK 1 + dsj a10,#dly1 +#next_pal + + move *a13(CUR_PAL),a10,L + addi 20h,a10 + move *a10,a0,L + jrn #ok + jrz #not_sleep + + move a10,*a13(CUR_PAL),L + move a0,a10 + jruc #dly1 + +#not_sleep + move *a13(START_PAL),a10,L +#ok + move a10,*a13(CUR_PAL),L + +#again +; SLEEP 2 + move *a13(SLEEP_TIME),a10 + srl 1,a10 + jrnz #dly2 + movk 1,a10 +#dly2 + SLEEPK 1 + dsj a10,#dly2 + + + move *a13(MORF_PAL),a1,L + move *a13(CUR_PAL),a10,L + move *a10,a2,L + move *a2+,a0 ;num colours + clr a11 +#morfit + move *a1,a3 ;CURRENT PALETTE + movi 0111110000000000b,a4 ;5 bits of red + and a3,a4 + movi 0000001111100000b,a5 ;5 bits of green + and a3,a5 + movi 0000000000011111b,a6 ;5 bits of blue + and a3,a6 + + move *a2+,a7 ;DEST PALETTE + movi 0111110000000000b,a8 ;5 bits of red + and a7,a8 + movi 0000001111100000b,a9 ;5 bits of green + and a7,a9 + movi 0000000000011111b,a10 ;5 bits of blue + and a7,a10 + + srl 10,a4 + srl 10,a8 + cmp a4,a8 ;a8-a4 + jreq #redok + jrlt #decr + inc a11 + inc a4 + jruc #redok +#decr + inc a11 + dec a4 +#redok + sll 10,a4 + + srl 5,a5 + srl 5,a9 + cmp a5,a9 + jreq #greenok + jrlt #decg + inc a11 + inc a5 + jruc #greenok +#decg + inc a11 + dec a5 +#greenok + sll 5,a5 + + cmp a6,a10 + jreq #blueok + jrlt #decb + inc a11 + inc a6 + jruc #blueok +#decb + inc a11 + dec a6 +#blueok + + or a5,a4 + or a6,a4 + move a4,*a1+ + + dsj a0,#morfit + + move *a13(CUR_PAL),a0,L ;* palette list + move *a0,a0,L ;* palette + move *a0,a2 ;num colours + move *a13(MORF_PAL),a0,L ;* palette + move *a13(PAL_ADDR),a1,L ;dest palette + calla pal_set + + move a11,a11 + jrnz #again + + jruc #next_pal + + DIE + + +; movi GREENPAL,a0 ;* palette +; move *a0+,a2 ;num colours +; move a10,a1 ;dest palette +; calla pal_set + +#***************************************************************************** +* +* RETURN: a0 = start button bits +*----------------------------------------------------------------------------- + + SUBR get_all_starts_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_start_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_start_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_start_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_start_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + +#***************************************************************************** +* +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + + SUBR get_start_down + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +start_offs .word 12h,15h,19h,1ah + .else +start_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_start_cur + + sll 4,a0 ;x 16 bits + addi start_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 1,a0 + rets + +#***************************************************************************** + + SUBR get_team1_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** + SUBR get_team2_turbo + + clr a1 + + move @PSTATUS,a2 + + btst 2,a2 + jrz #no_player1 + movk 2,a0 ;player 3 + calla get_turbo_down + or a0,a1 +#no_player1 + + btst 3,a2 + jrz #no_player2 + movk 3,a0 ;player 4 + calla get_turbo_down + or a0,a1 +#no_player2 + move a1,a0 + + rets + +#***************************************************************************** +* RETURN: a0 = start bit +*----------------------------------------------------------------------------- + SUBR get_turbo_down + + sll 4,a0 ;x 16 bits + addi turbo_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 1,a0 + rets + + + .if TUNIT +turbo_offs .word 06h,0eh,26h,2eh + .else +turbo_offs .word 12h,15h,17h,27h + .endif + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_cur2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_cur + or a0,a1 + + movk 1,a0 ;player 2 + calla get_stick_val_cur + or a0,a1 + + movk 2,a0 ;player 3 + calla get_stick_val_cur + or a0,a1 + + movk 3,a0 ;player 4 + calla get_stick_val_cur + or a0,a1 + + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_cur + .ref stick_amode_mkplr + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_cur + + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01111b,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_stick_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_stick_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_stick_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_sticks_down2 + + clr a1 + + clr a0 ;player 1 + calla get_stick_val_down + or a0,a1 + + movk 1,a0 + calla get_stick_val_down + or a0,a1 + + movk 2,a0 + calla get_stick_val_down + or a0,a1 + + movk 3,a0 + calla get_stick_val_down + or a0,a1 + move a1,a0 + + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_stick_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_stick_val_down + move @stick_amode_mkplr,a0 + andi 01111b,a0 + rets + +;DJT End + SUBR get_stick_val_down + + sll 4,a0 ;x 16 bits + addi joy_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 01111b,a0 + rets + +joy_offs .word 00h,08h,20h,28h + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_cur2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_cur + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_cur + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_cur + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_cur + or a0,a1 + move a1,a0 + rets + + +#***************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_cur_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_cur + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 0111b,a0 + rets + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down + + clr a1 + + move @PSTATUS,a2 + + btst 0,a2 + jrz #no_player1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 +#no_player1 + + btst 1,a2 + jrz #no_player2 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 +#no_player2 + + btst 2,a2 + jrz #no_player3 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 +#no_player3 + + btst 3,a2 + jrz #no_player4 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 +#no_player4 + + move a1,a0 + rets + + +#***************************************************************************** +* RETURN: a0 = joy switch bits +*----------------------------------------------------------------------------- + SUBR get_all_buttons_down2 + + clr a1 + clr a0 ;player 1 + calla get_but_val_down + or a0,a1 + movk 1,a0 ;player 2 + calla get_but_val_down + or a0,a1 + movk 2,a0 ;player 3 + calla get_but_val_down + or a0,a1 + movk 3,a0 ;player 4 + calla get_but_val_down + or a0,a1 + move a1,a0 + rets + + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- +;DJT Start + SUBR get_but_val_down_mkplr + + PUSH a0 + move @GAMSTATE,a0 + subk INAMODE,a0 + mmfm sp,a0 + jrnz get_but_val_down + move @stick_amode_mkplr,a0 + srl 4,a0 + andi 0111b,a0 + rets + +;DJT End + SUBR get_but_val_down + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 + andi 0111b,a0 + rets + + .if TUNIT +but_offs .word 04h,0ch,24h,2ch + .else +but_offs .word 04h,0ch,1ch,24h + .endif + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_but_val_down_nt ;masks out turbo button + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_down,a0 + move *a0,a0 +; andi 011b,a0 ;mask out turbo + andi 01b,a0 ;mask out turbo and pass + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_steal_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 010b,a0 ;mask out turbo & shoot + rets + +****************************************************************************** +* INPUT: a0 = player number (0-3) +*----------------------------------------------------------------------------- +* RETURN: a0 = button bits +*----------------------------------------------------------------------------- + SUBR get_block_but_cur + + sll 4,a0 ;x 16 bits + addi but_offs,a0 + move *a0,a0 + addi switches_cur,a0 + move *a0,a0 + andi 01b,a0 ;mask out turbo and pass + rets + +#***************************************************************************** + + .asg 330,X1 ;89,X1 + .asg 330,X2 ;307,X2 + .asg 207,Y + .asg 217,Y2 + + SUBR result_screen + + move @kp_scores,a0,L + move a0,@scores,L + move @scores,a0 + move @scores+16,a14 + add a0,a14 + cmpi 20,a14 + jrlt #x + + move @kp_team1,a0 + move a0,@team1 + move @kp_team2,a0 + move a0,@team2 + + move @kp_p1_crtplr,a14 + move a14,@player1_data+PR_CREATED_PLYR + move @kp_p1_name1,a14 + move a14,@player1_data+PR_NAME1 + move @kp_p1_name2,a14 + move a14,@player1_data+PR_NAME2 + move @kp_p1_name3,a14 + move a14,@player1_data+PR_NAME3 + move @kp_p1_name4,a14 + move a14,@player1_data+PR_NAME4 + move @kp_p1_name5,a14 + move a14,@player1_data+PR_NAME5 + move @kp_p1_name6,a14 + move a14,@player1_data+PR_NAME6 + move @kp_p1_hdnbr,a14 + move a14,@player1_data+PR_HEAD_NBR + + move @kp_p2_crtplr,a14 + move a14,@player2_data+PR_CREATED_PLYR + move @kp_p2_name1,a14 + move a14,@player2_data+PR_NAME1 + move @kp_p2_name2,a14 + move a14,@player2_data+PR_NAME2 + move @kp_p2_name3,a14 + move a14,@player2_data+PR_NAME3 + move @kp_p2_name4,a14 + move a14,@player2_data+PR_NAME4 + move @kp_p2_name5,a14 + move a14,@player2_data+PR_NAME5 + move @kp_p2_name6,a14 + move a14,@player2_data+PR_NAME6 + move @kp_p2_hdnbr,a14 + move a14,@player2_data+PR_HEAD_NBR + + move @kp_p3_crtplr,a14 + move a14,@player3_data+PR_CREATED_PLYR + move @kp_p3_name1,a14 + move a14,@player3_data+PR_NAME1 + move @kp_p3_name2,a14 + move a14,@player3_data+PR_NAME2 + move @kp_p3_name3,a14 + move a14,@player3_data+PR_NAME3 + move @kp_p3_name4,a14 + move a14,@player3_data+PR_NAME4 + move @kp_p3_name5,a14 + move a14,@player3_data+PR_NAME5 + move @kp_p3_name6,a14 + move a14,@player3_data+PR_NAME6 + move @kp_p3_hdnbr,a14 + move a14,@player3_data+PR_HEAD_NBR + + move @kp_p4_crtplr,a14 + move a14,@player4_data+PR_CREATED_PLYR + move @kp_p4_name1,a14 + move a14,@player4_data+PR_NAME1 + move @kp_p4_name2,a14 + move a14,@player4_data+PR_NAME2 + move @kp_p4_name3,a14 + move a14,@player4_data+PR_NAME3 + move @kp_p4_name4,a14 + move a14,@player4_data+PR_NAME4 + move @kp_p4_name5,a14 + move a14,@player4_data+PR_NAME5 + move @kp_p4_name6,a14 + move a14,@player4_data+PR_NAME6 + move @kp_p4_hdnbr,a14 + move a14,@player4_data+PR_HEAD_NBR + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + SLEEPK 2 + + movi result_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +; clr a10 +; movk 16,a11 +; CREATE0 fade_up + + movi finalres_str_setup,a2 + calla setup_message + movi finalres_str,a4,L + calla print_string_C2 + + movk 3,a0 + calla create_player_heads + movk 3,a0 + calla create_logos + + movi 170,a1 + calla create_names + + calla update_logos + calla update_player_heads + + movi name_setup,a2 + calla setup_message + + movi 170,a0 + move a0,@mess_cursy + + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nxt + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 56,a0 + move a0,@mess_cursx + calla print_string_C +#nxt + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nxt2 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 147,a0 + move a0,@mess_cursx + calla print_string_C +#nxt2 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nxt3 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 251,a0 + move a0,@mess_cursx + calla print_string_C +#nxt3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nxt4 + movi message_buffer,a3 ;* string dest + calla get_name_string + movi 342,a0 + move a0,@mess_cursx + calla print_string_C +#nxt4 +; calla hide_ball_under_logo + + movk 1,a10 + callr create_player_nubs + + CREATE0 final_scores + + movk 1,a0 + move a0,@DISPLAYON + + SLEEPK 2 + calla display_unblank + + SLEEP 1*TSEC + + movi 12*TSEC,a10 +#lp SLEEPK 1 + calla get_all_buttons_cur2 + jrz #nob + SOUND1 bounce_snd + jruc #xb +#nob + dsj a10,#lp +#xb + clr a10 + movk 16,a11 + CREATE0 fade_down + + SLEEPK 24 + + clr a14 + move a14,@player1_data+PR_CREATED_PLYR ;stop plyr from being + move a14,@player2_data+PR_CREATED_PLYR ;seen in amode + move a14,@player3_data+PR_CREATED_PLYR + move a14,@player4_data+PR_CREATED_PLYR + +#x + RETP + + +name_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 + + +finalres_str_setup + PRINT_STR brush20_ascii,10,0,200,7,BRSHGYOP,0 + +finalres_str + .string "FINAL RESULTS",0 + .even + + +result_mod + .long finalresBMOD + .word 0,0 + .long 0 + + +#***************************************************************************** +* This routine creates the player number graphic (nub) +* +* INPUT: +* reg a10 - X pos. table nbr. +****************************************************************************** + SUBR create_player_nubs + + PUSH a9 + movi 3500,a3 ;z pos + movi DMAWNZ|M_NOCOLL,a4 + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + sll 5,a10 + addi scr_x_tbl_ptrs,a10 + move *a10,a10,L + + movi nub_img_tbl,a9,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #nkit + movi nub_img_kit_tbl,a9,L +#nkit + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get Y pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10+,a1,W ;get X pos. + sll 16,a1 + move *a9+,a2,L + calla BEGINOBJ2 + + move *a10+,a0,W ;get X pos. + sll 16,a0 + move *a10,a1,W ;get X pos. + sll 16,a1 + move *a9,a2,L + calla BEGINOBJ2 + PULL a9 + rets + + +nub_img_tbl + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB3 + .long PLYRNUB4 + +nub_img_kit_tbl + .long PLYRNUB1 + .long PLYRNUB1 + .long PLYRNUB2 + .long PLYRNUB2 + + +scr_x_tbl_ptrs + .long stat_x_tbl,result_x_tbl + + +;stat screen +stat_x_tbl + .word 13,103 ;plyr 1 + .word 179,103 ;plyr 2 + .word 208,103 ;plyr 3 + .word 374,103 ;plyr 4 + +;final result screen +result_x_tbl + .word 12,168 + .word 178,168 + .word 208,168 + .word 374,168 + + +#***************************************************************************** + + .if 0 + + SUBRP score_shadow + +#SHAD1 equ PDATA +#SHAD2 equ #SHAD1+20h + + .asg 40,X1 + .asg 257,X2 + .asg 205,Y + + movi [X1,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD1),L + + movi [X2,0],a0 ;x val + movi [Y,0],a1 ;y val + movi scorshad1,a2 ;* image + movi 300,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ + move a8,*a13(#SHAD2),L + + clr a10 +#big_mac + SLEEPK 1 + xori 1,a10 + + move a10,a0 + sll 5,a0 ;x 32 bits + addi #shadows,a0 + move *a0,a11,L ;* image + + move *a13(#SHAD1),a8,L + calla #change_shad + move *a13(#SHAD2),a8,L + calla #change_shad + + jruc #big_mac + +#change_shad + move a11,a0 + move *a8(OCTRL),a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +#shadows + + .long scorshad1,scorshad2 + + .endif + +#***************************************************************************** +* Print the final scores +****************************************************************************** + SUBRP final_scores + + .asg 21,X1 + .asg 364,XF + .asg 206,Y1 + .asg 227,Y2 + .asg 118,QTR1_X + .asg 153,QTR2_X + .asg 187,QTR3_X + .asg 221,QTR4_X + .asg 255,OT1_X + .asg 289,OT2_X + .asg 323,OT3_X + +; +; Print team 1 city name +; + movi [X1,0],a0 ;x val + movi [Y1,0],a1 ;y val + move @team1,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot CITY NAME +; +; Print team 2 city name +; + movi [X1,0],a0 ;x val + movi [Y2,0],a1 ;y val + move @team2,a2 + move a2,a14 + sll 4,a14 ;word length + sll 5,a2 ;LONG length + add a14,a2 + addi city_table_start,a2 + move *a2,a2,L + movi BAST_W_P,b0,L + calla BEGINOBJP2 ;plot TEAM2 CITY NAME +; +; Print team scores, quarter by quarter +; + movi #score_setup,a2 + calla setup_message + move @scores,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + calla print_string_C + + move @scores+10h,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 1st quarter + + move @kp_qscrs2,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+16,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 2nd quarter + + move @kp_qscrs2+32,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+48,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 3rd quarter + + move @kp_qscrs2+64,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+80,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print 4th quarter + + move @kp_qscrs2+96,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+112,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi QTR4_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 1 +;DJT Start + + move @kp_qscrs2,a0,L + move @kp_qscrs2+32,a14,L + add a14,a0 + move @kp_qscrs2+64,a14,L + add a14,a0 + move @kp_qscrs2+96,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+128,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+144,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT1_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 2 +;DJT Start + + PULL a0 + move @kp_qscrs2+128,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + + PUSH a0 +;DJT End + move @kp_qscrs2+160,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+176,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT2_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C + +;Print Overtime 3 +;DJT Start + + PULL a0 + move @kp_qscrs2+160,a14,L + add a14,a0 + move @scores,a14,L + cmp a14,a0 + jreq ovr_dn + +;DJT End + move @kp_qscrs2+192,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y1-1,a0 + move a0,@mess_cursy + calla print_string_C + + move @kp_qscrs2+208,a0 + movi 999,a1 ;max value + calla dec_to_asc + calla copy_string + movi OT3_X,a0 + move a0,@mess_cursx + movi Y2-1,a0 + move a0,@mess_cursy + calla print_string_C +;DJT Start +ovr_dn +;DJT End + DIE + +#score_setup + PRINT_STR bast10_ascii,8,0,XF,Y1-1,BAST_W_P,0 + + +#***************************************************************************** + + SUBR matchup_screen + + movk 1,a0 + move a0,@inmatchup + + clr a0 + movi -1,a1 + calla obj_delc ;delete all obj. expect transition obj + + clr a1 ;kill all processes + calla KILALL + calla KILBGND ;Kill old background + + clr a0 + move a0,@dpageflip + + move @dpage,a1 + not a1 ;Flip + move a1,@dpage + +;wipe obj. over screen + movi wipe_horizontal,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + movk 1,a0 ;page flipping on + move a0,@dpageflip +; movk 1,a0 ;page flipping on +; move a0,@dtype + +; clr a0 +; move a0,@IRQSKYE ;background color + + movi matchup_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 +;DJT Start + + .if ANIM_VS + move @BAKLST,a0,L +#vsk + move *a0(OSIZEX),a14 + cmpi 44,a14 + jrne #vsk1 + move *a0(OCTRL),a14 + srl 2,a14 + sll 2,a14 + move a14,*a0(OCTRL) +#vsk1 + move *a0,a0,L + jrnz #vsk + .endif ;ANIM_VS +;DJT End + + movk 1,a0 + calla create_logos + calla update_logos + + movi tnght_mat_str_setup,a2 + calla setup_message + movi tonght_matchup_str,a4,L + calla print_string_C2 + + movi tm1_cty_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm1_nme_str_setup,a2 + calla setup_message + move @team1,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_cty_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14,a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi tm2_nme_str_setup,a2 + calla setup_message + move @team2,a14 + sll 6,a14 + addi city_names_str_tbl,a14 + move *a14(32),a4,L + calla print_string_C2 + + movi bsd_stat_str_setup,a2 + calla setup_message + movi bsd_stat_str,a4,L + calla print_string_C2 + + move @mess_cursy,a14 + addk 11,a14 + move a14,@mess_cursy + + + calla get_teams_pop + move @team1,a0 + sll 5,a0 + addi teams_pop,a0,L + move *a0,a0,L ;get team 1 'picked count' + + move @team2,a14 + sll 5,a14 + addi teams_pop,a14,L + move *a14,a14,L ;get team 2 'picked count' + + move @team2,a4 + cmp a0,a14 ;team 2 more popular ? + jrhs #tmpop ;br=yes + move @team1,a4 +#tmpop + sll 6,a4 + addi city_names_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + movi favored_by_str,a4 + calla concat_rom_string +;DJT Start + + clr a0 + .ref pup_msgs ;Matchup screen pup message flags + move a0,@pup_msgs,L +;DJT End + + movk 10,a0 + calla RNDRNG0 + inc a0 + movk 15,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_C + + clr a10 + CREATE0 plyr_get_combination + movk 1,a10 + CREATE0 plyr_get_combination + movk 2,a10 + CREATE0 plyr_get_combination + movk 3,a10 + CREATE0 plyr_get_combination + +; .ref tuneq1_snd +; SOUND1 tuneq1_snd + + SLEEPK 1 + +;wipe objs off screen -- reveal new screen + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition + + .ref start_powerups + CREATE SMOVE_PID,start_powerups + + SLEEPK 1 + +;DJT Start + .if ANIM_VS + CREATE VS_LOGO_PID,animate_vs_logo + .endif ;ANIM_VS + CREATE0 call_matchup + + movi TSEC*13/2,a10 ;!!! 4 +;DJT End +#delay + SLEEPK 1 + dsj a10,#delay +#exit + calla set_plyrs_powerup_ram + movi SMOVE_PID,a0 + movi -1,a1 + calla KILALL + RETP + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + calla DELOBJA8 + + SUBR timeout + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +;DJT Start + .if TRIVCON +;DJT End +#****************************************************************************** +; a10 = sleep count + + .asg 198,X + .asg 135,Y + + + SUBR timeout4 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait ;wait before count down + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_5,a2 ;* image + movi 20700,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TRIVIA_TIMER,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + movi 5,a11 +#loop + SOUND1 cntdown_snd + + SLEEP TSEC+25 + + calla obj_off + + SOUND1 cntdown_snd + + SLEEP (1*TSEC)/2 + + calla obj_on + move a11,a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + dsj a11,#loop + + SOUND1 cntdown_snd + + SLEEP (1*TSEC+25)/2 ;Give'm a grace period + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 +;DJT Start + .endif ;TRIVCON +;DJT End + + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + +#restart + PULLP a0 + calla DELOBJA8 + + SUBR timeout2 + + clr a0 + move a0,@force_selection + + move a10,a11 +#wait + SLEEPK 1 + dsj a11,#wait + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + movi TSEC+25,a11 +#loop2 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit1 + dsj a11,#loop2 +#xit1 + SOUND1 cntdown_snd + + move @PSTATUS,a0 ;if player buys in + cmp a9,a0 ;then restart timer + jrne #restart + calla obj_off + movi (1*TSEC)/2,a11 +#loop3 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit2 + dsj a11,#loop3 +#xit2 + move @PSTATUS,a0 + cmp a9,a0 + jrne #restart + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + movi (1*TSEC+25)/2,a11 +#loop4 + SLEEPK 1 + calla get_all_starts_down + jrnz #xit3 + dsj a11,#loop4 +#xit3 + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + +;;#nums .long lgmd_0,lgmd_1,lgmd_2 +;; .long lgmd_3,lgmd_4,lgmd_5 +;; .long lgmd_6,lgmd_7,lgmd_8,lgmd_9 + +#****************************************************************************** +; a10 = sleep count + + .asg 200-2,X + .asg 135,Y + + SUBR timeout3 + + clr a0 + move a0,@force_selection + + .ref BTIME + move a0,@BTIME + + movi BRSH50R_P,b0 + movi [X,0],a0 ;x val + movi [Y,0],a1 ;y val + movi BRSH50_9,a2 ;* image + movi 30001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + calla #center_image + + move @PSTATUS,a9 + + movi 9,a0 +#loop + PUSHP a0 + + SOUND1 cntdown_snd + + SLEEPK 3 + movi TSEC+25-3,a11 +#loop2 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut1 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit1 + move @PSTATUS,a0 + jrnz #xit1 +#nobut1 +;DJT End + dsj a11,#loop2 +#xit1 + + SOUND1 cntdown_snd + + calla obj_off + + SLEEPK 2 + movi (1*TSEC)/2-3,a11 +#loop3 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut2 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit2 + move @PSTATUS,a0 + jrnz #xit2 +#nobut2 +;DJT End + dsj a11,#loop3 +#xit2 + + calla obj_on + PULLP a0 + PUSHP a0 + sll 5,a0 + addi #nums-20h,a0 + move *a0,a0,L ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla #center_image + + PULLP a0 + dsj a0,#loop + + SOUND1 cntdown_snd + + SLEEPK 3 + movi (1*TSEC+25)/2-3,a11 +#loop4 + SLEEPK 1 + + move @BTIME,a0 + jrnz #reset + +;DJT Start + calla get_all_buttons_cur2 ;get_all_buttons_down2 + jrz #nobut3 + move @gmqrtr,a0 + subk 4,a0 + jrn #xit3 + move @PSTATUS,a0 + jrnz #xit3 +#nobut3 +;DJT End + dsj a11,#loop4 +#xit3 + + SOUND1 cntdown_snd + + movk 1,a0 + move a0,@force_selection + + calla DELOBJA8 + DIE + +#reset + clr a0 + move a0,@BTIME + movi TSEC,a10 + CREATE0 timeout3 + calla DELOBJA8 + SOUND1 cntdown_snd + DIE + + +#center_image + move *a8(OSIZEX),a0 + srl 1,a0 + movi X,a1 + sub a0,a1 + move a1,*a8(OXPOS) + rets + + +#nums .long BRSH50_0,BRSH50_1,BRSH50_2 + .long BRSH50_3,BRSH50_4,BRSH50_5 + .long BRSH50_6,BRSH50_7,BRSH50_8,BRSH50_9 + + +#****************************************************************************** +* a3 = * player data +* a10 = player number (0-3) +* sets special_heads based on initials entered +* +* updated to account for CREATED players... +******************************************************************************* + SUBR check_special_initials + + sll 4,a10 ;x 16 + addi special_heads,a10 +; +; We want to favor the player who CREATED his/her character, this is just in case +; its initials and pin_number match a team members. (or if a team member +; wants to change their record) +; + move *a3(PR_CREATED_PLYR),a0 ;player created ? + cmpi 1,a0 ;br=yep, no special head + jrp #end + + clr a5 + movi #team_data,a2 +#next + move *a3(PR_NAME1),a0 + jrle #no_match + move *a2,a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME2),a0 + move *a2(10h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME3),a0 + move *a2(20h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME4),a0 + move *a2(30h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME5),a0 + move *a2(40h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_NAME6),a0 + move *a2(50h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR1),a0 + move *a2(60h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR2),a0 + move *a2(70h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR3),a0 + move *a2(80h),a1 + cmp a0,a1 + jrne #no_match + + move *a3(PR_PIN_NBR4),a0 + move *a2(90h),a1 + cmp a0,a1 + jrne #no_match + + movk ADJTOURNEY,a0 ;Tournament mode? + calla GET_ADJ ;0-1 + jrz #yes ;On? Br=yes + + move a5,*a10 ;store special head number + move a5,a0 + sll 4,a5 + sll 5,a0 ;x 16 x 4 + add a5,a0 + addi #team_snds,a0 + calla snd_play1 +#yes rets + + +#no_match + addi NXT_TM_MEMBR,a2 ;7 words per line in below table + inc a5 ;head number + cmpi #team_data1_end,a2 + jrlo #next +#end rets + + +;DJT Start +; +; This is a table of all the SPECIAL players (designers...etc) reconizied +; + .asg 01,A_ + .asg 02,B_ + .asg 03,C_ + .asg 04,D_ + .asg 05,E_ + .asg 06,F_ + .asg 07,G_ + .asg 08,H_ + .asg 09,I_ + .asg 10,J_ + .asg 11,K_ + .asg 12,L_ + .asg 13,M_ + .asg 14,N_ + .asg 15,O_ + .asg 16,P_ + .asg 17,Q_ + .asg 18,R_ + .asg 19,S_ + .asg 20,T_ + .asg 21,U_ + .asg 22,V_ + .asg 23,W_ + .asg 24,X_ + .asg 25,Y_ + .asg 26,Z_ + .asg 29,SP + + .asg -1+1,NUL + .asg 0+1,ZER + .asg 1+1,ONE + .asg 2+1,TWO + .asg 3+1,THR + .asg 4+1,FOR + .asg 5+1,FIV + .asg 6+1,SIX + .asg 7+1,SEV + .asg 8+1,EIG + .asg 9+1,NIN + .asg 10+1,SPC + +#team_data + .word J_,A_,P_,P_,L_,E_ + .word SIX,SIX,SIX,ZER ;00 JOHNSON +#team_data1 + .word D_,I_,V_,I_,T_,A_ + .word ZER,TWO,ZER,ONE ;01 DIVITA + + .word T_,U_,R_,M_,E_,L_ + .word ZER,THR,TWO,TWO ;02 TURMELL + + .word D_,A_,N_,I_,E_,L_ + .word ZER,SIX,ZER,FOR ;03 THOMPSON + + .word E_,U_,G_,E_,N_,E_ + .word SIX,SEV,SIX,SEV ;04 GEER + + .word J_,C_,0,0,0,0 + .word ZER,ZER,ZER,ZER ;05 CARLTON + + .word J_,F_,E_,R_,0,0 + .word ZER,FIV,ZER,THR ;06 HEDRICK + + .word J_,O_,N_,H_,E_,Y_ + .word SIX,ZER,ZER,ZER ;07 JON HEY + + .word M_,O_,R_,R_,I_,S_ + .word SIX,ZER,ZER,ZER ;08 AIR MORRIS + + .word B_,A_,R_,D_,O_,0 + .word SIX,ZER,ZER,ZER ;09 STEVE BARDO + + .word M_,I_,N_,I_,F_,E_ + .word SIX,ZER,ZER,ZER ;10 MINIFEE + + .word M_,A_,R_,T_,Y_,0 + .word ONE,ZER,ONE,ZER ;11 MARTINEZ + + .word C_,A_,R_,L_,O_,S_ + .word ONE,ZER,ONE,ZER ;12 PESINA + + .word S_,H_,A_,W_,N_,0 + .word ZER,ONE,TWO,THR ;13 LIPTAK + + .word E_,D_,D_,I_,E_,0 + .word SIX,TWO,ONE,THR ;14 EDDIE + + .word M_,X_,V_,0,0,0 + .word ONE,ZER,ONE,FOR ;15 MIKE V. + + .word J_,A_,M_,I_,E_,0 + .word ONE,ZER,ZER,ZER ;16 JAMIE + + .word N_,I_,C_,K_,0,0 + .word SEV,ZER,ZER,ZER ;17 NICK E. + + .word R_,O_,O_,T_,0,0 + .word SIX,ZER,ZER,ZER ;18 J. ROOT + + .word M_,E_,D_,N_,I_,K_ + .word SIX,ZER,ZER,ZER ;19 C. MEDNICK + + .word D_,A_,N_,R_,0,0 + .word ZER,ZER,ZER,ZER ;20 DAN R. + + .word P_,A_,T_,F_,0,0 + .word TWO,ZER,ZER,ZER ;21 PAT F. + + .word K_,O_,M_,B_,A_,T_ + .word ZER,ZER,ZER,FOR ;22 ED BOON + + .word M_,O_,R_,T_,A_,L_ + .word ZER,ZER,ZER,FOR ;23 J. TOBIAS + + .word S_,N_,O_,0,0,0 + .word ZER,ONE,ZER,THR ;24 OURSLER + + .word J_,A_,S_,O_,N_,0 + .word ZER,SEV,TWO,SPC ;25 JASON + + .word Q_,U_,I_,N_,0,0 + .word ZER,THR,THR,ZER ;26 QUINN + + .word P_,E_,R_,R_,Y_,0 + .word THR,FIV,ZER,ZER ;27 PERRY + + .word N_,F_,U_,N_,K_,0 + .word ZER,ONE,ZER,ONE ;28 NEIL FUNK + + .word M_,D_,O_,C_,0,0 + .word TWO,ZER,NUL,NUL ;29 MDOC + + .word N_,O_,B_,U_,D_,0 + .word ONE,ZER,ONE,ZER ;30 BUD + + .word M_,A_,R_,I_,U_,S_ + .word ONE,ZER,ZER,FIV ;31 MARIUS + + .word M_,U_,N_,D_,A_,Y_ + .word FIV,FOR,THR,TWO ;32 MUNDAY + + .word N_,O_,R_,T_,H_,0 + .word FIV,ZER,FIV,ZER ;33 NORTH + + .word A_,M_,R_,I_,C_,H_ + .word TWO,ZER,TWO,ZER ;34 AMRICH + + .word J_,I_,G_,G_,E_,T_ + .word ONE,ZER,ONE,ZER ;35 JIGGETS + + .word Z_,I_,R_,I_,N_,0 + .word ONE,ZER,ONE,ZER ;36 ZIRIN + + .word H_,E_,I_,T_,H_,0 + .word ONE,ZER,SEV,NIN ;37 HEITH BETTLEMAN + + .word M_,A_,T_,T_,SP,B_ + .word ZER,ONE,EIG,FOR ;38 MATT BETTLEMAN + + .word K_,SP,D_,A_,Y_,0 + .word FOR,TWO,FOR,TWO ;39 KEVIN DAY + +;Superstar special guests +;FIX!!! +;Use name and birthday as pin # + + .word P_,I_,P_,P_,E_,N_ + .word ZER,ZER,ZER,ZER ;PIPPEN + + .word R_,O_,D_,M_,A_,N_ + .word ZER,ZER,ZER,ZER ;RODMAN + + .word J_,O_,H_,N_,S_,N_ + .word ZER,ZER,ZER,ZER ;JOHNSN_L + + .word R_,I_,C_,E_,0,0 + .word ZER,ZER,ZER,ZER ;RICE + + .word K_,I_,D_,D_,0,0 + .word ZER,ZER,ZER,ZER ;KIDD + + .word M_,O_,T_,U_,M_,B_ + .word ZER,ZER,ZER,ZER ;MOTUMBO + + .word G_,H_,I_,L_,L_,0 + .word ZER,ZER,ZER,ZER ;G. HILL + + .word D_,R_,E_,A_,M_,0 + .word ZER,ZER,ZER,ZER ;OLAJUAMWN + + .word M_,I_,L_,L_,E_,R_ + .word ZER,ZER,ZER,ZER ;R. MILLER + + .word S_,M_,I_,T_,S_,0 + .word ZER,ZER,ZER,ZER ;R. SMITS + + .word M_,O_,U_,R_,N_,G_ + .word ZER,ZER,ZER,ZER ;MOURNING + + .word G_,L_,E_,N_,N_,R_ + .word ZER,ZER,ZER,ZER ;G. ROBINSON + + .word E_,W_,I_,N_,G_,0 + .word ZER,ZER,ZER,ZER ;EWING + + .word S_,T_,A_,R_,K_,S_ + .word ZER,ZER,ZER,ZER ;STARKS + + .word A_,H_,R_,D_,W_,Y_ + .word ZER,ZER,ZER,ZER ;A. HARDAWAY + + .word H_,G_,R_,A_,N_,T_ + .word ZER,ZER,ZER,ZER ;H. GRANT + + .word S_,T_,A_,C_,K_,H_ + .word ZER,ZER,ZER,ZER ;STACKHOUSE + + .word C_,L_,I_,F_,F_,R_ + .word ZER,ZER,ZER,ZER ;CLIFF R. + + .word D_,A_,V_,I_,D_,R_ + .word ZER,ZER,ZER,ZER ;DAVID R. + + .word E_,L_,L_,I_,O_,T_ + .word ZER,ZER,ZER,ZER ;S. ELLIOT + + .word K_,E_,M_,P_,0,0 + .word ZER,ZER,ZER,ZER ;KEMP + + .word M_,A_,L_,O_,N_,E_ + .word ZER,ZER,ZER,ZER ;MALONE + + .word W_,E_,B_,B_,E_,R_ + .word ZER,ZER,ZER,ZER ;WEBBER + + .word M_,U_,R_,S_,A_,N_ + .word ZER,ZER,ZER,ZER ;MURESAN + +;New Superstar special guests removed from teams +;FIX!!! +;Use name and birthday as pin # + + .word M_,C_,L_,O_,U_,D_ + .word ZER,ZER,ZER,ZER ;McCLOUD, george + + .word T_,M_,I_,L_,L_,S_ + .word ZER,ZER,ZER,ZER ;MILLS, terry + + .word K_,S_,M_,I_,T_,H_ + .word ZER,ZER,ZER,ZER ;SMITH, kenny + + .word M_,C_,K_,E_,E_,0 + .word ZER,ZER,ZER,ZER ;McKEE, derek + + .word C_,H_,A_,P_,M_,N_ + .word ZER,ZER,ZER,ZER ;CHAPMAN, rex + + .word B_,E_,N_,J_,M_,N_ + .word ZER,ZER,ZER,ZER ;BENJAMIN, benoit + + .word D_,O_,U_,G_,L_,S_ + .word ZER,ZER,ZER,ZER ;DOUGLAS, sherman + + .word S_,P_,U_,D_,0,0 + .word ZER,ZER,ZER,ZER ;WEBB, spud + + .word G_,I_,L_,I_,A_,M_ + .word ZER,ZER,ZER,ZER ;GILLIAM, armon + + .word K_,E_,V_,I_,N_,E_ + .word ZER,ZER,ZER,ZER ;EDWARDS, kevin + + .word O_,A_,K_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;OAKLEY, charles + + .word R_,U_,F_,F_,I_,N_ + .word ZER,ZER,ZER,ZER ;RUFFIN, trevor + + .word W_,E_,S_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;PERSON, wesley + + .word F_,I_,N_,L_,E_,Y_ + .word ZER,ZER,ZER,ZER ;FINLEY, michael + + .word B_,U_,C_,K_,0,0 + .word ZER,ZER,ZER,ZER ;WILLIAMS, buck + + .word P_,E_,R_,S_,O_,N_ + .word ZER,ZER,ZER,ZER ;PERSON, chuck + + .word A_,L_,V_,I_,N_,R_ + .word ZER,ZER,ZER,ZER ;ROBERTSON, alvin + + .word O_,M_,I_,L_,L_,R_ + .word ZER,ZER,ZER,ZER ;MILLER, oliver + + .word M_,U_,R_,R_,A_,Y_ + .word ZER,ZER,ZER,ZER ;MURRAY, tracy + + .word B_,E_,N_,O_,I_,T_ + .word ZER,ZER,ZER,ZER ;BENOIT, david + + .word B_,S_,C_,O_,T_,T_ + .word ZER,ZER,ZER,ZER ;SCOTT, byron + + .word M_,U_,R_,D_,C_,K_ + .word ZER,ZER,ZER,ZER ;MURDOCK, eric + +#team_data1_end + + + +NXT_TM_MEMBR .equ (#team_data1-#team_data) +NUM_MEMBRS .equ (#team_data1_end-#team_data)/NXT_TM_MEMBR + + + +#team_snds + .word >3505,32,2290 ;0 JEFF JOHNSON + .word >3505,31,2276 ;1 SAL DIVITA + .word >3505,32,2272 ;2 TURMELL + .word >3505,28,2286 ;3 THOMPSON + .word >3505,22,2278 ;4 GEER + .word >3505,33,2288 ;5 CARLTON + .word >3505,28,2280 ;6 HEDRICK + .word >3505,23,2274 ;7 JOHN HEY + .word >3505,43,2266 ;8 AIR MORRIS + .word >3505,30,2268 ;9 STEVE BARDO + .word >3505,35,2270 ;10 MINIFEE + .word >3505,41,2282 ;11 MARTINEZ + .word >3505,36,2284 ;12 PESINA + .word >3505,36,2250 ;13 LIPTAK + .word >3505,46,1910 ;14 EDDIE + .word >3505,26,1920 ;15 MIKE V + .word >3505,37,2867 ;16 JAMIE R. + .word >3505,37,2867 ;17 NICK E. + .word >3505,37,2867 ;18 J. ROOT + .word >3505,37,2867 ;19 MEDNICK + .word >3505,37,2867 ;20 DAN R. + .word >3505,37,2867 ;21 PAT F. + .word >3505,37,2867 ;22 ED BOON + .word >3505,37,2867 ;23 J. TOBIAS + .word >3505,37,2867 ;24 OURSLER + .word >3505,37,2867 ;25 JASON S. + .word >3505,37,2867 ;26 QUINN + .word >3505,37,2867 ;27 M. PERRY + .word >3505,37,2867 ;28 N. FUNK + .word >3505,37,2867 ;29 MDOC + .word >3505,37,2867 ;30 BUD + .word >3505,54,1877 ;31 MARIUS + .word >3505,37,2867 ;32 MUNDAY + .word >3505,37,2867 ;33 NORTH + .word >3505,37,2867 ;34 AMRICH + .word >3505,37,2867 ;35 JIGGETS + .word >3505,37,2867 ;36 ZIRIN + .word >3505,37,2867 ;37 HEITH BETTLEMAN + .word >3505,37,2867 ;38 MATT BETTLEMAN + .word >3505,43,2787 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,72,1360 ;PIPPEN, scottie + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,65,1348 ;RICE, glen + .word >100D,68,1404 ;KIDD, jason + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,63,1444 ;HILL, grant + .word >100D,118,1480 ;OLAJUWAN, hakeem + .word >100D,85,1500 ;MILLER, reggie + .word >100D,71,1508 ;SMITS, rik + .word >100D,97,1560 ;MOURNING, alonzo + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,82,1640 ;EWING, patrick + .word >100D,70,1656 ;STARKS, john + .word >100D,95,1660 ;HARDAWAY, anfernee + .word >100D,76,1664 ;GRANT, horace + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,94,1724 ;ROBINSON, cliff + .word >100D,92,1764 ;ROBINSON, david + .word >100D,69,1760 ;ELLIOTT, sean + .word >100D,64,1780 ;KEMP, shawn + .word >100D,68,1824 ;MALONE, karl + .word >100D,53,1864 ;WEBBER, chris + .word >100D,92,1876 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,84,1416 ;McCLOUD, george + .word >100D,76,1448 ;MILLS, terry + .word >100D,64,1496 ;SMITH, kenny + .word >100D,77,1512 ;McKEE, derek + .word >100D,60,1961 ;CHAPMAN, rex + .word >100D,69,1592 ;BENJAMIN, benoit + .word >100D,69,1596 ;DOUGLAS, sherman + .word >100D,61,1964 ;WEBB, spud + .word >100D,54,1628 ;GILLIAM, armon + .word >100D,60,1636 ;EDWARDS, kevin + .word >100D,81,1652 ;OAKLEY, charles + .word >100D,64,1967 ;RUFFIN, trevor + .word >100D,77,1712 ;PERSON, wesley + .word >100D,95,1716 ;FINLEY, michael + .word >100D,73,1732 ;WILLIAMS, buck + .word >100D,71,1772 ;PERSON, chuck + .word >100D,61,1952 ;ROBERTSON, alvin + .word >100D,67,1812 ;MILLER, oliver + .word >100D,53,1816 ;MURRAY, tracy + .word >100D,69,1832 ;BENOIT, david + .word >100D,60,1958 ;SCOTT, byron + .word >100D,63,1856 ;MURDOCK, eric + + +;DJT End +#****************************************************************************** + + SUBR select_teams + +;DJT Start + PUSH a3 + + clr a3 + not a3 + move a3,@t1ispro ;Set for regular skill level + move a3,@t2ispro + +;DJT End + move @team1,a0 + move @team2,a1 + or a0,a1 + move a1,a1 + jrnn #teams_ok ;both teams selected? + + move @team1,a0 + jrnn #select_team2 + +#select_team1 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 2,a0 + jrz #nop3 + move @player3_data+PR_NAME1,a0 + jrle #nop3 + move @player3_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop3 + move @PSTATUS,a0 + btst 3,a0 + jrz #nop4 + move @player4_data+PR_NAME1,a0 + jrle #nop4 + move @player4_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop4 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random1 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team1 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc1 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc1 + calla RNDRNG0 + sll 4,a2 + addi tm1set,a2,L + move a0,*a2 + jruc #ispro1 + +#choose_random1 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team1 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm1set,a0 + move a1,*a0 + + move @player3_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont1 + move @player4_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont1 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+10h +#ispro1 + move a3,@t2ispro + jruc #teams_ok + +;; NOT!! NUM_TEAMS elements +;; Table needs to be plyr initials (currently $1-$1D) # of elements +;#setnum .word 0 +; .word 1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,3,0,0,0,3,1,1,0 +;DJT End + +#select_team2 + movi ALL_TMS_DEFEATD,a1 + move @PSTATUS,a0 + btst 0,a0 + jrz #nop1 + move @player1_data+PR_NAME1,a0 + jrle #nop1 + move @player1_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop1 + move @PSTATUS,a0 + btst 1,a0 + jrz #nop2 + move @player2_data+PR_NAME1,a0 + jrle #nop2 + move @player2_data+PR_TEAMSDEF,a0,L + and a0,a1 +#nop2 +;DJT Start + calla calc_num_defeated ;A1/A2 are not destroyed!!! + clr a3 + cmpi NUM_ISPRO,a0 + subb a3,a3 + cmpi NUM_ISCHAMP,a0 + addc a3,a3 + cmpi NUM_TEAMS,a0 + jreq #choose_random2 ; br=all teams beat/no initials entry + + calla get_opponent_team ;Returns A2=team # + move a2,@team2 + + move a2,a0 ;CPU team. Do RNDPER for new squad # + sll 4,a0 ; based on total possible per team + addi team_sqaud_cnts,a0,L + move *a0,a0 + subk 1,a0 + move a3,a3 ;Human team @ champ level? + jrnz #nc2 ; br=no + movk 1,a0 ;Select from first 2 squads only +#nc2 + calla RNDRNG0 + sll 4,a2 + addi tm2set,a2,L + move a0,*a2 + jruc #ispro2 + +#choose_random2 + movk NUM_TEAMS-1,a0 ;RNDPER for any team # + calla RNDRNG0 + move a0,@team2 + + move @HCOUNT,a1 ;RNDPER for either of first 2 squads + movk 1,a14 + and a14,a1 + sll 4,a0 + addi tm2set,a0 + move a1,*a0 + + move @player1_data+PR_NAME1,a14 ;Beat all teams? Chk initials + jrgt #cont2 + move @player2_data+PR_NAME1,a14 + jrle #teams_ok ; br=no +#cont2 + movi NUM_MEMBRS-1,a0 ;Give superstar plyr a rnd special + calla RNDRNG0 ; guest opponent +;; addi 56,a0 +;; clr a0 + move a0,@special_heads+30h +#ispro2 + move a3,@t1ispro + +#teams_ok + PULL a3 + rets + + +;This table should be ranked by real NBA record +;Updated on 10/15/96 +;Worst to Best: + +_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 +_TOR .equ 25 +_UTA .equ 26 +_VAN .equ 27 +_WAS .equ 28 + +team_orders + .word _VAN ;27 29 + .word _PHI ;19 28 + .word _TOR ;25 27 + .word _MIL ;14 26 + .word _DAL ;5 25 + .word _MIN ;15 24 + .word _LAC ;11 23 + .word _NJ ;16 22 + .word _BOS ;1 21 + .word _DEN ;6 20 + .word _GOL ;8 19 + .word _SAC ;22 18 + .word _WAS ;28 17 + .word _CHA ;2 16 + .word _PHX ;20 15 + .word _MI ;13 14 + .word _POR ;21 13 + .word _DET ;7 12 + .word _ATL ;0 11 + .word _CLE ;4 10 + .word _NY ;17 9 + .word _HOU ;9 8 + .word _IND ;10 7 + .word _LAL ;12 6 + .word _UTA ;26 5 + .word _SAN ;23 4 + .word _ORL ;18 3 + .word _SEA ;24 2 + .word _CHI ;3 1 + .word -1 +;DJT End + + +#****************************************************************************** +* +* INPUT: a0 = Nth undefeated team +* a1 = teams defeated bits +* RETURN: a2 = team number +* +*------------------------------------------------------------------------------ + SUBR get_opponent_team + + movi team_orders,a0 +#next_team + move *a0+,a2 ;team number (0-28) + jrn #err ;shouldn't happen + btst a2,a1 ;defeated? + jrnz #next_team + rets +#err + clr a2 + rets + + + + + .if 0 + PUSH a1 + clr a2 +#next_team + srl 1,a1 + jrc #def +; dec a0 ;teams defeated count ++ +; jrn #done +#def + inc a2 + cmpi 26,a2 + jrlo #next_team +#done + PULL a1 + rets + .endif + +#***************************************************************************** + + + SUBR print_plr_name + + move a10,a0 + sll 4,a0 ;x 16 bits + move a0,a1 + sll 1,a0 ;x 32 bits + addi #plyrdata,a0 + move *a0,a4,L ;* scr initials + + movi init_x,a2 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2a + movi kit_x,a2 ;kit x vals +#not2a + add a2,a1 + + move *a1,a1 + move a1,@mess_cursx + movi message_buffer,a3 ;* string dest + calla get_name_string + calla print_string_C ;centered + rets + + + + .asg 70,Y1 + .asg 104,Y2 + + SUBR ingame_mess + +#wait + move @PSTATUS,a0 + btst a10,a0 + jrnz #ingame + SLEEPK 1 + jruc #wait +#ingame + + movi #name_setup,a2 + calla setup_message + + callr print_plr_name + + move @gmqrtr,a0 + cmpi 4,a0 + jrls #ok + movk 4,a0 +#ok + sll 5,a0 ;x 32 bits + addi #qtr_msgs,a0 + move *a0,a2,L ;* image + + sll 4,a10 ;x 16 bits + + movi #qtr_x,a3 + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #not2b + movi kit_x,a3 ;kit x vals +#not2b + add a3,a10 + + move *a10,a0 + sll 16,a0 ;x val + PUSH a0 + movi [Y2,0],a1 ;y val + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + + PULL a0 + movi [Y1,0],a1 ;y val + movi getready,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + movi BAST_W_P,b0 ;pal + calla BEGINOBJP2 + DIE + + +#plyrdata + .long player1_data+PR_NAME1 + .long player2_data+PR_NAME1 + .long player3_data+PR_NAME1 + .long player4_data+PR_NAME1 + +#name_setup + PRINT_STR bast8_ascii,5,0,200,208,BAST_R_P,0 + +#qtr_msgs + .long _1quart,_2quart + .long _3quart,_4quart + .long OVRTME,OVRTME + .long OVRTME,OVRTME +; .long overtme,overtme +; .long overtme,overtme + +#qtr_x .word 55,151,249,344 ;x val + + +init_x .word 56,149,250,342 +;#init_x .word 56,145,250,339 + +kit_x .word 0,101,295,0 ;kit x vals + + + +#***************************************************************************** + + SUBR winner_stays_on + + movi ADJWINMODE,a0 + calla GET_ADJ + move a0,a14 + jrz #exit ;br=disabled + +; cmpi 1,a14 ;'all games' ? +; jreq #allow ;br=yes +; +; cmpi 2,a14 ;'player vs. player' ? +; jrne #ckfor ;br=no +; move @_2plyr_competitive,a0 +; jrz #allow ;br=A human on each team! +;#ckfor +; cmpi 3,a14 ;'4 players' ? +; jrne #exit ;br=no, exit + move @_4plyrsingame,a0 + jrnz #exit ;br=not a four player game +;#allow + movk INFREEPRICE,a0 + move a0,@GAMSTATE + +;Zero PxDATA areas + + clr a0 + movi P1DATA,a1 + movi PDSIZE*4/16,A2 +#zlp move a0,*a1+ + dsj a2,#zlp + + move a0,@conttimers,L ;4 words + move a0,@conttimers+20h,L + + clr a0 + move a0,@PSTATUS + move a0,@PSTATUS2 + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + + movi MAX_CRTIME,a0 + move a0,@cntrs_delay + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + clr a0 + move a0,@IRQSKYE ;background color + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + clr a10 + move @scores,a0 + move @scores+10h,a1 + cmp a1,a0 ;score2 - score1 + jrgt #t1_wins + movk 1,a10 ;t2_wins +#t1_wins + move a10,@winningteam ;0 or 1 + + SLEEPK 2 + + movi #winner_mod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + move a0,@DISPLAYON + + CREATE0 monitor_buyins + CREATE0 team_control + + CREATE0 credits + CREATE0 credit_messages + CREATE0 monitor_fullgame + + .asg 102,X1 + .asg 294,X2 + + .asg 21,Y1 + .asg 42,Y2 + .asg 110,Y3 + + move a10,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + + move a11,a0 ;x val + sll 16,a0 + movi [Y1,0],a1 ;y val + movi congrats_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a11,a0 ;x val + sll 16,a0 + movi [Y3,0],a1 ;y val + movi winfree,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi #inits_setup,a2 + calla setup_message + movi #str_pl12,a4 + move a10,a10 + jrz #tm1 + movi #str_pl34,a4 ;tm2 +#tm1 + move a11,@mess_cursx + calla print_string_C2 + + move a10,a0 + xori 1,a0 + sll 4,a0 + addi #xpos,a0 + move *a0,a11 + move a11,a0 ;x val + sll 16,a0 + movi [Y3-18,0],a1 ;y val + movi chalneed_l,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TYPTEXT,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + movi 1*TSEC,a10 + CREATE CNTDWN_PID,timeout2 + + SLEEPK 2 + calla display_unblank + +#slp SLEEP 20*TSEC ;15;13 + move @PSTATUS,a0 + jrnz #slp +#exit + movi -1,a0 + move a0,@winningteam ;-1 for no valid half price + RETP + + + +#inits_setup + PRINT_STR bast18_ascii,8,0,X1,Y2,BST18Y_P,0 + +#str_pl12 + .string "PLAYERS 1 - 2",0 +#str_pl34 + .string "PLAYERS 3 - 4",0 + .even + +#xpos + .word X1+1,X2+1 + +#winner_mod + .long ENTERKITBMOD + .word 0,0 ;x,y + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR buyin_screen + + + move @PSTATUS,a0 + move a0,@plyrsdropped + + clr a0 + move a0,@pleasewt + move a0,@newplyrs,L + + move @gmqrtr,a14 + cmpi 4,a14 + jrlt #tag1 + move @scores,a14 + move @scores+16,a1 + cmp a1,a14 + jrz #tag1 +#exit + RETP +#tag1 + move @PSTATUS,a9 + movi qtr_purchased,a1 ; - 1 quarter for each player + clr a2 +#dec_loop + move *a1,a0 + jrz #skip2 + dec a0 + move a0,*a1 + jrnz #skip2 + movk 1,a0 + sla a2,a0 + move @PSTATUS,a3 + andn a0,a3 + move a3,@PSTATUS +#skip2 + addk 16,a1 + inc a2 + cmpi 3,a2 + jrls #dec_loop + move @PSTATUS,a0 + cmp a0,a9 + jrnz #cont +;But, if someone inserted coins, go to buyin_screen anyway! + calla CR_CONTP ;Credits to continue + jrlo #bx ;No? + move @game_purchased,a0 + cmpi >f,a0 + jrnz #cont +#bx + RETP + +#cont + clr a0 + move a0,@IRQSKYE ;background color + + clr a0 + move a0,@COLRTEMP,L + move a0,@dtype ;2D + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + movk ININTRO,a0 + move a0,@GAMSTATE + + movi newplyrs,a0 + move a0,@newptr,L + +;setup new background + movi wipe_stack_vertical,a0,L + movi CREATE_NO_DEL_OBJS,a14 ;dont delete objs. when done + JSRP do_scrn_transition + + SLEEPK 1 + + calla KILBGND ;Kill old background + calla pal_clean + clr a0 + movi -1,a1 + calla obj_delc ;Kill all objs (Screen mem is clr) + clr a0 + calla KIL1C + + .ref buyin_tune + SOUND1 buyin_tune + + movi SCRNEND,a0 ;[256,405] + move a0,@SCRNLR,L + clr a0 + move a0,@WORLDTLY,L + move a0,@WORLDTLX,L + move a0,@WORLDTL,L + + movi #buyin_mod,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not2 + movi #buyin_kit_mod,a0 +#not2 + move a0,@BAKMODS,L + calla BGND_UD1 +#yesh + SLEEPK 2 +; calla create_bits + + movi TSEC,a10 + CREATE0 timeout3 + + CREATE0 credits + CREATE0 credit_messages + + movk 1,a0 + move a0,@can_enter_inits ;if 0 deletes challenger messages + + movk 1,a10 ;player 2 + CREATE0 ingame_mess + CREATE0 challenger + movk 2,a10 ;player 3 + CREATE0 ingame_mess + CREATE0 challenger + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2_plyrs + + clr a10 ;player 1 + CREATE0 ingame_mess + CREATE0 challenger + movk 3,a10 ;player 4 + CREATE0 ingame_mess + CREATE0 challenger + +#2_plyrs + + SLEEP 4 +; SLEEP 10 + +;wipe things off + movi un_wipe_horizontal,a0,L + movi NO_CREATE_DEL_OBJS,a14 + JSRP do_scrn_transition +#wait + SLEEPK 1 + move @force_selection,a0 + jrz #wait + move @PSTATUS,a0 + jrnz #ok + +;2/9/93 + calla dropout_stats + jauc game_over + +#ok RETP + + +;#buyin2_mod +; .long ENTER4BMOD ;enter initials module +; .word 0,0 +; .long ATRIBUTEBMOD +; .word 0,178 ;x,y +; .long 0 +; +;#buyin2_kit_mod +; .long ENTERKITBMOD +; .word 0,0 ;x,y +; .long ATRBKITBMOD ;option screen background +; .word 0,178 ;x,y +; .long 0 + +#buyin_mod + .long ENTER4BMOD ;enter initials module + .word 0,0 + .long ATRIBUTEBMOD + .word 0,178 + .long 0 + +#buyin_kit_mod + .long ENTERKITBMOD + .word 0,0 + .long ATRBKITBMOD + .word 0,178 + .long 0 + +#***************************************************************************** + + SUBR blink_tmslct + + movi [200,0],a0 + movi [15,0],a1 + movi PRESSBUTT,a2 ;* image + movi 19001,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi 0,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#lp + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8RED,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSTURB,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + SLEEP 90 + + movi PRESS_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSBUTT,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + + SLEEP 90 + + movi PRESS2_P,a0 ;SGMD8WHT,a0 + calla pal_getf + move a0,*a8(OPAL) + + movi PRESSPASS,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #lp + + +#***************************************************************************** + + .asg 50,YSPACE + + SUBR grand_champs_screen + + + clr a10 +#chk_nxt + callr #check_champ +;DJT Start + jrnc found_champ +;DJT End + inc a10 + cmpi 4,a10 + jrlt #chk_nxt + + clr a10 + RETP + + +;DJT Start + SUBR found_champ + + .if DEBUG + movk INPLYRINFO,a14 + move a14,@GAMSTATE + .endif + + move *a13(PROCID),*a13(PDATA) + movi GRANDCHAMP_PID,a14 + move a14,*a13(PROCID) + + clr a14 + move a14,@PSTATUS + move a14,@PSTATUS2 +;DJT End + + calla display_blank + calla WIPEOUT + + clr a0 + move a0,@HALT + +;DJT Start + movi CHEERS,a8 +; movi TROPHY,a8 +;DJT End + movi [0,0],a9 + .ref movie_run + JSRP movie_run + + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + +;DJT Start + .asg 2,CC_BEG + .asg 18,CC_END + .asg 3,CC_RAT + .asg BRSHGYOP,CC_PAL + + .bss cycram,(CC_END-CC_BEG+1)*16*2 + + movi CC_PAL,a8,L ;*pal + movi cycram,a9,L ;Get cycle RAM ptr + movi [CC_BEG,CC_END],a10,L ;1st,last color + movk CC_RAT,a11 ;Rate + .ref COLCYC + CREATE CYCPID,COLCYC + +;DJT End + movi #champ_mess_tbl,a9,L + jruc #ctnxt +#ctxt + move *a4+,a0,L + move a0,@message_ascii,L ; + move *a4+,a0 ;space char width + move a0,@mess_space_width ; + move *a4+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a4+,a0 ;message cursor pos X + move a0,@mess_cursx2 ; + move *a4+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b +#ctnxt + move *a9+,a4,L + cmpi 4000,a4 ;at end ? + jrne #ctxt ;br=no + + movk 1,a0 + move a0,@DISPLAYON + SLEEPK 1 + + clr a0 + move a0,@DISPLAYON + movk 1,a0 ;page flipping on + move a0,@dpageflip + SLEEPK 1 + clr a0 + move a0,@dpageflip + calla display_unblank + + SOUND1 tunegc_snd + .ref cheer_snd + SOUND1 cheer_snd + +;DJT Start + SLEEP 10*TSEC +;DJT End + +; movi 5*TSEC,a10 +;#lpzz SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; SOUND1 bounce_snd +; jruc #xb +;#nob +; dsj a10,#lpzz +;#xb +;DJT Start +#found_champ1 +;DJT End + calla display_blank + calla WIPEOUT + + + movi #vmod,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + +;print player nbr. +; +; movi #congrats_setup,a2 ;print player X on line below +; calla setup_message +; movi CLSDEAD|123,a0 +; move a0,@mess_objid +; movi YSPACE,a0 +; move a0,@mess_line_spacing +; movi #player_str,a4 +; calla copy_rom_string +; +; move a10,a0 +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #iskit +; inc a0 ;1,2,3,4 +;#iskit ;1,2 +; movi 4,a1 ;max value +; calla dec_to_asc +; calla concat_string +; +; movi 100,a0 +; move a0,@mess_cursx2 +; movi kern_chars,a0 +; move a0,@mess_justify,L ;justification method +; calla print_string2b + +;start scrolling text + +;DJT Start + movi #congrats_setup,a2 + calla setup_message + movi CLSDEAD|123,a0 + move a0,@mess_objid + movi kern_chars,a0 + move a0,@mess_justify,L ;justification method + + movi #grand_mess_tbl,a9,L +#txt + move @mess_cursy,a0 +#txt1 + move *a9+,a4,L + cmpi 4001,a4 ;spc case? + jrne #txt2 + addk 14,a0 + jruc #txt1 +#txt2 + cmpi 4000,a4 ;at end ? + jreq #txtdn ;br=no + + addi YSPACE,a0 + move a0,@mess_cursy + + move *a4+,a0,W + move a0,@mess_cursx2 + move *a4+,a0,L + move a0,@message_palette,L + + calla print_string2b + jruc #txt + +#txtdn + movi -0c000h,a3 ;scroll text up screen + movi OBJLST,a14 +#lp + move *a14,a14,L + jrz #x + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp + move a3,*a14(OYVEL),L + jruc #lp +#x + +; movi [18h,0],a0 +; movi [2eh,0],a1 +; movi TROPHYD1,a2 ;* image +; movi 19001,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + SLEEPK 8 + +; SOUND1 tunegc_snd + + .ref plyr_jscrowdsnd + CREATE0 plyr_jscrowdsnd + + calla display_unblank + + SLEEP TSEC*18 + + CREATE0 plyr_jscrowdsnd + + SLEEP 22*TSEC +7 + + clr a3 ;turn off scroll + movi OBJLST,a14 +#lp1 + move *a14,a14,L + jrz #x1 + move *a14(OID),a2 + cmpi CLSDEAD|123,a2 + jrne #lp1 + move a3,*a14(OYVEL),L + jruc #lp1 +#x1 + SLEEP 4*TSEC-8 -7 + + .ref tune_gmovr,pregame_tune,tuneend_snd + SOUND1 pregame_tune + + .ref show_designteam + JSRP show_designteam + + move *a13(PDATA),*a13(PROCID) + + SOUND1 tune_gmovr +;DJT End + + movk 1,a10 + RETP + + +;a10 = player number (0-3) +#check_champ + + move @PSTATUS,a0 + btst a10,a0 + jrz #fail + + move a10,a0 + sll 5,a0 + addi #pdata,a0 + move *a0,a0,L ;* player data + + move *a0(PR_NAME1),a1 + jrle #fail + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlt #fail + move *a0(PR_NUMDEFOLD),a1 + cmpi NUM_TEAMS,a1 + jrge #fail + + clrc + rets +#fail + setc + rets + + +#pdata + .long player1_data + .long player2_data + .long player3_data + .long player4_data + + +#vmod + .long BKGDBMOD + .word 0,1 + .long 0 + + + .asg 200,X + .asg 10+300,Y + +#congrats_setup +; PRINT_STR bast18_ascii,10,0,X,Y,BSTGYG_P,0 +;DJT Start + PRINT_STR hangfnt38_ascii,14,0,200,180,HANGF_Y_P,kern_chars +;DJT End +; PRINT_STR brush50_ascii,14,0,200,60,BRSH50R_P,kern_chars + + + +;DJT Start +#champ_mess_tbl + .long #line1 + .long #line2 + .long #line3 + .long #line3a + .long 4000 + +#grand_mess_tbl + .long #line_blnk + .long #line4 + .long #line4a + .long #line4b + .long #line5 + .long #line5a + .long #line5b + .long #line_blnk + .long #line6 + .long #line6a + .long #line7 + .long #line7a + .long #line8 + .long #line8a + .long #line9 + .long #line9a + .long #line_blnk + .long #line12 + .long #line12a + .long #line13 + .long #line14 + .long #line15 + .long #line15a + .long #line_blnk + .long #line16 + .long #line16a + .long #line_blnk + .long #line_blnk + .long #line10 + .long #line11 + .long 4001 + .long #line17 + .long #line17a + .long 4000 + + +#line1 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,197 ;x,y +; .word 24,174 ;x,y + .long BRSHGWKP ;_Y_P ;GYGP + .string "Y",1,-4,"OU",1,-2,"'",1,1,"V",1,-2,"E " + .string "GO",1,-2,"T" + .string 0 + .even + +#line2 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 24,221 ;x,y + .long BRSH_G_P + .string "M",1,-1,"AX",1,-2,"I",1,-2,"M",1,-1,"U",1,-1,"M " + .string "H",1,-4,"AN",1,-2,"G",1,-1,"T",1,-2,"I",1,-2,"M",1,-1,"E" + .string "!",0 + .even + +#line3 + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 194,14 ;x,y + .long CC_PAL + .string "Y",1,-4,"OU " + .string "AR",1,-1,"E " + .string "T",1,-3,"H",1,-2,"E" + .string 0 + .even + +#line3a + .long brush20_ascii ;font + .word 10,0 ;space width, spacing + .word 128,38 ;x,y + .long CC_PAL + .string "GR",1,-1,"AN",1,-1,"D " + .string "CH",1,-4,"AM",1,-1,"PI",1,-2,"ON",1,-1,"!" + .string 0 + .even + +;; .word 20,48 ;x,y +;; .string "YOU ARE",0 +;;; .string "Y",1,-5,"O",1,-2,"U",1,-2," ",1,-2,"AR",1,-5,"E"," ","T",1,-6,"H",1,-6,"E",0 +;; .word 20,74 ;x,y +;; .string "THE NBA",0 +;;; .string "N",1,-6,"B",1,-5,"A",0 +;; .word 20,100 ;x,y +;; .string "HANGTIME",0 +;;; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +;; .word 20,126 ;x,y +;; .string "GRAND",0 +;;; .string "G",1,-4,"R",1,-4,"AN",1,-6,"D",0 +;; .word 20,152 ;x,y +;; .string "CHAMPION!",0 +;;; .string "C",1,-5,"H",1,-7,"AM",1,-5,"P",1,-4,"I",1,-5,"O",1,-4,"N",1,-1,"!",0 + + +#line_blnk + .word 0 + .long HANGF_Y_P + .string "",0 + .even + +#line4 + .word 26 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"E P",1,-5,"L",1,-1,"A",1,2,"Y",1,-7,"E",1,-6,"R",1,-3,"S" + .string 0 + .even + +#line4a + .word 105 + .long HANGF_Y_P + .string "I",1,-6,"N N",1,-7,"B",1,-6,"A" + .string 0 + .even + +#line4b + .word 58 + .long HANGF_G_P + .string "H",1,-7,"A",1,1,"N",1,-5,"G",1,1,"T",1,-7,"I",1,-6,"M",1,-7,"E" + .string 0 + .even + +#line5 + .word 62 + .long HANGF_Y_P + .string "T",1,-4,"U",1,-6,"R",1,-5,"N",1,-7,"E",1,-7,"D IT" + .string 0 + .even + +#line5a + .word 79 + .long HANGF_Y_P + .string "U",1,-6,"P T",1,-5,"O G",1,-2,"O" + .string 0 + .even + +#line5b + .word 48 + .long HANGF_R_P + .string "M",1,-7,"A",1,1,"X",1,-6,"I",1,-6,"M",1,-4,"U",1,-6,"M!" + .string 0 + .even + +#line6 + .word 72 + .long HANGF_Y_P + .string "B",1,-3,"UT N",1,-5,"O",1,-1,"W" + .string 0 + .even + +#line6a + .word 70 + .long HANGF_Y_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line7 + .word 69 + .long HANGF_Y_P + .string "D",1,-5,"E",1,-7,"F",1,-7,"E",1,-7,"A",1,1,"T",1,-7,"E",1,-7,"D" + .string 0 + .even + +#line7a + .word 107 + .long HANGF_Y_P + .string "A",1,1,"L",1,-1,"L 2",1,-3,"9" + .string 0 + .even + +#line8 + .word 68 + .long HANGF_Y_P + .string "T",1,-7,"E",1,-7,"A",1,1,"M",1,-4,"S T",1,-1,"O" + .string 0 + .even + +#line8a + .word 33 + .long HANGF_Y_P + .string "B",1,-5,"E",1,-5,"C",1,-2,"O",1,-4,"M",1,-7,"E T",1,-7,"H",1,-7,"E" + .string 0 + .even + +#line9 + .word 33 + .long HANGF_R_P + .string "N",1,-7,"E",1,-2,"W G",1,-4,"R",1,-4,"A",1,1,"N",1,-7,"D" + .string 0 + .even + +#line9a + .word 43 + .long HANGF_R_P + .string "C",1,-5,"H",1,-7,"A",1,1,"M",1,-6,"P",1,-5,"I",1,-5,"O",1,-5,"N!" + .string 0 + .even + +#line12 + .word 65 + .long HANGF_G_P + .string "M",1,-6,"I",1,-7,"DW",1,-11,"A",1,2,"Y",1,2,"'",1,-2,"S" + .string 0 + .even + +#line12a + .word 26 + .long HANGF_Y_P + .string "N",1,-7,"E",1,-7,"X",1,1,"T B",1,4,"'",1,-3,"B",1,-6,"A",1,1,"L",1,-1,"L" + .string 0 + .even + +#line13 + .word 45 + .long HANGF_Y_P + .string "C",1,-5,"H",1,-7,"A",1,1,"L",1,-1,"L",1,-1,"E",1,-7,"N",1,-5,"G",1,-5,"E" + .string 0 + .even + +#line14 + .word 62 + .long HANGF_Y_P + .string "W",1,-6,"I",1,-7,"L",1,-1,"L H",1,-7,"A",1,1,"V",1,-8,"E" + .string 0 + .even + +#line15 + .word 108 + .long HANGF_Y_P + .string "A N",1,-7,"E",1,-2,"W" + .string 0 + .even + +#line15a + .word 48 + .long HANGF_Y_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line16 + .word 96 + .long HANGF_R_P + .string "A T",1,-7,"H",1,-7,"I",1,-6,"R",1,-5,"D" + .string 0 + .even + +#line16a + .word 48 + .long HANGF_R_P + .string "D",1,-4,"I",1,-6,"M",1,-7,"E",1,-7,"N",1,-6,"S",1,-4,"I",1,-4,"O",1,-5,"N" + .string 0 + .even + +#line10 + .word 49 + .long HANGF_Y_P + .string "T",1,-7,"H",1,-7,"A",1,1,"N",1,-7,"K Y",1,-8,"O",1,-2,"U" + .string 0 + .even + +#line11 + .word 16 + .long HANGF_Y_P + .string "F",1,-5,"O",1,-4,"R P",1,-5,"L",1,-1,"A",1,1,"Y",1,-6,"I",1,-7,"N",1,-5,"G!" + .string 0 + .even + +#line17 + .word 26 + .long HANGF_G_P + .string "Y",1,-8,"O",1,-2,"U H",1,-7,"A",1,1,"V",1,-8,"E",1,-7,"N",1,1,"'",1,2,"T" + .string 0 + .even + +#line17a + .word 24 + .long HANGF_G_P + .string "S",1,-5,"E",1,-7,"E",1,-7,"N IT A",1,1,"L",1,-1,"L!" + .string 0 + .even + + +; .string "Y",1,-5,"O",1,-2,"U",1,1," ",1,1,"H",1,-7,"A",1,2,"V",1,-7,"E",0 +; .string "D",1,-5,"E",1,-6,"F",1,-6,"E",1,-6,"A",1,1,"T",1,-6,"E",1,-5,"D",0 +; .string "AL",1,-1,"L",1,2," ","2",1,-1,"9",0 +; .string "N",1,-6,"B",1,-5,"A",1,1," ","T",1,-6,"E",1,-6,"A",1,1,"M",1,-4,"S",0 +; +; .string "B",1,-3,"U",1,-1,"T"," ","A",0 +; .string "G",1,-4,"R",1,-5,"E",1,-7,"AT",1,-6,"E",1,-5,"R",0 +; .string "C",1,-4,"H",1,-6,"ALL",1,-2,"E",1,-5,"N",1,-3,"G",1,-4,"E",0 +; .string "A",1,1,"W",1,-11,"A",1,1,"IT",1,-5,"S",0 +; +; .string "C",1,-3,"O",1,-3,"M",1,-5,"I",1,-5,"N",1,-4,"G",0 +; .string "S",1,-3,"O",1,-2,"O",1,-4,"N",0 +; +; .string "N",1,-6,"B",1,-5,"A",0 +; .string "M",1,-7,"A",1,-1,"X",1,-5,"I",1,-5,"M",1,-3,"U",1,-5,"M",0 +; .string "H",1,-6,"AN",1,-4,"GT",1,-5,"I",1,-5,"M",1,-5,"E",0 +; +; .string "A",1,2,"V",1,-14,"A",1,1,"I",1,-6,"L",1,-2,"AB",1,-4,"L",1,-1,"E",0 +; .string "N",1,-4,"O",1,2,"V",1,-2,"."," ",1,2,"1",1,1,".",0 +; +; .string "T",1,-6,"H",1,-7,"AN",1,-6,"K"," ","Y",1,-6,"O",1,-2,"U",0 +; .string "F",1,-4,"O",1,-4,"R"," ","P",1,-4,"L",1,-2,"A",1,1,"Y",1,-5,"I",1,-5,"N",1,-4,"G",0 +;DJT End + + +;#congrats_str +; .string "congratulations!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "you have defeated",1 +; .string "all 29 nba teams!",1 +; .string "",1 +; .string "",1 +; .string "",1 +; .string "You are the new",1 +; .string "NBA hangtime",1 +; .string "grand champion!",1 +; .string "",1 +; .string "",1 +; .string "you are an incredible",1 +; .string "player and one of the",1 +; .string "best nba hangtime",1 +; .string "stars of all time!",1 +; .string "",1 +; .string "",1 +; .string "however, this is a",1 +; .string "midway game! Which",1 +; .string "means that there is yet",1 +; .string "a greater challenge",1 +; .string "awaiting you . . .",1 +; .string "",1 +; .string "Play on . . .",1 +; .string "",1 +; .string "",1 +; .string "thank you for playing",1 +; .string "nba hangtime!",1 +; .string "",0 +; .even + + +#player_str + .string "PLAYER ",0 + .even + + + +****************************************************************************** +#***************************************************************************** +;check if all credits have been sucked up (that can be) +; +; 0 = not all credits sucked up +; !0 = all credits sucked up + + SUBR check_suckup + + move @gmqrtr,a0 + cmpi 2,a0 + jrz #not_enough + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz #free_play + + calla CRED_P ;get number credits + move a0,a3 + movi ADJCSTRT,a0 ;# credits to start + calla GET_ADJ + divu a0,a3 ;credits / credits to continue + move a3,a3 + jrz #not_enough + + clr a4 +#next + move @PSTATUS,a0 + btst a4,a0 + jrz #no_player + + move @game_purchased,a0 + btst a4,a0 + jrz #not_purchased + +#no_player + inc a4 + cmpi 4,a4 + jrlt #next + +#not_enough ;to continue +#free_play ;so no suckup required + movk 1,a0 + move a0,a0 + rets + + +#not_purchased + clr a0 + rets + + +;============================================================ +;============================================================ +attrib_off + PUSH a8 + movk 9,a0 +#atlp1 + move *a2+,a8,L + PUSH a0,a2 + calla obj_off + PULL a0,a2 + dsj a0,#atlp1 + PULL a8 + rets + +;============================================================ +;============================================================ +attrib_on + PUSH a8 + movk 9,a0 +#atlp2 + move *a2+,a8,L + PUSH a0,a2 + calla obj_on + PULL a0,a2 + dsj a0,#atlp2 + PULL a8 + rets + +;----------------------------------------------------------------------------- +; JBJ -- updated to accout for less attributes (6) +;----------------------------------------------------------------------------- +update_attribs + move a6,a6 ;special head ? + jrnn #norm2 ;br=yes, exit + + movk 6,a0 ;# attribs. to update +#udlp + move *a11+,a8,L ;a11 points to attribute obj ptrs. + move *a10+,a1 ;a1=attribute value (0-10) + + .if DEBUG + cmpi 10,a1 + jrle #ok + LOCKUP +#ok + .endif + + PUSH a0,a10,a11 + + +;;;Special head? +;; move a6,a6 +;; jrn #norm +;;;Yes, hide stats! +;; movk 11,a1 +#norm + + sll 5,a1 ;x32 (index into below table) + addi attrib_imgs,a1 + move *a1,a0,L +;;;; movi DMAWNZ,a1 ;DMA flags +;;;; calla obj_aniq ;change object image +; +; Here I update the attribute 'bar' img. for this object to a new one. +; + move a0,*a8(OIMG),L ;update img. pointer + move *a0(0),*a8(OSIZE),L ;update size + move *a0(ISAG),*a8(OSAG),L ;update source addr. + + move *a0(ICTRL),a1 ;get bits per pixel...(ctrl data) + move *a8(OCTRL),a14 ;get current ctrl data + andi >8fff,a14 ;clear bits (12-14) + or a1,a14 ;set bits (12-14) + move a14,*a8(OCTRL) ;update 'ctrl' data + + PULL a0,a10,a11 + dsj a0,#udlp +#norm2 rets + + +attrib_imgs + .long ATTBAR01 ;0 + .long ATTBAR01 ;1 + .long ATTBAR02 ;2 + .long ATTBAR03 + .long ATTBAR04 + .long ATTBAR05 + .long ATTBAR06 + .long ATTBAR07 + .long ATTBAR08 + .long ATTBAR09 + .long ATTBAR10 ;10 + .long ATTBAR10 ;10 + + +;;============================================================ +;;============================================================ +; SUBR del_box_imgs +; +; movi CLSDEAD|123,a0 +; calla obj_del1c ;delete text cpu subs +; +; move @teamset1_obj,a0,L +; calla DELOBJ +; move @teamset2_obj,a0,L +; calla DELOBJ +; move @name1_obj,a0,L +; calla DELOBJ +; move @name2_obj,a0,L +; calla DELOBJ +; move @name3_obj,a0,L +; calla DELOBJ +; move @name4_obj,a0,L +; calla DELOBJ +; +; movk 9,a11 +; movi attrib1_obj,a10 +; movi attrib2_obj,a9 +; movi attrib3_obj,a8 +; movi attrib4_obj,a7 +; +;#lp move *a10+,a0,L +; calla DELOBJ +; move *a9+,a0,L +; calla DELOBJ +; move *a8+,a0,L +; calla DELOBJ +; move *a7+,a0,L +; calla DELOBJ +; dsjs a11,#lp +; +; movi BAKLST,a14 +; +;#lp2 move a14,a3 ;A3=*Prev +; move *a14,a14,L ;A14=*Next +; jrz #x +;#cmp move *a14(OZPOS),a2 +; cmpi 60,a2 +; jrz #kil +; cmpi 61,a2 +; jrne #lp2 +;#kil +; +; move *a14,*a3,L ;Unlink from obj list +; +; move @OFREE,*a14+,L ;Add to free list +; subk 32,a14 +; move a14,@OFREE,L +; move *a3,a14,L +; jrnz #cmp +;#x +; move @credit1_obj,a0,L +; calla DELOBJ +; move @credit2_obj,a0,L +; calla DELOBJ +; move @credit3_obj,a0,L +; calla DELOBJ +; +; clr a0 +; callr create_credits +; +; rets + +#****************************************************************************** + + SUBR brown_shadow + rets + +; movi NBAPAL,a0 +; calla pal_find +; andi 0ff00h,a0 +; move a0,a10 +; +;; callr obj_ckpal +;; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #brown_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#brown_shad +; .word 11<<10+5<<5+0 +; .word 9<<10+3<<5+0 +; .word 7<<10+2<<5+0 +; +;obj_ckpal +; movi OBJLST,a14 +; movi kp_ram,a2 +; clr a1 +; move a1,*a2,L +; +;#lp +; move *a14,a14,L ;A14=*Next +; jrz #x +; move *a14(OPAL),a1 +; cmp a0,a1 +; jrne #lp +; +; move a14,*a2+,L +; clr a1 +; move a1,*a2,L +; jruc #lp +; +;#x +; movi kp_ram,a2 +;#lp2 +; move *a2+,a0,L +; jrz #xx +; calla DELOBJ +; jruc #lp2 +;#xx +; rets + + +#****************************************************************************** + + SUBR blue_shadow + rets +; movi wood64b,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; +; movi NBAPAL,a0 ;NBAPAL,a0 +; calla pal_find +;; andi 0ff00h,a0 +; move a0,a10 +; +; +; callr obj_ckpal +; rets +; +; +; move a10,a1 ;dest pal +; ori 52,a1 ;26*16,a1 ;26 +; movi #blue_shad,a0 ;pal data +; movk 3,a2 ;3 colours +; calla pal_set +; rets +; +;#blue_shad +; .word 0<<10+3<<5+6 ;2 +; .word 0<<10+2<<5+4 ;6 +; .word 0<<10+0<<5+0 ;52 + + +#***************************************************************************** +;challenger needed / teammate needed message +;on name entry screen +;a10 = player (0-3) + +;; .asg 105,CHALLY + .asg 88,CHALLY + + SUBR challenger + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #not_2p + addi 4*16,a0 +#not_2p + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val +; move @gmqrtr,a2 +; cmpi 2,a2 +; jrnz #skp +; movi [CHALLY+256,0],a1 ;y val +#skp + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +#isoff + calla obj_off + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #ison + + move @PSTATUS,a0 + btst a10,a0 + + jrnz #isoff +#ison + move @PSTATUS2,a0 + btst a10,a0 + jrz #ison2 + + movi continue,a0 ;* image + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + calla obj_on + +#wait + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + SLEEPK 1 + move @PSTATUS,a0 + btst a10,a0 + jrz #wait +#ison2 + calla obj_on +#loop + SLEEPK 1 + + move @can_enter_inits,a0 ;finished initials entry? + jrz #done + + move @PSTATUS,a0 + btst a10,a0 + jrnz #isoff + + move @PCNT,a0 ;frame count + btst 6,a0 + jrnz #nojoin + + movi join3,a0 ;* image + jruc #join +#nojoin + movi CHALENG,a0 ;* image + move a10,a1 + xori 1,a1 ;teammate bit + move @PSTATUS,a2 + btst a1,a2 + jrz #ischall + movi TMATE,a0 ;* image +#ischall +#join + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + jruc #loop +#done + calla DELOBJA8 + DIE + + +#chall_x .word 55,150,249,344 ;x val + .word 0,101,295,0 ;x val for KIT + + +#***************************************************************************** +;challenger needed message +;on team selection screen +;a10 = team (0-1) + + .asg 160-14+TEAMSEL_PAGE,CHALLY +;;;; .asg 172-14+TEAMSEL_PAGE,CHALLY + + SUBR challenger2 + + move a10,a0 + sll 4,a0 + addi #chall_x,a0 + move *a0,a0 + sll 16,a0 ;x val + movi [CHALLY,0],a1 ;y val + movi CHALENG,a2 ;* image + movi 1000,a3 ;z pos + movi DMAWNZ,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + + move a10,a11 ;(0-1) + sll 4,a11 ;x 16 bits + addi team1,a11 ;team1 or team2 +#isoff + calla obj_off + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + calla obj_on +#loop + SLEEPK 1 + move *a11,a0 + jrnn #isoff + + movi CHALENG,a0 ;* image + move @PCNT,a1 ;frame count + btst 6,a1 + jrnz #nojoin + movi join3,a0 ;* image +#nojoin + movi DMAWNZ,a1 ;DMA flags + calla obj_aniq ;change object image + + jruc #loop + +#chall_x .word 101,295 ;x val + + +#***************************************************************************** + + SUBR drw_chicks + RETP + + + +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; +;;;;;;;;;;TABLES;;;;;;;;;;;;; + +;DJT plyr_names_img_tbl removed to ATTRACT +matchup_mod + .long BKGDBMOD + .word 0,0 ;x,y + .long VSSCRBMOD + .word 0,10 ;x,y + .long 0 + +bsd_stat_str_setup +;DJT Start + PRINT_STR bast8_ascii,5,0,200,197,BAST_Y_P,0 +;DJT End + +bsd_stat_str + .string "BASED ON STATS:",0 + .even + +favored_by_str + .string " FAVORED BY ",0 + .even + + +tnght_mat_str_setup + PRINT_STR brush20_ascii,13,0,200,7,BRSHGYOP,0 + +tonght_matchup_str + .string "TONIGHT'S MATCHUP",0 + .even + + +tm1_cty_str_setup + PRINT_STR bast10_ascii,8,0,80,44,BAST_W_P,0 + +tm1_nme_str_setup +; PRINT_STR bast18_ascii,8,0,80,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,80,59,BRSHGWKP,0 + +tm2_cty_str_setup + PRINT_STR bast10_ascii,8,0,310,44,BAST_W_P,0 + +tm2_nme_str_setup +; PRINT_STR bast18_ascii,8,0,310,59,BSTGWW_P,0 + PRINT_STR brush20_ascii,8,0,310,59,BRSHGWKP,0 + + +city_names_str_tbl + .long atl_str,atl2_str + .long bos_str,bos2_str + .long cha_str,cha2_str + .long chi_str,chi2_str + .long cle_str,cle2_str + .long dal_str,dal2_str + .long den_str,den2_str + .long det_str,det2_str + .long gol_str,gol2_str + .long hou_str,hou2_str + .long ind_str,ind2_str + .long cli_str,cli2_str + .long lak_str,lak2_str + .long mia_str,mia2_str + .long mil_str,mil2_str + .long min_str,min2_str + .long new_str,new2_str + .long ney_str,ney2_str + .long orl_str,orl2_str + .long phi_str,phi2_str + .long pho_str,pho2_str + .long por_str,por2_str + .long sac_str,sac2_str + .long san_str,san2_str + .long sea_str,sea2_str + .long tor_str,tor2_str + .long uta_str,uta2_str + .long van_str,van2_str + .long was_str,was2_str + + +atl_str + .string "ATLANTA",0 +atl2_str + .string "HAWKS",0 +bos_str + .string "BOSTON",0 +bos2_str + .string "CELTICS",0 +cha_str + .string "CHARLOTTE",0 +cha2_str + .string "HORNETS",0 +chi_str + .string "CHICAGO",0 +chi2_str + .string "BULLS",0 +cle_str + .string "CLEVELAND",0 +cle2_str + .string "CAVALIERS",0 +dal_str + .string "DALLAS",0 +dal2_str + .string "MAVERICKS",0 +den_str + .string "DENVER",0 +den2_str + .string "NUGGETS",0 +det_str + .string "DETROIT",0 +det2_str + .string "PISTONS",0 +gol_str + .string "GOLDEN STATE",0 +gol2_str + .string "WARRIORS",0 +hou_str + .string "HOUSTON",0 +hou2_str + .string "ROCKETS",0 +ind_str + .string "INDIANA",0 +ind2_str + .string "PACERS",0 +cli_str + .string "LOS ANGELES",0 +cli2_str + .string "CLIPPERS",0 +lak_str + .string "LOS ANGELES",0 +lak2_str + .string "LAKERS",0 +mia_str + .string "MIAMI",0 +mia2_str + .string "HEAT",0 +mil_str + .string "MILWAUKEE",0 +mil2_str + .string "BUCKS",0 +min_str + .string "MINNESOTA",0 +min2_str + .string "T'WOLVES",0 +new_str + .string "NEW JERSEY",0 +new2_str + .string "NETS",0 +ney_str + .string "NEW YORK",0 +ney2_str + .string "KNICKS",0 +orl_str + .string "ORLANDO",0 +orl2_str + .string "MAGIC",0 +phi_str + .string "PHILADELPHIA",0 +phi2_str + .string "76ERS",0 +pho_str + .string "PHOENIX",0 +pho2_str + .string "SUNS",0 +por_str + .string "PORTLAND",0 +por2_str + .string "TRAILBLZRS",0 +sac_str + .string "SACRAMENTO",0 +sac2_str + .string "KINGS",0 +san_str + .string "SAN ANTONIO",0 +san2_str + .string "SPURS",0 +sea_str + .string "SEATTLE",0 +sea2_str + .string "SONICS",0 +uta_str + .string "UTAH",0 +uta2_str + .string "JAZZ",0 +tor_str + .string "TORONTO",0 +tor2_str + .string "RAPTORS",0 +van_str + .string "VANCOUVER",0 +van2_str + .string "GRIZZLIES",0 +was_str + .string "WASHINGTON",0 +was2_str + .string "BULLETS",0 + .even + + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +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 +;DJT Start + .long T_PISS_N ; 7 DETROIT +;DJT End + .long T_WARS ; 8 GOLDEN STATE + .long T_ROCKS ; 9 HOUSTON + .long T_PACER ;10 INDIANA +;FIXX!!! + .long T_LAKS ;12 LOS ANGELES (LAKERS) + .long T_CLIPS ;11 LOS ANGELES (CLIPPERS) +;FIXX!!! + .long T_HEAT ;13 MIAMI + .long T_BUCKS ;14 MILWAUKEE +;DJT Start + .long T_TWOLV_N ;15 MINNESOTA +;DJT End + .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_RAPT ;25 TORONTO +;DJT Start + .long T_JAZZ_N ;26 UTAH +;DJT End + .long T_GRIZZ ;27 VANCOUVER + .long T_BULTS ;28 WASHINGTON (150) +;FIX!!! Defeated all teams special logo + .long T_BULTS ; Special team + +;----------------------------------------------------------------------------- +; This TABLE has the following format: ptr. to city name img, team number +; +; Its used for the CURSOR control on the new team select screen +;----------------------------------------------------------------------------- + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_start + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN + LW city_det,_DET + LW city_gol,_GOL + LW city_hou,_HOU + LW city_ind,_IND + LW city_lac,_LAC + LW city_lal,_LAL +;; LW city_los,_LOS + LW city_mia,_MI + LW city_mil,_MIL + LW city_min,_MIN + LW city_nej,_NJ + LW city_ney,_NY + LW city_orl,_ORL + LW city_phi,_PHI + LW city_pho,_PHX + LW city_por,_POR + LW city_sac,_SAC + LW city_san,_SAN + LW city_sea,_SEA + LW city_tor,_TOR + LW city_uta,_UTA + LW city_van,_VAN + LW city_was,_WAS +city_table_end + LW city_atl,_ATL + LW city_bos,_BOS + LW city_cha,_CHA + LW city_chi,_CHI + LW city_cle,_CLE + LW city_dal,_DAL + LW city_den,_DEN +city_table_end2 + + +********NOTE*************************************************************** +* IF this table is messed with, 'name_sort' table must be updated as well +* and vice versa +********NOTE*************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_attribs +; +; LAST TWO ATTRIBUTES ARE NOW IGNORED +; + +;DJT Start +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;00 ATLANTA HAWKS + + .word 09,02,07,00 + .word 09,01,07,09 ;MOOKIE BLAYLOCK 6'1" 185 reg + + .word 06,09,04,08 + .word 05,10,03,07 ;DIKEMBE MUTOMBO 7'2" 245 reg + + .word 07,05,08,05 + .word 05,02,04,06 ;STEVE SMITH 6'8" 208 reg + + .word 07,06,07,03 + .word 05,05,05,08 ;CHRISTIAN LAETTNER 6'11" 235 reg + + .word 07,04,06,06 + .word 04,05,04,02 ;KEN NORMAN 6'8" 223 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;01 BOSTON CELTICS + + .word 08,02,05,07 + .word 07,01,05,02 ;DEE BROWN 6'1" 161 reg +;new + .word 06,07,07,05 + .word 03,07,06,01 ;STEVE HAMER _______________ + + .word 09,01,09,01 + .word 07,01,06,05 ;DANA BARROS 5'11" 165 reg + + .word 07,08,07,07 + .word 07,09,01,06 ;DINO RADJA 6'11" 225 thin + + .word 05,09,07,05 + .word 08,05,07,07 ;RICK FOX 6'7" 231 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;02 CHARLOTTE HORNETS + + .word 07,05,10,05 + .word 06,02,02,09 ;GLEN RICE 6'8" 220 reg + + .word 06,09,06,05 + .word 03,03,04,06 ;ANTHONY MASON 6'7" 250 fat + + .word 05,08,04,04 + .word 05,09,06,02 ;VLADE DIVAC 7'1" 260 thin + + .word 03,08,04,04 + .word 02,07,03,02 ;GEORGE ZIDEK _______________ + + .word 08,02,07,01 + .word 08,01,04,07 ;DELL CURRY 6'5" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;03 CHICAGO BULLS + + .word 08,06,08,09 + .word 09,08,07,08 ;SCOTTIE PIPPEN 6'7" 225 thin + + .word 07,09,01,04 + .word 05,07,04,03 ;DENNIS RODMAN 6'8" 210 thin + + .word 07,05,07,06 + .word 07,05,08,10 ;TONI KUKOC 6'11" 230 ex thin + + .word 05,08,05,03 + .word 02,07,06,02 ;LUC LONGLEY 7'2" 265 fat + + .word 06,02,09,00 + .word 06,01,04,08 ;STEVE KERR _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;04 CLEVELAND CAVALIERS + + .word 06,08,06,06 + .word 03,06,04,07 ;TYRONE HILL 6'9" 245 reg + + .word 07,05,07,03 + .word 04,05,04,02 ;CHRIS MILLS 6'6" 216 fat + + .word 08,05,07,01 + .word 08,04,07,02 ;BOBBY PHILLS 6'5" 217 reg + + .word 09,02,08,01 + .word 08,01,07,09 ;TERRELL BRANDON 6'0" 180 thin + + .word 04,07,07,02 + .word 05,02,05,08 ;DANNY FERRY 6'10" 245 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;05 DALLAS MAVERICKS + + .word 09,04,04,05 + .word 06,06,08,08 ;JASON KIDD _______________ + + .word 06,05,06,01 + .word 07,01,05,05 ;DEREK HARPER 6'4" 206 reg + + .word 07,04,07,05 + .word 05,04,05,07 ;JIM JACKSON 6'6" 220 reg + + .word 04,08,03,07 + .word 01,06,03,03 ;ERIC MONTROSS _______________ + + .word 08,03,09,08 + .word 04,07,05,09 ;JAMAL MASHBURN 6'8" 240 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;06 DENVER NUGGETS + + .word 07,01,06,07 + .word 05,07,03,07 ;ANTONIO McDYESS _______________ + + .word 04,05,08,01 + .word 08,01,02,07 ;SARUNAS MARCIULIONIS 6'5" 215 reg + + .word 07,04,06,01 + .word 09,04,09,04 ;MARK JACKSON 6'3" 192 fat + + .word 07,06,08,02 + .word 06,01,05,08 ;DALE ELLIS 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;07 DETROIT PISTONS + + .word 09,05,08,08 + .word 08,05,08,09 ;GRANT HILL _______________ +;new +;; .word 07,03,08,03 +;; .word 07,05,06,02 ;RON RILEY _______________ + + .word 06,04,08,00 + .word 06,01,08,09 ;JOE DUMARS 6'3" 195 thin + + .word 07,09,05,07 + .word 04,07,05,02 ;OTIS THORPE 6'10" 246 reg + + .word 08,03,05,07 + .word 06,02,04,08 ;STACEY AUGMON 6'8" 205 thin +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;08 GOLDEN STATE WARRIORS + + .word 09,04,08,08 + .word 07,02,04,08 ;LATRELL SPREWELL 6'5" 190 ex thin + + .word 04,06,05,07 + .word 03,05,03,02 ;JON KONCAK 7'0" 250 reg + + .word 07,07,07,09 + .word 07,08,02,03 ;JOE SMITH _______________ + + .word 04,05,09,02 + .word 08,04,07,08 ;CHRIS MULLIN 6'7" 215 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;09 HOUSTON ROCKETS + + .word 07,10,07,08 + .word 07,10,07,07 ;HAKEEM OLAJUWON 7'0" 255 reg +;new + .word 04,09,04,06 + .word 02,08,04,02 ;OTHELLA HARRINGTON _______________ + + .word 07,03,08,09 + .word 08,02,08,08 ;CLYDE DREXLER 6'7" 222 thin + + .word 05,09,05,07 + .word 04,04,01,04 ;KEVIN WILLIS 7'0" 240 reg +;kill (MAYBE!!!) +;Kenny Smith + .word 06,04,06,01 + .word 07,01,07,04 ;KENNY SMITH _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;10 INDIANA PACERS +;LOOK!!! + .word 07,04,09,06 + .word 06,05,05,10 ;REGGIE MILLER 6'7" 185 ex thin +;new + .word 04,08,07,07 + .word 03,07,04,02 ;ERICK DAMPIER _______________ + + .word 09,04,06,06 + .word 08,06,08,09 ;JALEN ROSE _______________ + + .word 06,09,07,03 + .word 04,06,02,09 ;RIK SMITS 7'4" 265 ex thin + + .word 05,06,04,06 + .word 05,08,02,02 ;DALE DAVIS 6'11" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;11 L.A. CLIPPERS + + .word 05,07,07,06 + .word 06,06,01,08 ;LOY VAUGHT 6'9" 240 reg + + .word 06,08,05,05 + .word 02,03,02,05 ;RODNEY ROGERS _______________ + + .word 08,05,06,05 + .word 08,04,06,09 ;LAMOND MURRAY _______________ + + .word 08,01,04,01 + .word 08,01,08,02 ;POOH RICHARDS _______________ + + .word 08,05,06,09 + .word 06,04,05,08 ;BRENT BARRY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;12 L.A. LAKERS + + .word 10,02,07,01 + .word 06,01,08,09 ;NICK VAN EXEL 6'1" 170 ex thin + + .word 08,03,09,07 + .word 08,02,02,08 ;CEDRIC CEBALLOS 6'7" 220 thin + + .word 07,04,08,01 + .word 04,03,04,09 ;BYRON SCOTT 6'4" 235 fat + + .word 06,05,05,06 + .word 08,09,01,03 ;ELDON CAMPBELL 6'11" 230 ex thin + + .word 08,04,07,05 + .word 04,07,08,02 ;EDDIE JONES _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;13 MIAMI HEAT + + .word 08,10,06,09 + .word 04,09,03,07 ;ALONZO MOURNING 6'10" 240 reg + + .word 09,05,07,00 + .word 08,01,08,06 ;TIM HARDAWAY 6'0" 195 reg + + .word 05,05,08,02 + .word 04,05,05,04 ;SASHA DANILOVIC _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;14 MILWAUKEE BUCKS + + .word 08,05,07,08 + .word 05,07,04,06 ;VIN BAKER 6'11" 234 thin +;new + .word 09,02,08,06 + .word 06,02,05,08 ;RAY ALLEN _______________ + + .word 06,08,05,06 + .word 04,09,02,04 ;ANDREW LANG 6'11" 235 reg + + .word 07,07,09,06 + .word 07,02,04,08 ;GLENN ROBINSON _______________ + + .word 09,01,06,00 + .word 07,01,07,09 ;SHAWN RESPERT _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;15 MINNESOTA TIMBERWOLVES + + .word 07,06,07,05 + .word 09,07,06,03 ;TOM GUGLIOTTA 6'10" 240 reg +;new + .word 08,04,08,05 + .word 07,03,06,03 ;STEPHON MARBURY _______________ + + .word 08,02,05,08 + .word 05,08,04,03 ;KEVIN GARNETT _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;16 NEW JERSEY NETS + + .word 08,02,06,05 + .word 07,05,07,03 ;KENDALL GILL 6'5" 200 thin +;new + .word 06,06,07,07 + .word 03,07,05,02 ;KERRY KITTLES _______________ + + .word 09,03,06,00 + .word 09,00,09,02 ;ROBERT PACK 6'2" 180 thin + + .word 05,03,05,08 + .word 04,10,03,04 ;SHAWN BRADLEY 7'6" 248 ex thin + + .word 08,04,05,06 + .word 09,05,05,08 ;ED O'BANNON _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;17 NEW YORK KNICKS + + .word 06,10,07,08 + .word 04,10,02,08 ;PATRICK EWING 7'0" 240 reg +;new + .word 05,07,07,06 + .word 04,07,05,02 ;JOHN WALLACE _______________ + + .word 07,08,07,08 + .word 04,05,07,08 ;LARRY JOHNSON 6'7" 250 fat + + .word 09,05,08,02 + .word 07,02,08,08 ;JOHN STARKS 6'5" 185 thin + + .word 08,01,10,02 + .word 04,03,05,07 ;ALAN HOUSTON 6'6" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;18 ORLANDO MAGIC + + .word 10,04,08,08 + .word 08,07,08,10 ;ANFERNEE HARDAWAY 6'7" 200 ex thin + + .word 05,08,05,03 + .word 03,07,04,04 ;RONY SEIKALY 6'11" 252 reg + + .word 06,08,05,06 + .word 04,08,04,04 ;HORACE GRANT 6'10" 220 reg + + .word 07,04,08,03 + .word 08,04,04,04 ;NICK ANDERSON 6'6" 205 reg + + .word 07,03,09,03 + .word 04,04,05,04 ;DENNIS SCOTT 6'8" 229 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;19 PHILADELPHIA 76ers +;new + .word 09,03,09,00 + .word 09,01,07,06 ;ALLEN IVERSON _______________ +;new +;; .word 06,05,08,06 +;; .word 06,04,07,02 ;RYAN MINOR _______________ + + .word 08,04,07,08 + .word 05,03,05,07 ;JERRY STACKHOUSE _______________ + + .word 05,08,07,06 + .word 03,05,03,02 ;DERRICK COLEMAN 6'10" 260 fat + + .word 05,06,06,06 + .word 04,06,05,07 ;CLARENCE WEATHERSPOON 6'7" 240 fat +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;20 PHOENIX SUNS + + .word 09,02,08,02 + .word 08,03,08,09 ;KEVIN JOHNSON 6'1" 190 ex thin + + .word 04,08,08,06 + .word 04,06,05,07 ;WAYMAN TISDALE 6'9" 260 fat + + .word 05,06,05,07 + .word 04,05,03,06 ;DANNY MANNING 6'10" 234 reg + + .word 08,06,06,08 + .word 07,08,05,09 ;ROBERT HORRY 6'10" 220 thin + + .word 09,01,06,01 + .word 04,01,06,02 ;SAM CASSELL 6'3" 195 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;21 PORTLAND TRAILBLAZERS + + .word 08,07,06,06 + .word 06,07,02,08 ;CLIFF ROBINSON 6'10" 225 thin + + .word 07,04,05,09 + .word 04,01,02,06 ;ISIAH RIDER 6'5" 215 thin + + .word 04,09,06,05 + .word 03,07,02,04 ;ARVYDAS SABONIS _______________ + + .word 10,03,06,00 + .word 08,03,09,06 ;KENNY ANDERSON 6'1" 168 ex thin + + .word 09,02,05,00 + .word 06,01,08,08 ;RANDOLPH CHILDRESS _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;22 SACRAMENTO KINGS + + .word 07,06,07,06 + .word 04,02,07,06 ;BILLY OWENS 6'9" 220 reg + + .word 08,02,08,00 + .word 08,01,08,09 ;MAHMOUD ABDUL-RAUF 6'1" 168 ex thin + + .word 07,07,08,02 + .word 09,01,06,08 ;MITCH RICHMOND 6'5" 215 reg + + .word 05,06,05,06 + .word 02,09,01,06 ;BRIAN GRANT _______________ + + .word 10,01,06,00 + .word 08,00,08,04 ;TYUS EDNEY _______________ + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;23 SAN ANTONIO SPURS + + .word 08,04,08,07 + .word 04,05,02,08 ;SEAN ELLIOTT 6'8" 215 thin + + .word 08,09,08,06 + .word 05,10,04,06 ;DAVID ROBINSON 7'1" 235 reg + + .word 07,04,08,03 + .word 05,03,06,04 ;VERNON MAXWELL 6'4" 190 thin + + .word 10,01,05,00 + .word 08,01,09,02 ;AVERY JOHNSON 5'11" 175 ex thin + + .word 07,03,06,01 + .word 07,01,03,02 ;VINNY DEL NEGRO 6'4" 200 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;24 SEATTLE SUPERSONICS + + .word 08,07,08,10 + .word 06,09,03,07 ;SHAWN KEMP 6'10" 245 reg + + .word 10,03,07,00 + .word 10,02,08,08 ;GARY PAYTON 6'4" 190 ex thin + + .word 05,06,08,05 + .word 02,04,04,02 ;DETLEF SCHREMPF 6'10" 230 thin + + .word 06,03,07,00 + .word 06,04,05,07 ;HERSEY HAWKINS 6'3" 190 thin + + .word 07,03,04,04 + .word 04,04,06,04 ;SHERELL FORD 6'6" 235 thin + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;25 TORONTO RAPTORS + + .word 06,08,05,05 + .word 06,04,05,01 ;CARLOS ROGERS _______________ +;new + .word 07,07,08,08 + .word 04,09,05,07 ;MARCUS CAMBY _______________ + + .word 10,01,07,00 + .word 08,01,09,08 ;DAMON STOUDAMIRE _______________ + + .word 05,08,04,07 + .word 04,06,03,03 ;POPEYE JONES 6'8" 250 reg + + .word 08,06,07,07 + .word 05,08,06,03 ;WALT WILLIAMS 6'8" 230 reg + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;26 UTAH JAZZ + + .word 07,02,08,00 + .word 10,01,10,08 ;JOHN STOCKTON 6'1" 175 ex thin + + .word 07,10,08,08 + .word 08,05,06,07 ;KARL MALONE 6'9" 256 fat + + .word 05,05,07,02 + .word 07,02,05,06 ;JEFF HORNACEK 6'4" 190 reg + + .word 05,06,07,05 + .word 08,04,04,02 ;CHRIS MORRIS 6'8" 220 reg +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;27 VANCOUVER GRIZZLIES + + .word 08,04,05,01 + .word 07,02,07,02 ;GREG ANTHONY 6'2" 185 ex thin + + .word 07,06,07,04 + .word 08,05,03,07 ;BLUE EDWARDS 6'4" 228 reg + + .word 05,10,06,04 + .word 05,08,02,02 ;BRYANT REEVES _______________ +;kill + .word 00,00,00,00 + .word 00,00,00,00 +;kill + .word 00,00,00,00 + .word 00,00,00,00 + +;Speed, Power, Shoot, Dunk +;Steal, Block, Pass ability, Clutch + +;28 WASHINGTON BULLETS + + .word 08,03,07,00 + .word 07,01,10,06 ;ROD STRICKLAND 6'3" 185 reg + + .word 08,08,08,08 + .word 06,04,06,07 ;CHRIS WEBBER 6'10" 260 fat + + .word 07,07,08,06 + .word 05,03,04,06 ;JUWAN HOWARD _______________ + + .word 04,09,05,02 + .word 03,09,01,04 ;GHEORGHE MURESAN 7'7" 315 thin + + .word 07,05,06,06 + .word 06,02,02,08 ;CALBERT CHEANEY 6'7" 209 reg +;DJT End + +;FIX!!! +;Move these to where they should go (If anywhere!) +;Special super star secret guests +; +;;ATL +; .word 06,04,05,06 +; .word 05,08,04,03 ;ALAN HENDERSON ____________ +; +;;G.S +; .word 06,05,05,05 +; .word 06,04,05,05 ;BIMBO COLES 6'2" 185 reg +; +;;ATL +; .word 05,08,05,06 +; .word 03,06,01,04 ;SEAN ROOKS 6'10" 260 reg +; +;;N.Y. +; .word 07,02,06,05 +; .word 04,06,05,07 ;WILLIE ANDERSON 6'8" 200 reg +; +;;ORL +; .word 05,06,05,06 +; .word 03,06,04,05 ;KENNY GATTISON 6'8" 252 fat +; +;;L.A. +; .word 08,04,07,05 +; .word 04,07,08,02 ;EDDIE JONES ________________ +; +; +;;TOR +; .word 05,05,04,07 +; .word 04,07,04,04 ;SHARONE WRIGHT ______________ + + + +********NOTE************************************************************** +* IF this table is messed with, 'player_attribs' must be updated as well +* and vice versa +********NOTE************************************************************** +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +;DJT Start + .ref ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .ref MARBURY,MINOR,RILEY,WALLACE + +name_sort + .long BLAYLOCK,MUTUMBO,SSMITH,LAETTNER,KNORMAN ;00 HAWKS + .long BROWN, HAMER ,BARROS,RADJA,FOX ;new ;01 CELTICS + .long RICE,MASON,DIVAC,ZIDEK,CURRY ;02 HORNETS + .long PIPPEN,RODMAN,KUKOC,LONGLEY,KERR ;03 BULLS + .long THILL,CMILLS,PHILLS,BRANDON,FERRY ;04 CAVALIERS + .long KIDD,HARPER_D,JACK,MONTROSS,MASH ;05 MAVERICKS + .long MCDYESS,MARCIULO,MJACKSON,DELLIS, DELLIS ;kill ;06 NUGGETS + .long GHILL,DUMARS,THORPE,AUGMON, RILEY ;kill:new ;07 PISTONS + .long SPREWELL,KONCAK,JSMITH,MULLIN, MULLIN ;kill ;08 WARRIORS + .long OLAJUWON, HRNGTON ,DREXLER,WILLIS, WILLIS ;new,kill ;09 ROCKETS + .long MILLER, DAMPIER ,ROSE,SMITS,DDAVIS ;new ;10 PACERS + .long VAUGHT,RROGERS,LMURRAY,PRICHARD,BBARRY ;11 CLIPPERS + .long VANEXEL,CEBALLOS,SCOTT,CAMPBELL,EJONES ;12 LAKERS + .long MOURN,THARDAWAY,DANILOVI, DANILOVI , DANILOVI ;kill,kill ;13 HEAT + .long BAKER, ALLEN ,LANG,GROBINSO,RESPERT ;new ;14 BUCKS + .long GUGLI2, MARBURY ,GARNETT, GARNETT , GARNETT ;new,kill,kill ;15 TIMBERWOLVES + .long GILL, KITTLES ,PACK,BRADLEY,OBANNON ;new ;16 NETS + .long EWING, WALLACE ,JOHNSN_L,STARKS,HOUSTON ;new ;17 KNICKS + .long AHARDAWAY,SEIKALY,GRANT_HC,NANDERSON,DSCOTT ;18 MAGIC + .long IVERSON ,STACKHOU,COLEMAN,WEATHSPN, MINOR ;new,kill:new ;19 76ers + .long KJOHNSON,TISDALE,MANNING,HORRY,CASSELL ;20 SUNS + .long CROBINSON,RIDER,SABONIS,KANDERSON,CHILDRES ;21 TRAILBLAZERS + .long BOWENS,ABDULRAU,RICH,BGRANT,EDNEY ;22 KINGS + .long ELLIOT2,DROBINSON,VMAXWELL,AJOHNSON,DELNEGRO ;23 SPURS + .long KEMP,PAYTON,SCHREMPF,HAWKINS,SFORD ;24 SUPERSONICS + .long CROGERS, CAMBY ,STOUDAMI,PJONES,WWILLIAM ;new ;25 RAPTORS + .long STOCKTON,MALONE_K,HORNACEK,CMORRIS, CMORRIS ;kill ;26 JAZZ + .long ANTHONY,EDWARDS,BREEVES, BREEVES , BREEVES ;kill,kill ;27 GRIZZLIES + .long STRICKLA,WEBBER,JHOWARD,MURESAN,CHEANEY ;28 BULLETS + .long 0 + +;Removed +;MCCLOUD,TMILLS,SMITH,MCKEE2,CHAPMAN,BENJAMIN,DOUGLAS,WEBB +;GILLIAM,KEDWARDS,OAKLEY,RUFFIN,WPERSON,FINLEY,BWILLIAM,PERSON +;ROBERTSON,OMILLER,TMURRAY,BENOIT,SCOTT,EMURDOCK +;DJT End + + .if HEADCK +;This show the player name on scrn for debugging + SUBR show_name + + move a10,a0 + andi 03,a0 + sll 4,a0 + addi #xtbl,a0 + move *a0,a0 + sll 16,a0 + + movi [200,0],a1 ;y val + move a10,a2 + sll 5,a2 + addi name_sort,a2 + move *a2,a2,L + movi >7ff0,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + DIE + +#xtbl .word 57,148,251,342 + .endif + +;----------------------------------------------------------------------------- +; THIS table contains the MAX number of squads per team +; +; ***NOTE*** if change this table...must also update +; 'player_names' and 'player_heads' +;----------------------------------------------------------------------------- +team_sqaud_cnts +;DJT Start + .word 20 ;ATLANTA + .word 20 ;BOSTON + .word 20 ;CHARLOTTE + .word 20 ;CHICAGO + .word 20 ;CLEVELAND + .word 20 ;DALLAS + .word 12 ;DENVER + .word 12 ;20 ;DETROIT + .word 12 ;GOLDEN STATE + .word 12 ;HOUSTON + .word 20 ;INDIANA + .word 20 ;L.A. CLIPPERS + .word 20 ;L.A. LAKERS + .word 6 ;MIAMI + .word 20 ;MILWAUKEE + .word 6 ;MINNESOTTA + .word 20 ;NEW JERSEY + .word 20 ;NEW YORK + .word 20 ;ORLANDO + .word 12 ;20 ;PHILADELPHIA + .word 20 ;PHOENIX + .word 20 ;PORTLAND + .word 20 ;SACRAMENTO + .word 20 ;SAN ANTONIO + .word 20 ;SEATTLE + .word 20 ;TORONTO + .word 12 ;UTAH + .word 6 ;VANCOUVER + .word 20 ;WASHINGTON + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +our_names + .long JAPPLE ;00 JEFF JOHNSON + .long DIVITA ;01 SAL DIVITA + .long TURMELL ;02 TURMELL + .long THOMPS ;03 THOMPSON + .long GEER ;04 GEER + .long CARLTON ;05 CARLTON + .long HEDRICK ;06 HEDRICK + .long HEY ;07 JOHN HEY + .long AIRMOR ;08 AIR MORRIS + .long BARDO ;09 STEVE BARDO + .long MINIFE ;10 MINIFEE + .long MARTIN ;11 MARTINEZ + .long PESINA ;12 PESINA + .long LIPTAK ;13 LIPTAK + .long FERRIER ;14 EDDIE + .long VINIK ;15 MIKE V. + .long RIVETT ;16 JAMIE R. + .long EHRLICH ;17 NICK ERICH + .long ROOT ;18 JOHN ROOT + .long MEDNICK ;19 C. MEDNICK + .long ROAN ;20 DAN R. + .long FITZ ;21 PAT F. + .long BOON ;22 ED BOOM + .long TOBIAS ;23 JOHN TOBIAS + .long OURSLER ;24 SHERIDAN OURSLER + .long AIRMOR ;25 JASON S. + .long QUINN ;26 QUINN + .long PERRY ;27 PERRY from "FRIENDS" + .long FUNK ;28 NEIL FUNK + .long MDOC ;29 MDOC + .long FUNK ;30 BUD + .long MURESAN ;31 MARIUS + .long MUNDAY ;32 MUNDAY + .long NORTH ;33 NORTH + .long AMRICH ;34 AMRICH + .long JIGGETTS ;35 JIGGETS + .long ZIRIN ;36 ZIRIN + .long HBETT ;37 HEITH BETTLEMAN + .long MBETT ;38 MATT BETTLEMAN +;DJT Start + .long FUNK ;39 KEVIN DAY +;DJT End + +;Superstar special guests + .long PIPPEN + .long RODMAN + .long JOHNSN_L + .long RICE + .long KIDD + .long MUTUMBO + .long GHILL + .long OLAJUWON + .long MILLER + .long SMITS + .long MOURN + .long GROBINSO + .long EWING + .long STARKS + .long AHARDAWAY + .long GRANT_HC + .long STACKHOU + .long CROBINSON + .long DROBINSON + .long ELLIOT2 + .long KEMP + .long MALONE_K + .long WEBBER + .long MURESAN + +;New Superstar special guests removed from teams + .long MCCLOUD + .long TMILLS + .long SMITH + .long MCKEE2 + .long CHAPMAN + .long BENJAMIN + .long DOUGLAS + .long WEBB + .long GILLIAM + .long KEDWARDS + .long OAKLEY + .long RUFFIN + .long WPERSON + .long FINLEY + .long BWILLIAM + .long PERSON + .long ROBERTSON + .long OMILLER + .long TMURRAY + .long BENOIT + .long SCOTT + .long EMURDOCK +;DJT End + + +;----------------------------------------------------------------------------- +; This table contains: +; +; 1) Design team and company worker BIG heads +; 'used with SPECIAL_HEADS' variable +;----------------------------------------------------------------------------- +our_heads + .long JEF_MUG ;0 JEFF JOHNSON + .long SAL_MUG ;1 SAL DIVITA + .long TUR_MUG ;2 TURMELL + .long DAN_MUG ;3 THOMPSON + .long EUG_MUG ;4 GEER + .long JMC_MUG ;5 CARLTON + .long JEN_MUG ;6 HEDRICK + .long HEY_MUG ;7 JOHN HEY + .long WIL_MUG ;8 AIR MORRIS + .long BAR_MUG ;9 STEVE BARDO + .long MIN_MUG ;10 MINIFEE + .long MARTY_MUG ;11 MARTINEZ + .long CARL_MUG ;12 PESINA + .long SHN_MUG ;13 LIPTAK + .long EDD_MUG ;14 EDDIE + .long MXV_MUG ;15 MIKE V. + .long JAM_MUG ;16 JAMIE R. + .long NIK_MUG ;17 NICK ERICH + .long ROT_MUG ;18 JOHN ROOT + .long CAR_MUG ;19 C. MEDNICK + .long ROH_MUG ;20 DAN ROAN ? + .long PAT_MUG ;21 PAT F. + .long BOO_MUG ;22 BOON + .long TOB_MUG ;23 TOBIAS + .long OUR_MUG ;24 OURSLER + .long JAS_MUG ;25 JASON S. + .long QUI_MUG ;26 QUINN + .long PER_MUG ;27 M. PERRY + .long NEI_MUG ;28 NEIL FUNK + .long MDOC_MUG ;29 MDOC + .long BUD_MUG ;30 BUD + .long OLD ;31 MARIUS + .long MUN_MUG ;32 MUNDAY + .long NOR_MUG ;33 NORTH + .long AMR_MUG ;34 AMRICH + .long JIG_MUG ;35 JIGGETS +;DJT Start + .long JON_MUG ;36 ZIRIN + .long HEI_MUG ;37 HEITH BETTLEMAN + .long MAT_MUG ;38 MATT BETTLEMAN + .long BAL_MUG ;39 KEVIN DAY + +;Superstar special guests + .long PIP_CHI + .long ROD_CHI + .long JON_CHA + .long RCE_CHA + .long KID_DAL + .long MUT_DEN + .long HIL_DET + .long OLA_HOU + .long MIL_IND + .long SMI_IND + .long MOU_MIA + .long ROB_MLW + .long EWG_NEY + .long STA_NEY + .long HAR_ORL + .long GRT_ORL + .long STA_PHL + .long ROB_PRT + .long ROB_SAN + .long ELL_SAN + .long KMP_SEA + .long MLN_UTA + .long WEB_WAS + .long MUR_WAS + +;New Superstar special guests removed from teams + .long MCC_DAL + .long MLS_DET + .long SMT_HOU + .long MCK_IND + .long CHP_MIA + .long BEN_MLW + .long DOU_MLW + .long WEB_MIN + .long GIL_NEJ + .long EDW_NEJ + .long OAK_NEY + .long RUF_PHL + .long PER_PHX + .long FIN_PHX + .long WIL_PRT + .long PRS_SAN + .long ROB_TOR + .long MIL_TOR + .long MUR_TOR + .long BEN_UTA + .long SCO_VAN + .long MUR_VAN + +our_heads_end + .long SAL_MUG ;0 ;repeat 1st 2 for wrap around + .long SAL_MUG ;1 +our_heads_end2 + + .end +;DJT End diff --git a/SRC/SELECT3.ASM b/SRC/SELECT3.ASM new file mode 100644 index 0000000..df14f73 --- /dev/null +++ b/SRC/SELECT3.ASM @@ -0,0 +1,4783 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 7-31-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 7/31/95 +;----------------------------------------------------------------------------- + .file "select3.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" +; .include "gsp.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + .include "bgndtbl.glo" + .include "imgtbl.glo" +; .include "imgtbl2.glo" + .include "mugshot.glo" + .include "imgtblp.glo" + .include "imgtblm.glo" +; .include "imgtbl4.glo" + + .include "plaques.tbl" + + + .ref create_plr_mugshots_tbl,create_plr_mugshots_tbl_end + .ref player_heads,player_names ;table addr. + .ref winner_stays_msg + .ref mess_objid,mess_line_spacing + .ref message_palette,message_ascii + .ref mess_space_width + .ref mess_cursx,mess_cursy + .ref cur_pos,create_plyr + .ref get_all_sticks_cur,get_all_buttons_down + .ref setup_message + .ref scrnrel_off,print_string_C2,print_string_C + .ref print_string,print_string2 + .ref dec_to_asc,concat_string + .ref copy_string,RNDRNG0 + .ref obj_on,obj_off + .ref PSTATUS,PSTATUS2 + .ref create_title_bar + .ref pal_getf,GAMSTATE + .ref brush10_ascii,brush12_ascii,brush20_ascii + .ref city_table_start + .ref del_butn_box_stuff + .ref del_yes_no_buttons + .ref create_small_yes_no_butns + .ref joy_pos + .ref update_yes_no_button_pals + .ref get_stick_val_cur,get_stick_val_down + .ref flash_pressed_yes_no_button + .ref get_all_buttons_cur + .ref timeout + .ref KIL1C,delete_text + .ref IRQSKYE,TWOPLAYERS + .ref bast8t_ascii,bast8_ascii,bast10_ascii + .ref GET_ADJ,CRED_P + .ref special_heads + .ref our_names + .ref player1_data,player2_data,player3_data,player4_data + .ref team1,team2,tm1set,tm2set + .ref setup_message,mess_cursx,mess_cursy + .ref message_buffer + .ref get_name_string + .ref get_all_buttons_cur2 + .ref get_but_val_cur + .ref get_but_val_down + .ref inmatchup + + .ref pal_clean,KILBGND + + .ref pup_court,pup_aba,pup_baby,pup_bighead + .ref pup_nomusic,pup_maxblock,pup_hypspeed + .ref pup_hugehead + .ref pup_maxpower,pup_tournament,pup_maxsteal + .ref pup_fastpass,pup_showhotspots,pup_notag + .ref pup_goaltend,pup_trbinfinite + .ref pup_trbstealth + .ref pup_nopush,pup_maxspeed,pup_showshotper + .ref pup_noassistance,pup_tournament,pup_maxpower + .ref pup_lockcombo + + .ref print_plr_name,print_string_C3 + .ref credits3,exit_status + + .ref TM_NAMES_ON_SCRN,MIDDLE_TEAM_NAME + .ref plate1_objs,plate2_objs + .ref transition_flag + .ref teamset1_obj,teamset2_obj + .ref SHAKER2 + .ref compute_team_def_off_rank + .ref get_teams_pop,copy_rom_string + .ref sorted_teams,teams_pop + .ref concat_rom_string,dec_to_pct + .ref print_string_R,print_string_R2 + .ref HALT + .ref check_world_records + .ref get_plr_rank + .ref force_selection + .ref find_record + .ref BGND_UD1,BAKMODS + .ref plaque_fall1,plaque_fall2 + .ref plaque_fall3,plaque_fall4 + .ref plaque_land1,plaque_land2 + .ref plaque_land3,plaque_land4 + .ref opt_scr_cur,opt_scr_sel + .ref get_all_sticks_down + .ref reset_yes_no_butn_pals + .ref combo_but1,combo_but2,combo_but3,combo_but4 + .ref yes_no_cur1,yes_no_sel1 + .ref qtr_purchased + .ref clear_buffers + .ref change_pal_on_text + .ref nickname_img_tbl + .ref compute_plyr_off_rank + .ref compute_plyr_def_rank + + .def TUBE_O_P,TUBE_R_P,TUBE_Y_P,TUBE_G_P + .def PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P + .def plaque_xs,plaque_flsh_pals + .def plaque_snds,plaque_lnds_snds + + +SPOTLITE_PARTS equ 5 +BBALL_PARTS equ 1 ;big bball parts +PBALL_PARTS equ 1 ;pressed bball parts +PBALL_SHDW_PARTS equ 2 +BBALL_SHDW_PARTS equ 2 + + +TURBO_NEEDED equ 0 +SHOOT_NEEDED equ 16 +PASS_NEEDED equ 32 +AWARD_ROUTINE equ 48 + + + .bss bball_1_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_2_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss bball_3_obj_ptrs,BBALL_PARTS*32 ;4 pieces for non hi-lited bball + .bss pball_obj_ptrs,PBALL_PARTS*32 ;4 pieces for pressd bball + .bss bball_1_text_obj_ptr,32 + .bss bball_2_text_obj_ptr,32 + .bss bball_3_text_obj_ptr,32 + + .bss p1_butn_cnts,16 + .bss p2_butn_cnts,16 + .bss p3_butn_cnts,16 + .bss p4_butn_cnts,16 + + BSSX rodman_colors,32 + + .text + + +;----------------------------------------------------------------------------- +; This process handles the dropping of best-player plaques on the team +; select page +; +;----------------------------------------------------------------------------- + SUBR best_player_plaques + + clr a0 + move a0,*a13(PDATA) ;counter of plaques (delay) + +; clr a0 ;count + move @player1_data+PR_NAME1,a14 + jrle #np1 ;br=plr - no inits + move @player1_data+PR_COUNT,a14 + jrle #np1 + inc a0 +#np1 move @player2_data+PR_NAME1,a14 + jrle #np2 ;br=plr - no inits + move @player2_data+PR_COUNT,a14 + jrle #np2 + inc a0 +#np2 move @player3_data+PR_NAME1,a14 + jrle #np3 ;br=plr - no inits + move @player3_data+PR_COUNT,a14 + jrle #np3 + inc a0 +#np3 move @player4_data+PR_NAME1,a14 + jrle #np4 ;br=plr - no inits + move @player4_data+PR_COUNT,a14 + jrle #np4 + inc a0 +#np4 subk 1,a0 ;br=more than 1 plyr ? + jrle #die ;br=no + +;drop rank plaque + clr a0 ;player nbr. + move @player1_data+PR_RANK,a14 + move @player2_data+PR_RANK,a8 + move @player3_data+PR_RANK,a9 + move @player4_data+PR_RANK,a10 + cmp a8,a14 + jrlo #rnk1 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk1 cmp a9,a14 + jrlo #rnk2 + move a9,a14 + movk 2,a0 +#rnk2 cmp a10,a14 + jrlo #rnk3 + movk 3,a0 +#rnk3 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_RNKred,a9,L + JSRP anim_plyr_plaque + +;drop win streak plaque + + clr a0 ;player nbr. + move @player1_data+PR_WINSTREAK,a14 + inc a14 ;in case negative + move @player2_data+PR_WINSTREAK,a8 + inc a8 + move @player3_data+PR_WINSTREAK,a9 + inc a9 + move @player4_data+PR_WINSTREAK,a10 + inc a10 + cmp a8,a14 + jrhi #rnk4 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk4 cmp a9,a14 + jrhi #rnk5 + move a9,a14 + movk 2,a0 +#rnk5 cmp a10,a14 + jrhi #rnk6 + movk 3,a0 +#rnk6 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_STKred,a9,L + JSRP anim_plyr_plaque + +;drop best offense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_SCORED,a14 + inc a14 ;in case negative + move @player2_data+PR_PTS_SCORED,a8 + inc a8 + move @player3_data+PR_PTS_SCORED,a9 + inc a9 + move @player4_data+PR_PTS_SCORED,a10 + inc a10 + cmp a8,a14 + jrhi #rnk7 ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnk7 cmp a9,a14 + jrhi #rnk8 + move a9,a14 + movk 2,a0 +#rnk8 cmp a10,a14 + jrhi #rnk9 + movk 3,a0 +#rnk9 + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_OFFred,a9,L + JSRP anim_plyr_plaque + +;drop best defense plaque + + clr a0 ;player nbr. + move @player1_data+PR_PTS_ALLOWED,a14 + move @player2_data+PR_PTS_ALLOWED,a8 + move @player3_data+PR_PTS_ALLOWED,a9 + move @player4_data+PR_PTS_ALLOWED,a10 + cmp a8,a14 + jrlo #rnka ;br=plr 1 is better + move a8,a14 + movk 1,a0 +#rnka cmp a9,a14 + jrlo #rnkb + move a9,a14 + movk 2,a0 +#rnkb cmp a10,a14 + jrlo #rnkc + movk 3,a0 +#rnkc + move a0,*a13(PDATA+16) ;flag for plyr nbr + movi BST_DEFred,a9,L + JSRP anim_plyr_plaque +#die + DIE + + +best_plq_pals + .long PLAT_B_P + .long PLAT_G_P + .long PLAT_Y_P + .long PLAT_R_P + .long PLAT_G_P ;kit + .long PLAT_B_P + .long PLAT_R_P + .long PLAT_Y_P + + +;----------------------------------------------------------------------------- +; This PROCESS handles the showing of the players status thru plaques +; +; INPUT: reg a11 - ptr to plyr process +;----------------------------------------------------------------------------- + SUBR plyr_plaques + + move *a11(PC_DATADDR),a0,L ;start of player data + + clr a14 + move a14,*a13(PDATA) ;counter of plaques + not a14 + move a14,*a13(PDATA+16) ;flag for plyr nbr + +;---------------------- +;check 'created player' + + move *a0(PR_CREATED_PLYR),a14 + jrle #ccp2 + + movi custm_plr_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #ccp1 + addi 4*32,a14 ;get KIT image ptr. +#ccp1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + + PUSH A0 + movi AUD_CREATED_PLR_STARTS,a0 + .ref AUD1 + calla AUD1 + PULL A0 + +;----------------- +;check player rank + +#ccp2 + move *a0(PR_COUNT),a1 + jrz #nornk + + movi top1_imgs,a14 + move *a0(PR_RANK),a1 + jrz #nornk + cmpi 1,a1 + jreq #cpr0 + movi top5_imgs,a14 + cmpi 5,a1 + jrls #cpr0 + movi top10_imgs,a14 + cmpi 10,a1 + jrgt #nornk +#cpr0 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpr1 + addi 4*32,a14 ;get KIT image ptr. +#cpr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;----------------------- +;check player winstreaks + +#nornk + move *a11(PC_DATADDR),a0,L + move *a0(PR_WINSTREAK),a1 + subk 5,a1 + jrlt #nowin + movi grt_win_strk_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cpw1 + addi 4*32,a14 ;get KIT image ptr. +#cpw1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nowin + +;--------------------------- +;check player teams defeated + + move *a11(PC_DATADDR),a0,L + move *a0(PR_NUMDEF),a1 + cmpi NUM_TEAMS,a1 + jrlo #nochmp + movi nba_champ_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cptd1 + addi 4*32,a14 ;get KIT image ptr. +#cptd1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque +#nochmp + +;--------------------- +;check defensive rank + + move *a11(PC_DATADDR),a6,L ;start of player data + move *a6(PR_COUNT),a14 + subk 5,a14 + jrlt #nodef +; jrz #nodef + PUSH a11 + calla find_record ;ret a11 - rec. number + move a11,a4 + PULL a11 + move a10,a10 + jrz #ccp2 ;br=rec not found...not DEFENSE or OFFENSE check + calla get_plr_rank + move *a9,a8,L + move *a8(RS_DEF_RANK),a0 + jrz #nodef + calla compute_plyr_def_rank + + movi bst_def_imgs,a14 + cmpi 1,a0 + jrls #cdr0 + movi top5_def_imgs,a14 + cmpi 5,a0 + jrls #cdr0 + movi top10_def_imgs,a14 + cmpi 10,a0 + jrgt #nodef + +#cdr0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cdr1 + addi 4*32,a14 ;get KIT image ptr. +#cdr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;--------------------- +;check offensive rank + +#nodef + move *a11(PC_DATADDR),a0,L + move *a0(PR_COUNT),a1 + subk 5,a1 + jrle #nooff +; jrz #nooff + move *a8(RS_OFF_RANK),a0 + jrz #nooff + calla compute_plyr_off_rank + + movi bst_off_imgs,a14 + cmpi 1,a0 + jrls #cor0 + movi top5_off_imgs,a14 + cmpi 5,a0 + jrls #cor0 + movi top10_off_imgs,a14 + cmpi 10,a0 + jrgt #nooff + +#cor0 move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cor1 + addi 4*32,a14 ;get KIT image ptr. +#cor1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +;------------------- +;check world records + +#nooff + move *a11(PC_DATADDR),a2,L ;start of player data + calla check_world_records ;ret. 14 + move a14,a14 + jrz #nowrld + + movi wrldrec_imgs,a14 + move *a11(PC_PLAYNUM),a10 + sll 5,a10 + add a10,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #cwr1 + addi 4*32,a14 ;get KIT image ptr. +#cwr1 + move *a14,a9,L ;get img. from table + JSRP anim_plyr_plaque + +#nowrld + DIE + + + + .asg 183,PLAQUE_Y + +#***************************************************************************** +;a9 = ptr to image + + + SUBRP anim_plyr_plaque + + PUSHP a8 +#app0 + SLEEPK 1 + move @HALT,a0 + jrnz #app0 + + move *a13(PDATA),a14 + jrz #app00 + + SLEEPK 10 +#app00 + move *a13(PDATA),a14 + inc a14 + move a14,*a13(PDATA) ;counter of plaques + + move *a13(PDATA+16),a0 + jrge #app1 ;br=player nbr passed in + + move *a11(PC_PLAYNUM),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app1 + addk 4,a0 ;add in offset for 2 PLYR KIT +#app1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + + move *a13(PDATA),a3 + addi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + + move *a13(PDATA+16),a14 + jrlt #nrm ;br=player nbr passed in + move a14,b0 + sll 5,b0 + addi best_plq_pals,b0,L + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz #n2p + addi 4*32,b0 ;get KIT image ptr. +#n2p move *b0,b0,L + calla BEGINOBJP2 + jruc #nrm2 +#nrm + calla BEGINOBJ2 + +#nrm2 + move *a13(PDATA+16),a0 + jrge #plx ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +#waitf + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + clr a0 + move a0,*a8(OYVEL),L + + move *a13(PDATA+16),a0 + jrge #plx2 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a0 +#plx2 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + movk 22,a10 + calla SHAKER2 + + move *a13(PDATA+16),a9 + jrge #plx3 ;br=player nbr passed in + move *a11(PC_PLAYNUM),a9 +#plx3 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #app2 + addk 4,a9 ;add in offset for 2 PLYR KIT +#app2 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +#flsh + move *a9+,a0,L ;at end of table ? + jrnn #flsh1 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #flsh +#flsh1 + CREATE0 show_n_del_plate + + PULLP a8 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR show_n_del_plate + + SLEEP 32 + calla DELOBJA8 + + DIE + + + +;tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0] + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR nosecrets_drw + + move a8,a0 + sll 5,a0 + addi nosecret_imgs,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrz nsec_0 + addi 4*32,a0 ;get KIT image ptr. +nsec_0 move *a0,a2,L + + move a8,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz nsec_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +nsec_1 sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;18 + movi 20450,a3 + movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 + movi CLSDEAD,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + +; .ref blink_plyr2 +; +; CREATE0 blink_plyr2 +; move a0,a9 + SLEEP 90 +; move a9,a0 +; calla KILL +; move a8,a0 + calla DELOBJA8 + DIE + + +nosecret_imgs + .long TurnNSblu + .long TurnNSgrn + .long TurnNSyel + .long TurnNSred + .long TurnNSgrn ;For kit + .long TurnNSblu + .long TurnNSred + .long TurnNSyel + + +#***************************************************************************** +; +; INPUT: reg a10 - X pos +; reg a11 - player number +****************************************************************************** + SUBR fullgame_purchased + + SLEEPK 1 + move @HALT,a1 + jrnz fullgame_purchased + + move a10,a0 ;x val + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 ;* image + movi 20500,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 + + move a11,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_fall1 +#waitf + SLEEP 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt #waitf + movi PLAQUE_Y,a0 + move a0,*a8(OYPOS) + clr a0 + move a0,*a8(OYVEL),L + + move a11,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 +;; SOUND1 plaque_land1 + + movk 22,a10 + calla SHAKER2 + + movk 3,a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #fgp1 + addk 4,a11 ;add in offset for 2 PLYR KIT +#fgp1 sll 5,a11 + addi plaque_flsh_pals,a11 + move *a11,a11,L ;get pal flash tbl ptr. +#fgp2 + move *a11+,a0,L ;at end of table ? + jrnn #fgp3 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 3 + jruc #fgp2 +#fgp3 + SLEEP 20 + calla DELOBJA8 + DIE + + +plaque_snds + .long plaque_fall1,plaque_fall2,plaque_fall3,plaque_fall4 + +plaque_lnds_snds + .long plaque_land1,plaque_land2,plaque_land3,plaque_land4 + +plaque_xs + .word 13,105,207,299 ;4 plr + .word 0,59,254,0 ;2 plr kit + +plaque_flsh_pals + .long p1_flsh_pals + .long p2_flsh_pals + .long p3_flsh_pals + .long p4_flsh_pals + .long p2_flsh_pals ;2 plyr kit + .long p1_flsh_pals + .long p4_flsh_pals + .long p3_flsh_pals + + +p1_flsh_pals + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF5_B_P + .long PLAT_B_P + .long PLTF4_B_P + .long PLTF3_B_P + .long PLTF2_B_P + .long PLTF1_B_P + .long PLAT_B_P + .long 1 + +p2_flsh_pals + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF5_G_P + .long PLAT_G_P + .long PLTF4_G_P + .long PLTF3_G_P + .long PLTF2_G_P + .long PLTF1_G_P + .long PLAT_G_P + .long 1 + +p3_flsh_pals + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF5_Y_P + .long PLAT_Y_P + .long PLTF4_Y_P + .long PLTF3_Y_P + .long PLTF2_Y_P + .long PLTF1_Y_P + .long PLAT_Y_P + .long 1 + + +p4_flsh_pals + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF5_R_P + .long PLAT_R_P + .long PLTF4_R_P + .long PLTF3_R_P + .long PLTF2_R_P + .long PLTF1_R_P + .long PLAT_R_P + .long 1 + + +custm_plr_imgs + .long Customblu + .long Customgrn + .long Customyel + .long Customred + .long Customgrn ;For kit + .long Customblu + .long Customred + .long Customyel + +wrldrec_imgs + .long WorldRblu + .long WorldRgrn + .long WorldRyel + .long WorldRred + .long WorldRgrn ;For kit + .long WorldRblu + .long WorldRred + .long WorldRyel + +top10_imgs + .long TopTenblu + .long TopTengrn + .long TopTenyel + .long TopTenred + .long TopTengrn ;For kit + .long TopTenblu + .long TopTenred + .long TopTenyel + + +top5_imgs + .long TopFivblu + .long TopFivgrn + .long TopFivyel + .long TopFivred + .long TopFivgrn ;For kit + .long TopFivblu + .long TopFivred + .long TopFivyel + + +top1_imgs + .long onePlblu + .long onePlgrn + .long onePlyel + .long onePlred + .long onePlgrn ;For kit + .long onePlblu + .long onePlred + .long onePlyel + + +bst_def_imgs + .long BstDfPlblu + .long BstDfPlgrn + .long BstDfPlyel + .long BstDfPlred + .long BstDfPlgrn ;For kit + .long BstDfPlblu + .long BstDfPlred + .long BstDfPlyel + +top5_def_imgs + .long Top5DPblu + .long Top5DPgrn + .long Top5DPyel + .long Top5DPred + .long Top5DPgrn ;For kit + .long Top5DPblu + .long Top5DPred + .long Top5DPyel + +top10_def_imgs + .long Top10Dblu + .long Top10Dgrn + .long Top10Dyel + .long Top10Dred + .long Top10Dgrn ;For kit + .long Top10Dblu + .long Top10Dred + .long Top10Dyel + +bst_off_imgs + .long BstOfPlblu + .long BstOfPlgrn + .long BstOfPlyel + .long BstOfPlred + .long BstOfPlgrn ;For kit + .long BstOfPlblu + .long BstOfPlred + .long BstOfPlyel + +top5_off_imgs + .long Top5OPblu + .long Top5OPgrn + .long Top5OPyel + .long Top5OPred + .long Top5OPgrn ;For kit + .long Top5OPblu + .long Top5OPred + .long Top5OPyel + +top10_off_imgs + .long Top10Oblu + .long Top10Ogrn + .long Top10Oyel + .long Top10Ored + .long Top10Ogrn ;For kit + .long Top10Oblu + .long Top10Ored + .long Top10Oyel + +grt_win_strk_imgs + .long GrtWnSblu + .long GrtWnSgrn + .long GrtWnSyel + .long GrtWnSred + .long GrtWnSgrn ;For kit + .long GrtWnSblu + .long GrtWnSred + .long GrtWnSyel + +nba_champ_imgs + .long NbaChpblu + .long NbaChpgrn + .long NbaChpyel + .long NbaChpred + .long NbaChpgrn ;For kit + .long NbaChpblu + .long NbaChpred + .long NbaChpyel + + + +;DJT Start + .asg 153,VS_X + .asg 104,VS_Y +;DJT End + + + .asg 224,COMBIN_Y ;vs. screen head Y position + .asg 10,COMBIN_X1 ;vs. screen head X position 1 + .asg 105,COMBIN_X2 ;vs. screen head X position 2 + .asg 203,COMBIN_X3 ;vs. screen head X position 3 + .asg 298,COMBIN_X4 ;vs. screen head X position 4 + .asg 17,COMBIN_W ;vs. screen head width + + +;----------------------------------------------------------------------------- +; This routine prints the headers for the team stat. info +; +; INPUT: reg. a1 - team number (0-1) +; reg. a5 - obj. id +;----------------------------------------------------------------------------- + SUBR create_team_stat_title + + move a0,a11 + move a1,a10 + sll 5,a1 + addi stat_xys,a1 + move *a1,a9,L ;get coor. tbl addr. + + movi 1400,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9+,a0,L ;get img + movi BAST_Y_P,b0 + calla BEGINOBJP2 + move *a9+,a2,L ;get img + move *a9+,a1,L ;get img + move *a9,a0,L ;get img + movi BAST_C_P,b0 + calla BEGINOBJP2 + move a11,a0 + move a10,a1 + rets + +stat_xys + .long tm1_stxy + .long tm2_stxy + +tm1_stxy + .long TEAMST,[31,0],[112,0] ;team 1 + .long TEAMST4,[31,0],[104,0] ;team 1 +tm2_stxy + .long TEAMST,[31,0],[216,0] ;team 2 + .long TEAMST4,[31,0],[208,0] ;team 2 + + + .asg 193,TM1_STAT_X + .asg 296,TM2_STAT_X + .asg 44,WINS_Y + .asg 56,OFF_RANK_Y + .asg 68,DEF_RANK_Y + .asg 80,POPULAR_Y + + +;----------------------------------------------------------------------------- +; This routine just deletes all the objects that show team stats +; +; +; INPUT: reg a5 - obj id to delete +;----------------------------------------------------------------------------- + SUBR del_team_stats + + PUSH a0,a1 + move a5,a0 + calla obj_del1c + PULL a0,a1 + rets + +;----------------------------------------------------------------------------- +; This routine prints the NBA teams stats during TEAM SELECT +; +; INPUT: a0 - NBA team number (0-NUM_TEAMS) +; a1 - team number (0-1) +;----------------------------------------------------------------------------- + SUBR print_team_stats + + move a0,a0 + jrn pts_1 ;br=invalid team number + cmpi NUM_TEAMS,a0 + jrhi pts_1 ;br=invalid team number + + PUSH a0,a1 ;save NBA team number + + movi TM1_STAT_OBJS,a5 ;object ID + move a1,a1 ;team 1 ? + jreq pts_00 ;br=yep + movi TM2_STAT_OBJS,a5 ;object ID +pts_00 + move a5,@mess_objid + callr del_team_stats + callr create_team_stat_title + + calla compute_team_def_off_rank ;ret. a6 - ptr. to TEAM STATS + + movi TM1_STAT_X,a0 + move a1,a1 + jreq pts_0 + movi TM2_STAT_X,a0 +pts_0 move a0,@mess_cursx ;message cursor pos X + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movi WINS_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + move a6,a11 ;save TEAM stat ram ptr + + calla get_teams_pop + +;print wins + calla clear_buffers + +; movi message_buffer,a3 ;* string dest +; clr a0 +; move a0,*a3,L +; move a0,*a3(16),L + + PULL a0 + move a0,a14 ;get NBA team nbr (0-NUM_TEAMS) + PUSH a0 + + sll 5,a14 + addi teams_pop,a14,L + move *a14,a0,L ;get team 'picked count' audit + move a0,a2 + move *a11(TR_WINS),a1 + sub a1,a0 ;a0=games lost + jrle pts_0a + + movi 100,a14 ;2 digits of signifigence + mpys a14,a1 ;games won * 100 + divs a2,a1 ;/ total games + move a1,a0 +; calla dec_to_pct + calla dec_to_asc + calla concat_string +; calla print_string_C + movi str_prcnt,a4 + calla concat_rom_string + calla print_string_R + jruc pts_0b + +pts_0a movi str_100,a4 +; calla print_string_C2 ;centered + calla print_string_R2 + +;print offensive rank +pts_0b movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi OFF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_OFF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string +; calla print_string_C + calla print_string_R + +;print defensive rank + movi message_buffer,a3 ;* string dest + clr a0 + move a0,*a3,L + movi DEF_RANK_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + move *a11(TR_DEF_RANK),a0 + movi NUM_TEAMS+1,a1 ;max value + calla dec_to_asc + calla concat_string + calla print_string_R +; calla print_string_C + +;print teams popularity + + PULL a0,a1 + PUSH a1 + move a0,a2 + callr print_ranking + PULL a1 + +;a1=0 or 1 for team +;If Rodman is on this team, change his hair color... + + move a1,a1 + jrnz #tm2 + + movi rodman_colors,a1 + + move @head1_obj,a14,L + move *a14(OIMG),a0,L + .ref ROD_CHI + cmpi ROD_CHI,a0 + jrz #yes + + move @head2_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + jruc pts_1 + +#tm2 + + movi rodman_colors+16,a1 + + move @head3_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrz #yes + + .ref head1_obj + .ref head2_obj + .ref head3_obj + .ref head4_obj + + move @head4_obj,a14,L + move *a14(OIMG),a0,L + cmpi ROD_CHI,a0 + jrnz pts_1 + +#yes + move *a1,a0 + inc a0 + move a0,*a1 + cmpi 8,a0 + jrnz #restuff + clr a0 + move a0,*a1 +#restuff + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + move a14,a2 + calla pal_getf + move a0,*a2(OPAL) + +pts_1 rets + + + SUBR check_rodman +;Mugshot + + cmpi ROD_CHI,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODKP + .ref CHI_RODGP + + .long CHI_RODGP + .long CHI_RODBP + .long CHI_RODOP + .long CHI_RODPP + .long CHI_RODRP + .long CHI_RODWP + .long CHI_RODYP + .long CHI_RODKP + +#* + SUBR check_rodman2 +;Small head + + .ref RODMAN1 + cmpi RODMAN1+240h,a2 + jrnz #ex + + movi rodman_colors,a1 + + move a14,a14 + jrz #tm1 + + movi rodman_colors+16,a1 +#tm1 + move *a1,a0 + sll 5,a0 + addi #rod_tbl,a0 + move *a0,a0,L + +#ex rets + +#rod_tbl + .ref RODMANBP + .ref RODMANKP + .ref RODMANOP + .ref RODMANPP + .ref RODMANRP + .ref RODMANWP + .ref RODMANYP + .ref RODMANGP + + .long RODMANGP + .long RODMANBP + .long RODMANOP + .long RODMANPP + .long RODMANRP + .long RODMANWP + .long RODMANYP + .long RODMANKP + +str_prcnt .string "%",0 + .even + +str_100 .string "100%",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the NBA TEAMS popularity +; +;INPUT: reg a2 - NBA team number +;----------------------------------------------------------------------------- + SUBR print_ranking + + clr a10 ;current rank + clr a8 ;count + movi sorted_teams,a4 + movi teams_pop,a5 + move *a5,a9,L ;current count +#keep_looking + move *a5+,a0,L + cmp a0,a9 + jreq #no_change + move a0,a9 ;new count + move a8,a10 ;new rank +#no_change + inc a8 + cmpi NUM_TEAMS,a8 ;safety + jrhs #last + move *a4+,a3 + cmp a3,a2 + jrne #keep_looking +#last + movi POPULAR_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + + sll 5,a10 ;x 32 bits + addi #txt_table,a10 + move *a10,a4,L + calla copy_rom_string ;"2nd, 3rd etc" +; calla print_string_C + calla print_string_R + rets + + + .even +#txt_table + .long #S1,#S2,#S3,#S4 + .long #S5,#S6,#S7,#S8 + .long #S9,#S10,#S11,#S12 + .long #S13,#S14,#S15,#S16 + .long #S17,#S18,#S19,#S20 + .long #S21,#S22,#S23,#S24 + .long #S25,#S26,#S27,#S28,#S29 + + .even +#S1 .string "1",0 +#S2 .string "2",0 +#S3 .string "3",0 +#S4 .string "4",0 +#S5 .string "5",0 +#S6 .string "6",0 +#S7 .string "7",0 +#S8 .string "8",0 +#S9 .string "9",0 +#S10 .string "10",0 +#S11 .string "11",0 +#S12 .string "12",0 +#S13 .string "13",0 +#S14 .string "14",0 +#S15 .string "15",0 +#S16 .string "16",0 +#S17 .string "17",0 +#S18 .string "18",0 +#S19 .string "19",0 +#S20 .string "20",0 +#S21 .string "21",0 +#S22 .string "22",0 +#S23 .string "23",0 +#S24 .string "24",0 +#S25 .string "25",0 +#S26 .string "26",0 +#S27 .string "27",0 +#S28 .string "28",0 +#S29 .string "29",0 + .even + + + + + + + + + +;----------------------------------------------------------------------------- +; This routine creates the objects underneath the scores +; on the stats page +; +; INPUT: reg a0 - xy table offset +;----------------------------------------------------------------------------- + SUBR create_score_backdrop + + sll 5,a0 + addi scr_bkdrp_ptrs,a0,L + move *a0,a0,L + + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a0+,a14,W ;flip image ? + jrz csb_1 ;br=nope + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags +csb_1 + move *a0+,a1,L ;Y pos + move *a0,a0,L ;X pos + movi SCORE,a2,L + movi 1400,a3 ;z pos (sorting) + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + rets + + +scr_bkdrp_ptrs + .long bkdrp1_xys + .long bkdrp2_xys + +bkdrp1_xys + .word 0 ;flip img flag + .long [9,0],[12,0] ;stats screen left + +bkdrp2_xys + .word 1 + .long [9,0],[388,0] ;stats screen right + + +;----------------------------------------------------------------------------- +; This PROCESS creates the BACKDROP for the squad number +; during team select and animates the backdrop +; +; INPUT: a10 = table offset to use for coordinates +;----------------------------------------------------------------------------- + SUBR anim_squad_bball + + sll 5,a10 + addi squad_ball_xys,a10 + move *a10+,a1 ;Y coor. + sll 16,a1 + move *a10,a0 ;X coor. + sll 16,a0 + movi 16000,a3 ;z pos + movi SQDBAL01,a2,L + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + +;now animate bball +asb_0 + movi ball_anim_tbl,a10,L +asb_1 + move *a10+,a0,L ;new image + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + SLEEPK 4 + cmpi ball_anim_tbl_end,a10 + jrlo asb_1 + jruc asb_0 + DIE + + +squad_ball_xys + .word TM1_Y+4,TM1_X-88 + .word TM2_Y+4,TM2_X-95 + + +ball_anim_tbl + .long SQDBAL01 + .long SQDBAL02 + .long SQDBAL03 + .long SQDBAL04 + .long SQDBAL05 + .long SQDBAL06 + .long SQDBAL07 + .long SQDBAL08 + .long SQDBAL09 + .long SQDBAL10 + .long SQDBAL11 + .long SQDBAL12 + .long SQDBAL13 + .long SQDBAL14 + .long SQDBAL15 + .long SQDBAL16 + .long SQDBAL17 + .long SQDBAL18 + .long SQDBAL19 + .long SQDBAL20 + .long SQDBAL21 + .long SQDBAL22 + .long SQDBAL23 + .long SQDBAL24 + .long SQDBAL25 + .long SQDBAL26 + .long SQDBAL27 + .long SQDBAL28 + .long SQDBAL29 + .long SQDBAL30 +ball_anim_tbl_end + +;----------------------------------------------------------------------------- +; This routine creates the NUMBERS representing the squad +; number during team select +; +; INPUT: a0 = team number (table offset for coordinates) +;RETURN: a8 = ptr. to squad nbr. obj. ram +;----------------------------------------------------------------------------- + SUBR create_team_squad_nbr + + PUSH a10,a11 + move a0,a10 + CREATE0 anim_squad_bball + move a10,a0 + sll 5,a0 ;x 32 bits + addi squad_xys,a0 + move *a0+,a1 + sll 16,a1 ;y pos + move *a0,a0 ;x val + sll 16,a0 + + move a10,a10 + jrnz crsn_1a ;br=team 1 + move @team1,a2 + jrnn crsn_1 + clr a2 +crsn_1 sll 4,a2 ;offset into TEAM LINEUP array + addi tm1set,a2 ;point to team + move *a2,a2 ;get current squad nbr + jruc crsn_2a +crsn_1a + move @team2,a2 + jrnn crsn_2 + clr a2 +crsn_2 sll 4,a2 ;offset into TEAM LINEUP array + addi tm2set,a2 ;point to team + move *a2,a2 ;get current squad nbr +crsn_2a +; movi SQUD_01,a2 ;* image + sll 5,a2 + addi squd_nbr_imgs,a2 + move *a2,a2,L + + + movi 19000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a10,a11 + rets + +squad_xys + .word TM1_Y+44,TM1_X+3 + .word TM2_Y+44,TM2_X-4 + + +;----------------------------------------------------------------------------- +; This routine updates the teams squad number to reflect the current +; squad being shown +; +; INPUT: reg a8 - ptr. to teams squad nbr. obj +; reg a14 - squad number +;----------------------------------------------------------------------------- + SUBR update_team_squad_nbr + + sll 5,a14 + addi squd_nbr_imgs,a14 + move *a14,a0,L ;NEW image addr + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq ;change object image + rets + + +squd_nbr_imgs + .long SQUD_01,SQUD_02,SQUD_03,SQUD_04,SQUD_05 + .long SQUD_06,SQUD_07,SQUD_08,SQUD_09,SQUD_10 + .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15 + .long SQUD_16,SQUD_17,SQUD_18,SQUD_19,SQUD_20,SQUD_20 + + +;----------------------------------------------------------------------------- +; This PROCESS flashes the plate behind the players heads +; on the team select screen +; +; INPUT: a10 - team number (0-1) +; a11 - ptr. to plyr. head backdrop obj +;----------------------------------------------------------------------------- + SUBR flash_backdrop + + sll 6,a10 + addi flsh_bkdrop_tbl,a10,L + move *a10+,a9,L ;get start tbl addr. + move *a10,a10,L ;get end tbl addr. + move a11,a8 + +fbk_1 move *a9+,a0,L + calla pal_getf + move a0,*a8(OPAL),L ;Set palette & constant + SLEEPK 3 + cmp a10,a9 + jrlo fbk_1 + DIE + + +flsh_bkdrop_tbl + .long bflsh_bkdrop_tbl,bflsh_bkdrop_tbl_end + .long rflsh_bkdrop_tbl,rflsh_bkdrop_tbl_end + +bflsh_bkdrop_tbl + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQAD_VB_P + .long SQDFB7_P + .long SQDFB6_P + .long SQDFB5_P + .long SQDFB4_P + .long SQDFB3_P + .long SQDFB2_P + .long SQDFB1_P + .long SQAD_VB_P +bflsh_bkdrop_tbl_end + + +rflsh_bkdrop_tbl + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQAD_VR_P + .long SQDFR7_P + .long SQDFR6_P + .long SQDFR5_P + .long SQDFR4_P + .long SQDFR3_P + .long SQDFR2_P + .long SQDFR1_P + .long SQAD_VR_P +rflsh_bkdrop_tbl_end + +;POWER-UP logic +;----------------------------------------------------------------------------- +; This PROCESS (for each player in game) lets the players input +; a button combination for secrets +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR plyr_get_combination + +;wait for player to join-in +pgc_0 + SLEEPK 2 + move @inmatchup,a0 + jrz pgc_5 ;not in MATCH_UP screen, exit + move @PSTATUS,a0 + btst a10,a0 + jrz pgc_0 ;br=plyr hasn't joined in + +;clear ram + clr a14 + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move a14,*a0 ;clear plyr button cnt ram + + callr create_combo_symbol_backdrops ;Want to keep this A8! + move a10,a0 + sll 5,a0 + BSSX lock_ram,32*4 + addi lock_ram,a0 + move a8,*a0,L + callr create_combination_symbols + +pgc_1 + SLEEPK 1 + move @pup_lockcombo,a0 + btst a10,a0 + jrnz pgc_flash + + move a10,a0 + calla get_but_val_down + move a0,a3 + jrz pgc_1 + + move a10,a0 + sll 5,a0 + addi combo_sounds,a0 + move *a0,a0,L + calla snd_play1 + + clr a2 + move a10,a0 + calla get_stick_val_cur + btst 0,a0 ;is joystick UP ? + jrz pgc_1a ;br=no + movi -1,a2 ;flag - dec. not inc. value +pgc_1a + btst 0,a3 ;shoot button pressed ? + jrz pgc_2 ;br=nope + callr update_shoot_butn_cnt +pgc_2 + btst 1,a3 ;pass button pressed ? + jrz pgc_3 ;br=nope + callr update_pass_butn_cnt +pgc_3 + btst 2,a3 ;turbo button pressed ? + jrz pgc_4 ;br=nope + callr update_turbo_butn_cnt + +pgc_4 callr del_combination_symbols + callr create_combination_symbols + + move @inmatchup,a0 + jrnz pgc_1 +pgc_5 + DIE + +pgc_flash + movi 0101h,a2 + move a2,*a8(OCONST) + + movk 4,a11 +#again + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + movk 3,a9 +#tg0 + move @inmatchup,a0 + jrz #tg1 + SLEEPK 1 + dsj a9,#tg0 +#tg1 + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + movk 3,a9 +#tg2 + move @inmatchup,a0 + jrz pgc_5 + SLEEPK 1 + dsj a9,#tg2 + + dsj a11,#again + jruc pgc_5 + + +combo_sounds + .long combo_but1,combo_but2 + .long combo_but3,combo_but4 + + + .asg 0000000000001111b,PASS_CNT_MASK + .asg 0000000011110000b,SHOOT_CNT_MASK + .asg 0000111100000000b,TURBO_CNT_MASK + + +;----------------------------------------------------------------------------- +; This routine updates the players TURBO button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_turbo_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni TURBO_CNT_MASK,a14 ;clear turbo button count + andi TURBO_CNT_MASK,a1 + srl 8,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn utbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo utbc_2 ;br=haven't cycled all heads + clr a1 + jruc utbc_2 +utbc_1 + dec a1 + jrge utbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +utbc_2 + sll 8,a1 + or a14,a1 + move a1,*a0 ;save PASS button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players SHOOT button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_shoot_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni SHOOT_CNT_MASK,a14 ;clear turbo button count + andi SHOOT_CNT_MASK,a1 + srl 4,a1 ;put into 1st nibble + + move a2,a2 ;dec. value ? + jrn usbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo usbc_2 ;br=haven't cycled all heads + clr a1 + jruc usbc_2 +usbc_1 + dec a1 + jrge usbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +usbc_2 + sll 4,a1 + or a14,a1 + move a1,*a0 ;save SHOOT button count value + rets + +;----------------------------------------------------------------------------- +; This routine updates the players PASS button hit count +; +; INPUT: reg. a2 (if negative, decrement value) +;----------------------------------------------------------------------------- + SUBR update_pass_butn_cnt + + move a10,a0 + sll 5,a0 + addi butn_cnt_ram_ptr_tbl,a0,L + move *a0,a0,L ;get pointer to ram + move *a0,a1 ;get plyr button cnt ram value + move a1,a14 + andni PASS_CNT_MASK,a14 ;clear turbo button count + andi PASS_CNT_MASK,a1 + + move a2,a2 ;dec. value ? + jrn upbc_1 ;br=negative, YEP + inc a1 + cmpi NBR_SYMBOLS,a1 + jrlo upbc_2 ;br=haven't cycled all heads + clr a1 + jruc upbc_2 +upbc_1 + dec a1 + jrge upbc_2 ;br=value >= 0 + movi NBR_SYMBOLS-1,a1 ;set to bottom of table +upbc_2 + or a14,a1 + move a1,*a0 ;save TURBO button count value + rets + + +; +; Pointers to the players button count ram +; +butn_cnt_ram_ptr_tbl + .long p1_butn_cnts + .long p2_butn_cnts + .long p3_butn_cnts + .long p4_butn_cnts + + +combo_obj_id_tbl + .word COMBO_SYMBOLS_P1 + .word COMBO_SYMBOLS_P2 + .word COMBO_SYMBOLS_P3 + .word COMBO_SYMBOLS_P4 + +;----------------------------------------------------------------------------- +; INPUT: a10 = player number +;----------------------------------------------------------------------------- + SUBR del_combination_symbols + + move a10,a0 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a0 ;get obj class to delete + calla obj_del1c + rets + + +;----------------------------------------------------------------------------- +; This routine creates the backdrop behind the number SYMBOLS +; on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combo_symbol_backdrops + + PUSH a10 + move a10,a0 + sll 4,a0 + addi combo_plate_xs,a0,L + + movi 100,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + + movi CODE,a2,L + move *a0,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y,0],a1 ;get Y coor. + movi CODE_V_P,b0 + calla BEGINOBJP2 + PULL a10 + rets + + +combo_plate_xs + .word COMBIN_X1 + .word COMBIN_X2 + .word COMBIN_X3 + .word COMBIN_X4 +combo_plate_xs_end + + + +;----------------------------------------------------------------------------- +; This routine creates the number SYMBOLS on the verus screen +; +; INPUT: a10 - player number +;----------------------------------------------------------------------------- + SUBR create_combination_symbols + + PUSH a8,a10 + move a10,a0 + move a10,a9 + sll 4,a0 + addi combo_obj_id_tbl,a0 + move *a0,a5 ;get obj class to delete + + sll 6,a10 + addi combo_symbol_xys,a10 + + movi 1000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + + clr a6 + clr a7 + +;1st symbol (turbo button changes this symbol) + + sll 5,a9 ;*32 + addi butn_cnt_ram_ptr_tbl,a9,L + move *a9,a9,L ;get ptr to PLYR butn cnt ram + move *a9,a9,L ;get ram value + move a9,a0 + andi TURBO_CNT_MASK,a0 + srl 3,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L ;get img ptr. + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;2nd symbol (shoot button changed this symbol) + move a9,a0 + andi SHOOT_CNT_MASK,a0 + sll 1,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10+,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + +;3rd symbol (pass button changed this symbol) + move a9,a0 + andi PASS_CNT_MASK,a0 + sll 5,a0 + addi combo_symbols_tbl,a0,L + move *a0,a2,L + move *a10,a0 ;get X coor. + sll 16,a0 + movi [COMBIN_Y+3,0],a1 ;get Y coor. + calla BEGINOBJ2 + PULL a8,a10 + rets + + +combo_symbols_tbl + .long BRSH20_0 + .long BRSH20_1 + .long BRSH20_2 + .long BRSH20_3 + .long BRSH20_4 + .long BRSH20_5 + .long BRSH20_6 + .long BRSH20_7 + .long BRSH20_8 + .long BRSH20_9 +combo_symbols_tbl_end + + +NBR_SYMBOLS equ (combo_symbols_tbl_end-combo_symbols_tbl)/32 + + +combo_symbol_xys + .word COMBIN_X1+8,COMBIN_X1+37,COMBIN_X1+66,0 ;player 1 + .word COMBIN_X2+8,COMBIN_X2+37,COMBIN_X2+66,0 ;player 2 + .word COMBIN_X3+8,COMBIN_X3+37,COMBIN_X3+66,0 ;player 3 + .word COMBIN_X4+8,COMBIN_X4+37,COMBIN_X4+66,0 ;player 4 + + + + +;POWER-UP stuff + .asg >00000001,TOURN ;tournament mode + .asg >00000002,BABYS ;baby mode + .asg >00000004,NOMUS ;no music mode + .asg >00000008,GOALT ;goal tending + .asg >00000010,MXBLK ;block power + .asg >00000020,MXSTL ;steal power; quick hands + .asg >00000040,MXPWR ;max power + .asg >00000080,MXSPD ;max speed + .asg >00000100,HYPER ;hyper speed + .asg >00000200,TBSTL ;stealth turbo + .asg >00000400,TBINF ;unlimited turbo + .asg >00000800,NOPSH ;no pushing + .asg >00001000,FPASS ;fast passing + + +; .asg >00000000,BIGHD ;big heads +; .asg >00000000,HUGHD ;huge heads +; .asg >00000000,NOTAG ;no tag arrows +; .asg >00000000,SHTPR ;show shot percent +; .asg >00000000,ABALL ;ABA ball in use +; .asg >00000000,COURT ;outside court +; .asg >00000000,NOASS ;no cpu assistance +; .asg >00000000,HOTSP ;show hot spots +; +; .asg >00000000,STRNG ;strong men + + +combination_tbl + WL >111,TOURN + WL >025,BABYS + WL >048,NOMUS + WL >937,GOALT + WL >616,MXBLK + WL >709,MXSTL + WL >802,MXPWR + WL >284,MXSPD + WL >552,HYPER + WL >273,TBSTL + WL >461,TBINF + WL >390,NOPSH + WL >120,FPASS + +;Joystick/butn powerups: + +; WL >001,BIGHD +; WL >011,HUGHD +; WL >040,NOTAG +; WL >100,SHTPR +; WL >999,COURT +; WL >030,HOTSP +; WL >222,NOASS + +; WL >121,GOALT|STLPW +; WL >191,HUGHD|BABYS +; WL >666,NOTAG|GOALT|NOPSH + +combination_tbl_end + +NBR_CODE_COMBOS equ (combination_tbl_end-combination_tbl)/(16+32) + + +;----------------------------------------------------------------------------- +; This routine checks all the players buttons counts to see if +; a powerup exists for there count. +;----------------------------------------------------------------------------- + SUBR set_plyrs_powerup_ram + + movk 1,a0 ;player 1 (bit 0) + move @p1_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 2,a0 ;player 2 (bit 1) + move @p2_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 4,a0 ;player 3 (bit 2) + move @p3_butn_cnts,a1 + callr set_plyr_powerup_ram + movk 8,a0 ;player 4 (bit 3) + move @p4_butn_cnts,a1 + callr set_plyr_powerup_ram + + movi pup_baby,a0 ;!!! + + move @PSTATUS,a1 ;Is it a plyr-v-plyr game? + movi >eee0,a14 + btst a1,a14 ;Do team agreement test if so + jrnz sppr0 ; br=yes + movi >fffe,a14 ;Share any powerups that are set +sppr0 + move *a0,a1 + clr a2 + btst a1,a14 + jrz sppr1 + movk >f,a2 +sppr1 + move a2,*a0+ + cmpi pup_fastpass,a0 ;!!! + jrle sppr0 + + rets + + + .asg 0,TBL_COMBO + .asg 16,POWERUPS + +;----------------------------------------------------------------------------- +; This routine sets the BITS in all the powerup ram based +; on code entered and player number (if combination found in table!!!) +; +; INPUT: reg a0 - plyr bit number (mask) +; reg a1 - plyr butn press count +; +;RETURNS: carry set if didn't find combination in table +;----------------------------------------------------------------------------- + SUBR set_plyr_powerup_ram + + move @PSTATUS,a14 + and a0,a14 ;is this player in game ? + jrz cvc_x ;br=nope +; +;search table for a matching combination +; + movi combination_tbl,a2,L + movi NBR_CODE_COMBOS,a3 +#lp + move *a2(TBL_COMBO),a14 ;get count from table + cmp a14,a1 ;plyrs and tbl count the same? + jreq cvc_00 ;br=yes !!! + addi 16+32,a2 ;next line in combination table + dsj a3,#lp + jruc cvc_x ;br=no match found + +;found match +cvc_00 + move *a2(POWERUPS),a14,L + srl 1,a14 + jrnc cvc_01 ;br=not this power up + move @PSTATUS,a2 + movi >116,a3 + btst a2,a3 ;No tmode if only 1 plyr + jrz dotmd + PUSH a0,a14 + .ref no_sp + SOUND1 no_sp + PULL a0,a14 + jruc cvc_01 ;br=not this power up +dotmd + move @pup_tournament,a3 + or a0,a3 + move a3,@pup_tournament +cvc_01 + srl 1,a14 + jrnc cvc_02 + move @pup_baby,a3 + or a0,a3 + move a3,@pup_baby +cvc_02 + srl 1,a14 + jrnc cvc_03 + move @pup_nomusic,a3 + or a0,a3 + move a3,@pup_nomusic +cvc_03 + srl 1,a14 + jrnc cvc_04 + move @pup_goaltend,a3 + or a0,a3 + move a3,@pup_goaltend +cvc_04 + srl 1,a14 + jrnc cvc_05 + move @pup_maxblock,a3 + or a0,a3 + move a3,@pup_maxblock +cvc_05 + srl 1,a14 + jrnc cvc_06 + move @pup_maxsteal,a3 + or a0,a3 + move a3,@pup_maxsteal +cvc_06 + srl 1,a14 + jrnc cvc_07 + move @pup_maxpower,a3 + or a0,a3 + move a3,@pup_maxpower +cvc_07 + srl 1,a14 + jrnc cvc_08 + move @pup_maxspeed,a3 + or a0,a3 + move a3,@pup_maxspeed +cvc_08 + srl 1,a14 + jrnc cvc_09 + move @pup_hypspeed,a3 + or a0,a3 + move a3,@pup_hypspeed +cvc_09 + srl 1,a14 + jrnc cvc_10 + move @pup_trbstealth,a3 + or a0,a3 + move a3,@pup_trbstealth +cvc_10 + srl 1,a14 + jrnc cvc_11 + move @pup_trbinfinite,a3 + or a0,a3 + move a3,@pup_trbinfinite +cvc_11 + srl 1,a14 + jrnc cvc_12 + move @pup_nopush,a3 + or a0,a3 + move a3,@pup_nopush +cvc_12 + srl 1,a14 + jrnc cvc_13 + move @pup_fastpass,a3 + or a0,a3 + move a3,@pup_fastpass +cvc_13 +cvc_x + rets + + +;----------------------------------------------------------------------------- +; This routine deletes the CREATED players name +;----------------------------------------------------------------------------- + SUBR delete_name + + movi SM_PLYRS_NAME,a0 + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine prints the CREATED players name at the X,Y from table +; +; INPUT: reg. a0 - X coor (center) +; reg. a1 - Y coor +;----------------------------------------------------------------------------- + SUBR print_name + + move a0,@mess_cursx ;message cursor pos X + move a1,@mess_cursy ;message cursor pos Y + + addi PR_NAME1,a4 ;* src NAME + movi message_buffer,a3 ;* string dest + calla get_name_string + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + movk 9,a0 ;6,a0 + move a0,@mess_space_width ;space char width + movi SM_PLYRS_NAME,a0 + move a0,@mess_objid + calla print_string_C + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + + .asg 97,STBOX_W ;width of stat box + .asg 8,STBOX_X1 + .asg STBOX_X1+STBOX_W+1,STBOX_X2 + .asg STBOX_X2+STBOX_W+1,STBOX_X3 + .asg STBOX_X3+STBOX_W+1,STBOX_X4 + .asg 34,STBOX_Y + .asg 34,STBOX_Y1 + .asg 34,STBOX_Y2 + .asg 34,STBOX_Y3 + .asg 34,STBOX_Y4 + + +;----------------------------------------------------------------------------- +; This routine just kills the PROCESS which animates FIRE around the players +; stat box on the STAT pages +;----------------------------------------------------------------------------- + SUBR kill_fire_anim + + movi FIRE_ANIM_PID,a0 + calla KIL1C + rets + + .asg 0,FIRE_X ;table offsets + .asg 32,FIRE_X2 + .asg 64,FIRE_Y + +;----------------------------------------------------------------------------- +; This PROCESS animated FIRE for the best player at halftime and game +; over +; +; INPUT: a11 - player number +;----------------------------------------------------------------------------- + SUBR anim_fire_for_best_plyr + + sll 7,a11 + addi fire_anim_xys,a11,L + +afbp_1 movi fire_anim_tbl,a9,L + +;left side of fire +afbp_2 movi 2000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + move *a9+,a2,L + move *a11(FIRE_X),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + move a8,a10 + +;right side of fire + movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a9+,a2,L + move *a11(FIRE_X2),a0,L ;get X coor. + move *a11(FIRE_Y),a1,L ;get Y coor. + calla BEGINOBJ2 + SLEEPK 5 + +;delete fire frames + calla DELOBJA8 + move a10,a8 + calla DELOBJA8 + + cmpi fire_anim_tbl_end,a9,L + jrlo afbp_2 + jruc afbp_1 + DIE + + +fire_anim_xys + .long [STBOX_X1+6,0],[STBOX_X1+92,0],[STBOX_Y+206,0],0 ;plyr 1 + .long [STBOX_X2-1,0],[STBOX_X2+86,0],[STBOX_Y+206,0],0 ;plyr 2 + .long [STBOX_X3+4,0],[STBOX_X3+91,0],[STBOX_Y+206,0],0 ;plyr 3 + .long [STBOX_X4-2,0],[STBOX_X4+84,0],[STBOX_Y+206,0],0 ;plyr 4 + +fire_anim_tbl + .long HTFIRE01,HTFIRE04 + .long HTFIRE02,HTFIRE05 + .long HTFIRE03,HTFIRE06 + .long HTFIRE04,HTFIRE07 + .long HTFIRE05,HTFIRE08 + .long HTFIRE06,HTFIRE09 + .long HTFIRE07,HTFIRE10 + .long HTFIRE08,HTFIRE01 + .long HTFIRE09,HTFIRE02 + .long HTFIRE10,HTFIRE03 +fire_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_name_backplates + + movk 2,a9 + callr create_name_backplate + movk 3,a9 + callr create_name_backplate + movk 4,a9 + callr create_name_backplate + movk 5,a9 + callr create_name_backplate + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_name_backplates + + movi TEAM_SEL_OBJS,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; Create the Hi-Lighter bar +; +; INPUT: reg b0 - which bar to put up (table offset) +;----------------------------------------------------------------------------- + SUBR create_name_backplate + + sll 5,a9 + addi backplt_xys,a9 ;x val + move *a9,a9,L +cnb_0 + move *a9+,a2,L ;get image + move *a9+,a1,L ;palette + move a1,b0 + move *a9+,a1,L ;x val + move *a9+,a0,L ;x val +; movi TEAMBR,a2 + movi 50,a3 ;z pos (sorting) over city names + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags +; movi M_FLIPH|DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + + move *a9+,a0,L ;move to plot ? + jrnz cnb_0 ;yep + rets + + +backplt_xys + .long bar1table + .long bar2table + .long bar3table + .long bar4table + .long bar5table + .long bar6table + .long bar1kit + .long bar2kit + +bar1table + .long TEXTBAR,TUBE_LB_P,[TM1_Y-56,0],[TM1_X-87,0],0 ;team select, plyr 1 +bar2table + .long TEXTBAR,TUBE_LR_P,[TM2_Y-56,0],[TM2_X+5,0],0 ;team select, plyr 2 + +bar3table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+69,0],[STBOX_X1+11,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+5,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y1+195,0],[STBOX_X1+11,0],0 ;stat pg. plr 1 + +bar4table + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+69,0],[STBOX_X2+5,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2-1,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LB_P,[STBOX_Y2+195,0],[STBOX_X2+5,0],0 ;stat pg. plr 2 + +bar5table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+69,0],[STBOX_X3+9,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+4,0],1 ;stat pg. plr 3 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y3+195,0],[STBOX_X3+10,0],0 ;stat pg. plr 3 + +bar6table + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+3,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4-2,0],1 ;stat pg. plr 4 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+195,0],[STBOX_X4+3,0],0 ;stat pg. plr 4 + +bar1kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 1 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 1 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 1 + +bar2kit + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+69,0],[STBOX_X4+10,0],1 ;stat pg. plr 2 + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+5,0],1 ;stat pg. plr 2 (kit) + .long TEXTBAR,TUBE_LR_P,[STBOX_Y4+196,0],[STBOX_X4+10,0],0 ;stat pg. plr 2 + + + +TUBE_LR_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 05821h,05042h,05421h,05041h,04c42h,05021h,04c41h,04842h + .word 04c21h,04841h,04063h,04442h,04821h,04441h,04042h,04421h + .word 03863h,04021h,03c41h,03462h,03c21h,03841h,03822h,03423h + .word 03442h,03821h,03441h,03023h,03042h,03041h,03421h,02c42h + .word 02c41h,03021h,02823h,02842h,02c21h,02442h,02821h,02441h + .word 02422h,02042h,02421h,02021h,01c21h,01821h,01421h + + + +;#***************************************************************************** +;* Create player heads on the STATs PAGE +;****************************************************************************** +;;;;; .asg 65,HEAD_WIDTH +; .asg 95,HEAD_WIDTH +; +; SUBR create_heads +; +; movi player_heads,a10 +; move @team1,a2 +;#lp cmpi 0,a2 +; jrz #out +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +;;; 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 *a10,a2,L ;image addr +;; +;; Head 1 (team 1) +;; +; movi player1_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr1 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec1 +;#ncr1 +; move @special_heads,a0 +; jrn #no_spec1 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec1 +; movi [STBOX_X1+15,0],a0 ;x val +; movi [STBOX_Y1+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 1) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player2_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr2 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec2 +;#ncr2 +; move @special_heads+10h,a0 +; jrn #no_spec2 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec2 +; movi [STBOX_X2+15,0],a0 ;x val +; movi [STBOX_Y2+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +; +;;team 2 +; movi player_heads,a10 +; move @team2,a2 +;#lp1 cmpi 0,a2 +; jrz #out1 +; addi NEXT_TEAM,a10 ;compute offset into HEAD tbl +; dec a2 +; jruc #lp1 +;#out1 +; move @team2,a0 +; sll 4,a0 +; addi tm2set,a0 +; move *a0,a14 +; sll 6,a14 +; add a14,a10 +;; +;; Head 1 (team 2) +;; +; move *a10,a2,L ;image addr +; +; movi player3_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr3 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec3 +;#ncr3 +; move @special_heads+20h,a0 +; jrn #no_spec3 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec3 +; +; movi [STBOX_X3+15,0],a0 ;x val +; movi [STBOX_Y3+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;; +;; Head 2 (team 2) +;; +; move *a10(20h),a2,L ;image addr +; +; movi player4_data,a14 +; move *a14(PR_CREATED_PLYR),a0 ;is player created ? +; jrle #ncr4 ;br=nope +; move *a14(PR_HEAD_NBR),a2 ;get head number +; sll 5,a2 +; addi create_plr_mugshots_tbl,a2 +; move *a2,a2,L ;get mugshot img +; jruc #no_spec4 +;#ncr4 +; move @special_heads+30h,a0 +; jrn #no_spec4 +; sll 5,a0 ;x 32 bits +; addi our_heads,a0 +; move *a0,a2,L +;#no_spec4 +; +; movi [STBOX_X4+15,0],a0 ;x val +; movi [STBOX_Y4+69,0],a1 ;y val +; movi 120,a3 ;z pos +; movi DMAWNZ,a4 ;DMA flags +; clr a5 ;object ID +; clr a6 ;x vel +; clr a7 ;y vel +; calla BEGINOBJ2 +;#cnt4a +; rets + + +#***************************************************************************** +* Create stats title images (on the STAT page) +****************************************************************************** + SUBR create_stat_titles + + movi stat_title_tbl,a10,L + movi 16000,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cst_1 + move *a10+,a0,L ;X coor. + move *a10+,a1,L ;Y coor. + movi HLFSTATS,a2,L + calla BEGINOBJ2 + cmpi stat_title_tbl_end,a10 + jrlo cst_1 + rets + + +stat_title_tbl + .long [STBOX_X2-21,0],[STBOX_Y2+85,0] + .long [STBOX_X4-23,0],[STBOX_Y4+85,0] +stat_title_tbl_end + + +#***************************************************************************** +* Show players name (on the STAT page) +****************************************************************************** + SUBR create_plyrs_name + + movi #initials_setup,a2 + calla setup_message + + movi STBOX_Y1+196,a0 + move a0,@mess_cursy + movi STBOX_X1+48,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 0,a0 + jrnz #ok1 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip1 +#ok1 + movi message_buffer,a3 + movi player1_data+PR_NAME1,a4 + move @player1_data+PR_CREATED_PLYR,a14 + jrle #nm1 ;br=not created + movi STBOX_Y1+71,a0 + move a0,@mess_cursy + movi STBOX_Y1+196,a0 + move @player1_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm1 + calla get_name_string + calla print_string_C + +#skip1 + movi STBOX_Y2+196,a0 + move a0,@mess_cursy + movi STBOX_X2+41,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 1,a0 + jrnz #ok2 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip2 +#ok2 + movi message_buffer,a3 + movi player2_data+PR_NAME1,a4 + move @player2_data+PR_CREATED_PLYR,a14 + jrle #nm2 + movi STBOX_Y2+71,a0 + move a0,@mess_cursy + movi STBOX_Y2+196,a0 + move @player2_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm2 + calla get_name_string + calla print_string_C + +#skip2 + movi STBOX_Y3+196,a0 + move a0,@mess_cursy + movi STBOX_X3+47,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 2,a0 + jrnz #ok3 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip3 +#ok3 + movi message_buffer,a3 + movi player3_data+PR_NAME1,a4 + move @player3_data+PR_CREATED_PLYR,a14 + jrle #nm3 + movi STBOX_Y3+71,a0 + move a0,@mess_cursy + movi STBOX_Y3+196,a0 + move @player3_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm3 + calla get_name_string + calla print_string_C + +#skip3 + movi STBOX_Y4+196,a0 + move a0,@mess_cursy + movi STBOX_X4+40,a0 + move a0,@mess_cursx + move @PSTATUS,a0 + btst 3,a0 + jrnz #ok4 + movi #str_cpu,a4 + calla print_string_C2 + jruc #skip4 +#ok4 + movi message_buffer,a3 + movi player4_data+PR_NAME1,a4 + move @player4_data+PR_CREATED_PLYR,a14 + jrle #nm4 + movi STBOX_Y4+71,a0 + move a0,@mess_cursy + movi STBOX_Y4+196,a0 + move @player4_data+PR_NICKNAME_NBR,a2 + callr create_plr_nickname +#nm4 + calla get_name_string + calla print_string_C +#skip4 + rets + + +#initials_setup + PRINT_STR bast8t_ascii,8,1,200,4,BAST_W_P,0 +#str_cpu + .string "CPU",0 + .even + + .ref tm1set,tm2set + +#***************************************************************************** +* This routine prints the players' nickname under mugshot +* +* INPUT: reg a0 - Y pos +* reg a2 - nick name number +****************************************************************************** + SUBRP create_plr_nickname + + PUSH a3,a4 + move a0,a1 + sll 16,a1 + move @mess_cursx,a0 + + sll 6,a2 ;2*32 + addi nickname_img_tbl,a2,L + move *a2,a2,L + + move *a2(ISIZEX),a14 ;center obj. at X coor. + srl 1,a14 + sub a14,a0 + sll 16,a0 + + movi 6000,a3 ;z pos. + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object class + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJ2 + PULL a3,a4 + rets + +;DJT Start + + .ref col_name_ptrs +;DJT End + +#***************************************************************************** +* Show name of HEAD (basketball players name) +* +* INPUT: reg a1 - Y position +************************************************** + SUBR create_names + + PUSH a9 + sll 16,a1 + move a1,a9 + + movi player_names,a10 + move @team1,a2 +#lp cmpi 0,a2 + jrz #out + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp +#out + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +;DJT Start +; +;name 1 (team 1) +; + move *a10,a2,L ;image addr + +;DJT End + movi player1_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd2 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X1+48,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads,a4 ;Special head? + jrnn #spec1 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec1 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd2 ;BEGINOBJ2 clears OMISC! +#spec1 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec1 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +;name 2 (team 1) +; +;DJT Start +#hd2 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player2_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd3 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X2+42,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+16,a4 ;Special head? + jrnn #spec2 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec2 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd3 ;BEGINOBJ2 clears OMISC! +#spec2 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec2 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +#hd3 + movi player_names,a10 + move @team2,a2 +#lp1 cmpi 0,a2 + jrz #out1 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jruc #lp1 +#out1 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 +; +; name 1 (team 2) +; + move *a10,a2,L ;image addr + + movi player3_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd4 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X3+47,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+32,a4 ;Special head? + jrnn #spec3 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec3 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd4 ;BEGINOBJ2 clears OMISC! +#spec3 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec3 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +;DJT End +; +; name 2 (team 2) +; +;DJT Start +#hd4 + addk 32,a10 + move *a10,a2,L ;image addr +;DJT End + + movi player4_data,a14 + move *a14(PR_CREATED_PLYR),a0 ;is player created ? + jrgt #hd5 ;br=yep..dont show a name + +;DJT Start + movi [STBOX_X4+41,0],a0 ;x val + move a9,a1 ;y val + movi 120,a3 ;z pos + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + + move @special_heads+48,a4 ;Special head? + jrnn #spec4 ; br=yes + + move a2,a2 ;College player? + jrn #not_spec4 ; br=no + + movi AUGMON,a2 ;Default *img + movi DMAWNZ+M_CHARGEN+M_PIXSCAN,a4 ;DMA flags + calla BEGINOBJ2 + move *a10,a2,L ;image addr + sll 5,a2 + addi col_name_ptrs,a2,L + move *a2,a2,L + move a2,*a8(ODATA_p),L + jruc #hd5 ;BEGINOBJ2 clears OMISC! +#spec4 + sll 5,a4 ;x 32 bits + addi our_names,a4 + move *a4,a2,L +#not_spec4 + movi DMAWNZ,a4 ;DMA flags + calla BEGINOBJ2 +#hd5 + PULL a9 +;DJT End + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_hi_score_page_objs + +;create vertical bar + movi 10,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + movi [7,0],a0 + movi [0,0],a1 + movi NBABAR,a2,L + calla BEGINOBJ2 + + +;create nba logo + movi 12,a3 + movi [7,0],a0 + movi [181,0],a1 + movi NBALOGO,a2,L + calla BEGINOBJ2 + rets + +;DJT Start + .if ANIM_VS +;DJT End +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR animate_vs_logo + + movi 2000,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + +;create V and S letters +;DJT Start + +; .ref VS_R_P,VS_G_P,VS_B_P,VS_Y_P,VS_W_P,VS_V_P + .ref VS_G_P + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSB01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a10 + + movi [VS_X,0],a0 + movi [VS_Y,0],a1 + movi VSS01,a2 + movi VS_G_P,b0 + calla BEGINOBJP2 + move a8,a9 +;DJT End + +;animate VS logo + movi vs_logo_anim_tbl,a11 +avsl_1 +;V + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a9,a8 ;get V obj. ptr + calla obj_aniq +;S + move *a11+,a0,L ;new V img. + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + move a10,a8 ;get V obj. ptr + calla obj_aniq + + move *a11+,a0 ;get sleep time + calla PRCSLP + + cmpi vs_logo_anim_tbl_end,a11,L + jrlo avsl_1 + DIE + +; +; This table contains information pertaining to the VS logo animating +; +; 1) img frame of V +; 3) Y pos of V +; 2) img frame of S +; 4) Y pos of S +; 5) sleep time +; +vs_logo_anim_tbl + .long VSB01,VSS01 + .word 2 + .long VSB02,VSS02 + .word 2 + .long VSB03,VSS03 + .word 2 + .long VSB04,VSS04 + .word 2 + .long VSB05,VSS05 + .word 2 + .long VSB06,VSS06 + .word 3 + .long VSB07,VSS07 + .word 3 + .long VSB08,VSS08 + .word 3 + .long VSB09,VSS09 + .word 3 +vs_logo_anim_tbl_end + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_vs_logo + + movi VS_LOGO_PID,a0 + calla KIL1C + rets +;DJT Start + .endif ;ANIM_VS +;DJT End + +;----------------------------------------------------------------------------- +; This routine deletes the current PRESSED in BUTTON +;----------------------------------------------------------------------------- + SUBR del_pressed_bball + + movi pball_obj_ptrs,a2,L ;ram to save obj ptrs + move *a2+,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine deletes the current normal BBALL +;----------------------------------------------------------------------------- + SUBR del_normal_hilited_bball + + move @cur_pos,a0 + sll 5,a0 + addi bball_obj_ram_ptrs,a0,L + move *a0,a2,L ;get ptr. to ram ptrs. +dnb_1 + move *a2,a8,L + calla DELOBJA8 + +;delete its shadow + movi BBALL_SHADOW,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_not_allowed_symbol + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO1,a2,L + movi 500,a3 + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 + clr a7 + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi F_NO2,a2,L + calla BEGINOBJ2 + + movi [BALL1X-3,0],a0 ;x val + movi [BALL1Y+1,0],a1 ;y val + movi 600,a3 + movi ONE,a2,La + calla BEGINOBJ2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_team_sel_header + + movi [99,0],a0 ;x val + movi [9,0],a1 ;y val + movi HEADER,a2,L + movi 50,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi TUBE_V_P,b0,L + calla BEGINOBJP2 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_option_screen_stuff + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + movi OPTION_STUFF,a0 + calla obj_del1c + movi TITLE_BAR,a0 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR kill_countdown_timer + + movi CNTDWN_PID,a0 + calla KIL1C + calla delete_text + rets + + +;----------------------------------------------------------------------------- +; This routine handles the logic for the player chosing an option at +; begining of game +; +; RETURNS: a0 = 0:player design, 1:enter initials, 2:select teams +;----------------------------------------------------------------------------- + SUBR options_screen + + movk 1,a0 ;start on 'enter initials' + move a0,@cur_pos + + clr a0 + move a0,@create_plyr + move a0,@IRQSKYE ;BLACK background color + + calla del_create_spotlight + clr a0 + calla create_title_bar + +;create text for screen + movi opt_str_setup,a2 + calla setup_message + movi OPTION_STUFF,a0 + move a0,@mess_objid + movk 22,a0 + move a0,@mess_line_spacing + movi option_strings,a4 + calla print_string_C2 + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_2_obj_ptrs,a9,L + movi [BALL2X-2,0],a0,L ;X coor. + movi [BALL2Y,0],a1,L ;Y coor. + calla create_normal_bball + + movi bball_3_obj_ptrs,a9,L + movi [BALL3X-1,0],a0,L ;X coor. + movi [BALL3Y,0],a1,L ;Y coor. + calla create_normal_bball + + calla create_bball_text + + calla update_bball_text_pals + calla update_bball_palettes + + .ref pregame_tune + SOUND1 pregame_tune + + CREATE WIN_STAY_PID,winner_stays_msg + + SLEEPK 6 + + movi 5*TSEC,a10 + CREATE CNTDWN_PID,timeout + + movi 20*TSEC,a7 ;timeout time + clr a10 ;used to mark last joystick pos. +#input_loop +; +; Here I check to see if the 'CREATE PLAYER' should still be allowed ... +; If more than 1 player is in game, move it to 'ENTER INITIALS' and dont allow +; CREATE PLAYER option. +; +#nxtchk + move @create_plyr,a0 + jrn #curok ;did DISALLOWING create plyr logic + callr check_for_buyins + move a0,a0 + jrnn #curok ;br=only 1 player in game + move a0,@create_plyr + callr create_not_allowed_symbol + move @cur_pos,a0 + jrnz #curok ;br= cursor isn't on 'create player' + jruc #j_right +#curok + calla get_all_sticks_cur + cmp a10,a0 ;same as last joystick pos. ? + jreq #no_change ;yep...ignore + move a0,a10 ;save NEW joystick position + cmpi JOY_RIGHT,a0 + jreq #j_right + cmpi JOY_LEFT,a0 + jrne #no_change +; +; Move cursor left (maybe) +; + move @cur_pos,a0 ;get current option (0,1 or 2) + jrle #updateX ;br=cant move left + cmpi 1,a0 ;on 'Enter Name" ? + jrne #jlft1 + move @create_plyr,a14 + jrn #no_change ;br='create player' isn't allowed +#jlft1 + dec a0 ;move cursor 1 left + move a0,@cur_pos + SOUND1 opt_scr_cur + jruc #updateX +; +; Move cursor right (maybe) +; +#j_right + move @cur_pos,a0 ;get current option (0,1 or 2) + cmpi 2,a0 + jrge #updateX ;br=cant move right +; move @create_plyr,a1 +; jrn #no_change ;br='create player' isn't allowed + inc a0 ;move cursor 1 right + move a0,@cur_pos + SOUND1 opt_scr_cur + +#updateX + calla del_create_spotlight + calla update_bball_palettes + calla update_bball_text_pals +#no_change + SLEEPK 1 + + move @force_selection,a0 + jrz #no_timeout ;timeout yet ? + + movk 2,a0 ;default to 'team select' + move a0,@cur_pos + + calla del_create_spotlight + calla update_bball_palettes + jruc #timeout + +#no_timeout + calla get_all_buttons_down + jrz #input_loop +; +; Player hit a button...or timer expired +; +#timeout + SOUND1 opt_scr_sel + + move @cur_pos,a0 + jrnz #tmeout2 ;br=cursor NOT on CREATE PLYR + +;plyr selected CREATE PLAYER, make sure its what player wants + + move @bball_1_text_obj_ptr,a8,L + calla obj_off ;hide ball 1 text + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + + callr print_create_plr_info + JSRP ask_create_plyr_yes_no + movk 4,a10 + calla del_yes_no_buttons + callr del_pressed_bball + + movi bball_1_obj_ptrs,a9,L + movi [BALL1X,0],a0,L ;X coor. + movi [BALL1Y,0],a1,L ;Y coor. + callr create_normal_bball + callr create_normal_bball_shadow + + move @bball_1_text_obj_ptr,a8,L + calla obj_on ;un-hide ball 1 text + + move a11,a11 ;did player select 'YES' ? + jrnz #input_loop ;br=no + +#tmeout2 +; SOUND1 opt_scr_sel + + calla kill_countdown_timer + + calla del_create_spotlight + calla update_bball_palettes + + callr del_normal_hilited_bball + calla create_pressed_bball_and_shadow + JSRP flash_pressed_bball + + movi WATCH_FOR_PLAYERS_PID,a0,L + calla KIL1C + + move @cur_pos,a0 ;a0=0,1 or 2 (return value) + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR del_winner_stay_free_msg + + movi WIN_STAY_PID,a0 + movi -1,a1 + calla EXISTP + move a0,a0 ;find process ? + jrz dwsf_1 ;br=nope + + movi WIN_STAY_PID,a0 + calla KIL1C + movi WIN_STAY_MSG,a0 ;object ID + calla obj_del1c ;delete text +dwsf_1 rets + + +;----------------------------------------------------------------------------- +; This routine creates the images that makeup the spotlights on the +; options screen +;----------------------------------------------------------------------------- + SUBR del_create_spotlight + + PUSH a7,a10 +;delete all spotlights (and shadows) + + movi SPOTLIGHT,a0 ;object ID + calla obj_del1c + movi BBALL_SHADOW,a0 + calla obj_del1c + +;create new spotlight + movi 10,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi SPOTLITE_PARTS,a11 ;count + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_img_tbl_ptr_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cfsl_1 + move *a9+,a2,L + PUSH a0,a1 + movi SPOTLIGHT,a5 ;object ID + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cfsl_1 + PULL a7,a10 + callr create_normal_bball_shadow + rets + +;----------------------------------------------------------------------------- +;create ball shadow +;----------------------------------------------------------------------------- + SUBR create_normal_bball_shadow + + PUSH a7,a10,a11 + movi 15,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi BBALL_SHADOW,a5 + clr a6 ;x vel + clr a7 ;y vel + movi BBALL_SHDW_PARTS,a11 ;2 pieces for shadow + + move @cur_pos,a10 + move a10,a14 + sll 6,a10 ;*64 + sll 5,a14 ;*32 + add a14,a10 ;+96 + addi sptlght_bball_shadw_img_tbl,a10 + move *a10+,a0,L + move *a10+,a1,L + move *a10,a9,L ;get table ptr. +cnbs_1 + move *a9+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 + PULL a0,a1 + dsj a11,cnbs_1 + PULL a7,a10,a11 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_normal_bball + + movi 20,a3 ;z pos (sorting) +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi DMAWNZ,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cfbb_1 + movi BIGBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_text_pals + + movi bball_text_obj_ptrs,a7,L + clr a2 +ubtp_0 + move @cur_pos,a14,L + move *a7+,a8,L ;get ptr to obj. ptr + move *a8,a8,L ;get obj. ptr + movi FNT_W_P,a0,L + cmp a14,a2 + jrne ubtp_1 + movi FNT_G_P,a0,L +ubtp_1 calla pal_getf + move a0,*a8(OPAL) ;change text palette + + inc a2 + cmpi bball_text_obj_ptrs_end,a7 + jrlo ubtp_0 + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_bball_text + + movi bball_text_img_setup,a10,L + movi 80,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel +cbt_1 + move *a10+,a9,L ;get ptr. to ram location + move *a10+,a2,L ;get img ptr. + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. + + calla BEGINOBJ2 + move a8,*a9,L + + cmpi bball_text_img_setup_end,a10,L + jrlo cbt_1 + +;; CREATE PAL_CYCLE_PID,cycle_bball_text_pal + + rets + +;----------------------------------------------------------------------------- +; This process blinks the color of the TEXT on the ball +;----------------------------------------------------------------------------- +; SUBRP cycle_bball_text_pal +; +; move @cur_pos,a0,L +; sll 5,a0 +; addi bball_text_obj_ptrs,a0 +; move *a0,a0,L +; move *a0,a8,L +;cbtp_1 movi bball_text_cycle_tbl,a10,L +;cbtp_2 +;; move *a2+,a8,L ;get bball img. obj. ptr +; move *a10+,a0,L +; calla pal_getf +; move a0,*a8(OPAL) ;change button palette +;; SLEEPK 20 +; +; move *a10+,a0 +; calla PRCSLP +; +; cmpi bball_text_cycle_tbl_end,a10,L +; jrlo cbtp_2 +; jruc cbtp_1 +; DIE + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR update_bball_palettes + +;first ball + + movi bball_1_obj_ptrs,a2,L + clr a1 + calla change_bball_pal + +;second ball + + movi bball_2_obj_ptrs,a2,L + movk 1,a1 + calla change_bball_pal + +;third ball + + movi bball_3_obj_ptrs,a2,L + movk 2,a1 + calla change_bball_pal + rets + +;----------------------------------------------------------------------------- +; This routine changes the palettes on all the BASKETBALL images during +; the OPTION screen (not cursor = dim, else bright pal) +; +; INPUT: a1: bball nbr. updating (0-2) +; a2: ptr to ram pointer of obj. +;----------------------------------------------------------------------------- + SUBR change_bball_pal + + movi BIGBLD_P,a0,L ;dim bball pal + move @cur_pos,a3 ;get current hi-lited option + cmp a3,a1 ;this one hi-lited ? + jrne cbpp_1 ;br=nope + movi BIGBAL_P,a0,L ;bright bball pal +cbpp_1 + +cbpp_2 move *a2+,a8,L ;get bball img. obj. ptr + calla pal_getf + move a0,*a8(OPAL) ;change button palette + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR create_pressed_bball_and_shadow + + movi pball_obj_ptrs,a9,L ;ram to save obj ptrs + movi 21,a3 ;z pos (sorting) + movi DMAWNZ,a4 ;DMA flags +;; movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi OPTION_STUFF,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + +;create pressed bball (get X,Y coords. from table) + move @cur_pos,a2,L + sll 6,a2 + addi pressed_bball_xys,a2,L + move *a2+,a0,L ;get X coor. + move *a2+,a1,L ;get Y coor. +cpbas_1 + movi SMBAL1,a2,L + calla BEGINOBJ2 + move a8,*a9+,L + +;create pressed bball shadow (get X,Y coords. from table) + + movi BBALL_SHADOW,a5 ;object ID + movi PBALL_SHDW_PARTS,a11 ;2 pieces for shadow + move @cur_pos,a10,L + sll 7,a10 + addi pressed_bball_shadw_tbl,a10,L + move *a10+,a0,L ;get X coor. + move *a10+,a1,L ;get Y coor. +cpbas_2 + move *a10+,a2,L + PUSH a0,a1 + calla BEGINOBJ2 +; move a8,*a9+,L + PULL a0,a1 + dsj a11,cpbas_2 + rets + + +bball_obj_ram_ptrs + .long bball_1_obj_ptrs + .long bball_2_obj_ptrs + .long bball_3_obj_ptrs + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP flash_pressed_bball + + movk 5,a9 + move @pball_obj_ptrs,a8,L ;ram to save obj ptrs +fpb_1 +;pure white + movi 0101h,a2 + move a2,*a8(OCONST) + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_CONNON,a0 ;Replace all with constant + move a0,*a8(OCTRL) + SLEEPK 1 + +;show normal image + move *a8(OCTRL),a0 + andni 01111b,a0 + ori M_WRNONZ,a0 + move a0,*a8(OCTRL) + SLEEPK 1 + dsj a9,fpb_1 + RETP + + +;----------------------------------------------------------------------------- +; This routine checks to see if more than 1 player has bought or a player +; has bought more than 1 quater of game play. +; If so, then CREATE PLAYER, is not allowed +; +; OUTPUT: reg a0 (if negative, disallow 'create-a-player') +;----------------------------------------------------------------------------- + SUBR check_for_buyins + + movk ADJFREPL,a0 + calla GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!) + jrnz frep1 +; calla CRED_P +; move a0,a0 +; jrnz w3p_0 + +frep1 move @qtr_purchased,a0 + move @qtr_purchased+16,a14 + add a14,a0 + move @qtr_purchased+32,a14 + add a14,a0 + move @qtr_purchased+48,a14 + add a14,a0 + cmpi 1,a0 + jrls w3p_1 + +; move @PSTATUS,a0 ;a0=players in game (rep. by bits) +; cmpi 8,a0 ;check for player 4 only +; jreq w3p_1 ;br=yep +; cmpi 4,a0 ;check for player 3 only +; jreq w3p_1 ;br=yep +; cmpi 2,a0 ;check for player 2 only +; jreq w3p_1 ;br=yep +; cmpi 1,a0 ;check for player 1 only +; jreq w3p_1 ;br=yep + +w3p_0 + movi -1,a0 +w3p_1 rets + + + .asg 0,TM_NAME_Y + .asg 12,TM_NAME_SPC + +;----------------------------------------------------------------------------- +; This routine deletes a set of team city names +; +; INPUT: a0 - obj. id to delete +;----------------------------------------------------------------------------- + SUBR delete_team_city_names + + clr a1 + calla obj_del1c + rets + +;----------------------------------------------------------------------------- +; This routine creates TM_NAMES_ON_SCRN city name objects +; +; INPUT: a0 = X coor +; a5 = obj id +; a14 = table index +;----------------------------------------------------------------------------- + SUBR create_team_city_names + + move a14,a11 + sll 5,a11 ;long + sll 4,a14 ;word + add a14,a11 + addi city_table_start,a11 + + movi 1800,a3 ;z pos (sorting) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a6 ;x vel + clr a7 ;y vel + movi TM_NAMES_ON_SCRN,a10 ;nbr. team names to plot + movi [TM_NAME_Y,0],a1 ;starting Y val +#ccn_1 + movi BAST_D_P,b0 ;default pal. for city imgs. + addi [TM_NAME_SPC,0],a1 ;add spacing + cmpi MIDDLE_TEAM_NAME,a10 ;plotting hi-lighted city ? + jrne #nhlit2 ;br=nope +; movi BAST_W_P,b0 ;HILITED middle city name + movi BAST_Y_P,b0 ;HILITED middle city name + addi [1,0],a1 ;space around the backplate +#nhlit2 + cmpi MIDDLE_TEAM_NAME-1,a10 ;1 after hilited city ? + jrne #nhlit2a ;br=nope + addi [1,0],a1 ;space around the backplate +#nhlit2a + move *a11,a2,L ;get TEAM NAME image ptr + PUSH a0,a1 + calla BEGINOBJP2 + PULL a0,a1 + + addi OFFSET_NXT_CITY_NAME,a11 ;ptr. next city img. (skip city nbr.) + dsj a10,#ccn_1 + rets + + +;----------------------------------------------------------------------------- +; Create both backdrops for TEAM PLAYERS HEADS +; +; +; INPUT: reg a0 - table offset for coor. +;----------------------------------------------------------------------------- + SUBR create_player_head_backdrops + + movi hd_bkdrp_tbl,a9,L + sll 7,a0 + add a0,a9 + +;left backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi RHEAD,a2,L + movi 6,a3 + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + movi TEAM_SEL_OBJS,a5 ;object ID + clr a6 + clr a7 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate1_objs,L + +;right backdrop + move *a9+,a0,L ;get X coor + move *a9+,a1,L ;get Y coor + movi LHEAD,a2,L + movi 6,a3 + movi HEADW_P,b0,L + calla BEGINOBJP2 + move a8,@plate2_objs,L + rets + + +hd_bkdrp_tbl + .long [TM1_X-86,0],[TM1_Y+6,0] + .long [TM2_X-93,0],[TM2_Y+6,0] ;teamsel page + + .long [TM1_X-86,0],[TM1_Y-65,0] ;stat page + .long [TM2_X-93,0],[TM2_Y-65,0] + + +;----------------------------------------------------------------------------- +; This routine changed the image behind the player heads +; during team select. +; +; INPUT: reg. a0 - team nbr (0-1) +;----------------------------------------------------------------------------- + SUBR update_player_head_backdrop + + sll 7,a0 + addi plate_obj_tbl,a0 + move *a0+,a8,L ;get pointer + move *a8,a8,L ;get OLD img (ptr addr) + move *a0+,a9,L ;get NEW img. ptr + +;update palette and bits per pixel + move *a0,a0,L + calla pal_getf + move a0,*a8(OPAL) + + move *a8(OCTRL),a1 + andi >80ff,a1 ;DMA flags + move *a9(ICTRL),a14 + andni >80ff,a14 ;DMA flags + or a14,a1 + move a1,*a8(OCTRL) + + move a9,a0 + + movi DMAWNZ|M_SCRNREL,a1 ;DMA flags + calla obj_aniq + rets + + +plate_obj_tbl +; .long plate1_objs,SQUAD1,SQUAD_P,0 + .long plate1_objs,SQUAD1,SQAD_VB_P,0 + .long plate2_objs,SQUAD2,SQAD_VR_P,0 + + +SQUAD_P: + .word 63 + .word 039ach,05294h,04e73h,04a52h,04631h,04210h,03defh,039ceh + .word 035adh,0318ch,0316ch,0294ah,02529h,02509h,02108h,020e8h + .word 01ce7h,01cc7h,018c6h,018a6h,014a5h,01485h,01084h,00c63h + .word 00842h,00421h,00401h,06a9fh,05e1dh,0559bh,04d3ah,044d8h + .word 040d7h,03c96h,03876h,03455h,03014h,02c13h,02410h,0200dh + .word 01c0ch,0180bh,0180ah,01409h,01408h,01006h,00c05h,07fe0h + .word 07bc0h,077a0h,07380h,06f60h,06b40h,06720h,05ee0h,05ac0h + .word 056a0h,05280h,04e60h,04620h,03de0h,035a0h,02100h + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP ask_create_plyr_yes_no + + movk 4,a10 ;a table offset + calla create_small_yes_no_butns + + movk 1,a11 ;DEFAULT to 'NO' + + movi 6*TSEC,a10 ;timeout counter (6 seconds) +ayn_0 + SLEEPK 1 + +; +; during option screen, if >1 player buys in while the other player was +; answering the yes/no question...stop all yes/no processing and return +; + calla check_for_buyins + move a0,a0 + jrnn ayn_1 ;br=only 1 plr. in game... + +;'CREATE PLAYER' NOT allowed, stop asking yes/no + movk 1,a11 ;set to 'NO' + jruc ayn_6 + +;check for timeout +ayn_1 + dsj a10,ayn_2 ;br=dont time out...yet + movk 1,a11 ;DEFAULT to 'NO' + calla reset_yes_no_butn_pals + jruc ayn_3 + +ayn_2 + calla get_all_sticks_down + + cmpi JOY_UP,a0 ;joystick up ? + jrne ayn_1b ;br=nope + move a11,a11 + jrz ayn_2a ;br=cursor already on 'YES' + clr a11 ;set to 'YES' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 + jruc ayn_2a + +ayn_1b cmpi JOY_DOWN,a0 ;joystick down ? + jrne ayn_2a ;br=nope + move a11,a11 + jrnz ayn_2a ;br=cursor already on 'NO' + movk 1,a11 ;set to 'NO' + calla reset_yes_no_butn_pals + SOUND1 yes_no_cur1 +; +; Now, read buttons +; +ayn_2a + calla update_yes_no_button_pals + + calla get_all_buttons_down + + cmpi TURBO_BUTTON,a0 + jreq ayn_3 + cmpi PASS_BUTTON,a0 + jreq ayn_3 + cmpi SHOOT_BUTTON,a0 + jrne ayn_0 +ayn_3 + SOUND1 yes_no_sel1 + + move a11,a11 ;did player choose 'YES' + jrnz ayn_3a ;br=no + +;this is set, so that the START BUTTON can be ignored prior to entering +; create player mode (so don't eat credits) + + movi IN_PRE_PLYR_DESIGN,a0 + move a0,@GAMSTATE + +ayn_3a JSRP flash_pressed_yes_no_button +ayn_6 + RETP + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_directions + + movi substutn_dirs_str_setup,a2 + calla setup_message + movi HIT_PTS_FRACTION,a0 + move a0,@mess_objid + movk 12,a0 + move a0,@mess_line_spacing + movi substutn_dirs_strs,a4,L + calla print_string_C2 + + movi HIT_PTS_FRACTION,a10,L + CREATE FLSH_TXT_PID,change_pal_on_text + rets + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_subsitution_title + + movi subsitution_str_setup,a2 + calla setup_message + clr a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi subsitution_str,a4,L + calla print_string_C2 + rets + +;----------------------------------------------------------------------------- +; This message is displayed when player selects CREATE PLAYER option +;----------------------------------------------------------------------------- + SUBR print_create_plr_info + + movi create_plr_info_setup,a2 + calla setup_message + movi YES_NO_BUTNS,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + movi create_plr_info,a4,L + calla print_string_C2 + rets + + +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ +;----------- TABLES ------------ + +PLTF1_B_P: + .word 58 + .word 04210h,0297fh,0257fh,0255fh,0215fh,0213fh,01d3fh,01d1fh + .word 0191fh,018ffh,014ffh,010dfh,014dfh,010bfh,010dfh,010bfh + .word 010dfh,010dfh,010bfh,010bfh,010beh,010bdh,010bch,010bbh + .word 010bah,010b9h,010b8h,010b7h,010b6h,010b5h,01095h,010b4h + .word 01094h,010b3h,01093h,010b2h,01092h,01091h,01090h,0108fh + .word 0108eh,0108dh,0108ch,0108bh,0108ah,01089h,01088h,01087h + .word 01086h,01085h,01084h,04631h,04e73h,056b5h,06318h,06b5ah + .word 07fffh,07fffh + +PLTF2_B_P: + .word 58 + .word 04210h,039ffh,035ffh,035dfh,031dfh,031bfh,02dbfh,02d9fh + .word 0299fh,0297fh,0257fh,0215fh,0255fh,0213fh,0215fh,0213fh + .word 0215fh,0215fh,0213fh,0213fh,0213fh,0213fh,0213fh,0213fh + .word 0213eh,0213dh,0213ch,0213bh,0213ah,02139h,02119h,02138h + .word 02118h,02137h,02117h,02136h,02116h,02115h,02114h,02113h + .word 02112h,02111h,02110h,0210fh,0210eh,0210dh,0210ch,0210bh + .word 0210ah,02109h,02108h,056b5h,05ef7h,06739h,0739ch,07bdeh + .word 07fffh,07fffh + +PLTF3_B_P: + .word 58 + .word 04210h,056dfh,052dfh,052bfh,04ebfh,04e9fh,04a9fh,04a7fh + .word 0467fh,0465fh,0425fh,03e3fh,0423fh,03e1fh,03e3fh,03e1fh + .word 03e3fh,03e3fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh + .word 03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03e1fh,03dffh,03e1fh + .word 03dffh,03e1eh,03dfeh,03e1dh,03dfdh,03dfch,03dfbh,03dfah + .word 03df9h,03df8h,03df7h,03df6h,03df5h,03df4h,03df3h,03df2h + .word 03df1h,03df0h,03defh,0739ch,07bdeh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_B_P: + .word 58 + .word 04210h,06f9fh,06b9fh,06b7fh,0677fh,0675fh,0635fh,0633fh + .word 05f3fh,05f1fh,05b1fh,056ffh,05affh,056dfh,056ffh,056dfh + .word 056ffh,056ffh,056dfh,056dfh,056dfh,056dfh,056dfh,056dfh + .word 056dfh,056dfh,056dfh,056dfh,056dfh,056dfh,056bfh,056dfh + .word 056bfh,056dfh,056bfh,056dfh,056bfh,056bfh,056bfh,056bfh + .word 056bfh,056beh,056bdh,056bch,056bbh,056bah,056b9h,056b8h + .word 056b7h,056b6h,056b5h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_B_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_Y_P: + .word 58 + .word 04210h,07fe9h,07fe8h,07fe8h,07fe7h,07fe7h,07fe6h,07fe6h + .word 07fe5h,07fe5h,07fe4h,07fe3h,07fe4h,07fe3h,07fe3h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06f63h,06b43h + .word 06723h,06303h,05ee3h,05ac3h,056a3h,05283h,05283h,04e63h + .word 04e63h,04a43h,04a43h,04623h,04623h,04203h,03de3h,039c3h + .word 035a3h,03183h,02d63h,02943h,02523h,02103h,01ce3h,018c3h + .word 014a3h,01083h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_Y_P: + .word 58 + .word 04210h,07fech,07febh,07febh,07feah,07feah,07fe9h,07fe9h + .word 07fe8h,07fe8h,07fe7h,07fe6h,07fe7h,07fe6h,07fe6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07bc6h,077a6h + .word 07386h,06f66h,06b46h,06726h,06306h,05ee6h,05ee6h,05ac6h + .word 05ac6h,056a6h,056a6h,05286h,05286h,04e66h,04a46h,04626h + .word 04206h,03de6h,039c6h,035a6h,03186h,02d66h,02946h,02526h + .word 02106h,01ce6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_Y_P: + .word 58 + .word 04210h,07ff2h,07ff1h,07ff1h,07ff0h,07ff0h,07fefh,07fefh + .word 07feeh,07feeh,07fedh,07fech,07fedh,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07fech,07fech,07fech,07fech + .word 07fech,07fech,07fech,07fech,07bcch,077ach,077ach,0738ch + .word 0738ch,06f6ch,06f6ch,06b4ch,06b4ch,0672ch,0630ch,05eech + .word 05acch,056ach,0528ch,04e6ch,04a4ch,0462ch,0420ch,03dech + .word 039cch,035ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_Y_P: + .word 58 + .word 04210h,07ff6h,07ff5h,07ff5h,07ff4h,07ff4h,07ff3h,07ff3h + .word 07ff2h,07ff2h,07ff1h,07ff0h,07ff1h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07bf0h,07bf0h,077d0h,073b0h,06f90h + .word 06b70h,06750h,06330h,05f10h,05af0h,056d0h,052b0h,04e90h + .word 04a70h,04650h,04230h,077ddh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_Y_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07bffh,077ffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_G_P: + .word 58 + .word 04210h,027e9h,023e8h,023e8h,01fe7h,01fe7h,01be6h,01be6h + .word 017e5h,017e5h,013e4h,00fe3h,013e4h,00fe3h,00fe3h,00fe3h + .word 00fe3h,00fe3h,00fe3h,00fc3h,00fa3h,00f83h,00f63h,00f43h + .word 00f23h,00f03h,00ee3h,00ec3h,00ea3h,00e83h,00e83h,00e63h + .word 00e63h,00e43h,00e43h,00e23h,00e23h,00e03h,00de3h,00dc3h + .word 00da3h,00d83h,00d63h,00d43h,00d23h,00d03h,00ce3h,00cc3h + .word 00ca3h,00c83h,00c63h,04210h,04a52h,05294h,05ef7h,06739h + .word 07bdeh,07fffh + +PLTF2_G_P: + .word 58 + .word 04210h,033ech,02febh,02febh,02beah,02beah,027e9h,027e9h + .word 023e8h,023e8h,01fe7h,01be6h,01fe7h,01be6h,01be6h,01be6h + .word 01be6h,01be6h,01be6h,01be6h,01be6h,01be6h,01bc6h,01ba6h + .word 01b86h,01b66h,01b46h,01b26h,01b06h,01ae6h,01ae6h,01ac6h + .word 01ac6h,01aa6h,01aa6h,01a86h,01a86h,01a66h,01a46h,01a26h + .word 01a06h,019e6h,019c6h,019a6h,01986h,01966h,01946h,01926h + .word 01906h,018e6h,018c6h,04e73h,056b5h,05ef7h,06b5ah,0739ch + .word 07fffh,07fffh + +PLTF3_G_P: + .word 58 + .word 04210h,04bf2h,047f1h,047f1h,043f0h,043f0h,03fefh,03fefh + .word 03beeh,03beeh,037edh,033ech,037edh,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033ech,033ech,033ech,033ech + .word 033ech,033ech,033ech,033ech,033cch,033ach,033ach,0338ch + .word 0338ch,0336ch,0336ch,0334ch,0334ch,0332ch,0330ch,032ech + .word 032cch,032ach,0328ch,0326ch,0324ch,0322ch,0320ch,031ech + .word 031cch,031ach,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_G_P: + .word 58 + .word 04210h,063f9h,05ff8h,05ff8h,05bf7h,05bf7h,057f6h,057f6h + .word 053f5h,053f5h,04ff4h,04bf3h,04ff4h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h + .word 04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bf3h,04bd3h + .word 04bb3h,04b93h,04b73h,04b53h,04b33h,04b13h,04af3h,04ad3h + .word 04ab3h,04a93h,04a73h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_G_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF1_R_P: + .word 58 + .word 04210h,07d28h,07d27h,07d07h,07d06h,07ce6h,07ce5h,07cc5h + .word 07cc4h,07ca4h,07ca3h,07c82h,07c83h,07c62h,07c82h,07c62h + .word 07c82h,07882h,07862h,07462h,07062h,06c62h,06862h,06462h + .word 06062h,05c62h,05862h,05462h,05062h,04c62h,04c42h,04862h + .word 04842h,04462h,04442h,04062h,04042h,03c42h,03842h,03442h + .word 03042h,02c42h,02842h,02442h,02042h,01c42h,01842h,01442h + .word 01042h,00c42h,00842h,03defh,04631h,04e73h,05ad6h,06318h + .word 077bdh,07fffh + +PLTF2_R_P: + .word 58 + .word 04210h,07d8bh,07d8ah,07d6ah,07d69h,07d49h,07d48h,07d28h + .word 07d27h,07d07h,07d06h,07ce5h,07ce6h,07cc5h,07ce5h,07cc5h + .word 07ce5h,07ce5h,07cc5h,07cc5h,07cc5h,078c5h,074c5h,070c5h + .word 06cc5h,068c5h,064c5h,060c5h,05cc5h,058c5h,058a5h,054c5h + .word 054a5h,050c5h,050a5h,04cc5h,04ca5h,048a5h,044a5h,040a5h + .word 03ca5h,038a5h,034a5h,030a5h,02ca5h,028a5h,024a5h,020a5h + .word 01ca5h,018a5h,014a5h,04a52h,05294h,05ad6h,06739h,06f7bh + .word 07fffh,07fffh + +PLTF3_R_P: + .word 58 + .word 04210h,07e72h,07e71h,07e51h,07e50h,07e30h,07e2fh,07e0fh + .word 07e0eh,07deeh,07dedh,07dcch,07dcdh,07dach,07dcch,07dach + .word 07dcch,07dcch,07dach,07dach,07dach,07dach,07dach,07dach + .word 07dach,07dach,07dach,07dach,079ach,075ach,0758ch,071ach + .word 0718ch,06dach,06d8ch,069ach,0698ch,0658ch,0618ch,05d8ch + .word 0598ch,0558ch,0518ch,04d8ch,0498ch,0458ch,0418ch,03d8ch + .word 0398ch,0358ch,0318ch,06739h,06f7bh,077bdh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF4_R_P: + .word 58 + .word 04210h,07fbch,07fbbh,07f9bh,07f9ah,07f7ah,07f79h,07f59h + .word 07f58h,07f38h,07f37h,07f16h,07f17h,07ef6h,07f16h,07ef6h + .word 07f16h,07f16h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h + .word 07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ef6h,07ed6h,07ef6h + .word 07ed6h,07ef6h,07ed6h,07ef6h,07ed6h,07ed6h,07ed6h,07ed6h + .word 07ed6h,07ed6h,07ad6h,076d6h,072d6h,06ed6h,06ad6h,066d6h + .word 062d6h,05ed6h,05ad6h,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + +PLTF5_R_P: + .word 58 + .word 04210h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh + + + + +SQDFB1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,04e7fh,03dffh,0319fh,0211fh,0109fh + .word 0043fh,0043fh,0043dh,0043bh,0043ah,00438h,00437h,00435h + .word 00434h,00432h,00431h,0042fh,0042eh,0042ch,0042bh,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + + +SQDFB2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,056bfh,0463fh,039dfh,0295fh,018dfh + .word 00c7fh,00c7fh,00c7fh,00c7dh,00c7ch,00c7ah,00c79h,00c77h + .word 00c76h,00c74h,00c73h,00c71h,00c70h,00c6eh,00c6dh,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFB3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,0631fh,0529fh,0463fh,035bfh,0253fh + .word 018dfh,018dfh,018dfh,018dfh,018dfh,018ddh,018dch,018dah + .word 018d9h,018d7h,018d6h,018d4h,018d3h,018d1h,018d0h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + + +SQDFB4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,0739fh,0631fh,056bfh,0463fh,035bfh + .word 0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295fh,0295eh + .word 0295dh,0295bh,0295ah,02958h,02957h,02955h,02954h,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFB5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07bdfh,06f7fh,05effh,04e7fh + .word 0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh,0421fh + .word 0421fh,0421fh,0421fh,0421eh,0421dh,0421bh,0421ah,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFB6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,06f7fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh + .word 0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,0631fh,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFB7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +SQDFR1_P: + .word 63 + .word 039ach,07a1eh,075ddh,071bch,06d7bh,0655ah,06139h,05d18h + .word 058d7h,054b6h,05095h,04c94h,04873h,04452h,04031h,03c30h + .word 0382fh,0342eh,0302ch,02c2bh,0242ah,02028h,01c27h,01426h + .word 01024h,00c23h,00822h,07e73h,07defh,07d8ch,07d08h,07c84h + .word 07c21h,07821h,07021h,06821h,06021h,05821h,05021h,04c21h + .word 04421h,03c21h,03421h,02c21h,02421h,01c21h,01421h,07fe1h + .word 07fe1h,07bc1h,077a1h,07381h,06f61h,06b41h,06301h,05ee1h + .word 05ac1h,056a1h,05281h,04a41h,04201h,039c1h,02521h + +SQDFR2_P: + .word 63 + .word 039ach,07e5fh,07e1fh,079feh,075bdh,06d9ch,0697bh,0655ah + .word 06119h,05cf8h,058d7h,054d6h,050b5h,04c94h,04873h,04472h + .word 04071h,03c70h,0386eh,0346dh,02c6ch,0286ah,02469h,01c68h + .word 01866h,01465h,01064h,07eb5h,07e31h,07dceh,07d4ah,07cc6h + .word 07c63h,07c63h,07863h,07063h,06863h,06063h,05863h,05463h + .word 04c63h,04463h,03c63h,03463h,02c63h,02463h,01c63h,07fe3h + .word 07fe3h,07fe3h,07fe3h,07bc3h,077a3h,07383h,06b43h,06723h + .word 06303h,05ee3h,05ac3h,05283h,04a43h,04203h,02d63h + +SQDFR3_P: + .word 63 + .word 039ach,07ebfh,07e7fh,07e5fh,07e1fh,079ffh,075deh,071bdh + .word 06d7ch,0695bh,0653ah,06139h,05d18h,058f7h,054d6h,050d5h + .word 04cd4h,048d3h,044d1h,040d0h,038cfh,034cdh,030cch,028cbh + .word 024c9h,020c8h,01cc7h,07f18h,07e94h,07e31h,07dadh,07d29h + .word 07cc6h,07cc6h,07cc6h,07cc6h,074c6h,06cc6h,064c6h,060c6h + .word 058c6h,050c6h,048c6h,040c6h,038c6h,030c6h,028c6h,07fe6h + .word 07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,07fe6h,077a6h,07386h + .word 06f66h,06b46h,06726h,05ee6h,056a6h,04e66h,039c6h + +SQDFR4_P: + .word 63 + .word 039ach,07f3fh,07effh,07edfh,07e9fh,07e7fh,07e5fh,07e3fh + .word 07dffh,079dfh,075beh,071bdh,06d9ch,0697bh,0655ah,06159h + .word 05d58h,05957h,05555h,05154h,04953h,04551h,04150h,0394fh + .word 0354dh,0314ch,02d4bh,07f9ch,07f18h,07eb5h,07e31h,07dadh + .word 07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,07d4ah,0754ah,0714ah + .word 0694ah,0614ah,0594ah,0514ah,0494ah,0414ah,0394ah,07feah + .word 07feah,07feah,07feah,07feah,07feah,07feah,07feah,07feah + .word 07feah,07bcah,077aah,06f6ah,0672ah,05eeah,04a4ah + +SQDFR5_P: + .word 63 + .word 039ach,07fffh,07fbfh,07f9fh,07f5fh,07f3fh,07f1fh,07effh + .word 07ebfh,07e9fh,07e7fh,07e7fh,07e5fh,07e3fh,07e1fh,07a1fh + .word 0761eh,0721dh,06e1bh,06a1ah,06219h,05e17h,05a16h,05215h + .word 04e13h,04a12h,04611h,07fffh,07fdeh,07f7bh,07ef7h,07e73h + .word 07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h,07e10h + .word 07e10h,07a10h,07210h,06a10h,06210h,05a10h,05210h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,07ff0h + .word 07ff0h,07ff0h,07ff0h,07ff0h,07ff0h,077b0h,06310h + +SQDFR6_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fbfh,07f9fh,07f7fh,07f7fh,07f5fh,07f3fh,07f1fh,07f1fh + .word 07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07f1fh,07b1eh,0731dh + .word 06f1bh,06b1ah,06719h,07fffh,07fffh,07fffh,07fffh,07f7bh + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h,07f18h + .word 07f18h,07f18h,07f18h,07f18h,07f18h,07b18h,07318h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + .word 07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h,07ff8h + +SQDFR7_P: + .word 63 + .word 039ach,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + .word 07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh + + +CODE_G_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,00320h,00300h,002e0h,002c0h,002c0h + .word 002a0h,00280h,00280h,00260h,00240h,00220h,00220h,00200h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h,00140h + .word 00120h,00100h,000e0h,000e0h,000c0h,000a0h,00080h,00060h + +CODE_R_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06800h,06400h,06000h,06000h,05c00h + .word 05800h,05400h,05000h,04c00h,04c00h,04800h,04400h,04000h + .word 03c00h,03c00h,03800h,03400h,03000h,03000h,02c00h,02800h + .word 02400h,02400h,02000h,01c00h,01800h,01800h,01400h,01000h + +CODE_Y_P: + .word 64 + .word 00000h,07fffh,06f7bh,06b5ah,05ef7h,05ad6h,056b5h,04e73h + .word 04a52h,04631h,04210h,039ceh,035adh,0318ch,02d6bh,0294ah + .word 02949h,0254ah,0292ah,02529h,02528h,02129h,02508h,02108h + .word 01ce8h,01ce7h,018c6h,018c5h,014a5h,014a4h,01484h,01085h + .word 01084h,00c63h,00000h,06720h,06300h,06300h,05ee0h,05ac0h + .word 05ac0h,056a0h,05280h,04e60h,04e60h,04a40h,04620h,04620h + .word 041e0h,03dc0h,039a0h,03580h,03160h,02d40h,02920h,02900h + .word 024e0h,020c0h,01ca0h,018a0h,01880h,01460h,01060h,01040h + + +TUBE_O_P: + .word 127 + .word 00000h,07f41h,07f20h,07ec0h,07ec0h,07ea0h,07ea0h,07ea0h + .word 07e80h,07e80h,07e80h,07e60h,07e60h,07e60h,07e60h,07e40h + .word 07e60h,07e40h,07e20h,07e20h,07e20h,07e20h,07e00h,07e00h + .word 07e00h,07de0h,07de0h,07dc0h,07dc0h,07de0h,07dc0h,07dc0h + .word 07dc0h,079c0h,079c0h,07dc0h,079c0h,079c0h,079c0h,075a0h + .word 075a0h,079c0h,071a0h,075a0h,071a0h,071a0h,075a0h,071a0h + .word 071a0h,06d80h,06d80h,071a0h,06d80h,06d80h,06980h,06980h + .word 06560h,06980h,06560h,06560h,06560h,06160h,06160h,06160h + .word 06160h,05d40h,05d40h,05d40h,05d40h,05940h,05d40h,05520h + .word 05520h,05940h,05520h,05520h,05940h,05120h,05520h,05120h + .word 05520h,05120h,05120h,04d00h,04d00h,04d00h,04900h,04900h + .word 04900h,044e0h,044e0h,044e0h,044e0h,040e0h,040e0h,040e0h + .word 03cc0h,03cc0h,038c0h,034a0h,038c0h,034a0h,034a0h,030a0h + .word 034a0h,034a0h,030a0h,02c80h,030a0h,02c80h,030a0h,02c80h + .word 02880h,02c80h,02460h,02880h,02880h,02460h,02460h,02060h + .word 02060h,02060h,02060h,01c40h,01840h,01420h,01020h + +TUBE_R_P: + .word 127 + .word 0294ah,07ed5h,07e72h,079eeh,075eeh,07dabh,075cdh,079ach + .word 07d69h,0798bh,0758bh,0718bh,0756ah,07949h,07948h,07548h + .word 07928h,07927h,07106h,078c5h,06d07h,070e6h,06907h,06ce6h + .word 06cc5h,07482h,060e6h,05ce6h,060c5h,07062h,06c82h,07061h + .word 06883h,05cc5h,06882h,07041h,06c61h,06483h,06862h,06482h + .word 06861h,06c41h,054c5h,06462h,06082h,06461h,06841h,054a5h + .word 06062h,054a4h,06061h,06441h,05c62h,06041h,05c61h,05862h + .word 04ca4h,05c41h,05861h,05462h,05841h,05461h,04c83h,05062h + .word 05441h,05061h,04484h,05041h,04c42h,04c41h,05021h,04861h + .word 04083h,04842h,04462h,04841h,04c21h,03c83h,04442h,04441h + .word 04821h,04042h,04421h,04041h,03c42h,04021h,03c41h,03842h + .word 03c21h,03841h,03063h,03442h,03821h,03441h,03042h,03421h + .word 02863h,03021h,02c41h,02462h,02c21h,02841h,02822h,02423h + .word 02442h,02821h,02441h,02023h,02042h,02041h,02421h,01c42h + .word 01c41h,02021h,01823h,01842h,01c21h,01442h,01821h,01441h + .word 01422h,01042h,01421h,01021h,00c21h,00821h,00421h + + +TUBE_Y_P: + .word 127 + .word 00000h,07fe0h,07fc0h,07fa0h,07f80h,07f80h,07f80h,07f80h + .word 07f60h,07f80h,07f60h,07f60h,07f60h,07f60h,07f60h,07f60h + .word 07f60h,07f60h,07f40h,07f40h,07f40h,07f40h,07f20h,07f20h + .word 07f20h,07f20h,07f00h,07ee0h,07ee0h,07f00h,07ee0h,07ee0h + .word 07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ee0h,07ac0h + .word 07ac0h,07ee0h,076a0h,07ac0h,076a0h,076a0h,07ac0h,076a0h + .word 076a0h,07280h,07280h,076a0h,07280h,07280h,06e80h,06e80h + .word 06a60h,06e80h,06a60h,06a60h,06a60h,06640h,06640h,06640h + .word 06640h,06220h,06220h,06220h,06220h,05e20h,06220h,05a00h + .word 05a00h,05e20h,05a00h,05a00h,05e20h,055e0h,05a00h,055e0h + .word 05a00h,055e0h,055e0h,051c0h,051c0h,051c0h,04da0h,04da0h + .word 04da0h,049a0h,049a0h,049a0h,049a0h,04580h,04580h,04580h + .word 04160h,04160h,03d60h,03940h,03d60h,03940h,03940h,03520h + .word 03940h,03940h,03520h,03100h,03520h,03100h,03520h,03100h + .word 02ce0h,03100h,028e0h,02ce0h,02ce0h,028e0h,028e0h,024c0h + .word 024c0h,024c0h,024c0h,020a0h,01c80h,01880h,01460h + + +TUBE_G_P: + .word 127 + .word 00000h,063d4h,05bd1h,04bcch,04bcbh,047cah,047cah,047cah + .word 043c8h,043c9h,043c8h,03fc7h,03fc7h,03fc7h,03bc6h,03bc5h + .word 03bc6h,03bc5h,033c2h,033c3h,02fc1h,033c2h,02fc1h,02fc1h + .word 02bc1h,02bc1h,027a1h,02781h,02781h,027a1h,02781h,02781h + .word 02781h,02361h,02361h,02781h,02361h,02361h,02361h,02341h + .word 02341h,02361h,02321h,02341h,02321h,02321h,02341h,02321h + .word 02321h,01f01h,01f01h,02321h,01f01h,01f01h,01ee1h,01ee1h + .word 01ec1h,01ee1h,01ec1h,01ec1h,01ec1h,01aa1h,01aa1h,01aa1h + .word 01aa1h,01a81h,01a81h,01a81h,01a81h,01a61h,01a81h,01641h + .word 01641h,01a61h,01641h,01641h,01a61h,01621h,01641h,01621h + .word 01641h,01621h,01621h,01601h,01601h,01601h,011e1h,011e1h + .word 011e1h,011c1h,011c1h,011c1h,011c1h,00da1h,00da1h,00da1h + .word 00d81h,00d81h,00d61h,00941h,00d61h,00941h,00941h,00921h + .word 00941h,00941h,00921h,00901h,00921h,00901h,00921h,00901h + .word 004e1h,00901h,004c1h,004e1h,004e1h,004c1h,004c1h,004a1h + .word 004a1h,004a1h,004a1h,00481h,00461h,00441h,00421h + + + + +LOGOB_P: + .word 30 + .word 00000h,018dfh,00cbfh,00c9fh,0001fh,0001eh,0001ch,0001bh + .word 0001ah,00019h,00018h,00017h,00016h,00015h,00014h,00013h + .word 00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh + .word 0000ah,00009h,00008h,00007h,00006h,00005h + + +substutn_dirs_str_setup + PRINT_STR bast8t_ascii,4,0,200,50,BAST_W_P,0 + +substutn_dirs_strs + .string "PRESS TURBO TO SWAP",1 + .string "PRESS SHOOT TO SELECT",0 + .even + + +subsitution_str_setup + PRINT_STR brush20_ascii,4,0,200,7,BRSHGYOP,0 + +subsitution_str + .string "SUBSTITUTIONS",0 + .even + + +create_plr_info_setup + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-34,BAST_W_P,0 +create_plr_info_setup2 + PRINT_STR bast8t_ascii,4,0,BALL1X+52,BALL1Y-24,BAST_W_P,0 + +create_plr_info + .string "THIS OPTION INVOLVES",1 + .string "NO GAME PLAY.",1 + .string "ARE YOU SURE ?",0 + .even + +HEADB_P: + .word 27 + .word 00000h,0001bh,0001ch,0001dh,0001eh,00018h,00019h,0001ah + .word 00016h,00017h,00015h,00014h,00013h,00011h,00012h,00010h + .word 0000fh,0000eh,0000dh,0000ch,0000bh,0000ah,00009h,00008h + .word 00007h,00006h,00005h + +HEADR_P: + .word 27 + .word 00000h,06c00h,07000h,07400h,07800h,06000h,06400h,06800h + .word 05800h,05c00h,05400h,05000h,04c00h,04400h,04800h,04000h + .word 03c00h,03800h,03400h,03000h,02c00h,02800h,02400h,02000h + .word 01c00h,01800h,01400h + + +; +; This table contains the RAM ptrs. for the TEXT on the balls +; +bball_text_obj_ptrs + .long bball_1_text_obj_ptr + .long bball_2_text_obj_ptr + .long bball_3_text_obj_ptr +bball_text_obj_ptrs_end + +; +; This table contains: +; +; 1) ram location to save obj ptr +; 2) img ptr +; 3) X coor. +; 4) Y coor. +; +bball_text_img_setup + .long bball_1_text_obj_ptr,FNT_CRE,[BALL1X+46,0],[BALL1Y+40,0] + .long bball_2_text_obj_ptr,FNT_ENT,[BALL2X+47,0],[BALL2Y+40,0] + .long bball_3_text_obj_ptr,FNT_SEL,[BALL3X+47,0],[BALL3Y+40,0] +bball_text_img_setup_end + + +BIGBLD_P: + .word 196 + .word 00000h,04210h,00c20h,00820h,00400h,00000h,00800h,00c20h + .word 01020h,00800h,00400h,00c00h,00820h,01020h,01020h,01420h + .word 00c01h,01020h,00c00h,01820h,01c20h,01c40h,01c40h,02040h + .word 01441h,00421h,01820h,02040h,02040h,02040h,01840h,01420h + .word 00421h,02440h,01840h,01041h,00421h,00c41h,00801h,00802h + .word 00802h,01844h,03061h,03c80h,03460h,01441h,01841h,03860h + .word 03881h,018c6h,02041h,03880h,03881h,03c81h,03ca1h,03ca2h + .word 040a2h,040e3h,040c2h,04104h,040e4h,04105h,034a2h,034c4h + .word 02ca4h,020a3h,01084h,01064h,00c43h,01441h,02c61h,03480h + .word 03481h,03060h,03060h,02c60h,02c60h,02840h,01043h,02c60h + .word 02860h,03460h,030c4h,02861h,03480h,03881h,040c3h,03cc3h + .word 03ca2h,02ca2h,01c62h,01063h,00842h,02c61h,03061h,03061h + .word 02441h,01861h,01440h,028e5h,02c81h,01c62h,00841h,00821h + .word 03081h,01444h,02860h,028e6h,03481h,00c42h,00421h,00821h + .word 03081h,02c61h,02841h,01841h,01421h,024c5h,03cc3h,03081h + .word 01441h,01043h,03481h,02461h,020c5h,02460h,02440h,02c40h + .word 02881h,02461h,02840h,02461h,02861h,02440h,01c41h,00420h + .word 00c21h,01c44h,02043h,03461h,03461h,02441h,01c41h,01844h + .word 01064h,04080h,04080h,028a2h,02882h,02861h,02461h,01c62h + .word 02041h,024a3h,02083h,03481h,01444h,02c82h,01ca4h,01841h + .word 00c44h,038c3h,01c84h,040a1h,01c63h,034e4h,01883h,04081h + .word 040a0h,038c3h,02907h,01884h,01065h,03506h,01ce6h,040a1h + .word 02062h,02460h,01463h,020e7h,01462h,00c42h,02061h,01862h + .word 030c4h,04105h,02841h,01ce6h,01cc5h,018c6h,014a4h,024a4h + .word 01ce7h,030e5h,024e7h,03505h + + + + +pressed_bball_xys + .long [BALL1X+3,0],[BALL1Y+2,0] + .long [BALL2X+3,0],[BALL2Y+2,0] + .long [BALL3X+3,0],[BALL3Y+2,0] + + +pressed_bball_shadw_tbl + .long [BALL1X-5,0],[BALL1Y-5,0],SMBALSA1,SMBALSA2 + .long [BALL2X-5,0],[BALL2Y-5,0],SMBALSB1,SMBALSB2 + .long [BALL3X-5,0],[BALL3Y-5,0],SMBALSC1,SMBALSC2 + + +; +; This table contains: +; 1) X of SPOTLIGHT +; 2) Y pf SPOTLIGHT +; 3) Table addr. of image table ptr. +; +sptlght_img_tbl_ptr_tbl + .long [BALL1X-14,0],[0,0],spotlight_1_imgs + .long [BALL2X-18,0],[0,0],spotlight_2_imgs + .long [BALL3X-14,0],[0,0],spotlight_3_imgs + +; +; This table contains: +; 4) X of ball SHADOW +; 5) Y of ball SHADOW +; 6) Table addr. of image table ptr. +; +sptlght_bball_shadw_img_tbl + .long [BALL1X-6,0],[BALL1Y+47,0],bball_1_shadow_imgs + .long [BALL2X-6,0],[BALL2Y+47,0],bball_2_shadow_imgs + .long [BALL3X-6,0],[BALL3Y+47,0],bball_3_shadow_imgs + + +spotlight_1_imgs + .long SPOTLTA1 + .long SPOTLTA2 + .long SPOTLTA3 + .long SPOTLTA4 + .long SPOTLTA5 + +bball_1_shadow_imgs + .long BGBALSA1,BGBALSA2 + + +spotlight_2_imgs + .long SPOTLTB1 + .long SPOTLTB2 + .long SPOTLTB3 + .long SPOTLTB4 + .long SPOTLTB5 + +bball_2_shadow_imgs + .long BGBALSB1,BGBALSB2 + + +spotlight_3_imgs + .long SPOTLTC1 + .long SPOTLTC2 + .long SPOTLTC3 + .long SPOTLTC4 + .long SPOTLTC5 + +bball_3_shadow_imgs + .long BGBALSC1,BGBALSC2 + + + +opt_str_setup + PRINT_STR brush20_ascii,10,0,199,7,BRSHGYOP,0 +; PRINT_STR brush20_ascii,10,0,199,5,BRSHGYO_P,0 + +option_strings + .string "choose option",0 + .even + +;;the real version will have two tables...one with all three options and one +;; with only two options +;;plate_xys ;create plyr, select teams, and enter inits. +; .word OPT_PLATE_LX,OPT_PLATE_CX,OPT_PLATE_RX +;plate_xys2 ;select teams and enter initials +; .word 135,250 + +****************************************************************************** + .end diff --git a/SRC/SELECT4.ASM b/SRC/SELECT4.ASM new file mode 100644 index 0000000..77a633f --- /dev/null +++ b/SRC/SELECT4.ASM @@ -0,0 +1,6013 @@ +;----------------------------------------------------------------------------- +; +* Owner: JOHNSON +* +; Software: Jeff Johnson +; Initiated: 12-10-95 +; +; COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +; +;.Last mod - 12/11/95 +;----------------------------------------------------------------------------- + .file "select4.asm" + .title "option screen...etc" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + + .include "imgtbl.glo" + .include "mugshot.glo" +; .include "imgtblm.glo" + .include "names2.glo" ;New names from pnames2.img + .include "mugshot8.tbl" ;New names from pnames2.img + + .include "prizes.tbl" + + + .def OUR_MUG,TOB_MUG,JAS_MUG,QUI_MUG,BOO_MUG,MARTY_MUG,CARL_MUG +;DJT Start + .def HEI_MUG,MAT_MUG + .def create_plr_mugshots_tbl,create_plr_mugshots_tbl_end +;DJT player_heads2 removed to ATTRACT + .def player_heads ;table addr. +;DJT End + .def player_names ;table addr. + + .ref ATRIBUTEBMOD,OPTSCRBMOD,ATRBKITBMOD + .ref M_FIF_P + .ref M_MAT_P,M_JOS_P,M_HEI_P,M_CRL_P,M_MAR_P + .ref M_BOO_P,M_QUI_P,M_TOB_P,M_OUR_P,M_JAS_P + + .ref bounce_snd + .ref get_all_buttons_cur2 + .ref GET_ADJ,GAMSTATE + .ref BKGDBMOD,KILBGND + .ref prizeg_p,prize1_p,prize2_p,prize3_p + + .ref force_selection + .ref IRQSKYE,TWOPLAYERS + .ref BAKMODS,BGND_UD1 + .ref PSTATUS + .ref player1_data,player2_data,player3_data,player4_data + .ref get_but_val_down,get_stick_val_down + .ref create_title_bar +;DJT Start +; .ref concat_string,concat_rom_string,copy_rom_string +;DJT End + .ref setup_message,copy_rom_string + .ref print_string2,print_string_C2,print_string_C3,print_string + .ref dec_to_asc,concat_rom_string + .ref mess_cursy,mess_cursx,message_palette + .ref mess_objid,mess_line_spacing + .ref bast7t_ascii,pal_getf +;DJT Start +;DJT ref moved down to reference + .ref credits3 +;DJT End + .ref init_x,kit_x + .ref RNDRNG0 + .ref obj_delc,print_plr_name + .ref bast8_ascii,bast8t_ascii,bast10_ascii,brush20_ascii + .ref pal_clean +;DJT Start +; .ref PLTF5_B_P,PLTF5_G_P,PLTF5_Y_P,PLTF5_R_P +;DJT End + .ref SHAKER2 + .ref plaque_xs,plaque_flsh_pals + .ref plaque_land3 + .ref print_string_C + .ref dpageflip,WIPEOUT + .ref get_all_buttons_down + .ref bast18_ascii + .ref plaque_snds,plaque_lnds_snds + .ref yes_no_cur1,yes_no_cur2,yes_no_cur3,yes_no_cur4 + .ref chkmrk_snd,chkmrk_snd2,chkmrk_snd3,chkmrk_snd4 + .ref HALT + .ref HIDEAT + + +;DJT Start + .if TRIVCON +;DJT End + .bss answer,16 + .bss answer_value,16 + .bss plyrs_left,16 + .bss plyrs_playing,16 + .bss showing_info,16 + .bss temp_halt,16 + .bss trivia_page,16 +;DJT Start + .endif ;TRIVCON +;DJT End + + .text + + + + .asg 4,ANSWERS_ON_SCRN + + .asg 34,LEGAL_STR_Y + .asg 68,PT_AWARD_Y + + .asg 25,QUESTION_X + .asg 50,QUESTION_Y + .asg 54,RULES_Y + .asg 160,HIT_BUTN_Y + + .asg 105,ANSWER_HDR_X + .asg ANSWER_HDR_X+10,ANSWER_X + .asg 95,ANSWER_Y + .asg 15,ANSWER_LINE_SPC + + .asg ANSWER_Y+(ANSWERS_ON_SCRN*ANSWER_LINE_SPC)+8,ANSWER_VAL_Y + + .asg ANSWER_HDR_X+29,CURSOR_X + + .asg 188,NAME_Y + .asg 215,PASSWORD_Y + .asg NAME_Y+17,TRIVIA_PTS_Y + + .asg 0,ANSWER_A + .asg 1,ANSWER_B + .asg 2,ANSWER_C + .asg 3,ANSWER_D + + .asg 32+(16*6),TBL_SIZE + +;DJT Start + .if TRIVCON +;DJT End +;----------------------------------------------------------------------------- +; This routine computes the players password and displays it +; +; INPUT: reg a9 - ptr to player record +; reg a10 - player number +; reg a1 - objs id +;----------------------------------------------------------------------------- + SUBR print_plr_password + + movi trivia_password_setup,a2 + calla setup_message + + move a1,@mess_objid + + move a10,a0 + sll 4,a0 + addi pass_xs,a0 + move *a0,a0 + move a0,@mess_cursx + +;create 'password' + + .ref PASSWORD + + move @mess_cursx,a0 + subi 35,a0 + sll 16,a0 + movi [PASSWORD_Y-15,0],a1 ;Y pos + movi PASSWORD,a2 ;z pos + movi 300,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + +;combine all letters into a long + + move *a9(PR_NAME1),a3 + sll 29,a3 + move *a9(PR_NAME2),a14 + sll 24,a14 + or a14,a3 + move *a9(PR_NAME3),a14 + sll 19,a14 + or a14,a3 + move *a9(PR_NAME4),a14 + sll 14,a14 + or a14,a3 + move *a9(PR_NAME5),a14 + sll 9,a14 + or a14,a3 + move *a9(PR_NAME6),a14 + sll 4,a14 + or a14,a3 + +;rotate each byte in long by appropiate pin number + +;1st + move a3,a14 + andi 255,a14 ;get 1st byte + move *a9(PR_PIN_NBR1),a1 + rl a1,a14 + or a14,a3 + + +;2nd + move a3,a14 + srl 8,a14 + andi 255,a14 ;get 2nd byte + move *a9(PR_PIN_NBR2),a1 + rl a1,a14 + sll 8,a14 + or a14,a3 + +;3rd + move a3,a14 + srl 16,a14 + andi 255,a14 ;get 3rd byte + move *a9(PR_PIN_NBR3),a1 + rl a1,a14 + sll 16,a14 + or a14,a3 + +;4th + move a3,a14 + srl 24,a14 + andi 255,a14 ;get 4th byte + move *a9(PR_PIN_NBR4),a1 + rl a1,a14 + sll 24,a14 + or a14,a3 + + move *a9(PR_PIN_NBR1),a14 + move *a9(PR_PIN_NBR2),a1 + add a1,a14 + move *a9(PR_PIN_NBR3),a1 + add a1,a14 + move *a9(PR_PIN_NBR4),a1 + add a1,a14 + +;rotate long by additive sum of pin numbers + + rl a14,a3 + +;each nibble is a table offset + + move a3,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib1_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla copy_rom_string + +;2nd nibble + move a3,a4 + srl 4,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib2_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;3rd nibble + + move a3,a4 + srl 8,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib3_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;4th nibble + + move a3,a4 + srl 12,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib4_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;5th nibble + + move a3,a4 + srl 16,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib5_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;6th nibble + + move a3,a4 + srl 20,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib6_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;7th nibble + + move a3,a4 + srl 24,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib7_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + +;8th nibble + + move a3,a4 + srl 28,a4 + andi 15,a4 ;get 1st nibble + sll 4,a4 + addi nib8_tbl,a4 + move *a4,a4 ;get letter offset + sll 5,a4 + addi letr_str_tbl,a4 + move *a4,a4,L + calla concat_rom_string + calla print_string_C + rets + + +pass_xs + .word 56,149,250,342 + +trivia_password_setup + PRINT_STR bast8t_ascii,9,1,199,PASSWORD_Y,BAST_W_P,0 + +nib1_tbl + .word 0,15,16,4,8,0,4,23,25,3,18,10,21,20,11,19,5 +nib2_tbl + .word 14,1,12,12,10,20,23,22,2,19,21,10,21,8,7,6,4 +nib3_tbl + .word 24,1,3,5,2,4,16,7,11,19,10,8,12,23,6,9,4 +nib4_tbl + .word 15,24,23,12,11,10,19,8,17,6,15,4,13,2,1,0,15 +nib5_tbl + .word 20,11,22,23,14,25,20,25,18,9,23,0,2,5,8,21,10 +nib6_tbl + .word 0,15,16,4,8,0,4,23,18,3,18,10,21,20,11,19,4 +nib7_tbl + .word 1,9,5,7,2,11,13,15,18,21,24,25,23,0,4,8,14 +nib8_tbl + .word 11,15,24,13,12,2,6,4,1,8,7,24,12,18,19,10,8 + +letr_str_tbl + .long str_a + .long str_b + .long str_c + .long str_d + .long str_e + .long str_f + .long str_g + .long str_h + .long str_i + .long str_j + .long str_k + .long str_l + .long str_m + .long str_n + .long str_o + .long str_p + .long str_q + .long str_r + .long str_s + .long str_t + .long str_u + .long str_v + .long str_w + .long str_x + .long str_y + .long str_z + +str_a + .string 41h,0 ;A +str_b + .string 42h,0 ;b +str_c + .string 43h,0 ;c +str_d + .string 44h,0 ;d +str_e + .string 45h,0 ;e +str_f + .string 46h,0 ;f +str_g + .string 47h,0 ;g +str_h + .string 48h,0 ;h +str_i + .string 49h,0 ;i +str_j + .string 4ah,0 ;j +str_k + .string 4bh,0 ;k +str_l + .string 4ch,0 ;l +str_m + .string 4dh,0 ;m +str_n + .string 4eh,0 ;n +str_o + .string 4fh,0 ;o +str_p + .string 50h,0 ;p +str_q + .string 51h,0 ;q +str_r + .string 52h,0 ;r +str_s + .string 53h,0 ;s +str_t + .string 54h,0 ;t +str_u + .string 55h,0 ;u +str_v + .string 56h,0 ;v +str_w + .string 57h,0 ;w +str_x + .string 58h,0 ;x +str_y + .string 59h,0 ;y +str_z + .string 5ah,0 ;z + .even + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR trivia_game + + .asg TYPTEXT+1,TYPFLASHTXT + .ref change_pal_on_text + + clr a14 + move a14,@trivia_page + + move @HALT,a14 + move a14,@temp_halt + clr a14 + move a14,@HALT + +; BSSX TRIVIA_TEST,16 +; move @TRIVIA_TEST,a0 +; jrz #tg1 +; +; movk 4,a14 +; jruc tg_3 +;#tg1 + clr a14 + + move @PSTATUS,a0 + btst 0,a0 ;plyr 1 ? + jrz tg_0 ;br=nope + move @player1_data+PR_NAME1,a1 + jrle tg_0 ;br=player didn't enter inits + move @player1_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_0 ;br=over prize level...ignore + inc a14 +tg_0 + btst 1,a0 ;plyr 2 ? + jrz tg_1 ;br=nope + move @player2_data+PR_NAME1,a1 + jrle tg_1 ;br=player didn't enter inits + move @player2_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_1 ;br=over prize level...ignore + inc a14 +tg_1 + btst 2,a0 ;plyr 3 ? + jrz tg_2 ;br=nope + move @player3_data+PR_NAME1,a1 + jrle tg_2 ;br=player didn't enter inits + move @player3_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_2 ;br=over prize level...ignore + inc a14 +tg_2 + btst 3,a0 ;plyr 4 ? + jrz tg_3 ;br=nope + move @player4_data+PR_NAME1,a1 + jrle tg_3 ;br=player didn't enter inits + move @player4_data+PR_TRIVIA_PTS,a1 + cmpi TRIVIA_PTS_NEEDED,a1 + jrhs tg_3 ;br=over prize level...ignore + inc a14 +tg_3 + move a14,a14 + jrz tg_end ;br=nobody entered initial + move a14,@plyrs_playing + move a14,@plyrs_left + + SUBR show_prizes + + movk ADJTRIVIA,a0 + calla GET_ADJ + move a0,a0 ;if value is NON-ZERO, dont allow + jrz #dotriv + RETP + +#dotriv + clr a0 + move a0,@WORLDTLX,L + move a0,@WORLDTLY,L + + calla display_blank + calla WIPEOUT ;CLEAN SYSTEM OUT + calla pal_clean + + clr a0 + move a0,@IRQSKYE + + movk 1,a0 ;page flipping on + move a0,@dpageflip + + SLEEPK 1 + + movi trivia_mod_prizes,a0 + move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a0 + calla create_title_bar + + movi trivia_game_title_setup,a2 + calla setup_message + movi trivia_game_title,a4 + calla print_string_C2 + + movi [198,0],a0 ;Show prizes + movi [100,0],a1 + movi 300,a3 + movi DMAWNZ|M_SCRNREL,a4 + movi RULES_ID,a5 + clr a6 + clr a7 + movi prizeG,a2 + calla BEGINOBJ + movi [95,0],a0 + movi [138,0],a1 + movi prize1,a2 + calla BEGINOBJ + movi [305,0],a0 + movi [138,0],a1 + movi prize2,a2 + calla BEGINOBJ + movi [200,0],a0 + movi [193,0],a1 + movi prize3,a2 + calla BEGINOBJ + + movi prize_levels_str_setup,a2 ;Show prize levels + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + + movi 37,a0 ;!!! + move a0,@mess_cursy + movi przg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 66,a0 ;!!! + move a0,@mess_cursy + movi prz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 73,a0 ;!!! + move a0,@mess_cursy + movi prz2_str,a4 + calla print_string_C2 + movi 165,a0 ;!!! + move a0,@mess_cursx + movi 209,a0 ;!!! + move a0,@mess_cursy + movi prz3_str,a4 + calla print_string_C2 + + movi legal_notice_str_setup,a2 ;Show prize descriptions + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 10,a0 + move a0,@mess_line_spacing + + movi 55,a0 ;!!! + move a0,@mess_cursy + movi dprzg_str,a4 + calla print_string_C2 + movi 48,a0 ;!!! + move a0,@mess_cursx + movi 83,a0 ;!!! + move a0,@mess_cursy + movi dprz1_str,a4 + calla print_string_C2 + movi 350,a0 ;!!! + move a0,@mess_cursx + movi 90,a0 ;!!! + move a0,@mess_cursy + movi dprz2_str,a4 + calla print_string_C2 + movi 253,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi dprz3_str,a4 + calla print_string_C2 + movi 70,a0 ;!!! + move a0,@mess_cursx + movi 205,a0 ;!!! + move a0,@mess_cursy + movi bas7_alt,a0 + move a0,@message_palette,L + movi ddln_str,a4 + calla print_string_C2 + + move @GAMSTATE,a0 + cmpi INAMODE,a0 + jrnz #notam + + movk 1,a0 ;In attract + move a0,@DISPLAYON + calla display_unblank + + SLEEP 40 + + movi 7*TSEC,a8 +#butp + SLEEPK 1 ;Show, wait, & die! + calla get_all_buttons_cur2 + jrz #nobutp2 + SOUND1 bounce_snd + jruc #butp2 +#nobutp2 + dsj a8,#butp +#butp2 + RETP + +#notam + movi rules_butn_setup,a2 ;In trivia contest + calla setup_message + movi TYPFLASHTXT,a10 + move a10,@mess_objid + CREATE FLSH_TXT_PID,change_pal_on_text + + movi rules_butn_str,a4 + calla print_string_C2 + + movk 1,a0 + move a0,@DISPLAYON + calla display_unblank + + movi 7*TSEC,a8 +#przlp + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb + SOUND1 bounce_snd + jruc #tg0 +#noprzb + dsj a8,#przlp +#tg0 + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla KILBGND + + movi trivia_mod_kit,a0 + move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players + jrnz tg_4 + movi trivia_mod,a0 +tg_4 move a0,@BAKMODS,L + calla BGND_UD1 + + movk 1,a10 + CREATE0 plyr_select_answer + movk 2,a10 + CREATE0 plyr_select_answer + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrnz #2plr + + clr a10 + CREATE0 plyr_select_answer + movk 3,a10 + CREATE0 plyr_select_answer +#2plr + movk 1,a14 ;Don't show cursors yet + move a14,@trivia_page + +;print game rules + + movi trivia_rules_str_setup,a2 ;Show rules + calla setup_message + movi RULES_ID,a0 + move a0,@mess_objid + movk 13,a0 + move a0,@mess_line_spacing + movi rules_str,a4 + calla print_string_C2 + + movi hit_butn_str_setup,a2 ;Show button press + calla setup_message + movi TYPFLASHTXT,a0 + move a0,@mess_objid + movi hit_butn_str,a4 + calla print_string_C2 + + CREATE0 credits3 ;Display credits + + SLEEPK 1 ;Make sure procs go active! + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + movi 7*TSEC,a8 +tg_4a + SLEEPK 1 + calla get_all_buttons_down + jrz #noprzb1 + SOUND1 bounce_snd + jruc tg_4b +#noprzb1 + dsj a8,tg_4a +tg_4b + clr a0 ;Keep this page up while + move a0,@DISPLAYON ; building the next one + move a0,@dpageflip + + movi RULES_ID,a0 + calla obj_del1c + movi TYPFLASHTXT,a0 + calla obj_del1c + calla pal_clean + +;print question + movi question_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movk 13,a0 + move a0,@mess_line_spacing + + movi NBR_QUESTIONS-1,a0 ;Select rnd question #! + calla RNDRNG0 + move a0,a1 ;save table ptr. + movi TBL_SIZE,a0 + mpyu a0,a1 + addi trivia_tbl,a1 + move a1,a10 + move *a10+,a4,L ;get question str. ptr + calla print_string2 + +;get question value + + move *a10+,a14,W + move a14,@answer_value + +;print answers + movi answer_str_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi hdr_str_a,a4,L + calla copy_rom_string + +;A + move *a10+,a14,W ;get first answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;B + movi hdr_str_b,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get second answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;C + movi hdr_str_c,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get third answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move @mess_cursy,a14 + addk ANSWER_LINE_SPC,a14 + move a14,@mess_cursy +;D + move @mess_cursx,a0 + inc a0 + move a0,@mess_cursx ;account for width of 'D' + + movi hdr_str_d,a4,L + calla copy_rom_string + + move *a10+,a14,W ;get fourth answer + sll 5,a14 + addi answer_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string + + move *a10,a14,W ;get correct answer + move a14,@answer + +;print answer value + + movi answer_value_setup,a2 + calla setup_message + + movi RULES_ID,a0 + move a0,@mess_objid + + movi answer_val_str,a4 + calla copy_rom_string + + move @answer_value,a14 ;get fourth answer + sll 5,a14 + addi pt_str_tbl,a14 + move *a14,a4,L ;get answer string ptr. + calla concat_rom_string + calla print_string_C + + clr a14 + move a14,@force_selection + move a14,@showing_info ;not showing contest entry info + + movi 9*TSEC,a10 ;10 seconds total +;DJT Start + .ref timeout4 +;DJT End + CREATE CNTDWN_PID,timeout4 + + movk 2,a14 ;Show cursors + move a14,@trivia_page + + SLEEPK 1 ;Let them come up + + movk 1,a0 + move a0,@DISPLAYON + move a0,@dpageflip + + .ref tst_triva_sp + SOUND1 tst_triva_sp +tg_9 + SLEEPK 1 + move @plyrs_playing,a14 + jrgt tg_9 ; br=all player exited + +tg_end + move @temp_halt,a14 + move a14,@HALT + + movi RULES_ID,a0 + calla obj_del1c + calla pal_clean + + movi CYCPID,a0 + calla KIL1C + RETP + + +;----------------------------------------------------------------------------- +; This PROCESS handles the logic for the player choosing an answer +; during the TRIVIA screen +; +; INPUT: reg. a10 - player number +;----------------------------------------------------------------------------- + SUBRP plyr_select_answer + + move a10,a9 + sll 5,a9 + addi plr_struct_tbl,a9 + move *a9,a9,L ;get player data ptr. + +; move @TRIVIA_TEST,a0 +; jrnz tt_1 ;br=trivia test... + + move *a9(PR_NAME1),a14 + jrle psa_end ;br=plyr didn't enter initials + move *a9(PR_TRIVIA_PTS),a14 + cmpi TRIVIA_PTS_NEEDED,a14 + jrhs psa_end ;br=over prize level...ignore +tt_1 + movi name_setup,a2,L + calla setup_message + calla print_plr_name + + callr print_trivia_pts_str +; +; create cursor +; +tt_2 SLEEPK 1 + move @trivia_page,a14 + subk 1,a14 + jrle tt_2 + + clr a11 ;cursor position + move a10,a14 + sll 6,a14 + + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz #2pr + addi plyr_cursor_tbl2,a14 + jruc #2pr1 +#2pr addi plyr_cursor_tbl,a14 + +#2pr1 + move *a14+,a2,L + move *a14,a3,L ;get Z pos + + movi [CURSOR_X,0],a0 + movi [ANSWER_Y-2,0],a1 ;Y pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 + clr a6 + clr a7 + calla BEGINOBJ2 + + SLEEP 35 +psa_2 + SLEEPK 1 + move @trivia_page,a14 + jrz psa_2 + move @force_selection,a14 + jrnz psa_5 ;br=timed out, force selection + + move a10,a0 + calla get_stick_val_down + cmpi JOY_UP,a0 + jrne psa_3 + move a11,a11 ;zero ? + jrle psa_4 ;br=yep + dec a11 +psa_2a move *a8(OYPOS),a14 + subk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + jruc psa_4 + +psa_3 cmpi JOY_DOWN,a0 + jrne psa_4 + cmpi ANSWERS_ON_SCRN-1,a11 ;at limit ? + jrge psa_4 ;br=yep, dont move cursor + inc a11 + move *a8(OYPOS),a14 + addk ANSWER_LINE_SPC,a14 + move a14,*a8(OYPOS) + callr move_cursor_snd + +psa_4 move a10,a0 + calla get_but_val_down + cmpi TURBO_BUTTON,a0 + jreq psa_5 + cmpi SHOOT_BUTTON,a0 + jreq psa_5 + cmpi PASS_BUTTON,a0 + jrne psa_2 + +psa_5 + callr move_select_snd + JSRP flash_plyr_cursor + + move @plyrs_left,a0 + dec a0 + move a0,@plyrs_left ;player selected ANSWER !! + + PUSHP a9 + movi wrong_answer_imgs,a14 + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_5a ;br=no + movi correct_answer_imgs,a14 +psa_5a move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz psa_5b + addi 4*32,a14 ;get KIT image ptr. +psa_5b move *a14,a9,L + JSRP anim_answer_plaque + PULLP a9 + + calla DELOBJA8 ;delete players cursor + + move @answer,a0 + cmp a0,a11 ;answer correct ? + jrne psa_6a ;br=no + + move *a9(PR_TRIVIA_PTS),a14 + move @answer_value,a0 ;points to add + add a14,a0 + move a0,*a9(PR_TRIVIA_PTS) + cmpi TRIVIA_PTS_NEEDED,a0 + jrlo psa_6 ;br=not at prize level...yet + JSRP show_player_password + jruc psa_6a +psa_6 + callr update_trivia_pts_msg +psa_6a + +;;FIX!! (remove after show) +; move @jeftmp,a14,L +; cmpi QUALIFYgrn,a14 +; jrne aap5a +; movi 3*TSEC,a8 ;max time to hold +; jruc aap6 +;;FIX!! (remove after show) +aap5a + SLEEP 15 + movi 2*TSEC,a8 ;max time to hold +aap6 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz aap7 + dsj a8,aap6 +aap7 + + + move @plyrs_playing,a14 + dec a14 + move a14,@plyrs_playing +psa_end + DIE + +;----------------------------------------------------------------------------- +; Make cursor sounds +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_cursor_snd + + move a10,a14 + sll 5,a14 + addi cur_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + +;----------------------------------------------------------------------------- +; Make select sound +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR move_select_snd + + move a10,a14 + sll 5,a14 + addi select_snds_tbl,a14 + move *a14,a0,L + calla snd_play1 + rets + + + +cur_snds_tbl + .long yes_no_cur1 + .long yes_no_cur2 + .long yes_no_cur3 + .long yes_no_cur4 + + +select_snds_tbl + .long chkmrk_snd + .long chkmrk_snd2 + .long chkmrk_snd3 + .long chkmrk_snd4 + + +bas7_alt + .word 3 + .word 0,0,(1fh*32+0ch)*32+1fh + + +rules_butn_setup + PRINT_STR bast10_ascii,8,0,199,235,BAST_W_P,0 + +prize_levels_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_Y_P,0 + +trivia_rules_str_setup + PRINT_STR bast10_ascii,8,0,199,RULES_Y,BAST_W_P,0 + +hit_butn_str_setup + PRINT_STR bast8_ascii,7,0,199,HIT_BUTN_Y,BAST_W_P,0 + +question_str_setup + PRINT_STR bast10_ascii,8,0,QUESTION_X,QUESTION_Y,BAST_Y_P,0 + +answer_str_setup + PRINT_STR bast10_ascii,8,0,ANSWER_X,ANSWER_Y,BAST_W_P,0 + +trivia_game_title_setup + PRINT_STR brush20_ascii,10,0,199,5,BRSHGYOP,0 + +legal_notice_str_setup + PRINT_STR bast7t_ascii,5,0,199,LEGAL_STR_Y,BAST_W_P,0 + +answer_value_setup + PRINT_STR bast7t_ascii,5,0,199,ANSWER_VAL_Y+2,BAST_C_P,0 + + +pt_str_tbl + .long 0 + .long one_point + .long two_points + .long three_points + .long four_points + .long five_points + .long six_points + .long seven_points + .long eight_points + .long nine_points + .long ten_points + + +przg_str + .string "GRAND PRIZE",0 + .even +dprzg_str + .string "A TRIP FOR 2 TO AN NBA GAME!",0 + .even +prz1_str + .string "1ST",0 + .even +dprz1_str + .string "NBA HANGTIME",1 + .string "ARCADE GAME",0 + .even +prz2_str + .string "2ND",0 + .even +dprz2_str + .string "25 OFFICIAL",1 + .string "NBA JERSEYS",0 + .even +prz3_str + .string "3RD",0 + .even +dprz3_str + .string "1,000 HANGTIME",1 + .string "T-SHIRTS",0 + .even +ddln_str + .string "CONTEST ENDS",1 + .string "SEPTEMBER 13,1996",0 + .even +rules_butn_str + .string "HIT ANY BUTTON FOR RULES",0 + .even + +one_point + .string " 1 POINT",0 + .even +two_points + .string " 2 ",81h,0 + .even +three_points + .string " 3 ",81h,0 + .even +four_points + .string " 4 ",81h,0 + .even +five_points + .string " 5 ",81h,0 + .even +six_points + .string " 6 ",81h,0 + .even +seven_points + .string " 7 ",81h,0 + .even +eight_points + .string " 8 ",81h,0 + .even +nine_points + .string " 9 ",81h,0 + .even +ten_points + .string " 10 ",81h,0 + .even + + +trivia_game_title + .string 80h," ",81h,0 +; .string "TRIVIA CONTEST",0 + .even + +answer_val_str + .string 80h,0 +; .string "CORRECT ANSWER: ",0 + .even + +hit_butn_str + .string "HIT ANY BUTTON FOR TRIVIA QUESTION",0 +;; .string "START BUTTON BYPASSES TRIVIA CONTEST",0 + .even + +rules_str +; .string "TO SELECT AN ANSWER TO THE TRIVIA",1 +; .string "QUESTION, MOVE THE JOYSTICK UP OR DOWN",1 +; .string "AND THEN PRESS ANY BUTTON.",1 +; .string 1 + .string "RAISE YOUR TRIVIA POINT TOTAL TO",1 + .string "100 POINTS TO BECOME AN",1 + .string "NBA HANGTIME TRIVIA CHAMPION!",1 + .string 1 + .string "YOU WILL THEN BE GIVEN A SECRET",1 + .string "PASSWORD FOR ENTRY INTO THE",1 + .string "NBA HANGTIME TRIVIA SWEEPSTAKES!",1 + .even + + +trivia_mod + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRIBUTEBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_kit + .long OPTSCRBMOD ;option screen background + .word 0,0 + .long ATRBKITBMOD ;option screen background + .word 0,178 ;x,y + .long 0 + +trivia_mod_prizes + .long BKGDBMOD + .word 0,0 + .long 0 + + +; +; This table contains: +; +; 1) Question to ask +; 2) Possible answer A +; 3) Possible answer B +; 4) Possible answer C +; 5) Possible answer D +; 6) Correct answer +; +trivia_tbl + LWWWWWW question1, 1, 1, 4, 6, 7,ANSWER_B + LWWWWWW question2, 2, 12, 13,14, 15,ANSWER_C + LWWWWWW question3, 1,233,234,235,236,ANSWER_A + LWWWWWW question4, 2, 16, 17, 18, 19,ANSWER_B + LWWWWWW question5, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question6, 2, 20, 21, 22, 23,ANSWER_D + LWWWWWW question7, 2,247,235,245,236,ANSWER_A + LWWWWWW question8, 2,236,270,271,245,ANSWER_D + LWWWWWW question9, 1, 2, 3, 6, 5,ANSWER_A + LWWWWWW question10, 1, 24, 25, 17, 26,ANSWER_A + LWWWWWW question11, 2, 27, 28, 29, 18,ANSWER_A + LWWWWWW question12, 2, 30, 31, 32, 33,ANSWER_D + LWWWWWW question13, 2, 34, 12, 35, 36,ANSWER_A + LWWWWWW question14, 2, 37, 38, 36, 39,ANSWER_C + LWWWWWW question15, 1, 40, 38, 41, 42,ANSWER_A + LWWWWWW question16, 2, 24, 16, 23, 39,ANSWER_D + LWWWWWW question17, 3, 43, 44, 45, 46,ANSWER_A + LWWWWWW question18, 3, 43, 44, 45, 46,ANSWER_B + LWWWWWW question19, 3, 43, 44, 45, 46,ANSWER_C + LWWWWWW question20, 2, 43, 44, 45, 46,ANSWER_D + LWWWWWW question21, 2, 43, 44, 45, 47,ANSWER_D + LWWWWWW question22, 2,266,292,244,253,ANSWER_A + LWWWWWW question23, 2,260,270,259,274,ANSWER_A + LWWWWWW question24, 2, 12, 14, 15, 62,ANSWER_C + LWWWWWW question25, 2,308,309,310,311,ANSWER_A + LWWWWWW question26, 2, 40, 66, 67, 68,ANSWER_B + LWWWWWW question27, 2, 69, 70, 71, 72,ANSWER_B + LWWWWWW question28, 2, 20, 16, 70, 18,ANSWER_D + LWWWWWW question29, 2,306,305,307,309,ANSWER_B + LWWWWWW question30, 2, 20, 74, 37, 75,ANSWER_C + LWWWWWW question31, 2, 24, 76, 77, 13,ANSWER_B + LWWWWWW question32, 2, 78, 79, 29, 19,ANSWER_C + LWWWWWW question33, 3, 80, 81, 82, 50,ANSWER_A + LWWWWWW question34, 3, 29, 43, 47, 63,ANSWER_B + LWWWWWW question35, 3, 26, 83, 84, 78,ANSWER_C + LWWWWWW question36, 2, 64, 70, 85, 86,ANSWER_D + LWWWWWW question37, 2, 87, 88, 89, 90,ANSWER_D + LWWWWWW question38, 2, 8, 9, 10, 11,ANSWER_B + LWWWWWW question39, 2, 73, 91, 54, 92,ANSWER_C + LWWWWWW question40, 2,305,306,307,342,ANSWER_D + LWWWWWW question41, 2, 23, 73, 19, 21,ANSWER_B + LWWWWWW question42, 2, 16, 74, 70, 73,ANSWER_C + LWWWWWW question43, 2, 96, 28, 97, 26,ANSWER_D + LWWWWWW question44, 2,246,235,233,247,ANSWER_C + LWWWWWW question45, 2,271,244,254,300,ANSWER_A + LWWWWWW question46, 2,272,236,301,233,ANSWER_D + LWWWWWW question47, 2,187,188,189,190,ANSWER_D + LWWWWWW question48, 2,191,192,193,194,ANSWER_A + LWWWWWW question49, 2,198,195,207,196,ANSWER_D + LWWWWWW question50, 2,196,197,198,188,ANSWER_D + LWWWWWW question51, 2,199,200,201,191,ANSWER_C + LWWWWWW question52, 2,198,197,202,203,ANSWER_B + LWWWWWW question53, 2,192,191,204,193,ANSWER_D + LWWWWWW question54, 2,205,206,202,207,ANSWER_C + LWWWWWW question55, 2,208,188,197,189,ANSWER_B + LWWWWWW question56, 2,202,190,209,210,ANSWER_D + LWWWWWW question57, 2,206,205,210,195,ANSWER_C + LWWWWWW question58, 2,206,212,205,213,ANSWER_A + LWWWWWW question59, 2,212,189,196,213,ANSWER_B + LWWWWWW question60, 2,188,214,215,216,ANSWER_B + LWWWWWW question61, 2,163,164,165,166,ANSWER_A + LWWWWWW question62, 2,309,305,306,305,ANSWER_D + LWWWWWW question63, 2, 29, 38, 50, 16,ANSWER_B + LWWWWWW question64, 2,174,173,172,175,ANSWER_B + LWWWWWW question65, 2,170,167,169,168,ANSWER_B + LWWWWWW question66, 2, 51, 52, 33, 53,ANSWER_B + LWWWWWW question67, 2, 54, 55, 56, 57,ANSWER_C + LWWWWWW question68, 2, 58, 59, 60, 61,ANSWER_D + LWWWWWW question69, 2,243,244,235,301,ANSWER_D + LWWWWWW question70, 2, 98, 99, 35,100,ANSWER_A +; LWWWWWW question71, 2,308,343,311,310,ANSWER_B + LWWWWWW question72, 2, 14, 71, 62,101,ANSWER_C + LWWWWWW question73, 2,171,176,179,178,ANSWER_C + LWWWWWW question74, 2,102, 68,103,112,ANSWER_A + LWWWWWW question75, 3, 30, 26,104,340,ANSWER_B + LWWWWWW question76, 3,105, 64, 47, 63,ANSWER_D + LWWWWWW question77, 3,233,246,247,236,ANSWER_A + LWWWWWW question78, 3, 83,106,107, 32,ANSWER_C + LWWWWWW question79, 2, 47, 45,108, 43,ANSWER_A + LWWWWWW question80, 2,109,110, 77, 12,ANSWER_C + LWWWWWW question81, 2,248,249,250,251,ANSWER_C + LWWWWWW question82, 2,247,252,253,254,ANSWER_B + LWWWWWW question83, 2,255,221,256,257,ANSWER_A + LWWWWWW question84, 2,307,343,342,308,ANSWER_A + LWWWWWW question85, 2,219,238,251,258,ANSWER_B + LWWWWWW question86, 2,109, 85, 20, 21,ANSWER_A + LWWWWWW question87, 2,243,261,325,259,ANSWER_D + LWWWWWW question88, 2,247,252,260,261,ANSWER_A + LWWWWWW question89, 2, 50,111, 49, 69,ANSWER_A + LWWWWWW question90, 2, 18,113, 19,114,ANSWER_A + LWWWWWW question91, 2,307,305,344,311,ANSWER_C + LWWWWWW question92, 2,230,226,262,263,ANSWER_D + LWWWWWW question93, 2,115, 19,116, 21,ANSWER_D + LWWWWWW question94, 2,117,112,118, 62,ANSWER_B + LWWWWWW question95, 2, 73,114,119,107,ANSWER_D + LWWWWWW question96, 2,120,113,121, 96,ANSWER_B + LWWWWWW question97, 2, 24, 38,106,111,ANSWER_D + LWWWWWW question98, 2,122, 17,123,112,ANSWER_D + LWWWWWW question99, 2,264,223,265,256,ANSWER_C + LWWWWWW question100,2, 70, 78,124,125,ANSWER_C + LWWWWWW question101,2, 13, 70, 77, 60,ANSWER_C + LWWWWWW question102,2, 77,126,124,127,ANSWER_B + LWWWWWW question103,2, 76,128,129, 51,ANSWER_A + LWWWWWW question104,2, 70, 21, 18, 20,ANSWER_D + LWWWWWW question105,2, 23, 70, 14, 20,ANSWER_B + LWWWWWW question106,2, 70, 19, 34, 77,ANSWER_A + LWWWWWW question107,2,342,345,344,343,ANSWER_B + LWWWWWW question108,2, 20, 29, 23, 76,ANSWER_C + LWWWWWW question109,2, 70, 18, 14, 73,ANSWER_D + LWWWWWW question110,2,132, 99,133, 83,ANSWER_B + LWWWWWW question111,2,117,106,135,132,ANSWER_D + LWWWWWW question112,2,117,106,135, 86,ANSWER_A + LWWWWWW question113,2, 20,134, 26, 28,ANSWER_C + LWWWWWW question114,2,134, 26,135,136,ANSWER_B + LWWWWWW question115,2,305,345,344,343,ANSWER_A + LWWWWWW question116,2, 26, 17, 14,138,ANSWER_C + LWWWWWW question117,2, 75, 23, 78, 18,ANSWER_B + LWWWWWW question118,2, 17, 37, 73, 18,ANSWER_C + LWWWWWW question119,2,305,306,346,308,ANSWER_C + LWWWWWW question120,2,230,231,232,237,ANSWER_D + LWWWWWW question121,2,226,232,238,221,ANSWER_B + LWWWWWW question122,2, 29, 19,114, 14,ANSWER_D + LWWWWWW question123,2,217,218,219,239,ANSWER_C + LWWWWWW question124,2,302,303,341,304,ANSWER_C + LWWWWWW question125,2,220,221,222,223,ANSWER_D + LWWWWWW question126,3,224,225,226,227,ANSWER_C + LWWWWWW question127,3,228,229,240,218,ANSWER_D + LWWWWWW question128,3,241,227,239,242,ANSWER_B + LWWWWWW question129,3,123, 74,141,142,ANSWER_A + LWWWWWW question130,3,143,144,129,145,ANSWER_D + LWWWWWW question131,2,146, 98,100, 35,ANSWER_C + LWWWWWW question132,1, 98, 75,147,148,ANSWER_B + LWWWWWW question133,1,149, 38,111,150,ANSWER_B + LWWWWWW question134,1,271,247,267,274,ANSWER_B + LWWWWWW question135,1,271,247,267,274,ANSWER_A + LWWWWWW question136,1,270,247,259,274,ANSWER_C + LWWWWWW question137,1,266,267,268,243,ANSWER_D + LWWWWWW question138,1,233,244,245,234,ANSWER_D + LWWWWWW question139,2,269,252,243,260,ANSWER_A + LWWWWWW question140,2,272,273,247,233,ANSWER_C + LWWWWWW question141,2,344,345,343,342,ANSWER_B + LWWWWWW question142,2,347,345,346,311,ANSWER_A + LWWWWWW question143,2,347,342,310,343,ANSWER_D + LWWWWWW question144,2,307,344,308,343,ANSWER_B + LWWWWWW question145,2,342,348,310,342,ANSWER_B + LWWWWWW question146,2,312,313,314,331,ANSWER_B + LWWWWWW question147,2,312,313,314,332,ANSWER_B + LWWWWWW question148,2,274,273,271,266,ANSWER_A + LWWWWWW question149,2,336,337,338,339,ANSWER_B + LWWWWWW question150,2,312,313,314,326,ANSWER_A + LWWWWWW question151,2,312,313,314,334,ANSWER_A + LWWWWWW question152,2,312,313,314,335,ANSWER_B + LWWWWWW question153,1,270,254,260,234,ANSWER_A + LWWWWWW question154,2,266,253,259,254,ANSWER_D + LWWWWWW question155,2,268,266,273,271,ANSWER_A + LWWWWWW question156,2,244,233,252,243,ANSWER_B + LWWWWWW question157,2,293,294,295,296,ANSWER_C + LWWWWWW question158,2,203,189,205,206,ANSWER_B + LWWWWWW question159,2,275,276,277,278,ANSWER_C + LWWWWWW question160,2,279,280,281,275,ANSWER_B + LWWWWWW question161,2,312,314,313,321,ANSWER_B + LWWWWWW question162,2,312,314,313,316,ANSWER_B + LWWWWWW question163,2,312,314,313,324,ANSWER_B + LWWWWWW question164,2,312,314,313,317,ANSWER_B + LWWWWWW question165,2,312,314,313,330,ANSWER_C + LWWWWWW question166,2,312,314,313,332,ANSWER_A + LWWWWWW question167,2,312,314,313,323,ANSWER_B + LWWWWWW question168,2,312,314,313,315,ANSWER_B + LWWWWWW question169,2,312,314,313,316,ANSWER_C + LWWWWWW question170,2,282,283,284,285,ANSWER_A + LWWWWWW question171,2,286,287,288,289,ANSWER_C + LWWWWWW question172,2,290,291,289,288,ANSWER_C + LWWWWWW question173,2,311,310,349,348,ANSWER_C + LWWWWWW question174,2,159, 78, 22, 88,ANSWER_A + LWWWWWW question175,2,160, 30, 62, 71,ANSWER_D + LWWWWWW question176,2,261,244,245,260,ANSWER_A + LWWWWWW question177,2,289,297,298,299,ANSWER_B + LWWWWWW question178,3,289,298,299,297,ANSWER_C + LWWWWWW question179,3,307,311,309,308,ANSWER_A + LWWWWWW question180,3,269,254,247,259,ANSWER_B + LWWWWWW question181,2,269,252,272,234,ANSWER_B + LWWWWWW question182,2,310,305,345,348,ANSWER_B + LWWWWWW question183,2,343,345,310,348,ANSWER_B + LWWWWWW question184,2, 17,161,107,162,ANSWER_A + LWWWWWW question185,2,246,236,244,243,ANSWER_A + LWWWWWW question186,2,312,314,313,331,ANSWER_A + LWWWWWW question187,3,312,314,313,322,ANSWER_B + LWWWWWW question188,3,312,314,313,330,ANSWER_A + LWWWWWW question189,3,312,314,313,324,ANSWER_C + LWWWWWW question190,3,312,314,313,329,ANSWER_C + LWWWWWW question191,2,312,314,313,328,ANSWER_B + LWWWWWW question192,2,312,314,313,325,ANSWER_A + LWWWWWW question193,2,312,314,313,331,ANSWER_A + LWWWWWW question194,2,312,314,313,327,ANSWER_A + LWWWWWW question195,2,312,314,313,326,ANSWER_A + LWWWWWW question196,2,312,314,313,332,ANSWER_B + LWWWWWW question197,2,312,314,313,318,ANSWER_A + LWWWWWW question198,2,312,314,313,319,ANSWER_B + LWWWWWW question199,2,312,314,313,320,ANSWER_A +; LWWWWWW question200,2,312,314,313,334,ANSWER_A +trivia_tbl_end + .long -1 + +NBR_QUESTIONS equ (trivia_tbl_end-trivia_tbl)/(32+(16*6)) + + + +question1 + .string "WHAT COLLEGE DID SCOTTIE PIPPEN",1 + .string "ATTEND ?",0 + .even +question2 + .string "WHAT PLAYER'S DRAFT RIGHTS DID THE",1 + .string "SEATTLE SUPERSONICS TRADE FOR THE",1 + .string "DRAFT RIGHTS OF OLDEN POLYNICE ?",0 + .even +question3 + .string "WHAT TEAM DID BOBBY PHILLS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question4 + .string "WHO RECEIVED THE HIGHEST NUMBER OF FANS",1 + .string "VOTES FOR THE 1995 NBA ALL-STAR GAME ?",0 + .even +question5 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1984 NBA DRAFT ?",0 + .even +question6 + .string "WHO WAS SELECTED WITH THE FIRST OVERALL",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question7 + .string "WHAT TEAM ACQUIRED THE DRAFT RIGHTS TO",1 + .string "CHARLES OAKLEY IN 1985 ?",0 + .even +question8 + .string "WHAT NBA TEAM DRAFTED TWO PLAYERS FROM",1 + .string "THE UNIVERSITY OF ARKANSAS IN 1992 ?",0 + .even +question9 + .string "WHAT COLLEGE DID GLEN RICE ATTEND ?",0 + .even +question10 + .string "WHAT NBA PLAYER HAS THE NICKNAMES",1 + .string "THE 'WAITER' AND 'PINK PANTHER' ?",0 + .even +question11 + .string "WHAT PLAYER IS THE ALL-TIME SCORING",1 + .string "LEADER AT UNIVERSITY OF",1 + .string "TEXAS-EL PASO ?",0 + .even +question12 + .string "WHO WAS THE FIRST PLAYER IN NBA HISTORY",1 + .string "TO IMPROVE HIS SCORING AVERAGE IN EACH",1 + .string "OF HIS FIRST EIGHT YEARS IN THE LEAGUE ?",0 + .even +question13 + .string "WHAT NBA PLAYER WAS NAMED PLAYER",1 + .string "OF THE YEAR FOR THE ACC CONFERENCE",1 + .string "DURING THE 1986-87 BASKETBALL SEASON ?",0 + .even +question14 + .string "WHAT NBA PLAYER WAS NAMED PLAYER OF THE",1 + .string "YEAR FOR THE SOUTHEASTERN CONFERENCE",1 + .string "DURING THE 1987-88 BASKETBALL SEASON ?",0 + .even +question15 + .string "WHAT NBA PLAYER WAS A MEMBER OF",1 + .string "BACK-TO-BACK NCAA CHAMPIONSHIP TEAMS",1 + .string "WITH BOBBY HURLEY AND GRANT HILL ?",0 + .even +question16 + .string "WHAT NBA PLAYER WAS BORN IN TRINIDAD",1 + .string "AND RAISED IN VENEZUELA ?",0 + .even +question17 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FIRST OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question18 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE SECOND OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question19 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE THIRD OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question20 + .string "WHAT NBA PLAYER WAS SELECTED WITH",1 + .string "THE FOURTH OVERALL PICK IN THE 1995",1 + .string "NBA DRAFT ?",0 + .even +question21 + .string "WHAT NBA PLAYER WAS SELECTED WITH THE",1 + .string "FIFTH OVERALL PICK IN THE 1995 NBA DRAFT ?",0 + .even +question22 + .string "WHAT TEAM DRAFTED DAMON STOUDAMIRE IN",1 + .string "THE 1995 NBA DRAFT ?",0 + .even +question23 + .string "WHAT NBA TEAM DID OTIS THORPE PLAY FOR",1 + .string "DURING THE 1993-94 SEASON ?",0 + .even +question24 + .string "WHAT NBA PLAYER WAS THE SECOND OVERALL",1 + .string "PICK IN THE 1988 NBA DRAFT ?",0 + .even +question25 + .string "WHAT YEAR WAS STANLEY ROBERTS BORN ?",0 + .even +question26 + .string "WHAT NBA PLAYER WAS AWARDED THE",1 + .string "WOODEN AWARD IN 1990 AS COLLEGE ",1 + .string "BASKETBALLS' PLAYER OF THE YEAR ?",0 + .even +question27 + .string "WHAT NBA PLAYERS' NICKNAME IS",1 + .string "'THE WORM' ?",0 + .even +question28 + .string "WHAT NBA PLAYER CLINCHED THE SCORING",1 + .string "TITLE FOR THE 1993-94 SEASON ?",0 + .even +question29 + .string "WHAT YEAR WAS OTIS THORPE BORN ?",0 + .even +question30 + .string "WHAT NBA PLAYER WON THE SLAM DUNK",1 + .string "CONTEST FOR THE SECOND TIME IN 1995 ?",0 + .even +question31 + .string "WHAT NBA PLAYER WON THE NBA'S SIXTH",1 + .string "MAN AWARD FOR THE 1994-95 SEASON ?",0 + .even +question32 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE MAILMAN' ?",0 + .even +question33 + .string "WHAT NBA PLAYER WAS SELECTED 10TH",1 + .string "OVERALL IN THE 1993 NBA DRAFT ?",0 + .even +question34 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "BORN IN 1975 ?",0 + .even +question35 + .string "WHICH OF THE FOLLOWING NBA PLAYERS WAS",1 + .string "NOT SELECTED IN THE FIRST ROUND OF",1 + .string "THE NBA DRAFT ?",0 + .even +question36 + .string "WHICH PLAYER PLAYED IN THE CONTINENTIAL",1 + .string "BASKETBALL ASSOCIATION AND THE WORLD",1 + .string "BASKETBALL LEAGUE BEFORE JOINING THE NBA ?",0 + .even +question37 + .string "WHICH OF THE FOLLOWING NBA PLAYERS HAS",1 + .string "THE NICKNAME 'WOOKIE' ?",0 + .even +question38 + .string "WHAT COLLEGE DID SARUNAS MARCIULIONIS",1 + .string "ATTEND ?",0 + .even +question39 + .string "WHAT NBA PLAYER LED THE DENVER NUGGETS",1 + .string "IN ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question40 + .string "WHAT YEAR WAS DICKEY SIMPKINS BORN ?",0 + .even +question41 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN BLOCKED SHOTS FOR THE 1994-95 SEASON ?",0 + .even +question42 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN REBOUNDS FOR THE 1994-95 NBA SEASON ?",0 + .even +question43 + .string "WHAT PLAYER WAS THE NBA LEAGUE LEADER",1 + .string "IN ASSISTS FOR THE 1994-95",1 + .string "NBA SEASON ?",0 + .even +question44 + .string "WHAT NBA TEAM ALLOWED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question45 + .string "WHAT NBA TEAM SCORED THE MOST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question46 + .string "WHAT NBA TEAM SCORED THE FEWEST POINTS",1 + .string "PER GAME DURING THE 1994-95 SEASON ?",0 + .even +question47 + .string "WHAT IS RIK SMITS' NATIVE COUNTRY ?",0 + .even +question48 + .string "WHAT IS HAKEEM OLAJUWONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question49 + .string "WHAT IS GHEORGHE MURESANS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question50 + .string "WHAT IS TONI KUKOCS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question51 + .string "WHERE WAS PATRICK EWING BORN ?",0 + .even +question52 + .string "WHAT IS VLADE DIVACS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question53 + .string "WHAT IS DIKEMBE MUTOMBOS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question54 + .string "WHAT IS DETLEF SCHREMPFS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question55 + .string "WHAT IS DINO RADJAS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question56 + .string "WHAT IS SARUNAS MARCIULIONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question57 + .string "WHAT IS ARVYDAS SABONIS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question58 + .string "WHAT IS LUC LONGLEYS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question59 + .string "WHAT IS BILL WENNINGTONS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question60 + .string "WHAT IS GEORGE ZIDEKS' NATIVE",1 + .string "COUNTRY ?",0 + .even +question61 + .string "WHAT IS BRYANT REEVES' NICKNAME ?",0 + .even +question62 + .string "WHAT YEAR WAS CHARLES OAKLEY BORN ?",0 + .even +question63 + .string "WHAT NBA PLAYER WAS THE NUMBER TWO",1 + .string "OVERALL PICK IN THE 1992 NBA DRAFT ?",0 + .even +question64 + .string "HOW MANY NBA CHAMPIONSHIP TITLES",1 + .string "HAVE THE BOSTON CELTICS WON ?",0 + .even +question65 + .string "WHAT JERSEY NUMBER DOES ANFERNEE",1 + .string "HARDAWAY WEAR ?",0 + .even +question66 + .string "WHAT NBA PLAYER ALSO WON THE",1 + .string "HEISMAN TROPHY ?",0 + .even +question67 + .string "WHICH ONE OF THE BULLETS' PLAYERS",1 + .string "WAS ALSO A MEMBER OF THE 'FAB FIVE'",1 + .string "TEAM AT THE UNIVERSITY OF MICHIGAN ?",0 + .even +question68 + .string "WHICH NBA PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE NBA DRAFT BY THE",1 + .string "NEW JERSEY NETS IN 1995 ?",0 + .even +question69 + .string "ON WHICH NBA TEAM DID DANNY MANNING",1 + .string "BEGIN HIS CAREER ?",0 + .even +question70 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "WON THE NBA SLAM DUNK CONTEST AS A",1 + .string "MEMBER OF THE BOSTON CELTICS ?",0 + .even +;question71 +; .string "WHAT JERSEY NUMBER DID MICHAEL JORDAN ",1 +; .string "WEAR DURING THE FIRST GAME BACK IN THE",1 +; .string "NBA AFTER ENDING HIS RETIREMENT ?",0 +; .even +question72 + .string "WHO IS THE ALL-TIME LEADING SCORER IN",1 + .string "THE HISTORY OF THE INDIANA PACERS ?",0 + .even +question73 + .string "WHAT JERSEY NUMBER IS WORN BY",1 + .string "SCOTTIE PIPPEN ?",0 + .even +question74 + .string "WHICH OF THE FOLLOWING NBA PLAYERS",1 + .string "IS AMBIDEXTROUS ?",0 + .even +question75 + .string "WHICH PLAYER IS THE NBA ALL-TIME",1 + .string "LEADER IN ASSISTS ?",0 + .even +question76 + .string "WHICH PLAYER WAS SELECTED IN THE",1 + .string "FIRST ROUND OF THE 1995 NBA DRAFT BY",1 + .string "THE CHICAGO BULLS ?",0 + .even +question77 + .string "WHAT NBA TEAM DID KEVIN JOHNSON PLAY",1 + .string "FOR DURING HIS ROOKIE SEASON ?",0 + .even +question78 + .string "WHICH OF THE NBA PLAYERS WAS A MEMBER",1 + .string "OF THE 1988 NCAA MEN'S BASKETBALL",1 + .string "CHAMPIONSHIP TEAM ?",0 + .even +question79 + .string "WHAT NBA PLAYER WAS PLAYING HIGH",1 + .string "SCHOOL BASKETBALL DURING THE 1994-95",1 + .string "BASKETBALL SEASON ?",0 + .even +question80 + .string "WHAT PORTLAND TRAIL BLAZERS PLAYER",1 + .string "WEARS A HEADBAND DURING GAMES ?",0 + .even +question81 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'HORNETS' ?",0 + .even +question82 + .string "WHAT TEAM WON TWO NBA TITLES WITH",1 + .string "JOE DUMARS AS A STARTING GUARD ?",0 + .even +question83 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'MAVERICKS' ?",0 + .even +question84 + .string "WHAT YEAR WAS VINNY DEL NEGRO BORN ?",0 + .even +question85 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'JAZZ' ?",0 + .even +question86 + .string "WHAT NBA PLAYER WAS ROOKIE OF THE",1 + .string "YEAR FOR THE 1981-82 NBA SEASON ?",0 + .even +question87 + .string "WHAT NBA TEAM WON A RECORD EIGHT",1 + .string "STRAIGHT NBA CHAMPIONSHIPS ?",0 + .even +question88 + .string "WHAT TEAM WON THE NBA CHAMPIONSHIP",1 + .string "TITLE FOR THE 1990-91 SEASON ?",0 + .even +question89 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question90 + .string "WHO WAS THE NBA ROOKIE OF THE YEAR",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question91 + .string "WHAT YEAR WAS REX CHAPMAN BORN ?",0 + .even +question92 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'BUCKS' ?",0 + .even +question93 + .string "WHO WAS THE NUMBER ONE OVERALL DRAFT",1 + .string "PICK IN THE 1985 NBA DRAFT ?",0 + .even +question94 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1987 NBA DRAFT ?",0 + .even +question95 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1988 NBA DRAFT ?",0 + .even +question96 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1990 NBA DRAFT ?",0 + .even +question97 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1991 NBA DRAFT ?",0 + .even +question98 + .string "WHO WAS THE NUMBER ONE OVERALL PICK",1 + .string "IN THE 1994 NBA DRAFT ?",0 + .even +question99 + .string "WHAT CITY IS HOME TO THE NBA TEAM",1 + .string "WITH THE NAME 'RAPTORS' ?",0 + .even +question100 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1990-91 SEASON ?",0 + .even +question101 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1992-93 SEASON ?",0 + .even +question102 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1993-94 SEASON ?",0 + .even +question103 + .string "WHAT PLAYER WON THE NBA'S 6TH MAN",1 + .string "AWARD FOR THE 1994-95 SEASON ?",0 + .even +question104 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1987-88",1 + .string "SEASON ?",0 + .even +question105 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1989-90",1 + .string "SEASON ?",0 + .even +question106 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1990-91",1 + .string "SEASON ?",0 + .even +question107 + .string "WHAT YEAR WAS CALBERT CHEANEY BORN ?",0 + .even +question108 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1993-94",1 + .string "SEASON ?",0 + .even +question109 + .string "WHAT PLAYER WAS THE NBA'S DEFENSIVE",1 + .string "PLAYER OF THE YEAR FOR THE 1994-95",1 + .string "SEASON ?",0 + .even +question110 + .string "WHAT PLAYER WON THE NBA'S MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1994-95 SEASON ?",0 + .even +question111 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1993-94 SEASON ?",0 + .even +question112 + .string "WHAT PLAYER WON THE NBAS' MOST",1 + .string "IMPROVED PLAYER OF THE YEAR AWARD",1 + .string "FOR THE 1989-90 SEASON ?",0 + .even +question113 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1989-90 SEASON ?",0 + .even +question114 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1991-92 SEASON ?",0 + .even +question115 + .string "WHAT YEAR WAS CLYDE DREXLER BORN ?",0 + .even +question116 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "ASSISTS DURING THE 1994-95 SEASON ?",0 + .even +question117 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1989-90",1 + .string "SEASON ?",0 + .even +question118 + .string "WHAT NBA PLAYER LEAD THE LEAGUE IN",1 + .string "BLOCKED SHOTS DURING THE 1993-94",1 + .string "SEASON ?",0 + .even +question119 + .string "WHAT YEAR WAS VERNON MAXWELL BORN ?",0 + .even +question120 + .string "WHAT CITY HOSTED THE 1983 NBA",1 + .string "ALL-STAR GAME ?",0 + .even +question121 + .string "WHAT WAS THE HOST CITY FOR THE 1988",1 + .string "NBA ALL-STAR GAME ?",0 + .even +question122 + .string "WHO WAS NAMED MVP OF THE 1994 NBA",1 + .string "ALL-STAR GAME IN MINNEAPOLIS ?",0 + .even +question123 + .string "WHAT CITY WAS HOME TO THE JAZZ",1 + .string "BEFORE UTAH ?",0 + .even +question124 + .string "WHAT WAS THE FIRST SEASON THE",1 + .string "ORLANDO MAGIC COMPETED IN THE NBA ?",0 + .even +question125 + .string "WHEN THE WARRIORS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question126 + .string "WHEN THE LAKERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question127 + .string "WHEN THE PISTONS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question128 + .string "WHEN THE CLIPPERS FRANCHISE ENTERED",1 + .string "THE NBA, WHAT CITY WAS THEIR HOME ?",0 + .even +question129 + .string "WHAT PLAYER LED THE NBA IN PERSONAL",1 + .string "FOULS DURING THE 1994-95 SEASON ?",0 + .even +question130 + .string "WHAT PLAYER LED THE ATLANTA HAWKS IN",1 + .string "SCORING FOR THE 1994-95 SEASON ?",0 + .even +question131 + .string "WHAT PLAYER LEAD THE BOSTON CELTICS IN",1 + .string "REBOUNDS FOR THE 1994-95 SEASON ?",0 + .even +question132 + .string "WHO IS THE SHORTEST PLAYER EVER TO WIN",1 + .string "AN NBA SLAM-DUNK TITLE ?",0 + .even +question133 + .string "WHAT PLAYER LED THE CHARLOTTE HORNETS",1 + .string "IN SCORING FOR THE 1994-95 NBA SEASON ?",0 + .even +question134 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question135 + .string "WHAT TEAM DID HORACE GRANT PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question136 + .string "WHAT TEAM DID DINO RADJA PLAY FOR",1 + .string "DURING THE 1993-94 NBA SEASON ?",0 + .even +question137 + .string "WHAT TEAM DID B.J. TYLER PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question138 + .string "WHAT TEAM DID HAROLD MINER PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question139 + .string "WHAT TEAM DID MARK MACON PLAY FOR",1 + .string "DURING THE 1992-1993 NBA SEASON ?",0 + .even +question140 + .string "WHAT NBA TEAM SELECTED BYRON HOUSTON",1 + .string "IN THE 1992 NBA DRAFT ?",0 + .even +question141 + .string "WHAT YEAR WAS NICK VAN EXEL BORN ?",0 + .even +question142 + .string "WHAT YEAR WAS BRIAN WILLIAMS BORN ?",0 + .even +question143 + .string "WHAT YEAR WAS DENNIS SCOTT BORN ?",0 + .even +question144 + .string "WHAT YEAR WAS DINO RADJA BORN ?",0 + .even +question145 + .string "WHAT YEAR WAS KEN NORMAN BORN ?",0 + .even +question146 + .string "WHAT POSITION DOES PATRICK EWING",1 + .string "PLAY ?",0 + .even +question147 + .string "WHAT POSITION DOES DAVID ROBINSON",1 + .string "PLAY ?",0 + .even +question148 + .string "WHAT NBA TEAM DID ANTHONY MASON PLAY",1 + .string "FOR DURING THE 1989-90 NBA SEASON ?",0 + .even +question149 + .string "FOR WHICH BRANCH OF THE UNITED STATES",1 + .string "ARMED FORCES DID DAVID ROBINSON SERVE ?",0 + .even +question150 + .string "WHAT POSITION DOES LATRELL SPREWELL",1 + .string "PLAY ?",0 + .even +question151 + .string "WHAT POSITION DOES ANFERNEE HARDAWAY",1 + .string "PLAY ?",0 + .even +question152 + .string "WHAT POSITION DOES MATT GEIGER",1 + .string "PLAY ?",0 + .even +question153 + .string "WHAT TEAM DID CLYDE DREXLER PLAY FOR",1 + .string "DURING THE 1992-93 NBA SEASON ?",0 + .even +question154 + .string "WHAT TEAM DID TONY MASSENBURG PLAY FOR",1 + .string "DURING THE 1990-91 NBA SEASON ?",0 + .even +question155 + .string "WHAT TEAM DID LUCIOUS HARRIS PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question156 + .string "WHAT TEAM DID STEVE KERR PLAY FOR",1 + .string "DURING THE 1988-89 NBA SEASON ?",0 + .even +question157 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN TORONTO ?",0 + .even +question158 + .string "WHAT WAS THE FIRST COUNTRY OTHER THAN",1 + .string "THE UNITED STATES TO HAVE AN NBA",1 + .string "FRANCHISE ?",0 + .even +question159 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN PORTLAND ?",0 + .even +question160 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN NEW JERSEY ?",0 + .even +question161 + .string "WHAT POSITION DOES DEREK STRONG",1 + .string "PLAY ?",0 + .even +question162 + .string "WHAT POSITION DOES CHARLES SMITH",1 + .string "PLAY ?",0 + .even +question163 + .string "WHAT POSITION DOES MALIK SEALY",1 + .string "PLAY ?",0 + .even +question164 + .string "WHAT POSITION DOES TIM PERRY",1 + .string "PLAY ?",0 + .even +question165 + .string "WHAT POSITION DOES ALONZO MOURNING",1 + .string "PLAY ?",0 + .even +question166 + .string "WHAT POSITION DOES STEVE KERR",1 + .string "PLAY ?",0 + .even +question167 + .string "WHAT POSITION DOES JAMAL MASHBURN",1 + .string "PLAY ?",0 + .even +question168 + .string "WHAT POSITION DOES SAM MITCHELL",1 + .string "PLAY ?",0 + .even +question169 + .string "WHAT POSITION DOES JIM MCILVAINE",1 + .string "PLAY ?",0 + .even +question170 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MILWAUKEE ?",0 + .even +question171 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN MIAMI ?",0 + .even +question172 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN ORLANDO ?",0 + .even +question173 + .string "WHAT YEAR WAS PATRICK EWING SELECTED",1 + .string "IN THE NBA DRAFT ?",0 + .even +question174 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "THE 'POLISH RIFLE' ?",0 + .even +question175 + .string "WHAT NBA PLAYER HAS THE NICKNAME",1 + .string "'THE RIFLEMAN' ?",0 + .even +question176 + .string "WHAT NBA TEAM DID ANTHONY PEELER PLAY",1 + .string "FOR DURING THE 1994-95 SEASON ?",0 + .even +question177 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN HOUSTON ?",0 + .even +question178 + .string "WHAT IS THE NAME OF THE NBA",1 + .string "FRANCHISE IN SAN ANTONIO ?",0 + .even +question179 + .string "WHAT YEAR DID THE CHICAGO BULLS JOIN",1 + .string "THE NBA ?",0 + .even +question180 + .string "WHAT NBA TEAM DID SEAN ELLIOTT PLAY",1 + .string "FOR IN THE 1994-95 SEASON ?",0 + .even +question181 + .string "WHAT NBA TEAM DID ERIC LECKNER PLAY",1 + .string "FOR DURING THE 1994-95 NBA SEASON ? ",0 + .even +question182 + .string "WHAT YEAR WAS PATRICK EWING BORN ?",0 + .even +question183 + .string "WHAT YEAR WAS GHEORGHE MURESAN BORN ?",0 + .even +question184 + .string "WHAT NBA PLAYER'S FATHER PLAYED IN",1 + .string "THE NATIONAL FOOTBALL LEAGUE ?",0 + .even +question185 + .string "WHAT TEAM DID JOHN CROTTY PLAY FOR",1 + .string "DURING THE 1994-95 NBA SEASON ?",0 + .even +question186 + .string "WHAT POSITION DOES JOHN CROTTY",1 + .string "PLAY ?",0 + .even +question187 + .string "WHAT POSITION DOES CHRISTIAN LAETTNER",1 + .string "PLAY ?",0 + .even +question188 + .string "WHAT POSITION DOES ELLIOT PERRY",1 + .string "PLAY ?",0 + .even +question189 + .string "WHAT POSITION DOES STACEY KING",1 + .string "PLAY ?",0 + .even +question190 + .string "WHAT POSITION DOES CHRIS DUDLEY",1 + .string "PLAY ?",0 + .even +question191 + .string "WHAT POSITION DOES CEDRIC CEBALLOS",1 + .string "PLAY ?",0 + .even +question192 + .string "WHAT POSITION DOES B.J. TYLER",1 + .string "PLAY ?",0 + .even +question193 + .string "WHAT POSITION DOES JOHN STARKS",1 + .string "PLAY ?",0 + .even +question194 + .string "WHAT POSITION DOES BRIAN SHAW",1 + .string "PLAY ?",0 + .even +question195 + .string "WHAT POSITION DOES HERSEY HAWKINS",1 + .string "PLAY ?",0 + .even +question196 + .string "WHAT POSITION DOES DANNY FERRY",1 + .string "PLAY ?",0 + .even +question197 + .string "WHAT POSITION DOES WINSTON GARLAND",1 + .string "PLAY ?",0 + .even +question198 + .string "WHAT POSITION DOES HARVEY GRANT",1 + .string "PLAY ?",0 + .even +question199 + .string "WHAT POSITION DOES ROBERT PACK",1 + .string "PLAY ?",0 + .even +;question200 +; .string "WHAT POSITION DOES RYAN LORTHRIDGE",1 +; .string "PLAY ?",0 +; .even + + + +answer_tbl + .long answr1 ;0 + .long answr1 ;1 + .long answr2 + .long answr3 + .long answr4 + .long answr5 + .long answr6 + .long answr7 + .long answr8 + .long answr9 + .long answr10 + .long answr11 + .long answr12 + .long answr13 + .long answr14 + .long answr15 + .long answr16 + .long answr17 + .long answr18 + .long answr19 + .long answr20 + .long answr21 + .long answr22 + .long answr23 + .long answr24 + .long answr25 + .long answr26 + .long answr27 + .long answr28 + .long answr29 + .long answr30 + .long answr31 + .long answr32 + .long answr33 + .long answr34 + .long answr35 + .long answr36 + .long answr37 + .long answr38 + .long answr39 + .long answr40 + .long answr41 + .long answr42 + .long answr43 + .long answr44 + .long answr45 + .long answr46 + .long answr47 + .long answr48 + .long answr49 + .long answr50 + .long answr51 + .long answr52 + .long answr53 + .long answr54 + .long answr55 + .long answr56 + .long answr57 + .long answr58 + .long answr59 + .long answr60 + .long answr61 + .long answr62 + .long answr63 + .long answr64 + .long answr65 + .long answr66 + .long answr67 + .long answr68 + .long answr69 + .long answr70 + .long answr71 + .long answr72 + .long answr73 + .long answr74 + .long answr75 + .long answr76 + .long answr77 + .long answr78 + .long answr79 + .long answr80 + .long answr81 + .long answr82 + .long answr83 + .long answr84 + .long answr85 + .long answr86 + .long answr87 + .long answr88 + .long answr89 + .long answr90 + .long answr91 + .long answr92 + .long answr93 + .long answr94 + .long answr95 + .long answr96 + .long answr97 + .long answr98 + .long answr99 + .long answr100 + .long answr101 + .long answr102 + .long answr103 + .long answr104 + .long answr105 + .long answr106 + .long answr107 + .long answr108 + .long answr109 + .long answr110 + .long answr111 + .long answr112 + .long answr113 + .long answr114 + .long answr115 + .long answr116 + .long answr117 + .long answr118 + .long answr119 + .long answr120 + .long answr121 + .long answr122 + .long answr123 + .long answr124 + .long answr125 + .long answr126 + .long answr127 + .long answr128 + .long answr129 + .long answr130 + .long answr131 + .long answr132 + .long answr133 + .long answr134 + .long answr135 + .long answr136 + .long answr137 + .long answr138 + .long answr139 + .long answr140 + .long answr141 + .long answr142 + .long answr143 + .long answr144 + .long answr145 + .long answr146 + .long answr147 + .long answr148 + .long answr149 + .long answr150 + .long answr151 + .long answr152 + .long answr153 + .long answr154 + .long answr155 + .long answr156 + .long answr157 + .long answr158 + .long answr159 + .long answr160 + .long answr161 + .long answr162 + .long answr163 + .long answr164 + .long answr165 + .long answr166 + .long answr167 + .long answr168 + .long answr169 + .long answr170 + .long answr171 + .long answr172 + .long answr173 + .long answr174 + .long answr175 + .long answr176 + .long answr177 + .long answr178 + .long answr179 + .long answr180 + .long answr181 + .long answr182 + .long answr183 + .long answr184 + .long answr185 + .long answr186 + .long answr187 + .long answr188 + .long answr189 + .long answr190 + .long answr191 + .long answr192 + .long answr193 + .long answr194 + .long answr195 + .long answr196 + .long answr197 + .long answr198 + .long answr199 + .long answr200 + .long answr201 + .long answr202 + .long answr203 + .long answr204 + .long answr205 + .long answr206 + .long answr207 + .long answr208 + .long answr209 + .long answr210 + .long answr211 + .long answr212 + .long answr213 + .long answr214 + .long answr215 + .long answr216 + .long answr217 + .long answr218 + .long answr219 + .long answr220 + .long answr221 + .long answr222 + .long answr223 + .long answr224 + .long answr225 + .long answr226 + .long answr227 + .long answr228 + .long answr229 + .long answr230 + .long answr231 + .long answr232 + .long answr233 + .long answr234 + .long answr235 + .long answr236 + .long answr237 + .long answr238 + .long answr239 + .long answr240 + .long answr241 + .long answr242 + .long answr243 + .long answr244 + .long answr245 + .long answr246 + .long answr247 + .long answr248 + .long answr249 + .long answr250 + .long answr251 + .long answr252 + .long answr253 + .long answr254 + .long answr255 + .long answr256 + .long answr257 + .long answr258 + .long answr259 + .long answr260 + .long answr261 + .long answr262 + .long answr263 + .long answr264 + .long answr265 + .long answr266 + .long answr267 + .long answr268 + .long answr269 + .long answr270 + .long answr271 + .long answr272 + .long answr273 + .long answr274 + .long answr275 + .long answr276 + .long answr277 + .long answr278 + .long answr279 + .long answr280 + .long answr281 + .long answr282 + .long answr283 + .long answr284 + .long answr285 + .long answr286 + .long answr287 + .long answr288 + .long answr289 + .long answr290 + .long answr291 + .long answr292 + .long answr293 + .long answr294 + .long answr295 + .long answr296 + .long answr297 + .long answr298 + .long answr299 + .long answr300 + .long answr301 + .long answr302 + .long answr303 + .long answr304 + .long answr305 + .long answr306 + .long answr307 + .long answr308 + .long answr309 + .long answr310 + .long answr311 + .long answr312 + .long answr313 + .long answr314 + .long answr315 + .long answr316 + .long answr317 + .long answr318 + .long answr319 + .long answr320 + .long answr321 + .long answr322 + .long answr323 + .long answr324 + .long answr325 + .long answr326 + .long answr327 + .long answr328 + .long answr329 + .long answr330 + .long answr331 + .long answr332 + .long answr333 + .long answr334 + .long answr335 + .long answr336 + .long answr337 + .long answr338 + .long answr339 + .long answr340 + .long answr341 + .long answr342 + .long answr343 + .long answr344 + .long answr345 + .long answr346 + .long answr347 + .long answr348 + .long answr349 + .long answr349 + .long answr349 +answer_tbl_end + + +answr1 + .string "UNIVERSITY OF NORTH CAROLINA",0 +answr2 + .string "UNIVERSITY OF MICHIGAN",0 +answr3 + .string "UNIVERSITY OF MIAMI",0 +answr4 + .string "UNIVERSITY OF ARKANSAS",0 +answr5 + .string "DEPAUL UNIVERSITY",0 +answr6 + .string "INDIANA UNIVERSITY",0 +answr7 + .string "UCLA",0 +answr8 + .string "GEORGETOWN UNIVERSITY",0 +answr9 + .string "UNIVERSITY OF VILNIUS",0 +answr10 + .string "SYRACUSE UNIVERSITY",0 +answr11 + .string "FLORIDA STATE UNIVERSITY",0 +answr12 + .string "HARVEY GRANT",0 +answr13 + .string "RICKY PIERCE",0 +answr14 + .string "SCOTTIE PIPPEN",0 +answr15 + .string "RICK SMITS",0 +answr16 + .string "B.J. TYLER",0 +answr17 + .string "GRANT HILL",0 +answr18 + .string "DAVID ROBINSON",0 +answr19 + .string "TONI KUKOC",0 +answr20 + .string "HORACE GRANT",0 +answr21 + .string "PATRICK EWING",0 +answr22 + .string "CLYDE DREXLER",0 +answr23 + .string "HAKEEM OLAJUWON",0 +answr24 + .string "TONI KUKOC",0 +answr25 + .string "ED PINCKNEY",0 +answr26 + .string "JOHN STOCKTON",0 +answr27 + .string "LATRELL SPREWELL",0 +answr28 + .string "TIM HARDAWAY",0 +answr29 + .string "KARL MALONE",0 +answr30 + .string "B.J. ARMSTRONG",0 +answr31 + .string "KENNY SMITH",0 +answr32 + .string "DANNY FERRY",0 +answr33 + .string "DEREK HARPER",0 +answr34 + .string "HORACE GRANT",0 +answr35 + .string "RICK FOX",0 +answr36 + .string "WILL PERDUE",0 +answr37 + .string "HAROLD MINER",0 +answr38 + .string "ALONZO MOURNING",0 +answr39 + .string "CARL HERRERA",0 +answr40 + .string "CHRISTIAN LAETTNER",0 +answr41 + .string "JAMAL MASHBURN",0 +answr42 + .string "STEVE KERR",0 +answr43 + .string "JOE SMITH",0 +answr44 + .string "ANTONIO MCDYESS",0 +answr45 + .string "JERRY STACKHOUSE",0 +answr46 + .string "RASHEED WALLACE",0 +answr47 + .string "KEVIN GARNETT",0 +answr48 + .string "DENNIS SCOTT",0 +answr49 + .string "ANFERNEE HARDAWAY",0 +answr50 + .string "CHRIS WEBBER",0 +answr51 + .string "CHARLES SMITH",0 +answr52 + .string "CHARLIE WARD",0 +answr53 + .string "MONTY WILLIAMS",0 +answr54 + .string "JALEN ROSE",0 +answr55 + .string "CALBERT CHEANEY",0 +answr56 + .string "JUWAN HOWARD",0 +answr57 + .string "BRENT PRICE",0 +answr58 + .string "ARMON GILLIAM",0 +answr59 + .string "YINKA DARE",0 +answr60 + .string "DAN MAJERLE",0 +answr61 + .string "ED O'BANNON",0 +answr62 + .string "REGGIE MILLER",0 +answr63 + .string "JASON CAFFEY",0 +answr64 + .string "DICKEY SIMPKINS",0 +answr65 + .string "SCOTT WILLIAMS ",0 +answr66 + .string "LIONEL SIMMONS",0 +answr67 + .string "BRIAN SHAW",0 +answr68 + .string "OLIVER MILLER",0 +answr69 + .string "GLEN ROBINSON",0 +answr70 + .string "DENNIS RODMAN",0 +answr71 + .string "CHUCK PERSON",0 +answr72 + .string "KEVIN WILLIS",0 +answr73 + .string "DIKEMBE MUTOMBO",0 +answr74 + .string "SHAWN KEMP",0 +answr75 + .string "SPUD WEBB",0 +answr76 + .string "ANTHONY MASON",0 +answr77 + .string "CLIFFORD ROBINSON",0 +answr78 + .string "VIN BAKER",0 +answr79 + .string "VERN FLEMING",0 +answr80 + .string "LINDSEY HUNTER",0 +answr81 + .string "BLUE EDWARDS",0 +answr82 + .string "TONY DUMAS",0 +answr83 + .string "GLEN RICE",0 +answr84 + .string "NICK VAN EXEL",0 +answr85 + .string "TERRY CUMMINGS",0 +answr86 + .string "JOHN STARKS",0 +answr87 + .string "SEAN ROOKS",0 +answr88 + .string "BILL WENNINGTON",0 +answr89 + .string "REGGIE MILLER",0 +answr90 + .string "AVERY JOHNSON",0 +answr91 + .string "MARK MACON",0 +answr92 + .string "TOM HAMMONDS",0 +answr93 + .string "LUC LONGLEY",0 +answr94 + .string "OLDEN POLYNICE",0 +answr95 + .string "STANLEY ROBERTS",0 +answr96 + .string "KENNY ANDERSON",0 +answr97 + .string "ROD STRICKLAND",0 +answr98 + .string "DEE BROWN",0 +answr99 + .string "DANA BARROS",0 +answr100 + .string "DINO RADJA",0 +answr101 + .string "BYRON SCOTT",0 +answr102 + .string "SARUNAS MARCIULIONIS",0 +answr103 + .string "CHRIS MULLIN",0 +answr104 + .string "RODNEY RODGERS",0 +answr105 + .string "ISAIAH RIDER",0 +answr106 + .string "PERVIS ELLISON",0 +answr107 + .string "DANNY MANNING",0 +answr108 + .string "TYUS EDNEY",0 +answr109 + .string "BUCK WILLIAMS",0 +answr110 + .string "CHRIS DUDLEY",0 +answr111 + .string "LARRY JOHNSON",0 +answr112 + .string "GLENN ROBINSON",0 +answr113 + .string "DERRICK COLEMAN",0 +answr114 + .string "MITCH RICHMOND",0 +answr115 + .string "RIK SMITS",0 +answr116 + .string "BRAD DAUGHERTY",0 +answr117 + .string "RONY SEIKALY",0 +answr118 + .string "MARK JACKSON",0 +answr119 + .string "A.C. GREEN",0 +answr120 + .string "DONYELL MARSHALL",0 +answr121 + .string "TOM GUGLIOTTA",0 +answr122 + .string "JOE KLEIN",0 +answr123 + .string "SHAWN BRADLEY",0 +answr124 + .string "DETLEF SCHREMPF",0 +answr125 + .string "KENDALL GILL",0 +answr126 + .string "DELL CURRY",0 +answr127 + .string "VERNON MAXWELL",0 +answr128 + .string "JAYSON WILLIAMS",0 +answr129 + .string "STEVE SMITH",0 +answr130 + .string "SEAN ELLIOTT",0 +answr131 + .string "GARY CANTON",0 +answr132 + .string "DON MACLEAN",0 +answr133 + .string "MAHMOUD ABDUL-RAUF",0 +answr134 + .string "GARY PAYTON ",0 +answr135 + .string "KEVIN JOHNSON",0 +answr136 + .string "MARK PRICE",0 +answr137 + .string "NATE MCMILLAN",0 +answr138 + .string "POOU RICHARDSON",0 +answr139 + .string "MICHAEL CAGE",0 +answr140 + .string "CHARLES OAKLEY",0 +answr141 + .string "TODD DAY",0 +answr142 + .string "EDDIE JONES",0 +answr143 + .string "MOOKIE BLAYLOCK",0 +answr144 + .string "GRANT LONG",0 +answr145 + .string "STACEY AUGMON",0 +answr146 + .string "ERIC MONTROS",0 +answr147 + .string "ISAIAH RIDES",0 +answr148 + .string "TYRONE BOUGES",0 +answr149 + .string "HERSEY HAWKINS",0 +answr150 + .string "SCOTT BURRELL",0 +answr151 + .string "LENNY WILKENS",0 +answr152 + .string "PAT RILEY",0 +answr153 + .string "DON NELSON",0 +answr154 + .string "PHIL JACKSON",0 +answr155 + .string "COTTON FITZSIMMONS",0 +answr156 + .string "DICK MOTTA",0 +answr157 + .string "MIKE DUNLEAVY",0 +answr158 + .string "BOB HILL",0 +answr159 + .string "ERIC PIATOWSKI",0 +answr160 + .string "ERIC MONTROSS",0 +answr161 + .string "ADAM KEEFE",0 +answr162 + .string "BYRON HOUSTON",0 +answr163 + .string "BIG COUNTRY",0 +answr164 + .string "BIG DOG",0 +answr165 + .string "BIG HURT",0 +answr166 + .string "BIG GUY",0 +answr167 + .string "1",0 +answr168 + .string "3",0 +answr169 + .string "10",0 +answr170 + .string "11",0 +answr171 + .string "13",0 +answr172 + .string "15",0 +answr173 + .string "16",0 +answr174 + .string "17",0 +answr175 + .string "19",0 +answr176 + .string "21",0 +answr177 + .string "23",0 +answr178 + .string "32",0 +answr179 + .string "33",0 +answr180 + .string "45",0 +answr181 + .string "54",0 +answr182 + .string "90",0 +answr183 + .string "FIRST",0 +answr184 + .string "SECOND",0 +answr185 + .string "THIRD",0 +answr186 + .string "FOURTH",0 +answr187 + .string "NEW ZEALAND",0 +answr188 + .string "CROATIA",0 +answr189 + .string "CANADA",0 +answr190 + .string "HOLLAND",0 +answr191 + .string "NIGERIA",0 +answr192 + .string "SUDAN",0 +answr193 + .string "ZAIRE",0 +answr194 + .string "ALGERIA",0 +answr195 + .string "RUSSIA",0 +answr196 + .string "ROMANIA",0 +answr197 + .string "YUGOSLAVIA",0 +answr198 + .string "SPAIN",0 +answr199 + .string "NEW YORK",0 +answr200 + .string "ST. THOMAS",0 +answr201 + .string "JAMAICA",0 +answr202 + .string "GERMANY",0 +answr203 + .string "MEXICO",0 +answr204 + .string "ST. CROIX",0 +answr205 + .string "FRANCE",0 +answr206 + .string "AUSTRALIA",0 +answr207 + .string "ENGLAND",0 +answr208 + .string "ITALY",0 +answr209 + .string "SWEDEN",0 +answr210 + .string "LITHUANIA",0 +answr211 + .string "AUSTRALIA",0 +answr212 + .string "UNITED STATES OF AMERICA",0 +answr213 + .string "BRAZIL",0 +answr214 + .string "CZECH REPUBLIC",0 +answr215 + .string "SOUTH AFRICA",0 +answr216 + .string "SCOTLAND",0 +answr217 + .string "KANSAS CITY",0 +answr218 + .string "FT. WAYNE",0 +answr219 + .string "NEW ORLEANS",0 +answr220 + .string "DENVER",0 +answr221 + .string "PHOENIX",0 +answr222 + .string "PITTSBURGH",0 +answr223 + .string "PHILADELPHIA",0 +answr224 + .string "DES MOINES",0 +answr225 + .string "MADISON",0 +answr226 + .string "MINNEAPOLIS",0 +answr227 + .string "BUFFALO",0 +answr228 + .string "SOUTH BEND",0 +answr229 + .string "GARY",0 +answr230 + .string "BOSTON ",0 +answr231 + .string "ATLANTA",0 +answr232 + .string "CHICAGO",0 +answr233 + .string "CLEVELAND CAVALIERS",0 +answr234 + .string "MIAMI HEAT",0 +answr235 + .string "NEW YORK KNICKS",0 +answr236 + .string "SACRAMENTO KINGS",0 +answr237 + .string "LOS ANGELES",0 +answr238 + .string "SALT LAKE CITY",0 +answr239 + .string "CINCINNATI",0 +answr240 + .string "KALAMAZOO",0 +answr241 + .string "SAN DIEGO",0 +answr242 + .string "ST. LOUIS",0 +answr243 + .string "PHILADELPHIA 76ERS",0 +answr244 + .string "PHOENIX SUNS",0 +answr245 + .string "MILWAUKEE BUCKS",0 +answr246 + .string "UTAH JAZZ",0 +answr247 + .string "CHICAGO BULLS",0 +answr248 + .string "ORLANDO",0 +answr249 + .string "MIAMI",0 +answr250 + .string "CHARLOTTE",0 +answr251 + .string "PORTLAND",0 +answr252 + .string "DETROIT PISTONS",0 +answr253 + .string "INDIANA PACERS",0 +answr254 + .string "SAN ANTONIO SPURS",0 +answr255 + .string "DALLAS",0 +answr256 + .string "SAN ANTONIO",0 +answr257 + .string "MINNESOTA",0 +answr258 + .string "MEMPHIS",0 +answr259 + .string "BOSTON CELTICS",0 +answr260 + .string "HOUSTON ROCKETS",0 +answr261 + .string "LOS ANGELES LAKERS",0 +answr262 + .string "CLEVELAND",0 +answr263 + .string "MILWAUKEE",0 +answr264 + .string "RENO",0 +answr265 + .string "TORONTO",0 +answr266 + .string "TORONTO RAPTORS",0 +answr267 + .string "CHARLOTTE HORNETS",0 +answr268 + .string "DALLAS MAVERICKS",0 +answr269 + .string "DENVER NUGGETS",0 +answr270 + .string "PORTLAND TRAIL BLAZERS",0 +answr271 + .string "ORLANDO MAGIC",0 +answr272 + .string "GOLDEN STATE WARRIORS",0 +answr273 + .string "SEATTLE SUPERSONICS",0 +answr274 + .string "NEW JERSEY NETS",0 +answr275 + .string "KINGS",0 +answr276 + .string "PUPPYDOGS",0 +answr277 + .string "TRAIL BLAZERS",0 +answr278 + .string "PRINCES",0 +answr279 + .string "KNICKS",0 +answr280 + .string "NETS",0 +answr281 + .string "DEVILS",0 +answr282 + .string "BUCKS",0 +answr283 + .string "BULLS",0 +answr284 + .string "PACERS",0 +answr285 + .string "CHEESEHEADS",0 +answr286 + .string "DOLPHINS",0 +answr287 + .string "HURRICANES",0 +answr288 + .string "HEAT",0 +answr289 + .string "MAGIC",0 +answr290 + .string "DUCKS",0 +answr291 + .string "MICE",0 +answr292 + .string "VANCOUVER GRIZZLIES",0 +answr293 + .string "GRIZZLIES",0 +answr294 + .string "TORNADOES",0 +answr295 + .string "RAPTORS",0 +answr296 + .string "CANADIANS",0 +answr297 + .string "ROCKETS",0 +answr298 + .string "SUNS",0 +answr299 + .string "SPURS",0 +answr300 + .string "MINNESOTA TIMBERWOLVES",0 +answr301 + .string "LOS ANGELES CLIPPERS",0 +answr302 + .string "1989-90",0 +answr303 + .string "1988-89",0 +answr304 + .string "1990-91",0 +answr305 + .string "1962",0 +answr306 + .string "1963",0 +answr307 + .string "1966",0 +answr308 + .string "1970",0 +answr309 + .string "1974",0 +answr310 + .string "1983",0 +answr311 + .string "1991",0 +answr312 + .string "GUARD",0 +answr313 + .string "CENTER",0 +answr314 + .string "FORWARD",0 +answr315 + .string "HALFBACK",0 +answr316 + .string "SHORTSTOP",0 +answr317 + .string "PLACE KICKER",0 +answr318 + .string "QUARTERBACK",0 +answr319 + .string "FREE SAFTEY",0 +answr320 + .string "FULLBACK",0 +answr321 + .string "LEFT WING",0 +answr322 + .string "RIGHT WING",0 +answr323 + .string "CENTERFIELD",0 +answr324 + .string "LINEBACKER",0 +answr325 + .string "FIRST BASEMAN",0 +answr326 + .string "SECOND BASEMAN",0 +answr327 + .string "PUNTER",0 +answr328 + .string "CENTER FIELDER",0 +answr329 + .string "LEFT TACKLE",0 +answr330 + .string "WIDE RECEIVER",0 +answr331 + .string "GOALIE",0 +answr332 + .string "CATCHER",0 +answr333 + .string "SECOND BASE",0 +answr334 + .string "REFEREE",0 +answr335 + .string "STRIKER",0 +answr336 + .string "ARMY",0 +answr337 + .string "NAVY",0 +answr338 + .string "AIR FORCE",0 +answr339 + .string "MARINES",0 +answr340 + .string "JOE DUMARS",0 +answr341 + .string "1987-88",0 +answr342 + .string "1972",0 +answr343 + .string "1968",0 +answr344 + .string "1967",0 +answr345 + .string "1971",0 +answr346 + .string "1965",0 +answr347 + .string "1969",0 +answr348 + .string "1964",0 +answr349 + .string "1985",0 + .even + + + + +hdr_str_a + .string "A) ",0 + .even +hdr_str_b + .string "B) ",0 + .even +hdr_str_c + .string "C) ",0 + .even +hdr_str_d + .string "D) ",0 + .even + + + .asg 41,CONGRATS_Y + .asg 73,ENTRY_Y + .asg 125,ADDRESS_Y + .asg 166,ENTRY_DATE_Y + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBR print_trivia_entry_msg + + move @showing_info,a14 + jrnz ptem_1 ;br=already printed info + inc a14 + move a14,@showing_info + + calla pal_clean + + movi congrats_str_setup,a2 + calla setup_message + movi congrats_str,a4 + calla print_string_C2 + +; .ref CYCLE_TABLE,BSTCYCB_P +; movi [1,31],a8 ;START AT COLOR 10, CYCLE 7 COLORS +; movi BST18B2_P,a9 ;PAL NAME +; movi BSTCYCB_P,a10 +; movk 2,a11 ;RATE OF CYCLE IN TICKS +; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE + + movi trivia_entry_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_entry_str,a4 + calla print_string_C2 + + movi trivia_address_str_setup,a2 + calla setup_message + movk 12,a0 + move a0,@mess_line_spacing + movi trivia_addr_str,a4 + calla print_string_C2 + + movi entry_date_str_setup,a2 + calla setup_message + movi entry_data_str,a4 + calla print_string_C2 +ptem_1 rets + + + +congrats_str_setup + PRINT_STR bast18_ascii,10,0,199,CONGRATS_Y,BSTGWWOP,0 + +trivia_entry_str_setup + PRINT_STR bast8t_ascii,6,0,199,ENTRY_Y,BAST_Y_P,0 + +trivia_address_str_setup + PRINT_STR bast8t_ascii,6,0,199,ADDRESS_Y,BAST_W_P,0 + +entry_date_str_setup + PRINT_STR bast7t_ascii,6,0,199,ENTRY_DATE_Y,BAST_Y_P,0 + +congrats_str + .string "CONGRATUATIONS !!!",0 + .even + +trivia_entry_str + .string "TO BE ENTERD INTO A DRAWING FOR VALUABLE PRIZES,",1 + .string "SEND YOUR PASSWORD, GAME NAME AND PIN NUMBER,",1 + .string "ALONG WITH YOUR FULL NAME, AGE, ADDRESS AND",1 + .string "PHONE NUMBER TO:",0 + +trivia_addr_str + .string "NBA HANGTIME TRIVIA GAME ENTRIES",1 + .string "P.O. BOX 52990, DEP. 7526",1 + .string "PHOENIX, AZ. 85072-2990",0 + .even + +entry_data_str + .string "ENTRIES MUST BE RECEIVED BY SEPTEMBER 13, 1996",0 + .even + +;----------------------------------------------------------------------------- +; This routine prints the player TRIVIA POINT count in his/her +; attribute box +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP print_trivia_pts_str + + movi trivia_title_setup,a2,L + calla setup_message + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + move a0,@mess_objid + + movi init_x,a14,L + move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players + jrz psa_0a + movi kit_x,a14,L ;kit x vals +psa_0a + move a10,a1 + sll 4,a1 + add a1,a14 + move *a14,a14 ;get center X coor. + move a14,@mess_cursx + + movi str_trivia_pts,a4 + calla print_string_C2 + + move @mess_cursy,a0 + addk 13,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 + move a1,@message_palette,L + move *a9(PR_TRIVIA_PTS),a0 + jrnz psa_0 + movi str_zero,a4 + calla print_string_C2 + jruc psa_1 +psa_0 movi 200,a1 ;max value + calla dec_to_asc + calla print_string_C3 ;centered +psa_1 + rets + + + +trivia_title_setup + PRINT_STR bast8t_ascii,7,1,200,TRIVIA_PTS_Y,BAST_Y_P,0 + +str_trivia_pts .string 98h,0 +;str_trivia_pts .string "TRIVIA PTS:",0 + .even + +str_zero .string "NONE",0 + .even + +name_setup + PRINT_STR bast8_ascii,7,0,200,NAME_Y,BAST_W_P,0 + + +plr_struct_tbl + .long player1_data + .long player2_data + .long player3_data + .long player4_data + +plyr_cursor_tbl + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA3,7000,0 + LWW TRIVIA4,8000,0 + +plyr_cursor_tbl2 + LWW TRIVIA1,5000,0 + LWW TRIVIA1,5000,0 + LWW TRIVIA2,6000,0 + LWW TRIVIA2,6000,0 + + +correct_answer_imgs + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn ;For kit + .long CORECTgrn + .long CORECTgrn + .long CORECTgrn + +; .long CORECTblu +; .long CORECTgrn +; .long CORECTyel +; .long CORECTred +; .long CORECTgrn ;For kit +; .long CORECTblu +; .long CORECTred +; .long CORECTyel + +wrong_answer_imgs + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred + .long INCRECTred ;For kit + .long INCRECTred + .long INCRECTred + .long INCRECTred + +; .long INCRECTblu +; .long INCRECTgrn +; .long INCRECTyel +; .long INCRECTred +; .long INCRECTgrn ;For kit +; .long INCRECTblu +; .long INCRECTred +; .long INCRECTyel + + +;----------------------------------------------------------------------------- +; This routine shows the player the instructions/password for +; reaching the trivia point prize level +; +; INPUT: reg a10 - player number +; RETURN: nothing +;----------------------------------------------------------------------------- + SUBRP show_player_password + +;delete question and answers + + movi RULES_ID,a0 + calla obj_del1c + +;delete trivia points msg + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + SLEEPK 1 + + callr print_trivia_entry_msg + + PUSHP a9 + JSRP drop_qualify_plaque + PULLP a9 + +;delete trivia points msg. + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a1,W + callr print_plr_password + + SLEEP 30 + movi 5*TSEC,a8 ;max time to hold +wlp_1 + SLEEPK 1 + move a10,a0 + calla get_but_val_down + jrnz wlp_2 + dsj a8,wlp_1 +wlp_2 + +;delete players password + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + RETP + +;----------------------------------------------------------------------------- +; Drops the 'TRIVIA DRAWING QUALIFIER' plaque +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR drop_qualify_plaque + + movi trivia_qualify_imgs,a14 + move a10,a0 + sll 5,a0 + add a0,a14 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz spp_1 + addi 4*32,a14 ;get KIT image ptr. +spp_1 move *a14,a9,L + JSRP anim_answer_plaque + RETP + +;----------------------------------------------------------------------------- +; A PROCESS to drop the 'TRIVIA DRAWING QUALIFIER' plaque +;----------------------------------------------------------------------------- + SUBR qualify_plaque + + JSRP drop_qualify_plaque + DIE + + + +trivia_qualify_imgs + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn ;For kit + .long QUALIFYgrn + .long QUALIFYgrn + .long QUALIFYgrn + +; .long QUALIFYblu +; .long QUALIFYgrn +; .long QUALIFYyel +; .long QUALIFYred +; .long QUALIFYgrn ;For kit +; .long QUALIFYblu +; .long QUALIFYred +; .long QUALIFYyel + +;----------------------------------------------------------------------------- +; This routine deletes and reprints the players trivia points message +; +; INPUT: reg a10 - player number +;----------------------------------------------------------------------------- + SUBR update_trivia_pts_msg + + move a10,a0 + sll 4,a0 + addi pts_id_tbl,a0 + move *a0,a0,W + calla obj_del1c + + callr print_trivia_pts_str + rets + + + +pts_id_tbl + .word TRIVIA_PTS_1_ID + .word TRIVIA_PTS_2_ID + .word TRIVIA_PTS_3_ID + .word TRIVIA_PTS_4_ID + +;DJT Start + .endif ;TRIVCON +;DJT End + + + .asg 183,PLAQUE_Y + +;DJT Start + + .if TRIVCON + +;DJT End +;;FIX!! (remove after show) +; .bss jeftmp,32 +;;FIX!! (remove after show) + +;----------------------------------------------------------------------------- +; This routine drops a plaque into the players TV area +; +; INPUT: reg a10 - player number +; reg a9 - ptr. to plaque image to drop +;----------------------------------------------------------------------------- + SUBRP anim_answer_plaque + + PUSHP a8 +; move a9,@jeftmp,L +aap_0 + SLEEPK 1 + move @plyrs_left,a14 + jrgt aap_0 + + movi CNTDWN_PID,a0 + calla KIL1C + movi TRIVIA_TIMER,a0 + calla obj_del1c + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap1 + addk 4,a0 ;add in offset for 2 PLYR KIT +aap1 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y-(16*16),0],a1 ;y val + move a9,a2 + movi 20300,a3 ;z (allow FULLGAME PLAQUE over it) + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + movi [16,0],a7 ;y vel + calla BEGINOBJ2 + + move a10,a0 + sll 5,a0 + addi plaque_snds,a0 + move *a0,a0,L + calla snd_play1 +aap2 + SLEEPK 1 + move *a8(OYPOS),a0 + cmpi PLAQUE_Y,a0 + jrlt aap2 + clr a0 + move a0,*a8(OYVEL),L + + move a10,a0 + sll 5,a0 + addi plaque_lnds_snds,a0 + move *a0,a0,L + calla snd_play1 + + PUSHP a10 + movk 22,a10 + calla SHAKER2 + PULLP a10 + + move a10,a9 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz aap3 + addk 4,a9 ;add in offset for 2 PLYR KIT +aap3 sll 5,a9 + addi plaque_flsh_pals,a9 + move *a9,a9,L ;get pal flash tbl ptr. +aap4 + move *a9+,a0,L ;at end of table ? + jrnn aap5 ;br=yes + calla pal_getf +;FIX!! +; move a0,*a8(OPAL),L + SLEEPK 3 + jruc aap4 +aap5 + SLEEP 68 + calla DELOBJA8 + + PULLP a8 + RETP + + + .asg 10,NUM_FLSH_PALS + +;----------------------------------------------------------------------------- +; This routine flashes the players cursor when the player select an +; answer +; +; INPUT: reg a8 - obj ptr. of obj. to flash +; reg a10 - player number +;----------------------------------------------------------------------------- + SUBRP flash_plyr_cursor + + PUSHP a10 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz fpc_0 + addk 4,a10 ;add in offset for 2 PLYR KIT +fpc_0 sll 5,a10 + addi plaque_flsh_pals,a10 + move *a10,a10,L ;get pal flash tbl ptr. +fpc_1 + move *a10+,a0,L ;at end of table ? + jrnn fpc_2 ;br=yes + calla pal_getf + move a0,*a8(OPAL),L + SLEEPK 2 + jruc fpc_1 +fpc_2 + PULLP a10 + RETP +;DJT Start + .endif ;TRIVCON +;DJT End + +;----------------------------------------------------------------------------- +; This routine puts up a plaque to HIDE the players attributes +; +; INPUT: a10 = player number (0-3) +;----------------------------------------------------------------------------- + SUBR hide_plyr_attribs + + move a10,a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz hpa_1 + addk 4,a0 ;add in offset for 2 PLYR KIT +hpa_1 move a0,a9 + sll 4,a0 ;x 16 + addi plaque_xs,a0 + move *a0,a0 ;x val + sll 16,a0 + movi [PLAQUE_Y,0],a1 ;y val + movi HIDEAT,a2 + movi 1300,a3 ;z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + clr a5 ;object ID + clr a6 ;x vel + clr a7 ;x vel + calla BEGINOBJ2 + + SOUND1 plaque_land3 + sll 5,a9 + addi hide_atts_pal_tbl,a9 + move *a9,a9,L ;table of pals to cycle with +hpa_1a + move a9,a10 +hpa_2 + move *a10+,a0,L + cmpi 4000,a0 + jreq hpa_1a + calla pal_getf + move a0,*a8(OPAL) + SLEEPK 6 + jruc hpa_2 + + + +hide_atts_pal_tbl + .long hide_atts_red_tbl + .long hide_atts_yel_tbl + .long hide_atts_grn_tbl + .long hide_atts_blu_tbl + .long hide_atts_red_tbl ;kit + .long hide_atts_red_tbl + .long hide_atts_blu_tbl + .long hide_atts_blu_tbl + +hide_atts_red_tbl + .long HIDER1_P + .long HIDER2_P + .long HIDER3_P + .long HIDER4_P + .long HIDER5_P + .long HIDER6_P + .long HIDER7_P + .long HIDER8_P + .long HIDER7_P + .long HIDER6_P + .long HIDER5_P + .long HIDER4_P + .long HIDER3_P + .long HIDER2_P + .long 4000 + +hide_atts_yel_tbl + .long HIDEY1_P + .long HIDEY2_P + .long HIDEY3_P + .long HIDEY4_P + .long HIDEY5_P + .long HIDEY6_P + .long HIDEY7_P + .long HIDEY8_P + .long HIDEY7_P + .long HIDEY6_P + .long HIDEY5_P + .long HIDEY4_P + .long HIDEY3_P + .long HIDEY2_P + .long 4000 + +hide_atts_grn_tbl + .long HIDEG1_P + .long HIDEG2_P + .long HIDEG3_P + .long HIDEG4_P + .long HIDEG5_P + .long HIDEG6_P + .long HIDEG7_P + .long HIDEG8_P + .long HIDEG7_P + .long HIDEG6_P + .long HIDEG5_P + .long HIDEG4_P + .long HIDEG3_P + .long HIDEG2_P + .long 4000 + +hide_atts_blu_tbl + .long HIDEB1_P + .long HIDEB2_P + .long HIDEB3_P + .long HIDEB4_P + .long HIDEB5_P + .long HIDEB6_P + .long HIDEB7_P + .long HIDEB8_P + .long HIDEB7_P + .long HIDEB6_P + .long HIDEB5_P + .long HIDEB4_P + .long HIDEB3_P + .long HIDEB2_P + .long 4000 + +;--------- +;palettes +;--------- + + .def HIDER1_P,OVERW_P + +OVERW_P: + .word 8 + .word 04631H,00H,07FFFH,06F7BH,05AD6H,04631H,03DEFH,035ADH + +HIDER1_P + .word 60 + .word 04631H,00H,04800H,04400H,04400H,04000H,04000H,03C00H + .word 03C00H,03800H,03400H,03400H,03000H,03000H,02C00H,02C00H + .word 02800H,02400H,01C00H,01800H,01400H,01000H,0C00H,0800H + .word 0400H,03C1AH,03015H,03014H,02C13H,02811H,02410H,0240FH + .word 0200EH,0200DH,01C0DH,01C0CH,01C0BH,0180BH,0180AH,01409H + .word 01408H,01008H,01007H,01006H,0C06H,0C05H,0804H,0803H + .word 0403H,0402H,01H,07FFFH,0739CH,06739H,05AD6H,04E73H + .word 04210H,035ADH,0294AH,01CE7H + +HIDER2_P: + .word 60 + .word 04631h,00000h,05400h,05000h,04c00h,04800h,04400h,04400h + .word 04000h,03c00h,03800h,03800h,03400h,03000h,02c00h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER3_P: + .word 60 + .word 04631h,00000h,05c00h,05800h,05400h,05000h,04c00h,04800h + .word 04400h,04000h,03c00h,03800h,03400h,03000h,03000h,02c00h + .word 02800h,02400h,01c00h,01800h,01400h,01000h,00c00h,00800h + .word 00400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER4_P: + .word 60 + .word 04631h,00000h,06000h,06400h,06000h,05c00h,05800h,05400h + .word 05000h,04800h,04400h,04000h,03c00h,03800h,03400h,03000h + .word 02c00h,02800h,02000h,01c00h,01800h,01400h,01000h,00c00h + .word 00800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER5_P: + .word 60 + .word 04631h,00000h,07000h,06800h,06400h,06000h,05c00h,05800h + .word 05400h,04c00h,04800h,04400h,04000h,03c00h,03800h,03400h + .word 03000h,02c00h,02400h,02000h,01c00h,01800h,01400h,01000h + .word 00c00h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER6_P: + .word 60 + .word 04631h,00000h,07c00h,07800h,07000h,06c00h,06800h,06000h + .word 05c00h,05800h,05000h,04c00h,04800h,04000h,03c00h,03800h + .word 03400h,03000h,02800h,02400h,02000h,01c00h,01800h,01400h + .word 01000h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER7_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07800h,07000h,06c00h + .word 06400h,06000h,05800h,05400h,04c00h,04800h,04000h,03c00h + .word 03800h,03400h,02c00h,02800h,02400h,02000h,01c00h,01800h + .word 01400h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDER8_P: + .word 60 + .word 04631h,00000h,07c00h,07c00h,07c00h,07c00h,07800h,07000h + .word 06c00h,06400h,05c00h,05800h,05000h,04c00h,04400h,04000h + .word 03c00h,03800h,03000h,02c00h,02800h,02400h,02000h,01c00h + .word 01800h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEY1_P: + .word 60 + .word 04631h,00000h,039c0h,039c0h,039c0h,035a0h,035a0h,035a0h + .word 03180h,03180h,03180h,03180h,02d60h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY2_P: + .word 60 + .word 04631h,00000h,04620h,04200h,04200h,03de0h,03de0h,039c0h + .word 039c0h,035a0h,035a0h,03180h,03180h,02d60h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY3_P: + .word 60 + .word 04631h,00000h,04e60h,04a40h,04a40h,04620h,04200h,04200h + .word 03de0h,039c0h,039c0h,035a0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY4_P: + .word 60 + .word 04631h,00000h,05ac0h,056a0h,05280h,04e60h,04a40h,04620h + .word 04200h,04200h,03de0h,039c0h,035a0h,03180h,02d60h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY5_P: + .word 60 + .word 04631h,00000h,06300h,05ee0h,05ac0h,056a0h,05280h,04e60h + .word 04a40h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY6_P: + .word 60 + .word 04631h,00000h,06b40h,06300h,05ee0h,05ac0h,056a0h,05280h + .word 04e60h,04620h,04200h,03de0h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY7_P: + .word 60 + .word 04631h,00000h,06f60h,06b40h,06720h,05ee0h,05ac0h,056a0h + .word 04e60h,04a40h,04620h,04200h,039c0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEY8_P: + .word 60 + .word 04631h,00000h,077a0h,06f60h,06b40h,06300h,05ee0h,05ac0h + .word 05280h,04e60h,04620h,04200h,03de0h,035a0h,03180h,02d60h + .word 02520h,02100h,01ce0h,018c0h,014a0h,01080h,00c60h,00840h + .word 00420h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEG1_P: + .word 60 + .word 04631h,00000h,001c0h,001c0h,001c0h,001a0h,001a0h,001a0h + .word 00180h,00180h,00180h,00180h,00160h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG2_P: + .word 60 + .word 04631h,00000h,00220h,00200h,00200h,001e0h,001e0h,001c0h + .word 001c0h,001a0h,001a0h,00180h,00180h,00160h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG3_P: + .word 60 + .word 04631h,00000h,00260h,00240h,00220h,00220h,00200h,001e0h + .word 001e0h,001c0h,001c0h,001a0h,00180h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG4_P: + .word 60 + .word 04631h,00000h,002a0h,00280h,00260h,00240h,00220h,00220h + .word 00200h,001e0h,001c0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG5_P: + .word 60 + .word 04631h,00000h,002e0h,002c0h,002a0h,00280h,00260h,00240h + .word 00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG6_P: + .word 60 + .word 04631h,00000h,00320h,002e0h,002c0h,002a0h,00280h,00260h + .word 00240h,00220h,00200h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG7_P: + .word 60 + .word 04631h,00000h,00360h,00320h,00300h,002e0h,002c0h,00280h + .word 00260h,00240h,00220h,001e0h,001c0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEG8_P: + .word 60 + .word 04631h,00000h,003a0h,00360h,00340h,00300h,002e0h,002c0h + .word 00280h,00260h,00220h,00200h,001e0h,001a0h,00180h,00160h + .word 00120h,00100h,000e0h,000c0h,000a0h,00080h,00060h,00040h + .word 00020h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + + +HIDEB1_P: + .word 60 + .word 04631h,00000h,00012h,00011h,00011h,00010h,00010h,0000fh + .word 0000fh,0000eh,0000dh,0000dh,0000ch,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB2_P: + .word 60 + .word 04631h,00000h,00014h,00013h,00013h,00012h,00011h,00010h + .word 00010h,0000fh,0000eh,0000dh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB3_P: + .word 60 + .word 04631h,00000h,00016h,00015h,00014h,00013h,00013h,00012h + .word 00011h,00010h,0000fh,0000eh,0000dh,0000ch,0000bh,0000bh + .word 00009h,00008h,00007h,00006h,00005h,00004h,00003h,00002h + .word 00001h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h +HIDEB4_P: + .word 60 + .word 04631h,00000h,00019h,00018h,00017h,00016h,00015h,00014h + .word 00013h,00012h,00011h,00010h,0000fh,0000eh,0000dh,0000ch + .word 0000ah,00009h,00008h,00007h,00006h,00005h,00004h,00003h + .word 00002h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB5_P: + .word 60 + .word 04631h,00000h,0001ch,0001bh,0001ah,00018h,00017h,00016h + .word 00015h,00014h,00013h,00011h,00010h,0000fh,0000eh,0000dh + .word 0000bh,0000ah,00009h,00008h,00007h,00006h,00005h,00004h + .word 00003h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB6_P: + .word 60 + .word 04631h,00000h,0043fh,0043eh,0043ch,0043bh,0043ah,00438h + .word 00437h,00436h,00434h,00433h,00432h,00430h,0042fh,0042eh + .word 0042ch,0042bh,0042ah,00429h,00428h,00427h,00426h,00425h + .word 00424h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB7_P: + .word 60 + .word 04631h,00000h,0085fh,0085fh,0085fh,0085eh,0085ch,0085bh + .word 00859h,00858h,00856h,00855h,00853h,00852h,00850h,0084fh + .word 0084dh,0084ch,0084bh,0084ah,00849h,00848h,00847h,00846h + .word 00845h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +HIDEB8_P: + .word 60 + .word 04631h,00000h,00c7fh,00c7fh,00c7fh,00c7fh,00c7eh,00c7ch + .word 00c7bh,00c79h,00c77h,00c76h,00c74h,00c73h,00c71h,00c70h + .word 00c6eh,00c6dh,00c6ch,00c6bh,00c6ah,00c69h,00c68h,00c67h + .word 00c67h,03c1ah,03015h,03014h,02c13h,02811h,02410h,0240fh + .word 0200eh,0200dh,01c0dh,01c0ch,01c0bh,0180bh,0180ah,01409h + .word 01408h,01008h,01007h,01006h,00c06h,00c05h,00804h,00803h + .word 00403h,00402h,00001h,07fffh,0739ch,06739h,05ad6h,04e73h + .word 04210h,035adh,0294ah,01ce7h + +;DJT player_heads2 removed to ATTRACT + +;----------------------------------------------------------------------------- +; ***NOTE*** if change this table...must also update +; 'player_names' and 'team_sqaud_cnts' +;----------------------------------------------------------------------------- +player_heads + +;DJT Start +;00 ATLANTA + .long BLY_ATL,MUT_DEN + .long BLY_ATL,SMI_ATL + .long BLY_ATL,LAE_ATL + .long BLY_ATL,NOR_ATL + + .long MUT_DEN,BLY_ATL + .long MUT_DEN,SMI_ATL + .long MUT_DEN,LAE_ATL + .long MUT_DEN,NOR_ATL + + .long SMI_ATL,BLY_ATL + .long SMI_ATL,MUT_DEN + .long SMI_ATL,LAE_ATL + .long SMI_ATL,NOR_ATL + + .long LAE_ATL,BLY_ATL + .long LAE_ATL,MUT_DEN + .long LAE_ATL,SMI_ATL + .long LAE_ATL,NOR_ATL + + .long NOR_ATL,BLY_ATL + .long NOR_ATL,MUT_DEN + .long NOR_ATL,SMI_ATL + .long NOR_ATL,LAE_ATL + +;01 BOSTON + .long BRO_BOS,HAM_COL + .long BRO_BOS,BAR_BOS + .long BRO_BOS,RAD_BOS + .long BRO_BOS,FOX_BOS + + .long HAM_COL,BRO_BOS ;new + .long HAM_COL,BAR_BOS + .long HAM_COL,RAD_BOS + .long HAM_COL,FOX_BOS + + .long BAR_BOS,BRO_BOS + .long BAR_BOS,HAM_COL + .long BAR_BOS,RAD_BOS + .long BAR_BOS,FOX_BOS + + .long RAD_BOS,BRO_BOS + .long RAD_BOS,HAM_COL + .long RAD_BOS,BAR_BOS + .long RAD_BOS,FOX_BOS + + .long FOX_BOS,BRO_BOS + .long FOX_BOS,HAM_COL + .long FOX_BOS,BAR_BOS + .long FOX_BOS,RAD_BOS + +;02 CHARLOTTE + .long RCE_CHA,MAS_NEY + .long RCE_CHA,DIV_LAK + .long RCE_CHA,ZID_CHA + .long RCE_CHA,CUR_CHA + + .long MAS_NEY,RCE_CHA + .long MAS_NEY,DIV_LAK + .long MAS_NEY,ZID_CHA + .long MAS_NEY,CUR_CHA + + .long DIV_LAK,RCE_CHA + .long DIV_LAK,MAS_NEY + .long DIV_LAK,ZID_CHA + .long DIV_LAK,CUR_CHA + + .long ZID_CHA,RCE_CHA + .long ZID_CHA,MAS_NEY + .long ZID_CHA,DIV_LAK + .long ZID_CHA,CUR_CHA + + .long CUR_CHA,RCE_CHA + .long CUR_CHA,MAS_NEY + .long CUR_CHA,DIV_LAK + .long CUR_CHA,ZID_CHA + +;03 CHICAGO + .global ROD_CHI + + .long PIP_CHI,ROD_CHI + .long PIP_CHI,KUK_CHI + .long PIP_CHI,LON_CHI + .long PIP_CHI,KER_CHI + + .long ROD_CHI,PIP_CHI + .long ROD_CHI,KUK_CHI + .long ROD_CHI,LON_CHI + .long ROD_CHI,KER_CHI + + .long KUK_CHI,PIP_CHI + .long KUK_CHI,ROD_CHI + .long KUK_CHI,LON_CHI + .long KUK_CHI,KER_CHI + + .long LON_CHI,PIP_CHI + .long LON_CHI,ROD_CHI + .long LON_CHI,KUK_CHI + .long LON_CHI,KER_CHI + + .long KER_CHI,PIP_CHI + .long KER_CHI,ROD_CHI + .long KER_CHI,KUK_CHI + .long KER_CHI,LON_CHI + +;04 CLEVELAND + .long HIL_CLE,MIL_CLE + .long HIL_CLE,PHL_CLE + .long HIL_CLE,BRA_CLE + .long HIL_CLE,FER_CLE + + .long MIL_CLE,HIL_CLE + .long MIL_CLE,PHL_CLE + .long MIL_CLE,BRA_CLE + .long MIL_CLE,FER_CLE + + .long PHL_CLE,HIL_CLE + .long PHL_CLE,MIL_CLE + .long PHL_CLE,BRA_CLE + .long PHL_CLE,FER_CLE + + .long BRA_CLE,HIL_CLE + .long BRA_CLE,MIL_CLE + .long BRA_CLE,PHL_CLE + .long BRA_CLE,FER_CLE + + .long FER_CLE,HIL_CLE + .long FER_CLE,MIL_CLE + .long FER_CLE,PHL_CLE + .long FER_CLE,BRA_CLE + +;05 DALLAS + .long KID_DAL,HPR_NEY + .long KID_DAL,JAC_DAL + .long KID_DAL,MON_BOS + .long KID_DAL,MAS_DAL + + .long HPR_NEY,KID_DAL + .long HPR_NEY,JAC_DAL + .long HPR_NEY,MON_BOS + .long HPR_NEY,MAS_DAL + + .long JAC_DAL,KID_DAL + .long JAC_DAL,HPR_NEY + .long JAC_DAL,MON_BOS + .long JAC_DAL,MAS_DAL + + .long MON_BOS,KID_DAL + .long MON_BOS,HPR_NEY + .long MON_BOS,JAC_DAL + .long MON_BOS,MAS_DAL + + .long MAS_DAL,KID_DAL + .long MAS_DAL,HPR_NEY + .long MAS_DAL,JAC_DAL + .long MAS_DAL,MON_BOS + +;06 DENVER + .long MCD_DEN,MAR_SAC + .long MCD_DEN,JAC_IND + .long MCD_DEN,ELL_DEN + + .long MAR_SAC,MCD_DEN + .long MAR_SAC,JAC_IND + .long MAR_SAC,ELL_DEN + + .long JAC_IND,MCD_DEN + .long JAC_IND,MAR_SAC + .long JAC_IND,ELL_DEN + + .long ELL_DEN,MCD_DEN + .long ELL_DEN,MAR_SAC + .long ELL_DEN,JAC_IND + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long HIL_DET,RIL_COL + .long HIL_DET,DUM_DET + .long HIL_DET,THR_DET + .long HIL_DET,AUG_ATL + +;; .long RIL_COL,HIL_DET ;new +;; .long RIL_COL,DUM_DET +;; .long RIL_COL,THR_DET +;; .long RIL_COL,AUG_ATL + + .long DUM_DET,HIL_DET +;; .long DUM_DET,RIL_COL + .long DUM_DET,THR_DET + .long DUM_DET,AUG_ATL + + .long THR_DET,HIL_DET +;; .long THR_DET,RIL_COL + .long THR_DET,DUM_DET + .long THR_DET,AUG_ATL + + .long AUG_ATL,HIL_DET +;; .long AUG_ATL,RIL_COL + .long AUG_ATL,DUM_DET + .long AUG_ATL,THR_DET + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPR_GLD,KON_ORL + .long SPR_GLD,SMI_GLD + .long SPR_GLD,MUL_GLD + + .long KON_ORL,SPR_GLD + .long KON_ORL,SMI_GLD + .long KON_ORL,MUL_GLD + + .long SMI_GLD,SPR_GLD + .long SMI_GLD,KON_ORL + .long SMI_GLD,MUL_GLD + + .long MUL_GLD,SPR_GLD + .long MUL_GLD,KON_ORL + .long MUL_GLD,SMI_GLD + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLA_HOU,HAR_COL + .long OLA_HOU,DRX_HOU + .long OLA_HOU,WLS_GLD + + .long HAR_COL,OLA_HOU ;new + .long HAR_COL,DRX_HOU + .long HAR_COL,WLS_GLD + + .long DRX_HOU,OLA_HOU + .long DRX_HOU,HAR_COL + .long DRX_HOU,WLS_GLD + + .long WLS_GLD,OLA_HOU + .long WLS_GLD,HAR_COL + .long WLS_GLD,DRX_HOU + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MIL_IND,DAM_COL + .long MIL_IND,ROS_DEN + .long MIL_IND,SMI_IND + .long MIL_IND,DAV_IND + + .long DAM_COL,MIL_IND ;new + .long DAM_COL,ROS_DEN + .long DAM_COL,SMI_IND + .long DAM_COL,DAV_IND + + .long ROS_DEN,MIL_IND + .long ROS_DEN,DAM_COL + .long ROS_DEN,SMI_IND + .long ROS_DEN,DAV_IND + + .long SMI_IND,MIL_IND + .long SMI_IND,DAM_COL + .long SMI_IND,ROS_DEN + .long SMI_IND,DAV_IND + + .long DAV_IND,MIL_IND + .long DAV_IND,DAM_COL + .long DAV_IND,ROS_DEN + .long DAV_IND,SMI_IND + +;11 L.A. CLIPPERS + .long VAU_CLP,ROG_CLP + .long VAU_CLP,MUR_CLP + .long VAU_CLP,RCH_CLP + .long VAU_CLP,BAR_CLP + + .long ROG_CLP,VAU_CLP + .long ROG_CLP,MUR_CLP + .long ROG_CLP,RCH_CLP + .long ROG_CLP,BAR_CLP + + .long MUR_CLP,VAU_CLP + .long MUR_CLP,ROG_CLP + .long MUR_CLP,RCH_CLP + .long MUR_CLP,BAR_CLP + + .long RCH_CLP,VAU_CLP + .long RCH_CLP,ROG_CLP + .long RCH_CLP,MUR_CLP + .long RCH_CLP,BAR_CLP + + .long BAR_CLP,VAU_CLP + .long BAR_CLP,ROG_CLP + .long BAR_CLP,MUR_CLP + .long BAR_CLP,RCH_CLP + +;12 L.A. LAKERS + .long VAN_LAK,CEB_LAK + .long VAN_LAK,SCO_VAN + .long VAN_LAK,CAM_LAK + .long VAN_LAK,JON_LAK + + .long CEB_LAK,VAN_LAK + .long CEB_LAK,SCO_VAN + .long CEB_LAK,CAM_LAK + .long CEB_LAK,JON_LAK + + .long SCO_VAN,VAN_LAK + .long SCO_VAN,CEB_LAK + .long SCO_VAN,CAM_LAK + .long SCO_VAN,JON_LAK + + .long CAM_LAK,VAN_LAK + .long CAM_LAK,CEB_LAK + .long CAM_LAK,SCO_VAN + .long CAM_LAK,JON_LAK + + .long JON_LAK,VAN_LAK + .long JON_LAK,CEB_LAK + .long JON_LAK,SCO_VAN + .long JON_LAK,CAM_LAK + +;13 MIAMI + .long MOU_MIA,HRD_MIA + .long MOU_MIA,DAN_MIA + + .long HRD_MIA,MOU_MIA + .long HRD_MIA,DAN_MIA + + .long DAN_MIA,MOU_MIA + .long DAN_MIA,HRD_MIA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAK_MLW,ALL_COL + .long BAK_MLW,LNG_MIN + .long BAK_MLW,ROB_MLW + .long BAK_MLW,RES_MLW + + .long ALL_COL,BAK_MLW ;new + .long ALL_COL,LNG_MIN + .long ALL_COL,ROB_MLW + .long ALL_COL,RES_MLW + + .long LNG_MIN,BAK_MLW + .long LNG_MIN,ALL_COL + .long LNG_MIN,ROB_MLW + .long LNG_MIN,RES_MLW + + .long ROB_MLW,BAK_MLW + .long ROB_MLW,ALL_COL + .long ROB_MLW,LNG_MIN + .long ROB_MLW,RES_MLW + + .long RES_MLW,BAK_MLW + .long RES_MLW,ALL_COL + .long RES_MLW,LNG_MIN + .long RES_MLW,ROB_MLW + +;15 MINNESOTTA + .long GUG_MIN,MAR_COL + .long GUG_MIN,GAR_MIN + + .long MAR_COL,GUG_MIN ;new + .long MAR_COL,GAR_MIN + + .long GAR_MIN,GUG_MIN + .long GAR_MIN,MAR_COL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GLL_NEJ,KIT_COL + .long GLL_NEJ,PAC_WAS + .long GLL_NEJ,BRA_NEJ + .long GLL_NEJ,OBA_NEJ + + .long KIT_COL,GLL_NEJ ;new + .long KIT_COL,PAC_WAS + .long KIT_COL,BRA_NEJ + .long KIT_COL,OBA_NEJ + + .long PAC_WAS,GLL_NEJ + .long PAC_WAS,KIT_COL + .long PAC_WAS,BRA_NEJ + .long PAC_WAS,OBA_NEJ + + .long BRA_NEJ,GLL_NEJ + .long BRA_NEJ,KIT_COL + .long BRA_NEJ,PAC_WAS + .long BRA_NEJ,OBA_NEJ + + .long OBA_NEJ,GLL_NEJ + .long OBA_NEJ,KIT_COL + .long OBA_NEJ,PAC_WAS + .long OBA_NEJ,BRA_NEJ + +;17 NEW YORK + .long EWG_NEY,WAL_COL + .long EWG_NEY,JON_CHA + .long EWG_NEY,STA_NEY + .long EWG_NEY,HOU_DET + + .long WAL_COL,EWG_NEY ;new + .long WAL_COL,JON_CHA + .long WAL_COL,STA_NEY + .long WAL_COL,HOU_DET + + .long JON_CHA,EWG_NEY + .long JON_CHA,WAL_COL + .long JON_CHA,STA_NEY + .long JON_CHA,HOU_DET + + .long STA_NEY,EWG_NEY + .long STA_NEY,WAL_COL + .long STA_NEY,JON_CHA + .long STA_NEY,HOU_DET + + .long HOU_DET,EWG_NEY + .long HOU_DET,WAL_COL + .long HOU_DET,JON_CHA + .long HOU_DET,STA_NEY + +;18 ORLANDO + .long HAR_ORL,SKL_GLD + .long HAR_ORL,GRT_ORL + .long HAR_ORL,AND_ORL + .long HAR_ORL,SCO_ORL + + .long SKL_GLD,HAR_ORL + .long SKL_GLD,GRT_ORL + .long SKL_GLD,AND_ORL + .long SKL_GLD,SCO_ORL + + .long GRT_ORL,HAR_ORL + .long GRT_ORL,SKL_GLD + .long GRT_ORL,AND_ORL + .long GRT_ORL,SCO_ORL + + .long AND_ORL,HAR_ORL + .long AND_ORL,SKL_GLD + .long AND_ORL,GRT_ORL + .long AND_ORL,SCO_ORL + + .long SCO_ORL,HAR_ORL + .long SCO_ORL,SKL_GLD + .long SCO_ORL,GRT_ORL + .long SCO_ORL,AND_ORL + +;19 PHILADELPHIA +;; .long IVE_COL,MIN_COL ;new + .long IVE_COL,STA_PHL + .long IVE_COL,COL_PHL + .long IVE_COL,WEA_PHL + +;; .long MIN_COL,IVE_COL ;new +;; .long MIN_COL,STA_PHL +;; .long MIN_COL,COL_PHL +;; .long MIN_COL,WEA_PHL + + .long STA_PHL,IVE_COL +;; .long STA_PHL,MIN_COL + .long STA_PHL,COL_PHL + .long STA_PHL,WEA_PHL + + .long COL_PHL,IVE_COL +;; .long COL_PHL,MIN_COL + .long COL_PHL,STA_PHL + .long COL_PHL,WEA_PHL + + .long WEA_PHL,IVE_COL +;; .long WEA_PHL,MIN_COL + .long WEA_PHL,STA_PHL + .long WEA_PHL,COL_PHL + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long JOH_PHX,TIS_PHX + .long JOH_PHX,MAN_PHX + .long JOH_PHX,HOR_HOU + .long JOH_PHX,CAS_HOU + + .long TIS_PHX,JOH_PHX + .long TIS_PHX,MAN_PHX + .long TIS_PHX,HOR_HOU + .long TIS_PHX,CAS_HOU + + .long MAN_PHX,JOH_PHX + .long MAN_PHX,TIS_PHX + .long MAN_PHX,HOR_HOU + .long MAN_PHX,CAS_HOU + + .long HOR_HOU,JOH_PHX + .long HOR_HOU,TIS_PHX + .long HOR_HOU,MAN_PHX + .long HOR_HOU,CAS_HOU + + .long CAS_HOU,JOH_PHX + .long CAS_HOU,TIS_PHX + .long CAS_HOU,MAN_PHX + .long CAS_HOU,HOR_HOU + +;21 PORTLAND + .long ROB_PRT,RID_MIN + .long ROB_PRT,SAB_PRT + .long ROB_PRT,AND_CHA + .long ROB_PRT,CHI_PRT + + .long RID_MIN,ROB_PRT + .long RID_MIN,SAB_PRT + .long RID_MIN,AND_CHA + .long RID_MIN,CHI_PRT + + .long SAB_PRT,ROB_PRT + .long SAB_PRT,RID_MIN + .long SAB_PRT,AND_CHA + .long SAB_PRT,CHI_PRT + + .long AND_CHA,ROB_PRT + .long AND_CHA,RID_MIN + .long AND_CHA,SAB_PRT + .long AND_CHA,CHI_PRT + + .long CHI_PRT,ROB_PRT + .long CHI_PRT,RID_MIN + .long CHI_PRT,SAB_PRT + .long CHI_PRT,AND_CHA + +;22 SACRAMENTO + .long OWE_SAC,RAF_DEN + .long OWE_SAC,RIC_SAC + .long OWE_SAC,GRA_SAC + .long OWE_SAC,EDN_SAC + + .long RAF_DEN,OWE_SAC + .long RAF_DEN,RIC_SAC + .long RAF_DEN,GRA_SAC + .long RAF_DEN,EDN_SAC + + .long RIC_SAC,OWE_SAC + .long RIC_SAC,RAF_DEN + .long RIC_SAC,GRA_SAC + .long RIC_SAC,EDN_SAC + + .long GRA_SAC,OWE_SAC + .long GRA_SAC,RAF_DEN + .long GRA_SAC,RIC_SAC + .long GRA_SAC,EDN_SAC + + .long EDN_SAC,OWE_SAC + .long EDN_SAC,RAF_DEN + .long EDN_SAC,RIC_SAC + .long EDN_SAC,GRA_SAC + +;23 SAN ANTONIO + .long ELL_SAN,ROB_SAN + .long ELL_SAN,MAX_PHL + .long ELL_SAN,JON_SAN + .long ELL_SAN,DEL_SAN + + .long ROB_SAN,ELL_SAN + .long ROB_SAN,MAX_PHL + .long ROB_SAN,JON_SAN + .long ROB_SAN,DEL_SAN + + .long MAX_PHL,ELL_SAN + .long MAX_PHL,ROB_SAN + .long MAX_PHL,JON_SAN + .long MAX_PHL,DEL_SAN + + .long JON_SAN,ELL_SAN + .long JON_SAN,ROB_SAN + .long JON_SAN,MAX_PHL + .long JON_SAN,DEL_SAN + + .long DEL_SAN,ELL_SAN + .long DEL_SAN,ROB_SAN + .long DEL_SAN,MAX_PHL + .long DEL_SAN,JON_SAN + +;24 SEATTLE + .long KMP_SEA,PAY_SEA + .long KMP_SEA,SCH_SEA + .long KMP_SEA,HWK_SEA + .long KMP_SEA,FOR_SEA + + .long PAY_SEA,KMP_SEA + .long PAY_SEA,SCH_SEA + .long PAY_SEA,HWK_SEA + .long PAY_SEA,FOR_SEA + + .long SCH_SEA,KMP_SEA + .long SCH_SEA,PAY_SEA + .long SCH_SEA,HWK_SEA + .long SCH_SEA,FOR_SEA + + .long HWK_SEA,KMP_SEA + .long HWK_SEA,PAY_SEA + .long HWK_SEA,SCH_SEA + .long HWK_SEA,FOR_SEA + + .long FOR_SEA,KMP_SEA + .long FOR_SEA,PAY_SEA + .long FOR_SEA,SCH_SEA + .long FOR_SEA,HWK_SEA + +;25 TORONTO + .long ROG_TOR,CAM_COL + .long ROG_TOR,STO_TOR + .long ROG_TOR,JON_DAL + .long ROG_TOR,WIL_MIA + + .long CAM_COL,ROG_TOR ;new + .long CAM_COL,STO_TOR + .long CAM_COL,JON_DAL + .long CAM_COL,WIL_MIA + + .long STO_TOR,ROG_TOR + .long STO_TOR,CAM_COL + .long STO_TOR,JON_DAL + .long STO_TOR,WIL_MIA + + .long JON_DAL,ROG_TOR + .long JON_DAL,CAM_COL + .long JON_DAL,STO_TOR + .long JON_DAL,WIL_MIA + + .long WIL_MIA,ROG_TOR + .long WIL_MIA,CAM_COL + .long WIL_MIA,STO_TOR + .long WIL_MIA,JON_DAL + +;26 UTAH + .long STK_UTA,MLN_UTA + .long STK_UTA,HRN_UTA + .long STK_UTA,MOR_UTA + + .long MLN_UTA,STK_UTA + .long MLN_UTA,HRN_UTA + .long MLN_UTA,MOR_UTA + + .long HRN_UTA,STK_UTA + .long HRN_UTA,MLN_UTA + .long HRN_UTA,MOR_UTA + + .long MOR_UTA,STK_UTA + .long MOR_UTA,MLN_UTA + .long MOR_UTA,HRN_UTA + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANT_VAN,EDW_VAN + .long ANT_VAN,REV_VAN + + .long EDW_VAN,ANT_VAN + .long EDW_VAN,REV_VAN + + .long REV_VAN,ANT_VAN + .long REV_VAN,EDW_VAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STR_PRT,WEB_WAS + .long STR_PRT,HWD_WAS + .long STR_PRT,MUR_WAS + .long STR_PRT,CHE_WAS + + .long WEB_WAS,STR_PRT + .long WEB_WAS,HWD_WAS + .long WEB_WAS,MUR_WAS + .long WEB_WAS,CHE_WAS + + .long HWD_WAS,STR_PRT + .long HWD_WAS,WEB_WAS + .long HWD_WAS,MUR_WAS + .long HWD_WAS,CHE_WAS + + .long MUR_WAS,STR_PRT + .long MUR_WAS,WEB_WAS + .long MUR_WAS,HWD_WAS + .long MUR_WAS,CHE_WAS + + .long CHE_WAS,STR_PRT + .long CHE_WAS,WEB_WAS + .long CHE_WAS,HWD_WAS + .long CHE_WAS,MUR_WAS +;DJT End + + +;;27 MORTAL KOMBAT +; .long MLN_UTA,KMP_SEA +; .long ROB_SAN,BRK_PHX +; .long DRX_PRT,HAR_ORL +; .long EWG_NEY,AND_NEJ +; .long COL_NEJ,AND_ORL +; .long STK_UTA,JOH_PHX +; +; .long GIL_SEA,RIC_SAC +; .long BRA_PHL,WEB_SAC +; .long DUM_DET,STA_NEY +; .long MUT_DEN,WLK_ATL +; .long HRP_CLP,RID_MIN +; .long MIL_IND,JON_CHA +; +; .long OLA_HOU,BAK_MLW +; .long ARM_CHI,MAX_HOU +; .long MOU_CHA,RCE_MIA +; .long WLS_GLD,JAC_DAL +; .long PIP_CHI,MIN_MIA +; .long THM_DET,WEB_GLD +; .long MAS_DAL,WOR_LAK +; .long MUL_GLD,MAN_CLP + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- +player_names + +;DJT Start +ALLEN .equ 1 +CAMBY .equ 2 +DAMPIER .equ 3 +HAMER .equ 4 +HRNGTON .equ 5 +IVERSON .equ 6 +KITTLES .equ 7 +MARBURY .equ 8 +MINOR .equ 9 +RILEY .equ 10 +WALLACE .equ 11 + + .def ALLEN,CAMBY,DAMPIER,HAMER,HRNGTON,IVERSON,KITTLES + .def MARBURY,MINOR,RILEY,WALLACE + +;00 ATLANTA + .long BLAYLOCK,MUTUMBO + .long BLAYLOCK,SSMITH + .long BLAYLOCK,LAETTNER + .long BLAYLOCK,KNORMAN + + .long MUTUMBO,BLAYLOCK + .long MUTUMBO,SSMITH + .long MUTUMBO,LAETTNER + .long MUTUMBO,KNORMAN + + .long SSMITH,BLAYLOCK + .long SSMITH,MUTUMBO + .long SSMITH,LAETTNER + .long SSMITH,KNORMAN + + .long LAETTNER,BLAYLOCK + .long LAETTNER,MUTUMBO + .long LAETTNER,SSMITH + .long LAETTNER,KNORMAN + + .long KNORMAN,BLAYLOCK + .long KNORMAN,MUTUMBO + .long KNORMAN,SSMITH + .long KNORMAN,LAETTNER + +;01 BOSTON + .long BROWN,HAMER + .long BROWN,BARROS + .long BROWN,RADJA + .long BROWN,FOX + + .long HAMER,BROWN ;new + .long HAMER,BARROS + .long HAMER,RADJA + .long HAMER,FOX + + .long BARROS,BROWN + .long BARROS,HAMER + .long BARROS,RADJA + .long BARROS,FOX + + .long RADJA,BROWN + .long RADJA,HAMER + .long RADJA,BARROS + .long RADJA,FOX + + .long FOX,BROWN + .long FOX,HAMER + .long FOX,BARROS + .long FOX,RADJA + +;02 CHARLOTTE + .long RICE,MASON + .long RICE,DIVAC + .long RICE,ZIDEK + .long RICE,CURRY + + .long MASON,RICE + .long MASON,DIVAC + .long MASON,ZIDEK + .long MASON,CURRY + + .long DIVAC,RICE + .long DIVAC,MASON + .long DIVAC,ZIDEK + .long DIVAC,CURRY + + .long ZIDEK,RICE + .long ZIDEK,MASON + .long ZIDEK,DIVAC + .long ZIDEK,CURRY + + .long CURRY,RICE + .long CURRY,MASON + .long CURRY,DIVAC + .long CURRY,ZIDEK + +;03 CHICAGO + .long PIPPEN,RODMAN + .long PIPPEN,KUKOC + .long PIPPEN,LONGLEY + .long PIPPEN,KERR + + .long RODMAN,PIPPEN + .long RODMAN,KUKOC + .long RODMAN,LONGLEY + .long RODMAN,KERR + + .long KUKOC,PIPPEN + .long KUKOC,RODMAN + .long KUKOC,LONGLEY + .long KUKOC,KERR + + .long LONGLEY,PIPPEN + .long LONGLEY,RODMAN + .long LONGLEY,KUKOC + .long LONGLEY,KERR + + .long KERR,PIPPEN + .long KERR,RODMAN + .long KERR,KUKOC + .long KERR,LONGLEY + +;04 CLEVELAND + .long THILL,CMILLS + .long THILL,PHILLS + .long THILL,BRANDON + .long THILL,FERRY + + .long CMILLS,THILL + .long CMILLS,PHILLS + .long CMILLS,BRANDON + .long CMILLS,FERRY + + .long PHILLS,THILL + .long PHILLS,CMILLS + .long PHILLS,BRANDON + .long PHILLS,FERRY + + .long BRANDON,THILL + .long BRANDON,CMILLS + .long BRANDON,PHILLS + .long BRANDON,FERRY + + .long FERRY,THILL + .long FERRY,CMILLS + .long FERRY,PHILLS + .long FERRY,BRANDON + +;05 DALLAS + .long KIDD,HARPER_D + .long KIDD,JACK + .long KIDD,MONTROSS + .long KIDD,MASH + + .long HARPER_D,KIDD + .long HARPER_D,JACK + .long HARPER_D,MONTROSS + .long HARPER_D,MASH + + .long JACK,KIDD + .long JACK,HARPER_D + .long JACK,MONTROSS + .long JACK,MASH + + .long MONTROSS,KIDD + .long MONTROSS,HARPER_D + .long MONTROSS,JACK + .long MONTROSS,MASH + + .long MASH,KIDD + .long MASH,HARPER_D + .long MASH,JACK + .long MASH,MONTROSS + +;06 DENVER + .long MCDYESS,MARCIULO + .long MCDYESS,MJACKSON + .long MCDYESS,DELLIS + + .long MARCIULO,MCDYESS + .long MARCIULO,MJACKSON + .long MARCIULO,DELLIS + + .long MJACKSON,MCDYESS + .long MJACKSON,MARCIULO + .long MJACKSON,DELLIS + + .long DELLIS,MCDYESS + .long DELLIS,MARCIULO + .long DELLIS,MJACKSON + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;07 DETROIT +;; .long GHILL,RILEY + .long GHILL,DUMARS + .long GHILL,THORPE + .long GHILL,AUGMON + +;; .long RILEY,GHILL ;new +;; .long RILEY,DUMARS +;; .long RILEY,THORPE +;; .long RILEY,AUGMON + + .long DUMARS,GHILL +;; .long DUMARS,RILEY + .long DUMARS,THORPE + .long DUMARS,AUGMON + + .long THORPE,GHILL +;; .long THORPE,RILEY + .long THORPE,DUMARS + .long THORPE,AUGMON + + .long AUGMON,GHILL +;; .long AUGMON,RILEY + .long AUGMON,DUMARS + .long AUGMON,THORPE + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;08 GOLDEN STATE + .long SPREWELL,KONCAK + .long SPREWELL,JSMITH + .long SPREWELL,MULLIN + + .long KONCAK,SPREWELL + .long KONCAK,JSMITH + .long KONCAK,MULLIN + + .long JSMITH,SPREWELL + .long JSMITH,KONCAK + .long JSMITH,MULLIN + + .long MULLIN,SPREWELL + .long MULLIN,KONCAK + .long MULLIN,JSMITH + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;09 HOUSTON + .long OLAJUWON,HRNGTON + .long OLAJUWON,DREXLER + .long OLAJUWON,WILLIS + + .long HRNGTON,OLAJUWON ;new + .long HRNGTON,DREXLER + .long HRNGTON,WILLIS + + .long DREXLER,OLAJUWON + .long DREXLER,HRNGTON + .long DREXLER,WILLIS + + .long WILLIS,OLAJUWON + .long WILLIS,HRNGTON + .long WILLIS,DREXLER + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;10 INDIANA + .long MILLER,DAMPIER + .long MILLER,ROSE + .long MILLER,SMITS + .long MILLER,DDAVIS + + .long DAMPIER,MILLER ;new + .long DAMPIER,ROSE + .long DAMPIER,SMITS + .long DAMPIER,DDAVIS + + .long ROSE,MILLER + .long ROSE,DAMPIER + .long ROSE,SMITS + .long ROSE,DDAVIS + + .long SMITS,MILLER + .long SMITS,DAMPIER + .long SMITS,ROSE + .long SMITS,DDAVIS + + .long DDAVIS,MILLER + .long DDAVIS,DAMPIER + .long DDAVIS,ROSE + .long DDAVIS,SMITS + +;11 L.A. CLIPPERS + .long VAUGHT,RROGERS + .long VAUGHT,LMURRAY + .long VAUGHT,PRICHARD + .long VAUGHT,BBARRY + + .long RROGERS,VAUGHT + .long RROGERS,LMURRAY + .long RROGERS,PRICHARD + .long RROGERS,BBARRY + + .long LMURRAY,VAUGHT + .long LMURRAY,RROGERS + .long LMURRAY,PRICHARD + .long LMURRAY,BBARRY + + .long PRICHARD,VAUGHT + .long PRICHARD,RROGERS + .long PRICHARD,LMURRAY + .long PRICHARD,BBARRY + + .long BBARRY,VAUGHT + .long BBARRY,RROGERS + .long BBARRY,LMURRAY + .long BBARRY,PRICHARD + +;12 L.A. LAKERS + .long VANEXEL,CEBALLOS + .long VANEXEL,SCOTT + .long VANEXEL,CAMPBELL + .long VANEXEL,EJONES + + .long CEBALLOS,VANEXEL + .long CEBALLOS,SCOTT + .long CEBALLOS,CAMPBELL + .long CEBALLOS,EJONES + + .long SCOTT,VANEXEL + .long SCOTT,CEBALLOS + .long SCOTT,CAMPBELL + .long SCOTT,EJONES + + .long CAMPBELL,VANEXEL + .long CAMPBELL,CEBALLOS + .long CAMPBELL,SCOTT + .long CAMPBELL,EJONES + + .long EJONES,VANEXEL + .long EJONES,CEBALLOS + .long EJONES,SCOTT + .long EJONES,CAMPBELL + +;13 MIAMI + .long MOURN,THARDAWAY + .long MOURN,DANILOVI + + .long THARDAWAY,MOURN + .long THARDAWAY,DANILOVI + + .long DANILOVI,MOURN + .long DANILOVI,THARDAWAY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;14 MILWAUKEE + .long BAKER,ALLEN + .long BAKER,LANG + .long BAKER,GROBINSO + .long BAKER,RESPERT + + .long ALLEN,BAKER ;new + .long ALLEN,LANG + .long ALLEN,GROBINSO + .long ALLEN,RESPERT + + .long LANG,BAKER + .long LANG,ALLEN + .long LANG,GROBINSO + .long LANG,RESPERT + + .long GROBINSO,BAKER + .long GROBINSO,ALLEN + .long GROBINSO,LANG + .long GROBINSO,RESPERT + + .long RESPERT,BAKER + .long RESPERT,ALLEN + .long RESPERT,LANG + .long RESPERT,GROBINSO + +;15 MINNESOTTA + .long GUGLI2,MARBURY + .long GUGLI2,GARNETT + + .long MARBURY,GUGLI2 ;new + .long MARBURY,GARNETT + + .long GARNETT,GUGLI2 + .long GARNETT,MARBURY + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;16 NEW JERSEY + .long GILL,KITTLES + .long GILL,PACK + .long GILL,BRADLEY + .long GILL,OBANNON + + .long KITTLES,GILL ;new + .long KITTLES,PACK + .long KITTLES,BRADLEY + .long KITTLES,OBANNON + + .long PACK,GILL + .long PACK,KITTLES + .long PACK,BRADLEY + .long PACK,OBANNON + + .long BRADLEY,GILL + .long BRADLEY,KITTLES + .long BRADLEY,PACK + .long BRADLEY,OBANNON + + .long OBANNON,GILL + .long OBANNON,KITTLES + .long OBANNON,PACK + .long OBANNON,BRADLEY + +;17 NEW YORK + .long EWING,WALLACE + .long EWING,JOHNSN_L + .long EWING,STARKS + .long EWING,HOUSTON + + .long WALLACE,EWING ;new + .long WALLACE,JOHNSN_L + .long WALLACE,STARKS + .long WALLACE,HOUSTON + + .long JOHNSN_L,EWING + .long JOHNSN_L,WALLACE + .long JOHNSN_L,STARKS + .long JOHNSN_L,HOUSTON + + .long STARKS,EWING + .long STARKS,WALLACE + .long STARKS,JOHNSN_L + .long STARKS,HOUSTON + + .long HOUSTON,EWING + .long HOUSTON,WALLACE + .long HOUSTON,JOHNSN_L + .long HOUSTON,STARKS + +;18 ORLANDO + .long AHARDAWAY,SEIKALY + .long AHARDAWAY,GRANT_HC + .long AHARDAWAY,NANDERSON + .long AHARDAWAY,DSCOTT + + .long SEIKALY,AHARDAWAY + .long SEIKALY,GRANT_HC + .long SEIKALY,NANDERSON + .long SEIKALY,DSCOTT + + .long GRANT_HC,AHARDAWAY + .long GRANT_HC,SEIKALY + .long GRANT_HC,NANDERSON + .long GRANT_HC,DSCOTT + + .long NANDERSON,AHARDAWAY + .long NANDERSON,SEIKALY + .long NANDERSON,GRANT_HC + .long NANDERSON,DSCOTT + + .long DSCOTT,AHARDAWAY + .long DSCOTT,SEIKALY + .long DSCOTT,GRANT_HC + .long DSCOTT,NANDERSON + +;19 PHILADELPHIA +;; .long IVERSON,MINOR ;new + .long IVERSON,STACKHOU + .long IVERSON,COLEMAN + .long IVERSON,WEATHSPN + +;; .long MINOR,IVERSON ;new +;; .long MINOR,STACKHOU +;; .long MINOR,COLEMAN +;; .long MINOR,WEATHSPN + + .long STACKHOU,IVERSON +;; .long STACKHOU,MINOR + .long STACKHOU,COLEMAN + .long STACKHOU,WEATHSPN + + .long COLEMAN,IVERSON +;; .long COLEMAN,MINOR + .long COLEMAN,STACKHOU + .long COLEMAN,WEATHSPN + + .long WEATHSPN,IVERSON +;; .long WEATHSPN,MINOR + .long WEATHSPN,STACKHOU + .long WEATHSPN,COLEMAN + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;20 PHOENIX + .long KJOHNSON,TISDALE + .long KJOHNSON,MANNING + .long KJOHNSON,HORRY + .long KJOHNSON,CASSELL + + .long TISDALE,KJOHNSON + .long TISDALE,MANNING + .long TISDALE,HORRY + .long TISDALE,CASSELL + + .long MANNING,KJOHNSON + .long MANNING,TISDALE + .long MANNING,HORRY + .long MANNING,CASSELL + + .long HORRY,KJOHNSON + .long HORRY,TISDALE + .long HORRY,MANNING + .long HORRY,CASSELL + + .long CASSELL,KJOHNSON + .long CASSELL,TISDALE + .long CASSELL,MANNING + .long CASSELL,HORRY + +;21 PORTLAND + .long CROBINSON,RIDER + .long CROBINSON,SABONIS + .long CROBINSON,KANDERSON + .long CROBINSON,CHILDRES + + .long RIDER,CROBINSON + .long RIDER,SABONIS + .long RIDER,KANDERSON + .long RIDER,CHILDRES + + .long SABONIS,CROBINSON + .long SABONIS,RIDER + .long SABONIS,KANDERSON + .long SABONIS,CHILDRES + + .long KANDERSON,CROBINSON + .long KANDERSON,RIDER + .long KANDERSON,SABONIS + .long KANDERSON,CHILDRES + + .long CHILDRES,CROBINSON + .long CHILDRES,RIDER + .long CHILDRES,SABONIS + .long CHILDRES,KANDERSON + +;22 SACRAMENTO + .long BOWENS,ABDULRAU + .long BOWENS,RICH + .long BOWENS,BGRANT + .long BOWENS,EDNEY + + .long ABDULRAU,BOWENS + .long ABDULRAU,RICH + .long ABDULRAU,BGRANT + .long ABDULRAU,EDNEY + + .long RICH,BOWENS + .long RICH,ABDULRAU + .long RICH,BGRANT + .long RICH,EDNEY + + .long BGRANT,BOWENS + .long BGRANT,ABDULRAU + .long BGRANT,RICH + .long BGRANT,EDNEY + + .long EDNEY,BOWENS + .long EDNEY,ABDULRAU + .long EDNEY,RICH + .long EDNEY,BGRANT + +;23 SAN ANTONIO + .long ELLIOT2,DROBINSON + .long ELLIOT2,VMAXWELL + .long ELLIOT2,AJOHNSON + .long ELLIOT2,DELNEGRO + + .long DROBINSON,ELLIOT2 + .long DROBINSON,VMAXWELL + .long DROBINSON,AJOHNSON + .long DROBINSON,DELNEGRO + + .long VMAXWELL,ELLIOT2 + .long VMAXWELL,DROBINSON + .long VMAXWELL,AJOHNSON + .long VMAXWELL,DELNEGRO + + .long AJOHNSON,ELLIOT2 + .long AJOHNSON,DROBINSON + .long AJOHNSON,VMAXWELL + .long AJOHNSON,DELNEGRO + + .long DELNEGRO,ELLIOT2 + .long DELNEGRO,DROBINSON + .long DELNEGRO,VMAXWELL + .long DELNEGRO,AJOHNSON + +;24 SEATTLE + .long KEMP,PAYTON + .long KEMP,SCHREMPF + .long KEMP,HAWKINS + .long KEMP,SFORD + + .long PAYTON,KEMP + .long PAYTON,SCHREMPF + .long PAYTON,HAWKINS + .long PAYTON,SFORD + + .long SCHREMPF,KEMP + .long SCHREMPF,PAYTON + .long SCHREMPF,HAWKINS + .long SCHREMPF,SFORD + + .long HAWKINS,KEMP + .long HAWKINS,PAYTON + .long HAWKINS,SCHREMPF + .long HAWKINS,SFORD + + .long SFORD,KEMP + .long SFORD,PAYTON + .long SFORD,SCHREMPF + .long SFORD,HAWKINS + +;25 TORONTO + .long CROGERS,CAMBY + .long CROGERS,STOUDAMI + .long CROGERS,PJONES + .long CROGERS,WWILLIAM + + .long CAMBY,CROGERS ;new + .long CAMBY,STOUDAMI + .long CAMBY,PJONES + .long CAMBY,WWILLIAM + + .long STOUDAMI,CROGERS + .long STOUDAMI,CAMBY + .long STOUDAMI,PJONES + .long STOUDAMI,WWILLIAM + + .long PJONES,CROGERS + .long PJONES,CAMBY + .long PJONES,STOUDAMI + .long PJONES,WWILLIAM + + .long WWILLIAM,CROGERS + .long WWILLIAM,CAMBY + .long WWILLIAM,STOUDAMI + .long WWILLIAM,PJONES + +;26 UTAH + .long STOCKTON,MALONE_K + .long STOCKTON,HORNACEK + .long STOCKTON,CMORRIS + + .long MALONE_K,STOCKTON + .long MALONE_K,HORNACEK + .long MALONE_K,CMORRIS + + .long HORNACEK,STOCKTON + .long HORNACEK,MALONE_K + .long HORNACEK,CMORRIS + + .long CMORRIS,STOCKTON + .long CMORRIS,MALONE_K + .long CMORRIS,HORNACEK + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;27 VANCOUVER + .long ANTHONY,EDWARDS + .long ANTHONY,BREEVES + + .long EDWARDS,ANTHONY + .long EDWARDS,BREEVES + + .long BREEVES,ANTHONY + .long BREEVES,EDWARDS + + .long 0,0 ;REMOVE!!! + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + .long 0,0 + +;28 WASHINGTON + .long STRICKLA,WEBBER + .long STRICKLA,JHOWARD + .long STRICKLA,MURESAN + .long STRICKLA,CHEANEY + + .long WEBBER,STRICKLA + .long WEBBER,JHOWARD + .long WEBBER,MURESAN + .long WEBBER,CHEANEY + + .long JHOWARD,STRICKLA + .long JHOWARD,WEBBER + .long JHOWARD,MURESAN + .long JHOWARD,CHEANEY + + .long MURESAN,STRICKLA + .long MURESAN,WEBBER + .long MURESAN,JHOWARD + .long MURESAN,CHEANEY + + .long CHEANEY,STRICKLA + .long CHEANEY,WEBBER + .long CHEANEY,JHOWARD + .long CHEANEY,MURESAN +;DJT End + +; +; This table contains the MUGSHOT of the small head img. for the heads in +; 'CREATE PLAYER' (coresponds with 'plr_heads_small' in plyr3.asm) +; +create_plr_mugshots_tbl + .long COW + .long ALIEN + .long PIP_CHI + .long CHK + .long KIM_MUG + .long FIFI_MUG + .long GOR + .long JON_CHA + .long MIK + .long LIS + .long BAL_MUG + .long OLD + .long JAC_MUG + .long CLO_MUG + .long MAR_MUG + .long HIL_DET + .long BER + .long OLA_HOU + .long FAT + .long ANG + .long VIK_MUG + .long MOU_MIA + .long FRA + .long HAR_ORL + .long GUIDO + .long GRE + .long PIG + .long KMP_SEA + .long CHE_MUG + .long MEL + .long WIZ + .long WEB_WAS + .long JOE + .long MXV_MUG + .long EDD_MUG + .long OUR_MUG + .long BAR_MUG + .long WIL_MUG + .long ERI_MUG + .long SEA_MUG + .long MIK_MUG + .long DIM_MUG + +create_plr_mugshots_tbl_end + .long COW + .long ALIEN + .long PIP_CHI + .long CHK +create_plr_mugshots_tbl_end2 + +;----------------------------------------------------------------------------- + + .end diff --git a/SRC/SOUNDS.ASM b/SRC/SOUNDS.ASM new file mode 100644 index 0000000..a63f0dc --- /dev/null +++ b/SRC/SOUNDS.ASM @@ -0,0 +1,1287 @@ +;;CHECK line 202 and 266 (audits and adj. stuff) +;;MUST FIX SOUND WATCHDOG - I COMMENTED IT OUT +****************************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff Johnson/Dan Thompson +* Initiated: +* +* Modified: Shawn Liptak, 9/30/91 -High speed version (Total carnage) +* Shawn Liptak, 1/8/92 -Reserved 8 channels +* Shawn Liptak, 2/19/92 -Basketball (cleanup) +* Shawn Liptak, 10/2/92 -TUNIT mods +* Jamie Rivett, -NBA JAM +* Jeff Johnson, 4/12/95 -NBA 3 support for DCS snd board +* JBJ,DJT 11/16/95 -Make it work for NBA HANGTIME +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 11/16/95 18:30 +****************************************************************************** + .file "sounds.asm" + .title "sound processor" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "sys.equ" + .include "game.equ" + .include "macros.hdr" + .include "audit.equ" + + +;-------------------- +; Globals defined elsewhere + + .ref _soundirq_addr + .ref _coin_counter_addr + .ref _sound_addr + .ref _coin_addr + + .ref GET_ADJ + .ref PUT_ADJ + .ref F_ADC_S + + .ref GAMSTATE + + .ref AUD1 + .ref gmqrtr + + +;-------------------- +; Globals defined here + + .def SNDSND +; .def FADE_UP,FADE_DOWN,ALLOFF + + .def organ_fx1_sc,organ_fx2_sc + .def crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + +;-------------------- +; Constants + + .asg 6000,SNDBRD_RES_CNT ;Sound board reset-cycle delay cnt + +send .set >0001 ; script command --> send sound code +setpri .set >0002 ; script command --> set priority +endtune .set >0003 ; script command --> end of tune script +sleep .set >0004 ; script command --> sleep next byte +send2 .set >0005 +ex .set >8000 ; flag: extended sound call !! + + +;-------------------- +; Channel ram table + + .bss channel_ram,0 + + BSSX chan1pri,16 ; sound channel #1 priority + BSSX chan1dur,16 ; sound channel #1 duration (timer) + BSSX chan1snd,16 ; sound channel #1 current sound + + BSSX chan2pri,16 ; sound channel #2 priority + BSSX chan2dur,16 ; sound channel #2 duration (timer) + BSSX chan2snd,16 ; sound channel #2 current sound + + BSSX chan3pri,16 ; sound channel #3 priority + BSSX chan3dur,16 ; sound channel #3 duration (timer) + BSSX chan3snd,16 ; sound channel #3 current sound + + BSSX chan4pri,16 ; sound channel #4 priority + BSSX chan4dur,16 ; sound channel #4 duration (timer) + BSSX chan4snd,16 ; sound channel #4 current sound + + BSSX chan5pri,16 ; sound channel #4 priority + BSSX chan5dur,16 ; sound channel #4 duration (timer) + BSSX chan5snd,16 ; sound channel #4 current sound + + BSSX chan6pri,16 ; sound channel #4 priority + BSSX chan6dur,16 ; sound channel #4 duration (timer) + BSSX chan6snd,16 ; sound channel #4 current sound + + .bss script_que,(32+16)*50 ;sound/speech calls que + .bss script_que_end,0 + + .bss script_cur,32 + .bss script_nxt,32 + .bss script_dly,16 + + .bss channel_ram_end,0 + + .asg chan1pri-channel_ram,CHANPRI ; priority offset + .asg chan1dur-channel_ram,CHANDUR ; duration offset + .asg chan1scp-channel_ram,CHANSCP ; script pointer offset + .asg chan1snd-channel_ram,CHANSND ; current sound offset + .asg chan2pri-channel_ram,CHANSIZ ; current sound offset + + +;-------------------- +; + + BSSX sound_rev,16 + BSSX SOUNDSUP ,16 ;!0=Sounds off + + BSSX doing_dcs_reset,16 + +;;;; .bss SNDSTR,6*CHANSIZ ;RESERVE STORAGE AREA +;;;; .bss SNDEND,0 ;END OF SOUND PROCESSOR RAM + + + .text + + +; +; sounds +; +; sound table ptr. name, priority:channel, duration, snd nbr. + SX select_snd1, >0201,05, >310 ;select option sound + SX select_snd2, >0202,05, >311 + SX select_snd3, >0203,05, >312 + SX select_snd4, >0204,05, >313 + SX cursor_snd1, >0101,09, >30c ;cursor movement + SX cursor_snd2, >0102,09, >30d ; + SX cursor_snd3, >0103,09, >30e ; + SX cursor_snd4, >0104,09, >30f ; + SX win_snd, >2504,75, >172 ;Winner snd/Suckup credits + SX bounce_snd, >0001,27, >260 ;Ball bounce + SX plaque_fall1,>2501,91, >1f6 + SX plaque_fall2,>2502,91, >1f7 + SX plaque_fall3,>2503,91, >1f8 + SX plaque_fall4,>2504,91, >1f9 + SX plaque_land1,>2601,99, >3a3 + SX plaque_land2,>2602,99, >3a4 + SX plaque_land3,>2603,99, >3a5 + SX plaque_land4,>2604,99, >3a6 + SX opt_scr_cur, >1501,54, >1bd ;option screen + SX opt_scr_sel, >1501,30, >3fd ;397 (PUT ON TRACK 5) + SX combo_lock1, >1101,45, >3fd + SX combo_lock2, >1102,45, >3fe + SX combo_lock3, >1103,45, >3ff + SX combo_lock4, >1104,45, >400 + SX adv_stats, >1001,15, >260 + SX coin_snd, >ff04,35, >255 ;coin in melody snd + SX beep2_snd, >0001,5, >280 ;beep tone for diagnostics + SX cntdown_snd, >1505,50, >20a ;buyin cntdwn clang + SX horn_snd, >4001,120,>2fb ;horn + SX atrib_snd1, >0101,10, >3bb + SX atrib_snd2, >0101,10, >3bf + SX atrib_snd3, >0101,10, >3c3 + SX atrib_snd4, >0101,10, >3c7 + SX atrib_snd5, >0101,10, >3cb + SX atrib_snd6, >0101,10, >3cf + SX atrib_snd7, >0101,10, >3d3 + SX atrib_snd8, >0101,10, >3d7 + SX atrib_snd9, >0101,10, >3db + SX atrib_snd10, >0101,10, >3df + SX yes_no_cur1, >1501,15, >33b + SX yes_no_cur2, >1502,15, >33c + SX yes_no_cur3, >1503,15, >33d + SX yes_no_cur4, >1504,15, >33e + SX yes_no_sel1, >1501,20, >268 + SX yes_no_sel2, >1502,20, >269 + SX yes_no_sel3, >1503,20, >26a + SX yes_no_sel4, >1504,20, >26b + SX butn_press, >0103,15, >399 + SX butn_press2, >0103,15, >399 + SX cursor_up, >0101,10, >1bd + SX cursor_dwn, >0101,10, >1be + SX cursor_lft, >0101,10, >33b + SX cursor_rgt, >0101,10, >33b + SX chkmrk0_snd, >0103,20, >371 + SX unchkmrk_snd,>0103,20, >371 + SX chkmrk_snd, >1501,20, >36f + SX chkmrk_snd2, >1502,20, >370 + SX chkmrk_snd3, >1503,20, >371 + SX chkmrk_snd4, >1504,20, >372 + SX cursor_up2, >0101,15, >33b + SX cursor_dwn2, >0101,15, >33b + SX cursor_lft2, >0101,25, >33b + SX cursor_rgt2, >0101,25, >33b + SX cursor_up3, >0101,25, >33b + SX cursor_dwn3, >0101,25, >33b + SX whitsle_snd, >1504,45, >2f3 +;DJT Start + SX homeaway_cur,>0101,20, >27c + SX bx_slide_snd,>0001,28, >1f6 + + SX diag_cursor, >0501,20, >27c + SX diag_select, >0501,20, >280 + SX update_adj, >0501,18, >278 + SX adj_menu_ext,>0501,20, >280 +; SX adj_menu_ent,>0501,27, >280 + SX error_found, >0501,20, >260 ;367 ? + +;DJT End + SX tm_sel_cur1, >1501,36, >33b + SX tm_sel_cur2, >1502,36, >33c + SX tm_sel_hd_l1,>1501,47, >32b + SX tm_sel_hd_r1,>1501,47, >32b + SX tm_sel_hd_l2,>1502,47, >32c + SX tm_sel_hd_r2,>1502,47, >32c + SX tm_sel_sel1, >3201,65, >3fd ;397 + SX tm_sel_sel2, >3202,65, >3fe ;398 + SX tm_sel_ran1, >3001,116,>3f9 + SX tm_sel_ran2, >3002,116,>3fa + SX sel_rndmend1,>3101,45, >3a3 + SX sel_rndmend2,>3102,45, >3a4 + SX tm_sel_stats,>0001,27, >260 + SX combo_but1, >1001,32, >36b + SX combo_but2, >1002,32, >36c + SX combo_but3, >1003,32, >36d + SX combo_but4, >1004,32, >36e + SX powrup_awrd1,>2501,45, >222 + SX powrup_awrd2,>2501,45, >222 ;no track two + SX powrup_awrd3,>2503,45, >224 + SX powrup_awrd4,>2504,45, >225 + SX tick_snd, >1504,20, >1fd +;DJT Start + SX warn_snd, >1504,25, >283 ;1fd + SX tfire_tcksnd,>1504,35, >176 ;27f + SX tfire_outsnd,>1504,70, >400 +;DJT End + SX alert_snd, >2704,50, >15e + SX ot_alert_snd,>2504,50, >3b6 + SX infoex_snd, >0501,18, >260 + SX sqk1_snd, >0103,25, >8b ;Sneaker squeek + SX sqk2_snd, >0103,25, >8d + SX sqk3_snd, >0103,25, >90 + SX sqk4_snd, >0103,25, >93 + SX sqk5_snd, >0103,25, >97 + SX sqk6_snd, >0103,25, >9a + SX scuf1_snd, >0103,25, >b5 + SX scuf2_snd, >0103,25, >b6 + SX scuf3_snd, >0103,25, >b7 + SX scuf4_snd, >0103,25, >b8 + + SX fball_snd, >1903,104,>2e2 + SX fpass_snd, >1903,85, >c9 ;fire ball pass sound + SX rim_fire_snd,>350B,90, >cc +;DJT Start + SX netmush_snd, >3503,80, >ce + SX aly_pass_snd,>1903,104,>2e2 + SX aly_rcv_snd, >200C,20, >9b +;DJT End + + SX pass_snd, >1204,20, >bb ;147 +; SX pass_snd, >1201,20, >b9 ;147 + SX swipe_snd, >1401,20, >130 + SX elbow1_snd, >1601,35, >180 + SX elbow2_snd, >1601,35, >186 + SX push1_snd, >1101,30, >183 + SX flail_snd, >1501,30, >180 + SX fall1_snd, >1501,26, >183 + SX land_snd, >1401,15, >a2 ;(a4-tr3) + SX yell_snd, >1201,100,>198 + + SX flsh1_snd, >0501,19, >177 + SX flsh3_snd, >0503,19, >179 + SX flsh4_snd, >0504,19, >17a + SX boo_snd, >1204,179,>1dd ;e6 + SX boo1_snd, >1204,179,>1dd ;e6 + SX tip_snd, >200C,23, >9e ;19f ;9b + SX eat_snd, >8501,10, >37b ;** + + SX organ1_snd, >0504,75, >1a6 + SX organ2_snd, >0504,60, >1a8 + SX organ3_snd, >0504,50, >1aa + SX organ8_snd, >0504,135,>1b4 + SX organ9_snd, >0504,98, >1b6 + SX organ10_snd, >0504,100,>1b8 + + SX car_pass_snd,>1504,90, >1c7 + SX siren_snd, >1504,145,>1c9 ;** TURN UP ** + SX prop_ple_snd,>1504,100,>20c + SX chrch_bel_sp,>1504,140,>210 + SX car_pas2_snd,>1504,130,>212 + SX ambulne_snd, >1504,120,>214 + SX ambulne2_snd,>1504,120,>216 + SX fire_trk_snd,>1504,120,>218 +; SX train_snd, >1504,145,>21a + + SX crwd_blchrs, >1504,182,>1e5 ;ed + SX crwd_go_team,>1504,101,>1f5 ;f4 + SX crwd_defence,>1504,186,>1e1 ;eb + + SX swish_snd1, >310B,27, >83 ;regular net + SX swish_snd2, >310B,27, >84 + SX swish_snd3, >310B,27, >86 + SX swish_snd4, >310B,32, >af ;chain net (outdoor court) + SX swish_snd5, >310B,32, >b0 + SX swish_snd6, >310B,32, >af + + SX dunk_snd1, >320B,58, >66 + SX dunk_snd2, >320B,54, >66 + SX dunk_snd3, >320B,56, >66 + SX dunk_snd4, >320B,48, >6c + SX dunk_snd5, >320B,53, >ad ;outdoor court + + SX spn_mv_snd, >1503,30, >10f + + SX miss1_snd, >3103,32, >74 + SX miss2_snd, >3103,21, >75 + SX miss3_snd, >3103,23, >77 + SX miss4_snd, >3103,23, >77 + SX miss5_snd, >3103,25, >ae ;outdoor court + SX missd1_snd, >3103,77, >11f + + SX hitbkbd_snd, >1503,20, >70 + SX hitbkbd2_snd,>1503,20, >82 ;outdoor court + + SX stealsb, >200C,20, >9b + SX swat_snd, >200C,20, >9b ;a3 ;slap ball sound + SX intercept, >3003,33, >169 ;16a + SX steal_snd, >3003,33, >169 ;16a ;flash ball sound + + SX dribble_snd, >1003,20, >6d ;64 + SX dribble2_snd,>1004,23, >bf + SX dribble3_snd,>1003,20, >6e + + SX trns1_snd, >0501,29, >130 + SX trns2_snd, >0502,29, >139 + SX trns3_snd, >0503,29, >13e + SX trns4_snd, >0504,29, >137 + SX trnd1_snd, >0601,30, >397 + SX trnd2_snd, >0602,30, >398 + SX trnd3_snd, >0603,30, >399 + SX trnd4_snd, >0604,30, >39a + SX untrns1_snd, >0901,29, >130 + SX untrns2_snd, >0902,29, >139 + SX untrns3_snd, >0903,29, >13e + SX untrns4_snd, >0904,29, >137 + + SX robo_1_snd, >3401,204, >bb0 ;End wave snd + SX robo_2_snd, >3403,109, >ba2 ;Effect 1 - storm cloud on + SX robo_3_snd, >3401,109, >b90 ;flash ABA ball white +;DJT Start + SX hs_shot_snd, >1803,50, >b92 ;take a hotspot shot +; SX hs_shot_snd, >1803,50, >b92 ;alternate? for hot hotspot +;DJT End + +;dunk sounds +;DJT Start + SX helicptr_snd,>1603,90, >a6 +;DJT End + SX jet4_snd, >1603,70, >2f9 + SX jet1_snd, >1603,80, >108 + SX jet2_snd, >1603,80, >128 + SX jet3_snd, >1603,80, >126 + SX tarzan, >1603,70, >123 +; +;tunes +; + SX tm_fire_tune,>0100,100,25 + SX buyin_tune, >0100,100,11 + SX pregame_tune,>0100,100,13 ;1 + SX tunegc_snd, >0100,100,3 ;Grand champion play tune + SX tuneq1_snd, >0100,100,5 + SX tuneq1ed_snd,>0100,100,51 + SX tuneq2_snd, >0100,100,14 + SX tuneq2ed_snd,>0100,100,53 + SX tuneq3_snd, >0100,100,5 + SX tuneq3ed_snd,>0100,100,51 + SX tuneq4_snd, >0100,100,14 + SX tuneq4ed_snd,>0100,100,51 + SX tuneot_snd, >0100,100,5 + SX tuneoted_snd,>0100,100,51 + + SX tune_wingame,>0100,100,24 + SX tune_gmovr, >0100,100,18 + SX hangtime_snd,>0100,100,19 + + SX tunehalf_snd,>0100,100,39 ;halftime tune + SX tune_cap_snd,>0100,100,7 ;create-a-player tune + SX tuneend_snd, >0100,100,0 ;kill any tune + + +; +; scripts +; +organ_fx1_sc LWLWLW organ1_snd,75,organ2_snd,60,organ3_snd,-1 +organ_fx2_sc LWLWLW organ8_snd,135,organ9_snd,98,organ10_snd,-1 +crwd_blchrs_sc LW crwd_blchrs,-1 +crwd_goteam_sc LWLW crwd_go_team,102,crwd_go_team,-1 +crwd_defnse_sc LWLW crwd_defence,102,crwd_defence,-1 + + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* * +* reset sound board * +* * +* this is a full reset, checksum dings and all. this is the same routine +* that was in the old (gspsnd) processor. (ed boon) +* +* NOTE: If any data are sent to the sound board within ~270msec of the +* reset signal, diagnostics will be skipped and there won't be any +* loud and annoying bongs. +* + + SUBR snd_reset + PUSH a0,a1 + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + PULL a0,a1 + rets +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +;DJT Start + .if 0 ;Not called! +;DJT End +#***************************************************************************** +* +* + SUBR watch_snd_reset + + move @_soundirq_addr,a8 +wsr_1 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrz wsr_1 ; done? + LOCKUP +wsr_2 + SLEEPK 1 + + move *a8,a0 + btst 10,a0 + jrnz wsr_2 ; done? + + jruc wsr_1 +;DJT Start + .endif ;0 ;Not called! +;DJT End + + +#***************************************************************************** +* +* Quiet sound board reset +* +* Just like snd_reset, but without the diagnostic tests and consequent chimes. +* It also sets the volume to the CMOS level. +* +* NOTE: Don't CALLx this function, JSRP it. It SLEEPs. +* +* Trashes everything except the reggies which get saved by default when +* you sleep... + + SUBR QSNDRST + + movk 1,a14 + move a14,@doing_dcs_reset + + movi SNDRSTBIT|32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + movi SNDBRD_RES_CNT,a0 ;Wait for it to catch + dsjs a0,$ + + movi 32,a0 + move @_coin_counter_addr,a1,L + move a0,*a1 + + SLEEPK 2 + move @_sound_addr,a0,L + movb a14,*a0 + + SLEEPK 4 +;DJT Start + clr a14 + move a14,@doing_dcs_reset + +;DJT End + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + + callr clear_sound_ram + +;DJT Start +;DJT moved doing_dcs_reset up a few lines +;DJT End + RETP + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + SUBR set_game_snd + + PUSH a0 + + movi ADJVOLUME,a0 + calla GET_ADJ + + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + callr set_volume ;Set master vol to CMOS level + PULL a0 + rets + +#***************************************************************************** +* PROCESS that quietly resets the sound board, then dies. Useful when you +* don't feel like waiting for the reset to finish before you move on. + + SUBR qsndrst_proc + +;DJT Start + JSRP QSNDRST + DIE +;DJT End + + +#***************************************************************************** +* Sets the volume of the DCS. +* >a0=volume (0-255) +* + + SUBR set_volume + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets + +;DJT Start + .if 0 ;not called! +;DJT End +#***************************************************************************** +* Sets the volume of the DCS (for attract mode). +* >a0=volume (0-255) +* + + SUBR set_volume_for_amode + + movi ADJAVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + + + SUBR set_volume_amode_diag + + PUSH a0,a1,a3 + + andi 0FFh,a0 ;forces value into range + movi 55AAh,a3 + callr SNDSND + + move a0,a3 ; volume + move a0,a1 + not a1 ; sans volume + sll 32-8,a1 + srl 32-8,a1 + sll 8,a3 + or a1,a3 ; a3 = [volume,sans volume] + callr SNDSND + + move a0,a1 + movi ADJAVOLUME,a0 + calla PUT_ADJ + calla F_ADC_S + + PULL a0,a1,a3 + rets +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** +* Raw hardware sound call. +* >a3=sound code + + SUBR SNDSND + + PUSH a0,a1,a2,a3,a4 +;DJT Start +; move @doing_dcs_reset,a0 ;Still in a reset? +; jrnz sendx ; br=yes, don't do anything yet +;DJT End + move @SOUNDSUP,a0 ; are we allowed ?? + jrnz sendx ; no + + move a3,a3 ; is it a null call (negative)? + jrn sendx + + move a3,a0 + sll 32-16,a3 + srl 32-8,a3 ; a3 = high byte +* +* send high byte +* + move @_sound_addr,a4,L + move a3,*a4 + +; movk 2,a2 + movk 5,a2 + dsj a2,$ ; time for signal to get through + callr poll_sirq +* +* send low byte +* + sll 32-8,a0 + srl 32-8,a0 ; a3 = low byte + move @_sound_addr,a4,L + move a0,*a4 + + callr poll_sirq + +sendx PULL a0,a1,a2,a3,a4 + rets + + +#***************************************************************************** +* Poll sound IRQ. When IRQ goes high, sound board is ready for next call. +* Do timeout so sound board can't screw things up. + + SUBRP poll_sirq + + movi 390/3,a4 ; 180 micros max firq delay on snd board +#poll3 + move @_soundirq_addr,a1,L + addi (B_SIRQ-7),a1 + movb *a1,a1 + jrn #poll9 ; done? + dsj a4,#poll3 +#poll9 + rets + + + .asg 0,CHAN_PRI + .asg 16,CHAN_DUR + .asg 32,CHAN_SND + +******************************** +* Plays a sound once, overriding any current lower priority sound +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1ovrp + SUBR snd_play1ovr + rets + +#****************************************************************************** +* Plays a list of sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR script_play1 + + PUSH a1,a2,a3 +; +;If the first sound call of script has a lower priority than the current sound +; playing..then don't que this script +; + move *a0,a2,L ;get first sound call ptr + move *a2,a1 ;get priority:channel + andi 7,a1 ;get channel number + sll 4,a1 + move a1,a14 + add a14,a14 + add a14,a1 + addi channel_ram,a1 ;pt to ram to change + + move *a1(CHAN_DUR),a14 ;get time remaining + jrz #scrpt ;br=channel clear... + move *a1(CHAN_PRI),a14 ;priority:chnl of snd playing + srl 8,a14 ;get priority + move *a2,a1 ;priority:chnl of script + srl 8,a1 ;get priority + cmp a1,a14 + jrge #spexit ;br=cant interupt snd + +#scrpt + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sp0 + movi script_que,a14,L + move a14,a1 + move a14,a2 + move a1,@script_cur,L + move a2,@script_nxt,L +#sp0 + move a0,a3 + jruc #sp2 +;will script fit in que ? +#sp1 + cmpi script_que_end,a2,L + jrne #sp1a + movi script_que,a2,L +#sp1a + cmp a2,a1 + jrne #sp2 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#sp2 + addk 32,a3 + addi 48,a2 + move *a3+,a14 + jrnn #sp1 + + move @script_nxt,a2,L + +#sp3 +;copy script into que + move *a0+,a3,L + jrn #dbsp1 + .if DEBUG + LOCKUP + .endif + jruc #spexit +#dbsp1 + move a3,*a2+,L ;get sound call ptr + + .if DEBUG + move *a3,a14,W + cmpi >ff0A,a14 ;invalid priority:channel ? + jrgt #dbsp2 ;br=yep + move *a3(16),a14,W + cmpi 314,a14 ;invalid duration ? + jrhs #dbsp2 ;br=yep + move *a3(32),a14,W + cmpi >c00,a14 ;invalid sound call nbr. ? + jrlo #dbsp3 ;br=no +#dbsp2 + LOCKUP + jruc #spexit + +#dbsp3 + .endif + move *a0+,a14 ;get delay (or end of script maker) ;get sound call ptr + jrn #sp4 + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp3 + movi script_que,a2,L + jruc #sp3 +#sp4 + move *a3(16),a14,W + move a14,*a2+,W + cmpi script_que_end,a2,L + jrne #sp4a + movi script_que,a2,L +#sp4a + move a2,@script_nxt,L +#spexit + PULL a1,a2,a3 + rets + + +#****************************************************************************** +* Plays a sounds +* +* A0=* to sound data +* Trashes scratch + + SUBR snd_play1 + + PUSH a0,a1,a2,a3,a4 + + move *a0+,a1 ;get priority:channel + move *a0+,a2 ;get snd duration + move *a0,a3 ;get sound # + + move a1,a4 + andi 7,a4 ;get channel number + + cmpi 6,a4 ;invalid priority:channel ? + jrlt #valid ;br=yep + .if DEBUG + LOCKUP + .endif + jruc #done +#valid + sll 4,a4 + move a4,a14 + add a14,a14 + add a14,a4 + addi channel_ram,a4 ;pt to ram to change + + move *a4(CHAN_DUR),a14 + jrz #play_it + move *a4,a14 ;get priority of snd playing +; jrn #done ;br=cant interupt snd + + .if DEBUG + cmpi >ff0A,a1 ;invalid priority:channel ? + jrgt #lckup ;br=yep + cmpi 800,a2 ;invalid duration ? + jrhs #lckup ;br=yep + cmpi >c00,a3 ;invalid sound call nbr. ? + jrlo #valok ;br=no +#lckup + LOCKUP + jruc #done +#valok + .endif + + move a1,a0 + srl 8,a0 + srl 8,a14 + cmp a14,a0 ;new snd have > priority ? + jrlt #done ;br=no + jrgt #play_it ;br=yep + move *a4,a14 ;get priority of snd playing + btst 3,a14 ;is sound interuptable ? + jrnz #done ;br=no +#play_it + move a1,*a4+ ;priority:channel + move a2,*a4+ ;duration + move a3,*a4 ;sound call number + callr SNDSND +#done + PULL a0,a1,a2,a3,a4 + rets + + +******************************** +* Sound processor called every main loop (16 MSEC) +* Trashes scratch, A2-A3 + + SUBR snd_update + + move @chan1dur,a0,W ; channel #1 timing down ? + jrz #sup2 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan1dur,W ; update duration ram +#sup2 + move @chan2dur,a0,W ; channel #2 timing down ? + jrz #sup3 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan2dur,W ; update duration ram +#sup3 + move @chan3dur,a0,W ; channel #3 timing down ? + jrz #sup4 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan3dur,W ; update duration ram +#sup4 + move @chan4dur,a0,W ; channel #4 timing down ? + jrz #sup5 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan4dur,W ; update duration ram +#sup5 + move @chan5dur,a0,W ; channel #5 timing down ? + jrz #sup6 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan5dur,W ; update duration ram +#sup6 + move @chan6dur,a0,W ; channel #6 timing down ? + jrz #sup7 ; nope.... + dec a0 ; yes, count this tick !! + move a0,@chan6dur,W ; update duration ram +#sup7 + move @script_dly,a0,W + jrz #sup7aa + dec a0 + move a0,@script_dly,W ; update duration ram + rets + +#sup7aa + move @script_cur,a1,L + move @script_nxt,a2,L + jrnz #sup7a + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets +#sup7a + move *a1,a0,L ;get script table ptr + jrz #exit + clr a14 + move a14,*a1+,L + move *a1+,a14 ;get sound table ptr + move a14,@script_dly + callr snd_play1 + + cmpi script_que_end,a1,L + jrne #sup7b + movi script_que,a1,L +#sup7b + move a1,@script_cur,L +#exit + rets + + +#***************************************************************************** +* nosounds +* +* cancels all sound calls. zeros all priorities and stops all +* currently running tunes. +* + + SUBR nosounds + + PUSH a0,a1 + clr a3 + callr SNDSND ; silence the music board + + callr clear_sound_ram + + PULL a0,a1 + rets + + +#***************************************************************************** +* +* + + SUBRP clear_sound_ram + + clr a0 + movi channel_ram,a1 +nos2 + move a0,*a1+,W ; zero u out !!! + cmpi channel_ram_end,a1 ; everyone cleared ?? + jrne nos2 ; nope, do more + +;clear SCRIPT ram + clr a14 + move a14,@script_que,L + move a14,@script_que+32,L + move a14,@script_que+64,L + move a14,@script_que+96,L + move a14,@script_que+128,L + move a14,@script_que+160,L + + movi script_que,a14,L + move a14,@script_cur,L + move a14,@script_nxt,L + rets + + +;************************************************************************** +;* * +;* FADE_UP - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_UP +; MOVI FADE_UP_TAB,A8 +; JRUC FADER +;************************************************************************** +;* * +;* FADE_DOWN - PROCESS TO FADE THE SOUND UP * +;* A11 = FADE RATE * +;* * +;************************************************************************** +;FADE_DOWN +; MOVI FADE_DOWN_TAB,A8 +; JRUC FADER +; +;FADER +; MOVI FADEPID,A0 +; CLR A1 +; NOT A1 +; CALLA KILALL ;WASTE ANY OTHER FADERS +;FADE_LP +; MOVE *A8+,A0,L +; JRZ FADE_DONE +; callr snd_play1 +; SLOOPR A11,FADE_LP +;FADE_DONE +; DIE +; +;FADE_UP_TAB +; .LONG VOLUME0 +; .LONG VOLUME1 +; .LONG VOLUME2 +; .LONG VOLUME3 +; .LONG VOLUME4 +; .LONG VOLUME5 +; .LONG VOLUME6 +; .LONG VOLUME7 +; .LONG VOLUME8 +; .LONG VOLUME9 +; .LONG VOLUMEA +; .LONG VOLUMEB +; .LONG VOLUMEC +; .LONG VOLUMED +; .LONG VOLUMEE +; .LONG VOLUMEF +; .LONG 0 +; +;FADE_DOWN_TAB +; .LONG VOLUMEF +; .LONG VOLUMEE +; .LONG VOLUMED +; .LONG VOLUMEC +; .LONG VOLUMEB +; .LONG VOLUMEA +; .LONG VOLUME9 +; .LONG VOLUME8 +; .LONG VOLUME7 +; .LONG VOLUME6 +; .LONG VOLUME5 +; .LONG VOLUME4 +; .LONG VOLUME3 +; .LONG VOLUME2 +; .LONG VOLUME1 +; .LONG VOLUME0 +; .LONG 0 +; +; +;************************************************************************** +;* POPULAR SOUND CALLS +; +;*HIGH PRIORITY OFF CODES, NOTHING SHOULD BEAT THESE +;CVSDOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD BACKGROUND LOOP OFF +;CVSDFOFF .WORD >F0FF|>800,>01,>8000,0 ;CVSD FOREGROUND LOOP OFF +;SOUNDOFF .WORD >F0FF|>800,>01,>8000,0 ;TURN SOUND SIDE OFF +;ALLOFF .WORD >F3FF|>800,>01,>8000,0 ;MUSIC AND EFFECTS OFF +;MUSITOFF .WORD >F3FF|>800,>01,>8040,0 ;MUSIC TRANSITION OFF +; +;VOLUME0 .WORD >F3FE,>1,>802F,0 +;VOLUME1 .WORD >F3FE,>1,>802E,0 +;VOLUME2 .WORD >F3FE,>1,>802D,0 +;VOLUME3 .WORD >F3FE,>1,>802C,0 +;VOLUME4 .WORD >F3FE,>1,>802B,0 +;VOLUME5 .WORD >F3FE,>1,>802A,0 +;VOLUME6 .WORD >F3FE,>1,>8029,0 +;VOLUME7 .WORD >F3FE,>1,>8028,0 +;VOLUME8 .WORD >F3FE,>1,>8027,0 +;VOLUME9 .WORD >F3FE,>1,>8026,0 +;VOLUMEA .WORD >F3FE,>1,>8025,0 +;VOLUMEB .WORD >F3FE,>1,>8024,0 +;VOLUMEC .WORD >F3FE,>1,>8023,0 +;VOLUMED .WORD >F3FE,>1,>8022,0 +;VOLUMEE .WORD >F3FE,>1,>8021,0 +;VOLUMEF .WORD >F3FE,>1,>8020,0 + + + + +#***************************************************************************** +* saves 16 bits in a3 + +; .if DEBUG +; +; SUBRP save_sound +; +; PUSH a1,a2 +; +; cmpi EXTENDED_CODE,a3 ;extended? +; jreq #nosave +; +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; move a1,@slist_offset +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a3,*a1+ ;save it +; +; movi 0ffffh,a2 +; move @slist_offset,a1 +; inc a1 +; andi 31,a1 +; sll 4,a1 ;*16 +; addi sounds_list,a1 +; move a2,*a1 ;mark end of buffer +; +;#nosave +; PULL a1,a2 +; rets +; +; .endif + +#***************************************************************************** + +; SUBR set_sound_rev +; +; +; RETP + + +#***************************************************************************** + SUBR sound_watchdog + +;;;;;;;;;;TEMP + DIE +;;;;;;;;;;TEMP + +;DJT Start + .if 0 ;not called! +;DJT End + SLEEPK 1 + move @SOUNDR,a0 ;clear sound data available latch + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + SLEEPK 8 + movb @SOUNDR,a3 + move a3,@sound_rev ;determine snd board rev. +#watchdog_loop + SLEEP 60 + movi 0ffaah,a3 ;Pull sound section interrupt + move a3,@SOUND ;Hit sound (LOW) + movk 8,a14 + dsj a14,$ ;Slow it down a bit + + .if 0 + movi 390/3,a3 ;180 micros max firq delay on snd board +#lp1 movb @SOUNDIRQ+B_SIRQ-7,a14 + jrn #ok1 ;Done? + dsj a3,#lp1 +* timed out, irq must be dead! +* ERROR #1 + movi AUD_SNDERR1,a0 ;log it + calla AUD1 + jruc #reset_board + .endif + +#ok1 + move @sound_rev,a0 ;if old sound board software + cmpi 05ah,a0 ;then skip these two checks + jrne sound_watchdog + SLEEPK 8 ;approx 128 msec delay + movb @SOUNDIRQ+B_SDAV-7,a14 + jrn #ok2 + +* sound data not available +* ERROR #2 + movi AUD_SNDERR,a0 ;log it + calla AUD1 + jruc #reset_board +#ok2 + movb @SOUNDR,a3 + cmpi 05ah,a3 + jreq #watchdog_loop + +* invalid read back value +* ERROR #3 + movi AUD_SNDERR,a0 ;log it + calla AUD1 +#reset_board + +; callr QSNDRST ;quiet hardware sound board reset + JSRP QSNDRST + + SLEEP 90 + move @gmqrtr,a0 + sll 5,a0 + addi #tune_t,a0 + move *a0,a0,L + calla snd_play1ovr + + jruc #watchdog_loop + + +#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd + .long tuneot_snd,tuneot_snd,tuneot_snd,tuneot_snd +;DJT Start + .endif ;0 ;not called! +;DJT End + + +#***************************************************************************** + +VOLDN .equ 11 +VOLUP .equ 12 + + SUBR VOLBTN_PRESS + + ;in diagnostics? + move @GAMSTATE,a0,W + jrn #done + + ;already adjusting? + movi VOLADJ_PID,a0 + movi 0FFFFh,a1 + calla EXISTP + jrnz #done + + ;okay, adjust + movi VOLADJ_PID,a14 + move a14,*a13(PROCID),W + +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrz #voldn_loop +#volup_loop + ;increment the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + inc a0 + cmpi 255,a0 + jrle #up_okay + movi 255,a0 +#up_okay + calla set_volume + SLEEPK 1 + + ;if the vol+ button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLUP,a0 + jrnz #done + jruc #volup_loop + +#voldn_loop + ;decrement the volume + movi ADJVOLUME,a0 + calla GET_ADJ + BADCHK a0,0,255,28 ;reg, lo, hi, val if bad + dec a0 + jrnn #dn_okay + clr a0 +#dn_okay + calla set_volume + SLEEPK 1 + + ;if the vol- button is no longer down, die +; move @COINS,a0 + move @_coin_addr,a0,L + move *a0,a0 + btst VOLDN,a0 + jrnz #done + jruc #voldn_loop +#done DIE + +****************************************************************************** + .end diff --git a/SRC/SPEECH.ASM b/SRC/SPEECH.ASM new file mode 100644 index 0000000..ae3fc4b --- /dev/null +++ b/SRC/SPEECH.ASM @@ -0,0 +1,4704 @@ +;DJT Start whole file changed!! +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jeff johnson/Dan Thompson +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +**************************************************************** + .file "speech.asm" + .title "announcer speech" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "world.equ" + + .asg 0,SEQT + .include "plyr.equ" + +****************************************************************************** + +; .def name_speech + .def pass_speech + .def welcome_sc + + .ref ballobj_p + .ref special_heads ;-1 = normal player head + + .ref brick_count + .ref plyrproc_t + .ref ballpnum,ballpnumshot + .ref inbound + .ref ballrimhitcnt,ballbbhitcnt + .ref snd_play1 + .ref rndrng0,RNDPER + .ref game_time + .ref gmqrtr,scores + .ref ballptsforshot ;Point value for current shot (1-3) + .ref team1,team2 + .ref ballpnumscored ;Last plyr who scored (0-3) or neg + .ref ballnumscored ;# times last plyr scored + .ref plyr_onfire ;plyr who is on fire + .ref ballscorezhit + .ref seekdirdist_obxz128 + .ref ballobj_p + .ref get_player_stat + .ref error_found + + .ref SNDSND + .ref script_play1 + .ref organ_fx1_sc,organ_fx2_sc + .ref player_names,tm1set,tm2set,name_sort + .ref crwd_blchrs_sc,crwd_goteam_sc,crwd_defnse_sc + .ref player1_data,player2_data,player3_data,player4_data + .ref player_stats + .ref NUM_NICK_NAMES + .ref jet1_snd,jet2_snd,jet3_snd + .ref siren_snd,car_pass_snd + .ref prop_ple_snd,chrch_bel_sp,car_pas2_snd + .ref ambulne_snd,ambulne2_snd,fire_trk_snd + .ref tarzan,jet4_snd + .ref pup_court + .ref swat_snd + .ref must_rebound + .ref ballshotinair + + +#***************************************************************************** +;ram + + BSSX last_name, 16 ;last name called (0-3) + BSSX last_name_time, 16 ;# ticks since name called + BSSX shot_type, 16 ;dunk, 3ptr etc + BSSX plyr_shot, 16 ;player who shot last + BSSX shot_percentage,16 ;0-999 + BSSX shot_distance, 16 ;distance from hoop + .bss ugly_stat, 16 ;0=not ugly, 1=ugly called + BSSX score_diff, 16 ;+winning by, -losing by + .bss blowout_called, 16 ;0=not called, 1=called + .bss needshot_called,16 ;0=not called, 1=called + .bss freakout, 16 ;0=no freakout + BSSX jam_speech, 16 ;speech type to call when jammed +; BSSX next_call, 16 ;# shots before next score call + .bss sound_ram, 16*4*4 ;queued speech ram + .bss skycalled, 16 ;skyhook called (0=no) + BSSX spch_name_ram, 32*8 ;last and full names (4 players) + BSSX spch_pass_ram, 32*4 ;last and full names (4 players) + BSSX bkbrd_proc_flg, 16 ;'to' last name speech (4 players) + + .text + + .asg 16*3,TM_SPCH_TBL_SZ + .asg 16*3,NME_SPCH_TBL_SZ + + +; +;*************** +; SPEECH +;*************** +; + SX cheer_snd, >1004,110,>1cd + SX cheer1_snd, >1004,110,>1d1 + SX cheer2_snd, >1004,110,>1d5 + SX cheer3_snd, >1004,110,>1d9 + SX cheer4_snd, >1004,110,>1d5 + + SX crwdbed_kill,>7102,25, >dc + SX crwdbed_tune,>7002,799,>dd + SX crwdbd2_tune,>7002,799,>db + SX crwd_arbl_sp,>2404,135,>1ed ;f0 + + SX midway_sp, >200D,67, >b00 +;DJT Start + SX max_hngtm_sp,>200D,93, >b8f +; SX nba_hngtm_sp,>200D,99, >b02 +;DJT End + SX at_hlftme_sp,>150D,61, >adc + SX gm_undrwy_sp,>150D,70, >adb + SX heres_tip_sp,>150D,61, >b20 + SX overtime_sp, >200D,60, >add + SX showtm, >250D,75, >a9b + SX tst_triva_sp,>100D,76, >afd + + + SX has_sp, >100D,20, >af1 +;DJT Start + SX with_sp, >100D,16, >aef + SX leadng_by_sp,>100D,56, >84e + SX leads_by_sp, >100D,51, >84b + SX lead_by_sp, >100D,41, >849 + SX out_front_sp,>100D,48, >850 + SX by_sp, >100D,18, >851 +;DJT End + SX have_lead_sp,>100D,57, >84f + SX take_lead_sp,>100D,49, >84c + SX taks_lead_sp,>100D,56, >84d + +;DJT Start + SX longway_sp, >100D,73, >86e + SX downby_sp, >100D,36, >845 + SX behind_by_sp,>100D,49, >853 + SX catchg_up_sp,>100D,41, >873 + + SX tiegm_sp, >100D,44, >864 + SX tiethegm_sp, >100D,51, >869 + SX tied_at_sp, >100D,69, >866 +;DJT End + SX minute_sp, >100D,59, >ab4 + + SX vs_sp, >100D,47, >509 + SX wingame_sp, >200D,45, >863 + SX baddec_sp, >100D,56, >9eb + SX ohmy, >100D,62, >96f + SX fancy, >100D,51, >ae6 + SX matchup_sp, >100D,65, >ab1 + SX wideopen_sp, >100D,41, >939 + SX no_prsure_sp,>100D,48, >a3d + SX opn_for_3_sp,>100D,69, >b0a + SX all_alone_sp,>100D,42, >91c + SX its_good_sp, >130D,61, >819 + SX it_is_sp, >100D,65, >816 + SX off_in_time, >100D,93, >814 + SX shrt_rng_sp, >100D,56, >7eb + SX finese_it_sp,>100D,47, >80f + SX frm_post_sp, >100D,41, >7e4 + SX baby_hook_sp,>100D,47, >802 + SX half_hook_sp,>100D,46, >804 + SX hook_shot_sp,>100D,41, >805 + SX sky_hook_sp, >100D,74, >83f + SX sky_hook2_sp,>100D,72, >b09 + SX rgt_hndr_sp, >100D,69, >830 + SX lft_hndr_sp, >100D,67, >831 + SX for_two_sp, >100D,40, >b08 + SX from_15_sp, >100D,45, >b0d + SX from_18_sp, >100D,45, >b0e + SX from_20_sp, >100D,35, >b0f + SX shoots1_sp, >100D,37, >83c ;** + SX shoots2_sp, >100D,42, >83c + SX shoots3_sp, >100D,33, >83d + SX from_arc_sp, >100D,40, >7e1 +;DJT Start + SX tp_circle_sp,>100D,63, >b1c + SX fm_3pline_sp,>100D,80, >7e5 +;DJT End + SX for_thre1_sp,>100D,47, >7e6 + SX frm_dwntn_sp,>100D,67, >7e9 + SX bhd_3_arc_sp,>100D,69, >825 + SX frm_3_arc_sp,>100D,65, >826 + SX for_thre2_sp,>100D,45, >82a + SX for_thre3_sp,>100D,51, >839 + SX frm_outsd_sp,>100D,63, >83b + SX unlod_one_sp,>100D,68, >7ff + SX frm_l_rng_sp,>100D,63, >801 + SX hail_mary_sp,>100D,59, >a22 + SX agn_shoot_sp,>100D,55, >80d + SX it_culdbe_sp,>100D,60, >80c + SX could_tie_sp,>100D,77, >b04 + SX outof_rng_sp,>100D,84, >9b9 + SX outof_rg2_sp,>100D,84, >9b9 + SX out_cntrl_sp,>100D,58, >9bd + SX rainbow_sp, >110D,70, >9f2 + SX difficult_sp,>100D,56, >9af + + SX swith_hnd_sp,>110D,53, >823 + SX spn_shtup_sp,>110D,56, >7fd + SX a_fngr_rl_sp,>110D,55, >902 + + SX hnd_face_sp, >100D,67, >b24 + SX ill_shot_sp, >100D,60, >b25 + SX frcd_shot_sp,>100D,56, >b2d + SX wild_shot_sp,>100D,56, >b2e ;9bb +;DJT Start + SX lfts_wild_sp,>100D,87, >9bb +;DJT End + + SX alley_oop_sp,>100D,63, >a18 + SX alyoop_ps_sp,>100D,63, >a1a + SX thr_tmwrk_sp,>100D,61, >a9d + SX thr_smkn_sp, >100D,57, >af5 + SX thr_zone_sp, >100D,65, >b05 + SX whta_show_sp,>100D,57, >958 + + SX dble_dnk_sp, >120D,55, >b3a + SX dble_dnk2_sp,>120D,78, >b38 + SX lob_pass_sp, >120D,55, >a1c + SX scp_tmate_sp,>120D,85, >b3b +;DJT Start + SX the_scoop_sp,>120D,51, >b3c +;DJT End + SX lev_tmate_sp,>120D,83, >b3d +;DJT Start + SX is_legal_sp ,>0F0D,65, >b21 +;DJT End + + SX tm_onfire_sp,>140D,76, >b3e +;DJT Start + SX got_hspot_sp,>140D,76, >b40 +;DJT End + + SX cantbuy_sp, >100D,68, >9ec + SX rtle_arnd_sp,>100D,77, >9d2 + SX ugly_shot_sp,>100D,71, >9e6 + SX putup_brk_sp,>100D,66, >9b2 +;DJT Start + SX look_out_sp, >100D,41, >a6f +;DJT End + SX nogood_sp, >130D,31, >9d4 + SX mis_fires_sp,>100D,56, >9d8 +;DJT Start + SX what_was_sp, >100D,66, >b2b +;DJT End + SX there_brk_sp,>100D,66, >9b5 + SX dwn_luck_sp, >100D,54, >ac9 + SX missed_sp, >100D,30, >9d6 + SX mised_agn_sp,>100D,59, >9d7 + SX hita_barn_sp,>100D,124,>a98 + SX wht_thnk2_sp,>100D,88, >9ed + SX wht_distr_sp,>100D,73, >aa8 + SX at_buzzer_sp,>100D,57, >7e8 + SX sht_ball_sp, >100D,53, >aad + + SX off_rim_sp, >100D,46, >9bf + SX off_frnt_sp, >100D,54, >9c9 + SX holes_out_sp,>100D,58, >9ad + SX bnce_out_sp, >100D,42, >9d0 + SX bnce_away_sp,>100D,54, >9d1 + SX away_side_sp,>100D,56, >9c7 + SX spins_out_sp,>100D,45, >9cb + SX side_rim_sp, >100D,61, >9c5 + SX off_heel_sp, >100D,54, >9c3 + SX no_sp, >100D,30, >9cc + SX nicly_dne_sp,>100D,69, >a49 + SX got_skilz_sp,>100D,67, >a97 + + SX misd_evry_sp,>100D,66, >9e2 + SX way_shrt_sp, >100D,57, >9df + SX misd_mile_sp,>100D,72, >9e3 + SX teribl_sh_sp,>100D,57, >9ba + SX airball_sp, >100D,56, >9da + + SX cannonbal_sp,>110D,58, >95b + SX sumrslts_sp, >110D,90, >96a + SX goes_flyg_sp,>110D,68, >acd + SX hiabv_rim_sp,>110D,49, >ad4 + SX flies_air_sp,>110D,100,>96c + SX gldes_air_sp,>110D,99, >96d + SX raises_up_sp,>110D,45, >82d + SX serious_h_sp,>110D,79, >b03 + SX learn_tht_sp,>110D,54, >97a + SX goes_up_sp, >0905,37, >951 + SX goes_hoop_sp,>110D,59, >95f + SX tks2_hoop_sp,>110D,51, >a36 + SX fly_1hdnr_sp,>110D,76, >96e + SX didnt_knw_sp,>110D,77, >97f + SX haning_sp, >110D,34, >a0f + SX ooooooh_sp, >110D,65, >af7 + SX ooooooh2_sp, >110D,40, >af7 + SX thrgh_air_sp,>110D,50, >96b + SX way_upair_sp,>110D,75, >974 +;DJT Start + SX lch_atbkt_sp,>110D,100,>b03 +;DJT End + SX catapults_sp,>110D,49, >9ab + SX tomahk_dk_sp,>110D,66, >965 + SX tomahk_hm_sp,>110D,79, >966 + + SX shuld_pas_sp,>100D,75, >a6e + SX he_lst_bl_sp,>100D,75, >a74 + SX he_lostit_sp,>100D,75, >a77 + SX bal_loose_sp,>100D,75, >a7d + + SX fades_sp, >100D,21, >b10 + SX fadeaway_sp, >100D,80, >b11 + SX leans_bck_sp,>100D,80, >b17 + SX leans_sp, >100D,21, >b14 + SX leans_in_sp, >100D,80, >b16 + SX pull_jmpr_sp,>100D,80, >838 + SX bslne_lnr_sp,>100D,45, >b30 + SX luky_bnce_sp,>100D,58, >92f + SX per_luck_sp, >100D,64, >946 +;DJT Start + SX luky_bskt_sp,>100D,82, >948 +;DJT End + +;DJT Start + SX kakaboom_sp, >100D,69, >91b + SX kaboom1_sp, >100D,38, >b2a ;91a + SX kaboom2_sp, >100D,34, >91a +;DJT End + SX isit_shoe_sp,>100D,62, >91e + + SX facial_sp, >100D,80, >b42 + + SX unbelieve_sp,>100D,53, >931 + SX u_c_that_sp, >100D,65, >932 + SX oh_man_sp, >100D,52, >934 + SX no_stopng_sp,>100D,75, >942 + SX postr_jam_sp,>100D,67, >956 + SX jam_it_in_sp,>100D,83, >95a + SX thndr_dnk_sp,>100D,60, >960 +;DJT Start + SX throws_it_sp,>100D,66, >963 + SX pounds_it_sp,>100D,62, >964 + SX incredble_sp,>100D,49, >970 + SX incrd_sht_sp,>100D,75, >90e +; SX supr_dnk_sp, >100D,61, >971 ;** +; SX mnstr_jam_sp,>100D,70, >971 + SX outstndng_sp,>100D,67, >aaa +;DJT End + SX amazing_sp, >100D,57, >912 + SX he_dnk_it_sp,>100D,33, >961 + SX dunks_it_sp, >100D,24, >962 + SX jams_it_sp, >100D,35, >97c + SX spect_dnk_sp,>100D,81, >988 + SX slam_dunk_sp,>100D,51, >989 + SX he_slams_sp, >100D,42, >98b + SX with_ajam_sp,>100D,49, >998 + SX powr_jams_sp,>100D,73, >9a6 + + SX head_fake_sp,>050D,24, >a8e + SX the_fake_sp, >050D,26, >a8f + SX pump_fake_sp,>050D,30, >a91 + + SX hits_jmpr_sp,>100D,25, >906 + SX good_4two_sp,>100D,50, >90a + SX a_trey_sp, >100D,42, >82b + SX he_scores_sp,>100D,56, >93b + SX scores_sp, >100D,37, >7de +;DJT Start + SX scores2_sp, >100D,52, >7df +;DJT End + SX score_agn_sp,>100D,70, >7f3 + SX good_agn_sp, >100D,47, >7f4 + SX yes_sp, >100D,33, >b33 + SX goooood_sp, >100D,42, >818 + SX goooood2_sp, >100D,42, >903 + SX money_bnk_sp,>100D,33, >b33 + SX chk_it_up_sp,>100D,56, >93b + SX good_4_3_sp, >100D,69, >929 + SX thats_3_sp, >100D,58, >92b + SX fantastic_sp,>100D,73, >a99 + SX drains_it_sp,>100D,38, >93f + SX it_falls_sp, >100D,42, >90d + SX falls_in_sp, >100D,48, >91f + SX kncks_dwn_sp,>100D,54, >92c +;DJT Start + SX and_drops_sp,>100D,56, >943 +;DJT End + SX dwn_well_sp, >100D,90, >94b + SX bomshakalaka,>100D,56, >afc + SX rama_dong_sp,>100D,80, >b47 + + SX hlftm_ldr_sp,>160D,73, >ae9 + SX gmevr_ldr_sp,>160D,73, >aea + + SX spin_mv1_sp, >100D,60, >7f7 + SX spin_mv2_sp, >100D,60, >991 + SX spin_mv3_sp, >100D,60, >993 + +;DJT Start + SX chalk_it_sp, >100D,38, >b48 +;DJT End + SX book_it_sp, >100D,28, >8ff + SX count_it_sp, >100D,39, >90b + SX bingo_sp, >100D,41, >ae2 + + SX ever_miss_sp,>100D,77, >a95 + SX hot_hand_sp, >100D,70, >93d + SX on_fire_sp, >150D,83, >972 + SX heatup_sp, >130D,54, >b1e + SX lightn_up_sp,>120D,68, >aa4 + SX smokin_sp, >100D,40, >af6 + + SX swish_sp, >100D,37, >917 +;DJT Start + SX swish2_sp, >100D,43, >b29 +;DJT End + SX rgt_thrgh_sp,>100D,53, >b4a + SX botm_net_sp, >100D,67, >b4c + SX ngbut_net_sp,>100D,85, >b4b + SX whata_sht_sp,>100D,47, >937 + SX great_sht_sp,>100D,54, >935 +;DJT Start + SX greatshot_sp,>100D,47, >90f +;DJT End + SX good_sht_sp, >100D,36, >938 + SX he_uncon_sp, >100D,61, >914 + + SX banked_it_sp,>100D,27, >829 + SX a_banker_sp, >100D,33, >811 + SX soft_glas_sp,>100D,95, >810 + + SX off_bkbrd_sp,>100D,80, >827 + SX off_glass_sp,>100D,80, >83a + SX kild_smne_sp,>100D,110,>9ee + SX off_trgt_sp, >100D,80, >9e1 + SX sht_stunk_sp,>100D,97, >9e8 + SX wht_thnkg_sp,>100D,88, >9ed + + SX fr_thw_ln_sp,>100D,65, >837 + SX top_key_sp, >100D,70, >807 + SX frm_paint_sp,>100D,40, >7ed + SX frm_wing_sp, >100D,38, >7e7 + SX lnch_jmpr_sp,>100D,59, >83e + SX stp_n_pop_sp,>100D,75, >832 + SX fires_jumpr, >100D,55, >82e + SX ltle_jmpr_sp,>100D,48, >7f2 + + SX fingr_rol_sp,>100D,46, >80e + SX figr_itin_sp,>100D,90, >901 + SX fingr_rl2_sp,>100D,46, >80e + SX lay_it_up_sp,>100D,45, >81b + SX layup_sp, >100D,41, >81c + SX he_layup_sp, >100D,58, >81e + SX drv_layup_sp,>100D,61, >b19 + + SX whyyyy_sp, >100D,41, >ae3 + SX blowout_sp, >100D,85, >859 ;it's a blowout + SX whoomp_sp, >100D,72, >85a ;Whoomp, there it is +;DJT Start + SX debacle_sp, >100D,66, >a92 + SX its_hstry_sp,>100D,47, >85f + SX strike_up_sp,>100D,122,>b4d +;DJT End + SX fnl_strw_sp, >100D,90, >b4e + SX fat_sing_sp, >100D,115,>858 + SX needshot_sp, >100D,72, >ab2 + SX run_out_sp, >100D,55, >876 +;DJT Start + SX just_secs_sp,>100D,84, >ab3 +;DJT End + + SX passes_sp, >070D,33, >9f4 + SX he_passes_sp,>070D,43, >9f6 + SX a_pass_sp, >070D,33, >9fb + SX tosses_it_sp,>070D,39, >9fc + SX guns_it_sp, >070D,43, >a13 + + SX cros_crt_sp, >070D,37, >a16 + SX downcourt_sp,>070D,37, >a0a +;DJT Start + SX downcrt2_sp, >070D,39, >a1e + SX lngpss_dc_sp,>070D,84, >a0b +;DJT End + SX hev_dncrt_sp,>070D,69, >a1d + SX bnce_pass_sp,>070D,41, >a20 + SX dumps_it_sp, >070D,27, >9fe + SX long_pass_sp,>070D,85, >a0b + SX pas_outsd_sp,>070D,58, >9f8 + + SX goal_tend_sp,>120D,47, >a4b ;SUX + + SX rebounds_sp, >100D,60, >af3 + SX tks_rbnd2_sp,>100D,73, >a4f +;DJT Start + SX tks_rbnd3_sp,>100D,96, >a5b +;DJT End + SX grab_rock_sp,>100D,61, >a52 + SX has_rebnd_sp,>100D,64, >a55 + SX grab_ball_sp,>100D,64, >a56 + SX tks_rebnd_sp,>100D,81, >a57 + SX posession_sp,>100D,57, >a58 + SX off_rebnd_sp,>100D,89, >a5a + SX pulls_off_sp,>100D,87, >a5b + SX with_bord_sp,>100D,77, >a5c + SX grbs_rbnd_sp,>100D,80, >a5d + SX ynk_rim_sp, >100D,80, >a5f + SX da_rebnd_sp, >100D,45, >a60 + SX rip_rebnd_sp,>100D,87, >a50 + SX rbnd_miss_sp,>100D,97, >a64 + + SX its_blckd_sp,>130D,47, >a66 + SX outa_here_sp,>130D,63, >a67 + SX blckd_it_sp, >130D,29, >a68 + SX no_way_sp, >130D,47, >a69 + SX rejected_sp, >130D,46, >a6a + SX deflected_sp,>130D,38, >a6c +;DJT look_out_sp line moved + + SX stolen_sp, >130D,35, >a72 + SX the_steal_sp,>130D,39, >a73 + SX turnover_sp, >130D,48, >a75 + SX trnd_over_sp,>130D,61, >a76 + SX quck_hnds_sp,>130D,46, >a79 + SX intrceptd_sp,>130D,48, >a7f + SX stripped_sp, >130D,29, >a84 + SX clean_pck_sp,>130D,48, >a83 + SX bad_pass_sp, >130D,56, >a82 + + SX flagrant_sp, >090D,37, >abb + SX to_floor_sp, >090D,43, >ac6 + SX to_deck_sp, >090D,37, >ac7 +;DJT Start +; SX shvd_asde_sp,>090D,67, >aca +;DJT End + SX tookm_out_sp,>090D,48, >abe + SX hamerd_hm_sp,>090D,35, >ad1 + SX into_stnd_sp,>050D,96, >ac4 + + + SX nick_nme1, >100D,23, >760 + SX nick_nme2, >100D,23, >8c6 + SX nick_nme3, >100D,35, >758 + SX nick_nme4, >100D,25, >774 + SX nick_nme5, >100D,36, >784 + SX nick_nme6, >100D,20, >75c + SX nick_nme7, >100D,24, >75e + SX nick_nme8, >100D,37, >8cc + SX nick_nme9, >100D,25, >8d8 + SX nick_nme10, >100D,24, >78e + SX nick_nme11, >100D,32, >8b8 + SX nick_nme12, >100D,37, >766 + SX nick_nme13, >100D,25, >8d4 + SX nick_nme14, >100D,46, >8bc + SX nick_nme15, >100D,20, >768 + SX nick_nme16, >100D,37, >796 + SX nick_nme17, >100D,25, >76a + SX nick_nme18, >100D,31, >76c + SX nick_nme19, >100D,27, >76e + SX nick_nme20, >100D,20, >798 + SX nick_nme21, >100D,36, >79a + SX nick_nme22, >100D,40, >776 + SX nick_nme23, >100D,46, >8be + SX nick_nme24, >100D,31, >8ca +; SX nick_nme25, >100D,28, >8c0 + SX nick_nme26, >100D,28, >8ce + SX nick_nme27, >100D,32, >77c + SX nick_nme28, >100D,28, >77e + SX nick_nme29, >100D,21, >780 + SX nick_nme30, >100D,31, >782 + SX nick_nme31, >100D,27, >786 + SX nick_nme32, >100D,24, >788 + SX nick_nme33, >100D,29, >78a + SX nick_nme34, >100D,36, >78c + SX nick_nme35, >100D,21, >790 + SX nick_nme36, >100D,23, >792 + + SX to_nck_nme1, >100D,60, >761 + SX to_nck_nme2, >100D,60, >8c7 + SX to_nck_nme3, >100D,60, >759 + SX to_nck_nme4, >100D,60, >775 + SX to_nck_nme5, >100D,60, >785 + SX to_nck_nme6, >100D,60, >75d + SX to_nck_nme7, >100D,60, >75f + SX to_nck_nme8, >100D,60, >8cd + SX to_nck_nme9, >100D,60, >8d9 + SX to_nck_nme10,>100D,60, >78f + SX to_nck_nme11,>100D,60, >8b9 + SX to_nck_nme12,>100D,60, >767 + SX to_nck_nme13,>100D,60, >8d5 + SX to_nck_nme14,>100D,60, >8bd + SX to_nck_nme15,>100D,60, >769 + SX to_nck_nme16,>100D,60, >797 + SX to_nck_nme17,>100D,60, >76b + SX to_nck_nme18,>100D,60, >76d + SX to_nck_nme19,>100D,60, >76f + SX to_nck_nme20,>100D,60, >799 + SX to_nck_nme21,>100D,60, >79b + SX to_nck_nme22,>100D,60, >777 + SX to_nck_nme23,>100D,60, >8bf + SX to_nck_nme24,>100D,60, >8cb +; SX to_nck_nme25,>100D,60, >8c1 + SX to_nck_nme26,>100D,60, >8cf + SX to_nck_nme27,>100D,60, >77d + SX to_nck_nme28,>100D,60, >77f + SX to_nck_nme29,>100D,60, >781 + SX to_nck_nme30,>100D,60, >783 + SX to_nck_nme31,>100D,60, >787 + SX to_nck_nme32,>100D,60, >789 + SX to_nck_nme33,>100D,60, >78b + SX to_nck_nme34,>100D,60, >78d + SX to_nck_nme35,>100D,60, >791 + SX to_nck_nme36,>100D,60, >793 + +; +; Speech scripts +; +;DJT Start +welcome_sc LWLW midway_sp,67,max_hngtm_sp,-1 +;welcome_sc LWLW midway_sp,67,nba_hngtm_sp,-1 +;DJT End +;swat_cheer_sc LWLW swat_snd,30,cheer_snd,-1 + + +#***************************************************************************** +;speech tables + +STAB_START + +nickname_spch_tbl + .long nick_nme1, to_nck_nme1 + .long nick_nme2, to_nck_nme2 + .long nick_nme3, to_nck_nme3 + .long nick_nme4, to_nck_nme4 + .long nick_nme5, to_nck_nme5 + .long nick_nme6, to_nck_nme6 + .long nick_nme7, to_nck_nme7 + .long nick_nme8, to_nck_nme8 + .long nick_nme9, to_nck_nme9 + .long nick_nme10,to_nck_nme10 + .long nick_nme11,to_nck_nme11 + .long nick_nme12,to_nck_nme12 + .long nick_nme13,to_nck_nme13 + .long nick_nme14,to_nck_nme14 + .long nick_nme15,to_nck_nme15 + .long nick_nme16,to_nck_nme16 + .long nick_nme17,to_nck_nme17 + .long nick_nme18,to_nck_nme18 + .long nick_nme19,to_nck_nme19 + .long nick_nme20,to_nck_nme20 + .long nick_nme21,to_nck_nme21 + .long nick_nme22,to_nck_nme22 + .long nick_nme23,to_nck_nme23 + .long nick_nme24,to_nck_nme24 +; .long nick_nme25,to_nck_nme25 + .long nick_nme26,to_nck_nme26 + .long nick_nme27,to_nck_nme27 + .long nick_nme28,to_nck_nme28 + .long nick_nme29,to_nck_nme29 + .long nick_nme30,to_nck_nme30 + .long nick_nme31,to_nck_nme31 + .long nick_nme32,to_nck_nme32 + .long nick_nme33,to_nck_nme33 + .long nick_nme34,to_nck_nme34 + .long nick_nme35,to_nck_nme35 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + .long nick_nme36,to_nck_nme36 + + +;FIX!!! +;Check for all incorrect AUGMON speech calls! +**************** +**************** +full_name_speech + + .word >100D,83,1304 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,103,1424 ;MUTUMBO, dekembe + .word >100D,64,1308 ;SMITH, steve + .word >100D,71,1604 ;LAETNER, christian + .word >100D,63,1316 ;NORMAN, ken + + .word >100D,61,1320 ;BROWN, dee ( BOSTON ) + .word >100D,57,2912 ;HAMER, steve + .word >100D,66,1324 ;BARROS, dana + .word >100D,66,1332 ;RADJA, dino + .word >100D,59,1336 ;FOX, rick + + .word >100D,65,1348 ;RICE, glen ( CHARLOTTE ) + .word >100D,80,1644 ;MASON, anthony + .word >100D,78,1544 ;DIVAC, vlade + .word >100D,70,1352 ;ZIDEK, george + .word >100D,58,1356 ;CURRY, del + + .word >100D,72,1360 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,60,1364 ;RODMAN, dennis + .word >100D,70,1368 ;KUKOC, toni + .word >100D,78,1372 ;LONGLEY, luke + .word >100D,68,1376 ;KERR, steve + + .word >100D,75,1380 ;HILL, tyrone ( CLEVELAND ) + .word >100D,76,1384 ;MILLS, chris + .word >100D,70,1388 ;PHILLS, bobby + .word >100D,69,1392 ;BRANDON, terrell + .word >100D,65,1396 ;FERRY, danny + + .word >100D,68,1404 ;KIDD, jason ( DALLAS ) + .word >100D,71,1648 ;HARPER, derek + .word >100D,84,1400 ;JACKSON, jim + .word >100D,79,1328 ;MONTROSS, eric + .word >100D,88,1408 ;MASHBURN, jamal + + .word >100D,96,1428 ;McDYESS, antonio ( DENVER ) + .word >100D,100,1752 ;MARCIULIONIS,sarunas + .word >100D,78,1516 ;JACKSON, mark + .word >100D,64,1436 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,63,1444 ;HILL, grant ( DETROIT ) +;; .word >100D,54,2954 ;RILEY, ron + .word >100D,74,1440 ;DUMARS, joe + .word >100D,56,1452 ;THORPE, otis + .word >100D,77,1300 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,76,1464 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,72,1676 ;KONCAK, jon + .word >100D,65,1472 ;SMITH, joe + .word >100D,77,1476 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,118,1480 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,66,2909 ;HARRINGTON, othella + .word >100D,80,1484 ;DREXLER, clyde + .word >100D,61,1568 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,85,1500 ;MILLER, reggie ( INDIANA ) + .word >100D,66,2936 ;DAMPIER, erick + .word >100D,70,1432 ;ROSE, jalen + .word >100D,71,1508 ;SMITS, rik + .word >100D,71,1504 ;DAVIS, dale + + .word >100D,45,1520 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,64,1524 ;ROGERS, rodney + .word >100D,80,1528 ;MURRAY, lamond + .word >100D,75,1532 ;RICHARDSON, pooh + .word >100D,72,1536 ;BARRY, brent + + .word >100D,76,1540 ;VAN EXEL, nick ( LAKERS ) + .word >100D,83,1548 ;CEBALLOS, cedric + .word >100D,56,1958 ;SCOTT, byron + .word >100D,62,1552 ;CAMPBELL, elden + .word >100D,68,1556 ;JONES, eddie + + .word >100D,97,1560 ;MOURNING, alonzo ( MIAMI ) + .word >100D,80,1460 ;HARDAWAY, tim + .word >100D,84,1572 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,70,1580 ;BAKER, vin ( MILWAUKEE ) + .word >100D,60,2930 ;ALLEN, ray + .word >100D,72,1955 ;LANG, andrew + .word >100D,93,1584 ;ROBINSON, glen + .word >100D,77,1588 ;RESPERT, shawn + + .word >100D,73,1612 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,75,2951 ;MARBURY, stephon + .word >100D,72,1616 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,68,1340 ;GILL, kendall ( NEW JERSEY ) + .word >100D,52,2903 ;KITTLES, kerry + .word >100D,70,1872 ;PACK, robert + .word >100D,81,1624 ;BRADLEY, shawn + .word >100D,61,1632 ;O'BANNON, ed + + .word >100D,82,1640 ;EWING, patrick ( NEW YORK ) + .word >100D,65,2906 ;WALLACE, john + .word >100D,74,1344 ;JOHNSON, larry + .word >100D,70,1656 ;STARKS, john + .word >100D,76,1456 ;HOUSTON, allan + + .word >100D,95,1660 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,84,1468 ;SEIKALY, rony + .word >100D,76,1664 ;GRANT, horace + .word >100D,65,1668 ;ANDERSON, nick + .word >100D,67,1672 ;SCOTT, dennis + + .word >100D,72,2942 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,56,2915 ;MINOR, ryan + .word >100D,96,1680 ;STACKHOUSE, jerry + .word >100D,71,1684 ;COLEMAN, derrick + .word >100D,113,1688 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,69,1700 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,101,1704 ;TISDALE, wayman + .word >100D,66,1708 ;MANNING, danny + .word >100D,80,1488 ;HORRY, robert + .word >100D,70,1492 ;CASSELL, sam + + .word >100D,94,1724 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,94,1600 ;RIDER, isaiah + .word >100D,93,1728 ;SABONIS, arvydas + .word >100D,64,1620 ;ANDERSON, kenny + .word >100D,76,1736 ;CHILDRESS, randolph + + .word >100D,74,1564 ;OWENS, billy ( SACRAMENTO ) + .word >100D,89,1420 ;ABDUL-RAUF, mahmoud + .word >100D,82,1744 ;RICHMOND, mitch + .word >100D,85,1748 ;GRANT, brian + .word >100D,50,1756 ;EDNEY, tyus + + .word >100D,69,1760 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,92,1764 ;ROBINSON, david + .word >100D,90,1696 ;MAXWELL, vernon + .word >100D,74,1768 ;JOHNSON, avery + .word >100D,82,1776 ;DEL NEGRO, vinny + + .word >100D,64,1780 ;KEMP, shawn ( SEATTLE ) + .word >100D,74,1784 ;PAYTON, gary + .word >100D,57,1788 ;SCHREMPF, detlef + .word >100D,59,1792 ;HAWKINS, hersey + .word >100D,56,1796 ;FORD, sherell + + .word >100D,59,1800 ;ROGERS, carlos ( TORONTO ) + .word >100D,72,2927 ;CAMBY, marcus + .word >100D,92,1804 ;STOUDAMIRE, damon + .word >100D,74,1412 ;JONES, popeye + .word >100D,78,1740 ;WILLIAMS, walt + + .word >100D,79,1820 ;STOCKTON, john ( UTAH ) + .word >100D,68,1824 ;MALONE, karl + .word >100D,70,1828 ;HORNACEK, jeff + .word >100D,64,1836 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,78,1840 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,66,1844 ;EDWARDS, blue + .word >100D,74,1852 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,77,1720 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,53,1864 ;WEBBER, chris + .word >100D,74,1860 ;HOWARD, juwan + .word >100D,92,1876 ;MURESAN, gheorge + .word >100D,69,1868 ;CHEANEY, calbert + + +*********** +*********** +pass_speech ;'TO player name' + + .word >100D,54,1307 ;to BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,43,1311 ;to SMITH, steve + .word >100D,43,1607 ;to LAETNER, christian + .word >100D,43,1319 ;to NORMAN, ken + + .word >100D,42,1323 ;to BROWN, dee ( BOSTON ) + .word >100D,35,2914 ;to HAMER, steve + .word >100D,40,1327 ;to BARROS, dana + .word >100D,44,1335 ;to RADJA, dino + .word >100D,43,1339 ;to FOX, rick + + .word >100D,42,1351 ;to RICE, glen ( CHARLOTTE ) + .word >100D,60,1647 ;to MASON, anthony + .word >100D,49,1547 ;to DIVAC, vlade + .word >100D,41,1355 ;to ZIDEK, george + .word >100D,36,1359 ;to CURRY, del + + .word >100D,41,1363 ;to PIPPEN, scottie ( CHICAGO ) + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,47,1371 ;to KUKOC, toni + .word >100D,56,1375 ;to LONGLEY, luke + .word >100D,44,1379 ;to KERR, steve + + .word >100D,42,1383 ;to HILL, tyrone ( CLEVELAND ) + .word >100D,51,1387 ;to MILLS, chris + .word >100D,44,1391 ;to PHILLS, bobby + .word >100D,39,1395 ;to BRANDON, terrell + .word >100D,38,1399 ;to FERRY, danny + + .word >100D,41,1407 ;to KIDD, jason ( DALLAS ) + .word >100D,46,1651 ;to HARPER, derek + .word >100D,57,1403 ;to JACKSON, jim + .word >100D,62,1331 ;to MONTROSS, eric + .word >100D,59,1411 ;to MASHBURN, jamal + + .word >100D,58,1431 ;to McDYESS, antonio ( DENVER ) + .word >100D,58,1755 ;to MARCIULIONIS,sarunas + .word >100D,57,1519 ;to JACKSON, mark + .word >100D,38,1439 ;to ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,42,1447 ;to HILL, grant ( DETROIT ) +;; .word >100D,41,2956 ;to RILEY, ron + .word >100D,61,1443 ;to DUMARS, joe + .word >100D,34,1455 ;to THORPE, otis + .word >100D,44,1303 ;to AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,52,1467 ;to SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,46,1679 ;to KONCAK, jon + .word >100D,43,1475 ;to SMITH, joe + .word >100D,52,1479 ;to MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,64,1483 ;to OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,45,2911 ;to HARRINGTON, othella + .word >100D,51,1487 ;to DREXLER, clyde + .word >100D,40,1571 ;to WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1503 ;to MILLER, reggie ( INDIANA ) + .word >100D,48,2938 ;to DAMPIER, erick + .word >100D,38,1435 ;to ROSE, jalen + .word >100D,55,1511 ;to SMITS, rik + .word >100D,43,1507 ;to DAVIS, dale + + .word >100D,36,1523 ;to VAUGHT, loy ( CLIPPERS ) + .word >100D,43,1527 ;to ROGERS, rodney + .word >100D,39,1531 ;to MURRAY, lamond + .word >100D,54,1535 ;to RICHARDSON, pooh + .word >100D,43,1539 ;to BARRY, brent + + .word >100D,54,1543 ;to VAN EXEL, nick ( LAKERS ) + .word >100D,54,1551 ;to CEBALLOS, cedric + .word >100D,40,1960 ;to SCOTT, byron + .word >100D,46,1555 ;to CAMPBELL, elden + .word >100D,49,1559 ;to JONES, eddie + + .word >100D,44,1563 ;to MOURNING, alonzo ( MIAMI ) + .word >100D,56,1463 ;to HARDAWAY, tim + .word >100D,58,1575 ;to DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,49,1583 ;to BAKER, vin ( MILWAUKEE ) + .word >100D,44,2932 ;to ALLEN, ray + .word >100D,45,1957 ;to LANG, andrew + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,51,1591 ;to RESPERT, shawn + + .word >100D,52,1615 ;to GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,40,2953 ;to MARBURY, stephon + .word >100D,50,1619 ;to GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,40,1343 ;to GILL, kendall ( NEW JERSEY ) + .word >100D,41,2905 ;to KITTLES, kerry + .word >100D,41,1875 ;to PACK, robert + .word >100D,53,1627 ;to BRADLEY, shawn + .word >100D,45,1635 ;to O'BANNON, ed + + .word >100D,43,1643 ;to EWING, patrick ( NEW YORK ) + .word >100D,39,2908 ;to WALLACE, john + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,45,1659 ;to STARKS, john + .word >100D,54,1459 ;to HOUSTON, allan + + .word >100D,56,1663 ;to HARDAWAY, anfernee ( ORLANDO ) + .word >100D,55,1471 ;to SEIKALY, rony + .word >100D,43,1667 ;to GRANT, horace + .word >100D,43,1671 ;to ANDERSON, nick + .word >100D,45,1675 ;to SCOTT, dennis + + .word >100D,53,2944 ;to IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,38,2917 ;to MINOR, ryan + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,46,1687 ;to COLEMAN, derrick + .word >100D,75,1691 ;to WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,48,1703 ;to JOHNSON, kevin ( PHOENIX ) + .word >100D,61,1707 ;to TISDALE, wayman + .word >100D,38,1711 ;to MANNING, danny + .word >100D,51,1491 ;to HORRY, robert + .word >100D,48,1495 ;to CASSELL, sam + + .word >100D,70,1727 ;to ROBINSON, cliff ( PORTLAND ) + .word >100D,53,1603 ;to RIDER, isaiah + .word >100D,49,1731 ;to SABONIS, arvydas + .word >100D,43,1623 ;to ANDERSON, kenny + .word >100D,48,1739 ;to CHILDRESS, randolph + + .word >100D,51,1567 ;to OWENS, billy ( SACRAMENTO ) + .word >100D,61,1423 ;to ABDUL-RAUF, mahmoud + .word >100D,51,1747 ;to RICHMOND, mitch + .word >100D,43,1751 ;to GRANT, brian + .word >100D,36,1759 ;to EDNEY, tyus + + .word >100D,41,1763 ;to ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,65,1699 ;to MAXWELL, vernon + .word >100D,48,1771 ;to JOHNSON, avery + .word >100D,54,1779 ;to DEL NEGRO, vinny + + .word >100D,37,1783 ;to KEMP, shawn ( SEATTLE ) + .word >100D,43,1787 ;to PAYTON, gary + .word >100D,41,1791 ;to SCHREMPF, detlef + .word >100D,44,1795 ;to HAWKINS, hersey + .word >100D,40,1799 ;to FORD, sherell + + .word >100D,43,1803 ;to ROGERS, carlos ( TORONTO ) + .word >100D,45,2929 ;to CAMBY, marcus + .word >100D,63,1807 ;to STOUDAMIRE, damon + .word >100D,49,1415 ;to JONES, popeye + .word >100D,45,1743 ;to WILLIAMS, walt + + .word >100D,53,1823 ;to STOCKTON, john ( UTAH ) + .word >100D,51,1827 ;to MALONE, karl + .word >100D,49,1831 ;to HORNACEK, jeff + .word >100D,39,1839 ;to MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,40,1843 ;to ANTHONY, greg ( VANCOUVER ) + .word >100D,38,1847 ;to EDWARDS, blue + .word >100D,48,1855 ;to REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,51,1723 ;to STRICKLAND, rod ( WASHINGTON ) + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,43,1863 ;to HOWARD, juwan + .word >100D,63,1879 ;to MURESAN, gheorge + .word >100D,43,1871 ;to CHEANEY, calbert + + +*********** +*********** +name_speech ;(last name only, excited) + + .word >100D,44,1305 ;BLAYLOCK, mookie ( ALTANTA HAWKS ) + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1309 ;SMITH, steve + .word >100D,33,1605 ;LAETNER, christian + .word >100D,34,1317 ;NORMAN, ken + + .word >100D,36,1321 ;BROWN, dee ( BOSTON ) + .word >100D,26,2913 ;HAMER, steve + .word >100D,31,1325 ;BARROS, dana + .word >100D,35,1333 ;RADJA, dino + .word >100D,33,1337 ;FOX, rick + + .word >100D,33,1349 ;RICE, glen ( CHARLOTTE ) + .word >100D,51,1645 ;MASON, anthony + .word >100D,39,1545 ;DIVAC, vlade + .word >100D,32,1353 ;ZIDEK, george + .word >100D,27,1357 ;CURRY, del + + .word >100D,31,1361 ;PIPPEN, scottie ( CHICAGO ) + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1369 ;KUKOC, toni + .word >100D,47,1373 ;LONGLEY, luke + .word >100D,35,1377 ;KERR, steve + + .word >100D,33,1381 ;HILL, tyrone ( CLEVELAND ) + .word >100D,42,1385 ;MILLS, chris + .word >100D,35,1389 ;PHILLS, bobby + .word >100D,30,1393 ;BRANDON, terrell + .word >100D,28,1397 ;FERRY, danny + + .word >100D,32,1405 ;KIDD, jason ( DALLAS ) + .word >100D,37,1649 ;HARPER, derek + .word >100D,48,1401 ;JACKSON, jim + .word >100D,53,1329 ;MONTROSS, eric + .word >100D,50,1409 ;MASHBURN, jamal + + .word >100D,49,1429 ;McDYESS, antonio ( DENVER ) + .word >100D,49,1753 ;MARCIULIONIS,sarunas + .word >100D,48,1517 ;JACKSON, mark + .word >100D,28,1437 ;ELLIS, dale +;REMOVE!!! + .word 0,0,0 + + .word >100D,33,1445 ;HILL, grant ( DETROIT ) +;; .word >100D,31,2955 ;RILEY, ron + .word >100D,46,1441 ;DUMARS, joe + .word >100D,25,1453 ;THORPE, otis + .word >100D,34,1301 ;AUGMON, stacey +;REMOVE!!! + .word 0,0,0 + + .word >100D,43,1465 ;SPREWELL, latrell ( GOLDEN STATE ) + .word >100D,37,1677 ;KONCAK, jon + .word >100D,33,1473 ;SMITH, joe + .word >100D,43,1477 ;MULLIN, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,55,1482 ;OLAJUWAN, hakeem ( HOUSTON ) + .word >100D,36,2910 ;HARRINGTON, othella + .word >100D,41,1485 ;DREXLER, clyde + .word >100D,31,1569 ;WILLIS, kevin +;REMOVE!!! + .word 0,0,0 + + .word >100D,39,1501 ;MILLER, reggie ( INDIANA ) + .word >100D,39,2937 ;DAMPIER, erick + .word >100D,29,1433 ;ROSE, jalen + .word >100D,46,1509 ;SMITS, rik + .word >100D,34,1505 ;DAVIS, dale + + .word >100D,27,1521 ;VAUGHT, loy ( CLIPPERS ) + .word >100D,34,1525 ;ROGERS, rodney + .word >100D,30,1529 ;MURRAY, lamond + .word >100D,44,1533 ;RICHARDSON, pooh + .word >100D,33,1537 ;BARRY, brent + + .word >100D,44,1541 ;VAN EXEL, nick ( LAKERS ) + .word >100D,44,1549 ;CEBALLOS, cedric + .word >100D,32,1959 ;SCOTT, byron + .word >100D,37,1553 ;CAMPBELL, elden + .word >100D,40,1557 ;JONES, eddie + + .word >100D,35,1561 ;MOURNING, alonzo ( MIAMI ) + .word >100D,47,1461 ;HARDAWAY, tim + .word >100D,49,1573 ;DANILOVIC, sasha +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,39,1581 ;BAKER, vin ( MILWAUKEE ) + .word >100D,35,2931 ;ALLEN, ray + .word >100D,36,1956 ;LANG, andrew + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,41,1589 ;RESPERT, shawn + + .word >100D,43,1613 ;GUGLIOTTA, tom ( MINNESOTTA ) + .word >100D,31,2952 ;MARBURY, stephon + .word >100D,41,1617 ;GARNETT, kevin +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,31,1341 ;GILL, kendall ( NEW JERSEY ) + .word >100D,32,2904 ;KITTLES, kerry + .word >100D,32,1873 ;PACK, robert + .word >100D,43,1625 ;BRADLEY, shawn + .word >100D,36,1633 ;O'BANNON, ed + + .word >100D,42,1641 ;EWING, patrick ( NEW YORK ) + .word >100D,30,2907 ;WALLACE, john + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,36,1657 ;STARKS, john + .word >100D,44,1457 ;HOUSTON, allan + + .word >100D,47,1661 ;HARDAWAY, anfernee ( ORLANDO ) + .word >100D,46,1469 ;SEIKALY, rony + .word >100D,34,1665 ;GRANT, horace + .word >100D,33,1669 ;ANDERSON, nick + .word >100D,36,1673 ;SCOTT, dennis + + .word >100D,44,2943 ;IVERSON, allen ( PHILADELPHIA ) +;; .word >100D,28,2916 ;MINOR, ryan + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,37,1685 ;COLEMAN, derrick + .word >100D,66,1689 ;WEATHERSPOON,clarence +;REMOVE!!! + .word 0,0,0 + + .word >100D,38,1701 ;JOHNSON, kevin ( PHOENIX ) + .word >100D,51,1705 ;TISDALE, wayman + .word >100D,28,1709 ;MANNING, danny + .word >100D,42,1489 ;HORRY, robert + .word >100D,38,1493 ;CASSELL, sam + + .word >100D,61,1725 ;ROBINSON, cliff ( PORTLAND ) + .word >100D,43,1601 ;RIDER, isaiah + .word >100D,40,1729 ;SABONIS, arvydas + .word >100D,33,1621 ;ANDERSON, kenny + .word >100D,38,1737 ;CHILDRESS, randolph + + .word >100D,41,1565 ;OWENS, billy ( SACRAMENTO ) + .word >100D,51,1421 ;ABDUL-RAUF, mahmoud + .word >100D,41,1745 ;RICHMOND, mitch + .word >100D,34,1749 ;GRANT, brian + .word >100D,27,1757 ;EDNEY, tyus + + .word >100D,32,1761 ;ELLIOTT, sean ( SAN ANTONIO ) + .word >100D,61,1765 ;ROBINSON, david + .word >100D,56,1697 ;MAXWELL, vernon + .word >100D,38,1769 ;JOHNSON, avery + .word >100D,45,1777 ;DEL NEGRO, vinny + + .word >100D,28,1781 ;KEMP, shawn ( SEATTLE ) + .word >100D,33,1785 ;PAYTON, gary + .word >100D,32,1789 ;SCHREMPF, detlef + .word >100D,35,1793 ;HAWKINS, hersey + .word >100D,31,1797 ;FORD, sherell + + .word >100D,34,1801 ;ROGERS, carlos ( TORONTO ) + .word >100D,36,2928 ;CAMBY, marcus + .word >100D,54,1805 ;STOUDAMIRE, damon + .word >100D,40,1413 ;JONES, popeye + .word >100D,36,1741 ;WILLIAMS, walt + + .word >100D,44,1821 ;STOCKTON, john ( UTAH ) + .word >100D,42,1825 ;MALONE, karl + .word >100D,40,1829 ;HORNACEK, jeff + .word >100D,30,1837 ;MORRIS, chris +;REMOVE!!! + .word 0,0,0 + + .word >100D,31,1841 ;ANTHONY, greg ( VANCOUVER ) + .word >100D,29,1845 ;EDWARDS, blue + .word >100D,39,1853 ;REEVES, bryant +;REMOVE!!! + .word 0,0,0 + .word 0,0,0 + + .word >100D,42,1721 ;STRICKLAND, rod ( WASHINGTON ) + .word >100D,18,1865 ;WEBBER, chris + .word >100D,34,1861 ;HOWARD, juwan + .word >100D,54,1877 ;MURESAN, gheorge + .word >100D,34,1869 ;CHEANEY, calbert + + +;FIX!!! +;JEFF: I guess there is no distinction between superstar guests and Special +;guests - they will all be treated as one big table throughout the game... +*********** +*********** +special_name_speech + .word >100D,32,2290 ;0 JEFF JOHNSON + .word >100D,31,2276 ;1 SAL DIVITA + .word >100D,32,2272 ;2 TURMELL + .word >100D,28,2286 ;3 THOMPSON + .word >100D,22,2278 ;4 GEER + .word >100D,33,2288 ;5 CARLTON + .word >100D,28,2280 ;6 HEDRICK + .word >100D,23,2274 ;7 JOHN HEY + .word >100D,43,2266 ;8 AIR MORRIS + .word >100D,30,2268 ;9 STEVE BARDO + .word >100D,35,2270 ;10 MINIFEE + .word >100D,41,2282 ;11 MARTINEZ + .word >100D,36,2284 ;12 PESINA + .word >0105,36,2250 ;13 LIPTAK + .word >0105,46,1910 ;14 EDDIE + .word >0105,26,1920 ;15 MIKE V. + .word >0105,26,1888 ;16 JAMIE R. + .word >0105,26,1888 ;17 NICK E. + .word >0105,26,1888 ;18 J. ROOT + .word >0105,26,1888 ;19 MEDNICK + .word >0105,26,1888 ;20 DAN R. + .word >0105,26,1888 ;21 PAT F. + .word >0105,26,1888 ;22 ED BOON + .word >0105,26,1888 ;23 J. TOBIAS + .word >0105,26,1888 ;24 OURSLER + .word >0105,26,1888 ;25 JASON S. + .word >0105,26,1888 ;26 QUINN + .word >0105,26,1888 ;27 M. PERRY + .word >0105,26,1888 ;28 N. FUNK + .word >0105,26,1888 ;29 MDOC + .word >0105,26,1888 ;30 BUD + .word >0105,54,1877 ;31 MARIUS + .word >0105,26,1888 ;32 MUNDAY + .word >0105,26,1888 ;33 NORTH + .word >0105,26,1888 ;34 AMRICH + .word >0105,26,1888 ;35 JIGGETS + .word >0105,26,1888 ;36 ZIRIN + .word >0105,26,1888 ;37 HEITH BETTLEMAN + .word >0105,30,1928 ;38 MATT BETTLEMAN + .word >0105,36,2250 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,31,1361 ;PIPPEN, scottie + .word >100D,28,1365 ;RODMAN, dennis + .word >100D,38,1345 ;JOHNSON, larry + .word >100D,33,1349 ;RICE, glen + .word >100D,32,1405 ;KIDD, jason + .word >100D,58,1425 ;MUTUMBO, dekembe + .word >100D,33,1445 ;HILL, grant + .word >100D,55,1482 ;OLAJUWAN, hakeem + .word >100D,39,1501 ;MILLER, reggie + .word >100D,46,1509 ;SMITS, rik + .word >100D,35,1561 ;MOURNING, alonzo + .word >100D,61,1585 ;ROBINSON, glen + .word >100D,42,1641 ;EWING, patrick + .word >100D,36,1657 ;STARKS, john + .word >100D,47,1661 ;HARDAWAY, anfernee + .word >100D,34,1665 ;GRANT, horace + .word >100D,59,1681 ;STACKHOUSE, jerry + .word >100D,61,1725 ;ROBINSON, cliff + .word >100D,61,1765 ;ROBINSON, david + .word >100D,32,1761 ;ELLIOTT, sean + .word >100D,28,1781 ;KEMP, shawn + .word >100D,42,1825 ;MALONE, karl + .word >100D,18,1865 ;WEBBER, chris + .word >100D,54,1877 ;MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,46,1417 ;McCLOUD, george + .word >100D,42,1449 ;MILLS, terry + .word >100D,33,1497 ;SMITH, kenny + .word >100D,43,1513 ;McKEE, derek + .word >100D,36,1962 ;CHAPMAN, rex + .word >100D,34,1593 ;BENJAMIN, benoit + .word >100D,29,1597 ;DOUGLAS, sherman + .word >100D,31,1965 ;WEBB, spud + .word >100D,30,1629 ;GILLIAM, armon + .word >100D,29,1637 ;EDWARDS, kevin + .word >100D,36,1653 ;OAKLEY, charles + .word >100D,31,1968 ;RUFFIN, trevor + .word >100D,36,1713 ;PERSON, wesley + .word >100D,42,1717 ;FINLEY, michael + .word >100D,36,1733 ;WILLIAMS, buck + .word >100D,36,1773 ;PERSON, chuck + .word >100D,36,1953 ;ROBERTSON, alvin + .word >100D,39,1813 ;MILLER, oliver + .word >100D,30,1817 ;MURRAY, tracy + .word >100D,38,1833 ;BENOIT, david + .word >100D,36,1959 ;SCOTT, byron + .word >100D,37,1857 ;MURDOCK, eric + + +*********** +*********** +special_pass_speech + .word >100D,41,2291 ;0 JEFF JOHNSON + .word >100D,41,2277 ;1 SAL DIVITA + .word >100D,41,2273 ;2 TURMELL + .word >100D,38,2287 ;3 THOMPSON + .word >100D,31,2279 ;4 GEER + .word >100D,42,2289 ;5 CARLTON + .word >100D,37,2281 ;6 HEDRICK + .word >100D,32,2275 ;7 JOHN HEY + .word >100D,52,2267 ;8 AIR MORRIS + .word >100D,39,2269 ;9 STEVE BARDO + .word >100D,44,2271 ;10 MINIFEE + .word >100D,51,2283 ;11 MARTINEZ + .word >100D,45,2285 ;12 PESINA + .word >0105,45,2251 ;13 LIPTAK + .word >0105,55,1911 ;14 EDDIE + .word >0105,35,1921 ;15 MIKE V. + .word >0105,35,1889 ;16 JAMIE R. + .word >0105,35,1889 ;17 NICK E. + .word >0105,35,1889 ;18 J. ROOT + .word >0105,35,1889 ;19 MEDNICK + .word >0105,35,1889 ;20 DAN R. + .word >0105,35,1889 ;21 PAT F. + .word >0105,35,1889 ;22 ED BOON + .word >0105,35,1889 ;23 J. TOBIAS + .word >0105,35,1889 ;24 OURSLER + .word >0105,35,1889 ;25 JASON S. + .word >0105,35,1889 ;26 QUINN + .word >0105,35,1889 ;27 M. PERRY + .word >0105,35,1889 ;28 N. FUNK + .word >0105,35,1889 ;29 MDOC + .word >0105,35,1889 ;30 BUD + .word >0105,63,1879 ;31 MARIUS + .word >0105,35,1889 ;32 MUNDAY + .word >0105,35,1889 ;33 NORTH + .word >0105,35,1889 ;34 AMRICH + .word >0105,35,1889 ;35 JIGGETS + .word >0105,35,1889 ;36 ZIRIN + .word >0105,35,1889 ;37 HEITH BETTLEMAN + .word >0105,39,1929 ;38 MATT BETTLEMAN + .word >0105,45,2251 ;39 KEVIN DAY + +;Superstar special guests + .word >100D,41,1363 ;to PIPPEN, scottie + .word >100D,38,1367 ;to RODMAN, dennis + .word >100D,48,1347 ;to JOHNSON, larry + .word >100D,42,1351 ;to RICE, glen + .word >100D,41,1407 ;to KIDD, jason + .word >100D,67,1427 ;to MUTUMBO, dekembe + .word >100D,42,1447 ;to HILL, grant + .word >100D,64,1483 ;to OLAJUWAN, hakeem + .word >100D,48,1503 ;to MILLER, reggie + .word >100D,55,1511 ;to SMITS, rik + .word >100D,44,1563 ;to MOURNING, alonzo + .word >100D,70,1587 ;to ROBINSON, glen + .word >100D,43,1643 ;to EWING, patrick + .word >100D,45,1659 ;to STARKS, john + .word >100D,56,1663 ;to HARDAWAY, anfernee + .word >100D,43,1667 ;to GRANT, horace + .word >100D,69,1683 ;to STACKHOUSE, jerry + .word >100D,70,1727 ;to ROBINSON, cliff + .word >100D,70,1767 ;to ROBINSON, david + .word >100D,41,1763 ;to ELLIOTT, sean + .word >100D,37,1783 ;to KEMP, shawn + .word >100D,51,1827 ;to MALONE, karl + .word >100D,28,1867 ;to WEBBER, chris + .word >100D,63,1879 ;to MURESAN, gheorge + +;New Superstar special guests removed from teams + .word >100D,56,1419 ;to McCLOUD, george + .word >100D,51,1451 ;to MILLS, terry + .word >100D,43,1499 ;to SMITH, kenny + .word >100D,52,1515 ;to McKEE, derek + .word >100D,45,1963 ;to CHAPMAN, rex + .word >100D,43,1595 ;to BENJAMIN, benoit + .word >100D,38,1599 ;to DOUGLAS, sherman + .word >100D,41,1966 ;to WEBB, spud + .word >100D,39,1631 ;to GILLIAM, armon + .word >100D,38,1639 ;to EDWARDS, kevin + .word >100D,45,1655 ;to OAKLEY, charles + .word >100D,40,1969 ;to RUFFIN, trevor + .word >100D,45,1715 ;to PERSON, wesley + .word >100D,51,1719 ;to FINLEY, michael + .word >100D,45,1735 ;to WILLIAMS, buck + .word >100D,45,1775 ;to PERSON, chuck + .word >100D,45,1954 ;to ROBERTSON, alvin + .word >100D,48,1815 ;to MILLER, oliver + .word >100D,39,1819 ;to MURRAY, tracy + .word >100D,48,1835 ;to BENOIT, david + .word >100D,45,1960 ;to SCOTT, byron + .word >100D,46,1859 ;to MURDOCK, eric + +****************************************************************************** + +tm_name_spch_tbl + .word >100D,25,>4b2 ;00 ATLANTA "Hawks" + .word >100D,33,>4b5 ;01 BOSTON "Celtics" + .word >100D,22,>4b8 ;02 CHARLOTTE "Hornets" + .word >100D,25,>4bb ;03 CHICAGO "Bulls" + .word >100D,41,>4be ;04 CLEVELAND "Cavaliers" + .word >100D,29,>4c1 ;05 DALLAS "Maverick" + .word >100D,24,>4c4 ;06 DENVER "Nuggets" + .word >100D,37,>4c7 ;07 DETROIT "Pistons" + .word >100D,39,>4ca ;08 GOLDEN STATE "Warriors" + .word >100D,28,>4cd ;09 HOUSTON "Rockets" + .word >100D,37,>4d0 ;10 INDIANA "Pacers" + .word >100D,28,>4d3 ;11 L.A. CLIPPERS "Clippers" + .word >100D,36,>4d6 ;12 L.A. LAKERS "Lakers" + .word >100D,20,>4d9 ;13 MIAMI "Heat" + .word >100D,24,>4dc ;14 MILWAUKEE "Bucks" + .word >100D,45,>4df ;15 MINNESOTTA "Timberwolves" + .word >100D,22,>4e2 ;16 NEW JERSEY "Nets" + .word >100D,27,>4e5 ;17 NEW YORK "Knicks" + .word >100D,28,>4e8 ;18 ORLANDO "Magic" + .word >100D,64,>4eb ;19 PHILADELPHIA "Sixers" + .word >100D,31,>4ee ;20 PHOENIX "Suns" + .word >100D,52,>4f1 ;21 PORTLAND "Blazers" + .word >100D,36,>4f4 ;22 SACRAMENTO "Kings" + .word >100D,40,>4f7 ;23 SAN ANTONIO "Spurs" + .word >100D,52,>4fa ;24 SEATTLE "Supersonics" + .word >100D,39,>4fd ;26 TORONTO "Raptors" + .word >100D,33,>500 ;26 UTAH "Jazz" + .word >100D,39,>503 ;27 VANCOUVER "Grizzlies" + .word >100D,22,>506 ;28 WASHINGTON "Bullets" + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +tm_city_spch_tbl + .word >100D,39,>4b1 ;00 ATLANTA + .word >100D,30,>4b4 ;01 BOSTON + .word >100D,31,>4b7 ;02 CHARLOTTE + .word >100D,41,>4ba ;03 CHICAGO + .word >100D,28,>4bd ;04 CLEVELAND + .word >100D,27,>4c0 ;05 DALLAS + .word >100D,25,>4c3 ;06 DENVER + .word >100D,36,>4c6 ;07 DETROIT + .word >100D,51,>4c9 ;08 GOLDEN STATE + .word >100D,32,>4cc ;09 HOUSTON + .word >100D,39,>4cf ;10 INDIANA + .word >100D,49,>4d2 ;11 L.A. CLIPPERS + .word >100D,49,>4d5 ;12 L.A. LAKERS + .word >100D,37,>4d8 ;13 MIAMI + .word >100D,39,>4db ;14 MILWAUKEE + .word >100D,39,>4de ;15 MINNESOTTA + .word >100D,38,>4e1 ;16 NEW JERSEY + .word >100D,37,>4e4 ;17 NEW YORK + .word >100D,41,>4e7 ;18 ORLANDO + .word >100D,44,>4ea ;19 PHILADELPHIA + .word >100D,31,>4ed ;20 PHOENIX + .word >100D,29,>4f0 ;21 PORTLAND + .word >100D,48,>4f3 ;22 SACRAMENTO + .word >100D,57,>4f6 ;23 SAN ANTONIO + .word >100D,34,>4f9 ;24 SEATTLE + .word >100D,40,>4fc ;26 TORONTO + .word >100D,32,>4ff ;26 UTAH + .word >100D,38,>502 ;27 VANCOUVER + .word >100D,44,>505 ;28 WASHINGTON + .word >100D,42,>818 ;GOOD!!! + .word >100D,42,>818 ;GOOD!!! + +full_tm_name_spch_tbl + .word >100D,71 ,>4b0 ;00 ATLANTA "Altanta Hawks" + .word >100D,82 ,>4b3 ;01 BOSTON "Boston Celtics" + .word >100D,74 ,>4b6 ;02 CHARLOTTE "Hornets" + .word >100D,81 ,>4b9 ;03 CHICAGO "Bulls" + .word >100D,93 ,>4bc ;04 CLEVELAND "Cavaliers" + .word >100D,78 ,>4bf ;05 DALLAS "Maverick" + .word >100D,72 ,>4c2 ;06 DENVER "Nuggets" + .word >100D,87 ,>4c5 ;07 DETROIT "Pistons" + .word >100D,101,>4c8 ;08 GOLDEN STATE "Warriors" + .word >100D,82 ,>4cb ;09 HOUSTON "Rockets" + .word >100D,86 ,>4ce ;10 INDIANA "Pacers" + .word >100D,88 ,>4d1 ;11 L.A. CLIPPERS "Clippers" + .word >100D,96 ,>4d4 ;12 L.A. LAKERS "Lakers" + .word >100D,64 ,>4d7 ;13 MIAMI "Heat" + .word >100D,82 ,>4da ;14 MILWAUKEE "Bucks" + .word >100D,94 ,>4dd ;15 MINNESOTTA "Timberwolves" + .word >100D,81 ,>4e0 ;16 NEW JERSEY "Nets" + .word >100D,76 ,>4e3 ;17 NEW YORK "Knicks" + .word >100D,81 ,>4e6 ;18 ORLANDO "Magic" + .word >100D,117,>4e9 ;19 PHILADELPHIA "Sixers" + .word >100D,72 ,>4ec ;20 PHOENIX "Suns" + .word >100D,93 ,>4ef ;21 PORTLAND "Blazers" + .word >100D,95 ,>4f2 ;22 SACRAMENTO "Kings" + .word >100D,100,>4f5 ;23 SAN ANTONIO "Spurs" + .word >100D,100,>4f8 ;24 SEATTLE "Supersonics" + .word >100D,93 ,>4fb ;26 TORONTO "Raptors" + .word >100D,82 ,>4fe ;26 UTAH "Jazz" + .word >100D,104,>501 ;27 VANCOUVER "Grizzlies" + .word >100D,82 ,>504 ;28 WASHINGTON "Bullets" + .word >100D,60 ,>504 ;GOOD!!! + .word >100D,60 ,>504 ;GOOD!!! + + +scr_nbr_tbl + .word >110D,23,>87c,0 ;0 ;(nothing) + .word >110D,16,>87d,0 ;1 + .word >110D,17,>87e,0 ;2 + .word >110D,15,>87f,0 ;3 + .word >110D,20,>880,0 ;4 + .word >110D,22,>881,0 ;5 + .word >110D,21,>882,0 ;6 + .word >110D,20,>883,0 ;7 + .word >110D,20,>884,0 ;8 + .word >110D,24,>885,0 ;9 + .word >110D,22,>886,0 ;10 + .word >110D,25,>887,0 ;11 + .word >110D,25,>888,0 ;12 + .word >110D,26,>889,0 ;13 + .word >110D,29,>88a,0 ;14 + .word >110D,26,>88b,0 ;15 + .word >110D,37,>88c,0 ;16 + .word >110D,32,>88d,0 ;17 + .word >110D,28,>88e,0 ;18 + .word >110D,29,>88f,0 ;19 + + .word >110D,19,>890,0 ;20 + .word >110D,25,>891,0 ;21 + .word >110D,25,>892,0 ;22 + .word >110D,25,>893,0 ;23 + .word >110D,25,>894,0 ;24 + .word >110D,25,>895,0 ;25 + .word >110D,25,>896,0 ;26 + .word >110D,25,>897,0 ;27 + .word >110D,25,>898,0 ;28 + .word >110D,25,>899,0 ;29 + + .word >110D,37,>89a,0 ;30 + .word >110D,37,>89b,0 ;31 + .word >110D,37,>89c,0 ;32 + .word >110D,37,>89d,0 ;33 + .word >110D,37,>89e,0 ;34 + .word >110D,37,>89f,0 ;35 + .word >110D,37,>8a0,0 ;36 + .word >110D,37,>8a1,0 ;37 + .word >110D,37,>8a2,0 ;38 + .word >110D,37,>8a3,0 ;39 + + .word >110D,38,>8a4,0 ;40 + .word >110D,38,>8a5,0 ;41 + .word >110D,38,>8a6,0 ;42 + .word >110D,38,>8a7,0 ;43 + .word >110D,38,>8a8,0 ;44 + .word >110D,38,>8a9,0 ;45 + .word >110D,38,>8aa,0 ;46 + .word >110D,38,>8ab,0 ;47 + .word >110D,38,>8ac,0 ;48 + .word >110D,38,>8ad,0 ;49 + + .word >110D,34,>8ae,0 ;50 + .word >110D,34,>8af,0 ;51 + .word >110D,34,>8b0,0 ;52 + .word >110D,34,>8b1,0 ;53 + .word >110D,34,>8b2,0 ;54 + .word >110D,34,>8b3,0 ;55 + .word >110D,34,>8b4,0 ;56 + .word >110D,34,>8b5,0 ;57 + .word >110D,34,>8b6,0 ;58 + .word >110D,34,>8b7,0 ;59 + + +STAB_END + +#***************************************************************************** +* +* + SUBR lob_ball_speech + +;DJT Start + movk 9,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #lob_spch_tbl,a0 + move *a0,a0,L +#sayo + calla snd_play1 + rets + +#lob_spch_tbl + .long lev_tmate_sp + .long lob_pass_sp + .long scp_tmate_sp +;DJT Start + .long the_scoop_sp +;DJT End + .long lob_pass_sp + .long tosses_it_sp + .long lob_pass_sp + .long passes_sp + .long dble_dnk_sp + .long dble_dnk2_sp + +#***************************************************************************** +* +* + SUBR start_crowd_noise + + movi crwdbed_tune,a0,L ;indoor snd + move @pup_court,a14 + jrz scn_1 ;br=indoor court + movi crwdbd2_tune,a0,L ;outdoor snd +scn_1 calla snd_play1 + rets + + +#***************************************************************************** +* Halftime speech +* +* INPUT: reg a0 - player number +* + SUBR best_plyr_speech + + PUSH a0 + movi hlftm_ldr_sp,a14,L + move @gmqrtr,a1 + srl 2,a1 + jrz #bsp_1 ;br=halftime + movi gmevr_ldr_sp,a14,L + +#bsp_1 movi sound_ram,a1,L + move a14,*a1+,L + move *a14(16),a14,W + move a14,*a1+,W + + move @spch_name_ram+32,a14,L ;plyr 1 is best + subk 1,a0 + jrlt #syp + move @spch_name_ram+96,a14,L ;plyr 2 + subk 1,a0 + jrlt #syp + move @spch_name_ram+160,a14,L ;plyr 4 + subk 1,a0 + jrlt #syp + move @spch_name_ram+224,a14,L ;plyr 3 +#syp + move a14,*a1+,L + + movi -1,a14 + move a14,*a1,W + + movi sound_ram,a0,L + calla script_play1 + PULL a0 + rets + + + +#***************************************************************************** +* Ball hit backboard speech process +* +* a8 = * ball obj +* + SUBR backbrd_hit_speech + + move @bkbrd_proc_flg,a14 + jrnz #die + + movk 1,a14 + move a14,@bkbrd_proc_flg + + SLEEPK 7 + + move @ballrimhitcnt,a14 + jrnz #done + move *a8(OXVEL),a0,L + abs a0 ;Should we make a bbrd bounce sound? + cmpi >1fff,a0 ;!!! Min XVEL to make sound + jrlt #soft + + SLEEPK 15 + + move @ballscorezhit,a0 + jrnz #done ;br=ball hit score zone + move @ballrimhitcnt,a14 + cmpi 4,a14 + jrhs #done + + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #bckbd_hit_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + SLEEP 70 + jruc #done +#soft + movi 250,a0 + calla RNDPER + jrls #done + SOUND1 soft_glas_sp + SLEEP 70 +#done + clr a14 + move a14,@bkbrd_proc_flg +#die + DIE + + +#bckbd_hit_sp_tbl + .long kild_smne_sp + .long off_trgt_sp + .long wht_thnkg_sp + .long off_glass_sp + .long sht_stunk_sp + .long off_bkbrd_sp + .long wht_distr_sp + +#***************************************************************************** +;a player has just launched a shot +;a0 = player number (0-3) +;a8 = * player obj +;a13 = * player process + + SUBR shoots_speech + + PUSH a1,a2 + + move a0,@plyr_shot + callr calc_score_diff + + clr a0 + move a0,@ugly_stat ;not ugly + move a0,@freakout ;no freakout on score + + callr at_buzzer + jrnc #xshtspeech + + movi 350,a0 + calla RNDPER + jrls #ntinfce + + move *a13(plyr_o1dist),a14 + cmpi 40,a14 ;this # is OK + jrle #infce + move *a13(plyr_o2dist),a14 + cmpi 40,a14 ;this # is OK + jrgt #ntinfce +#infce + move *a13(plyr_seqflgs),a14 + btst DUNK_B,a14 + jrnz #ntinfce + btst LAYUP_B,a14 + jrnz #ntinfce + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #inface_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + jruc #xshtspeech + +#ntinfce + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #shoots_table,a0 + move *a0,a0,L + call a0 + +#xshtspeech + PULL a1,a2 + rets + + + +#inface_sp_tbl + .long hnd_face_sp + .long frcd_shot_sp + .long frcd_shot_sp + .long difficult_sp + + +#shoots_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation + +;DJT Start + movk 11,a0 + move @game_time,a14 + cmpi >700,a14 + jrge #fulltab + movk 3,a0 +#fulltab +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#desptab +;DJT Start + .long hail_mary_sp + .long unlod_one_sp + .long wild_shot_sp + .long lfts_wild_sp + + .long whyyyy_sp + .long whyyyy_sp + .long ill_shot_sp + .long ill_shot_sp + .long outof_rng_sp + .long outof_rg2_sp + .long out_cntrl_sp + .long difficult_sp + +;DJT End +**************** +#long_range + +;DJT Start + movk 7,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#longtab + .long frm_l_rng_sp + .long frm_dwntn_sp + .long wild_shot_sp + .long difficult_sp + .long unlod_one_sp + .long frm_dwntn_sp + .long out_cntrl_sp +;DJT Start + .long outof_rng_sp +;DJT End + +**************** +#2_points + + callr ugly_shot + jrnc #x2pts + +; callr wideopen_speech +; jrnc #x2pts + + movi #2ptab_near,a2 + + move @shot_distance,a0 ;distance from hoop + + move *a8(OZPOS),a14 + cmpi 1068,a14 + jrlo #med ;br=above upper-post line + cmpi 1226,a14 + jrhi #med ;br=below lower-post line + cmpi 155,a0 ;beyond free-throw line ? + jrls #spch ;br=nope, near + movi #2ptab_far,a2 + jruc #spch +#med + movi #2ptab_med,a2 +#spch movk 12,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #cname + calla snd_play1 + jruc #x2pts +#cname + move @plyr_shot,a0 + callr call_player_name +#x2pts rets + + + +#2ptab_near + .long frm_paint_sp + .long shrt_rng_sp + .long for_two_sp + .long shoots3_sp + .long 0 + .long shoots1_sp + .long shrt_rng_sp + .long frm_paint_sp + .long for_two_sp + .long ltle_jmpr_sp + .long fires_jumpr + .long shoots2_sp + .long for_two_sp + +#2ptab_med + .long from_15_sp + .long for_two_sp + .long fires_jumpr + .long frm_wing_sp + .long shoots1_sp + .long frm_post_sp + .long stp_n_pop_sp + .long from_15_sp + .long stp_n_pop_sp + .long shoots3_sp + .long for_two_sp + .long shoots2_sp + .long 0 + +#2ptab_far + .long top_key_sp + .long from_18_sp + .long fires_jumpr + .long shoots1_sp + .long stp_n_pop_sp + .long fr_thw_ln_sp + .long lnch_jmpr_sp + .long tp_circle_sp + .long top_key_sp + .long for_two_sp + .long shoots2_sp + .long from_20_sp + .long fr_thw_ln_sp + + +**************** +#3_points + + callr ugly_shot + jrnc #x3pts + + callr wideopen_speech + jrnc #x3pts + + movi 250,a0 + calla RNDPER + jrls #x3p_1 + + move @game_time,a0,L ;don't call if clock run down + cmpi >2040906,a0 + jrge #x3p_1 + + move @ballnumscored,a0 ;# times last plyr scored + jrz #x3p_1 + SOUND1 agn_shoot_sp + jruc #x3pts + +#x3p_1 +;DJT Start + movk 15,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + calla snd_play1 +#x3pts + rets + +#3ptab + .long frm_dwntn_sp + .long frm_3_arc_sp + .long for_thre1_sp + .long frm_outsd_sp + .long bhd_3_arc_sp + .long frm_dwntn_sp + .long for_thre2_sp + .long shoots2_sp + .long from_arc_sp + .long for_thre3_sp + .long frm_outsd_sp + .long frm_dwntn_sp + .long frm_outsd_sp + .long from_arc_sp + .long frm_l_rng_sp +;DJT Start + .long fm_3pline_sp +;DJT End + +**************** +#hook_shot + + clr a0 + move a0,@skycalled + + callr ugly_shot + jrnc #xhook + + movi #hooktab_near,a2 + move @shot_distance,a14 ;distance from hoop + cmpi 120,a14 + jrlt #close + movi #hooktab_far,a2 +#close + movi 11,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + add a2,a0 + move *a0,a0,L + jrz #hname + calla snd_play1 + + movk 1,a0 + move a0,@skycalled + rets +#hname + move @plyr_shot,a0 + callr call_player_name +#xhook + rets + + +#hooktab_near + .long baby_hook_sp + .long half_hook_sp + .long 0 + .long shoots1_sp + .long frm_post_sp + .long hook_shot_sp + .long finese_it_sp + .long baby_hook_sp + .long 0 + .long shrt_rng_sp + .long shoots2_sp + .long shoots3_sp + +#hooktab_far + .long hook_shot_sp + .long sky_hook_sp + .long shoots1_sp + .long lft_hndr_sp + .long sky_hook2_sp + .long hook_shot_sp + .long sky_hook2_sp + .long rgt_hndr_sp + .long for_two_sp + .long 0 + .long sky_hook_sp + .long hook_shot_sp + +**************** +#lay_up + + move @ballshotinair,a14 + move *a13(plyr_num),a0 + cmp a0,a14 + jrne #nolay +#laysp + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #layup_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 +#nolay + rets + + +#layup_sp_tbl + .long lay_it_up_sp + .long layup_sp + .long he_layup_sp + .long finese_it_sp + .long fingr_rl2_sp + .long he_layup_sp + .long lay_it_up_sp + + +**************** +#finger_roll + + movk 8,a0 + calla rndrng0 + sll 5,a0 + addi #fngr_roll_sp_tbl,a0 + move *a0,a0,L + jrz #fngr + calla snd_play1 + rets +#fngr + move @plyr_shot,a0 + callr call_player_name + rets + + +#fngr_roll_sp_tbl + .long fires_jumpr + .long shoots3_sp + .long fingr_rl2_sp + .long lay_it_up_sp + .long figr_itin_sp + .long layup_sp + .long finese_it_sp + .long lay_it_up_sp + .long fingr_rol_sp + + +**************** +#dunk_short + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#dunk_med + + move @plyr_shot,a0 + callr call_player_name + rets + +**************** +#dunk_long + + move @plyr_shot,a0 + callr call_player_name + rets + + +**************** +#fade_away + rets + +**************** +#fade_in + rets + + +#***************************************************************************** +;a player has just scored a basket + + SUBR scored_speech + + PUSH a1,a2 + + callr blowout + jrnc #scrd2 + + callr onfire_speech + jrnc #scrd2 + + callr lucky_bounce + jrnc #scrd2 + + movi 100,a0 ;10% of time, say good again + calla RNDPER + jrls #scrd1 + + move @ballnumscored,a0 + cmpi 2,a0 + jrls #scrd1 ;br=hasnt scored a basket yet + + movi score_agn_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #scrd + movi good_agn_sp,a0,L +#scrd calla snd_play1 + jruc #scrd2 + +#scrd1 + move @shot_type,a0 + sll 5,a0 ;x 32 bits + addi #scored_table,a0 + move *a0,a0,L + call a0 + +#scrd2 + PULL a1,a2 + rets + + +#scored_table + .long #desperation + .long #long_range + .long #2_points + .long #3_points + .long #hook_shot + .long #lay_up + .long #finger_roll + .long #dunk_short + .long #dunk_med + .long #dunk_long + .long #fade_away + .long #fade_in + +**************** +#desperation +hotscored + + callr itsgood + jrnc #xdesp + +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #desptab,a0 + move *a0,a0,L + calla snd_play1 +#xdesp + rets + +#desptab + .long ohmy + .long per_luck_sp + .long its_good_sp + .long incredble_sp +;DJT Start + .long kakaboom_sp + .long unbelieve_sp + .long luky_bskt_sp +;DJT End + +**************** +#long_range + + callr itsgood + jrnc #xlong + +;DJT Start + movk 10,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #longtab,a0 + move *a0,a0,L + calla snd_play1 +#xlong + rets + +#longtab + .long whata_sht_sp + .long per_luck_sp + .long its_good_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp + .long incrd_sht_sp +;DJT End + .long scores_sp + .long unbelieve_sp + .long amazing_sp + .long he_scores_sp +;DJT Start + .long scores2_sp +;DJT End + +**************** +#2_points + + movi 400,a0 ;call 40% swishes + callr swish_speech + jrnc #x2pts + + movi 400,a0 ;call backboard hit 25% time + calla RNDPER + jrls #nobkbd + + move @ballbbhitcnt,a14 + jrz #nobkbd + +;DJT Start + movk 5,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2bkbdhit_tab,a0 + jruc #2snd + +#nobkbd +; movi 800,a0 ;call scores 20% time +; calla RNDPER +; jrls #x2pts + +;DJT Start + movk 19,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #2tab,a0 +#2snd + move *a0,a0,L + calla snd_play1 +#x2pts + rets + + +#2bkbdhit_tab + .long banked_it_sp + .long off_glass_sp + .long off_bkbrd_sp + .long a_banker_sp + .long scores_sp +;DJT Start + .long scores2_sp +;DJT End + +#2tab + .long it_falls_sp + .long scores_sp + .long hits_jmpr_sp + .long great_sht_sp +;DJT Start + .long greatshot_sp +;DJT End + .long bingo_sp + .long good_sht_sp + .long count_it_sp + .long chk_it_up_sp + .long good_4two_sp + .long goooood2_sp + .long yes_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long book_it_sp + .long bingo_sp + .long smokin_sp + .long kncks_dwn_sp + .long dwn_well_sp +;DJT Start + .long and_drops_sp + .long scores2_sp +;DJT End + + +**************** +#3_points + + callr itsgood + jrnc #x3p + + movi 200,a0 ;call 25% swishes + callr swish_speech + jrnc #x3p + +;DJT Start + movk 20,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #3ptab,a0 + move *a0,a0,L + jrz #x3p + calla snd_play1 +#x3p + rets + +#3ptab + .long its_good_sp + .long drains_it_sp + .long goooood2_sp + .long count_it_sp +;DJT Start + .long chalk_it_sp +;DJT End + .long scores_sp + .long money_bnk_sp + .long he_scores_sp + .long chk_it_up_sp + .long goooood_sp + .long bingo_sp + .long whata_sht_sp + .long a_trey_sp + .long thats_3_sp + .long good_4_3_sp + .long amazing_sp + .long smokin_sp + .long yes_sp + .long dwn_well_sp +;DJT Start + .long outstndng_sp + .long scores2_sp +;DJT End + + +**************** +#hook_shot + + callr itsgood + jrnc #xhook + + move @skycalled,a0 ;sky hook called? + jrz #nosky + + jruc #2_points ;call like regular 2 pointer + calla snd_play1 + rets + +#nosky + movi great_sht_sp,a0 + calla snd_play1 + +#xhook + rets + + +**************** +#lay_up + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #laytab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#laytab + .long nicly_dne_sp + .long fancy + .long got_skilz_sp + .long incredble_sp + +**************** +#finger_roll + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #fingtab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#fingtab + .long nicly_dne_sp + .long figr_itin_sp + .long nicly_dne_sp + .long figr_itin_sp + .long got_skilz_sp + + +**************** +#dunk_short +#dunk_med +#dunk_long + + movi 300,a0 ;call name 30% time + calla RNDPER + jrls #fname + + move @ballpnumscored,a0 + callr call_players_full_name + jruc #no_speech +#fname + move @jam_speech,a0 ;speech type to call when jammed + jrz #no_speech + sll 5,a0 ;x 32 bits + addi #jam_jump,a0 + move *a0,a0,L + call a0 +#no_speech + rets + + +#jam_jump + .long 0 + .long #easy_jam + .long #med_jam + .long #good_jam + .long #great_jam + .long #alleyoop_jam + +**************** +#easy_jam + +;DJT Start + movk 8,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #easy_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#easy_tab + .long kaboom1_sp +;DJT Start + .long kaboom2_sp +;DJT End + .long he_dnk_it_sp + .long jams_it_sp + .long jam_it_in_sp + .long dunks_it_sp + .long slam_dunk_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#med_jam + +;DJT Start + movk 11,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #med_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#med_tab + .long rama_dong_sp + .long bomshakalaka + .long kaboom1_sp + .long he_dnk_it_sp + .long powr_jams_sp +;DJT Start + .long kaboom2_sp + .long throws_it_sp +;DJT End + .long smokin_sp + .long incredble_sp + .long jam_it_in_sp + .long with_ajam_sp + .long he_slams_sp + + +**************** +#good_jam + +;DJT Start + movk 17,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #good_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#good_tab + .long fantastic_sp + .long bomshakalaka + .long thndr_dnk_sp + .long kaboom1_sp +;DJT Start + .long kaboom2_sp + .long pounds_it_sp +;DJT End + .long spect_dnk_sp + .long rama_dong_sp + .long u_c_that_sp + .long jam_it_in_sp + .long postr_jam_sp + .long oh_man_sp + .long no_stopng_sp + .long incredble_sp +;DJT Start + .long outstndng_sp +;DJT End + .long amazing_sp + .long powr_jams_sp + .long with_ajam_sp + + +**************** +#great_jam + +;DJT Start + movk 16,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #great_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#great_tab + .long rama_dong_sp + .long bomshakalaka + .long u_c_that_sp + .long amazing_sp + .long isit_shoe_sp + .long kaboom1_sp +;DJT Start + .long outstndng_sp + .long learn_tht_sp + .long didnt_knw_sp + .long kaboom2_sp +;DJT End + .long rama_dong_sp + .long rama_dong_sp + .long oh_man_sp +;DJT Start + .long kakaboom_sp +;DJT End + .long with_ajam_sp + .long powr_jams_sp + .long spect_dnk_sp + + +**************** +#alleyoop_jam + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #alleyoop_tab,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#alleyoop_tab + .long alley_oop_sp + .long bomshakalaka + .long thr_tmwrk_sp + .long alley_oop_sp + .long thr_smkn_sp + .long alley_oop_sp + .long nicly_dne_sp + .long alley_oop_sp +; .long thr_zone_sp +; .long whta_show_sp + + + +**************** +#fade_away +#fade_in + rets + + +#***************************************************************************** + + SUBR seq_call_name + + move *a13(plyr_num),a0 ;(0-3) + callr call_player_name + rets + + +#***************************************************************************** +;calls player name speech +;a0 = player number to call (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR call_player_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrhs #playit + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 ;then don't call it again + jreq #snd_fail + +#playit + PUSH a0 + + move a0,a1 + sll 6,a1 + addi spch_name_ram,a1 + move *a1,a0,L + calla snd_play1 + + PULL a0 + + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called + clrc + rets + +#snd_fail + setc + rets + +#***************************************************************************** +* Call FULL PLAYERS name +* +* a0 = player number to call (0-3) +****************************************************************************** + SUBRP call_players_full_name + + sll 6,a0 + addi spch_name_ram,a0 + addk 32,a0 ;point to full name speech + move *a0,a0,L + calla snd_play1 + rets + + +#***************************************************************************** +;calls "to player" speech when players pass the ball +; +;a1 = player number passing ball (0-3) +; +;RETURNS: +;CC = name called +;CS = name NOT called + + SUBR pass_to_speech + + PUSH a2 + move a1,a2 + + movi 300,a0 ;call 'to-name' 70% of time + calla RNDPER + jrls #toname + + movi #pass_spch_near_tbl,a2 + move *a13(plyr_tmdist),a14 + cmpi 570,a14 + jrls #pastos ;br=teammate is close !! + movi #pass_spch_far_tbl,a2 +#pastos + movk 7,a0 + calla rndrng0 + sll 5,a0 + add a2,a0 + move *a0,a0,L + jrz #fail + calla snd_play1 + jruc #fail +#toname + move @last_name_time,a0 ;# ticks since name called + cmpi TSEC*3,a0 + jrls #fail + + move a2,a1 + sll 5,a1 + addi spch_pass_ram,a1 + move *a1,a0,L + calla snd_play1 + + xori 1,a2 + move a2,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a2 + clrc + rets +#fail + PULL a2 + setc + rets + + +#pass_spch_near_tbl + .long passes_sp + .long he_passes_sp + .long 0 + .long a_pass_sp + .long 0 + .long he_passes_sp + .long tosses_it_sp + .long guns_it_sp + +#pass_spch_far_tbl +;DJT Start + .long cros_crt_sp + .long downcourt_sp + .long downcrt2_sp + .long hev_dncrt_sp + .long lngpss_dc_sp + .long pas_outsd_sp + .long he_passes_sp + .long hev_dncrt_sp +;DJT End + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + .asg 040500h,MAX_TIME ;45 seconds + .asg 020500h,MAX_TIME2 ;25 seconds + .asg 000200h,MIN_TIME ;2 seconds + + SUBRP blowout + + move @freakout,a1 ;no freakout on score + jrz #no_freakout + + movi its_good_sp,a0 + dec a1 + jrnz #ok + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + movi goooood_sp,a0 ;GOOOOD!!! +#ok calla snd_play1 + rets + + +#no_freakout + move @gmqrtr,a0 + cmpi 3,a0 + jrlt #not_last_qtr + + move @game_time,a0,L + cmpi MAX_TIME,a0 + jrhi #snd_fail + cmpi MIN_TIME,a0 + jrlo #snd_fail + + move @blowout_called,a0 + jrnz #snd_fail + + move @ballpnumscored,a0 ;Last plyr who scored (0-3) or neg + callr calc_score_diff + + move @score_diff,a1 + cmpi 6,a1 + jrge #isblow + + cmpi 3,a1 + jrlt #snd_fail + + move @needshot_called,a0 + jrnz #snd_fail + + move @game_time,a0,L + cmpi MAX_TIME2,a0 + jrhi #snd_fail + + + movk 1,a0 + calla rndrng0 + move a0,a0 + jrz #do_needshot + +;say " TEAM... running out of time" + + move @ballpnumscored,a14 ;Last plyr who scored (0-3) or neg + jrn #error + + movi sound_ram,a4,L + + move @team1,a0 + srl 1,a14 ;0-1 + jrnz #tm1_scored +;tm2_scored + move @team2,a0 +#tm1_scored + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + addk 10,a14 ;a little silence + move a14,*a4+,W + movi run_out_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + rets + +#error +#do_needshot +;DJT Start + movi needshot_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #playit + movi just_secs_sp,a0 + btst 2,a14 + jrnz #playit + movi run_out_sp,a0 +;DJT End +#playit + calla snd_play1 + movk 1,a0 + move a0,@needshot_called + rets + +#isblow +;DJT Start + cmpi 9,a1 + jrlt #notblow + movi blowout_sp,a0 ;it's a blowout + move @HCOUNT,a14 + btst 1,a14 + jrnz #blowout + movi debacle_sp,a0 + jruc #blowout +#notblow +;DJT End + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #no_chnce_win_sp_tbl,a0 + move *a0,a0,L +#blowout + calla snd_play1 + + movk 1,a0 + move a0,@blowout_called + clrc + rets + +#not_last_qtr + clr a0 + move a0,@blowout_called + move a0,@needshot_called + +#snd_fail + setc + rets + + + +#no_chnce_win_sp_tbl + .long whoomp_sp + .long fnl_strw_sp + .long its_hstry_sp +;DJT Start + .long strike_up_sp +;DJT End + .long fat_sing_sp + + +#***************************************************************************** +; +;CC = at buzzer called +;CS = at buzzer NOT called + + SUBRP at_buzzer + + move @shot_type,a0 ;don't call on dunks + cmpi DUNK_SHORT,a0 + jrhs #check_buzzer + + move @game_time,a0,L + cmpi 400h,a0 ;less than 4 seconds left + jrgt #snd_fail + + move @gmqrtr,a0 + cmpi 3,a0 ;last quarter? + jrlt #not_last_qtr + + move @score_diff,a0 + jrp #in_front ;already in front + move @ballptsforshot,a1 ;Point value for current shot (1-3) + add a1,a0 + jrz #ties_it + jrn #behind +#wins_it + movi it_is_sp,a0 ;IT IS.... + calla snd_play1 + movk 1,a0 + move a0,@freakout ;freak out if it scores + rets + +#ties_it + movi could_tie_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #tsit + movi it_culdbe_sp,a0 +#tsit + calla snd_play1 + movk 2,a0 + move a0,@freakout ;freak out if it scores + rets + + +#behind +#in_front +#not_last_qtr +#check_buzzer + move @game_time,a0,L + cmpi 200h,a0 + jrgt #snd_fail + + movi off_in_time,a0 + calla snd_play1 + rets + +#snd_fail + setc + rets + +#***************************************************************************** +; +;CC = lucky bounce called +;CS = lucky bounce NOT called + + SUBRP lucky_bounce + + move @shot_type,a0 + cmpi DUNK_SHORT,a0 ;no lucky bounce on dunks! + jrge #snd_fail + + move @ugly_stat,a0 + jrz #snd_fail ;ugly not called + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #lucky_bnce_tbl,a0 + move *a0,a0,L + calla snd_play1 + clrc + rets + +#snd_fail + setc + rets + + +#lucky_bnce_tbl + .long luky_bnce_sp + .long it_falls_sp + .long luky_bnce_sp + .long falls_in_sp + .long luky_bnce_sp + .long per_luck_sp + + +#***************************************************************************** +; +;CC = ugly called +;CS = ugly NOT called + + SUBRP ugly_shot + + move @shot_percentage,a0 ;0=ugly, 1=ok + jrn #doit + jrnz #snd_fail + + movi 100,a0 ;call ugly 20% time + calla RNDPER + jrls #snd_fail + +#doit +;DJT Start + movk 3,a0 +;DJT End + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #uglytab,a0 + move *a0,a0,L + calla snd_play1 + + movk 1,a0 + move a0,@ugly_stat ;ugly called + + clrc + rets + +#snd_fail + setc + rets + +#uglytab +;DJT Start + .long look_out_sp +;DJT End + .long ugly_shot_sp + .long putup_brk_sp + .long teribl_sh_sp + + +#***************************************************************************** +;calls team names speech +;a0 = team number to call (0-29) + + SUBR call_team_name + + SLEEPK 10 + + move a8,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + move a1,a0 + addi tm_name_spch_tbl,a0 + calla snd_play1 + DIE + + +#***************************************************************************** + + SUBR call_matchup + +; SLEEP 20 +; +; SOUND1 matchup +; +; SLEEP 1*TSEC+20 + + movi sound_ram,a4,L + + move @team1,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a0,W ;get sound call length + move a0,*a4+,W + + movi vs_sp,a0,L + move a0,*a4+,L + move *a0(16),a14,W ;get sound call length + move a14,*a4+,W ;store it + + move @team2,a0 + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + DIE + + +#***************************************************************************** +* a0 = player who last scored or shot + +calc_score_diff + + PUSH a0,a1,a2 + + move @scores,a1 + move @scores+10h,a2 + sub a2,a1 + srl 1,a0 + jrz #team1 + neg a1 ;team2, so negate +#team1 + move a1,@score_diff + PULL a0,a1,a2 + rets + +#***************************************************************************** +;called when player with ball gets pushed and loses ball + + SUBR pushed_speech + + PUSH a0,a1,a14 + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #pushtab,a0 + move *a0,a0,L + jrz #nosnd + calla snd_play1 +#nosnd + PULL a0,a1,a14 + setc + rets + + +#pushtab + .long flagrant_sp + .long 0 + .long to_floor_sp + .long to_deck_sp + .long 0 +;DJT Start + .long hamerd_hm_sp +;DJT End + .long tookm_out_sp + .long tookm_out_sp + .long 0 + .long hamerd_hm_sp + + +#***************************************************************************** +;called when a player rejects a shot + + SUBR rejected_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -38,a0 ;if below HOOP - dont call! +; cmpi -28,a0 + jrgt #yes ;Br=near ground + + move @must_rebound,a0 + jrnz #yes + + movk 8,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regtab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#regtab + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + .long rejected_sp + .long blckd_it_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +; called when a player steals the ball in the air +; + SUBR in_air_steal_speech + + PUSH a0,a1,a14 + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #inair_spch_tbl,a0 + move *a0,a0,L + calla snd_play1 +#inar + PULL a0,a1,a14 + rets + + +#inair_spch_tbl + .long outa_here_sp + .long stolen_sp + .long grab_ball_sp + .long outa_here_sp + .long quck_hnds_sp + + +#***************************************************************************** +;called when a player rejects a dunk + + SUBR rejected_dnk_speech + + PUSH a0,a1,a14 +;Check to make sure ball is high enough in air + move @ballobj_p,a1,L + move *a1(OYPOS),a0 + cmpi -75,a0 + jrgt #yes ;Br=near ground + + movk 4,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #regdnktab,a0 + move *a0,a0,L + calla snd_play1 + jruc #dne +#yes + SOUND1 stolen_sp +#dne + PULL a0,a1,a14 + rets + +#regdnktab + .long rejected_sp + .long no_way_sp + .long outa_here_sp + .long rejected_sp + .long outa_here_sp + + +#***************************************************************************** +;called when a player swats the ball in air + + SUBR deflected_speech + + PUSH a0,a1,a14 + + move @must_rebound,a0 + jrnz #yes + + + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #deflt_spch_tab,a0 + move *a0,a0,L + calla snd_play1 +#yes + PULL a0,a1,a14 + rets + +#deflt_spch_tab + .long rejected_sp + .long outa_here_sp + .long deflected_sp + .long its_blckd_sp + .long rejected_sp + .long deflected_sp + .long outa_here_sp + + +#***************************************************************************** + + SUBR rebound_speech + + PUSH a1,a2,a4,a6,a7,a8 + + move @game_time,a0,L ;don't call if clock run down + jrz #done + + move @ballpnum,a1 + jrn #done + + movi HOOPLX,a6 + move *a13(PA8),a14 + move *a14(OXPOS),a14 + subi WRLDMID,a14 +; jruc #je + jrn #rbs + movi HOOPRX,a6 +#rbs + movi CZMID,a7 + move @ballobj_p,a8,L + calla seekdirdist_obxz128 + cmpi 22,a1 + jrhi #ntnear + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_near_hoop_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done + +#ntnear + movi 500,a0 ;call name 50% time + calla RNDPER + jrls #name + move @last_name_time,a14 ;# ticks since name called + cmpi TSEC*2,a14 + jrhs #name ;br=okay too call name +#noname + movk 6,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_no_nme_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + jruc #done +#name + movi 200,a0 ;call name 50% time + calla RNDPER + jrls #aname + + movi sound_ram,a4,L + + move @team1,a0 + move @ballpnum,a14 + srl 1,a14 ;0-1 + jrz #tm1 + move @team2,a0 +#tm1 movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi tm_name_spch_tbl,a1 + move a1,*a4+,L ;store ptr. to sound call data + move *a1(16),a14,W ;get sound call length + move a14,*a4+,W + movi posession_sp,a14,L + move a14,*a4+,L + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + jruc #done +#aname + +; movi 300,a0 ;call name 50% time +; calla RNDPER +; jrls #bname +;#je +; movi sound_ram,a4,L +; +; move @ballpnum,a14 +; sll 6,a14 +; addi spch_name_ram,a14 +; move *a14,a14,L ;get snd call ptr. +; move a14,*a4+,L ;store it +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +;; movi has_sp,a14,L +; movi with_sp,a14,L +; +; move a14,*a4+,L +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; move @ballpnum,a1 +; movi PS_OFF_REB,a0 ;Assume offensive rebound +; calla get_player_stat +; move a14,a2 +; movi PS_DEF_REB,a0 ;No. Defensive rebound +; move @ballpnum,a1 +; calla get_player_stat +; add a2,a14 +; +; cmpi 20,a14 +; jrhi #bname ;br=if value > 20, ignore +; +; sll 6,a14 +; addi scr_nbr_tbl,a14 +; move a14,*a4+,L ;store sound ptr +; move *a14(16),a14,W ;get sound call length +; move a14,*a4+,W ;store it +; +; movi rebounds_sp,a14,L +; move a14,*a4+,L +; +; movi -1,a14 +; move a14,*a4,W ;end script +; movi sound_ram,a0,L +; calla script_play1 +; jruc #done +; +;#bname + movi sound_ram,a4,L + + move @ballpnum,a14 + sll 6,a14 + addi spch_name_ram,a14 + move *a14,a14,L ;get snd call ptr. + move a14,*a4+,L ;store it + move *a14(16),a14,W ;get sound call length +; subk 6,a14 ;shorten space between speech + move a14,*a4+,W ;store it + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #rebnd_nme_tbl,a0 + move *a0,a0,L + jrz #done + move a0,*a4+,L ;store REBOUND speech + + movi -1,a14 + move a14,*a4,W ;end script + movi sound_ram,a0,L + calla script_play1 + + move @ballpnum,a0 + move a0,@last_name ;last player name called + clr a0 + move a0,@last_name_time ;# ticks since name called +#done + PULL a1,a2,a4,a6,a7,a8 + rets + + + + +#rebnd_near_hoop_tbl + .long pulls_off_sp + .long with_bord_sp + .long tks_rebnd_sp + .long tks_rbnd2_sp + .long ynk_rim_sp + .long tks_rbnd3_sp + +#rebnd_nme_tbl + .long grab_rock_sp + .long has_rebnd_sp + .long grab_ball_sp + .long tks_rbnd2_sp + .long grab_ball_sp + .long tks_rbnd2_sp + + +#rebnd_no_nme_tbl + .long tks_rebnd_sp + .long quck_hnds_sp + .long with_bord_sp + .long grab_rock_sp + .long grbs_rbnd_sp + .long da_rebnd_sp + .long rip_rebnd_sp + + +#***************************************************************************** + + SUBR intercepted_speech + + movk 3,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #intcptab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#intcptab + .long intrceptd_sp + .long turnover_sp + .long clean_pck_sp + .long bad_pass_sp + +#***************************************************************************** + + SUBR stolen_speech + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #stealstab,a0 + move *a0,a0,L + calla snd_play1 + rets + +#stealstab + .long turnover_sp + .long stolen_sp + .long stripped_sp + .long the_steal_sp + .long trnd_over_sp + +#***************************************************************************** + + SUBR call_facial_speech + + movk 2,a0 + calla rndrng0 + sll 5,a0 + addi #facial_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#facial_sp_tbl + .long no_stopng_sp + .long facial_sp + .long no_stopng_sp + +#***************************************************************************** + + SUBR ball_loose_spch + + SLEEPK 20 + + move @ballpnum,a0 + jrnn #done + + movk 10,a0 + calla rndrng0 + sll 5,a0 + addi #ball_loose_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#ball_loose_sp_tbl + .long 0 + .long he_lst_bl_sp + .long cheer2_snd + .long he_lostit_sp + .long cheer_snd + .long bal_loose_sp + .long cheer1_snd + .long shuld_pas_sp + .long 0 + .long bal_loose_sp + .long 0 + + +#***************************************************************************** + + SUBR head_fake_speech + + movk 5,a0 + calla rndrng0 + sll 5,a0 + addi #head_fake_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done rets + + +#head_fake_sp_tbl + .long 0 + .long head_fake_sp + .long the_fake_sp + .long 0 + .long pump_fake_sp + .long 0 + +#***************************************************************************** +;calls "it's good" whenever a player scores from 3pt out with no time left +;CC = it's good called +;CS = it's good NOT called + + SUBRP itsgood + + move @game_time,a0,L + jrnz #done + SOUND1 its_good_sp + rets +#done + setc + rets + +#***************************************************************************** + SUBR seq_alleyoop_speech + + movi goes_up_sp,a0 + calla snd_play1 + rets + + +#***************************************************************************** + + SUBR seq_lay_up_start + + movi lay_it_up_sp,a0 + calla snd_play1 + rets + +#***************************************************************************** + + SUBR seq_high_dnk_spch + + movi 400,a0 ;20% of tim + calla RNDPER + jrls #noooh + + SOUND1 ooooooh_sp + jruc #saidoh +#noooh + movk 9,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_high_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + +; movi 200,a0 ;20% of tim +; calla RNDPER +; jrls #saidoh + + movk 4,a0 + calla rndrng0 + sll 5,a0 + addi #dunk_fx_tbl,a0 + move *a0,a0,L + calla snd_play1 +#saidoh + rets + + +#dunk_fx_tbl + .long jet1_snd + .long jet3_snd + .long jet4_snd + .long jet2_snd + .long tarzan + +#dnk_high_sp_tbl + .long thrgh_air_sp + .long hiabv_rim_sp + .long goes_hoop_sp + .long serious_h_sp + .long flies_air_sp + .long gldes_air_sp + .long goes_flyg_sp + .long serious_h_sp + .long way_upair_sp + .long lch_atbkt_sp + + +#***************************************************************************** + + SUBR seq_low_dnk_spch + + movk 7,a0 + calla rndrng0 + sll 5,a0 + addi #dnk_low_sp_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + + +#dnk_low_sp_tbl + .long goes_up_sp + .long goes_hoop_sp + .long tks2_hoop_sp + .long goes_hoop_sp + .long goes_up_sp + .long tks2_hoop_sp + .long raises_up_sp + .long catapults_sp + +#***************************************************************************** +* B4=*Next data in seq list + + SUBR seq_jam_speech + + move *b4+,b0 + move b0,a0 ;jam speech type + move a0,@jam_speech ;speech type to call when jammed + rets + +#***************************************************************************** +* a0 = % of swishes to call + + SUBRP swish_speech + + move @ballrimhitcnt,a1 + jrnz #noswish + + move @ballbbhitcnt,a1 + jrnz #snd_fail + + calla RNDPER + jrls #snd_fail + +#doit + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #swishtab,a0 + move *a0,a0,L + calla snd_play1 + rets +#snd_fail + setc + rets + +#noswish + cmpi 9,a1 + jrlt #snd_fail + callr lucky_bounce + rets + + +#swishtab + .long swish_sp + .long ngbut_net_sp + .long rgt_thrgh_sp + .long swish_sp + .long scores_sp + .long botm_net_sp +;DJT Start + .long swish2_sp +;DJT End + + +#***************************************************************************** +* A11=Team who gets ball (0=1, !0=2) + + SUBR call_scores + + PUSH a0,a1,a7,a14 + PUSH b0,b1 + + move @game_time,a0,L + jrz #no_call0 ;br=not playing... + + cmpi 010000h,a0 ;10 seconds + jrlt #no_call0 + CREATE0 call_scores_proc + +#no_call0 + PULL b0,b1 + PULL a0,a1,a7,a14 + rets + + + + SUBRP call_scores_proc + + SLEEP TSEC+10 + + move @game_time,a0,L + jrz #no_call + +; move @gmqrtr,a0 ;don't call if in last quarter and +; cmpi 3,a0 ;less than 30 seconds on clock +; jrlt #not_last_qtr +; +;#not_last_qtr + +;DJT Start + .if DEBUG +; jruc #anc_scr + .endif ;DEBUG + + movi 99,a0 + calla rndrng0 + cmpi 30,a0 ;45 + jrls #no_call ; br=nothing + cmpi 60,a0 + jrls #anc_scr ; br=annouce scores + cmpi 80,a0 + jrls #crwd_fx ; br=crowd/outdoor sounds + + move @pup_court,a14 ;No br=organ sounds if indoor + jrnz #die ; br=outdoor court +;DJT End + + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #organ_script_tbl,a0 + move *a0,a0,L + calla script_play1 +#die + DIE + + +********************************** +#anc_scr + +;DJT Start + move @scores,a4 + move @scores+10h,a0 + sub a0,a4 + + move @team1,a2 + move a11,a11 + jrnz #cnt + move @team2,a2 + neg a4 +#cnt + move a4,a0 + jrz #tied + abs a0 + cmpi 59,a0 + jrhi #no_call ;br=if score diff > 59, ignore + + movi #anc_scr_lose_tbl,a3 + neg a4 ;make positive + jrn #neg + move a4,a0 + subk 12,a0 + jrlt #pos + srl 5,a0 ;3.2% per pt down + addi 500,a0 ; plus base % + cmpi 900,a0 ;Max % + jrls #valp + movi 900,a0 ;Max % +#valp + calla RNDPER + jrls #pos + movi #anc_scr_lngw_tbl,a3 + jruc #pos +#neg + neg a4 ;make positive + movi #anc_scr_take_tbl,a3 + cmpi 3,a4 + jrlt #pos + movi #anc_scr_win_tbl,a3 +#pos +;DJT End + movk 5,a0 + calla rndrng0 + sll 6,a0 + add a0,a3 +;DJT Start +#doscscr +;DJT End + move a3,a0 + move a4,a1 + + movi sound_ram,a4,L + + move *a0+,a14,W + jrn #nofrst ;br=nothing goes here + jrz #saytm + movi tm_city_spch_tbl,a14 + jruc #saycty +#saytm + movi tm_name_spch_tbl,a14 +#saycty + movi TM_SPCH_TBL_SZ,a3 + mpys a2,a3 + add a14,a3 + move a3,*a4+,L ;store ptr. to sound call data + move *a3(16),a14,W ;get sound call length + move a14,*a4+,W ;store it +#nofrst + move *a0+,a3,L ;get sound call ptr + move a3,*a4+,L ;store sound ptr + move *a3(16),a3,W ;get sound call length + + move *a0,a14,W + jrn #nolst +;DJT Start + move a3,*a4+,W ;store it + jrz #saysc + movi longway_sp,a1,L + jruc #saysc1 +#saysc + sll 6,a1 ;x 32 bits + addi scr_nbr_tbl,a1 +#saysc1 +;DJT End + move a1,*a4+,L ;store sound ptr +#nolst + movi -1,a14 + move a14,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + +; movi 2,a0 +; move a0,@next_call + +#snd_fail +#no_call + DIE + + +; +; Table sytanx: +; +; first number: +; 0 - say team name +; 1 - say city name +; -1 - say nothing +; +; second thing: +; speech call ptr. +; +; last number: +; + - say "long way..." +; 0 - say point difference +; -1 - say nothing + +#anc_scr_win_tbl + WLW 1,leadng_by_sp,0 + WLW 0,leadng_by_sp,0 + WLW 1,leads_by_sp,0 + WLW 0,lead_by_sp,0 + WLW 0,by_sp,0 + WLW 0,have_lead_sp,-1 + +;DJT Start +#anc_scr_take_tbl + WLW 1,taks_lead_sp,-1 + WLW 0,take_lead_sp,-1 + WLW 1,taks_lead_sp,-1 + WLW 0,out_front_sp,-1 + WLW 1,out_front_sp,-1 + WLW 0,have_lead_sp,-1 + +;DJT End +#anc_scr_lose_tbl + WLW 1,downby_sp,0 + WLW 0,downby_sp,0 + WLW 1,behind_by_sp,0 + WLW 0,behind_by_sp,0 + WLW 1,catchg_up_sp,-1 + WLW 0,catchg_up_sp,-1 +;DJT Start + +#anc_scr_lngw_tbl + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + WLW 1,with_sp,1 + WLW 0,with_sp,1 + +#anc_scr_tied_tbl + WLW -1,tied_at_sp,0 + WLW -1,tiegm_sp,-1 + WLW 0,tiethegm_sp,-1 +;DJT End + + + +****************************************************************************** +#tied +;DJT Start + movi #anc_scr_tied_tbl,a3 + movi 99,a0 + calla rndrng0 + + cmpi 30,a0 ;% + jrhi #tied1 + + move @scores,a4 + cmpi 60,a4 + jrlo #doscscr ; br=OK, score not too high +#tied1 + addi 64,a3 + cmpi 65,a0 ;% + jrls #doscscr + addi 64,a3 + jruc #doscscr +;DJT End + + +********************************** +#crwd_fx + + move @pup_court,a14 + jrz #crwd0 ;br=indoor court + + movk 10,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + addi #outdr_snd_tbl,a0,L + move *a0,a0,L + calla snd_play1 + DIE + +#crwd0 + move @scores,a0 ;team 1 score + move @scores+10h,a1 ;team 2 score + + movi #crowd_chant_tbl,a8 + cmp a1,a0 ;team 1 > team 2 ? + jrhs #crwdsnd ;br=yep + movi #crowd_chant_tbl2,a8 +#crwdsnd + movk 3,a0 + calla rndrng0 ;>0-3 + sll 5,a0 + add a8,a0 + move *a0,a0,L + calla script_play1 + DIE + + +#organ_script_tbl + .long organ_fx1_sc + .long organ_fx2_sc + .long organ_fx1_sc + .long organ_fx2_sc + + +#crowd_chant_tbl + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_goteam_sc + .long crwd_blchrs_sc + + +#crowd_chant_tbl2 + .long crwd_blchrs_sc + .long crwd_goteam_sc + .long crwd_defnse_sc + .long crwd_blchrs_sc + + +#outdr_snd_tbl + .long ambulne2_snd + .long ambulne_snd + .long prop_ple_snd + .long siren_snd + .long car_pas2_snd + .long fire_trk_snd + .long car_pas2_snd + .long prop_ple_snd + .long siren_snd + .long chrch_bel_sp + .long car_pass_snd + + +#***************************************************************************** +* process + + SUBR name_call + +#restart + movi TSEC*2,a10 +#loop + SLEEPK 1 + + move @game_time,a0,L + jrz #restart + + move @inbound,a0 + jrnn #restart + + move @ballpnum,a0 + jrn #restart ;ball free + + move a0,a1 + sll 5,a1 ;*32 + addi plyrproc_t,a1 + move *a1,a1,L + move *a1(plyr_seqflgs),a1 + btst DUNK_B,a1 + jrnz #restart + + dsj a10,#loop + + move @last_name,a1 ;if name called in last 3 secs + cmp a0,a1 + jrne #diff_name + + move @last_name_time,a1 ;# ticks since name called + cmpi TSEC*2,a1 + jrlt #restart + +#diff_name + callr call_player_name + + movi TSEC*4,a10 + jruc #loop + + +#***************************************************************************** +;CC = onfire called +;CS = onfire NOT called + + SUBRP onfire_speech + + move @game_time,a0,L + jrz #snd_fail + + move @ballnumscored,a0 ;# times last plyr scored + cmpi 3,a0 + jrge #onfire + cmpi 2,a0 + jrne #snd_fail ;is cold + + movi heatup_sp,a0 + move @HCOUNT,a14 + btst 1,a14 + jrnz #heatup + movi lightn_up_sp,a0 + jruc #heatup + +#onfire + move @ballpnumscored,a1 ;Last plyr who scored (0-3) or neg + move @plyr_onfire,a0 ;plyr who is on fire +;; cmp a0,a1 +;; jrne #was_teammate + btst a1,a0 + jrz #was_teammate ;br=not on fire + + move @shot_type,a0 + jrnz #not_desp + + movi 400,a0 ;call desp speech 40% time + calla RNDPER + jrhi hotscored + +#not_desp + movk 6,a0 + calla rndrng0 + sll 5,a0 ;x 32 bits + addi #onfiretab,a0 + move *a0,a0,L +#heatup + calla snd_play1 + rets + +#was_teammate +#snd_fail + setc + rets + +#onfiretab + .long hot_hand_sp + .long he_uncon_sp + .long hot_hand_sp + .long smokin_sp + .long ever_miss_sp + .long smokin_sp + .long he_uncon_sp + +#***************************************************************************** +* call wide open if applicable + + .asg 140,RANGE + + SUBRP wideopen_speech + + movi 450,a0 ;call wide-open 35% time + calla RNDPER + jrls #not_open + + move @plyr_shot,a0 ;player who shot last (0-3) + sll 5,a0 ;*32 + addi plyrproc_t,a0 + move *a0,a0,L + move *a0(plyr_o1dist),a1 ;opponent 1 dist + cmpi RANGE,a1 + jrlt #not_open + move *a0(plyr_o2dist),a1 ;opponent 2 dist + cmpi RANGE,a1 + jrlt #not_open + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #wide_opn_tbl,a0 + move *a0,a0,L + calla snd_play1 + rets + +#not_open + setc + rets + + +#wide_opn_tbl + .long opn_for_3_sp + .long wideopen_sp + .long all_alone_sp + .long no_prsure_sp + + +#***************************************************************************** + + .asg 2,BRICK_MAX + + SUBR nogood_speech + + PUSH a10 + + move @ballpnumshot,a10 + sll 4,a10 ;x 16 + addi brick_count,a10 + move *a10,a1 ;brick_count + cmpi BRICK_MAX,a1 + jrlt #no_good + + move @ballrimhitcnt,a0 + cmpi 3,a0 + jrlo #ngs1 + movi rtle_arnd_sp,a0,L + move @HCOUNT,a14 + btst 1,a14 + jrnz #ngs0 + movi spins_out_sp,a0,L +#ngs0 calla snd_play1 + jruc #done +#ngs1 +; cmpi 1,a0 +; jrls #ngs2 +; +; movk 8,a0 +; calla rndrng0 +; sll 5,a0 +; addi #rim_bnce_sp_tbl,a0 +; move *a0,a0,L +; jrz #ngs2 ;br=no rim spch, try miss spch +; calla snd_play1 +; jruc #done +;#ngs2 +;DJT Start + movk 6,a0 +;DJT End + calla rndrng0 + sll 5,a0 + addi #brick_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 + + clr a0 + move a0,*a10 ;played, now clear it + jruc #done + +#no_good + move @game_time,a0,L ;always call if clock at zero + jrnz #ng2 + SOUND1 nogood_sp + jruc #done + +#ng2 movk 17,a0 + calla rndrng0 + sll 5,a0 + addi #nogood_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done + PULL a10 + rets + + + +#nogood_sp_tbl + .long nogood_sp + .long mis_fires_sp + .long missed_sp + .long dwn_luck_sp + .long 0 + .long hita_barn_sp + .long off_rim_sp + .long off_trgt_sp + .long side_rim_sp + .long missed_sp + .long bnce_out_sp + .long holes_out_sp + .long bnce_away_sp + .long nogood_sp + .long away_side_sp + .long holes_out_sp + .long 0 + .long off_frnt_sp + + +#brick_sp_tbl + .long nogood_sp + .long cantbuy_sp + .long there_brk_sp + .long mis_fires_sp + .long missed_sp + .long side_rim_sp +;DJT Start + .long what_was_sp +;DJT End + +;#rim_bnce_sp_tbl +; .long side_rim_sp +; .long bnce_out_sp +; .long holes_out_sp +; .long bnce_away_sp +; .long 0 +; .long away_side_sp +; .long holes_out_sp +; .long 0 +; .long off_frnt_sp + +#***************************************************************************** + + SUBR victory_speech + + move @team1,a0 + move @scores,a1 + move @scores+10h,a2 + cmp a1,a2 + jrlt #t1_wins + move @team2,a0 +#t1_wins + movi TM_SPCH_TBL_SZ,a1 + mpys a0,a1 + addi full_tm_name_spch_tbl,a1 +; addi tm_name_spch_tbl,a1 + + movi sound_ram,a4,L + move a1,*a4+,L ;store sound table ptr + move *a1(16),*a4+,W ;store sound length + + movi wingame_sp,a0,L + move a0,*a4+,L + + movi -1,a0 + move a0,*a4,W ;end script + + movi sound_ram,a0,L + calla script_play1 + rets + + +#***************************************************************************** + + SUBR tip_off_speech + + movi 450,a0 + calla RNDPER + jrls #done + SOUND1 gm_undrwy_sp +#done + DIE + + +#***************************************************************************** + + SUBR shot_clock_speech + +;DJT Start +; SOUND1 error_found +;DJT End + + movk 3,a0 + calla rndrng0 + sll 5,a0 + addi #sht_clck_sp_tbl,a0 + move *a0,a0,L + jrz #done + calla snd_play1 +#done DIE + + +#sht_clck_sp_tbl + .long baddec_sp + .long 0 + .long wht_thnk2_sp + .long 0 + +#****************************************************************************** +* After teams have been selected, call this routine +* Stuff name_ram for calling player name based on who's been picked + + + SUBR setup_speech + +; +; Player 1 on team 1 +; + move @player1_data+PR_COUNT,a14 + jrn #plr1 ;br=player didn't enter inits + move @player1_data+PR_CREATED_PLYR,a14 + jrle #plr1 ;br=plyr not created! + move @player1_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr1 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag1 + +#plr1 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads,a14 + jrn #tag1 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag1 + move a1,@spch_name_ram,L + move a2,@spch_name_ram+32,L + move a0,@spch_pass_ram+32,L +#* +; +; Player 2 on team 1 +; + move @player2_data+PR_COUNT,a14 + jrn #plr2 ;br=player didn't enter inits + move @player2_data+PR_CREATED_PLYR,a14 + jrle #plr2 ;br=plyr not created! + move @player2_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr2 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag2 + +#plr2 movi player_names,a10 + move @team1,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team1,a0 + sll 4,a0 + addi tm1set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;2nd player on team 1 + + callr get_plr_spch_ptrs + + move @special_heads+10h,a14 + jrn #tag2 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag2 + move a1,@spch_name_ram+64,L + move a2,@spch_name_ram+96,L + move a0,@spch_pass_ram,L + +#* +; +; Player 1 on team 2 +; + + move @player3_data+PR_COUNT,a14 + jrn #plr3 ;br=player didn't enter inits + move @player3_data+PR_CREATED_PLYR,a14 + jrle #plr3 ;br=plyr not created! + move @player3_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr3 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag3 + +#plr3 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + + callr get_plr_spch_ptrs + + move @special_heads+20h,a14 + jrn #tag3 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag3 + move a1,@spch_name_ram+128,L + move a2,@spch_name_ram+160,L + move a0,@spch_pass_ram+96,L + +#* +; +; Player 2 on team 2 +; + move @player4_data+PR_COUNT,a14 + jrn #plr4 ;br=player didn't enter inits + move @player4_data+PR_CREATED_PLYR,a14 + jrle #plr4 ;br=plyr not created! + move @player4_data+PR_NICKNAME_NBR,a14 + cmpi NUM_NICK_NAMES-1,a14 ;> than max count ? + jrgt #plr4 + sll 6,a14 + addi nickname_spch_tbl,a14 + move *a14+,a1,L ;get 'name' sound call ptr. + move a1,a2 ;no full name + move *a14,a0,L ;get 'to-name' sound call ptr. + jruc #tag4 + +#plr4 movi player_names,a10 + move @team2,a2 +;DJT Start + jrz #out3 +#lp3 + addi NEXT_TEAM_NAMES,a10 ;compute offset into table + dec a2 + jrnz #lp3 +;DJT End +#out3 + move @team2,a0 + sll 4,a0 + addi tm2set,a0 + move *a0,a14 + sll 6,a14 + add a14,a10 + addk 32,a10 ;player 2 on team 2 + + callr get_plr_spch_ptrs + + move @special_heads+30h,a14 + jrn #tag4 + movi NME_SPCH_TBL_SZ,a1 + mpys a14,a1 + move a1,a0 + addi special_name_speech,a1 + addi special_pass_speech,a0 + move a1,a2 +#tag4 + move a1,@spch_name_ram+192,L + move a2,@spch_name_ram+224,L + move a0,@spch_pass_ram+64,L + rets + + +;----------------------------------------------------------------------------- +;----------------------------------------------------------------------------- + SUBRP get_plr_spch_ptrs + + move *a10,a0,L + movi name_sort,a14 + movi -1,a10 +#lp4 + inc a10 + move *a14+,a1,L + cmp a1,a0 + jrnz #lp4 + + movi NME_SPCH_TBL_SZ,a1 + mpys a10,a1 + move a1,a0 + move a1,a2 + + addi name_speech,a1 + addi pass_speech,a0 + addi full_name_speech,a2 + rets + +;----------------------------------------------------------------------------- + .end diff --git a/SRC/STATE.TV b/SRC/STATE.TV new file mode 100644 index 0000000..d50c0be --- /dev/null +++ b/SRC/STATE.TV @@ -0,0 +1,69 @@ +MEM + @sp + sp + a10 + a0 + a4 +MEMV + 1 +STRCT + PALRAM PAL * + *OBJLST OBJ OLINK + *BAKLST OBJ OLINK + *ACTIVE PROC PLINK +STRCTV + >FFAC36A0 +REG + >FFFFFFFF + >00000000 +VREG + tm2_random_team_nbr + tm1_random_team_nbr + tm2_random_cycle_cnt + tm1_random_cycle_cnt + team2_control + team1_control + team2 + team1 + switch_map_mode + plyr_tourn + adj_cksum +SRCH + WARMSET + SORT_OFF + METHOD6 + METHOD4 + PRINT_PLAYING_RANK + DEC_2_A + DEC_TO_ASC +PTCH + jruc $ + nop +FILE + util + test + select + screen + plyrat + plyr + ndsp1 + menu + makeplr + hstd + bb2 + bb + record + string +GOLI + 9999 +VIEW + .tbl + .map + .hlp + .equ + .asm +COLSRCH + >0000 +SRCWRD + S + W diff --git a/SRC/STRING.ASM b/SRC/STRING.ASM new file mode 100644 index 0000000..dec1322 --- /dev/null +++ b/SRC/STRING.ASM @@ -0,0 +1,2097 @@ +**************************************************************** +* +* Owner: JOHNSON +* +* Software: Jamie Rivett +* Initiated: +* +* Modified: +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 8/10/95 4:29 +**************************************************************** + .file "string.asm" + .title "string printing stuff" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "bgndtbl.glo" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" + .include "hangfont.tbl" + .include "imgpal7.asm" + .include "imgtbl7.glo" + .include "bastcyc.tbl" + + +;sounds + + .def CHI_RODBP + .def CHI_RODOP + .def CHI_RODPP + .def CHI_RODRP + .def CHI_RODWP + .def CHI_RODYP + .def CHI_RODGP + .def CHI_RODKP + + +;symbols defined externally + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + .global player1_data,player2_data,player3_data,player4_data + + + .ref P1DATA,P2DATA,P3DATA,P4DATA + .ref sorted_teams,teams_pop + .ref team1,team2 + + .ref BINBCD + .ref CRED_P + .ref PCNT + .ref pal_find + .ref switches_old + .ref switches_cur + .ref switches_down + .ref adv_stats + .ref stx_avgallow,stx_avgscore + .ref compute_plyr_off_rank,compute_plyr_def_rank + .ref SENDTO,ENTRIES + +;symbols defined in this file + +;DJT Start + .def HOTC_B_P,HOTC_G_P,HOTC_B_P,HOTC_G_P + +;DJT End + .def prizeg_p,prize1_p,prize2_p,prize3_p + .def print_string2b,kern_chars,mess_justify,mess_cursx2 + .def print_teams_defeated + .def clear_buffers +;DJT Line moved down to table def + +; .global print_ranking + .global message_palette + .global mess_space_width + .global print_string,print_string2,print_string_C,print_string_C2 + .global print_string_R,print_string_R2 + .global message_ascii + .global mess_spacing + .global mess_objid + .global mess_cursx + .global mess_cursy + .global brush10_ascii,brush12_ascii + .global brush20_ascii,bast18_ascii,inga16_ascii + .global brush50_ascii + .global bast7t_ascii,bast7tcyc_ascii + .global hangfnt38_ascii + .global bast8_ascii,bast10_ascii + .global bast8t_ascii,bast8tcyc_ascii +; .global osgemd_ascii +; .global omlgmd_ascii + .global message_buffer +; .global get_initials_string + .global dec_to_asc,dec_to_pct + .global copy_string,copy_rom_string + .global concat_string,concat_rom_string + .global print_message,setup_message + .global mess_line_spacing + .global get_name_string + + +MBUFF_SIZE equ 40 + +;ram + .bss message_ascii, 32 ;* ascii lookup table + .bss message_palette,32 ;* palette + .bss message_buffer, 16*MBUFF_SIZE ;null terminated string + .bss message_buffer2, 16*MBUFF_SIZE + .bss mess_cursx, 16 ;message cursor pos X original + .bss mess_cursx2, 16 ;message cursor pos X temp + .bss mess_cursy, 16 ;message cursor pos Y + .bss mess_space_width, 16 ;width in pixels of space char + .bss mess_spacing,16 ;spacing between chars + .bss mess_line_spacing,16 ;spacing between lines + .bss mess_objid,16 ;OBJECT ID for string + .bss mess_justify,32 ;justification method + .bss ptr_player_data,32 ;start address of player data + .text + + +#***************************************************************************** + + SUBRP clear_buffers + + callr clear_buffer + callr clear_buffer2 + rets + +clear_buffer + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer,a1 +#clear_loop1 + move a0,*a1+ + dsj a2,#clear_loop1 + rets + +clear_buffer2 + movi MBUFF_SIZE,a2 + clr a0 + movi message_buffer2,a1 +#clear_loop2 + move a0,*a1+ + dsj a2,#clear_loop2 + rets + + +#***************************************************************************** +* INPUT: a3 = * string dest +* a4 = * name string +*----------------------------------------------------------------------------- + SUBRP get_name_string + +;clear out space for 6 characters (bytes) and a null terminator + clr a0 + move a0,*a3,L ;null terminate + move a0,*a3(32),L ;null terminate + +;DJT Start + movi 6*8,a5 +#lp + move *a4+,a0 ;get LETTER nbr. from record + jrz #no_more + sll 4,a0 ;*16 + addi init_convert_table,a0,L + movb *a0,*a3 ;get ascii LETTER from table + addk 8,a3 + subk 8,a5 + jrnz #lp + +#no_more + subi 48,a3 + add a5,a3 + rets +;DJT End + + +#***************************************************************************** +*----------------------------------------------------------------------------- + + + .ref get_but_val_cur + .ref get_but_val_down + .ref check_world_records + .ref get_opponent_team + .ref find_record,get_plr_rank + .ref GAMSTATE,create_heading + + .asg 28,LINE1_Y + .asg 88,LINE6_Y + + .asg 10,ONE_LINE_SPC + .asg 20,TWO_LINE_SPC + + + + SUBR print_player_stats + +;PAGE 1 of STATS + callr setup_page + + move *a13(PC_DATADDR),a2,L ;start of player data +; move *a2(PR_CREATED_PLYR),a0 +; jrp #has_record + + move *a2(PR_WON),a0 + move *a2(PR_LOST),a1 + add a0,a1 + jrnz #has_record + + movi LINE6_Y,a0 + move a0,@mess_cursy ;message cursor pos Y + movi str_norecord,a4 ;"NO RECORD" + callr print_string_C2 ;already centered + + SLEEPK 15 ;minimum time to hold for + + movi 3*TSEC,a10 +#pps1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pps2 + dsj a10,#pps1 +#pps2 move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + RETP + +#has_record + movk 5,a0 + move a0,@mess_space_width + +;------------------------ +;print players overall rank +; + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp + movi LINE6_Y,a0 +#ntcp move a0,@mess_cursy ;message cursor pos X + +;overall rank + movi str_ovr_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_RANK),a0 ;rank + movi 999,a1 ;max value + callr dec_to_asc + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + callr print_string_C3 ;centered + +;------------------------ +;print players w/l record +; + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_line0b,a4 ;"RECORD:" + callr print_string_C2 ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WON),a0 ;games won + movi 999,a1 ;max value + callr dec_to_asc + callr copy_string + movi str_w,a4 + callr concat_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a0 ;games lost + movi 999,a1 ;max value + callr dec_to_asc + callr concat_string +;; movi str_l,a4 +;; callr concat_rom_string + callr print_string_C ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + jrz #no_losses +; % < 1000 + movi str_line0d,a4 ;"PCT: ." + callr copy_rom_string + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_LOST),a2 ;games lost + move *a0(PR_WON),a1 ;games won + add a1,a2 ;total games + movi 1000,a0 + mpys a0,a1 ;games won * 1000 + divs a2,a1 ;/ total games + move a1,a0 + callr dec_to_pct + callr concat_string + callr print_string_C ;centered + jruc #skip_loss + +#no_losses + movi str_line0d1,a4 ;"PCT: 1.000" + callr print_string_C2 ;centered + +#skip_loss + +;------------------------ +;defensive rank + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_def_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a13(PC_DATADDR),a6,L ;start of player data + calla find_record ;ret a11 - rec. number + move a11,a4 + calla get_plr_rank + move *a9,a8,L + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #defr ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #offr +#defr + move *a8(RS_DEF_RANK),a0 + calla compute_plyr_def_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered + +;------------------------ +;offensive rank +#offr + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_off_rnk,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +; move a11,a4 +; calla get_plr_rank +; move *a9,a8,L + + move @mess_cursy,a1 + addi TWO_LINE_SPC,a1 + move a1,@mess_cursy + + move *a8(RS_GAMES_PLAYED),a1 + subk 5,a1 + jrge #offr1 ;br=at least 5 games played + movi str_na,a4 + callr print_string_C2 + jruc #pg01 +#offr1 + move *a8(RS_OFF_RANK),a0 + calla compute_plyr_off_rank + movi NUM_PRECORDS,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +#pg01 + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrnz #pg1a + dsj a10,#pg1 +#pg1a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + +;PAGE 2 of STATS +;------------------------ +;print players win streak + + calla create_heading + callr setup_page + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp2 + movi LINE6_Y,a0 +#ntcp2 move a0,@mess_cursy ;message cursor pos X + + movi str_streak,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_WINSTREAK),a0 ;no. consecutive wins + jrnz #not0 + movi str_none,a4 + callr print_string_C2 + jruc #contws +#not0 + PUSH a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + PULL a0 + movi str_wins,a4 + dec a0 + jrnz #iswins + movi str_win,a4 +#iswins + callr concat_rom_string + callr print_string_C +#contws + +;------------------------------ +;print players avg. pts. scored + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_pts_scrd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_SCORED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptss ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + calla concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptss1 + +#ptss movi str_00,a4 + callr print_string_C2 +#ptss1 + +;------------------------------- +;print players avg. pts. allowed + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_pts_allowd,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a14,L ;start of player data + move *a14(PR_PTS_ALLOWED),a0 + movi 100,a1 ;2 decimal place purcision + mpyu a0,a1 ;wins*1000 + move *a14(PR_COUNT),a0 ;games played + divu a0,a1 ;wins*1000/played + move a1,a7 + jrz #ptsa ;br="00.00" + clr a6 + movi 100,a1 ;max value + divu a1,a6 + move a6,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_dot,a4 + callr concat_rom_string + + move a7,a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + jruc #ptsa1 + +#ptsa movi str_00,a4 + callr print_string_C2 +#ptsa1 + +;--------------------------------------- +;print players created player attrib. pts + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + movi str_plr_att_pts,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a14 + jrp #not0a + movi str_none,a4 + callr print_string_C2 + jruc #contcp +#not0a + clr a1 + move *a0(PR_HEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_WEIGHT_PTS),a14 + add a14,a1 + move *a0(PR_SPEED_PTS),a14 + add a14,a1 + move *a0(PR_POWER_PTS),a14 + add a14,a1 + move *a0(PR_SHOOT_PTS),a14 + add a14,a1 + move *a0(PR_DUNKS_PTS),a14 + add a14,a1 + move *a0(PR_STEAL_PTS),a14 + add a14,a1 + move *a0(PR_BLOCKS_PTS),a14 + add a14,a1 + move *a0(PR_TOTAL_PTS),a0 + sub a1,a0 ;get points remaining + movi 99,a1 ;max value + callr dec_to_asc + callr copy_string + + movi str_slash,a4 + calla concat_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TOTAL_PTS),a0 + movi 99,a1 ;max value + callr dec_to_asc + callr concat_string + callr print_string_C + +;; callr print_string_C3 ;centered +#contcp + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg2 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg2a + dsj a10,#pg2 +#pg2a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + +;PAGE 3 of STATS + + calla create_heading + callr setup_page +;----------------------------- +;print players trivia points + + movi LINE1_Y,a0 + move @GAMSTATE,a14 + cmpi INPLYRDESIGN,a14 + jrne #ntcp3 + movi LINE6_Y,a0 +#ntcp3 move a0,@mess_cursy ;message cursor pos X + +;DJT Start + .if TRIVCON +;DJT End +; movi str_tourn_wins,a4 + movi str_trivia_pts,a4 + callr print_string_C2 + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TRIVIA_PTS),a0 ;no. consecutive wins + jrnz #trva + movi str_none,a4 + callr print_string_C2 + jruc #wrld1 +#trva movi 200,a1 ;max value + callr dec_to_asc + callr print_string_C3 ;centered +;DJT Start + .endif ;TRIVCON +;DJT End + +;---------------------------- +; print players world records + +#wrld1 + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + +;DJT Start + .if TRIVCON +;DJT End + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy +;DJT Start + .endif ;TRIVCON +;DJT End + + movi str_wrld_recs,a4 + callr print_string_C2 + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + move *a13(PC_DATADDR),a2,L ;start of player data + calla check_world_records + + sll 5,a14 + addi num_str_tbl,a14 + move *a14,a4,L + +; move a14,a14 +; jrnz #wrld2 ;br=plyr has a WORLD RECORD +; +; +; movi str_none,a4 +; callr print_string_C2 +; jruc #nxtcpu +; +;#wrld2 +; movi str_one,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_two,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_three,a4 +; srl 1,a14 +; jrc #wrld3 +; movi str_four,a4 +#wrld3 callr print_string_C2 + +;-------------------------------- +; print players next CPU opponent +; +#nxtcpu +;DJT Start + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) + andi ALL_TMS_DEFEATD,a1 + cmpi ALL_TMS_DEFEATD,a1,L ;Beat them all? + jreq #nonxt ; br=yes + +;DJT End + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi str_next_cpu,a4 + callr print_string_C2 + + movi BAST_W_P,a0 + move a0,@message_palette,L + move @mess_cursy,a0 + addi TWO_LINE_SPC,a0 + move a0,@mess_cursy + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_DATADDR),a1,L ;start of player data + move *a1(PR_TEAMSDEF),a1,L ;number teams defeated (in BITS!!) +; andi 07ffffffh,a1 + andi ALL_TMS_DEFEATD,a1 + calla get_opponent_team + move a2,a0 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + +;---------------------------------- +; print players team defeated count +; +;DJT Start +#nonxt +;DJT End + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move @mess_cursy,a0 + addi TWO_LINE_SPC-2,a0 + move a0,@mess_cursy + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + movi str_line11,a4 "DEFEATED NN" + callr copy_rom_string + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi NUM_TEAMS,a0 + jrlo #not_all + + movi str_all,a4 " ALL" + callr concat_rom_string + jruc #skipit +#not_all + movi NUM_TEAMS,a1 ;max value + callr dec_to_asc + callr concat_string +#skipit + callr print_string_C ;centered + + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + + move @mess_cursy,a0 + addi ONE_LINE_SPC,a0 + move a0,@mess_cursy + movi str_line12,a4 + callr print_string_C2 ;centered + + move @mess_cursy,a0 + addi ONE_LINE_SPC+1,a0 + move a0,@mess_cursy + movi str_line13,a4 + callr print_string_C2 ;centered + + SLEEPK 15 ;minimum time to hold for + + movi 8*TSEC,a10 +#pg3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_cur + jrnz #pg3a + dsj a10,#pg3 +#pg3a move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + calla obj_del1c ;delete all objs with this ID + + SOUND1 adv_stats + + RETP + +;DJT Start + .def SENDTO_P +SENDTO_P: + .word 4 + .word 00H,00H,07FFFH,07FE0H + .even + + + .if TRIVCON +;DJT End + .ref print_plr_password +;----------------------------------------------------------------------------- +; This routine shows the trivia entry info +; +; +; INPUT: reg. a13 - process stack +;----------------------------------------------------------------------------- + SUBR show_trivia_stuff + + move *a13(PC_PLAYNUM),a10 + move *a13(PC_DATADDR),a9,L ;start of player data + move *a13(PC_OBJID),a1 + ori 10h,a1 + calla print_plr_password + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_0 + move *a13(PC_CENTERXkit),a0 +sts_0 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi SENDTO,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC +; ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 4*TSEC,a10 +sts_1 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_1 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC +; ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz sts_2 + move *a13(PC_CENTERXkit),a0 +sts_2 + sll 16,a0 + movk 24,a1 + sll 16,a1 + movi ENTRIES,a2,L + movi 500,a3 ;z pos + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move *a13(PC_OBJID),a5 ;OBJ ID's created by this PROC + ori 10h,a5 + clr a6 + clr a7 + movi SENDTO_P,b0,L ;* palette + calla BEGINOBJP2 + + SLEEPK 15 + + movi 6*TSEC,a10 +sts_3 SLEEPK 1 + move *a13(PC_PLAYNUM),a0 + calla get_but_val_down + jrz sts_3 ;br=no button pressed yet. + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + ori 10h,a0 + calla obj_del1c ;delete all objs with this ID + RETP + +;DJT SENDTO_P moved above TRIVCON conditional @ show_trivia_stuff + +;----------------------------------------------------------------------------- +; This routine prints the TRIVIA CONTEST status when asking YES/NO +; +; INPUT: reg a10 - player number +; reg a13 - player cursor process +;----------------------------------------------------------------------------- + SUBR print_trivia_info + + move a10,a0 + sll 4,a0 + addi msg_id_tbl,a0 + move *a0,a0 + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz pti_0 + move *a13(PC_CENTERXkit),a0 +pti_0 move a0,@mess_cursx ;message cursor pos X + movi LINE1_Y-2,a0 + move a0,@mess_cursy ;message cursor pos y + movk 5,a0 + move a0,@mess_space_width + movi BAST_W_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 11,a0 + move a0,@mess_line_spacing + movi trivia_qualify_str,a4,L + calla print_string_C2 + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movi LINE6_Y+8,a0 + move a0,@mess_cursy ;message cursor pos y + movi trivia_show_info_str,a4,L + calla print_string_C2 + rets + + +msg_id_tbl + .word P1_BTUNS + .word P2_BTUNS + .word P3_BTUNS + .word P4_BTUNS + + +trivia_qualify_str + .string "YOU HAVE",1 + .string "QUALIFIED",1 + .string "TO ENTER",1 + .string "THE TRIVIA",1 + .string "CONTEST",1 + .string "DRAWING",1 + .even + +trivia_show_info_str + .string "SHOW INFO ?",0 + .even +;DJT Start + .endif ;TRIVCON +;DJT End + + +#***************************************************************************** +****************************************************************************** + SUBRP setup_page + + movi BAST_Y_P,a1 ;highlight cycle colour + move a1,@message_palette,L + movk 5,a0 + move a0,@mess_space_width + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + move *a13(PC_CENTERX),a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no2 + move *a13(PC_CENTERXkit),a0 +#no2 move a0,@mess_cursx ;message cursor pos X + rets + +#***************************************************************************** +*----------------------------------------------------------------------------- + SUBRP print_teams_defeated + + .asg 10,HEADY + .asg 36,TEAMY + + move *a13(PC_DATADDR),a6,L ;start of player data + + move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC + move a0,@mess_objid + + movi bast8t_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + + movk 3,a0 + move a0,@mess_space_width ;space char width + movi BAST_Y_P,a0 + move a0,@message_palette,L + + move *a13(PC_CENTERX),a0 + inc a0 + move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players + jrz #no_2p + move *a13(PC_CENTERXkit),a0 +#no_2p + move a0,@mess_cursx ;message cursor pos X + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_NUMDEF),a0 ;number teams defeated + cmpi 15,a0 ;defeated more than 15 teams? + jrhs #disp_undef + +;disp defeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhav,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team + srl 1,a1 + jrnc #not_def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#not_def + dsj a2,#next_team + + rets + +#disp_undef ;undefeated teams + + movi HEADY,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_uhavnt,a4 + callr print_string_C2 + movi HEADY+9,a0 + move a0,@mess_cursy ;message cursor pos Y + movi #str_def,a4 + callr print_string_C2 + + movi bast8_ascii,a0 + move a0,@message_ascii,L ;* ascii lookup table + movi BAST_W_P,a0 + move a0,@message_palette,L + + movi TEAMY-3,a0 + move a0,@mess_cursy ;message cursor pos Y + + move *a13(PC_DATADDR),a0,L ;start of player data + move *a0(PR_TEAMSDEF),a1,L + + movi NUM_TEAMS,a2 +#next_team2 + srl 1,a1 + jrc #def + PUSH a1,a2 + movi NUM_TEAMS,a0 + sub a2,a0 ;0-26 + addi 90h,a0 ;asc table cities start offset + movb a0,@message_buffer+00h + clr a0 + movb a0,@message_buffer+08h + callr print_string_C + move @mess_cursy,a0 + addk 10,a0 + move a0,@mess_cursy ;message cursor pos Y + PULL a1,a2 +#def + dsj a2,#next_team2 + rets + + +#str_uhav .string 92h,0 ;"YOU HAVE",0 +#str_uhavnt .string 87h,0 ;"YOU HAVE NOT",0 +#str_def .string 85h,0 ;"DEFEATED",0 + .even + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* - removes leading spaces +* +*----------------------------------------------------------------------------- + SUBRP dec_to_asc + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + clr a3 ;leading zero flag + + andi 0f000h,a0 + srl 3*4,a0 + jrnz #no_zero0 + move a3,a3 ;leading zero + jrz #skip_zero0 +#no_zero0 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero0 + + move a1,a0 + andi 0f00h,a0 + srl 2*4,a0 + jrnz #no_zero1 + move a3,a3 ;leading zero + jrz #skip_zero1 +#no_zero1 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero1 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + jrnz #no_zero2 + move a3,a3 ;leading zero + jrz #skip_zero2 +#no_zero2 + inc a3 + addi '0',a0 + movb a0,*a2 + addk 8,a2 +#skip_zero2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +;DJT Start +#***************************************************************************** +* +* INPUT: a0 = number to convert (two-digit BCD max) +* a1 = max value +* converts value in A0 to an decimal ASCII string in message_buffer2 +* +*----------------------------------------------------------------------------- + SUBR dec_to_asc2 + + cmp a0,a1 ;a1-a0 + jrhi #not_max + move a1,a0 ;set num to max +#not_max + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + andi 0fh,a1 + addi '0',a1 + movb a1,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets +;DJT End + + +#***************************************************************************** +* +* INPUT: a0 = number to convert +* converts value in A0 to an decimal ASCII % string in message_buffer2 +* range 000-999 +* +*----------------------------------------------------------------------------- + + SUBRP dec_to_pct + + calla BINBCD ;dec number in A0 + move a0,a1 + movi message_buffer2,a2 + + andi 0f00h,a0 + srl 2*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0f0h,a0 + srl 1*4,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + + move a1,a0 + andi 0fh,a0 + addi '0',a0 + movb a0,*a2 + addk 8,a2 + clr a0 + movb a0,*a2 ;null terminate string + + rets + + +#***************************************************************************** +* +* copies string in message_buffer2 to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 + +#next_char + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char + rets + +#***************************************************************************** +* concatenates string in message_buffer2 to string in message_buffer +*----------------------------------------------------------------------------- + SUBRP concat_string + + movi message_buffer-8,a2 + movi message_buffer2-8,a3 +#next_char + addk 8,a2 + movb *a2,a0 + jrnz #next_char + subk 8,a2 + +#next_char2 + addk 8,a2 + addk 8,a3 + movb *a3,*a2 + movb *a3,a0 ;NULL? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * null terminated rom string +* +* copies string in rom to message_buffer +* +*----------------------------------------------------------------------------- + + SUBRP copy_rom_string + + movi message_buffer-8,a1 + + subk 8,a4 + +#next_char + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer +*----------------------------------------------------------------------------- + + SUBRP concat_rom_string + + movi message_buffer-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* INPUT: a4 = * null terminated rom string +* +* concatenates string in rom to string in message_buffer2 +*----------------------------------------------------------------------------- + SUBRP concat_rom_string2 + + movi message_buffer2-8,a1 +#next_char + addk 8,a1 + movb *a1,a0 + jrnz #next_char + + subk 8,a1 + subk 8,a4 + +#next_char2 + addk 8,a1 + addk 8,a4 + movb *a4,*a1 + movb *a4,a0 ;NULL ? + jrnz #next_char2 + + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +* RETURN: a2 = width of string in pixels +* +*----------------------------------------------------------------------------- + + SUBRP get_string_len + + movi message_buffer,a4 +get_string_len2 + clr a2 + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jreq #done + cmpi 32,a0 + jrne #no_space + move @mess_space_width,a0 + add a0,a2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a1,L ;* image + jrz #next_char + move *a1,a0 ;image width + add a0,a2 + move @mess_spacing,a0 + add a0,a2 + jruc #next_char + +#done + move @mess_spacing,a0 + sub a0,a2 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* centers & prints a text string +* +*----------------------------------------------------------------------------- + SUBR print_string_C3 + + movi message_buffer2,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + + + SUBRP print_string_C + + movi message_buffer,a4 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +print_string_C2 + movi #center_justify,a0 + move a0,@mess_justify,L ;justification method + callr #center_justify + callr print_string2b + rets + +#center_justify + PUSH a2,a4 + callr get_string_len2 + srl 1,a2 ;/2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string_C2) +* right justifies & prints a text string +* +*----------------------------------------------------------------------------- + + SUBRP print_string_R + + movi message_buffer,a4 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +print_string_R2 + movi #right_justify,a0 + move a0,@mess_justify,L ;justification method + callr #right_justify + callr print_string2b + rets + +#right_justify + PUSH a2,a4 + callr get_string_len2 + move @mess_cursx,a0 + sub a2,a0 ;- string_width/2 + move a0,@mess_cursx2 ;message cursor pos X + PULL a2,a4 + rets + +#***************************************************************************** +* +* INPUT: a4 = * NULL terminated ASCII string (print_string2) +* +*----------------------------------------------------------------------------- + +#left_justify + move @mess_cursx,a0 + move a0,@mess_cursx2 + rets + + SUBRP print_string + + movi message_buffer,a4 + +print_string2 + movi #left_justify,a0 + move a0,@mess_justify,L ;justification method + move @mess_cursx,a0 + move a0,@mess_cursx2 +print_string2b + + subk 8,a4 +#next_char + addk 8,a4 + movb *a4,a0 + andi 0ffh,a0 + jrz #done + cmpi 1,a0 + jrne #no_newline +;newline + move @mess_line_spacing,a0 + move @mess_cursy,a1 + add a0,a1 + move a1,@mess_cursy + + move @mess_justify,a0,L ;justification method + addi 8,a4 ;skip newline char + call a0 + subi 8,a4 + jruc #next_char +#no_newline + cmpi 32,a0 + jrne #no_space +;space + move @mess_space_width,a0 + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + jruc #next_char +#no_space + sll 5,a0 ;x 32 bits + move @message_ascii,a1,L + add a1,a0 + move *a0,a2,L ;* image + jrz #next_char + + PUSH a4,a8 + move @message_palette,b0,L ;* palette + move @mess_cursx2,a0 + sll 16,a0 ;x val + move @mess_cursy,a1 + sll 16,a1 ;y val + movi 20000,a3 ;Z + movi DMAWNZ|M_SCRNREL,a4 ;DMA flags + move @mess_objid,a5 ;object ID + clr a6 ;x vel + clr a7 ;y vel + calla BEGINOBJP2 + move *a8(OSIZEX),a0 + move @mess_cursx2,a1 + add a0,a1 + move @mess_spacing,a0 + add a0,a1 + move a1,@mess_cursx2 + PULL a4,a8 + jruc #next_char + +#done + rets + + +#***************************************************************************** +* +*----------------------------------------------------------------------------- + + SUBR kern_chars + + movb *a4,a0 + jrz #nok + move @mess_cursx2,a1 + add a0,a1 + move a1,@mess_cursx2 + + move @mess_line_spacing,a0 + move @mess_cursy,a1 + sub a0,a1 + move a1,@mess_cursy +#nok + addk 8,a4 + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP setup_message + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + movi #rets,a0 + move a0,@mess_justify,L ;justification method +#rets + rets + + +#***************************************************************************** +* INPUT : a2 = * to message +*----------------------------------------------------------------------------- + SUBRP print_message + + PUSH a4,a5,a6,a7,a8,a9,a10,a11 + + movi TYPTEXT,a0 + move a0,@mess_objid ;OBJ ID's for text + + move *a2+,a0,L ;* ascii lookup table + move a0,@message_ascii,L ; + move *a2+,a0 ;space char width + move a0,@mess_space_width ; + move *a2+,a0 ;spacing between chars + move a0,@mess_spacing ; + move *a2+,a0 ;message cursor pos X + move a0,@mess_cursx ; + move *a2+,a0 ;message cursor pos Y + move a0,@mess_cursy ; + move *a2+,a0,L + move a0,@message_palette,L + move *a2+,a0,L ;print method + + move a2,a4 ;* text string + call a0 + + PULL a4,a5,a6,a7,a8,a9,a10,a11 + rets + + +#***************************************************************************** + +num_str_tbl + .long str_none + .long str_one + .long str_two + .long str_three + .long str_four + + +init_convert_table + .word 0,'A','B','C','D','E','F','G','H' + .word 'I','J','K','L','M','N','O','P' + .word 'Q','R','S','T','U','V','W','X' + .word 'Y','Z','!',0,' ',0 ;Y Z ! del spc end + + .def init_convert_img +init_convert_img + .long 0 + .long BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F + .long BAST8T_G,BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L + .long BAST8T_M,BAST8T_N,BAST8T_O,BAST8T_P,BAST8T_Q,BAST8T_R + .long BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W,BAST8T_X + .long BAST8T_Y,BAST8T_Z,BAST8TEXC,0,BAST8TSPC + +#***************************************************************************** +* FONT TABLES +****************************************************************************** + +hangfnt38_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,HANGF_EXC,0,0,0,0,0,HANGF_APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,0,0,0,0 ;$28 ( ) * + , - . / + .long HANGF_0,HANGF_1,HANGF_2,HANGF_3,HANGF_4,HANGF_5,HANGF_6,HANGF_7 ;$30 0 1 2 3 4 5 6 7 + .long HANGF_8,HANGF_9,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$40 @ A B C D E F G + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$48 H I J K L M N O + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$50 P Q R S T U V W + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,HANGF_A,HANGF_B,HANGF_C,HANGF_D,HANGF_E,HANGF_F,HANGF_G ;$60 ` a b c d e f g + .long HANGF_H,HANGF_I,HANGF_J,HANGF_K,HANGF_L,HANGF_M,HANGF_N,HANGF_O ;$68 h i j k l m n o + .long HANGF_P,HANGF_Q,HANGF_R,HANGF_S,HANGF_T,HANGF_U,HANGF_V,HANGF_W ;$70 p q r s t u v w + .long HANGF_X,HANGF_Y,HANGF_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B7TCYC_EXC,0,B7TCYC_NUM,B7TCYC_DOL,B7TCYC_PCT,B7TCYC_AND,B7TCYC_APO ;$20 SP! " # $ % & ' + .long B7TCYC_PRL,B7TCYC_PRR,0,B7TCYC_PLS,B7TCYC_COM,B7TCYC_DSH,B7TCYC_PER,B7TCYC_SLS ;$28 ( ) * + , - . / + .long B7TCYC_0,B7TCYC_1,B7TCYC_2,B7TCYC_3,B7TCYC_4,B7TCYC_5,B7TCYC_6,B7TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B7TCYC_8,B7TCYC_9,B7TCYC_COL,B7TCYC_SEM,0,B7TCYC_DSH,0,B7TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$40 @ A B C D E F G + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$48 H I J K L M N O + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$50 P Q R S T U V W + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B7TCYC_A,B7TCYC_B,B7TCYC_C,B7TCYC_D,B7TCYC_E,B7TCYC_F,B7TCYC_G ;$60 ` a b c d e f g + .long B7TCYC_H,B7TCYC_I,B7TCYC_J,B7TCYC_K,B7TCYC_L,B7TCYC_M,B7TCYC_N,B7TCYC_O ;$68 h i j k l m n o + .long B7TCYC_P,B7TCYC_Q,B7TCYC_R,B7TCYC_S,B7TCYC_T,B7TCYC_U,B7TCYC_V,B7TCYC_W ;$70 p q r s t u v w + .long B7TCYC_X,B7TCYC_Y,B7TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast7t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST7TEXC,0,BAST7TNUM,BAST7TDOL,BAST7TPCT,BAST7TAND,BAST7TAPO ;$20 SP! " # $ % & ' + .long BAST7TLPR,BAST7TRPR,BAST7TAST,BAST7TPLS,BAST7TCOM,BAST10DSH,BAST7TPER,BAST7TSLS ;$28 ( ) * + , - . / + .long BAST7T_0,BAST7T_1,BAST7T_2,BAST7T_3,BAST7T_4,BAST7T_5,BAST7T_6,BAST7T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST7T_8,BAST7T_9,BAST7TCOL,BAST7TSEM,0,BAST10DSH,0,BAST7TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$40 @ A B C D E F G + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$48 H I J K L M N O + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$50 P Q R S T U V W + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST7T_A,BAST7T_B,BAST7T_C,BAST7T_D,BAST7T_E,BAST7T_F,BAST7T_G ;$60 ` a b c d e f g + .long BAST7T_H,BAST7T_I,BAST7T_J,BAST7T_K,BAST7T_L,BAST7T_M,BAST7T_N,BAST7T_O ;$68 h i j k l m n o + .long BAST7T_P,BAST7T_Q,BAST7T_R,BAST7T_S,BAST7T_T,BAST7T_U,BAST7T_V,BAST7T_W ;$70 p q r s t u v w + .long BAST7T_X,BAST7T_Y,BAST7T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long CORRECT,POINTS ;$80 + +;DJT Start + .def B8TCYC_PER + .def B8TCYC_H,B8TCYC_O,B8TCYC_P,B8TCYC_S,B8TCYC_T +;DJT End +bast8tcyc_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,B8TCYC_EXC,0,B8TCYC_NUM,B8TCYC_DOL,B8TCYC_PCT,B8TCYC_AND,B8TCYC_APO ;$20 SP! " # $ % & ' + .long B8TCYC_PRL,B8TCYC_PRR,0,0,B8TCYC_COM,0,B8TCYC_PER,B8TCYC_SLS ;$28 ( ) * + , - . / + .long B8TCYC_0,B8TCYC_1,B8TCYC_2,B8TCYC_3,B8TCYC_4,B8TCYC_5,B8TCYC_6,B8TCYC_7 ;$30 0 1 2 3 4 5 6 7 + .long B8TCYC_8,B8TCYC_9,B8TCYC_COL,0,0,0,0,B8TCYC_QUE ;$38 8 9 : ; < - > ? + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$40 @ A B C D E F G + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$48 H I J K L M N O + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$50 P Q R S T U V W + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,B8TCYC_A,B8TCYC_B,B8TCYC_C,B8TCYC_D,B8TCYC_E,B8TCYC_F,B8TCYC_G ;$60 ` a b c d e f g + .long B8TCYC_H,B8TCYC_I,B8TCYC_J,B8TCYC_K,B8TCYC_L,B8TCYC_M,B8TCYC_N,B8TCYC_O ;$68 h i j k l m n o + .long B8TCYC_P,B8TCYC_Q,B8TCYC_R,B8TCYC_S,B8TCYC_T,B8TCYC_U,B8TCYC_V,B8TCYC_W ;$70 p q r s t u v w + .long B8TCYC_X,B8TCYC_Y,B8TCYC_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8t_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8TEXC,0,BAST8TNUM,BAST8TDOL,BAST8TPCT,BAST8TAND,BAST8TAPO ;$20 SP! " # $ % & ' + .long BAST8TPRL,BAST8TPRR,0,0,BAST8TCOM,BAST10DSH,BAST8TPER,BAST8TSLS ;$28 ( ) * + , - . / + .long BAST8T_0,BAST8T_1,BAST8T_2,BAST8T_3,BAST8T_4,BAST8T_5,BAST8T_6,BAST8T_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8T_8,BAST8T_9,BAST8TCOL,0,0,BAST10DSH,0,BAST8TQUE ;$38 8 9 : ; < - > ? + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$40 @ A B C D E F G + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$48 H I J K L M N O + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$50 P Q R S T U V W + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8T_A,BAST8T_B,BAST8T_C,BAST8T_D,BAST8T_E,BAST8T_F,BAST8T_G ;$60 ` a b c d e f g + .long BAST8T_H,BAST8T_I,BAST8T_J,BAST8T_K,BAST8T_L,BAST8T_M,BAST8T_N,BAST8T_O ;$68 h i j k l m n o + .long BAST8T_P,BAST8T_Q,BAST8T_R,BAST8T_S,BAST8T_T,BAST8T_U,BAST8T_V,BAST8T_W ;$70 p q r s t u v w + .long BAST8T_X,BAST8T_Y,BAST8T_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long stx_all,stx_avgallow,stx_avgscore,stx_created,stx_current,stx_defeated,stx_defrank,stx_havenot ;$80 + .long stx_l,stx_nbateams,stx_nextcpu,stx_offrank,stx_ofthe27,stx_overall,stx_record,stx_tournwin ;$88 + .long stx_w,stx_worldrec,stx_youhave,stx_avepoint,stx_norecord,stx_pct,stx_wins,stx_overall ;$90 + .long TRIVPTS + + + .global bast8_2_ascii +bast8_2_ascii + .long BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast8_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST8EXC,0,BAST8NUM,BAST8DOL,BAST8PCT,BAST8AND,BAST8APO ;$20 SP! " # $ % & ' + .long BAST8PRL,BAST8PRR,0,0,BAST8COM,BAST10DSH,BAST8PER,BAST8SLS ;$28 ( ) * + , - . / + .long BAST8_0,BAST8_1,BAST8_2,BAST8_3,BAST8_4,BAST8_5,BAST8_6,BAST8_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST8_8,BAST8_9,BAST8COL,0,0,BAST10DSH,0,BAST8QUE ;$38 8 9 : ; < - > ? + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$40 @ A B C D E F G + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$48 H I J K L M N O + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$50 P Q R S T U V W + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST8_A,BAST8_B,BAST8_C,BAST8_D,BAST8_E,BAST8_F,BAST8_G ;$60 ` a b c d e f g + .long BAST8_H,BAST8_I,BAST8_J,BAST8_K,BAST8_L,BAST8_M,BAST8_N,BAST8_O ;$68 h i j k l m n o + .long BAST8_P,BAST8_Q,BAST8_R,BAST8_S,BAST8_T,BAST8_U,BAST8_V,BAST8_W ;$70 p q r s t u v w + .long BAST8_X,BAST8_Y,BAST8_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long 0,0,0,0,0,0,0,0 ;$80 + .long 0,0,0,0,0,0,0,0 ;$88 + .long city_atl ;ATLANTA (96) + .long city_bos ;BOSTON (103) + .long city_cha ;CHARLOTTE + .long city_chi ;CHICAGO + .long city_cle ;CLEVELAND + .long city_dal ;DALLAS (117) + .long city_den ;DENVER + .long city_det ;DETROIT + .long city_gol ;GOLDEN STATE (110) + .long city_hou ;HOUSTON + .long city_ind ;INDIANA + .long city_lac ;LOS ANGELES (CLIPPERS) + .long city_lal ;LOS ANGELES (LAKERS) + .long city_mia ;MIAMI + .long city_mil ;MILWAUKEE + .long city_min ;MINNESOTA + .long city_nej ;NEW JERSEY + .long city_ney ;NEW YORK + .long city_orl ;ORLANDO + .long city_phi ;PHILADELPHIA + .long city_pho ;PHOENIX + .long city_por ;PORTLAND + .long city_sac ;SACRAMENTO + .long city_san ;SAN ANTONIO + .long city_sea ;SEATTLE + .long city_tor ;TORONTO (new) + .long city_uta ;UTAH + .long city_van ;VANCOUVER (new) + .long city_was ;WASHINGTON + + +bast10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST10EXC,0,BAST10NUM,BAST10DOL,0,BAST10AND,BAST10APO ;$20 SP! " # $ % & ' + .long BAST10PRL,BAST10PRR,0,BAST10PLS,BAST10COM,BAST10DSH,BAST10PER,BAST10SLS ;$28 ( ) * + , - . / + .long BAST10_0,BAST10_1,BAST10_2,BAST10_3,BAST10_4,BAST10_5,BAST10_6,BAST10_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST10_8,BAST10_9,BAST10COL,BAST10SEM,0,BAST10DSH,0,BAST10QUE ;$38 8 9 : ; < - > ? + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$40 @ A B C D E F G + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$48 H I J K L M N O + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$50 P Q R S T U V W + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST10_A,BAST10_B,BAST10_C,BAST10_D,BAST10_E,BAST10_F,BAST10_G ;$60 ` a b c d e f g + .long BAST10_H,BAST10_I,BAST10_J,BAST10_K,BAST10_L,BAST10_M,BAST10_N,BAST10_O ;$68 h i j k l m n o + .long BAST10_P,BAST10_Q,BAST10_R,BAST10_S,BAST10_T,BAST10_U,BAST10_V,BAST10_W ;$70 p q r s t u v w + .long BAST10_X,BAST10_Y,BAST10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush10_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH10EXC,0,BRSH10NUM,BRSH10DOL,0,BRSH10AND,0 ;$20 SP! " # $ % & ' + .long BRSH10PRL,BRSH10PRR,0,0,BRSH10COM,0,BRSH10PER,BRSH10SLS ;$28 ( ) * + , - . / + .long BRSH10_0,BRSH10_1,BRSH10_2,BRSH10_3,BRSH10_4,BRSH10_5,BRSH10_6,BRSH10_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH10_8,BRSH10_9,BRSH10COL,0,0,0,0,BRSH10QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$40 @ A B C D E F G + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$48 H I J K L M N O + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$50 P Q R S T U V W + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH10_A,BRSH10_B,BRSH10_C,BRSH10_D,BRSH10_E,BRSH10_F,BRSH10_G ;$60 ` a b c d e f g + .long BRSH10_H,BRSH10_I,BRSH10_J,BRSH10_K,BRSH10_L,BRSH10_M,BRSH10_N,BRSH10_O ;$68 h i j k l m n o + .long BRSH10_P,BRSH10_Q,BRSH10_R,BRSH10_S,BRSH10_T,BRSH10_U,BRSH10_V,BRSH10_W ;$70 p q r s t v w + .long BRSH10_X,BRSH10_Y,BRSH10_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush12_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH12EXC,0,BRSH12NUM,BRSH12DOL,0,BRSH12AND,0 ;$20 SP! " # $ % & ' + .long BRSH12PRL,BRSH12PRR,0,0,BRSH12COM,BRSH12DAS,BRSH12PER,BRSH12SLS ;$28 ( ) * + , - . / + .long BRSH12_0,BRSH12_1,BRSH12_2,BRSH12_3,BRSH12_4,BRSH12_5,BRSH12_6,BRSH12_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH12_8,BRSH12_9,BRSH12COL,0,0,BRSH12DAS,0,BRSH12QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$40 @ A B C D E F G + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$48 H I J K L M N O + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$50 P Q R S T U V W + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH12_A,BRSH12_B,BRSH12_C,BRSH12_D,BRSH12_E,BRSH12_F,BRSH12_G ;$60 ` a b c d e f g + .long BRSH12_H,BRSH12_I,BRSH12_J,BRSH12_K,BRSH12_L,BRSH12_M,BRSH12_N,BRSH12_O ;$68 h i j k l m n o + .long BRSH12_P,BRSH12_Q,BRSH12_R,BRSH12_S,BRSH12_T,BRSH12_U,BRSH12_V,BRSH12_W ;$70 p q r s t u v w + .long BRSH12_X,BRSH12_Y,BRSH12_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +inga16_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,INGA16EXC,0,INGA16NUM,INGA16DOL,INGA16PCT,0,INGA16APO ;$20 SP! " # $ % & ' + .long INGA16PRL,INGA16PRR,INGA16AST,INGA16ADD,INGA16COM,INGA16SUB,INGA16PER,INGA16SLS ;$28 ( ) * + , - . / + .long INGA16_0,INGA16_1,INGA16_2,INGA16_3,INGA16_4,INGA16_5,INGA16_6,INGA16_7 ;$30 0 1 2 3 4 5 6 7 + .long INGA16_8,INGA16_9,INGA16COL,0,0,INGA16SUB,0,INGA16QUE ;$38 8 9 : ; < - > ? + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$40 @ A B C D E F G + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$48 H I J K L M N O + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$50 P Q R S T U V W + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,INGA16_A,INGA16_B,INGA16_C,INGA16_D,INGA16_E,INGA16_F,INGA16_G ;$60 ` a b c d e f g + .long INGA16_H,INGA16_I,INGA16_J,INGA16_K,INGA16_L,INGA16_M,INGA16_N,INGA16_O ;$68 h i j k l m n o + .long INGA16_P,INGA16_Q,INGA16_R,INGA16_S,INGA16_T,INGA16_U,INGA16_V,INGA16_W ;$70 p q r s t u v w + .long INGA16_X,INGA16_Y,INGA16_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +bast18_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BAST18EXC,0,BAST18NUM,BAST18DOL,BAST18PCT,0,BAST18APO ;$20 SP! " # $ % & ' + .long BAST18PRL,BAST18PRR,0,BAST18ADD,BAST18COM,BAST18DSH,BAST18PER,BAST18SLS ;$28 ( ) * + , - . / + .long BAST18_0,BAST18_1,BAST18_2,BAST18_3,BAST18_4,BAST18_5,BAST18_6,BAST18_7 ;$30 0 1 2 3 4 5 6 7 + .long BAST18_8,BAST18_9,BAST18COL,0,0,BAST18DSH,0,0 ;$38 8 9 : ; < - > ? + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$40 @ A B C D E F G + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$48 H I J K L M N O + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$50 P Q R S T U V W + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BAST18_A,BAST18_B,BAST18_C,BAST18_D,BAST18_E,BAST18_F,BAST18_G ;$60 ` a b c d e f g + .long BAST18_H,BAST18_I,BAST18_J,BAST18_K,BAST18_L,BAST18_M,BAST18_N,BAST18_O ;$68 h i j k l m n o + .long BAST18_P,BAST18_Q,BAST18_R,BAST18_S,BAST18_T,BAST18_U,BAST18_V,BAST18_W ;$70 p q r s t u v w + .long BAST18_X,BAST18_Y,BAST18_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +brush20_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .ref BRSH20APO + .long 0,BRSH20EXC,0,0,0,BRSH20PCT,0,BRSH20APO ;$20 SP! " # $ % & ' + .long 0,0,0,0,BRSH20COM,0,BRSH20PER,BRSH20SLS ;$28 ( ) * + , - . / + .long BRSH20_0,BRSH20_1,BRSH20_2,BRSH20_3,BRSH20_4,BRSH20_5,BRSH20_6,BRSH20_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH20_8,BRSH20_9,BRSH20COL,0,0,0,0,BRSH20QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$40 @ A B C D E F G + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$48 H I J K L M N O + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$50 P Q R S T U V W + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH20_A,BRSH20_B,BRSH20_C,BRSH20_D,BRSH20_E,BRSH20_F,BRSH20_G ;$60 ` a b c d e f g + .long BRSH20_H,BRSH20_I,BRSH20_J,BRSH20_K,BRSH20_L,BRSH20_M,BRSH20_N,BRSH20_O ;$68 h i j k l m n o + .long BRSH20_P,BRSH20_Q,BRSH20_R,BRSH20_S,BRSH20_T,BRSH20_U,BRSH20_V,BRSH20_W ;$70 p q r s t u v w + .long BRSH20_X,BRSH20_Y,BRSH20_Z,0,0,0,0,0 ;$78 x y z { | } ~ + .long TRIVIA,CONTEST ;$80 + +brush50_ascii + .long 0,0,0,0,0,0,0,0 ;$00 + .long 0,0,0,0,0,0,0,0 ;$08 + .long 0,0,0,0,0,0,0,0 ;$10 + .long 0,0,0,0,0,0,0,0 ;$18 + .long 0,BRSH50EXC,0,BRSH50NUM,BRSH50DOL,BRSH50PCT,BRSH50AND,0 ;$20 SP! " # $ % & ' + .long BRSH50PRL,BRSH50PRR,0,0,BRSH50COM,0,BRSH50PER,BRSH50SLS ;$28 ( ) * + , - . / + .long BRSH50_0,BRSH50_1,BRSH50_2,BRSH50_3,BRSH50_4,BRSH50_5,BRSH50_6,BRSH50_7 ;$30 0 1 2 3 4 5 6 7 + .long BRSH50_8,BRSH50_9,BRSH50COL,0,0,0,0,BRSH50QUE ;$38 8 9 : ; < - > ? + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$40 @ A B C D E F G + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$48 H I J K L M N O + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$50 P Q R S T U V W + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ + .long 0,BRSH50_A,BRSH50_B,BRSH50_C,BRSH50_D,BRSH50_E,BRSH50_F,BRSH50_G ;$60 ` a b c d e f g + .long BRSH50_H,BRSH50_I,BRSH50_J,BRSH50_K,BRSH50_L,BRSH50_M,BRSH50_N,BRSH50_O ;$68 h i j k l m n o + .long BRSH50_P,BRSH50_Q,BRSH50_R,BRSH50_S,BRSH50_T,BRSH50_U,BRSH50_V,BRSH50_W ;$70 p q r s t u v w + .long BRSH50_X,BRSH50_Y,BRSH50_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;osgemd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,OSGEMD_EXP,0,OSGEMD_NUM,OSGEMD_DOL,0,OSGEMD_AND,OSGEMD_APO ;$20 SP! " # $ % & ' +; .long OSGEMD_OBR,OSGEMD_CBR,0,0,OSGEMD_COM,OSGEMD_DAS,OSGEMD_DOT,OSGEMD_SLS ;$28 ( ) * + , - . / +; .long OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6,OSGEMD_7 ;$30 0 1 2 3 4 5 6 7 +; .long OSGEMD_8,OSGEMD_9,OSGEMD_COL,0,0,0,0,OSGEMD_QUE ;$38 8 9 : ; < - > ? +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$40 @ A B C D E F G +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$48 H I J K L M N O +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$50 P Q R S T U V W +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G ;$60 ` a b c d e f g +; .long OSGEMD_H,OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O ;$68 h i j k l m n o +; .long OSGEMD_P,OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W ;$70 p q r s t u v w +; .long OSGEMD_X,OSGEMD_Y,OSGEMD_Z,0,0,0,0,0 ;$78 x y z { | } ~ + +;omlgmd_ascii +; .long 0,0,0,0,0,0,0,0 ;$00 +; .long 0,0,0,0,0,0,0,0 ;$08 +; .long 0,0,0,0,0,0,0,0 ;$10 +; .long 0,0,0,0,0,0,0,0 ;$18 +; .long 0,omlgmd_EXP,0,0,0,0,0,0 ;$20 SP! " # $ % & ' +; .long 0,0,0,0,0,0,omlgmd_DOT,0 ;$28 ( ) * + , - . / +; .long 0,0,0,0,0,0,0,0 ;$30 0 1 2 3 4 5 6 7 +; .long 0,0,0,0,0,0,0,0 ;$38 8 9 : ; < - > ? +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$40 @ A B C D E F G +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$48 H I J K L M N O +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$50 P Q R S T U V W +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$58 X Y Z [ \ ] ^ _ +; .long 0,omlgmd_A,omlgmd_B,omlgmd_C,omlgmd_D,omlgmd_E,omlgmd_F,omlgmd_G ;$60 ` a b c d e f g +; .long omlgmd_H,omlgmd_I,omlgmd_J,omlgmd_K,omlgmd_L,omlgmd_M,omlgmd_N,omlgmd_O ;$68 h i j k l m n o +; .long omlgmd_P,omlgmd_Q,omlgmd_R,omlgmd_S,omlgmd_T,omlgmd_U,omlgmd_V,omlgmd_W ;$70 p q r s t u v w +; .long omlgmd_X,omlgmd_Y,omlgmd_Z,0,0,0,0,0 ;$78 x y z { | } ~ + + +****************************************************************************** +* strings + +str_slash .string "/",0 +str_dash .string "-",0 +str_dash2 .string " - ",0 +str_sp .string " ",0 +str_2sp .string " ",0 +str_3sp .string " ",0 +str_dot .string ".",0 +str_00 .string "00.00",0 +str_and .string " & ",0 +str_obr .string "(",0 +str_cbr .string ")",0 +str_w .string " - ",0 ;" (W) - " +;str_l .string 88h,0 ;"(L)" +str_all .string " ALL",0 ;" ALL" +str_norecord .string 94h,0 ;"NO RECORD" +str_line0a .string 9fh,0 ;"RANK #" +str_line0b .string 8eh,0 ;"RECORD: " +str_line0c .string 82h,' ',0 ;"LOSSES: " +str_line0d .string 95h," .",0 ;"PCT: ." +str_line0d1 .string 95h," 1.000",0 ;"PCT: 1.000" + +str_na .string "N/A",0 +str_streak .string 84h,0 +str_win .string " WIN",0 +str_wins .string " WINS",0 +str_none .string "NONE",0 +str_ovr_rnk .string 8dh,0 +str_def_rnk .string 86h,0 +str_off_rnk .string 8bh,0 +str_pts_scrd .string 81h,0 +str_pts_allowd .string 82h,0 +str_wrld_recs .string 91h,0 +str_plr_att_pts .string 83h,0 +;DJT Start + .if TRIVCON +;DJT End +str_trivia_pts .string "TRIVIA",1 + .string "POINTS",0 +;DJT Start + .endif ;TRIVCON +;DJT End +;str_tourn_wins .string 8fh,0 +str_next_cpu .string 8ah,0 +str_line10 .string 87h,0 ;"YOU HAVE" +str_line11 .string 85h,' ',0 ;"DEFEATED XX" +str_line12 .string 8ch,0 ;"OF THE 29" +str_line13 .string 89h,0 ;"NBA TEAMS" + +;str_win_strks .string "WINSTREAK",0 +;str_pts_game .string "PTS/GAME",0 +;str_rebnds_game .string "REBOUNDS",0 +;str_assist_game .string "ASSISTS",0 +str_one .string "1",0 +str_two .string "2",0 +str_three .string "3",0 +str_four .string "4",0 + + .even + +****************************************************************************** + + .end diff --git a/SRC/SYS.EQU b/SRC/SYS.EQU new file mode 100644 index 0000000..9cb91c0 --- /dev/null +++ b/SRC/SYS.EQU @@ -0,0 +1,363 @@ +*THE T/Z-UNIT SYSTEM SPECIFIC EQUATES +*.Last mod - 11/30/92 12:09 +*.Last mod - 4/10/95 7:30pm - JBJ +*.Last mod - ??/??/95 ??:??pm - DJT + + +; globals for stack ref - built in MAIN.ASM + + .global STACKL + .global STACKB + .global STACKE + + +; assembly configuration flags + +WWFUNIT .equ 1 + +YUNIT .equ 1 +TUNIT .equ 1 ;YUNIT also on +TUNITDB .equ 0 ;TUNIT debugging +TUNIT2 .equ 1 ;TUNIT also on + +;DJT Start +DEBUG .equ 1 ;0 or 1 +IMGVIEW .equ 0 ;0 or 1 +HEADCK .equ 0 ;0 or 1 + +HOTSPOT .equ 0 ;0 or 1 Show hotspots off/on + +OPERMES .equ 0 ;0 or 1 Operator message off/on +TRIVCON .equ 0 ;0 or 1 Trivia contest off/on +TEAMPOP .equ 0 ;0 or 1 Team popularity off/on +ANIM_VS .equ 1 ;0 or 1 Versus scrn anim off/on +;DJT End + +PAL64 .equ 0 ;1 if 64x64 pals + +*FOLLOWING SYMBOLS DON'T ACTUALLY WORK, YET! (GNP - 1/15/92) +GERMAN .equ 0 ;IF 1 THEN GERMAN TEXT +PRINTER .equ 0 ;IF 1 THEN PRINTER IS INSTALLED + +FULLPRICE .equ 1 ;IF 1, INSTALL ALL COINAGE MODES + + +; PIXBLT stuff + +PXSIZE .equ 8 +SCRN_PTCH .equ 512*PXSIZE + + +; System memory map + + .if WWFUNIT +VMUX_CONTROL .equ 1800000h ;VMUX Control Register +VMUX_BREG0 .equ 1820000h ;VMUX Background Register 0 +VMUX_BREG1 .equ 1830000h ;VMUX Background Register 1 +VMUX_PALMATCH .equ 1840000h ;VMUX Palette Match Register +VMUX_STATUS .equ 1800000h ;VMUX Status Register + +VMUX_MODE0 .equ 0 ;I/O Mode 0 +VMUX_MODE1 .equ 1 ;I/O Mode 1 +VMUX_MODE2 .equ 2 ;I/O Mode 2 +VMUX_MODE3 .equ 3 ;I/O Mode 3 +VMUX_MODE4 .equ 4 ;I/O Mode 4 +VMUX_MODE5 .equ 5 ;I/O Mode 5 +VMUX_MODE6 .equ 6 ;I/O Mode 6 +VMUX_MODE7 .equ 7 ;I/O Mode 7 + +VMUX_IODISABLE .equ 8 ;I/O Disable +VMUX_ADDRGENENB .equ 16 ;Address Generator Enable + +VMUX_VKEY0 .equ 0 ;Video Key 0 +VMUX_VKEY1 .equ 32 ;Video Key 0 +VMUX_VKEY2 .equ 64 ;Video Key 0 +VMUX_VKEY3 .equ 96 ;Video Key 0 +VMUX_VKEY4 .equ 128 ;Video Key 0 +VMUX_VKEY5 .equ 160 ;Video Key 0 +VMUX_VKEY6 .equ 192 ;Video Key 0 + +VMUX_PALMENABL .equ 256 ;Palette Match Enable + +VMUX_VDISABLE .equ 512 ;Video Disable + +VMUX_CSWIZZLE .equ 1024 ;Color RAM swizzle on writes + +VMUX_CRAMREAD .equ 2048 ;Force Read of CRAM Pixel Stream + +VMUX_INITMODE .equ VMUX_MODE0|VMUX_VKEY0 + .endif + +SCREEN .equ 0 ;START OF SCREEN MEMORY +SCRNE .equ 200000h ;END OF SCREEN+1 + +SCRATB .equ 1000000h ;START OF SCRATCH +SCRATE .equ 13F7300h ;END OF SCRATCH+1 +SCRATL .equ SCRATE-SCRATB ;SCRATCH SIZE (BITS) +MEGBIT0 .equ SCRATE-200000h ;LOWER 128K BYTE BUFFER (SCREEN BUFFER, ETC) +MEGBIT1 .equ SCRATE-100000h ;UPPER 128K BYTE BUFFER (SCREEN BUFFER, ETC) + .asg SCRATB,SCRATCH ;Alt for start of scratch + .asg STACKE,STCKST ;Alt for start of stack + +CMOS .equ 1400000h ;START OF CMOS RAM +CMOSWE .equ CMOS+0ffff0h ;Write enable + + .if TUNIT +COLRAM .equ 1880000h + .elseif YUNIT +COLRAM .equ 1810000h ;Color ram + .else +COLRAM .equ 1800000h + .endif +CYCOLORS .equ COLRAM+3E0h ;COLORS 62 AND 63 (LAST TWO IN PAL!) + +CMAPSEL .equ 1a80080h ;COLOR MAP SELECT (0-15) + .if TUNIT2 +SWITCH .equ 1860000h ;I/O WIDGET BOARD +COINS .equ 1860030h +SWITCH2 .equ 1860010h +DIPSWITCH .equ 1860020h ;DIP SWITCHES +;WATCHDOG .equ 1d81070h ;old +WATCHDOG .equ 1860030h ;new (daughterboard) +WRMISC .equ 1860020h +COIN_COUNTERS .EQU 1860010H ;COIN COUNTER DRIVERS +SNDRSTBIT .equ 16 + .else +SWITCH .equ 1c00000h ;I/O WIDGET BOARD +COINS .equ 1c00010h +SWITCH2 .equ 1c00020h +DIPSWITCH .equ 1c00030h ;DIP SWITCHES + .endif + .if TUNIT2 +SOUND .equ 1680000h ;Auto strobe +SOUNDR .equ 1680000h ;Auto strobe (with wait state) +SOUNDIRQ .equ 1860040h ;* irq input +;B_SDAV .equ 11 ;sound data available bit # (active hi) +;B_SIRQ .equ 10 ;Irq bit # +B_SDAV .equ 10 ;sound data available bit # (active hi) +B_SIRQ .equ 11 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed +TALKPORT .equ 1860040h ;Port to find this line +B_WDOG .equ 8 ;(-) For watchdog triggered +;SOUND .equ 1d01030h ;Auto strobe +;SOUNDR .equ 1d81030h ;Auto strobe (with wait state) +;SOUNDIRQ .equ 1d00000h ;* irq input +;B_SDAV .equ 6 ;sound data available bit # (active hi) +;B_SIRQ .equ 7 ;Irq bit # +;SOUNDBIT .equ 0ff00h ;No strobe needed +;TALKPORT .equ 1d00000h ;Port to find this line +;B_WDOG .equ 4 ;(-) For watchdog triggered + .elseif TUNIT +SOUND .equ 1c01030h ;Auto strobe +SOUNDIRQ .equ 1c00050h ;* irq input +B_SIRQ .equ 3 ;Irq bit # +SOUNDBIT .equ 0ff00h ;No strobe needed + .else +SOUND .equ 1e00000h ;Sound I/O; B0-B7=Sound#, B8=Reset (-) +SOUNDIRQ .equ SWITCH+10H ;* irq input +B_SIRQ .equ 14 ;Irq bit # +SOUNDBIT .equ 0fd00h ;B9=Strobe (-) + .endif + + +PIC_COMMAND .equ 01600000h ;PIC Command Port +PIC_DATA .equ PIC_COMMAND ;PIC Data Port +CDI_BIT .equ 13 ;Coindoor Interlock Bit (COIN input) + +*SYSCTRL .equ 1f00000h ;System control latch +SYSCTRL .equ 1b00000h ;System control latch + ;BIT 2 - LED select (1) + ;BIT 4 - AUTO-ERASE ENABLE(0) + ;BIT 5 - OBJECT PALETTE ENABLE(0) + ;BIT 6 - CMOS page (YUNIT) + ;BIT 7 - CMOS page + + + .if WWFUNIT +IROMPG0 .equ 0000h ;Image ROM Bank 0 +IROMPG1 .equ 0100h ;Image ROM Bank 1 +IROMPG2 .equ 0200h ;Image ROM Bank 2 +IROMPG3 .equ 0300h ;Image ROM Bank 3 +LEDON .equ 0400h ;Turn LED ON +PALENB .equ 0800h ;Enable Color Palette +WROMINTDIS .equ 1000h ;Disable Write to ROM Interrupt +WROMINTCLR .equ 2000h ;Clear the Write to ROM Interrupt + .endif + + +IROM .equ 2000000h ;IMAGE ROM +ROM .equ 7800000h ;PROGRAM ROM +;ROM .equ 0ff800000h ;PROGRAM ROM + +;System stuff +AUTOERAS .equ 10h +OBJPALET .equ 20h + .if DEBUG + .if WWFUNIT +SYSCINIT .equ 0A87fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON, CLEAR INT +;SYSCINIT .equ 0ffb8h ;INITIAL SYSCTRL VALUE + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .else + .if WWFUNIT +SYSCINIT .equ 0987fh ;LED OFF, IROM PAGE 0, PALETTE ON, WRROMINT ON + .else +SYSCINIT .equ 0fff8h ;INITIAL SYSCTRL VALUE + .endif + .endif + +WPIROM .equ 80h + +ERASECOL .equ 0 ;Screen erase color # +ERASELOC .equ COLRAM ;Screen erase color loc + +;DMA stuff +DMAREGS .equ 1a000c0h ;Bottom of dma registers for mmtm + +DMAOFFST .equ 1a00000h ;DMA offset +DMACTRL .equ 1a00010h ;DMA control. BIT 15: +;DMAOFFST .equ 1a80000h ;DMA offset +;DMACTRL .equ 1a80010h ;DMA control. BIT 15: + ;0=DMA IDLE (R), 1=DMA BUSY (R) + ;0=STOP DMA (W*2), 1=START DMA (W) +DMAGO .equ DMACTRL ;FOR SYSCHECK +DMASAGL .equ 1a00020h ;*Data start (low 16 bits) +DMASAGH .equ 1a00030h ;*Data start (high 16 bits) +DMAHORIZ .equ 1a00040h ;Dest X +DMAVERT .equ 1a00050h ;Dest Y +DMAHSIZE .equ 1a00060h ;Dest X size +DMAVSIZE .equ 1a00070h ;Dest Y size +DMACMAP .equ 1a00080h ;Color map select +DMACONST .equ 1a00090h ;Constant color +DMASCALEX .equ 1a000a0h ;X scale 8:8 +DMASCALEY .equ 1a000b0h ;Y ^ +DMAWINDOW .equ 1a000c0h ;Window LR or TB +DMATEST .equ 1a000e0h ;? +DMACONF .equ 1a000f0h ;Config + +;DMASAGL .equ 1a80020h ;*Data start (low 16 bits) +;DMASAGH .equ 1a80030h ;*Data start (high 16 bits) +;DMAHORIZ .equ 1a80040h ;Dest X +;DMAVERT .equ 1a80050h ;Dest Y +;DMAHSIZE .equ 1a80060h ;Dest X size +;DMAVSIZE .equ 1a80070h ;Dest Y size +;DMACMAP .equ 1a80080h ;Color map select +;DMACONST .equ 1a80090h ;Constant color +;DMASCALEX .equ 1a800a0h ;X scale 8:8 +;DMASCALEY .equ 1a800b0h ;Y ^ +;DMAWINDOW .equ 1a800c0h ;Window LR or TB +;DMATEST .equ 1a800e0h ;? +;DMACONF .equ 1a800f0h ;Config + +* LAYOUT OF DMA CONFIG REGISTER +DMAWIN .set 20h ; Bit 5 (0 = rt/lft, 1 = top/bot) +DMACF4 .SET 10H ; BIT 4 TIMING PARAMETER + +SECCHIP .equ 1c00060h ;LOCATION OF SECURITY CHIP JKM 2/13/90 + +;Bits for the dma control word +DMAWZ .equ 8001h ;WRITE ZERO DATA +DMAWNZ .equ 8002h ;WRITE NON-ZERO DATA +DMACZ .equ 8004h ;WRITE CONSTANT ON ZERO DATA +DMACNZ .equ 8008h ;WRITE CONSTANT ON NON-ZERO DATA +DMAWAL .equ 8003h ;WRITE BOTH ZERO & NON-ZERO DATA +DMACAL .equ 800ch ;WRITE CONSTANT ON BOTH ZERO & NON-ZERO DATA + +;IFLAGS bits +FLIPH_IFB .equ 14 +SCALE_IFB .equ 15 + +IPCOUNT .equ -10h ;multi-part block count +ISIZE .equ 0 +ISIZEX .equ 0 +ISIZEY .equ 10h +IANIOFF .equ 20h +IANIOFFX .equ 20h +IANIOFFY .equ 30h +ISAG .equ 40h +ICTRL .equ 60h +ICMAP .equ 70h +ICPBZ .equ 70h ;multi-part block size +IANI2X .equ 90h +IANI2Y .equ 0a0h +IANI2Z .equ 0b0h +IFLAGS .equ 0c0h +IANI3X .equ 0d0h +IANI3Y .equ 0e0h +IANI3Z .equ 0f0h +IANI3ID .equ 100h +ICBZ .equ 110h + +W .equ 0 +L .equ 1 + +*SOUND PROCESSOR EQUATES +NINT .equ 800H ;SOUND NON-INTERRUPTABLE +NINTEQ .equ 400H ;SOUND NON-INTERRUPTABLE BY EQUAL PRIORITY +CHANNEL .equ 0F000H +NOTIME .equ 4000H + +WDOGNUM .equ 1A2B3C4DH ;"SYSTEM INITIALIZED" MARKER + +*FRANIM FLAG MASKS +FLIPBITS equ 4000H +NEWPALET equ 2000H +DELTAXZ equ 1000H +DELTAY equ 800H +*ANIMATION SCRIPT FLAG BIT POSITIONS +BFLIPBIT equ 14 +BNEWPAL equ 13 +BDELTAXZ equ 12 +BDELTAY equ 11 + +*Palette allocator equates + + .if TUNIT +;Turmell +NUMPAL .equ 80 ;Max # pals ;40 +NMFPAL .equ 80 ;# foregnd pals ;40 +NMBPAL .equ 0 ;# backgnd pals + .else +NUMPAL .equ 16 ;Max # pals +NMFPAL .equ 16 ;# foregnd pals +NMBPAL .equ 0 ;# backgnd pals + .endif + +*struct PAL +PALID .equ 0 ;UHL *palette data +*endstruct + +PALRSIZ .equ 32 ;Size of pal allocation ram + +;Palette transfer ram +PLDCNT .equ 0 ;# colors +PALSRC .equ 10h ;* palette color data +PALDEST .equ 30h ;Destination palette|Start color +PALTSIZ .equ 40h ;Size of each cell +NUMPALT .equ 48 ;# of transfers allowed ;40 +;;TEMP +;;;NUMPALT .equ 60 ;# of transfers allowed ;40 + +****************************************************************************** + +BIT0 equ 0001h +BIT1 equ 0002h +BIT2 equ 0004h +BIT3 equ 0008h +BIT4 equ 0010h +BIT5 equ 0020h +BIT6 equ 0040h +BIT7 equ 0080h +BIT8 equ 0100h +BIT9 equ 0200h +BIT10 equ 0400h +BIT11 equ 0800h +BIT12 equ 1000h +BIT13 equ 2000h +BIT14 equ 4000h +BIT15 equ 8000h + +****************************************************************************** + + diff --git a/SRC/TEST.ASM b/SRC/TEST.ASM new file mode 100644 index 0000000..3cb6c14 --- /dev/null +++ b/SRC/TEST.ASM @@ -0,0 +1,3646 @@ +************************************************************** +* +* Owner: none +* +* Software: ? +* Initiated: ? +* +* Modified: Shawn Liptak, 11/14/91 -Total carnage cleanup +* Shawn Liptak, 2/20/92 -Basketball +* GEORGE PETRO, 1/17/93 -NBA JAM +* Jeff Johnson, 4/11/95 -NBA JAM 3 +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/19/93 13:58 +*.Last mod - 4/11/95 12:13pm +************************************************************** + .file "test.asm" + .title "test program" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" + .include "disp.equ" + .include "sys.equ" + .include "gsp.equ" + .include "imgtbl.glo" + .include "game.equ" + .include "link.equ" + .include "menu.equ" + .include "macros.hdr" ;Macros + .include "dipsw.equ" + + +;in this module + + .def fudge_switches, fudge_switches2, fudge_switches_diag + .DEF DIAG,CHK_CMOS + .DEF GEN_MENU,B_MENU + .DEF TOP_BOX ;,WT_ADV +; .DEF WW_ADV + .DEF MAIN_RET,GMENULEV +; .DEF CK_DOOR + .DEF AREUSURE + .DEF F_TITLE + .DEF ST_STICK + .DEF GETSTICK + .DEF SUR_MESS + .DEF SURE_BOX + .DEF CPU_RET + .DEF GET_FAC + .DEF MENU_TOP + .DEF RED_BOX + .DEF BLNKHELP,H_SLAVE + .DEF DOBORDER + .DEF COL_INST + .DEF STD_BORD + .DEF DIAG_EX + .DEF WAIT_BUT + .DEF DIGSRT +; .DEF GET_ADV + .DEF SND_MADE + .DEF NO_CLEAR + .DEF LAST_BUT + .DEF G_BORDER + .DEF FORM_SWS +; .DEF LINKY + .DEF CKTEST, CKDIAG, DIAG_COLORS + +;in audit.asm + + .REF CMOS_VAL,L_MESS + .REF LM_SETUP,LM_FINIS + .REF FORM_ADC + .REF F_ADC_S + .REF GET_AUD + .REF FAC_SET + .REF CRED_P + .REF BAD_AUD + .REF CLR_AUD + .REF ADJ_PAGE + .REF COIN_PAG + .REF ROM_NAME + .REF STORE_AUDIT + .ref inga16_asc_tbl +* +* IN HSTD.ASM +* + .REF INIT_TAB + .REF VAL_TAB + .REF P_FORK + .REF RC_BYTEI + .REF RC_BYTE + .REF RC_WORD + .REF RC_LONG + .REF RC_LONGI + .REF WC_BYTE + .REF WC_BYTEI + .REF WC_WORD + .REF WC_WORDI + .REF WC_LONG + .REF WC_LONGI +* +* IN MENU.ASM +* + .REF MEN_MAIN,ANY_BUT,MEN_YN + .REF MESS_FAC + .REF GO_DIAG ;ROUTINE FOR DIAGNOSTIC MENU + .REF RTR_LEV,ROM_LEV + .REF FAC_STUF + .REF SCODE ;SYNTH CODE CURRENTLY BEING MADE + .REF DCODE ;DIG CODE CURRENTLY BEING MADE + +; IN ADJUST.ASM + + .REF DO_ADJH, CKDIP, MEN_ADJ + + +; IN ATTRACT.ASM + + .REF WIPEOUT + + +; OTHERS + + .ref TWOPLAYERS ;0 = NO, 1 = YES 2 players + + .REF WARMSET +;DJT Start +; .REF QSNDRST + .ref qsndrst_proc +;DJT End + .REF FILLAREA + .REF STRNGLEN + + .ref brush20_ascii + .REF RD15FONT,RD7FONT,STRCNRM,STRCNRM_1,GAMSTATE + .REF IRQSKYE,BLNKAREA,STRLNRM,CLR_SCRN + .REF P1DATA,P2DATA + .REF WDOGDIS, READ_DIP, dpageflip_off, SWSET1, SWSET2 + + .REF PALFRAM, pal_set, pal_getf, DIAGP + + .ref _coin_addr + .ref _switch_addr + .ref _switch2_addr + + +* MAIN_RET +* +* POSITIVE NUMBER HERE SAYS RETURN (UPWARD) TO MAIN MENU (GEN_MENU ONLY) +* NEGATIVE NUMBER HERE SAYS SETUP RESTORE AFTER RAM TEST. (GEN_MENU) + + .BSS MAIN_RET,16 ;FLAG SAYS RETURN TO MAIN MENU + .BSS GMENULEV,16 ;HOW DEEP INTO GEN_MENU WE ARE + .BSS SND_MADE,16 ;SOUND TEST FLAG + .BSS NO_CLEAR,16 ;FLAG TELLS GET_MENU NOT TO CLEAR! + .BSS LAST_BUT,32 + .BSS SPTEMP,32 ;STACK POINTER TEMP + + .def fswitches_cur,fswitches_last,fswitches_down + + .bss fswitches_cur,32 + .bss fswitches_last,32 + .bss fswitches_down,32 + + BSSX _switch_map_mode,32 ; 0 = no switch mapping + ; 1 = map switches for menus + ; 2 = map switches for adjustments + ; 3 = Any button mapping mode + + .text + +;sounds + +;beep1_snd .word >f3f7,>8,>8080,0 ;MENU BAR MOVE SOUND +;SELECT_SND .word >f3f7,>8,>8084,0 ;MENU OPTION SELECT SOUND +;UHOH .WORD 0F3DFH,010H,08092H,0 ;FAILURE OF ANY KIND + + +************************************************************************** +* * +* CPU_RET * +* * +* THIS IS RETURN FROM CPU TEST. SINCE WE NEED TO TEST * +* RAM BEFORE ROM, OUR STATE IS ALSO SMASHED FROM ROM TEST. * +* * +************************************************************************** +CPU_RET: +; CALLR DIAG_STATE ;GET THE STATE RIGHT.....BUT DON'T MESS UP TILL BUTTON +; JSRP WAIT_BUT ;NOW WAIT FOR ANY BUTTON. + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE + + CLR A0 + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + + MOVI RTR_LEV,A0 ;THIS IS THE LEVEL TO DIVE TO + NEG A0 ;NEGATE IT AS FLAG TO DIVE. + MOVE A0,@MAIN_RET ;INDICATE + JAUC DIAG_RESTART ;NOW START IT UP.... + + + +************************************************************************** +* * +* WAIT_BUT * +* * +* THIS IS CALLED ON RETURN FROM MANY OF THE "HARD" * +* DIAGNOSTIC TESTS TO HOLD CONTROL TILL ANY BUTTON IS * +* HIT. * +* * +************************************************************************** +WAIT_BUT: + CALLR FORM_SWS ;1ST STATE DOESN'T COUNT + +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. + +WB1: + SLEEPK 1 + CALLR FORM_SWS + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + ANDI BUTTONS,A0 ;IS IT A BUTTON? + JRZ WB1 + + .ref diag_select + SOUND1 diag_select +; movi beep1_snd,a3 +; calla SNDSND + RETP + + +************************************************************************** +* * +* CKTEST * +* * +* CHECK TO SEE IF EITHER OF THE TEST BUTTONS IS CLOSED, * +* IF NOT, HEAD OUT TO WARMSET * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* NOTHING * +* * +************************************************************************** +CKTEST +; rets + PUSH A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKRET + +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JAZ WARMSET ; WE BE OUTTA HERE! +CKRET + PULL A0 + RETS + + +************************************************************************** +* * +* CKDIAG * +* * +* CHECK TO SEE IF WE NEED TO GO OFF TO THE DIAGNOSTICS ROUTINES * +* * +* ENTRY * +* NOTHING * +* * +* EXIT * +* A0 0 = COOL, 1 = GO TO DIAGS * +* * +************************************************************************** +CKDIAG + CLR A0 + CALLA READ_DIP + ANDI DPTEST,A0 + JRNZ CKDGO +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + JRZ CKDRET +CKDGO + MOVK 1,A0 +CKDRET + MOVE A0,A0 + RETS + +************************************************************************** +* DIAG - THIS IS THE ENTRY TO THE MAIN DIAGNOSTIC MENU. + +DIAG + movi AUDSTAT,a0 + clr a1 + calla STORE_AUDIT + move @GAMSTATE,a0 + jan SUCIDE ;In diagnostics + +; move @COINS,a0 ;Check coin switches + move @_coin_addr,a0,L + move *a0,a0 + btst CDI_BIT,a0 ;Coin door closed ? + jaz SUCIDE ;Yes - then diagnostic NOT allowed + movk 1,a0 + move a0,@_switch_map_mode,L + +DIAG_JUMP + CALLR DIGSRT ;MAKE SURE WE'RE IN TEST MODE +; JSRP WW_ADV ;HOLD UNTIL HE LETS GO! + + CLR A0 + MOVE A0,@MAIN_RET ;CLEAR THE FLOAT TO TOP FLAG. + MOVE A0,@GMENULEV ;INDICATE WE'RE AT LEVEL ZERO. + +DIAG_RESTART + MOVI MEN_MAIN,A8 + JSRP GEN_MENU ;PROCESS THIS MENU! + clr a0 + move a0,@_switch_map_mode,L + +; HE (FINALLY) PICKED EXIT....RETURN! + +DIAG_EX + SLEEPK 2 ;LET DMA EMPTY OUT IF NECESSARY + +; CALLA CMOS_VAL ;IF SETTINGS SMASHED....FIX EM. +; JAUC WARMSET + + + + +; SLEEP 2 + CALLA CLR_SCRN + CALLA CMOS_VAL ; VALIDATE THE CMOS + CALLA CKTEST + CALLA READ_DIP + ANDI DPTEST,A0 + MOVE A0,@SWSET2,L + JRZ DE2 + MOVI NOTCLOSEDDIP,A8 + JSRP L_MESS + jruc #out +DE2 +; MOVE @SWITCH,A0,L + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + MOVE @SWSET2,A14,L + OR A0,A14 + MOVE A14,@SWSET2,L + MOVE A0,A0 + JRZ DE3 + MOVI NOTCLOSEDJAMMA,A8 + JSRP L_MESS + jruc #out +DE3 + JAUC WARMSET +#out + MOVI NOTCLOSEDWAIT,A8 + JSRP L_MESS + + CALLA fudge_switches ;get fudged switches in a0 + andi BUTTONS|START_BITS,a0 + MOVE A0,@SWSET1,L +DE4 + SLEEPK 1 ;APPEASE THE MAIN LOOP + CALLR CKTEST ;CHECK STATUS OF TEST SWITCH + + CALLA fudge_switches ;get fudged switches in a0 + MOVE @SWSET1,A1,L + andi BUTTONS|START_BITS,a0 + CMP A0,A1 + JRNZ DE5 + + + MOVE @SWSET2,A3,L + MOVE A3,A1 + CALLA READ_DIP + ANDI DPTEST,A0 + ANDI DPTEST,A1 + CMP A0,A1 + JRNE DIAG_EX + +; MOVE @SWITCH,A0,L ;GOTTA SEE IF TIME TO LEAVE + move @_coin_addr,a0,L + move *a0,a0,W + sll 16,a0 + NOT A0 + ANDI DIAG_BITS,A0 + ANDI DIAG_BITS,A3 + CMP A0,A3 + JRNE DIAG_EX + + JRUC DE4 + +DE5 + CALLR CKTEST ; ONE FINAL TIME ( STILL WRONG ) + JRUC DIAG_JUMP + + +NOTCLOSEDDIP + MESS_MAC RD7FONT,SPACING07,200,50,COLOR_RED,STRCNRM,0 +;DJT Start + .STRING "DIPSWITCH TEST SELECT (SW1 # 1) CLOSED.",0,0 +; .STRING "DIPSWITCH TEST SELECT (UJ2 # 8) CLOSED.",0,0 +;DJT End + .EVEN + +NOTCLOSEDJAMMA + MESS_MAC RD7FONT,SPACING07,200,70,COLOR_RED,STRCNRM,0 + .STRING "COIN DOOR TEST SWITCH CLOSED.",0,0 + .EVEN + +NOTCLOSEDWAIT + MESS_MAC RD7FONT,SPACING07,200,120,COLOR_RED,STRCNRM,0 + .STRING "PRESS ANY BUTTON TO RETURN TO TEST MODE OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,132,COLOR_RED,STRCNRM,0 + .STRING "OR",0,1 + .EVEN + MESS_MAC RD7FONT,SPACING07,200,144,COLOR_RED,STRCNRM,0 + .STRING "OPEN THE SWITCH(S) TO RETURN TO GAME.",0,0 + .EVEN + +************************************************************************** +* * +* GEN_MENU * +* * +* THIS IS A GENERAL MENU HANDLER. IT POSTS THE MENU * +* WITH SELECTION 1 AVAILABLE. AFTER A SELECTION IS * +* MADE, IF IT HAS A ROUTINE CODE OF ZERO, (EXIT) * +* IT RETURNS TO THE LEVEL ABOVE IT. ELSE, IT * +* JSRP'S THE NEW ROUTINE. WHEN THE NEW ROUTINE * +* RETURNS, WE RE-POST THE SAME MENU WITH THE * +* BAR ON THE FOLLOWING ENTRY. * +* * +* A8 = MENU DESCRIPTOR * +* * +************************************************************************** +* +* MENU ROM OFFSETS +* +MR_FONT EQU 0 +MR_TCAL EQU MR_FONT+LONG_SIZE +MR_TITLE EQU MR_TCAL+LONG_SIZE ;POINTER TO TITLE FOR TILE BOX (IF NEC) +MR_TCLR EQU MR_TITLE+LONG_SIZE ;COLOR OF TITLE +MR_WORDS EQU MR_TCLR+WORD_SIZE ;STREAM OF WORDS TO COPY TO PDATA STARTS HERE +MR_X EQU MR_WORDS +MR_Y EQU MR_X+WORD_SIZE +MR_DY EQU MR_Y+WORD_SIZE +MR_COL EQU MR_DY+WORD_SIZE +MR_HITE EQU MR_COL+WORD_SIZE +MR_BDY EQU MR_HITE+WORD_SIZE +MR_DX EQU MR_BDY+WORD_SIZE +MR_WID EQU MR_DX+WORD_SIZE + +GEN_MENU + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + INC A0 + MOVE A0,@GMENULEV + + MOVE A8,-*A12,L ;SAVE MENU PTR + movk 1,A8 ;START WITH "FIRST" ENTRY + MOVE A8,-*A12,W ;PUT MENU NUMBER AS A WORD + +* IF WE GET HERE AND MAIN_RET IS NOT ZERO, THE WE MUST +* RETURN TO LEVEL ABOVE US IF WE'RE NOT THE MAIN +* MENU. + + +GEN_LOOP + MOVE @MAIN_RET,A0 ;ARE WE IN "EXIT" MODE? + JRZ NO_EXIT ;NO + + JRN DIVE_TO_MONITOR ;WE'RE DIVING TO MONITOR PATTERNS. + + MOVE @GMENULEV,A0 ;CHECK LEVEL + subk 1,a0 ;are we at level 1 + jrne GEN_EXIT ;NOPE.....POP UP A LEVEL. + +* WE'RE AT LEVEL 1....CLEAR OUT THE FLAG THAT +* GOT US HERE. + +DIVE_COMPLETE + CLR A0 + MOVE A0,@MAIN_RET ;NOW WE MAY PROCEED! + +NO_EXIT + MOVE @NO_CLEAR,A0 ;INHIBIT CLEAR? + JRNZ SKIP_CLR + CLR B13 + CALLA CLR_SCRN ;CLEAR THE SCREEN + +SKIP_CLR + CLR A0 + MOVE A0,@NO_CLEAR ;AND RE-SET IT! + + MOVE *A12(WORD_SIZE),A8,L ;GET MENU DESCRIPTOR + JSRP MENU_TOP + JSRP RED_BOX ;PUT UP MAIN MENU INSTRUCTIONS + + MOVE *A12,A9 ;GET MENU NUMBER TO USE + JSRP B_MENU ;GET RESULT + +PHONEY_MENU_RET + + MOVE A10,A10 ;WAS IT ADVANCE? + JRZ NO_KICK ;NOPE....LEAVE WHERE HE CAME FROM + + INC A8 ;KICK INDEX BY 1 FOR NEXT TIME +NO_KICK + MOVE A8,*A12 ;AND LEAVE ON THE STACK + + MOVE A9,A9 ;NOW JSRP THE ROUTINE + JRZ GEN_EXIT ;NONE THERE....ITS "EXIT" + +* JSRP TO A9 + + MOVI GEN_LOOP,A7 + MOVE A7,-*A12,L ;PUSH RET ADDR + JUMP A9 + +GEN_EXIT + ADDI WORD_SIZE+LONG_SIZE,A12 ;POP THE ARGUMENTS + MOVE @GMENULEV,A0 ;KICK LEVEL POINTER + DEC A0 + MOVE A0,@GMENULEV + RETP + +************************************************************************** +* * +* DIVE_TO_MONITOR * +* * +* WE GET CONTROL HERE WHEN WE ARE KLUDGING THE RETURN * +* FROM "CPU" TEST (WHICH BLOWS AWAY RAM!) * +* * +************************************************************************** +DIVE_TO_MONITOR: + MOVE @GMENULEV,A0 ;CHECK LEVEL + CMPI 1,A0 ;ARE WE AT LEVEL 1 + JRNZ DTM1 ;NOPE....SET "MONITOR" LEVEL +* +* WE'RE AT LEVEL 1......."SELECT" THE DIAGNOSTIC MENU +* A8 = 1.....A9 = ROUTINE FOR DIAGNOSTIC MENU +* + MOVK 1,A8 + MOVI GO_DIAG,A9 ;ROUTINE FOR DIAGNOSTIC MENU + MOVK 1,A10 ;RETURN AS IF ADVANCE WAS PRESSED + JRUC PHONEY_MENU_RET ;WE'RE READY TO CALL DIAG MENU +* +* WE'RE IN DIAGNOSTIC MENU....NOW WE JUST NEED TO MAKE +* THE "CURRENT" SELECTION THE ONE AFTER CPU TEST +* (MONITOR PATTERNS) +* +DTM1: + MOVE @MAIN_RET,A8 ;FLAG IS OPPOSITE OF ENTRY NUMBER + NEG A8 ;THIS IS RETURN LEVEL! +* MOVI RTR_LEV,A8 ;START WITH "RETURN" ENTRY NUMBER + MOVE A8,*A12 ;PUT MENU NUMBER AS A WORD + JRUC DIVE_COMPLETE ;THIS COMPLETES THE DIVE! + +************************************************************************** +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. + +************************************************************************** +* * +* TOP_BOX * +* * +* THIS DISPLAYS THE TEST BOX AT THE TOP. * +* * +* A2 POINTS AT THE STRING TO CENTER IN THE BOX. * +* A3 IS COLOR TO DO IT IN. * +* * +************************************************************************** +MENU_TOP: + MOVE *A8(MR_TITLE),A2,L ;GET TITLE INTO A2 + MOVE *A8(MR_TCLR),A3 ;AND COLOR INTO A3 + +TOP_BOX: + MOVE A8,-*A12,L ;PUSH MENU PTR +* +* FIRST MAKE THE BOX...IT BLACKS OUT THE REGION +* + CALLR SCR_BOX ;PUT UP THE TITLE BOX + + MOVI MESS_TITLE,A8 ;SET PARAMETERS + CALLA LM_SETUP ;PUT IT OUT. + + MOVE A2,A8 ;GET STRING IN THE CORRECT REGGIE +; MOVE A3,A6 ;MOVE COLOR TO COLOR REGGIE + + JSRP LM_FINIS ;AND PRINT IT! + + JSRP SCR_REV ;NOW ADD THE REV. + + MOVE *A12+,A8,L ;RESTORE THE MENU PTR + + RETP + +************************************************************************** +* * +* SCR_REV * +* * +* DISPLAY REV IN TITLE BOX. * +* * +************************************************************************** +SCR_REV: + MOVI MESS_REV,A8 ;GET READY FOR REV MESSAGE + CALLA LM_SETUP ;SETUP FOR REV MESSAGE + + MOVI ROM_NAME,A8 ;USE ROM COPY OF REV. + JSRP LM_FINIS ;FINISH PRINTING MESSAGE + RETP + +************************************************************************** +* * +* SCR_BOX * +* * +* THIS DISPLAYS THE TITLE BOX. * +* * +************************************************************************** +SCR_BOX: + MOVI TIT_ULX+(10000H*TIT_ULY),A4 ;UPPER LEFT + MOVI TIT_LRX+(10000H*TIT_LRY),A5 ;UPPER LEFT + MOVI COLOR_YELLOW,A9 + CALLR STD_BORD + RETS + +* THIS PRINTS THE "MOVE JOYSTICK" BOX. +* +* A8 = MENU DESCRIPTOR THAT WILL ACCOMPANY IT +* ON SCREEN. WE ADJUST THE BOX EDGES AND +* MESSAGE CENTER IN "X" ONLY TO CORRESPOND +* TO THE MENU BOX. + +RED_BOX: + MOVE A8,-*A12,L ;PUSH THE MENU PTR + + MOVI ROBO_RED,A9 + CALLR COL_INST ;THIS PRINTS BOX AND STASHES +* ;CENTER X AT *A13(PDATA),W + + MOVI MM_INST1,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVI MM_INST2,A8 ;POINT AT INSTRUCTIONS MESSAGE + JSRP C_PD_M + + MOVE *A12+,A8,L ;GET BACK MENU PTR. + RETP + +************************************************************************** +* * +* COL_INST * +* * +* THIS PRINTS OUT THE "CYAN" INSTRUCTION BOX * +* IN THE COLOR SPECIFIED BY A9. * +* * +************************************************************************** +COL_INST: +* +* WE NEED TO DETERMINE LEFT AND RIGHT X +* + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + CALLR MEN_NUMS ;GET THE NUMBERS FOR THIS MENU + MOVE A6,*A13(PDATA),W ;STASH THE X CENTER + ADDI 10000H*INST_ULY,A4 ;UPPER LEFT Y + ADDI 10000H*INST_LRY,A5 ;UPPER LEFT X + CALLR STD_BORD + RETS + +************************************************************************** +* * +* MEN_NUMS * +* * +* THIS IS CALLED TO GET SOME NUMBERS ASSOCIATED * +* WITH A MENU BOX. * +* * +* THIS RETURNS: * +* * +* A4 = LEFT X * +* A5 = RIGHT X * +* A6 = CENTER X * +* * +************************************************************************** +MEN_NUMS: + CALLR MENU_UL_A4_A5 ;LEFT X IN A4 + CALLR MENU_LR_A6_A5 ;RIGHT X IN A6 + MOVE A6,A5 ;COPY RIGHT X INTO A5 + ADD A4,A6 ;FIND CENTER + SRL 1,A6 ;A6 NOW HAS CENTER X (FOR LATER) + RETS + +************************************************************************** +* * +* C_PD_M * +* * +* THIS PRINTS A L_MESS MESSAGE PASSED IN A8, CENTERED * +* ON THE X STORED AT *A13(PDATA),W * +* * +************************************************************************** +C_PD_M: + CALLA LM_SETUP ;SETUP THE MESSAGE + MOVE *A13(PDATA),A3 ;GET THE X + movx a3,a9 ;Move X + JUMP A1 ;AND "CALL" THE ROUTINE + +************************************************************************** +* * +* DIGSRT * +* * +* THIS IS CALLED ON ENTRY TO DIAGNOSTICS. * +* * +************************************************************************** + +DIGSRT + CALLR DIAG_STATE + CALLA WIPEOUT ;INITIALIZE THE OBJECT LIST + CALLR DIAG_COLORS ;RESTART THE COLOR PROCESSES. + CREATE QSNDRST_PID,qsndrst_proc ;Init sound board +;oops JSRP QSNDRST + + calla dpageflip_off + MOVK 1,A0 + MOVE A0,@DISPLAYON ;WE NEED TO SEE THE STUFF + + movi HEBLNKINIT,a0 + move a0,@HEBLNK + + jauc CLR_SCRN ;CLEAR THE SCREEN! + +DIAG_STATE + CLR A1 + CALLA KILALL ;KILL ABSOLUTELY EVERYONE! + + MOVI DIAG_PID,A1 ;SET OUR ID TO DIAGNOSTICS MAN + MOVE A1,*A13(PROCID) ;PASS OUR ID TO FORKED PROCESS + + movi INDIAG,a0 + move a0,@GAMSTATE ;PUT US IN TEST MODE! + rets + + + +NUM_DIAG_CYCLE_COLORS .EQU 4 +DIAG_CYCLE_COLOR_START .EQU 03CH + + .BSS DIAG_CRAM,NUM_DIAG_CYCLE_COLORS*16,1 ;RAM FOR TRANSFER + +************************************************************************** +* * +* DIAG_COLORS - PROCESS THAT CYCLE COLORS FOR THE DIAGNOSTIC MENUS. * +* * +************************************************************************** +DIAG_COLORS + MMTM SP,A0,A1,A7 + MOVI COLRPID,A0 + CLR A1 + MOVE A1,@IRQSKYE + move a1,@PALFRAM,L + CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES + MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE + CALLA pal_getf + MOVI COLRPID,A0 + CLR A1 + NOT A1 + CALLA KILALL + CREATE COLRPID,PC_TRANSFER + CREATE COLRPID,LFLASH + CREATE COLRPID,RGB + CREATE COLRPID,BPR + CREATE COLRPID,DECAY + MMFM SP,A0,A1,A7 + RETS + +************************************************************************** +* * +* TABLE DRIVEN COLOR RAM PROCESSES * +* * +************************************************************************** +* 18000B0(11) - BPR +* 18000C0(12) - DECAY +* 18000D0(13) - LASER FLASH +* 18000E0(14) - RGB + +RGB CALLR TABDRIVE + .LONG RGBTAB,DIAG_CRAM+30H + .WORD 8 +RGBTAB .WORD 07C00H,001FH,>77A0,>741A,0FFFFH + +* +DECAY CALLR TABDRIVE + .LONG DCATAB,DIAG_CRAM+010H + .WORD 2 +DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H + .WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H + .WORD 4000H,3000H,2000H,1000H,0FFFFH +* +BPR CALLR TABDRIVE + .LONG BPRTAB,DIAG_CRAM + .WORD 1 +BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H + .WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H + .WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH + +************************************************************************** +* * +* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR * +* * +************************************************************************** +LFLASH MOVI 07FFFH,A0 + MOVE A0,@DIAG_CRAM+20H,W + SLEEPK 2 +LFLASH1 + MOVE @RAND,A0,W + ANDI 0000001FH,A0 + MOVI COLTAB,A1 + SLL 4,A0 + ADD A0,A1 + MOVE *A1,A1,W + MOVE A1,@DIAG_CRAM+020H,W + SLEEPK 6 + JRUC LFLASH + +COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H + .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH + .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH + .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H + .WORD 0FFFFH + +************************************************************************** +* * +* THE TABLE DRIVEN PROCESS * +* * +************************************************************************** +TABDRIVE + MOVE *SP+,A0,L + MOVE *A0+,A11,L ;A11 = TABLE START + MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR + MOVE *A0,A10,W ;A10 = SLEEP TIME +TABDRV1 + MOVE A11,A8 ;RESET TO START OF TABLE +TABDRV2 + MOVE *A8+,A0,W ;GET A COLOR + JRN TABDRV1 ;BR = END OF TABLE + MOVE A0,*A9,W + MOVE A10,A0 + MOVI TABDRV2,A7 + JAUC PRCLSP ;LOOP SLEEP + +************************************************************************** +* * +* PC_TRANSFER - PROCESS TO TRANSFER CYCLE COLORS TO THE COLOR * +* RAM EVERY TICK. * +* * +************************************************************************** +PC_TRANSFER + MOVI DIAG_CRAM,A0 + MOVI DIAG_CYCLE_COLOR_START,A1 + MOVI NUM_DIAG_CYCLE_COLORS,A2 + CALLA pal_set + SLOOP 1,PC_TRANSFER + +************************************************************************** +* * +* CHK_CMOS * +* * +* This is the routine that is called at power up. * +* * +* It checks to see if CMOS adjustments are in tact. * +* IF THE ADJUSTMENTS ARE BAD, OR SET FOR A DIFFERENT * +* GAME OR REVISION, we cause a factory setting to * +* occur. We then try and validate the all time * +* HSTD table. If this is bad we then zero audits. * +* If HSTD table is ok, then we leave audits alone. * +* * +************************************************************************** +CHK_CMOS + CALLR DIGSRT ;CLEAR OUT THE SCREEN...(MESSAGE WILL FOLLOW!) + CALLA CMOS_VAL + JRNZ FAC_TIME + MOVI MESS_BITCHIN,A2 ;POINT AT DATA + MOVI ROBO_WHITE,A3 + JSRP TOP_BOX + SLEEPK 18H + RETP +; JAUC WARMSET ;CMOS IS OK....RETURN! +* +* WE NEED TO FACTORY SET THIS THING (DUE TO BAD SETTINGS.) +* +FAC_TIME: + JSRP GET_FAC ;GET THE GAME TO FACTORY SETTINGS! +; JSRP WW_ADV ;WAIT WHILE ADVANCE IS PRESSED +; +; JSRP WT_ADV ;NOW WAIT TILL ADVANCE IS PRESSED +; + CALLA CLR_SCRN ;PRESSED....BLANK THE SCREEN AND + ;HOLD TILL HE LETS GO. +; +; JSRP WW_ADV ;HOLD CONTROL HERE TILL HE LETS GO + JAUC WARMSET ;CMOS IS OK....RETURN! +; JRUC DIAG_JUMP ;NOW INTO TEST MODE FOR ADV. BUTTON. + +************************************************************************** +* * +* GET_FAC * +* * +* THIS IS CALLED TO BRING THE GAME TO A FACTORY SETTINGS * +* STATE. IT WILL STORE THE FACTORY SETTINGS OR WAIT * +* UNTIL THE DOOR IS OPEN. IF IT CAN'T GET FACTORY SETTINGS * +* IT WILL PRINT A FAILURE MESSAGE. * +* * +************************************************************************** +GET_FAC + +FAC_LOOP + CALLA CLR_SCRN ;CLEAR SCREEN IN ANTICIPATION OF MESSAGE + clr a0 ;Full + CALLA FAC_SET + CALLA CMOS_VAL ;IS IT OK NOW? + JRZ CMOS_FIXED ;YEP....FINISH CLEANUP! + + MOVI MESS_FAIL,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + + JRUC WAIT_POINT ;WE'RE DEAD..ADVANCE TAKES US TO TEST MODE! + +CMOS_FIXED +* +* THIS IS WHERE WE ARE ONCE WE HAVE FACTORY SET.... +* MESSAGE WOULD GO HERE. +* + CALLR CENT_BOX ;PUT A BOX AROUND IT + + MOVI MESS_FAC,A8 ;POINT AT DATA + JSRP L_MESS ;DISPLAY LARRY MESSAGE + +* NOW.....CLEAR HIGH SCORE TABLE +* CLEAR OUT THE AUDITS. + + CALLA FAC_STUF ;DO REST OF FULL FACTORY STUFF! + +* AT THIS POINT WE HANG WAITING FOR THE ADVANCE SWITCH. + +WAIT_POINT + RETP ;NOW LET CALLER TAKE OVER. + +************************************************************************** +* * +* WT_ADV * +* * +* WAIT TILL ADVANCE. THIS HOLDS CONTROL UNTIL ADVANCE * +* BUTTON IS PRESSED. * +* * +************************************************************************** +;WT_ADV: +; SLEEPK 2 +; +;WT_A6: +; CALLR GET_ADV ;SCAN THE BUTTON +; JRNZ WT_ADV ;NOT PRESSED. +; RETP +; + +;************************************************************************** +;* * +;* WW_ADV * +;* * +;* WAIT WHILE ADVANCE. THIS HOLDS CONTROL WHILE ADVANCE * +;* BUTTON IS HELD (OR STUCK). * +;* * +;************************************************************************** +;WW_ADV: +; SLEEPK 2 +; CALLR GET_ADV +; JRZ WW_ADV +; RETP +; +;************************************************************************** +;* * +;* GET_ADV * +;* * +;* THIS GETS PHYSICAL STATE OF ADVANCE BUTTON. * +;* * +;* .EQ. PRESSED * +;* .NE. OPEN * +;* * +;************************************************************************** +;GET_ADV: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI ADV_BIT,A0 ;KEEP ADVANCE BIT. +; MMFM SP,A0 +; RETS +; +;************************************************************************** +;* * +;* CK_DOOR * +;* * +;* THIS IS CALLED TO SEE IF THE FRONT DOOR (MEMORY * +;* PROTECT SWITCH IS OPEN. * +;* * +;* .NE. OPEN (OK TO WRITE CMOS) * +;* .EQ. CLOSED (CAN'T WRITE CMOS) * +;* * +;************************************************************************** +;CK_DOOR: +; MMTM SP,A0 +; MOVE @COINS,A0,W ;FETCH COIN SWITCHES (LOOKING FOR ADVANCE) +; ANDI DOOR_BIT,A0 ;KEEP COIN DOOR MEMORY PROTECT. +; MMFM SP,A0 +; RETS +; +************************************************************************** +* * +* GET_MENU * +* * +* This routine is called (via JSRP) to display a menu on * +* screen and receive a selection from the operator. * +* * +* The menu descriptor is passed in A8. * +* * +* The selection number is returned in a8. (line 1 = 1) * +* The routine address is returned in a9. * +* A10 is returned non-zero if advance was the button used * +* * +* A menu (pointed to by A8) is defined as follows: * +* * +* FONT TO BE USED (LONG) * +* X FOR LEFT MARGIN (WORD) * +* Y FOR TOP LINE (WORD) * +* DY PER ENTRY (WORD) * +* TEXT_COLOR (WORD) * +* HEIGHT OF SELECTION BAR (WORD) * +* DX FROM TOP OF TEXT TO SEL. BAR (WORD) * +* * +* A9 POINTS AT ENTRY TO START WITH * +* * +* Then for each entry: * +* * +* TEXT POINTER (LONG) * +* ACTIVATION ROUTINE (LONG) * +* * +* The list is terminated by a zero. * +* * +* This routine forks a separate process to do the work * +* for it. Therefore the caller has full use of * +* the PDATA area. * +* * +************************************************************************** +* +* Equates for GET_MENU slave process. +* +MEN_OFF EQU PDATA ;WORD-OFFSET INTO MENU OF SELECTION +MEN_ROUT EQU MEN_OFF+WORD_SIZE ;LONG-ROUTINE FOR SELECTION +MEN_ROM EQU MEN_ROUT+LONG_SIZE ;LONG-POINTER TO ROM STRUCTURE +MEN_ULX EQU MEN_ROM+LONG_SIZE ;WORD-LEFT X (CENTER X WHEN CENTERING) +MEN_ULY EQU MEN_ULX+WORD_SIZE ;WORD-TOP Y +MEN_DY EQU MEN_ULY+WORD_SIZE ;WORD-Y UNITS PER ENTRY +MEN_COLR EQU MEN_DY+WORD_SIZE ;WORD-COLOR FOR ENTRIES +MEN_BAR EQU MEN_COLR+WORD_SIZE ;WORD-HEIGHT OF SELECTION BAR +MEN_BDY EQU MEN_BAR+WORD_SIZE ;WORD-DY FROM TOP OF TEXT TO TOP OF BAR. +MEN_BDX EQU MEN_BDY+WORD_SIZE ;WORD-DX FROM LEFT OF WORD TO LEFT OF BAR +MEN_BWID EQU MEN_BDX+WORD_SIZE ;WORD-WIDTH OF BAR +MEN_SCOL EQU MEN_BWID+WORD_SIZE ;WORD-COLOR OF SELECTED TEXT +MEN_TPTR EQU MEN_SCOL+WORD_SIZE ;LONG-POINTER TO BEGINNING OF TEXT ENTRIES. +MEN_ENTS EQU MEN_TPTR+LONG_SIZE ;WORD-NUMBER OF ENTRIES IN MENU +MEN_CUR EQU MEN_ENTS+WORD_SIZE ;WORD-CURRENT SELECTION (1ST IS 1) +MEN_WALK EQU MEN_CUR+WORD_SIZE ;WORD-NUMBER OF ENTRY WE'RE ON AS WE WALK +MEN_STIK EQU MEN_WALK+WORD_SIZE ;LONG-"STUCK" STATE OF SWITCHES +MEN_ACT EQU MEN_STIK+LONG_SIZE ;LONG-SWITCH WE'RE ACTING ON. (BIT) +MEN_TYPO EQU MEN_ACT+LONG_SIZE ;WORD-TYPOMATIC COUNTER +MEN_HITS EQU MEN_TYPO+WORD_SIZE ;WORD-CONSECUTIVE TYPOMATIC HITS +MEN_ADV EQU MEN_HITS+WORD_SIZE ;WORD-NON-ZERO IF ADVANCE WAS BUTTON USED + +WORD_ENTS EQU (MEN_TPTR-MEN_ULX)/WORD_SIZE ;NUMBER OF WORD ENTRIES + +B_MENU: + MOVI BD_SLAVE,A7 + JRUC GMJMP + +GET_MENU: + MOVI GM_SLAVE,A7 ;THIS IS ROUTINE +GMJMP: + MOVI MENU_PID,A1 ;THIS IS ID + CALLA GETPRC ;CREATE IT + + MOVE A0,A10 ;SAVE HIS POINTER + +GM1: + SLEEPK 2 + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA EXISTP ;WAIT FOR ID TO CHANGE TO THIS! + + JRZ GM1 ;LOOP UNTIL IT EXISTS! + + MOVE *A10(MEN_OFF),A8 ;RETURN OFFSET OF SELECTION + MOVE *A10(MEN_ROUT),A9,L ;AND ROUTINE THAT WAS SELECTED. + MOVE *A10(MEN_ADV),A10 ;INDICATE WHETHER ADVANCE WAS USED + + MOVI MDUN_PID,A0 + MOVI 0FFFFH,A1 + CALLA KILALL ;KILL THE HANGING MENU GETTER! + RETP ;AND RETURN + + +************************************************************************** +* * +* GM_SLAVE * +* * +* This displays the menu.......moves the selection bar * +* and returns the selection information by stuffing * +* it in its process area and changing its ID to * +* MDUN_PID once selection is made. * +* * +* On entry....A8 points at the GET_MENU data structure. * +* A9 is which entry to start with selected. * +* * +************************************************************************** +BD_SLAVE + CALLR MENU_BORDER ;DRAW THE BORDER FOR SELCTIONS. + SLEEP 3 + +GM_SLAVE + JSRP ST_STICK ;TELL STICK(S) AND BUTTONS WE'RE STARTING. + + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA + +* PLOT ENTIRE MENU +* +* DO_MENU_LINE WILL RETURN CARRY SET +* WHEN WE GET BEYOND THE END. + + MOVK 1,A0 ;SETUP FOR LINE 1. + +DO_ANOTHER_LINE + + MOVE A0,*A13(MEN_WALK),W ;WALK THROUGH. + + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. + MOVE *A13(MEN_WALK),A0,W ;GET BACK THE COUNTER + + INC A0 ;MOVE TO NEXT ENTRY. + MOVE *A13(MEN_ENTS),A1,W ;SEE IF WE'RE DONE. + CMP A1,A0 + JRLS DO_ANOTHER_LINE +* +* MAIN MENU PLOTTED......NOW LET THE DMA UN-LOAD BEFORE PLOTTING HELP +* + SLEEP 2 + CALLR PLOT_HELP ;PLOT HELP FOR 1ST IF NECESSARY + +* SLEEPK 2 ;NOW MAKE SURE THE HELP GETS PLOTTED +* +* NOW WE JUST WANT TO UPDATE BASED ON STICK...ACT +* ON BUTTONS! +* +* RESPONSES: UP....DOWN....BUTTON....NOTHING.... +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A0 = RESPONSE +* A1 = MEN_CUR VALUE. + +MENU_LOOP + SLEEPK 1 + calla READ_DIP ;Get the current dip switch bits + btst DPTEST_B,a0 + jrnz #dipon + +; move @COINS,a5 +; btst 4,a5 +; jrnz DIAG_EX ;Test switch off? +#dipon + MOVI MENU_TYPO,A5 + JSRP GETSTICK ;ASK THE STICK HANDLER....... + MOVE A0,A0 ;SEE WHAT GET_STICK RETURNED. + JRZ MENU_LOOP ;MENU...(PAUSE) NOTHING. + + MOVE *A13(MEN_CUR),A1,W ;GET CURRENT ENTRY...IN A1 + + CMPI 3,A0 ;BUTTON? + JRZ MENU_BUTTON ;YEP....WE'RE OUT OF HERE. + + CMPI 2,A0 + JRZ MENU_DOWN ;ITS DOWN.... +* +* REQUEST TO GO UP....ARE WE AT #1 +* + CMPI 1,A1 ;WELL? + JRLS MENU_LOOP ;YEP....IGNORE + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + DEC A0 ;MAKE ONE LESS. + JRUC JOIN_DOWN ;NOW PLOT THE NEW ONE. + +MENU_DOWN: + MOVE *A13(MEN_ENTS),A2,W ;GET NUMBER IN MENU + CMP A2,A1 ;ARE WE AT MAX + JRHS MENU_LOOP ;YEP...NO ACTION + + JSRP UN_SELECT ;PUT BACK THE OLD "CURRENT ONE + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + INC A0 ;MAKE THIS THE NEXT. + +JOIN_DOWN: + MOVE A0,*A13(MEN_CUR),W ;PUT BACK + JSRP DO_MENU_LINE ;PUT OUT LINE IN A0. +* +* MAKE THE "DINK" SOUND HERE FOR ENTRY TO ENTRY MOVEMENT +* + CALLR PLOT_HELP ;PLOT HELP NEW ONE + SLEEPK 1 ;DELAY BEEP 1 FRAME +;DJT Start + .ref diag_cursor +;DJT End + SOUND1 diag_cursor + JRUC MENU_LOOP ;AND WAIT FOR NEXT RESPONSE. +* +* CONTROL COMES HERE WHEN A BUTTON IS PRESSED +* +* The selection number is returned in a8. (line 1 = 1) +* The routine address is returned in a9. + +MENU_BUTTON: +* +* A0 HAS A 3. +* A2 HAS THE BUTTON BIT.....IS IT ADVANCE? +* + MOVE *A13(MEN_ROM),A0,L + CMPI MEN_ADJ,A0 ; SPECIAL CASE FOR MENU ADJ + JRNZ MBNOTADJ + CALLA CKDIP + JRNZ MBNOTADJ ; NOT USING DIP SWITCHES + MOVE *A13(MEN_CUR),A0,W ; GET THE SELECT ITEM + CMPI 2,A0 ; "STANDARD PRICING" + JRZ MBABORT + CMPI 3,A0 ; "CUSTOM MULTIPLIERS" + JRZ MBABORT +;DJT Start + CMPI 4,A0 ; "CUSTOM PRICING" + JRZ MBABORT + CMPI 5,A0 ; "FREE PLAY" + JRNZ MBNOTADJ +;DJT End +MBABORT + + .ref error_found + SOUND1 error_found + JRUC MENU_LOOP +MBNOTADJ + CLR A0 ;NOT ADVANCE + +IS_ADV: + MOVE A0,*A13(MEN_ADV),W ;NON ZERO IF IT WAS ADVANCE + + JSRP BUTTON_STALL ;HIGHLIGHT SELECTION AND HANG ON BUTTON + + MOVE *A13(MEN_CUR),A0,W ;GET "CURRENT" ENTRY. + CALLR GET_MENU_DATA ;A1=CURRENT_OFFSET A2=TEXT A3=ROUTINE + MOVE A0,*A13(MEN_OFF),W ;STORE THE OFFSET (CHOICE NUM) + MOVE A3,*A13(MEN_ROUT),L ;AND THE ROUTINE POINTER + MOVI MDUN_PID,A0 + MOVE A0,*A13(PROCID),W ;CHANGE OUR ID. + +MENU_DONE: + SLEEPK 20 + JRUC MENU_DONE ;NOW HANG TILL DISPATCHER SEES ID. + +************************************************************************** +* * +* MENU UTILITIES * +* * +************************************************************************** +************************************************************************** +* * +* BUTTON_STALL * +* * +* THIS IS CALLED WHEN THE MENU GETS A BUTTON HIT. * +* A1 HAS THE BIT OF THE BUTTON. * +* * +* WE PAINT THE MENU SQUARE TO FEEDBACK THE HIT. * +* * +* THEN WE HANG ON THE BUTTON UNTIL ITS LET GO. * +* * +************************************************************************** +BUTTON_STALL: + MOVE A2,@LAST_BUT,L ;PUSH THE BUTTON STATE + + MOVE @SCODE,A0,W ;NO CASH FOR REPEAT SOUND CODES + MOVE @DCODE,A1,W + OR A0,A1 + JRNZ DONT_WAIT ;ITS A SOUND REPEAT....DON'T HOLD EITHER! + + .ref diag_select + SOUND1 diag_select ;MAKE SELECT SOUND + + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + MOVI COLOR_YELLOW,A1 + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVI ROBO_WHITE,A1 ;WHITE ON ORANGE DURING HOT MOMENT + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + + MOVE @LAST_BUT,A8,L ;GET BUTTON BACK + MOVI 08H,A9 ;MINIMUM TIME FOR BUTTON HIGHLITE + +; MOVI 2AH,A10 ;.5 SECONDS OF ADVANCE HOLD-DOWN +* ;WILL EXIT TEST MODE. +WAIT_FOR_RELEASE: +; CMPI ADV_HIGH,A8 ;IS IT ADVANCE BUTTON? +; JRNZ NOT_ADV ;NOPE.....NEVER MIND + +; DEC A10 ;1 LESS TIME UNIT +; JRZ DIAG_EX ;IF HE HOLDS ADVANCE...WE'RE GONE! + +;NOT_ADV: + SLEEPK 1 + + MOVE A9,A9 ;REDUCE FOR HELD TIME + JRZ WAIT_1 ;ZEROED OUT ALREADY. + DEC A9 + +WAIT_1: + CALLR FORM_SWS ;WAIT FOR THIS ONE TO GO TO ZERO + AND A8,A0 ;IS OUR BUTTON STILL DOWN? + JRNZ WAIT_FOR_RELEASE +* +* ITS RELEASED...NOW SHOW ORANGE BAR FOR MINIMUM TIME + + INC A9 ;MAKE SURE A9 HAS 1 OR MORE +WAIT_2: + SLEEPK 1 + DSJS A9,WAIT_2 + +DONT_WAIT: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT SELECTION + CLR A1 ;ERASE BAR + CALLR MENU_BAR ;CHANGE THE BAR COLOR. + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_COLR),A1,W ;RE-PLOT THE NORMAL TEXT + JSRP MENU_TEXT + + SLEEPK 2 ;NOW GIVE SOME BOUNCE PROTECTION. + + RETP + + .STRING "NNBBAA JJAAMM -- CCOOPPYYRRIIGGHHTT 11999933 " + .STRING "MMIIDDWWAAYY MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY.. " + .STRING "AALLLL RRIIGGHHTTSS RREESSEERRVVEEDD.. " + .STRING "DDEESSIIGGNNEEDD BBYY:: MMAARRKK TTUURRMMEELLLL " + .STRING "SSHHAAWWNN LLIIPPTTAAKK TTOONNYY GGOOSSKKIIEE " + .STRING "JJOOHHNN CCAARRLLTTOONN SSAALL DDIIVVIITTAA " + .STRING "JJOOHHNN HHEEYY AANNDD JJAAMMIIEE RRIIVVEETTTT.. " + .STRING "SSPPEECCIIAALL TTHHAANNKKSS TTOO:: LLIINNDDAA DDEEAALL " + .STRING "AANNDD GGEEOORRGGEE PPEETTRROO.." + .even + +************************************************************************** +* * +* STUFF_MENU_PROCESS * +* * +* THIS IS CALLED TO STUFF THE MENU ROM DATA INTO THE * +* CURRENT PROCESSES PDATA AREA. * +* * +************************************************************************** +STUFF_MENU_PROCESS: + MMTM SP,A0,A1,A2,A3,A8 + MOVE A13,A0 ;POINT IN PROCESS AREA + ADDI MEN_ROM,A0 ;THIS IS WHERE 1ST TIDBIT GOES + MOVE A8,*A0+,L ;STORE OUR BASE POINTER IN STRUCTURE + ADDI MR_WORDS,A8 ;MOVE TO WORD LIST + + MOVI WORD_ENTS,A2 ;NOW THIS MANY MORE WORDS. + +GMS1: + MOVE *A8+,A1 + MOVE A1,*A0+ + DSJS A2,GMS1 +* +* ALL THE MENU PARAMETERS ARE NOW IN THE PDATA AREA. +* A8 POINTS AT THE FIRST ITEM TO DISPLAY. +* + MOVE A8,*A13(MEN_TPTR),L ;STORE IN PROCESS AREA. +* +* NOW WE WANT TO FIND THE NUMBER OF ENTRIES IN THE MENU +* + CLR A0 ;START AT #1. +HOW_MANY: + INC A0 ;MOVE TO NEXT ENTRY. + CALLR GET_MENU_DATA ;GET THE PARAMETERS FOR THIS ENTRY + MOVE A2,A2 ;AND SEE IF A2=0 + JRNZ HOW_MANY ;ITS REAL.....PUT IT UP. + + DEC A0 ;PREVIOUS LINE WAS THE LAST. + MOVE A0,*A13(MEN_ENTS),W ;STUFF NUMBER IN MENU. + + MOVE A9,A9 ;DID BOZO PASS ZERO AS CURRENT? + JRZ USE_LAST + CMP A0,A9 ;MAKE SURE ITS NOT TOO HIGH + JRHI USE_LAST ;A9 IS TOO HIGH + MOVE A9,A0 ;USE THE ONE PAST + +USE_LAST: + MOVE A0,*A13(MEN_CUR),W ;MAKE ENTRY "1" CURRENT. + MMFM SP,A0,A1,A2,A3,A8 + RETS + +************************************************************************** +* * +* DO_MENU_LINE * +* * +* A0 HAS THE LINE TO DO. (1 THROUGH N). * +* PRINT TEXT NORMAL IF NOT "MEN_CUR". * +* PRINT INVERT BAR FOLLOWED BY BLACK TEXT IF * +* ITS THE CURRENT ENTRY. * +* * +************************************************************************** +DO_MENU_LINE: + CALLR GET_MENU_DATA ;GET "CURRENT" IN A1 + CMP A0,A1 ;IS IT "CURRENT" ENTRY? + JRZ DO_CURRENT_ENT ;YEP....DO INVERSE STUFF +* +* A0 HAS OFFSET (FOR POSITIONING) +* A2 HAS TEXT POINTER (FOR MESSAGE) +* A1 NEEDS COLOR FOR MESSAGE. +* + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +DO_CURRENT_ENT: + MOVI ROBO_WHITE,A1 ;DO THE BAR IN WHITE (AT A0 HEIGHT) + CALLR MENU_BAR ;PUT IT UP (A0 PRESERVED) + + CALLR GET_MENU_DATA ;GET OUR TEXT POINTER BACK + MOVE *A13(MEN_SCOL),A1,W ;GET "SELECTED" COLOR + JSRP MENU_TEXT ;AND WRITE INVERTED TEXT + RETP ;THAT'S ALL FOLKS. + +************************************************************************** +* * +* UN_SELECT * +* * +* THIS IS CALLED TO "UN-SELECT" THE CURRENT ENTRY. * +* * +************************************************************************** +UN_SELECT: + MOVE *A13(MEN_CUR),A0,W ;POINT AT CURRENT ENTRY + CLR A1 ;USE BLACK FOR BACKGROUND + CALLR MENU_BAR ;THIS REMOVES THE BAR. + + CALLR GET_MENU_DATA ;NOW GET A2 TO TEXT POINTER + MOVE *A13(MEN_COLR),A1,W ;USE THE NORMAL ENTRY COLOR + JSRP MENU_TEXT ;PUT UP THE "TEXT" PORTION. + RETP ;AND RETURN + +************************************************************************** +* * +* MENU_BAR * +* * +* THIS IS CALLED TO PUT UP THE SELECTION BAR FOR * +* THE ENTRY IN A0, IN THE COLOR IN A1. * +* * +* THIS ROUTINE MUST PRESERVE A0. * +* * +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING * +* A8 = PTR TO STRING * +* A10 = [Y,X] SPACING OF STRING * +* A11 = PTR TO FONT TABLE * +* RETURNS: * +* A7 = LENGTH OF STRING * +* Z BIT SET IF LENGTH IS ZERO * +* +* FOR FILLAREA +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +MENU_BAR: + MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + MMTM SP,A1 ;SAVE COLOR! + CALLR GET_MENU_DATA ;GET THE TEXT POINTER + CALLR STLEN_SETUP ;SETUP FOR STRLEN CALL. + CALLA STRNGLEN ;FIND WIDTH OF STRING. +* +* A7 HAS LENGTH OF STRING. +* +* WE NEED TO GET INTO A3 THE COORDINATES UF UPPER LEFT +* AND A4 THE LENGTH. +* +* IF WE'RE CENTERING, WE USE THE BAR WIDTH PARAMETER +* ALONG THE CENTER LINE. +* +* IF WE'RE LEFT JUSTIFIED, WE'LL LET THE BOX GO THE +* LENGTH OF THE TEXT FOR NOW. +* + MOVE *A13(MEN_ULX),A3,W ;LEFT X IN A3 +* +* IF WE'RE CENTERING....WE NEED TO MOVE THE "LEFT X" BACK HALF +* THE WIDTH OF THE STRING. +* + MOVE *A13(MEN_ROM),A6,L ;GET ROM POINTER + MOVE *A6(MR_TCAL),A6,L ;CHECK ROUTINE + CMPI STRCNRM,A6 + JRNZ NOT_CENTERING +* +* WE'RE CENTERING....CENTER X IS IN A3 +* + MOVE *A13(MEN_BWID),A7,W ;A7 IS THE REGISTER FOR BAR WIDTH + MOVE A7,A4 ;GET COPY IN A4 + SRL 1,A4 ;1/2 OF WIDTH COMES OFF OF CENTER + SUB A4,A3 ;A3 NOW HAS "LEFT X" + JRUC CENTERING ;A7 IS WIDTH...A3 IS X + +* +* LEFT JUSTIFIED....DO IT THE OLD WAY! +* +NOT_CENTERING: + MOVE *A13(MEN_BDX),A4,W ;GET EXTRA X UNITS FOR BAR + SUB A4,A3 + +* NOW ADD TWICE THE EXTRA X TO THE STRING LENGTH TO +* FORM THE BAR LENGTH. +* + SLL 1,A4 ;NOW DOUBLE THE EXCESS DX FOR BAR + ADD A4,A7 ;NOW A7 HAS WIDTH OF BAR + +CENTERING: + SUBI C_KLUDGE,A3 ;KLUDGE TO NULLIFY FINAL SPACE. + + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + + MOVE *A13(MEN_BDY),A6,W ;GET BAR DY (NEGATIVE) + ADD A6,A5 ;ADJUST Y BY BAR DY + SLL 16,A5 ;SHIFT Y INTO POSITION + + ADD A5,A3 ;A3 NOW POINTS AT UPPER LEFT + + MOVE *A13(MEN_BAR),A4,W ;Y HEIGHT OF BAR + SLL 16,A4 ;IN POSITION + ADD A7,A4 ;A7 HAS X WIDTH OF BAR. + + MMFM SP,A1 ;NOW GET COLOR BACK! + SLL 16,A1 ;SHIFT COLOR TO HIGH HALF (PAL. 0) + CALLA FILLAREA ;FILL IT UP! + + MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8 ;SAVE THE OFFSET + RETS + +************************************************************************** +* * +* MENU_TEXT * +* * +* THIS IS CALLED TO DISPLAY THE TEXT FOR AN ENTRY. * +* * +* A0 HAS OFFSET (FOR POSITIONING) * +* A1 HAS COLOR FOR MESSAGE. * +* A2 HAS TEXT POINTER (FOR MESSAGE) * +* * +* WE NEED TO SHIFT THE DATA FOR THE TEXT ROUTINE * +* AS FOLLOWS: * +* * +* A0 = SLEEP * +* A6 = COLOR * +* A8 = POINTER * +* A9 = ADDRESS * +* A10 = SPACING * +* A11 = FONT * +* * +************************************************************************** +MENU_TEXT: + CALLR GET_ENTRY_Y ;GET Y FOR ENTRY IN A5 + SLL 16,A5 ;SHIFT Y INTO POSITION + MOVE *A13(MEN_ULX),A9,W ;GET THE X + ADD A5,A9 ;A9 SET WITH SCREEN ADDRESS + + MOVE A1,A6 ;COLOR + CLR A0 ;NO SLEEP + + CALLR STLEN_SETUP + + MOVE *A13(MEN_ROM),A1,L + MOVE *A1(MR_TCAL),A1,L ;GET THE ROUTINE TO USE + JUMP A1 ;AND CALL IT! + +STLEN_SETUP: + MOVE A2,A8 ;TEXT POINTER + MOVI SPACING20,A10 ;SPACING + MOVE *A13(MEN_ROM),A11,L + MOVE *A11(MR_FONT),A11,L ;LOAD FONT + RETS + +************************************************************************** +* * +* MENU JOYSTICK HANDLING * +* * +************************************************************************** +ST_STICK: + CALLR FORM_SWS ;THIS LATCHES ANYONE ALREADY DOWN. + CLR A0 + MOVE A0,*A13(MEN_ACT),L ;SHOW THAT WE'RE "ACTING" ON NONE. + MOVE A0,*A13(MEN_TYPO),W ;CLEAR TYPOMATIC COUNTER. + MOVE A0,*A13(MEN_HITS),W ;CLEAR OUT "CONSECUTIVE HITS" + RETP +* +* GETSTICK......RETURN DEBOUNCED/TYPOMATIC FOR +* UP AND DOWN......OR EDGE OUT +* ANY BUTTON....(INCLUDING ADVANCE) +* +* RETURN A0= +* +* NOTHING = 0 +* UP = 1 +* DOWN = 2 +* BUTTON = 3 +* +* A2 = BUTTON BIT ON BUTTON HITS +* +UP_OR_DOWN EQU UP_BITS+DOWN_BITS +TYPO_COUNT EQU 4 +TYPO_STALL EQU 25 +MENU_TYPO EQU (TYPO_COUNT*10000H)+14 ;14 HITS FOR MENU TILL STUCK + +* +* TO USE THIS.......FIRST JSRP ST_START. +* THIS STICKS CLOSED SWITCHES AND +* INITIALIZES COUNTERS. +* +* DATA IS STORED IN YOUR PDATA +* AREA.....AT AREAS DETERMINED +* BY THE "MEN_" STRUCTURE. THESE +* LOCATIONS MUST BE AVAILABLE. +* +* A8-A11 ARE NOT TOUCHED. +* +* AFTER ST_START.....READ AS FOLLOWS. +* +* +* LOOP SLEEP 1 +* MOVI TYPO_PARMS,A5 +* JSRP GETSTICK +* +* +* +* +* JRUC LOOP +* +* +* INPUT A5-----TOP HALF IS TYPOMATIC RATE +* LOW HALF IS COUNT TILL STICK IS CALLED STUCK +* +GETSTICK: + MOVE A5,A6 + SRL 16,A5 ;TYPO RATE IN A5 + ANDI WORD_MASK,A6 ;STUCK HIT COUNT IN A6 + + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. +* +* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1. +* + NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE! + + AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE. + MOVE A0,A4 ;KEEP NEW EDGE STATE IN A4! + + ANDI BUTTONS|START_BITS,A0 ;BUTTON SAYS ACT....IGNORE STICK! + JRNZ TEST_BUTS ;NEW BUTTON......RETURN IT! +* +* NO BUTTON.....DO STICK TYPOMATIC STUFF! +* + MOVE *A13(MEN_ACT),A2,L ;IS THERE ONE TO WATCH? + JRZ NEW_SCAN ;NOPE....LOOK FOR NEW STUFF! +* +* WE HAVE ONE THAT'S DOWN THAT WE WANT TO WATCH. +* + CALLR FORM_SWS ;SEE WHAT THEY LOOK LIKE NOW. + AND A2,A0 ;IS IT STILL MADE? + JRZ GS_STICK_OPEN ;NOPE.......CLEAR OUT ITS STATE. +* +* ITS STILL MADE........DO TYPOMATIC. +* + MOVE *A13(MEN_TYPO),A1,W ;DECREMENT TYPOMATIC COUNTER + DEC A1 + MOVE A1,*A13(MEN_TYPO),W ;AND PUT BACK IN MEMORY + JRNZ GS_ZERO ;NOT TIME YET.....RETURN NOTHING +* +* WE HAVE A TYPOMATIC HIT.....WE NEED TO TURN SWITCH BIT (A0) +* INTO "UP" OR "DOWN" AND RE-LOAD TYPOMATIC COUNTER. +* +* + MOVE *A13(MEN_HITS),A1,W ;GET NUMBER OF HITS + INC A1 ;AFTER 15 TYPOS.....KILL TILL OPEN! + MOVE A1,*A13(MEN_HITS) ; + CMP A6,A1 ;TOO MANY HITS? + JRHS GS_GONE ;YEP....CALL THIS "STUCK" + MOVE A5,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER RELOADED. + +RETURN_UP_DOWN: + MOVE A0,A1 ;GET THE BIT + MOVE A1,A2 ;MAKE A COPY + MOVK 1,A0 ;ASSUME UP + ANDI UP_BITS,A1 ;IS IT AN "UP" BIT + JRNZ GS_X ;YEP...RETURN UP. + MOVK 2,A0 ;ASSUME DOWN + ANDI DOWN_BITS,A2 ;IS IT A "DOWN" BIT + JRNZ GS_X ;YEP...RETURN "DOWN" +* +* NOT A TYPOMATIC CONDITION. +* + +GS_GONE: + CLR A0 ;CLEAR OUT CURRENT HIT. + MOVE A0,*A13(MEN_ACT),L ;INDICATE READY FOR NEXT HIT! + JRUC GS_X ;AND RETURN THIS ZERO (NOTHING!) +* +* STICK THAT WAS CLOSED OPENED......STOP BOUNCE UPWARD! +* +GS_STICK_OPEN: + SLEEPK 6 + JRUC GS_GONE ;NOW.....CLEAR OUT FOR NEXT HIT. +* +* CONTROL COMES HERE WHEN NO BUTTONS ARE PENDING. +* +NEW_SCAN: + MOVE A4,A0 ;LOOK AT THE NEW EDGES. + + ANDI UP_OR_DOWN,A0 ;IS IT UP OR DOWN? + JRZ GS_ZERO ;NO STICK....RETURN NO ACTION! + + CALLR FRST_BIT ;REDUCE TO ONE BIT. + MOVE A0,*A13(MEN_ACT),L ;STORE THIS BIT + + MOVI TYPO_STALL,A1 + MOVE A1,*A13(MEN_TYPO),W ;TYPOMATIC COUNTER SET FOR LONG STALL. + + CLR A1 + MOVE A1,*A13(MEN_HITS),W ;LOAD UP A BUNCH OF HITS + JRUC RETURN_UP_DOWN ;RETURN CORRECT CODE UP OR DOWN +* +* NOT UP OR DOWN......SEE IF ITS A BUTTON. +* +TEST_BUTS: +* +* ITS A BUTTON...ALL NEW BUTTON EDGES IN A0 +* + CALLR FRST_BIT ;USE 1 OF THEM. + + MOVE A0,A2 ;RETURN THE BIT. + + MOVI 3,A0 ;RETURN THAT ITS A BUTTON. + JRUC GS_X ;STUCK PROCESSING WILL BE AUTOMATIC. + +GS_ZERO: + CLR A0 ;RETURN NO SWITCH. +GS_X: + RETP + +************************************************************************** +* * +* FRST_BIT * +* * +* A0 HAS 1 OR MORE BITS SET....RETURN 1 OF THEM. * +* * +************************************************************************** +FRST_BIT: + MMTM SP,A1,A2 + MOVK 1,A1 ;SHIFT TILL WE FIND IT. +FB1: + MOVE A0,A2 + AND A1,A2 + JRNZ GOT_IT ;WE HAVE ON (IN A1) + SLL 1,A1 ;SHIFT IT + JRUC FB1 +GOT_IT: + MOVE A1,A0 ;RETURN THE BIT + MMFM SP,A1,A2 + RETS + +************************************************************************** +* * +* FORM_SWS * +* * +* GET THE SWITCHES....1=CLOSED.....AND SAVE * +* THIS SCAN AS "LAST STATE". RETURN: * +* * +* CURRENT STATE IN A0 * +* PREVIOUS STATE IN A1 * +* * +************************************************************************** +FORM_SWS: + callr fudge_switches + + move *a13(MEN_STIK),a1,L ;RETURN PREVIOUS STATE + move a0,*a13(MEN_STIK),L ;SAVE "STUCK" STATE. + rets + +************************************************************************** +fudge_switches + move @_switch_addr,a0,L + move *a0,a0,W + move @_switch2_addr,a1,L + move *a1,a1,W + and a1,a0 + sll 16,a0 + srl 16,a0 + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + + move @_switch_map_mode,a1,L ;Are we mapping switches? + jrz _switch_mapping_done ; br=no + cmpi 2,a1 + jrgt _no_adjustment_mapping + + move a0,a1 ;Make vol +,- be P1 dn,up + srl 16+11,a1 + ori 0fffffffch,a1 + and a1,a0 + + move a0,a1 ;Make serv,test be P1 C,A + srl 16,a1 + ori 0ffffffafh,a1 + and a1,a0 + + move @_switch_map_mode,a1,L + cmpi 1,a1 + jrz _switch_mapping_done + + movi 00400000h,a1 + or a1,a0 ; No Service button in adjust mode + jruc _switch_mapping_done + +_no_adjustment_mapping + cmpi 3,a1 ; Are we in any button mapping mode + jrnz _no_any_mapping ; Nope - go check other modes + + move a0,a1 ;Make vol +,- be P1 C,B + srl 16+6,a1 + ori 0ffffff9fh,a1 + and a1,a0 + + move a0,a1 ;Make test be P1 A + srl 16,a1 + ori 0ffffffefh,a1 + and a1,a0 + + move a0,a1 ;Make serv be P1 D + srl 16-1,a1 + ori 0ffffff7fh,a1 + and a1,a0 + + move a0,a1 ;Make start1 be P2 A + srl 16-10,a1 + ori 0ffffefffh,a1 + and a1,a0 + + move a0,a1 ;Make start2 be P2 B + srl 16-8,a1 + ori 0ffffdfffh,a1 + and a1,a0 + + move a0,a1 ;Make start3,4 be P2 C,D + srl 16-5,a1 + ori 0ffff3fffh,a1 + and a1,a0 + +_no_any_mapping +_switch_mapping_done + not a0 + rets + + +************************************************************************** +*SPECIAL DIAGNOSTIC VERSION OF fudge_switches +*USE FCALL WITH B6 AS THE RETURN REGISTER WHEN CALLING. +* +fudge_switches_diag +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + or a1,a0 + not a0 ;COMPLEMENT + move @_switch2_addr,a1,L + move *a1,a1 + not a1 + move a1,a14 + andi 0011b,a14 + sll 6,a14 + or a14,a1 + or a1,a0 + FRET B6 + + +;fudge_switches_diag +; +; move @SWITCH,a0,L ;GET BOTH SWITCH WORDS +; not a0 ;COMPLEMENT +; +; move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players +; jrnz #2_plyrs2 +; +; move @SWITCH+20h,a1 ;move P3UP & P3DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4UP & P4DOWN into low 32 bits +; not a1 +; andi 011b,a1 +; or a1,a0 +; +; move @SWITCH+20h,a1 ;move P3 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +; move @SWITCH+28h,a1 ;move P4 ACTION buttons into low 32 bits +; not a1 +; andi 01110000b,a1 +; or a1,a0 +; +;#2_plyrs2 +; FRET B6 + +************************************************************************** +fudge_switches2 + + callr fudge_switches + move @fswitches_cur,a1,L + move a1,@fswitches_last,L + move a0,@fswitches_cur,L + xor a0,a1 ;bits that have changed + and a0,a1 ;down transitions only + move a1,@fswitches_down,L + + rets + +************************************************************************** +* * +* GET_MENU_DATA * +* * +* A0 IS OFFSET OF ENTRY OF INTEREST * +* * +* RETURN A1 = CURRENT OFFSET * +* A2 = TEXT POINTER * +* A3 = ROUTINE * +* * +************************************************************************** +GET_MENU_DATA: + MMTM SP,A0 ;DON'T ALTER A0 + + CALLR PM_ENTRY ;POINT A1 AT ENTRY + + MOVE *A1(MENU_TEXT_PTR),A2,L ;FETCH THE TEXT POINTER + MOVE *A1(MENU_ROUTINE),A3,L ;FETCH THE ROUTINE + MOVE *A13(MEN_CUR),A1,W ;RETURN CURRENT ENTRY IN A1 + MMFM SP,A0 ;DON'T ALTER A0 + RETS + +************************************************************************** +* * +* PM_ENTRY * +* * +* A0 = MENU ENTRY OF INTEREST * +* RETURN A1 -> POINTS AT FOR THIS * +* ENTRY. * +* * +************************************************************************** +PM_ENTRY: + MMTM SP,A0 + DEC A0 ;INDEX FROM ZERO + MOVI MENU_ENTRY_SIZE,A1 ;TIMES SIZE PER ENTRY + MPYU A0,A1 ;A1 CONTAINS OFFSET INTO TABLE + + MOVE *A13(MEN_TPTR),A0,L ;GET THE BASE OF THE MENU TEXT ENTRIES + ADD A0,A1 ;ADD TO OFFSET + MMFM SP,A0 + RETS + +************************************************************************** +* * +* PLOT_HELP * +* * +* THIS ROUTINE PLOTS (OR CLEARS) THE HELP AREA * +* FOR THE CURRENT ENTRY. * +* * +************************************************************************** +PLOT_HELP: + MOVE *A13(MEN_CUR),A0,W ;GET CURRENT ENTRY + CALLR PM_ENTRY ;A1 POINTS AT GROUP + MOVE *A1(MENU_HELP),A8,L ;GET HELP TABLE + CMPI NO_HELP,A8 ;NOT A "HELP" SITUATION? + JRZ NO_HELP_FOR_THIS_ONE + CMPI ADJ_HELP,A8 ;ADJUSTMENT HELP REQUESTED? + JAEQ DO_ADJH ;THEN DO IT IN ADJ MODULE! +; CMPI SND_HELP,A8 ;ARE WE IN SOUND TEST? +; JREQ DO_SHELP +; CMPI SND_PLAY,A8 +; JREQ DO_SPLAY + CALLR DO_HELP_MENU +NO_HELP_FOR_THIS_ONE: + RETS + +************************************************************************** +* * +* DO_SHELP * +* * +* THIS IS CALLED FOR EACH NON PLAYING ENTRY IN THE SOUND * +* TABLE MENU. IT CAUSES THE SOUND BOARD TO BE SHUT * +* UP AND THE BOTTOM LINE (WHERE TITLES APPEAR) * +* TO BE ERASED. * +* * +************************************************************************** +;DO_SHELP: +;; MOVE @SND_MADE,A0,W ;DID SOMEONE MAKE A SOUND? +;; JRZ DO_SH1 ;NOPE +;; CLR A0 +; MOVE A0,@SND_MADE,W ;CLEAR THIS AND RESET THE BOARD! +; MOVE A0,@SCODE,W +; MOVE A0,@DCODE,W +; CALLA QSNDRST ;kill any sounds in progress +;DO_SH1: +; CALLR BLNKSNAM ;BLANK OUT ANY WRITING! +; RETS +;* +;* A0 CONTAINS 3 FOR SYNTHESIZER...4 FOR DIGITIZER... +;* IF CORRESPONDING "CODE" BYTE IS NON ZERO, THEN DISPLAY +;* THE TEXTLINE THAT CORRESPONDS. ELSE BLANK OUT THE +;* AREA. +;* +;DO_SPLAY: +; CALLR BLNKSNAM ;BLANK OUT LAST MESSAGE +; CMPI 3,A0 ;SYNTHESIZER? +; JRZ CK_SYNT ;YEP. +;* +;* DIGITIZER. +;* +; MOVE @SCODE,A1,W ;HOLD INFO IF SYNTH WAS RUNNING +; CLR A0 +; MOVE A0,@SCODE,W ;CLEAR OUT SYNTH CODE +; MOVE @DCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE.....SHUT UP SOUND SYS. +; +; MOVI DTABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; JRUC DO_SP1 ;PRINT THE STRING. +; +; +;CK_SYNT: +; MOVE @DCODE,A1,W ;HOLD INFO IF DIGITIZER WAS RUNNING +; CLR A0 +; MOVE A0,@DCODE,W ;CLEAR OUT DIG CODE +; MOVE @SCODE,A0 ;ANY CODE +; JRZ DO_SPQX ;NOTHING HERE. +; +; MOVI STABLE,A1 ;BASE OF POINTER TABLE FOR DIGITIZER +; +;DO_SP1: +; CALLR MEN_NUMS ;A4 = LEFT X A5 = RIGHT X +; ADDI 10000H*SND_MESS_Y,A4 ;UPPER LEFT Y +; ADDI 10000H*(SND_MESS_Y+SND_BOX_H),A5 ;UPPER LEFT X +; MOVI ROBO_WHITE,A9 +; CALLR STD_BORD +; +; DEC A0 ;INDEX FROM 1. +; SLL 5,A0 +; ADD A0,A1 +; MOVE *A1,A2,L ;NOW WE HAVE THE MESSAGE +; +; MOVI SND_INST,A8 +; JSRP L_MESS ;PUT INSTRUCTION OUT. +; +; MOVI SND_SETUP,A8 +; CALLA LM_SETUP +; +; MOVE A2,A8 +; JSRP LM_FINIS ;DO THE DEED +; RETS ;AND RETURN +; +;DO_SPQX: +; MOVE A1,A1 ;OUR SELECTION ISN'T RUNNING...WAS OTHER? +; JRZ DO_SPX ;NOPE +; CALLA QSNDRST ;KILL SOUNDS IN PROGRESS +; CLR A0 +; MOVE A0,@SND_MADE,W ;NO RESET NECESSARY NOW +;DO_SPX: +; RETS +; +;************************************************************************** +;* * +;* BLNKSNAM * +;* * +;* CALLED TO BLANK OUT THE SOUND CODE NAME DURING * +;* SOUND TEST. * +;* * +;************************************************************************** +;* +;* A3 = POINTER +;* A4 = SIZE +;* +;BLNKSNAM: +; MOVI (SND_MESS_Y*10000H)+20H,A3 +; MOVI (SND_BOX_H*10000H)+1E0H,A4 +; JAUC BLNKAREA ;ITS BLANK! +; +************************************************************************** +* * +* GET_ENTRY_Y * +* * +* THIS RETURNS THE Y POSITIONS FOR THE ENTRY SPECIFIED * +* IN A0. * +* * +* A5 = Y VALUE IN UNITS. * +* * +************************************************************************** +GET_ENTRY_Y: + MMTM SP,A0,A1 + MOVE *A13(MEN_ULY),A5,W + MOVE *A13(MEN_DY),A1,W + DEC A0 + MPYU A0,A1 ;A1 HAS OFFSET PER ENTRY + ADD A1,A5 + MMFM SP,A0,A1 + RETS + +************************************************************************** +* * +* MENU_BORDER * +* * +* THIS IS CALLED TO PUT A BORDER AROUND THE MENU. * +* * +* A8 = MENU STRUCTURE * +* A9 = 1st item to activate as current * +* * +* BORDER IS DONE IN MENU TEXT COLOR * +* * +* THIS ASSUMES MENU IS IN THE CENTERING FORMAT * +* * +************************************************************************** +* +* 1ST WE NEED TO FIND UPPER LEFT. +* +* +* X = MENU_X - (BAR_WIDTH/2) - 2 (LESS BORDER WIDTH) +* Y = MENU_Y - BDY (LESS BORDER HEIGHT) +* +* LOWER RIGHT : +* +* X = MENU_X + (BAR_WIDTH/2) - 2 (PLUS BORDER WIDTH) +* Y = MENU_Y + (MENU_ENTRIES-1) * DY)) - BDY + BAR_HITE +* +* +MENU_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + CALLR STUFF_MENU_PROCESS ;MOVE DATA INTO PDATA AREA +* +* FIRST COMPUTE UPPER LEFT +* + CALLR MENU_UL_A4_A5 ;GET UPPER LEFT COORDINATES + SLL 16,A5 + ADD A5,A4 ;A4 POINTS TO UPPER LEFT. +* +* FORM LOWER RIGHT +* + CALLR MENU_LR_A6_A5 + SLL 16,A5 ;SHIFT A5 DOWN + ADD A6,A5 ;A5 POINTS AT LOWER RIGHT + + MOVE *A13(MEN_COLR),A9,W ;GET MENU TEXT COLOR + CALLR STD_BORD + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +************************************************************************** +* * +* MCSETUP * +* * +* RETURN: * +* A0 = CENTER OF MENU * +* A1 = 1/2 BAR WIDTH * +* A2 = Y FOR FIRST LINE OF TEXT OF MENU * +* A3 = DELTA Y (NEGATIVE TO GET FROM TEXT TO BAR. * +* * +************************************************************************** +MCSETUP: + MOVE *A13(MEN_ULX),A0,W ;UPPER LEFT X (ACTUALLY CENTER) + MOVE *A13(MEN_BWID),A1,W ;BAR_WIDTH + SRL 1,A1 ;ALL CALCS USE BAR_WIDTH/2 + MOVE *A13(MEN_ULY),A2,W ;UPPER LEFT Y + MOVE *A13(MEN_BDY),A3,W ;DELTA Y (NEGATIVE) + RETS + + +************************************************************************** +* * +* MENU_UL_A4_A5 * +* * +* RETURN WINDOW UPPER LEFT CORNER * +* * +* A4 = X * +* A5 = Y * +* * +************************************************************************** +MENU_UL_A4_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + MOVE A0,A4 ;FORM ULX + SUB A1,A4 + SUBI C_KLUDGE,A4 ;A4 HAS UPPER LEFT X + + MOVE A2,A5 + ADD A3,A5 ;A5 HAS UPPER LEFT Y + + SUBI MB_XWID+GAP,A4 ;NOW WE POINT AT UPPER LEFT FOR FRAME + SUBI MB_YWID+GAP,A5 + MMFM SP,A0,A1,A2,A3 + RETS + +************************************************************************** +* * +* MENU_LR_A6_A5 * +* * +* RETURN WINDOW LOWER RIGHT CORNER * +* * +* A6 = X * +* A5 = Y * +* * +************************************************************************** +MENU_LR_A6_A5: + MMTM SP,A0,A1,A2,A3 + CALLR MCSETUP ;STUFF THE REGGIES + + MOVE A0,A6 ;LOWER RIGHT X + ADD A1,A6 + SUBI C_KLUDGE,A6 ;THIS IS THE X + + MOVE *A13(MEN_ENTS),A0,W ;THIS IS LAST ENTRY + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE LAST ENTRY + ADD A3,A5 ;A5 NOW HAS TOP OF LAST BOX + MOVE *A13(MEN_BAR),A7,W ;HEIGHT OF BAR + ADD A7,A5 ;A5 NOW HAS LOWER RIGHT Y + + ADDI MB_YWID+GAP,A5 + ADDI MB_XWID+GAP,A6 ;THIS IS END OF BORDER + MMFM SP,A0,A1,A2,A3 + RETS + + +************************************************************************** +* * +* F_TITLE * +* * +* THIS IS CALLED TO FRAME A TITLE IN THE SAME WIDTH * +* AS THE MAIN TITLE. * +* * +* A0 = Y LEVEL OF 15 POINT TEXT * +* A9 = COLOR * +* * +************************************************************************** +F_TITLE: + MMTM SP,A4,A5,A0 + MOVE A0,A4 ;COPY Y + SUBI 12,A4 + SLL 16,A4 + ADDI TIT_ULX,A4 ;UPPER LEFT SET + + MOVE A0,A5 ;LOWER RIGHT + ADDI 27,A5 + SLL 16,A5 + ADDI TIT_LRX,A5 ;LOWER RIGHT SET + + CALLR STD_BORD + MMFM SP,A4,A5,A0 + RETS + +FIRST_BORDER_COLOR EQU 0E0E0H +LAST_BORDER_COLOR EQU 0EFEFH +************************************************************************** +* * +* G_BORDER * +* * +* THIS IS CALLED TO DO A "HSTD TABLE" TYPE CYCLING * +* BORDER. THIS ROUTINE GETS: * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A6 = NUMBER OF SLICES GOING IN. * +* * +************************************************************************** +G_BORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6 + MOVI 10001H,A0 ;1 BY 1 DIMENSION + + MOVI LAST_BORDER_COLOR,A9 ;USE LAST ONE 1ST +NEXT_RING: + CALLR DOBORDER ;DO THIS RING + + MOVI 10001H,A1 ;THIS IS 1 UNIT IN X AND Y + ADDXY A1,A4 + SUBXY A1,A5 + + SUBI 101H,A9 + CMPI FIRST_BORDER_COLOR,A9 + JRHS COLOK + MOVI LAST_BORDER_COLOR,A9 + +COLOK: + DSJS A6,NEXT_RING + MMFM SP,A0,A1,A2,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* DOBORDER * +* * +* THIS IS CALLED TO DRAW A BORDER FRAME. * +* * +* A4 = UPPER LEFT Y,X * +* A5 = LOWER RIGHT Y,X * +* A0 = Y,X WIDTH OF BORDER * +* A9 = COLOR OF BORDER. * +* * +* THIS ROUTINE *** CLEARS OUT ALL AREA INSIDE THE BORDER*** * +* AS A FUNCTION OF ITS OPERATION. * +* * +* THE BORDER IS DONE IN THE "ROBO" PALETTE * +* * +* IT IS ASSUMED THAT THE DISPLAY SYSTEM IS RUNNING! * +* * +************************************************************************** +* +* A1 = +* A3 = DAG OF AREA [YPOS,XPOS] +* A4 = [Y,X] SIZE OF AREA +* +DOBORDER: + MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + MOVE A9,A1 ;GET COLOR + SLL 16,A1 ;COLOR ON TOP..PALETTE 0 +* +* NOW WE NEED TO MAKE 4 BARS! +* + MOVE A0,A2 ;SEPARATE DELTA + ANDI SX_MASK,A0 + ANDI SY_MASK,A2 + + MOVE A4,A6 ;UPPER LEFTS HERE + MOVE A4,A7 + + MOVE A5,A8 ;LOWER RIGHTS HERE + MOVE A5,A9 + + ANDI SX_MASK,A6 ;LEFT X + ANDI SX_MASK,A8 ;RIGHT X + + ANDI SY_MASK,A7 ;TOP Y + ANDI SY_MASK,A9 ;BOTTOM Y + +* +* FIRST BAR GOES FROM ORIGINAL UL XY TO RIGHT X +* AND TOP Y+DELTA Y +* +* A3 IS ORIGINAL A4 PASSED. +* FORM DESTINATION IN A4 +* + MOVE A4,A3 + + MOVX A8,A4 + MOVY A7,A4 + ADDXY A2,A4 ;ADD THE DELTA + + CALLR DO_A_LINE ;DO THIS LINE +* +* GOING AROUND CLOCKWISE.....THIS ONE STARTS AT RIGHT X-DELTA +* AND TOP Y +* + MOVX A8,A3 + SUBXY A0,A3 + MOVY A7,A3 +* +* THIS IS THE NATURAL LOWER RIGHT CORNER +* + MOVX A8,A4 + MOVY A9,A4 + + CALLR DO_A_LINE +* +* NOW FOR BOTTOM LINE.....A4 IS STILL SET! +* + MOVX A6,A3 + MOVY A9,A3 + SUBXY A2,A3 + + CALLR DO_A_LINE +* +* LEFT WALL....FROM UPPER LEFT +* + MOVX A6,A3 + MOVY A7,A3 + + MOVX A6,A4 + ADDXY A0,A4 + MOVY A9,A4 + + CALLR DO_A_LINE + + MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9 + RETS + +DO_A_LINE: + MMTM SP,A4 + SUBXY A3,A4 ;FORM DISTANCE + CALLA FILLAREA ;AND DO THE FILL + MMFM SP,A4 + RETS + +STD_BORD: + MMTM SP,A0 + MOVI BORDER_SIZE,A0 + CALLA DOBORDER + MMFM SP,A0 + RETS +************************************************************************** +* * +* DO_HELP_MENU * +* * +* THIS IS CALLED TO DISPLAY A HELP MENU FOR THE CURRENT * +* MENU ENTRY. * +* * +* A HELP MENU IS DEFINED AS FOLLOWS: * +* * +* HM_JUST WORD 0=CENTER 1=LEFT * +* HM_COLOR WORD COLOR OF MENU * +* HM_ENTS WORD NUMBER OF LINES IN MENU * +* LONG LONG WORD POINTERS FOR EACH LINE! * +* * +* THE PROCESS AREA IS FILLED WITH THE CURRENT MENU * +* PARAMETERS. * +* * +* A8 = POINTER TO HELP MENU STRUCTURE ABOVE * +* * +************************************************************************** +DO_HELP_MENU: + CALLR BLNKHELP + + MOVE A8,A8 ;CHECK IF HELP MENU EXISTS. + JRZ DHMX ;NOPE JUST CLEARING WAS OUR JOB. + + MOVE *A13(MEN_CUR),A0,W ;THIS IS CURRENT ENTRY + MOVE A0,A11 ;PASS ENTRY NUMBER IN A11 + CALLR GET_ENTRY_Y ;A5 HAS THE Y FOR THE CURRENT ENTRY +* +* NOW WE NEED TO MOVE TO MAKE TOP ENTRY BOX LINE UP. +* + MOVE *A13(MEN_BDY),A10,W ;THIS IS NEGATIVE TO GIVE US BOX TOP + ADD A5,A10 ;NOW WE HAVE BOX TOP + + MOVE *A13(MEN_BAR),A5,W ;GET BAR HEIGHT + SRL 1,A5 ;FIND CENTER OF BAR + ADD A5,A10 ;NOW WE'RE AT BAR CENTER. + + MOVI H_SLAVE,A7 ;FORK OFF SO IT CAN USE PDATA! + CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH! +DHMX RETS + +************************************************************************** +* * +* BLNKHELP * +* * +* THIS IS CALLED TO BLANK OUT THE HELP AREA. IT IS * +* USED BY BOTH THE "NORMAL" HELP PLOTTER AND IS * +* CALLED BY THE ADJUSTMENT HELP PROGRAM. * +* * +* THIS RETURNS THE LEFT X FOR THE HELP MENU IN A9 * +* * +************************************************************************** +BLNKHELP: + MMTM SP,A3,A4,A5,A6 + CALLR MENU_LR_A6_A5 ;GET RIGHT X OF MAIN MENU IN A6 + MOVE A6,A9 ;PASS TO HELP MENU SLAVE +* +* NOW BLANK OUT THE "HELP" REGION +* + MOVE A6,A3 ;UPPER LEFT X OF REGION TO BLANK OUT + ADDI INST_ULY*10000H,A3 ;THIS IS UPPER LEFT OF BLOCK + + MOVI TIT_LRX+(10000H*400),A4 ;COORDINATE OF LOWER RIGHT OF HELP AREA + SUBXY A3,A4 ;THIS IS SIZE OF REGION TO BLANK + CALLA BLNKAREA ;BLANK OUT THE HELP AREA + ADDI BOX_XGAP,A9 ;RETURN X FOR HELP MENUS + MMFM SP,A3,A4,A5,A6 + RETS + +************************************************************************** +* * +* H_SLAVE * +* * +* THIS IS A PROCESS CREATED TO PLOT THE HELP BOX. * +* IT DOES ITS PLOTTING THEN DIES. THIS ALLOWS IT * +* TO USE THE PDATA AREA WITHOUT DISTURBING THE CALLER. * +* * +* A8 = POINTER TO HELP BOX STRUCTURE * +* A9 = LEFT MARGIN FOR THE HELP BOX. * +* A10 = Y OF CENTER OF BOX ...HIGH HALF IS ZERO FOR Y CENTING * +* IF HIGH HALF IS NON-ZERO, THEN THIS IS TOP OF BOX * +* * +************************************************************************** +HM_JUST EQU 0 +HM_COLOR EQU HM_JUST+WORD_SIZE +HM_ENTS EQU HM_COLOR+WORD_SIZE +HM_DATA EQU HM_ENTS+WORD_SIZE ;ENTRY POINTERS + +HS_ROUT EQU PDATA ;LONG-TEXT ROUTINE +HS_X EQU HS_ROUT+LONG_SIZE ;WORD-X FOR TEXT ROUTINE +HS_Y EQU HS_X+WORD_SIZE ;WORD-CURRENT Y +HS_ENTS EQU HS_Y+WORD_SIZE ;WORD-ENTRIES LEFT TO DO +HS_COLOR EQU HS_ENTS+WORD_SIZE ;WORD-COLOR OF MENU +HS_PTR EQU HS_COLOR+WORD_SIZE ;LONG-CURRENT TEXT POINTER + +H_SLAVE: +* +* A9 HAS RIGHT X OF MENU +* + MOVE A9,A1 ;PUT THIS X VALUE IN A1 + + MOVE *A8(HM_JUST),A0,W ;0 = CENTER 1=LEFT + JRZ HS_CENT ;CENTER....SETUP X ACCORDINGLY +* +* LEFT JUSTIFY....STORE ROUTINE +* + MOVI STRLNRM,A0 ;LEFT JUSTIFY ROUTIN +* +* NOW FORM X AS SOME MARGIN FROM WINDOW.... +* + ADDI MB_XWID+HELP_X_MARGIN,A1 ;ADD MARGIN TO FORM X FOR TEXT + JRUC CENTER_JOIN ;CONTINUE + +HS_CENT: + MOVI STRCNRM,A0 ;USE CENTERING ROUTINE +* +* A1 HAS LEFT X OF HELP BOX...FIND RIGHT X +* + ADDI TIT_LRX,A1 + SRL 1,A1 ;THIS IS CENTER X + +CENTER_JOIN: + MOVE A1,*A13(HS_X),W ;STORE X + MOVE A0,*A13(HS_ROUT),L ;STORE ROUTINE + + MOVE *A8(HM_ENTS),A1,W ;GET NUMBER OF ENTRIES + MOVE A1,*A13(HS_ENTS),W ;COUNT IT DOWN IN P-AREA + + MOVE *A8(HM_COLOR),A0,W ;GET COLOR + MOVE A0,*A13(HS_COLOR),W ;STASH IT + + ADDI HM_DATA,A8 ;POINT AT 1ST ENTRY + MOVE A8,*A13(HS_PTR),L ;NOW WE'RE READY. +* +* ALL PDATA AREA SET.....NOW WE NEED TO DRAW THE BORDER +* +* FOR DOBORDER +* +* A4 = UPPER LEFT Y,X +* A5 = LOWER RIGHT Y,X +* A0 = Y,X WIDTH OF BORDER +* A9 = COLOR OF BORDER. +* +* LOWER RIGHT X IS SUCH THAT IT LINES UP WITH TITLE BOX. +* THE Y IS A BIT TRICKIER......NUMBER OF ENTRIES IS +* SITTING IN A1 +* + MOVI HELP_DY,A5 ;DISTANCE PER ENTRY + MPYU A1,A5 ;DISTANCE FOR ALL ENTRIES + ADDI HELP_Y_MARGIN+(MB_YWID*2)+HELP_YLO_MARGIN,A5 +* +* A5 NOW CONTAINS FULL HEIGHT OF BOX +* +* NOW SEE IF WE'RE CENTERING ON A10 OR IF A10 IS THE TOP. +* + CALLR TOP_IN_A10 +* +* NOW FORM UPPER LEFT IN A4 +* + MOVE A10,A4 ;MOVE Y OVER + SLL 16,A4 ;MAKE ROOM FOR X + ADD A9,A4 ;PUT IN THE X...THIS IS UPPER LEFT! + + ADD A10,A5 ;ADD BASE TO OFFSET + SLL 16,A5 ;PUT IN Y POSITION + ADDI TIT_LRX,A5 ;ADD IN THE X FOR THE CORNER +* +* NOW ADJUST FROM TOP OF BOX TO POSITION OF +* 1ST ENTRY. +* + ADDI MB_YWID+HELP_Y_MARGIN,A10 ;Y OF 1ST ENTRY + MOVE A10,*A13(HS_Y),W ;PUT AWAY + + MOVE *A13(HS_COLOR),A9,W ;GET THE COLOR FOR DOBORDER + + CALLR STD_BORD +* +* NOW WE NEED TO WALK THROUGH AND PLOT THE HELP +* MENU ENTRIES. +* +* A0 = SLEEP +* A1 = ROUTINE +* A6 = COLOR +* A8 = POINTER +* A9 = ADDRESS +* A10 = SPACING +* A11 = FONT +* A14 = FLAGS +* +NEXT_HELP: + MOVE *A13(HS_PTR),A2,L ;GET OUR CURRENT POINTER + MOVE *A2+,A8,L ;GET THE CURRENT MESSAGE POINTER + MOVE A2,*A13(HS_PTR),L ;AND PUT POINTER BACK + + CLR A0 + MOVE *A13(HS_ROUT),A1,L ;ROUTINE IN A1 + MOVE *A13(HS_COLOR),A6,W ;STUFF COLOR + + MOVE *A13(HS_Y),A9,W ;GET Y + SLL 16,A9 ;SHIFT INTO PLACE + MOVE *A13(HS_X),A10,W + ADD A10,A9 ;A9 IS NOW POINTING AT SCREEN + + MOVI SPACING07,A10 ;SPACING + MOVI RD7FONT,A11 ;FONT IS BABY FONT + JSRP LM_FINIS ;PRINT IT OUT! + + MOVE *A13(HS_Y),A9,W ;GET THE Y + ADDI HELP_DY,A9 ;KICK IT + MOVE A9,*A13(HS_Y),W ;PUT IT BACK + + MOVE *A13(HS_ENTS),A0,W ;ENTRY COUNT + DEC A0 + MOVE A0,*A13(HS_ENTS),W ;PUT IT BACK + JRNZ NEXT_HELP + + JAUC SUCIDE ;OUR WORK IS DONE! + +************************************************************************** +* * +* TOP_IN_A10 * +* * +* THIS IS CALLED BY H_SLAVE TO GET THE UPPER LEFT * +* CORNER OF THE BOX IN A10. A10 HAS THE PASSED PARAMETER. * +* A5 HAS THE HEIGHT OF THE BOX. IF THE TOP HALF OF A10 * +* IS ZERO, THEN THEN WE WANT THE BOX CENTER AT THE * +* A10 LEVEL. IF THE TOP HALF OF A10 IS NON-ZERO THEN * +* A10 WAS PASSED AS THE TOP. * +* * +* RETURN A10 AS THE Y FOR THE TOP OF THE HELP BOX. * +* * +************************************************************************** +TOP_IN_A10: + MMTM SP,A5 + CMPI 0FFFFH,A10 ;IS THE TOP HALF ZERO? + JRHI TOP_IS_TOP ;TOP IS SET..RETURN + SRL 1,A5 ;TOP OF BOX IS HALF UP FROM MAIN MENU BAR CENTER + SUB A5,A10 ;NOW A10 HAS Y BASE OF BOX +TOP_IS_TOP: + MMFM SP,A5 + RETS + +************************************************************************** +* * +* AREUSURE * +* * +* THIS IS CALLED TO GET A CONFIRMATION FROM THE USER. * +* A8 = PROMPT...THIS WILL APPEAR ABOVE THE "ARE YOU SURE" * +* A9 = ROUTINE TO JSRP TO DO THE DESIRED ACTION * +* A10 = MESSAGE TO DISPLAY CONFIRMING COMPLETION * +* * +* RETURN A0=0 MEANS YES WAS CHOSEN. * +* A0 .NE. 0 MEANS NO * +* * +************************************************************************** +AREUSURE: + CALLA CLR_SCRN ;BLANK IT ALL OUT! + MOVE A9,*A13(PDATA),L ;SAVE ROUTINE + MOVE A10,-*A12,L ;AND CONFIRM MESSAGE + + CALLR SURE_BOX + + MOVE A8,A2 ;PUT MESSAGE TEXT IN SAFE PLACE + MOVI MESS_SURE,A8 ;SETUP FOR TITLE + CALLA LM_SETUP ;STUFF REGGIES + MOVE A2,A8 ;GET STRING IN THERE + JSRP LM_FINIS ;AND PRINT IT + + MOVI M_SURE,A8 ;NOW THE "ARE YOU SURE" PART + JSRP L_MESS ;PUT IT UP. + + MOVI MEN_YN,A8 ;PUT UP THE "YES/NO" SELECTOR. + MOVI 2,A9 ;CURSOR ON 2ND ENTRY (NO) + + JSRP B_MENU ;AND GET A RESPONSE. + CMPI 1,A8 ;WAS IT YES? + JRNZ SURE_X ;NOPE....GET OUT + + CALLA CLR_SCRN ;CLEAR THE SCREEN FIRST, SO ROUTINE CAN PLOT! + + MOVE *A13(PDATA),A0,L ;GET THE ROUTINE TO CALL + MOVI SURE_RET,A7 + MOVE A7,-*A12,L ;PUSH RETURN ADDRESS + JUMP A0 ;AND "JSRP" THE ROUTINE + +SURE_RET: + CALLR SURE_BOX ;BOX IT! + MOVE *A12+,A8,L + JSRP SUR_MESS ;PRINT THE MESSAGE + + JSRP ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + + CLR A0 ;RETURN SUCCESS + RETP + +SURE_X: + ADDI LONG_SIZE,A12 ;POP MESSAGE + MOVI 2,A0 ;RETURN FAILURE + RETP + +************************************************************************** +* * +* SUR_MESS * +* * +* THIS PRINTS MESSAGE IN A8 IN THE ARE U SURE BOX * +* CONFIRMATION SPOT. * +* * +************************************************************************** +SUR_MESS: + MOVE A8,-*A12,L + MOVI MESS_CONFIRM,A8 + CALLA LM_SETUP ;GET CONFIRMATION DATA READY. + MOVE *A12+,A8,L + JSRP LM_FINIS ;PRINT OUR PART + RETP + +SURE_BOX: + MOVI COLOR_YELLOW,A9 + MOVI 003D0025H,A4 + MOVI 00F6016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +CENT_BOX: + MOVI ROBO_RED,A9 +CBOX_COL: + MOVI 00450025H,A4 + MOVI 00B4016AH,A5 + jruc STD_BORD ;BORDER-IZE THE WHOLE THING. + +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* +***************************** MESSAGES ********************************* +*----------------------------------------------------------------------------* +*----------------------------------------------------------------------------* + +INSTR_Y EQU INST_ULY+5 +INSTR_2Y EQU INSTR_Y+10 + +MM_INST1 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_Y,COLOR_BPR,STRCNRM,0 + .byte "SELECT WITH ANY STICK" + .BYTE 0 + .EVEN + +MM_INST2 + MESS_MAC RD7FONT,SPACING07,MENU_X,INSTR_2Y,COLOR_BPR,STRCNRM,0 + .byte "ACTIVATE WITH ANY BUTTON" + .BYTE 0 + .EVEN + +MESS_DOOR + MESS_MAC RD7FONT,SPACING20,200,128,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN +;MESS_OPEN +; MESS_MAC RD7FONT,SPACING20,200,160,ROBO_WHITE,STRCNRM,0 +; .byte "OPEN COIN DOOR TO" +; .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! +; .EVEN +;MESS_OPEN_2 +; MESS_MAC RD7FONT,SPACING20,200,179,ROBO_WHITE,STRCNRM,0 +; .byte "RESTORE FACTORY SETTINGS." +; .BYTE 0,0 +; .EVEN + +MESS_FAIL + MESS_MAC RD7FONT,SPACING20,200,112,ROBO_RED,STRCNRM,0 + .byte "INVALID GAME SETTINGS" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,144,ROBO_WHITE,STRCNRM,0 + .byte "ATTEMPT TO RESTORE" + .BYTE 0,1 ;0 = END OF STRING...1 = MORE MESSAGES! + .EVEN + MESS_MAC RD7FONT,SPACING20,200,164,ROBO_WHITE,STRCNRM,0 + .byte "FACTORY SETTINGS HAS FAILED." + .BYTE 0,0 + .EVEN + +MESS_BITCHIN + .byte "ADJUSTMENTS OK",0 + .even + +MESS_TITLE + MESS_MAC RD15FONT,SPACING20,TM_X,TM_Y,ROBO_GREEN,STRCNRM,0 + +RV_Y EQU TM_Y+18 + +MESS_REV + MESS_MAC RD7FONT,SPACING20,TM_X,RV_Y,ROBO_YELLOW,STRCNRM,0 +* +* THIS IS SETUP FOR THE QUESTION BEING ASKED +* BY "ARE YOU SURE" +* +MESS_SURE + MESS_MAC RD15FONT,SPACING20,200,102,ROBO_LF,STRCNRM,0 +* +* THIS IS THE "ARE YOU SURE" PART. +* +M_SURE + MESS_MAC RD15FONT,SPACING20,200,128,ROBO_YELLOW,STRCNRM,0 + .byte "ARE YOU SURE?" + .BYTE 0,0 + .EVEN + +MESS_CONFIRM + MESS_MAC RD15FONT,SPACING20,200,115,COLOR_LF,STRCNRM,0 + + +;DJT Start + .if OPERMES +;DJT End +************************************************************************** +* * +* OPERATOR MESSAGE ENTRY * +* * +************************************************************************** +OP_LINE_CHAR equ PDATA +OP_LINE_LINE equ PDATA+WORD_SIZE +OP_LETS equ OP_LINE_LINE+WORD_SIZE +OP_STIME equ OP_LETS+(30 * BYTE_SIZE) +OP_SVAL equ OP_STIME+WORD_SIZE + +LET_DIST_X equ 25 +LET_DIST_Y equ 24 +LET_BOX_CX equ 14 +LET_BOX_CY equ 2 +LET_BOX_WX equ 3 +LET_BOX_WY equ 1 +LET_START_Y1 equ 163 +LET_START_Y2 equ LET_START_Y1+LET_DIST_Y +LET_START_Y3 equ LET_START_Y2+LET_DIST_Y +LET_START_Y4 equ LET_START_Y3+LET_DIST_Y +LET_INST1 equ 55 +LET_START_X equ 22 +LET_LINE_MAX equ 3 +LET_CHAR_MAX equ 14 +LET_TEXT_GAP equ 12 +LET_TEXT1 equ 110 +LET_TEXT2 equ LET_TEXT1+LET_TEXT_GAP +LET_TEXT3 equ LET_TEXT2+LET_TEXT_GAP +OP_MAX_CHARS equ CMESS_CHARS-1 +FONT_T .equ inga16_asc_tbl + + + .bss BLINE ,16 + .bss BCHAR ,16 + + SUBR opmsg_main + + .if PRINTER + movk 1,a0 + calla PBADGUY + .endif + + calla CLR_SCRN + movi opmsg_s,a2 + movi ROBO_YELLOW,a3 + JSRP TOP_BOX ;KICK OUT TOP BOX + + movi OMINST1,a8 + JSRP print_multi + + SLEEPK 1 + + clr a8 ;Do 4 rows of letters + movk 30,a10 + callr OPPLOTLINE + + movk 1,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 2,a8 + movk 30,a10 + callr OPPLOTLINE + + movk 3,a8 + movk 30,a10 + callr OPPLOTLINE + + clr a0 + move a0,@BLINE + move a0,@BCHAR + + clr a8 + move a8,*a13(OP_LINE_LINE) ;ON THE FIRST LINE + + callr OM_STARTLINE ;INITIALIZE ALL THE FLAGS FOR IT + + clr a10 + movk 1,a11 + callr BOXCHAR ;BOX INITIAL ONE + + movk 1,a11 + callr OMPLOTTEXT + + + clr a0 + move a0,*a13(OP_SVAL) + move a0,*a13(OP_STIME) + +DOLOOP ;>Loop for stick and things + SLEEPK 1 + + callr om_getstick ;Check out the player board + jrnz do1 ;switch closed? + move a0,*a13(OP_SVAL) ;Clear timer and direction + move a0,*a13(OP_STIME) + jruc DOLOOP +do1 + move *a13(OP_SVAL),A1 ;Get last direction + ANDK 7,a1 ;Mask off repeat bit + cmp a0,a1 + jrz do2 ;Still same thing? + move a0,*a13(OP_SVAL) + clr a1 + move a1,*a13(OP_STIME) ;Clear the timer + jruc DODONE ;Process initial hit +do2 + MOVE *A13(OP_SVAL),A1 ;SNAG THE REPEAT BIT + ANDI 80H,A1 + JRNZ DO3 ;BR = IN REPEAT MODE + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 15,A0 + btst 4,a0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A1 + MOVE A1,A0 + ORI 80H,A1 ;PUT UPPER BIT ON + MOVE A1,*A13(OP_SVAL) ;SET DIRECTION WITH REPEAT ON + JRUC DODONE +DO3 + MOVE *A13(OP_STIME),A0 ;GET TIMER + INC A0 + MOVE A0,*A13(OP_STIME) + CMPI 5,A0 + JRLO DOLOOP ;GO BACK TO SLEEP + CLR A0 + MOVE A0,*A13(OP_STIME) ;CLEAR OUT THE TIMER + MOVE *A13(OP_SVAL),A0 + ANDK 7,a0 ;TURN OFF REPEAT BIT +DODONE + move *A13(OP_SVAL),a1 ;Get current entry + ANDK 7,a1 + move @BLINE,a8 + move @BCHAR,a10 + clr a11 + callr BOXCHAR ;UNHIGHLIGHT IT + + CMPI 1,A1 ;CHECK UP + JRNZ DOC1 + DEC A8 + JRUC DOPROC +DOC1 + CMPI 2,A1 + JRNZ DOC2 + INC A8 + JRUC DOPROC +DOC2 + CMPI 3,A1 + JRNZ DOC3 + DEC A10 + JRUC DOPROC +DOC3 + CMPI 4,A1 + JRNZ DOC4 + INC A10 + JRUC DOPROC +DOC4 + CMPI 5,A1 ; DRAW BUTTON + JRNZ DOCCLR ; WOOF WOOF + SOUND1 diag_select + CALLR OMADDCHAR ; ADD THE CHAR IN A8/A10 + CMPI 0FFH,A8 ; CHECK TO SEE IF DONE WITH ALL + JRZ DOCEND + MOVE @BLINE,A8 + MOVE @BCHAR,A10 + MOVK 1,A11 + CALLR BOXCHAR ; TURN THE BOX BACK ON + JRUC DOLOOP +DOCCLR + cmpi 6,a1 ;Start button + jrne DOLOOP + + callr opmsg_clr +; clr a7 +; move a7,*a13(OP_LINE_LINE) +; move a7,*a13(OP_LETS),L +; callr OM_STORECMOS +; movk 1,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; movk 2,a7 +; move a7,*a13(OP_LINE_LINE) +; callr OM_STORECMOS +; callr BLASTMESS + + jruc DOCCLEAR + +;cursor_snd4 .word >f3f7,>8,>8083,0 ; +;select_snd1 .word >f3f7,>8,>8084,0 ;select option sound +; +; CHECK A8 ( BLINE ) AND A10 ( BCHAR ) FOR BOUNDARY STUFF +; +DOPROC +;DJT ref moved up to unconditional reference + SOUND1 diag_cursor + move a8,a8 + jrge doc5 + clr a8 +doc5 + cmpi LET_LINE_MAX,a8 + jrle doc6 + movk LET_LINE_MAX,a8 +doc6 + move a10,a10 + jrge doc7 + movk LET_CHAR_MAX,a10 +doc7 + cmpi LET_CHAR_MAX,a10 + jrle doc8 + clr a10 +doc8 + move a8,@BLINE + move a10,@BCHAR + movk 1,a11 + callr BOXCHAR + jruc DOLOOP + + +******************************** +* HERE IS WHERE ONE COMES WHEN DONE ENTERING THE MESSAGE -- ALREADY +* STORED IN CMOS, TOO + +DOCEND + SLEEPK 2 ;GET EVERYBODY CAUGHT UP + CALLA CLR_SCRN ;CLEAR THE SCREEN + CALLR SURE_BOX + MOVI MESS_SUCCESS,A8 ;THIS IS SUCCESS MESSAGE +#sm JSRP SUR_MESS ;PRINT THE MESSAGE + jauc ANY_BUT ;NOW RETRIEVE ANY BUTTON THEN RETURN + +DOCCLEAR + SLEEPK 2 + CALLA CLR_SCRN + CALLR SURE_BOX + MOVI MESS_CLEARED,A8 + jruc #sm + + +MESS_SUCCESS + .byte "MESSAGE STORED",0 + .even + +MESS_CLEARED + .byte "MESSAGE CLEARED",0 + .even + +BLASTMESS: ;GUY ENTERED A WHOLE MESSAGE +; CALLA CMOSUNLOCK + calla ADJ_PAGE + clr a0 + movi VALID_CUSTOM,a7 + calla WC_WORD + calla F_ADC_S ;FIX UP THE CHECKSUM +; calla CMOSLOCK + rets + + +#******************************* +* Clear operator message +* Trashes scratch, A2 + + SUBR opmsg_clr + + calla ADJ_PAGE + + movi CUSTOM_MESSAGE,a7 + movk CMESS_LINES,a2 +#lp clr a0 + calla WC_BYTEI ;Write a null + addi CMESS_LINE_SIZE,a7 + dsj a2,#lp + + calla F_ADC_S ;Refresh checksum + jruc BLASTMESS + + + +******************************** +* Get joystick and buttons status +* >A0=Status (0-6) + +om_getstick + + PUSH a1 + move @_switch_addr,a0,L + move *a0,a0,W + move @_coin_addr,a1,L + move *a1,a1,W + sll 16,a1 + sll 16,a0 + srl 16,a0 + or a1,a0 + not a0 + move a0,a1 + andi 0004007fh,a0 ;P1 draw/start/stick + andi 00207f00h,a1 ;P2 draw/start/stick + srl 8,a1 + or a1,a0 + move @_switch2_addr,a1,L + move *a1,a1,W + not a1 + andi >7f,a1 ;P3 draw/stick + or a1,a0 + + btst 0,a0 ;U + jrz og2 + movk 1,a0 + jruc #x +og2 + btst 1,a0 ;D + jrz og3 + movk 2,a0 + jruc #x +og3 + btst 2,a0 ;L + jrz og4 + movk 3,a0 + jruc #x +og4 + btst 3,a0 ;R + jrz og5 + movk 4,a0 + jruc #x +og5 + movi >70,a1 + and a0,a1 + jrz og6 + movk 5,a0 + jruc #x +og6 + andi 0ffffff80h,a0 ;Any other bits are start buttons + jrz og7 + movk 6,a0 + jruc #x +og7 + clr a0 +#x + PULL a1 + move a0,a0 + rets + + +; PUSH a1 +; move @SWITCH,a0,L +; not a0 +; move a0,a1 +; andi 0004007fh,a0 ;P1 draw/start/stick +; andi 00207f00h,a1 ;P2 draw/start/stick +; srl 8,a1 +; or a1,a0 +; move @SWITCH+32,a1 +; not a1 +; andi >7f,a1 ;P3 draw/stick +; or a1,a0 +; +; btst 0,a0 ;U +; jrz og2 +; movk 1,a0 +; jruc #x +;og2 +; btst 1,a0 ;D +; jrz og3 +; movk 2,a0 +; jruc #x +;og3 +; btst 2,a0 ;L +; jrz og4 +; movk 3,a0 +; jruc #x +;og4 +; btst 3,a0 ;R +; jrz og5 +; movk 4,a0 +; jruc #x +;og5 +; movi >70,a1 +; and a0,a1 +; jrz og6 +; movk 5,a0 +; jruc #x +;og6 +; andi 0ffffff80h,a0 ;Any other bits are start buttons +; jrz og7 +; movk 6,a0 +; jruc #x +;og7 +; clr a0 +;#x +; PULL a1 +; move a0,a0 +; rets + + +******************************** +* SETUP THINGS FOR A NEW LINE OF TEXT + +OM_STARTLINE + + PUSH A0 + CLR A0 + MOVE A0,*A13(OP_LETS) + MOVE A0,*A13(OP_LINE_CHAR) + PULL A0 + + RETS + +******************************** +* PLOT OUT A LINE OF TEXT ON THE SCREEN + +OMPLOTTEXT + + MMTM SP,A8,A10,A11 + + PUSH A11 + MOVI OMTSETUP,A8 + CALLA LM_SETUP + MOVE A13,A8 + ADDI OP_LETS,A8 + MOVE *A13(OP_LINE_LINE),A9,W + SLL 5,A9 + ADDI OMLOC,A9 + MOVE *A9,A9,L + SLL 16,A9 + MMTM SP,A3,A4,A9 + MOVE A9,A3 + SUBI 20000H,A3 + MOVI [LET_TEXT_GAP+2,394],A4 + CALLA BLNKAREA + MMFM SP,A3,A4,A9 + ADDI 200,A9 + JSRP LM_FINIS + + PULL A5 + MOVE A5,A5 ;FLAG FOR UNDERSCORE OR NOT + JRZ NOUNDER + movi ROBO_LASER,a6 + movi underscore_s,a8 + addk 5,a9 ;SHIFT THE LITTLE GUY OVER + JSRP LM_FINIS +NOUNDER + MMFM SP,A8,A10,A11 + RETS + + +#******************************* +* Add the character pointed to by a8/a10 +* A8 =Line +* A10=Char on line + +OMADDCHAR + PUSH a8,a10 + + sll 5,a8 + addi OLTAB,a8 ;+Base + move *a8,a8,L + sll 3,a10 + add a10,a8 ;char offset + movb *a8,a0 ;snag the char + cmpi '_',a0 + jrne #20 + + move *a13(OP_LINE_CHAR),a1 ;>Backspace + jrz #x + dec a1 + move a1,*a13(OP_LINE_CHAR) + move a1,a2 + clr a0 + jruc rubent + +#20 + cmpi '^',a0 + jrne #addchar + + clr a11 + callr OMPLOTTEXT ; GET RID OF THE FLASHING UNDERSCORE + clr a0 + move a0,@BLINE + move a0,@BCHAR + callr OM_STORECMOS ; WELL, BABY -- STORE IT + MOVE *A13(OP_LINE_LINE),A8 ; GRAB THE LINE + CMPI 2,A8 + JRHS OMADONE + INC A8 + MOVE A8,*A13(OP_LINE_LINE) ; ON THE FIRST LINE + CALLR OM_STARTLINE ; INITIALIZE ALL THE FLAGS FOR IT + MOVK 1,A11 + CALLR OMPLOTTEXT + jruc #x + +; HERE IS JUST ENTER A NORMAL CHARACTER -- +; +; A8 = LINE +; A10 = CHARACTER + +#addchar + + MOVE *A13(OP_LINE_CHAR),A1 + MOVE A1,A2 + CMPI OP_MAX_CHARS,A1 + JRHS OMACMAX + INC A1 + MOVE A1,*A13(OP_LINE_CHAR) +rubent + move a13,a8 + ADDI OP_LETS,A8 + SLL 3,A2 + ADD A2,A8 ;OFFSET INTO LOCAL STORAGE + MOVB A0,*A8 + ADDK 8,A8 + CLR A0 + MOVB A0,*A8 ;MAKE SURE ZERO TERMINATED + MOVK 1,A11 + CALLR OMPLOTTEXT +;OMACRET +#x MMFM SP,A8,A10 + RETS + +OMADONE ;COME HERE WHEN REALLY DONE +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;GUY ENTERED A WHOLE MESSAGE + MOVI VALID_CUSTOM,A7 + MOVI VALID_VALUE,A0 + CALLA WC_WORD + CALLA F_ADC_S ;FIX UP THE CHECKSUM +; CALLA CMOSLOCK + MMFM SP,A8,A10 + MOVI 0FFH,A8 ;FLAG DONE WITH EVERYTHING + RETS + +OMACMAX + mmfm sp,a8,a10 + clr a11 + callr BOXCHAR + movk 3,a8 + movk 14,a10 + move a8,@BLINE + move a10,@BCHAR + rets + + +************************************************************************** +* STORE THE MESSAGE IN CMOS + +OM_STORECMOS +; CALLA CMOSUNLOCK + CALLA ADJ_PAGE ;POINT AT ADJUSTMENTS PAGE + MOVE *A13(OP_LINE_LINE),A7 + MOVI CMESS_LINE_SIZE,A6 + MPYU A6,A7 ;OFFSET ME, BABY + ADDI CUSTOM_MESSAGE,A7 ;A7 IS CMOS LOCATION + MOVE A13,A6 + ADDI OP_LETS,A6 ;A6 IS THE PROCESS BLOCK LOC + movk CMESS_CHARS-1,a5 ;CHARS/LINE + +cmos_loop + movb *a6,a0 ;fetch a character + andi BYTE_MASK,A0 + calla WC_BYTEI ;WRITE A BYTE + addk BYTE_SIZE,A6 ;POINT AT NEXT BYTE + dsj a5,cmos_loop + + clr a0 + calla WC_BYTEI ;Write a null + + calla F_ADC_S ;REFRESH CHECKSUM +; CALLA CMOSLOCK + + rets + +OMLOC .LONG LET_TEXT1, LET_TEXT2, LET_TEXT3 + + + +************************************************************************** +* BOXCHAR +* A8 =WHICH LINE (0-3) +* A10=CHARACTER ON LINE +* A11=COLOR TO USE ( 0 = BLACK, 1 = LASER FLASH ) + +BOXCHAR + MMTM SP,A1,A8,A10 + + MOVI LET_DIST_Y,A1 + MPYU A8,A1 ; DISTANCE + ADDI LET_START_Y1-LET_BOX_CY,A1 + SLL 16,A1 + MOVE A1,A4 + MOVI LET_DIST_X,A1 + MPYU A10,A1 + ADDI LET_START_X-LET_BOX_CX,A1 + MOVX A1,A4 ; UPPER LEFT IN A4 + MOVE A4,A5 + MOVI [LET_DIST_Y+LET_BOX_WY,LET_DIST_X+LET_BOX_WX],A0 + ADDXY A0,A5 ; LOWER RIGHT IN A5 + + MOVI [1,1],A0 ; BORDER HEIGHT,WIDTH + MOVI ROBO_BLACK,A9 ; DOBORDER IS RETARDED + MOVE A11,A11 + JRZ BC1 + MOVI ROBO_LF,A9 +BC1 + CALLR DOBORDER + + MOVE A11,A11 + JRNZ BC2 + MOVI 0FFH,A10 +BC2 + CALLR OPPLOTLINE + + MMFM SP,A1,A8,A10 + RETS + + +#******************************* +* Plot out a line of characters +* A8 =Table # +* A10=Which character to highlight + + .bss char_s ,16 + +OPPLOTLINE + + PUSH a8,a9,a10,a11 + + move a8,a9 + sll 5,a8 ;*32 + addi OLTAB,a8 + move *a8,a8,L + sll 4,a9 + addi OLYTAB,a9 + move *a9,a9 + + sll 16,a9 ;Get in the y position + addk LET_START_X,a9 +#lp + movb *a8,a0 ;GRAB CHAR NUMBER + move a0,a0 + jrz #x + movb a0,@char_s + PUSH a8 + PUSH a9 + PUSH a10 + PUSH a9 + movi BRSH_R_P,a0 ;*Palette + move a10,a10 + jrnz opl1 + movi BRSH_W_P,a0 +opl1 calla pal_getf + move a0,a5 + + movi OP_MESS,a8 + calla LM_SETUP + move a5,a6 ;Color + PULL a9 ;SET THE POSITION OF THE CHAR + movi char_s,a8 + JSRP LM_FINIS + + PULL a10 + dec a10 + PULL a9 + PULL a8 + addk 8,a8 + addi LET_DIST_X,a9 + jruc #lp + +#x PULL a8,a9,a10,a11 + rets + + +OP_MESS + MESS_MAC FONT_T,1,200,95,BRSH_R_P,STRCNRM_1,0 +; .byte "%c",0 +; .long CHAROUT + .even + +OLTAB .long OL1TAB, OL2TAB, OL3TAB, OL4TAB +OLYTAB .word LET_START_Y1, LET_START_Y2, LET_START_Y3, LET_START_Y4 + +OL1TAB .byte "ABCDEFGHIJKLMN_",0 +OL2TAB .byte "OPQRSTUVWXYZ?!_",0 +OL3TAB .byte "1234567890:#$-_",0 +OL4TAB .byte "^./' ^",0 + .even + +;OL1TAB .byte "ABCDEFGHI123?!_",0 +;OL2TAB .byte "JKLMNOPQR456()_",0 +;OL3TAB .byte "STUVWXYZ 7890:_",0 +;OL4TAB .byte "^_ #$&-./' _^",0 + +opmsg_s .byte "OPERATOR MESSAGE",0 + .even +OMINST1 + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_WHITE,STRCNRM,0 + .byte "USE PLAYER 1 OR 2 CONTROLS TO ENTER A MESSAGE",0,1 + .byte "OF UP TO 3 LINES OF 25 LETTERS PER LINE.",0,1 + .byte "SELECT end TO END EACH LINE.",0,1 + .byte "PRESS PLAYER 1 OR 2 START TO CLEAR OUT MESSAGE.",0,0 + .even + +OMTSETUP + MESS_MAC RD7FONT,SPACING07,200,LET_INST1,ROBO_BLUE,STRCNRM,0 + .even + +underscore_s .byte "-",0 + .even + + +#******************************* +* A8=*MESS_MAC + + SUBRP print_multi + + PUSH a2 + + move a8,a2 + calla LM_SETUP + move a9,a3 ;1st XY + +#lp PUSH a8 + move a2,a8 + calla LM_SETUP + PULL a8 + + move a3,a9 + + JSRP LM_FINIS + addi [12,0],a3 ;Next Y + + movb *a8,a0 + addk 8,a8 + move a0,a0 + jrnz #lp + + PULL a2 + RETP +;DJT Start + + .endif ;OPERMES +;DJT End + + +**************************************************************** +* Secret embedded copyright notice + +ASCIIE .macro str + + .var i,c,e + .eval 1,i + .eval 1,e + .loop $symlen(str) + .asg :str(i):,c + .byte 0ffh & (':c:'+e) + .eval i+1,i + .eval e+7,e + .endloop + .byte 0ffh & :e: + + .endm + + .byte 1,2,4,8,16,32,64,128 ;ID + + ASCIIE "NBA-3-COPYRIGHT-1993-MIDWAY-MANUFACTURING-COMPANY" + ASCIIE "ALL-RIGHTS-RESERVED" + ASCIIE "PROGRAMMED-BY-JEFF-JOHNSON-&-MARK-TURMELL-&-DAN-THOMPSON" + + + + + .end diff --git a/SRC/TEXT.ASM b/SRC/TEXT.ASM new file mode 100644 index 0000000..7bd49aa --- /dev/null +++ b/SRC/TEXT.ASM @@ -0,0 +1,189 @@ +************************************************************** +* +* Owner: none +* +* Software: Mark Turmell +* Initiated: 4/13/89 +* +* Modified: Shawn Liptak, 2/19/92 -Started basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 12/21/92 15:04 +************************************************************** + .file "text.asm" + .title "font tables" + .width 132 + .option b,d,l,t + .mnolist + + + .include "text.tbl" + .include "imgtbl.glo" + .include "imgtbl2.glo" + .include "plyrhd5.glo" + .include "plyrhd5.tbl" + .include "imgpal4.asm" + .include "fonttbl.glo" +; .include "xxxhd2.glo" +;,RD19FONT + .def RD7FONT,RD15FONT,FONT7A,FON15A + + .def FON150 +;,FON151,FON152,FON153,FON154,FON155,FON156,FON157 +; .def FON158,FON159 + + .def white_pal + .def red_pal + + .ref CHI_RODBP + .ref CHI_RODOP + .ref CHI_RODPP + .ref CHI_RODRP + .ref CHI_RODWP + .ref CHI_RODYP + .ref CHI_RODGP + .ref CHI_RODKP + + + .text + +************************************************************************** +* Font tables starting at ASCII 33 +************************************************************************** + +;7 POINT FONT + +RD7FONT + .long FONT7excla,FONT7quote,FONT7pound,FONT7doll,FONT7percen,FONT7and + .long FONT7apost,FONT7parenl,FONT7parenr,FONT7ast,FONT7plus + .long FONT7comma,FONT7dash,FONT7period,FONT7forsp,FONT70,FONT71 + .long FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78,FONT79 + .long FONT7colon,FONT7semicol,FONT7less,FONT7equal,FONT7more + .long FONT7quest,FONT7dash + .long FONT7A,FONT7B,FONT7C,FONT7D,FONT7E,FONT7F,FONT7G,FONT7H + .long FONT7I,FONT7J,FONT7K,FONT7L,FONT7M,FONT7N,FONT7O,FONT7P + .long FONT7Q,FONT7R,FONT7S,FONT7T,FONT7U,FONT7V,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7bracl,FONT7backsp,FONT7bracr,FONT7excla,FONT7line + .long FONT7apost + .long FONT7a,FONT7b,FONT7c,FONT7d,FONT7e,FONT7f,FONT7g,FONT7h + .long FONT7i,FONT7j,FONT7k,FONT7l,FONT7m,FONT7n,FONT7o,FONT7p + .long FONT7q,FONT7r,FONT7s,FONT7t,FONT7u,FONT7v,FONT7W,FONT7X + .long FONT7Y,FONT7Z + .long FONT7paren2l,FONT7break,FONT7paren2r + +;15 POINT FONT. @ is missing (GNP 10/20/88) + +RD15FONT + .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and + .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus + .long FON15comma,FON15dash,FON15period,FON15forsp,FON150,FON151 + .long FON152,FON153,FON154,FON155,FON156,FON157,FON158,FON159 + .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more + .long FON15quest,FON15dash +;WARPTXT + .long FON15A,FON15B,FON15C,FON15D,FON15E,FON15F,FON15G,FON15H + .long FON15I,FON15J,FON15K,FON15L,FON15M,FON15N,FON15O,FON15P + .long FON15Q,FON15R,FON15S,FON15T,FON15U,FON15V,FON15W,FON15X + .long FON15Y,FON15Z + .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line + .long FON15apos1 + .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh + .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp + .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx + .long FON15ly,FON15lz + .long FON15paren2l,FON15break,FON15paren2r +;RD19FONT +; .long FON15excla,FON15quote,FON15poun,FON15doll,FON15perc,FON15and +; .long FON15apos,FON15parenl,FON15parenr,FON15ast,FON15plus +; .long FON15comma,FON15dash,FON15period,FON15forsp +; +;;,SMD16_0,SMD16_1 +;; .long SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6,SMD16_7,SMD16_8,SMD16_9 +; +; .long FONT70,FONT71,FONT72,FONT73,FONT74,FONT75,FONT76,FONT77,FONT78 +; .long FONT79 +; +; .long FON15colon,FON15semicol,FON15less,FON15equal,FON15more +; .long FON15quest,FON15dash +; .long font19a,font19b,font19c,font19d,font19e,font19f,font19g,font19h +; .long font19i,font19j,font19k,font19l,font19m,font19n,font19o,font19p +; .long font19q,font19r,font19s,font19t,font19u,font19v,font19w,font19x +; .long font19y,font19z +; .long FON15brackl,FON15backsp,FON15brackr,FON15carr,FON15line +; .long FON15apos1 +; .long FON15la,FON15lb,FON15lc,FON15ld,FON15le,FON15lf,FON15lg,FON15lh +; .long FON15li,FON15lj,FON15lk,FON15ll,FON15lm,FON15ln,FON15lo,FON15lp +; .long FON15lq,FON15lr,FON15ls,FON15lt,FON15lu,FON15lv,FON15lw,FON15lx +; .long FON15ly,FON15lz +; .long FON15paren2l,FON15break,FON15paren2r + +; (moved to SELECT3.asm, for consisti...whatever) +; .def set_imgs +; .def SQUD_1 +; .def SQUD_2 +; +;set_imgs +; .long SQUD_1,SQUD_2,SQUD_3,SQUD_4,SQUD_5,SQUD_6,SQUD_7,SQUD_8,SQUD_9,SQUD_10 +; .long SQUD_11,SQUD_12,SQUD_13,SQUD_14,SQUD_15,SQUD_16,SQUD_17,SQUD_18,SQUD_19 +; .long SQUD_20 + + +white_pal: + .word 255 + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + .word 07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH,07FFFH + +red_pal: + .word 128 + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + .word 07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h,07c00h + + .end + diff --git a/SRC/TODO.DOC b/SRC/TODO.DOC new file mode 100644 index 0000000..bb9d510 --- /dev/null +++ b/SRC/TODO.DOC @@ -0,0 +1,73 @@ +;done: EGM screen +;done: Results screen shows blanks in 0-0 OT quarters +;done: Add kid players +;done: winningteam free credit bug fixed - sound reset still OK +;done: Add Jon Zirin +;done: Put Byron Scott into Lakers lineup +;done: Don't forget to finish #team_data (select2) +;done: Re-order teams +;done: Hot spots +;done: College heads +;done: New team line-ups +;done: What to do about created player hotspots +;done: Fix lineups for attract Starring screen +;done: Show hotspots powerup +;done: Update Grand Champ screen text (more?) +;MAX: Show hidden stats +;MAX: New dunks +;done: Shouldn't say "Next Opponent" when Grand Champ +;done: New logos for Detroit,Minnesota,Utah +;done: Fix repeatative outdoor court net_ani calls in BB3 +;MAX: Put hotspots into drone logic + +;MAX: Slap-off rim in 1 tick bug +;MAX: Better rejection/goal tending code +;MAX: No double dunk attach on potential on-fire shot +;MAX: Don't grab final seconds shots for a dunk +;done: Speed up spin move + +;done: New audio selections +;done: Helicopter dunk sound +;done: Says "stolen" when possession changes after a bucket +;done: Needs to say "Maximum Hangtime" +;done: Game/Shot/Fire clocks need different sounds +;done: Ball-grab sound on alley-oop + +;done: AAMA screen +;done: Drone difficulty - on-fires @ start of game after X player wins +;MAX: Flash Maximum word on title +;done: Use created players in attract demo +;MAX: Attract mode flash hype +;done: Court select easier +;MAX: Double dunk world record +;MAX: World record achieved message +;MAX: Player score bar +;MAX: Use basketball anim in attract +;MAX: Different create plyr heads/rules +;MAX: Some special heads aren't all in - Ehrlich,Funk, etc +;MAX: Paper/debris stuff +;done: Fix "4 games minimum" +;done: Don't allow quick tap out of OT buyin screen +;done: KI type pup display + + +Pre 4/5/96 +========== +;JEFF: Halftime team swap +;JEFF: Snd system volume reset problem +;JEFF: Do attract mode/sound volume +;JEFF: Fix favored by points on vs. screen +;JEFF: Score plate clock digits glitch @ halftime fade +;JEFF: What happens when you go grand champ +;JEFF: Fix white pix (IRQSKYE?) on stat screen fade down +;JEFF: "Player of the game..." at half doesn't always come up +;JEFF: Pump up Hot dog sound priority +;JEFF: Scroller WORLDTLY when plaques come down +;JEFF: Check rules on same-time use of a plyr record - +; gives undefeated record, doubles world record score (?) +;JEFF: Cannonball sound effect +;JEFF: No music on start out of attract mode!! +;JEFF: Get rid of long delay on sound board reset (at reset game time) +;JEFF: Didn't play full game, but final result page came up... +;JEFF: Make sure alleyoop rule & logic are right + diff --git a/SRC/UNZIP.ASM b/SRC/UNZIP.ASM new file mode 100644 index 0000000..1695acc --- /dev/null +++ b/SRC/UNZIP.ASM @@ -0,0 +1,1201 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + + .include "mproc.equ" ;Mproc equates + .include "disp.equ" ;Display proc equates + .include "gsp.equ" ;Gsp asm equates + .include "sys.equ" + .include "imgtbl.glo" + .include "macros.hdr" ;Macros +; .include "shawn.hdr" ;Macros +; .include "frame.tbl" + +; .include "bbvda.tbl" + + + .ref pal_getf + +; .ref pal_clean + + .ref SYSCOPY + +; .ref last_score,scores,tvpanelon + .ref get_all_buttons_cur + +;-------------------- + + .asg 0,CARYTEST ;1 for Cary's board testing + .asg 0,ERRORTEST ;1 for random pixel test + + .asg >1d01010,DEBUGPORT + + + .asg 8,IMGBPP ;Zipped img bpp count + .asg 8,SCRBPP ;Screen bpp count + +RAMBUFSIZ .equ 4*1024*IMGBPP +PAGE1ADR .equ PAGE1YO*512*SCRBPP + +RamBuffer .equ (MEGBIT0+(RAMBUFSIZ*2))&(~(RAMBUFSIZ-1)) +RamBufMask .equ RamBuffer+RAMBUFSIZ-1 + +lengthtree .equ RamBufMask+1 +disttree .equ lengthtree+256*32 +minptrtbl .equ disttree+256*32 + +frmpalnum .equ minptrtbl+256*32 ;16b +frmpalptr .equ frmpalnum+16 ;32b + +PIXPERFRM .equ frmpalptr+32 ;32b + + + +;SCRN_ST .set (170*SCRN_PTCH)+(150*8) +;PXLS_PR_TIK .set 10000 + +; STRUCTPD +; LONG PTEMP1 +; LONG PIXPERFRM +; WORD FRAMENUM +; LONG CLIPSND +; WORD HOLDFADE ;Time to hold first frame +; WORD DEBUGCNT ;For TUNIT debugging + +;RamBuffer .usect "unzip",RAMBUFSIZ + + + .text + + +#******************************* + + .ref display_blank,WIPEOUT,dpageflip,IRQSKYE + .ref dtype,display_unblank,get_all_buttons_cur2 + .ref SOUNDSUP,bounce_snd + +; SUBR show_trophy +; +; calla display_blank +; calla WIPEOUT +; +; movk 1,a0 +; move a0,@DISPLAYON +; move a0,@dpageflip +; +; calla display_unblank +; +; SLEEPK 1 +; +; clr a0 +; move a0,@dpageflip +; +; movi TROPHY,a8 +; movi [0,0],a9 +; JSRP movie_run +; +; movk 1,a0 +; move a0,@dpageflip +; SLEEPK 1 +; clr a0 +; move a0,@dpageflip +; +; movi 6*TSEC,a10 +;#lp SLEEPK 1 +; calla get_all_buttons_cur2 +; jrz #nob +; +; clr a0 +; move a0,@SOUNDSUP ;turn all sounds on +; SOUND1 bounce_snd +; movk 1,a0 +; move a0,@SOUNDSUP ;turn all sounds off +; jruc #xb +;#nob +; dsj a10,#lp +;#xb +; calla WIPEOUT +; +; RETP + + +#******************************* +* Run movie footage (JSRP) +* A8=* compressed picture data +* A9=Screen X,Y for top left of picture +* Trashes scratch, A2-A11,B2-B10 + + SUBR movie_run + +;DEBUG +; jauc 0 + +; movi SCRNST,a7 +; addxy a7,a9 + movi SCRNXP,a7 ;+XPad offset + addxy a7,a9 + movx a9,a7 + sext a7 + + srl 16,a9 + move @dpage,a14 + jrnz #p2 + addi PAGE1YO,a9 ;Start in page 1 if page 0 is being displayed +#p2 + sll 9,a9 + add a7,a9 + sll 3,a9 + + callr movie_waitdma + + .if CARYTEST + movk 1,a14 + move a14,@DEBUGPORT + .endif + + callr movie_parsehdr + jrnz #error + + move b4,a14 ;Height + subk 1,a14 + movi SCRN_PTCH,a1 + mpys a14,a1 + add a1,a9 ;* to bottom left + + callr movie_getpal + jrz #error + +;(A0=img pal #) +;(A7=# of colors) +;A8=* compressed picture data +;A9=* screen BL +;B2=X size +;B4=Y size + +; movi blowline,b10 +; move a9,a9 +; jrz #mode0 +; movi blowlinex2,b10 +;#mode0 + + JSRP movie_unzip + +#x setf 16,1,0 + setf 32,0,1 + + RETP + +#error + clr a14 + move a14,@DEBUGPORT + + LOCKUP + jruc #x + + +#******************************* +* Wait for DMA activity to stop +* Trashes A14 + + SUBRP movie_waitdma + +#wtlp + move b13,b13 ;Wait for DMAQ empty + jrge #wtlp + move @DMACTRL,a14 + jrn #wtlp + + .if CARYTEST=0 + movk 1,a14 + move a14,@DEBUGPORT + +#dly movi 200,a14 ;Wait 400 cycles + dsj a14,$ + + move @DMACTRL,a14 + jrnn #x + LOCKUP + jruc #dly + .endif + +#x rets + + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + + SUBRP movie_parsehdr + + move *a8+,a6 ;X size of frames + move a6,b2 + move *a8+,a6 ;Y size of frames + move a6,b4 + move *a8+,a6 ;# of frames + move *a8+,a7 ;# of colors + + clr a0 + rets + + +#******************************* +* Get a movie palette +* A7=# of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + + SUBRP movie_getpal + + move a8,a0 + subk 16,a0 ;Point to # colors + move a0,@frmpalptr,1 + calla pal_getf + jrz #x + + move a0,@frmpalnum,0 + + move a7,a1 ;Set * after pal data + sll 4,a1 + add a1,a8 + + addk 1,a1 ;Clr Z + +#x rets + + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* # frames (1 byte) +* # colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + +#******************************* +* Uncompress a tree +* A8=* to compressed data +* B0=* to tree table +* >A0=!0 if error (CC) + +UncompressTree: + + move b0,a7 ;>Determine how many codes of each bit length + move a8,a5 + + setf 8,0,0 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Bit-mask constant + clr a4 ;Clr chksum + clr a6 ;Total # of codes in tree +utr0 + move *a8+,a1 ;(# codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;+=Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;# of codes of this bit length + add a2,a6 ;+=Total # of codes in tree + and a3,a1 + addk 1,a1 ;bit length + move a1,a14 + sll 16,a14 + movy a14,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,L + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + move a5,a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ;# compressed bytes to describe tree - 1 + addk 1,a0 +#chklp move *a8+,a1 + add a1,a2 + dsj a0,#chklp + + setf 16,1,0 + cmp a2,a4 ;Do chksums match? + jreq utr ; br=yes + move a5,a8 ;No. Restore original A8 & error out +#error + movk 1001b,a14 + move a14,@DEBUGPORT + LOCKUP + movk 1,a0 ;Error! + jruc #x + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + +utr + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a5 ; outer loop count (# entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move b0,a7 ;Restore start of tree * + movi 06543h,a14 ; current minimum + move a6,a4 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a3 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj a4,utr3 + +* End of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a3 ; set this minimum constant + move a3,*a0+,L ; place translation ptr in MinPtrTbl. + dsjs a5,utr2 + + ;>Compute the codes + clr a4 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength +utr4 + move *-a0,a7,L ;translated pointer + add a1,a4 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a4,a5 ;copy of Code in a5 + movk 16,a14 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a14,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a6,utr4 + + clr a0 +#x + move a0,a0 + rets + + +#******************************* +* Initialize and run unzip loop (JSRP) +* A4=# of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + + SUBRP movie_unzip + +; .if TUNITDB +; jruc #debugstrt +; .endif + + movk 10,b3 + movi lengthtree,b0 +#ltlp callr UncompressTree + jrz #ltok ; br=OK + dsj b3,#ltlp + .if DEBUG + LOCKUP + .endif + RETP + +#ltok + move b0,b1 + + movk 10,b3 + movi disttree,b0 +#dtlp callr UncompressTree + jrz #dtok ; br=OK + dsj b3,#dtlp + .if DEBUG + LOCKUP + .endif + RETP + +#dtok + .if CARYTEST + clr a14 + move a14,@DEBUGPORT + .endif + +#debugstrt + +;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi RAMBUFSIZ/IMGBPP/4,a2 + clr a3 +#clrbuf + move a3,*-a1,L + dsj a2,#clrbuf + + movi blowline,b7 ;B4=* data-to-screen call + +;Fall thru + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + move b4,b3 + mpyu b2,b3 ;B3=total # pix in frame + + movi RamBuffer,a10 ;Where to uncompress to + movi RamBufMask,a0 ;Mask for rambuf ptr + move a10,a11 ;Used for negative wraparound + move a10,a6 ;Init buffer xfer ptr + clr b5 ;Pix count for Stills only + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move @frmpalnum,@DMACMAP,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ;If bit = 1, read 8 bits and copy + .if ERRORTEST + move @HCOUNT,a14 + .endif + jrz decode_still + + setf 8,0,0 + move *a8+,*a10+ + and a0,a10 + + addk 1,b5 ; pixel count + subk 1,b3 +us1 + cmp b5,b2 ; have we filled a line yet? + jrgt us0 + call b7 ; Blow Line Routine +us0 + move b3,b3 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + RETP + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + .if ERRORTEST + move @HCOUNT,a1 + .endif + + move b0,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll 3,a1 ; turn it into a pointer + + move b1,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + .if ERRORTEST + move @HCOUNT,a3 + .endif + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a10,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a11,a2 ;copy pointer is now in a2 + + move a7,b6 + sub b6,b3 ;Adjust total pixel count + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a10+ ;>Copy + and a0,a2 + and a0,a10 + dsj a7,copys + + jruc us1 + + +#******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc #strt +#lp + addk 1,b6 +#strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +#lp2 + cmpxy a3,a7 + jrynz #lp + + cmp a2,a4 + jreq #x + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc #lp2 +#x + move b6,a7 + rets ;Result returned in a7 + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + + SUBRP blowline + + move a9,a2 ;* screen + + move b2,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc #lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 +#lp + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + move *a6+,*a2+,1 ;Copy 2 pixels + and a0,a6 + dsj a5,#lp + + subi SCRN_PTCH,a9 + sub b2,b5 ;readjust pixels for next line + cmp b2,b5 ;added 6/92. if there are enough pixels + jrge blowline ;left to do another line, do it. + + rets + + +#******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +; SUBRP blowlinex2 +; +; +; move a10,a2 ;* screen +; move a10,a3 +; addi SCRN_PTCH,a3 +; +; move b3,a1 ;start of line +; move b9,a5 ;X size +; +; setf 8,0,0 +;#lp +; move *a1+,a14 ;Get 8 bits +; move a14,a4 +; sll 8,a4 +; or a4,a14 +; move a14,*a2+,1 ;16 bits +; move a14,*a3+,1 +; and a0,a1 +; dsjs a5,#lp +; +; +; subi SCRN_PTCH*2,a10 +; move a1,b3 ; save for next frame +; sub b9,b5 ; readjust pixels for next line +; cmp b9,b5 ; added 6/92. if there are enough pixels +; jrge #nuther ; left to do another line, do it. +; +; rets +; +;#nuther +; jruc blowlinex2 + + +******************************** +* Show movies (test) (Process) + +; SUBR movie_test +; +; calla pal_clean +; +; movi 5*60,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; movi [9,0],a9 +; movi [>8c,0],a10 +; movi (24+83*512)*8,a11 ;XY +; +; move @last_score,a0,L +; cmpi scores,a0 +; jrz #tm1 +; +; movi [9+216,0],a9 +; movi [>8c,0],a10 +; movi >53780,a11 ;XY +; +;#tm1 callr show_edging ;Turn on clip borders +; +; SLEEPK 10 +; +; movi GRANT_F,a8 +; clr a9 +; +; move a11,a10 +; JSRP movie_run +; +; movi >2001,a0 +; calla obj_del1c +; +; movk 10,a1 ;Delay tv score panel +; move @tvpanelon,a0,L +; move a1,*a0(PTIME) +; +; DIE + +;******************************** +; +; SUBRP show_edging +; +; move a9,a0 +; move a10,a1 +; +; movi livet,a2 +; movi 19989,a3 ;z pos - Below buyin box +; movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4 +; movi >2001,a5 +; clr a6 +; clr a7 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liveb,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi livel,a2 +; calla BEGINOBJ2 +; +; move a9,a0 +; move a10,a1 +; movi liver,a2 +; calla BEGINOBJ2 +; +; rets + +#******************************* +* Show movies in attract mode + +; SUBR movie_demo +; +; calla pal_clean +; +; movi GRANT_F,a8 +; clr a9 +; movi (100+50*512)*8,a10 ;XY +; JSRP movie_run +; +; movi PIPPEN_F,a8 +; clr a9 +;; movi (140+70*512)*8,a10 ;XY +; movi (100+70*512)*8,a10 ;XY +; JSRP movie_run +; +;; movi GRANT_F,a8 +;; movk 1,a9 +;; movi (100+50*512)*8,a10 ;XY +;; JSRP movie_run +;; +;; movi PIPPEN_F,a8 +;; movk 1,a9 +;; movi (140+70*512)*8,a10 ;XY +;; JSRP movie_run +; +;#x RETP + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + +;#******************************* +;* Stop for error (DEBUG) +; +; .if TUNITDB +; +; SUBRP movie_error +; +; PUSH a0,a1 +; pushst +; dint +; +; move @SYSCOPY,a0 +; ori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +;#lp2 movi 20000,a1 +;#lp move a0,@ERASELOC +; addk 1,a0 +; dsj a1,#lp +; +; move @SWITCH+16,a1 +; not a1 +; andi >624,a1 +; jrz #lp2 +; +; move @SYSCOPY,a0 +; xori 4,a0 +; move a0,@SYSCOPY +; move a0,@SYSCTRL +; +; popst +; PULL a0,a1 +; rets +; +; .endif + +;#******************************* +;* Initialize and run unzip loop (JSRP) +;* A4=# of frames +;* A8=* compressed data table +;* A10=Screen * for top left of picture +;* B3=Y size +;* B4=strt pal +;* B9=X size +; +; SUBRP movie_unzip +; +; +;; .if TUNITDB +;; jruc #debugstrt +;; .endif +; +; +; movi lengthtree,b0 +; movi disttree,b1 +; +; movk 10,a5 +;#ltlp move b0,a7 ;Length Tree +; move a8,b2 +; callr UncompressTree +; jrz #ltok ;OK? +; move b2,a8 +; dsj a5,#ltlp +; jruc #error +;#ltok +; +; movk 10,a5 +;#dtlp move b1,a7 ;Distance Tree +; move a8,b2 +; callr UncompressTree +; jrz #dtok ;OK? +; move b2,a8 +; dsj a5,#dtlp +; jruc #error +;#dtok +; +; .if CARYTEST +; clr a14 +; move a14,@DEBUGPORT +; .endif +; +;#debugstrt +; +; ;Clear top 4K of buffer to take care of initial wraparound +; +; movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer +; movi 1024,a2 ;4K +; clr a3 +;clrbuf +; move a3,*-a1,L +; dsj a2,clrbuf +; +; ;Do some initializing +; mpyu b9,b3 +; move b3,a11 ;total # bytes in frame in a11 +; move a11,*a13(PIXPERFRM),L +; callr SetConstX +; move a6,a9 ;Where to uncompress to +; move a9,b3 ;first frame start +; clr b5 ;pixel count for Stills only +; +; cmpi 1,a4 +; jreq UncompressFrame ;1 frame? +; +;;---- +; +;#lp +; mmtm a12,a4,a10 +; +; callr movie_waitdma +; +; .if CARYTEST +; movk 10b,a14 +; move a14,@DEBUGPORT +; .endif +; +; .if TUNITDB +; movi 50,a0 +;#dblp +; movi 80,a2 +;#dblp2 +; move a8,a9 +; addi GRANT_F2-GRANT_F,a9 +; movb *a8,a14 +; movb *a9,a1 +; move a14,@SCRATCH+13 +; move a1,@SCRATCH+16+15 +; cmp a1,a14 +; jreq #cmpok +;#dberr callr movie_error +; mmfm a12,a4,a10 +; RETP +;#cmpok +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @DMACTRL,a1 +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; move @SWITCH,a1,L +; movb *a9,a1 +; cmp a1,a14 +; jrne #dberr +; move @SCRATCH+13,a1 +; cmp a1,a14 +; jrne #dberr +; movb *a8,a14 +; move @SCRATCH+16+15,a1 +; cmp a1,a14 +; jrne #dberr +; +; movb a14,*a10 +; addk 8,a8 +; addk 8,a9 +; addk 8,a10 +; dsj a2,#dblp2 +; addi (512-80)*8,a10 +; dsj a0,#dblp +; +; jruc #skipuncomp +; .endif +; +; +; JSRP UncompressFrame +; +; clr a0 +; move a0,@DEBUGPORT +;#skipuncomp +; +; movk 1,a0 ;1 tick sleep +;; move *a13(FRAMENUM),a14 ;if 1st frame, check for hold +;; jrz chk4hold +;; subk 1,a14 +;; jrne nonono +;; +;; move *a13(HOLDFADE),a14 ;on second frame, wait for hold time +;; add a14,a0 +;; jruc nonono +;; +;;chk4hold +;; move *a13(HOLDFADE),a14 +;; jrz nonono ; if need to hold, create fade process +;; PUSH a8 +;; move b4,a8 +;;; CREATE0 HOLD_FADE_PROC +;; PULL a8 +;; movk 6,a0 ; sleep longer if we are fading pal +;;nonono +; +; +; movi swappg,a14 +; jruc GoToSleep +; +; +;swappg +; +; mmfm a12,a4,a10 +; +; xori PAGE1YO*512*8,a10 ;Flip * to other page +; +;; PUSH a0 +; +; setf 16,1,0 +; +; +;; move *a13(FRAMENUM),a14 ;sound only on first frame +;; jrnz no +;; move *a13(CLIPSND),a0,L ;sound from sound table +;; jrz no +;; PUSH a14 +;; calla snd_play1 +;; PULL a14 +;;no +;; PULL a0 +;; +;; addk 1,a14 +;; move a14,*a13(FRAMENUM) ;save next frame number +; +; move *a13(PIXPERFRM),a14,L ;number of pixels in a frame +; add a14,a11 ;adjust by extra pixels done last time +; +;; cmpi 2,a4 +;; jrne #nxtf +;; movi blowlinelastfrm,b10 +; +;#nxtf +; PUSH a0,a1,a2 +; calla get_all_buttons_cur +; PULL a0,a1,a2 +; jrnz #abort +; +; +; dsj a4,#lp ;Loop once for each frame +; +;#abort +; callr movie_waitdma +; ;>Copy visable frame to other page +; move *a13(PIXPERFRM),a14,L ;# of pixels in a frame +; +; move b4,*b8 ;Set pallette +; +; move a10,a2 ;* screen +; xori PAGE1YO*512*8,a2 ;Flip * to other page +;#cpylp +; move a2,a0 +; move a10,a1 +; +; move b9,a5 ;X size +; srl 1,a5 ;X/2 = loop counter +;#cllp move *a0+,*a1+ +; dsj a5,#cllp +; +; subi SCRN_PTCH,a2 +; subi SCRN_PTCH,a10 +; move b9,a0 +; sub a0,a14 +; jrgt #cpylp ;More pixels? +; +; +;#x +; RETP +; +; +;#error LOCKUP +; jruc #x +; +; +;******************************** +; +; +;GoToSleep +; getst b2 +; move a12,b6 +; mmtm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; setf 16,1,0 +; setf 32,0,1 +; move a14,*a13(PTEMP1),L +; calla PRCSLP +; +; move a12,b6 +; mmfm b6,b2,b3,b4,b5,b9,b10 +; move b6,a12 +; +; callr SetConstants +; move *a13(PTEMP1),a14,L +; +; putst b2 +; exgpc a14 ;Return + +#******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A6=# frames +* >A7=# colors in palette +* >A10=X +* >A11=Y +* Trashes scratch + +;movie_parsehdr +; +;; move a8,a14 +;; movk 30,a0 ;# retries +; +;#rd move *a8+,a10 ;X size of frames +; move *a8+,a11 ;Y size of frames +; move *a8+,a6 ;# of frames +; move *a8+,a7 ;# of colors +; +;; move a1,b3 +;; move a6,b9 +; +;; cmpi 100,a6 ;X +;; jrne #error +;; cmpi 68,b3 ;Y +;; jrne #error +;; cmpi 5,a4 ;#frms +;; jrlt #error +;; cmpi 35,a4 +;; jrgt #error +;; cmpi 200,a7 ;#colors +;; jrlt #error +;; cmpi 255,a7 +;; jrhi #error +; +; clr a0 +; rets +; +;;#error +;; movk 101b,a8 +;; move a8,@DEBUGPORT +;; +;; move a14,a8 +;; dsj a0,#rd +;; +;; addk 1,a0 +;; rets + + + .end diff --git a/SRC/UTIL.ASM b/SRC/UTIL.ASM new file mode 100644 index 0000000..d99768d --- /dev/null +++ b/SRC/UTIL.ASM @@ -0,0 +1,2517 @@ +************************************************************** +* +* Owner: none +* +* Software: ? and Shawn Liptak +* Initiated: ? +* +* Modified: Shawn Liptak, 7/?/91 -Improved FLASHME, added FRANIMQ +* Shawn Liptak, 7/?/91 -New and improved random stuff +* Shawn Liptak, 9/13/91 -Fixed various junk (STRINGER) +* Shawn Liptak, 10/5/91 -Added DELTAY to FRANIMQ +* Shawn Liptak, 10/20/91 -Improved GETCPNT +* Shawn Liptak, 1/4/92 -QDMAN mods +* Shawn Liptak, 2/11/92 -Started basketball (cleanup) +* Shawn Liptak, 12/10/92 -Added security code +* Shawn Liptak, 3/16/93 -Fixed coin misses from wipeout +* Jeff Johnson, 4/12/95 -Updated for WWF hardware +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/22/93 16:25 +*.Last mod - 4/12/95 11:02am +************************************************************** + .file "util.asm" + .title "utility subroutines" + .width 132 + .option b,d,l,t + .mnolist + + .include "mproc.equ" + .include "disp.equ" + .include "gsp.equ" + .include "sys.equ" + .include "game.equ" + .include "audit.equ" + .include "macros.hdr" ;Macros + + +;utility subroutine equates + + .def SCRCLR + .def OBJOFF,OBJON + .def STRLNRM,STRCNRM,STRCNRMO,STRLNRMO,STRCNRMO_1,CYCLE_TABLE + .def BLNKAREA +;DJT Start + .def FRANIMQ +;DJT End + .def STRNGLEN + .def STRRNRM,FILLAREA + + .ref pal_init,pal_getf,pal_find,pal_set,PALRAM,WFLG + + + .ref plyrobj_t,plyrproc_t + .ref P1CTRL,P1DATA + .ref SOUNDSUP,WSPEED + .ref gndstat + .ref COLRTEMP,GAMSTATE + + .ref display_init + .ref dirqtimer + .ref SYSCOPY + .ref dpageflip,IRQSKYE + + .ref BAKBITS + .ref GET_ADJ + + .ref tvpanelon + .ref DMAQCUR,DMAQ,QDMAN + +;DJT Start + .def STRNGRAM,HEXTOASC,WRLD + .def COLCYC,CYCLE_TABLE +;DJT End + + + + BSSX RAND ,32 ;Last random # + .bss STRNGRAM ,20*16 + .bss WRLD ,16 + BSSX LOWZ ,16 + + .text + +******************************** +* Flash screen white + + SUBR flash_white + + movi [0909h,0000h],a1 ;[color,pal] + movi [256,400],a2 ;[Ysz,Xsz] + clr a3 ;[Ypos,Xpos] + clr a4 ;SAG + movi DMACAL,a5 ;[offset,ctrl] + calla QDMAN + rets + +******************************** +* Kill all background objects + + SUBR KILBGND + + MMTM SP,A0,A2,A3,A4,A5 + MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST + MOVE *A2,A0,L + JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST +FREEB + MOVE A2,A3 ;SAVE PREVIOUS + MOVE *A2,A2,L ;GET NEXT BLOCK + JREQ KILOBX ;BR=ALL DONE + MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST + MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START + MOVE A5,*A2,L + MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER + MOVE A3,A2 + JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST +KILOBX + CALLR ZERO_BITS + MOVE A0,@BAKLST,L + MMFM SP,A0,A2,A3,A4,A5 + RETS + +******************************** + + SUBR ZERO_BITS + + CLR A0 + MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS + MOVI BAKBITS,A1 +KILUP + MOVE A0,*A1+,W + DSJS A2,KILUP + RETS + +; SUBR SPECIAL_WIPEOUT +; CALLR WIPEOUT2 +; JAUC SPECIAL_DISPLAY_INIT + +************************************************************************** +* Wipes the system clear of all other processes, objects +* and coordinates. It returns with display processor disabled +* color ram cleared, and the bit map wiped clean. + + SUBR WIPEOUT + + callr dirq_wait + + calla display_init + + pushst + dint + calla pal_init + POPST + + + SUBR WIPEOUT2 + +; callr security_chk ;Rets: A0=0 if OK! + + + movi plyrproc_t,a1 ;These must be cleared! + movi plyrobj_t,a2 + movi P1CTRL,a3 + movk 4,a7 +#l1 move a0,*a1+,L + move a0,*a2+,L + move a0,*a3+ + dsj a7,#l1 + + clr a0 + move a0,@gndstat + move a0,@dtype + move a0,@tvpanelon + + move a0,@WFLG + movk OWSPD,a1 + move a1,@WSPEED + + move a0,a1 + calla KILALL ;Kill all processes + + callr ZERO_BITS + callr dpageflip_off + clr a0 + move a0,@SOUNDSUP ;Allow sounds + move a0,@IRQSKYE +; move a0,@DISPLAYON ;TURN THE DISPLAY PROCESSOR OFF + + pushst + dint + + move @SYSCOPY,a0 ;>Init sysctrl + + .if WWFUNIT + movi SYSCINIT,a1 + .else + srl 8,a0 + sll 8,a0 + movi SYSCINIT&>ff,a1 ;Don't touch 7seg LED + .endif + + or a1,a0 + move a0,@SYSCOPY + move a0,@SYSCTRL + + popst + callr dirq_wait ;Now wait for vblank to zap color map + rets + + +#******************************* +* Save display/process lists and variables of active game +* A13=*Process that stays running +* Trashes scratch, A2-A7 + + .bss sysstate_t ,16*50 ;Mem for state save + .bss svproc_p ,32 ;*Saved proc list + .bss pal_t ,32*NMFPAL ;Mem for pal save + +SSS .macro a + move @:a:,*a1+ + .endm +SSSL .macro a + move @:a:,*a1+,L + .endm + + SUBR system_savegame + + movi sysstate_t,a1 + + SSSL OBJLST + SSSL BAKLST + SSSL WORLDTLX + SSSL WORLDTLY + + SSS IRQSKYE + SSSL COLRTEMP + SSS dtype + SSS dpageflip + SSS gndstat + + SSS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a2+,*a1+,L + move *a3+,*a1+,L + move *a4+,*a1+ + dsj b0,#lp + + + movi ACTIVE,a2 + movi svproc_p,a4 + jruc #prnxt + +#prlp cmp a13,a2 + jreq #prnxt ;Me? + + move *a2(PROCID),a14 + jrn #prnxt ;Indestructible? + + move *a2,*a3,L ;Unlink + move a2,*a4,L ;Add it to save list + move a2,a4 + move a3,a2 +#prnxt + move a2,a3 + move *a2,a2,L + jrnz #prlp + + clr a0 + move a0,*a3,L + move a0,*a4,L + + move a0,@OBJLST,L ;Null lists + move a0,@BAKLST,L + move a0,@gndstat + + callr ZERO_BITS + + + movi PALRAM,a0 ;>Save pal ptrs + movi pal_t,a1 + movi NMFPAL,b0 +#plp move *a0+,*a1+,L + dsj b0,#plp + + calla pal_init + + rets + + +#******************************* +* Restore state of system_savegame +* Trashes scratch, A2-A8 + +SRS .macro a + move *a1+,a0 + move a0,@:a: + .endm +SRSL .macro a + move *a1+,a0,L + move a0,@:a:,L + .endm + + SUBR system_restoregame + + clr a0 + move a0,@DISPLAYON + + clr a1 + calla KILALL ;Kill all processes + calla KILBGND ;Kill old background + movi -1,a1 + calla obj_delc ;Kill all objs + + calla pal_init + + movi pal_t,a3 ;>Restore pal ptrs + movi PALRAM,a4 + clr a5 + movi NMFPAL,a7 +#plp + move *a3+,a0,L ;Get * pal + move a0,*a4+,L + jrz #nxtp + move a5,a1 + sll 8,a1 ;Pal offset + move *a0+,a2 ;Get # colors in pal + calla pal_set ;Setup pal transfer +#nxtp addk 1,a5 + cmpi NMFPAL/2,a7 + jrne #skipslp + PUSHP a3,a4,a5,a7 + PULL a8 ;Get our rets addr so we can sleep + SLEEPK 1 ;Split the transfer + PUSH a8 + PULLP a3,a4,a5,a7 +#skipslp + dsj a7,#plp + + + movi sysstate_t,a1 + + SRSL OBJLST + SRSL BAKLST + SRSL WORLDTLX + SRSL WORLDTLY + + SRS IRQSKYE + SRSL COLRTEMP + SRS dtype + SRS dpageflip + SRS gndstat + + SRS GAMSTATE + + movi plyrproc_t,a2 + movi plyrobj_t,a3 + movi P1CTRL,a4 + movk 4,b0 +#lp move *a1+,*a2+,L + move *a1+,*a3+,L + move *a1+,*a4+ + dsj b0,#lp + + + movi ACTIVE,a2 ;>Find end of list +#prlp + move a2,a3 + move *a2,a2,L + jrnz #prlp + + move @svproc_p,*a3+,L ;Link + + + movk 1,a0 + move a0,@DISPLAYON + + rets + + + +******************************** +* Clear all world coordinates and scroll velocities + +; SUBRP world_clr +; +; clr a0 +; move a0,@SCROLLX,L ;X SCROLL VALUE +; move a0,@SCROLLY,L ;Y SCROLL VALUE +; move a0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD) +; move a0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD) +; move a0,@WORLDTL,L +; movi SCRNST,a0 +; move a0,@SCRNTL,L +; movi SCRNEND,a0 +; move a0,@SCRNLR,L +; rets + + +;DJT Start + .if 0 +;DJT End +**************************************************************** +* +* Animation script code by SL +* +**************************************************************** + +******************************** +* Run an animation script (Process) + + + BSSX animscnt ,16 ;# anim scripts running + + STRUCTPD + APTR animslobj_p ;*Last obj created + LONG animsv ;Temp value + WORD animsbx ;Base X + WORD animsby ;Base Y + WORD animsfnum ;# FRANIMs running + APTR animslp_p ;*Loop point table pos +;Careful! + APTR animslp_t ;(*Loop point, Loop cnt)*5 + + + SUBR anim_script ;A8=*Script + + clr a9 + + SUBRP anim_script2 ;A8=*Script, A9=Base Y:X + + move a9,*a13(animsbx),L ;Save XY + + move *a13(PROCID),a11 + subi ANIMPID,a11 + srl 8,a11 + sll 8,a11 ;A11=ID offset (0->300) + + clr a1 + move a1,*a13(animsfnum) + move a13,a1 + addi animslp_t,a1 + move a1,*a13(animslp_p),L + +anslp move *a8+,a1 ;Get command + + addi anims_t,a1 + move *a1,a1,L + jump a1 + + .long asEND +anims_t .long asNEW,asDEL,asDELM,asFRA + .long asANI,asHIDE,asSHOW,asPAL + .long asXY,asXYRNG,asYA,asXYV + .long asXYVA,asXYV0,asZ,asBXY + .long asSLP,asSLP1,asSLPR + .long asWAIT,asTXT + .long asTXTR,asTXTK,asLAB,asLABR + .long asDSJ,asDSJS1,asJMP,asJMPR,asJMPEQ + .long asJMPNE,asRUN,asRUNI,asCRE + .long asKIL,asASM,asSND,asSNDD + .long asADDW + .long asADDWO,asADDLO,asADLVO,asSVRL + .long asSVRLT,asSVL + + +asNEW ;>New objects + move *a8+,a9,L ;Get data + PUSH a8 +ans100 move *a9+,a2,L ;*Image + move *a9+,a0,L ;Get XY + move *a13(animsbx),a3,L + addxy a3,a0 ;Add base + clr a1 + movy a0,a1 + sll 16,a0 + move *a9+,a3 ;Z + move *a9+,a4 ;Flags + addi M_NOCOLL,a4 + move *a9+,a5 ;ID + addi CLSANIM,a5 + add a11,a5 ;+offset + clr a6 + clr a7 + calla BEGINOBJ + move *a9,a0 + cmpi -1000,a0 + jrne ans100 ;End? + move a8,*a13(animslobj_p),L ;Save * to last one + PULL a8 + jruc anslp + +asFRA ;>FRANIM + move a11,a6 ;Save a11 + move *a8+,a9,L ;Get data + move *a13(PROCID),a1 ;Inherit same ID+1 + addk 1,a1 + move *a8+,a10 ;OID + jrn ans250 ;No ID? + addi CLSANIM,a10 + add a11,a10 ;+offset + move *a8+,a11 ;#Loops + jrn ans220 + move *a13(animsfnum),a2 ;+1 FRANIM cnt + addk 1,a2 + move a2,*a13(animsfnum) +ans220 movi anims_franim,a7 + calla GETPRC + move a13,*a0(anfc_p),L + move a6,a11 + jruc anslp + +ans250 addk 16,a8 ;Skip #loops + move a8,a10 + move *a13(animslobj_p),a8,L ;Get * to last one + movi FRQDELDIE,a7 + calla GETPRC + move a10,a8 + jruc anslp + + +asSLP ;>SLEEP + move *a8+,a0 ;Get time + calla PRCSLP + jruc anslp + +asSLP1 ;>SLEEP 1 + movk 1,a0 + calla PRCSLP + jruc anslp + +asSLPR ;>Sleep random + move *a8+,a0 ;Get time + move *a8+,a1 + callr RNDRNG + calla PRCSLP + jruc anslp + +asWAIT ;>Wait on FRANIMs + SLEEPK 2 + move *a13(animsfnum),a1 + jrnz asWAIT + jruc anslp + +asXY ;>New XY rel to current pos + move *a8+,a1 ;Get ID + move *a8+,a2 + move *a8+,a4 + move *a8+,a5 +asxyhs ;Entry for HIDE/SHOW +asxyr addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans720 callr obj_find + jrz anslp + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + move *a0,a0,L + jrnz ans720 + jruc anslp + +asXYRNG ;>New XY rel to current pos in rndrng + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a4 + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + move a0,a5 + move *a8+,a1 + jrn asxyr5 ;No ID? + move *a8+,a2 + jruc asxyr + +asxyr5 addk 16,a8 ;Skip mask + move *a13(animslobj_p),a0,L ;Get * to last one + move *a0(OXPOS),a6 ;New X + add a4,a6 + move a6,*a0(OXPOS) + move *a0(OYPOS),a6 ;New Y + add a5,a6 + move a6,*a0(OYPOS) + jruc anslp + +asYA ;>Set Y ani pt world relative + move *a8+,a1 + move *a8+,a2 ;Mask + move *a8+,a5 ; + sll 16,a5 + move @WORLDTLY,a0,L + add a0,a5 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +asya10 callr obj_find + jrz asya90 + + PUSH a1,a2 + move *a0(OIMG),a1,L + move *a0(OSIZE),a2,L + move *a0(OCTRL),a4 + calla GANIOF + move *a0(OXVAL),a3,L + add a6,a3 ;Old X + move a5,a2 ;New Y + calla GANISAG + PULL a1,a2 + + move *a0,a0,L + jrnz asya10 +asya90 jruc anslp + +asXYV ;>Set XYVel + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans920 callr obj_find + jrz anslp + move *a0(OXVEL),a6,L + add a4,a6 + move a6,*a0(OXVEL),L + move *a0(OYVEL),a6,L + add a5,a6 + move a6,*a0(OYVEL),L + move *a0,a0,L + jrnz ans920 + jruc anslp + +asXYVA ;>Set XYVel absolute + move *a8+,a4,L + move *a8+,a5,L + move *a8+,a1 + move *a8+,a2 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1020 callr obj_find + jrz anslp + move a4,*a0(OXVEL),L + move a5,*a0(OYVEL),L + move *a0,a0,L + jrnz ans1020 + jruc anslp + +asXYV0 ;>XYVel = 0 + move *a13(animslobj_p),a0,L ;Get * to last one + clr a1 + move a1,*a0(OXVEL),L + move a1,*a0(OYVEL),L + jruc anslp + +asZ ;>Set Z pos + move *a8+,a1 + move *a8+,a2 + move *a8+,a4 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L +ans1120 callr obj_find + jrz anslp + move a4,*a0(OZPOS) + move *a0,a0,L + jrnz ans1120 + jruc anslp + +asLAB ;>Set label + move *a8+,a0 +anslab move *a13(animslp_p),a2,L + move a8,*a2+,L ;Save * + move a0,*a2+ + move a2,*a13(animslp_p) + jruc anslp + +asLABR ;>Set label randomly + move *a8+,a0 + move *a8+,a1 + callr RNDRNG + jruc anslab + +asDSJS1 ;>Sleep 1, dec and loop to label + SLEEPK 1 + +asDSJ ;>Decrement and loop to label + move *a13(animslp_p),a1,L + move -*a1,a2 + subk 1,a2 + move a2,*a1 + jrz ans1330 + move -*a1,a8,L ;Get *Loop + jruc anslp +ans1330 subk 32,a1 ;Del loop entry + move a1,*a13(animslp_p),L + jruc anslp + +asPAL ;>Set palette + move *a13(animsv),a0,L ;Get *Pal + calla pal_getf + move a0,a4 + move *a8+,a1 + jrn ans1450 + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1420 callr obj_find + jrz anslp + move a4,*a0(OPAL) + move *a0,a0,L + jrnz ans1420 ;More? + jruc anslp + +ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj + move a4,*a0(OPAL) + jruc anslp + +asANI ;>Do ANI on OID + move *a8+,a5,L + move *a8+,a1 ;OID + addi CLSANIM,a1 + add a11,a1 ;+offset + move @OBJLST,a0,L + clr a2 ;No mask +ans1620 callr obj_find + jrz anslp + move a8,a9 + move a1,a3 + move a5,a1 ;*Img + move a0,a8 ;*Obj + move *a8(OCTRL),a4 ;Same flags + calla ANI + move a3,a1 + move a8,a0 + move a9,a8 + move *a0,a0,L + jrnz ans1620 ;More? + jruc anslp + +asDEL ;>Delete obj + move *a8+,a0 + clr a1 +asdel5 addi CLSANIM,a0 + add a11,a0 ;+offset + calla obj_delc + jruc anslp + +asDELM ;>Delete obj with mask + move *a8+,a0 + move *a8+,a1 + jruc asdel5 + +asRUN ;>Run a new anim script + move *a8+,a0,L + move *a13(PROCID),a1 ;Inherit same ID +asrun5 move a8,a10 + move a0,a8 ;*Script + move *a13(animsbx),a9,L ;Get base XY + movi anim_script2,a7 + calla GETPRC + move a10,a8 + jruc anslp + +asRUNI ;>Run a new anim script with ID + move *a8+,a0,L + move *a8+,a1 + addi ANIMPID,a1 + add a11,a1 ;+offset + jruc asrun5 + +asCRE ;>Create a process + move *a8+,a7,L + move *a8+,a9,L ;Pass A9 to process + movi ANIMPID+>ff,a1 + add a11,a1 ;+offset + calla GETPRC + jruc anslp + +asKIL ;>Kill processes with mask + move *a8+,a0 + addi ANIMPID,a0 + add a11,a0 ;+offset + move *a8+,a1 + calla KILALLN + jruc anslp + +asJMP ;>Jump to new location + move *a8+,a8,L + jruc anslp + +asJMPR ;>Jump to new location if RND<# + move *a8+,a4,L + movi 999,a0 ;.1 % resolution + callr RNDRNG0 + move *a8+,a1 + cmp a1,a0 + jrhs anslp + move a4,a8 ;Do jmp + jruc anslp + +asJMPEQ ;>Jump to new location if = to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jrne anslp ;Not same? + move a2,a8 ;Do jmp + jruc anslp + +asJMPNE ;>Jump to new location if != to mem + move *a8+,a0,L + move *a0,a0 ;Get value + move *a8+,a2,L + move *a8+,a1 + cmp a1,a0 + jreq anslp ;Same? + move a2,a8 ;Do jmp + jruc anslp + +asSNDD ;>Do a snd call in demo + movk ADJMUSIC,a0 ;Get demo music ON/OFF + calla GET_ADJ + jrz asSND ;Do sounds? + addk 32,a8 + jruc anslp +asSND ;>Do a snd call + move *a8+,a0,L + calla snd_play1 + jruc anslp + +asASM ;>Inline code + exgpc a8 + jruc anslp + +asHIDE ;>Hide an OID (X+5000) + movi 5000,a4 +ashide2 move *a8+,a1 + clr a2 + clr a5 + jruc asxyhs + +asSHOW ;>Show an OID (X-5000) + movi -5000,a4 + jruc ashide2 + +asADDW ;>Add WORD to mem + move *a8+,a0,L + move *a8+,a1 + move *a0,a2 + add a1,a2 + move a2,*a0 + jruc anslp + +asADDWO ;>Add WORD to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2 + add a0,a2 + move a2,*a1 + jruc anslp + +asADDLO ;>Add LONG # to last obj+offset + move *a8+,a0,L + move *a13(animslobj_p),a1,L ;Get * to last one + move *a8+,a2 ;Offset + add a2,a1 + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asADLVO ;>Add LONG value to last obj+offset + move *a8+,a0 + move *a13(animslobj_p),a1,L ;Get * to last one + add a0,a1 ;+Offset + move *a13(animsv),a0,L ;Get value + move *a1,a2,L + add a0,a2 + move a2,*a1,L + jruc anslp + +asSVRL ;>Set value to rnd long + move *a8+,a0,L + move *a8+,a1,L + callr RNDRNG + move a0,*a13(animsv),L + jruc anslp + +asSVRLT ;>Set value to rnd long from a table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + move a0,*a13(animsv),L + jruc anslp + +asSVL ;>Set value to long + move *a8+,a0,L + move a0,*a13(animsv),L + jruc anslp + +asBXY ;>Add # to BaseXY + move *a8+,a0,L + move *a13(animsbx),a1,L + addxy a0,a1 + move a1,*a13(animsbx),L + jruc anslp + +asTXTR ;>Print rnd text from table + move *a8+,a4,L + move *a4+,a0 ;#Table entries + subk 1,a0 + callr RNDRNG0 + sll 5,a0 ;*32 + add a0,a4 + move *a4,a0,L + jruc astxt5 + +asTXT ;>Print text + move *a8+,a0,L +astxt5 +; calla prt0_xy + jruc anslp + + +asTXTK ;>Kill text + PUSHP a8 + callr ERASE_TXT +; movk 4,a11 ;Save A11! +; JSRP text_shrink ;Sleeps + PULLP a8 + jruc anslp + + +asEND SLEEPK 1 ;>Wait on FRANIMs before exit + move *a13(animsfnum),a1 + jrnz asEND + DIE + + + +******************************** +* Animation of a part (Process) + + STRUCTPD + APTR anfc_p ;*AnimScrpt process that made me, set by AS + APTR anfl ;*Franim list + + + SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops + + move @OBJLST,a8,L ;>Find object +anf100 move *a8(OID),a0 + cmp a10,a0 + jreq anf300 + move *a8,a8,L + jrnz anf100 + jruc anf700 ;No match! + +anf300 move a9,*a13(anfl),L +anf340 JSRP FRANIMQ + move *a13(anfl),a9,L ;Go to 1st + move a11,a11 + jrn anf340 ;-=Infinite + dsj a11,anf340 + +anf700 move a11,a11 + jrn anf800 + move *a13(anfc_p),a0,L ;Get *Creator + move *a0(animsfnum),a2 ;#Frans-1 + subk 1,a2 + move a2,*a0(animsfnum) +anf800 DIE + + + +******************************** +* Wait for animation processes to finish + + SUBR anim_wait + +anw10 SLEEPK 3 + move @animscnt,a1 + jrgt anw10 + RETP + +******************************** +* Wait 50 and kill anim stuff (Process) + + SUBR anim_kilslp + + SLEEP 50 + callr anim_killall + DIE + + +******************************** +* Kill all animation processes and objects + + SUBR anim_killall + + clr a0 + move a0,@animscnt + + movi ANIMPID,a0 ;>Kill processes + movi >3ff,a1 + calla KILALLN + + movi CLSANIM,a0 ;>Delete objs + movi >3ff,a1 + jauc obj_delc + + + +******************************** +* Find an object by OID +* A0=*1st obj +* A1=OID +* A2=!Mask +* >A0=*Obj or 0 (Z) +* Trashes A1,A3 + + SUBRP obj_find + + andn a2,a1 +of20 move *a0(OID),a3 + andn a2,a3 ;Remove bits + cmp a1,a3 + jreq of50 + move *a0,a0,L + jrnz of20 +of50 move a0,a0 ;A0=*Obj or 0 + rets ;Pass CC + + + + + + +#*************************************************************** +* Reset autoerase color for fixing scrn glitches +* Trashes scratch + + SUBR autoerase_set + + pushst + dint + callr dma_wait ;Wait on dma + + clr a0 + move a0,@DMACMAP + movi ERASECOL,a0 ;Color pair + movi 510*512*8,a1 ;Store to last 2 lines of bitmap + movi 512*8*2/16,b0 +#lp move a0,*a1+ + dsj b0,#lp + + popst + + rets + +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with (Ex. 0202h,a9) + +;DJT Start + SUBR FLASHME +;DJT End + + move *a8(OCONST),a0 + jrnz #x ;Flashing? + + move a9,*a8(OCONST) + setf 4,0,0 + movk M_CONNON,a0 ;Replace non-zero data with constant + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + + SLEEPK 2 + + clr a0 + move a0,*a8(OCONST) ;Clr color + + setf 4,0,0 + movk M_WRNONZ,a0 + move a0,*a8(OCTRL) ;Write 4 low bits + setf 16,1,0 + +#x DIE +;DJT Start + .endif +;DJT End + + .if 0 +#******************************* +* Flash an image by making a constant color +* A8=*Image to flash +* A9=Color to flash with *64K + +FLASHME + move *a8(OCONST),a10 + jrnz #x ;Flashing? + srl 16,a9 + move a9,*a8(OCONST) ;Set color + move *a8(OCTRL),a0 + movk 8,a1 + or a1,a0 ;Set constant + move a0,*a8(OCTRL) + SLEEPK 2 + clr a0 + move a0,*a8(OCONST) ;Clr color + move *a8(OCTRL),a0 + andi >fff5,a0 ;Clr constant & nonzero + addk 2,a0 ;Set nonzero + move a0,*a8(OCTRL) +#x DIE + .endif + +******************************** +*CHEAP COLOR CYCLER +*CYCLES ANY NUMBER OF COLORS +*A8=PALETTE NAME +*A9=RAM STORAGE AREA +*A10=MSW START COLOR, LSW END COLOR +*A11=SPEED, A11=NEGATIVE FOR REVERSE CYCLER + +COLCYC + SLEEPK 4 + MOVE A8,A0 + calla pal_find + JRZ COLCYC ;WAIT TILL IT SHOWS UP FOLKS... + + CLR A1 ;GET THE COLORS INTO RAM + MOVX A10,A1 ;GET END COLOR + SRL 16,A10 ;ADJUST START COLOR + SUB A10,A1 ;GET COUNT + MOVE A1,*A13(PDATA) ;SAVE COUNT + MOVE A1,A4 + SLL 4,A1 ;COUNT IN WORDS + MOVE A10,A5 + SLL 4,A5 ;OFFSET INTO PALETTE + ADD A8,A5 + ADDK 16,A5 ;SKIP PALETTE WORD COUNT + MOVE A9,A3 + MOVE A9,A6 + ADD A1,A6 + MOVE A6,A8 + +COLCYC1 MOVE *A5+,A7 ;TRANSFER IT TWICE + MOVE A7,*A3+ + MOVE A7,*A6+ + DSJS A4,COLCYC1 + + SRL 8,A0 + SLL 8,A0 + ADD A0,A10 ;COLRAM DESTINATION + +COLCYCB + MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS +COLCYCBL + MOVE A8,A0 ;GET SOURCE ADDRESS + MOVE A10,A1 ;GET DESTINATION CONSTANT + MOVE *A13(PDATA),A2,W ;GET COUNT + calla pal_set + SUBK 16,A8 + CMP A8,A9 + JRLO CCYCBSLP + MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START +CCYCBSLP + MOVE A11,A0 ;GET SLEEP TIME + CALLA PRCSLP + JRUC COLCYCBL + + +#******************************* +* CYCLE A PAL WITH A FIXED ROM COLOR TABLE +* A8= [COLOR # TO START AT,# TO CYCLE] +* A9= PAL NAME TO CYCLE +* A10=TABLE TO CYCLE IT WITH +* A11=RATE OF CYCLE IN TICKS + +CYC0 SLEEP 60 + +CYCLE_TABLE + MOVE A9,A0 ;PAL NAME TO CYCLE + calla pal_find + jrz CYC0 + SRL 8,A0 + SLL 8,A0 + MOVY A8,A1 + SRL 16,A1 ;A1=COLOR # TO START WITH + MOVE A8,*A13(PDATA) ;PDATA WILL HAVE # TO CYCLE (CNT) + MOVE *A10,A2,W + MOVE A2,*A13(PDATA+16) ;VALUE IN TABLE TO STOP AT + MOVE A0,A8 ;A8=[PAL #,0] + ADD A1,A8 ;A8=[PAL #,COLOR TO START AT] + MOVE A10,A9 ;A10=ROM TABLE TO CYCLE WITH +#loop move a8,a1 + MOVE A9,A0 ;A0=TABLE POSITION + MOVE *A13(PDATA),A2 ;A2=COLOR COUNT + calla pal_set ;do the transfer + MOVE A11,A0 + CALLA PRCSLP + ADDK >10,A9 + MOVE *A9,A0 + JRN RESTUFF + MOVE *A13(PDATA+16),A1 ;PDATA+16=ENTRY WE STOP AT + CMP A0,A1 + jrne #loop +RESTUFF MOVE A10,A9 ;REACHED END OF TABLE, RESTUFF + jruc #loop + + +**************************************************************** +* Converts a 32 bit hex # to a null terminated ascii string +* A8=# +* >A8=*String + +HEXTOASC + PUSH a1,a2,a9 + clr a1 + move a1,-*sp ;Push the null terminator + movk 10,a1 ;Divisor for decimal + move a8,a9 +hexta1 movk 3,a2 ;Comma count +hexta2 clr a8 + divu a1,a8 + addi '0',a9 ;Make the remainder ascii + move a9,-*sp ;Save here + move a8,a9 + jrz hexta3 ;Done? + dsj a2,hexta2 + movi ',',a2 + move a2,-*sp ;Stuff a comma + jruc hexta1 + +hexta3 movi STRNGRAM,a1 ;Store here for blow out + move a1,a8 +hexta4 move *sp+,a9 + movb a9,*a1 + addk 8,a1 + move a9,a9 + jrnz hexta4 + + PULL a1,a2,a9 + rets + + +******************************** +* Erase all text objects + + SUBR ERASE_TXT + + movi CLSNEUT|TYPTEXT|SUBTXT,a0 + jauc obj_del1c + + +************************************************************************** +* +* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! +* A0 = SLEEP TIME BETWEEN CHARACTERS +* A4 = DMA CONTROL +* A6 = COLOR (16 BITS) +* A8 = PTR TO STRING +* A9 = [Y,X] SCREEN ADDRESS OF STRING +* A10 = [Y,X] SPACING +* A11 = POINTER TO FONT TABLE +* A14 = FLAGS:JUSTIFY +* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA +* JUSTIFY = 0 LEFT JUSTIFY +* 1 CENTER JUSTIFY +* 2 RIGHT JUSTIFY +* WRLD = ADJUST FOR WORLD COORDINATES +* LOWZ+20000=ZPOS +* +* RETURNS: +* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR +* A9 = NEXT CURSOR POSITION AFTER THE STRING +* NOTE: CALL WITH JSRP +* +************************************************************************** + +;LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRLNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + clr a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST +STRCNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 1,a14 + jruc stringr1 +;CENTER JUSTIFY, NORMAL, DMA, MULTIPLE COLORS + SUBR STRCNRM_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movk 1,a14 + move a6,a5 + jruc stringr1_1 + +;RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST +STRRNRM + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movk 2,a14 + jruc stringr1 + +;LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRLINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; clr a14 +; jruc stringr1 + +;CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST +;STRCINV +; mmtm a12,a1,a2,a3,a4,a6,a14 +; MOVI DMACZ,A4 +; movk 1,a14 +; jruc stringr1 +; + +;LEFT JUSTIFY, NORMAL, OBJECT LIST +STRLNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10000,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST +STRCNRMO + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMACNZ|M_NOCOLL,a4 + movi >10001,a14 + jruc stringr1 + +;CENTER JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! +STRCNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10001,a14 + move a6,a5 + jruc stringr1_1 + +;LEFT JUSTIFY, NORMAL, OBJECT LIST, MULTIPLE COLORS! + SUBR STRLNRMO_1 + mmtm a12,a1,a2,a3,a4,a6,a14 + movi DMAWNZ|M_NOCOLL,a4 + movi >10000,a14 + move a6,a5 + jruc stringr1_1 + +STRINGER + mmtm a12,a1,a2,a3,a4,a6,a14 +stringr1 + move a6,a5 + sll 16,a5 ;Setup constant color in fixed palette +stringr1_1 + + clr a7 + movx a14,a7 + subk 1,a7 + jrn strr10 ;Normal left justify + jrz strrc + + callr STRNGLEN ;Right justify + jruc strra + +strrc callr STRNGLEN ;Center justify + srl 1,a7 ;STRNGLEN/2 + +strra subxy a7,a9 ;Adjust string starting position + jruc strr10 ;Start loop + + +strr1 addk 5,a9 ;Add a space +strr5 addxy a10,a9 ;Add spacing + +strr10 movb *a8,a1 ;Get a character + jrle strrx ;Done? + addk 8,a8 ;Next byte + + subk 32,a1 + jrle strr1 ;Space? + + ;Save sleep time +strr20 PUSH a0 + + subk 1,a1 ;>Calc table offset + sll 5,a1 ;*32 + add a11,a1 + move *a1,a1,L ;Get * image header + move *a1(ICTRL),a3 + + PUSH a1,a14 + + btst 16,a14 + jrz strrdma ;Only do DMA? + + move a1,a2 + + calla GETOBJ ;Create the character as an object + jrz strrdun ;No object? + + move a2,*a0(OIMG),L + move *a2(ISAG),*a0(OSAG),L + move a4,*a0(OFLAGS) ;FIX!!!!! + move a5,*a0(OPAL),L ;&CONST + movi 01000100h,a1 + move a1,*a0(OSCALE),L + + move a4,a1 + andi >803f,a1 ;Kill mode bits + or a1,a3 + move a3,*a0(OCTRL),L ;&OFSET + + movi CLSNEUT|TYPTEXT|SUBTXT,a14 + move a14,*a0(OID) + + move @LOWZ,a14 + addi 20000,a14 + move a14,*a0(OZPOS) + + clr a2 + move a2,*a0(OXVEL),L + move a2,*a0(OYVEL),L + move a2,*a0(OZVEL),L + + movy a9,a2 ;Y + move a9,a3 + sll 16,a3 ;X + calla GANISAG + + move @WRLD,a2 + jrnz strr100 + calla obj_addworldxy ;Put us in the world + +strr100 calla INSOBJ + jruc strrdun + + +strrdma PUSH a3 ;>Simple DMA + move *a1,a2,L ;ISIZE + move *a1(ISAG),a3,L ;Get top left sag + calla GANIOF + move a5,a1 ;Constant:Palette + PULL a5 + PUSH a4 + andi >803f,a4 + or a4,a5 ;Offset:Control + move a3,a4 ;SAG + + move a9,a3 ;A3=Y:X + srl 16,a6 + movx a6,a7 + subxy a7,a3 ;Sub anioffset + + calla QDMAN + PULL a4 + move a1,a5 + +strrdun PULL a1,a14 + + move *a1,a1 ;Get ISIZEX + addxy a1,a9 ;Add X size + move *sp+,a0,L + jrz strr5 ;No sleep? + + mmtm a12,a0,a4,a5,a14 + calla PRCSLP + mmfm a12,a0,a4,a5,a14 + jruc strr5 + +strrx clr a1 + move a1,@LOWZ + addk 8,a8 ;Next byte + mmfm a12,a1,a2,a3,a4,a6,a14 + RETP + + +************************************************************************** +* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING +* A8 = PTR TO STRING +* A10 = [Y,X] SPACING OF STRING +* A11 = PTR TO FONT TABLE +* RETURNS: +* A7 = LENGTH OF STRING +* Z BIT SET IF LENGTH IS ZERO +************************************************************************** +STRNGLEN + PUSH a8,a14 + clr a7 ;A7=Length + jruc stl60 + +stl10 addk 8,a8 ;Point to next + subk 32,a14 + jrgt stl20 ;Good char? + addk 5,a7 ;Hard code a space + jruc stl40 + +stl20 subk 1,a14 + sll 5,a14 ;*32 + add a11,a14 ;A14=*Correct character header + move *a14,a14,L + move *a14,a14 ;Get ISIZEX + + addxy a14,a7 ;Add char length +stl40 addxy a10,a7 ;Add space length +stl60 movb *a8,a14 + jrgt stl10 ;Next character? + + PULL a8,a14 + zext a7 + rets + + + +************************************************************************** +* * +* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJOFF + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + +************************************************************************** +* * +* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 * +* A0 = PTR TO OBJECT BLOCK * +* * +************************************************************************** +OBJON + PUSH A4 + MOVE *A0(OCTRL),A4 + SRL 4,A4 + SLL 4,A4 + ADDK 2,A4 + MOVE A4,*A0(OCTRL) + move *sp+,a4,L + RETS + + +************************************************************************** +* * +* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK * +* A13 = PTR TO PROCESS BLOCK * +* * +************************************************************************** +;CLRPDATA +; MMTM SP,A1,A6,A14 +; MOVE A13,A14 +; CLR A1 +; ADDI PDATA,A14 +; MOVI (PSDATA-PDATA)/16,A6 +;CLRSHL +; SRL 1,A6 +; JRNC CLRPDL +; MOVE A1,*A14+,W ;STUFF THE ODD WORD +;CLRPDL +; MOVE A1,*A14+,L +; DSJS A6,CLRPDL +; MMFM SP,A1,A6,A14 +; RETS +************************************************************************** +* * +* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF * +* AN OBJECT TO THE "GROUND." * +* A8 = OBJECT BLOCK * +* RETURN(S) * +* A1 = DISTANCE FROM GROUND (16 BITS) * +* STATUS BITS SET ACCORDING TO THE SIGN OF A1 * +* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K * +* * +************************************************************************** +;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN +;DFRMGRND +; PUSH A2 +; MOVE *A8(OYPOS),A1,W +; MOVE *A8(OSIZEY),A2,W +; ADD A1,A2 ;A2 = BOTTOM Y +; MOVE *A8(OZPOS),A1,W +; SUB A2,A1 +; ADDI ZORIGIN,A1 +; MMFM SP,A2 +; RETS + +************************************************************************** +* * +* GET BOTTOM Y OF AN OBJECT * +* A8 = OBJECT BLOCK PTR * +* RETURN(S) * +* A1 = 16 BIT BOTTOM Y IN LSW * +* STATUS SET ACCORDING TO THE BOTTOM Y * +*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING * +* * +************************************************************************** +;GETBOTY +; PUSH A2 +; MOVE *A8(OYPOS),A1,W ;GET Y POSITION +; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE +; ADD A2,A1 ;A1 = BOTTOM Y +; MMFM SP,A2 +; RETS + + +;DJT Start + .if 0 +;DJT End +******************************** +* GETCPNT - Get the center xy position of an object +* A8=*Object +* >A0=Center Y:Center X + + SUBR GETCPNT + + move *a8(OYVAL),a1,L + move *a8(OXPOS),a0 + movx a0,a1 + move *a8(OSIZE),a0,L + srl 1,a0 ;/2 + andi >7fff7fff,a0 ;Clr bit 15 + addxy a1,a0 + rets + + +******************************** +*GETANIX - GET ANIMATION POINT X COORD +*CALLING PARMS: A8=OBJECT +*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT + +;DJT Start + SUBR GETANIX +;DJT End + MMTM SP,A1,A2 + MOVE *A8(OIMG),A1,L + MOVE *A1(IANIOFF),A2 + MOVE *A8(OCTRL),A0 + BTST B_FLIPH,A0 + JRZ GETAX1 + MOVE *A1,A0 ;ISIZEX + SUB A2,A0 + DEC A0 + MOVE A0,A2 +GETAX1 MOVE *A8(OXPOS),A0 + ADD A2,A0 + MMFM SP,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + + +**************************************************************** +* Quickly produce a random # in range -X to +X +* A0=+X +* >A0=Random # (-A0 to +A0) (CC) +* Trashes scratch + + SUBR RNDRNGS + + move a0,a1 + neg a0 + + +******************************** +* Quickly produce a random # in a given range +* A0=Lower bound +* A1=Upper bound +* >A0=Random # (A0 to A1) (CC) +* Trashes scratch + + SUBR RNDRNG + + sub a0,a1 ;Normalize the range + addk 1,a1 + move a0,b0 + + move @RAND,a0,L + rl a0,a0 + move @HCOUNT,a14 + rl a14,a0 + add sp,a0 + move a0,@RAND,L + + mpyu a1,a0 + move b0,a1 + add a1,a0 + rets + + +******************************** +* Quickly produce a random # in range 0-X +* A0=X +* >A0=Random # (0 to A0) (No CC) +* Trashes scratch + + SUBR RNDRNG0 + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + addk 1,a0 + mpyu a1,a0 ;Condition codes not valid! + + rets + + +******************************** +* Random % routine +* A0=Probability of event (0-1000) (0=0%, 1000=100%) +* >A0=0-999 (CC) (jrls nope, jrhi happened) +* Trashes scratch + + SUBR RNDPER + + move @RAND,a1,L + rl a1,a1 + move @HCOUNT,a14 + rl a14,a1 + add sp,a1 + move a1,@RAND,L + + move a0,a14 + movi 1000,a0 + mpyu a1,a0 ;0-999 + cmp a0,a14 + rets + + +************************************************************************** +* * +* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR * +* A1 = [COLOR,PALETTE] * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +FILLAREA + PUSH a0,a1,a2,a4,a5,a14 + jruc areacon +************************************************************************** +* * +* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN * +* A3 = DAG OF AREA [YPOS,XPOS] * +* A4 = [Y,X] SIZE OF AREA * +* * +************************************************************************** +BLNKAREA + PUSH a0,a1,a2,a4,a5,a14 + clr a1 ;constant 0:palette 0 +areacon + move a4,a2 + movi IROM,a4 ;Somewhere in image rom + movi DMACAL,a5 + calla QDMAN + PULL a0,a1,a2,a4,a5,a14 + rets + + +******************************** +* Wait till DIRQ +* Trashes A0-A1 + + SUBR dirq_wait + + move @dirqtimer,a0 +dirqwlp move @dirqtimer,a1 + cmp a0,a1 + jreq dirqwlp + rets + + +******************************** +* Wait on the DMA busy bit to clear +* Preserves A1 + + SUBRP dma_wait + +dwlp move @DMACTRL,b0 + jrn dwlp ;Busy? + rets + + +******************************** +* Wait for dma queue to empty, then wait for dma to finish +* the last one. Turn displayon off. + + SUBR dmaq_wait + + move @DISPLAYON,a1 + clr a0 + move a0,@DISPLAYON ;Display off + + move @DMACTRL,b0 + jrnn dqw20 +dqw10 move b13,b13 + jrge dqw10 +dqw20 callr dma_wait + move a1,@DISPLAYON + + rets + + +******************************** +* Turn page flipping and erasure off. Setup for page0 +* Trashes scratch + + SUBR dpageflip_off + + clr a0 + move a0,@dpageflip + not a0 + move a0,@dpage + movi -4,a0 ;Page0 + move a0,@DPYSTRT + + rets + +#******************************* +* Blank display by using HEBLNK +* Trashes scratch + + SUBRP display_blank + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + move @HSBLNK,a0 ;Blank screen + move a0,@HEBLNK + eint + + rets + +#******************************* +* Unblank display by resetting HEBLNK +* Trashes scratch + + SUBRP display_unblank + + dint +#lp move @VCOUNT,a0 + cmpi EOSINT,a0 + jrlt #lp + movi HEBLNKINIT,a0 + move a0,@HEBLNK + eint + + rets + + +;DJT Start + .if 0 +;DJT End +************************************************************************** +* * +* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN * +* FILL WITH PALETTES. * +* * +************************************************************************** +CRINIT + MMTM SP,A0,A1,A2,A6 + MOVI COLRAM,A1 + CLR A0 + MOVI 10000H,A6,L +*CLEAR ALL COLOR PALETTES +CRINIT1 + MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME + DSJS A6,CRINIT1 + + MMFM SP,A0,A1,A2,A6 + RETS + +************************************************************************** +* * +* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE * +* A1 = START OF ROM TABLE * +* A2 = COLOR RAM START ADDRESS * +* A6 = PALETTE COUNT * +* * +************************************************************************** +CRLOAD + MMTM SP,A0,A1,A2 +CRLOAD1 + MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NULL PALETTE +CRLOAD3 + MOVE A0,*A2,W ;STUFF COLOR + MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE + JRN CRLOAD4 ;BR = NEXT PALETTE + ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES + JRUC CRLOAD3 + +CRLOAD4 + ADDI 1000H,A2 ;NEXT PALETTE + SRL 12,A2 + SLL 12,A2 ;MASK OFF LOW BULLSHIT + DSJ A6,CRLOAD1 + + MMFM SP,A0,A1,A2 + RETS +;DJT Start + .endif +;DJT End + + +******************************** +* CLEAR THE SCREEN (Kill this, only used by diagnostics) +* only call with interrupts disabled and the dma shut down, otherwise +* use clr_scrn + +SCRCLR CLR A0 + + MMTM SP,A1,A2 + CLR A1 + MOVE A1,@CMAPSEL ;SELECT COLOR MAP 0 + MOVI SCREEN,A1 + MOVI (SCRNE-SCREEN)/32,A2 +SCRLP MOVE A0,*A1+,L + DSJS A2,SCRLP + + MMFM SP,A1,A2 + RETS + + + +******************************** +* Clear screen routine + + SUBR CLR_SCRN + + mmtm sp,a1,a2,a3 + move @DISPLAYON,a3 +; clr a1 +; move a1,@DISPLAYON + callr dmaq_wait ;wait on dma + clr a0 + move a0,@CMAPSEL ;Select color map 0 + movi SCREEN,a1,L + movi ((SCRNE-2000H)-SCREEN)/32,a2,L +clrlp move a0,*a1+,L + dsjs a2,clrlp + move a3,@DISPLAYON + mmfm sp,a1,a2,a3 + rets + + +;DJT Start + .if 0 +;DJT End +******************************** +* Animation list processor (JSRP) +* A1=Mode: 0=Process current frame +* 1=Process to end of list +* 4=Process current frame, no sleep (time retrn'd in a0) +* A8=*Object +* A9=*Ani list +* Rets: +* C set if end of animation list was hit +* A9=* to next frame or end of list +* Trashes scratch +* +* Animation script format +* .long *Image header or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* Bit # Flag +* ----- ---- +* 8-12 Unused +*BNEWPAL equ 13 13 New palette address is specified +*BFLIPBIT equ 14 14 New flip bits are specified +* Flag hierarchy: 15-8 +* Options should follow in this order + + +;DJT Start + SUBR FRANIM +;DJT End + PUSHP a3,a4 + + cmpi ROM,a9 ;Check for bogus script pointer + jrlo franerr + + move a1,a3 ;A3=Mode + +franl move *a9+,a1,L + jrz frannd ;End? + + move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo fran2 ;Just sleep? + + PUSH a1,a2,a7 + + btst BFLIPBIT,a0 + jrz frannobi ;No flip? + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set flag bits + +frannobi + btst BNEWPAL,a0 + jrz frannopa ;No pal? + + move a0,a7 + move *a9+,a0,L ;Get *pal + calla pal_getf + jrz fran10 ;No palette available? + move a0,*a8(OPAL) ;Store new palette +fran10 + move a7,a0 +frannopa + PULL a1,a2,a7 + sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +fran2 + calla ANI ;Setup new animation + + cmpi 4,a3 + jreq fran3 ;One frame, no sleep? + + move a3,-*a12 + calla PRCSLP ;Sleep + move *a12+,a3 + jrnz franl ;Loop til end of list? + +fran3 + PULLP a3,a4 + clrc ;Clear end flag + RETP + +frannd + PULLP a3,a4 + setc ;Return with end flag set + RETP + + +franerr + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc frannd +;DJT Start + .endif +;DJT End + + +#*************************************************************** +* Animation list processor (Quick list version) (JSRP) +* A8=*Object +* A9=*FRANIM List +* Trashes A0-A4,A14,B0-B1 +* +* Script format +* .long *Image hdr or 0 if end +* .word Sleep time <-- BITS 0 - 7 ARE THE SLEEP TIME +* <-- BITS 8 -15 ARE THE FLAGS: +* BIT # FLAG +* ----- ---- +* 8-10,12 UNUSED +*BDELTAY equ 11 Word is added into YPOS +*BNEWPAL equ 13 New palette address is specified +*BFLIPBIT equ 14 New flip bits are specified +* Flag hierarchy: 15-8 Options should follow in this order + + +FRANIMQ + + cmpi ROM,a9 + jrhs frq80 ;Franim list OK? + + .if DEBUG + LOCKUP + eint + .else + CALLERR 8,0 ;Bad franim list + .endif + jruc #x + + +#lp move *a8(OCTRL),a4 ;Current flags + move *a9+,a0 ;Sleep time + cmpi >100,a0 + jrlo frq70 ;No special bits? + + btst BFLIPBIT,a0 ;New flip? + jrz frq40 + move *a9+,a2 ;Get the new flip flags + andni (M_FLIPV|M_FLIPH),a4 ;Clear the current flip status + or a2,a4 ;Set desired bits + +frq40 btst BNEWPAL,a0 ;New palette ? + jrz frq60 + + move a0,a2 + move a1,a3 + move *a9+,a0,L ;Get the palette address + calla pal_getf ;Get a color map assignment + jrz frq50 ;No palette available? + move a0,*a8(OPAL) ;Set new palette +frq50 move a2,a0 + move a3,a1 + +frq60 btst BDELTAY,a0 + jrz frq65 + move *a9+,a2 ;Get DY + move *a8(OYPOS),a3 + add a2,a3 + move a3,*a8(OYPOS) + +frq65 sll 32-8,a0 ;Kill special bits + srl 32-8,a0 + +frq70 calla ANI + calla PRCSLP ;Sleep + +frq80 move *a9+,a1,L ;Get frame + jrnz #lp + +#x RETP + + + +;DJT Start + .if 0 +;DJT End +#*************************************************************** +* Hardware security check code (1b00000 & 1b80000) +* >A0=0 if OK +* Trashes scratch + +;OFF .equ >69d2 +;SEC .equ >1b15f50-OFF +;FAKEO .equ ->b00050+OFF +;SECDB .equ 0 +OFF .equ >7db0 +SEC .equ >1b14030-OFF +FAKEO .equ ->b00030+OFF + + SUBR security_chk + + PUSH a2,a3,a4 + clr a0 + movi 63,a3 +#lp move a3,a14 + callr #sc + or a2,a0 + subk 1,a3 + jrge #lp + PULL a2,a3,a4 + rets + +#sc + movi SEC+FAKEO,a1 + sll 15-5,a14 + add a14,a1 ;Add a bogus offset + subi FAKEO,a1 + move a14,*a1(OFF) ;Write 1 of 64 to sec + sub a14,a1 ;Sub offset so we read a different address + move *a1(OFF),a2 ;Read 1st sec value + sll 32-15,a2 + srl 32-6,a2 + sll 9,a2 ;Move to bits 9-14 + xor a14,a2 + sll 32-15,a2 ;Remove top bits + jrnz #x ;Bad value? + + add a14,a1 + srl 2+3,a14 + add a14,a1 + pushst + setf 6,0,0 + move *a1(OFF+9),a2 ;Read 2nd sec value + move a2,b1 + sll 24,b1 + getpc a4 + addi #sec_t-$,a4,W + add a4,a14 + move *a1(OFF+>19),a2 ;Read 3rd sec value + move a2,b0 + sll 16,b0 + or b0,b1 + move *a1(OFF+>29),a2 ;Read 4th sec value + move a2,b0 + sll 8,b0 + or b0,b1 + move *a1(OFF+>39),a2 ;Read 5th sec value + move a2,b0 + or b0,b1 + popst + move *a14+,a2,L + move b1,a1 + andi >3f3f3f3f,a1 + xor a1,a2 ;A2=0 if OK + +#x rets + +#sec_t .long >21283b3b ;0 + .long >2439383b + .long >31283b3b + .long >302b3938 + .long >31283b3b + .long >302b3938 + .long >232f2f2f + .long >26383b3b + .long >21283b3b ;20 + .long >2439383b + .long >312a1224 + .long >302b1120 + .long >312a1224 + .long >302b1120 + .long >232d283b + .long >26383b3b + .long >2b3b3b3b ;40 + .long >2e2e2e2e + .long >39383b1b + .long >383b3b1b + .long >3b3b3b1b + .long >3a3a3a1a + .long >2b3b3b3b + .long >2e2e2e2e + .long >2b39383b ;60 + .long >2e2e2e2e + .long >393a1a18 + .long >383b1b1b + .long >3b3b1b1b + .long >3a3a1a18 + .long >2b39383b + .long >2e2e2e2e + .long >01202b3b ;80 + .long >0431283b + .long >11202b3b + .long >1021283b + .long >11202b3b + .long >1021283b + .long >03273b3b + .long >06302b39 + .long >09302b39 ;A0 + .long >0c232f2f + .long >19322e06 + .long >18312a12 + .long >19322e06 + .long >18312a12 + .long >0b31283b + .long >0e26383b + .long >03273b3b ;C0 + .long >06302b39 + .long >11202b3b + .long >1021283b + .long >13273938 + .long >12243938 + .long >03273b3b + .long >06302b39 + .long >0b31283b ;E0 + .long >0e26383b + .long >19322e06 + .long >18312a12 + .long >1b332f05 + .long >1a302b11 + .long >0b31283b + .long >0e26383b + .def secend +secend +;DJT Start + .endif +;DJT End + + +; .if SECDB +; clr a0 +; rets +; movi SCRATCH,a5 +; clr a0 +; clr a3 +;#tlp move a3,a14 +; callr #sc +; move a1,*a5+,L +; addk 1,a3 +; cmpi 128,a3 +; jrlt #tlp +; +; .else +;;ÄÄÄÄÄÄÄ +; PUSH a2,a3,a4 +; clr a0 +; movi 128-1,a3 +;#lp move a3,a14 +; callr #sc +; or a2,a0 +; subk 1,a3 +; jrge #lp +; PULL a2,a3,a4 +; +; .endif +; rets +; +;;ÄÄÄÄÄÄÄ +;#sc +; move a3,a1 +; srl 6,a1 ;Use bit 7 for security range (0 or 1) +; sll 19,a1 +; addi SEC+FAKEO,a1 +; sll 16-6,a14 +; add a14,a1 ;Add a bogus offset +; subi FAKEO,a1 +; move a14,*a1(OFF) ;Write 1 of 64 to sec +; sub a14,a1 ;Sub offset so we read a different address +; move *a1(OFF),a2 ;Read 1st sec value +; sll 32-15,a2 +; srl 32-6,a2 +; sll 9,a2 ;Move to bits 10-15 +; xor a14,a2 +; sll 32-15,a2 ;Remove top bits +; jrnz #x ;Bad value? +; +; add a14,a1 +; srl 5,a14 +; add a14,a1 +; pushst +; setf 6,0,0 +; move *a1(OFF+9),a2 ;Read 2nd sec value +; move a2,b1 +; sll 24,b1 +; getpc a4 +; addi #sec_t-$,a4,W +; add a4,a14 +; move *a1(OFF+>49),a2 ;Read 3rd sec value +; move a2,b0 +; sll 16,b0 +; or b0,b1 +; move *a1(OFF+>89),a2 ;Read 4th sec value +; move a2,b0 +; sll 8,b0 +; or b0,b1 +; move *a1(OFF+>c9),a2 ;Read 5th sec value +; move a2,b0 +; or b0,b1 +; popst +; move *a14+,a2,L +; move b1,a1 +; +; xor a1,a2 ;A2=0 if OK +; +;#x rets + +;#sec_t +; .long >00000000 +; .long >04081020 +; .long >08102000 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000102 +; .long >04081122 +; .long >08102102 +; .long >0C183122 +; .long >10200000 +; .long >14281020 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010204 +; .long >04091224 +; .long >08112204 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000001 +; .long >24081021 +; .long >28102000 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00010306 +; .long >04091326 +; .long >08112306 +; .long >0C193326 +; .long >10210204 +; .long >14291224 +; .long >18312204 +; .long >1C393326 +; .long >20000103 +; .long >24081123 +; .long >28102102 +; .long >2C183122 +; .long >30200001 +; .long >34281021 +; .long >38312204 +; .long >3C393326 +; .long >00000000 +; .long >01201028 +; .long >02213018 +; .long >03012030 +; .long >04223138 +; .long >05022110 +; .long >06030120 +; .long >07231108 +; .long >08042231 +; .long >09243219 +; .long >0A251229 +; .long >0B050201 +; .long >0C261309 +; .long >0D060321 +; .long >0E072311 +; .long >0F273339 +; .long >10080422 +; .long >1128140A +; .long >1229343A +; .long >13092412 +; .long >142A351A +; .long >150A2532 +; .long >160B0502 +; .long >172B152A +; .long >180C2613 +; .long >192C363B +; .long >1A2D160B +; .long >1B0D0623 +; .long >1C2E172B +; .long >1D0E0703 +; .long >1E0F2733 +; .long >1F2F371B +; .long >20100804 +; .long >2130182C +; .long >2231381C +; .long >23112834 +; .long >2432393C +; .long >25122914 +; .long >26130924 +; .long >2733190C +; .long >28142A35 +; .long >29343A1D +; .long >2A351A2D +; .long >2B150A05 +; .long >2C361B0D +; .long >2D160B25 +; .long >2E172B15 +; .long >2F373B3D +; .long >30180C26 +; .long >31381C0E +; .long >32393C3E +; .long >33192C16 +; .long >343A3D1E +; .long >351A2D36 +; .long >361B0D06 +; .long >373B1D2E +; .long >381C2E17 +; .long >393C3E3F +; .long >3A3D1E0F +; .long >3B1D0E27 +; .long >3C3E1F2F +; .long >3D1E0F07 +; .long >3E1F2F37 +; .long >3F3F3F1F +; +; .def secend +;secend + + + .end diff --git a/SRC/WORLD.EQU b/SRC/WORLD.EQU new file mode 100644 index 0000000..79e44c9 --- /dev/null +++ b/SRC/WORLD.EQU @@ -0,0 +1,149 @@ +***************************************************************************** +* World.Equ - court-world definitions & parameters +* +*.Last mod - 9/15/95 16:54 + +;---------- +; Conditional assembly flags + +CRTALGN .equ 0 ;1-> to show alignment dots +DUNKTST .equ 0 ;1-> dunk test; 2-> same but with plyr fire +DRONES_2MORE .equ 0 ;1-> ;Needed for 2 additional drones + + .asg 4,NUMPLYRS + .if DRONES_2MORE + .asg 6,NUMPLYRS + .endif + +;---------- +; Conversion assignments/values + + .asg 3/8,Z2Y + .asg 8/3,Y2Z + +;---------- +; Court & floor img specs + +GNDI_W .equ 1762 ;Crt img W +GNDI_TW .equ 982 ;Crt img base-to-base W @ top +GNDI_BW .equ 1594 ;Crt img base-to-base W @ bot +GNDI_H .equ 144 ;Crt img H +GNDI_M .equ 54 ;Crt img Mid Y +GNDI_Y .equ 254-GNDI_H ;Nonscroll starting Y + +GND_TOP .equ 40 ;H of floor above crt +GND_BOT .equ 0 ;H of floor below crt +GND_H .equ GNDI_H+GND_TOP+GND_BOT ;Total H of floor +GND_Y .equ GNDI_Y-GND_TOP ;Nonscroll starting Y + +DIVRES .equ 6 ;Frac bres for slope divisor + .asg (1< target rates +DIVS_RATE1 equ 2400h ;rate for inbound,dunks,loose,turnover -slow +DIVS_RATE2 equ 800h ;rate default,min when past MAX_VIEW2 -faster +DIVS_RATE3 equ 500h ;rate for turbo passes -fastest + +YMIN_VIEW equ -186 ;-130;min world Y allowed +YBUFF_NORM equ 70 ;default buffer +YBUFF_DUNK1 equ 45 ;dunk type 1 buffer +YBUFF_DUNK2 equ 25 ;dunk type 2 buffer +YBUFF_ALLEY equ -8 ;alley-oop buffer + +YRATE_NORM equ 2 ;rate default,dunk type 1 +YRATE_SLOW equ 4 ;rate dunk type 2 + +VSCR_CNT .equ 6 ;Crt cnt to vscroll off the bottom +CLIP_CNT .equ 0 ;Crt cnt to always clip off the bottom + +;---------- +; Common conversion macros +;---------- +; Convert linear X to Z-base X +; Parms: =X val INT:FRC; returns whole # result +; unless specified +; =Z val; trashed +; =bitcount of result fraction to keep or +; additional bits to lose if minus (optional) +; +PRJX2Z .macro regx,regz,keep + + .asg 503-GZBASE, ZFAC_OFF + + .asg 11, XFRC_BC + .asg 10, ZFAC_BC + .asg 2, SCAL_BC + + .asg (XFRC_BC+ZFAC_BC-SCAL_BC-(:keep:)), K_BC + + sra 16-XFRC_BC,:regx: ;Keep what we can of X FRC m'plicand + addi ZFAC_OFF,:regz: ;Apply base offset to Z m'plier + mpys :regz:,:regx: + move :regx:,:regz: ;Trash for a quick "multiply" + sra 1,:regx: ; (* 65/128) of the product + sra 7,:regz: + add :regz:,:regx: + .if K_BC < 0 + sll -K_BC,:regx: + .elseif K_BC > 0 + sra K_BC,:regx: + .endif + .endm diff --git a/VDASTUFF/MAKESTIL.BAT b/VDASTUFF/MAKESTIL.BAT new file mode 100644 index 0000000..0c1754f --- /dev/null +++ b/VDASTUFF/MAKESTIL.BAT @@ -0,0 +1,6 @@ +erase %1.* +vda2frm %1 +pkzipo %1 %1.frm +zip2bin %1 +dir %1?.* + \ No newline at end of file diff --git a/VDASTUFF/MK3ZIP.TBL b/VDASTUFF/MK3ZIP.TBL new file mode 100644 index 0000000..0df3737 --- /dev/null +++ b/VDASTUFF/MK3ZIP.TBL @@ -0,0 +1,7 @@ + .DATA +ULT .set 0ffe78000h +E_KAN .set 0fff1ab50h +E_SON .set 0fff33130h +E_JAX .set 0fff5a790h + .TEXT + \ No newline at end of file diff --git a/VDASTUFF/MKBGANI2.IMG b/VDASTUFF/MKBGANI2.IMG new file mode 100644 index 0000000..3a8ada7 Binary files /dev/null and b/VDASTUFF/MKBGANI2.IMG differ diff --git a/VDASTUFF/MKBGANIM.IMG b/VDASTUFF/MKBGANIM.IMG new file mode 100644 index 0000000..de0bdfc Binary files /dev/null and b/VDASTUFF/MKBGANIM.IMG differ diff --git a/VDASTUFF/PAPER.ASM b/VDASTUFF/PAPER.ASM new file mode 100644 index 0000000..de8bbfd --- /dev/null +++ b/VDASTUFF/PAPER.ASM @@ -0,0 +1,254 @@ +************************************************************************** +* * +* This loop spawns off the individual paper processes * +* * +************************************************************************** + + movk 2,a5 +brc2 movi a_big_paper,a9 ; a9 = animation to use + create pid_bani,garbage_straight + movi a_lil_paper,a9 ; a9 = animation to use + create pid_bani,garbage_straight + movi a_leaf,a9 ; a9 = animation to use + create pid_bani,garbage_straight + create pid_bani,garbage_straight + create pid_bani,garbage_straight ; straight does NOT loop on screen + + movi a_big_paper,a9 + create pid_bani,garbage_loop ; does a Loop-dee-Loop onscreen + movi a_lil_paper,a9 + create pid_bani,garbage_loop + dsj a5,brc2 + + + + + + + + +;********************************************** + + +garbage_straight + callr get_paper_object ; you can write your version of this +simp4 callr paper_start_position ; compute where to start paper (offscreen) + callr paper_glide ; random velocities (to look real) + callr paper_glide ; random velocities (to look real) + clr a1 ; dx + clr a2 ; dy + jsrp paper_fly_offscreen ; wait for piece to go offscreen + jruc simp4 + + +garbage_loop + callr get_paper_object + +ploop1 callr paper_start_position + callr paper_glide +* +* this code makes the piece go Loop-dee-Loop +* + movi ->2800,a10 ; dy +ploop2 movi ->4000,a1 ; dx + move *a8(oxvel),a0,l + abs a0 + cmpi >8000,a0 + jrhi ploop3 + movi >5000,a10 ; reached peak ---> head downwards +ploop3 move a10,a2 + callr paper_loop_sleep + cmpi ->20000,a1 + jrgt ploop2 + +ploop4 movi >3000,a1 ; dx + movi >3000,a2 ; dy + callr paper_loop_sleep + + cmpi >30000,a2 + jrlt ploop5 + movi >30000,a2 +ploop5 + cmpi >30000,a1 + jrlt ploop4 + + movi >3000,a1 ; dx + movi ->2000,a2 ; dy + jsrp paper_fly_offscreen + jruc ploop1 ; offscreen = start over agin ! + + +paper_fly_offscreen + move a1,*a13(p_store1),w + move a2,*a13(p_store2),w + +pfo4 move *a13(p_store1),a1,w + move *a13(p_store2),a2,w + callr paper_loop_sleep + calla next_anirate + move @worldtlx1+16,a1,w + addi scrrgt,a1 ; a1 = right edge + move *a8(oxpos),a0,w ; a0 = obj position + cmp a1,a0 + jrlt pfo4 ; on screen = loopy + retp + +* +* Input: +* a1 = x velocity change +* a2 = y velocity change +* +paper_loop_sleep + move *a8(oyvel),a0,l + add a2,a0 + move a0,*a8(oyvel),l + move *a8(oxvel),a0,l + add a1,a0 + move a0,*a8(oxvel),l + + pull a11 ; return address + sleep 1 + calla next_anirate + + move *a8(oxvel),a1,l + move *a8(oyvel),a2,l + jump a11 ; return + + +paper_glide + pull a11 + movi >20000,a0 + calla srand + subi >4000,a0 ; nudge things up + move a0,*a8(oyvel),l + + movi >20,a0 + movi >08,a1 + calla randu_minimum + move a0,a10 +glid3 sleep 1 + calla next_anirate + dsj a10,glid3 + jump a11 ; return + +;****************** + +get_paper_object + pull a11 + + movi >30,a0 + calla randu + calla prcslp + + movk 4,a0 + calla init_anirate + move *a9,a5,l + + ; you probably have a routine which + ; does the equivalent of this ! + calla gso_dmawnz ; get object with write non-zero bit set + + movi baklst4,b4 + move a8,a0 + calla insobj_v ; insert on baklst 4 !! + jump a11 + +* +* Start position = just off the left side of the screen (flies to the right) +* +paper_start_position + movi >0000fff0,a4 + movi >40,a0 ; this range !! + movi >80,a1 ; at least this low on the screen + calla randu_minimum ; a1 = randomness # + sll 16,a0 ; random starting y position + addxy a0,a4 + callr a4_to_world_coor ; and rets + + movi >40000,a0 + movi >40000,a1 + calla randu_minimum + move a0,*a8(oxvel),l ; random starting vel + rets + +* +* Convert A4 (screen coordinates) to world coordinates +* +a4_to_world_coor + move @worldtlx1+16,a0,w + move @worldtly+16,a1,w + sll 16,a1 + or a0,a1 + addxy a1,a4 ; a4 = coordinate for obj + calla set_xy_coordinates + rets + + +;***************************************************************** + + +* +* Garbage/Paper animations +* + +a_paper1 .long PAPER1 + .long PAPER2 + .long PAPER3 + .long PAPER4 + .long PAPER5 + .long PAPER6 + .long PAPER7 + .long PAPER8 + .long PAPER9 + .long 0 + + +a_big_paper + .long LGSHEET1 + .long LGSHEET2 + .long LGSHEET3 + .long LGSHEET4 + .long LGSHEET5 + .long LGSHEET6 + .long LGSHEET7 + .long LGSHEET8 + .long LGSHEET9 + .long ani_jump,a_big_paper + +a_lil_paper + .long SMSHEET1 + .long SMSHEET2 + .long SMSHEET3 + .long SMSHEET4 + .long SMSHEET5 + .long SMSHEET6 + .long SMSHEET7 + .long SMSHEET8 + .long SMSHEET9 + .long ani_jump,a_lil_paper + +a_leaf .long LEAF1 + .long LEAF2 + .long LEAF3 + .long LEAF4 + .long LEAF5 + .long LEAF6 + .long LEAF7 + .long LEAF8 + .long ani_jump,a_leaf + + + +* +* LOD file for paper/garbage images +* +C:\VIDEO\KOMBAT3\IMG\MKBGANI2.IMG +---> PAPER1,LGSHEET1,SMSHEET1,LEAF1,SKTORCH1 +POF> +---> PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9 +---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7 +---> LGSHEET8,LGSHEET9,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5 +---> SMSHEET6,SMSHEET7,SMSHEET8,SMSHEET9,LEAF2,LEAF3,LEAF4,LEAF5 +---> LEAF6,LEAF7,LEAF8 + + \ No newline at end of file diff --git a/VDASTUFF/PKZIPO.EXE b/VDASTUFF/PKZIPO.EXE new file mode 100644 index 0000000..1eb00e3 Binary files /dev/null and b/VDASTUFF/PKZIPO.EXE differ diff --git a/VDASTUFF/README.DOC b/VDASTUFF/README.DOC new file mode 100644 index 0000000..62b1fe6 --- /dev/null +++ b/VDASTUFF/README.DOC @@ -0,0 +1,105 @@ + +Mark, + + Here are the steps I used to load the zipped Ultimate MK3 + title screen into program memory. I originally got the file called + ULT.VDA + +;------------------------------------------------------------------ + + +1. Convert ULT.VDA into a zipped BIN file called ULT.BIN by + running Warren's batch file called VDA2FRM.BAT which calls: + + PKZIPO.EXE (you must use this old version of PKZIP) + ZIP2BIN.EXE (converts pkzips output to a BIN file) + +;------------------------------------------------------------------ + + +2. Make an LOD file which includes your BIN file in PROGRAM memory + My LOD file (mkgmil.lod) looked like this: + +; +; mk3: program area pics +; +***> ffe78000 <-------- note: this is PROGRAM area I chose +ASM> MK3ZIP.TBL <----- table file created with LABEL: ULT +FRM> ULT + + ^ + | + |_____ ULT is the binary file created with Warrens batch file + + + +;------------------------------------------------------------------ + + +3. Include the LOD file in your "Make game roms" batch file + This is my batch file to create my game program ROMS It uses the + "learn" file: mk3groms.lrn + + +@echo off +copy d:main.out +srec < mk3groms.lrn +copy /b mainf8.0 + mainfa.0 + mainfc.0 + mainfe.0 mk3.0 +copy /b mainf8.1 + mainfa.1 + mainfc.1 + mainfe.1 mk3.1 +erase mainf*.0 +erase mainf*.1 + + + This is the "learn" file which I described. + Note: mkgmil.irw is included along with main.out which + basically included the zipped picture in the program rom + space. + + + +***** +ff800000 + +2 + +c:\video\supermk3\img\mkgmil.irw <----- mkgmil is the GAME space IRW +main.out + + + + +a + + +;------------------------------------------------------------------ + + +4. Running Loadimg with the MKGMIL.LOD file created a file called + MK3ZIP.TBL which contains: + + + .DATA +ULT .set 0ffe78000h + .TEXT + + + You must include this file in your code so you can point the + unzipper routine to the address of the zipped picture. + + + +;------------------------------------------------------------------ + +5. In your program call the unzipper like dis: + + + clr a10 ; a10 = coordiantes to use + movi ULT,a8 ; a8 = address of zipped picture + jsrp movie_run + + +;------------------------------------------------------------------ + + + Ed + \ No newline at end of file diff --git a/VDASTUFF/UNZIP.ASM b/VDASTUFF/UNZIP.ASM new file mode 100644 index 0000000..9ddae0b --- /dev/null +++ b/VDASTUFF/UNZIP.ASM @@ -0,0 +1,857 @@ +************************************************************** +* +* Software: Warren Davis +* Initiated: 9/3/91 +* +* Modified: Shawn Liptak, 8/13/92 -Basketball +* +* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. +* +*.Last mod - 3/24/93 11:23 +************************************************************** + .file "unzip.asm" + .title "pkzip unzipper" + .width 132 + .option b,d,l,t + .mnolist + + .include dispequ.asm ;Display proc equates + .include sysequ.asm + .include mainequ.asm + .include macros.hdr + .include stringh.asm + + .include mk3zip.tbl + +; .include mk3end.tbl +; .include mk3bio.tbl + + .include ram.glo + + + .ref syscopy + +BPP .set 3 +RAMBUFSIZ .set (4*1024)*8 ; << BPP +;SCRN_ST .set (170*scrn_ptch)+(150*8) +;PXLS_PR_TIK .set 10000 + +;PAGE1ADR .equ PAGE1YO*512*8 + +page_1_address .set >100000 ; = PAGE1YO*512*8 + +CARYTEST .equ 0 ;1 for Cary's board testing +DEBUGPORT .equ >1d01010 +TUNITDB .equ 0 + + +PTEMP1 .equ p_store1 +PIXPERFRM .set p_store2 + + +RamBuffer .usect "unzip",RAMBUFSIZ + + .bss lengthtree ,256*32 + .bss disttree ,256*32 + .bss minptrtbl ,256*32 + + .def lengthtree + .text + + + +display_zipped_pic + move a0,a1 + sll 5,a0 + sll 4,a1 + add a1,a0 + addi zipped_pics,a0 + move *a0+,a1,w ; bank ?? + cmpi 2,a1 + jrne dzp3 + + move @syscopy,a1,w ; ram copy !! + andi 1111110011111111b,a1 ; clear image bank bits + ori 0000001000000000b,a1 ; set bank 2 bit + move a1,@sysctrl,w + move a1,@syscopy,w ; keep a copy in ram + jruc dzp9 + +dzp3 cmpi 1,a1 + jrne dzp4 + + move @syscopy,a1,w ; ram copy !! + andi 1111110011111111b,a1 ; clear image bank bits + ori 0000000100000000b,a1 ; set bank 2 bit + move a1,@sysctrl,w + move a1,@syscopy,w ; keep a copy in ram + jruc dzp9 + +dzp4 cmpi 0,a1 + jrne dzp9 + + move @syscopy,a1,w ; ram copy !! + andi 1111110011111111b,a1 ; clear image bank bits + move a1,@sysctrl,w + move a1,@syscopy,w ; keep a copy in ram + +dzp9 move *a0,a8,l + jruc movie_run + + +zipped_pics + .word 1 +; .long MK3TITLE ; 0 = title screen + .long ULT ; 0 = title screen + + +******************************************************* +******************************************************* +******************************************************* + + +******************************* +* Run movie footage (jsrp) +* A8=* compressed picture data +* A9=Mode (0=Normal, 1=x2) +* A10=Screen * for top left of picture +* Trashes scratch, A2-A11,B2-B10 + +movie_run + clr a9 ; always normal !! + + addi xpadding*8,a10 ;+XPad offset + +;******************* + move @pageaddr,a14,l ; what page did we just plot to ?? + cmpi page0adr+xpadding,a14 + jreq p2 +; move @dpage,a14 +; jrnz p2 +;******************* + + addi page_1_address,a10 ;Start in page 1 if page 0 is being displayed +p2 + + +;**************** +; +; stream line coded (ejb) +; +; callr movie_w aitdma +mwait move b13,b13 ;Wait for DMAQ empty + jrgt mwait + move @dmactrl,a14 + jrn mwait +; +;**************** + + callr movie_parsehdr + jrnz error1 + + move b3,a14 ;Height + subk 1,a14 + movi scrn_ptch,a1 + mpys a14,a1 + add a1,a10 ;* to bottom left + + callr movie_getpal + jrz error1 + ;A4= frames + ;A6=X size + ;B3=Y size + ;B4=strtpal + movi blowline,b10 + move a9,a9 + jrz mode0 + movi blowlinex2,b10 +mode0 jsrp movie_unzip + +x0 setf 16,1,0 + setf 32,0,1 + retp + +error1 + clr a14 + move a14,@DEBUGPORT + + lockup 7 + jruc x0 + + +******************************* +* Get a movie palette +* A7= of colors +* A8=* to color data +* >A0=Color map allocated (0000-cfcf) +* Z set if no palette free +* Trashes scratch + +movie_getpal + + move a8,a0 + subk 16,a0 ;Point to colors + +;************* +; calla pal_getf + calla getfpal +;************* + + jrz x3 + + move a7,a1 + sll 4,a1 ;*16 + add a1,a8 + + move a0,b4 + addk 1,a1 ;Clr Z + +x3 rets + + + +******************************* +* Get movie info +* A8=* to compressed data +*Rets: +* >A0=!0 if error (CC) +* >A4= frames +* >A6/B9=X +* >A7= colors in palette +* >B3=Y +* Trashes scratch + +movie_parsehdr + move a8,a14 + movk 30,a0 ; retries + +;rd + move *a8+,a6 ;X size of frames + move *a8+,a1 ;Y size of frames +; movi 200,a1 + move *a8+,a4 ; of frames + move *a8+,a7 ; of colors + move a1,b3 + move a6,b9 + clr a0 + rets + + + + .sect "UNZIP" + +******************************** +* GSP Decompression routine +* +* ASSUMPTIONS: 1) There is no literal table +* 2) the size of the sliding window is 4K +* +* Needs the following Data Tables: +* CompressedDataTable will contain the following once +* it is uncompressed: +* frames (1 byte) +* colors in palette (1 byte) +* X size of frame (1 byte) +* Y Size of frame (1 byte) +* variable length palette data +* data for each frame +* +* Needs the following RAM variables: +* LengthTree 256 long words +* DistanceTree 256 long words +* MinPtrTable 256 long words (used for sort) +* RamBuffer circular buffer +* Tree layout is as follows... +* low 16 bits = Code +* next 8 bits = Bit length +* +* B reg usage... +* B0 = Ptr to Length tree +* B1 = Ptr to Distance tree +* B3 = start of line +* B4 = start palette duped to fill 16 bits +* B5 = used for outputting pal bits to DMAPAL +* B6 = temp storage in ReadTree and UncompressTree +* B7 = constant mask for pxl palette split +* B8 = DMAPAL +* B9 = Master X storage + + +******************************* +* Uncompress a tree +* A7=* to tree table +* A8=* to compressed data +* >A0=!0 if error (CC) + +UncompressTree: + + PUSH a4,a5 + + move a7,a5 ;Save start of tree + + clr a4 + PUSH a8 + ;>Determine how many codes of each bit length + setf 8,0,0 + move *a8+,a0 ; compressed bytes to describe tree - 1 + addk 1,a0 + movk >f,a3 ;Constant + clr a6 ;Total number of codes in tree +utr0 + move *a8+,a1 ;( codes - 1 << 4) | bit lngth - 1 + add a1,a4 ;Chksum + move a1,a2 + srl 4,a2 + addk 1,a2 ;number of codes of this bit length + add a2,a6 ;adjust total + and a3,a1 + addk 1,a1 ;bit length + move a1,a11 + sll 16,a11 + movy a11,a1 ;duplicate bit length for sort +utr1 + move a1,*a7+,l + dsj a2,utr1 ;fill table + + dsj a0,utr0 ;a6 now contains size of tree + + + PULL a8 ;>Recalc chksum + clr a2 + move *a8+,a0 ; compressed bytes to describe tree - 1 + addk 1,a0 +chklp move *a8+,a1 + add a1,a2 + dsj a0,chklp + + setf 16,1,0 + + cmp a2,a4 + jrne error3 ;Chksums don't match? + + +* Sort Tree by increasing Bit Length. +* The translation index is placed in the upper byte +* of the long word. + + movi minptrtbl,a0 ; for placing translation ptrs + move a6,a9 ; outer loop count ( entries in tree table) + +* Outer loop, after each pass, we have found the next minimum + +utr2 + move a5,a7 ; restore start of tree + movi 06543h,a14 ; current minimum + move a6,b6 ; inner loop count + movi 07654h,a1 ; constant + +* Inner loop, go through all values in table and find min. +* When we find it, we set it to a high value so we don't detect +* it again. + +utr3 + move *a7,a2 ; look at next bit length + cmp a14,a2 ; is it less than the last minimum + jrge nonewmin + move a2,a14 ; if yes, save new minimum + move a7,a11 ; save pointer to minimum +nonewmin + addk 32,a7 ; point to next entry + dsj b6,utr3 + +; end of inner loop: min is in a14, ptr to min is in a7 + + move a1,*a11 ; set this minimum high. + move a11,*a0+,l ; place translation ptr in MinPtrTbl. + + dsjs a9,utr2 + ;>Compute the codes + clr a11 ;Code + clr a1 ;CodeInc + clr a2 ;LastBitLength + move a6,a14 ;loop counter +utr4 + move *-a0,a7,l ;translated pointer + add a1,a11 + movb *a7(16),a3 ;bit length + cmp a3,a2 + jreq samebitlng + move a3,a2 ;set new LastBitLength + movk 16,a3 + sub a2,a3 ;16-LastBitLength + movk 1,a1 + sll a3,a1 ;CodeInc = 1 << (16-LastBitLength) +samebitlng + move a11,a5 ;copy of Code in a5 + movk 16,a9 ;reverse bit loop count +rvrsbts + sll 1,a5 ;Reverse bits of word + movy a5,a3 + srl 1,a3 + zext a5 + dsjs a9,rvrsbts + + move a3,*a7 ;store code with bits reversed + dsjs a14,utr4 + + clr a0 + +x4 PULL a4,a5 + move a0,a0 + rets + + +error3 + movk 1001b,a14 + move a14,@DEBUGPORT + + lockup 8 + movk 1,a0 ;Error! + jruc x4 + +******************************** + +SetConstants: + movi lengthtree,b0 + movi disttree,b1 +SetConstX + movi RamBuffer+RAMBUFSIZ-1,a0 ;mask for rambuf ptr + movi RamBuffer,a6 ;used for negative wraparound + movi 0c0c0h,b7 ;for blowing words of + movi dmacmap,b8 +; movi blowline,b10 + rets + +******************************* +* Initialize and run unzip loop (jsrp) +* A4= of frames +* A8=* compressed data table +* A10=Screen * for top left of picture +* B3=Y size +* B4=strt pal +* B9=X size + +movie_unzip + movi lengthtree,b0 + movi disttree,b1 + + movk 10,a5 +ltlp move b0,a7 ;Length Tree + move a8,b2 + callr UncompressTree + jrz ltok ;OK? + move b2,a8 + dsj a5,ltlp + jruc error +ltok + + movk 10,a5 +dtlp move b1,a7 ;Distance Tree + move a8,b2 + callr UncompressTree + jrz dtok ;OK? + move b2,a8 + dsj a5,dtlp + jruc error +dtok + + +debugstrt + + ;Clear top 4K of buffer to take care of initial wraparound + + movi RamBuffer+RAMBUFSIZ,a1 ;End of buffer + movi 1024,a2 ;4K + clr a3 +clrbuf + move a3,*-a1,l + dsj a2,clrbuf + + ;Do some initializing + mpyu b9,b3 + move b3,a11 ;total bytes in frame in a11 + move a11,*a13(PIXPERFRM),l + callr SetConstX + move a6,a9 ;Where to uncompress to + move a9,b3 ;first frame start + clr b5 ;pixel count for Stills only + + +lp5 mmtm a12,a4,a10 + + callr movie_waitdma + +; clr b2 +; move b2,@tick,w ; start tick = 0 + +; cmpi >c000,a11 +; jrlo pic_not_too_big +; move a11,b2 +; movi >4000,a11 +; subi >4000,b2 +; jsrp UncompressFrame +; move b2,a11 +; movk 1,a0 ; 1 tick sleep +; movi toobig3,a14 +; jruc GoToSleep +;toobig3 +; +; move a11,b2 +; movi >4000,a11 +; subi >4000,b2 +; jsrp UncompressFrame +; move b2,a11 +; movk 1,a0 ; 1 tick sleep +; movi toobig4,a14 +; jruc GoToSleep +;toobig4 move b2,a11 +; +; +;pic_not_too_big + + jsrp UncompressFrame + +; ********************************* rev1.1 change + move @f_zipabort,a14,w + jrne uncompress_ok ; yes + mmfm a12,a4,a10 + setf 16,1,0 ; word sign extend + setf 32,1,1 ; long word + retp +uncompress_ok +; ********************************* rev1.1 change + + clr a0 + move a0,@DEBUGPORT + movk 1,a0 ; 1 tick sleep + movi swappg,a14 + jruc GoToSleep + +swappg mmfm a12,a4,a10 + xori page_1_address,a10 ; Flip to other page + + setf 16,1,0 + move *a13(PIXPERFRM),a14,l ; number of pixels in a frame + add a14,a11 ; adjust by extra pixels done last time + + dsj a4,lp5 ; Loop once for each frame + + callr movie_waitdma + +x5 retp + +error lockup 9 + jruc x5 + +******************************** rev1.1 change + +coin_switch_bits .set >1c30000 ; coin switch spots ! + +******************************** rev1.1 change + + +GoToSleep + getst b2 + move a12,b6 + mmtm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + setf 16,1,0 + setf 32,0,1 + move a14,*a13(PTEMP1),l + calla prcslp + + move a12,b6 + mmfm b6,b2,b3,b4,b5,b9,b10 + move b6,a12 + + callr SetConstants + move *a13(PTEMP1),a14,l + + putst b2 + exgpc a14 ;Return + + +******************************** +* Uncompress a single frame +* A0=Address mask for circular buffer +* A8=* to compressed data +* A9=* to buffer for uncompressed bytes +* A11=How many to place before returning +* B0=*Length tree +* B1=*Distance tree +* +*Trashes: +* a1 = Distance +* a2 = ptr to leftover data if there is any +* a4 = Length +* +* ReadTree uses A2-A5,A7,A14,B6 +* Need to Preserve: B9-B10 + +UncompressFrame: + + movi >4000,b2 ; watch dog counter + + setf 16,0,1 ;Field 1 = 16 bits no sign-ext + move b4,*b8,1 ;Set pallette + +UncFr0 + setf 1,0,0 + move *a8+,a14 ; if bit = 1, read 8 bits and copy + + jrz decode_still + setf 8,0,0 + + move *a8+,*a9+ + and a0,a9 + + addk 1,b5 ; pixel count + subk 1,a11 +us1 + cmp b5,b9 ; have we filled a line yet? + jrgt us0 + + call b10 ; Blow Line Routine + +us0 + +;**************** rev1.1 change + setf 32,1,0 ; long word + move @switch+32,a14,w + setf 8,0,0 ; back 2 how it wuz + not a14 + andi coin_switch_bits,a14 ; any coin switches ?? + jrne coin_switch_abort + dec b2 + jrne dont_feed_dog + movi >4000,b2 ; watch dog counter + move b2,@watchdog,w ; feed the watchdog +dont_feed_dog +;**************** rev1.1 change + + move a11,a11 + jrgt UncFr0 + + setf 16,1,0 + setf 32,0,1 + retp + +;**************** rev1.1 change +coin_switch_abort + setf 16,1,0 + setf 32,0,1 + movk 1,a14 + move a14,@f_zipabort,w ; flag: ABORTED !!! + retp +;**************** rev1.1 change + + +decode_still: ; if bit = 0, decode from trees + setf 6,0,0 + move *a8+,a1 ; lower 6 bits of distance + + move b1,a5 ; Distance Tree in a5 + callr ReadTree ; Result in a7 + sll 6,a7 + or a7,a1 + inc a1 ; DISTANCE in a1 + sll BPP,a1 ; turn it into a pointer + + move b0,a5 ; Length Tree in a5 + callr ReadTree ; Result in a7 + + setf 8,0,0 + + cmpi 63,a7 + jrne notmaxs + move *a8+,a3 ; If length is 63, get next byte, and + + add a3,a7 ; add it to the length +notmaxs + addk 2,a7 ; add MML, LENGTH in a7 + +; We now have Length and Distance, now determine where to copy from + + move a9,a2 ; copy of current position in a2 + sub a1,a2 ; initial attempt + and a0,a2 ; handle wraparound + or a6,a2 ;copy pointer is now in a2 + + sub a7,a11 ;Adjust total pixel count + move a7,b6 + add b6,b5 ;Adjust pixel counter for this line + +copys + move *a2+,*a9+ ;>Copy + and a0,a2 + and a0,a9 + dsj a7,copys + + jruc us1 + + +******************************* +* Read compression tree +* A5=*Tree table +* A8=*Compressed data +* Field 1 = 16 bits +* >A7=Data +* +* Trashes: A2-A5,A14,B6 +* +* Must preserve: A0,A1,A6,A8-A11 + +ReadTree: + movk 1,a2 ; bits_read + setf 1,0,0 + move *a8+,a7 ; read a bit + rl 31,a7 ; rotate right one more bit + clr b6 ; result + jruc strt +lp6 + addk 1,b6 +strt move *a5+,a3,1 ; Code in a3 + move *a5+,a4,1 ; Blngth in a4 + movk 32,a14 + sub a2,a14 + rl a14,a3 ; rotate right as many bits have been read +lp2 + cmpxy a3,a7 + jrynz lp6 + + cmp a2,a4 + jreq x6 + move *a8+,a14 ; read a bit + or a14,a7 ; accumulate with other bits + inc a2 ; inc bits_read + rl 31,a7 ; rotate right one more bit + rl 31,a3 ; shift code for check of next bit + jruc lp2 + +x6 + move b6,a7 + rets ;Result returned in a7 + + + +******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits +* Trashes A1-A2,A5 + +blowline + +; setf 32,0,0 + + move a10,a2 ;* screen + + move b3,a1 ;Start of line + move b9,a5 ;X size + srl 2,a5 ;X/4 = loop counter + jrnc by4 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 +by4 +lp7 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + move *a1+,*a2+,1 ;Copy 2 pixels + and a0,a1 + dsj a5,lp7 + + +endblowline + subi scrn_ptch,a10 + move a1,b3 ;save for next frame + sub b9,b5 ;readjust pixels for next line + cmp b9,b5 ;added 6/92. if there are enough pixels + jrge nuther1 ;left to do another line, do it. + + rets + +nuther1 + jruc blowline + +******************************** +* Same as BlowLine, but blows to both screens +* Trashes A1,A3-A5 + +;blowlinelastfrm +; +; move a10,a3 ; where on screen to put +; move a3,a4 +; xori PAGE1ADR,a4 +; move b3,a1 ; start of line +; move b9,a5 ; X size +; srl 1,a5 ; X/2 = loop counter +; +;spbl1 +; move *a1+,a14,1 ; write into both screens +; move a14,*a3+,1 +; move a14,*a4+,1 ; write into both screens +; and a0,a1 +; dsjs a5,spbl1 +; +; jruc endblowline + + +******************************* +* BlowLine is used during decompression of a Still Picture to blow out +* a single line of data. Since only a single line needs to be stored at +* once, the RamBuffer can be as small as 4K. +* A0=Address mask for circular buffer +* Field 1 = 16 bits + +blowlinex2 + move a10,a2 ;* screen + move a10,a3 + addi scrn_ptch,a3 + + move b3,a1 ;start of line + move b9,a5 ;X size + + setf 8,0,0 +lp8 + move *a1+,a14 ;Get 8 bits + move a14,a4 + sll 8,a4 + or a4,a14 + move a14,*a2+,1 ;16 bits + move a14,*a3+,1 + and a0,a1 + dsjs a5,lp8 + + subi scrn_ptch*2,a10 + move a1,b3 ; save for next frame + sub b9,b5 ; readjust pixels for next line + cmp b9,b5 ; added 6/92. if there are enough pixels + jrge nuther2 ; left to do another line, do it. + + rets + +nuther2 + jruc blowlinex2 + +************************************************************************** +* * +* Wait for DMA activity to stop * +* Trashes A14 * +* * +************************************************************************** +movie_waitdma + move b13,b13 ;Wait for DMAQ empty + jrgt movie_waitdma + move @dmactrl,a14 + jrn movie_waitdma + rets + +;********************************************************************** + + + + .end + \ No newline at end of file diff --git a/VDASTUFF/VDA2FRM.EXE b/VDASTUFF/VDA2FRM.EXE new file mode 100644 index 0000000..10835f7 Binary files /dev/null and b/VDASTUFF/VDA2FRM.EXE differ diff --git a/VDASTUFF/ZIP2BIN.EXE b/VDASTUFF/ZIP2BIN.EXE new file mode 100644 index 0000000..8d53c8d Binary files /dev/null and b/VDASTUFF/ZIP2BIN.EXE differ